From ba929be27a88b573ff632c5878f984a5eb1e073f Mon Sep 17 00:00:00 2001 From: me-no-dev Date: Tue, 12 Sep 2017 09:40:52 +0300 Subject: [PATCH] Update IDF to 9a26296 --- platform.txt | 6 +- tools/esptool.py | 13 +- tools/platformio-build.py | 6 +- tools/sdk/bin/bootloader.bin | Bin 10464 -> 10576 bytes tools/sdk/bin/bootloader_qio.bin | Bin 12272 -> 12400 bytes tools/sdk/include/app_trace/esp_ota_ops.h | 12 +- tools/sdk/include/app_update/esp_ota_ops.h | 12 +- tools/sdk/include/bluedroid/alarm.h | 2 + tools/sdk/include/bluedroid/allocator.h | 15 +- tools/sdk/include/bluedroid/avct_int.h | 4 +- tools/sdk/include/bluedroid/avdt_int.h | 12 +- tools/sdk/include/bluedroid/bt_defs.h | 34 +- tools/sdk/include/bluedroid/bt_target.h | 319 ++++------- tools/sdk/include/bluedroid/bta_api.h | 8 +- tools/sdk/include/bluedroid/bta_av_co.h | 2 +- tools/sdk/include/bluedroid/bta_gatt_api.h | 8 +- tools/sdk/include/bluedroid/bta_gatt_common.h | 36 ++ tools/sdk/include/bluedroid/bta_gattc_int.h | 5 +- tools/sdk/include/bluedroid/bta_gatts_int.h | 3 +- tools/sdk/include/bluedroid/bta_sys.h | 2 +- tools/sdk/include/bluedroid/btc_ble_storage.h | 18 +- tools/sdk/include/bluedroid/btc_config.h | 5 +- tools/sdk/include/bluedroid/btc_gap_ble.h | 23 +- tools/sdk/include/bluedroid/btc_gattc.h | 1 - tools/sdk/include/bluedroid/btc_gatts.h | 2 +- tools/sdk/include/bluedroid/btc_main.h | 9 + tools/sdk/include/bluedroid/btc_media.h | 9 +- tools/sdk/include/bluedroid/bte.h | 1 - tools/sdk/include/bluedroid/btm_api.h | 7 +- tools/sdk/include/bluedroid/btm_ble_api.h | 21 +- tools/sdk/include/bluedroid/btm_ble_int.h | 6 +- tools/sdk/include/bluedroid/btm_int.h | 15 +- tools/sdk/include/bluedroid/btu.h | 2 +- tools/sdk/include/bluedroid/esp_avrc_api.h | 2 +- tools/sdk/include/bluedroid/esp_bt_defs.h | 8 + tools/sdk/include/bluedroid/esp_gap_ble_api.h | 108 +++- .../include/bluedroid/esp_gatt_common_api.h | 46 ++ tools/sdk/include/bluedroid/esp_gattc_api.h | 16 +- tools/sdk/include/bluedroid/esp_gatts_api.h | 4 +- tools/sdk/include/bluedroid/fixed_queue.h | 41 +- tools/sdk/include/bluedroid/future.h | 3 +- tools/sdk/include/bluedroid/gap_int.h | 8 +- tools/sdk/include/bluedroid/gatt_api.h | 2 +- tools/sdk/include/bluedroid/gatt_int.h | 26 +- tools/sdk/include/bluedroid/gki.h | 132 ----- tools/sdk/include/bluedroid/gki_common.h | 65 --- tools/sdk/include/bluedroid/gki_target.h | 244 -------- tools/sdk/include/bluedroid/hci_layer.h | 3 - tools/sdk/include/bluedroid/l2c_api.h | 8 +- tools/sdk/include/bluedroid/l2c_int.h | 45 +- tools/sdk/include/bluedroid/l2cdefs.h | 8 +- tools/sdk/include/bluedroid/list.h | 8 +- tools/sdk/include/bluedroid/mutex.h | 53 ++ tools/sdk/include/bluedroid/osi.h | 16 +- tools/sdk/include/bluedroid/osi_arch.h | 45 -- tools/sdk/include/bluedroid/port_ext.h | 1 - tools/sdk/include/bluedroid/port_int.h | 5 +- tools/sdk/include/bluedroid/sdpint.h | 1 + .../bluedroid/{gki_int.h => semaphore.h} | 33 +- tools/sdk/include/bluedroid/thread.h | 37 +- tools/sdk/include/bluedroid/utl.h | 2 +- .../include/bootloader_support/esp_efuse.h | 10 + tools/sdk/include/config/sdkconfig.h | 67 ++- .../sdk/include/console/argtable3/argtable3.h | 306 ++++++++++ tools/sdk/include/console/esp_console.h | 181 ++++++ .../sdk/include/console/linenoise/linenoise.h | 76 +++ tools/sdk/include/driver/driver/adc.h | 47 +- tools/sdk/include/driver/driver/dac.h | 1 + tools/sdk/include/driver/driver/gpio.h | 2 +- tools/sdk/include/driver/driver/periph_ctrl.h | 5 + tools/sdk/include/driver/driver/rmt.h | 12 +- tools/sdk/include/driver/driver/rtc_io.h | 1 + tools/sdk/include/driver/driver/sdmmc_defs.h | 64 ++- tools/sdk/include/driver/driver/sdmmc_types.h | 7 + tools/sdk/include/driver/driver/spi_common.h | 24 +- tools/sdk/include/driver/driver/spi_master.h | 26 +- tools/sdk/include/driver/driver/touch_pad.h | 536 ++++++++++++++---- tools/sdk/include/driver/driver/uart.h | 1 + tools/sdk/include/esp32/esp_clk.h | 8 + tools/sdk/include/esp32/esp_deep_sleep.h | 316 ++--------- tools/sdk/include/esp32/esp_deepsleep.h | 4 +- tools/sdk/include/esp32/esp_dport_access.h | 5 +- tools/sdk/include/esp32/esp_event.h | 15 +- tools/sdk/include/esp32/esp_intr_alloc.h | 16 +- tools/sdk/include/esp32/esp_sleep.h | 301 ++++++++++ tools/sdk/include/esp32/esp_spiram.h | 61 ++ tools/sdk/include/esp32/esp_system.h | 11 +- tools/sdk/include/esp32/esp_task.h | 2 + tools/sdk/include/esp32/esp_wifi.h | 17 +- tools/sdk/include/esp32/esp_wifi_internal.h | 20 + tools/sdk/include/esp32/hwcrypto/aes.h | 26 +- tools/sdk/include/esp32/rom/uart.h | 2 +- tools/sdk/include/esp_adc_cal/esp_adc_cal.h | 153 +++++ tools/sdk/include/ethernet/esp_eth.h | 18 + .../sdk/include/freertos/freertos/FreeRTOS.h | 19 +- .../freertos/freertos/FreeRTOSConfig.h | 6 - .../sdk/include/freertos/freertos/portable.h | 14 +- .../sdk/include/freertos/freertos/portmacro.h | 49 +- .../freertos/freertos/xtensa_context.h | 10 +- tools/sdk/include/heap/esp_ota_ops.h | 12 +- tools/sdk/include/log/esp_log.h | 16 + tools/sdk/include/lwip/arch/sys_arch.h | 1 - tools/sdk/include/lwip/lwipopts.h | 8 +- tools/sdk/include/lwip/port/arch/sys_arch.h | 1 - tools/sdk/include/lwip/port/lwipopts.h | 8 +- tools/sdk/include/mbedtls/mbedtls/aes.h | 58 +- tools/sdk/include/mbedtls/mbedtls/bignum.h | 108 ++-- .../include/mbedtls/mbedtls/check_config.h | 82 +++ tools/sdk/include/mbedtls/mbedtls/cipher.h | 10 + tools/sdk/include/mbedtls/mbedtls/cmac.h | 170 ++++++ .../sdk/include/mbedtls/mbedtls/compat-1.3.h | 113 +--- tools/sdk/include/mbedtls/mbedtls/config.h | 246 ++++++-- tools/sdk/include/mbedtls/mbedtls/ecdsa.h | 26 +- tools/sdk/include/mbedtls/mbedtls/ecjpake.h | 2 +- tools/sdk/include/mbedtls/mbedtls/ecp.h | 21 +- .../include/mbedtls/mbedtls/ecp_internal.h | 292 ++++++++++ tools/sdk/include/mbedtls/mbedtls/entropy.h | 20 + .../include/mbedtls/mbedtls/entropy_poll.h | 2 + tools/sdk/include/mbedtls/mbedtls/error.h | 2 +- tools/sdk/include/mbedtls/mbedtls/gcm.h | 4 +- tools/sdk/include/mbedtls/mbedtls/md.h | 7 +- tools/sdk/include/mbedtls/mbedtls/net.h | 214 +------ .../sdk/include/mbedtls/mbedtls/net_sockets.h | 225 ++++++++ tools/sdk/include/mbedtls/mbedtls/platform.h | 85 +-- .../include/mbedtls/mbedtls/platform_time.h | 81 +++ tools/sdk/include/mbedtls/mbedtls/rsa.h | 40 +- tools/sdk/include/mbedtls/mbedtls/ssl.h | 57 +- .../mbedtls/mbedtls/ssl_ciphersuites.h | 166 +++++- .../include/mbedtls/mbedtls/ssl_internal.h | 133 ++++- tools/sdk/include/mbedtls/mbedtls/version.h | 8 +- tools/sdk/include/mbedtls/mbedtls/x509.h | 13 +- tools/sdk/include/mbedtls/mbedtls/x509_crt.h | 25 +- tools/sdk/include/mbedtls/mbedtls/x509_csr.h | 2 +- tools/sdk/include/mbedtls_port/aes_alt.h | 4 +- .../sdk/include/mbedtls_port/mbedtls/config.h | 9 + .../include/mbedtls_port/mbedtls/esp_config.h | 127 +++++ tools/sdk/include/newlib/esp_newlib.h | 6 +- tools/sdk/include/newlib/sys/features.h | 6 + tools/sdk/include/newlib/sys/sched.h | 2 + tools/sdk/include/newlib/sys/time.h | 2 +- tools/sdk/include/nvs_flash/nvs.h | 37 +- tools/sdk/include/nvs_flash/nvs_flash.h | 41 +- tools/sdk/include/soc/soc/adc_channel.h | 72 +++ tools/sdk/include/soc/soc/apb_ctrl_struct.h | 10 + tools/sdk/include/soc/soc/clkout_channel.h | 26 + tools/sdk/include/soc/soc/dac_channel.h | 24 + tools/sdk/include/soc/soc/dport_access.h | 21 +- tools/sdk/include/soc/soc/dport_reg.h | 2 + tools/sdk/include/soc/soc/frc_timer_reg.h | 9 +- tools/sdk/include/soc/soc/gpio_sd_struct.h | 10 + tools/sdk/include/soc/soc/gpio_struct.h | 10 + tools/sdk/include/soc/soc/hwcrypto_reg.h | 8 + tools/sdk/include/soc/soc/i2c_struct.h | 10 + tools/sdk/include/soc/soc/i2s_struct.h | 9 + tools/sdk/include/soc/soc/ledc_struct.h | 10 + tools/sdk/include/soc/soc/mcpwm_struct.h | 10 + tools/sdk/include/soc/soc/pcnt_struct.h | 10 + tools/sdk/include/soc/soc/rmt_struct.h | 9 + tools/sdk/include/soc/soc/rtc.h | 5 +- tools/sdk/include/soc/soc/rtc_cntl_struct.h | 11 + tools/sdk/include/soc/soc/rtc_gpio_channel.h | 73 +++ tools/sdk/include/soc/soc/rtc_io_struct.h | 11 + tools/sdk/include/soc/soc/sdmmc_struct.h | 8 +- tools/sdk/include/soc/soc/sens_struct.h | 326 +++++++++++ tools/sdk/include/soc/soc/soc.h | 12 +- tools/sdk/include/soc/soc/spi_struct.h | 14 +- tools/sdk/include/soc/soc/syscon_struct.h | 9 + .../sdk/include/soc/soc/timer_group_struct.h | 10 + tools/sdk/include/soc/soc/touch_channel.h | 49 ++ tools/sdk/include/soc/soc/uart_channel.h | 61 ++ tools/sdk/include/soc/soc/uart_struct.h | 10 + tools/sdk/include/soc/soc/uhci_struct.h | 10 + tools/sdk/include/spiffs/esp_spiffs.h | 94 +++ tools/sdk/include/spiffs/spiffs_config.h | 313 ++++++++++ .../sdk/include/tcpip_adapter/tcpip_adapter.h | 79 ++- tools/sdk/include/vfs/esp_vfs.h | 5 + tools/sdk/include/vfs/esp_vfs_dev.h | 58 +- tools/sdk/ld/esp32.common.ld | 9 +- tools/sdk/ld/esp32.ld | 5 + tools/sdk/ld/esp32.peripherals.ld | 3 + tools/sdk/ld/esp32.rom.ld | 163 ------ .../ld/esp32.rom.spiram_incompatible_fns.ld | 167 ++++++ tools/sdk/ld/esp32_out.ld | 1 + tools/sdk/lib/libapp_trace.a | Bin 19544 -> 18264 bytes tools/sdk/lib/libapp_update.a | Bin 50136 -> 52388 bytes tools/sdk/lib/libbootloader_support.a | Bin 150206 -> 152286 bytes tools/sdk/lib/libbt.a | Bin 11716354 -> 11762286 bytes tools/sdk/lib/libbtdm_app.a | Bin 142966 -> 143616 bytes tools/sdk/lib/libcoap.a | Bin 450954 -> 451330 bytes tools/sdk/lib/libcoexist.a | Bin 14798 -> 14802 bytes tools/sdk/lib/libconsole.a | Bin 0 -> 394388 bytes tools/sdk/lib/libcore.a | Bin 23786 -> 10538 bytes tools/sdk/lib/libcxx.a | Bin 50148 -> 50180 bytes tools/sdk/lib/libdriver.a | Bin 1732056 -> 1850010 bytes tools/sdk/lib/libesp32.a | Bin 538528 -> 706356 bytes tools/sdk/lib/libesp_adc_cal.a | Bin 0 -> 16902 bytes tools/sdk/lib/libethernet.a | Bin 145024 -> 147586 bytes tools/sdk/lib/libexpat.a | Bin 1239676 -> 1239676 bytes tools/sdk/lib/libfatfs.a | Bin 393940 -> 394728 bytes tools/sdk/lib/libfreertos.a | Bin 531450 -> 554698 bytes tools/sdk/lib/libheap.a | Bin 129284 -> 186988 bytes tools/sdk/lib/libjsmn.a | Bin 21578 -> 21578 bytes tools/sdk/lib/libjson.a | Bin 208230 -> 208230 bytes tools/sdk/lib/liblog.a | Bin 24890 -> 25618 bytes tools/sdk/lib/liblwip.a | Bin 2020312 -> 2022512 bytes tools/sdk/lib/libmbedtls.a | Bin 3617198 -> 3148706 bytes tools/sdk/lib/libmdns.a | Bin 199480 -> 203656 bytes tools/sdk/lib/libmicro-ecc.a | Bin 154324 -> 154324 bytes tools/sdk/lib/libnet80211.a | Bin 731426 -> 735444 bytes tools/sdk/lib/libnewlib.a | Bin 82666 -> 83896 bytes tools/sdk/lib/libnghttp.a | Bin 1551498 -> 1552422 bytes tools/sdk/lib/libnvs_flash.a | Bin 619594 -> 631074 bytes tools/sdk/lib/libopenssl.a | Bin 268436 -> 267760 bytes tools/sdk/lib/libphy.a | Bin 164978 -> 164850 bytes tools/sdk/lib/libpp.a | Bin 484674 -> 490434 bytes tools/sdk/lib/libpthread.a | Bin 0 -> 65354 bytes tools/sdk/lib/librtc.a | Bin 162012 -> 90852 bytes tools/sdk/lib/libsdmmc.a | Bin 89926 -> 106078 bytes tools/sdk/lib/libsmartconfig.a | Bin 118154 -> 118146 bytes tools/sdk/lib/libsoc.a | Bin 112216 -> 114388 bytes tools/sdk/lib/libspi_flash.a | Bin 188188 -> 188048 bytes tools/sdk/lib/libspiffs.a | Bin 0 -> 555208 bytes tools/sdk/lib/libtcpip_adapter.a | Bin 98098 -> 118420 bytes tools/sdk/lib/libulp.a | Bin 36790 -> 36790 bytes tools/sdk/lib/libvfs.a | Bin 92250 -> 113310 bytes tools/sdk/lib/libwear_levelling.a | Bin 208978 -> 208978 bytes tools/sdk/lib/libwpa.a | Bin 153532 -> 153760 bytes tools/sdk/lib/libwpa2.a | Bin 434626 -> 434786 bytes tools/sdk/lib/libwpa_supplicant.a | Bin 549414 -> 549934 bytes tools/sdk/lib/libwps.a | Bin 345982 -> 346374 bytes tools/sdk/lib/libxtensa-debug-module.a | Bin 12082 -> 12082 bytes tools/sdk/sdkconfig | 146 ++++- 232 files changed, 6316 insertions(+), 2105 deletions(-) create mode 100644 tools/sdk/include/bluedroid/bta_gatt_common.h create mode 100644 tools/sdk/include/bluedroid/esp_gatt_common_api.h delete mode 100644 tools/sdk/include/bluedroid/gki.h delete mode 100644 tools/sdk/include/bluedroid/gki_common.h delete mode 100644 tools/sdk/include/bluedroid/gki_target.h create mode 100644 tools/sdk/include/bluedroid/mutex.h delete mode 100644 tools/sdk/include/bluedroid/osi_arch.h rename tools/sdk/include/bluedroid/{gki_int.h => semaphore.h} (54%) create mode 100644 tools/sdk/include/console/argtable3/argtable3.h create mode 100644 tools/sdk/include/console/esp_console.h create mode 100644 tools/sdk/include/console/linenoise/linenoise.h create mode 100644 tools/sdk/include/esp32/esp_sleep.h create mode 100644 tools/sdk/include/esp32/esp_spiram.h create mode 100644 tools/sdk/include/esp_adc_cal/esp_adc_cal.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/cmac.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/ecp_internal.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/net_sockets.h create mode 100644 tools/sdk/include/mbedtls/mbedtls/platform_time.h create mode 100644 tools/sdk/include/mbedtls_port/mbedtls/config.h create mode 100644 tools/sdk/include/soc/soc/adc_channel.h create mode 100644 tools/sdk/include/soc/soc/clkout_channel.h create mode 100644 tools/sdk/include/soc/soc/dac_channel.h create mode 100644 tools/sdk/include/soc/soc/rtc_gpio_channel.h create mode 100644 tools/sdk/include/soc/soc/sens_struct.h create mode 100644 tools/sdk/include/soc/soc/touch_channel.h create mode 100644 tools/sdk/include/soc/soc/uart_channel.h create mode 100644 tools/sdk/include/spiffs/esp_spiffs.h create mode 100755 tools/sdk/include/spiffs/spiffs_config.h create mode 100644 tools/sdk/ld/esp32.rom.spiram_incompatible_fns.ld create mode 100644 tools/sdk/lib/libconsole.a create mode 100644 tools/sdk/lib/libesp_adc_cal.a mode change 100644 => 100755 tools/sdk/lib/libphy.a create mode 100644 tools/sdk/lib/libpthread.a create mode 100644 tools/sdk/lib/libspiffs.a diff --git a/platform.txt b/platform.txt index e9ee9375..5fdc6e2b 100644 --- a/platform.txt +++ b/platform.txt @@ -21,7 +21,7 @@ compiler.warning_flags.all=-Wall -Werror=all -Wextra compiler.path={runtime.tools.xtensa-esp32-elf-gcc.path}/bin/ compiler.sdk.path={runtime.platform.path}/tools/sdk -compiler.cpreprocessor.flags=-DESP_PLATFORM -DMBEDTLS_CONFIG_FILE="mbedtls/esp_config.h" -DHAVE_CONFIG_H "-I{compiler.sdk.path}/include/config" "-I{compiler.sdk.path}/include/bluedroid" "-I{compiler.sdk.path}/include/app_trace" "-I{compiler.sdk.path}/include/app_update" "-I{compiler.sdk.path}/include/bootloader_support" "-I{compiler.sdk.path}/include/bt" "-I{compiler.sdk.path}/include/driver" "-I{compiler.sdk.path}/include/esp32" "-I{compiler.sdk.path}/include/ethernet" "-I{compiler.sdk.path}/include/fatfs" "-I{compiler.sdk.path}/include/freertos" "-I{compiler.sdk.path}/include/heap" "-I{compiler.sdk.path}/include/jsmn" "-I{compiler.sdk.path}/include/log" "-I{compiler.sdk.path}/include/mdns" "-I{compiler.sdk.path}/include/mbedtls" "-I{compiler.sdk.path}/include/mbedtls_port" "-I{compiler.sdk.path}/include/newlib" "-I{compiler.sdk.path}/include/nvs_flash" "-I{compiler.sdk.path}/include/openssl" "-I{compiler.sdk.path}/include/soc" "-I{compiler.sdk.path}/include/spi_flash" "-I{compiler.sdk.path}/include/sdmmc" "-I{compiler.sdk.path}/include/tcpip_adapter" "-I{compiler.sdk.path}/include/ulp" "-I{compiler.sdk.path}/include/vfs" "-I{compiler.sdk.path}/include/wear_levelling" "-I{compiler.sdk.path}/include/xtensa-debug-module" "-I{compiler.sdk.path}/include/newlib" "-I{compiler.sdk.path}/include/coap" "-I{compiler.sdk.path}/include/wpa_supplicant" "-I{compiler.sdk.path}/include/expat" "-I{compiler.sdk.path}/include/json" "-I{compiler.sdk.path}/include/nghttp" "-I{compiler.sdk.path}/include/lwip" +compiler.cpreprocessor.flags=-DESP_PLATFORM -DMBEDTLS_CONFIG_FILE="mbedtls/esp_config.h" -DHAVE_CONFIG_H "-I{compiler.sdk.path}/include/config" "-I{compiler.sdk.path}/include/bluedroid" "-I{compiler.sdk.path}/include/app_trace" "-I{compiler.sdk.path}/include/app_update" "-I{compiler.sdk.path}/include/bootloader_support" "-I{compiler.sdk.path}/include/bt" "-I{compiler.sdk.path}/include/driver" "-I{compiler.sdk.path}/include/esp32" "-I{compiler.sdk.path}/include/esp_adc_cal" "-I{compiler.sdk.path}/include/ethernet" "-I{compiler.sdk.path}/include/fatfs" "-I{compiler.sdk.path}/include/freertos" "-I{compiler.sdk.path}/include/heap" "-I{compiler.sdk.path}/include/jsmn" "-I{compiler.sdk.path}/include/log" "-I{compiler.sdk.path}/include/mdns" "-I{compiler.sdk.path}/include/mbedtls" "-I{compiler.sdk.path}/include/mbedtls_port" "-I{compiler.sdk.path}/include/newlib" "-I{compiler.sdk.path}/include/nvs_flash" "-I{compiler.sdk.path}/include/openssl" "-I{compiler.sdk.path}/include/soc" "-I{compiler.sdk.path}/include/spi_flash" "-I{compiler.sdk.path}/include/sdmmc" "-I{compiler.sdk.path}/include/spiffs" "-I{compiler.sdk.path}/include/tcpip_adapter" "-I{compiler.sdk.path}/include/ulp" "-I{compiler.sdk.path}/include/vfs" "-I{compiler.sdk.path}/include/wear_levelling" "-I{compiler.sdk.path}/include/xtensa-debug-module" "-I{compiler.sdk.path}/include/console" "-I{compiler.sdk.path}/include/newlib" "-I{compiler.sdk.path}/include/coap" "-I{compiler.sdk.path}/include/wpa_supplicant" "-I{compiler.sdk.path}/include/expat" "-I{compiler.sdk.path}/include/json" "-I{compiler.sdk.path}/include/nghttp" "-I{compiler.sdk.path}/include/lwip" compiler.c.cmd=xtensa-esp32-elf-gcc compiler.c.flags=-std=gnu99 -Os -g3 -ffunction-sections -fdata-sections -fstrict-volatile-bitfields -mlongcalls -nostdlib -Wpointer-arith {compiler.warning_flags} -Wno-error=unused-function -Wno-error=unused-but-set-variable -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -Wno-old-style-declaration -MMD -c @@ -33,8 +33,8 @@ compiler.S.cmd=xtensa-esp32-elf-gcc compiler.S.flags=-c -g3 -x assembler-with-cpp -MMD -mlongcalls compiler.c.elf.cmd=xtensa-esp32-elf-gcc -compiler.c.elf.flags=-nostdlib "-L{compiler.sdk.path}/lib" "-L{compiler.sdk.path}/ld" -T esp32_out.ld -T esp32.common.ld -T esp32.rom.ld -T esp32.peripherals.ld -u ld_include_panic_highint_hdl -u call_user_start_cpu0 -Wl,--gc-sections -Wl,-static -Wl,--undefined=uxTopUsedPriority -compiler.c.elf.libs=-lgcc -lstdc++ -lapp_trace -lapp_update -lbootloader_support -lbt -lbtdm_app -lc -lc_nano -lcoap -lcoexist -lcore -lcxx -ldriver -lesp32 -lethernet -lexpat -lfatfs -lfreertos -lhal -lheap -ljsmn -ljson -llog -llwip -lm -lmbedtls -lmdns -lmicro-ecc -lnet80211 -lnewlib -lnghttp -lnvs_flash -lopenssl -lphy -lpp -lrtc -lsdmmc -lsmartconfig -lsoc -lspi_flash -ltcpip_adapter -lulp -lvfs -lwear_levelling -lwpa -lwpa2 -lwpa_supplicant -lwps -lxtensa-debug-module +compiler.c.elf.flags=-nostdlib "-L{compiler.sdk.path}/lib" "-L{compiler.sdk.path}/ld" -T esp32_out.ld -T esp32.common.ld -T esp32.rom.ld -T esp32.peripherals.ld -T esp32.rom.spiram_incompatible_fns.ld -u ld_include_panic_highint_hdl -u call_user_start_cpu0 -Wl,--gc-sections -Wl,-static -Wl,--undefined=uxTopUsedPriority +compiler.c.elf.libs=-lgcc -lstdc++ -lapp_trace -lapp_update -lbootloader_support -lbt -lbtdm_app -lc -lc_nano -lcoap -lcoexist -lconsole -lcore -lcxx -ldriver -lesp32 -lesp_adc_cal -lethernet -lexpat -lfatfs -lfreertos -lhal -lheap -ljsmn -ljson -llog -llwip -lm -lmbedtls -lmdns -lmicro-ecc -lnet80211 -lnewlib -lnghttp -lnvs_flash -lopenssl -lphy -lpp -lpthread -lrtc -lsdmmc -lsmartconfig -lsoc -lspi_flash -lspiffs -ltcpip_adapter -lulp -lvfs -lwear_levelling -lwpa -lwpa2 -lwpa_supplicant -lwps -lxtensa-debug-module compiler.as.cmd=xtensa-esp32-elf-as diff --git a/tools/esptool.py b/tools/esptool.py index 86e5ab19..c65c6bfa 100755 --- a/tools/esptool.py +++ b/tools/esptool.py @@ -32,7 +32,7 @@ import shlex import copy import io -__version__ = "2.1-beta1" +__version__ = "2.1" MAX_UINT32 = 0xffffffff MAX_UINT24 = 0xffffff @@ -1315,7 +1315,7 @@ class ESP32FirmwareImage(BaseFirmwareImage): if self.append_digest: end = load_file.tell() - self.stored_digest = load_file.read(16) + self.stored_digest = load_file.read(32) load_file.seek(start) calc_digest = hashlib.sha256() calc_digest.update(load_file.read(end - start)) @@ -1864,6 +1864,15 @@ def image_info(args): calc_checksum = image.calculate_checksum() print('Checksum: %02x (%s)' % (image.checksum, 'valid' if image.checksum == calc_checksum else 'invalid - calculated %02x' % calc_checksum)) + try: + digest_msg = 'Not appended' + if image.append_digest: + is_valid = image.stored_digest == image.calc_digest + digest_msg = "%s (%s)" % (hexify(image.calc_digest).lower(), + "valid" if is_valid else "invalid") + print('Validation Hash: %s' % digest_msg) + except AttributeError: + pass # ESP8266 image has no append_digest field def make_image(args): diff --git a/tools/platformio-build.py b/tools/platformio-build.py index 21174a51..5f9cc99f 100644 --- a/tools/platformio-build.py +++ b/tools/platformio-build.py @@ -57,6 +57,7 @@ env.Prepend( join(FRAMEWORK_DIR, "tools", "sdk", "include", "bt"), join(FRAMEWORK_DIR, "tools", "sdk", "include", "driver"), join(FRAMEWORK_DIR, "tools", "sdk", "include", "esp32"), + join(FRAMEWORK_DIR, "tools", "sdk", "include", "esp_adc_cal"), join(FRAMEWORK_DIR, "tools", "sdk", "include", "ethernet"), join(FRAMEWORK_DIR, "tools", "sdk", "include", "fatfs"), join(FRAMEWORK_DIR, "tools", "sdk", "include", "freertos"), @@ -72,11 +73,13 @@ env.Prepend( join(FRAMEWORK_DIR, "tools", "sdk", "include", "soc"), join(FRAMEWORK_DIR, "tools", "sdk", "include", "spi_flash"), join(FRAMEWORK_DIR, "tools", "sdk", "include", "sdmmc"), + join(FRAMEWORK_DIR, "tools", "sdk", "include", "spiffs"), join(FRAMEWORK_DIR, "tools", "sdk", "include", "tcpip_adapter"), join(FRAMEWORK_DIR, "tools", "sdk", "include", "ulp"), join(FRAMEWORK_DIR, "tools", "sdk", "include", "vfs"), join(FRAMEWORK_DIR, "tools", "sdk", "include", "wear_levelling"), join(FRAMEWORK_DIR, "tools", "sdk", "include", "xtensa-debug-module"), + join(FRAMEWORK_DIR, "tools", "sdk", "include", "console"), join(FRAMEWORK_DIR, "tools", "sdk", "include", "newlib"), join(FRAMEWORK_DIR, "tools", "sdk", "include", "coap"), join(FRAMEWORK_DIR, "tools", "sdk", "include", "wpa_supplicant"), @@ -91,7 +94,7 @@ env.Prepend( join(FRAMEWORK_DIR, "tools", "sdk", "ld") ], LIBS=[ - "gcc", "stdc++", "app_trace", "app_update", "bootloader_support", "bt", "btdm_app", "c", "c_nano", "coap", "coexist", "core", "cxx", "driver", "esp32", "ethernet", "expat", "fatfs", "freertos", "hal", "heap", "jsmn", "json", "log", "lwip", "m", "mbedtls", "mdns", "micro-ecc", "net80211", "newlib", "nghttp", "nvs_flash", "openssl", "phy", "pp", "rtc", "sdmmc", "smartconfig", "soc", "spi_flash", "tcpip_adapter", "ulp", "vfs", "wear_levelling", "wpa", "wpa2", "wpa_supplicant", "wps", "xtensa-debug-module" + "gcc", "stdc++", "app_trace", "app_update", "bootloader_support", "bt", "btdm_app", "c", "c_nano", "coap", "coexist", "console", "core", "cxx", "driver", "esp32", "esp_adc_cal", "ethernet", "expat", "fatfs", "freertos", "hal", "heap", "jsmn", "json", "log", "lwip", "m", "mbedtls", "mdns", "micro-ecc", "net80211", "newlib", "nghttp", "nvs_flash", "openssl", "phy", "pp", "pthread", "rtc", "sdmmc", "smartconfig", "soc", "spi_flash", "spiffs", "tcpip_adapter", "ulp", "vfs", "wear_levelling", "wpa", "wpa2", "wpa_supplicant", "wps", "xtensa-debug-module" ], UPLOADERFLAGS=[ @@ -110,6 +113,7 @@ env.Append( "-T", "esp32.common.ld", "-T", "esp32.rom.ld", "-T", "esp32.peripherals.ld", + "-T", "esp32.rom.spiram_incompatible_fns.ld", "-u", "ld_include_panic_highint_hdl" ], diff --git a/tools/sdk/bin/bootloader.bin b/tools/sdk/bin/bootloader.bin index cba6381993a01031247f0c549871a4707ac0b77a..e4e682bc0bca7b5dce66b0e04ba47fa520c0f079 100644 GIT binary patch delta 5884 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 nESTN%?}+}>1d)~+-qz9u=T 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 hCoGWK(^q$MUY1{p-E^)u`>v`MX@x%4K)A& delta 7258 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 o@Gp1Sjf|4toSw6ADKP9;-sTu -//#include +#include #include "sdkconfig.h" typedef void *(*alloc_fn)(size_t size); @@ -52,7 +52,7 @@ void osi_mem_dbg_show(void); ({ \ void *p; \ \ - p = calloc(1, (size)); \ + p = malloc((size)); \ osi_mem_dbg_record(p, size, __func__, __LINE__); \ (void *)p; \ }) @@ -67,14 +67,15 @@ void osi_mem_dbg_show(void); }) #define osi_free(ptr) \ -({ \ - osi_mem_dbg_clean(ptr, __func__, __LINE__); \ - free((ptr)); \ -}) +do { \ + void *tmp_point = (void *)(ptr); \ + osi_mem_dbg_clean(tmp_point, __func__, __LINE__); \ + free(tmp_point); \ +} while (0) #else -#define osi_malloc(size) calloc(1, (size)) +#define osi_malloc(size) malloc((size)) #define osi_calloc(size) calloc(1, (size)) #define osi_free(p) free((p)) diff --git a/tools/sdk/include/bluedroid/avct_int.h b/tools/sdk/include/bluedroid/avct_int.h index c922fe11..f70f516c 100644 --- a/tools/sdk/include/bluedroid/avct_int.h +++ b/tools/sdk/include/bluedroid/avct_int.h @@ -24,10 +24,10 @@ #ifndef AVCT_INT_H #define AVCT_INT_H -#include "gki.h" #include "avct_api.h" #include "avct_defs.h" #include "l2c_api.h" +#include "fixed_queue.h" /***************************************************************************** ** constants @@ -81,7 +81,7 @@ typedef struct { BT_HDR *p_rx_msg; /* Message being reassembled */ UINT16 conflict_lcid; /* L2CAP channel LCID */ BD_ADDR peer_addr; /* BD address of peer */ - BUFFER_Q tx_q; /* Transmit data buffer queue */ + fixed_queue_t *tx_q; /* Transmit data buffer queue */ BOOLEAN cong; /* TRUE, if congested */ } tAVCT_LCB; diff --git a/tools/sdk/include/bluedroid/avdt_int.h b/tools/sdk/include/bluedroid/avdt_int.h index 5050f066..6555152a 100644 --- a/tools/sdk/include/bluedroid/avdt_int.h +++ b/tools/sdk/include/bluedroid/avdt_int.h @@ -24,12 +24,12 @@ #ifndef AVDT_INT_H #define AVDT_INT_H -#include "gki.h" #include "avdt_api.h" #include "avdtc_api.h" #include "avdt_defs.h" #include "l2c_api.h" #include "btm_api.h" +#include "fixed_queue.h" #if (AVRC_INCLUDED == TRUE) @@ -425,8 +425,8 @@ typedef union { typedef struct { BD_ADDR peer_addr; /* BD address of peer */ TIMER_LIST_ENT timer_entry; /* CCB timer list entry */ - BUFFER_Q cmd_q; /* Queue for outgoing command messages */ - BUFFER_Q rsp_q; /* Queue for outgoing response and reject messages */ + fixed_queue_t *cmd_q; /* Queue for outgoing command messages */ + fixed_queue_t *rsp_q; /* Queue for outgoing response and reject messages */ tAVDT_CTRL_CBACK *proc_cback; /* Procedure callback function */ tAVDT_CTRL_CBACK *p_conn_cback; /* Connection/disconnection callback function */ void *p_proc_data; /* Pointer to data storage for procedure */ @@ -453,7 +453,7 @@ typedef struct { BT_HDR *p_buf; UINT32 time_stamp; #if AVDT_MULTIPLEXING == TRUE - BUFFER_Q frag_q; /* Queue for outgoing media fragments. p_buf should be 0 */ + fixed_queue_t *frag_q; /* Queue for outgoing media fragments. p_buf should be 0 */ UINT8 *p_data; UINT32 data_len; #endif @@ -500,7 +500,7 @@ typedef struct { BOOLEAN cong; /* Whether media transport channel is congested */ UINT8 close_code; /* Error code received in close response */ #if AVDT_MULTIPLEXING == TRUE - BUFFER_Q frag_q; /* Queue for outgoing media fragments */ + fixed_queue_t *frag_q; /* Queue for outgoing media fragments */ UINT32 frag_off; /* length of already received media fragments */ UINT32 frag_org_len; /* original length before fragmentation of receiving media packet */ UINT8 *p_next_frag; /* next fragment to send */ @@ -673,7 +673,7 @@ extern void avdt_scb_chk_snd_pkt(tAVDT_SCB *p_scb, tAVDT_SCB_EVT *p_data); extern void avdt_scb_clr_pkt(tAVDT_SCB *p_scb, tAVDT_SCB_EVT *p_data); extern void avdt_scb_tc_timer(tAVDT_SCB *p_scb, tAVDT_SCB_EVT *p_data); extern void avdt_scb_clr_vars(tAVDT_SCB *p_scb, tAVDT_SCB_EVT *p_data); -extern void avdt_scb_queue_frags(tAVDT_SCB *p_scb, UINT8 **pp_data, UINT32 *p_data_len, BUFFER_Q *pq); +extern void avdt_scb_queue_frags(tAVDT_SCB *p_scb, UINT8 **pp_data, UINT32 *p_data_len, fixed_queue_t *pq); /* msg function declarations */ extern BOOLEAN avdt_msg_send(tAVDT_CCB *p_ccb, BT_HDR *p_msg); diff --git a/tools/sdk/include/bluedroid/bt_defs.h b/tools/sdk/include/bluedroid/bt_defs.h index 5d0dd3d9..bb0ca6de 100644 --- a/tools/sdk/include/bluedroid/bt_defs.h +++ b/tools/sdk/include/bluedroid/bt_defs.h @@ -22,8 +22,7 @@ #include #include #include "bt_trace.h" - -#include "osi_arch.h" +#include "bt_target.h" #define UNUSED(x) (void)(x) @@ -32,6 +31,20 @@ #endif /*Timer Related Defination*/ +//by Snake.T +typedef void (TIMER_CBACK)(void *p_tle); +typedef struct _tle { + struct _tle *p_next; + struct _tle *p_prev; + TIMER_CBACK *p_cback; + INT32 ticks; + INT32 ticks_initial; + TIMER_PARAM_TYPE param; + TIMER_PARAM_TYPE data; + UINT16 event; + UINT8 in_use; +} TIMER_LIST_ENT; + #define alarm_timer_t uint32_t #define alarm_timer_setfn(timer, cb, data) \ do { \ @@ -45,23 +58,6 @@ do { \ #define alarm_timer_now() (0) -/*Thread and locker related defination*/ -#define RTOS_SUPPORT -#ifdef RTOS_SUPPORT -#define pthread_mutex_t osi_mutex_t -#define pthread_mutex_init(mutex, a) osi_mutex_new(mutex) -#define pthread_mutex_destroy(mutex) osi_mutex_free(mutex) -#define pthread_mutex_lock osi_mutex_lock -#define pthread_mutex_unlock osi_mutex_unlock -#else -#define pthread_mutex_t uint8_t -#define pthread_mutex_init(x1, x2) -#define pthread_mutex_destroy(mutex) -#define pthread_mutex_lock(mutex) -#define pthread_mutex_unlock(mutex) -#endif - - /*Bluetooth Address*/ typedef struct { uint8_t address[6]; diff --git a/tools/sdk/include/bluedroid/bt_target.h b/tools/sdk/include/bluedroid/bt_target.h index a426d69f..34b8c194 100644 --- a/tools/sdk/include/bluedroid/bt_target.h +++ b/tools/sdk/include/bluedroid/bt_target.h @@ -37,8 +37,6 @@ #include "sdkconfig.h" #include "bt_types.h" /* This must be defined AFTER buildcfg.h */ -/* Include common GKI definitions used by this platform */ -#include "gki_target.h" #include "dyn_mem.h" /* defines static and/or dynamic memory for components */ #if CONFIG_CLASSIC_BT_ENABLED @@ -177,15 +175,6 @@ #define BTA_DISABLE_DELAY 200 /* in milliseconds */ #endif -// If the next wakeup time is less than this threshold, we should acquire -// a wakelock instead of setting a wake alarm so we're not bouncing in -// and out of suspend frequently. -// in millisecond -// TODO(zachoverflow): reinstate in alarm code -#ifndef GKI_TIMER_INTERVAL_FOR_WAKELOCK -#define GKI_TIMER_INTERVAL_FOR_WAKELOCK 3000 -#endif - #ifndef BTA_SYS_TIMER_PERIOD #define BTA_SYS_TIMER_PERIOD 100 #endif @@ -266,66 +255,63 @@ /****************************************************************************** ** -** GKI Buffer Pools +** Buffer Size ** ******************************************************************************/ +#ifndef BT_DEFAULT_BUFFER_SIZE +#define BT_DEFAULT_BUFFER_SIZE (4096 + 16) +#endif + +#ifndef BT_SMALL_BUFFER_SIZE +#define BT_SMALL_BUFFER_SIZE 660 +#endif + /* Receives HCI events from the lower-layer. */ -#ifndef HCI_CMD_POOL_ID -#define HCI_CMD_POOL_ID GKI_POOL_ID_2 -#endif - -#ifndef HCI_CMD_POOL_BUF_SIZE -#define HCI_CMD_POOL_BUF_SIZE GKI_BUF2_SIZE -#endif - -/* Receives ACL data packets from thelower-layer. */ -#ifndef HCI_ACL_POOL_ID -#define HCI_ACL_POOL_ID GKI_POOL_ID_3 -#endif - -/* Maximum number of buffers available for ACL receive data. */ -#ifndef HCI_ACL_BUF_MAX -#define HCI_ACL_BUF_MAX GKI_BUF3_MAX -#endif - -/* Receives SCO data packets from the lower-layer. */ -#ifndef HCI_SCO_POOL_ID -#define HCI_SCO_POOL_ID GKI_POOL_ID_6 +#ifndef HCI_CMD_BUF_SIZE +#define HCI_CMD_BUF_SIZE BT_SMALL_BUFFER_SIZE #endif /* Sends SDP data packets. */ -#ifndef SDP_POOL_ID -#define SDP_POOL_ID 3 +#ifndef SDP_DATA_BUF_SIZE +#define SDP_DATA_BUF_SIZE BT_DEFAULT_BUFFER_SIZE #endif /* Sends RFCOMM command packets. */ -#ifndef RFCOMM_CMD_POOL_ID -#define RFCOMM_CMD_POOL_ID GKI_POOL_ID_2 +#ifndef RFCOMM_CMD_BUF_SIZE +#define RFCOMM_CMD_BUF_SIZE BT_SMALL_BUFFER_SIZE #endif /* Sends RFCOMM data packets. */ -#ifndef RFCOMM_DATA_POOL_ID -#define RFCOMM_DATA_POOL_ID GKI_POOL_ID_3 -#endif - -#ifndef RFCOMM_DATA_POOL_BUF_SIZE -#define RFCOMM_DATA_POOL_BUF_SIZE GKI_BUF3_SIZE +#ifndef RFCOMM_DATA_BUF_SIZE +#define RFCOMM_DATA_BUF_SIZE BT_DEFAULT_BUFFER_SIZE #endif /* Sends L2CAP packets to the peer and HCI messages to the controller. */ -#ifndef L2CAP_CMD_POOL_ID -#define L2CAP_CMD_POOL_ID GKI_POOL_ID_2 +#ifndef L2CAP_CMD_BUF_SIZE +#define L2CAP_CMD_BUF_SIZE BT_SMALL_BUFFER_SIZE +#endif + +#ifndef L2CAP_USER_TX_BUF_SIZE +#define L2CAP_USER_TX_BUF_SIZE BT_DEFAULT_BUFFER_SIZE +#endif + +#ifndef L2CAP_USER_RX_BUF_SIZE +#define L2CAP_USER_RX_BUF_SIZE BT_DEFAULT_BUFFER_SIZE #endif /* Sends L2CAP segmented packets in ERTM mode */ -#ifndef L2CAP_FCR_TX_POOL_ID -#define L2CAP_FCR_TX_POOL_ID HCI_ACL_POOL_ID +#ifndef L2CAP_FCR_TX_BUF_SIZE +#define L2CAP_FCR_TX_BUF_SIZE BT_DEFAULT_BUFFER_SIZE #endif /* Receives L2CAP segmented packets in ERTM mode */ -#ifndef L2CAP_FCR_RX_POOL_ID -#define L2CAP_FCR_RX_POOL_ID HCI_ACL_POOL_ID +#ifndef L2CAP_FCR_RX_BUF_SIZE +#define L2CAP_FCR_RX_BUF_SIZE BT_DEFAULT_BUFFER_SIZE +#endif + +#ifndef L2CAP_FCR_ERTM_BUF_SIZE +#define L2CAP_FCR_ERTM_BUF_SIZE (10240 + 24) #endif /* Number of ACL buffers to assign to LE @@ -335,114 +321,72 @@ #endif /* Used by BTM when it sends HCI commands to the controller. */ -#ifndef BTM_CMD_POOL_ID -#define BTM_CMD_POOL_ID GKI_POOL_ID_2 +#ifndef BTM_CMD_BUF_SIZE +#define BTM_CMD_BUF_SIZE BT_SMALL_BUFFER_SIZE #endif -#ifndef OBX_LRG_DATA_POOL_SIZE -#define OBX_LRG_DATA_POOL_SIZE GKI_BUF4_SIZE +#ifndef OBX_LRG_DATA_BUF_SIZE +#define OBX_LRG_DATA_BUF_SIZE (8080 + 26) #endif -#ifndef OBX_LRG_DATA_POOL_ID -#define OBX_LRG_DATA_POOL_ID GKI_POOL_ID_4 -#endif /* Used to send data to L2CAP. */ -#ifndef GAP_DATA_POOL_ID -#define GAP_DATA_POOL_ID GKI_POOL_ID_3 -#endif - -#ifndef SPP_DB_SIZE -#define SPP_DB_SIZE GKI_BUF3_SIZE +#ifndef GAP_DATA_BUF_SIZE +#define GAP_DATA_BUF_SIZE BT_DEFAULT_BUFFER_SIZE #endif /* BNEP data and protocol messages. */ -#ifndef BNEP_POOL_ID -#define BNEP_POOL_ID GKI_POOL_ID_3 +#ifndef BNEP_BUF_SIZE +#define BNEP_BUF_SIZE BT_DEFAULT_BUFFER_SIZE #endif -/* RPC pool for temporary trace message buffers. */ -#ifndef RPC_SCRATCH_POOL_ID -#define RPC_SCRATCH_POOL_ID GKI_POOL_ID_2 +/* AVDTP buffer size for protocol messages */ +#ifndef AVDT_CMD_BUF_SIZE +#define AVDT_CMD_BUF_SIZE BT_SMALL_BUFFER_SIZE #endif -/* AVDTP pool for protocol messages */ -#ifndef AVDT_CMD_POOL_ID -#define AVDT_CMD_POOL_ID GKI_POOL_ID_2 +/* AVDTP buffer size for media packets in case of fragmentation */ +#ifndef AVDT_DATA_BUF_SIZE +#define AVDT_DATA_BUF_SIZE BT_DEFAULT_BUFFER_SIZE #endif -/* AVDTP pool size for media packets in case of fragmentation */ -#ifndef AVDT_DATA_POOL_SIZE -#define AVDT_DATA_POOL_SIZE GKI_BUF3_SIZE +#ifndef PAN_BUF_SIZE +#define PAN_BUF_SIZE BT_DEFAULT_BUFFER_SIZE #endif -#ifndef PAN_POOL_ID -#define PAN_POOL_ID GKI_POOL_ID_3 -/* Maximum amount of the shared buffer to allocate for PAN */ -#define PAN_POOL_MAX (GKI_BUF3_MAX / 4) +/* Maximum number of buffers to allocate for PAN */ +#ifndef PAN_BUF_MAX +#define PAN_BUF_MAX 100 #endif -/* AVCTP pool for protocol messages */ -#ifndef AVCT_CMD_POOL_ID -#define AVCT_CMD_POOL_ID GKI_POOL_ID_1 +/* AVCTP buffer size for protocol messages */ +#ifndef AVCT_CMD_BUF_SIZE +#define AVCT_CMD_BUF_SIZE 288 #endif -/* AVRCP pool for protocol messages */ -#ifndef AVRC_CMD_POOL_ID -#define AVRC_CMD_POOL_ID GKI_POOL_ID_1 +/* AVRCP buffer size for protocol messages */ +#ifndef AVRC_CMD_BUF_SIZE +#define AVRC_CMD_BUF_SIZE 288 #endif -/* AVRCP pool size for protocol messages */ -#ifndef AVRC_CMD_POOL_SIZE -#define AVRC_CMD_POOL_SIZE GKI_BUF1_SIZE +/* AVRCP Metadata buffer size for protocol messages */ +#ifndef AVRC_META_CMD_BUF_SIZE +#define AVRC_META_CMD_BUF_SIZE BT_SMALL_BUFFER_SIZE #endif -/* AVRCP Metadata pool for protocol messages */ -#ifndef AVRC_META_CMD_POOL_ID -#define AVRC_META_CMD_POOL_ID GKI_POOL_ID_2 +#ifndef BTA_HL_LRG_DATA_BUF_SIZE +#define BTA_HL_LRG_DATA_BUF_SIZE (10240 + 24) #endif -/* AVRCP Metadata pool size for protocol messages */ -#ifndef AVRC_META_CMD_POOL_SIZE -#define AVRC_META_CMD_POOL_SIZE GKI_BUF2_SIZE +/* GATT Server Database buffer size */ +#ifndef GATT_DB_BUF_SIZE +#define GATT_DB_BUF_SIZE 128 #endif - -/* AVRCP buffer size for browsing channel messages */ -#ifndef AVRC_BROWSE_POOL_SIZE -#define AVRC_BROWSE_POOL_SIZE GKI_MAX_BUF_SIZE +/* GATT Data sending buffer size */ +#ifndef GATT_DATA_BUF_SIZE +#define GATT_DATA_BUF_SIZE BT_DEFAULT_BUFFER_SIZE #endif -#ifndef BTA_HL_LRG_DATA_POOL_ID -#define BTA_HL_LRG_DATA_POOL_ID GKI_POOL_ID_7 -#endif - -/* GATT Server Database pool ID */ -#ifndef GATT_DB_POOL_ID -#define GATT_DB_POOL_ID GKI_POOL_ID_8 -#endif - -/* GATT Data sending buffer pool ID, use default ACL pool for fix channel data */ -#ifndef GATT_BUF_POOL_ID -#define GATT_BUF_POOL_ID HCI_ACL_POOL_ID -#endif - -/****************************************************************************** -** -** Lower Layer Interface -** -******************************************************************************/ - -/* Macro for allocating buffer for HCI commands */ -#ifndef HCI_GET_CMD_BUF -#if (!defined(HCI_USE_VARIABLE_SIZE_CMD_BUF) || (HCI_USE_VARIABLE_SIZE_CMD_BUF == FALSE)) -/* Allocate fixed-size buffer from HCI_CMD_POOL (default case) */ -#define HCI_GET_CMD_BUF(paramlen) ((BT_HDR *)GKI_getpoolbuf (HCI_CMD_POOL_ID)) -#else -/* Allocate smallest possible buffer (for platforms with limited RAM) */ -#define HCI_GET_CMD_BUF(paramlen) ((BT_HDR *)GKI_getbuf ((UINT16)(BT_HDR_SIZE + HCIC_PREAMBLE_SIZE + (paramlen)))) -#endif -#endif /* HCI_GET_CMD_BUF */ - /****************************************************************************** ** ** HCI Services (H4) @@ -1267,68 +1211,41 @@ #define PORT_CREDIT_RX_LOW 8 #endif -/* if application like BTA, Java or script test engine is running on other than BTU thread, */ -/* PORT_SCHEDULE_LOCK shall be defined as GKI_sched_lock() or GKI_disable() */ -#ifndef PORT_SCHEDULE_LOCK -#define PORT_SCHEDULE_LOCK GKI_disable() -#endif - -/* if application like BTA, Java or script test engine is running on other than BTU thread, */ -/* PORT_SCHEDULE_LOCK shall be defined as GKI_sched_unlock() or GKI_enable() */ -#ifndef PORT_SCHEDULE_UNLOCK -#define PORT_SCHEDULE_UNLOCK GKI_enable() -#endif - /****************************************************************************** ** ** OBEX ** ******************************************************************************/ -#define OBX_14_INCLUDED FALSE -/* The maximum number of registered servers. */ -#ifndef OBX_NUM_SERVERS -#define OBX_NUM_SERVERS 12 +/* + * Buffer size to reassemble the SDU. + * It will allow buffers to be used that are larger than the L2CAP_MAX_MTU. + */ +#ifndef OBX_USER_RX_BUF_SIZE +#define OBX_USER_RX_BUF_SIZE OBX_LRG_DATA_BUF_SIZE #endif -/* The maximum number of active clients. */ -#ifndef OBX_NUM_CLIENTS -#define OBX_NUM_CLIENTS 8 +/* + * Buffer size to hold the SDU. + * It will allow buffers to be used that are larger than the L2CAP_MAX_MTU. + */ +#ifndef OBX_USER_TX_BUF_SIZE +#define OBX_USER_TX_BUF_SIZE OBX_LRG_DATA_BUF_SIZE #endif -/* This option is application when OBX_14_INCLUDED=TRUE - Pool ID where to reassemble the SDU. - This Pool will allow buffers to be used that are larger than - the L2CAP_MAX_MTU. */ -#ifndef OBX_USER_RX_POOL_ID -#define OBX_USER_RX_POOL_ID OBX_LRG_DATA_POOL_ID +/* Buffer size used to hold MPS segments during SDU reassembly. */ +#ifndef OBX_FCR_RX_BUF_SIZE +#define OBX_FCR_RX_BUF_SIZE BT_DEFAULT_BUFFER_SIZE #endif -/* This option is application when OBX_14_INCLUDED=TRUE - Pool ID where to hold the SDU. - This Pool will allow buffers to be used that are larger than - the L2CAP_MAX_MTU. */ -#ifndef OBX_USER_TX_POOL_ID -#define OBX_USER_TX_POOL_ID OBX_LRG_DATA_POOL_ID -#endif - -/* This option is application when OBX_14_INCLUDED=TRUE -GKI Buffer Pool ID used to hold MPS segments during SDU reassembly -*/ -#ifndef OBX_FCR_RX_POOL_ID -#define OBX_FCR_RX_POOL_ID HCI_ACL_POOL_ID -#endif - -/* This option is application when OBX_14_INCLUDED=TRUE -GKI Buffer Pool ID used to hold MPS segments used in (re)transmissions. -L2CAP_DEFAULT_ERM_POOL_ID is specified to use the HCI ACL data pool. -Note: This pool needs to have enough buffers to hold two times the window size negotiated - in the L2CA_SetFCROptions (2 * tx_win_size) to allow for retransmissions. - The size of each buffer must be able to hold the maximum MPS segment size passed in - L2CA_SetFCROptions plus BT_HDR (8) + HCI preamble (4) + L2CAP_MIN_OFFSET (11 - as of BT 2.1 + EDR Spec). -*/ -#ifndef OBX_FCR_TX_POOL_ID -#define OBX_FCR_TX_POOL_ID HCI_ACL_POOL_ID +/* + * Buffer size used to hold MPS segments used in (re)transmissions. + * The size of each buffer must be able to hold the maximum MPS segment size + * passed in L2CA_SetFCROptions plus BT_HDR (8) + HCI preamble (4) + + * L2CAP_MIN_OFFSET (11 - as of BT 2.1 + EDR Spec). + */ +#ifndef OBX_FCR_TX_BUF_SIZE +#define OBX_FCR_TX_BUF_SIZE BT_DEFAULT_BUFFER_SIZE #endif /* This option is application when OBX_14_INCLUDED=TRUE @@ -1623,16 +1540,12 @@ Range: 2 octets ** ******************************************************************************/ -#ifndef HID_DEV_SUBCLASS -#define HID_DEV_SUBCLASS COD_MINOR_POINTING +#ifndef HID_CONTROL_BUF_SIZE +#define HID_CONTROL_BUF_SIZE BT_DEFAULT_BUFFER_SIZE #endif -#ifndef HID_CONTROL_POOL_ID -#define HID_CONTROL_POOL_ID 2 -#endif - -#ifndef HID_INTERRUPT_POOL_ID -#define HID_INTERRUPT_POOL_ID 2 +#ifndef HID_INTERRUPT_BUF_SIZE +#define HID_INTERRUPT_BUF_SIZE BT_DEFAULT_BUFFER_SIZE #endif /************************************************************************* @@ -1767,33 +1680,31 @@ Range: 2 octets #define MCA_NUM_MDLS 4 #endif -/* Pool ID where to reassemble the SDU. */ -#ifndef MCA_USER_RX_POOL_ID -#define MCA_USER_RX_POOL_ID HCI_ACL_POOL_ID +/* Buffer size to reassemble the SDU. */ +#ifndef MCA_USER_RX_BUF_SIZE +#define MCA_USER_RX_BUF_SIZE BT_DEFAULT_BUFFER_SIZE #endif -/* Pool ID where to hold the SDU. */ -#ifndef MCA_USER_TX_POOL_ID -#define MCA_USER_TX_POOL_ID HCI_ACL_POOL_ID +/* Buffer size to hold the SDU. */ +#ifndef MCA_USER_TX_BUF_SIZE +#define MCA_USER_TX_BUF_SIZE BT_DEFAULT_BUFFER_SIZE #endif /* -GKI Buffer Pool ID used to hold MPS segments during SDU reassembly -*/ -#ifndef MCA_FCR_RX_POOL_ID -#define MCA_FCR_RX_POOL_ID HCI_ACL_POOL_ID + * Buffer size used to hold MPS segments during SDU reassembly + */ +#ifndef MCA_FCR_RX_BUF_SIZE +#define MCA_FCR_RX_BUF_SIZE BT_DEFAULT_BUFFER_SIZE #endif /* -GKI Buffer Pool ID used to hold MPS segments used in (re)transmissions. -L2CAP_DEFAULT_ERM_POOL_ID is specified to use the HCI ACL data pool. -Note: This pool needs to have enough buffers to hold two times the window size negotiated - in the tL2CAP_FCR_OPTIONS (2 * tx_win_size) to allow for retransmissions. - The size of each buffer must be able to hold the maximum MPS segment size passed in - tL2CAP_FCR_OPTIONS plus BT_HDR (8) + HCI preamble (4) + L2CAP_MIN_OFFSET (11 - as of BT 2.1 + EDR Spec). -*/ -#ifndef MCA_FCR_TX_POOL_ID -#define MCA_FCR_TX_POOL_ID HCI_ACL_POOL_ID + * Default buffer size used to hold MPS segments used in (re)transmissions. + * The size of each buffer must be able to hold the maximum MPS segment size + * passed in tL2CAP_FCR_OPTIONS plus BT_HDR (8) + HCI preamble (4) + + * L2CAP_MIN_OFFSET (11 - as of BT 2.1 + EDR Spec). + */ +#ifndef MCA_FCR_TX_BUF_SIZE +#define MCA_FCR_TX_BUF_SIZE BT_DEFAULT_BUFFER_SIZE #endif /* MCAP control channel FCR Option: diff --git a/tools/sdk/include/bluedroid/bta_api.h b/tools/sdk/include/bluedroid/bta_api.h index f21803b1..fb02175f 100644 --- a/tools/sdk/include/bluedroid/bta_api.h +++ b/tools/sdk/include/bluedroid/bta_api.h @@ -404,6 +404,8 @@ typedef void (tBTA_START_ADV_CMPL_CBACK) (tBTA_STATUS status); typedef tBTM_SET_PKT_DATA_LENGTH_CBACK tBTA_SET_PKT_DATA_LENGTH_CBACK; +typedef tBTM_SET_LOCAL_PRIVACY_CBACK tBTA_SET_LOCAL_PRIVACY_CBACK; + /* advertising channel map */ #define BTA_BLE_ADV_CHNL_37 BTM_BLE_ADV_CHNL_37 #define BTA_BLE_ADV_CHNL_38 BTM_BLE_ADV_CHNL_38 @@ -2035,11 +2037,11 @@ extern void BTA_DmSetRandAddress(BD_ADDR rand_addr); ** Description Enable/disable privacy on the local device ** ** Parameters: privacy_enable - enable/disabe privacy on remote device. -** +** set_local_privacy_cback -callback to be called with result ** Returns void ** *******************************************************************************/ -extern void BTA_DmBleConfigLocalPrivacy(BOOLEAN privacy_enable); +extern void BTA_DmBleConfigLocalPrivacy(BOOLEAN privacy_enable, tBTA_SET_LOCAL_PRIVACY_CBACK *set_local_privacy_cback); /******************************************************************************* ** @@ -2208,7 +2210,7 @@ extern void BTA_BleDisableAdvInstance(UINT8 inst_id); ** *******************************************************************************/ extern void BTA_DmBleUpdateConnectionParams(BD_ADDR bd_addr, UINT16 min_int, - UINT16 max_int, UINT16 latency, UINT16 timeout, tBTA_UPDATE_CONN_PARAM_CBACK *update_conn_param_cb); + UINT16 max_int, UINT16 latency, UINT16 timeout); /******************************************************************************* ** diff --git a/tools/sdk/include/bluedroid/bta_av_co.h b/tools/sdk/include/bluedroid/bta_av_co.h index c2f94b63..3f7f989d 100644 --- a/tools/sdk/include/bluedroid/bta_av_co.h +++ b/tools/sdk/include/bluedroid/bta_av_co.h @@ -304,7 +304,7 @@ extern void bta_av_co_video_stop(tBTA_AV_HNDL hndl, tBTA_AV_CODEC codec_type); ** the audio codec ** ** Returns NULL if data is not ready. -** Otherwise, a GKI buffer (BT_HDR*) containing the audio data. +** Otherwise, a buffer (BT_HDR*) containing the audio data. ** *******************************************************************************/ extern void *bta_av_co_audio_src_data_path(tBTA_AV_CODEC codec_type, diff --git a/tools/sdk/include/bluedroid/bta_gatt_api.h b/tools/sdk/include/bluedroid/bta_gatt_api.h index 349c7c6a..4b4945aa 100644 --- a/tools/sdk/include/bluedroid/bta_gatt_api.h +++ b/tools/sdk/include/bluedroid/bta_gatt_api.h @@ -1157,12 +1157,12 @@ extern void BTA_GATTC_Broadcast(tBTA_GATTC_IF client_if, BOOLEAN start); ** only once per connection. ** ** Parameters conn_id: connection ID. -** mtu: desired MTU size to use. +** ** ** Returns void ** *******************************************************************************/ -extern void BTA_GATTC_ConfigureMTU (UINT16 conn_id, UINT16 mtu); +extern void BTA_GATTC_ConfigureMTU (UINT16 conn_id); /******************************************************************************* ** BTA GATT Server API @@ -1409,10 +1409,10 @@ extern void BTA_SetAttributeValue(UINT16 attr_handle, UINT16 length, UINT8 *valu ** length - the value length which has been set to the attribute. ** value - the pointer to the value ** -** Returns None +** Returns tBTA_GATT_STATUS ** *******************************************************************************/ -extern void BTA_GetAttributeValue(UINT16 attr_handle, UINT16 *length, UINT8 **value); +extern tBTA_GATT_STATUS BTA_GetAttributeValue(UINT16 attr_handle, UINT16 *length, UINT8 **value); /******************************************************************************* ** diff --git a/tools/sdk/include/bluedroid/bta_gatt_common.h b/tools/sdk/include/bluedroid/bta_gatt_common.h new file mode 100644 index 00000000..f6bc884b --- /dev/null +++ b/tools/sdk/include/bluedroid/bta_gatt_common.h @@ -0,0 +1,36 @@ +/****************************************************************************** +* Copyright 2015-2017 Espressif Systems (Shanghai) PTE LTD +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at + +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. + ******************************************************************************/ + +/****************************************************************************** + * + * This file contains the action functions for gatts and gattc. + * + * + ******************************************************************************/ + +#include "bt_types.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + +extern void BTA_GATT_SetLocalMTU(uint16_t mtu); + +#ifdef __cplusplus +} +#endif diff --git a/tools/sdk/include/bluedroid/bta_gattc_int.h b/tools/sdk/include/bluedroid/bta_gattc_int.h index 21cd4259..6ea09ef8 100644 --- a/tools/sdk/include/bluedroid/bta_gattc_int.h +++ b/tools/sdk/include/bluedroid/bta_gattc_int.h @@ -29,7 +29,7 @@ #include "bta_gatt_api.h" #include "bta_gattc_ci.h" #include "bta_gattc_co.h" -#include "gki.h" +#include "fixed_queue.h" /***************************************************************************** ** Constants and data types @@ -184,7 +184,6 @@ typedef struct { typedef struct { BT_HDR hdr; - UINT16 mtu; } tBTA_GATTC_API_CFG_MTU; typedef struct { @@ -302,7 +301,7 @@ typedef struct { tBTA_GATTC_CACHE *p_srvc_cache; tBTA_GATTC_CACHE *p_cur_srvc; - BUFFER_Q cache_buffer; /* buffer queue used for storing the cache data */ + fixed_queue_t *cache_buffer; /* buffer queue used for storing the cache data */ UINT8 *p_free; /* starting point to next available byte */ UINT16 free_byte; /* number of available bytes in server cache buffer */ UINT8 update_count; /* indication received */ diff --git a/tools/sdk/include/bluedroid/bta_gatts_int.h b/tools/sdk/include/bluedroid/bta_gatts_int.h index 0f9e689a..211929f2 100644 --- a/tools/sdk/include/bluedroid/bta_gatts_int.h +++ b/tools/sdk/include/bluedroid/bta_gatts_int.h @@ -29,7 +29,6 @@ #include "bta_gatt_api.h" #include "gatt_api.h" -#include "gki.h" /***************************************************************************** ** Constants and data types @@ -230,7 +229,7 @@ extern void bta_gatts_add_include_srvc(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS extern void bta_gatts_add_char(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA *p_msg); extern void bta_gatts_add_char_descr(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA *p_msg); extern void bta_gatts_set_attr_value(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA *p_msg); -extern void bta_gatts_get_attr_value(UINT16 attr_handle, UINT16 *length, UINT8 **value); +extern tGATT_STATUS bta_gatts_get_attr_value(UINT16 attr_handle, UINT16 *length, UINT8 **value); extern void bta_gatts_delete_service(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA *p_msg); extern void bta_gatts_start_service(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA *p_msg); extern void bta_gatts_stop_service(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA *p_msg); diff --git a/tools/sdk/include/bluedroid/bta_sys.h b/tools/sdk/include/bluedroid/bta_sys.h index 808edbb4..94ebd805 100644 --- a/tools/sdk/include/bluedroid/bta_sys.h +++ b/tools/sdk/include/bluedroid/bta_sys.h @@ -25,7 +25,7 @@ #define BTA_SYS_H #include "bt_target.h" -#include "gki.h" +#include "bt_defs.h" /***************************************************************************** ** Constants and data types diff --git a/tools/sdk/include/bluedroid/btc_ble_storage.h b/tools/sdk/include/bluedroid/btc_ble_storage.h index cbb6229c..111f1f0a 100644 --- a/tools/sdk/include/bluedroid/btc_ble_storage.h +++ b/tools/sdk/include/bluedroid/btc_ble_storage.h @@ -11,9 +11,11 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. - +#ifndef __BTC_BLE_STORAGE_H__ +#define __BTC_BLE_STORAGE_H__ #include "bt_types.h" #include "bt_target.h" +#include "esp_gap_ble_api.h" #if (SMP_INCLUDED == TRUE) #define BTC_LE_LOCAL_KEY_IR (1<<0) @@ -77,9 +79,12 @@ typedef struct extern btc_dm_pairing_cb_t pairing_cb; extern btc_dm_local_key_cb_t ble_local_key_cb; +extern btc_bonded_devices_t bonded_devices; bt_status_t btc_storage_load_bonded_ble_devices(void); +bt_status_t btc_get_bonded_ble_devices_list(esp_ble_bond_dev_t *bond_dev); + bt_status_t btc_in_fetch_bonded_ble_devices(int add); void btc_dm_remove_ble_bonding_keys(void); @@ -102,14 +107,16 @@ bt_status_t btc_storage_get_ble_bonding_key(bt_bdaddr_t *remote_bd_addr, char *key_value, int key_length); -bool btc_storage_compare_address_key_value(uint8_t key_type, void *key_value, int key_length); - +bool btc_storage_compare_address_key_value(bt_bdaddr_t *remote_bd_addr, + uint8_t key_type, void *key_value, int key_length); bt_status_t btc_storage_add_ble_local_key(char *key, uint8_t key_type, uint8_t key_length); bt_status_t btc_storage_remove_ble_bonding_keys(bt_bdaddr_t *remote_bd_addr); +bt_status_t btc_storage_clear_bond_devices(void); + bt_status_t btc_storage_remove_ble_local_keys(void); bt_status_t btc_storage_get_ble_local_key(uint8_t key_type, @@ -119,6 +126,8 @@ bt_status_t btc_storage_get_ble_local_key(uint8_t key_type, bt_status_t btc_storage_get_remote_addr_type(bt_bdaddr_t *remote_bd_addr, int *addr_type); +int btc_storage_get_num_ble_bond_devices(void); + bt_status_t btc_storage_set_remote_addr_type(bt_bdaddr_t *remote_bd_addr, uint8_t addr_type); @@ -126,4 +135,5 @@ void btc_dm_load_ble_local_keys(void); void btc_dm_get_ble_local_keys(tBTA_DM_BLE_LOCAL_KEY_MASK *p_key_mask, BT_OCTET16 er, tBTA_BLE_LOCAL_ID_KEYS *p_id_keys); -#endif ///SMP_INCLUDED == TRUE \ No newline at end of file +#endif ///SMP_INCLUDED == TRUE +#endif ///__BTC_BLE_STORAGE_H__ \ No newline at end of file diff --git a/tools/sdk/include/bluedroid/btc_config.h b/tools/sdk/include/bluedroid/btc_config.h index e0d6d6ec..2367c53b 100644 --- a/tools/sdk/include/bluedroid/btc_config.h +++ b/tools/sdk/include/bluedroid/btc_config.h @@ -20,6 +20,8 @@ #include "bt_types.h" +#define BTC_LE_DEV_TYPE "DevType" + typedef struct btc_config_section_iter_t btc_config_section_iter_t; bool btc_config_init(void); @@ -35,6 +37,7 @@ bool btc_config_set_str(const char *section, const char *key, const char *value) bool btc_config_get_bin(const char *section, const char *key, uint8_t *value, size_t *length); bool btc_config_set_bin(const char *section, const char *key, const uint8_t *value, size_t length); bool btc_config_remove(const char *section, const char *key); +bool btc_config_remove_section(const char *section); size_t btc_config_get_bin_length(const char *section, const char *key); @@ -49,7 +52,7 @@ int btc_config_clear(void); // TODO(zachoverflow): Eww...we need to move these out. These are peer specific, not config general. bool btc_get_address_type(const BD_ADDR bd_addr, int *p_addr_type); -bool btc_compare_address_key_value(char *key_type, void *key_value, int key_length); +bool btc_compare_address_key_value(const char *section, char *key_type, void *key_value, int key_length); bool btc_get_device_type(const BD_ADDR bd_addr, int *p_device_type); #endif diff --git a/tools/sdk/include/bluedroid/btc_gap_ble.h b/tools/sdk/include/bluedroid/btc_gap_ble.h index 78c2db02..b6da5360 100644 --- a/tools/sdk/include/bluedroid/btc_gap_ble.h +++ b/tools/sdk/include/bluedroid/btc_gap_ble.h @@ -40,6 +40,9 @@ typedef enum { BTC_GAP_BLE_PASSKEY_REPLY_EVT, BTC_GAP_BLE_CONFIRM_REPLY_EVT, BTC_GAP_BLE_DISCONNECT_EVT, + BTC_GAP_BLE_REMOVE_BOND_DEV_EVT, + BTC_GAP_BLE_CLEAR_BOND_DEV_EVT, + BTC_GAP_BLE_GET_BOND_DEV_EVT, } btc_gap_ble_act_t; /* btc_ble_gap_args_t */ @@ -89,44 +92,50 @@ typedef union { uint8_t *raw_scan_rsp; uint32_t raw_scan_rsp_len; } cfg_scan_rsp_data_raw; - + //BTC_GAP_BLE_SET_ENCRYPTION_EVT struct set_encryption_args { esp_bd_addr_t bd_addr; esp_ble_sec_act_t sec_act; } set_encryption; - + //BTC_GAP_BLE_SET_SECURITY_PARAM_EVT struct set_security_param_args { esp_ble_sm_param_t param_type; uint8_t len; uint8_t *value; } set_security_param; - + //BTC_GAP_BLE_SECURITY_RSP_EVT struct enc_rsp_args { esp_bd_addr_t bd_addr; bool accept; } sec_rsp; - + //BTC_GAP_BLE_PASSKEY_REPLY_EVT struct enc_passkey_reply_args { esp_bd_addr_t bd_addr; bool accept; uint32_t passkey; } enc_passkey_replay; - + //BTC_GAP_BLE_CONFIRM_REPLY_EVT struct enc_comfirm_reply_args { esp_bd_addr_t bd_addr; bool accept; } enc_comfirm_replay; - //BTC_GAP_BLE_DISCONNECT_EVT struct disconnect_args { esp_bd_addr_t remote_device; } disconnect; - + //BTC_GAP_BLE_REMOVE_BOND_DEV_EVT + struct remove_bond_device_args { + esp_bd_addr_t bd_addr; + } remove_bond_device; } btc_ble_gap_args_t; void btc_gap_ble_call_handler(btc_msg_t *msg); void btc_gap_ble_cb_handler(btc_msg_t *msg); void btc_gap_ble_arg_deep_copy(btc_msg_t *msg, void *p_dest, void *p_src); +void btc_gap_ble_arg_deep_free(btc_msg_t *msg); +void btc_gap_ble_cb_deep_free(btc_msg_t *msg); +void btc_gap_ble_cb_deep_copy(btc_msg_t *msg, void *p_dest, void *p_src); +void btc_gap_callback_init(void); #endif /* __BTC_GAP_BLE_H__ */ diff --git a/tools/sdk/include/bluedroid/btc_gattc.h b/tools/sdk/include/bluedroid/btc_gattc.h index 1374dc0a..d1e0e968 100644 --- a/tools/sdk/include/bluedroid/btc_gattc.h +++ b/tools/sdk/include/bluedroid/btc_gattc.h @@ -68,7 +68,6 @@ typedef union { //BTC_GATTC_ACT_CFG_MTU, struct cfg_mtu_arg { uint16_t conn_id; - uint16_t mtu; } cfg_mtu; //BTC_GATTC_ACT_SEARCH_SERVICE, struct search_srvc_arg { diff --git a/tools/sdk/include/bluedroid/btc_gatts.h b/tools/sdk/include/bluedroid/btc_gatts.h index 35cf84c5..00f73875 100644 --- a/tools/sdk/include/bluedroid/btc_gatts.h +++ b/tools/sdk/include/bluedroid/btc_gatts.h @@ -147,7 +147,7 @@ typedef union { void btc_gatts_call_handler(btc_msg_t *msg); void btc_gatts_cb_handler(btc_msg_t *msg); void btc_gatts_arg_deep_copy(btc_msg_t *msg, void *p_dest, void *p_src); -void btc_gatts_get_attr_value(uint16_t attr_handle, uint16_t *length, uint8_t **value); +esp_gatt_status_t btc_gatts_get_attr_value(uint16_t attr_handle, uint16_t *length, uint8_t **value); #endif /* __BTC_GATTS_H__ */ diff --git a/tools/sdk/include/bluedroid/btc_main.h b/tools/sdk/include/bluedroid/btc_main.h index b95ae0bb..523e1bb9 100644 --- a/tools/sdk/include/bluedroid/btc_main.h +++ b/tools/sdk/include/bluedroid/btc_main.h @@ -26,6 +26,7 @@ typedef enum { BTC_MAIN_ACT_DEINIT, BTC_MAIN_ACT_ENABLE, BTC_MAIN_ACT_DISABLE, + BTC_GATT_ACT_SET_LOCAL_MTU, } btc_main_act_t; typedef enum { @@ -60,5 +61,13 @@ bt_status_t btc_init_bluetooth(future_t *future); void btc_deinit_bluetooth(future_t *future); #endif +/* btc_ble_gattc_args_t */ +typedef union { + //BTC_GATT_ACT_SET_LOCAL_MTU, + struct set_mtu_arg { + uint16_t mtu; + } set_mtu; +} btc_ble_main_args_t; + void btc_main_call_handler(btc_msg_t *msg); #endif /* __BTC_BT_MAIN_H__ */ diff --git a/tools/sdk/include/bluedroid/btc_media.h b/tools/sdk/include/bluedroid/btc_media.h index a25da987..66ad366f 100644 --- a/tools/sdk/include/bluedroid/btc_media.h +++ b/tools/sdk/include/bluedroid/btc_media.h @@ -25,7 +25,6 @@ #include #include "bta_api.h" -#include "gki.h" #include "btc_av_api.h" #if (BTA_AV_INCLUDED == TRUE) @@ -174,9 +173,9 @@ extern BOOLEAN btc_media_task_aa_tx_flush_req(void); ** ** Function btc_media_aa_readbuf ** - ** Description Read an audio GKI buffer from the BTC media TX queue + ** Description Read an audio buffer from the BTC media TX queue ** - ** Returns pointer on a GKI aa buffer ready to send + ** Returns pointer on a aa buffer ready to send ** *******************************************************************************/ extern BT_HDR *btc_media_aa_readbuf(void); @@ -198,7 +197,7 @@ UINT8 btc_media_sink_enque_buf(BT_HDR *p_buf); ** ** Function btc_media_aa_writebuf ** - ** Description Enqueue a Advance Audio media GKI buffer to be processed by btc media task. + ** Description Enqueue a Advance Audio media buffer to be processed by btc media task. ** ** Returns TRUE is success ** @@ -209,7 +208,7 @@ extern void btc_media_aa_writebuf(BT_HDR *pBuf, UINT32 timestamp, UINT16 seq_num ** ** Function btc_media_av_writebuf ** - ** Description Enqueue a video media GKI buffer to be processed by btc media task. + ** Description Enqueue a video media buffer to be processed by btc media task. ** ** Returns TRUE is success ** diff --git a/tools/sdk/include/bluedroid/bte.h b/tools/sdk/include/bluedroid/bte.h index 6a3ffe80..171967cf 100644 --- a/tools/sdk/include/bluedroid/bte.h +++ b/tools/sdk/include/bluedroid/bte.h @@ -110,7 +110,6 @@ typedef struct tBAUD_REG_tag { UINT8 ExplicitBaudRate3; } tBAUD_REG; -#include "gki.h" extern const tBAUD_REG baud_rate_regs[]; diff --git a/tools/sdk/include/bluedroid/btm_api.h b/tools/sdk/include/bluedroid/btm_api.h index 2976e497..d4ee7b47 100644 --- a/tools/sdk/include/bluedroid/btm_api.h +++ b/tools/sdk/include/bluedroid/btm_api.h @@ -69,7 +69,9 @@ enum { BTM_REPEATED_ATTEMPTS, /* 19 repeated attempts for LE security requests */ BTM_MODE4_LEVEL4_NOT_SUPPORTED, /* 20 Secure Connections Only Mode can't be supported */ BTM_PEER_LE_DATA_LEN_UNSUPPORTED, /* 21 peer setting data length is unsupported*/ - BTM_CONTROL_LE_DATA_LEN_UNSUPPORTED /* 22 controller setting data length is unsupported*/ + BTM_CONTROL_LE_DATA_LEN_UNSUPPORTED,/* 22 controller setting data length is unsupported*/ + BTM_SET_PRIVACY_SUCCESS, /* 23 enable/disable local privacy success */ + BTM_SET_PRIVACY_FAIL, /* 24 enable/disable local privacy failed*/ }; typedef uint8_t tBTM_STATUS; @@ -175,6 +177,8 @@ typedef void (tBTM_UPDATE_CONN_PARAM_CBACK) (UINT8 status, BD_ADDR bd_addr, tBTM typedef void (tBTM_SET_PKT_DATA_LENGTH_CBACK) (UINT8 status, tBTM_LE_SET_PKT_DATA_LENGTH_PARAMS *data_length_params); +typedef void (tBTM_SET_LOCAL_PRIVACY_CBACK) (UINT8 status); + /***************************************************************************** ** DEVICE DISCOVERY - Inquiry, Remote Name, Discovery, Class of Device @@ -1412,6 +1416,7 @@ typedef UINT8 tBTM_IO_CAP; #define BTM_BLE_INITIATOR_KEY_SIZE 15 #define BTM_BLE_RESPONDER_KEY_SIZE 15 #define BTM_BLE_MAX_KEY_SIZE 16 +#define BTM_BLE_MIN_KEY_SIZE 7 typedef UINT8 tBTM_AUTH_REQ; diff --git a/tools/sdk/include/bluedroid/btm_ble_api.h b/tools/sdk/include/bluedroid/btm_ble_api.h index 92781245..d23313cb 100644 --- a/tools/sdk/include/bluedroid/btm_ble_api.h +++ b/tools/sdk/include/bluedroid/btm_ble_api.h @@ -27,7 +27,6 @@ #include "bt_defs.h" #include "btm_api.h" -#include "gki.h" #include "bt_common_types.h" #define CHANNEL_MAP_LEN 5 @@ -164,12 +163,12 @@ typedef UINT8 tBTM_BLE_SFP; /* default connection interval min */ #ifndef BTM_BLE_CONN_INT_MIN_DEF -#define BTM_BLE_CONN_INT_MIN_DEF 24 /* recommended min: 30ms = 24 * 1.25 */ +#define BTM_BLE_CONN_INT_MIN_DEF 10 /* recommended min: 12.5 ms = 10 * 1.25 */ #endif /* default connection interval max */ #ifndef BTM_BLE_CONN_INT_MAX_DEF -#define BTM_BLE_CONN_INT_MAX_DEF 40 /* recommended max: 50 ms = 56 * 1.25 */ +#define BTM_BLE_CONN_INT_MAX_DEF 12 /* recommended max: 15 ms = 12 * 1.25 */ #endif /* default slave latency */ @@ -861,6 +860,20 @@ tBTM_BLE_SCAN_SETUP_CBACK bta_ble_scan_setup_cb; extern "C" { #endif */ + +/******************************************************************************* +** +** Function BTM_BleRegiseterConnParamCallback +** +** Description register connection parameters update callback func +** +** Parameters: update_conn_param_cb +** +** Returns void +** +*******************************************************************************/ +void BTM_BleRegiseterConnParamCallback(tBTM_UPDATE_CONN_PARAM_CBACK *update_conn_param_cb); + /******************************************************************************* ** ** Function BTM_SecAddBleDevice @@ -1596,7 +1609,7 @@ tBTM_STATUS BTM_BleBroadcast(BOOLEAN start); ** *******************************************************************************/ //extern -BOOLEAN BTM_BleConfigPrivacy(BOOLEAN enable); +BOOLEAN BTM_BleConfigPrivacy(BOOLEAN enable, tBTM_SET_LOCAL_PRIVACY_CBACK *set_local_privacy_cabck); /******************************************************************************* ** diff --git a/tools/sdk/include/bluedroid/btm_ble_int.h b/tools/sdk/include/bluedroid/btm_ble_int.h index 055591d7..a73a42e7 100644 --- a/tools/sdk/include/bluedroid/btm_ble_int.h +++ b/tools/sdk/include/bluedroid/btm_ble_int.h @@ -27,7 +27,7 @@ #define BTM_BLE_INT_H #include "bt_target.h" -#include "gki.h" +#include "fixed_queue.h" #include "hcidefs.h" #include "btm_ble_api.h" #include "btm_int.h" @@ -185,6 +185,7 @@ typedef struct { tBTM_BLE_ADDR_CBACK *p_generate_cback; void *p; TIMER_LIST_ENT raddr_timer_ent; + tBTM_SET_LOCAL_PRIVACY_CBACK *set_local_privacy_cback; } tBTM_LE_RANDOM_CB; #define BTM_BLE_MAX_BG_CONN_DEV_NUM 10 @@ -315,7 +316,7 @@ typedef struct { UINT8 white_list_avail_size; tBTM_BLE_WL_STATE wl_state; - BUFFER_Q conn_pending_q; + fixed_queue_t *conn_pending_q; tBTM_BLE_CONN_ST conn_state; /* random address management control block */ @@ -362,6 +363,7 @@ BOOLEAN btm_ble_send_extended_scan_params(UINT8 scan_type, UINT32 scan_int, UINT8 scan_filter_policy); void btm_ble_stop_inquiry(void); void btm_ble_init (void); +void btm_ble_free (void); void btm_ble_connected (UINT8 *bda, UINT16 handle, UINT8 enc_mode, UINT8 role, tBLE_ADDR_TYPE addr_type, BOOLEAN addr_matched); void btm_ble_read_remote_features_complete(UINT8 *p); void btm_ble_write_adv_enable_complete(UINT8 *p); diff --git a/tools/sdk/include/bluedroid/btm_int.h b/tools/sdk/include/bluedroid/btm_int.h index 4d263d57..42468d95 100644 --- a/tools/sdk/include/bluedroid/btm_int.h +++ b/tools/sdk/include/bluedroid/btm_int.h @@ -27,7 +27,6 @@ #include "bt_defs.h" #include "bt_target.h" -#include "gki.h" #include "hcidefs.h" #include "rfcdefs.h" @@ -115,7 +114,6 @@ UINT8 conn_addr_type; /* local device address type for this co BD_ADDR active_remote_addr; /* remote address used on this connection */ UINT8 active_remote_addr_type; /* local device address type for this connection */ BD_FEATURES peer_le_features; /* Peer LE Used features mask for the device */ -tBTM_UPDATE_CONN_PARAM_CBACK *update_conn_param_cb; tBTM_SET_PKT_DATA_LENGTH_CBACK *p_set_pkt_data_cback; tBTM_LE_SET_PKT_DATA_LENGTH_PARAMS data_length_params; #endif @@ -367,7 +365,7 @@ typedef struct { typedef struct { tBTM_ESCO_INFO esco; /* Current settings */ #if BTM_SCO_HCI_INCLUDED == TRUE - BUFFER_Q xmit_data_q; /* SCO data transmitting queue */ + fixed_queue_t *xmit_data_q; /* SCO data transmitting queue */ #endif tBTM_SCO_CB *p_conn_cb; /* Callback for when connected */ tBTM_SCO_CB *p_disc_cb; /* Callback for when disconnect */ @@ -865,15 +863,21 @@ typedef struct { UINT8 busy_level; /* the current busy level */ BOOLEAN is_paging; /* TRUE, if paging is in progess */ BOOLEAN is_inquiry; /* TRUE, if inquiry is in progess */ - BUFFER_Q page_queue; + fixed_queue_t *page_queue; BOOLEAN paging; BOOLEAN discing; - BUFFER_Q sec_pending_q; /* pending sequrity requests in tBTM_SEC_QUEUE_ENTRY format */ + fixed_queue_t *sec_pending_q; /* pending sequrity requests in tBTM_SEC_QUEUE_ENTRY format */ #if (!defined(BT_TRACE_VERBOSE) || (BT_TRACE_VERBOSE == FALSE)) char state_temp_buffer[BTM_STATE_BUFFER_SIZE]; #endif } tBTM_CB; +typedef struct{ + //connection parameters update callback + tBTM_UPDATE_CONN_PARAM_CBACK *update_conn_param_cb; +}tBTM_CallbackFunc; + +extern tBTM_CallbackFunc conn_param_update_cb; /* #ifdef __cplusplus extern "C" @@ -892,6 +896,7 @@ extern tBTM_CB *btm_cb_ptr; ******************************************** */ void btm_init (void); +void btm_free (void); /* Internal functions provided by btm_inq.c ******************************************* diff --git a/tools/sdk/include/bluedroid/btu.h b/tools/sdk/include/bluedroid/btu.h index b2d72364..cc960c59 100644 --- a/tools/sdk/include/bluedroid/btu.h +++ b/tools/sdk/include/bluedroid/btu.h @@ -28,7 +28,7 @@ #define BTU_H #include "bt_target.h" -#include "gki.h" +#include "bt_defs.h" // HACK(zachoverflow): temporary dark magic #define BTU_POST_TO_TASK_NO_GOOD_HORRIBLE_HACK 0x1700 // didn't look used in bt_types...here goes nothing diff --git a/tools/sdk/include/bluedroid/esp_avrc_api.h b/tools/sdk/include/bluedroid/esp_avrc_api.h index 719a19f1..e3074209 100644 --- a/tools/sdk/include/bluedroid/esp_avrc_api.h +++ b/tools/sdk/include/bluedroid/esp_avrc_api.h @@ -136,7 +136,7 @@ esp_err_t esp_avrc_ct_deinit(void); * @param[in] tl : transaction label, 0 to 15, consecutive commands should use different values. * @param[in] key_code : passthrough command code, e.g. ESP_AVRC_PT_CMD_PLAY, ESP_AVRC_PT_CMD_STOP, etc. * @param[in] key_state : passthrough command key state, ESP_AVRC_PT_CMD_STATE_PRESSED or - * ESP_AVRC_PT_CMD_STATE_PRESSED + * ESP_AVRC_PT_CMD_STATE_RELEASED * * @return * - ESP_OK: success diff --git a/tools/sdk/include/bluedroid/esp_bt_defs.h b/tools/sdk/include/bluedroid/esp_bt_defs.h index e2b9553b..513d37ec 100644 --- a/tools/sdk/include/bluedroid/esp_bt_defs.h +++ b/tools/sdk/include/bluedroid/esp_bt_defs.h @@ -22,6 +22,12 @@ extern "C" { #endif +#define ESP_BLUEDROID_STATUS_CHECK(status) \ + if (esp_bluedroid_get_status() != (status)) { \ + return ESP_ERR_INVALID_STATE; \ + } + + /* relate to BT_STATUS_xxx in bt_def.h */ /// Status Return Value typedef enum { @@ -44,6 +50,7 @@ typedef enum { ESP_BT_STATUS_TIMEOUT, /* relate to BT_STATUS_TIMEOUT in bt_def.h */ ESP_BT_STATUS_PEER_LE_DATA_LEN_UNSUPPORTED, /* relate to BTM_PEER_LE_DATA_LEN_UNSUPPORTED in btm_api.h */ ESP_BT_STATUS_CONTROL_LE_DATA_LEN_UNSUPPORTED,/* relate to BTM_CONTROL_LE_DATA_LEN_UNSUPPORTED in btm_api.h */ + ESP_BT_STATUS_ERR_ILLEGAL_PARAMETER_FMT, /* relate to HCI_ERR_ILLEGAL_PARAMETER_FMT in hcidefs.h */ } esp_bt_status_t; @@ -107,6 +114,7 @@ typedef enum { #define ESP_BLE_CSR_KEY_MASK (1 << 2) /* relate to BTM_BLE_CSR_KEY_MASK in btm_api.h */ /// Used to exchange the link key(this key just used in the BLE & BR/EDR coexist mode) in the init key & response key #define ESP_BLE_LINK_KEY_MASK (1 << 3) /* relate to BTM_BLE_LINK_KEY_MASK in btm_api.h */ +typedef uint8_t esp_ble_key_mask_t; /* the key mask type */ /// Minimum of the application id #define ESP_APP_ID_MIN 0x0000 diff --git a/tools/sdk/include/bluedroid/esp_gap_ble_api.h b/tools/sdk/include/bluedroid/esp_gap_ble_api.h index 0492bd5d..a7cafcd3 100644 --- a/tools/sdk/include/bluedroid/esp_gap_ble_api.h +++ b/tools/sdk/include/bluedroid/esp_gap_ble_api.h @@ -93,6 +93,11 @@ typedef enum { ESP_GAP_BLE_SET_STATIC_RAND_ADDR_EVT, /*!< When set the static rand address complete, the event comes */ ESP_GAP_BLE_UPDATE_CONN_PARAMS_EVT, /*!< When update connection parameters complete, the event comes */ ESP_GAP_BLE_SET_PKT_LENGTH_COMPLETE_EVT, /*!< When set pkt lenght complete, the event comes */ + ESP_GAP_BLE_SET_LOCAL_PRIVACY_COMPLETE_EVT, /*!< When Enable/disable privacy on the local device complete, the event comes */ + ESP_GAP_BLE_REMOVE_BOND_DEV_COMPLETE_EVT, /*!< When remove the bond device complete, the event comes */ + ESP_GAP_BLE_CLEAR_BOND_DEV_COMPLETE_EVT, /*!< When clear the bond device clear complete, the event comes */ + ESP_GAP_BLE_GET_BOND_DEV_COMPLETE_EVT, /*!< When get the bond device list complete, the event comes */ + ESP_GAP_BLE_EVT_MAX, } esp_gap_ble_cb_event_t; /// Advertising data maximum length @@ -293,7 +298,7 @@ typedef struct uint16_t ediv; /*!< The ediv value*/ uint8_t sec_level; /*!< The security level of the security link*/ uint8_t key_size; /*!< The key size(7~16) of the security link*/ -}esp_ble_penc_keys_t; /*!< The key type*/ +} esp_ble_penc_keys_t; /*!< The key type*/ /** * @brief BLE CSRK keys @@ -303,7 +308,7 @@ typedef struct uint32_t counter; /*!< The counter */ esp_bt_octet16_t csrk; /*!< The csrk key */ uint8_t sec_level; /*!< The security level */ -}esp_ble_pcsrk_keys_t; /*!< The pcsrk key type */ +} esp_ble_pcsrk_keys_t; /*!< The pcsrk key type */ /** * @brief BLE pid keys @@ -313,7 +318,7 @@ typedef struct esp_bt_octet16_t irk; /*!< The irk value */ esp_ble_addr_type_t addr_type; /*!< The address type */ esp_bd_addr_t static_addr; /*!< The static address */ -}esp_ble_pid_keys_t; /*!< The pid key type */ +} esp_ble_pid_keys_t; /*!< The pid key type */ /** * @brief BLE Encryption reproduction keys @@ -324,7 +329,7 @@ typedef struct uint16_t div; /*!< The div value */ uint8_t key_size; /*!< The key size of the security link */ uint8_t sec_level; /*!< The security level of the security link */ -}esp_ble_lenc_keys_t; /*!< The key type */ +} esp_ble_lenc_keys_t; /*!< The key type */ /** * @brief BLE SRK keys @@ -334,8 +339,8 @@ typedef struct uint32_t counter; /*!< The counter value */ uint16_t div; /*!< The div value */ uint8_t sec_level; /*!< The security level of the security link */ - esp_bt_octet16_t csrk; /*!< The csrk key value */ -}esp_ble_lcsrk_keys; /*!< The csrk key type */ + esp_bt_octet16_t csrk; /*!< The csrk key value */ +} esp_ble_lcsrk_keys; /*!< The csrk key type */ /** * @brief Structure associated with ESP_KEY_NOTIF_EVT @@ -352,7 +357,7 @@ typedef struct typedef struct { esp_bd_addr_t bd_addr; /*!< peer address */ -}esp_ble_sec_req_t; /*!< BLE security request type*/ +} esp_ble_sec_req_t; /*!< BLE security request type*/ /** * @brief union type of the security key value @@ -364,7 +369,27 @@ typedef union esp_ble_pid_keys_t pid_key; /*!< peer device ID key */ esp_ble_lenc_keys_t lenc_key; /*!< local encryption reproduction keys LTK = = d1(ER,DIV,0)*/ esp_ble_lcsrk_keys lcsrk_key; /*!< local device CSRK = d1(ER,DIV,1)*/ -}esp_ble_key_value_t; /*!< ble key value type*/ +} esp_ble_key_value_t; /*!< ble key value type*/ + +/** +* @brief struct type of the bond key informatuon value +*/ +typedef struct +{ + esp_ble_key_mask_t key_mask; /*!< the key mask to indicate witch key is present */ + esp_ble_penc_keys_t penc_key; /*!< received peer encryption key */ + esp_ble_pcsrk_keys_t pcsrk_key; /*!< received peer device SRK */ + esp_ble_pid_keys_t pid_key; /*!< peer device ID key */ +} esp_ble_bond_key_info_t; /*!< ble bond key information value type */ + +/** +* @brief struct type of the bond device value +*/ +typedef struct +{ + esp_bd_addr_t bd_addr; /*!< peer address */ + esp_ble_bond_key_info_t bond_key; /*!< the bond key information */ +} esp_ble_bond_dev_t; /*!< the ble bond device type */ /** @@ -375,7 +400,7 @@ typedef struct esp_bd_addr_t bd_addr; /*!< peer address */ esp_ble_key_type_t key_type; /*!< key type of the security link */ esp_ble_key_value_t p_key_value; /*!< the pointer to the key value */ -}esp_ble_key_t; /*!< the union to the ble key value type*/ +} esp_ble_key_t; /*!< the union to the ble key value type*/ /** * @brief structure type of the ble local id keys value @@ -384,7 +409,7 @@ typedef struct { esp_bt_octet16_t ir; /*!< the 16 bits of the ir value */ esp_bt_octet16_t irk; /*!< the 16 bits of the ir key value */ esp_bt_octet16_t dhk; /*!< the 16 bits of the dh key value */ -}esp_ble_local_id_keys_t; /*!< the structure of the ble local id keys value type*/ +} esp_ble_local_id_keys_t; /*!< the structure of the ble local id keys value type*/ /** @@ -400,7 +425,7 @@ typedef struct uint8_t fail_reason; /*!< The HCI reason/error code for when success=FALSE */ esp_ble_addr_type_t addr_type; /*!< Peer device address type */ esp_bt_dev_type_t dev_type; /*!< Device type */ -}esp_ble_auth_cmpl_t; /*!< The ble authentication complite cb type */ +} esp_ble_auth_cmpl_t; /*!< The ble authentication complite cb type */ /** * @brief union associated with ble security @@ -412,7 +437,7 @@ typedef union esp_ble_key_t ble_key; /*!< BLE SMP keys used when pairing */ esp_ble_local_id_keys_t ble_id_keys; /*!< BLE IR event */ esp_ble_auth_cmpl_t auth_cmpl; /*!< Authentication complete indication. */ -}esp_ble_sec_t; /*!< Ble secutity type */ +} esp_ble_sec_t; /*!< Ble secutity type */ /// Sub Event of ESP_GAP_BLE_SCAN_RESULT_EVT typedef enum { @@ -539,6 +564,33 @@ typedef union { esp_bt_status_t status; /*!< Indicate the set pkt data length operation success status */ esp_ble_pkt_data_length_params_t params; /*!< pkt data length value */ } pkt_data_lenth_cmpl; /*!< Event parameter of ESP_GAP_BLE_SET_PKT_LENGTH_COMPLETE_EVT */ + /** + * @brief ESP_GAP_BLE_SET_LOCAL_PRIVACY_COMPLETE_EVT + */ + struct ble_local_privacy_cmpl_evt_param { + esp_bt_status_t status; /*!< Indicate the set local privacy operation success status */ + } local_privacy_cmpl; /*!< Event parameter of ESP_GAP_BLE_SET_LOCAL_PRIVACY_COMPLETE_EVT */ + /** + * @brief ESP_GAP_BLE_REMOVE_BOND_DEV_COMPLETE_EVT + */ + struct ble_remove_bond_dev_cmpl_evt_param { + esp_bt_status_t status; /*!< Indicate the remove bond device operation success status */ + esp_bd_addr_t bd_addr; /*!< The device address which has been remove from the bond list */ + }remove_bond_dev_cmpl; /*!< Event parameter of ESP_GAP_BLE_REMOVE_BOND_DEV_COMPLETE_EVT */ + /** + * @brief ESP_GAP_BLE_CLEAR_BOND_DEV_COMPLETE_EVT + */ + struct ble_clear_bond_dev_cmpl_evt_param { + esp_bt_status_t status; /*!< Indicate the clear bond device operation success status */ + }clear_bond_dev_cmpl; /*!< Event parameter of ESP_GAP_BLE_CLEAR_BOND_DEV_COMPLETE_EVT */ + /** + * @brief ESP_GAP_BLE_GET_BOND_DEV_COMPLETE_EVT + */ + struct ble_get_bond_dev_cmpl_evt_param { + esp_bt_status_t status; /*!< Indicate the get bond device operation success status */ + uint8_t dev_num; /*!< Indicate the get number device in the bond list */ + esp_ble_bond_dev_t *bond_dev; /*!< the pointer to the bond device Structure */ + }get_bond_dev_cmpl; /*!< Event parameter of ESP_GAP_BLE_GET_BOND_DEV_COMPLETE_EVT */ } esp_ble_gap_cb_param_t; /** @@ -814,6 +866,38 @@ esp_err_t esp_ble_passkey_reply(esp_bd_addr_t bd_addr, bool accept, uint32_t pas */ esp_err_t esp_ble_confirm_reply(esp_bd_addr_t bd_addr, bool accept); +/** +* @brief Removes a device from the security database list of +* peer device. It manages unpairing event while connected. +* +* @param[in] bd_addr : BD address of the peer device +* +* @return - ESP_OK : success +* - other : failed +* +*/ +esp_err_t esp_ble_remove_bond_device(esp_bd_addr_t bd_addr); + +/** +* @brief Removes all of the device from the security database list of +* peer device. It manages unpairing event while connected. +* +* @return - ESP_OK : success +* - other : failed +* +*/ +esp_err_t esp_ble_clear_bond_device_list(void); + +/** +* @brief Get the device from the security database list of peer device. +* It will return the device bonded information from the ESP_GAP_BLE_GET_BOND_DEV_COMPLETE_EVT event. +* +* @return - ESP_OK : success +* - other : failed +* +*/ +esp_err_t esp_ble_get_bond_device_list(void); + /** * @brief This function is to disconnect the physical connection of the peer device * diff --git a/tools/sdk/include/bluedroid/esp_gatt_common_api.h b/tools/sdk/include/bluedroid/esp_gatt_common_api.h new file mode 100644 index 00000000..33bc1125 --- /dev/null +++ b/tools/sdk/include/bluedroid/esp_gatt_common_api.h @@ -0,0 +1,46 @@ +// Copyright 2015-2017 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include + +#include "esp_err.h" +#include "esp_bt_defs.h" + +#ifdef __cplusplus +extern "C" { +#endif + +// Maximum Transmission Unit used in GATT +#define ESP_GATT_DEF_BLE_MTU_SIZE 23 /* relate to GATT_DEF_BLE_MTU_SIZE in gatt_api.h */ + +// Maximum Transmission Unit allowed in GATT +#define ESP_GATT_MAX_MTU_SIZE 517 /* relate to GATT_MAX_MTU_SIZE in gatt_api.h */ + +/** + * @brief This function is called to set local MTU, + * the function is called before BLE connection. + * + * @param[in] mtu: the size of MTU. + * + * @return + * - ESP_OK: success + * - other: failed + * + */ +extern esp_err_t esp_ble_gatt_set_local_mtu (uint16_t mtu); + +#ifdef __cplusplus +} +#endif diff --git a/tools/sdk/include/bluedroid/esp_gattc_api.h b/tools/sdk/include/bluedroid/esp_gattc_api.h index 6e6f9396..b950d438 100644 --- a/tools/sdk/include/bluedroid/esp_gattc_api.h +++ b/tools/sdk/include/bluedroid/esp_gattc_api.h @@ -68,11 +68,6 @@ typedef enum { ESP_GATTC_DISCONNECT_EVT = 41, /*!< When the ble physical connection disconnected, the event comes */ } esp_gattc_cb_event_t; -/// Maximum Transmission Unit used in GATT -#define ESP_GATT_DEF_BLE_MTU_SIZE 23 - -/// Maximum Transmission Unit allowed in GATT -#define ESP_GATT_MAX_MTU_SIZE 517 /** * @brief Gatt client callback parameters union @@ -355,18 +350,19 @@ esp_err_t esp_ble_gattc_close (esp_gatt_if_t gattc_if, uint16_t conn_id); /** * @brief Configure the MTU size in the GATT channel. This can be done - * only once per connection. + * only once per connection. Before using, use esp_ble_gatt_set_local_mtu() + * to configure the local MTU size. + * * * @param[in] gattc_if: Gatt client access interface. * @param[in] conn_id: connection ID. - * @param[in] mtu: desired MTU size to use. * * @return * - ESP_OK: success * - other: failed * */ -esp_err_t esp_ble_gattc_config_mtu (esp_gatt_if_t gattc_if, uint16_t conn_id, uint16_t mtu); +esp_err_t esp_ble_gattc_send_mtu_req (esp_gatt_if_t gattc_if, uint16_t conn_id); /** @@ -634,7 +630,7 @@ esp_err_t esp_ble_gattc_execute_write (esp_gatt_if_t gattc_if, uint16_t conn_id, * - other: failed * */ -esp_gatt_status_t esp_ble_gattc_register_for_notify (esp_gatt_if_t gattc_if, +esp_err_t esp_ble_gattc_register_for_notify (esp_gatt_if_t gattc_if, esp_bd_addr_t server_bda, esp_gatt_srvc_id_t *srvc_id, esp_gatt_id_t *char_id); @@ -653,7 +649,7 @@ esp_gatt_status_t esp_ble_gattc_register_for_notify (esp_gatt_if_t gattc_if, * - other: failed * */ -esp_gatt_status_t esp_ble_gattc_unregister_for_notify (esp_gatt_if_t gattc_if, +esp_err_t esp_ble_gattc_unregister_for_notify (esp_gatt_if_t gattc_if, esp_bd_addr_t server_bda, esp_gatt_srvc_id_t *srvc_id, esp_gatt_id_t *char_id); diff --git a/tools/sdk/include/bluedroid/esp_gatts_api.h b/tools/sdk/include/bluedroid/esp_gatts_api.h index 6bbc370a..d964ac9b 100644 --- a/tools/sdk/include/bluedroid/esp_gatts_api.h +++ b/tools/sdk/include/bluedroid/esp_gatts_api.h @@ -514,11 +514,11 @@ esp_err_t esp_ble_gatts_set_attr_value(uint16_t attr_handle, uint16_t length, co * @param[out] value: Pointer to attribute value payload, the value cannot be modified by user * * @return - * - ESP_OK : success + * - ESP_GATT_OK : success * - other : failed * */ -esp_err_t esp_ble_gatts_get_attr_value(uint16_t attr_handle, uint16_t *length, const uint8_t **value); +esp_gatt_status_t esp_ble_gatts_get_attr_value(uint16_t attr_handle, uint16_t *length, const uint8_t **value); /** diff --git a/tools/sdk/include/bluedroid/fixed_queue.h b/tools/sdk/include/bluedroid/fixed_queue.h index 9cbb846d..becafea1 100644 --- a/tools/sdk/include/bluedroid/fixed_queue.h +++ b/tools/sdk/include/bluedroid/fixed_queue.h @@ -20,8 +20,10 @@ #define _FIXED_QUEUE_H_ #include +#include "list.h" struct fixed_queue_t; + typedef struct fixed_queue_t fixed_queue_t; //typedef struct reactor_t reactor_t; @@ -38,10 +40,14 @@ fixed_queue_t *fixed_queue_new(size_t capacity); // blocked on it) results in undefined behaviour. void fixed_queue_free(fixed_queue_t *queue, fixed_queue_free_cb free_cb); -// Returns a value indicating whether the given |queue| is empty. |queue| may -// not be NULL. +// Returns a value indicating whether the given |queue| is empty. If |queue| +// is NULL, the return value is true. bool fixed_queue_is_empty(fixed_queue_t *queue); +// Returns the length of the |queue|. If |queue| is NULL, the return value +// is 0. +size_t fixed_queue_length(fixed_queue_t *queue); + // Returns the maximum number of elements this queue may hold. |queue| may // not be NULL. size_t fixed_queue_capacity(fixed_queue_t *queue); @@ -66,12 +72,33 @@ bool fixed_queue_try_enqueue(fixed_queue_t *queue, void *data); // the caller. If the queue is empty, this function returns NULL immediately. // Otherwise, the next element in the queue is returned. |queue| may not be // NULL. -//void *fixed_queue_try_dequeue(fixed_queue_t *queue); +void *fixed_queue_try_dequeue(fixed_queue_t *queue); // Returns the first element from |queue|, if present, without dequeuing it. -// This function will never block the caller. Returns NULL if there are no elements -// in the queue. |queue| may not be NULL. -//void *fixed_queue_try_peek(fixed_queue_t *queue); +// This function will never block the caller. Returns NULL if there are no +// elements in the queue or |queue| is NULL. +void *fixed_queue_try_peek_first(fixed_queue_t *queue); + +// Returns the last element from |queue|, if present, without dequeuing it. +// This function will never block the caller. Returns NULL if there are no +// elements in the queue or |queue| is NULL. +void *fixed_queue_try_peek_last(fixed_queue_t *queue); + +// Tries to remove a |data| element from the middle of the |queue|. This +// function will never block the caller. If the queue is empty or NULL, this +// function returns NULL immediately. |data| may not be NULL. If the |data| +// element is found in the queue, a pointer to the removed data is returned, +// otherwise NULL. +void *fixed_queue_try_remove_from_queue(fixed_queue_t *queue, void *data); + +// Returns the iterateable list with all entries in the |queue|. This function +// will never block the caller. |queue| may not be NULL. +// +// NOTE: The return result of this function is not thread safe: the list could +// be modified by another thread, and the result would be unpredictable. +// TODO: The usage of this function should be refactored, and the function +// itself should be removed. +list_t *fixed_queue_get_list(fixed_queue_t *queue); // This function returns a valid file descriptor. Callers may perform one // operation on the fd: select(2). If |select| indicates that the file @@ -99,4 +126,6 @@ void fixed_queue_unregister_dequeue(fixed_queue_t *queue); void fixed_queue_process(fixed_queue_t *queue); +list_t *fixed_queue_get_list(fixed_queue_t *queue); + #endif diff --git a/tools/sdk/include/bluedroid/future.h b/tools/sdk/include/bluedroid/future.h index a89640c2..f001f1f1 100644 --- a/tools/sdk/include/bluedroid/future.h +++ b/tools/sdk/include/bluedroid/future.h @@ -18,9 +18,8 @@ #ifndef __FUTURE_H__ #define __FUTURE_H__ -// #pragma once -#include "osi_arch.h" +#include "semaphore.h" struct future { bool ready_can_be_called; diff --git a/tools/sdk/include/bluedroid/gap_int.h b/tools/sdk/include/bluedroid/gap_int.h index f05b0ce2..e9317a04 100644 --- a/tools/sdk/include/bluedroid/gap_int.h +++ b/tools/sdk/include/bluedroid/gap_int.h @@ -21,8 +21,8 @@ #define GAP_INT_H #include "bt_target.h" +#include "fixed_queue.h" #include "gap_api.h" -#include "gki.h" #include "gatt_api.h" #define GAP_MAX_BLOCKS 2 /* Concurrent GAP commands pending at a time*/ /* Define the Generic Access Profile control structure */ @@ -71,8 +71,8 @@ typedef struct { UINT16 rem_mtu_size; BOOLEAN is_congested; - BUFFER_Q tx_queue; /* Queue of buffers waiting to be sent */ - BUFFER_Q rx_queue; /* Queue of buffers waiting to be read */ + fixed_queue_t *tx_queue; /* Queue of buffers waiting to be sent */ + fixed_queue_t *rx_queue; /* Queue of buffers waiting to be read */ UINT32 rx_queue_size; /* Total data count in rx_queue */ @@ -119,7 +119,7 @@ typedef struct { UINT16 cl_op_uuid; BOOLEAN in_use; BOOLEAN connected; - BUFFER_Q pending_req_q; + fixed_queue_t *pending_req_q; } tGAP_CLCB; diff --git a/tools/sdk/include/bluedroid/gatt_api.h b/tools/sdk/include/bluedroid/gatt_api.h index 76d8c465..946e5fee 100644 --- a/tools/sdk/include/bluedroid/gatt_api.h +++ b/tools/sdk/include/bluedroid/gatt_api.h @@ -943,7 +943,7 @@ tGATT_STATUS GATTS_GetAttributeValue(UINT16 attr_handle, UINT16 *length, UINT8 * ** Returns GATT_SUCCESS if command started successfully. ** *******************************************************************************/ -extern tGATT_STATUS GATTC_ConfigureMTU (UINT16 conn_id, UINT16 mtu); +extern tGATT_STATUS GATTC_ConfigureMTU (UINT16 conn_id); /******************************************************************************* ** diff --git a/tools/sdk/include/bluedroid/gatt_int.h b/tools/sdk/include/bluedroid/gatt_int.h index b538ed8b..9d836597 100644 --- a/tools/sdk/include/bluedroid/gatt_int.h +++ b/tools/sdk/include/bluedroid/gatt_int.h @@ -20,12 +20,11 @@ #define GATT_INT_H #include "bt_target.h" - - #include "bt_trace.h" #include "gatt_api.h" #include "btm_ble_api.h" #include "btu.h" +#include "fixed_queue.h" #include @@ -222,7 +221,7 @@ typedef struct { typedef struct { void *p_attr_list; /* pointer to the first attribute, either tGATT_ATTR16 or tGATT_ATTR128 */ UINT8 *p_free_mem; /* Pointer to free memory */ - BUFFER_Q svc_buffer; /* buffer queue used for service database */ + fixed_queue_t *svc_buffer; /* buffer queue used for service database */ UINT32 mem_free; /* Memory still available */ UINT16 end_handle; /* Last handle number */ UINT16 next_handle; /* Next usable handle value */ @@ -285,7 +284,7 @@ typedef struct { BT_HDR *p_rsp_msg; UINT32 trans_id; tGATT_READ_MULTI multi_req; - BUFFER_Q multi_rsp_q; + fixed_queue_t *multi_rsp_q; UINT16 handle; UINT8 op_code; UINT8 status; @@ -357,7 +356,7 @@ typedef struct{ typedef struct{ //only store prepare write packets which need //to be responded by stack (not by application) - BUFFER_Q queue; + fixed_queue_t *queue; //store the total number of prepare write packets //including that should be responded by stack or by application @@ -369,7 +368,7 @@ typedef struct{ }tGATT_PREPARE_WRITE_RECORD; typedef struct { - BUFFER_Q pending_enc_clcb; /* pending encryption channel q */ + fixed_queue_t *pending_enc_clcb; /* pending encryption channel q */ tGATT_SEC_ACTION sec_act; BD_ADDR peer_bda; tBT_TRANSPORT transport; @@ -389,7 +388,7 @@ typedef struct { tGATT_SR_CMD sr_cmd; #endif ///GATTS_INCLUDED == TRUE UINT16 indicate_handle; - BUFFER_Q pending_ind_q; + fixed_queue_t *pending_ind_q; TIMER_LIST_ENT conf_timer_ent; /* peer confirm to indication timer */ @@ -498,7 +497,7 @@ typedef struct { typedef struct { tGATT_TCB tcb[GATT_MAX_PHY_CHANNEL]; - BUFFER_Q sign_op_queue; + fixed_queue_t *sign_op_queue; tGATT_SR_REG sr_reg[GATT_MAX_SR_PROFILES]; UINT16 next_handle; /* next available handle */ @@ -510,8 +509,8 @@ typedef struct { tGATT_SRV_LIST_INFO srv_list_info; tGATT_SRV_LIST_ELEM srv_list[GATT_MAX_SR_PROFILES]; #endif ///GATTS_INCLUDED == TRUE - BUFFER_Q srv_chg_clt_q; /* service change clients queue */ - BUFFER_Q pending_new_srv_start_q; /* pending new service start queue */ + fixed_queue_t *srv_chg_clt_q; /* service change clients queue */ + fixed_queue_t *pending_new_srv_start_q; /* pending new service start queue */ tGATT_REG cl_rcb[GATT_MAX_APPS]; tGATT_CLCB clcb[GATT_CL_MAX_LCB]; /* connection link control block*/ tGATT_SCCB sccb[GATT_MAX_SCCB]; /* sign complete callback function GATT_MAX_SCCB <= GATT_CL_MAX_LCB */ @@ -538,6 +537,9 @@ typedef struct { } tGATT_CB; +typedef struct{ + UINT16 local_mtu; +} tGATT_DEFAULT; #define GATT_SIZE_OF_SRV_CHG_HNDL_RANGE 4 @@ -545,6 +547,8 @@ typedef struct { extern "C" { #endif +extern tGATT_DEFAULT gatt_default; + /* Global GATT data */ #if GATT_DYNAMIC_MEMORY == FALSE extern tGATT_CB gatt_cb; @@ -742,4 +746,6 @@ extern void gatts_update_srv_list_elem(UINT8 i_sreg, UINT16 handle, BOOLEAN is_p extern tBT_UUID *gatts_get_service_uuid (tGATT_SVC_DB *p_db); extern void gatt_reset_bgdev_list(void); +extern uint16_t gatt_get_local_mtu(void); +extern void gatt_set_local_mtu(uint16_t mtu); #endif diff --git a/tools/sdk/include/bluedroid/gki.h b/tools/sdk/include/bluedroid/gki.h deleted file mode 100644 index 4e5f3c2b..00000000 --- a/tools/sdk/include/bluedroid/gki.h +++ /dev/null @@ -1,132 +0,0 @@ -/****************************************************************************** - * - * Copyright (C) 1999-2012 Broadcom Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ******************************************************************************/ - -#ifndef _GKI_H_ -#define _GKI_H_ - -#include "bt_target.h" -#include "bt_types.h" -#include "gki_common.h" -#include "gki_int.h" -#include "allocator.h" - -#define ALIGN_POOL(pl_size) ( (((pl_size) + 3) / sizeof(UINT32)) * sizeof(UINT32)) -#define BUFFER_HDR_SIZE (sizeof(BUFFER_HDR_T)) /* Offset past header */ -#define BUFFER_PADDING_SIZE (sizeof(BUFFER_HDR_T) + sizeof(UINT32)) /* Header + Magic Number */ -#define MAGIC_NO 0xDDBADDBA - -#define BUF_STATUS_FREE 0 -#define BUF_STATUS_UNLINKED 1 -#define BUF_STATUS_QUEUED 2 - -/* Timer list entry callback type -*/ -typedef void (TIMER_CBACK)(void *p_tle); -#ifndef TIMER_PARAM_TYPE -#define TIMER_PARAM_TYPE UINT32 -#endif -/* Define a timer list entry -*/ -typedef struct _tle { - struct _tle *p_next; - struct _tle *p_prev; - TIMER_CBACK *p_cback; - INT32 ticks; - INT32 ticks_initial; - TIMER_PARAM_TYPE param; - TIMER_PARAM_TYPE data; - UINT16 event; - UINT8 in_use; -} TIMER_LIST_ENT; - -/*********************************************************************** -** This queue is a general purpose buffer queue, for application use. -*/ -typedef struct { - void *_p_first; - void *_p_last; - UINT16 _count; -} BUFFER_Q; - -#define GKI_PUBLIC_POOL 0 /* General pool accessible to GKI_getbuf() */ -#define GKI_RESTRICTED_POOL 1 /* Inaccessible pool to GKI_getbuf() */ - -/*********************************************************************** -** Function prototypes -*/ - -/* To get and release buffers, change owner and get size -*/ -void *GKI_getbuf_func(UINT16); -void *GKI_getpoolbuf_func(UINT8); -void GKI_freebuf(void *); -UINT16 GKI_get_buf_size (void *); -void *GKI_getpoolbuf (UINT8); -UINT16 GKI_poolcount (UINT8); -UINT16 GKI_poolfreecount (UINT8); -UINT16 GKI_poolutilization (UINT8); - -#ifdef CONFIG_BLUEDROID_MEM_DEBUG - -#define GKI_getbuf(_size) \ -({ \ - BUFFER_HDR_T *header = osi_malloc((_size) + BUFFER_HDR_SIZE); \ - header->status = BUF_STATUS_UNLINKED; \ - header->p_next = NULL; \ - header->Type = 0; \ - header->size = (_size); \ - (void *)(header + 1); \ -}) - -#define GKI_getpoolbuf(_pool_id) \ -({ \ - (void *)GKI_getbuf(gki_cb.com.pool_size[(_pool_id)]); \ -}) - -#else -#define GKI_getbuf GKI_getbuf_func -#define GKI_getpoolbuf GKI_getpoolbuf_func - -#endif /* CONFIG_BLUEDROID_MEM_DEBUG */ - -/* User buffer queue management -*/ -void *GKI_dequeue (BUFFER_Q *); -void GKI_enqueue (BUFFER_Q *, void *); -void *GKI_getfirst (BUFFER_Q *); -void *GKI_getlast (BUFFER_Q *); -void *GKI_getnext (void *); -void GKI_init_q (BUFFER_Q *); -UINT16 GKI_queue_length(BUFFER_Q *); -BOOLEAN GKI_queue_is_empty(BUFFER_Q *); -void *GKI_remove_from_queue (BUFFER_Q *, void *); -UINT16 GKI_get_pool_bufsize (UINT8); - -/* Timer management -*/ -void GKI_delay(UINT32); - -/* Disable Interrupts, Enable Interrupts -*/ -void GKI_enable(void); -void GKI_disable(void); - -/* os timer operation */ -UINT32 GKI_get_os_tick_count(void); - -#endif /*_GKI_H_*/ diff --git a/tools/sdk/include/bluedroid/gki_common.h b/tools/sdk/include/bluedroid/gki_common.h deleted file mode 100644 index 838896ee..00000000 --- a/tools/sdk/include/bluedroid/gki_common.h +++ /dev/null @@ -1,65 +0,0 @@ -/****************************************************************************** - * - * Copyright (C) 1999-2012 Broadcom Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ******************************************************************************/ - -#ifndef _GKI_COMMON_H_ -#define _GKI_COMMON_H_ - -#include "gki.h" - -typedef struct _buffer_hdr { - struct _buffer_hdr *p_next; /* next buffer in the queue */ - UINT8 q_id; /* id of the queue */ - UINT8 status; /* FREE, UNLINKED or QUEUED */ - UINT8 Type; - UINT16 size; -} BUFFER_HDR_T; - -typedef struct _free_queue { - BUFFER_HDR_T *_p_first; /* first buffer in the queue */ - BUFFER_HDR_T *_p_last; /* last buffer in the queue */ - UINT16 size; /* size of the buffers in the pool */ - UINT16 total; /* toatal number of buffers */ - UINT16 cur_cnt; /* number of buffers currently allocated */ - UINT16 max_cnt; /* maximum number of buffers allocated at any time */ -} FREE_QUEUE_T; - -/* Put all GKI variables into one control block -*/ -typedef struct { - /* Define the buffer pool management variables - */ - FREE_QUEUE_T freeq[GKI_NUM_TOTAL_BUF_POOLS]; - - UINT16 pool_buf_size[GKI_NUM_TOTAL_BUF_POOLS]; - - /* Define the buffer pool start addresses - */ - UINT8 *pool_start[GKI_NUM_TOTAL_BUF_POOLS]; /* array of pointers to the start of each buffer pool */ - UINT8 *pool_end[GKI_NUM_TOTAL_BUF_POOLS]; /* array of pointers to the end of each buffer pool */ - UINT16 pool_size[GKI_NUM_TOTAL_BUF_POOLS]; /* actual size of the buffers in a pool */ - - /* Define the buffer pool access control variables */ - UINT16 pool_access_mask; /* Bits are set if the corresponding buffer pool is a restricted pool */ -} tGKI_COM_CB; - -/* Internal GKI function prototypes -*/ -void gki_buffer_init(void); -void gki_buffer_cleanup(void); - -#endif /*_GKI_COMMON_H_*/ diff --git a/tools/sdk/include/bluedroid/gki_target.h b/tools/sdk/include/bluedroid/gki_target.h deleted file mode 100644 index fc844518..00000000 --- a/tools/sdk/include/bluedroid/gki_target.h +++ /dev/null @@ -1,244 +0,0 @@ -/****************************************************************************** - * - * Copyright (C) 1999-2012 Broadcom Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ******************************************************************************/ - -#ifndef _GKI_TARGET_H_ -#define _GKI_TARGET_H_ - -/****************************************************************************** -** -** Buffer configuration -** -******************************************************************************/ - -/* The size of the buffers in pool 0. */ -#ifndef GKI_BUF0_SIZE -#define GKI_BUF0_SIZE 64 -#endif - -/* The number of buffers in buffer pool 0. */ -#ifndef GKI_BUF0_MAX -#define GKI_BUF0_MAX 96 -#endif - -/* The ID of buffer pool 0. */ -#ifndef GKI_POOL_ID_0 -#define GKI_POOL_ID_0 0 -#endif - -/* The size of the buffers in pool 1. */ -#ifndef GKI_BUF1_SIZE -#define GKI_BUF1_SIZE 288 -#endif - -/* The number of buffers in buffer pool 1. */ -#ifndef GKI_BUF1_MAX -#define GKI_BUF1_MAX 52 -#endif - -/* The ID of buffer pool 1. */ -#ifndef GKI_POOL_ID_1 -#define GKI_POOL_ID_1 1 -#endif - -/* The size of the buffers in pool 2. */ -#ifndef GKI_BUF2_SIZE -#define GKI_BUF2_SIZE 660 -#endif - -/* The number of buffers in buffer pool 2. */ -#ifndef GKI_BUF2_MAX -#define GKI_BUF2_MAX 90 -#endif - -/* The ID of buffer pool 2. */ -#ifndef GKI_POOL_ID_2 -#define GKI_POOL_ID_2 2 -#endif - -/* The size of the buffers in pool 3. */ -#ifndef GKI_BUF3_SIZE -#define GKI_BUF3_SIZE (4096+16) -#endif - -/* The number of buffers in buffer pool 3. */ -#ifndef GKI_BUF3_MAX -#define GKI_BUF3_MAX 400 -#endif - -/* The ID of buffer pool 3. */ -#ifndef GKI_POOL_ID_3 -#define GKI_POOL_ID_3 3 -#endif - -/* The size of the largest PUBLIC fixed buffer in system. */ -#ifndef GKI_MAX_BUF_SIZE -#define GKI_MAX_BUF_SIZE GKI_BUF3_SIZE -#endif - -/* The pool ID of the largest PUBLIC fixed buffer in system. */ -#ifndef GKI_MAX_BUF_SIZE_POOL_ID -#define GKI_MAX_BUF_SIZE_POOL_ID GKI_POOL_ID_3 -#endif - -/* Pool 4 is used for BluetoothSocket L2CAP connections */ -/* The size of the buffers in pool 4. */ -#ifndef GKI_BUF4_SIZE -#define GKI_BUF4_SIZE (8080+26) -#endif - -/* The number of buffers in buffer pool 4. */ -#ifndef GKI_BUF4_MAX -#define GKI_BUF4_MAX (OBX_NUM_SERVERS + OBX_NUM_CLIENTS) -#endif - -/* The ID of buffer pool 4. */ -#ifndef GKI_POOL_ID_4 -#define GKI_POOL_ID_4 4 -#endif - -/* The number of fixed GKI buffer pools. -eL2CAP requires Pool ID 5 -If BTM_SCO_HCI_INCLUDED is FALSE, Pool ID 6 is unnecessary, otherwise set to 7 -If BTA_HL_INCLUDED is FALSE then Pool ID 7 is uncessary and set the following to 7, otherwise set to 8 -If BLE_INCLUDED is FALSE then Pool ID 8 is uncessary and set the following to 8, otherwise set to 9 -POOL_ID 9 is a public pool meant for large buffer needs such as SDP_DB -*/ -#ifndef GKI_NUM_FIXED_BUF_POOLS -#define GKI_NUM_FIXED_BUF_POOLS 10 -#endif - -/* The buffer pool usage mask. */ -#ifndef GKI_DEF_BUFPOOL_PERM_MASK -/* Setting POOL_ID 9 as a public pool meant for large buffers such as SDP_DB */ -#define GKI_DEF_BUFPOOL_PERM_MASK 0xfdf0 -#endif - -/* The following is intended to be a reserved pool for L2CAP -Flow control and retransmissions and intentionally kept out -of order */ - -/* The number of buffers in buffer pool 5. */ -#ifndef GKI_BUF5_MAX -#define GKI_BUF5_MAX 64 -#endif - -/* The ID of buffer pool 5. */ -#ifndef GKI_POOL_ID_5 -#define GKI_POOL_ID_5 5 -#endif - -/* The size of the buffers in pool 5 -** Special pool used by L2CAP retransmissions only. This size based on segment -** that will fit into both DH5 and 2-DH3 packet types after accounting for GKI -** header. 13 bytes of max headers allows us a 339 payload max. (in btui_app.txt) -** Note: 748 used for insight scriptwrapper with CAT-2 scripts. -*/ -#ifndef GKI_BUF5_SIZE -#define GKI_BUF5_SIZE 748 -#endif - -/* The following is intended to be a reserved pool for SCO -over HCI data and intentionally kept out of order */ - -/* The ID of buffer pool 6. */ -#ifndef GKI_POOL_ID_6 -#define GKI_POOL_ID_6 6 -#endif - -/* The size of the buffers in pool 6, - BUF_SIZE = max SCO data 255 + sizeof(BT_HDR) = 8 + SCO packet header 3 + padding 2 = 268 */ -#ifndef GKI_BUF6_SIZE -#define GKI_BUF6_SIZE 268 -#endif - -/* The number of buffers in buffer pool 6. */ -#ifndef GKI_BUF6_MAX -#define GKI_BUF6_MAX 60 -#endif - - -/* The following pool is a dedicated pool for HDP - If a shared pool is more desirable then - 1. set BTA_HL_LRG_DATA_POOL_ID to the desired Gki Pool ID - 2. make sure that the shared pool size is larger than 9472 - 3. adjust GKI_NUM_FIXED_BUF_POOLS accordingly since - POOL ID 7 is not needed -*/ - -/* The ID of buffer pool 7. */ -#ifndef GKI_POOL_ID_7 -#define GKI_POOL_ID_7 7 -#endif - -/* The size of the buffers in pool 7 */ -#ifndef GKI_BUF7_SIZE -#define GKI_BUF7_SIZE (10240 + 24) -#endif - -/* The number of buffers in buffer pool 7. */ -#ifndef GKI_BUF7_MAX -#define GKI_BUF7_MAX 2 -#endif - -/* The following pool is a dedicated pool for GATT - If a shared pool is more desirable then - 1. set GATT_DB_POOL_ID to the desired Gki Pool ID - 2. make sure that the shared pool size fit a common GATT database needs - 3. adjust GKI_NUM_FIXED_BUF_POOLS accordingly since - POOL ID 8 is not needed -*/ - -/* The ID of buffer pool 8. */ -#ifndef GKI_POOL_ID_8 -#define GKI_POOL_ID_8 8 -#endif - -/* The size of the buffers in pool 8 */ -#ifndef GKI_BUF8_SIZE -#define GKI_BUF8_SIZE 128 -#endif - -/* The number of buffers in buffer pool 8. */ -#ifndef GKI_BUF8_MAX -#define GKI_BUF8_MAX 30 -#endif - -/* The following pool is meant for large allocations such as SDP_DB */ -#ifndef GKI_POOL_ID_9 -#define GKI_POOL_ID_9 9 -#endif - -#ifndef GKI_BUF9_SIZE -#define GKI_BUF9_SIZE 8192 -#endif - -#ifndef GKI_BUF9_MAX -#define GKI_BUF9_MAX 5 -#endif - -/* The number of fixed and dynamic buffer pools */ -#ifndef GKI_NUM_TOTAL_BUF_POOLS -#define GKI_NUM_TOTAL_BUF_POOLS 10 -#endif - -int gki_init(void); -void gki_clean_up(void); - -//void LogMsg (UINT32 trace_set_mask, const char *fmt_str, ...); - -#endif /*_GKI_TARGET_H_*/ diff --git a/tools/sdk/include/bluedroid/hci_layer.h b/tools/sdk/include/bluedroid/hci_layer.h index caea29f2..76f93638 100644 --- a/tools/sdk/include/bluedroid/hci_layer.h +++ b/tools/sdk/include/bluedroid/hci_layer.h @@ -77,9 +77,6 @@ typedef struct hci_t { // Do the postload sequence (call after the rest of the BT stack initializes). void (*do_postload)(void); - // Set the queue to receive ACL data in - void (*set_data_queue)(fixed_queue_t *queue); - // Send a command through the HCI layer void (*transmit_command)( BT_HDR *command, diff --git a/tools/sdk/include/bluedroid/l2c_api.h b/tools/sdk/include/bluedroid/l2c_api.h index f2a4d7c4..e6e7e44f 100644 --- a/tools/sdk/include/bluedroid/l2c_api.h +++ b/tools/sdk/include/bluedroid/l2c_api.h @@ -306,10 +306,10 @@ typedef struct { typedef struct { UINT8 preferred_mode; UINT8 allowed_modes; - UINT8 user_rx_pool_id; - UINT8 user_tx_pool_id; - UINT8 fcr_rx_pool_id; - UINT8 fcr_tx_pool_id; + UINT16 user_rx_buf_size; + UINT16 user_tx_buf_size; + UINT16 fcr_rx_buf_size; + UINT16 fcr_tx_buf_size; } tL2CAP_ERTM_INFO; diff --git a/tools/sdk/include/bluedroid/l2c_int.h b/tools/sdk/include/bluedroid/l2c_int.h index b8865917..ef31d109 100644 --- a/tools/sdk/include/bluedroid/l2c_int.h +++ b/tools/sdk/include/bluedroid/l2c_int.h @@ -27,10 +27,10 @@ #include #include "btm_api.h" -#include "gki.h" #include "l2c_api.h" #include "l2cdefs.h" #include "list.h" +#include "fixed_queue.h" #define L2CAP_MIN_MTU 48 /* Minimum acceptable MTU is 48 bytes */ @@ -176,9 +176,9 @@ typedef struct { UINT16 rx_sdu_len; /* Length of the SDU being received */ BT_HDR *p_rx_sdu; /* Buffer holding the SDU being received */ - BUFFER_Q waiting_for_ack_q; /* Buffers sent and waiting for peer to ack */ - BUFFER_Q srej_rcv_hold_q; /* Buffers rcvd but held pending SREJ rsp */ - BUFFER_Q retrans_q; /* Buffers being retransmitted */ + fixed_queue_t *waiting_for_ack_q; /* Buffers sent and waiting for peer to ack */ + fixed_queue_t *srej_rcv_hold_q; /* Buffers rcvd but held pending SREJ rsp */ + fixed_queue_t *retrans_q; /* Buffers being retransmitted */ TIMER_LIST_ENT ack_timer; /* Timer delaying RR */ TIMER_LIST_ENT mon_retrans_timer; /* Timer Monitor or Retransmission */ @@ -241,6 +241,9 @@ typedef struct { } tL2C_RCB; +#ifndef L2CAP_CBB_DEFAULT_DATA_RATE_BUFF_QUOTA +#define L2CAP_CBB_DEFAULT_DATA_RATE_BUFF_QUOTA 100 +#endif /* Define a channel control block (CCB). There may be many channel control blocks ** between the same two Bluetooth devices (i.e. on the same link). ** Each CCB has unique local and remote CIDs. All channel control blocks on @@ -279,7 +282,7 @@ typedef struct t_l2c_ccb { tL2CAP_CH_CFG_BITS peer_cfg_bits; /* Store what peer wants to configure */ tL2CAP_CFG_INFO peer_cfg; /* Peer's saved configuration options */ - BUFFER_Q xmit_hold_q; /* Transmit data hold queue */ + fixed_queue_t *xmit_hold_q; /* Transmit data hold queue */ BOOLEAN cong_sent; /* Set when congested status sent */ UINT16 buff_quota; /* Buffer quota before sending congestion */ @@ -379,8 +382,8 @@ typedef struct t_l2c_linkcb { UINT8 peer_chnl_mask[L2CAP_FIXED_CHNL_ARRAY_SIZE]; #if (L2CAP_UCD_INCLUDED == TRUE) UINT16 ucd_mtu; /* peer MTU on UCD */ - BUFFER_Q ucd_out_sec_pending_q; /* Security pending outgoing UCD packet */ - BUFFER_Q ucd_in_sec_pending_q; /* Security pending incoming UCD packet */ + fixed_queue_t *ucd_out_sec_pending_q; /* Security pending outgoing UCD packet */ + fixed_queue_t *ucd_in_sec_pending_q; /* Security pending incoming UCD packet */ #endif BT_HDR *p_hcit_rcv_acl; /* Current HCIT ACL buf being rcvd */ @@ -402,14 +405,24 @@ typedef struct t_l2c_linkcb { #define L2C_BLE_NEW_CONN_PARAM 0x2 /* new connection parameter to be set */ #define L2C_BLE_UPDATE_PENDING 0x4 /* waiting for connection update finished */ #define L2C_BLE_NOT_DEFAULT_PARAM 0x8 /* not using default connection parameters */ +#define L2C_BLE_UPDATE_PARAM_FULL 0x10 /* update connection parameters full, can not update */ UINT8 conn_update_mask; - - UINT16 min_interval; /* parameters as requested by peripheral */ - UINT16 max_interval; - UINT16 conn_int; - UINT16 latency; - UINT16 timeout; - + /* cache connection parameters that wait to update */ + UINT16 waiting_update_conn_min_interval; + UINT16 waiting_update_conn_max_interval; + UINT16 waiting_update_conn_latency; + UINT16 waiting_update_conn_timeout; + /* cache parameters that is being updated */ + UINT16 updating_conn_min_interval; + UINT16 updating_conn_max_interval; + bool updating_param_flag; + /* current connection parameters that current connection is using */ + UINT16 current_used_conn_interval; + UINT16 current_used_conn_latency; + UINT16 current_used_conn_timeout; + /* connection parameters update order: + waiting_update_conn_xx -> updating_conn_xx -> current_used_conn_xx + */ #endif #if (L2CAP_ROUND_ROBIN_CHANNEL_SERVICE == TRUE) @@ -706,7 +719,7 @@ extern void l2c_fcr_proc_pdu (tL2C_CCB *p_ccb, BT_HDR *p_buf); extern void l2c_fcr_proc_tout (tL2C_CCB *p_ccb); extern void l2c_fcr_proc_ack_tout (tL2C_CCB *p_ccb); extern void l2c_fcr_send_S_frame (tL2C_CCB *p_ccb, UINT16 function_code, UINT16 pf_bit); -extern BT_HDR *l2c_fcr_clone_buf (BT_HDR *p_buf, UINT16 new_offset, UINT16 no_of_bytes, UINT8 pool); +extern BT_HDR *l2c_fcr_clone_buf (BT_HDR *p_buf, UINT16 new_offset, UINT16 no_of_bytes); extern BOOLEAN l2c_fcr_is_flow_controlled (tL2C_CCB *p_ccb); extern BT_HDR *l2c_fcr_get_next_xmit_sdu_seg (tL2C_CCB *p_ccb, UINT16 max_packet_length); extern void l2c_fcr_start_timer (tL2C_CCB *p_ccb); @@ -733,6 +746,7 @@ extern void l2cble_notify_le_connection (BD_ADDR bda); extern void l2c_ble_link_adjust_allocation (void); extern void l2cble_process_conn_update_evt (UINT16 handle, UINT8 status, UINT16 conn_interval, UINT16 conn_latency, UINT16 conn_timeout); +extern void l2cble_get_conn_param_format_err_from_contoller(UINT8 status, UINT16 handle); #if (defined BLE_LLT_INCLUDED) && (BLE_LLT_INCLUDED == TRUE) extern void l2cble_process_rc_param_request_evt(UINT16 handle, UINT16 int_min, UINT16 int_max, @@ -745,6 +759,7 @@ extern void l2cble_set_fixed_channel_tx_data_length(BD_ADDR remote_bda, UINT16 f extern void l2c_send_update_conn_params_cb(tL2C_LCB *p_lcb, UINT8 status); extern void l2cble_process_data_length_change_event(UINT16 handle, UINT16 tx_data_len, UINT16 rx_data_len); +extern UINT32 CalConnectParamTimeout(tL2C_LCB *p_lcb); #endif extern void l2cu_process_fixed_disc_cback (tL2C_LCB *p_lcb); diff --git a/tools/sdk/include/bluedroid/l2cdefs.h b/tools/sdk/include/bluedroid/l2cdefs.h index e31ee24b..db5013a1 100644 --- a/tools/sdk/include/bluedroid/l2cdefs.h +++ b/tools/sdk/include/bluedroid/l2cdefs.h @@ -258,8 +258,9 @@ #define L2CAP_BLE_EXTFEA_MASK 0 #endif -/* Define a value that tells L2CAP to use the default HCI ACL buffer pool */ -#define L2CAP_DEFAULT_ERM_POOL_ID 0xFF +/* Define a value that tells L2CAP to use the default HCI ACL buffer size */ +#define L2CAP_INVALID_ERM_BUF_SIZE 0 + /* Define a value that tells L2CAP to use the default MPS */ #define L2CAP_DEFAULT_ERM_MPS 0x0000 @@ -273,7 +274,8 @@ /* To optimize this, it must be a multiplum of the L2CAP PDU length AND match the 3DH5 air * including the l2cap headers in each packet - to match the latter - the -5 is added */ -#define L2CAP_MAX_SDU_LENGTH (GKI_BUF4_SIZE - (L2CAP_MIN_OFFSET + L2CAP_MAX_HEADER_FCS) -5) +#define L2CAP_MAX_SDU_LENGTH (8080 + 26 - (L2CAP_MIN_OFFSET + 6)) +#define L2CAP_MAX_BUF_SIZE (10240 + 24) /* Part of L2CAP_MIN_OFFSET that is not part of L2CAP */ diff --git a/tools/sdk/include/bluedroid/list.h b/tools/sdk/include/bluedroid/list.h index 77097967..c0abd106 100644 --- a/tools/sdk/include/bluedroid/list.h +++ b/tools/sdk/include/bluedroid/list.h @@ -10,7 +10,7 @@ struct list_t; typedef struct list_t list_t; typedef void (*list_free_cb)(void *data); -typedef bool (*list_iter_cb)(void *data); +typedef bool (*list_iter_cb)(void *data, void *context); // Returns a new, empty list. Returns NULL if not enough memory could be allocated // for the list structure. The returned list must be freed with |list_free|. The @@ -22,7 +22,6 @@ list_t *list_new(list_free_cb callback); list_node_t *list_free_node(list_t *list, list_node_t *node); -//list_node_t *list_free_node(list_t *list, list_node_t *node); // Frees the list. This function accepts NULL as an argument, in which case it // behaves like a no-op. void list_free(list_t *list); @@ -44,7 +43,8 @@ void *list_front(const list_t *list); // Returns the last element in the list without removing it. |list| may not // be NULL or empty. -//void *list_back(const list_t *list); +void *list_back(const list_t *list); +list_node_t *list_back_node(const list_t *list); // Inserts |data| after |prev_node| in |list|. |data|, |list|, and |prev_node| // may not be NULL. This function does not make a copy of |data| so the pointer @@ -84,7 +84,7 @@ void list_clear(list_t *list); // list inside the callback. If an element is added before the node being visited, // there will be no callback for the newly-inserted node. Neither |list| nor // |callback| may be NULL. -void list_foreach(const list_t *list, list_iter_cb callback); +list_node_t *list_foreach(const list_t *list, list_iter_cb callback, void *context); // Returns an iterator to the first element in |list|. |list| may not be NULL. // The returned iterator is valid as long as it does not equal the value returned diff --git a/tools/sdk/include/bluedroid/mutex.h b/tools/sdk/include/bluedroid/mutex.h new file mode 100644 index 00000000..65180a78 --- /dev/null +++ b/tools/sdk/include/bluedroid/mutex.h @@ -0,0 +1,53 @@ +/****************************************************************************** + * + * Copyright (C) 2015 Google, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +#ifndef __MUTEX_H__ +#define __MUTEX_H__ + +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/queue.h" +#include "freertos/semphr.h" + + +#define OSI_MUTEX_MAX_TIMEOUT 0xffffffffUL + +#define osi_mutex_valid( x ) ( ( ( *x ) == NULL) ? pdFALSE : pdTRUE ) +#define osi_mutex_set_invalid( x ) ( ( *x ) = NULL ) + +typedef xSemaphoreHandle osi_mutex_t; + +int osi_mutex_new(osi_mutex_t *mutex); + +int osi_mutex_lock(osi_mutex_t *mutex, uint32_t timeout); + +void osi_mutex_unlock(osi_mutex_t *mutex); + +void osi_mutex_free(osi_mutex_t *mutex); + +/* Just for a global mutex */ +int osi_mutex_global_init(void); + +void osi_mutex_global_deinit(void); + +void osi_mutex_global_lock(void); + +void osi_mutex_global_unlock(void); + +#endif /* __MUTEX_H__ */ + diff --git a/tools/sdk/include/bluedroid/osi.h b/tools/sdk/include/bluedroid/osi.h index 3308255b..3bd217af 100644 --- a/tools/sdk/include/bluedroid/osi.h +++ b/tools/sdk/include/bluedroid/osi.h @@ -6,21 +6,11 @@ #include #define UNUSED_ATTR __attribute__((unused)) -#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) -#define INVALID_FD (-1) #define CONCAT(a, b) a##b +#define COMPILE_ASSERT(x) -// Use during compile time to check conditional values -// NOTE: The the failures will present as a generic error -// "error: initialization makes pointer from integer without a cast" -// but the file and line number will present the condition that -// failed. -#define DUMMY_COUNTER(c) CONCAT(__osi_dummy_, c) -#define DUMMY_PTR DUMMY_COUNTER(__COUNTER__) - -#define COMPILE_ASSERT(x) char * DUMMY_PTR = !(x) - -typedef uint32_t timeout_t; +int osi_init(void); +void osi_deinit(void); #endif /*_OSI_H_*/ diff --git a/tools/sdk/include/bluedroid/osi_arch.h b/tools/sdk/include/bluedroid/osi_arch.h deleted file mode 100644 index 491d4829..00000000 --- a/tools/sdk/include/bluedroid/osi_arch.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef __os_ARCH_H__ -#define __os_ARCH_H__ - -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" -#include "freertos/queue.h" -#include "freertos/semphr.h" - -#define OSI_ARCH_TIMEOUT 0xffffffffUL - -typedef xSemaphoreHandle osi_sem_t; -typedef xSemaphoreHandle osi_mutex_t; - -#define osi_mutex_valid( x ) ( ( ( *x ) == NULL) ? pdFALSE : pdTRUE ) -#define osi_mutex_set_invalid( x ) ( ( *x ) = NULL ) -#define osi_sem_valid( x ) ( ( ( *x ) == NULL) ? pdFALSE : pdTRUE ) -#define osi_sem_set_invalid( x ) ( ( *x ) = NULL ) - -int osi_mutex_new(osi_mutex_t *pxMutex); - -void osi_mutex_lock(osi_mutex_t *pxMutex); - -int osi_mutex_trylock(osi_mutex_t *pxMutex); - -void osi_mutex_unlock(osi_mutex_t *pxMutex); - -void osi_mutex_free(osi_mutex_t *pxMutex); - -int osi_sem_new(osi_sem_t *sem, uint32_t max_count, uint32_t init_count); - -void osi_sem_signal(osi_sem_t *sem); - -uint32_t osi_sem_wait(osi_sem_t *sem, uint32_t timeout); - -void osi_sem_free(osi_sem_t *sem); - -void osi_arch_init(void); - -uint32_t osi_now(void); - -void osi_delay_ms(uint32_t ms); - - -#endif /* __os_ARCH_H__ */ - diff --git a/tools/sdk/include/bluedroid/port_ext.h b/tools/sdk/include/bluedroid/port_ext.h index e25b6d94..40cdbfce 100644 --- a/tools/sdk/include/bluedroid/port_ext.h +++ b/tools/sdk/include/bluedroid/port_ext.h @@ -25,7 +25,6 @@ #ifndef PORTEXT_H #define PORTEXT_H -#include "gki.h" /* Port emulation entity Entry Points */ extern void rfcomm_process_timeout (TIMER_LIST_ENT *p_tle); diff --git a/tools/sdk/include/bluedroid/port_int.h b/tools/sdk/include/bluedroid/port_int.h index fb72d503..aa6d48e7 100644 --- a/tools/sdk/include/bluedroid/port_int.h +++ b/tools/sdk/include/bluedroid/port_int.h @@ -26,7 +26,6 @@ #define PORT_INT_H #include "bt_target.h" -#include "gki.h" #include "rfcdefs.h" #include "port_api.h" @@ -52,7 +51,7 @@ ** Define Port Data Transfere control block */ typedef struct { - BUFFER_Q queue; /* Queue of buffers waiting to be sent */ + fixed_queue_t *queue; /* Queue of buffers waiting to be sent */ BOOLEAN peer_fc; /* TRUE if flow control is set based on peer's request */ BOOLEAN user_fc; /* TRUE if flow control is set based on user's request */ UINT32 queue_size; /* Number of data bytes in the queue */ @@ -88,7 +87,7 @@ typedef struct { */ typedef struct { TIMER_LIST_ENT tle; /* Timer list entry */ - BUFFER_Q cmd_q; /* Queue for command messages on this mux */ + fixed_queue_t *cmd_q; /* Queue for command messages on this mux */ UINT8 port_inx[RFCOMM_MAX_DLCI + 1]; /* Array for quick access to */ /* tPORT based on dlci */ BD_ADDR bd_addr; /* BD ADDR of the peer if initiator */ diff --git a/tools/sdk/include/bluedroid/sdpint.h b/tools/sdk/include/bluedroid/sdpint.h index 3e89606f..9e721d9f 100644 --- a/tools/sdk/include/bluedroid/sdpint.h +++ b/tools/sdk/include/bluedroid/sdpint.h @@ -26,6 +26,7 @@ #define SDP_INT_H #include "bt_target.h" +#include "bt_defs.h" #include "sdp_api.h" #include "l2c_api.h" diff --git a/tools/sdk/include/bluedroid/gki_int.h b/tools/sdk/include/bluedroid/semaphore.h similarity index 54% rename from tools/sdk/include/bluedroid/gki_int.h rename to tools/sdk/include/bluedroid/semaphore.h index 3307066e..621d5a2c 100644 --- a/tools/sdk/include/bluedroid/gki_int.h +++ b/tools/sdk/include/bluedroid/semaphore.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * Copyright (C) 1999-2012 Broadcom Corporation + * Copyright (C) 2015 Google, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,19 +16,28 @@ * ******************************************************************************/ -#ifndef _GKI_INT_H_ -#define _GKI_INT_H_ +#ifndef __SEMAPHORE_H__ +#define __SEMAPHORE_H__ -//#include -#include "bt_defs.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/queue.h" +#include "freertos/semphr.h" -#include "gki_common.h" +#define OSI_SEM_MAX_TIMEOUT 0xffffffffUL -typedef struct { - pthread_mutex_t lock; - tGKI_COM_CB com; -} tGKI_CB; +typedef xSemaphoreHandle osi_sem_t; -extern tGKI_CB gki_cb; +#define osi_sem_valid( x ) ( ( ( *x ) == NULL) ? pdFALSE : pdTRUE ) +#define osi_sem_set_invalid( x ) ( ( *x ) = NULL ) -#endif /*_GKI_INT_H_*/ +int osi_sem_new(osi_sem_t *sem, uint32_t max_count, uint32_t init_count); + +void osi_sem_free(osi_sem_t *sem); + +int osi_sem_take(osi_sem_t *sem, uint32_t timeout); + +void osi_sem_give(osi_sem_t *sem); + + +#endif /* __SEMAPHORE_H__ */ diff --git a/tools/sdk/include/bluedroid/thread.h b/tools/sdk/include/bluedroid/thread.h index 4d2b4359..5f023c65 100644 --- a/tools/sdk/include/bluedroid/thread.h +++ b/tools/sdk/include/bluedroid/thread.h @@ -35,12 +35,27 @@ typedef struct bt_task_evt BtTaskEvt_t; typedef bt_status_t (* BtTaskCb_t)(void *arg); -enum { - SIG_PRF_START_UP = 0xfc, - SIG_PRF_WORK = 0xfd, - SIG_BTU_START_UP = 0xfe, - SIG_BTU_WORK = 0xff, -}; +typedef enum { + SIG_HCI_HAL_RECV_PACKET = 0, + SIG_HCI_HAL_NUM, +} SIG_HCI_HAL_t; + + +typedef enum { + SIG_HCI_HOST_SEND_AVAILABLE = 0, + SIG_HCI_HOST_NUM, +} SIG_HCI_HOST_t; + +typedef enum { + SIG_BTU_START_UP = 0, + SIG_BTU_HCI_MSG, + SIG_BTU_BTA_MSG, + SIG_BTU_BTA_ALARM, + SIG_BTU_GENERAL_ALARM, + SIG_BTU_ONESHOT_ALARM, + SIG_BTU_L2CAP_ALARM, + SIG_BTU_NUM, +} SIG_BTU_t; #define HCI_HOST_TASK_STACK_SIZE (2048 + BT_TASK_EXTRA_STACK_SIZE) #define HCI_HOST_TASK_PRIO (configMAX_PRIORITIES - 3) @@ -67,9 +82,13 @@ enum { #define TASK_POST_BLOCKING (portMAX_DELAY) typedef uint32_t task_post_t; /* Timeout of task post return, unit TICK */ -void btu_task_post(uint32_t sig, task_post_t timeout); -void hci_host_task_post(task_post_t timeout); -void hci_hal_h4_task_post(task_post_t timeout); +typedef enum { + TASK_POST_SUCCESS = 0, + TASK_POST_FAIL, +} task_post_status_t; +task_post_status_t btu_task_post(uint32_t sig, void *param, task_post_t timeout); +task_post_status_t hci_host_task_post(task_post_t timeout); +task_post_status_t hci_hal_h4_task_post(task_post_t timeout); #endif /* __THREAD_H__ */ diff --git a/tools/sdk/include/bluedroid/utl.h b/tools/sdk/include/bluedroid/utl.h index 39dbe297..eab971e7 100644 --- a/tools/sdk/include/bluedroid/utl.h +++ b/tools/sdk/include/bluedroid/utl.h @@ -105,7 +105,7 @@ extern UINT8 utl_itoa(UINT16 i, char *p_s); ** ** Function utl_freebuf ** -** Description This function calls GKI_freebuf to free the buffer passed +** Description This function calls osi_free to free the buffer passed ** in, if buffer pointer is not NULL, and also initializes ** buffer pointer to NULL. ** diff --git a/tools/sdk/include/bootloader_support/esp_efuse.h b/tools/sdk/include/bootloader_support/esp_efuse.h index 41588396..2f33b05a 100644 --- a/tools/sdk/include/bootloader_support/esp_efuse.h +++ b/tools/sdk/include/bootloader_support/esp_efuse.h @@ -48,6 +48,16 @@ void esp_efuse_burn_new_values(void); */ void esp_efuse_reset(void); +/* @brief Disable BASIC ROM Console via efuse + * + * By default, if booting from flash fails the ESP32 will boot a + * BASIC console in ROM. + * + * Call this function (from bootloader or app) to permanently + * disable the console on this chip. + */ +void esp_efuse_disable_basic_rom_console(void); + #ifdef __cplusplus } #endif diff --git a/tools/sdk/include/config/sdkconfig.h b/tools/sdk/include/config/sdkconfig.h index 8a7dc7f1..e3d97fab 100644 --- a/tools/sdk/include/config/sdkconfig.h +++ b/tools/sdk/include/config/sdkconfig.h @@ -6,45 +6,60 @@ */ #define CONFIG_GATTC_ENABLE 1 #define CONFIG_ESP32_PHY_MAX_TX_POWER 20 -#define CONFIG_PHY_ENABLED 1 #define CONFIG_TRACEMEM_RESERVE_DRAM 0x0 #define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 16 #define CONFIG_BLE_SMP_ENABLE 1 #define CONFIG_TCP_RECVMBOX_SIZE 6 #define CONFIG_TCP_WND_DEFAULT 5744 #define CONFIG_SW_COEXIST_ENABLE 1 +#define CONFIG_SPIFFS_USE_MAGIC_LENGTH 1 #define CONFIG_ESPTOOLPY_FLASHSIZE_4MB 1 #define CONFIG_IPC_TASK_STACK_SIZE 1024 #define CONFIG_ESPTOOLPY_FLASHFREQ "40m" -#define CONFIG_NEWLIB_STDOUT_ADDCR 1 +#define CONFIG_MBEDTLS_KEY_EXCHANGE_RSA 1 #define CONFIG_UDP_RECVMBOX_SIZE 6 #define CONFIG_TASK_WDT_CHECK_IDLE_TASK 1 +#define CONFIG_MBEDTLS_AES_C 1 +#define CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED 1 +#define CONFIG_MBEDTLS_GCM_C 1 #define CONFIG_ESPTOOLPY_FLASHSIZE "4MB" +#define CONFIG_SPIFFS_CACHE_WR 1 #define CONFIG_BROWNOUT_DET_LVL_SEL_0 1 #define CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER 1 -#define CONFIG_ETHERNET 1 #define CONFIG_EMAC_L2_TO_L3_RX_BUF_MODE 1 +#define CONFIG_SPIFFS_CACHE 1 #define CONFIG_INT_WDT 1 #define CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL 1 +#define CONFIG_MBEDTLS_SSL_PROTO_TLS1 1 +#define CONFIG_MBEDTLS_ECDSA_C 1 #define CONFIG_ESPTOOLPY_FLASHFREQ_40M 1 #define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1 +#define CONFIG_MBEDTLS_ECDH_C 1 +#define CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE 1 #define CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM 10 +#define CONFIG_MBEDTLS_SSL_ALPN 1 +#define CONFIG_MBEDTLS_PEM_WRITE_C 1 #define CONFIG_BT_RESERVE_DRAM 0x10000 +#define CONFIG_IP_LOST_TIMER_INTERVAL 120 #define CONFIG_ESP32_PANIC_PRINT_REBOOT 1 +#define CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED 1 +#define CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED 1 #define CONFIG_CONSOLE_UART_BAUDRATE 115200 #define CONFIG_LWIP_MAX_SOCKETS 10 #define CONFIG_EMAC_TASK_PRIORITY 20 #define CONFIG_TIMER_TASK_STACK_DEPTH 2048 #define CONFIG_TCP_MSS 1436 +#define CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED 1 #define CONFIG_FATFS_CODEPAGE 850 #define CONFIG_ULP_COPROC_RESERVE_MEM 512 #define CONFIG_ESPTOOLPY_BAUD 921600 #define CONFIG_INT_WDT_CHECK_CPU1 1 -#define CONFIG_FLASHMODE_DIO 1 #define CONFIG_ESPTOOLPY_AFTER_RESET 1 #define CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED 1 #define CONFIG_TOOLPREFIX "xtensa-esp32-elf-" +#define CONFIG_MBEDTLS_ECP_C 1 #define CONFIG_FREERTOS_IDLE_TASK_STACKSIZE 1024 +#define CONFIG_MBEDTLS_RC4_DISABLED 1 #define CONFIG_FATFS_LFN_STACK 1 #define CONFIG_ESP32_WIFI_AMPDU_ENABLED 1 #define CONFIG_CONSOLE_UART_NUM 0 @@ -59,44 +74,69 @@ #define CONFIG_ESPTOOLPY_FLASHSIZE_DETECT 1 #define CONFIG_AUTOSTART_ARDUINO 1 #define CONFIG_LOG_DEFAULT_LEVEL_ERROR 1 +#define CONFIG_TIMER_TASK_STACK_SIZE 4096 #define CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE 1 #define CONFIG_BTDM_CONTROLLER_RUN_CPU 0 +#define CONFIG_MBEDTLS_X509_CRL_PARSE_C 1 +#define CONFIG_SPIFFS_USE_MAGIC 1 #define CONFIG_TCPIP_TASK_STACK_SIZE 2560 #define CONFIG_FATFS_CODEPAGE_850 1 #define CONFIG_TASK_WDT 1 #define CONFIG_MAIN_TASK_STACK_SIZE 4096 +#define CONFIG_SPIFFS_PAGE_CHECK 1 #define CONFIG_TASK_WDT_TIMEOUT_S 5 #define CONFIG_INT_WDT_TIMEOUT_MS 300 #define CONFIG_ESPTOOLPY_FLASHMODE "dio" #define CONFIG_BTC_TASK_STACK_SIZE 8192 #define CONFIG_BLUEDROID_ENABLED 1 +#define CONFIG_NEWLIB_STDIN_LINE_ENDING_CR 1 +#define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA 1 #define CONFIG_ESPTOOLPY_BEFORE "default_reset" #define CONFIG_LOG_DEFAULT_LEVEL 1 #define CONFIG_TIMER_QUEUE_LENGTH 10 +#define CONFIG_MAKE_WARN_UNDEFINED_VARIABLES 1 +#define CONFIG_BOOTLOADER_SPI_WP_PIN 7 #define CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM 0 +#define CONFIG_MBEDTLS_CCM_C 1 #define CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER 20 #define CONFIG_ESP32_RTC_CLK_CAL_CYCLES 1024 #define CONFIG_ESP32_WIFI_TX_BA_WIN 6 #define CONFIG_ESP32_WIFI_NVS_ENABLED 1 #define CONFIG_ULP_COPROC_ENABLED 1 +#define CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED 1 #define CONFIG_DMA_RX_BUF_NUM 10 +#define CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED 1 #define CONFIG_TCP_SYNMAXRTX 6 +#define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA 1 +#define CONFIG_HEAP_POISONING_LIGHT 1 #define CONFIG_PYTHON "python" +#define CONFIG_MBEDTLS_ECP_NIST_OPTIM 1 #define CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1 1 #define CONFIG_ESPTOOLPY_COMPRESSED 1 #define CONFIG_PARTITION_TABLE_FILENAME "partitions_singleapp.csv" #define CONFIG_TCP_SND_BUF_DEFAULT 5744 #define CONFIG_LWIP_DHCP_MAX_NTP_SERVERS 1 +#define CONFIG_TCP_MSL 60000 +#define CONFIG_MBEDTLS_SSL_PROTO_TLS1_1 1 #define CONFIG_PARTITION_TABLE_SINGLE_APP 1 #define CONFIG_ESP32_WIFI_RX_BA_WIN 6 -#define CONFIG_WIFI_ENABLED 1 +#define CONFIG_MBEDTLS_X509_CSR_PARSE_C 1 +#define CONFIG_FLASHMODE_QIO 1 +#define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA 1 #define CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE 2048 #define CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY 2000 #define CONFIG_BROWNOUT_DET_LVL 0 +#define CONFIG_MBEDTLS_PEM_PARSE_C 1 +#define CONFIG_SPIFFS_GC_MAX_RUNS 10 #define CONFIG_ESP32_APPTRACE_DEST_NONE 1 #define CONFIG_PARTITION_TABLE_CUSTOM_APP_BIN_OFFSET 0x10000 +#define CONFIG_MBEDTLS_SSL_PROTO_TLS1_2 1 +#define CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA 1 #define CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM 32 +#define CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED 1 +#define CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED 1 #define CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ 240 +#define CONFIG_MBEDTLS_HARDWARE_AES 1 #define CONFIG_FREERTOS_HZ 1000 #define CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE 1 #define CONFIG_FREERTOS_ASSERT_FAIL_ABORT 1 @@ -104,10 +144,16 @@ #define CONFIG_ESP32_XTAL_FREQ 0 #define CONFIG_MONITOR_BAUD_115200B 1 #define CONFIG_LOG_BOOTLOADER_LEVEL 0 +#define CONFIG_MBEDTLS_TLS_ENABLED 1 #define CONFIG_SMP_ENABLE 1 +#define CONFIG_MBEDTLS_SSL_SESSION_TICKETS 1 +#define CONFIG_SPIFFS_MAX_PARTITIONS 3 +#define CONFIG_MBEDTLS_SSL_RENEGOTIATION 1 #define CONFIG_ESPTOOLPY_BEFORE_RESET 1 #define CONFIG_ESPTOOLPY_BAUD_OTHER_VAL 115200 #define CONFIG_ENABLE_ARDUINO_DEPENDS 1 +#define CONFIG_SPIFFS_OBJ_NAME_LEN 32 +#define CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT 5 #define CONFIG_LOG_BOOTLOADER_LEVEL_NONE 1 #define CONFIG_ESP32_DEFAULT_CPU_FREQ_240 1 #define CONFIG_ESP32_XTAL_FREQ_AUTO 1 @@ -115,9 +161,12 @@ #define CONFIG_ESPTOOLPY_AFTER "hard_reset" #define CONFIG_LWIP_SO_REUSE 1 #define CONFIG_DMA_TX_BUF_NUM 10 +#define CONFIG_FREERTOS_INTERRUPT_BACKTRACE 1 #define CONFIG_WL_SECTOR_SIZE 4096 #define CONFIG_TIMER_TASK_PRIORITY 1 +#define CONFIG_MBEDTLS_TLS_CLIENT 1 #define CONFIG_BT_ENABLED 1 +#define CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED 1 #define CONFIG_MONITOR_BAUD 115200 #define CONFIG_FREERTOS_CORETIMER_0 1 #define CONFIG_PARTITION_TABLE_CUSTOM_FILENAME "partitions.csv" @@ -125,12 +174,17 @@ #define CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY 1 #define CONFIG_TCP_QUEUE_OOSEQ 1 #define CONFIG_GATTS_ENABLE 1 +#define CONFIG_MBEDTLS_TLS_SERVER 1 +#define CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT 1 #define CONFIG_FREERTOS_ISR_STACKSIZE 1536 #define CONFIG_CLASSIC_BT_ENABLED 1 #define CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK 1 #define CONFIG_OPENSSL_ASSERT_DO_NOTHING 1 #define CONFIG_WL_SECTOR_SIZE_4096 1 #define CONFIG_OPTIMIZATION_LEVEL_DEBUG 1 +#define CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED 1 +#define CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED 1 +#define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA 1 #define CONFIG_SYSTEM_EVENT_QUEUE_SIZE 32 #define CONFIG_BT_ACL_CONNECTIONS 4 #define CONFIG_FATFS_MAX_LFN 255 @@ -139,7 +193,10 @@ #define CONFIG_APP_OFFSET 0x10000 #define CONFIG_MEMMAP_SMP 1 #define CONFIG_SPI_FLASH_ROM_DRIVER_PATCH 1 +#define CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED 1 +#define CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT 2048 #define CONFIG_LWIP_SO_RCVBUF 1 #define CONFIG_MONITOR_BAUD_OTHER_VAL 115200 +#define CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF 1 #define CONFIG_ESPTOOLPY_PORT "/dev/cu.usbserial-DO00EAB0" #define CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL_ERROR 1 diff --git a/tools/sdk/include/console/argtable3/argtable3.h b/tools/sdk/include/console/argtable3/argtable3.h new file mode 100644 index 00000000..37a321fb --- /dev/null +++ b/tools/sdk/include/console/argtable3/argtable3.h @@ -0,0 +1,306 @@ +/******************************************************************************* + * This file is part of the argtable3 library. + * + * Copyright (C) 1998-2001,2003-2011,2013 Stewart Heitmann + * + * 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 STEWART HEITMANN 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 STEWART HEITMANN 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. + ******************************************************************************/ + +#ifndef ARGTABLE3 +#define ARGTABLE3 + +#include /* FILE */ +#include /* struct tm */ + +#ifdef __cplusplus +extern "C" { +#endif + +#define ARG_REX_ICASE 1 + +/* bit masks for arg_hdr.flag */ +enum +{ + ARG_TERMINATOR=0x1, + ARG_HASVALUE=0x2, + ARG_HASOPTVALUE=0x4 +}; + +typedef void (arg_resetfn)(void *parent); +typedef int (arg_scanfn)(void *parent, const char *argval); +typedef int (arg_checkfn)(void *parent); +typedef void (arg_errorfn)(void *parent, FILE *fp, int error, const char *argval, const char *progname); + + +/* +* The arg_hdr struct defines properties that are common to all arg_xxx structs. +* The argtable library requires each arg_xxx struct to have an arg_hdr +* struct as its first data member. +* The argtable library functions then use this data to identify the +* properties of the command line option, such as its option tags, +* datatype string, and glossary strings, and so on. +* Moreover, the arg_hdr struct contains pointers to custom functions that +* are provided by each arg_xxx struct which perform the tasks of parsing +* that particular arg_xxx arguments, performing post-parse checks, and +* reporting errors. +* These functions are private to the individual arg_xxx source code +* and are the pointer to them are initiliased by that arg_xxx struct's +* constructor function. The user could alter them after construction +* if desired, but the original intention is for them to be set by the +* constructor and left unaltered. +*/ +struct arg_hdr +{ + char flag; /* Modifier flags: ARG_TERMINATOR, ARG_HASVALUE. */ + const char *shortopts; /* String defining the short options */ + const char *longopts; /* String defiing the long options */ + const char *datatype; /* Description of the argument data type */ + const char *glossary; /* Description of the option as shown by arg_print_glossary function */ + int mincount; /* Minimum number of occurences of this option accepted */ + int maxcount; /* Maximum number of occurences if this option accepted */ + void *parent; /* Pointer to parent arg_xxx struct */ + arg_resetfn *resetfn; /* Pointer to parent arg_xxx reset function */ + arg_scanfn *scanfn; /* Pointer to parent arg_xxx scan function */ + arg_checkfn *checkfn; /* Pointer to parent arg_xxx check function */ + arg_errorfn *errorfn; /* Pointer to parent arg_xxx error function */ + void *priv; /* Pointer to private header data for use by arg_xxx functions */ +}; + +struct arg_rem +{ + struct arg_hdr hdr; /* The mandatory argtable header struct */ +}; + +struct arg_lit +{ + struct arg_hdr hdr; /* The mandatory argtable header struct */ + int count; /* Number of matching command line args */ +}; + +struct arg_int +{ + struct arg_hdr hdr; /* The mandatory argtable header struct */ + int count; /* Number of matching command line args */ + int *ival; /* Array of parsed argument values */ +}; + +struct arg_dbl +{ + struct arg_hdr hdr; /* The mandatory argtable header struct */ + int count; /* Number of matching command line args */ + double *dval; /* Array of parsed argument values */ +}; + +struct arg_str +{ + struct arg_hdr hdr; /* The mandatory argtable header struct */ + int count; /* Number of matching command line args */ + const char **sval; /* Array of parsed argument values */ +}; + +struct arg_rex +{ + struct arg_hdr hdr; /* The mandatory argtable header struct */ + int count; /* Number of matching command line args */ + const char **sval; /* Array of parsed argument values */ +}; + +struct arg_file +{ + struct arg_hdr hdr; /* The mandatory argtable header struct */ + int count; /* Number of matching command line args*/ + const char **filename; /* Array of parsed filenames (eg: /home/foo.bar) */ + const char **basename; /* Array of parsed basenames (eg: foo.bar) */ + const char **extension; /* Array of parsed extensions (eg: .bar) */ +}; + +struct arg_date +{ + struct arg_hdr hdr; /* The mandatory argtable header struct */ + const char *format; /* strptime format string used to parse the date */ + int count; /* Number of matching command line args */ + struct tm *tmval; /* Array of parsed time values */ +}; + +enum {ARG_ELIMIT=1, ARG_EMALLOC, ARG_ENOMATCH, ARG_ELONGOPT, ARG_EMISSARG}; +struct arg_end +{ + struct arg_hdr hdr; /* The mandatory argtable header struct */ + int count; /* Number of errors encountered */ + int *error; /* Array of error codes */ + void **parent; /* Array of pointers to offending arg_xxx struct */ + const char **argval; /* Array of pointers to offending argv[] string */ +}; + + +/**** arg_xxx constructor functions *********************************/ + +struct arg_rem* arg_rem(const char* datatype, const char* glossary); + +struct arg_lit* arg_lit0(const char* shortopts, + const char* longopts, + const char* glossary); +struct arg_lit* arg_lit1(const char* shortopts, + const char* longopts, + const char *glossary); +struct arg_lit* arg_litn(const char* shortopts, + const char* longopts, + int mincount, + int maxcount, + const char *glossary); + +struct arg_key* arg_key0(const char* keyword, + int flags, + const char* glossary); +struct arg_key* arg_key1(const char* keyword, + int flags, + const char* glossary); +struct arg_key* arg_keyn(const char* keyword, + int flags, + int mincount, + int maxcount, + const char* glossary); + +struct arg_int* arg_int0(const char* shortopts, + const char* longopts, + const char* datatype, + const char* glossary); +struct arg_int* arg_int1(const char* shortopts, + const char* longopts, + const char* datatype, + const char *glossary); +struct arg_int* arg_intn(const char* shortopts, + const char* longopts, + const char *datatype, + int mincount, + int maxcount, + const char *glossary); + +struct arg_dbl* arg_dbl0(const char* shortopts, + const char* longopts, + const char* datatype, + const char* glossary); +struct arg_dbl* arg_dbl1(const char* shortopts, + const char* longopts, + const char* datatype, + const char *glossary); +struct arg_dbl* arg_dbln(const char* shortopts, + const char* longopts, + const char *datatype, + int mincount, + int maxcount, + const char *glossary); + +struct arg_str* arg_str0(const char* shortopts, + const char* longopts, + const char* datatype, + const char* glossary); +struct arg_str* arg_str1(const char* shortopts, + const char* longopts, + const char* datatype, + const char *glossary); +struct arg_str* arg_strn(const char* shortopts, + const char* longopts, + const char* datatype, + int mincount, + int maxcount, + const char *glossary); + +struct arg_rex* arg_rex0(const char* shortopts, + const char* longopts, + const char* pattern, + const char* datatype, + int flags, + const char* glossary); +struct arg_rex* arg_rex1(const char* shortopts, + const char* longopts, + const char* pattern, + const char* datatype, + int flags, + const char *glossary); +struct arg_rex* arg_rexn(const char* shortopts, + const char* longopts, + const char* pattern, + const char* datatype, + int mincount, + int maxcount, + int flags, + const char *glossary); + +struct arg_file* arg_file0(const char* shortopts, + const char* longopts, + const char* datatype, + const char* glossary); +struct arg_file* arg_file1(const char* shortopts, + const char* longopts, + const char* datatype, + const char *glossary); +struct arg_file* arg_filen(const char* shortopts, + const char* longopts, + const char* datatype, + int mincount, + int maxcount, + const char *glossary); + +struct arg_date* arg_date0(const char* shortopts, + const char* longopts, + const char* format, + const char* datatype, + const char* glossary); +struct arg_date* arg_date1(const char* shortopts, + const char* longopts, + const char* format, + const char* datatype, + const char *glossary); +struct arg_date* arg_daten(const char* shortopts, + const char* longopts, + const char* format, + const char* datatype, + int mincount, + int maxcount, + const char *glossary); + +struct arg_end* arg_end(int maxerrors); + + +/**** other functions *******************************************/ +int arg_nullcheck(void **argtable); +int arg_parse(int argc, char **argv, void **argtable); +void arg_print_option(FILE *fp, const char *shortopts, const char *longopts, const char *datatype, const char *suffix); +void arg_print_syntax(FILE *fp, void **argtable, const char *suffix); +void arg_print_syntaxv(FILE *fp, void **argtable, const char *suffix); +void arg_print_glossary(FILE *fp, void **argtable, const char *format); +void arg_print_glossary_gnu(FILE *fp, void **argtable); +void arg_print_errors(FILE* fp, struct arg_end* end, const char* progname); +void arg_freetable(void **argtable, size_t n); +void arg_print_formatted(FILE *fp, const unsigned lmargin, const unsigned rmargin, const char *text); + +/**** deprecated functions, for back-compatibility only ********/ +void arg_free(void **argtable); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/tools/sdk/include/console/esp_console.h b/tools/sdk/include/console/esp_console.h new file mode 100644 index 00000000..17cf5fe7 --- /dev/null +++ b/tools/sdk/include/console/esp_console.h @@ -0,0 +1,181 @@ +// Copyright 2016-2017 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#pragma once + +#include +#include "esp_err.h" + +// Forward declaration. Definition in linenoise/linenoise.h. +typedef struct linenoiseCompletions linenoiseCompletions; + +/** + * @brief Parameters for console initialization + */ +typedef struct { + size_t max_cmdline_length; //!< length of command line buffer, in bytes + size_t max_cmdline_args; //!< maximum number of command line arguments to parse + int hint_color; //!< ASCII color code of hint text + int hint_bold; //!< Set to 1 to print hint text in bold +} esp_console_config_t; + +/** + * @brief initialize console module + * Call this once before using other console module features + * @return + * - ESP_OK on success + * - ESP_ERR_NO_MEM if out of memory + * - ESP_ERR_INVALID_STATE if already initialized + */ +esp_err_t esp_console_init(const esp_console_config_t* config); + + +/** + * @brief de-initialize console module + * Call this once when done using console module functions + * @return + * - ESP_OK on success + * - ESP_ERR_INVALID_STATE if not initialized yet + */ +esp_err_t esp_console_deinit(); + + +/** + * @brief Console command main function + * @param argc number of arguments + * @param argv array with argc entries, each pointing to a zero-terminated string argument + * @return console command return code, 0 indicates "success" + */ +typedef int (*esp_console_cmd_func_t)(int argc, char** argv); + +/** + * @brief Console command description + */ +typedef struct { + /** + * Command name. Must not be NULL, must not contain spaces. + * The pointer must be valid until the call to esp_console_deinit. + */ + const char* command; //!< command name + /** + * Help text for the command, shown by help command. + * If set, the pointer must be valid until the call to esp_console_deinit. + * If not set, the command will not be listed in 'help' output. + */ + const char* help; + /** + * Hint text, usually lists possible arguments. + * If set to NULL, and 'argtable' field is non-NULL, hint will be generated + * automatically + */ + const char* hint; + /** + * Pointer to a function which implements the command. + */ + esp_console_cmd_func_t func; + /** + * Array or structure of pointers to arg_xxx structures, may be NULL. + * Used to generate hint text if 'hint' is set to NULL. + * Array/structure which this field points to must end with an arg_end. + * Only used for the duration of esp_console_cmd_register call. + */ + void* argtable; +} esp_console_cmd_t; + +/** + * @brief Register console command + * @param cmd pointer to the command description; can point to a temporary value + * @return + * - ESP_OK on success + * - ESP_ERR_NO_MEM if out of memory + */ +esp_err_t esp_console_cmd_register(const esp_console_cmd_t *cmd); + +/** + * @brief Run command line + * @param cmdline command line (command name followed by a number of arguments) + * @param[out] cmd_ret return code from the command (set if command was run) + * @return + * - ESP_OK, if command was run + * - ESP_ERR_NOT_FOUND, if command with given name wasn't registered + * - ESP_ERR_INVALID_STATE, if esp_console_init wasn't called + */ +esp_err_t esp_console_run(const char* cmdline, int* cmd_ret); + +/** + * @brief Split command line into arguments in place + * + * - This function finds whitespace-separated arguments in the given input line. + * + * 'abc def 1 20 .3' -> [ 'abc', 'def', '1', '20', '.3' ] + * + * - Argument which include spaces may be surrounded with quotes. In this case + * spaces are preserved and quotes are stripped. + * + * 'abc "123 456" def' -> [ 'abc', '123 456', 'def' ] + * + * - Escape sequences may be used to produce backslash, double quote, and space: + * + * 'a\ b\\c\"' -> [ 'a b\c"' ] + * + * Pointers to at most argv_size - 1 arguments are returned in argv array. + * The pointer after the last one (i.e. argv[argc]) is set to NULL. + * + * @param line pointer to buffer to parse; it is modified in place + * @param argv array where the pointers to arguments are written + * @param argv_size number of elements in argv_array (max. number of arguments) + * @return number of arguments found (argc) + */ +size_t esp_console_split_argv(char *line, char **argv, size_t argv_size); + +/** + * @brief Callback which provides command completion for linenoise library + * + * When using linenoise for line editing, command completion support + * can be enabled like this: + * + * linenoiseSetCompletionCallback(&esp_console_get_completion); + * + * @param buf the string typed by the user + * @param lc linenoiseCompletions to be filled in + */ +void esp_console_get_completion(const char *buf, linenoiseCompletions *lc); + +/** + * @brief Callback which provides command hints for linenoise library + * + * When using linenoise for line editing, hints support can be enabled as + * follows: + * + * linenoiseSetHintsCallback((linenoiseHintsCallback*) &esp_console_get_hint); + * + * The extra cast is needed because linenoiseHintsCallback is defined as + * returning a char* instead of const char*. + * + * @param buf line typed by the user + * @param[out] color ANSI color code to be used when displaying the hint + * @param[out] bold set to 1 if hint has to be displayed in bold + * @return string containing the hint text. This string is persistent and should + * not be freed (i.e. linenoiseSetFreeHintsCallback should not be used). + */ +const char *esp_console_get_hint(const char *buf, int *color, int *bold); + +/** + * @brief Register a 'help' command + * Default 'help' command prints the list of registered commands along with + * hints and help strings. + * @return + * - ESP_OK on success + * - ESP_ERR_INVALID_STATE, if esp_console_init wasn't called + */ +esp_err_t esp_console_register_help_command(); diff --git a/tools/sdk/include/console/linenoise/linenoise.h b/tools/sdk/include/console/linenoise/linenoise.h new file mode 100644 index 00000000..a82701f8 --- /dev/null +++ b/tools/sdk/include/console/linenoise/linenoise.h @@ -0,0 +1,76 @@ +/* linenoise.h -- VERSION 1.0 + * + * Guerrilla line editing library against the idea that a line editing lib + * needs to be 20,000 lines of C code. + * + * See linenoise.c for more information. + * + * ------------------------------------------------------------------------ + * + * Copyright (c) 2010-2014, Salvatore Sanfilippo + * Copyright (c) 2010-2013, Pieter Noordhuis + * + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef __LINENOISE_H +#define __LINENOISE_H + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct linenoiseCompletions { + size_t len; + char **cvec; +} linenoiseCompletions; + +typedef void(linenoiseCompletionCallback)(const char *, linenoiseCompletions *); +typedef char*(linenoiseHintsCallback)(const char *, int *color, int *bold); +typedef void(linenoiseFreeHintsCallback)(void *); +void linenoiseSetCompletionCallback(linenoiseCompletionCallback *); +void linenoiseSetHintsCallback(linenoiseHintsCallback *); +void linenoiseSetFreeHintsCallback(linenoiseFreeHintsCallback *); +void linenoiseAddCompletion(linenoiseCompletions *, const char *); + +int linenoiseProbe(void); +char *linenoise(const char *prompt); +void linenoiseFree(void *ptr); +int linenoiseHistoryAdd(const char *line); +int linenoiseHistorySetMaxLen(int len); +int linenoiseHistorySave(const char *filename); +int linenoiseHistoryLoad(const char *filename); +void linenoiseHistoryFree(); +void linenoiseClearScreen(void); +void linenoiseSetMultiLine(int ml); +void linenoiseSetDumbMode(int set); +void linenoisePrintKeyCodes(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __LINENOISE_H */ diff --git a/tools/sdk/include/driver/driver/adc.h b/tools/sdk/include/driver/driver/adc.h index 19068a23..08d32288 100644 --- a/tools/sdk/include/driver/driver/adc.h +++ b/tools/sdk/include/driver/driver/adc.h @@ -21,6 +21,8 @@ extern "C" { #include #include "esp_err.h" +#include "driver/gpio.h" +#include "soc/adc_channel.h" typedef enum { ADC_ATTEN_0db = 0, /*!0dB signal attenuation for that ADC channel. @@ -107,13 +123,22 @@ esp_err_t adc1_config_channel_atten(adc1_channel_t channel, adc_atten_t atten); * - -1: Parameter error * - Other: ADC1 channel reading. */ -int adc1_get_voltage(adc1_channel_t channel); +int adc1_get_raw(adc1_channel_t channel); + +/** @cond */ //Doxygen command to hide deprecated function from API Reference +/* + * @deprecated This function returns an ADC1 reading but is deprecated due to + * a misleading name and has been changed to directly call the new function. + * Use the new function adc1_get_raw() instead + */ +int adc1_get_voltage(adc1_channel_t channel) __attribute__((deprecated)); +/** @endcond */ /** * @brief Configure ADC1 to be usable by the ULP * * This function reconfigures ADC1 to be controlled by the ULP. - * Effect of this function can be reverted using adc1_get_voltage function. + * Effect of this function can be reverted using adc1_get_raw function. * * Note that adc1_config_channel_atten, adc1_config_width functions need * to be called to configure ADC1 channels, before ADC1 is used by the ULP. @@ -136,6 +161,22 @@ void adc1_ulp_enable(); */ int hall_sensor_read(); +/** + * @brief Output ADC2 reference voltage to gpio 25 or 26 or 27 + * + * This function utilizes the testing mux exclusive to ADC 2 to route the + * reference voltage one of ADC2's channels. Supported gpios are gpios + * 25, 26, and 27. This refernce voltage can be manually read from the pin + * and used in the esp_adc_cal component. + * + * @param[in] gpio GPIO number (gpios 25,26,27 supported) + * + * @return + * - ESP_OK: v_ref successfully routed to selected gpio + * - ESP_ERR_INVALID_ARG: Unsupported gpio + */ +esp_err_t adc2_vref_to_gpio(gpio_num_t gpio); + #ifdef __cplusplus } #endif diff --git a/tools/sdk/include/driver/driver/dac.h b/tools/sdk/include/driver/driver/dac.h index 842894d0..a5563bb8 100644 --- a/tools/sdk/include/driver/driver/dac.h +++ b/tools/sdk/include/driver/driver/dac.h @@ -21,6 +21,7 @@ extern "C" { #include #include "esp_err.h" +#include "soc/dac_channel.h" typedef enum { DAC_CHANNEL_1 = 1, /*!< DAC channel 1 is GPIO25 */ diff --git a/tools/sdk/include/driver/driver/gpio.h b/tools/sdk/include/driver/driver/gpio.h index c68caee7..1b184f60 100644 --- a/tools/sdk/include/driver/driver/gpio.h +++ b/tools/sdk/include/driver/driver/gpio.h @@ -162,7 +162,7 @@ typedef enum { GPIO_NUM_27 = 27, /*!< GPIO27, input and output */ GPIO_NUM_32 = 32, /*!< GPIO32, input and output */ - GPIO_NUM_33 = 33, /*!< GPIO32, input and output */ + GPIO_NUM_33 = 33, /*!< GPIO33, input and output */ GPIO_NUM_34 = 34, /*!< GPIO34, input mode only */ GPIO_NUM_35 = 35, /*!< GPIO35, input mode only */ GPIO_NUM_36 = 36, /*!< GPIO36, input mode only */ diff --git a/tools/sdk/include/driver/driver/periph_ctrl.h b/tools/sdk/include/driver/driver/periph_ctrl.h index 0aab5508..cd09a78f 100644 --- a/tools/sdk/include/driver/driver/periph_ctrl.h +++ b/tools/sdk/include/driver/driver/periph_ctrl.h @@ -44,6 +44,11 @@ typedef enum { PERIPH_SPI_MODULE, PERIPH_HSPI_MODULE, PERIPH_VSPI_MODULE, + PERIPH_SPI_DMA_MODULE, + PERIPH_SDMMC_MODULE, + PERIPH_SDIO_SLAVE_MODULE, + PERIPH_CAN_MODULE, + PERIPH_EMAC_MODULE, } periph_module_t; /** diff --git a/tools/sdk/include/driver/driver/rmt.h b/tools/sdk/include/driver/driver/rmt.h index 0a958688..56c5ed49 100644 --- a/tools/sdk/include/driver/driver/rmt.h +++ b/tools/sdk/include/driver/driver/rmt.h @@ -677,11 +677,15 @@ esp_err_t rmt_write_items(rmt_channel_t channel, const rmt_item32_t* rmt_item, i * * @param channel RMT channel (0 - 7) * + * @param wait_time Maximum time to wait for transmission to be complete + * * @return + * - ESP_OK RMT Tx done successfully + * - ESP_ERR_TIMEOUT Crossed the 'wait_time' given * - ESP_ERR_INVALID_ARG Parameter error - * - ESP_OK Success + * - ESP_FAIL Driver not installed */ -esp_err_t rmt_wait_tx_done(rmt_channel_t channel); +esp_err_t rmt_wait_tx_done(rmt_channel_t channel, TickType_t wait_time); /** * @brief Get ringbuffer from UART. @@ -690,13 +694,13 @@ esp_err_t rmt_wait_tx_done(rmt_channel_t channel); * * @param channel RMT channel (0 - 7) * - * @param buf_handler Pointer to buffer handler to accept RX ringbuffer handler. + * @param buf_handle Pointer to buffer handler to accept RX ringbuffer handler. * * @return * - ESP_ERR_INVALID_ARG Parameter error * - ESP_OK Success */ -esp_err_t rmt_get_ringbuf_handler(rmt_channel_t channel, RingbufHandle_t* buf_handler); +esp_err_t rmt_get_ringbuf_handle(rmt_channel_t channel, RingbufHandle_t* buf_handle); /***************************EXAMPLE********************************** * diff --git a/tools/sdk/include/driver/driver/rtc_io.h b/tools/sdk/include/driver/driver/rtc_io.h index 5abff188..831a07fd 100644 --- a/tools/sdk/include/driver/driver/rtc_io.h +++ b/tools/sdk/include/driver/driver/rtc_io.h @@ -18,6 +18,7 @@ #include #include "esp_err.h" #include "driver/gpio.h" +#include "soc/rtc_gpio_channel.h" #ifdef __cplusplus extern "C" { diff --git a/tools/sdk/include/driver/driver/sdmmc_defs.h b/tools/sdk/include/driver/driver/sdmmc_defs.h index 455d1c7a..c13df6d1 100644 --- a/tools/sdk/include/driver/driver/sdmmc_defs.h +++ b/tools/sdk/include/driver/driver/sdmmc_defs.h @@ -294,23 +294,67 @@ #define SCR_CMD_SUPPORT_CMD20(scr) MMC_RSP_BITS((scr), 32, 1) #define SCR_RESERVED2(scr) MMC_RSP_BITS((scr), 0, 32) -/* Status of Switch Function */ -#define SFUNC_STATUS_GROUP(status, group) \ - (__bitfield((uint32_t *)(status), 400 + (group - 1) * 16, 16)) +/* Max supply current in SWITCH_FUNC response (in mA) */ +#define SD_SFUNC_I_MAX(status) (MMC_RSP_BITS((uint32_t *)(status), 496, 16)) -#define SD_ACCESS_MODE_SDR12 0 -#define SD_ACCESS_MODE_SDR25 1 -#define SD_ACCESS_MODE_SDR50 2 -#define SD_ACCESS_MODE_SDR104 3 -#define SD_ACCESS_MODE_DDR50 4 +/* Supported flags in SWITCH_FUNC response */ +#define SD_SFUNC_SUPPORTED(status, group) \ + (MMC_RSP_BITS((uint32_t *)(status), 400 + (group - 1) * 16, 16)) +/* Selected function in SWITCH_FUNC response */ +#define SD_SFUNC_SELECTED(status, group) \ + (MMC_RSP_BITS((uint32_t *)(status), 376 + (group - 1) * 4, 4)) + +/* Busy flags in SWITCH_FUNC response */ +#define SD_SFUNC_BUSY(status, group) \ + (MMC_RSP_BITS((uint32_t *)(status), 272 + (group - 1) * 16, 16)) + +/* Version of SWITCH_FUNC response */ +#define SD_SFUNC_VER(status) (MMC_RSP_BITS((uint32_t *)(status), 368, 8)) + +#define SD_SFUNC_GROUP_MAX 6 +#define SD_SFUNC_FUNC_MAX 15 + +#define SD_ACCESS_MODE 1 /* Function group 1, Access Mode */ + +#define SD_ACCESS_MODE_SDR12 0 /* 25 MHz clock */ +#define SD_ACCESS_MODE_SDR25 1 /* 50 MHz clock */ +#define SD_ACCESS_MODE_SDR50 2 /* UHS-I, 100 MHz clock */ +#define SD_ACCESS_MODE_SDR104 3 /* UHS-I, 208 MHz clock */ +#define SD_ACCESS_MODE_DDR50 4 /* UHS-I, 50 MHz clock, DDR */ + +/** + * @brief Extract up to 32 sequential bits from an array of 32-bit words + * + * Bits within the word are numbered in the increasing order from LSB to MSB. + * + * As an example, consider 2 32-bit words: + * + * 0x01234567 0x89abcdef + * + * On a little-endian system, the bytes are stored in memory as follows: + * + * 67 45 23 01 ef cd ab 89 + * + * MMC_RSP_BITS will extact bits as follows: + * + * start=0 len=4 -> result=0x00000007 + * start=0 len=12 -> result=0x00000567 + * start=28 len=8 -> result=0x000000f0 + * start=59 len=5 -> result=0x00000011 + * + * @param src array of words to extract bits from + * @param start index of the first bit to extract + * @param len number of bits to extract, 1 to 32 + * @return 32-bit word where requested bits start from LSB + */ static inline uint32_t MMC_RSP_BITS(uint32_t *src, int start, int len) { uint32_t mask = (len % 32 == 0) ? UINT_MAX : UINT_MAX >> (32 - (len % 32)); - size_t word = 3 - start / 32; + size_t word = start / 32; size_t shift = start % 32; uint32_t right = src[word] >> shift; - uint32_t left = (len + shift <= 32) ? 0 : src[word - 1] << ((32 - shift) % 32); + uint32_t left = (len + shift <= 32) ? 0 : src[word + 1] << ((32 - shift) % 32); return (left | right) & mask; } diff --git a/tools/sdk/include/driver/driver/sdmmc_types.h b/tools/sdk/include/driver/driver/sdmmc_types.h index d9ffde3f..4bc1e05e 100644 --- a/tools/sdk/include/driver/driver/sdmmc_types.h +++ b/tools/sdk/include/driver/driver/sdmmc_types.h @@ -60,6 +60,13 @@ typedef struct { */ typedef uint32_t sdmmc_response_t[4]; +/** + * SD SWITCH_FUNC response buffer + */ +typedef struct { + uint32_t data[512 / 8 / sizeof(uint32_t)]; /*!< response data */ +} sdmmc_switch_func_rsp_t; + /** * SD/MMC command information */ diff --git a/tools/sdk/include/driver/driver/spi_common.h b/tools/sdk/include/driver/driver/spi_common.h index 53cde6ff..6adcc06a 100644 --- a/tools/sdk/include/driver/driver/spi_common.h +++ b/tools/sdk/include/driver/driver/spi_common.h @@ -74,11 +74,30 @@ bool spicommon_periph_claim(spi_host_device_t host); /** * @brief Return the SPI peripheral so another driver can claim it. * - * @param host Peripheral to claim + * @param host Peripheral to return * @return True if peripheral is returned successfully; false if peripheral was free to claim already. */ bool spicommon_periph_free(spi_host_device_t host); +/** + * @brief Try to claim a SPI DMA channel + * + * Call this if your driver wants to use SPI with a DMA channnel. + * + * @param dma_chan channel to claim + * + * @return True if success; false otherwise. + */ +bool spicommon_dma_chan_claim(int dma_chan); + +/** + * @brief Return the SPI DMA channel so other driver can claim it, or just to power down DMA. + * + * @param dma_chan channel to return + * + * @return True if success; false otherwise. + */ +bool spicommon_dma_chan_free(int dma_chan); #define SPICOMMON_BUSFLAG_SLAVE 0 ///< Initialize I/O in slave mode #define SPICOMMON_BUSFLAG_MASTER (1<<0) ///< Initialize I/O in master mode @@ -170,9 +189,6 @@ spi_dev_t *spicommon_hw_for_host(spi_host_device_t host); */ int spicommon_irqsource_for_host(spi_host_device_t host); - - - /** * Callback, to be called when a DMA engine reset is completed */ diff --git a/tools/sdk/include/driver/driver/spi_master.h b/tools/sdk/include/driver/driver/spi_master.h index 79eb52d3..c501998c 100644 --- a/tools/sdk/include/driver/driver/spi_master.h +++ b/tools/sdk/include/driver/driver/spi_master.h @@ -30,7 +30,7 @@ extern "C" #define SPI_DEVICE_TXBIT_LSBFIRST (1<<0) ///< Transmit command/address/data LSB first instead of the default MSB first #define SPI_DEVICE_RXBIT_LSBFIRST (1<<1) ///< Receive data LSB first instead of the default MSB first -#define SPI_DEVICE_BIT_LSBFIRST (SPI_TXBIT_LSBFIRST|SPI_RXBIT_LSBFIRST); ///< Transmit and receive LSB first +#define SPI_DEVICE_BIT_LSBFIRST (SPI_DEVICE_TXBIT_LSBFIRST|SPI_DEVICE_RXBIT_LSBFIRST); ///< Transmit and receive LSB first #define SPI_DEVICE_3WIRE (1<<2) ///< Use MOSI (=spid) for both sending and receiving data #define SPI_DEVICE_POSITIVE_CS (1<<3) ///< Make CS positive during a transaction instead of negative #define SPI_DEVICE_HALFDUPLEX (1<<4) ///< Transmit data before receiving it, instead of simultaneously @@ -67,24 +67,28 @@ typedef struct { #define SPI_TRANS_USE_TXDATA (1<<3) ///< Transmit tx_data member of spi_transaction_t instead of data at tx_buffer. Do not set tx_buffer when using this. /** - * This structure describes one SPI transaction + * This structure describes one SPI transaction. The descriptor should not be modified until the transaction finishes. */ struct spi_transaction_t { uint32_t flags; ///< Bitwise OR of SPI_TRANS_* flags - uint16_t command; ///< Command data. Specific length was given when device was added to the bus. - uint64_t address; ///< Address. Specific length was given when device was added to the bus. + uint16_t cmd; ///< Command data, of which the length is set in the ``command_bits`` of spi_device_interface_config_t. + ///< NOTE: this field, used to be "command" in ESP-IDF 2.1 and before, is re-written to be used in a new way in ESP-IDF 3.0. + ///< - Example: write 0x0123 and command_bits=12 to send command 0x12, 0x3_ (in previous version, you may have to write 0x3_12). + uint64_t addr; ///< Address data, of which the length is set in the ``address_bits`` of spi_device_interface_config_t. + ///< NOTE: this field, used to be "address" in ESP-IDF 2.1 and before, is re-written to be used in a new way in ESP-IDF3.0. + ///< - Example: write 0x123400 and address_bits=24 to send address of 0x12, 0x34, 0x00 (in previous version, you may have to write 0x12340000). size_t length; ///< Total data length, in bits - size_t rxlength; ///< Total data length received, if different from length. (0 defaults this to the value of ``length``) + size_t rxlength; ///< Total data length received, should be not greater than ``length`` in full-duplex mode (0 defaults this to the value of ``length``). void *user; ///< User-defined variable. Can be used to store eg transaction ID. union { const void *tx_buffer; ///< Pointer to transmit buffer, or NULL for no MOSI phase uint8_t tx_data[4]; ///< If SPI_USE_TXDATA is set, data set here is sent directly from this variable. }; union { - void *rx_buffer; ///< Pointer to receive buffer, or NULL for no MISO phase + void *rx_buffer; ///< Pointer to receive buffer, or NULL for no MISO phase. Written by 4 bytes-unit if DMA is used. uint8_t rx_data[4]; ///< If SPI_USE_RXDATA is set, data is received directly to this variable }; -}; +} ; //the rx data should start from a 32-bit aligned address to get around dma issue. typedef struct spi_device_t* spi_device_handle_t; ///< Handle for a device on a SPI bus @@ -182,8 +186,9 @@ esp_err_t spi_device_queue_trans(spi_device_handle_t handle, spi_transaction_t * * re-use the buffers. * * @param handle Device handle obtained using spi_host_add_dev - * @param trans_desc Pointer to variable able to contain a pointer to the description of the - * transaction that is executed + * @param trans_desc Pointer to variable able to contain a pointer to the description of the transaction + that is executed. The descriptor should not be modified until the descriptor is returned by + spi_device_get_trans_result. * @param ticks_to_wait Ticks to wait until there's a returned item; use portMAX_DELAY to never time out. * @return @@ -201,8 +206,7 @@ esp_err_t spi_device_get_trans_result(spi_device_handle_t handle, spi_transactio * using spi_device_get_trans_result. * * @param handle Device handle obtained using spi_host_add_dev - * @param trans_desc Pointer to variable able to contain a pointer to the description of the - * transaction that is executed + * @param trans_desc Description of transaction to execute * @return * - ESP_ERR_INVALID_ARG if parameter is invalid * - ESP_OK on success diff --git a/tools/sdk/include/driver/driver/touch_pad.h b/tools/sdk/include/driver/driver/touch_pad.h index e880ff61..ce67a7dc 100644 --- a/tools/sdk/include/driver/driver/touch_pad.h +++ b/tools/sdk/include/driver/driver/touch_pad.h @@ -20,150 +20,480 @@ extern "C" { #include "esp_intr.h" #include "esp_err.h" #include "esp_intr_alloc.h" -#define TOUCH_PAD_SLEEP_CYCLE_CONFIG (0x1000)//The Time is 150Khz,the Max value is 0xffff -#define TOUCH_PAD_MEASURE_CYCLE_CONFIG (0xffff)//The Time is 8Mhz,the Max value is 0xffff +#include "soc/touch_channel.h" + typedef enum { TOUCH_PAD_NUM0 = 0, /*!< Touch pad channel 0 is GPIO4 */ - TOUCH_PAD_NUM1, /*!< Touch pad channel 0 is GPIO0 */ - TOUCH_PAD_NUM2, /*!< Touch pad channel 0 is GPIO2 */ - TOUCH_PAD_NUM3, /*!< Touch pad channel 0 is GPIO15 */ - TOUCH_PAD_NUM4, /*!< Touch pad channel 0 is GPIO13 */ - TOUCH_PAD_NUM5, /*!< Touch pad channel 0 is GPIO12 */ - TOUCH_PAD_NUM6, /*!< Touch pad channel 0 is GPIO14 */ - TOUCH_PAD_NUM7, /*!< Touch pad channel 0 is GPIO27*/ - TOUCH_PAD_NUM8, /*!< Touch pad channel 0 is GPIO33*/ - TOUCH_PAD_NUM9, /*!< Touch pad channel 0 is GPIO32*/ + TOUCH_PAD_NUM1, /*!< Touch pad channel 1 is GPIO0 */ + TOUCH_PAD_NUM2, /*!< Touch pad channel 2 is GPIO2 */ + TOUCH_PAD_NUM3, /*!< Touch pad channel 3 is GPIO15*/ + TOUCH_PAD_NUM4, /*!< Touch pad channel 4 is GPIO13*/ + TOUCH_PAD_NUM5, /*!< Touch pad channel 5 is GPIO12*/ + TOUCH_PAD_NUM6, /*!< Touch pad channel 6 is GPIO14*/ + TOUCH_PAD_NUM7, /*!< Touch pad channel 7 is GPIO27*/ + TOUCH_PAD_NUM8, /*!< Touch pad channel 8 is GPIO32*/ + TOUCH_PAD_NUM9, /*!< Touch pad channel 9 is GPIO33*/ TOUCH_PAD_MAX, } touch_pad_t; +typedef enum { + TOUCH_HVOLT_KEEP = -1, /*!NumTouch,so you can select a interrupt threshold. - * - * @param[in] touch_num : touch num - * @param[out] touch_value : touch output value - * - * @return - ESP_OK Success - * - ESP_ERR_INVALID_ARG Touch pad error - * - ESP_FAIL Touch pad not initialized + * @brief get touch sensor counter value. + * Each touch sensor has a counter to count the number of charge/discharge cycles. + * When the pad is not 'touched', we can get a number of the counter. + * When the pad is 'touched', the value in counter will get smaller because of the larger equivalent capacitance. + * User can use this function to determine the interrupt trigger threshold. * + * @param touch_num touch pad index + * @param touch_value pointer to accept touch sensor value + * @return + * - ESP_OK Success + * - ESP_ERR_INVALID_ARG Touch pad error + * - ESP_FAIL Touch pad not initialized */ esp_err_t touch_pad_read(touch_pad_t touch_num, uint16_t * touch_value); /** - * @brief register TouchPad interrupt handler, the handler is an ISR. - * The handler will be attached to the same CPU core that this function is running on. - * - * @param fn Interrupt handler function. - * @param arg Parameter for handler function - * @param intr_alloc_flags Flags used to allocate the interrupt. One or multiple (ORred) - * ESP_INTR_FLAG_* values. See esp_intr_alloc.h for more info. - * @param handle Pointer to return handle. If non-NULL, a handle for the interrupt will - * be returned here. + * @brief get filtered touch sensor counter value by IIR filter. + * @note touch_pad_filter_start has to be called before calling touch_pad_read_filtered. + * This function can be called from ISR * + * @param touch_num touch pad index + * @param touch_value pointer to accept touch sensor value + * @return + * - ESP_OK Success + * - ESP_ERR_INVALID_ARG Touch pad error + * - ESP_FAIL Touch pad not initialized + */ +esp_err_t touch_pad_read_filtered(touch_pad_t touch_num, uint16_t *touch_value); + +/** + * @brief Register touch-pad ISR, + * @note Deprecated function, users should replace this with touch_pad_isr_register, + * because RTC modules share a same interrupt index. + * @param fn Pointer to ISR handler + * @param arg Parameter for ISR + * @param unused Reserved, not used + * @param handle_unused Reserved, not used * @return * - ESP_OK Success ; * - ESP_ERR_INVALID_ARG GPIO error */ -esp_err_t touch_pad_isr_handler_register(void(*fn)(void *), void *arg, int intr_alloc_flags, touch_isr_handle_t *handle); - +esp_err_t touch_pad_isr_handler_register(void(*fn)(void *), void *arg, int unused, intr_handle_t *handle_unused) __attribute__ ((deprecated)); /** - * *************** ATTENTION ********************/ -/** - *@attention - *Touch button is through the body's capacitive characteristics, - *there is a charge discharge circuit inside the. When the hands touch, - *the charge and discharge time will be slow. - *Because of the different hardware, each pad needs to be calibrated at the factory. - *We use touch_pad_read to determine factory parameters. + * @brief Register touch-pad ISR. + * The handler will be attached to the same CPU core that this function is running on. + * @param fn Pointer to ISR handler + * @param arg Parameter for ISR + * @return + * - ESP_OK Success ; + * - ESP_ERR_INVALID_ARG GPIO error */ +esp_err_t touch_pad_isr_register(intr_handler_t fn, void* arg); + /** - *----------EXAMPLE TO CONFIGURE GPIO AS OUTPUT ------------ * - * @code{c} - * touch_pad_init(); - * void taskA(void* arg) - * { - * for(;;){ - * vtaskDelay(20/portTICK_PERIOD_MS); - * ets_printf("touch pad value %u\n",touch_pad_read(0));//Take the touched status and untouched status value - * } - * } - * @endcode - **/ -/** - *----------EXAMPLE TO SET ISR HANDLER ---------------------- - * @code{c} - * touch_pad_isr_handler_register(rtc_intr,NULL, 0, NULL) //hook the isr handler for TouchPad interrupt - * @endcode + * @brief Deregister the handler previously registered using touch_pad_isr_handler_register + * @param fn handler function to call (as passed to touch_pad_isr_handler_register) + * @param arg argument of the handler (as passed to touch_pad_isr_handler_register) + * @return + * - ESP_OK on success + * - ESP_ERR_INVALID_STATE if a handler matching both fn and + * arg isn't registered */ +esp_err_t touch_pad_isr_deregister(void(*fn)(void *), void *arg); + /** - *----------EXAMPLE TO USE TOUCH_PAD------------ * - * @code{c} - * touch_pad_init();//only init one time - * touch_pad_config(0,300);//set the intr threshold,use touch_pad_read to determine this threshold - * touch_pad_isr_handler_register(rtc_intr,NULL, 0, NULL) - * #include "esp_attr.h" - * void rtc_intr(void * arg) - * { - * uint32_t pad_intr = READ_PERI_REG(SARADC_SAR_TOUCH_CTRL2_REG) & 0x3ff; - * uint8_t i = 0; - * uint32_t rtc_intr = READ_PERI_REG(RTC_CNTL_INT_ST_REG); - * WRITE_PERI_REG(RTC_CNTL_INT_CLR_REG, rtc_intr); - * SET_PERI_REG_MASK(SARADC_SAR_TOUCH_CTRL2_REG, SARADC_TOUCH_MEAS_EN_CLR); - * if (rtc_intr & RTC_CNTL_TOUCH_INT_ST) { - * for (i = 0; i < TOUCH_PAD_MAX; ++i) { - * if ((pad_intr >> i) & 0x01) { - * ets_printf("touch pad intr %u\n",i); - * } - * } - * } - * } - * @endcode - **/ + * @brief Set touch sensor measurement and sleep time + * @param sleep_cycle The touch sensor will sleep after each measurement. + * sleep_cycle decide the interval between each measurement. + * t_sleep = sleep_cycle / (RTC_SLOW_CLK frequency). + * The approximate frequency value of RTC_SLOW_CLK can be obtained using rtc_clk_slow_freq_get_hz function. + * @param meas_cycle The duration of the touch sensor measurement. + * t_meas = meas_cycle / 8M, the maximum measure time is 0xffff / 8M = 8.19 ms + * @return + * - ESP_OK on success + */ +esp_err_t touch_pad_set_meas_time(uint16_t sleep_cycle, uint16_t meas_cycle); + +/** + * @brief Get touch sensor measurement and sleep time + * @param sleep_cycle Pointer to accept sleep cycle number + * @param meas_cycle Pointer to accept measurement cycle count. + * @return + * - ESP_OK on success + */ +esp_err_t touch_pad_get_meas_time(uint16_t *sleep_cycle, uint16_t *meas_cycle); + +/** + * @brief Set touch sensor reference voltage, if the voltage gap between high and low reference voltage get less, + * the charging and discharging time would be faster, accordingly, the counter value would be larger. + * In the case of detecting very slight change of capacitance, we can narrow down the gap so as to increase + * the sensitivity. On the other hand, narrow voltage gap would also introduce more noise, but we can use a + * software filter to pre-process the counter value. + * @param refh the value of DREFH + * @param refl the value of DREFL + * @param atten the attenuation on DREFH + * @return + * - ESP_OK on success + * - ESP_ERR_INVALID_ARG if argument is wrong + */ +esp_err_t touch_pad_set_voltage(touch_high_volt_t refh, touch_low_volt_t refl, touch_volt_atten_t atten); + +/** + * @brief Get touch sensor reference voltage, + * @param refh pointer to accept DREFH value + * @param refl pointer to accept DREFL value + * @param atten pointer to accept the attenuation on DREFH + * @return + * - ESP_OK on success + */ +esp_err_t touch_pad_get_voltage(touch_high_volt_t *refh, touch_low_volt_t *refl, touch_volt_atten_t *atten); + +/** + * @brief Set touch sensor charge/discharge speed for each pad. + * If the slope is 0, the counter would always be zero. + * If the slope is 1, the charging and discharging would be slow, accordingly, the counter value would be small. + * If the slope is set 7, which is the maximum value, the charging and discharging would be fast, accordingly, the + * counter value would be larger. + * @param touch_num touch pad index + * @param slope touch pad charge/discharge speed + * @param opt the initial voltage + * @return + * - ESP_OK on success + * - ESP_ERR_INVALID_ARG if argument is wrong + */ +esp_err_t touch_pad_set_cnt_mode(touch_pad_t touch_num, touch_cnt_slope_t slope, touch_tie_opt_t opt); + +/** + * @brief Get touch sensor charge/discharge speed for each pad + * @param touch_num touch pad index + * @param slope pointer to accept touch pad charge/discharge slope + * @param opt pointer to accept the initial voltage + * @return + * - ESP_OK on success + * - ESP_ERR_INVALID_ARG if argument is wrong + */ +esp_err_t touch_pad_get_cnt_mode(touch_pad_t touch_num, touch_cnt_slope_t *slope, touch_tie_opt_t *opt); + +/** + * @brief Initialize touch pad GPIO + * @param touch_num touch pad index + * @return + * - ESP_OK on success + * - ESP_ERR_INVALID_ARG if argument is wrong + */ +esp_err_t touch_pad_io_init(touch_pad_t touch_num); + +/** + * @brief Set touch sensor FSM mode, the test action can be triggered by the timer, + * as well as by the software. + * @param mode FSM mode + * @return + * - ESP_OK on success + * - ESP_ERR_INVALID_ARG if argument is wrong + */ +esp_err_t touch_pad_set_fsm_mode(touch_fsm_mode_t mode); + +/** + * @brief Get touch sensor FSM mode + * @param mode pointer to accept FSM mode + * @return + * - ESP_OK on success + */ +esp_err_t touch_pad_get_fsm_mode(touch_fsm_mode_t *mode); + +/** + * @brief Trigger a touch sensor measurement, only support in SW mode of FSM + * @return + * - ESP_OK on success + */ +esp_err_t touch_pad_sw_start(); + +/** + * @brief Set touch sensor interrupt threshold + * @param touch_num touch pad index + * @param threshold threshold of touchpad count, refer to touch_pad_set_trigger_mode to see how to set trigger mode. + * @return + * - ESP_OK on success + * - ESP_ERR_INVALID_ARG if argument is wrong + */ +esp_err_t touch_pad_set_thresh(touch_pad_t touch_num, uint16_t threshold); + +/** + * @brief Get touch sensor interrupt threshold + * @param touch_num touch pad index + * @param threshold pointer to accept threshold + * @return + * - ESP_OK on success + * - ESP_ERR_INVALID_ARG if argument is wrong + */ +esp_err_t touch_pad_get_thresh(touch_pad_t touch_num, uint16_t *threshold); + +/** + * @brief Set touch sensor interrupt trigger mode. + * Interrupt can be triggered either when counter result is less than + * threshold or when counter result is more than threshold. + * @param mode touch sensor interrupt trigger mode + * @return + * - ESP_OK on success + * - ESP_ERR_INVALID_ARG if argument is wrong + */ +esp_err_t touch_pad_set_trigger_mode(touch_trigger_mode_t mode); + +/** + * @brief Get touch sensor interrupt trigger mode + * @param mode pointer to accept touch sensor interrupt trigger mode + * @return + * - ESP_OK on success + */ +esp_err_t touch_pad_get_trigger_mode(touch_trigger_mode_t *mode); + +/** + * @brief Set touch sensor interrupt trigger source. There are two sets of touch signals. + * Set1 and set2 can be mapped to several touch signals. Either set will be triggered + * if at least one of its touch signal is 'touched'. The interrupt can be configured to be generated + * if set1 is triggered, or only if both sets are triggered. + * @param src touch sensor interrupt trigger source + * @return + * - ESP_OK on success + * - ESP_ERR_INVALID_ARG if argument is wrong + */ +esp_err_t touch_pad_set_trigger_source(touch_trigger_src_t src); + +/** + * @brief Get touch sensor interrupt trigger source + * @param src pointer to accept touch sensor interrupt trigger source + * @return + * - ESP_OK on success + */ +esp_err_t touch_pad_get_trigger_source(touch_trigger_src_t *src); + +/** + * @brief Set touch sensor group mask. + * Touch pad module has two sets of signals, 'Touched' signal is triggered only if + * at least one of touch pad in this group is "touched". + * This function will set the register bits according to the given bitmask. + * @param set1_mask bitmask of touch sensor signal group1, it's a 10-bit value + * @param set2_mask bitmask of touch sensor signal group2, it's a 10-bit value + * @param en_mask bitmask of touch sensor work enable, it's a 10-bit value + * @return + * - ESP_OK on success + * - ESP_ERR_INVALID_ARG if argument is wrong + */ +esp_err_t touch_pad_set_group_mask(uint16_t set1_mask, uint16_t set2_mask, uint16_t en_mask); + +/** + * @brief Get touch sensor group mask. + * @param set1_mask pointer to accept bitmask of touch sensor signal group1, it's a 10-bit value + * @param set2_mask pointer to accept bitmask of touch sensor signal group2, it's a 10-bit value + * @param en_mask pointer to accept bitmask of touch sensor work enable, it's a 10-bit value + * @return + * - ESP_OK on success + */ +esp_err_t touch_pad_get_group_mask(uint16_t *set1_mask, uint16_t *set2_mask, uint16_t *en_mask); + +/** + * @brief Clear touch sensor group mask. + * Touch pad module has two sets of signals, Interrupt is triggered only if + * at least one of touch pad in this group is "touched". + * This function will clear the register bits according to the given bitmask. + * @param set1_mask bitmask touch sensor signal group1, it's a 10-bit value + * @param set2_mask bitmask touch sensor signal group2, it's a 10-bit value + * @param en_mask bitmask of touch sensor work enable, it's a 10-bit value + * @return + * - ESP_OK on success + * - ESP_ERR_INVALID_ARG if argument is wrong + */ +esp_err_t touch_pad_clear_group_mask(uint16_t set1_mask, uint16_t set2_mask, uint16_t en_mask); + +/** + * @brief To clear the touch status register, usually use this function in touch ISR to clear status. + * @return + * - ESP_OK on success + */ +esp_err_t touch_pad_clear_status(); + +/** + * @brief Get the touch sensor status, usually used in ISR to decide which pads are 'touched'. + * @return + * - touch status + */ +uint32_t touch_pad_get_status(); + +/** + * @brief To enable touch pad interrupt + * @return + * - ESP_OK on success + */ +esp_err_t touch_pad_intr_enable(); + +/** + * @brief To disable touch pad interrupt + * @return + * - ESP_OK on success + */ +esp_err_t touch_pad_intr_disable(); + +/** + * @brief set touch pad filter calibration period, in ms. + * Need to call touch_pad_filter_start before all touch filter APIs + * @param new_period_ms filter period, in ms + * @return + * - ESP_OK Success + * - ESP_ERR_INVALID_STATE driver state error + * - ESP_ERR_INVALID_ARG parameter error + */ +esp_err_t touch_pad_set_filter_period(uint32_t new_period_ms); + +/** + * @brief get touch pad filter calibration period, in ms + * Need to call touch_pad_filter_start before all touch filter APIs + * @param p_period_ms pointer to accept period + * @return + * - ESP_OK Success + * - ESP_ERR_INVALID_STATE driver state error + * - ESP_ERR_INVALID_ARG parameter error + */ +esp_err_t touch_pad_get_filter_period(uint32_t* p_period_ms); + +/** + * @brief start touch pad filter function + * This API will start a filter to process the noise in order to prevent false triggering + * when detecting slight change of capacitance. + * Need to call touch_pad_filter_start before all touch filter APIs + * + * If filter is not initialized, this API will initialize the filter with given period. + * If filter is already initialized, this API will update the filter period. + * @note This filter uses FreeRTOS timer, which is dispatched from a task with + * priority 1 by default on CPU 0. So if some application task with higher priority + * takes a lot of CPU0 time, then the quality of data obtained from this filter will be affected. + * You can adjust FreeRTOS timer task priority in menuconfig. + * @param filter_period_ms filter calibration period, in ms + * @return + * - ESP_OK Success + * - ESP_ERR_INVALID_ARG parameter error + * - ESP_ERR_NO_MEM No memory for driver + * - ESP_ERR_INVALID_STATE driver state error + */ +esp_err_t touch_pad_filter_start(uint32_t filter_period_ms); + +/** + * @brief stop touch pad filter function + * Need to call touch_pad_filter_start before all touch filter APIs + * @return + * - ESP_OK Success + * - ESP_ERR_INVALID_STATE driver state error + */ +esp_err_t touch_pad_filter_stop(); + +/** + * @brief delete touch pad filter driver and release the memory + * Need to call touch_pad_filter_start before all touch filter APIs + * @return + * - ESP_OK Success + * - ESP_ERR_INVALID_STATE driver state error + */ +esp_err_t touch_pad_filter_delete(); #ifdef __cplusplus } diff --git a/tools/sdk/include/driver/driver/uart.h b/tools/sdk/include/driver/driver/uart.h index 9bd35e43..229685b7 100644 --- a/tools/sdk/include/driver/driver/uart.h +++ b/tools/sdk/include/driver/driver/uart.h @@ -32,6 +32,7 @@ extern "C" { #include "freertos/queue.h" #include "freertos/ringbuf.h" #include +#include "soc/uart_channel.h" #define UART_FIFO_LEN (128) /*!< Length of the hardware FIFO buffers */ #define UART_INTR_MASK 0x1ff /*!< mask of all UART interrupts */ diff --git a/tools/sdk/include/esp32/esp_clk.h b/tools/sdk/include/esp32/esp_clk.h index 7b9c64c6..5c6f5cb8 100644 --- a/tools/sdk/include/esp32/esp_clk.h +++ b/tools/sdk/include/esp32/esp_clk.h @@ -54,3 +54,11 @@ uint32_t esp_clk_slowclk_cal_get(); */ void esp_clk_slowclk_cal_set(uint32_t value); +/** + * @brief Disables clock of some peripherals + * + * Called from cpu_start.c, not intended to be called from other places. + * This function disables clock of useless peripherals when cpu starts. + */ +void esp_perip_clk_init(void); + diff --git a/tools/sdk/include/esp32/esp_deep_sleep.h b/tools/sdk/include/esp32/esp_deep_sleep.h index 61d3642b..ea460181 100644 --- a/tools/sdk/include/esp32/esp_deep_sleep.h +++ b/tools/sdk/include/esp32/esp_deep_sleep.h @@ -1,4 +1,4 @@ -// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// Copyright 2015-2017 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -14,281 +14,81 @@ #pragma once -#include -#include "esp_err.h" -#include "driver/gpio.h" -#include "driver/touch_pad.h" +/** + * @file esp_deep_sleep.h + * @brief legacy definitions of esp_deep_sleep APIs + * + * This file provides compatibility for applications using esp_deep_sleep_* APIs. + * New applications should use functions defined in "esp_sleep.h" instead. + * These functions and types will be deprecated at some point. + */ + +#warning esp_deep_sleep.h will be deprecated in the next release. Use esp_sleep.h instead. + +#include "esp_sleep.h" #ifdef __cplusplus extern "C" { #endif -/** - * @brief Logic function used for EXT1 wakeup mode. - */ -typedef enum { - ESP_EXT1_WAKEUP_ALL_LOW = 0, //!< Wake the chip when all selected GPIOs go low - ESP_EXT1_WAKEUP_ANY_HIGH = 1 //!< Wake the chip when any of the selected GPIOs go high -} esp_ext1_wakeup_mode_t; +typedef esp_sleep_pd_domain_t esp_deep_sleep_pd_domain_t; +typedef esp_sleep_pd_option_t esp_deep_sleep_pd_option_t; +typedef esp_sleep_ext1_wakeup_mode_t esp_ext1_wakeup_mode_t; +typedef esp_sleep_wakeup_cause_t esp_deep_sleep_wakeup_cause_t; -/** - * @brief Power domains which can be powered down in deep sleep - */ -typedef enum { - ESP_PD_DOMAIN_RTC_PERIPH, //!< RTC IO, sensors and ULP co-processor - ESP_PD_DOMAIN_RTC_SLOW_MEM, //!< RTC slow memory - ESP_PD_DOMAIN_RTC_FAST_MEM, //!< RTC fast memory - ESP_PD_DOMAIN_MAX //!< Number of domains -} esp_deep_sleep_pd_domain_t; +inline static esp_err_t esp_deep_sleep_enable_ulp_wakeup(void) +{ + return esp_sleep_enable_ulp_wakeup(); +} -/** - * @brief Power down options - */ -typedef enum { - ESP_PD_OPTION_OFF, //!< Power down the power domain in deep sleep - ESP_PD_OPTION_ON, //!< Keep power domain enabled during deep sleep - ESP_PD_OPTION_AUTO //!< Keep power domain enabled in deep sleep, if it is needed by one of the wakeup options. Otherwise power it down. -} esp_deep_sleep_pd_option_t; +inline static esp_err_t esp_deep_sleep_enable_timer_wakeup(uint64_t time_in_us) +{ + return esp_sleep_enable_timer_wakeup(time_in_us); +} -/** - * @brief Deep sleep wakeup cause - */ -typedef enum { - ESP_DEEP_SLEEP_WAKEUP_UNDEFINED, //! Wakeup was not caused by deep sleep - ESP_DEEP_SLEEP_WAKEUP_EXT0, //! Wakeup caused by external signal using RTC_IO - ESP_DEEP_SLEEP_WAKEUP_EXT1, //! Wakeup caused by external signal using RTC_CNTL - ESP_DEEP_SLEEP_WAKEUP_TIMER, //! Wakeup caused by timer - ESP_DEEP_SLEEP_WAKEUP_TOUCHPAD, //! Wakeup caused by touchpad - ESP_DEEP_SLEEP_WAKEUP_ULP, //! Wakeup caused by ULP program -} esp_deep_sleep_wakeup_cause_t; +inline static esp_err_t esp_deep_sleep_enable_touchpad_wakeup(void) +{ + return esp_sleep_enable_touchpad_wakeup(); +} +inline static touch_pad_t esp_deep_sleep_get_touchpad_wakeup_status() +{ + return esp_sleep_get_touchpad_wakeup_status(); +} -/** - * @brief Enable wakeup by ULP coprocessor - * @note In revisions 0 and 1 of the ESP32, ULP wakeup source - * can not be used when RTC_PERIPH power domain is forced - * to be powered on (ESP_PD_OPTION_ON) or when ext0 wakeup - * source is used. - * @return - * - ESP_OK on success - * - ESP_ERR_INVALID_STATE if ULP co-processor is not enabled or if wakeup triggers conflict - */ -esp_err_t esp_deep_sleep_enable_ulp_wakeup(); +inline static esp_err_t esp_deep_sleep_enable_ext0_wakeup(gpio_num_t gpio_num, int level) +{ + return esp_sleep_enable_ext0_wakeup(gpio_num, level); +} -/** - * @brief Enable wakeup by timer - * @param time_in_us time before wakeup, in microseconds - * @return - * - ESP_OK on success - * - ESP_ERR_INVALID_ARG if value is out of range (TBD) - */ -esp_err_t esp_deep_sleep_enable_timer_wakeup(uint64_t time_in_us); +inline static esp_err_t esp_deep_sleep_enable_ext1_wakeup(uint64_t mask, esp_ext1_wakeup_mode_t mode) +{ + return esp_sleep_enable_ext1_wakeup(mask, mode); +} -/** - * @brief Enable wakeup by touch sensor - * - * @note In revisions 0 and 1 of the ESP32, touch wakeup source - * can not be used when RTC_PERIPH power domain is forced - * to be powered on (ESP_PD_OPTION_ON) or when ext0 wakeup - * source is used. - * - * @return - * - ESP_OK on success - * - ESP_ERR_INVALID_STATE if wakeup triggers conflict - */ -esp_err_t esp_deep_sleep_enable_touchpad_wakeup(); +inline static esp_err_t esp_deep_sleep_pd_config( + esp_deep_sleep_pd_domain_t domain, + esp_deep_sleep_pd_option_t option) +{ + return esp_sleep_pd_config(domain, option); +} -/** - * @brief Get the touch pad which caused wakeup - * - * If wakeup was caused by another source, this function will return TOUCH_PAD_MAX; - * - * @return touch pad which caused wakeup - */ -touch_pad_t esp_deep_sleep_get_touchpad_wakeup_status(); +inline static esp_deep_sleep_wakeup_cause_t esp_deep_sleep_get_wakeup_cause() +{ + return esp_sleep_get_wakeup_cause(); +} -/** - * @brief Enable wakeup using a pin - * - * This function uses external wakeup feature of RTC_IO peripheral. - * It will work only if RTC peripherals are kept on during deep sleep. - * - * This feature can monitor any pin which is an RTC IO. Once the pin transitions - * into the state given by level argument, the chip will be woken up. - * - * @note This function does not modify pin configuration. The pin is - * configured in esp_deep_sleep_start, immediately before - * entering deep sleep. - * - * @note In revisions 0 and 1 of the ESP32, ext0 wakeup source - * can not be used together with touch or ULP wakeup sources. - * - * @param gpio_num GPIO number used as wakeup source. Only GPIOs which are have RTC - * functionality can be used: 0,2,4,12-15,25-27,32-39. - * @param level input level which will trigger wakeup (0=low, 1=high) - * @return - * - ESP_OK on success - * - ESP_ERR_INVALID_ARG if the selected GPIO is not an RTC GPIO, - * or the mode is invalid - * - ESP_ERR_INVALID_STATE if wakeup triggers conflict - */ -esp_err_t esp_deep_sleep_enable_ext0_wakeup(gpio_num_t gpio_num, int level); +#define ESP_DEEP_SLEEP_WAKEUP_UNDEFINED ESP_SLEEP_WAKEUP_UNDEFINED +#define ESP_DEEP_SLEEP_WAKEUP_EXT0 ESP_SLEEP_WAKEUP_EXT0 +#define ESP_DEEP_SLEEP_WAKEUP_EXT1 ESP_SLEEP_WAKEUP_EXT1 +#define ESP_DEEP_SLEEP_WAKEUP_TIMER ESP_SLEEP_WAKEUP_TIMER +#define ESP_DEEP_SLEEP_WAKEUP_TOUCHPAD ESP_SLEEP_WAKEUP_TOUCHPAD +#define ESP_DEEP_SLEEP_WAKEUP_ULP ESP_SLEEP_WAKEUP_ULP -/** - * @brief Enable wakeup using multiple pins - * - * This function uses external wakeup feature of RTC controller. - * It will work even if RTC peripherals are shut down during deep sleep. - * - * This feature can monitor any number of pins which are in RTC IOs. - * Once any of the selected pins goes into the state given by mode argument, - * the chip will be woken up. - * - * @note This function does not modify pin configuration. The pins are - * configured in esp_deep_sleep_start, immediately before - * entering deep sleep. - * - * @note internal pullups and pulldowns don't work when RTC peripherals are - * shut down. In this case, external resistors need to be added. - * Alternatively, RTC peripherals (and pullups/pulldowns) may be - * kept enabled using esp_deep_sleep_pd_config function. - * - * @param mask bit mask of GPIO numbers which will cause wakeup. Only GPIOs - * which are have RTC functionality can be used in this bit map: - * 0,2,4,12-15,25-27,32-39. - * @param mode select logic function used to determine wakeup condition: - * - ESP_EXT1_WAKEUP_ALL_LOW: wake up when all selected GPIOs are low - * - ESP_EXT1_WAKEUP_ANY_HIGH: wake up when any of the selected GPIOs is high - * @return - * - ESP_OK on success - * - ESP_ERR_INVALID_ARG if any of the selected GPIOs is not an RTC GPIO, - * or mode is invalid - */ -esp_err_t esp_deep_sleep_enable_ext1_wakeup(uint64_t mask, esp_ext1_wakeup_mode_t mode); - - -/** - * @brief Get the bit mask of GPIOs which caused wakeup (ext1) - * - * If wakeup was caused by another source, this function will return 0. - * - * @return bit mask, if GPIOn caused wakeup, BIT(n) will be set - */ -uint64_t esp_deep_sleep_get_ext1_wakeup_status(); - -/** - * @brief Set power down mode for an RTC power domain in deep sleep - * - * If not set set using this API, all power domains default to ESP_PD_OPTION_AUTO. - * - * @param domain power domain to configure - * @param option power down option (ESP_PD_OPTION_OFF, ESP_PD_OPTION_ON, or ESP_PD_OPTION_AUTO) - * @return - * - ESP_OK on success - * - ESP_ERR_INVALID_ARG if either of the arguments is out of range - */ -esp_err_t esp_deep_sleep_pd_config(esp_deep_sleep_pd_domain_t domain, - esp_deep_sleep_pd_option_t option); - -/** - * @brief Enter deep sleep with the configured wakeup options - * - * This function does not return. - */ -void esp_deep_sleep_start() __attribute__((noreturn)); - -/** - * @brief Enter deep-sleep mode - * - * The device will automatically wake up after the deep-sleep time - * Upon waking up, the device calls deep sleep wake stub, and then proceeds - * to load application. - * - * Call to this function is equivalent to a call to esp_deep_sleep_enable_timer_wakeup - * followed by a call to esp_deep_sleep_start. - * - * esp_deep_sleep does not shut down WiFi, BT, and higher level protocol - * connections gracefully. - * Make sure relevant WiFi and BT stack functions are called to close any - * connections and deinitialize the peripherals. These include: - * - esp_bluedroid_disable - * - esp_bt_controller_disable - * - esp_wifi_stop - * - * This function does not return. - * - * @param time_in_us deep-sleep time, unit: microsecond - */ -void esp_deep_sleep(uint64_t time_in_us) __attribute__((noreturn)); - -/** - * @brief Enter deep-sleep mode - * - * Function has been renamed to esp_deep_sleep. - * This name is deprecated and will be removed in a future version. - * - * @param time_in_us deep-sleep time, unit: microsecond - */ -void system_deep_sleep(uint64_t time_in_us) __attribute__((noreturn, deprecated)); - - -/** - * @brief Get the source which caused deep sleep wakeup - * - * @return wakeup cause, or ESP_DEEP_SLEEP_WAKEUP_UNDEFINED if reset reason is other than deep sleep reset. - */ -esp_deep_sleep_wakeup_cause_t esp_deep_sleep_get_wakeup_cause(); - - -/** - * @brief Default stub to run on wake from deep sleep. - * - * Allows for executing code immediately on wake from sleep, before - * the software bootloader or ESP-IDF app has started up. - * - * This function is weak-linked, so you can implement your own version - * to run code immediately when the chip wakes from - * sleep. - * - * See docs/deep-sleep-stub.rst for details. - */ -void esp_wake_deep_sleep(void); - -/** - * @brief Function type for stub to run on wake from sleep. - * - */ -typedef void (*esp_deep_sleep_wake_stub_fn_t)(void); - -/** - * @brief Install a new stub at runtime to run on wake from deep sleep - * - * If implementing esp_wake_deep_sleep() then it is not necessary to - * call this function. - * - * However, it is possible to call this function to substitute a - * different deep sleep stub. Any function used as a deep sleep stub - * must be marked RTC_IRAM_ATTR, and must obey the same rules given - * for esp_wake_deep_sleep(). - */ -void esp_set_deep_sleep_wake_stub(esp_deep_sleep_wake_stub_fn_t new_stub); - -/** - * @brief Get current wake from deep sleep stub - * @return Return current wake from deep sleep stub, or NULL if - * no stub is installed. - */ -esp_deep_sleep_wake_stub_fn_t esp_get_deep_sleep_wake_stub(void); - -/** - * @brief The default esp-idf-provided esp_wake_deep_sleep() stub. - * - * See docs/deep-sleep-stub.rst for details. - */ -void esp_default_wake_deep_sleep(void); #ifdef __cplusplus } #endif + diff --git a/tools/sdk/include/esp32/esp_deepsleep.h b/tools/sdk/include/esp32/esp_deepsleep.h index fe536499..3f0151b6 100644 --- a/tools/sdk/include/esp32/esp_deepsleep.h +++ b/tools/sdk/include/esp32/esp_deepsleep.h @@ -1,2 +1,2 @@ -#warning esp_deepsleep.h has been renamed to esp_deep_sleep.h, please update include directives -#include "esp_deep_sleep.h" +#warning esp_deepsleep.h has been renamed to esp_sleep.h, please update include directives +#include "esp_sleep.h" diff --git a/tools/sdk/include/esp32/esp_dport_access.h b/tools/sdk/include/esp32/esp_dport_access.h index 8b081c5a..49e15f69 100644 --- a/tools/sdk/include/esp32/esp_dport_access.h +++ b/tools/sdk/include/esp32/esp_dport_access.h @@ -12,6 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include + #ifndef _ESP_DPORT_ACCESS_H_ #define _ESP_DPORT_ACCESS_H_ @@ -22,7 +24,8 @@ extern "C" { void esp_dport_access_stall_other_cpu_start(void); void esp_dport_access_stall_other_cpu_end(void); void esp_dport_access_int_init(void); -void esp_dport_access_int_deinit(void); +void esp_dport_access_int_pause(void); +void esp_dport_access_int_resume(void); #if defined(BOOTLOADER_BUILD) || defined(CONFIG_FREERTOS_UNICORE) || !defined(ESP_PLATFORM) #define DPORT_STALL_OTHER_CPU_START() diff --git a/tools/sdk/include/esp32/esp_event.h b/tools/sdk/include/esp32/esp_event.h index 7b3a8573..ccffdb81 100644 --- a/tools/sdk/include/esp32/esp_event.h +++ b/tools/sdk/include/esp32/esp_event.h @@ -35,6 +35,7 @@ typedef enum { SYSTEM_EVENT_STA_DISCONNECTED, /**< ESP32 station disconnected from AP */ SYSTEM_EVENT_STA_AUTHMODE_CHANGE, /**< the auth mode of AP connected by ESP32 station changed */ SYSTEM_EVENT_STA_GOT_IP, /**< ESP32 station got IP from connected AP */ + SYSTEM_EVENT_STA_LOST_IP, /**< ESP32 station lost IP and the IP is reset to 0 */ SYSTEM_EVENT_STA_WPS_ER_SUCCESS, /**< ESP32 station wps succeeds in enrollee mode */ SYSTEM_EVENT_STA_WPS_ER_FAILED, /**< ESP32 station wps fails in enrollee mode */ SYSTEM_EVENT_STA_WPS_ER_TIMEOUT, /**< ESP32 station wps timeout in enrollee mode */ @@ -86,6 +87,7 @@ typedef struct { typedef struct { tcpip_adapter_ip_info_t ip_info; + bool ip_changed; } system_event_sta_got_ip_t; typedef struct { @@ -116,7 +118,7 @@ typedef union { system_event_sta_disconnected_t disconnected; /**< ESP32 station disconnected to AP */ system_event_sta_scan_done_t scan_done; /**< ESP32 station scan (APs) done */ system_event_sta_authmode_change_t auth_change; /**< the auth mode of AP ESP32 station connected to changed */ - system_event_sta_got_ip_t got_ip; /**< ESP32 station got IP */ + system_event_sta_got_ip_t got_ip; /**< ESP32 station got IP, first time got IP or when IP is changed */ system_event_sta_wps_er_pin_t sta_er_pin; /**< ESP32 station WPS enrollee mode PIN code received */ system_event_sta_wps_fail_reason_t sta_er_fail_reason;/**< ESP32 station WPS enrollee mode failed reason code received */ system_event_ap_staconnected_t sta_connected; /**< a station connected to ESP32 soft-AP */ @@ -159,6 +161,17 @@ esp_err_t esp_event_send(system_event_t *event); */ esp_err_t esp_event_process_default(system_event_t *event); +/** + * @brief Install default event handlers for Ethernet interface + * + */ +void esp_event_set_default_eth_handlers(); + +/** + * @brief Install default event handlers for Wi-Fi interfaces (station and AP) + * + */ +void esp_event_set_default_wifi_handlers(); #ifdef __cplusplus } diff --git a/tools/sdk/include/esp32/esp_intr_alloc.h b/tools/sdk/include/esp32/esp_intr_alloc.h index 63555c20..ad121abb 100644 --- a/tools/sdk/include/esp32/esp_intr_alloc.h +++ b/tools/sdk/include/esp32/esp_intr_alloc.h @@ -104,7 +104,7 @@ typedef intr_handle_data_t* intr_handle_t ; esp_err_t esp_intr_mark_shared(int intno, int cpu, bool is_in_iram); /** - * @brief Reserve an interrupt to be used outside of this framewoek + * @brief Reserve an interrupt to be used outside of this framework * * This will mark a certain interrupt on the specified CPU as * reserved, not to be allocated for any reason. @@ -197,6 +197,11 @@ esp_err_t esp_intr_alloc_intrstatus(int source, int flags, uint32_t intrstatusre * Use an interrupt handle to disable the interrupt and release the resources * associated with it. * + * @note + * When the handler shares its source with other handlers, the interrupt status + * bits it's responsible for should be managed properly before freeing it. see + * ``esp_intr_disable`` for more details. + * * @param handle The handle, as obtained by esp_intr_alloc or esp_intr_alloc_intrstatus * * @return ESP_ERR_INVALID_ARG if handle is invalid, or esp_intr_free runs on another core than @@ -227,8 +232,13 @@ int esp_intr_get_intno(intr_handle_t handle); /** * @brief Disable the interrupt associated with the handle * - * @note For local interrupts (ESP_INTERNAL_* sources), this function has to be called on the - * CPU the interrupt is allocated on. Other interrupts have no such restriction. + * @note + * 1. For local interrupts (ESP_INTERNAL_* sources), this function has to be called on the + * CPU the interrupt is allocated on. Other interrupts have no such restriction. + * 2. When several handlers sharing a same interrupt source, interrupt status bits, which are + * handled in the handler to be disabled, should be masked before the disabling, or handled + * in other enabled interrupts properly. Miss of interrupt status handling will cause infinite + * interrupt calls and finally system crash. * * @param handle The handle, as obtained by esp_intr_alloc or esp_intr_alloc_intrstatus * diff --git a/tools/sdk/include/esp32/esp_sleep.h b/tools/sdk/include/esp32/esp_sleep.h new file mode 100644 index 00000000..1e3f4efd --- /dev/null +++ b/tools/sdk/include/esp32/esp_sleep.h @@ -0,0 +1,301 @@ +// Copyright 2015-2017 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include +#include "esp_err.h" +#include "driver/gpio.h" +#include "driver/touch_pad.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Logic function used for EXT1 wakeup mode. + */ +typedef enum { + ESP_EXT1_WAKEUP_ALL_LOW = 0, //!< Wake the chip when all selected GPIOs go low + ESP_EXT1_WAKEUP_ANY_HIGH = 1 //!< Wake the chip when any of the selected GPIOs go high +} esp_sleep_ext1_wakeup_mode_t; + +/** + * @brief Power domains which can be powered down in sleep mode + */ +typedef enum { + ESP_PD_DOMAIN_RTC_PERIPH, //!< RTC IO, sensors and ULP co-processor + ESP_PD_DOMAIN_RTC_SLOW_MEM, //!< RTC slow memory + ESP_PD_DOMAIN_RTC_FAST_MEM, //!< RTC fast memory + ESP_PD_DOMAIN_MAX //!< Number of domains +} esp_sleep_pd_domain_t; + +/** + * @brief Power down options + */ +typedef enum { + ESP_PD_OPTION_OFF, //!< Power down the power domain in sleep mode + ESP_PD_OPTION_ON, //!< Keep power domain enabled during sleep mode + ESP_PD_OPTION_AUTO //!< Keep power domain enabled in sleep mode, if it is needed by one of the wakeup options. Otherwise power it down. +} esp_sleep_pd_option_t; + +/** + * @brief Sleep wakeup cause + */ +typedef enum { + ESP_SLEEP_WAKEUP_UNDEFINED, //! In case of deep sleep, reset was not caused by exit from deep sleep + ESP_SLEEP_WAKEUP_EXT0, //! Wakeup caused by external signal using RTC_IO + ESP_SLEEP_WAKEUP_EXT1, //! Wakeup caused by external signal using RTC_CNTL + ESP_SLEEP_WAKEUP_TIMER, //! Wakeup caused by timer + ESP_SLEEP_WAKEUP_TOUCHPAD, //! Wakeup caused by touchpad + ESP_SLEEP_WAKEUP_ULP, //! Wakeup caused by ULP program +} esp_sleep_wakeup_cause_t; + + +/** + * @brief Enable wakeup by ULP coprocessor + * @note In revisions 0 and 1 of the ESP32, ULP wakeup source + * can not be used when RTC_PERIPH power domain is forced + * to be powered on (ESP_PD_OPTION_ON) or when ext0 wakeup + * source is used. + * @return + * - ESP_OK on success + * - ESP_ERR_INVALID_STATE if ULP co-processor is not enabled or if wakeup triggers conflict + */ +esp_err_t esp_sleep_enable_ulp_wakeup(); + +/** + * @brief Enable wakeup by timer + * @param time_in_us time before wakeup, in microseconds + * @return + * - ESP_OK on success + * - ESP_ERR_INVALID_ARG if value is out of range (TBD) + */ +esp_err_t esp_sleep_enable_timer_wakeup(uint64_t time_in_us); + +/** + * @brief Enable wakeup by touch sensor + * + * @note In revisions 0 and 1 of the ESP32, touch wakeup source + * can not be used when RTC_PERIPH power domain is forced + * to be powered on (ESP_PD_OPTION_ON) or when ext0 wakeup + * source is used. + * + * @return + * - ESP_OK on success + * - ESP_ERR_INVALID_STATE if wakeup triggers conflict + */ +esp_err_t esp_sleep_enable_touchpad_wakeup(); + +/** + * @brief Get the touch pad which caused wakeup + * + * If wakeup was caused by another source, this function will return TOUCH_PAD_MAX; + * + * @return touch pad which caused wakeup + */ +touch_pad_t esp_sleep_get_touchpad_wakeup_status(); + +/** + * @brief Enable wakeup using a pin + * + * This function uses external wakeup feature of RTC_IO peripheral. + * It will work only if RTC peripherals are kept on during sleep. + * + * This feature can monitor any pin which is an RTC IO. Once the pin transitions + * into the state given by level argument, the chip will be woken up. + * + * @note This function does not modify pin configuration. The pin is + * configured in esp_sleep_start, immediately before entering sleep mode. + * + * @note In revisions 0 and 1 of the ESP32, ext0 wakeup source + * can not be used together with touch or ULP wakeup sources. + * + * @param gpio_num GPIO number used as wakeup source. Only GPIOs which are have RTC + * functionality can be used: 0,2,4,12-15,25-27,32-39. + * @param level input level which will trigger wakeup (0=low, 1=high) + * @return + * - ESP_OK on success + * - ESP_ERR_INVALID_ARG if the selected GPIO is not an RTC GPIO, + * or the mode is invalid + * - ESP_ERR_INVALID_STATE if wakeup triggers conflict + */ +esp_err_t esp_sleep_enable_ext0_wakeup(gpio_num_t gpio_num, int level); + +/** + * @brief Enable wakeup using multiple pins + * + * This function uses external wakeup feature of RTC controller. + * It will work even if RTC peripherals are shut down during sleep. + * + * This feature can monitor any number of pins which are in RTC IOs. + * Once any of the selected pins goes into the state given by mode argument, + * the chip will be woken up. + * + * @note This function does not modify pin configuration. The pins are + * configured in esp_sleep_start, immediately before + * entering sleep mode. + * + * @note internal pullups and pulldowns don't work when RTC peripherals are + * shut down. In this case, external resistors need to be added. + * Alternatively, RTC peripherals (and pullups/pulldowns) may be + * kept enabled using esp_sleep_pd_config function. + * + * @param mask bit mask of GPIO numbers which will cause wakeup. Only GPIOs + * which are have RTC functionality can be used in this bit map: + * 0,2,4,12-15,25-27,32-39. + * @param mode select logic function used to determine wakeup condition: + * - ESP_EXT1_WAKEUP_ALL_LOW: wake up when all selected GPIOs are low + * - ESP_EXT1_WAKEUP_ANY_HIGH: wake up when any of the selected GPIOs is high + * @return + * - ESP_OK on success + * - ESP_ERR_INVALID_ARG if any of the selected GPIOs is not an RTC GPIO, + * or mode is invalid + */ +esp_err_t esp_sleep_enable_ext1_wakeup(uint64_t mask, esp_sleep_ext1_wakeup_mode_t mode); + + +/** + * @brief Get the bit mask of GPIOs which caused wakeup (ext1) + * + * If wakeup was caused by another source, this function will return 0. + * + * @return bit mask, if GPIOn caused wakeup, BIT(n) will be set + */ +uint64_t esp_sleep_get_ext1_wakeup_status(); + +/** + * @brief Set power down mode for an RTC power domain in sleep mode + * + * If not set set using this API, all power domains default to ESP_PD_OPTION_AUTO. + * + * @param domain power domain to configure + * @param option power down option (ESP_PD_OPTION_OFF, ESP_PD_OPTION_ON, or ESP_PD_OPTION_AUTO) + * @return + * - ESP_OK on success + * - ESP_ERR_INVALID_ARG if either of the arguments is out of range + */ +esp_err_t esp_sleep_pd_config(esp_sleep_pd_domain_t domain, + esp_sleep_pd_option_t option); + +/** + * @brief Enter deep sleep with the configured wakeup options + * + * This function does not return. + */ +void esp_deep_sleep_start() __attribute__((noreturn)); + +/** + * @brief Enter light sleep with the configured wakeup options + * + * @return + * - ESP_OK on success (returned after wakeup) + * - ESP_ERR_INVALID_STATE if WiFi or BT is not stopped + */ +esp_err_t esp_light_sleep_start(); + +/** + * @brief Enter deep-sleep mode + * + * The device will automatically wake up after the deep-sleep time + * Upon waking up, the device calls deep sleep wake stub, and then proceeds + * to load application. + * + * Call to this function is equivalent to a call to esp_deep_sleep_enable_timer_wakeup + * followed by a call to esp_deep_sleep_start. + * + * esp_deep_sleep does not shut down WiFi, BT, and higher level protocol + * connections gracefully. + * Make sure relevant WiFi and BT stack functions are called to close any + * connections and deinitialize the peripherals. These include: + * - esp_bluedroid_disable + * - esp_bt_controller_disable + * - esp_wifi_stop + * + * This function does not return. + * + * @param time_in_us deep-sleep time, unit: microsecond + */ +void esp_deep_sleep(uint64_t time_in_us) __attribute__((noreturn)); + +/** + * @brief Enter deep-sleep mode + * + * Function has been renamed to esp_deep_sleep. + * This name is deprecated and will be removed in a future version. + * + * @param time_in_us deep-sleep time, unit: microsecond + */ +void system_deep_sleep(uint64_t time_in_us) __attribute__((noreturn, deprecated)); + + +/** + * @brief Get the source which caused wakeup from sleep + * + * @return wakeup cause, or ESP_DEEP_SLEEP_WAKEUP_UNDEFINED if reset happened for reason other than deep sleep wakeup + */ +esp_sleep_wakeup_cause_t esp_sleep_get_wakeup_cause(); + + +/** + * @brief Default stub to run on wake from deep sleep. + * + * Allows for executing code immediately on wake from sleep, before + * the software bootloader or ESP-IDF app has started up. + * + * This function is weak-linked, so you can implement your own version + * to run code immediately when the chip wakes from + * sleep. + * + * See docs/deep-sleep-stub.rst for details. + */ +void esp_wake_deep_sleep(void); + +/** + * @brief Function type for stub to run on wake from sleep. + * + */ +typedef void (*esp_deep_sleep_wake_stub_fn_t)(void); + +/** + * @brief Install a new stub at runtime to run on wake from deep sleep + * + * If implementing esp_wake_deep_sleep() then it is not necessary to + * call this function. + * + * However, it is possible to call this function to substitute a + * different deep sleep stub. Any function used as a deep sleep stub + * must be marked RTC_IRAM_ATTR, and must obey the same rules given + * for esp_wake_deep_sleep(). + */ +void esp_set_deep_sleep_wake_stub(esp_deep_sleep_wake_stub_fn_t new_stub); + +/** + * @brief Get current wake from deep sleep stub + * @return Return current wake from deep sleep stub, or NULL if + * no stub is installed. + */ +esp_deep_sleep_wake_stub_fn_t esp_get_deep_sleep_wake_stub(void); + +/** + * @brief The default esp-idf-provided esp_wake_deep_sleep() stub. + * + * See docs/deep-sleep-stub.rst for details. + */ +void esp_default_wake_deep_sleep(void); + + +#ifdef __cplusplus +} +#endif diff --git a/tools/sdk/include/esp32/esp_spiram.h b/tools/sdk/include/esp32/esp_spiram.h new file mode 100644 index 00000000..2eb9c08e --- /dev/null +++ b/tools/sdk/include/esp32/esp_spiram.h @@ -0,0 +1,61 @@ +// Copyright 2015-2017 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +#ifndef __ESP_SPIRAM_H +#define __ESP_SPIRAM_H + +#include +#include +#include "esp_err.h" + +/** + * @brief Initialize spiram interface/hardware. Normally called from cpu_start.c. + * + * @return ESP_OK on success + */ +esp_err_t esp_spiram_init(); + + +/** + * @brief Memory test for SPI RAM. Should be called after SPI RAM is initialized and + * (in case of a dual-core system) the app CPU is online. This test overwrites the + * memory with crap, so do not call after e.g. the heap allocator has stored important + * stuff in SPI RAM. + * + * @return true on success, false on failed memory test + */ +bool esp_spiram_test(); + + +/** + * @brief Get the size of the attached SPI RAM chip selected in menuconfig + * + * @return Size in bytes, or 0 if no external RAM chip support compiled in. + */ +size_t esp_spiram_get_size(); + + +/** + * @brief Force a writeback of the data in the SPI RAM cache. This is to be called whenever + * cache is disabled, because disabling cache on the ESP32 discards the data in the SPI + * RAM cache. + * + * This is meant for use from within the SPI flash code. + */ +void esp_spiram_writeback_cache(); + + + +#endif \ No newline at end of file diff --git a/tools/sdk/include/esp32/esp_system.h b/tools/sdk/include/esp32/esp_system.h index 3921dfb8..0d57d84d 100644 --- a/tools/sdk/include/esp32/esp_system.h +++ b/tools/sdk/include/esp32/esp_system.h @@ -18,7 +18,7 @@ #include #include #include "esp_err.h" -#include "esp_deep_sleep.h" +#include "esp_sleep.h" #ifdef __cplusplus extern "C" { @@ -49,6 +49,15 @@ void system_init(void) __attribute__ ((deprecated)); */ void system_restore(void) __attribute__ ((deprecated)); +typedef void (*shutdown_handler_t)(void); +/** + * @brief Register shutdown handler + * + * This function allows you to register a handler that gets invoked before a + * systematic shutdown of the chip. + */ +esp_err_t esp_register_shutdown_handler(shutdown_handler_t handle); + /** * @brief Restart PRO and APP CPUs. * diff --git a/tools/sdk/include/esp32/esp_task.h b/tools/sdk/include/esp32/esp_task.h index aa694d3a..f90e14a0 100644 --- a/tools/sdk/include/esp32/esp_task.h +++ b/tools/sdk/include/esp32/esp_task.h @@ -43,6 +43,8 @@ /* idf task */ +#define ESP_TASK_TIMER_PRIO (ESP_TASK_PRIO_MAX - 3) +#define ESP_TASK_TIMER_STACK CONFIG_TIMER_TASK_STACK_SIZE #define ESP_TASKD_EVENT_PRIO (ESP_TASK_PRIO_MAX - 5) #define ESP_TASKD_EVENT_STACK CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE #define ESP_TASK_TCPIP_PRIO (ESP_TASK_PRIO_MAX - 7) diff --git a/tools/sdk/include/esp32/esp_wifi.h b/tools/sdk/include/esp32/esp_wifi.h index b6450c7f..7bfa9637 100755 --- a/tools/sdk/include/esp32/esp_wifi.h +++ b/tools/sdk/include/esp32/esp_wifi.h @@ -144,7 +144,15 @@ typedef struct { extern const wpa_crypto_funcs_t g_wifi_default_wpa_crypto_funcs; #define WIFI_INIT_CONFIG_MAGIC 0x1F2F3F4F -#ifdef CONFIG_WIFI_ENABLED + +#ifdef CONFIG_ESP32_WIFI_AMPDU_ENABLED +#define WIFI_DEFAULT_TX_BA_WIN CONFIG_ESP32_WIFI_TX_BA_WIN +#define WIFI_DEFAULT_RX_BA_WIN CONFIG_ESP32_WIFI_RX_BA_WIN +#else +#define WIFI_DEFAULT_TX_BA_WIN 0 /* unused if ampdu_enable == false */ +#define WIFI_DEFAULT_RX_BA_WIN 0 +#endif + #define WIFI_INIT_CONFIG_DEFAULT() { \ .event_handler = &esp_event_send, \ .wpa_crypto_funcs = g_wifi_default_wpa_crypto_funcs, \ @@ -156,13 +164,10 @@ extern const wpa_crypto_funcs_t g_wifi_default_wpa_crypto_funcs; .ampdu_enable = WIFI_AMPDU_ENABLED,\ .nvs_enable = WIFI_NVS_ENABLED,\ .nano_enable = WIFI_NANO_FORMAT_ENABLED,\ - .tx_ba_win = CONFIG_ESP32_WIFI_TX_BA_WIN,\ - .rx_ba_win = CONFIG_ESP32_WIFI_RX_BA_WIN,\ + .tx_ba_win = WIFI_DEFAULT_TX_BA_WIN,\ + .rx_ba_win = WIFI_DEFAULT_RX_BA_WIN,\ .magic = WIFI_INIT_CONFIG_MAGIC\ }; -#else -#define WIFI_INIT_CONFIG_DEFAULT() {0}; _Static_assert(0, "please enable wifi in menuconfig to use esp_wifi.h"); -#endif /** * @brief Init WiFi diff --git a/tools/sdk/include/esp32/esp_wifi_internal.h b/tools/sdk/include/esp32/esp_wifi_internal.h index 09813bfa..6627636d 100644 --- a/tools/sdk/include/esp32/esp_wifi_internal.h +++ b/tools/sdk/include/esp32/esp_wifi_internal.h @@ -40,6 +40,26 @@ extern "C" { #endif +/** + * @brief Initialize Wi-Fi Driver + * Alloc resource for WiFi driver, such as WiFi control structure, RX/TX buffer, + * WiFi NVS structure among others. + * + * For the most part, you need not call this function directly. It gets called + * from esp_wifi_init(). + * + * This function may be called, if you only need to initialize the Wi-Fi driver + * without having to use the network stack on top. + * + * @param config provide WiFi init configuration + * + * @return + * - ESP_OK: succeed + * - ESP_ERR_WIFI_NO_MEM: out of memory + * - others: refer to error code esp_err.h + */ +esp_err_t esp_wifi_init_internal(wifi_init_config_t *config); + /** * @brief get whether the wifi driver is allowed to transmit data or not * diff --git a/tools/sdk/include/esp32/hwcrypto/aes.h b/tools/sdk/include/esp32/hwcrypto/aes.h index b6a632af..0bcd1f49 100644 --- a/tools/sdk/include/esp32/hwcrypto/aes.h +++ b/tools/sdk/include/esp32/hwcrypto/aes.h @@ -38,11 +38,6 @@ extern "C" { #define ERR_ESP_AES_INVALID_KEY_LENGTH -0x0020 /**< Invalid key length. */ #define ERR_ESP_AES_INVALID_INPUT_LENGTH -0x0022 /**< Invalid data input length. */ -typedef struct { - enum AES_BITS aesbits; - uint8_t key[32]; -} key_context, KEY_CTX; - /** * \brief AES context structure * @@ -52,10 +47,8 @@ typedef struct { * generating an extra round key */ typedef struct { - int nr; /*!< number of rounds */ - uint32_t *rk; /*!< AES round keys */ - KEY_CTX enc; - KEY_CTX dec; + uint8_t key_bytes; + uint8_t key[32]; } esp_aes_context; /** @@ -94,7 +87,7 @@ void esp_aes_init( esp_aes_context *ctx ); void esp_aes_free( esp_aes_context *ctx ); /** - * \brief AES key schedule (encryption) + * \brief AES set key schedule (encryption or decryption) * * \param ctx AES context to be initialized * \param key encryption key @@ -102,18 +95,7 @@ void esp_aes_free( esp_aes_context *ctx ); * * \return 0 if successful, or ERR_AES_INVALID_KEY_LENGTH */ -int esp_aes_setkey_enc( esp_aes_context *ctx, const unsigned char *key, unsigned int keybits ); - -/** - * \brief AES key schedule (decryption) - * - * \param ctx AES context to be initialized - * \param key decryption key - * \param keybits must be 128, 192 or 256 - * - * \return 0 if successful, or ERR_AES_INVALID_KEY_LENGTH - */ -int esp_aes_setkey_dec( esp_aes_context *ctx, const unsigned char *key, unsigned int keybits ); +int esp_aes_setkey( esp_aes_context *ctx, const unsigned char *key, unsigned int keybits ); /** * \brief AES-ECB block encryption/decryption diff --git a/tools/sdk/include/esp32/rom/uart.h b/tools/sdk/include/esp32/rom/uart.h index 81fa26c2..8f075392 100644 --- a/tools/sdk/include/esp32/rom/uart.h +++ b/tools/sdk/include/esp32/rom/uart.h @@ -267,7 +267,7 @@ void uart_tx_flush(uint8_t uart_no); * The function defined in ROM code has a bug, so we define the correct version * here for compatibility. */ -static inline void uart_tx_wait_idle(uint8_t uart_no) { +static inline void IRAM_ATTR uart_tx_wait_idle(uint8_t uart_no) { while(REG_GET_FIELD(UART_STATUS_REG(uart_no), UART_ST_UTX_OUT)) { ; } diff --git a/tools/sdk/include/esp_adc_cal/esp_adc_cal.h b/tools/sdk/include/esp_adc_cal/esp_adc_cal.h new file mode 100644 index 00000000..4a2d06a9 --- /dev/null +++ b/tools/sdk/include/esp_adc_cal/esp_adc_cal.h @@ -0,0 +1,153 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef __ESP_ADC_CAL_H__ +#define __ESP_ADC_CAL_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include "driver/adc.h" + +/** @cond */ +#define ADC_CAL_GAIN_SCALE 16 +#define ADC_CAL_OFFSET_SCALE 10 + +#define ADC_CAL_IDEAL_V_REF 1100 //In mV +#define ADC_CAL_LOW_V_REF 1000 +#define ADC_CAL_HIGH_V_REF 1200 +#define ADC_CAL_MIN 0 +#define ADC_CAL_MAX 4095 +/** @endcond */ + +/** + * @brief Structure storing Lookup Table + * + * The Lookup Tables (LUT) of a given attenuation contains 33 equally spaced + * points. The Gain and Offset curves are used to find the appopriate gain and + * offset factor given a reference voltage v_ref. + * + * @note A seperate LUT is provided for each attenuation and are defined in + * esp_adc_cal_lookup_tables.c + */ +typedef struct { + uint32_t gain_m; /**= ESP_LOG_ERROR) { ets_printf(LOG_FORMAT(E, format), esp_log_timestamp(), tag, ##__VA_ARGS__); } +/// macro to output logs in startup code at ``ESP_LOG_WARN`` level. @see ``ESP_EARLY_LOGE``,``ESP_LOGE``, ``printf`` #define ESP_EARLY_LOGW( tag, format, ... ) if (LOG_LOCAL_LEVEL >= ESP_LOG_WARN) { ets_printf(LOG_FORMAT(W, format), esp_log_timestamp(), tag, ##__VA_ARGS__); } +/// macro to output logs in startup code at ``ESP_LOG_INFO`` level. @see ``ESP_EARLY_LOGE``,``ESP_LOGE``, ``printf`` #define ESP_EARLY_LOGI( tag, format, ... ) if (LOG_LOCAL_LEVEL >= ESP_LOG_INFO) { ets_printf(LOG_FORMAT(I, format), esp_log_timestamp(), tag, ##__VA_ARGS__); } +/// macro to output logs in startup code at ``ESP_LOG_DEBUG`` level. @see ``ESP_EARLY_LOGE``,``ESP_LOGE``, ``printf`` #define ESP_EARLY_LOGD( tag, format, ... ) if (LOG_LOCAL_LEVEL >= ESP_LOG_DEBUG) { ets_printf(LOG_FORMAT(D, format), esp_log_timestamp(), tag, ##__VA_ARGS__); } +/// macro to output logs in startup code at ``ESP_LOG_VERBOSE`` level. @see ``ESP_EARLY_LOGE``,``ESP_LOGE``, ``printf`` #define ESP_EARLY_LOGV( tag, format, ... ) if (LOG_LOCAL_LEVEL >= ESP_LOG_VERBOSE) { ets_printf(LOG_FORMAT(V, format), esp_log_timestamp(), tag, ##__VA_ARGS__); } #ifndef BOOTLOADER_BUILD @@ -167,10 +172,21 @@ void esp_log_buffer_char(const char *tag, const void *buffer, uint16_t buff_len) #define ESP_LOGD( tag, format, ... ) if (LOG_LOCAL_LEVEL >= ESP_LOG_DEBUG) { esp_log_write(ESP_LOG_DEBUG, tag, LOG_FORMAT(D, format), esp_log_timestamp(), tag, ##__VA_ARGS__); } #define ESP_LOGV( tag, format, ... ) if (LOG_LOCAL_LEVEL >= ESP_LOG_VERBOSE) { esp_log_write(ESP_LOG_VERBOSE, tag, LOG_FORMAT(V, format), esp_log_timestamp(), tag, ##__VA_ARGS__); } #else +/** + * macro to output logs at ESP_LOG_ERROR level. + * + * @param tag tag of the log, which can be used to change the log level by ``esp_log_level_set`` at runtime. + * + * @see ``printf`` + */ #define ESP_LOGE( tag, format, ... ) ESP_EARLY_LOGE(tag, format, ##__VA_ARGS__) +/// macro to output logs at ``ESP_LOG_WARN`` level. @see ``ESP_LOGE`` #define ESP_LOGW( tag, format, ... ) ESP_EARLY_LOGW(tag, format, ##__VA_ARGS__) +/// macro to output logs at ``ESP_LOG_INFO`` level. @see ``ESP_LOGE`` #define ESP_LOGI( tag, format, ... ) ESP_EARLY_LOGI(tag, format, ##__VA_ARGS__) +/// macro to output logs at ``ESP_LOG_DEBUG`` level. @see ``ESP_LOGE`` #define ESP_LOGD( tag, format, ... ) ESP_EARLY_LOGD(tag, format, ##__VA_ARGS__) +/// macro to output logs at ``ESP_LOG_VERBOSE`` level. @see ``ESP_LOGE`` #define ESP_LOGV( tag, format, ... ) ESP_EARLY_LOGV(tag, format, ##__VA_ARGS__) #endif // BOOTLOADER_BUILD diff --git a/tools/sdk/include/lwip/arch/sys_arch.h b/tools/sdk/include/lwip/arch/sys_arch.h index 8d30ef17..716fd9fa 100644 --- a/tools/sdk/include/lwip/arch/sys_arch.h +++ b/tools/sdk/include/lwip/arch/sys_arch.h @@ -67,7 +67,6 @@ typedef struct sys_mbox_s { #define sys_sem_valid( x ) ( ( ( *x ) == NULL) ? pdFALSE : pdTRUE ) #define sys_sem_set_invalid( x ) ( ( *x ) = NULL ) -uint32_t system_get_time(void); void sys_delay_ms(uint32_t ms); sys_sem_t* sys_thread_sem_init(void); void sys_thread_sem_deinit(void); diff --git a/tools/sdk/include/lwip/lwipopts.h b/tools/sdk/include/lwip/lwipopts.h index 61a99382..7bc4021e 100644 --- a/tools/sdk/include/lwip/lwipopts.h +++ b/tools/sdk/include/lwip/lwipopts.h @@ -37,6 +37,7 @@ #include #include #include "esp_task.h" +#include "esp_system.h" #include "sdkconfig.h" /* Enable all Espressif-only options */ @@ -65,7 +66,7 @@ */ #define SMEMCPY(dst,src,len) memcpy(dst,src,len) -#define LWIP_RAND rand +#define LWIP_RAND esp_random /* ------------------------------------ @@ -294,6 +295,11 @@ */ #define TCP_MSS CONFIG_TCP_MSS +/** + * TCP_MSL: The maximum segment lifetime in milliseconds + */ +#define TCP_MSL CONFIG_TCP_MSL + /** * TCP_MAXRTX: Maximum number of retransmissions of data segments. */ diff --git a/tools/sdk/include/lwip/port/arch/sys_arch.h b/tools/sdk/include/lwip/port/arch/sys_arch.h index 8d30ef17..716fd9fa 100644 --- a/tools/sdk/include/lwip/port/arch/sys_arch.h +++ b/tools/sdk/include/lwip/port/arch/sys_arch.h @@ -67,7 +67,6 @@ typedef struct sys_mbox_s { #define sys_sem_valid( x ) ( ( ( *x ) == NULL) ? pdFALSE : pdTRUE ) #define sys_sem_set_invalid( x ) ( ( *x ) = NULL ) -uint32_t system_get_time(void); void sys_delay_ms(uint32_t ms); sys_sem_t* sys_thread_sem_init(void); void sys_thread_sem_deinit(void); diff --git a/tools/sdk/include/lwip/port/lwipopts.h b/tools/sdk/include/lwip/port/lwipopts.h index 61a99382..7bc4021e 100644 --- a/tools/sdk/include/lwip/port/lwipopts.h +++ b/tools/sdk/include/lwip/port/lwipopts.h @@ -37,6 +37,7 @@ #include #include #include "esp_task.h" +#include "esp_system.h" #include "sdkconfig.h" /* Enable all Espressif-only options */ @@ -65,7 +66,7 @@ */ #define SMEMCPY(dst,src,len) memcpy(dst,src,len) -#define LWIP_RAND rand +#define LWIP_RAND esp_random /* ------------------------------------ @@ -294,6 +295,11 @@ */ #define TCP_MSS CONFIG_TCP_MSS +/** + * TCP_MSL: The maximum segment lifetime in milliseconds + */ +#define TCP_MSL CONFIG_TCP_MSL + /** * TCP_MAXRTX: Maximum number of retransmissions of data segments. */ diff --git a/tools/sdk/include/mbedtls/mbedtls/aes.h b/tools/sdk/include/mbedtls/mbedtls/aes.h index a36e825a..1829f724 100644 --- a/tools/sdk/include/mbedtls/mbedtls/aes.h +++ b/tools/sdk/include/mbedtls/mbedtls/aes.h @@ -39,6 +39,11 @@ #define MBEDTLS_ERR_AES_INVALID_KEY_LENGTH -0x0020 /**< Invalid key length. */ #define MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH -0x0022 /**< Invalid data input length. */ +#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \ + !defined(inline) && !defined(__cplusplus) +#define inline __inline +#endif + #if !defined(MBEDTLS_AES_ALT) // Regular implementation // @@ -253,10 +258,12 @@ int mbedtls_aes_crypt_ctr( mbedtls_aes_context *ctx, * \param ctx AES context * \param input Plaintext block * \param output Output (ciphertext) block + * + * \return 0 if successful */ -void mbedtls_aes_encrypt( mbedtls_aes_context *ctx, - const unsigned char input[16], - unsigned char output[16] ); +int mbedtls_internal_aes_encrypt( mbedtls_aes_context *ctx, + const unsigned char input[16], + unsigned char output[16] ); /** * \brief Internal AES block decryption function @@ -266,10 +273,49 @@ void mbedtls_aes_encrypt( mbedtls_aes_context *ctx, * \param ctx AES context * \param input Ciphertext block * \param output Output (plaintext) block + * + * \return 0 if successful */ -void mbedtls_aes_decrypt( mbedtls_aes_context *ctx, - const unsigned char input[16], - unsigned char output[16] ); +int mbedtls_internal_aes_decrypt( mbedtls_aes_context *ctx, + const unsigned char input[16], + unsigned char output[16] ); + +#if !defined(MBEDTLS_DEPRECATED_REMOVED) +#if defined(MBEDTLS_DEPRECATED_WARNING) +#define MBEDTLS_DEPRECATED __attribute__((deprecated)) +#else +#define MBEDTLS_DEPRECATED +#endif +/** + * \brief Deprecated internal AES block encryption function + * without return value. + * + * \deprecated Superseded by mbedtls_aes_encrypt_ext() in 2.5.0 + * + * \param ctx AES context + * \param input Plaintext block + * \param output Output (ciphertext) block + */ +MBEDTLS_DEPRECATED void mbedtls_aes_encrypt( mbedtls_aes_context *ctx, + const unsigned char input[16], + unsigned char output[16] ); + +/** + * \brief Deprecated internal AES block decryption function + * without return value. + * + * \deprecated Superseded by mbedtls_aes_decrypt_ext() in 2.5.0 + * + * \param ctx AES context + * \param input Ciphertext block + * \param output Output (plaintext) block + */ +MBEDTLS_DEPRECATED void mbedtls_aes_decrypt( mbedtls_aes_context *ctx, + const unsigned char input[16], + unsigned char output[16] ); + +#undef MBEDTLS_DEPRECATED +#endif /* !MBEDTLS_DEPRECATED_REMOVED */ #ifdef __cplusplus } diff --git a/tools/sdk/include/mbedtls/mbedtls/bignum.h b/tools/sdk/include/mbedtls/mbedtls/bignum.h index 46f25076..2e021c9b 100644 --- a/tools/sdk/include/mbedtls/mbedtls/bignum.h +++ b/tools/sdk/include/mbedtls/mbedtls/bignum.h @@ -105,36 +105,71 @@ /* * Define the base integer type, architecture-wise. * - * 32-bit integers can be forced on 64-bit arches (eg. for testing purposes) - * by defining MBEDTLS_HAVE_INT32 and undefining MBEDTLS_HAVE_ASM + * 32 or 64-bit integer types can be forced regardless of the underlying + * architecture by defining MBEDTLS_HAVE_INT32 or MBEDTLS_HAVE_INT64 + * respectively and undefining MBEDTLS_HAVE_ASM. + * + * Double-width integers (e.g. 128-bit in 64-bit architectures) can be + * disabled by defining MBEDTLS_NO_UDBL_DIVISION. */ -#if ( ! defined(MBEDTLS_HAVE_INT32) && \ - defined(_MSC_VER) && defined(_M_AMD64) ) - #define MBEDTLS_HAVE_INT64 - typedef int64_t mbedtls_mpi_sint; - typedef uint64_t mbedtls_mpi_uint; -#else - #if ( ! defined(MBEDTLS_HAVE_INT32) && \ - defined(__GNUC__) && ( \ - defined(__amd64__) || defined(__x86_64__) || \ - defined(__ppc64__) || defined(__powerpc64__) || \ - defined(__ia64__) || defined(__alpha__) || \ - (defined(__sparc__) && defined(__arch64__)) || \ - defined(__s390x__) || defined(__mips64) ) ) - #define MBEDTLS_HAVE_INT64 - typedef int64_t mbedtls_mpi_sint; - typedef uint64_t mbedtls_mpi_uint; - /* mbedtls_t_udbl defined as 128-bit unsigned int */ - typedef unsigned int mbedtls_t_udbl __attribute__((mode(TI))); - #define MBEDTLS_HAVE_UDBL - #else - #define MBEDTLS_HAVE_INT32 - typedef int32_t mbedtls_mpi_sint; - typedef uint32_t mbedtls_mpi_uint; - typedef uint64_t mbedtls_t_udbl; - #define MBEDTLS_HAVE_UDBL - #endif /* !MBEDTLS_HAVE_INT32 && __GNUC__ && 64-bit platform */ -#endif /* !MBEDTLS_HAVE_INT32 && _MSC_VER && _M_AMD64 */ +#if !defined(MBEDTLS_HAVE_INT32) + #if defined(_MSC_VER) && defined(_M_AMD64) + /* Always choose 64-bit when using MSC */ + #if !defined(MBEDTLS_HAVE_INT64) + #define MBEDTLS_HAVE_INT64 + #endif /* !MBEDTLS_HAVE_INT64 */ + typedef int64_t mbedtls_mpi_sint; + typedef uint64_t mbedtls_mpi_uint; + #elif defined(__GNUC__) && ( \ + defined(__amd64__) || defined(__x86_64__) || \ + defined(__ppc64__) || defined(__powerpc64__) || \ + defined(__ia64__) || defined(__alpha__) || \ + ( defined(__sparc__) && defined(__arch64__) ) || \ + defined(__s390x__) || defined(__mips64) ) + #if !defined(MBEDTLS_HAVE_INT64) + #define MBEDTLS_HAVE_INT64 + #endif /* MBEDTLS_HAVE_INT64 */ + typedef int64_t mbedtls_mpi_sint; + typedef uint64_t mbedtls_mpi_uint; + #if !defined(MBEDTLS_NO_UDBL_DIVISION) + /* mbedtls_t_udbl defined as 128-bit unsigned int */ + typedef unsigned int mbedtls_t_udbl __attribute__((mode(TI))); + #define MBEDTLS_HAVE_UDBL + #endif /* !MBEDTLS_NO_UDBL_DIVISION */ + #elif defined(__ARMCC_VERSION) && defined(__aarch64__) + /* + * __ARMCC_VERSION is defined for both armcc and armclang and + * __aarch64__ is only defined by armclang when compiling 64-bit code + */ + #if !defined(MBEDTLS_HAVE_INT64) + #define MBEDTLS_HAVE_INT64 + #endif /* !MBEDTLS_HAVE_INT64 */ + typedef int64_t mbedtls_mpi_sint; + typedef uint64_t mbedtls_mpi_uint; + #if !defined(MBEDTLS_NO_UDBL_DIVISION) + /* mbedtls_t_udbl defined as 128-bit unsigned int */ + typedef __uint128_t mbedtls_t_udbl; + #define MBEDTLS_HAVE_UDBL + #endif /* !MBEDTLS_NO_UDBL_DIVISION */ + #elif defined(MBEDTLS_HAVE_INT64) + /* Force 64-bit integers with unknown compiler */ + typedef int64_t mbedtls_mpi_sint; + typedef uint64_t mbedtls_mpi_uint; + #endif +#endif /* !MBEDTLS_HAVE_INT32 */ + +#if !defined(MBEDTLS_HAVE_INT64) + /* Default to 32-bit compilation */ + #if !defined(MBEDTLS_HAVE_INT32) + #define MBEDTLS_HAVE_INT32 + #endif /* !MBEDTLS_HAVE_INT32 */ + typedef int32_t mbedtls_mpi_sint; + typedef uint32_t mbedtls_mpi_uint; + #if !defined(MBEDTLS_NO_UDBL_DIVISION) + typedef uint64_t mbedtls_t_udbl; + #define MBEDTLS_HAVE_UDBL + #endif /* !MBEDTLS_NO_UDBL_DIVISION */ +#endif /* !MBEDTLS_HAVE_INT64 */ #ifdef __cplusplus extern "C" { @@ -342,7 +377,7 @@ int mbedtls_mpi_write_string( const mbedtls_mpi *X, int radix, #if defined(MBEDTLS_FS_IO) /** - * \brief Read X from an opened file + * \brief Read MPI from a line in an opened file * * \param X Destination MPI * \param radix Input numeric base @@ -351,6 +386,15 @@ int mbedtls_mpi_write_string( const mbedtls_mpi *X, int radix, * \return 0 if successful, MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL if * the file read buffer is too small or a * MBEDTLS_ERR_MPI_XXX error code + * + * \note On success, this function advances the file stream + * to the end of the current line or to EOF. + * + * The function returns 0 on an empty line. + * + * Leading whitespaces are ignored, as is a + * '0x' prefix for radix 16. + * */ int mbedtls_mpi_read_file( mbedtls_mpi *X, int radix, FILE *fin ); @@ -667,8 +711,8 @@ int mbedtls_mpi_gcd( mbedtls_mpi *G, const mbedtls_mpi *A, const mbedtls_mpi *B * * \return 0 if successful, * MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed, - * MBEDTLS_ERR_MPI_BAD_INPUT_DATA if N is negative or nil - MBEDTLS_ERR_MPI_NOT_ACCEPTABLE if A has no inverse mod N + * MBEDTLS_ERR_MPI_BAD_INPUT_DATA if N is <= 1, + MBEDTLS_ERR_MPI_NOT_ACCEPTABLE if A has no inverse mod N. */ int mbedtls_mpi_inv_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *N ); diff --git a/tools/sdk/include/mbedtls/mbedtls/check_config.h b/tools/sdk/include/mbedtls/mbedtls/check_config.h index a95af6ca..fa72454e 100644 --- a/tools/sdk/include/mbedtls/mbedtls/check_config.h +++ b/tools/sdk/include/mbedtls/mbedtls/check_config.h @@ -77,6 +77,11 @@ #error "MBEDTLS_DHM_C defined, but not all prerequisites" #endif +#if defined(MBEDTLS_CMAC_C) && \ + !defined(MBEDTLS_AES_C) && !defined(MBEDTLS_DES_C) +#error "MBEDTLS_CMAC_C defined, but not all prerequisites" +#endif + #if defined(MBEDTLS_ECDH_C) && !defined(MBEDTLS_ECP_C) #error "MBEDTLS_ECDH_C defined, but not all prerequisites" #endif @@ -145,6 +150,38 @@ #error "MBEDTLS_GCM_C defined, but not all prerequisites" #endif +#if defined(MBEDTLS_ECP_RANDOMIZE_JAC_ALT) && !defined(MBEDTLS_ECP_INTERNAL_ALT) +#error "MBEDTLS_ECP_RANDOMIZE_JAC_ALT defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_ECP_ADD_MIXED_ALT) && !defined(MBEDTLS_ECP_INTERNAL_ALT) +#error "MBEDTLS_ECP_ADD_MIXED_ALT defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_ECP_DOUBLE_JAC_ALT) && !defined(MBEDTLS_ECP_INTERNAL_ALT) +#error "MBEDTLS_ECP_DOUBLE_JAC_ALT defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_ECP_NORMALIZE_JAC_MANY_ALT) && !defined(MBEDTLS_ECP_INTERNAL_ALT) +#error "MBEDTLS_ECP_NORMALIZE_JAC_MANY_ALT defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_ECP_NORMALIZE_JAC_ALT) && !defined(MBEDTLS_ECP_INTERNAL_ALT) +#error "MBEDTLS_ECP_NORMALIZE_JAC_ALT defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_ECP_DOUBLE_ADD_MXZ_ALT) && !defined(MBEDTLS_ECP_INTERNAL_ALT) +#error "MBEDTLS_ECP_DOUBLE_ADD_MXZ_ALT defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_ECP_RANDOMIZE_MXZ_ALT) && !defined(MBEDTLS_ECP_INTERNAL_ALT) +#error "MBEDTLS_ECP_RANDOMIZE_MXZ_ALT defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_ECP_NORMALIZE_MXZ_ALT) && !defined(MBEDTLS_ECP_INTERNAL_ALT) +#error "MBEDTLS_ECP_NORMALIZE_MXZ_ALT defined, but not all prerequisites" +#endif + #if defined(MBEDTLS_HAVEGE_C) && !defined(MBEDTLS_TIMING_C) #error "MBEDTLS_HAVEGE_C defined, but not all prerequisites" #endif @@ -256,6 +293,36 @@ #error "MBEDTLS_PLATFORM_EXIT_MACRO and MBEDTLS_PLATFORM_STD_EXIT/MBEDTLS_PLATFORM_EXIT_ALT cannot be defined simultaneously" #endif +#if defined(MBEDTLS_PLATFORM_TIME_ALT) &&\ + ( !defined(MBEDTLS_PLATFORM_C) ||\ + !defined(MBEDTLS_HAVE_TIME) ) +#error "MBEDTLS_PLATFORM_TIME_ALT defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PLATFORM_TIME_MACRO) &&\ + ( !defined(MBEDTLS_PLATFORM_C) ||\ + !defined(MBEDTLS_HAVE_TIME) ) +#error "MBEDTLS_PLATFORM_TIME_MACRO defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PLATFORM_TIME_TYPE_MACRO) &&\ + ( !defined(MBEDTLS_PLATFORM_C) ||\ + !defined(MBEDTLS_HAVE_TIME) ) +#error "MBEDTLS_PLATFORM_TIME_TYPE_MACRO defined, but not all prerequisites" +#endif + +#if defined(MBEDTLS_PLATFORM_TIME_MACRO) &&\ + ( defined(MBEDTLS_PLATFORM_STD_TIME) ||\ + defined(MBEDTLS_PLATFORM_TIME_ALT) ) +#error "MBEDTLS_PLATFORM_TIME_MACRO and MBEDTLS_PLATFORM_STD_TIME/MBEDTLS_PLATFORM_TIME_ALT cannot be defined simultaneously" +#endif + +#if defined(MBEDTLS_PLATFORM_TIME_TYPE_MACRO) &&\ + ( defined(MBEDTLS_PLATFORM_STD_TIME) ||\ + defined(MBEDTLS_PLATFORM_TIME_ALT) ) +#error "MBEDTLS_PLATFORM_TIME_TYPE_MACRO and MBEDTLS_PLATFORM_STD_TIME/MBEDTLS_PLATFORM_TIME_ALT cannot be defined simultaneously" +#endif + #if defined(MBEDTLS_PLATFORM_FPRINTF_ALT) && !defined(MBEDTLS_PLATFORM_C) #error "MBEDTLS_PLATFORM_FPRINTF_ALT defined, but not all prerequisites" #endif @@ -352,6 +419,12 @@ #error "MBEDTLS_PLATFORM_STD_EXIT defined, but not all prerequisites" #endif +#if defined(MBEDTLS_PLATFORM_STD_TIME) &&\ + ( !defined(MBEDTLS_PLATFORM_TIME_ALT) ||\ + !defined(MBEDTLS_HAVE_TIME) ) +#error "MBEDTLS_PLATFORM_STD_TIME defined, but not all prerequisites" +#endif + #if defined(MBEDTLS_PLATFORM_STD_FPRINTF) &&\ !defined(MBEDTLS_PLATFORM_FPRINTF_ALT) #error "MBEDTLS_PLATFORM_STD_FPRINTF defined, but not all prerequisites" @@ -577,6 +650,15 @@ #error "MBEDTLS_X509_CSR_WRITE_C defined, but not all prerequisites" #endif +#if defined(MBEDTLS_HAVE_INT32) && defined(MBEDTLS_HAVE_INT64) +#error "MBEDTLS_HAVE_INT32 and MBEDTLS_HAVE_INT64 cannot be defined simultaneously" +#endif /* MBEDTLS_HAVE_INT32 && MBEDTLS_HAVE_INT64 */ + +#if ( defined(MBEDTLS_HAVE_INT32) || defined(MBEDTLS_HAVE_INT64) ) && \ + defined(MBEDTLS_HAVE_ASM) +#error "MBEDTLS_HAVE_INT32/MBEDTLS_HAVE_INT64 and MBEDTLS_HAVE_ASM cannot be defined simultaneously" +#endif /* (MBEDTLS_HAVE_INT32 || MBEDTLS_HAVE_INT64) && MBEDTLS_HAVE_ASM */ + /* * Avoid warning from -pedantic. This is a convenient place for this * workaround since this is included by every single file before the diff --git a/tools/sdk/include/mbedtls/mbedtls/cipher.h b/tools/sdk/include/mbedtls/mbedtls/cipher.h index c9675544..b12e3884 100644 --- a/tools/sdk/include/mbedtls/mbedtls/cipher.h +++ b/tools/sdk/include/mbedtls/mbedtls/cipher.h @@ -176,6 +176,11 @@ enum { */ typedef struct mbedtls_cipher_base_t mbedtls_cipher_base_t; +/** + * CMAC context (opaque struct). + */ +typedef struct mbedtls_cmac_context_t mbedtls_cmac_context_t; + /** * Cipher information. Allows cipher functions to be called in a generic way. */ @@ -241,6 +246,11 @@ typedef struct { /** Cipher-specific context */ void *cipher_ctx; + +#if defined(MBEDTLS_CMAC_C) + /** CMAC Specific context */ + mbedtls_cmac_context_t *cmac_ctx; +#endif } mbedtls_cipher_context_t; /** diff --git a/tools/sdk/include/mbedtls/mbedtls/cmac.h b/tools/sdk/include/mbedtls/mbedtls/cmac.h new file mode 100644 index 00000000..9a2b96bc --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/cmac.h @@ -0,0 +1,170 @@ +/** + * \file cmac.h + * + * \brief Cipher-based Message Authentication Code (CMAC) Mode for + * Authentication + * + * Copyright (C) 2015-2016, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_CMAC_H +#define MBEDTLS_CMAC_H + +#include "mbedtls/cipher.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define MBEDTLS_AES_BLOCK_SIZE 16 +#define MBEDTLS_DES3_BLOCK_SIZE 8 + +#if defined(MBEDTLS_AES_C) +#define MBEDTLS_CIPHER_BLKSIZE_MAX 16 /* longest used by CMAC is AES */ +#else +#define MBEDTLS_CIPHER_BLKSIZE_MAX 8 /* longest used by CMAC is 3DES */ +#endif + +/** + * CMAC context structure - Contains internal state information only + */ +struct mbedtls_cmac_context_t +{ + /** Internal state of the CMAC algorithm */ + unsigned char state[MBEDTLS_CIPHER_BLKSIZE_MAX]; + + /** Unprocessed data - either data that was not block aligned and is still + * pending to be processed, or the final block */ + unsigned char unprocessed_block[MBEDTLS_CIPHER_BLKSIZE_MAX]; + + /** Length of data pending to be processed */ + size_t unprocessed_len; +}; + +/** + * \brief Set the CMAC key and prepare to authenticate the input + * data. + * Should be called with an initialized cipher context. + * + * \param ctx Cipher context. This should be a cipher context, + * initialized to be one of the following types: + * MBEDTLS_CIPHER_AES_128_ECB, MBEDTLS_CIPHER_AES_192_ECB, + * MBEDTLS_CIPHER_AES_256_ECB or + * MBEDTLS_CIPHER_DES_EDE3_ECB. + * \param key CMAC key + * \param keybits length of the CMAC key in bits + * (must be acceptable by the cipher) + * + * \return 0 if successful, or a cipher specific error code + */ +int mbedtls_cipher_cmac_starts( mbedtls_cipher_context_t *ctx, + const unsigned char *key, size_t keybits ); + +/** + * \brief Generic CMAC process buffer. + * Called between mbedtls_cipher_cmac_starts() or + * mbedtls_cipher_cmac_reset() and + * mbedtls_cipher_cmac_finish(). + * May be called repeatedly. + * + * \param ctx CMAC context + * \param input buffer holding the data + * \param ilen length of the input data + * + * \returns 0 on success, MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter + * verification fails. + */ +int mbedtls_cipher_cmac_update( mbedtls_cipher_context_t *ctx, + const unsigned char *input, size_t ilen ); + +/** + * \brief Output CMAC. + * Called after mbedtls_cipher_cmac_update(). + * Usually followed by mbedtls_cipher_cmac_reset(), then + * mbedtls_cipher_cmac_starts(), or mbedtls_cipher_free(). + * + * \param ctx CMAC context + * \param output Generic CMAC checksum result + * + * \returns 0 on success, MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter + * verification fails. + */ +int mbedtls_cipher_cmac_finish( mbedtls_cipher_context_t *ctx, + unsigned char *output ); + +/** + * \brief Prepare to authenticate a new message with the same key. + * Called after mbedtls_cipher_cmac_finish() and before + * mbedtls_cipher_cmac_update(). + * + * \param ctx CMAC context to be reset + * + * \returns 0 on success, MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter + * verification fails. + */ +int mbedtls_cipher_cmac_reset( mbedtls_cipher_context_t *ctx ); + +/** + * \brief Output = Generic_CMAC( cmac key, input buffer ) + * + * \param cipher_info message digest info + * \param key CMAC key + * \param keylen length of the CMAC key in bits + * \param input buffer holding the data + * \param ilen length of the input data + * \param output Generic CMAC-result + * + * \returns 0 on success, MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter + * verification fails. + */ +int mbedtls_cipher_cmac( const mbedtls_cipher_info_t *cipher_info, + const unsigned char *key, size_t keylen, + const unsigned char *input, size_t ilen, + unsigned char *output ); + +#if defined(MBEDTLS_AES_C) +/** + * \brief AES-CMAC-128-PRF + * Implementation of (AES-CMAC-PRF-128), as defined in RFC 4615 + * + * \param key PRF key + * \param key_len PRF key length in bytes + * \param input buffer holding the input data + * \param in_len length of the input data in bytes + * \param output buffer holding the generated pseudorandom output (16 bytes) + * + * \return 0 if successful + */ +int mbedtls_aes_cmac_prf_128( const unsigned char *key, size_t key_len, + const unsigned char *input, size_t in_len, + unsigned char output[16] ); +#endif /* MBEDTLS_AES_C */ + +#if defined(MBEDTLS_SELF_TEST) && ( defined(MBEDTLS_AES_C) || defined(MBEDTLS_DES_C) ) +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + */ +int mbedtls_cmac_self_test( int verbose ); +#endif /* MBEDTLS_SELF_TEST && ( MBEDTLS_AES_C || MBEDTLS_DES_C ) */ + +#ifdef __cplusplus +} +#endif + +#endif /* MBEDTLS_CMAC_H */ diff --git a/tools/sdk/include/mbedtls/mbedtls/compat-1.3.h b/tools/sdk/include/mbedtls/mbedtls/compat-1.3.h index 27abbd97..bba1d2c2 100644 --- a/tools/sdk/include/mbedtls/mbedtls/compat-1.3.h +++ b/tools/sdk/include/mbedtls/mbedtls/compat-1.3.h @@ -207,9 +207,6 @@ #if defined MBEDTLS_ERROR_C #define POLARSSL_ERROR_C MBEDTLS_ERROR_C #endif -#if defined MBEDTLS_ERROR_STRERROR_BC -#define POLARSSL_ERROR_STRERROR_BC MBEDTLS_ERROR_STRERROR_BC -#endif #if defined MBEDTLS_ERROR_STRERROR_DUMMY #define POLARSSL_ERROR_STRERROR_DUMMY MBEDTLS_ERROR_STRERROR_DUMMY #endif @@ -318,9 +315,6 @@ #if defined MBEDTLS_MEMORY_BUFFER_ALLOC_C #define POLARSSL_MEMORY_BUFFER_ALLOC_C MBEDTLS_MEMORY_BUFFER_ALLOC_C #endif -#if defined MBEDTLS_MEMORY_C -#define POLARSSL_MEMORY_C MBEDTLS_MEMORY_C -#endif #if defined MBEDTLS_MEMORY_DEBUG #define POLARSSL_MEMORY_DEBUG MBEDTLS_MEMORY_DEBUG #endif @@ -345,9 +339,6 @@ #if defined MBEDTLS_PADLOCK_C #define POLARSSL_PADLOCK_C MBEDTLS_PADLOCK_C #endif -#if defined MBEDTLS_PBKDF2_C -#define POLARSSL_PBKDF2_C MBEDTLS_PBKDF2_C -#endif #if defined MBEDTLS_PEM_PARSE_C #define POLARSSL_PEM_PARSE_C MBEDTLS_PEM_PARSE_C #endif @@ -429,9 +420,6 @@ #if defined MBEDTLS_PLATFORM_STD_FREE #define POLARSSL_PLATFORM_STD_FREE MBEDTLS_PLATFORM_STD_FREE #endif -#if defined MBEDTLS_PLATFORM_STD_MALLOC -#define POLARSSL_PLATFORM_STD_MALLOC MBEDTLS_PLATFORM_STD_MALLOC -#endif #if defined MBEDTLS_PLATFORM_STD_MEM_HDR #define POLARSSL_PLATFORM_STD_MEM_HDR MBEDTLS_PLATFORM_STD_MEM_HDR #endif @@ -492,12 +480,6 @@ #if defined MBEDTLS_SHA512_PROCESS_ALT #define POLARSSL_SHA512_PROCESS_ALT MBEDTLS_SHA512_PROCESS_ALT #endif -#if defined MBEDTLS_SSL_AEAD_RANDOM_IV -#define POLARSSL_SSL_AEAD_RANDOM_IV MBEDTLS_SSL_AEAD_RANDOM_IV -#endif -#if defined MBEDTLS_SSL_ALERT_MESSAGES -#define POLARSSL_SSL_ALERT_MESSAGES MBEDTLS_SSL_ALERT_MESSAGES -#endif #if defined MBEDTLS_SSL_ALL_ALERT_MESSAGES #define POLARSSL_SSL_ALL_ALERT_MESSAGES MBEDTLS_SSL_ALL_ALERT_MESSAGES #endif @@ -522,9 +504,6 @@ #if defined MBEDTLS_SSL_DEBUG_ALL #define POLARSSL_SSL_DEBUG_ALL MBEDTLS_SSL_DEBUG_ALL #endif -#if defined MBEDTLS_SSL_DISABLE_RENEGOTIATION -#define POLARSSL_SSL_DISABLE_RENEGOTIATION MBEDTLS_SSL_DISABLE_RENEGOTIATION -#endif #if defined MBEDTLS_SSL_DTLS_ANTI_REPLAY #define POLARSSL_SSL_DTLS_ANTI_REPLAY MBEDTLS_SSL_DTLS_ANTI_REPLAY #endif @@ -752,7 +731,6 @@ #define KU_KEY_ENCIPHERMENT MBEDTLS_X509_KU_KEY_ENCIPHERMENT #define KU_NON_REPUDIATION MBEDTLS_X509_KU_NON_REPUDIATION #define LN_2_DIV_LN_10_SCALE100 MBEDTLS_LN_2_DIV_LN_10_SCALE100 -#define MD_CONTEXT_T_INIT MBEDTLS_MD_CONTEXT_T_INIT #define MEMORY_VERIFY_ALLOC MBEDTLS_MEMORY_VERIFY_ALLOC #define MEMORY_VERIFY_ALWAYS MBEDTLS_MEMORY_VERIFY_ALWAYS #define MEMORY_VERIFY_FREE MBEDTLS_MEMORY_VERIFY_FREE @@ -1017,19 +995,13 @@ #define POLARSSL_CONFIG_H MBEDTLS_CONFIG_H #define POLARSSL_CTR_DRBG_H MBEDTLS_CTR_DRBG_H #define POLARSSL_DEBUG_H MBEDTLS_DEBUG_H -#define POLARSSL_DEBUG_LOG_FULL MBEDTLS_DEBUG_LOG_FULL -#define POLARSSL_DEBUG_LOG_RAW MBEDTLS_DEBUG_LOG_RAW #define POLARSSL_DECRYPT MBEDTLS_DECRYPT #define POLARSSL_DES_H MBEDTLS_DES_H #define POLARSSL_DHM_H MBEDTLS_DHM_H -#define POLARSSL_DHM_RFC2409_MODP_1024_G MBEDTLS_DHM_RFC2409_MODP_1024_G -#define POLARSSL_DHM_RFC2409_MODP_1024_P MBEDTLS_DHM_RFC2409_MODP_1024_P #define POLARSSL_DHM_RFC3526_MODP_2048_G MBEDTLS_DHM_RFC3526_MODP_2048_G #define POLARSSL_DHM_RFC3526_MODP_2048_P MBEDTLS_DHM_RFC3526_MODP_2048_P #define POLARSSL_DHM_RFC3526_MODP_3072_G MBEDTLS_DHM_RFC3526_MODP_3072_G #define POLARSSL_DHM_RFC3526_MODP_3072_P MBEDTLS_DHM_RFC3526_MODP_3072_P -#define POLARSSL_DHM_RFC5114_MODP_1024_G MBEDTLS_DHM_RFC5114_MODP_1024_G -#define POLARSSL_DHM_RFC5114_MODP_1024_P MBEDTLS_DHM_RFC5114_MODP_1024_P #define POLARSSL_DHM_RFC5114_MODP_2048_G MBEDTLS_DHM_RFC5114_MODP_2048_G #define POLARSSL_DHM_RFC5114_MODP_2048_P MBEDTLS_DHM_RFC5114_MODP_2048_P #define POLARSSL_ECDH_H MBEDTLS_ECDH_H @@ -1117,9 +1089,6 @@ #define POLARSSL_ERR_HMAC_DRBG_FILE_IO_ERROR MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR #define POLARSSL_ERR_HMAC_DRBG_INPUT_TOO_BIG MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG #define POLARSSL_ERR_HMAC_DRBG_REQUEST_TOO_BIG MBEDTLS_ERR_HMAC_DRBG_REQUEST_TOO_BIG -#define POLARSSL_ERR_MD2_FILE_IO_ERROR MBEDTLS_ERR_MD2_FILE_IO_ERROR -#define POLARSSL_ERR_MD4_FILE_IO_ERROR MBEDTLS_ERR_MD4_FILE_IO_ERROR -#define POLARSSL_ERR_MD5_FILE_IO_ERROR MBEDTLS_ERR_MD5_FILE_IO_ERROR #define POLARSSL_ERR_MD_ALLOC_FAILED MBEDTLS_ERR_MD_ALLOC_FAILED #define POLARSSL_ERR_MD_BAD_INPUT_DATA MBEDTLS_ERR_MD_BAD_INPUT_DATA #define POLARSSL_ERR_MD_FEATURE_UNAVAILABLE MBEDTLS_ERR_MD_FEATURE_UNAVAILABLE @@ -1147,7 +1116,6 @@ #define POLARSSL_ERR_OID_BUF_TOO_SMALL MBEDTLS_ERR_OID_BUF_TOO_SMALL #define POLARSSL_ERR_OID_NOT_FOUND MBEDTLS_ERR_OID_NOT_FOUND #define POLARSSL_ERR_PADLOCK_DATA_MISALIGNED MBEDTLS_ERR_PADLOCK_DATA_MISALIGNED -#define POLARSSL_ERR_PBKDF2_BAD_INPUT_DATA MBEDTLS_ERR_PBKDF2_BAD_INPUT_DATA #define POLARSSL_ERR_PEM_BAD_INPUT_DATA MBEDTLS_ERR_PEM_BAD_INPUT_DATA #define POLARSSL_ERR_PEM_FEATURE_UNAVAILABLE MBEDTLS_ERR_PEM_FEATURE_UNAVAILABLE #define POLARSSL_ERR_PEM_INVALID_DATA MBEDTLS_ERR_PEM_INVALID_DATA @@ -1179,7 +1147,6 @@ #define POLARSSL_ERR_PK_TYPE_MISMATCH MBEDTLS_ERR_PK_TYPE_MISMATCH #define POLARSSL_ERR_PK_UNKNOWN_NAMED_CURVE MBEDTLS_ERR_PK_UNKNOWN_NAMED_CURVE #define POLARSSL_ERR_PK_UNKNOWN_PK_ALG MBEDTLS_ERR_PK_UNKNOWN_PK_ALG -#define POLARSSL_ERR_RIPEMD160_FILE_IO_ERROR MBEDTLS_ERR_RIPEMD160_FILE_IO_ERROR #define POLARSSL_ERR_RSA_BAD_INPUT_DATA MBEDTLS_ERR_RSA_BAD_INPUT_DATA #define POLARSSL_ERR_RSA_INVALID_PADDING MBEDTLS_ERR_RSA_INVALID_PADDING #define POLARSSL_ERR_RSA_KEY_CHECK_FAILED MBEDTLS_ERR_RSA_KEY_CHECK_FAILED @@ -1189,9 +1156,6 @@ #define POLARSSL_ERR_RSA_PUBLIC_FAILED MBEDTLS_ERR_RSA_PUBLIC_FAILED #define POLARSSL_ERR_RSA_RNG_FAILED MBEDTLS_ERR_RSA_RNG_FAILED #define POLARSSL_ERR_RSA_VERIFY_FAILED MBEDTLS_ERR_RSA_VERIFY_FAILED -#define POLARSSL_ERR_SHA1_FILE_IO_ERROR MBEDTLS_ERR_SHA1_FILE_IO_ERROR -#define POLARSSL_ERR_SHA256_FILE_IO_ERROR MBEDTLS_ERR_SHA256_FILE_IO_ERROR -#define POLARSSL_ERR_SHA512_FILE_IO_ERROR MBEDTLS_ERR_SHA512_FILE_IO_ERROR #define POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE #define POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST #define POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY @@ -1305,7 +1269,6 @@ #define POLARSSL_MD_SHA512 MBEDTLS_MD_SHA512 #define POLARSSL_MD_WRAP_H MBEDTLS_MD_WRAP_H #define POLARSSL_MEMORY_BUFFER_ALLOC_H MBEDTLS_MEMORY_BUFFER_ALLOC_H -#define POLARSSL_MEMORY_H MBEDTLS_MEMORY_H #define POLARSSL_MODE_CBC MBEDTLS_MODE_CBC #define POLARSSL_MODE_CCM MBEDTLS_MODE_CCM #define POLARSSL_MODE_CFB MBEDTLS_MODE_CFB @@ -1319,7 +1282,7 @@ #define POLARSSL_MPI_MAX_BITS_SCALE100 MBEDTLS_MPI_MAX_BITS_SCALE100 #define POLARSSL_MPI_MAX_LIMBS MBEDTLS_MPI_MAX_LIMBS #define POLARSSL_MPI_RW_BUFFER_SIZE MBEDTLS_MPI_RW_BUFFER_SIZE -#define POLARSSL_NET_H MBEDTLS_NET_H +#define POLARSSL_NET_H MBEDTLS_NET_SOCKETS_H #define POLARSSL_NET_LISTEN_BACKLOG MBEDTLS_NET_LISTEN_BACKLOG #define POLARSSL_OID_H MBEDTLS_OID_H #define POLARSSL_OPERATION_NONE MBEDTLS_OPERATION_NONE @@ -1329,7 +1292,6 @@ #define POLARSSL_PADDING_ZEROS MBEDTLS_PADDING_ZEROS #define POLARSSL_PADDING_ZEROS_AND_LEN MBEDTLS_PADDING_ZEROS_AND_LEN #define POLARSSL_PADLOCK_H MBEDTLS_PADLOCK_H -#define POLARSSL_PBKDF2_H MBEDTLS_PBKDF2_H #define POLARSSL_PEM_H MBEDTLS_PEM_H #define POLARSSL_PKCS11_H MBEDTLS_PKCS11_H #define POLARSSL_PKCS12_H MBEDTLS_PKCS12_H @@ -1712,7 +1674,6 @@ #define TLS_RSA_WITH_NULL_SHA256 MBEDTLS_TLS_RSA_WITH_NULL_SHA256 #define TLS_RSA_WITH_RC4_128_MD5 MBEDTLS_TLS_RSA_WITH_RC4_128_MD5 #define TLS_RSA_WITH_RC4_128_SHA MBEDTLS_TLS_RSA_WITH_RC4_128_SHA -#define UL64 MBEDTLS_UL64 #define X509_CRT_VERSION_1 MBEDTLS_X509_CRT_VERSION_1 #define X509_CRT_VERSION_2 MBEDTLS_X509_CRT_VERSION_2 #define X509_CRT_VERSION_3 MBEDTLS_X509_CRT_VERSION_3 @@ -1736,7 +1697,6 @@ #define _ssl_key_cert mbedtls_ssl_key_cert #define _ssl_premaster_secret mbedtls_ssl_premaster_secret #define _ssl_session mbedtls_ssl_session -#define _ssl_ticket_keys mbedtls_ssl_ticket_keys #define _ssl_transform mbedtls_ssl_transform #define _x509_crl mbedtls_x509_crl #define _x509_crl_entry mbedtls_x509_crl_entry @@ -1836,7 +1796,6 @@ #define cipher_definitions mbedtls_cipher_definitions #define cipher_finish mbedtls_cipher_finish #define cipher_free mbedtls_cipher_free -#define cipher_free_ctx mbedtls_cipher_free_ctx #define cipher_get_block_size mbedtls_cipher_get_block_size #define cipher_get_cipher_mode mbedtls_cipher_get_cipher_mode #define cipher_get_iv_size mbedtls_cipher_get_iv_size @@ -1855,7 +1814,6 @@ #define cipher_mode_t mbedtls_cipher_mode_t #define cipher_padding_t mbedtls_cipher_padding_t #define cipher_reset mbedtls_cipher_reset -#define cipher_self_test mbedtls_cipher_self_test #define cipher_set_iv mbedtls_cipher_set_iv #define cipher_set_padding_mode mbedtls_cipher_set_padding_mode #define cipher_setkey mbedtls_cipher_setkey @@ -1866,7 +1824,6 @@ #define ctr_drbg_context mbedtls_ctr_drbg_context #define ctr_drbg_free mbedtls_ctr_drbg_free #define ctr_drbg_init mbedtls_ctr_drbg_init -#define ctr_drbg_init_entropy_len mbedtls_ctr_drbg_init_entropy_len #define ctr_drbg_random mbedtls_ctr_drbg_random #define ctr_drbg_random_with_add mbedtls_ctr_drbg_random_with_add #define ctr_drbg_reseed mbedtls_ctr_drbg_reseed @@ -1877,14 +1834,12 @@ #define ctr_drbg_update mbedtls_ctr_drbg_update #define ctr_drbg_update_seed_file mbedtls_ctr_drbg_update_seed_file #define ctr_drbg_write_seed_file mbedtls_ctr_drbg_write_seed_file -#define debug_fmt mbedtls_debug_fmt #define debug_print_buf mbedtls_debug_print_buf #define debug_print_crt mbedtls_debug_print_crt #define debug_print_ecp mbedtls_debug_print_ecp #define debug_print_mpi mbedtls_debug_print_mpi #define debug_print_msg mbedtls_debug_print_msg #define debug_print_ret mbedtls_debug_print_ret -#define debug_set_log_mode mbedtls_debug_set_log_mode #define debug_set_threshold mbedtls_debug_set_threshold #define des3_context mbedtls_des3_context #define des3_crypt_cbc mbedtls_des3_crypt_cbc @@ -1928,7 +1883,6 @@ #define ecdh_make_public mbedtls_ecdh_make_public #define ecdh_read_params mbedtls_ecdh_read_params #define ecdh_read_public mbedtls_ecdh_read_public -#define ecdh_self_test mbedtls_ecdh_self_test #define ecdh_side mbedtls_ecdh_side #define ecdsa_context mbedtls_ecdsa_context #define ecdsa_free mbedtls_ecdsa_free @@ -1937,7 +1891,6 @@ #define ecdsa_info mbedtls_ecdsa_info #define ecdsa_init mbedtls_ecdsa_init #define ecdsa_read_signature mbedtls_ecdsa_read_signature -#define ecdsa_self_test mbedtls_ecdsa_self_test #define ecdsa_sign mbedtls_ecdsa_sign #define ecdsa_sign_det mbedtls_ecdsa_sign_det #define ecdsa_verify mbedtls_ecdsa_verify @@ -1945,7 +1898,6 @@ #define ecdsa_write_signature_det mbedtls_ecdsa_write_signature_det #define eckey_info mbedtls_eckey_info #define eckeydh_info mbedtls_eckeydh_info -#define ecp_add mbedtls_ecp_add #define ecp_check_privkey mbedtls_ecp_check_privkey #define ecp_check_pub_priv mbedtls_ecp_check_pub_priv #define ecp_check_pubkey mbedtls_ecp_check_pubkey @@ -1962,7 +1914,6 @@ #define ecp_group_free mbedtls_ecp_group_free #define ecp_group_id mbedtls_ecp_group_id #define ecp_group_init mbedtls_ecp_group_init -#define ecp_group_read_string mbedtls_ecp_group_read_string #define ecp_grp_id_list mbedtls_ecp_grp_id_list #define ecp_is_zero mbedtls_ecp_is_zero #define ecp_keypair mbedtls_ecp_keypair @@ -1977,7 +1928,6 @@ #define ecp_point_write_binary mbedtls_ecp_point_write_binary #define ecp_self_test mbedtls_ecp_self_test #define ecp_set_zero mbedtls_ecp_set_zero -#define ecp_sub mbedtls_ecp_sub #define ecp_tls_read_group mbedtls_ecp_tls_read_group #define ecp_tls_read_point mbedtls_ecp_tls_read_point #define ecp_tls_write_group mbedtls_ecp_tls_write_group @@ -2015,7 +1965,6 @@ #define hmac_drbg_context mbedtls_hmac_drbg_context #define hmac_drbg_free mbedtls_hmac_drbg_free #define hmac_drbg_init mbedtls_hmac_drbg_init -#define hmac_drbg_init_buf mbedtls_hmac_drbg_init_buf #define hmac_drbg_random mbedtls_hmac_drbg_random #define hmac_drbg_random_with_add mbedtls_hmac_drbg_random_with_add #define hmac_drbg_reseed mbedtls_hmac_drbg_reseed @@ -2031,14 +1980,8 @@ #define md mbedtls_md #define md2 mbedtls_md2 #define md2_context mbedtls_md2_context -#define md2_file mbedtls_md2_file #define md2_finish mbedtls_md2_finish #define md2_free mbedtls_md2_free -#define md2_hmac mbedtls_md2_hmac -#define md2_hmac_finish mbedtls_md2_hmac_finish -#define md2_hmac_reset mbedtls_md2_hmac_reset -#define md2_hmac_starts mbedtls_md2_hmac_starts -#define md2_hmac_update mbedtls_md2_hmac_update #define md2_info mbedtls_md2_info #define md2_init mbedtls_md2_init #define md2_process mbedtls_md2_process @@ -2047,14 +1990,8 @@ #define md2_update mbedtls_md2_update #define md4 mbedtls_md4 #define md4_context mbedtls_md4_context -#define md4_file mbedtls_md4_file #define md4_finish mbedtls_md4_finish #define md4_free mbedtls_md4_free -#define md4_hmac mbedtls_md4_hmac -#define md4_hmac_finish mbedtls_md4_hmac_finish -#define md4_hmac_reset mbedtls_md4_hmac_reset -#define md4_hmac_starts mbedtls_md4_hmac_starts -#define md4_hmac_update mbedtls_md4_hmac_update #define md4_info mbedtls_md4_info #define md4_init mbedtls_md4_init #define md4_process mbedtls_md4_process @@ -2063,14 +2000,8 @@ #define md4_update mbedtls_md4_update #define md5 mbedtls_md5 #define md5_context mbedtls_md5_context -#define md5_file mbedtls_md5_file #define md5_finish mbedtls_md5_finish #define md5_free mbedtls_md5_free -#define md5_hmac mbedtls_md5_hmac -#define md5_hmac_finish mbedtls_md5_hmac_finish -#define md5_hmac_reset mbedtls_md5_hmac_reset -#define md5_hmac_starts mbedtls_md5_hmac_starts -#define md5_hmac_update mbedtls_md5_hmac_update #define md5_info mbedtls_md5_info #define md5_init mbedtls_md5_init #define md5_process mbedtls_md5_process @@ -2081,7 +2012,6 @@ #define md_file mbedtls_md_file #define md_finish mbedtls_md_finish #define md_free mbedtls_md_free -#define md_free_ctx mbedtls_md_free_ctx #define md_get_name mbedtls_md_get_name #define md_get_size mbedtls_md_get_size #define md_get_type mbedtls_md_get_type @@ -2109,7 +2039,6 @@ #define memory_buffer_alloc_status mbedtls_memory_buffer_alloc_status #define memory_buffer_alloc_verify mbedtls_memory_buffer_alloc_verify #define memory_buffer_set_verify mbedtls_memory_buffer_set_verify -#define memory_set_own mbedtls_memory_set_own #define mpi mbedtls_mpi #define mpi_add_abs mbedtls_mpi_add_abs #define mpi_add_int mbedtls_mpi_add_int @@ -2185,8 +2114,6 @@ #define padlock_supports mbedtls_padlock_has_support #define padlock_xcryptcbc mbedtls_padlock_xcryptcbc #define padlock_xcryptecb mbedtls_padlock_xcryptecb -#define pbkdf2_hmac mbedtls_pbkdf2_hmac -#define pbkdf2_self_test mbedtls_pbkdf2_self_test #define pem_context mbedtls_pem_context #define pem_free mbedtls_pem_free #define pem_init mbedtls_pem_init @@ -2246,13 +2173,11 @@ #define platform_entropy_poll mbedtls_platform_entropy_poll #define platform_set_exit mbedtls_platform_set_exit #define platform_set_fprintf mbedtls_platform_set_fprintf -#define platform_set_malloc_free mbedtls_platform_set_malloc_free #define platform_set_printf mbedtls_platform_set_printf #define platform_set_snprintf mbedtls_platform_set_snprintf #define polarssl_exit mbedtls_exit #define polarssl_fprintf mbedtls_fprintf #define polarssl_free mbedtls_free -#define polarssl_malloc mbedtls_malloc #define polarssl_mutex_free mbedtls_mutex_free #define polarssl_mutex_init mbedtls_mutex_init #define polarssl_mutex_lock mbedtls_mutex_lock @@ -2262,14 +2187,8 @@ #define polarssl_strerror mbedtls_strerror #define ripemd160 mbedtls_ripemd160 #define ripemd160_context mbedtls_ripemd160_context -#define ripemd160_file mbedtls_ripemd160_file #define ripemd160_finish mbedtls_ripemd160_finish #define ripemd160_free mbedtls_ripemd160_free -#define ripemd160_hmac mbedtls_ripemd160_hmac -#define ripemd160_hmac_finish mbedtls_ripemd160_hmac_finish -#define ripemd160_hmac_reset mbedtls_ripemd160_hmac_reset -#define ripemd160_hmac_starts mbedtls_ripemd160_hmac_starts -#define ripemd160_hmac_update mbedtls_ripemd160_hmac_update #define ripemd160_info mbedtls_ripemd160_info #define ripemd160_init mbedtls_ripemd160_init #define ripemd160_process mbedtls_ripemd160_process @@ -2283,12 +2202,10 @@ #define rsa_check_pubkey mbedtls_rsa_check_pubkey #define rsa_context mbedtls_rsa_context #define rsa_copy mbedtls_rsa_copy -#define rsa_decrypt_func mbedtls_rsa_decrypt_func #define rsa_free mbedtls_rsa_free #define rsa_gen_key mbedtls_rsa_gen_key #define rsa_info mbedtls_rsa_info #define rsa_init mbedtls_rsa_init -#define rsa_key_len_func mbedtls_rsa_key_len_func #define rsa_pkcs1_decrypt mbedtls_rsa_pkcs1_decrypt #define rsa_pkcs1_encrypt mbedtls_rsa_pkcs1_encrypt #define rsa_pkcs1_sign mbedtls_rsa_pkcs1_sign @@ -2306,19 +2223,12 @@ #define rsa_rsassa_pss_verify_ext mbedtls_rsa_rsassa_pss_verify_ext #define rsa_self_test mbedtls_rsa_self_test #define rsa_set_padding mbedtls_rsa_set_padding -#define rsa_sign_func mbedtls_rsa_sign_func #define safer_memcmp mbedtls_ssl_safer_memcmp #define set_alarm mbedtls_set_alarm #define sha1 mbedtls_sha1 #define sha1_context mbedtls_sha1_context -#define sha1_file mbedtls_sha1_file #define sha1_finish mbedtls_sha1_finish #define sha1_free mbedtls_sha1_free -#define sha1_hmac mbedtls_sha1_hmac -#define sha1_hmac_finish mbedtls_sha1_hmac_finish -#define sha1_hmac_reset mbedtls_sha1_hmac_reset -#define sha1_hmac_starts mbedtls_sha1_hmac_starts -#define sha1_hmac_update mbedtls_sha1_hmac_update #define sha1_info mbedtls_sha1_info #define sha1_init mbedtls_sha1_init #define sha1_process mbedtls_sha1_process @@ -2328,14 +2238,8 @@ #define sha224_info mbedtls_sha224_info #define sha256 mbedtls_sha256 #define sha256_context mbedtls_sha256_context -#define sha256_file mbedtls_sha256_file #define sha256_finish mbedtls_sha256_finish #define sha256_free mbedtls_sha256_free -#define sha256_hmac mbedtls_sha256_hmac -#define sha256_hmac_finish mbedtls_sha256_hmac_finish -#define sha256_hmac_reset mbedtls_sha256_hmac_reset -#define sha256_hmac_starts mbedtls_sha256_hmac_starts -#define sha256_hmac_update mbedtls_sha256_hmac_update #define sha256_info mbedtls_sha256_info #define sha256_init mbedtls_sha256_init #define sha256_process mbedtls_sha256_process @@ -2345,14 +2249,8 @@ #define sha384_info mbedtls_sha384_info #define sha512 mbedtls_sha512 #define sha512_context mbedtls_sha512_context -#define sha512_file mbedtls_sha512_file #define sha512_finish mbedtls_sha512_finish #define sha512_free mbedtls_sha512_free -#define sha512_hmac mbedtls_sha512_hmac -#define sha512_hmac_finish mbedtls_sha512_hmac_finish -#define sha512_hmac_reset mbedtls_sha512_hmac_reset -#define sha512_hmac_starts mbedtls_sha512_hmac_starts -#define sha512_hmac_update mbedtls_sha512_hmac_update #define sha512_info mbedtls_sha512_info #define sha512_init mbedtls_sha512_init #define sha512_process mbedtls_sha512_process @@ -2385,7 +2283,6 @@ #define ssl_cookie_setup mbedtls_ssl_cookie_setup #define ssl_cookie_write mbedtls_ssl_cookie_write #define ssl_cookie_write_t mbedtls_ssl_cookie_write_t -#define ssl_curve_is_acceptable mbedtls_ssl_curve_is_acceptable #define ssl_derive_keys mbedtls_ssl_derive_keys #define ssl_dtls_replay_check mbedtls_ssl_dtls_replay_check #define ssl_dtls_replay_update mbedtls_ssl_dtls_replay_update @@ -2453,7 +2350,6 @@ #define ssl_set_arc4_support mbedtls_ssl_conf_arc4_support #define ssl_set_authmode mbedtls_ssl_conf_authmode #define ssl_set_bio mbedtls_ssl_set_bio -#define ssl_set_bio mbedtls_ssl_set_bio_timeout #define ssl_set_ca_chain mbedtls_ssl_conf_ca_chain #define ssl_set_cbc_record_splitting mbedtls_ssl_conf_cbc_record_splitting #define ssl_set_ciphersuites mbedtls_ssl_conf_ciphersuites @@ -2476,8 +2372,6 @@ #define ssl_set_max_version mbedtls_ssl_conf_max_version #define ssl_set_min_version mbedtls_ssl_conf_min_version #define ssl_set_own_cert mbedtls_ssl_conf_own_cert -#define ssl_set_own_cert_alt mbedtls_ssl_set_own_cert_alt -#define ssl_set_own_cert_rsa mbedtls_ssl_set_own_cert_rsa #define ssl_set_psk mbedtls_ssl_conf_psk #define ssl_set_psk_cb mbedtls_ssl_conf_psk_cb #define ssl_set_renegotiation mbedtls_ssl_conf_renegotiation @@ -2486,7 +2380,6 @@ #define ssl_set_rng mbedtls_ssl_conf_rng #define ssl_set_session mbedtls_ssl_set_session #define ssl_set_session_cache mbedtls_ssl_conf_session_cache -#define ssl_set_session_ticket_lifetime mbedtls_ssl_conf_session_ticket_lifetime #define ssl_set_session_tickets mbedtls_ssl_conf_session_tickets #define ssl_set_sni mbedtls_ssl_conf_sni #define ssl_set_transport mbedtls_ssl_conf_transport @@ -2494,7 +2387,6 @@ #define ssl_set_verify mbedtls_ssl_conf_verify #define ssl_sig_from_pk mbedtls_ssl_sig_from_pk #define ssl_states mbedtls_ssl_states -#define ssl_ticket_keys mbedtls_ssl_ticket_keys #define ssl_transform mbedtls_ssl_transform #define ssl_transform_free mbedtls_ssl_transform_free #define ssl_write mbedtls_ssl_write @@ -2523,7 +2415,6 @@ #define test_cli_key mbedtls_test_cli_key #define test_cli_key_ec mbedtls_test_cli_key_ec #define test_cli_key_rsa mbedtls_test_cli_key_rsa -#define test_dhm_params mbedtls_test_dhm_params #define test_srv_crt mbedtls_test_srv_crt #define test_srv_crt_ec mbedtls_test_srv_crt_ec #define test_srv_crt_rsa mbedtls_test_srv_crt_rsa @@ -2578,8 +2469,6 @@ #define x509_get_time mbedtls_x509_get_time #define x509_key_size_helper mbedtls_x509_key_size_helper #define x509_name mbedtls_x509_name -#define x509_oid_get_description mbedtls_x509_oid_get_description -#define x509_oid_get_numeric_string mbedtls_x509_oid_get_numeric_string #define x509_self_test mbedtls_x509_self_test #define x509_sequence mbedtls_x509_sequence #define x509_serial_gets mbedtls_x509_serial_gets diff --git a/tools/sdk/include/mbedtls/mbedtls/config.h b/tools/sdk/include/mbedtls/mbedtls/config.h index 3b7c85b3..47c71964 100644 --- a/tools/sdk/include/mbedtls/mbedtls/config.h +++ b/tools/sdk/include/mbedtls/mbedtls/config.h @@ -55,6 +55,34 @@ */ #define MBEDTLS_HAVE_ASM +/** + * \def MBEDTLS_NO_UDBL_DIVISION + * + * The platform lacks support for double-width integer division (64-bit + * division on a 32-bit platform, 128-bit division on a 64-bit platform). + * + * Used in: + * include/mbedtls/bignum.h + * library/bignum.c + * + * The bignum code uses double-width division to speed up some operations. + * Double-width division is often implemented in software that needs to + * be linked with the program. The presence of a double-width integer + * type is usually detected automatically through preprocessor macros, + * but the automatic detection cannot know whether the code needs to + * and can be linked with an implementation of division for that type. + * By default division is assumed to be usable if the type is present. + * Uncomment this option to prevent the use of double-width division. + * + * Note that division for the native integer type is always required. + * Furthermore, a 64-bit type is always required even on a 32-bit + * platform, but it need not support multiplication or division. In some + * cases it is also desirable to disable some double-width operations. For + * example, if double-width division is implemented in software, disabling + * it can reduce code size in some embedded targets. + */ +//#define MBEDTLS_NO_UDBL_DIVISION + /** * \def MBEDTLS_HAVE_SSE2 * @@ -71,6 +99,10 @@ * The time does not need to be correct, only time differences are used, * by contrast with MBEDTLS_HAVE_TIME_DATE * + * Defining MBEDTLS_HAVE_TIME allows you to specify MBEDTLS_PLATFORM_TIME_ALT, + * MBEDTLS_PLATFORM_TIME_MACRO, MBEDTLS_PLATFORM_TIME_TYPE_MACRO and + * MBEDTLS_PLATFORM_STD_TIME. + * * Comment if your system does not support time functions */ #define MBEDTLS_HAVE_TIME @@ -148,6 +180,8 @@ * \warning MBEDTLS_PLATFORM_XXX_ALT cannot be defined at the same time as * MBEDTLS_PLATFORM_XXX_MACRO! * + * Requires: MBEDTLS_PLATFORM_TIME_ALT requires MBEDTLS_HAVE_TIME + * * Uncomment a macro to enable alternate implementation of specific base * platform function */ @@ -157,6 +191,7 @@ //#define MBEDTLS_PLATFORM_PRINTF_ALT //#define MBEDTLS_PLATFORM_SNPRINTF_ALT //#define MBEDTLS_PLATFORM_NV_SEED_ALT +//#define MBEDTLS_PLATFORM_SETUP_TEARDOWN_ALT /** * \def MBEDTLS_DEPRECATED_WARNING @@ -212,16 +247,16 @@ * \def MBEDTLS_AES_ALT * * MBEDTLS__MODULE_NAME__ALT: Uncomment a macro to let mbed TLS use your - * alternate core implementation of a symmetric crypto or hash module (e.g. - * platform specific assembly optimized implementations). Keep in mind that - * the function prototypes should remain the same. + * alternate core implementation of a symmetric crypto, an arithmetic or hash + * module (e.g. platform specific assembly optimized implementations). Keep + * in mind that the function prototypes should remain the same. * * This replaces the whole module. If you only want to replace one of the * functions, use one of the MBEDTLS__FUNCTION_NAME__ALT flags. * * Example: In case you uncomment MBEDTLS_AES_ALT, mbed TLS will no longer - * provide the "struct mbedtls_aes_context" definition and omit the base function - * declarations and implementations. "aes_alt.h" will be included from + * provide the "struct mbedtls_aes_context" definition and omit the base + * function declarations and implementations. "aes_alt.h" will be included from * "aes.h" to include the new function definitions. * * Uncomment a macro to enable alternate implementation of the corresponding @@ -240,6 +275,16 @@ //#define MBEDTLS_SHA1_ALT //#define MBEDTLS_SHA256_ALT //#define MBEDTLS_SHA512_ALT +/* + * When replacing the elliptic curve module, pleace consider, that it is + * implemented with two .c files: + * - ecp.c + * - ecp_curves.c + * You can replace them very much like all the other MBEDTLS__MODULE_NAME__ALT + * macros as described above. The only difference is that you have to make sure + * that you provide functionality for both .c files. + */ +//#define MBEDTLS_ECP_ALT /** * \def MBEDTLS_MD2_PROCESS_ALT @@ -257,9 +302,15 @@ * of mbedtls_sha1_context, so your implementation of mbedtls_sha1_process must be compatible * with this definition. * - * Note: if you use the AES_xxx_ALT macros, then is is recommended to also set - * MBEDTLS_AES_ROM_TABLES in order to help the linker garbage-collect the AES - * tables. + * \note Because of a signature change, the core AES encryption and decryption routines are + * currently named mbedtls_aes_internal_encrypt and mbedtls_aes_internal_decrypt, + * respectively. When setting up alternative implementations, these functions should + * be overriden, but the wrapper functions mbedtls_aes_decrypt and mbedtls_aes_encrypt + * must stay untouched. + * + * \note If you use the AES_xxx_ALT macros, then is is recommended to also set + * MBEDTLS_AES_ROM_TABLES in order to help the linker garbage-collect the AES + * tables. * * Uncomment a macro to enable alternate implementation of the corresponding * function. @@ -279,6 +330,59 @@ //#define MBEDTLS_AES_ENCRYPT_ALT //#define MBEDTLS_AES_DECRYPT_ALT +/** + * \def MBEDTLS_ECP_INTERNAL_ALT + * + * Expose a part of the internal interface of the Elliptic Curve Point module. + * + * MBEDTLS_ECP__FUNCTION_NAME__ALT: Uncomment a macro to let mbed TLS use your + * alternative core implementation of elliptic curve arithmetic. Keep in mind + * that function prototypes should remain the same. + * + * This partially replaces one function. The header file from mbed TLS is still + * used, in contrast to the MBEDTLS_ECP_ALT flag. The original implementation + * is still present and it is used for group structures not supported by the + * alternative. + * + * Any of these options become available by defining MBEDTLS_ECP_INTERNAL_ALT + * and implementing the following functions: + * unsigned char mbedtls_internal_ecp_grp_capable( + * const mbedtls_ecp_group *grp ) + * int mbedtls_internal_ecp_init( const mbedtls_ecp_group *grp ) + * void mbedtls_internal_ecp_deinit( const mbedtls_ecp_group *grp ) + * The mbedtls_internal_ecp_grp_capable function should return 1 if the + * replacement functions implement arithmetic for the given group and 0 + * otherwise. + * The functions mbedtls_internal_ecp_init and mbedtls_internal_ecp_deinit are + * called before and after each point operation and provide an opportunity to + * implement optimized set up and tear down instructions. + * + * Example: In case you uncomment MBEDTLS_ECP_INTERNAL_ALT and + * MBEDTLS_ECP_DOUBLE_JAC_ALT, mbed TLS will still provide the ecp_double_jac + * function, but will use your mbedtls_internal_ecp_double_jac if the group is + * supported (your mbedtls_internal_ecp_grp_capable function returns 1 when + * receives it as an argument). If the group is not supported then the original + * implementation is used. The other functions and the definition of + * mbedtls_ecp_group and mbedtls_ecp_point will not change, so your + * implementation of mbedtls_internal_ecp_double_jac and + * mbedtls_internal_ecp_grp_capable must be compatible with this definition. + * + * Uncomment a macro to enable alternate implementation of the corresponding + * function. + */ +/* Required for all the functions in this section */ +//#define MBEDTLS_ECP_INTERNAL_ALT +/* Support for Weierstrass curves with Jacobi representation */ +//#define MBEDTLS_ECP_RANDOMIZE_JAC_ALT +//#define MBEDTLS_ECP_ADD_MIXED_ALT +//#define MBEDTLS_ECP_DOUBLE_JAC_ALT +//#define MBEDTLS_ECP_NORMALIZE_JAC_MANY_ALT +//#define MBEDTLS_ECP_NORMALIZE_JAC_ALT +/* Support for curves with Montgomery arithmetic */ +//#define MBEDTLS_ECP_DOUBLE_ADD_MXZ_ALT +//#define MBEDTLS_ECP_RANDOMIZE_MXZ_ALT +//#define MBEDTLS_ECP_NORMALIZE_MXZ_ALT + /** * \def MBEDTLS_TEST_NULL_ENTROPY * @@ -934,18 +1038,6 @@ */ //#define MBEDTLS_SHA256_SMALLER -/** - * \def MBEDTLS_SSL_AEAD_RANDOM_IV - * - * Generate a random IV rather than using the record sequence number as a - * nonce for ciphersuites using and AEAD algorithm (GCM or CCM). - * - * Using the sequence number is generally recommended. - * - * Uncomment this macro to always use random IVs with AEAD ciphersuites. - */ -//#define MBEDTLS_SSL_AEAD_RANDOM_IV - /** * \def MBEDTLS_SSL_ALL_ALERT_MESSAGES * @@ -1531,7 +1623,7 @@ * library/pkwrite.c * library/x509_create.c * library/x509write_crt.c - * library/mbedtls_x509write_csr.c + * library/x509write_csr.c */ #define MBEDTLS_ASN1_WRITE_C @@ -1665,6 +1757,19 @@ */ #define MBEDTLS_CIPHER_C +/** + * \def MBEDTLS_CMAC_C + * + * Enable the CMAC (Cipher-based Message Authentication Code) mode for block + * ciphers. + * + * Module: library/cmac.c + * + * Requires: MBEDTLS_AES_C or MBEDTLS_DES_C + * + */ +//#define MBEDTLS_CMAC_C + /** * \def MBEDTLS_CTR_DRBG_C * @@ -1879,7 +1984,7 @@ * * Enable the generic message digest layer. * - * Module: library/mbedtls_md.c + * Module: library/md.c * Caller: * * Uncomment to enable generic message digest wrappers. @@ -1891,7 +1996,7 @@ * * Enable the MD2 hash algorithm. * - * Module: library/mbedtls_md2.c + * Module: library/md2.c * Caller: * * Uncomment to enable support for (rare) MD2-signed X.509 certs. @@ -1903,7 +2008,7 @@ * * Enable the MD4 hash algorithm. * - * Module: library/mbedtls_md4.c + * Module: library/md4.c * Caller: * * Uncomment to enable support for (rare) MD4-signed X.509 certs. @@ -1915,8 +2020,8 @@ * * Enable the MD5 hash algorithm. * - * Module: library/mbedtls_md5.c - * Caller: library/mbedtls_md.c + * Module: library/md5.c + * Caller: library/md.c * library/pem.c * library/ssl_tls.c * @@ -1954,7 +2059,7 @@ * environment: * https://tls.mbed.org/kb/how-to/how-do-i-port-mbed-tls-to-a-new-environment-OS * - * Module: library/net.c + * Module: library/net_sockets.c * * This module provides networking routines. */ @@ -1973,11 +2078,11 @@ * library/rsa.c * library/x509.c * library/x509_create.c - * library/mbedtls_x509_crl.c - * library/mbedtls_x509_crt.c - * library/mbedtls_x509_csr.c + * library/x509_crl.c + * library/x509_crt.c + * library/x509_csr.c * library/x509write_crt.c - * library/mbedtls_x509write_csr.c + * library/x509write_csr.c * * This modules translates between OIDs and internal values. */ @@ -2005,9 +2110,9 @@ * Module: library/pem.c * Caller: library/dhm.c * library/pkparse.c - * library/mbedtls_x509_crl.c - * library/mbedtls_x509_crt.c - * library/mbedtls_x509_csr.c + * library/x509_crl.c + * library/x509_crt.c + * library/x509_csr.c * * Requires: MBEDTLS_BASE64_C * @@ -2023,7 +2128,7 @@ * Module: library/pem.c * Caller: library/pkwrite.c * library/x509write_crt.c - * library/mbedtls_x509write_csr.c + * library/x509write_csr.c * * Requires: MBEDTLS_BASE64_C * @@ -2053,8 +2158,8 @@ * Enable the generic public (asymetric) key parser. * * Module: library/pkparse.c - * Caller: library/mbedtls_x509_crt.c - * library/mbedtls_x509_csr.c + * Caller: library/x509_crt.c + * library/x509_csr.c * * Requires: MBEDTLS_PK_C * @@ -2145,8 +2250,8 @@ * * Enable the RIPEMD-160 hash algorithm. * - * Module: library/mbedtls_ripemd160.c - * Caller: library/mbedtls_md.c + * Module: library/ripemd160.c + * Caller: library/md.c * */ #define MBEDTLS_RIPEMD160_C @@ -2174,14 +2279,15 @@ * * Enable the SHA1 cryptographic hash algorithm. * - * Module: library/mbedtls_sha1.c - * Caller: library/mbedtls_md.c + * Module: library/sha1.c + * Caller: library/md.c * library/ssl_cli.c * library/ssl_srv.c * library/ssl_tls.c * library/x509write_crt.c * - * This module is required for SSL/TLS and SHA1-signed certificates. + * This module is required for SSL/TLS up to version 1.1, for TLS 1.2 + * depending on the handshake parameters, and for SHA1-signed certificates. */ #define MBEDTLS_SHA1_C @@ -2190,9 +2296,9 @@ * * Enable the SHA-224 and SHA-256 cryptographic hash algorithms. * - * Module: library/mbedtls_sha256.c + * Module: library/sha256.c * Caller: library/entropy.c - * library/mbedtls_md.c + * library/md.c * library/ssl_cli.c * library/ssl_srv.c * library/ssl_tls.c @@ -2207,9 +2313,9 @@ * * Enable the SHA-384 and SHA-512 cryptographic hash algorithms. * - * Module: library/mbedtls_sha512.c + * Module: library/sha512.c * Caller: library/entropy.c - * library/mbedtls_md.c + * library/md.c * library/ssl_cli.c * library/ssl_srv.c * @@ -2357,9 +2463,9 @@ * Enable X.509 core for using certificates. * * Module: library/x509.c - * Caller: library/mbedtls_x509_crl.c - * library/mbedtls_x509_crt.c - * library/mbedtls_x509_csr.c + * Caller: library/x509_crl.c + * library/x509_crt.c + * library/x509_csr.c * * Requires: MBEDTLS_ASN1_PARSE_C, MBEDTLS_BIGNUM_C, MBEDTLS_OID_C, * MBEDTLS_PK_PARSE_C @@ -2373,7 +2479,7 @@ * * Enable X.509 certificate parsing. * - * Module: library/mbedtls_x509_crt.c + * Module: library/x509_crt.c * Caller: library/ssl_cli.c * library/ssl_srv.c * library/ssl_tls.c @@ -2389,8 +2495,8 @@ * * Enable X.509 CRL parsing. * - * Module: library/mbedtls_x509_crl.c - * Caller: library/mbedtls_x509_crt.c + * Module: library/x509_crl.c + * Caller: library/x509_crt.c * * Requires: MBEDTLS_X509_USE_C * @@ -2403,7 +2509,7 @@ * * Enable X.509 Certificate Signing Request (CSR) parsing. * - * Module: library/mbedtls_x509_csr.c + * Module: library/x509_csr.c * Caller: library/x509_crt_write.c * * Requires: MBEDTLS_X509_USE_C @@ -2503,6 +2609,7 @@ /* Entropy options */ //#define MBEDTLS_ENTROPY_MAX_SOURCES 20 /**< Maximum number of sources supported */ //#define MBEDTLS_ENTROPY_MAX_GATHER 128 /**< Maximum amount requested from entropy sources */ +//#define MBEDTLS_ENTROPY_MIN_HARDWARE 32 /**< Default minimum number of bytes required for the hardware entropy source mbedtls_hardware_poll() before entropy is released */ /* Memory buffer allocator options */ //#define MBEDTLS_MEMORY_ALIGN_MULTIPLE 4 /**< Align on multiples of this value */ @@ -2512,7 +2619,7 @@ //#define MBEDTLS_PLATFORM_STD_CALLOC calloc /**< Default allocator to use, can be undefined */ //#define MBEDTLS_PLATFORM_STD_FREE free /**< Default free to use, can be undefined */ //#define MBEDTLS_PLATFORM_STD_EXIT exit /**< Default exit to use, can be undefined */ -//#define MBEDTLS_PLATFORM_STD_TIME time /**< Default time to use, can be undefined */ +//#define MBEDTLS_PLATFORM_STD_TIME time /**< Default time to use, can be undefined. MBEDTLS_HAVE_TIME must be enabled */ //#define MBEDTLS_PLATFORM_STD_FPRINTF fprintf /**< Default fprintf to use, can be undefined */ //#define MBEDTLS_PLATFORM_STD_PRINTF printf /**< Default printf to use, can be undefined */ /* Note: your snprintf must correclty zero-terminate the buffer! */ @@ -2528,8 +2635,8 @@ //#define MBEDTLS_PLATFORM_CALLOC_MACRO calloc /**< Default allocator macro to use, can be undefined */ //#define MBEDTLS_PLATFORM_FREE_MACRO free /**< Default free macro to use, can be undefined */ //#define MBEDTLS_PLATFORM_EXIT_MACRO exit /**< Default exit macro to use, can be undefined */ -//#define MBEDTLS_PLATFORM_TIME_MACRO time /**< Default time macro to use, can be undefined */ -//#define MBEDTLS_PLATFORM_TIME_TYPE_MACRO time_t /**< Default time macro to use, can be undefined */ +//#define MBEDTLS_PLATFORM_TIME_MACRO time /**< Default time macro to use, can be undefined. MBEDTLS_HAVE_TIME must be enabled */ +//#define MBEDTLS_PLATFORM_TIME_TYPE_MACRO time_t /**< Default time macro to use, can be undefined. MBEDTLS_HAVE_TIME must be enabled */ //#define MBEDTLS_PLATFORM_FPRINTF_MACRO fprintf /**< Default fprintf macro to use, can be undefined */ //#define MBEDTLS_PLATFORM_PRINTF_MACRO printf /**< Default printf macro to use, can be undefined */ /* Note: your snprintf must correclty zero-terminate the buffer! */ @@ -2563,11 +2670,36 @@ /* X509 options */ //#define MBEDTLS_X509_MAX_INTERMEDIATE_CA 8 /**< Maximum number of intermediate CAs in a verification chain. */ +//#define MBEDTLS_X509_MAX_FILE_PATH_LEN 512 /**< Maximum length of a path/filename string in bytes including the null terminator character ('\0'). */ + +/** + * Allow SHA-1 in the default TLS configuration for certificate signing. + * Without this build-time option, SHA-1 support must be activated explicitly + * through mbedtls_ssl_conf_cert_profile. Turning on this option is not + * recommended because of it is possible to generte SHA-1 collisions, however + * this may be safe for legacy infrastructure where additional controls apply. + */ +// #define MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_CERTIFICATES + +/** + * Allow SHA-1 in the default TLS configuration for TLS 1.2 handshake + * signature and ciphersuite selection. Without this build-time option, SHA-1 + * support must be activated explicitly through mbedtls_ssl_conf_sig_hashes. + * The use of SHA-1 in TLS <= 1.1 and in HMAC-SHA-1 is always allowed by + * default. At the time of writing, there is no practical attack on the use + * of SHA-1 in handshake signatures, hence this option is turned on by default + * for compatibility with existing peers. + */ +#define MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_KEY_EXCHANGE /* \} name SECTION: Customisation configuration options */ /* Target and application specific configurations */ -//#define YOTTA_CFG_MBEDTLS_USER_CONFIG_FILE "target_config.h" +//#define YOTTA_CFG_MBEDTLS_TARGET_CONFIG_FILE "mbedtls/target_config.h" + +#if defined(TARGET_LIKE_MBED) && defined(YOTTA_CFG_MBEDTLS_TARGET_CONFIG_FILE) +#include YOTTA_CFG_MBEDTLS_TARGET_CONFIG_FILE +#endif /* * Allow user to override any previous default. diff --git a/tools/sdk/include/mbedtls/mbedtls/ecdsa.h b/tools/sdk/include/mbedtls/mbedtls/ecdsa.h index 52827d8d..a277715b 100644 --- a/tools/sdk/include/mbedtls/mbedtls/ecdsa.h +++ b/tools/sdk/include/mbedtls/mbedtls/ecdsa.h @@ -69,6 +69,10 @@ extern "C" { * \param f_rng RNG function * \param p_rng RNG parameter * + * \note If the bitlength of the message hash is larger than the + * bitlength of the group order, then the hash is truncated as + * prescribed by SEC1 4.1.3 step 5. + * * \return 0 if successful, * or a MBEDTLS_ERR_ECP_XXX or MBEDTLS_MPI_XXX error code */ @@ -89,6 +93,10 @@ int mbedtls_ecdsa_sign( mbedtls_ecp_group *grp, mbedtls_mpi *r, mbedtls_mpi *s, * \param blen Length of buf * \param md_alg MD algorithm used to hash the message * + * \note If the bitlength of the message hash is larger than the + * bitlength of the group order, then the hash is truncated as + * prescribed by SEC1 4.1.3 step 5. + * * \return 0 if successful, * or a MBEDTLS_ERR_ECP_XXX or MBEDTLS_MPI_XXX error code */ @@ -107,6 +115,10 @@ int mbedtls_ecdsa_sign_det( mbedtls_ecp_group *grp, mbedtls_mpi *r, mbedtls_mpi * \param r First integer of the signature * \param s Second integer of the signature * + * \note If the bitlength of the message hash is larger than the + * bitlength of the group order, then the hash is truncated as + * prescribed by SEC1 4.1.4 step 3. + * * \return 0 if successful, * MBEDTLS_ERR_ECP_BAD_INPUT_DATA if signature is invalid * or a MBEDTLS_ERR_ECP_XXX or MBEDTLS_MPI_XXX error code @@ -120,7 +132,7 @@ int mbedtls_ecdsa_verify( mbedtls_ecp_group *grp, * serialized as defined in RFC 4492 page 20. * (Not thread-safe to use same context in multiple threads) * - * \note The deterministice version (RFC 6979) is used if + * \note The deterministic version (RFC 6979) is used if * MBEDTLS_ECDSA_DETERMINISTIC is defined. * * \param ctx ECDSA context @@ -136,6 +148,10 @@ int mbedtls_ecdsa_verify( mbedtls_ecp_group *grp, * size of the curve used, plus 9 (eg. 73 bytes if a 256-bit * curve is used). MBEDTLS_ECDSA_MAX_LEN is always safe. * + * \note If the bitlength of the message hash is larger than the + * bitlength of the group order, then the hash is truncated as + * prescribed by SEC1 4.1.3 step 5. + * * \return 0 if successful, * or a MBEDTLS_ERR_ECP_XXX, MBEDTLS_ERR_MPI_XXX or * MBEDTLS_ERR_ASN1_XXX error code @@ -172,6 +188,10 @@ int mbedtls_ecdsa_write_signature( mbedtls_ecdsa_context *ctx, mbedtls_md_type_t * size of the curve used, plus 9 (eg. 73 bytes if a 256-bit * curve is used). MBEDTLS_ECDSA_MAX_LEN is always safe. * + * \note If the bitlength of the message hash is larger than the + * bitlength of the group order, then the hash is truncated as + * prescribed by SEC1 4.1.3 step 5. + * * \return 0 if successful, * or a MBEDTLS_ERR_ECP_XXX, MBEDTLS_ERR_MPI_XXX or * MBEDTLS_ERR_ASN1_XXX error code @@ -193,6 +213,10 @@ int mbedtls_ecdsa_write_signature_det( mbedtls_ecdsa_context *ctx, * \param sig Signature to read and verify * \param slen Size of sig * + * \note If the bitlength of the message hash is larger than the + * bitlength of the group order, then the hash is truncated as + * prescribed by SEC1 4.1.4 step 3. + * * \return 0 if successful, * MBEDTLS_ERR_ECP_BAD_INPUT_DATA if signature is invalid, * MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH if the signature is diff --git a/tools/sdk/include/mbedtls/mbedtls/ecjpake.h b/tools/sdk/include/mbedtls/mbedtls/ecjpake.h index b7b61604..161a5b21 100644 --- a/tools/sdk/include/mbedtls/mbedtls/ecjpake.h +++ b/tools/sdk/include/mbedtls/mbedtls/ecjpake.h @@ -116,7 +116,7 @@ int mbedtls_ecjpake_setup( mbedtls_ecjpake_context *ctx, const unsigned char *secret, size_t len ); -/* +/** * \brief Check if a context is ready for use * * \param ctx Context to check diff --git a/tools/sdk/include/mbedtls/mbedtls/ecp.h b/tools/sdk/include/mbedtls/mbedtls/ecp.h index 5246c789..dad9aef0 100644 --- a/tools/sdk/include/mbedtls/mbedtls/ecp.h +++ b/tools/sdk/include/mbedtls/mbedtls/ecp.h @@ -37,6 +37,15 @@ #define MBEDTLS_ERR_ECP_INVALID_KEY -0x4C80 /**< Invalid private or public key. */ #define MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH -0x4C00 /**< Signature is valid but shorter than the user-supplied length. */ +#if !defined(MBEDTLS_ECP_ALT) +/* + * default mbed TLS elliptic curve arithmetic implementation + * + * (in case MBEDTLS_ECP_ALT is defined then the developer has to provide an + * alternative implementation for the whole module and it will replace this + * one.) + */ + #ifdef __cplusplus extern "C" { #endif @@ -452,7 +461,7 @@ int mbedtls_ecp_tls_write_point( const mbedtls_ecp_group *grp, const mbedtls_ecp * \brief Set a group using well-known domain parameters * * \param grp Destination group - * \param index Index in the list of well-known domain parameters + * \param id Index in the list of well-known domain parameters * * \return 0 if successful, * MBEDTLS_ERR_MPI_XXX if initialization failed @@ -461,7 +470,7 @@ int mbedtls_ecp_tls_write_point( const mbedtls_ecp_group *grp, const mbedtls_ecp * \note Index should be a value of RFC 4492's enum NamedCurve, * usually in the form of a MBEDTLS_ECP_DP_XXX macro. */ -int mbedtls_ecp_group_load( mbedtls_ecp_group *grp, mbedtls_ecp_group_id index ); +int mbedtls_ecp_group_load( mbedtls_ecp_group *grp, mbedtls_ecp_group_id id ); /** * \brief Set a group from a TLS ECParameters record @@ -654,16 +663,22 @@ int mbedtls_ecp_gen_key( mbedtls_ecp_group_id grp_id, mbedtls_ecp_keypair *key, int mbedtls_ecp_check_pub_priv( const mbedtls_ecp_keypair *pub, const mbedtls_ecp_keypair *prv ); #if defined(MBEDTLS_SELF_TEST) + /** * \brief Checkup routine * * \return 0 if successful, or 1 if a test failed */ int mbedtls_ecp_self_test( int verbose ); -#endif + +#endif /* MBEDTLS_SELF_TEST */ #ifdef __cplusplus } #endif +#else /* MBEDTLS_ECP_ALT */ +#include "ecp_alt.h" +#endif /* MBEDTLS_ECP_ALT */ + #endif /* ecp.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/ecp_internal.h b/tools/sdk/include/mbedtls/mbedtls/ecp_internal.h new file mode 100644 index 00000000..2991e26d --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/ecp_internal.h @@ -0,0 +1,292 @@ +/** + * \file ecp_internal.h + * + * \brief Function declarations for alternative implementation of elliptic curve + * point arithmetic. + * + * Copyright (C) 2016, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ + +/* + * References: + * + * [1] BERNSTEIN, Daniel J. Curve25519: new Diffie-Hellman speed records. + * + * + * [2] CORON, Jean-S'ebastien. Resistance against differential power analysis + * for elliptic curve cryptosystems. In : Cryptographic Hardware and + * Embedded Systems. Springer Berlin Heidelberg, 1999. p. 292-302. + * + * + * [3] HEDABOU, Mustapha, PINEL, Pierre, et B'EN'ETEAU, Lucien. A comb method to + * render ECC resistant against Side Channel Attacks. IACR Cryptology + * ePrint Archive, 2004, vol. 2004, p. 342. + * + * + * [4] Certicom Research. SEC 2: Recommended Elliptic Curve Domain Parameters. + * + * + * [5] HANKERSON, Darrel, MENEZES, Alfred J., VANSTONE, Scott. Guide to Elliptic + * Curve Cryptography. + * + * [6] Digital Signature Standard (DSS), FIPS 186-4. + * + * + * [7] Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer + * Security (TLS), RFC 4492. + * + * + * [8] + * + * [9] COHEN, Henri. A Course in Computational Algebraic Number Theory. + * Springer Science & Business Media, 1 Aug 2000 + */ + +#ifndef MBEDTLS_ECP_INTERNAL_H +#define MBEDTLS_ECP_INTERNAL_H + +#if defined(MBEDTLS_ECP_INTERNAL_ALT) + +/** + * \brief Indicate if the Elliptic Curve Point module extension can + * handle the group. + * + * \param grp The pointer to the elliptic curve group that will be the + * basis of the cryptographic computations. + * + * \return Non-zero if successful. + */ +unsigned char mbedtls_internal_ecp_grp_capable( const mbedtls_ecp_group *grp ); + +/** + * \brief Initialise the Elliptic Curve Point module extension. + * + * If mbedtls_internal_ecp_grp_capable returns true for a + * group, this function has to be able to initialise the + * module for it. + * + * This module can be a driver to a crypto hardware + * accelerator, for which this could be an initialise function. + * + * \param grp The pointer to the group the module needs to be + * initialised for. + * + * \return 0 if successful. + */ +int mbedtls_internal_ecp_init( const mbedtls_ecp_group *grp ); + +/** + * \brief Frees and deallocates the Elliptic Curve Point module + * extension. + * + * \param grp The pointer to the group the module was initialised for. + */ +void mbedtls_internal_ecp_free( const mbedtls_ecp_group *grp ); + +#if defined(ECP_SHORTWEIERSTRASS) + +#if defined(MBEDTLS_ECP_RANDOMIZE_JAC_ALT) +/** + * \brief Randomize jacobian coordinates: + * (X, Y, Z) -> (l^2 X, l^3 Y, l Z) for random l. + * + * \param grp Pointer to the group representing the curve. + * + * \param pt The point on the curve to be randomised, given with Jacobian + * coordinates. + * + * \param f_rng A function pointer to the random number generator. + * + * \param p_rng A pointer to the random number generator state. + * + * \return 0 if successful. + */ +int mbedtls_internal_ecp_randomize_jac( const mbedtls_ecp_group *grp, + mbedtls_ecp_point *pt, int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ); +#endif + +#if defined(MBEDTLS_ECP_ADD_MIXED_ALT) +/** + * \brief Addition: R = P + Q, mixed affine-Jacobian coordinates. + * + * The coordinates of Q must be normalized (= affine), + * but those of P don't need to. R is not normalized. + * + * This function is used only as a subrutine of + * ecp_mul_comb(). + * + * Special cases: (1) P or Q is zero, (2) R is zero, + * (3) P == Q. + * None of these cases can happen as intermediate step in + * ecp_mul_comb(): + * - at each step, P, Q and R are multiples of the base + * point, the factor being less than its order, so none of + * them is zero; + * - Q is an odd multiple of the base point, P an even + * multiple, due to the choice of precomputed points in the + * modified comb method. + * So branches for these cases do not leak secret information. + * + * We accept Q->Z being unset (saving memory in tables) as + * meaning 1. + * + * Cost in field operations if done by [5] 3.22: + * 1A := 8M + 3S + * + * \param grp Pointer to the group representing the curve. + * + * \param R Pointer to a point structure to hold the result. + * + * \param P Pointer to the first summand, given with Jacobian + * coordinates + * + * \param Q Pointer to the second summand, given with affine + * coordinates. + * + * \return 0 if successful. + */ +int mbedtls_internal_ecp_add_mixed( const mbedtls_ecp_group *grp, + mbedtls_ecp_point *R, const mbedtls_ecp_point *P, + const mbedtls_ecp_point *Q ); +#endif + +/** + * \brief Point doubling R = 2 P, Jacobian coordinates. + * + * Cost: 1D := 3M + 4S (A == 0) + * 4M + 4S (A == -3) + * 3M + 6S + 1a otherwise + * when the implementation is based on the "dbl-1998-cmo-2" + * doubling formulas in [8] and standard optimizations are + * applied when curve parameter A is one of { 0, -3 }. + * + * \param grp Pointer to the group representing the curve. + * + * \param R Pointer to a point structure to hold the result. + * + * \param P Pointer to the point that has to be doubled, given with + * Jacobian coordinates. + * + * \return 0 if successful. + */ +#if defined(MBEDTLS_ECP_DOUBLE_JAC_ALT) +int mbedtls_internal_ecp_double_jac( const mbedtls_ecp_group *grp, + mbedtls_ecp_point *R, const mbedtls_ecp_point *P ); +#endif + +/** + * \brief Normalize jacobian coordinates of an array of (pointers to) + * points. + * + * Using Montgomery's trick to perform only one inversion mod P + * the cost is: + * 1N(t) := 1I + (6t - 3)M + 1S + * (See for example Algorithm 10.3.4. in [9]) + * + * This function is used only as a subrutine of + * ecp_mul_comb(). + * + * Warning: fails (returning an error) if one of the points is + * zero! + * This should never happen, see choice of w in ecp_mul_comb(). + * + * \param grp Pointer to the group representing the curve. + * + * \param T Array of pointers to the points to normalise. + * + * \param t_len Number of elements in the array. + * + * \return 0 if successful, + * an error if one of the points is zero. + */ +#if defined(MBEDTLS_ECP_NORMALIZE_JAC_MANY_ALT) +int mbedtls_internal_ecp_normalize_jac_many( const mbedtls_ecp_group *grp, + mbedtls_ecp_point *T[], size_t t_len ); +#endif + +/** + * \brief Normalize jacobian coordinates so that Z == 0 || Z == 1. + * + * Cost in field operations if done by [5] 3.2.1: + * 1N := 1I + 3M + 1S + * + * \param grp Pointer to the group representing the curve. + * + * \param pt pointer to the point to be normalised. This is an + * input/output parameter. + * + * \return 0 if successful. + */ +#if defined(MBEDTLS_ECP_NORMALIZE_JAC_ALT) +int mbedtls_internal_ecp_normalize_jac( const mbedtls_ecp_group *grp, + mbedtls_ecp_point *pt ); +#endif + +#endif /* ECP_SHORTWEIERSTRASS */ + +#if defined(ECP_MONTGOMERY) + +#if defined(MBEDTLS_ECP_DOUBLE_ADD_MXZ_ALT) +int mbedtls_internal_ecp_double_add_mxz( const mbedtls_ecp_group *grp, + mbedtls_ecp_point *R, mbedtls_ecp_point *S, const mbedtls_ecp_point *P, + const mbedtls_ecp_point *Q, const mbedtls_mpi *d ); +#endif + +/** + * \brief Randomize projective x/z coordinates: + * (X, Z) -> (l X, l Z) for random l + * + * \param grp pointer to the group representing the curve + * + * \param P the point on the curve to be randomised given with + * projective coordinates. This is an input/output parameter. + * + * \param f_rng a function pointer to the random number generator + * + * \param p_rng a pointer to the random number generator state + * + * \return 0 if successful + */ +#if defined(MBEDTLS_ECP_RANDOMIZE_MXZ_ALT) +int mbedtls_internal_ecp_randomize_mxz( const mbedtls_ecp_group *grp, + mbedtls_ecp_point *P, int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ); +#endif + +/** + * \brief Normalize Montgomery x/z coordinates: X = X/Z, Z = 1. + * + * \param grp pointer to the group representing the curve + * + * \param P pointer to the point to be normalised. This is an + * input/output parameter. + * + * \return 0 if successful + */ +#if defined(MBEDTLS_ECP_NORMALIZE_MXZ_ALT) +int mbedtls_internal_ecp_normalize_mxz( const mbedtls_ecp_group *grp, + mbedtls_ecp_point *P ); +#endif + +#endif /* ECP_MONTGOMERY */ + +#endif /* MBEDTLS_ECP_INTERNAL_ALT */ + +#endif /* ecp_internal.h */ + diff --git a/tools/sdk/include/mbedtls/mbedtls/entropy.h b/tools/sdk/include/mbedtls/mbedtls/entropy.h index fed0494e..747aca4d 100644 --- a/tools/sdk/include/mbedtls/mbedtls/entropy.h +++ b/tools/sdk/include/mbedtls/mbedtls/entropy.h @@ -255,9 +255,29 @@ int mbedtls_entropy_update_seed_file( mbedtls_entropy_context *ctx, const char * /** * \brief Checkup routine * + * This module self-test also calls the entropy self-test, + * mbedtls_entropy_source_self_test(); + * * \return 0 if successful, or 1 if a test failed */ int mbedtls_entropy_self_test( int verbose ); + +#if defined(MBEDTLS_ENTROPY_HARDWARE_ALT) +/** + * \brief Checkup routine + * + * Verifies the integrity of the hardware entropy source + * provided by the function 'mbedtls_hardware_poll()'. + * + * Note this is the only hardware entropy source that is known + * at link time, and other entropy sources configured + * dynamically at runtime by the function + * mbedtls_entropy_add_source() will not be tested. + * + * \return 0 if successful, or 1 if a test failed + */ +int mbedtls_entropy_source_self_test( int verbose ); +#endif /* MBEDTLS_ENTROPY_HARDWARE_ALT */ #endif /* MBEDTLS_SELF_TEST */ #ifdef __cplusplus diff --git a/tools/sdk/include/mbedtls/mbedtls/entropy_poll.h b/tools/sdk/include/mbedtls/mbedtls/entropy_poll.h index 430e8651..81258d5f 100644 --- a/tools/sdk/include/mbedtls/mbedtls/entropy_poll.h +++ b/tools/sdk/include/mbedtls/mbedtls/entropy_poll.h @@ -41,7 +41,9 @@ extern "C" { #define MBEDTLS_ENTROPY_MIN_PLATFORM 32 /**< Minimum for platform source */ #define MBEDTLS_ENTROPY_MIN_HAVEGE 32 /**< Minimum for HAVEGE */ #define MBEDTLS_ENTROPY_MIN_HARDCLOCK 4 /**< Minimum for mbedtls_timing_hardclock() */ +#if !defined(MBEDTLS_ENTROPY_MIN_HARDWARE) #define MBEDTLS_ENTROPY_MIN_HARDWARE 32 /**< Minimum for the hardware source */ +#endif /** * \brief Entropy poll callback that provides 0 entropy. diff --git a/tools/sdk/include/mbedtls/mbedtls/error.h b/tools/sdk/include/mbedtls/mbedtls/error.h index 5e549f6b..31591e2d 100644 --- a/tools/sdk/include/mbedtls/mbedtls/error.h +++ b/tools/sdk/include/mbedtls/mbedtls/error.h @@ -71,7 +71,7 @@ * Name ID Nr of Errors * PEM 1 9 * PKCS#12 1 4 (Started from top) - * X509 2 19 + * X509 2 20 * PKCS5 2 4 (Started from top) * DHM 3 9 * PK 3 14 (Started from top) diff --git a/tools/sdk/include/mbedtls/mbedtls/gcm.h b/tools/sdk/include/mbedtls/mbedtls/gcm.h index 6743ac9a..1b77aaed 100644 --- a/tools/sdk/include/mbedtls/mbedtls/gcm.h +++ b/tools/sdk/include/mbedtls/mbedtls/gcm.h @@ -190,8 +190,8 @@ int mbedtls_gcm_update( mbedtls_gcm_context *ctx, * 16 bytes. * * \param ctx GCM context - * \param tag buffer for holding the tag (may be NULL if tag_len is 0) - * \param tag_len length of the tag to generate + * \param tag buffer for holding the tag + * \param tag_len length of the tag to generate (must be at least 4) * * \return 0 if successful or MBEDTLS_ERR_GCM_BAD_INPUT */ diff --git a/tools/sdk/include/mbedtls/mbedtls/md.h b/tools/sdk/include/mbedtls/mbedtls/md.h index b9023553..9b996a95 100644 --- a/tools/sdk/include/mbedtls/mbedtls/md.h +++ b/tools/sdk/include/mbedtls/mbedtls/md.h @@ -304,8 +304,8 @@ int mbedtls_md_hmac_update( mbedtls_md_context_t *ctx, const unsigned char *inpu /** * \brief Output HMAC. * Called after mbedtls_md_hmac_update(). - * Usually followed my mbedtls_md_hmac_reset(), mbedtls_md_hmac_starts(), - * or mbedtls_md_free(). + * Usually followed by mbedtls_md_hmac_reset(), + * mbedtls_md_hmac_starts(), or mbedtls_md_free(). * * \param ctx HMAC context * \param output Generic HMAC checksum result @@ -317,7 +317,8 @@ int mbedtls_md_hmac_finish( mbedtls_md_context_t *ctx, unsigned char *output); /** * \brief Prepare to authenticate a new message with the same key. - * Called after mbedtls_md_hmac_finish() and before mbedtls_md_hmac_update(). + * Called after mbedtls_md_hmac_finish() and before + * mbedtls_md_hmac_update(). * * \param ctx HMAC context to be reset * diff --git a/tools/sdk/include/mbedtls/mbedtls/net.h b/tools/sdk/include/mbedtls/mbedtls/net.h index 8c6534cf..774559b3 100644 --- a/tools/sdk/include/mbedtls/mbedtls/net.h +++ b/tools/sdk/include/mbedtls/mbedtls/net.h @@ -1,9 +1,9 @@ /** * \file net.h * - * \brief Network communication functions + * \brief Deprecated header file that includes mbedtls/net_sockets.h * - * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * Copyright (C) 2006-2016, ARM Limited, All Rights Reserved * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); you may @@ -19,207 +19,13 @@ * limitations under the License. * * This file is part of mbed TLS (https://tls.mbed.org) + * + * \deprecated Superseded by mbedtls/net_sockets.h */ -#ifndef MBEDTLS_NET_H -#define MBEDTLS_NET_H -#if !defined(MBEDTLS_CONFIG_FILE) -#include "config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - -#include "ssl.h" - -#include -#include - -#define MBEDTLS_ERR_NET_SOCKET_FAILED -0x0042 /**< Failed to open a socket. */ -#define MBEDTLS_ERR_NET_CONNECT_FAILED -0x0044 /**< The connection to the given server / port failed. */ -#define MBEDTLS_ERR_NET_BIND_FAILED -0x0046 /**< Binding of the socket failed. */ -#define MBEDTLS_ERR_NET_LISTEN_FAILED -0x0048 /**< Could not listen on the socket. */ -#define MBEDTLS_ERR_NET_ACCEPT_FAILED -0x004A /**< Could not accept the incoming connection. */ -#define MBEDTLS_ERR_NET_RECV_FAILED -0x004C /**< Reading information from the socket failed. */ -#define MBEDTLS_ERR_NET_SEND_FAILED -0x004E /**< Sending information through the socket failed. */ -#define MBEDTLS_ERR_NET_CONN_RESET -0x0050 /**< Connection was reset by peer. */ -#define MBEDTLS_ERR_NET_UNKNOWN_HOST -0x0052 /**< Failed to get an IP address for the given hostname. */ -#define MBEDTLS_ERR_NET_BUFFER_TOO_SMALL -0x0043 /**< Buffer is too small to hold the data. */ -#define MBEDTLS_ERR_NET_INVALID_CONTEXT -0x0045 /**< The context is invalid, eg because it was free()ed. */ - -#define MBEDTLS_NET_LISTEN_BACKLOG 10 /**< The backlog that listen() should use. */ - -#define MBEDTLS_NET_PROTO_TCP 0 /**< The TCP transport protocol */ -#define MBEDTLS_NET_PROTO_UDP 1 /**< The UDP transport protocol */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Wrapper type for sockets. - * - * Currently backed by just a file descriptor, but might be more in the future - * (eg two file descriptors for combined IPv4 + IPv6 support, or additional - * structures for hand-made UDP demultiplexing). - */ -typedef struct -{ - int fd; /**< The underlying file descriptor */ -} -mbedtls_net_context; - -/** - * \brief Initialize a context - * Just makes the context ready to be used or freed safely. - * - * \param ctx Context to initialize - */ -void mbedtls_net_init( mbedtls_net_context *ctx ); - -/** - * \brief Initiate a connection with host:port in the given protocol - * - * \param ctx Socket to use - * \param host Host to connect to - * \param port Port to connect to - * \param proto Protocol: MBEDTLS_NET_PROTO_TCP or MBEDTLS_NET_PROTO_UDP - * - * \return 0 if successful, or one of: - * MBEDTLS_ERR_NET_SOCKET_FAILED, - * MBEDTLS_ERR_NET_UNKNOWN_HOST, - * MBEDTLS_ERR_NET_CONNECT_FAILED - * - * \note Sets the socket in connected mode even with UDP. - */ -int mbedtls_net_connect( mbedtls_net_context *ctx, const char *host, const char *port, int proto ); - -/** - * \brief Create a receiving socket on bind_ip:port in the chosen - * protocol. If bind_ip == NULL, all interfaces are bound. - * - * \param ctx Socket to use - * \param bind_ip IP to bind to, can be NULL - * \param port Port number to use - * \param proto Protocol: MBEDTLS_NET_PROTO_TCP or MBEDTLS_NET_PROTO_UDP - * - * \return 0 if successful, or one of: - * MBEDTLS_ERR_NET_SOCKET_FAILED, - * MBEDTLS_ERR_NET_BIND_FAILED, - * MBEDTLS_ERR_NET_LISTEN_FAILED - * - * \note Regardless of the protocol, opens the sockets and binds it. - * In addition, make the socket listening if protocol is TCP. - */ -int mbedtls_net_bind( mbedtls_net_context *ctx, const char *bind_ip, const char *port, int proto ); - -/** - * \brief Accept a connection from a remote client - * - * \param bind_ctx Relevant socket - * \param client_ctx Will contain the connected client socket - * \param client_ip Will contain the client IP address - * \param buf_size Size of the client_ip buffer - * \param ip_len Will receive the size of the client IP written - * - * \return 0 if successful, or - * MBEDTLS_ERR_NET_ACCEPT_FAILED, or - * MBEDTLS_ERR_NET_BUFFER_TOO_SMALL if buf_size is too small, - * MBEDTLS_ERR_SSL_WANT_READ if bind_fd was set to - * non-blocking and accept() would block. - */ -int mbedtls_net_accept( mbedtls_net_context *bind_ctx, - mbedtls_net_context *client_ctx, - void *client_ip, size_t buf_size, size_t *ip_len ); - -/** - * \brief Set the socket blocking - * - * \param ctx Socket to set - * - * \return 0 if successful, or a non-zero error code - */ -int mbedtls_net_set_block( mbedtls_net_context *ctx ); - -/** - * \brief Set the socket non-blocking - * - * \param ctx Socket to set - * - * \return 0 if successful, or a non-zero error code - */ -int mbedtls_net_set_nonblock( mbedtls_net_context *ctx ); - -/** - * \brief Portable usleep helper - * - * \param usec Amount of microseconds to sleep - * - * \note Real amount of time slept will not be less than - * select()'s timeout granularity (typically, 10ms). - */ -void mbedtls_net_usleep( unsigned long usec ); - -/** - * \brief Read at most 'len' characters. If no error occurs, - * the actual amount read is returned. - * - * \param ctx Socket - * \param buf The buffer to write to - * \param len Maximum length of the buffer - * - * \return the number of bytes received, - * or a non-zero error code; with a non-blocking socket, - * MBEDTLS_ERR_SSL_WANT_READ indicates read() would block. - */ -int mbedtls_net_recv( void *ctx, unsigned char *buf, size_t len ); - -/** - * \brief Write at most 'len' characters. If no error occurs, - * the actual amount read is returned. - * - * \param ctx Socket - * \param buf The buffer to read from - * \param len The length of the buffer - * - * \return the number of bytes sent, - * or a non-zero error code; with a non-blocking socket, - * MBEDTLS_ERR_SSL_WANT_WRITE indicates write() would block. - */ -int mbedtls_net_send( void *ctx, const unsigned char *buf, size_t len ); - -/** - * \brief Read at most 'len' characters, blocking for at most - * 'timeout' seconds. If no error occurs, the actual amount - * read is returned. - * - * \param ctx Socket - * \param buf The buffer to write to - * \param len Maximum length of the buffer - * \param timeout Maximum number of milliseconds to wait for data - * 0 means no timeout (wait forever) - * - * \return the number of bytes received, - * or a non-zero error code: - * MBEDTLS_ERR_SSL_TIMEOUT if the operation timed out, - * MBEDTLS_ERR_SSL_WANT_READ if interrupted by a signal. - * - * \note This function will block (until data becomes available or - * timeout is reached) even if the socket is set to - * non-blocking. Handling timeouts with non-blocking reads - * requires a different strategy. - */ -int mbedtls_net_recv_timeout( void *ctx, unsigned char *buf, size_t len, - uint32_t timeout ); - -/** - * \brief Gracefully shutdown the connection and free associated data - * - * \param ctx The context to free - */ -void mbedtls_net_free( mbedtls_net_context *ctx ); - -#ifdef __cplusplus -} -#endif - -#endif /* net.h */ +#if !defined(MBEDTLS_DEPRECATED_REMOVED) +#include "mbedtls/net_sockets.h" +#if defined(MBEDTLS_DEPRECATED_WARNING) +#warning "Deprecated header file: Superseded by mbedtls/net_sockets.h" +#endif /* MBEDTLS_DEPRECATED_WARNING */ +#endif /* !MBEDTLS_DEPRECATED_REMOVED */ diff --git a/tools/sdk/include/mbedtls/mbedtls/net_sockets.h b/tools/sdk/include/mbedtls/mbedtls/net_sockets.h new file mode 100644 index 00000000..de335526 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/net_sockets.h @@ -0,0 +1,225 @@ +/** + * \file net_sockets.h + * + * \brief Network communication functions + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_NET_SOCKETS_H +#define MBEDTLS_NET_SOCKETS_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include "ssl.h" + +#include +#include + +#define MBEDTLS_ERR_NET_SOCKET_FAILED -0x0042 /**< Failed to open a socket. */ +#define MBEDTLS_ERR_NET_CONNECT_FAILED -0x0044 /**< The connection to the given server / port failed. */ +#define MBEDTLS_ERR_NET_BIND_FAILED -0x0046 /**< Binding of the socket failed. */ +#define MBEDTLS_ERR_NET_LISTEN_FAILED -0x0048 /**< Could not listen on the socket. */ +#define MBEDTLS_ERR_NET_ACCEPT_FAILED -0x004A /**< Could not accept the incoming connection. */ +#define MBEDTLS_ERR_NET_RECV_FAILED -0x004C /**< Reading information from the socket failed. */ +#define MBEDTLS_ERR_NET_SEND_FAILED -0x004E /**< Sending information through the socket failed. */ +#define MBEDTLS_ERR_NET_CONN_RESET -0x0050 /**< Connection was reset by peer. */ +#define MBEDTLS_ERR_NET_UNKNOWN_HOST -0x0052 /**< Failed to get an IP address for the given hostname. */ +#define MBEDTLS_ERR_NET_BUFFER_TOO_SMALL -0x0043 /**< Buffer is too small to hold the data. */ +#define MBEDTLS_ERR_NET_INVALID_CONTEXT -0x0045 /**< The context is invalid, eg because it was free()ed. */ + +#define MBEDTLS_NET_LISTEN_BACKLOG 10 /**< The backlog that listen() should use. */ + +#define MBEDTLS_NET_PROTO_TCP 0 /**< The TCP transport protocol */ +#define MBEDTLS_NET_PROTO_UDP 1 /**< The UDP transport protocol */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Wrapper type for sockets. + * + * Currently backed by just a file descriptor, but might be more in the future + * (eg two file descriptors for combined IPv4 + IPv6 support, or additional + * structures for hand-made UDP demultiplexing). + */ +typedef struct +{ + int fd; /**< The underlying file descriptor */ +} +mbedtls_net_context; + +/** + * \brief Initialize a context + * Just makes the context ready to be used or freed safely. + * + * \param ctx Context to initialize + */ +void mbedtls_net_init( mbedtls_net_context *ctx ); + +/** + * \brief Initiate a connection with host:port in the given protocol + * + * \param ctx Socket to use + * \param host Host to connect to + * \param port Port to connect to + * \param proto Protocol: MBEDTLS_NET_PROTO_TCP or MBEDTLS_NET_PROTO_UDP + * + * \return 0 if successful, or one of: + * MBEDTLS_ERR_NET_SOCKET_FAILED, + * MBEDTLS_ERR_NET_UNKNOWN_HOST, + * MBEDTLS_ERR_NET_CONNECT_FAILED + * + * \note Sets the socket in connected mode even with UDP. + */ +int mbedtls_net_connect( mbedtls_net_context *ctx, const char *host, const char *port, int proto ); + +/** + * \brief Create a receiving socket on bind_ip:port in the chosen + * protocol. If bind_ip == NULL, all interfaces are bound. + * + * \param ctx Socket to use + * \param bind_ip IP to bind to, can be NULL + * \param port Port number to use + * \param proto Protocol: MBEDTLS_NET_PROTO_TCP or MBEDTLS_NET_PROTO_UDP + * + * \return 0 if successful, or one of: + * MBEDTLS_ERR_NET_SOCKET_FAILED, + * MBEDTLS_ERR_NET_BIND_FAILED, + * MBEDTLS_ERR_NET_LISTEN_FAILED + * + * \note Regardless of the protocol, opens the sockets and binds it. + * In addition, make the socket listening if protocol is TCP. + */ +int mbedtls_net_bind( mbedtls_net_context *ctx, const char *bind_ip, const char *port, int proto ); + +/** + * \brief Accept a connection from a remote client + * + * \param bind_ctx Relevant socket + * \param client_ctx Will contain the connected client socket + * \param client_ip Will contain the client IP address + * \param buf_size Size of the client_ip buffer + * \param ip_len Will receive the size of the client IP written + * + * \return 0 if successful, or + * MBEDTLS_ERR_NET_ACCEPT_FAILED, or + * MBEDTLS_ERR_NET_BUFFER_TOO_SMALL if buf_size is too small, + * MBEDTLS_ERR_SSL_WANT_READ if bind_fd was set to + * non-blocking and accept() would block. + */ +int mbedtls_net_accept( mbedtls_net_context *bind_ctx, + mbedtls_net_context *client_ctx, + void *client_ip, size_t buf_size, size_t *ip_len ); + +/** + * \brief Set the socket blocking + * + * \param ctx Socket to set + * + * \return 0 if successful, or a non-zero error code + */ +int mbedtls_net_set_block( mbedtls_net_context *ctx ); + +/** + * \brief Set the socket non-blocking + * + * \param ctx Socket to set + * + * \return 0 if successful, or a non-zero error code + */ +int mbedtls_net_set_nonblock( mbedtls_net_context *ctx ); + +/** + * \brief Portable usleep helper + * + * \param usec Amount of microseconds to sleep + * + * \note Real amount of time slept will not be less than + * select()'s timeout granularity (typically, 10ms). + */ +void mbedtls_net_usleep( unsigned long usec ); + +/** + * \brief Read at most 'len' characters. If no error occurs, + * the actual amount read is returned. + * + * \param ctx Socket + * \param buf The buffer to write to + * \param len Maximum length of the buffer + * + * \return the number of bytes received, + * or a non-zero error code; with a non-blocking socket, + * MBEDTLS_ERR_SSL_WANT_READ indicates read() would block. + */ +int mbedtls_net_recv( void *ctx, unsigned char *buf, size_t len ); + +/** + * \brief Write at most 'len' characters. If no error occurs, + * the actual amount read is returned. + * + * \param ctx Socket + * \param buf The buffer to read from + * \param len The length of the buffer + * + * \return the number of bytes sent, + * or a non-zero error code; with a non-blocking socket, + * MBEDTLS_ERR_SSL_WANT_WRITE indicates write() would block. + */ +int mbedtls_net_send( void *ctx, const unsigned char *buf, size_t len ); + +/** + * \brief Read at most 'len' characters, blocking for at most + * 'timeout' seconds. If no error occurs, the actual amount + * read is returned. + * + * \param ctx Socket + * \param buf The buffer to write to + * \param len Maximum length of the buffer + * \param timeout Maximum number of milliseconds to wait for data + * 0 means no timeout (wait forever) + * + * \return the number of bytes received, + * or a non-zero error code: + * MBEDTLS_ERR_SSL_TIMEOUT if the operation timed out, + * MBEDTLS_ERR_SSL_WANT_READ if interrupted by a signal. + * + * \note This function will block (until data becomes available or + * timeout is reached) even if the socket is set to + * non-blocking. Handling timeouts with non-blocking reads + * requires a different strategy. + */ +int mbedtls_net_recv_timeout( void *ctx, unsigned char *buf, size_t len, + uint32_t timeout ); + +/** + * \brief Gracefully shutdown the connection and free associated data + * + * \param ctx The context to free + */ +void mbedtls_net_free( mbedtls_net_context *ctx ); + +#ifdef __cplusplus +} +#endif + +#endif /* net_sockets.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/platform.h b/tools/sdk/include/mbedtls/mbedtls/platform.h index caf8f252..35010f88 100644 --- a/tools/sdk/include/mbedtls/mbedtls/platform.h +++ b/tools/sdk/include/mbedtls/mbedtls/platform.h @@ -29,6 +29,10 @@ #include MBEDTLS_CONFIG_FILE #endif +#if defined(MBEDTLS_HAVE_TIME) +#include "mbedtls/platform_time.h" +#endif + #ifdef __cplusplus extern "C" { #endif @@ -243,39 +247,6 @@ int mbedtls_platform_set_exit( void (*exit_func)( int status ) ); #define MBEDTLS_EXIT_FAILURE 1 #endif -/* - * The time_t datatype - */ -#if defined(MBEDTLS_PLATFORM_TIME_TYPE_MACRO) -typedef MBEDTLS_PLATFORM_TIME_TYPE_MACRO mbedtls_time_t; -#else -/* For time_t */ -#include -typedef time_t mbedtls_time_t; -#endif /* MBEDTLS_PLATFORM_TIME_TYPE_MACRO */ - -/* - * The function pointers for time - */ -#if defined(MBEDTLS_PLATFORM_TIME_ALT) -extern mbedtls_time_t (*mbedtls_time)( mbedtls_time_t* time ); - -/** - * \brief Set your own time function pointer - * - * \param time_func the time function implementation - * - * \return 0 - */ -int mbedtls_platform_set_time( mbedtls_time_t (*time_func)( mbedtls_time_t* time ) ); -#else -#if defined(MBEDTLS_PLATFORM_TIME_MACRO) -#define mbedtls_time MBEDTLS_PLATFORM_TIME_MACRO -#else -#define mbedtls_time time -#endif /* MBEDTLS_PLATFORM_TIME_MACRO */ -#endif /* MBEDTLS_PLATFORM_TIME_ALT */ - /* * The function pointers for reading from and writing a seed file to * Non-Volatile storage (NV) in a platform-independent way @@ -317,6 +288,54 @@ int mbedtls_platform_set_nv_seed( #endif /* MBEDTLS_PLATFORM_NV_SEED_ALT */ #endif /* MBEDTLS_ENTROPY_NV_SEED */ +#if !defined(MBEDTLS_PLATFORM_SETUP_TEARDOWN_ALT) + +/** + * \brief Platform context structure + * + * \note This structure may be used to assist platform-specific + * setup/teardown operations. + */ +typedef struct { + char dummy; /**< Placeholder member as empty structs are not portable */ +} +mbedtls_platform_context; + +#else +#include "platform_alt.h" +#endif /* !MBEDTLS_PLATFORM_SETUP_TEARDOWN_ALT */ + +/** + * \brief Perform any platform initialisation operations + * + * \param ctx mbed TLS context + * + * \return 0 if successful + * + * \note This function is intended to allow platform specific initialisation, + * and should be called before any other library functions. Its + * implementation is platform specific, and by default, unless platform + * specific code is provided, it does nothing. + * + * Its use and whether its necessary to be called is dependent on the + * platform. + */ +int mbedtls_platform_setup( mbedtls_platform_context *ctx ); +/** + * \brief Perform any platform teardown operations + * + * \param ctx mbed TLS context + * + * \note This function should be called after every other mbed TLS module has + * been correctly freed using the appropriate free function. + * Its implementation is platform specific, and by default, unless + * platform specific code is provided, it does nothing. + * + * Its use and whether its necessary to be called is dependent on the + * platform. + */ +void mbedtls_platform_teardown( mbedtls_platform_context *ctx ); + #ifdef __cplusplus } #endif diff --git a/tools/sdk/include/mbedtls/mbedtls/platform_time.h b/tools/sdk/include/mbedtls/mbedtls/platform_time.h new file mode 100644 index 00000000..abb34314 --- /dev/null +++ b/tools/sdk/include/mbedtls/mbedtls/platform_time.h @@ -0,0 +1,81 @@ +/** + * \file platform_time.h + * + * \brief mbed TLS Platform time abstraction + * + * Copyright (C) 2006-2016, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_PLATFORM_TIME_H +#define MBEDTLS_PLATFORM_TIME_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \name SECTION: Module settings + * + * The configuration options you can set for this module are in this section. + * Either change them in config.h or define them on the compiler command line. + * \{ + */ + +/* + * The time_t datatype + */ +#if defined(MBEDTLS_PLATFORM_TIME_TYPE_MACRO) +typedef MBEDTLS_PLATFORM_TIME_TYPE_MACRO mbedtls_time_t; +#else +/* For time_t */ +#include +typedef time_t mbedtls_time_t; +#endif /* MBEDTLS_PLATFORM_TIME_TYPE_MACRO */ + +/* + * The function pointers for time + */ +#if defined(MBEDTLS_PLATFORM_TIME_ALT) +extern mbedtls_time_t (*mbedtls_time)( mbedtls_time_t* time ); + +/** + * \brief Set your own time function pointer + * + * \param time_func the time function implementation + * + * \return 0 + */ +int mbedtls_platform_set_time( mbedtls_time_t (*time_func)( mbedtls_time_t* time ) ); +#else +#if defined(MBEDTLS_PLATFORM_TIME_MACRO) +#define mbedtls_time MBEDTLS_PLATFORM_TIME_MACRO +#else +#define mbedtls_time time +#endif /* MBEDTLS_PLATFORM_TIME_MACRO */ +#endif /* MBEDTLS_PLATFORM_TIME_ALT */ + +#ifdef __cplusplus +} +#endif + +#endif /* platform_time.h */ diff --git a/tools/sdk/include/mbedtls/mbedtls/rsa.h b/tools/sdk/include/mbedtls/mbedtls/rsa.h index 9c8645df..7d7469d5 100644 --- a/tools/sdk/include/mbedtls/mbedtls/rsa.h +++ b/tools/sdk/include/mbedtls/mbedtls/rsa.h @@ -99,7 +99,7 @@ typedef struct mbedtls_mpi Vf; /*!< cached un-blinding value */ int padding; /*!< MBEDTLS_RSA_PKCS_V15 for 1.5 padding and - RSA_PKCS_v21 for OAEP/PSS */ + MBEDTLS_RSA_PKCS_v21 for OAEP/PSS */ int hash_id; /*!< Hash identifier of mbedtls_md_type_t as specified in the mbedtls_md.h header file for the EME-OAEP and EMSA-PSS @@ -206,7 +206,7 @@ int mbedtls_rsa_check_pub_priv( const mbedtls_rsa_context *pub, const mbedtls_rs * \return 0 if successful, or an MBEDTLS_ERR_RSA_XXX error code * * \note This function does NOT take care of message - * padding. Also, be sure to set input[0] = 0 or assure that + * padding. Also, be sure to set input[0] = 0 or ensure that * input is smaller than N. * * \note The input and output buffers must be large @@ -329,9 +329,15 @@ int mbedtls_rsa_rsaes_oaep_encrypt( mbedtls_rsa_context *ctx, * * \return 0 if successful, or an MBEDTLS_ERR_RSA_XXX error code * - * \note The output buffer must be as large as the size - * of ctx->N (eg. 128 bytes if RSA-1024 is used) otherwise - * an error is thrown. + * \note The output buffer length \c output_max_len should be + * as large as the size ctx->len of ctx->N (eg. 128 bytes + * if RSA-1024 is used) to be able to hold an arbitrary + * decrypted message. If it is not large enough to hold + * the decryption of the particular ciphertext provided, + * the function will return MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE. + * + * \note The input buffer must be as large as the size + * of ctx->N (eg. 128 bytes if RSA-1024 is used). */ int mbedtls_rsa_pkcs1_decrypt( mbedtls_rsa_context *ctx, int (*f_rng)(void *, unsigned char *, size_t), @@ -355,9 +361,15 @@ int mbedtls_rsa_pkcs1_decrypt( mbedtls_rsa_context *ctx, * * \return 0 if successful, or an MBEDTLS_ERR_RSA_XXX error code * - * \note The output buffer must be as large as the size - * of ctx->N (eg. 128 bytes if RSA-1024 is used) otherwise - * an error is thrown. + * \note The output buffer length \c output_max_len should be + * as large as the size ctx->len of ctx->N (eg. 128 bytes + * if RSA-1024 is used) to be able to hold an arbitrary + * decrypted message. If it is not large enough to hold + * the decryption of the particular ciphertext provided, + * the function will return MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE. + * + * \note The input buffer must be as large as the size + * of ctx->N (eg. 128 bytes if RSA-1024 is used). */ int mbedtls_rsa_rsaes_pkcs1_v15_decrypt( mbedtls_rsa_context *ctx, int (*f_rng)(void *, unsigned char *, size_t), @@ -383,9 +395,15 @@ int mbedtls_rsa_rsaes_pkcs1_v15_decrypt( mbedtls_rsa_context *ctx, * * \return 0 if successful, or an MBEDTLS_ERR_RSA_XXX error code * - * \note The output buffer must be as large as the size - * of ctx->N (eg. 128 bytes if RSA-1024 is used) otherwise - * an error is thrown. + * \note The output buffer length \c output_max_len should be + * as large as the size ctx->len of ctx->N (eg. 128 bytes + * if RSA-1024 is used) to be able to hold an arbitrary + * decrypted message. If it is not large enough to hold + * the decryption of the particular ciphertext provided, + * the function will return MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE. + * + * \note The input buffer must be as large as the size + * of ctx->N (eg. 128 bytes if RSA-1024 is used). */ int mbedtls_rsa_rsaes_oaep_decrypt( mbedtls_rsa_context *ctx, int (*f_rng)(void *, unsigned char *, size_t), diff --git a/tools/sdk/include/mbedtls/mbedtls/ssl.h b/tools/sdk/include/mbedtls/mbedtls/ssl.h index 7e1a17c8..cc000700 100644 --- a/tools/sdk/include/mbedtls/mbedtls/ssl.h +++ b/tools/sdk/include/mbedtls/mbedtls/ssl.h @@ -29,7 +29,6 @@ #include MBEDTLS_CONFIG_FILE #endif -#include "platform.h" #include "bignum.h" #include "ecp.h" @@ -53,7 +52,7 @@ #endif #if defined(MBEDTLS_HAVE_TIME) -#include +#include "mbedtls/platform_time.h" #endif /* @@ -108,6 +107,8 @@ #define MBEDTLS_ERR_SSL_TIMEOUT -0x6800 /**< The operation timed out. */ #define MBEDTLS_ERR_SSL_CLIENT_RECONNECT -0x6780 /**< The client initiated a reconnect from the same port. */ #define MBEDTLS_ERR_SSL_UNEXPECTED_RECORD -0x6700 /**< Record header looks valid but is not expected. */ +#define MBEDTLS_ERR_SSL_NON_FATAL -0x6680 /**< The alert message received indicates a non-fatal error. */ +#define MBEDTLS_ERR_SSL_INVALID_VERIFY_HASH -0x6600 /**< Couldn't set the hash for verifying CertificateVerify */ /* * Various constants @@ -184,6 +185,9 @@ #define MBEDTLS_SSL_PRESET_DEFAULT 0 #define MBEDTLS_SSL_PRESET_SUITEB 2 +#define MBEDTLS_SSL_CERT_REQ_CA_LIST_ENABLED 1 +#define MBEDTLS_SSL_CERT_REQ_CA_LIST_DISABLED 0 + /* * Default range for DTLS retransmission timer value, in milliseconds. * RFC 6347 4.2.4.1 says from 1 second to 60 seconds. @@ -530,6 +534,7 @@ typedef struct mbedtls_ssl_config mbedtls_ssl_config; /* Defined in ssl_internal.h */ typedef struct mbedtls_ssl_transform mbedtls_ssl_transform; typedef struct mbedtls_ssl_handshake_params mbedtls_ssl_handshake_params; +typedef struct mbedtls_ssl_sig_hash_set_t mbedtls_ssl_sig_hash_set_t; #if defined(MBEDTLS_X509_CRT_PARSE_C) typedef struct mbedtls_ssl_key_cert mbedtls_ssl_key_cert; #endif @@ -748,6 +753,10 @@ struct mbedtls_ssl_config #if defined(MBEDTLS_SSL_FALLBACK_SCSV) && defined(MBEDTLS_SSL_CLI_C) unsigned int fallback : 1; /*!< is this a fallback? */ #endif +#if defined(MBEDTLS_SSL_SRV_C) + unsigned int cert_req_ca_list : 1; /*!< enable sending CA list in + Certificate Request messages? */ +#endif }; @@ -836,7 +845,9 @@ struct mbedtls_ssl_context size_t in_hslen; /*!< current handshake message length, including the handshake header */ int nb_zero; /*!< # of 0-length encrypted messages */ - int record_read; /*!< record is already present */ + + int keep_current_message; /*!< drop or reuse current message + on next call to record layer? */ /* * Record layer (outgoing data) @@ -1041,7 +1052,7 @@ void mbedtls_ssl_conf_authmode( mbedtls_ssl_config *conf, int authmode ); * * If set, the verify callback is called for each * certificate in the chain. For implementation - * information, please see \c x509parse_verify() + * information, please see \c mbedtls_x509_crt_verify() * * \param conf SSL configuration * \param f_vrfy verification function @@ -1106,9 +1117,10 @@ void mbedtls_ssl_conf_dbg( mbedtls_ssl_config *conf, * \c mbedtls_ssl_recv_t and \c mbedtls_ssl_recv_timeout_t for * the conventions those callbacks must follow. * - * \note On some platforms, net.c provides \c mbedtls_net_send(), - * \c mbedtls_net_recv() and \c mbedtls_net_recv_timeout() - * that are suitable to be used here. + * \note On some platforms, net_sockets.c provides + * \c mbedtls_net_send(), \c mbedtls_net_recv() and + * \c mbedtls_net_recv_timeout() that are suitable to be used + * here. */ void mbedtls_ssl_set_bio( mbedtls_ssl_context *ssl, void *p_bio, @@ -1144,7 +1156,7 @@ void mbedtls_ssl_conf_read_timeout( mbedtls_ssl_config *conf, uint32_t timeout ) * * \note See the documentation of \c mbedtls_ssl_set_timer_t and * \c mbedtls_ssl_get_timer_t for the conventions this pair of - * callbacks must fallow. + * callbacks must follow. * * \note On some platforms, timing.c provides * \c mbedtls_timing_set_delay() and @@ -2029,6 +2041,20 @@ void mbedtls_ssl_conf_extended_master_secret( mbedtls_ssl_config *conf, char ems void mbedtls_ssl_conf_arc4_support( mbedtls_ssl_config *conf, char arc4 ); #endif /* MBEDTLS_ARC4_C */ +#if defined(MBEDTLS_SSL_SRV_C) +/** + * \brief Whether to send a list of acceptable CAs in + * CertificateRequest messages. + * (Default: do send) + * + * \param conf SSL configuration + * \param cert_req_ca_list MBEDTLS_SSL_CERT_REQ_CA_LIST_ENABLED or + * MBEDTLS_SSL_CERT_REQ_CA_LIST_DISABLED + */ +void mbedtls_ssl_conf_cert_req_ca_list( mbedtls_ssl_config *conf, + char cert_req_ca_list ); +#endif /* MBEDTLS_SSL_SRV_C */ + #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) /** * \brief Set the maximum fragment length to emit and/or negotiate @@ -2181,7 +2207,7 @@ void mbedtls_ssl_conf_renegotiation_enforced( mbedtls_ssl_config *conf, int max_ /** * \brief Set record counter threshold for periodic renegotiation. - * (Default: 2^64 - 256.) + * (Default: 2^48 - 1) * * Renegotiation is automatically triggered when a record * counter (outgoing or ingoing) crosses the defined @@ -2192,9 +2218,17 @@ void mbedtls_ssl_conf_renegotiation_enforced( mbedtls_ssl_config *conf, int max_ * Lower values can be used to enforce policies such as "keys * must be refreshed every N packets with cipher X". * + * The renegotiation period can be disabled by setting + * conf->disable_renegotiation to + * MBEDTLS_SSL_RENEGOTIATION_DISABLED. + * + * \note When the configured transport is + * MBEDTLS_SSL_TRANSPORT_DATAGRAM the maximum renegotiation + * period is 2^48 - 1, and for MBEDTLS_SSL_TRANSPORT_STREAM, + * the maximum renegotiation period is 2^64 - 1. + * * \param conf SSL configuration * \param period The threshold value: a big-endian 64-bit number. - * Set to 2^64 - 1 to disable periodic renegotiation */ void mbedtls_ssl_conf_renegotiation_period( mbedtls_ssl_config *conf, const unsigned char period[8] ); @@ -2426,7 +2460,7 @@ int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len ) * \param len how many bytes must be written * * \return the number of bytes actually written (may be less than len), - * or MBEDTLS_ERR_SSL_WANT_WRITE of MBEDTLS_ERR_SSL_WANT_READ, + * or MBEDTLS_ERR_SSL_WANT_WRITE or MBEDTLS_ERR_SSL_WANT_READ, * or another negative error code. * * \note If this function returns something other than a positive @@ -2511,7 +2545,6 @@ void mbedtls_ssl_config_init( mbedtls_ssl_config *conf ); * \param transport MBEDTLS_SSL_TRANSPORT_STREAM for TLS, or * MBEDTLS_SSL_TRANSPORT_DATAGRAM for DTLS * \param preset a MBEDTLS_SSL_PRESET_XXX value - * (currently unused). * * \note See \c mbedtls_ssl_conf_transport() for notes on DTLS. * diff --git a/tools/sdk/include/mbedtls/mbedtls/ssl_ciphersuites.h b/tools/sdk/include/mbedtls/mbedtls/ssl_ciphersuites.h index deaaa375..9101d9cc 100644 --- a/tools/sdk/include/mbedtls/mbedtls/ssl_ciphersuites.h +++ b/tools/sdk/include/mbedtls/mbedtls/ssl_ciphersuites.h @@ -260,6 +260,47 @@ typedef enum { #define MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED #endif +/* Key exchanges allowing client certificate requests */ +#if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) +#define MBEDTLS_KEY_EXCHANGE__CERT_REQ_ALLOWED__ENABLED +#endif + +/* Key exchanges involving server signature in ServerKeyExchange */ +#if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) +#define MBEDTLS_KEY_EXCHANGE__WITH_SERVER_SIGNATURE__ENABLED +#endif + +/* Key exchanges using ECDH */ +#if defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) +#define MBEDTLS_KEY_EXCHANGE__SOME__ECDH_ENABLED +#endif + +/* Key exchanges that don't involve ephemeral keys */ +#if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE__SOME__ECDH_ENABLED) +#define MBEDTLS_KEY_EXCHANGE__SOME_NON_PFS__ENABLED +#endif + +/* Key exchanges that involve ephemeral keys */ +#if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) +#define MBEDTLS_KEY_EXCHANGE__SOME_PFS__ENABLED +#endif + /* Key exchanges using a PSK */ #if defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) || \ @@ -268,7 +309,13 @@ typedef enum { #define MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED #endif -/* Key exchanges using a ECDHE */ +/* Key exchanges using DHE */ +#if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) +#define MBEDTLS_KEY_EXCHANGE__SOME__DHE_ENABLED +#endif + +/* Key exchanges using ECDHE */ #if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) @@ -309,11 +356,128 @@ const mbedtls_ssl_ciphersuite_t *mbedtls_ssl_ciphersuite_from_id( int ciphersuit #if defined(MBEDTLS_PK_C) mbedtls_pk_type_t mbedtls_ssl_get_ciphersuite_sig_pk_alg( const mbedtls_ssl_ciphersuite_t *info ); +mbedtls_pk_type_t mbedtls_ssl_get_ciphersuite_sig_alg( const mbedtls_ssl_ciphersuite_t *info ); #endif int mbedtls_ssl_ciphersuite_uses_ec( const mbedtls_ssl_ciphersuite_t *info ); int mbedtls_ssl_ciphersuite_uses_psk( const mbedtls_ssl_ciphersuite_t *info ); +#if defined(MBEDTLS_KEY_EXCHANGE__SOME_PFS__ENABLED) +static inline int mbedtls_ssl_ciphersuite_has_pfs( const mbedtls_ssl_ciphersuite_t *info ) +{ + switch( info->key_exchange ) + { + case MBEDTLS_KEY_EXCHANGE_DHE_RSA: + case MBEDTLS_KEY_EXCHANGE_DHE_PSK: + case MBEDTLS_KEY_EXCHANGE_ECDHE_RSA: + case MBEDTLS_KEY_EXCHANGE_ECDHE_PSK: + case MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA: + case MBEDTLS_KEY_EXCHANGE_ECJPAKE: + return( 1 ); + + default: + return( 0 ); + } +} +#endif /* MBEDTLS_KEY_EXCHANGE__SOME_PFS__ENABLED */ + +#if defined(MBEDTLS_KEY_EXCHANGE__SOME_NON_PFS__ENABLED) +static inline int mbedtls_ssl_ciphersuite_no_pfs( const mbedtls_ssl_ciphersuite_t *info ) +{ + switch( info->key_exchange ) + { + case MBEDTLS_KEY_EXCHANGE_ECDH_RSA: + case MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA: + case MBEDTLS_KEY_EXCHANGE_RSA: + case MBEDTLS_KEY_EXCHANGE_PSK: + case MBEDTLS_KEY_EXCHANGE_RSA_PSK: + return( 1 ); + + default: + return( 0 ); + } +} +#endif /* MBEDTLS_KEY_EXCHANGE__SOME_NON_PFS__ENABLED */ + +#if defined(MBEDTLS_KEY_EXCHANGE__SOME__ECDH_ENABLED) +static inline int mbedtls_ssl_ciphersuite_uses_ecdh( const mbedtls_ssl_ciphersuite_t *info ) +{ + switch( info->key_exchange ) + { + case MBEDTLS_KEY_EXCHANGE_ECDH_RSA: + case MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA: + return( 1 ); + + default: + return( 0 ); + } +} +#endif /* MBEDTLS_KEY_EXCHANGE__SOME__ECDH_ENABLED */ + +static inline int mbedtls_ssl_ciphersuite_cert_req_allowed( const mbedtls_ssl_ciphersuite_t *info ) +{ + switch( info->key_exchange ) + { + case MBEDTLS_KEY_EXCHANGE_RSA: + case MBEDTLS_KEY_EXCHANGE_DHE_RSA: + case MBEDTLS_KEY_EXCHANGE_ECDH_RSA: + case MBEDTLS_KEY_EXCHANGE_ECDHE_RSA: + case MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA: + case MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA: + return( 1 ); + + default: + return( 0 ); + } +} + +#if defined(MBEDTLS_KEY_EXCHANGE__SOME__DHE_ENABLED) +static inline int mbedtls_ssl_ciphersuite_uses_dhe( const mbedtls_ssl_ciphersuite_t *info ) +{ + switch( info->key_exchange ) + { + case MBEDTLS_KEY_EXCHANGE_DHE_RSA: + case MBEDTLS_KEY_EXCHANGE_DHE_PSK: + return( 1 ); + + default: + return( 0 ); + } +} +#endif /* MBEDTLS_KEY_EXCHANGE__SOME__DHE_ENABLED) */ + +#if defined(MBEDTLS_KEY_EXCHANGE__SOME__ECDHE_ENABLED) +static inline int mbedtls_ssl_ciphersuite_uses_ecdhe( const mbedtls_ssl_ciphersuite_t *info ) +{ + switch( info->key_exchange ) + { + case MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA: + case MBEDTLS_KEY_EXCHANGE_ECDHE_RSA: + case MBEDTLS_KEY_EXCHANGE_ECDHE_PSK: + return( 1 ); + + default: + return( 0 ); + } +} +#endif /* MBEDTLS_KEY_EXCHANGE__SOME__ECDHE_ENABLED) */ + +#if defined(MBEDTLS_KEY_EXCHANGE__WITH_SERVER_SIGNATURE__ENABLED) +static inline int mbedtls_ssl_ciphersuite_uses_server_signature( const mbedtls_ssl_ciphersuite_t *info ) +{ + switch( info->key_exchange ) + { + case MBEDTLS_KEY_EXCHANGE_DHE_RSA: + case MBEDTLS_KEY_EXCHANGE_ECDHE_RSA: + case MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA: + return( 1 ); + + default: + return( 0 ); + } +} +#endif /* MBEDTLS_KEY_EXCHANGE__WITH_SERVER_SIGNATURE__ENABLED */ + #ifdef __cplusplus } #endif diff --git a/tools/sdk/include/mbedtls/mbedtls/ssl_internal.h b/tools/sdk/include/mbedtls/mbedtls/ssl_internal.h index d63d7d4e..756360b1 100644 --- a/tools/sdk/include/mbedtls/mbedtls/ssl_internal.h +++ b/tools/sdk/include/mbedtls/mbedtls/ssl_internal.h @@ -157,6 +157,24 @@ extern "C" { #endif +#if defined(MBEDTLS_SSL_PROTO_TLS1_2) && \ + defined(MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED) +/* + * Abstraction for a grid of allowed signature-hash-algorithm pairs. + */ +struct mbedtls_ssl_sig_hash_set_t +{ + /* At the moment, we only need to remember a single suitable + * hash algorithm per signature algorithm. As long as that's + * the case - and we don't need a general lookup function - + * we can implement the sig-hash-set as a map from signatures + * to hash algorithms. */ + mbedtls_md_type_t rsa; + mbedtls_md_type_t ecdsa; +}; +#endif /* MBEDTLS_SSL_PROTO_TLS1_2 && + MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED */ + /* * This structure contains the parameters only needed during handshake. */ @@ -165,8 +183,11 @@ struct mbedtls_ssl_handshake_params /* * Handshake specific crypto variables */ - int sig_alg; /*!< Hash algorithm for signature */ - int verify_sig_alg; /*!< Signature algorithm for verify */ + +#if defined(MBEDTLS_SSL_PROTO_TLS1_2) && \ + defined(MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED) + mbedtls_ssl_sig_hash_set_t hash_algs; /*!< Set of suitable sig-hash pairs */ +#endif #if defined(MBEDTLS_DHM_C) mbedtls_dhm_context dhm_ctx; /*!< DHM key exchange */ #endif @@ -179,7 +200,7 @@ struct mbedtls_ssl_handshake_params unsigned char *ecjpake_cache; /*!< Cache for ClientHello ext */ size_t ecjpake_cache_len; /*!< Length of cached data */ #endif -#endif +#endif /* MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) || \ defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) const mbedtls_ecp_curve_info **curves; /*!< Supported elliptic curves */ @@ -195,7 +216,7 @@ struct mbedtls_ssl_handshake_params mbedtls_ssl_key_cert *sni_key_cert; /*!< key/cert list from SNI */ mbedtls_x509_crt *sni_ca_chain; /*!< trusted CAs from SNI callback */ mbedtls_x509_crl *sni_ca_crl; /*!< trusted CAs CRLs from SNI */ -#endif +#endif /* MBEDTLS_SSL_SERVER_NAME_INDICATION */ #endif /* MBEDTLS_X509_CRT_PARSE_C */ #if defined(MBEDTLS_SSL_PROTO_DTLS) unsigned int out_msg_seq; /*!< Outgoing handshake sequence number */ @@ -218,7 +239,7 @@ struct mbedtls_ssl_handshake_params resending messages */ unsigned char alt_out_ctr[8]; /*!< Alternative record epoch/counter for resending messages */ -#endif +#endif /* MBEDTLS_SSL_PROTO_DTLS */ /* * Checksum contexts @@ -329,6 +350,28 @@ struct mbedtls_ssl_flight_item }; #endif /* MBEDTLS_SSL_PROTO_DTLS */ +#if defined(MBEDTLS_SSL_PROTO_TLS1_2) && \ + defined(MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED) + +/* Find an entry in a signature-hash set matching a given hash algorithm. */ +mbedtls_md_type_t mbedtls_ssl_sig_hash_set_find( mbedtls_ssl_sig_hash_set_t *set, + mbedtls_pk_type_t sig_alg ); +/* Add a signature-hash-pair to a signature-hash set */ +void mbedtls_ssl_sig_hash_set_add( mbedtls_ssl_sig_hash_set_t *set, + mbedtls_pk_type_t sig_alg, + mbedtls_md_type_t md_alg ); +/* Allow exactly one hash algorithm for each signature. */ +void mbedtls_ssl_sig_hash_set_const_hash( mbedtls_ssl_sig_hash_set_t *set, + mbedtls_md_type_t md_alg ); + +/* Setup an empty signature-hash set */ +static inline void mbedtls_ssl_sig_hash_set_init( mbedtls_ssl_sig_hash_set_t *set ) +{ + mbedtls_ssl_sig_hash_set_const_hash( set, MBEDTLS_MD_NONE ); +} + +#endif /* MBEDTLS_SSL_PROTO_TLS1_2) && + MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED */ /** * \brief Free referenced items in an SSL transform context and clear @@ -355,6 +398,84 @@ int mbedtls_ssl_send_fatal_handshake_failure( mbedtls_ssl_context *ssl ); void mbedtls_ssl_reset_checksum( mbedtls_ssl_context *ssl ); int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ); +int mbedtls_ssl_read_record_layer( mbedtls_ssl_context *ssl ); +int mbedtls_ssl_handle_message_type( mbedtls_ssl_context *ssl ); +int mbedtls_ssl_prepare_handshake_record( mbedtls_ssl_context *ssl ); +void mbedtls_ssl_update_handshake_status( mbedtls_ssl_context *ssl ); + +/** + * \brief Update record layer + * + * This function roughly separates the implementation + * of the logic of (D)TLS from the implementation + * of the secure transport. + * + * \param ssl SSL context to use + * + * \return 0 or non-zero error code. + * + * \note A clarification on what is called 'record layer' here + * is in order, as many sensible definitions are possible: + * + * The record layer takes as input an untrusted underlying + * transport (stream or datagram) and transforms it into + * a serially multiplexed, secure transport, which + * conceptually provides the following: + * + * (1) Three datagram based, content-agnostic transports + * for handshake, alert and CCS messages. + * (2) One stream- or datagram-based transport + * for application data. + * (3) Functionality for changing the underlying transform + * securing the contents. + * + * The interface to this functionality is given as follows: + * + * a Updating + * [Currently implemented by mbedtls_ssl_read_record] + * + * Check if and on which of the four 'ports' data is pending: + * Nothing, a controlling datagram of type (1), or application + * data (2). In any case data is present, internal buffers + * provide access to the data for the user to process it. + * Consumption of type (1) datagrams is done automatically + * on the next update, invalidating that the internal buffers + * for previous datagrams, while consumption of application + * data (2) is user-controlled. + * + * b Reading of application data + * [Currently manual adaption of ssl->in_offt pointer] + * + * As mentioned in the last paragraph, consumption of data + * is different from the automatic consumption of control + * datagrams (1) because application data is treated as a stream. + * + * c Tracking availability of application data + * [Currently manually through decreasing ssl->in_msglen] + * + * For efficiency and to retain datagram semantics for + * application data in case of DTLS, the record layer + * provides functionality for checking how much application + * data is still available in the internal buffer. + * + * d Changing the transformation securing the communication. + * + * Given an opaque implementation of the record layer in the + * above sense, it should be possible to implement the logic + * of (D)TLS on top of it without the need to know anything + * about the record layer's internals. This is done e.g. + * in all the handshake handling functions, and in the + * application data reading function mbedtls_ssl_read. + * + * \note The above tries to give a conceptual picture of the + * record layer, but the current implementation deviates + * from it in some places. For example, our implementation of + * the update functionality through mbedtls_ssl_read_record + * discards datagrams depending on the current state, which + * wouldn't fall under the record layer's responsibility + * following the above definition. + * + */ int mbedtls_ssl_read_record( mbedtls_ssl_context *ssl ); int mbedtls_ssl_fetch_input( mbedtls_ssl_context *ssl, size_t nb_want ); @@ -379,11 +500,13 @@ int mbedtls_ssl_psk_derive_premaster( mbedtls_ssl_context *ssl, mbedtls_key_exch #if defined(MBEDTLS_PK_C) unsigned char mbedtls_ssl_sig_from_pk( mbedtls_pk_context *pk ); +unsigned char mbedtls_ssl_sig_from_pk_alg( mbedtls_pk_type_t type ); mbedtls_pk_type_t mbedtls_ssl_pk_alg_from_sig( unsigned char sig ); #endif mbedtls_md_type_t mbedtls_ssl_md_alg_from_hash( unsigned char hash ); unsigned char mbedtls_ssl_hash_from_md_alg( int md ); +int mbedtls_ssl_set_calc_verify_md( mbedtls_ssl_context *ssl, int md ); #if defined(MBEDTLS_ECP_C) int mbedtls_ssl_check_curve( const mbedtls_ssl_context *ssl, mbedtls_ecp_group_id grp_id ); diff --git a/tools/sdk/include/mbedtls/mbedtls/version.h b/tools/sdk/include/mbedtls/mbedtls/version.h index b40aa510..3b209a6b 100644 --- a/tools/sdk/include/mbedtls/mbedtls/version.h +++ b/tools/sdk/include/mbedtls/mbedtls/version.h @@ -38,7 +38,7 @@ * Major, Minor, Patchlevel */ #define MBEDTLS_VERSION_MAJOR 2 -#define MBEDTLS_VERSION_MINOR 3 +#define MBEDTLS_VERSION_MINOR 6 #define MBEDTLS_VERSION_PATCH 0 /** @@ -46,9 +46,9 @@ * MMNNPP00 * Major version | Minor version | Patch version */ -#define MBEDTLS_VERSION_NUMBER 0x02030000 -#define MBEDTLS_VERSION_STRING "2.3.0" -#define MBEDTLS_VERSION_STRING_FULL "mbed TLS 2.3.0" +#define MBEDTLS_VERSION_NUMBER 0x02060000 +#define MBEDTLS_VERSION_STRING "2.6.0" +#define MBEDTLS_VERSION_STRING_FULL "mbed TLS 2.6.0" #if defined(MBEDTLS_VERSION_C) diff --git a/tools/sdk/include/mbedtls/mbedtls/x509.h b/tools/sdk/include/mbedtls/mbedtls/x509.h index 54dac166..d7e318df 100644 --- a/tools/sdk/include/mbedtls/mbedtls/x509.h +++ b/tools/sdk/include/mbedtls/mbedtls/x509.h @@ -76,6 +76,7 @@ #define MBEDTLS_ERR_X509_ALLOC_FAILED -0x2880 /**< Allocation of memory failed. */ #define MBEDTLS_ERR_X509_FILE_IO_ERROR -0x2900 /**< Read/write of file failed. */ #define MBEDTLS_ERR_X509_BUFFER_TOO_SMALL -0x2980 /**< Destination buffer is too small. */ +#define MBEDTLS_ERR_X509_FATAL_ERROR -0x3000 /**< A fatal error occured, eg the chain is too long or the vrfy callback failed. */ /* \} name */ /** @@ -157,7 +158,7 @@ #define MBEDTLS_X509_EXT_INIHIBIT_ANYPOLICY (1 << 13) #define MBEDTLS_X509_EXT_FRESHEST_CRL (1 << 14) -#define MBEDTLS_X509_EXT_NS_CERT_TYPE (1 << 16) /* Parsed (and then ?) */ +#define MBEDTLS_X509_EXT_NS_CERT_TYPE (1 << 16) /* * Storage format identifiers @@ -246,12 +247,12 @@ int mbedtls_x509_serial_gets( char *buf, size_t size, const mbedtls_x509_buf *se * \note Intended usage is "if( is_past( valid_to ) ) ERROR". * Hence the return value of 1 if on internal errors. * - * \param time mbedtls_x509_time to check + * \param to mbedtls_x509_time to check * * \return 1 if the given time is in the past or an error occured, * 0 otherwise. */ -int mbedtls_x509_time_is_past( const mbedtls_x509_time *time ); +int mbedtls_x509_time_is_past( const mbedtls_x509_time *to ); /** * \brief Check a given mbedtls_x509_time against the system time @@ -260,12 +261,12 @@ int mbedtls_x509_time_is_past( const mbedtls_x509_time *time ); * \note Intended usage is "if( is_future( valid_from ) ) ERROR". * Hence the return value of 1 if on internal errors. * - * \param time mbedtls_x509_time to check + * \param from mbedtls_x509_time to check * * \return 1 if the given time is in the future or an error occured, * 0 otherwise. */ -int mbedtls_x509_time_is_future( const mbedtls_x509_time *time ); +int mbedtls_x509_time_is_future( const mbedtls_x509_time *from ); /** * \brief Checkup routine @@ -294,7 +295,7 @@ int mbedtls_x509_get_sig_alg( const mbedtls_x509_buf *sig_oid, const mbedtls_x50 mbedtls_md_type_t *md_alg, mbedtls_pk_type_t *pk_alg, void **sig_opts ); int mbedtls_x509_get_time( unsigned char **p, const unsigned char *end, - mbedtls_x509_time *time ); + mbedtls_x509_time *t ); int mbedtls_x509_get_serial( unsigned char **p, const unsigned char *end, mbedtls_x509_buf *serial ); int mbedtls_x509_get_ext( unsigned char **p, const unsigned char *end, diff --git a/tools/sdk/include/mbedtls/mbedtls/x509_crt.h b/tools/sdk/include/mbedtls/mbedtls/x509_crt.h index 41b6bfe5..06166d8b 100644 --- a/tools/sdk/include/mbedtls/mbedtls/x509_crt.h +++ b/tools/sdk/include/mbedtls/mbedtls/x509_crt.h @@ -120,6 +120,10 @@ mbedtls_x509_crt_profile; #define MBEDTLS_X509_RFC5280_MAX_SERIAL_LEN 32 #define MBEDTLS_X509_RFC5280_UTC_TIME_LEN 15 +#if !defined( MBEDTLS_X509_MAX_FILE_PATH_LEN ) +#define MBEDTLS_X509_MAX_FILE_PATH_LEN 512 +#endif + /** * Container for writing a certificate (CRT) */ @@ -263,7 +267,13 @@ int mbedtls_x509_crt_verify_info( char *buf, size_t size, const char *prefix, * * All flags left after returning from the callback * are also returned to the application. The function should - * return 0 for anything but a fatal error. + * return 0 for anything (including invalid certificates) + * other than fatal error, as a non-zero return code + * immediately aborts the verification process. For fatal + * errors, a specific error code should be used (different + * from MBEDTLS_ERR_X509_CERT_VERIFY_FAILED which should not + * be returned at this point), or MBEDTLS_ERR_X509_FATAL_ERROR + * can be used if no better code is available. * * \note In case verification failed, the results can be displayed * using \c mbedtls_x509_crt_verify_info() @@ -285,12 +295,13 @@ int mbedtls_x509_crt_verify_info( char *buf, size_t size, const char *prefix, * \param f_vrfy verification function * \param p_vrfy verification parameter * - * \return 0 if successful or MBEDTLS_ERR_X509_CERT_VERIFY_FAILED - * in which case *flags will have one or more - * MBEDTLS_X509_BADCERT_XXX or MBEDTLS_X509_BADCRL_XXX flags - * set, - * or another error in case of a fatal error encountered - * during the verification process. + * \return 0 (and flags set to 0) if the chain was verified and valid, + * MBEDTLS_ERR_X509_CERT_VERIFY_FAILED if the chain was verified + * but found to be invalid, in which case *flags will have one + * or more MBEDTLS_X509_BADCERT_XXX or MBEDTLS_X509_BADCRL_XXX + * flags set, or another error (and flags set to 0xffffffff) + * in case of a fatal error encountered during the + * verification process. */ int mbedtls_x509_crt_verify( mbedtls_x509_crt *crt, mbedtls_x509_crt *trust_ca, diff --git a/tools/sdk/include/mbedtls/mbedtls/x509_csr.h b/tools/sdk/include/mbedtls/mbedtls/x509_csr.h index 7a9c2e05..fe9843cb 100644 --- a/tools/sdk/include/mbedtls/mbedtls/x509_csr.h +++ b/tools/sdk/include/mbedtls/mbedtls/x509_csr.h @@ -282,7 +282,7 @@ int mbedtls_x509write_csr_der( mbedtls_x509write_csr *ctx, unsigned char *buf, s * * \note f_rng may be NULL if RSA is used for signature and the * signature is made offline (otherwise f_rng is desirable - * for couermeasures against timing attacks). + * for countermeasures against timing attacks). * ECDSA signatures always require a non-NULL f_rng. */ int mbedtls_x509write_csr_pem( mbedtls_x509write_csr *ctx, unsigned char *buf, size_t size, diff --git a/tools/sdk/include/mbedtls_port/aes_alt.h b/tools/sdk/include/mbedtls_port/aes_alt.h index d4da6ca8..a4d0b70c 100644 --- a/tools/sdk/include/mbedtls_port/aes_alt.h +++ b/tools/sdk/include/mbedtls_port/aes_alt.h @@ -34,8 +34,8 @@ typedef esp_aes_context mbedtls_aes_context; #define mbedtls_aes_init esp_aes_init #define mbedtls_aes_free esp_aes_free -#define mbedtls_aes_setkey_enc esp_aes_setkey_enc -#define mbedtls_aes_setkey_dec esp_aes_setkey_dec +#define mbedtls_aes_setkey_enc esp_aes_setkey +#define mbedtls_aes_setkey_dec esp_aes_setkey #define mbedtls_aes_crypt_ecb esp_aes_crypt_ecb #if defined(MBEDTLS_CIPHER_MODE_CBC) #define mbedtls_aes_crypt_cbc esp_aes_crypt_cbc diff --git a/tools/sdk/include/mbedtls_port/mbedtls/config.h b/tools/sdk/include/mbedtls_port/mbedtls/config.h new file mode 100644 index 00000000..cf3d904d --- /dev/null +++ b/tools/sdk/include/mbedtls_port/mbedtls/config.h @@ -0,0 +1,9 @@ +/* This shim header is added so that any application code + which includes "mbedtls/config.h" directly gets the correct + config. */ +#pragma once +#if !defined(MBEDTLS_CONFIG_FILE) +#include_next "mbedtls/config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif diff --git a/tools/sdk/include/mbedtls_port/mbedtls/esp_config.h b/tools/sdk/include/mbedtls_port/mbedtls/esp_config.h index 447fc302..c81bf1a0 100644 --- a/tools/sdk/include/mbedtls_port/mbedtls/esp_config.h +++ b/tools/sdk/include/mbedtls_port/mbedtls/esp_config.h @@ -430,7 +430,9 @@ * * Uncomment this macro to remove RC4 ciphersuites by default. */ +#ifdef CONFIG_MBEDTLS_RC4_ENABLED #define MBEDTLS_REMOVE_ARC4_CIPHERSUITES +#endif /** * \def MBEDTLS_ECP_DP_SECP192R1_ENABLED @@ -440,18 +442,42 @@ * * Comment macros to disable the curve and functions for it */ +#ifdef CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED #define MBEDTLS_ECP_DP_SECP192R1_ENABLED +#endif +#ifdef CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED #define MBEDTLS_ECP_DP_SECP224R1_ENABLED +#endif +#ifdef CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED #define MBEDTLS_ECP_DP_SECP256R1_ENABLED +#endif +#ifdef CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED #define MBEDTLS_ECP_DP_SECP384R1_ENABLED +#endif +#ifdef CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED #define MBEDTLS_ECP_DP_SECP521R1_ENABLED +#endif +#ifdef CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED #define MBEDTLS_ECP_DP_SECP192K1_ENABLED +#endif +#ifdef CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED #define MBEDTLS_ECP_DP_SECP224K1_ENABLED +#endif +#ifdef CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED #define MBEDTLS_ECP_DP_SECP256K1_ENABLED +#endif +#ifdef CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED #define MBEDTLS_ECP_DP_BP256R1_ENABLED +#endif +#ifdef CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED #define MBEDTLS_ECP_DP_BP384R1_ENABLED +#endif +#ifdef CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED #define MBEDTLS_ECP_DP_BP512R1_ENABLED +#endif +#ifdef CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED #define MBEDTLS_ECP_DP_CURVE25519_ENABLED +#endif /** * \def MBEDTLS_ECP_NIST_OPTIM @@ -462,7 +488,9 @@ * * Comment this macro to disable NIST curves optimisation. */ +#ifdef CONFIG_MBEDTLS_ECP_NIST_OPTIM #define MBEDTLS_ECP_NIST_OPTIM +#endif /** * \def MBEDTLS_ECDSA_DETERMINISTIC @@ -498,7 +526,9 @@ * MBEDTLS_TLS_PSK_WITH_3DES_EDE_CBC_SHA * MBEDTLS_TLS_PSK_WITH_RC4_128_SHA */ +#ifdef CONFIG_MBEDTLS_KEY_EXCHANGE_PSK #define MBEDTLS_KEY_EXCHANGE_PSK_ENABLED +#endif /** * \def MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED @@ -522,7 +552,9 @@ * MBEDTLS_TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA * MBEDTLS_TLS_DHE_PSK_WITH_RC4_128_SHA */ +#ifdef CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_PSK #define MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED +#endif /** * \def MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED @@ -542,7 +574,9 @@ * MBEDTLS_TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA * MBEDTLS_TLS_ECDHE_PSK_WITH_RC4_128_SHA */ +#ifdef CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_PSK #define MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED +#endif /** * \def MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED @@ -567,7 +601,9 @@ * MBEDTLS_TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA * MBEDTLS_TLS_RSA_PSK_WITH_RC4_128_SHA */ +#ifdef CONFIG_MBEDTLS_KEY_EXCHANGE_RSA_PSK #define MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED +#endif /** * \def MBEDTLS_KEY_EXCHANGE_RSA_ENABLED @@ -595,7 +631,9 @@ * MBEDTLS_TLS_RSA_WITH_RC4_128_SHA * MBEDTLS_TLS_RSA_WITH_RC4_128_MD5 */ +#ifdef CONFIG_MBEDTLS_KEY_EXCHANGE_RSA #define MBEDTLS_KEY_EXCHANGE_RSA_ENABLED +#endif /** * \def MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED @@ -621,7 +659,9 @@ * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA * MBEDTLS_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA */ +#ifdef CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA #define MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED +#endif /** * \def MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED @@ -646,7 +686,9 @@ * MBEDTLS_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA * MBEDTLS_TLS_ECDHE_RSA_WITH_RC4_128_SHA */ +#ifdef CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA #define MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED +#endif /** * \def MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED @@ -670,7 +712,9 @@ * MBEDTLS_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA * MBEDTLS_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA */ +#ifdef CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA #define MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED +#endif /** * \def MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED @@ -694,7 +738,9 @@ * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 */ +#ifdef CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA #define MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED +#endif /** * \def MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED @@ -718,7 +764,9 @@ * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 */ +#ifdef CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA #define MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED +#endif /** * \def MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED @@ -971,7 +1019,9 @@ * * Comment this macro to disable support for Encrypt-then-MAC */ +#ifdef CONFIG_MBEDTLS_TLS_ENABLED #define MBEDTLS_SSL_ENCRYPT_THEN_MAC +#endif /** \def MBEDTLS_SSL_EXTENDED_MASTER_SECRET * @@ -989,7 +1039,9 @@ * * Comment this macro to disable support for Extended Master Secret. */ +#ifdef CONFIG_MBEDTLS_TLS_ENABLED #define MBEDTLS_SSL_EXTENDED_MASTER_SECRET +#endif /** * \def MBEDTLS_SSL_FALLBACK_SCSV @@ -1028,7 +1080,9 @@ * * Comment this macro to disable 1/n-1 record splitting. */ +#if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) #define MBEDTLS_SSL_CBC_RECORD_SPLITTING +#endif /** * \def MBEDTLS_SSL_RENEGOTIATION @@ -1043,7 +1097,9 @@ * * Comment this to disable support for renegotiation. */ +#ifdef CONFIG_MBEDTLS_SSL_RENEGOTIATION #define MBEDTLS_SSL_RENEGOTIATION +#endif /** * \def MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO @@ -1084,7 +1140,9 @@ * * Comment this macro to disable support for SSL 3.0 */ +#ifdef CONFIG_MBEDTLS_SSL_PROTO_SSL3 #define MBEDTLS_SSL_PROTO_SSL3 +#endif /** * \def MBEDTLS_SSL_PROTO_TLS1 @@ -1096,7 +1154,9 @@ * * Comment this macro to disable support for TLS 1.0 */ +#ifdef CONFIG_MBEDTLS_SSL_PROTO_TLS1 #define MBEDTLS_SSL_PROTO_TLS1 +#endif /** * \def MBEDTLS_SSL_PROTO_TLS1_1 @@ -1108,7 +1168,9 @@ * * Comment this macro to disable support for TLS 1.1 / DTLS 1.0 */ +#ifdef CONFIG_MBEDTLS_SSL_PROTO_TLS1_1 #define MBEDTLS_SSL_PROTO_TLS1_1 +#endif /** * \def MBEDTLS_SSL_PROTO_TLS1_2 @@ -1120,7 +1182,9 @@ * * Comment this macro to disable support for TLS 1.2 / DTLS 1.2 */ +#ifdef CONFIG_MBEDTLS_SSL_PROTO_TLS1_2 #define MBEDTLS_SSL_PROTO_TLS1_2 +#endif /** * \def MBEDTLS_SSL_PROTO_DTLS @@ -1135,7 +1199,9 @@ * * Comment this macro to disable support for DTLS */ +#ifdef CONFIG_MBEDTLS_SSL_PROTO_DTLS #define MBEDTLS_SSL_PROTO_DTLS +#endif /** * \def MBEDTLS_SSL_ALPN @@ -1144,7 +1210,9 @@ * * Comment this macro to disable support for ALPN. */ +#ifdef CONFIG_MBEDTLS_SSL_ALPN #define MBEDTLS_SSL_ALPN +#endif /** * \def MBEDTLS_SSL_DTLS_ANTI_REPLAY @@ -1159,7 +1227,9 @@ * * Comment this to disable anti-replay in DTLS. */ +#ifdef CONFIG_MBEDTLS_SSL_PROTO_DTLS #define MBEDTLS_SSL_DTLS_ANTI_REPLAY +#endif /** * \def MBEDTLS_SSL_DTLS_HELLO_VERIFY @@ -1177,7 +1247,9 @@ * * Comment this to disable support for HelloVerifyRequest. */ +#ifdef CONFIG_MBEDTLS_SSL_PROTO_DTLS #define MBEDTLS_SSL_DTLS_HELLO_VERIFY +#endif /** * \def MBEDTLS_SSL_DTLS_CLIENT_PORT_REUSE @@ -1193,7 +1265,9 @@ * * Comment this to disable support for clients reusing the source port. */ +#ifdef CONFIG_MBEDTLS_SSL_PROTO_DTLS #define MBEDTLS_SSL_DTLS_CLIENT_PORT_REUSE +#endif /** * \def MBEDTLS_SSL_DTLS_BADMAC_LIMIT @@ -1204,7 +1278,9 @@ * * Requires: MBEDTLS_SSL_PROTO_DTLS */ +#ifdef CONFIG_MBEDTLS_SSL_PROTO_DTLS #define MBEDTLS_SSL_DTLS_BADMAC_LIMIT +#endif /** * \def MBEDTLS_SSL_SESSION_TICKETS @@ -1218,7 +1294,9 @@ * * Comment this macro to disable support for SSL session tickets */ +#ifdef CONFIG_MBEDTLS_SSL_SESSION_TICKETS #define MBEDTLS_SSL_SESSION_TICKETS +#endif /** * \def MBEDTLS_SSL_EXPORT_KEYS @@ -1461,7 +1539,9 @@ * * PEM_PARSE uses AES for decrypting encrypted keys. */ +#ifdef CONFIG_MBEDTLS_AES_C #define MBEDTLS_AES_C +#endif /** * \def MBEDTLS_ARC4_C @@ -1484,7 +1564,9 @@ * MBEDTLS_TLS_RSA_PSK_WITH_RC4_128_SHA * MBEDTLS_TLS_PSK_WITH_RC4_128_SHA */ +#if defined(CONFIG_MBEDTLS_RC4_ENABLED_NO_DEFAULT) || defined(CONFIG_MBEDTLS_RC4_ENABLED) #define MBEDTLS_ARC4_C +#endif /** * \def MBEDTLS_ASN1_PARSE_C @@ -1549,7 +1631,9 @@ * * Module: library/blowfish.c */ +#ifdef CONFIG_MBEDTLS_BLOWFISH_C #define MBEDTLS_BLOWFISH_C +#endif /** * \def MBEDTLS_CAMELLIA_C @@ -1604,7 +1688,9 @@ * MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 * MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 */ +#ifdef CONFIG_MBEDTLS_CAMELLIA_C #define MBEDTLS_CAMELLIA_C +#endif /** * \def MBEDTLS_CCM_C @@ -1618,7 +1704,9 @@ * This module enables the AES-CCM ciphersuites, if other requisites are * enabled as well. */ +#ifdef CONFIG_MBEDTLS_CCM_C #define MBEDTLS_CCM_C +#endif /** * \def MBEDTLS_CERTS_C @@ -1698,7 +1786,9 @@ * * PEM_PARSE uses DES/3DES for decrypting encrypted keys. */ +#ifdef CONFIG_MBEDTLS_DES_C #define MBEDTLS_DES_C +#endif /** * \def MBEDTLS_DHM_C @@ -1728,7 +1818,9 @@ * * Requires: MBEDTLS_ECP_C */ +#ifdef CONFIG_MBEDTLS_ECDH_C #define MBEDTLS_ECDH_C +#endif /** * \def MBEDTLS_ECDSA_C @@ -1743,7 +1835,9 @@ * * Requires: MBEDTLS_ECP_C, MBEDTLS_ASN1_WRITE_C, MBEDTLS_ASN1_PARSE_C */ +#ifdef CONFIG_MBEDTLS_ECDSA_C #define MBEDTLS_ECDSA_C +#endif /** * \def MBEDTLS_ECJPAKE_C @@ -1776,7 +1870,9 @@ * * Requires: MBEDTLS_BIGNUM_C and at least one MBEDTLS_ECP_DP_XXX_ENABLED */ +#ifdef CONFIG_MBEDTLS_ECP_C #define MBEDTLS_ECP_C +#endif /** * \def MBEDTLS_ENTROPY_C @@ -1816,7 +1912,9 @@ * This module enables the AES-GCM and CAMELLIA-GCM ciphersuites, if other * requisites are enabled as well. */ +#ifdef CONFIG_MBEDTLS_GCM_C #define MBEDTLS_GCM_C +#endif /** * \def MBEDTLS_HAVEGE_C @@ -1986,7 +2084,9 @@ * * This modules adds support for decoding / parsing PEM files. */ +#ifdef CONFIG_MBEDTLS_PEM_PARSE_C #define MBEDTLS_PEM_PARSE_C +#endif /** * \def MBEDTLS_PEM_WRITE_C @@ -2002,7 +2102,9 @@ * * This modules adds support for encoding / writing PEM files. */ +#ifdef CONFIG_MBEDTLS_PEM_WRITE_C #define MBEDTLS_PEM_WRITE_C +#endif /** * \def MBEDTLS_PK_C @@ -2122,7 +2224,9 @@ * Caller: library/mbedtls_md.c * */ +#ifdef CONFIG_MBEDTLS_RIPEMD160_C #define MBEDTLS_RIPEMD160_C +#endif /** * \def MBEDTLS_RSA_C @@ -2236,7 +2340,9 @@ * * This module is required for SSL/TLS client support. */ +#ifdef CONFIG_MBEDTLS_TLS_CLIENT #define MBEDTLS_SSL_CLI_C +#endif /** * \def MBEDTLS_SSL_SRV_C @@ -2250,7 +2356,9 @@ * * This module is required for SSL/TLS server support. */ +#ifdef CONFIG_MBEDTLS_TLS_SERVER #define MBEDTLS_SSL_SRV_C +#endif /** * \def MBEDTLS_SSL_TLS_C @@ -2266,7 +2374,9 @@ * * This module is required for SSL/TLS. */ +#ifdef CONFIG_MBEDTLS_TLS_ENABLED #define MBEDTLS_SSL_TLS_C +#endif /** * \def MBEDTLS_THREADING_C @@ -2357,7 +2467,9 @@ * * This module is required for X.509 CRL parsing. */ +#ifdef CONFIG_MBEDTLS_X509_CRL_PARSE_C #define MBEDTLS_X509_CRL_PARSE_C +#endif /** * \def MBEDTLS_X509_CSR_PARSE_C @@ -2371,7 +2483,9 @@ * * This module is used for reading X.509 certificate request. */ +#ifdef CONFIG_MBEDTLS_X509_CSR_PARSE_C #define MBEDTLS_X509_CSR_PARSE_C +#endif /** * \def MBEDTLS_X509_CREATE_C @@ -2420,7 +2534,9 @@ * Module: library/xtea.c * Caller: */ +#ifdef CONFIG_MBEDTLS_XTEA_C #define MBEDTLS_XTEA_C +#endif /* \} name SECTION: mbed TLS modules */ @@ -2516,6 +2632,17 @@ /* X509 options */ //#define MBEDTLS_X509_MAX_INTERMEDIATE_CA 8 /**< Maximum number of intermediate CAs in a verification chain. */ +/** + * Allow SHA-1 in the default TLS configuration for TLS 1.2 handshake + * signature and ciphersuite selection. Without this build-time option, SHA-1 + * support must be activated explicitly through mbedtls_ssl_conf_sig_hashes. + * The use of SHA-1 in TLS <= 1.1 and in HMAC-SHA-1 is always allowed by + * default. At the time of writing, there is no practical attack on the use + * of SHA-1 in handshake signatures, hence this option is turned on by default + * for compatibility with existing peers. + */ +#define MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_KEY_EXCHANGE + /* \} name SECTION: Module configuration options */ #if defined(TARGET_LIKE_MBED) diff --git a/tools/sdk/include/newlib/esp_newlib.h b/tools/sdk/include/newlib/esp_newlib.h index eac35442..19284439 100644 --- a/tools/sdk/include/newlib/esp_newlib.h +++ b/tools/sdk/include/newlib/esp_newlib.h @@ -34,10 +34,8 @@ void esp_reent_init(struct _reent* r); void esp_setup_syscall_table(); /** - * Initialize hardware timer used as time source for newlib time functions. - * - * Called from the startup code, not intended to be called from application. + * Update current microsecond time from RTC */ -void esp_setup_time_syscalls(); +void esp_set_time_from_rtc(); #endif //__ESP_NEWLIB_H__ diff --git a/tools/sdk/include/newlib/sys/features.h b/tools/sdk/include/newlib/sys/features.h index 1d90921a..87f3314f 100644 --- a/tools/sdk/include/newlib/sys/features.h +++ b/tools/sdk/include/newlib/sys/features.h @@ -210,6 +210,12 @@ extern "C" { #endif /* __CYGWIN__ */ +/* ESP-IDF-specific: enable pthreads support */ +#ifdef __XTENSA__ +#define _POSIX_THREADS 1 +#define _UNIX98_THREAD_MUTEX_ATTRIBUTES 1 +#endif + /* Per the permission given in POSIX.1-2008 section 2.2.1, define * _POSIX_C_SOURCE if _XOPEN_SOURCE is defined and _POSIX_C_SOURCE is not. * (_XOPEN_SOURCE indicates that XSI extensions are desired by an application.) diff --git a/tools/sdk/include/newlib/sys/sched.h b/tools/sdk/include/newlib/sys/sched.h index 58f99d68..8554fc2b 100644 --- a/tools/sdk/include/newlib/sys/sched.h +++ b/tools/sdk/include/newlib/sys/sched.h @@ -58,6 +58,8 @@ struct sched_param { #endif }; +int sched_yield( void ); + #ifdef __cplusplus } #endif diff --git a/tools/sdk/include/newlib/sys/time.h b/tools/sdk/include/newlib/sys/time.h index be16497f..8e3ef808 100644 --- a/tools/sdk/include/newlib/sys/time.h +++ b/tools/sdk/include/newlib/sys/time.h @@ -20,7 +20,7 @@ struct timeval { }; /* BSD time macros used by RTEMS code */ -#if defined (__rtems__) || defined (__CYGWIN__) +#if defined (__rtems__) || defined (__CYGWIN__) || defined(__XTENSA__) /* Convenience macros for operations on timevals. NOTE: `timercmp' does not work for >= or <=. */ diff --git a/tools/sdk/include/nvs_flash/nvs.h b/tools/sdk/include/nvs_flash/nvs.h index 5b469f76..dfdd18c9 100644 --- a/tools/sdk/include/nvs_flash/nvs.h +++ b/tools/sdk/include/nvs_flash/nvs.h @@ -43,7 +43,9 @@ typedef uint32_t nvs_handle; #define ESP_ERR_NVS_INVALID_LENGTH (ESP_ERR_NVS_BASE + 0x0c) /*!< String or blob length is not sufficient to store data */ #define ESP_ERR_NVS_NO_FREE_PAGES (ESP_ERR_NVS_BASE + 0x0d) /*!< NVS partition doesn't contain any empty pages. This may happen if NVS partition was truncated. Erase the whole partition and call nvs_flash_init again. */ #define ESP_ERR_NVS_VALUE_TOO_LONG (ESP_ERR_NVS_BASE + 0x0e) /*!< String or blob length is longer than supported by the implementation */ +#define ESP_ERR_NVS_PART_NOT_FOUND (ESP_ERR_NVS_BASE + 0x0f) /*!< Partition with specified name is not found in the partition table */ +#define NVS_DEFAULT_PART_NAME "nvs" /*!< Default partition name of the NVS partition in the partition table */ /** * @brief Mode of opening the non-volatile storage * @@ -54,15 +56,45 @@ typedef enum { } nvs_open_mode; /** - * @brief Open non-volatile storage with a given namespace + * @brief Open non-volatile storage with a given namespace from the default NVS partition * * Multiple internal ESP-IDF and third party application modules can store * their key-value pairs in the NVS module. In order to reduce possible * conflicts on key names, each module can use its own namespace. + * The default NVS partition is the one that is labelled "nvs" in the partition + * table. * * @param[in] name Namespace name. Maximal length is determined by the * underlying implementation, but is guaranteed to be * at least 15 characters. Shouldn't be empty. + * @param[in] open_mode NVS_READWRITE or NVS_READONLY. If NVS_READONLY, will + * open a handle for reading only. All write requests will + * be rejected for this handle. + * @param[out] out_handle If successful (return code is zero), handle will be + * returned in this argument. + * + * @return + * - ESP_OK if storage handle was opened successfully + * - ESP_ERR_NVS_NOT_INITIALIZED if the storage driver is not initialized + * - ESP_ERR_NVS_PART_NOT_FOUND if the partition with label "nvs" is not found + * - ESP_ERR_NVS_NOT_FOUND id namespace doesn't exist yet and + * mode is NVS_READONLY + * - ESP_ERR_NVS_INVALID_NAME if namespace name doesn't satisfy constraints + * - other error codes from the underlying storage driver + */ +esp_err_t nvs_open(const char* name, nvs_open_mode open_mode, nvs_handle *out_handle); + +/** + * @brief Open non-volatile storage with a given namespace from specified partition + * + * The behaviour is same as nvs_open() API. However this API can operate on a specified NVS + * partition instead of default NVS partition. Note that the specified partition must be registered + * with NVS using nvs_flash_init_partition() API. + * + * @param[in] part_name Label (name) of the partition of interest for object read/write/erase + * @param[in] name Namespace name. Maximal length is determined by the + * underlying implementation, but is guaranteed to be + * at least 15 characters. Shouldn't be empty. * @param[in] open_mode NVS_READWRITE or NVS_READONLY. If NVS_READONLY, will * open a handle for reading only. All write requests will * be rejected for this handle. @@ -72,12 +104,13 @@ typedef enum { * @return * - ESP_OK if storage handle was opened successfully * - ESP_ERR_NVS_NOT_INITIALIZED if the storage driver is not initialized + * - ESP_ERR_NVS_PART_NOT_FOUND if the partition with specified name is not found * - ESP_ERR_NVS_NOT_FOUND id namespace doesn't exist yet and * mode is NVS_READONLY * - ESP_ERR_NVS_INVALID_NAME if namespace name doesn't satisfy constraints * - other error codes from the underlying storage driver */ -esp_err_t nvs_open(const char* name, nvs_open_mode open_mode, nvs_handle *out_handle); +esp_err_t nvs_open_from_partition(const char *part_name, const char* name, nvs_open_mode open_mode, nvs_handle *out_handle); /**@{*/ /** diff --git a/tools/sdk/include/nvs_flash/nvs_flash.h b/tools/sdk/include/nvs_flash/nvs_flash.h index 9220f0d3..c9e4a72d 100644 --- a/tools/sdk/include/nvs_flash/nvs_flash.h +++ b/tools/sdk/include/nvs_flash/nvs_flash.h @@ -21,28 +21,61 @@ extern "C" { #include "nvs.h" /** - * @brief Initialize NVS flash storage with layout given in the partition table. + * @brief Initialize the default NVS partition. + * + * This API initialises the default NVS partition. The default NVS partition + * is the one that is labelled "nvs" in the partition table. * * @return * - ESP_OK if storage was successfully initialized. * - ESP_ERR_NVS_NO_FREE_PAGES if the NVS storage contains no empty pages * (which may happen if NVS partition was truncated) + * - ESP_ERR_NOT_FOUND if no partition with label "nvs" is found in the partition table * - one of the error codes from the underlying flash storage driver */ esp_err_t nvs_flash_init(void); +/** + * @brief Initialize NVS flash storage for the specified partition. + * + * @param[in] partition_name Name (label) of the partition. Note that internally a reference to + * passed value is kept and it should be accessible for future operations + * + * @return + * - ESP_OK if storage was successfully initialized. + * - ESP_ERR_NVS_NO_FREE_PAGES if the NVS storage contains no empty pages + * (which may happen if NVS partition was truncated) + * - ESP_ERR_NOT_FOUND if specified partition is not found in the partition table + * - one of the error codes from the underlying flash storage driver + */ +esp_err_t nvs_flash_init_partition(const char *partition_name); /** - * @brief Erase NVS partition + * @brief Erase the default NVS partition * - * This function erases all contents of NVS partition + * This function erases all contents of the default NVS partition (one with label "nvs") * * @return * - ESP_OK on success - * - ESP_ERR_NOT_FOUND if there is no NVS partition in the partition table + * - ESP_ERR_NOT_FOUND if there is no NVS partition labeled "nvs" in the + * partition table */ esp_err_t nvs_flash_erase(void); +/** + * @brief Erase specified NVS partition + * + * This function erases all contents of specified NVS partition + * + * @param[in] part_name Name (label) of the partition to be erased + * + * @return + * - ESP_OK on success + * - ESP_ERR_NOT_FOUND if there is no NVS partition with the specified name + * in the partition table + */ +esp_err_t nvs_flash_erase_partition(const char *part_name); + #ifdef __cplusplus } #endif diff --git a/tools/sdk/include/soc/soc/adc_channel.h b/tools/sdk/include/soc/soc/adc_channel.h new file mode 100644 index 00000000..e8835d35 --- /dev/null +++ b/tools/sdk/include/soc/soc/adc_channel.h @@ -0,0 +1,72 @@ +// Copyright 2010-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef _SOC_ADC_CHANNEL_H +#define _SOC_ADC_CHANNEL_H + +#define ADC1_GPIO36_CHANNEL ADC1_CHANNEL_0 +#define ADC1_CHANNEL_0_GPIO_NUM 36 + +#define ADC1_GPIO37_CHANNEL ADC1_CHANNEL_1 +#define ADC1_CHANNEL_1_GPIO_NUM 37 + +#define ADC1_GPIO38_CHANNEL ADC1_CHANNEL_2 +#define ADC1_CHANNEL_2_GPIO_NUM 38 + +#define ADC1_GPIO39_CHANNEL ADC1_CHANNEL_3 +#define ADC1_CHANNEL_3_GPIO_NUM 39 + +#define ADC1_GPIO32_CHANNEL ADC1_CHANNEL_4 +#define ADC1_CHANNEL_4_GPIO_NUM 32 + +#define ADC1_GPIO33_CHANNEL ADC1_CHANNEL_5 +#define ADC1_CHANNEL_5_GPIO_NUM 33 + +#define ADC1_GPIO34_CHANNEL ADC1_CHANNEL_6 +#define ADC1_CHANNEL_6_GPIO_NUM 34 + +#define ADC1_GPIO35_CHANNEL ADC1_CHANNEL_7 +#define ADC1_CHANNEL_7_GPIO_NUM 35 + +#define ADC2_GPIO4_CHANNEL ADC2_CHANNEL_0 +#define ADC2_CHANNEL_0_GPIO_NUM 4 + +#define ADC2_GPIO0_CHANNEL ADC2_CHANNEL_1 +#define ADC2_CHANNEL_1_GPIO_NUM 0 + +#define ADC2_GPIO2_CHANNEL ADC2_CHANNEL_2 +#define ADC2_CHANNEL_2_GPIO_NUM 2 + +#define ADC2_GPIO15_CHANNEL ADC2_CHANNEL_3 +#define ADC2_CHANNEL_3_GPIO_NUM 15 + +#define ADC2_GPIO13_CHANNEL ADC2_CHANNEL_4 +#define ADC2_CHANNEL_4_GPIO_NUM 13 + +#define ADC2_GPIO12_CHANNEL ADC2_CHANNEL_5 +#define ADC2_CHANNEL_5_GPIO_NUM 12 + +#define ADC2_GPIO14_CHANNEL ADC2_CHANNEL_6 +#define ADC2_CHANNEL_6_GPIO_NUM 14 + +#define ADC2_GPIO27_CHANNEL ADC2_CHANNEL_7 +#define ADC2_CHANNEL_7_GPIO_NUM 27 + +#define ADC2_GPIO25_CHANNEL ADC2_CHANNEL_8 +#define ADC2_CHANNEL_8_GPIO_NUM 25 + +#define ADC2_GPIO26_CHANNEL ADC2_CHANNEL_9 +#define ADC2_CHANNEL_9_GPIO_NUM 26 + +#endif diff --git a/tools/sdk/include/soc/soc/apb_ctrl_struct.h b/tools/sdk/include/soc/soc/apb_ctrl_struct.h index d2596783..0d8e49a4 100644 --- a/tools/sdk/include/soc/soc/apb_ctrl_struct.h +++ b/tools/sdk/include/soc/soc/apb_ctrl_struct.h @@ -13,6 +13,11 @@ // limitations under the License. #ifndef _SOC_APB_CTRL_STRUCT_H_ #define _SOC_APB_CTRL_STRUCT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + typedef struct { union { struct { @@ -117,4 +122,9 @@ typedef struct { volatile uint32_t date; /**/ } apb_ctrl_dev_t; + +#ifdef __cplusplus +} +#endif + #endif /* _SOC_APB_CTRL_STRUCT_H_ */ diff --git a/tools/sdk/include/soc/soc/clkout_channel.h b/tools/sdk/include/soc/soc/clkout_channel.h new file mode 100644 index 00000000..5161e3f0 --- /dev/null +++ b/tools/sdk/include/soc/soc/clkout_channel.h @@ -0,0 +1,26 @@ +// Copyright 2010-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef _SOC_CLKOUT_CHANNEL_H +#define _SOC_CLKOUT_CHANNEL_H + +//CLKOUT channels +#define CLKOUT_GPIO0_DIRECT_CHANNEL CLKOUT_CHANNEL_1 +#define CLKOUT_CHANNEL_1_DIRECT_GPIO_NUM 0 +#define CLKOUT_GPIO3_DIRECT_CHANNEL CLKOUT_CHANNEL_2 +#define CLKOUT_CHANNEL_2_DIRECT_GPIO_NUM 3 +#define CLKOUT_GPIO1_DIRECT_CHANNEL CLKOUT_CHANNEL_3 +#define CLKOUT_CHANNEL_3_DIRECT_GPIO_NUM 1 + +#endif diff --git a/tools/sdk/include/soc/soc/dac_channel.h b/tools/sdk/include/soc/soc/dac_channel.h new file mode 100644 index 00000000..241a067b --- /dev/null +++ b/tools/sdk/include/soc/soc/dac_channel.h @@ -0,0 +1,24 @@ +// Copyright 2010-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef _SOC_DAC_CHANNEL_H +#define _SOC_DAC_CHANNEL_H + +#define DAC_GPIO25_CHANNEL DAC_CHANNEL_1 +#define DAC_CHANNEL_1_GPIO_NUM 25 + +#define DAC_GPIO26_CHANNEL DAC_CHANNEL_2 +#define DAC_CHANNEL_2_GPIO_NUM 26 + +#endif diff --git a/tools/sdk/include/soc/soc/dport_access.h b/tools/sdk/include/soc/soc/dport_access.h index d1d264cb..817ac98e 100644 --- a/tools/sdk/include/soc/soc/dport_access.h +++ b/tools/sdk/include/soc/soc/dport_access.h @@ -25,14 +25,21 @@ extern "C" { //Registers Operation {{ -//Register read macros with an underscore prefix access DPORT memory directly. In IDF apps, use the non-underscore versions to be SMP-safe. +// The _DPORT_xxx register read macros access DPORT memory directly (as opposed to +// DPORT_REG_READ which applies SMP-safe protections). +// +// Use DPORT_REG_READ versions to be SMP-safe in IDF apps. If you want to +// make a sequence of DPORT reads, use DPORT_STALL_OTHER_CPU_START() macro +// explicitly and then use _DPORT_REG_READ macro while other CPU is stalled. +// +// _DPORT_REG_WRITE & DPORT_REG_WRITE are equivalent. #define _DPORT_REG_READ(_r) (*(volatile uint32_t *)(_r)) #define _DPORT_REG_WRITE(_r, _v) (*(volatile uint32_t *)(_r)) = (_v) -//write value to register +// Write value to DPORT register (does not require protecting) #define DPORT_REG_WRITE(_r, _v) _DPORT_REG_WRITE((_r), (_v)) -//read value from register +// Read value from register, SMP-safe version. static inline uint32_t IRAM_ATTR DPORT_REG_READ(uint32_t reg) { uint32_t val; @@ -40,7 +47,7 @@ static inline uint32_t IRAM_ATTR DPORT_REG_READ(uint32_t reg) DPORT_STALL_OTHER_CPU_START(); val = _DPORT_REG_READ(reg); DPORT_STALL_OTHER_CPU_END(); - + return val; } @@ -81,8 +88,10 @@ static inline uint32_t IRAM_ATTR DPORT_REG_READ(uint32_t reg) #define DPORT_FIELD_TO_VALUE2(_f, _v) (((_v)<<_f##_S) & (_f)) //Register read macros with an underscore prefix access DPORT memory directly. In IDF apps, use the non-underscore versions to be SMP-safe. -#define _DPORT_READ_PERI_REG(addr) (*((volatile uint32_t *)(addr))) -#define _DPORT_WRITE_PERI_REG(addr, val) (*((volatile uint32_t *)(addr))) = (uint32_t)(val) +#define _DPORT_READ_PERI_REG(addr) (*((volatile uint32_t *)(addr))) +#define _DPORT_WRITE_PERI_REG(addr, val) (*((volatile uint32_t *)(addr))) = (uint32_t)(val) +#define _DPORT_REG_SET_BIT(_r, _b) _DPORT_REG_WRITE((_r), (_DPORT_REG_READ(_r)|(_b))) +#define _DPORT_REG_CLR_BIT(_r, _b) _DPORT_REG_WRITE((_r), (_DPORT_REG_READ(_r) & (~(_b)))) //read value from register static inline uint32_t IRAM_ATTR DPORT_READ_PERI_REG(uint32_t addr) diff --git a/tools/sdk/include/soc/soc/dport_reg.h b/tools/sdk/include/soc/soc/dport_reg.h index 56e18246..98e60365 100644 --- a/tools/sdk/include/soc/soc/dport_reg.h +++ b/tools/sdk/include/soc/soc/dport_reg.h @@ -1055,6 +1055,8 @@ #define DPORT_WIFI_CLK_BT_EN_S 11 /* Remaining single bit clock masks */ #define DPORT_WIFI_CLK_SDIOSLAVE_EN BIT(4) +#define DPORT_WIFI_CLK_UNUSED_BIT5 BIT(5) +#define DPORT_WIFI_CLK_UNUSED_BIT12 BIT(12) #define DPORT_WIFI_CLK_SDIO_HOST_EN BIT(13) #define DPORT_WIFI_CLK_EMAC_EN BIT(14) #define DPORT_WIFI_CLK_RNG_EN BIT(15) diff --git a/tools/sdk/include/soc/soc/frc_timer_reg.h b/tools/sdk/include/soc/soc/frc_timer_reg.h index d76199c4..a2152c5c 100644 --- a/tools/sdk/include/soc/soc/frc_timer_reg.h +++ b/tools/sdk/include/soc/soc/frc_timer_reg.h @@ -32,12 +32,15 @@ #define FRC_TIMER_COUNT_S 0 #define FRC_TIMER_CTRL_REG(i) (REG_FRC_TIMER_BASE(i) + 0x8) -#define FRC_TIMER_INT_ENABLE (BIT(8)) // enable interrupt +#define FRC_TIMER_INT_STATUS (BIT(8)) // interrupt status (RO) #define FRC_TIMER_ENABLE (BIT(7)) // enable timer #define FRC_TIMER_AUTOLOAD (BIT(6)) // enable autoload -#define FRC_TIMER_PRESCALER 0x00000007 // 0: divide by 1, 2: divide by 16, 4: divide by 256 +#define FRC_TIMER_PRESCALER 0x00000007 #define FRC_TIMER_PRESCALER_S 1 -#define FRC_TIMER_EDGE_INT (BIT(0)) // 0: level, 1: edge +#define FRC_TIMER_PRESCALER_1 (0 << FRC_TIMER_PRESCALER_S) +#define FRC_TIMER_PRESCALER_16 (2 << FRC_TIMER_PRESCALER_S) +#define FRC_TIMER_PRESCALER_256 (4 << FRC_TIMER_PRESCALER_S) +#define FRC_TIMER_LEVEL_INT (BIT(0)) // 1: level, 0: edge #define FRC_TIMER_INT_REG(i) (REG_FRC_TIMER_BASE(i) + 0xC) #define FRC_TIMER_INT_CLR (BIT(0)) // clear interrupt diff --git a/tools/sdk/include/soc/soc/gpio_sd_struct.h b/tools/sdk/include/soc/soc/gpio_sd_struct.h index 94ddd5ba..e5001c23 100644 --- a/tools/sdk/include/soc/soc/gpio_sd_struct.h +++ b/tools/sdk/include/soc/soc/gpio_sd_struct.h @@ -13,6 +13,11 @@ // limitations under the License. #ifndef _SOC_GPIO_SD_STRUCT_H_ #define _SOC_GPIO_SD_STRUCT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + typedef volatile struct { union { struct { @@ -45,4 +50,9 @@ typedef volatile struct { } version; } gpio_sd_dev_t; extern gpio_sd_dev_t SIGMADELTA; + +#ifdef __cplusplus +} +#endif + #endif /* _SOC_GPIO_SD_STRUCT_H_ */ diff --git a/tools/sdk/include/soc/soc/gpio_struct.h b/tools/sdk/include/soc/soc/gpio_struct.h index 7a90b71a..46ee8822 100644 --- a/tools/sdk/include/soc/soc/gpio_struct.h +++ b/tools/sdk/include/soc/soc/gpio_struct.h @@ -13,6 +13,11 @@ // limitations under the License. #ifndef _SOC_GPIO_STRUCT_H_ #define _SOC_GPIO_STRUCT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + typedef volatile struct { uint32_t bt_select; /*NA*/ uint32_t out; /*GPIO0~31 output value*/ @@ -201,4 +206,9 @@ typedef volatile struct { } func_out_sel_cfg[40]; } gpio_dev_t; extern gpio_dev_t GPIO; + +#ifdef __cplusplus +} +#endif + #endif /* _SOC_GPIO_STRUCT_H_ */ diff --git a/tools/sdk/include/soc/soc/hwcrypto_reg.h b/tools/sdk/include/soc/soc/hwcrypto_reg.h index 10e80d93..d0dfa748 100644 --- a/tools/sdk/include/soc/soc/hwcrypto_reg.h +++ b/tools/sdk/include/soc/soc/hwcrypto_reg.h @@ -57,4 +57,12 @@ #define SHA_512_LOAD_REG ((DR_REG_SHA_BASE) + 0xb8) #define SHA_512_BUSY_REG ((DR_REG_SHA_BASE) + 0xbc) +/* AES acceleration registers */ +#define AES_START_REG ((DR_REG_AES_BASE) + 0x00) +#define AES_IDLE_REG ((DR_REG_AES_BASE) + 0x04) +#define AES_MODE_REG ((DR_REG_AES_BASE) + 0x08) +#define AES_KEY_BASE ((DR_REG_AES_BASE) + 0x10) +#define AES_TEXT_BASE ((DR_REG_AES_BASE) + 0x30) +#define AES_ENDIAN ((DR_REG_AES_BASE) + 0x40) + #endif diff --git a/tools/sdk/include/soc/soc/i2c_struct.h b/tools/sdk/include/soc/soc/i2c_struct.h index ea50d6be..7e781870 100644 --- a/tools/sdk/include/soc/soc/i2c_struct.h +++ b/tools/sdk/include/soc/soc/i2c_struct.h @@ -13,6 +13,11 @@ // limitations under the License. #ifndef _SOC_I2C_STRUCT_H_ #define _SOC_I2C_STRUCT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + typedef volatile struct { union { struct { @@ -286,4 +291,9 @@ typedef volatile struct { } i2c_dev_t; extern i2c_dev_t I2C0; extern i2c_dev_t I2C1; + +#ifdef __cplusplus +} +#endif + #endif /* _SOC_I2C_STRUCT_H_ */ diff --git a/tools/sdk/include/soc/soc/i2s_struct.h b/tools/sdk/include/soc/soc/i2s_struct.h index 6d9fcbab..8ec3145c 100644 --- a/tools/sdk/include/soc/soc/i2s_struct.h +++ b/tools/sdk/include/soc/soc/i2s_struct.h @@ -13,6 +13,11 @@ // limitations under the License. #ifndef _SOC_I2S_STRUCT_H_ #define _SOC_I2S_STRUCT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + typedef volatile struct { uint32_t reserved_0; uint32_t reserved_4; @@ -458,4 +463,8 @@ typedef volatile struct { extern i2s_dev_t I2S0; extern i2s_dev_t I2S1; +#ifdef __cplusplus +} +#endif + #endif /* _SOC_I2S_STRUCT_H_ */ diff --git a/tools/sdk/include/soc/soc/ledc_struct.h b/tools/sdk/include/soc/soc/ledc_struct.h index 0745a2ec..dd3c364b 100644 --- a/tools/sdk/include/soc/soc/ledc_struct.h +++ b/tools/sdk/include/soc/soc/ledc_struct.h @@ -13,6 +13,11 @@ // limitations under the License. #ifndef _SOC_LEDC_STRUCT_H_ #define _SOC_LEDC_STRUCT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + typedef volatile struct { struct { struct { @@ -243,4 +248,9 @@ typedef volatile struct { uint32_t date; /*This register represents the version .*/ } ledc_dev_t; extern ledc_dev_t LEDC; + +#ifdef __cplusplus +} +#endif + #endif /* _SOC_LEDC_STRUCT_H_ */ diff --git a/tools/sdk/include/soc/soc/mcpwm_struct.h b/tools/sdk/include/soc/soc/mcpwm_struct.h index 4d49e504..f41d40c6 100644 --- a/tools/sdk/include/soc/soc/mcpwm_struct.h +++ b/tools/sdk/include/soc/soc/mcpwm_struct.h @@ -13,6 +13,11 @@ // limitations under the License. #ifndef _SOC_MCPWM_STRUCT_H__ #define _SOC_MCPWM_STRUCT_H__ + +#ifdef __cplusplus +extern "C" { +#endif + typedef volatile struct { union { struct { @@ -449,4 +454,9 @@ typedef volatile struct { } mcpwm_dev_t; extern mcpwm_dev_t MCPWM0; extern mcpwm_dev_t MCPWM1; + +#ifdef __cplusplus +} +#endif + #endif /* _SOC_MCPWM_STRUCT_H__ */ diff --git a/tools/sdk/include/soc/soc/pcnt_struct.h b/tools/sdk/include/soc/soc/pcnt_struct.h index 506141ba..8cfd4ca3 100644 --- a/tools/sdk/include/soc/soc/pcnt_struct.h +++ b/tools/sdk/include/soc/soc/pcnt_struct.h @@ -13,6 +13,11 @@ // limitations under the License. #ifndef _SOC_PCNT_STRUCT_H_ #define _SOC_PCNT_STRUCT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + typedef volatile struct { struct{ union { @@ -169,4 +174,9 @@ typedef volatile struct { uint32_t date; /**/ } pcnt_dev_t; extern pcnt_dev_t PCNT; + +#ifdef __cplusplus +} +#endif + #endif /* _SOC_PCNT_STRUCT_H_ */ diff --git a/tools/sdk/include/soc/soc/rmt_struct.h b/tools/sdk/include/soc/soc/rmt_struct.h index 335cb819..68e244ad 100644 --- a/tools/sdk/include/soc/soc/rmt_struct.h +++ b/tools/sdk/include/soc/soc/rmt_struct.h @@ -13,6 +13,11 @@ // limitations under the License. #ifndef _SOC_RMT_STRUCT_H_ #define _SOC_RMT_STRUCT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + typedef volatile struct { uint32_t data_ch[8]; /*The R/W ram address for channel0-7 by apb fifo access.*/ struct{ @@ -259,4 +264,8 @@ typedef volatile struct { } rmt_mem_t; extern rmt_mem_t RMTMEM; +#ifdef __cplusplus +} +#endif + #endif /* _SOC_RMT_STRUCT_H_ */ diff --git a/tools/sdk/include/soc/soc/rtc.h b/tools/sdk/include/soc/soc/rtc.h index a85265fd..b47e39e1 100644 --- a/tools/sdk/include/soc/soc/rtc.h +++ b/tools/sdk/include/soc/soc/rtc.h @@ -393,6 +393,7 @@ typedef struct { uint32_t rtc_dbias_wak : 3; //!< set bias for RTC domain, in active mode uint32_t rtc_dbias_slp : 3; //!< set bias for RTC domain, in sleep mode uint32_t lslp_meminf_pd : 1; //!< remove all peripheral force power up flags + uint32_t vddsdio_pd_en : 1; //!< power down VDDSDIO regulator } rtc_sleep_config_t; /** @@ -419,7 +420,8 @@ typedef struct { .dig_dbias_slp = RTC_CNTL_DBIAS_0V90, \ .rtc_dbias_wak = RTC_CNTL_DBIAS_0V90, \ .rtc_dbias_slp = RTC_CNTL_DBIAS_0V90, \ - .lslp_meminf_pd = 1 \ + .lslp_meminf_pd = 1, \ + .vddsdio_pd_en = ((sleep_flags) & RTC_SLEEP_PD_VDDSDIO) ? 1 : 0, \ }; #define RTC_SLEEP_PD_DIG BIT(0) //!< Deep sleep (power down digital domain) @@ -427,6 +429,7 @@ typedef struct { #define RTC_SLEEP_PD_RTC_SLOW_MEM BIT(2) //!< Power down RTC SLOW memory #define RTC_SLEEP_PD_RTC_FAST_MEM BIT(3) //!< Power down RTC FAST memory #define RTC_SLEEP_PD_RTC_MEM_FOLLOW_CPU BIT(4) //!< RTC FAST and SLOW memories are automatically powered up and down along with the CPU +#define RTC_SLEEP_PD_VDDSDIO BIT(5) //!< Power down VDDSDIO regulator /** * @brief Prepare the chip to enter sleep mode diff --git a/tools/sdk/include/soc/soc/rtc_cntl_struct.h b/tools/sdk/include/soc/soc/rtc_cntl_struct.h index acb12432..e2037226 100644 --- a/tools/sdk/include/soc/soc/rtc_cntl_struct.h +++ b/tools/sdk/include/soc/soc/rtc_cntl_struct.h @@ -13,6 +13,11 @@ // limitations under the License. #ifndef _SOC_RTC_CNTL_STRUCT_H_ #define _SOC_RTC_CNTL_STRUCT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + typedef volatile struct { union { struct { @@ -550,4 +555,10 @@ typedef volatile struct { uint32_t val; } date; } rtc_cntl_dev_t; +extern rtc_cntl_dev_t RTCCNTL; + +#ifdef __cplusplus +} +#endif + #endif /* _SOC_RTC_CNTL_STRUCT_H_ */ diff --git a/tools/sdk/include/soc/soc/rtc_gpio_channel.h b/tools/sdk/include/soc/soc/rtc_gpio_channel.h new file mode 100644 index 00000000..c5107a0f --- /dev/null +++ b/tools/sdk/include/soc/soc/rtc_gpio_channel.h @@ -0,0 +1,73 @@ +// Copyright 2010-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef _SOC_RTC_GPIO_CHANNEL_H +#define _SOC_RTC_GPIO_CHANNEL_H + +//RTC GPIO channels +#define RTCIO_GPIO36_CHANNEL 0 //RTCIO_CHANNEL_0 +#define RTCIO_CHANNEL_0_GPIO_NUM 36 + +#define RTCIO_GPIO37_CHANNEL 1 //RTCIO_CHANNEL_1 +#define RTCIO_CHANNEL_1_GPIO_NUM 37 + +#define RTCIO_GPIO38_CHANNEL 2 //RTCIO_CHANNEL_2 +#define RTCIO_CHANNEL_2_GPIO_NUM 38 + +#define RTCIO_GPIO39_CHANNEL 3 //RTCIO_CHANNEL_3 +#define RTCIO_CHANNEL_3_GPIO_NUM 39 + +#define RTCIO_GPIO34_CHANNEL 4 //RTCIO_CHANNEL_4 +#define RTCIO_CHANNEL_4_GPIO_NUM 34 + +#define RTCIO_GPIO35_CHANNEL 5 //RTCIO_CHANNEL_5 +#define RTCIO_CHANNEL_5_GPIO_NUM 35 + +#define RTCIO_GPIO25_CHANNEL 6 //RTCIO_CHANNEL_6 +#define RTCIO_CHANNEL_6_GPIO_NUM 25 + +#define RTCIO_GPIO26_CHANNEL 7 //RTCIO_CHANNEL_7 +#define RTCIO_CHANNEL_7_GPIO_NUM 26 + +#define RTCIO_GPIO33_CHANNEL 8 //RTCIO_CHANNEL_8 +#define RTCIO_CHANNEL_8_GPIO_NUM 33 + +#define RTCIO_GPIO32_CHANNEL 9 //RTCIO_CHANNEL_9 +#define RTCIO_CHANNEL_9_GPIO_NUM 32 + +#define RTCIO_GPIO4_CHANNEL 10 //RTCIO_CHANNEL_10 +#define RTCIO_CHANNEL_10_GPIO_NUM 4 + +#define RTCIO_GPIO0_CHANNEL 11 //RTCIO_CHANNEL_11 +#define RTCIO_CHANNEL_11_GPIO_NUM 0 + +#define RTCIO_GPIO2_CHANNEL 12 //RTCIO_CHANNEL_12 +#define RTCIO_CHANNEL_12_GPIO_NUM 2 + +#define RTCIO_GPIO15_CHANNEL 13 //RTCIO_CHANNEL_13 +#define RTCIO_CHANNEL_13_GPIO_NUM 15 + +#define RTCIO_GPIO13_CHANNEL 14 //RTCIO_CHANNEL_14 +#define RTCIO_CHANNEL_14_GPIO_NUM 13 + +#define RTCIO_GPIO12_CHANNEL 15 //RTCIO_CHANNEL_15 +#define RTCIO_CHANNEL_15_GPIO_NUM 12 + +#define RTCIO_GPIO14_CHANNEL 16 //RTCIO_CHANNEL_16 +#define RTCIO_CHANNEL_16_GPIO_NUM 14 + +#define RTCIO_GPIO27_CHANNEL 17 //RTCIO_CHANNEL_17 +#define RTCIO_CHANNEL_17_GPIO_NUM 27 + +#endif diff --git a/tools/sdk/include/soc/soc/rtc_io_struct.h b/tools/sdk/include/soc/soc/rtc_io_struct.h index da27078c..f20ad4c2 100644 --- a/tools/sdk/include/soc/soc/rtc_io_struct.h +++ b/tools/sdk/include/soc/soc/rtc_io_struct.h @@ -13,6 +13,11 @@ // limitations under the License. #ifndef _SOC_RTC_IO_STRUCT_H_ #define _SOC_RTC_IO_STRUCT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + typedef volatile struct { union { struct { @@ -277,4 +282,10 @@ typedef volatile struct { uint32_t val; } date; } rtc_io_dev_t; +extern rtc_io_dev_t RTCIO; + +#ifdef __cplusplus +} +#endif + #endif /* _SOC_RTC_IO_STRUCT_H_ */ diff --git a/tools/sdk/include/soc/soc/sdmmc_struct.h b/tools/sdk/include/soc/soc/sdmmc_struct.h index 20bb9d26..9f3625a3 100644 --- a/tools/sdk/include/soc/soc/sdmmc_struct.h +++ b/tools/sdk/include/soc/soc/sdmmc_struct.h @@ -16,6 +16,10 @@ #include +#ifdef __cplusplus +extern "C" { +#endif + typedef struct { uint32_t reserved1: 1; uint32_t disable_int_on_completion: 1; @@ -366,6 +370,8 @@ extern sdmmc_dev_t SDMMC; _Static_assert(sizeof(sdmmc_dev_t) == 0x804, "invalid size of sdmmc_dev_t structure"); - +#ifdef __cplusplus +} +#endif #endif //_SOC_SDMMC_STRUCT_H_ diff --git a/tools/sdk/include/soc/soc/sens_struct.h b/tools/sdk/include/soc/soc/sens_struct.h new file mode 100644 index 00000000..825c85b1 --- /dev/null +++ b/tools/sdk/include/soc/soc/sens_struct.h @@ -0,0 +1,326 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#ifndef _SOC_SENS_STRUCT_H_ +#define _SOC_SENS_STRUCT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef volatile struct { + union { + struct { + uint32_t sar1_clk_div: 8; + uint32_t sar1_sample_cycle: 8; + uint32_t sar1_sample_bit: 2; + uint32_t sar1_clk_gated: 1; + uint32_t sar1_sample_num: 8; + uint32_t sar1_dig_force: 1; + uint32_t sar1_data_inv: 1; + uint32_t reserved29: 3; + }; + uint32_t val; + } sar_read_ctrl; + uint32_t sar_read_status1; /**/ + union { + struct { + uint32_t sar_amp_wait1:16; + uint32_t sar_amp_wait2:16; + }; + uint32_t val; + } sar_meas_wait1; + union { + struct { + uint32_t sar_amp_wait3: 16; + uint32_t force_xpd_amp: 2; + uint32_t force_xpd_sar: 2; + uint32_t sar2_rstb_wait: 8; + uint32_t reserved28: 4; + }; + uint32_t val; + } sar_meas_wait2; + union { + struct { + uint32_t xpd_sar_amp_fsm: 4; + uint32_t amp_rst_fb_fsm: 4; + uint32_t amp_short_ref_fsm: 4; + uint32_t amp_short_ref_gnd_fsm: 4; + uint32_t xpd_sar_fsm: 4; + uint32_t sar_rstb_fsm: 4; + uint32_t sar2_xpd_wait: 8; + }; + uint32_t val; + } sar_meas_ctrl; + uint32_t sar_read_status2; /**/ + uint32_t ulp_cp_sleep_cyc0; /**/ + uint32_t ulp_cp_sleep_cyc1; /**/ + uint32_t ulp_cp_sleep_cyc2; /**/ + uint32_t ulp_cp_sleep_cyc3; /**/ + uint32_t ulp_cp_sleep_cyc4; /**/ + union { + struct { + uint32_t sar1_bit_width: 2; + uint32_t sar2_bit_width: 2; + uint32_t sar2_en_test: 1; + uint32_t sar2_pwdet_cct: 3; + uint32_t ulp_cp_force_start_top: 1; + uint32_t ulp_cp_start_top: 1; + uint32_t sarclk_en: 1; + uint32_t pc_init: 11; + uint32_t sar2_stop: 1; + uint32_t sar1_stop: 1; + uint32_t sar2_pwdet_en: 1; + uint32_t reserved25: 7; + }; + uint32_t val; + } sar_start_force; + union { + struct { + uint32_t mem_wr_addr_init: 11; + uint32_t mem_wr_addr_size: 11; + uint32_t rtc_mem_wr_offst_clr: 1; + uint32_t reserved23: 9; + }; + uint32_t val; + } sar_mem_wr_ctrl; + uint32_t sar_atten1; /**/ + uint32_t sar_atten2; /**/ + union { + struct { + uint32_t i2c_slave_addr1: 11; + uint32_t i2c_slave_addr0: 11; + uint32_t meas_status: 8; + uint32_t reserved30: 2; + }; + uint32_t val; + } sar_slave_addr1; + union { + struct { + uint32_t i2c_slave_addr3:11; + uint32_t i2c_slave_addr2:11; + uint32_t reserved22: 10; + }; + uint32_t val; + } sar_slave_addr2; + union { + struct { + uint32_t i2c_slave_addr5:11; + uint32_t i2c_slave_addr4:11; + uint32_t tsens_out: 8; + uint32_t tsens_rdy_out: 1; + uint32_t reserved31: 1; + }; + uint32_t val; + } sar_slave_addr3; + union { + struct { + uint32_t i2c_slave_addr7:11; + uint32_t i2c_slave_addr6:11; + uint32_t i2c_rdata: 8; + uint32_t i2c_done: 1; + uint32_t reserved31: 1; + }; + uint32_t val; + } sar_slave_addr4; + union { + struct { + uint32_t tsens_xpd_wait: 12; + uint32_t tsens_xpd_force: 1; + uint32_t tsens_clk_inv: 1; + uint32_t tsens_clk_gated: 1; + uint32_t tsens_in_inv: 1; + uint32_t tsens_clk_div: 8; + uint32_t tsens_power_up: 1; + uint32_t tsens_power_up_force: 1; + uint32_t tsens_dump_out: 1; + uint32_t reserved27: 5; + }; + uint32_t val; + } sar_tctrl; + union { + struct { + uint32_t sar_i2c_ctrl: 28; + uint32_t sar_i2c_start: 1; + uint32_t sar_i2c_start_force: 1; + uint32_t reserved30: 2; + }; + uint32_t val; + } sar_i2c_ctrl; + union { + struct { + uint32_t meas1_data_sar: 16; + uint32_t meas1_done_sar: 1; + uint32_t meas1_start_sar: 1; + uint32_t meas1_start_force: 1; + uint32_t sar1_en_pad: 12; + uint32_t sar1_en_pad_force: 1; + }; + uint32_t val; + } sar_meas_start1; + union { + struct { + uint32_t touch_meas_delay:16; + uint32_t touch_xpd_wait: 8; + uint32_t touch_out_sel: 1; + uint32_t touch_out_1en: 1; + uint32_t xpd_hall_force: 1; + uint32_t hall_phase_force: 1; + uint32_t reserved28: 4; + }; + uint32_t val; + } sar_touch_ctrl1; + union { + struct { + uint32_t l_thresh: 16; + uint32_t h_thresh: 16; + }; + uint32_t val; + } touch_thresh[5]; + union { + struct { + uint32_t l_val: 16; + uint32_t h_val: 16; + }; + uint32_t val; + } touch_meas[5]; + union { + struct { + uint32_t touch_meas_en: 10; + uint32_t touch_meas_done: 1; + uint32_t touch_start_fsm_en: 1; + uint32_t touch_start_en: 1; + uint32_t touch_start_force: 1; + uint32_t touch_sleep_cycles:16; + uint32_t touch_meas_en_clr: 1; + uint32_t reserved31: 1; + }; + uint32_t val; + } sar_touch_ctrl2; + uint32_t reserved_88; + union { + struct { + uint32_t touch_pad_worken:10; + uint32_t touch_pad_outen2:10; + uint32_t touch_pad_outen1:10; + uint32_t reserved30: 2; + }; + uint32_t val; + } sar_touch_enable; + union { + struct { + uint32_t sar2_clk_div: 8; + uint32_t sar2_sample_cycle: 8; + uint32_t sar2_sample_bit: 2; + uint32_t sar2_clk_gated: 1; + uint32_t sar2_sample_num: 8; + uint32_t sar2_pwdet_force: 1; + uint32_t sar2_dig_force: 1; + uint32_t sar2_data_inv: 1; + uint32_t reserved30: 2; + }; + uint32_t val; + } sar_read_ctrl2; + union { + struct { + uint32_t meas2_data_sar: 16; + uint32_t meas2_done_sar: 1; + uint32_t meas2_start_sar: 1; + uint32_t meas2_start_force: 1; + uint32_t sar2_en_pad: 12; + uint32_t sar2_en_pad_force: 1; + }; + uint32_t val; + } sar_meas_start2; + union { + struct { + uint32_t sw_fstep: 16; + uint32_t sw_tone_en: 1; + uint32_t debug_bit_sel: 5; + uint32_t dac_dig_force: 1; + uint32_t dac_clk_force_low: 1; + uint32_t dac_clk_force_high: 1; + uint32_t dac_clk_inv: 1; + uint32_t reserved26: 6; + }; + uint32_t val; + } sar_dac_ctrl1; + union { + struct { + uint32_t dac_dc1: 8; + uint32_t dac_dc2: 8; + uint32_t dac_scale1: 2; + uint32_t dac_scale2: 2; + uint32_t dac_inv1: 2; + uint32_t dac_inv2: 2; + uint32_t dac_cw_en1: 1; + uint32_t dac_cw_en2: 1; + uint32_t reserved26: 6; + }; + uint32_t val; + } sar_dac_ctrl2; + union { + struct { + uint32_t sar1_dac_xpd_fsm: 4; + uint32_t sar1_dac_xpd_fsm_idle: 1; + uint32_t xpd_sar_amp_fsm_idle: 1; + uint32_t amp_rst_fb_fsm_idle: 1; + uint32_t amp_short_ref_fsm_idle: 1; + uint32_t amp_short_ref_gnd_fsm_idle: 1; + uint32_t xpd_sar_fsm_idle: 1; + uint32_t sar_rstb_fsm_idle: 1; + uint32_t sar2_rstb_force: 2; + uint32_t amp_rst_fb_force: 2; + uint32_t amp_short_ref_force: 2; + uint32_t amp_short_ref_gnd_force: 2; + uint32_t reserved19: 13; + }; + uint32_t val; + } sar_meas_ctrl2; + uint32_t reserved_a4; + uint32_t reserved_a8; + uint32_t reserved_ac; + uint32_t reserved_b0; + uint32_t reserved_b4; + uint32_t reserved_b8; + uint32_t reserved_bc; + uint32_t reserved_c0; + uint32_t reserved_c4; + uint32_t reserved_c8; + uint32_t reserved_cc; + uint32_t reserved_d0; + uint32_t reserved_d4; + uint32_t reserved_d8; + uint32_t reserved_dc; + uint32_t reserved_e0; + uint32_t reserved_e4; + uint32_t reserved_e8; + uint32_t reserved_ec; + uint32_t reserved_f0; + uint32_t reserved_f4; + uint32_t sar_nouse; /**/ + union { + struct { + uint32_t sar_date: 28; + uint32_t reserved28: 4; + }; + uint32_t val; + } sardate; +} sens_dev_t; +extern sens_dev_t SENS; + +#ifdef __cplusplus +} +#endif + +#endif /* _SOC_SENS_STRUCT_H_ */ diff --git a/tools/sdk/include/soc/soc/soc.h b/tools/sdk/include/soc/soc/soc.h index 3b1e85f2..5d5cf3b7 100644 --- a/tools/sdk/include/soc/soc/soc.h +++ b/tools/sdk/include/soc/soc/soc.h @@ -67,11 +67,15 @@ #define SOC_RTC_IRAM_HIGH 0x400C2000 #define SOC_RTC_DATA_LOW 0x50000000 #define SOC_RTC_DATA_HIGH 0x50002000 +#define SOC_EXTRAM_DATA_LOW 0x3F800000 +#define SOC_EXTRAM_DATA_HIGH 0x3FC00000 + #define DR_REG_DPORT_BASE 0x3ff00000 -#define DR_REG_DPORT_END 0x3ff00FFC +#define DR_REG_AES_BASE 0x3ff01000 #define DR_REG_RSA_BASE 0x3ff02000 #define DR_REG_SHA_BASE 0x3ff03000 +#define DR_REG_DPORT_END 0x3ff03FFC #define DR_REG_UART_BASE 0x3ff40000 #define DR_REG_SPI1_BASE 0x3ff42000 #define DR_REG_SPI0_BASE 0x3ff43000 @@ -118,7 +122,7 @@ #define DR_REG_UART2_BASE 0x3ff6E000 #define DR_REG_PWM2_BASE 0x3ff6F000 #define DR_REG_PWM3_BASE 0x3ff70000 -#define PERIPHS_SPI_ENCRYPT_BASEADDR DR_REG_SPI_ENCRYPT_BASE +#define PERIPHS_SPI_ENCRYPT_BASEADDR DR_REG_SPI_ENCRYPT_BASE //Registers Operation {{ #define ETS_UNCACHED_ADDR(addr) (addr) @@ -376,7 +380,7 @@ * 7 1 software BT/BLE VHCI BT/BLE VHCI * 8 1 extern level BT/BLE BB(RX/TX) BT/BLE BB(RX/TX) * 9 1 extern level - * 10 1 extern edge Internal Timer + * 10 1 extern edge * 11 3 profiling * 12 1 extern level * 13 1 extern level @@ -388,7 +392,7 @@ * 19 2 extern level * 20 2 extern level * 21 2 extern level - * 22 3 extern edge FRC1 timer + * 22 3 extern edge * 23 3 extern level * 24 4 extern level TG1_WDT * 25 4 extern level CACHEERR diff --git a/tools/sdk/include/soc/soc/spi_struct.h b/tools/sdk/include/soc/soc/spi_struct.h index 149782ff..a52ddf41 100644 --- a/tools/sdk/include/soc/soc/spi_struct.h +++ b/tools/sdk/include/soc/soc/spi_struct.h @@ -13,6 +13,11 @@ // limitations under the License. #ifndef _SOC_SPI_STRUCT_H_ #define _SOC_SPI_STRUCT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + typedef volatile struct { union { struct { @@ -36,7 +41,7 @@ typedef volatile struct { }; uint32_t val; } cmd; - uint32_t addr; /*addr to slave / from master */ + uint32_t addr; /*addr to slave / from master. SPI transfer from the MSB to the LSB. If length > 32 bits, then address continues from MSB of slv_wr_status.*/ union { struct { uint32_t reserved0: 10; /*reserved*/ @@ -143,7 +148,7 @@ typedef volatile struct { } user1; union { struct { - uint32_t usr_command_value: 16; /*The value of command.*/ + uint32_t usr_command_value: 16; /*The value of command. Output sequence: bit 7-0 and then 15-8.*/ uint32_t reserved16: 12; /*reserved*/ uint32_t usr_command_bitlen: 4; /*The length in bits of command phase. The register value shall be (bit_num-1)*/ }; @@ -673,4 +678,9 @@ extern spi_dev_t SPI0; /* SPI0 IS FOR INTER extern spi_dev_t SPI1; extern spi_dev_t SPI2; extern spi_dev_t SPI3; + +#ifdef __cplusplus +} +#endif + #endif /* _SOC_SPI_STRUCT_H_ */ diff --git a/tools/sdk/include/soc/soc/syscon_struct.h b/tools/sdk/include/soc/soc/syscon_struct.h index 700aeecf..60d8ed0a 100644 --- a/tools/sdk/include/soc/soc/syscon_struct.h +++ b/tools/sdk/include/soc/soc/syscon_struct.h @@ -13,6 +13,11 @@ // limitations under the License. #ifndef _SOC_SYSCON_STRUCT_H_ #define _SOC_SYSCON_STRUCT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + typedef struct { union { struct { @@ -117,4 +122,8 @@ typedef struct { volatile uint32_t date; /**/ } syscon_dev_t; +#ifdef __cplusplus +} +#endif + #endif /* _SOC_SYSCON_STRUCT_H_ */ diff --git a/tools/sdk/include/soc/soc/timer_group_struct.h b/tools/sdk/include/soc/soc/timer_group_struct.h index 696b439d..da9acd0c 100644 --- a/tools/sdk/include/soc/soc/timer_group_struct.h +++ b/tools/sdk/include/soc/soc/timer_group_struct.h @@ -13,6 +13,11 @@ // limitations under the License. #ifndef _SOC_TIMG_STRUCT_H_ #define _SOC_TIMG_STRUCT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + typedef volatile struct { struct{ union { @@ -192,4 +197,9 @@ typedef volatile struct { } timg_dev_t; extern timg_dev_t TIMERG0; extern timg_dev_t TIMERG1; + +#ifdef __cplusplus +} +#endif + #endif /* _SOC_TIMG_STRUCT_H_ */ diff --git a/tools/sdk/include/soc/soc/touch_channel.h b/tools/sdk/include/soc/soc/touch_channel.h new file mode 100644 index 00000000..a9aa838b --- /dev/null +++ b/tools/sdk/include/soc/soc/touch_channel.h @@ -0,0 +1,49 @@ +// Copyright 2010-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef _SOC_TOUCH_CHANNEL_H +#define _SOC_TOUCH_CHANNEL_H + +//Touch channels +#define TOUCH_PAD_GPIO4_CHANNEL TOUCH_PAD_NUM0 +#define TOUCH_PAD_NUM0_GPIO_NUM 4 + +#define TOUCH_PAD_GPIO0_CHANNEL TOUCH_PAD_NUM1 +#define TOUCH_PAD_NUM1_GPIO_NUM 0 + +#define TOUCH_PAD_GPIO2_CHANNEL TOUCH_PAD_NUM2 +#define TOUCH_PAD_NUM2_GPIO_NUM 2 + +#define TOUCH_PAD_GPIO15_CHANNEL TOUCH_PAD_NUM3 +#define TOUCH_PAD_NUM3_GPIO_NUM 15 + +#define TOUCH_PAD_GPIO13_CHANNEL TOUCH_PAD_NUM4 +#define TOUCH_PAD_NUM4_GPIO_NUM 13 + +#define TOUCH_PAD_GPIO12_CHANNEL TOUCH_PAD_NUM5 +#define TOUCH_PAD_NUM5_GPIO_NUM 12 + +#define TOUCH_PAD_GPIO14_CHANNEL TOUCH_PAD_NUM6 +#define TOUCH_PAD_NUM6_GPIO_NUM 14 + +#define TOUCH_PAD_GPIO27_CHANNEL TOUCH_PAD_NUM7 +#define TOUCH_PAD_NUM7_GPIO_NUM 27 + +#define TOUCH_PAD_GPIO33_CHANNEL TOUCH_PAD_NUM8 +#define TOUCH_PAD_NUM8_GPIO_NUM 33 + +#define TOUCH_PAD_GPIO32_CHANNEL TOUCH_PAD_NUM9 +#define TOUCH_PAD_NUM9_GPIO_NUM 32 + +#endif diff --git a/tools/sdk/include/soc/soc/uart_channel.h b/tools/sdk/include/soc/soc/uart_channel.h new file mode 100644 index 00000000..5b8dc56d --- /dev/null +++ b/tools/sdk/include/soc/soc/uart_channel.h @@ -0,0 +1,61 @@ +// Copyright 2010-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef _SOC_UART_CHANNEL_H +#define _SOC_UART_CHANNEL_H + +//UART channels +#define UART_GPIO1_DIRECT_CHANNEL UART_NUM_0 +#define UART_NUM_0_TXD_DIRECT_GPIO_NUM 1 +#define UART_GPIO3_DIRECT_CHANNEL UART_NUM_0 +#define UART_NUM_0_RXD_DIRECT_GPIO_NUM 3 +#define UART_GPIO19_DIRECT_CHANNEL UART_NUM_0 +#define UART_NUM_0_CTS_DIRECT_GPIO_NUM 19 +#define UART_GPIO22_DIRECT_CHANNEL UART_NUM_0 +#define UART_NUM_0_RTS_DIRECT_GPIO_NUM 22 + +#define UART_TXD_GPIO1_DIRECT_CHANNEL UART_GPIO1_DIRECT_CHANNEL +#define UART_RXD_GPIO3_DIRECT_CHANNEL UART_GPIO3_DIRECT_CHANNEL +#define UART_CTS_GPIO19_DIRECT_CHANNEL UART_GPIO19_DIRECT_CHANNEL +#define UART_RTS_GPIO22_DIRECT_CHANNEL UART_GPIO22_DIRECT_CHANNEL + +#define UART_GPIO10_DIRECT_CHANNEL UART_NUM_1 +#define UART_NUM_1_TXD_DIRECT_GPIO_NUM 10 +#define UART_GPIO9_DIRECT_CHANNEL UART_NUM_1 +#define UART_NUM_1_RXD_DIRECT_GPIO_NUM 9 +#define UART_GPIO6_DIRECT_CHANNEL UART_NUM_1 +#define UART_NUM_1_CTS_DIRECT_GPIO_NUM 6 +#define UART_GPIO11_DIRECT_CHANNEL UART_NUM_1 +#define UART_NUM_1_RTS_DIRECT_GPIO_NUM 11 + +#define UART_TXD_GPIO10_DIRECT_CHANNEL UART_GPIO10_DIRECT_CHANNEL +#define UART_RXD_GPIO9_DIRECT_CHANNEL UART_GPIO9_DIRECT_CHANNEL +#define UART_CTS_GPIO6_DIRECT_CHANNEL UART_GPIO6_DIRECT_CHANNEL +#define UART_RTS_GPIO11_DIRECT_CHANNEL UART_GPIO11_DIRECT_CHANNEL + +#define UART_GPIO17_DIRECT_CHANNEL UART_NUM_2 +#define UART_NUM_2_TXD_DIRECT_GPIO_NUM 17 +#define UART_GPIO16_DIRECT_CHANNEL UART_NUM_2 +#define UART_NUM_2_RXD_DIRECT_GPIO_NUM 16 +#define UART_GPIO8_DIRECT_CHANNEL UART_NUM_2 +#define UART_NUM_2_CTS_DIRECT_GPIO_NUM 8 +#define UART_GPIO7_DIRECT_CHANNEL UART_NUM_2 +#define UART_NUM_2_RTS_DIRECT_GPIO_NUM 7 + +#define UART_TXD_GPIO17_DIRECT_CHANNEL UART_GPIO17_DIRECT_CHANNEL +#define UART_RXD_GPIO16_DIRECT_CHANNEL UART_GPIO16_DIRECT_CHANNEL +#define UART_CTS_GPIO8_DIRECT_CHANNEL UART_GPIO8_DIRECT_CHANNEL +#define UART_RTS_GPIO7_DIRECT_CHANNEL UART_GPIO7_DIRECT_CHANNEL + +#endif diff --git a/tools/sdk/include/soc/soc/uart_struct.h b/tools/sdk/include/soc/soc/uart_struct.h index 05b54867..eb14620a 100644 --- a/tools/sdk/include/soc/soc/uart_struct.h +++ b/tools/sdk/include/soc/soc/uart_struct.h @@ -13,6 +13,11 @@ // limitations under the License. #ifndef _SOC_UART_STRUCT_H_ #define _SOC_UART_STRUCT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + typedef volatile struct { union { struct { @@ -362,4 +367,9 @@ typedef volatile struct { extern uart_dev_t UART0; extern uart_dev_t UART1; extern uart_dev_t UART2; + +#ifdef __cplusplus +} +#endif + #endif /* _SOC_UART_STRUCT_H_ */ diff --git a/tools/sdk/include/soc/soc/uhci_struct.h b/tools/sdk/include/soc/soc/uhci_struct.h index 0c939796..1c1ff0b8 100644 --- a/tools/sdk/include/soc/soc/uhci_struct.h +++ b/tools/sdk/include/soc/soc/uhci_struct.h @@ -13,6 +13,11 @@ // limitations under the License. #ifndef _SOC_UHCI_STRUCT_H_ #define _SOC_UHCI_STRUCT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + typedef volatile struct { union { struct { @@ -334,4 +339,9 @@ typedef volatile struct { } uhci_dev_t; extern uhci_dev_t UHCI0; extern uhci_dev_t UHCI1; + +#ifdef __cplusplus +} +#endif + #endif /* _SOC_UHCI_STRUCT_H_ */ diff --git a/tools/sdk/include/spiffs/esp_spiffs.h b/tools/sdk/include/spiffs/esp_spiffs.h new file mode 100644 index 00000000..9a1f12c4 --- /dev/null +++ b/tools/sdk/include/spiffs/esp_spiffs.h @@ -0,0 +1,94 @@ +// Copyright 2015-2017 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef _ESP_SPIFFS_H_ +#define _ESP_SPIFFS_H_ + +#include +#include "esp_err.h" + +/** + * @brief Configuration structure for esp_vfs_spiffs_register + */ +typedef struct { + const char* base_path; /*!< File path prefix associated with the filesystem. */ + const char* partition_label; /*!< Optional, label of SPIFFS partition to use. If set to NULL, first partition with subtype=spiffs will be used. */ + size_t max_files; /*!< Maximum files that could be open at the same time. */ + bool format_if_mount_failed; /*!< If true, it will format the file system if it fails to mount. */ +} esp_vfs_spiffs_conf_t; + +/** + * Register and mount SPIFFS to VFS with given path prefix. + * + * @param conf Pointer to esp_vfs_spiffs_conf_t configuration structure + * + * @return + * - ESP_OK if success + * - ESP_ERR_NO_MEM if objects could not be allocated + * - ESP_ERR_INVALID_STATE if already mounted or partition is encrypted + * - ESP_ERR_NOT_FOUND if partition for SPIFFS was not found + * - ESP_FAIL if mount or format fails + */ +esp_err_t esp_vfs_spiffs_register(const esp_vfs_spiffs_conf_t * conf); + +/** + * Unregister and unmount SPIFFS from VFS + * + * @param partition_label Optional, label of the partition to unregister. + * If not specified, first partition with subtype=spiffs is used. + * + * @return + * - ESP_OK if successful + * - ESP_ERR_INVALID_STATE already unregistered + */ +esp_err_t esp_vfs_spiffs_unregister(const char* partition_label); + +/** + * Check if SPIFFS is mounted + * + * @param partition_label Optional, label of the partition to check. + * If not specified, first partition with subtype=spiffs is used. + * + * @return + * - true if mounted + * - false if not mounted + */ +bool esp_spiffs_mounted(const char* partition_label); + +/** + * Format the SPIFFS partition + * + * @param partition_label Optional, label of the partition to format. + * If not specified, first partition with subtype=spiffs is used. + * @return + * - ESP_OK if successful + * - ESP_FAIL on error + */ +esp_err_t esp_spiffs_format(const char* partition_label); + +/** + * Get information for SPIFFS + * + * @param partition_label Optional, label of the partition to get info for. + * If not specified, first partition with subtype=spiffs is used. + * @param[out] total_bytes Size of the file system + * @param[out] used_bytes Current used bytes in the file system + * + * @return + * - ESP_OK if success + * - ESP_ERR_INVALID_STATE if not mounted + */ +esp_err_t esp_spiffs_info(const char* partition_label, size_t *total_bytes, size_t *used_bytes); + +#endif /* _ESP_SPIFFS_H_ */ diff --git a/tools/sdk/include/spiffs/spiffs_config.h b/tools/sdk/include/spiffs/spiffs_config.h new file mode 100755 index 00000000..e0c9d7f9 --- /dev/null +++ b/tools/sdk/include/spiffs/spiffs_config.h @@ -0,0 +1,313 @@ +/* + * spiffs_config.h + * + * Created on: Jul 3, 2013 + * Author: petera + */ + +#ifndef SPIFFS_CONFIG_H_ +#define SPIFFS_CONFIG_H_ + +// ----------- 8< ------------ +// Following includes are for the linux test build of spiffs +// These may/should/must be removed/altered/replaced in your target +#include +#include +#include +#include +#include +#include +#include +#include + +// compile time switches +#define SPIFFS_TAG "SPIFFS" + +// Set generic spiffs debug output call. +#if CONGIG_SPIFFS_DBG +#define SPIFFS_DBG(...) ESP_LOGD(SPIFFS_TAG, __VA_ARGS__) +#else +#define SPIFFS_DBG(...) +#endif +#if CONGIG_SPIFFS_API_DBG +#define SPIFFS_API_DBG(...) ESP_LOGD(SPIFFS_TAG, __VA_ARGS__) +#else +#define SPIFFS_API_DBG(...) +#endif +#if CONGIG_SPIFFS_DBG +#define SPIFFS_GC_DBG(...) ESP_LOGD(SPIFFS_TAG, __VA_ARGS__) +#else +#define SPIFFS_GC_DBG(...) +#endif +#if CONGIG_SPIFFS_CACHE_DBG +#define SPIFFS_CACHE_DBG(...) ESP_LOGD(SPIFFS_TAG, __VA_ARGS__) +#else +#define SPIFFS_CACHE_DBG(...) +#endif +#if CONGIG_SPIFFS_CHECK_DBG +#define SPIFFS_CHECK_DBG(...) ESP_LOGD(SPIFFS_TAG, __VA_ARGS__) +#else +#define SPIFFS_CHECK_DBG(...) +#endif + +// needed types +typedef signed int s32_t; +typedef unsigned int u32_t; +typedef signed short s16_t; +typedef unsigned short u16_t; +typedef signed char s8_t; +typedef unsigned char u8_t; + +struct spiffs_t; +extern void spiffs_api_lock(struct spiffs_t *fs); +extern void spiffs_api_unlock(struct spiffs_t *fs); + +// Defines spiffs debug print formatters +// some general signed number +#define _SPIPRIi "%d" +// address +#define _SPIPRIad "%08x" +// block +#define _SPIPRIbl "%04x" +// page +#define _SPIPRIpg "%04x" +// span index +#define _SPIPRIsp "%04x" +// file descriptor +#define _SPIPRIfd "%d" +// file object id +#define _SPIPRIid "%04x" +// file flags +#define _SPIPRIfl "%02x" + + +// Enable/disable API functions to determine exact number of bytes +// for filedescriptor and cache buffers. Once decided for a configuration, +// this can be disabled to reduce flash. +#define SPIFFS_BUFFER_HELP 0 + +// Enables/disable memory read caching of nucleus file system operations. +// If enabled, memory area must be provided for cache in SPIFFS_mount. +#ifdef CONFIG_SPIFFS_CACHE +#define SPIFFS_CACHE (1) +#else +#define SPIFFS_CACHE (0) +#endif +#if SPIFFS_CACHE +// Enables memory write caching for file descriptors in hydrogen +#ifdef CONFIG_SPIFFS_CACHE_WR +#define SPIFFS_CACHE_WR (1) +#else +#define SPIFFS_CACHE_WR (0) +#endif + +// Enable/disable statistics on caching. Debug/test purpose only. +#ifdef CONFIG_SPIFFS_CACHE_STATS +#define SPIFFS_CACHE_STATS (1) +#else +#define SPIFFS_CACHE_STATS (0) +#endif +#endif + +// Always check header of each accessed page to ensure consistent state. +// If enabled it will increase number of reads, will increase flash. +#ifdef CONFIG_SPIFFS_PAGE_CHECK +#define SPIFFS_PAGE_CHECK (1) +#else +#define SPIFFS_PAGE_CHECK (0) +#endif + +// Define maximum number of gc runs to perform to reach desired free pages. +#define SPIFFS_GC_MAX_RUNS CONFIG_SPIFFS_GC_MAX_RUNS + +// Enable/disable statistics on gc. Debug/test purpose only. +#ifdef CONFIG_SPIFFS_GC_STATS +#define SPIFFS_GC_STATS (1) +#else +#define SPIFFS_GC_STATS (0) +#endif + +// Garbage collecting examines all pages in a block which and sums up +// to a block score. Deleted pages normally gives positive score and +// used pages normally gives a negative score (as these must be moved). +// To have a fair wear-leveling, the erase age is also included in score, +// whose factor normally is the most positive. +// The larger the score, the more likely it is that the block will +// picked for garbage collection. + +// Garbage collecting heuristics - weight used for deleted pages. +#define SPIFFS_GC_HEUR_W_DELET (5) +// Garbage collecting heuristics - weight used for used pages. +#define SPIFFS_GC_HEUR_W_USED (-1) +// Garbage collecting heuristics - weight used for time between +// last erased and erase of this block. +#define SPIFFS_GC_HEUR_W_ERASE_AGE (50) + +// Object name maximum length. Note that this length include the +// zero-termination character, meaning maximum string of characters +// can at most be SPIFFS_OBJ_NAME_LEN - 1. +#define SPIFFS_OBJ_NAME_LEN (CONFIG_SPIFFS_OBJ_NAME_LEN) + +// Maximum length of the metadata associated with an object. +// Setting to non-zero value enables metadata-related API but also +// changes the on-disk format, so the change is not backward-compatible. +// +// Do note: the meta length must never exceed +// logical_page_size - (SPIFFS_OBJ_NAME_LEN + 64) +// +// This is derived from following: +// logical_page_size - (SPIFFS_OBJ_NAME_LEN + sizeof(spiffs_page_header) + +// spiffs_object_ix_header fields + at least some LUT entries) +#define SPIFFS_OBJ_META_LEN (0) + +// Size of buffer allocated on stack used when copying data. +// Lower value generates more read/writes. No meaning having it bigger +// than logical page size. +#define SPIFFS_COPY_BUFFER_STACK (256) + +// Enable this to have an identifiable spiffs filesystem. This will look for +// a magic in all sectors to determine if this is a valid spiffs system or +// not on mount point. If not, SPIFFS_format must be called prior to mounting +// again. +#ifdef CONFIG_SPIFFS_USE_MAGIC +#define SPIFFS_USE_MAGIC (1) +#else +#define SPIFFS_USE_MAGIC (0) +#endif + +#if SPIFFS_USE_MAGIC +// Only valid when SPIFFS_USE_MAGIC is enabled. If SPIFFS_USE_MAGIC_LENGTH is +// enabled, the magic will also be dependent on the length of the filesystem. +// For example, a filesystem configured and formatted for 4 megabytes will not +// be accepted for mounting with a configuration defining the filesystem as 2 +// megabytes. +#ifdef CONFIG_SPIFFS_USE_MAGIC_LENGTH +#define SPIFFS_USE_MAGIC_LENGTH (1) +#else +#define SPIFFS_USE_MAGIC_LENGTH (0) +#endif +#endif + +// SPIFFS_LOCK and SPIFFS_UNLOCK protects spiffs from reentrancy on api level +// These should be defined on a multithreaded system + +// define this to enter a mutex if you're running on a multithreaded system +#define SPIFFS_LOCK(fs) spiffs_api_lock(fs) +// define this to exit a mutex if you're running on a multithreaded system +#define SPIFFS_UNLOCK(fs) spiffs_api_unlock(fs) + +// Enable if only one spiffs instance with constant configuration will exist +// on the target. This will reduce calculations, flash and memory accesses. +// Parts of configuration must be defined below instead of at time of mount. +#define SPIFFS_SINGLETON 0 + +// Enable this if your target needs aligned data for index tables +#define SPIFFS_ALIGNED_OBJECT_INDEX_TABLES 0 + +// Enable this if you want the HAL callbacks to be called with the spiffs struct +#define SPIFFS_HAL_CALLBACK_EXTRA 1 + +// Enable this if you want to add an integer offset to all file handles +// (spiffs_file). This is useful if running multiple instances of spiffs on +// same target, in order to recognise to what spiffs instance a file handle +// belongs. +// NB: This adds config field fh_ix_offset in the configuration struct when +// mounting, which must be defined. +#define SPIFFS_FILEHDL_OFFSET 0 + +// Enable this to compile a read only version of spiffs. +// This will reduce binary size of spiffs. All code comprising modification +// of the file system will not be compiled. Some config will be ignored. +// HAL functions for erasing and writing to spi-flash may be null. Cache +// can be disabled for even further binary size reduction (and ram savings). +// Functions modifying the fs will return SPIFFS_ERR_RO_NOT_IMPL. +// If the file system cannot be mounted due to aborted erase operation and +// SPIFFS_USE_MAGIC is enabled, SPIFFS_ERR_RO_ABORTED_OPERATION will be +// returned. +// Might be useful for e.g. bootloaders and such. +#define SPIFFS_READ_ONLY 0 + +// Enable this to add a temporal file cache using the fd buffer. +// The effects of the cache is that SPIFFS_open will find the file faster in +// certain cases. It will make it a lot easier for spiffs to find files +// opened frequently, reducing number of readings from the spi flash for +// finding those files. +// This will grow each fd by 6 bytes. If your files are opened in patterns +// with a degree of temporal locality, the system is optimized. +// Examples can be letting spiffs serve web content, where one file is the css. +// The css is accessed for each html file that is opened, meaning it is +// accessed almost every second time a file is opened. Another example could be +// a log file that is often opened, written, and closed. +// The size of the cache is number of given file descriptors, as it piggybacks +// on the fd update mechanism. The cache lives in the closed file descriptors. +// When closed, the fd know the whereabouts of the file. Instead of forgetting +// this, the temporal cache will keep handling updates to that file even if the +// fd is closed. If the file is opened again, the location of the file is found +// directly. If all available descriptors become opened, all cache memory is +// lost. +#define SPIFFS_TEMPORAL_FD_CACHE 1 + +// Temporal file cache hit score. Each time a file is opened, all cached files +// will lose one point. If the opened file is found in cache, that entry will +// gain SPIFFS_TEMPORAL_CACHE_HIT_SCORE points. One can experiment with this +// value for the specific access patterns of the application. However, it must +// be between 1 (no gain for hitting a cached entry often) and 255. +#define SPIFFS_TEMPORAL_CACHE_HIT_SCORE 4 + +// Enable to be able to map object indices to memory. +// This allows for faster and more deterministic reading if cases of reading +// large files and when changing file offset by seeking around a lot. +// When mapping a file's index, the file system will be scanned for index pages +// and the info will be put in memory provided by user. When reading, the +// memory map can be looked up instead of searching for index pages on the +// medium. This way, user can trade memory against performance. +// Whole, parts of, or future parts not being written yet can be mapped. The +// memory array will be owned by spiffs and updated accordingly during garbage +// collecting or when modifying the indices. The latter is invoked by when the +// file is modified in some way. The index buffer is tied to the file +// descriptor. +#define SPIFFS_IX_MAP 1 + +// Set SPIFFS_TEST_VISUALISATION to non-zero to enable SPIFFS_vis function +// in the api. This function will visualize all filesystem using given printf +// function. +#ifdef CONFIG_SPIFFS_TEST_VISUALISATION +#define SPIFFS_TEST_VISUALISATION 1 +#else +#define SPIFFS_TEST_VISUALISATION 0 +#endif +#if SPIFFS_TEST_VISUALISATION +#ifndef spiffs_printf +#define spiffs_printf(...) ESP_LOGD(SPIFFS_TAG, __VA_ARGS__) +#endif +// spiffs_printf argument for a free page +#define SPIFFS_TEST_VIS_FREE_STR "_" +// spiffs_printf argument for a deleted page +#define SPIFFS_TEST_VIS_DELE_STR "/" +// spiffs_printf argument for an index page for given object id +#define SPIFFS_TEST_VIS_INDX_STR(id) "i" +// spiffs_printf argument for a data page for given object id +#define SPIFFS_TEST_VIS_DATA_STR(id) "d" +#endif + +// Types depending on configuration such as the amount of flash bytes +// given to spiffs file system in total (spiffs_file_system_size), +// the logical block size (log_block_size), and the logical page size +// (log_page_size) + +// Block index type. Make sure the size of this type can hold +// the highest number of all blocks - i.e. spiffs_file_system_size / log_block_size +typedef u16_t spiffs_block_ix; +// Page index type. Make sure the size of this type can hold +// the highest page number of all pages - i.e. spiffs_file_system_size / log_page_size +typedef u16_t spiffs_page_ix; +// Object id type - most significant bit is reserved for index flag. Make sure the +// size of this type can hold the highest object id on a full system, +// i.e. 2 + (spiffs_file_system_size / (2*log_page_size))*2 +typedef u16_t spiffs_obj_id; +// Object span index type. Make sure the size of this type can +// hold the largest possible span index on the system - +// i.e. (spiffs_file_system_size / log_page_size) - 1 +typedef u16_t spiffs_span_ix; + +#endif /* SPIFFS_CONFIG_H_ */ diff --git a/tools/sdk/include/tcpip_adapter/tcpip_adapter.h b/tools/sdk/include/tcpip_adapter/tcpip_adapter.h index f1a0a9e2..2e6db6b5 100644 --- a/tools/sdk/include/tcpip_adapter/tcpip_adapter.h +++ b/tools/sdk/include/tcpip_adapter/tcpip_adapter.h @@ -154,6 +154,10 @@ typedef struct tcpip_adapter_api_msg_s { #define TCPIP_ADAPTER_IPC_CALL(_if, _mac, _ip, _hostname, _fn) do {\ tcpip_adapter_api_msg_t msg;\ + if (tcpip_inited == false) {\ + ESP_LOGE(TAG, "tcpip_adapter is not initialized!");\ + abort();\ + }\ memset(&msg, 0, sizeof(msg));\ msg.tcpip_if = (_if);\ msg.mac = (_mac);\ @@ -168,6 +172,9 @@ typedef struct tcpip_adapter_api_msg_s { }\ }while(0) +typedef struct tcpip_adatper_ip_lost_timer_s { + bool timer_running; +} tcpip_adapter_ip_lost_timer_t; /** * @brief Initialize tcpip adapter @@ -177,13 +184,8 @@ typedef struct tcpip_adapter_api_msg_s { void tcpip_adapter_init(void); /** - * @brief Start an interface with specific MAC and IP + * @brief Start the ethernet interface with specific MAC and IP * - * softAP or station interface will be initialized, connect WiFi stack with TCPIP stack. - * - * For softAP interface, DHCP server will be started automatically. - * - * @param[in] tcpip_if: the interface which we will start * @param[in] mac: set MAC address of this interface * @param[in] ip_info: set IP address of this interface * @@ -191,7 +193,37 @@ void tcpip_adapter_init(void); * ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS * ESP_ERR_NO_MEM */ -esp_err_t tcpip_adapter_start(tcpip_adapter_if_t tcpip_if, uint8_t *mac, tcpip_adapter_ip_info_t *ip_info); +esp_err_t tcpip_adapter_eth_start(uint8_t *mac, tcpip_adapter_ip_info_t *ip_info); + +/** + * @brief Start the Wi-Fi station interface with specific MAC and IP + * + * Station interface will be initialized, connect WiFi stack with TCPIP stack. + * + * @param[in] mac: set MAC address of this interface + * @param[in] ip_info: set IP address of this interface + * + * @return ESP_OK + * ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS + * ESP_ERR_NO_MEM + */ +esp_err_t tcpip_adapter_sta_start(uint8_t *mac, tcpip_adapter_ip_info_t *ip_info); + +/** + * @brief Start the Wi-Fi AP interface with specific MAC and IP + * + * softAP interface will be initialized, connect WiFi stack with TCPIP stack. + * + * DHCP server will be started automatically. + * + * @param[in] mac: set MAC address of this interface + * @param[in] ip_info: set IP address of this interface + * + * @return ESP_OK + * ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS + * ESP_ERR_NO_MEM + */ +esp_err_t tcpip_adapter_ap_start(uint8_t *mac, tcpip_adapter_ip_info_t *ip_info); /** * @brief Stop an interface @@ -253,13 +285,44 @@ esp_err_t tcpip_adapter_get_ip_info(tcpip_adapter_if_t tcpip_if, tcpip_adapter_i * This function is mainly used for setting static IP. * * @param[in] tcpip_if: the interface which we want to set IP information - * @param[in] ip_info: If successful, IP information will be returned in this argument. + * @param[in] ip_info: store the IP information which needs to be set to specified interface * * @return ESP_OK * ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS */ esp_err_t tcpip_adapter_set_ip_info(tcpip_adapter_if_t tcpip_if, tcpip_adapter_ip_info_t *ip_info); +/** + * @brief Get interface's old IP information + * + * When the interface successfully gets a valid IP from DHCP server or static configured, a copy of + * the IP information is set to the old IP information. When IP lost timer expires, the old IP + * information is reset to 0. + * + * @param[in] tcpip_if: the interface which we want to get old IP information + * @param[out] ip_info: If successful, IP information will be returned in this argument. + * + * @return ESP_OK + * ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS + */ +esp_err_t tcpip_adapter_get_old_ip_info(tcpip_adapter_if_t tcpip_if, tcpip_adapter_ip_info_t *ip_info); + +/** + * @brief Set interface's old IP information + * + * When the interface successfully gets a valid IP from DHCP server or static configured, a copy of + * the IP information is set to the old IP information. When IP lost timer expires, the old IP + * information is reset to 0. + * + * @param[in] tcpip_if: the interface which we want to set old IP information + * @param[in] ip_info: store the IP information which needs to be set to specified interface + * + * @return ESP_OK + * ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS + */ +esp_err_t tcpip_adapter_set_old_ip_info(tcpip_adapter_if_t tcpip_if, tcpip_adapter_ip_info_t *ip_info); + + /** * @brief create interface's linklocal IPv6 information * diff --git a/tools/sdk/include/vfs/esp_vfs.h b/tools/sdk/include/vfs/esp_vfs.h index a3ce6b95..6ced2ce2 100644 --- a/tools/sdk/include/vfs/esp_vfs.h +++ b/tools/sdk/include/vfs/esp_vfs.h @@ -17,6 +17,7 @@ #include #include +#include #include "esp_err.h" #include #include @@ -140,6 +141,10 @@ typedef struct int (*rmdir_p)(void* ctx, const char* name); int (*rmdir)(const char* name); }; + union { + int (*fcntl_p)(void* ctx, int fd, int cmd, va_list args); + int (*fcntl)(int fd, int cmd, va_list args); + }; } esp_vfs_t; diff --git a/tools/sdk/include/vfs/esp_vfs_dev.h b/tools/sdk/include/vfs/esp_vfs_dev.h index bb2579ee..b51527fc 100644 --- a/tools/sdk/include/vfs/esp_vfs_dev.h +++ b/tools/sdk/include/vfs/esp_vfs_dev.h @@ -1,4 +1,4 @@ -// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// Copyright 2015-2017 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -17,6 +17,15 @@ #include "esp_vfs.h" +/** + * @brief Line ending settings + */ +typedef enum { + ESP_LINE_ENDINGS_CRLF,//!< CR + LF + ESP_LINE_ENDINGS_CR, //!< CR + ESP_LINE_ENDINGS_LF, //!< LF +} esp_line_endings_t; + /** * @brief add /dev/uart virtual filesystem driver * @@ -24,5 +33,52 @@ */ void esp_vfs_dev_uart_register(); +/** + * @brief Set the line endings expected to be received on UART + * + * This specifies the conversion between line endings received on UART and + * newlines ('\n', LF) passed into stdin: + * + * - ESP_LINE_ENDINGS_CRLF: convert CRLF to LF + * - ESP_LINE_ENDINGS_CR: convert CR to LF + * - ESP_LINE_ENDINGS_LF: no modification + * + * @note this function is not thread safe w.r.t. reading from UART + * + * @param mode line endings expected on UART + */ +void esp_vfs_dev_uart_set_rx_line_endings(esp_line_endings_t mode); + +/** + * @brief Set the line endings to sent to UART + * + * This specifies the conversion between newlines ('\n', LF) on stdout and line + * endings sent over UART: + * + * - ESP_LINE_ENDINGS_CRLF: convert LF to CRLF + * - ESP_LINE_ENDINGS_CR: convert LF to CR + * - ESP_LINE_ENDINGS_LF: no modification + * + * @note this function is not thread safe w.r.t. writing to UART + * + * @param mode line endings to send to UART + */ +void esp_vfs_dev_uart_set_tx_line_endings(esp_line_endings_t mode); + +/** + * @brief set VFS to use simple functions for reading and writing UART + * Read is non-blocking, write is busy waiting until TX FIFO has enough space. + * These functions are used by default. + * @param uart_num UART peripheral number + */ +void esp_vfs_dev_uart_use_nonblocking(int uart_num); + +/** + * @brief set VFS to use UART driver for reading and writing + * @note application must configure UART driver before calling these functions + * With these functions, read and write are blocking and interrupt-driven. + * @param uart_num UART peripheral number + */ +void esp_vfs_dev_uart_use_driver(int uart_num); #endif //__ESP_VFS_DEV_H__ diff --git a/tools/sdk/ld/esp32.common.ld b/tools/sdk/ld/esp32.common.ld index 883dd29d..99f9dd54 100644 --- a/tools/sdk/ld/esp32.common.ld +++ b/tools/sdk/ld/esp32.common.ld @@ -84,6 +84,7 @@ SECTIONS *(.iram1 .iram1.*) *libfreertos.a:(.literal .text .literal.* .text.*) *libheap.a:multi_heap.o(.literal .text .literal.* .text.*) + *libheap.a:multi_heap_poisoning.o(.literal .text .literal.* .text.*) *libesp32.a:panic.o(.literal .text .literal.* .text.*) *libesp32.a:core_dump.o(.literal .text .literal.* .text.*) *libapp_trace.a:(.literal .text .literal.* .text.*) @@ -93,6 +94,7 @@ SECTIONS *librtc.a:(.literal .text .literal.* .text.*) *libsoc.a:(.literal .text .literal.* .text.*) *libhal.a:(.literal .text .literal.* .text.*) + *libgcc.a:lib2funcs.o(.literal .text .literal.* .text.*) *libspi_flash.a:spi_flash_rom_patch.o(.literal .text .literal.* .text.*) _iram_text_end = ABSOLUTE(.); } > iram0_0_seg @@ -116,6 +118,7 @@ SECTIONS *libphy.a:(.rodata .rodata.*) *libapp_trace.a:(.rodata .rodata.*) *libheap.a:multi_heap.o(.rodata .rodata.*) + *libheap.a:multi_heap_poisoning.o(.rodata .rodata.*) _data_end = ABSOLUTE(.); . = ALIGN(4); } >dram0_0_seg @@ -154,11 +157,13 @@ SECTIONS *(.rodata1) __XT_EXCEPTION_TABLE_ = ABSOLUTE(.); *(.xt_except_table) - *(.gcc_except_table) + *(.gcc_except_table .gcc_except_table.*) *(.gnu.linkonce.e.*) *(.gnu.version_r) - *(.eh_frame) . = (. + 3) & ~ 3; + __eh_frame = ABSOLUTE(.); + KEEP(*(.eh_frame)) + . = (. + 7) & ~ 3; /* C++ constructor and destructor tables, properly ordered: */ __init_array_start = ABSOLUTE(.); KEEP (*crtbegin.o(.ctors)) diff --git a/tools/sdk/ld/esp32.ld b/tools/sdk/ld/esp32.ld index b27a49ee..2df1b3e8 100644 --- a/tools/sdk/ld/esp32.ld +++ b/tools/sdk/ld/esp32.ld @@ -16,6 +16,11 @@ */ #include "sdkconfig.h" +/* If BT is not built at all */ +#ifndef CONFIG_BT_RESERVE_DRAM +#define CONFIG_BT_RESERVE_DRAM 0 +#endif + MEMORY { /* All these values assume the flash cache is on, and have the blocks this uses subtracted from the length diff --git a/tools/sdk/ld/esp32.peripherals.ld b/tools/sdk/ld/esp32.peripherals.ld index 79becfc9..2ff635f2 100644 --- a/tools/sdk/ld/esp32.peripherals.ld +++ b/tools/sdk/ld/esp32.peripherals.ld @@ -3,6 +3,9 @@ PROVIDE ( SPI1 = 0x3ff42000 ); PROVIDE ( SPI0 = 0x3ff43000 ); PROVIDE ( GPIO = 0x3ff44000 ); PROVIDE ( SIGMADELTA = 0x3ff44f00 ); +PROVIDE ( RTCCNTL = 0x3ff48000 ); +PROVIDE ( RTCIO = 0x3ff48400 ); +PROVIDE ( SENS = 0x3ff48800 ); PROVIDE ( UHCI1 = 0x3ff4C000 ); PROVIDE ( I2S0 = 0x3ff4F000 ); PROVIDE ( UART1 = 0x3ff50000 ); diff --git a/tools/sdk/ld/esp32.rom.ld b/tools/sdk/ld/esp32.rom.ld index 6961854b..d60eeb90 100644 --- a/tools/sdk/ld/esp32.rom.ld +++ b/tools/sdk/ld/esp32.rom.ld @@ -4,7 +4,6 @@ Generated for ROM with MD5sum: ab8282ae908fe9e7a63fb2a4ac2df013 ../../rom_image/prorom.elf */ PROVIDE ( abort = 0x4000bba4 ); -PROVIDE ( abs = 0x40056340 ); PROVIDE ( __absvdi2 = 0x4006387c ); PROVIDE ( __absvsi2 = 0x40063868 ); PROVIDE ( Add2SelfBigHex256 = 0x40015b7c ); @@ -21,15 +20,8 @@ PROVIDE ( aes_128_cbc_encrypt = 0x4005cc18 ); PROVIDE ( aes_unwrap = 0x4005ccf0 ); PROVIDE ( app_gpio_arg = 0x3ffe003c ); PROVIDE ( app_gpio_handler = 0x3ffe0040 ); -PROVIDE ( __ascii_wctomb = 0x40058ef0 ); -PROVIDE ( asctime = 0x40059588 ); -PROVIDE ( asctime_r = 0x40000ec8 ); PROVIDE ( __ashldi3 = 0x4000c818 ); PROVIDE ( __ashrdi3 = 0x4000c830 ); -PROVIDE ( atoi = 0x400566c4 ); -PROVIDE ( _atoi_r = 0x400566d4 ); -PROVIDE ( atol = 0x400566ec ); -PROVIDE ( _atol_r = 0x400566fc ); PROVIDE ( base64_decode = 0x4005ced8 ); PROVIDE ( base64_encode = 0x4005cdbc ); PROVIDE ( BasePoint_x_256 = 0x3ff97488 ); @@ -49,7 +41,6 @@ PROVIDE ( btdm_r_modules_func_p_get = 0x4005427c ); PROVIDE ( btdm_r_modules_func_p_set = 0x40054270 ); PROVIDE ( btdm_r_plf_func_p_set = 0x40054288 ); PROVIDE ( bt_util_buf_env = 0x3ffb8bd4 ); -PROVIDE ( bzero = 0x4000c1f4 ); PROVIDE ( cache_flash_mmu_set_rom = 0x400095e0 ); PROVIDE ( Cache_Flush_rom = 0x40009a14 ); PROVIDE ( Cache_Read_Disable_rom = 0x40009ab8 ); @@ -60,10 +51,7 @@ PROVIDE ( cache_sram_mmu_set_rom = 0x400097f4 ); PROVIDE ( calc_rtc_memory_crc = 0x40008170 ); PROVIDE ( calloc = 0x4000bee4 ); PROVIDE ( _calloc_r = 0x4000bbf8 ); -PROVIDE ( _cleanup = 0x40001df8 ); -PROVIDE ( _cleanup_r = 0x40001d48 ); PROVIDE ( __clear_cache = 0x40063860 ); -PROVIDE ( close = 0x40001778 ); PROVIDE ( _close_r = 0x4000bd3c ); PROVIDE ( __clrsbdi2 = 0x40064a38 ); PROVIDE ( __clrsbsi2 = 0x40064a20 ); @@ -79,9 +67,6 @@ PROVIDE ( crc32_be = 0x4005d024 ); PROVIDE ( crc32_le = 0x4005cfec ); PROVIDE ( crc8_be = 0x4005d114 ); PROVIDE ( crc8_le = 0x4005d0e0 ); -PROVIDE ( creat = 0x40000e8c ); -PROVIDE ( ctime = 0x400595b0 ); -PROVIDE ( ctime_r = 0x400595c4 ); PROVIDE ( _ctype_ = 0x3ff96354 ); PROVIDE ( __ctype_ptr__ = 0x3ff96350 ); PROVIDE ( __ctzdi2 = 0x4000ca64 ); @@ -118,7 +103,6 @@ PROVIDE ( dh_group2_generator = 0x3ff9ada2 ); PROVIDE ( dh_group2_prime = 0x3ff9ad22 ); PROVIDE ( dh_group5_generator = 0x3ff9ad21 ); PROVIDE ( dh_group5_prime = 0x3ff9ac61 ); -PROVIDE ( div = 0x40056348 ); PROVIDE ( __divdc3 = 0x40064460 ); PROVIDE ( __divdf3 = 0x40002954 ); PROVIDE ( __divdi3 = 0x4000ca84 ); @@ -126,14 +110,10 @@ PROVIDE ( __divsc3 = 0x40064200 ); PROVIDE ( __divsf3 = 0x4000234c ); PROVIDE ( __divsi3 = 0x4000c7b8 ); PROVIDE ( g_rom_spiflash_dummy_len_plus = 0x3ffae290 ); -PROVIDE ( __dummy_lock = 0x4000c728 ); -PROVIDE ( __dummy_lock_try = 0x4000c730 ); PROVIDE ( ecc_env = 0x3ffb8d60 ); PROVIDE ( ecc_Jacobian_InfinityPoint256 = 0x3ff972e8 ); PROVIDE ( em_buf_env = 0x3ffb8d74 ); PROVIDE ( environ = 0x3ffae0b4 ); -PROVIDE ( __env_lock = 0x40001fd4 ); -PROVIDE ( __env_unlock = 0x40001fe0 ); PROVIDE ( __eqdf2 = 0x400636a8 ); PROVIDE ( __eqsf2 = 0x40063374 ); PROVIDE ( esp_crc8 = 0x4005d144 ); @@ -143,13 +123,8 @@ PROVIDE ( ets_startup_callback = 0x3ffe0404 ); PROVIDE ( exc_cause_table = 0x3ff991d0 ); PROVIDE ( _exit_r = 0x4000bd28 ); PROVIDE ( __extendsfdf2 = 0x40002c34 ); -PROVIDE ( fclose = 0x400020ac ); -PROVIDE ( _fclose_r = 0x40001fec ); -PROVIDE ( fflush = 0x40059394 ); -PROVIDE ( _fflush_r = 0x40059320 ); PROVIDE ( __ffsdi2 = 0x4000ca2c ); PROVIDE ( __ffssi2 = 0x4000c804 ); -PROVIDE ( _findenv_r = 0x40001f44 ); PROVIDE ( __fixdfdi = 0x40002ac4 ); PROVIDE ( __fixdfsi = 0x40002a78 ); PROVIDE ( __fixsfdi = 0x4000244c ); @@ -165,31 +140,19 @@ PROVIDE ( __floatundidf = 0x4000c978 ); PROVIDE ( __floatundisf = 0x4000c8b0 ); PROVIDE ( __floatunsidf = 0x4000c938 ); PROVIDE ( __floatunsisf = 0x4000c864 ); -PROVIDE ( __fp_lock_all = 0x40001f1c ); -PROVIDE ( __fp_unlock_all = 0x40001f30 ); -PROVIDE ( fputwc = 0x40058ea8 ); -PROVIDE ( __fputwc = 0x40058da0 ); -PROVIDE ( _fputwc_r = 0x40058e4c ); PROVIDE ( free = 0x4000beb8 ); PROVIDE ( _free_r = 0x4000bbcc ); PROVIDE ( _fstat_r = 0x4000bccc ); -PROVIDE ( _fwalk = 0x4000c738 ); -PROVIDE ( _fwalk_reent = 0x4000c770 ); PROVIDE ( __gcc_bcmp = 0x40064a70 ); PROVIDE ( __gedf2 = 0x40063768 ); PROVIDE ( __gesf2 = 0x4006340c ); -PROVIDE ( __get_current_time_locale = 0x40001834 ); -PROVIDE ( _getenv_r = 0x40001fbc ); PROVIDE ( _getpid_r = 0x4000bcfc ); PROVIDE ( __getreent = 0x4000be8c ); PROVIDE ( _gettimeofday_r = 0x4000bc58 ); -PROVIDE ( __gettzinfo = 0x40001fcc ); PROVIDE ( GF_Jacobian_Point_Addition256 = 0x400163a4 ); PROVIDE ( GF_Jacobian_Point_Double256 = 0x40016260 ); PROVIDE ( GF_Point_Jacobian_To_Affine256 = 0x40016b0c ); PROVIDE ( _global_impure_ptr = 0x3ffae0b0 ); -PROVIDE ( gmtime = 0x40059848 ); -PROVIDE ( gmtime_r = 0x40059868 ); PROVIDE ( g_phyFuns_instance = 0x3ffae0c4 ); PROVIDE ( g_rom_flashchip = 0x3ffae270 ); PROVIDE ( __gtdf2 = 0x400636dc ); @@ -216,26 +179,10 @@ PROVIDE ( hmac_sha1 = 0x40060acc ); PROVIDE ( hmac_sha1_vector = 0x400609e4 ); PROVIDE ( hmac_sha256 = 0x40060d58 ); PROVIDE ( hmac_sha256_vector = 0x40060c84 ); -PROVIDE ( isalnum = 0x40000f04 ); -PROVIDE ( isalpha = 0x40000f18 ); -PROVIDE ( isascii = 0x4000c20c ); -PROVIDE ( _isatty_r = 0x40000ea0 ); -PROVIDE ( isblank = 0x40000f2c ); -PROVIDE ( iscntrl = 0x40000f50 ); -PROVIDE ( isdigit = 0x40000f64 ); -PROVIDE ( isgraph = 0x40000f94 ); -PROVIDE ( islower = 0x40000f78 ); -PROVIDE ( isprint = 0x40000fa8 ); -PROVIDE ( ispunct = 0x40000fc0 ); -PROVIDE ( isspace = 0x40000fd4 ); -PROVIDE ( isupper = 0x40000fe8 ); -PROVIDE ( itoa = 0x400566b4 ); -PROVIDE ( __itoa = 0x40056678 ); PROVIDE ( jd_decomp = 0x400613e8 ); PROVIDE ( jd_prepare = 0x40060fa8 ); PROVIDE ( ke_env = 0x3ffb93cc ); PROVIDE ( _kill_r = 0x4000bd10 ); -PROVIDE ( labs = 0x40056370 ); PROVIDE ( lb_default_handler = 0x3ff982b8 ); PROVIDE ( lb_default_state_tab_p_get = 0x4001c198 ); PROVIDE ( lb_env = 0x3ffb9424 ); @@ -251,7 +198,6 @@ PROVIDE ( ld_acl_br_types = 0x3ff98a36 ); PROVIDE ( ld_acl_edr_sizes = 0x3ff98a14 ); PROVIDE ( ld_acl_edr_types = 0x3ff98a22 ); PROVIDE ( ld_env = 0x3ffb9510 ); -PROVIDE ( ldiv = 0x40056378 ); PROVIDE ( ld_pcm_settings_dft = 0x3ff98a0c ); PROVIDE ( ld_sched_params = 0x3ffb96c0 ); PROVIDE ( ld_sync_train_channels = 0x3ff98a3c ); @@ -292,25 +238,14 @@ PROVIDE ( lm_n_page_tab = 0x3ff990e8 ); PROVIDE ( lmp_desc_tab = 0x3ff96e6c ); PROVIDE ( lmp_ext_desc_tab = 0x3ff96d9c ); PROVIDE ( lm_state = 0x3ffb9a1c ); -PROVIDE ( __locale_charset = 0x40059540 ); -PROVIDE ( __locale_cjk_lang = 0x40059558 ); -PROVIDE ( localeconv = 0x4005957c ); -PROVIDE ( _localeconv_r = 0x40059560 ); -PROVIDE ( __locale_mb_cur_max = 0x40059548 ); -PROVIDE ( __locale_msgcharset = 0x40059550 ); -PROVIDE ( localtime = 0x400595dc ); -PROVIDE ( localtime_r = 0x400595fc ); -PROVIDE ( _lock_acquire = 0x4000be14 ); PROVIDE ( _lock_acquire_recursive = 0x4000be28 ); PROVIDE ( _lock_close = 0x4000bdec ); PROVIDE ( _lock_close_recursive = 0x4000be00 ); PROVIDE ( _lock_init = 0x4000bdc4 ); PROVIDE ( _lock_init_recursive = 0x4000bdd8 ); -PROVIDE ( _lock_release = 0x4000be64 ); PROVIDE ( _lock_release_recursive = 0x4000be78 ); PROVIDE ( _lock_try_acquire = 0x4000be3c ); PROVIDE ( _lock_try_acquire_recursive = 0x4000be50 ); -PROVIDE ( longjmp = 0x400562cc ); PROVIDE ( _lseek_r = 0x4000bd8c ); PROVIDE ( __lshrdi3 = 0x4000c84c ); PROVIDE ( __ltdf2 = 0x40063790 ); @@ -323,14 +258,6 @@ PROVIDE ( MD5Final = 0x4005db1c ); PROVIDE ( MD5Init = 0x4005da7c ); PROVIDE ( MD5Update = 0x4005da9c ); PROVIDE ( md5_vector = 0x4005db80 ); -PROVIDE ( memccpy = 0x4000c220 ); -PROVIDE ( memchr = 0x4000c244 ); -PROVIDE ( memcmp = 0x4000c260 ); -PROVIDE ( memcpy = 0x4000c2c8 ); -PROVIDE ( memmove = 0x4000c3c0 ); -PROVIDE ( memrchr = 0x4000c400 ); -PROVIDE ( memset = 0x4000c44c ); -PROVIDE ( mktime = 0x4005a5e8 ); PROVIDE ( mmu_init = 0x400095a4 ); PROVIDE ( __moddi3 = 0x4000cd4c ); PROVIDE ( __modsi3 = 0x4000c7c0 ); @@ -360,7 +287,6 @@ PROVIDE ( __nesf2 = 0x40063374 ); PROVIDE ( notEqual256 = 0x40015b04 ); PROVIDE ( __nsau_data = 0x3ff96544 ); PROVIDE ( one_bits = 0x3ff971f8 ); -PROVIDE ( open = 0x4000178c ); PROVIDE ( _open_r = 0x4000bd54 ); PROVIDE ( __paritysi2 = 0x40002f3c ); PROVIDE ( pbkdf2_sha1 = 0x40060ba4 ); @@ -372,10 +298,6 @@ PROVIDE ( __powidf2 = 0x400638d4 ); PROVIDE ( __powisf2 = 0x4006389c ); PROVIDE ( _Pri_4_HandlerAddress = 0x3ffe0648 ); PROVIDE ( _Pri_5_HandlerAddress = 0x3ffe064c ); -PROVIDE ( qsort = 0x40056424 ); -PROVIDE ( _raise_r = 0x4000bc70 ); -PROVIDE ( rand = 0x40001058 ); -PROVIDE ( rand_r = 0x400010d4 ); PROVIDE ( r_btdm_option_data = 0x3ffae6e0 ); PROVIDE ( r_bt_util_buf_acl_rx_alloc = 0x40010218 ); PROVIDE ( r_bt_util_buf_acl_rx_free = 0x40010234 ); @@ -419,7 +341,6 @@ PROVIDE ( r_E22 = 0x400109b4 ); PROVIDE ( r_E3 = 0x40010a58 ); PROVIDE ( r_ea_alarm_clear = 0x40015ab4 ); PROVIDE ( r_ea_alarm_set = 0x40015a10 ); -PROVIDE ( read = 0x400017dc ); PROVIDE ( _read_r = 0x4000bda8 ); PROVIDE ( r_ea_elt_cancel = 0x400150d0 ); PROVIDE ( r_ea_elt_create = 0x40015264 ); @@ -1440,24 +1361,10 @@ PROVIDE ( rwip_priority = 0x3ff99159 ); PROVIDE ( rwip_rf = 0x3ffbdb28 ); PROVIDE ( rwip_rf_p_get = 0x400558f4 ); PROVIDE ( r_XorKey = 0x400112c0 ); -PROVIDE ( sbrk = 0x400017f4 ); PROVIDE ( _sbrk_r = 0x4000bce4 ); -PROVIDE ( __sccl = 0x4000c498 ); -PROVIDE ( __sclose = 0x400011b8 ); -PROVIDE ( __seofread = 0x40001148 ); -PROVIDE ( setjmp = 0x40056268 ); -PROVIDE ( setlocale = 0x40059568 ); -PROVIDE ( _setlocale_r = 0x4005950c ); PROVIDE ( __sf_fake_stderr = 0x3ff96458 ); PROVIDE ( __sf_fake_stdin = 0x3ff96498 ); PROVIDE ( __sf_fake_stdout = 0x3ff96478 ); -PROVIDE ( __sflush_r = 0x400591e0 ); -PROVIDE ( __sfmoreglue = 0x40001dc8 ); -PROVIDE ( __sfp = 0x40001e90 ); -PROVIDE ( __sfp_lock_acquire = 0x40001e08 ); -PROVIDE ( __sfp_lock_release = 0x40001e14 ); -PROVIDE ( __sfputs_r = 0x40057790 ); -PROVIDE ( __sfvwrite_r = 0x4005893c ); PROVIDE ( sha1_prf = 0x40060ae8 ); PROVIDE ( sha1_vector = 0x40060b64 ); PROVIDE ( sha256_prf = 0x40060d70 ); @@ -1466,9 +1373,6 @@ PROVIDE ( sha_blk_bits = 0x3ff99290 ); PROVIDE ( sha_blk_bits_bytes = 0x3ff99288 ); PROVIDE ( sha_blk_hash_bytes = 0x3ff9928c ); PROVIDE ( sig_matrix = 0x3ffae293 ); -PROVIDE ( __sinit = 0x40001e38 ); -PROVIDE ( __sinit_lock_acquire = 0x40001e20 ); -PROVIDE ( __sinit_lock_release = 0x40001e2c ); PROVIDE ( sip_after_tx_complete = 0x4000b358 ); PROVIDE ( sip_alloc_to_host_evt = 0x4000ab9c ); PROVIDE ( sip_get_ptr = 0x4000b34c ); @@ -1494,15 +1398,7 @@ PROVIDE ( slc_reattach = 0x4000b62c ); PROVIDE ( slc_send_to_host_chain = 0x4000b6a0 ); PROVIDE ( slc_set_host_io_max_window = 0x4000b89c ); PROVIDE ( slc_to_host_chain_recycle = 0x4000b758 ); -PROVIDE ( __smakebuf_r = 0x40059108 ); PROVIDE ( specialModP256 = 0x4001600c ); -PROVIDE ( srand = 0x40001004 ); -PROVIDE ( __sread = 0x40001118 ); -PROVIDE ( __srefill_r = 0x400593d4 ); -PROVIDE ( __sseek = 0x40001184 ); -PROVIDE ( __ssprint_r = 0x40056ff8 ); -PROVIDE ( __ssputs_r = 0x40056f2c ); -PROVIDE ( __ssrefill_r = 0x40057fec ); PROVIDE ( __stack = 0x3ffe3f20 ); PROVIDE ( __stack_app = 0x3ffe7e30 ); PROVIDE ( _stack_sentry = 0x3ffe1320 ); @@ -1511,41 +1407,7 @@ PROVIDE ( _start = 0x40000704 ); PROVIDE ( start_tb_console = 0x4005a980 ); PROVIDE ( _stat_r = 0x4000bcb4 ); PROVIDE ( _stext = 0x40000560 ); -PROVIDE ( strcasecmp = 0x400011cc ); -PROVIDE ( strcasestr = 0x40001210 ); -PROVIDE ( strcat = 0x4000c518 ); -PROVIDE ( strchr = 0x4000c53c ); -PROVIDE ( strcmp = 0x40001274 ); -PROVIDE ( strcoll = 0x40001398 ); -PROVIDE ( strcpy = 0x400013ac ); -PROVIDE ( strcspn = 0x4000c558 ); -PROVIDE ( strdup = 0x4000143c ); -PROVIDE ( _strdup_r = 0x40001450 ); -PROVIDE ( strftime = 0x40059ab4 ); -PROVIDE ( strlcat = 0x40001470 ); -PROVIDE ( strlcpy = 0x4000c584 ); -PROVIDE ( strlen = 0x400014c0 ); -PROVIDE ( strlwr = 0x40001524 ); -PROVIDE ( strncasecmp = 0x40001550 ); -PROVIDE ( strncat = 0x4000c5c4 ); -PROVIDE ( strncmp = 0x4000c5f4 ); -PROVIDE ( strncpy = 0x400015d4 ); -PROVIDE ( strndup = 0x400016b0 ); -PROVIDE ( _strndup_r = 0x400016c4 ); -PROVIDE ( strnlen = 0x4000c628 ); -PROVIDE ( strrchr = 0x40001708 ); -PROVIDE ( strsep = 0x40001734 ); -PROVIDE ( strspn = 0x4000c648 ); -PROVIDE ( strstr = 0x4000c674 ); -PROVIDE ( __strtok_r = 0x4000c6a8 ); -PROVIDE ( strtok_r = 0x4000c70c ); -PROVIDE ( strtol = 0x4005681c ); -PROVIDE ( _strtol_r = 0x40056714 ); -PROVIDE ( strtoul = 0x4005692c ); -PROVIDE ( _strtoul_r = 0x40056834 ); -PROVIDE ( strupr = 0x4000174c ); PROVIDE ( __subdf3 = 0x400026e4 ); -PROVIDE ( __submore = 0x40058f3c ); PROVIDE ( __subsf3 = 0x400021d0 ); PROVIDE ( SubtractBigHex256 = 0x40015bcc ); PROVIDE ( SubtractBigHexMod256 = 0x40015e8c ); @@ -1554,15 +1416,9 @@ PROVIDE ( SubtractFromSelfBigHex256 = 0x40015c20 ); PROVIDE ( SubtractFromSelfBigHexSign256 = 0x40015dc8 ); PROVIDE ( __subvdi3 = 0x40002d20 ); PROVIDE ( __subvsi3 = 0x40002cf8 ); -PROVIDE ( _sungetc_r = 0x40057f6c ); -PROVIDE ( __swbuf = 0x40058cb4 ); -PROVIDE ( __swbuf_r = 0x40058bec ); -PROVIDE ( __swrite = 0x40001150 ); -PROVIDE ( __swsetup_r = 0x40058cc8 ); PROVIDE ( sw_to_hw = 0x3ffb8d40 ); PROVIDE ( syscall_table_ptr_app = 0x3ffae020 ); PROVIDE ( syscall_table_ptr_pro = 0x3ffae024 ); -PROVIDE ( _system_r = 0x4000bc10 ); PROVIDE ( tdefl_compress = 0x400600bc ); PROVIDE ( tdefl_compress_buffer = 0x400607f4 ); PROVIDE ( tdefl_compress_mem_to_mem = 0x40060900 ); @@ -1572,24 +1428,13 @@ PROVIDE ( tdefl_get_prev_return_status = 0x400608d0 ); PROVIDE ( tdefl_init = 0x40060810 ); PROVIDE ( tdefl_write_image_to_png_file_in_memory = 0x4006091c ); PROVIDE ( tdefl_write_image_to_png_file_in_memory_ex = 0x40060910 ); -PROVIDE ( time = 0x40001844 ); -PROVIDE ( __time_load_locale = 0x4000183c ); -PROVIDE ( times = 0x40001808 ); PROVIDE ( _times_r = 0x4000bc40 ); PROVIDE ( _timezone = 0x3ffae0a0 ); PROVIDE ( tinfl_decompress = 0x4005ef30 ); PROVIDE ( tinfl_decompress_mem_to_callback = 0x40060090 ); PROVIDE ( tinfl_decompress_mem_to_mem = 0x40060050 ); -PROVIDE ( toascii = 0x4000c720 ); -PROVIDE ( tolower = 0x40001868 ); -PROVIDE ( toupper = 0x40001884 ); PROVIDE ( __truncdfsf2 = 0x40002b90 ); -PROVIDE ( __tzcalc_limits = 0x400018a0 ); -PROVIDE ( __tz_lock = 0x40001a04 ); PROVIDE ( _tzname = 0x3ffae030 ); -PROVIDE ( tzset = 0x40001a1c ); -PROVIDE ( _tzset_r = 0x40001a28 ); -PROVIDE ( __tz_unlock = 0x40001a10 ); PROVIDE ( UartDev = 0x3ffe019c ); PROVIDE ( __ucmpdi2 = 0x40063840 ); PROVIDE ( __udivdi3 = 0x4000cff8 ); @@ -1599,20 +1444,12 @@ PROVIDE ( __udiv_w_sdiv = 0x40064aa8 ); PROVIDE ( __umoddi3 = 0x4000d280 ); PROVIDE ( __umodsi3 = 0x4000c7d0 ); PROVIDE ( __umulsidi3 = 0x4000c7d8 ); -PROVIDE ( ungetc = 0x400590f4 ); -PROVIDE ( _ungetc_r = 0x40058fa0 ); PROVIDE ( _unlink_r = 0x4000bc84 ); PROVIDE ( __unorddf2 = 0x400637f4 ); PROVIDE ( __unordsf2 = 0x40063478 ); PROVIDE ( user_code_start = 0x3ffe0400 ); -PROVIDE ( utoa = 0x40056258 ); -PROVIDE ( __utoa = 0x400561f0 ); PROVIDE ( veryBigHexP256 = 0x3ff9736c ); -PROVIDE ( wcrtomb = 0x40058920 ); -PROVIDE ( _wcrtomb_r = 0x400588d8 ); PROVIDE ( __wctomb = 0x3ff96540 ); -PROVIDE ( _wctomb_r = 0x40058f14 ); -PROVIDE ( write = 0x4000181c ); PROVIDE ( _write_r = 0x4000bd70 ); PROVIDE ( xthal_bcopy = 0x4000c098 ); PROVIDE ( xthal_copy123 = 0x4000c124 ); diff --git a/tools/sdk/ld/esp32.rom.spiram_incompatible_fns.ld b/tools/sdk/ld/esp32.rom.spiram_incompatible_fns.ld new file mode 100644 index 00000000..e4899b66 --- /dev/null +++ b/tools/sdk/ld/esp32.rom.spiram_incompatible_fns.ld @@ -0,0 +1,167 @@ +/* + If the spiram compiler workaround is active, these functions from ROM cannot be used. If the workaround is not + active (e.g. because the system does not use SPI RAM) then these functions are okay to use. +*/ +PROVIDE ( abs = 0x40056340 ); +PROVIDE ( __ascii_wctomb = 0x40058ef0 ); +PROVIDE ( asctime = 0x40059588 ); +PROVIDE ( asctime_r = 0x40000ec8 ); +PROVIDE ( atoi = 0x400566c4 ); +PROVIDE ( _atoi_r = 0x400566d4 ); +PROVIDE ( atol = 0x400566ec ); +PROVIDE ( _atol_r = 0x400566fc ); +PROVIDE ( bzero = 0x4000c1f4 ); +PROVIDE ( _cleanup = 0x40001df8 ); +PROVIDE ( _cleanup_r = 0x40001d48 ); +PROVIDE ( close = 0x40001778 ); +PROVIDE ( creat = 0x40000e8c ); +PROVIDE ( ctime = 0x400595b0 ); +PROVIDE ( ctime_r = 0x400595c4 ); +PROVIDE ( div = 0x40056348 ); +PROVIDE ( __dummy_lock = 0x4000c728 ); +PROVIDE ( __dummy_lock_try = 0x4000c730 ); +PROVIDE ( __env_lock = 0x40001fd4 ); +PROVIDE ( __env_unlock = 0x40001fe0 ); +PROVIDE ( fclose = 0x400020ac ); +PROVIDE ( _fclose_r = 0x40001fec ); +PROVIDE ( fflush = 0x40059394 ); +PROVIDE ( _fflush_r = 0x40059320 ); +PROVIDE ( _findenv_r = 0x40001f44 ); +PROVIDE ( __fp_lock_all = 0x40001f1c ); +PROVIDE ( __fp_unlock_all = 0x40001f30 ); +PROVIDE ( fputwc = 0x40058ea8 ); +PROVIDE ( __fputwc = 0x40058da0 ); +PROVIDE ( _fputwc_r = 0x40058e4c ); +PROVIDE ( _fwalk = 0x4000c738 ); +PROVIDE ( _fwalk_reent = 0x4000c770 ); +PROVIDE ( __get_current_time_locale = 0x40001834 ); +PROVIDE ( _getenv_r = 0x40001fbc ); +PROVIDE ( __gettzinfo = 0x40001fcc ); +PROVIDE ( gmtime = 0x40059848 ); +PROVIDE ( gmtime_r = 0x40059868 ); +PROVIDE ( isalnum = 0x40000f04 ); +PROVIDE ( isalpha = 0x40000f18 ); +PROVIDE ( isascii = 0x4000c20c ); +PROVIDE ( _isatty_r = 0x40000ea0 ); +PROVIDE ( isblank = 0x40000f2c ); +PROVIDE ( iscntrl = 0x40000f50 ); +PROVIDE ( isdigit = 0x40000f64 ); +PROVIDE ( isgraph = 0x40000f94 ); +PROVIDE ( islower = 0x40000f78 ); +PROVIDE ( isprint = 0x40000fa8 ); +PROVIDE ( ispunct = 0x40000fc0 ); +PROVIDE ( isspace = 0x40000fd4 ); +PROVIDE ( isupper = 0x40000fe8 ); +PROVIDE ( itoa = 0x400566b4 ); +PROVIDE ( __itoa = 0x40056678 ); +PROVIDE ( labs = 0x40056370 ); +PROVIDE ( ldiv = 0x40056378 ); +PROVIDE ( __locale_charset = 0x40059540 ); +PROVIDE ( __locale_cjk_lang = 0x40059558 ); +PROVIDE ( localeconv = 0x4005957c ); +PROVIDE ( _localeconv_r = 0x40059560 ); +PROVIDE ( __locale_mb_cur_max = 0x40059548 ); +PROVIDE ( __locale_msgcharset = 0x40059550 ); +PROVIDE ( localtime = 0x400595dc ); +PROVIDE ( localtime_r = 0x400595fc ); +PROVIDE ( _lock_acquire = 0x4000be14 ); +PROVIDE ( _lock_release = 0x4000be64 ); +PROVIDE ( longjmp = 0x400562cc ); +PROVIDE ( memccpy = 0x4000c220 ); +PROVIDE ( memchr = 0x4000c244 ); +PROVIDE ( memcmp = 0x4000c260 ); +PROVIDE ( memcpy = 0x4000c2c8 ); +PROVIDE ( memmove = 0x4000c3c0 ); +PROVIDE ( memrchr = 0x4000c400 ); +PROVIDE ( memset = 0x4000c44c ); +PROVIDE ( mktime = 0x4005a5e8 ); +PROVIDE ( open = 0x4000178c ); +PROVIDE ( qsort = 0x40056424 ); +PROVIDE ( _raise_r = 0x4000bc70 ); +PROVIDE ( rand = 0x40001058 ); +PROVIDE ( rand_r = 0x400010d4 ); +PROVIDE ( read = 0x400017dc ); +PROVIDE ( sbrk = 0x400017f4 ); +PROVIDE ( __sccl = 0x4000c498 ); +PROVIDE ( __sclose = 0x400011b8 ); +PROVIDE ( __seofread = 0x40001148 ); +PROVIDE ( setjmp = 0x40056268 ); +PROVIDE ( setlocale = 0x40059568 ); +PROVIDE ( _setlocale_r = 0x4005950c ); +PROVIDE ( __sflush_r = 0x400591e0 ); +PROVIDE ( __sfmoreglue = 0x40001dc8 ); +PROVIDE ( __sfp = 0x40001e90 ); +PROVIDE ( __sfp_lock_acquire = 0x40001e08 ); +PROVIDE ( __sfp_lock_release = 0x40001e14 ); +PROVIDE ( __sfputs_r = 0x40057790 ); +PROVIDE ( __sfvwrite_r = 0x4005893c ); +PROVIDE ( __sinit = 0x40001e38 ); +PROVIDE ( __sinit_lock_acquire = 0x40001e20 ); +PROVIDE ( __sinit_lock_release = 0x40001e2c ); +PROVIDE ( __smakebuf_r = 0x40059108 ); +PROVIDE ( srand = 0x40001004 ); +PROVIDE ( __sread = 0x40001118 ); +PROVIDE ( __srefill_r = 0x400593d4 ); +PROVIDE ( __sseek = 0x40001184 ); +PROVIDE ( __ssprint_r = 0x40056ff8 ); +PROVIDE ( __ssputs_r = 0x40056f2c ); +PROVIDE ( __ssrefill_r = 0x40057fec ); +PROVIDE ( strcasecmp = 0x400011cc ); +PROVIDE ( strcasestr = 0x40001210 ); +PROVIDE ( strcat = 0x4000c518 ); +PROVIDE ( strchr = 0x4000c53c ); +PROVIDE ( strcmp = 0x40001274 ); +PROVIDE ( strcoll = 0x40001398 ); +PROVIDE ( strcpy = 0x400013ac ); +PROVIDE ( strcspn = 0x4000c558 ); +PROVIDE ( strdup = 0x4000143c ); +PROVIDE ( _strdup_r = 0x40001450 ); +PROVIDE ( strftime = 0x40059ab4 ); +PROVIDE ( strlcat = 0x40001470 ); +PROVIDE ( strlcpy = 0x4000c584 ); +PROVIDE ( strlen = 0x400014c0 ); +PROVIDE ( strlwr = 0x40001524 ); +PROVIDE ( strncasecmp = 0x40001550 ); +PROVIDE ( strncat = 0x4000c5c4 ); +PROVIDE ( strncmp = 0x4000c5f4 ); +PROVIDE ( strncpy = 0x400015d4 ); +PROVIDE ( strndup = 0x400016b0 ); +PROVIDE ( _strndup_r = 0x400016c4 ); +PROVIDE ( strnlen = 0x4000c628 ); +PROVIDE ( strrchr = 0x40001708 ); +PROVIDE ( strsep = 0x40001734 ); +PROVIDE ( strspn = 0x4000c648 ); +PROVIDE ( strstr = 0x4000c674 ); +PROVIDE ( __strtok_r = 0x4000c6a8 ); +PROVIDE ( strtok_r = 0x4000c70c ); +PROVIDE ( strtol = 0x4005681c ); +PROVIDE ( _strtol_r = 0x40056714 ); +PROVIDE ( strtoul = 0x4005692c ); +PROVIDE ( _strtoul_r = 0x40056834 ); +PROVIDE ( strupr = 0x4000174c ); +PROVIDE ( __submore = 0x40058f3c ); +PROVIDE ( _sungetc_r = 0x40057f6c ); +PROVIDE ( __swbuf = 0x40058cb4 ); +PROVIDE ( __swbuf_r = 0x40058bec ); +PROVIDE ( __swrite = 0x40001150 ); +PROVIDE ( __swsetup_r = 0x40058cc8 ); +PROVIDE ( _system_r = 0x4000bc10 ); +PROVIDE ( time = 0x40001844 ); +PROVIDE ( __time_load_locale = 0x4000183c ); +PROVIDE ( times = 0x40001808 ); +PROVIDE ( toascii = 0x4000c720 ); +PROVIDE ( tolower = 0x40001868 ); +PROVIDE ( toupper = 0x40001884 ); +PROVIDE ( __tzcalc_limits = 0x400018a0 ); +PROVIDE ( __tz_lock = 0x40001a04 ); +PROVIDE ( tzset = 0x40001a1c ); +PROVIDE ( _tzset_r = 0x40001a28 ); +PROVIDE ( __tz_unlock = 0x40001a10 ); +PROVIDE ( ungetc = 0x400590f4 ); +PROVIDE ( _ungetc_r = 0x40058fa0 ); +PROVIDE ( utoa = 0x40056258 ); +PROVIDE ( __utoa = 0x400561f0 ); +PROVIDE ( wcrtomb = 0x40058920 ); +PROVIDE ( _wcrtomb_r = 0x400588d8 ); +PROVIDE ( _wctomb_r = 0x40058f14 ); +PROVIDE ( write = 0x4000181c ); diff --git a/tools/sdk/ld/esp32_out.ld b/tools/sdk/ld/esp32_out.ld index 31bc1ef7..a62f4e47 100644 --- a/tools/sdk/ld/esp32_out.ld +++ b/tools/sdk/ld/esp32_out.ld @@ -20,6 +20,7 @@ * Espressif IoT Development Framework Configuration * */ +/* If BT is not built at all */ MEMORY { /* All these values assume the flash cache is on, and have the blocks this uses subtracted from the length diff --git a/tools/sdk/lib/libapp_trace.a b/tools/sdk/lib/libapp_trace.a index eddf61635d9a3e97b3669430a45f52b1de89e87b..eded79e4be3de3d18d232df306025246a155a8d0 100644 GIT binary patch delta 7430 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 Si5vriBxrydTzWGwz?c9xhlghX delta 8726 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

uN;Dh>_`W(Ee3ILMpq zP&Q~xh8M~P4Pt;AlOQ#2piyDwdIkm|s1Ni(ir63)TR_<$hdV;qpnBU2$_5QLfhJ@? zdO>5-kx+3^4+@mBLE@k$R4P;)G_nFp*&uOHd=x^(%|IEl9LfQ8p=zOQ&_oPq02-tL zG#)kuBn}PUSx`2pExj1Z28GZXC>s>QpcE{`4(SYoMwLNqP*?0YR1L_X7eGy5kOau3 z*Ps%hZrL3u8`NJ0C1H>nP>{ZWii5gnZ=h^YU+h1K4RQf!`UW&E%)!6_icM}P8x&=N zP&TL=DGp`pf|_8mP!4GH4%9>y;$UC^B}7fAxHkg>gFciU02<|kvSS$-7_6ae(6pE% zlnt7~b%(M+?IK?&yNQ8;AsEW;XJB9ewOoZb>KPbjGB7a2LnT%)FfgP-*;^PG7_y=4 z9nfYh$Z@9_7#PZ-;-GG4EtCyv1~o(3pk`1fl>LZ-fuR@5e!{@OumHpcB`gL8hGn28 zun;FC(XD|>fV$S3plnG728JC_HYkJdgR()Tp6Fa`z&P;(e$ zK4>!g4pcmsfq~%>lwA*MM!tY@Di|0T-a*+d3=9lkpzIC?28Lfyb`Jvs!#^k+G_xlN z8o~#qIMCb?lnqLlvQRc?EI=8`29;duP&TMPZ^gnrPgR()ILG5Rd z8c^py0xAxgk&lD2)fgBUQlM;*p&3xN&1Ozp4MtvQp5Xwsao8u@*=^>9Ce#xk5su0K z?3#I@kr4qZ+Bhfo+3WK{Jp^t8a7{jCZzgmBBnfpYxQ6DQ{ESSZL)~@qS4U+g2c^kUPHL>6l>~N^U7eI!7br0>cudZ9 zQfAU%oIJ@%jp>Ebr*Cbv2( zGp$gbyvkXPNq~9sC1*9J8_JV^IjgaqU}j*bV4bYyqQuq#Dh${r`?)BwI&d;DyqsL> zqRghr&A`COGI<_IUYmho1>59fE=o*V{F7g~s4*EBO%`%hW3A$6V2GG(>#EH9#E606 z#^h92WwuNF3=FxfllxqiSoat+Ff5t8)m53*UX+2MZSq}LWu~JNlbPJqm>47{Yq_a0 zSx8O}a#Lrtm|W$i#u^~W!0=-7Qa2SA3lQV1n=+e)3}}pFG9RZBYlj>IgTrK5cV&qa S3JeUOkO5VaAPgF~1JM9WEZl_v diff --git a/tools/sdk/lib/libapp_update.a b/tools/sdk/lib/libapp_update.a index ee262e3fc200a9e44a1b1a3fe47a0615f995b5f3..80ad0cda0770cc7c5ecfaa87edebc5c0bc4e539a 100644 GIT binary patch literal 52388 zcmY$iNi0gvu;bEKKm~@T2BwCV#ujEK3JL~bDP&SX!N|}IEUKW8z{SA8z`?-4D1#5D z78k_lmn6ogruqmSpDVF~DS#QqwaLyz-*Vl2o`{YF-MQU7T7H zpOl|pg2f1s1$dGBPs203$;j1A@oEAhMT%fq|KU z!33;8gCUwB0?Yyt9v}jW7cej|tbwxeQUcgz6|f7FB>DuZ8ssh>WKTfF(J4kzbP-HG zvnT@t$Zrx*^K76r$c`2ed%;)xGawpMD_#+hx#$Y8iGkFB?Ee6@Lx2e+!oUCuF9RqW zB0^oV0BSbKpXer=IWo*q>R`H~p&`WcLw$#U%n$V){5(vuA5gH6><0!022fr~EGURi z&M(a?QLs@kG*eJhQ&7q+EiO?=ElMm-RVc|wRe(02_EFgAjcsl^4lnJHxe03lw?#lTRIQCS?HpO#jvplGWQ9N-!6=HnRb5%28i?BQw@;1L-d@8;;~!@!VP z0#e`?>f^(JY!}F{sR}8HC5Z}|#W0⪚i#Wt{pgxQsRpiRB6g6{-eC6r`Ke@E1 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 literal 50136 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 diff --git a/tools/sdk/lib/libbootloader_support.a b/tools/sdk/lib/libbootloader_support.a index b833327952d325a5139feb871a0e8cf2f5939d07..2e802de64857fd92cb86bcb2a2c6f178c3bb551f 100644 GIT binary patch delta 17905 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 W>zF`t+p~W$-h*4RJwTo*Pa6Ow`6k!^ delta 16287 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%0DPzKzfHn2gU(-0u5FFL>mIXEydfX!KiVva8x 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�Fhb15@LS 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

ezhiMb;G`{t^u; z|Dh7RF^FK%Kw=vrv0ahakx1+$Bz8Fxy8($k4a9~zbUuPz&#(f)Vb~2~LmhM#iTxId z{SArD6N{)|M3LBXNNg1l8)~K{hz$*02N2r>6#fhh3@)(@48owZTR~&SAPK0VSR{4^ zhz*U7To4dX(aXoBsOC_sQia&PyijZ0%e;ZvHg(P;YjRU5F6^aG9-3A61x?| zhML)j#GVdk*E2Az1#zGTZ9`)3M`9lZv7rXtLt=kMVlyWoqJRs;2HjrIz`($lz`!63 zWlMs@q0ylNV#B6yG(jAwgb9cZjXz5e8!GMsVnf9vKy0X?1xV}(NbH$N?DZfv)RQ}q z*!2gIILAS3sG)a|*iVtz?~vFmiHPjSi^LW~V#|QoP&3s)Y^Y~+L2Pem``<8;fkD_C zR3bAl*nlLUirhhLsE>U>Y^ZoRhz%8w0kNUt=^!>#JO{*vidQ4CyO7vZ6G82NsD@cc z5=%jBsQ6YS_AU?`>d>=D>}yEu`$+81NNmm|1_nl`US${?RQ}k)I1CI7fk^BqBz7JW zyBvw#0b)aa*$-la&U9yBV3?f5z#t4|&jX1=)vN@up&nb81S=rQ1)pg_B9Y2 zs^J+D`!$FSRsRjdhN}4wVnZ!vPG(?W1od)2GprysRE-RRUC*Eh;y@K?f!I(*h9EZ7 zATK0#91^=6i9HdCy%LFi2#I|ciTw@C28BQ9@VFEP21cl5svtJhXF4D@=mJv)1_px^ z1_og$+ZrSeRpW`o4hONJYO;~oO&~T@eJ6+wI@OP*%e#DB*O+Hit@NBD^Dm#8yUPt0S@Xkl02@Y)d4z?e^>|QqGL3 z50J#3AhBN~vENU>d{xStmnRG141wv=*Q7S{W+MsZPrrRlN}0C_NvLf)_jRe}(340) zXOY-fkk~hn*!PjxkCE7~kl630KfW%NZL6A%aFZqy+W?7eg2c8)V%tyez9FT|8-yej zHhuREDP^HdB%xd|dwRlZCBN-zH>Fan8E;Jge@RxnUWJ8$0k-us9>j+3%q#=3p_?lw zgV@k5f+nD|6rsEGri0kfeQu(l0}!EG%z8j<=w_{lAU1U0%wEvhf6#3w&p>QBXrqW9 zbbKFl!^ABR8@iQXDd?Cy=qi2_(CKrKh0qKOKy2tbXhmKI21e-e;yoZXbS3a*5F5I- z6?|$Nbam%z&?#%s^^kS~phgjNEh6YnQ`oY>I?&N(&=r3BL2T%1ylWsfbP1X}=r}Xz zDz9ZAHgw_DVGtX-GDr?|CKq%KOd*I3T~4wL#0D+o09DG|ptG)^3nY9%Y|um}XxSi$ z4V~w{13FC#Iu9)iI;sQ|H|!_51o zL5(6vmS^}4I!XmPoYw+6u>?9+WdS-j1UfjP4m#EYI_9t%#D?}Ye}PWRfOZj0L5EgA zyANKVBO;&;;>#d5v`N?iIu-)b1gU382A#YBZAbKg*wE^KC5R2J7^^^M7(h$n$IJ{2 zLeS0AFQIJEnaS^=Y(WMFhObaI=%CWyP&O#tF|t7P$}=!9u!7n33=FCa3=9$=4s;{6 z43rHrR3F5K?q@cIvO(h3P&O!2I6~Q=8z|hNY|!-{zECzOT?a$ip!+Vup=?kZ%&G@* zpjj>t$_81`2x3FCUptfy67PnxK~>j05F6wI&?+7%8>D6flns*F31x%Q?|vv7l)R2Y z+4Z3GavI73MbAYj8x$kgp={7Lwg*r)s78MVWrLcsAE9he{qh6KP6ORE0%bRX*2%Ck zFbMH5Fn}%u<%P0Aw%3i?0z+ewz zLkl8TC>!K^ZzvlSYoSm!C{2Klj27Z!V31^BU`U6GgUg>HC3uS{Gu>;BmMZrEO8)PQvTxlTz1_n?O0=j)%s9u190hGmW zLluFp5PAe%#XtOSaUC$7~z`!sa#DP{Ai=b?f>sCV9pkUk#WrI@k zUML$>2p)#ALD6&)$_ABP=b>y+LIxdnEhNGKw(BNT9CVQK8@74|1|ewe^a&&(#=row z7<8O3NE~#^{XeKUKLY~;3p+$T$gTWPHmI%=gR((&k_?m$%HK**HYg-?p=?mWX98sh zg35m@CtYMIv?+gqK3!vi6j0_B` zq3je!28K;gHs~&Z9Z+@^BLl-eD7%S~fdOvR5)PFnouyL3c#|gR<8#GBB`kK%xe8#~c@w4Z5^V0Lnhh z$iN^5WuInbV2}Z`>lqlXGBPlLj`9XM;szrFg9ccFf#Cro1A`uv{SPeuj?&@ta2Ht70kZ>SnZ&_&WvHZv0gLj;t~!NkB22W3kzF)*amLph*3VnHV= zgACGSVqhqMit8{jFjPa?hD;0$O;ENK69YpBlpV#yz|aR}gRV-L0%d0~F)+-6va^{O z7#2X;B}@zq%b@J~GA0IwjZjV}69dCmD0>nU0|V&%a3N5=3EGhX5|?3M0M%8uplnci zau3P|l>r|?Y)ChU;SZDzQqRoEz#t?CI{Kf1fgQ>Qsh8qpsAmuYl`0Gj3<@9#1xWT& zgR((q(Ca|ipfbP+$_5os7Erb@0|SE-lnrvL50nkcia}5|s3jKxWrJF5po7Ul_Bw#t zpD9oYP~#^H$_6!H3ZQII0a6BKg9@t}C>vB%gHA9983f9@9Z>NcP!58!^BEYxr<#M* zfQs;0P;t;r3kyK(dIbjXg&nIv90dl3eg+1Htxz`TI*UC}Ht4RnLr^xT_B#P(FK1w2 zI0t2~WME*p1Z8hyU|@I(VuMO21_p-LP&TM=`vzr$Lbv`elmjZ=n7J4jgp?QLG4v}C>vA^YeLze8d4w12HiJd1!aSlr#eE}pj#E(A?$hv&>dDm z5Dxfo`$#Ao6m-c@HmKCggR((ER|;i=O3!L28&m=|LfLZ|7#P~2?D?RvCn$RnXt)r{ z28G;AE>QWe#K5qgfq?;Zpf||(dl(oPHh>gCJ09DhY*5gFF2fO0W?%p%#zRnXP#fd~ zlnrVMT!OMe?ZG=xHYklhg0ev={{@t72=c)vCzx1 z5P-5l_iTwl*`VXLWuWX#(5079HmL56n1O-eKa>r+#E+GSfk8-} zfngN`0|Pgd4H|_Jgt9?5_kxZ^2dO#4z`!626$jmPpbTZ7U|?X-tcP+ySJ~)8+1D8u z7)+t;r=SBDpzK!+3=ED?_6N|pMNsxP1_p*8DEkKk14AT~%?P@l6Ux?PWMD{zvUM04 z7_y=4deH6Xg;0(oBLhP@lnuJ~rxwbNVPs%vhO$97taU=!xr_`9{ZMupBLl-!C>vDY z&xW#l7#SEALfMlT85ovB*|QlL7}oND%71kRhP8|g44}i`LBR#8zjs0v?O|kK*bil& zU}Ru83T2;VWMDWAWnW@sV7LfnUuR?hUxx)U=O!Zq!(FKOJw^tG$58eYMh1pgQ1&av zdIpA%P|gQX;{wY5%E-X*7s>|J>m0n0`2Nqxz`ze>gX(foC|i|@fk6_=wqRml&;hZb zgAztiHYoAhLfN2P<^p1a?$!VmyJ+C#*`W*! z40%v?0s{j>36u@0gg|#^3287efJ)2;s5q$2*al^T%AWcjCW(devO!nPu7a{RfJ#g#8vB|D?!(#ko*+9|Hr!VkjFlVzLs- zo(+mVC>xZ}c0<{qOYe_B*`U_WDJUCMQC)zt>p=&eO2Bm{wC>!L6G!PrqDq&z?$bqs! zYKow2keV_mTLV=7bb>gb9s&ac1L&#?A$^F?rb5L*8fHV;pf=q?C>zw#Sq^1`65U!T z8&ueBhO$A%Zili#zCQ(GgPKX8W;=*oZve6EA&3JSI{~#!plpzvB(_d(g9k+3OHHmDsp3(5v%p?Od?=;pPJAU1Ruemj&6a@=kx8x)G?Kx|M? zhJk_MiXf=`H-SXKEvN)2z8^!`ppNDnC>zw^{0e1*ZqEA+WrG@@j6w_ypd+S0?NxRt z8l8nRt9CC1+C13vM+(ow}i4m zmC8gY8`LPB4rPA?^`f9`(0I{eDElXc2sR2+19*&`_17F5|l+0Kj%4DX<9KSl6NXt(4yZ(%2W5k5#f=~~XqJkB zfng7n4KnC3lnpZIB$N&E^m!;7G^cPC$_6Fs+fX(rQ9p#TLAB*`VNm&R&cFaFeBMGO zK)u(`P&TMm{0U`)Mz{Y%*`P)#vj_u&kU0YbsKyfmu|dJZz`y{y?ncN0lBJcP;vk3W zLfN1q+yu%7kN;aiIiOiI2PhjfiUGP42V@Yai5(6S2emdC7#NbEY*0vKLfIe-@}X={ z?NL=01S3K`wm_WrGGE zzCzic))BKP1A~wi#G#x}HfU^zAIb(rr6`mQib`oH8`P>+gt9?HJL(X2Jp<@UP6G&s z0Tkb6P&TO7;s9lX>V9u18`L@qg0h=IB^{IvYI-L^*`Tg_7L+}Ufq|hI$_9-KRYKXI z4op4hI!lmmK+U68s03&j4Rj+ANF3BungSIEm6EfdY*6cH0hGO;fq`Kelnv_NuYs~b zBk7xAQ2B4ozyKP*6NE~D@~bG6 z4JuePKx~i#&^{F?8)TUYlnpAyte|XA`QZR%g9gvsplndf-3Q7BB|6acMnX0W3~r$D zpIE2_sLz%HWrGq_K9mg_wJL+ML2=&*WrO0c1Ih*s!%Tv*LA@f-6-XcpK*7EUDt?QB zfnf!d4eBAS1GDQH7~X>R8iF|t44`h&E+`um)CZt!ZqR@Olr71~z;Fr5230~gplncO z1G-lUWU(6~1H%)jcnBi{!+R(@oRNXy8CD5z|lx@buz>o!HgYJ|sfUR>~JOq zhISAeRH%SDIZ!qz4b21HFeL=4Ef^RWmVhMeAm#QdC>u1(y#dMwwcWNs*`Q|G9w-|$ zFnJux1~s`rci4l>1hr9bLd8Kv_!B4_G=%>S%8muK|Gz*vpuX8JC>zwsWRPHB02u`8 z_p?FSpc!l)C>vDZ2tnC1Kx+t~Y*2+H2W5l$`kGKSsCQ)mW$$BPU@!x*LG$lV7#J9A zKpZ;;22gX#3CaeQ2fk1?XpAoe$_91Uqo8ci7+(sM4VsqAg0kfp85jznY!yZZhB7Ey zkCB0)5y}Q#{axP!b&L!Q$Dr&6 zMh1p6PpOCwY)~H*bYqy10|V%kI)-MDIH+00 zz`)Q6Wix}y|0z%os3@HcWrNy-3!!X~FPB5vpj@;T$_6zeHbdEbmSA82wfT#o?0QB9hDs|RC&hHfZ(8Y2V4L@0YF zBLl;9C>u0zJr~Np%gDg67|MRj$iT3&9?JQ|$iT23%Kpd50KTpbm-Uh0ipzPgD3=FAI_7NrqhHNPNB@+WfA(Z`wiGiUU%6`vO&%jU%<@{h`U}%Q2 z|1vQ!bVAw8%nS_uP__Uw1H)7(TZox~VK$Vlz|6n^y2K6?q^ise49lV7M$8NhpbPCl z;^xc@44a|iR?G|x+d*v5rg&Rs28L504k$x2Ffd$&vOxvT9Vi>rwtoa=gW7H{plnci z@D9obY5xLcgZhV{%k6}m7#Kih1A`0$1BeYO57?k=P$^l@1Lc5fKhRu1ND-(>E&&y9 zWnf^CgR;9B7#Kh|-GS7Aicc-5IH>eAfU-e@3}#R^s99zMWrGH>ouF(`?dJhu*E4_y z89=w*fegLOz`zg!kzlwFy6*^52Pp0W`=k2dYS%k%0kp>m5ju0wV*%3aB`!z*z@ng9@B2 zP_`K(1H&#T8&t>~fU-dY4#%Ku4^XWLWk-N&MJPKKRIuEIazN8*PoQkjbQDBY+)*`S`U7L*N2HwLnx z^52<(0kk5?3@QN{Yy#bM2QmmW{OSZ12Q|YzplncA+z-kI4N!+b*`O9t6qF5W5hXy` zprw0hP&Q~fJ_pKP2rB=Jpd3)Qs{+afRWLPB_IA*)EQk$C(xBN4C>!MCg-|xgm&>7S zPzPfzlntuEw?o+=PacG_L5mfSgW2^A3?N^g1#=h}K*MX7p=?mY;U<&~>ajk7vMU)F z7+yo!pxW{ylntsazeCxe4(MMf8#D~h3|jr-!oUFPH*!MRyBQc5`0Jq@P_IQ4%D%|J zz#t7}gL*KEQ1&Cx3P>m$)M+t*vO#S_XAm3I1Oi>q0%e0jC+dA<$!{&7|I5Pb|sVz3L&sVT^SfaD_vTl;-Kz&H`nG?ze z_3`+jY*3ySg|Y(~85pFYY)~Ih9?FhoWMD7?u|We$3=9mmP&O!PTtMu4HwMt+bOtXF z$BhBh=U@ncvO!}w(NH$1@16=}gC-Snplnc-6+zjcwq*sB4Jsb$plnb#z6Ht#jsJH+ z*`UN;KLyGGjn&MDvcYi%WrHS~wt?87!5`2#Ae0UA!Eq=XRN$P0vOx{kD^ND5qPh=d zgNFH^LD`@N>Kh0fvi|cEgu?(D^Zx;5gVuojgR(*6{45F#3_|V<44~}C1!aRKtwHxo zg2X`!ip8Mfph`#v$_9;eD?!;CLF`16^hb z@(pMddkR$Cijjd~7L@J8$iT1w$_`*;U|0rahcYrSY=p8w-M1Z3c06cQ9m)nZZjV6O zpt|Oi0;v3VXJ7zLv0i{mfCe9~LD}t$3=9vUY*0)01(XeH>Ar)qLCZBhLD{<)85md< z85lrkA%bQKxuI-OS`mb@K|LpNC|eX%{>wr+pur<$C>zv`(uA@>{dip{8#L(U0Ahnu z69WT-HxR8VGt+4Yc-Owg5`LY@o^pzKiwmViu3 z)4QeTMK-r*Lu@A}ywUnkn*`QoA3(5u!R4stALF0_eplnbjx27J-IS85- zfwE75vKf>OD)o***|!-O7|uZ1_ZS!$u0z=m85kJuLD`^|(i12fR2sg5vO$UQ1C$MF z9esnc>sc8Y7#Nip7(l)U?JwhivOxm~d{8!M?q3AT290dVL)oBGPYueBVq{lKLO4Ot@l0m=qVIDUh&L7NBuK-r*Tl}VX_LCBkd0W^5V0cC@RZuy{WP-{m7$_8!U zkb<&7rK$py4XVoP)u0^EfPfB^4f2^0lwHlhz+eGogN9%2pzLu02a{t)}l#b{%N^=P#548eC*n zVPF8AQwb_SIH7D%kn%&>pqfn-$_5oI(ops~&_T&iHmIwm4rL!_U|`UNvOyCP#!&W6 z1_lO86;S!_!@vLvQhTTbs7vJvW&Z~iu~0UsoCt)nL8IZ}P_`6kSOv-k4K(I~*x()~ z149Xv4T_p7C>sI*1LL2mnnaL)oCMUJIdY&~}V1AU3E4!N9<< zAIb(lqk83r;?OIgs}MHz*sl#_JE14T>5j zRR#tje+C9nF9&o*Fo+FWC(m0{)`KzXM?C0(|3a?m+9Ok(*BG+)1yJu zmFcTXr2Ux$nx_9L0qgKCmG)<>nLZmty_o(QL|II?E|d0WTr#~IL~WRU8$>xw*Dja# zXFM{!8bswxKMkT8C-|lj+j6(*BHlre}jFhv~aPRKaxaI%$8#1Jk2HRLS(!AnMBW-ymwrbnkj;f5wFA zvq98^>90Z5jOo@5(*BGOrgwv=FVk;>s0q`x8>Ri3M5axzX_WS3Y?yw!QQDtz#&qc> zaA0JEsEFyio1~93G0d3W(kxxZ#4}_1pJwSYMuX|aEz;$THq&3XNc%GeOt)^8_Gi2@ zy&FVbn0^~XB}~_D19@`J^qMwlKgN#fr$Jnvh0|r)rTrLNrf0WH`!oKTzPnx8pGju% zbe;}rKSrDB(H&rat?rO6XM8hVxl`JoNn+LXl1^zqMvLi(JHeI-cS-v*?wFnoqW(Bha_ zm}~}7Gp1h#Q4Z6U`=tFDL#7vls6W#WgQz{zh5Nw)nhc^oOy3Nm-b`nn07_Q-riVa zX+I{B^V3x(OZzd#OfQ}cGVt>BBOvac>B3W_{h3s*PfwX5?Z>!b`sOLp{)`^enWswo zGqy|*22pdSF9uNyrhlF)ZO^!Fy74q=b8n8$`}E5o%}o5Lngi}JGJs|gL7G7;iC~%)rz=mFR%f)C?mb;v zz1|#6*MtX*3=eo27(lwdfOhDC2E`Z{82munyg_b)ViRu$hEmWX1SlW0&T8<9V55h3VR-ik!j)`FkE5tld3m<0QL^Si3 z-DF@`zyxaSf=pvTIJO7PK$aFJ1`c+JfuNOIFawvM8R&M0fk6z^OG7hnKAL$v-AoLi z`@BH0^Pj;L65${pZ-5#ITHgdRBZi5Q0d(Ojhz-IZAA>MxEh~tIsatQzINk98m#8pk zVJmdQHb_0gD?`TViSy0H6rcu!1wk8Oj2Ia}+W=vF#_98g_{GDP9AyH92sqh*I^-~q zf|k63?1L$PWX#Br0h(fl3c%#F{L>R0w3K))k{KC5 zOCUkBShJ_EpU5T6wxWcQVJYYIf=|XG(+!y9S*O38CC$TbYG`R}VP-yk!e2cJMuX{s zW*wT0I@|4MOW(0zV^d>bVD6o+ctzTPW0ood0}}_U!}Q22(oQ@I>)BUeYr!#6z-+o-UTD5LfCRX3y$F`k^BdsDiQ@zwPE zH>DLBb*D4ll1`9(t;oQ@Zo|BWm4SheRg{5&-Ike|je&u$cze|?=^#eN=ILi|OBXQ4 zO}D!v9nP3OecByqMd>(p1_t(J%pm(Xq;3c?Ft9IYe!<4Tz$4W){n8z2Q%Maa1_t)^ z%%EMFd|WCF4D1`2yEqsa_ynda+?5t(+%etkuJnDzHPglJNry2mnx1=4dcLR$8v_IT zP8QIHC>91D7SR4wu1V7s?@N0ynoQ5SFWtu146^nj3uthXL8@~4zx&eVQl~*;k6A#0 z!zT%{^$AM?3j+h+ALZ%&52TeCE2nRIApMoGa{7vg(#?#O({&z6Z)WV8{@{_c6yuEP zzaL3kGgeMFe=Hr&=sdmuv9t@*FV^W-A4@kerc94`A{{T~s>;B??#sHFpMimoMVWzt z-4D!W;JP{e;uC3M-rFh+3>>u}>lxS{O#k>qTAa~jI_FdATt1LDxF-?Nw%A;0%SZ zUDX&EIKv=pZIGI9#;qXrphh%j1cco;J>->i2;+k3D_=aSc?5u)PF{Yl7GUY@qEkTw0*e6Jg_*V_@LY2C*eTw^1^1>43Z_!xkdO zz`&)ul|hz)L5_ik1+=__hecb0fq}V7l7WFs4v!>U-mv)xkuf)K>W61a%G@c;! zLW+Tb$B6M0=zI{Vebev0m)2!eozDG1T7hx@be#{<(PB&385nq68Qo{jnR2J<40+I#{JU`KT1n7I#2h8@TxybtJnVq z`6z{Pnk)kYKMzkjqo5qf6p%|YkX@1qb%_lq3uiGlf;MssoZnP-}gy6j_Ehs zbh*#c5{x#}%|A#xffQ&TH_u!~IdBv#7H44KnFmhsoD5vwS*Bn7 zEFHpVGhOYAbTXsO^sX<`QjAxpFa07Nq<0bI*8Pk>6c`wIMR*P~Dk(8A@PWhs2-vNB z-JqyD%6Lhdfr0PHbk(oY%97xyJ;~@G%fP^Asm8#-a|#?-d^4seewEH> zsHeohz-2Vu;+wQ0fq_9uNFH>$iL#KqI1>Yd zije%3>ApXugBb;;FZ?Mj%_uN^FNms|e)FevA>+R3-oK<>8M~)X{3Y$jcLY>bJOgDt z5e8=8>2H5YYcW2ZF7aDBoY7`_!Eb4EMw{s?eoLz}CQiTbTY5HQ==7XF(vpnc)7$rDm={NsN>+_niGcfS=FluTtFz{`hDk`JQy9VTt35;vB7#R5OPIZ;J;;jx+vy4$j zmw`cH4kOENoYhMSMaUGmUvltbCDVB=8TV~TQke#^B)6w<26`r3Zr7h^qtHy(u`u$uQJQ{GQOLx%p#-57Xz~IFIWka z)b#1`EHYs-&LA;vCQ!Z2CIvb;ijN1(VQ1jlIQ=4vj4q?h^#3d}zI;DH=F2dF%GU;| z7t^CyWgHmmrq5=TF=nivex6mvSo#deC>^lwnNn=x3=Dj_V9qQl!RfMWGLn2>K%OxG zi_MkVGu?$vCYzUwm4Sg@4`e+9TgCJ}Y%w$mT5$!If9na;y56Uk_^J&j$)pOGPU2b+M#bU_mo>rELLbk}Z=%r`p1%DjpUgZa#*Ncw2+F83+DzXkC<7`=goR}E zm_DjbcNUUSVYHc^Ap{oPDSL2YMF(8z_W-*hWs8D&PB>2bm` z9*k$VFBg{C$jE53JyKMrhmp}{`ZF<^wTzFZPZ5`~Wt_VGlDLc+NR(4j#*5K;dWfWq zF5~I#O_DOVSQu@l$I8i6G1^SOAt$3P9uGQq33Mh70|RJzHRBvZ9|i_3o9R;WG9HZ2 zrYFnG>}RyuuB;#v!^~*0y+K*#AIRK#RT(eF)!R?0%B)}%pRLBgz?cLYHDb68S~@hx zHw1kZ44FPDZ;#QEX#i=yt1V;07_(hUN2Z^d(PsK8eHkyt9oxU^ z%P26JE>~q>;PYg15M*HRtz%ND#J~W;tOtq!MhRM^5jAZ;+%UBs0%BCMRl9A^+#>&6|!h%uL-xlQbDgh3ST0<)ycmw8^M2 zvZNKIrcRHaENQU)c)QGPCbrzfoSgjR?F+kPE=X)|Tr88V$!us~HoYOzL}a?dlwkhp z0%v8OO;7l#p)fsWZk)pO4__n&rn{VzS;PgJ#RBzjwlPef@Iye1v2!~6c^P@Gc_1;+ zjtYk92Yv{Mae^kSKtj)^-~S;X&Uk)$`gs|9#z)hapO=wm{5Jjgd71N!Ow*@dkXg^j zzuo-1PTdo#N9E@%u&t%rn6m@5tx3i zWIo4qy_?e{rt_H=2?&B#C4;O2VbGZhzo!3RATBNmnjR8jh-LsSLIz2JmgERA#4;F6 z_g^S3FX+bv5@cY=0`1UYNMwkg{(h^YxFl#nt`I{qLnTxiG@~fQkjl_EU7t}$ydE^Q zF2s<|umLI!G6Q7iekdQbj#G#sli>=K50ifk<%6bFgc!0JzCrmgc_vV23d8{&x(XVY zgz`a?S3(TA3{nuj6$5C5TZkc_K^G#x09tY@#8ANC1m%Ow068cO%8y|J%@Y+dq)fj) zWrh57zU_`2lAtMjA%+r$Nl-PQ?fXIuWeiKEuh(f3=R5;CB8s7c;l%XwI!)@JBd{1i zCh~#0y`cS;3?LJ$7-XlvzcEuBG$#R;wuef?91sZQgY*kA)G(w&`7rq^C?8aA2r<+# zfDS7I$?XC=xPf67R30P-vVJX;586X4#L&cW0>XzJdj?W)XZrs+Hu8@Apb%nUU;wS8 z6k=#$P=@kBg^LhF8w2P}LXept4ASNXl?P3h3o&#ugie>gZZED0iXb6|ZiaHG^ciq6 z>1F7I@?qNNOuxUwQ5>|W0UQdOr*FR@BQJOvP1W=1`a2!P!EOcF$;~!B!B1Xny53Eh zbXG$HGeeWmIC41Ymv(2OVp0|WRJ zM$qD91_p-ppxO*H69ziX3sgUWW=9zq7;-^uP;@ddFdPA~rJ#dEWuW63LHjpBD{w$; z&_)u_yfo-^Mo=3Rw85E+fq@ZpvI%IvIfxC~2?@Hw7Q_ZkuQ4z%+yb#ddqF_g-f=T9 zFoIe?pp|_fHfSq9$Q%$GI+(PA2XrDMXd5L11H&;s#L1VSyD#XpPa$Y}(gKOIL#Ce%plr~IFbrl;4#)>KP&R0G&I!r} zMLGCzLw3l-X$VvtGzAm|WrJ2&fCfWAmVssi)1cy@oftV#HfX6~5tI#@aIXNf>lqk8 z+kI=m90rDT(DFYJ8=CT`LfN38o(*M#GRrb383+}>Qy9dq7la&gCI#Yvws?ciCWEp;JcocYqI76l7okO=Sl_#X&3e>cgNMP*#bDvOyc-QlV^6 zw#kOFK|x&zWrK1`Ig|}rdjLLdQIG+As8$P99JG)QeApr=C4wf|LE^%Y1iKi*u4e!x zsO1n2187CfE)ZK3RL(Il9DuSx+3y&X4NBo>plnb^xCCW`>XjQ%HmE9j3}u5lQm>$F zP)Yv*$_9nXH}Hv!q6`e6Z1x8#0ZM30prigoA?r^;GZaFi3=E*TWj?4lC=rQ3*`W2O zQcyN%oeF4_9Hbt!CRq(C4oVX`P&R0W-U!Ox4l4gGpd8S=u^p5R+Qi}nWrJqr!KW~S z@*8Nq5=dMe5{%$e7{wVFK&5OdR2)>2R)E-`AYou&sDrXWU8GJZ8`QI#06vjXk^wY^ z$S@5m0V=J)Cof7u4!Kzk6$h18;FA|685lr`3w-jTBzRXP!yc#_P`z*-#0HfxpsfW^ zHYoaTL)oAi{fAICctzfGC7pg04cyeP%M0IG#qK}Y>bF))B~0XLKl zD$fO>Y*1nphq6Hj>VOYhlwx22EwIppii6s(`e1fF0|Tg|VG8CjFo2c@TSM8P-L;NT z_DRqISWq@7YJ8z=(BkP}C>u1@9|>iHqAVWDehONd31x$(Df6Ig(0pGb_(Vofas{0s z2a=G6#Oov|8;Bm8fGXP6!$lv zY|x1S4B%50Wf>Six$X&60u&vuplnd<>MN8DDwM#dEy^-5fGl7Fo#-bES=Yz`WrNBR zJ}4VhmWV*vpf-UNlnokHPynCED9gYA>ePTwVU&dwAmCFNWf>Si1qk>QMp?*8TnngX z(2jgNC>yj*#1qN}70CfmHfYIr7?cfK?-&DRgQ6@6%Dw_B|1+SR>!8D}pls0U+Y%@n zv^As($_6cpZ-BBv8z#GvB_zJanq(fkR@1~qVh zK-r-7>OUwO)YM}Eo%$!wzyMm`TF(XLfc8TQK-r+hOOjAFsGbI&yeJRZxuFUb2UR56 zP&TNJFod!}rKb&)4Jt9gCojrFcKv}5UX*8G0L>tR4_=gKs0VL`jE8CfEouUv!YI$c z02&V{1BrtgfD8-_HBdIFFlmCaL9Mh7C>vC;^g!95z?%!Ls z?@%_#aZI37{FEV!?s=eWP%aaOvL!&}za*3c%5w5hHYhGtp=?l=(}uEb7#J7~p=?l* zYz}3En%>q>HYl6!LsWDpxvyn;^r0=2(|Kq&zub1s|lS#=rn7lx9K2L96kXLfIhCtbwvYfwT$A25kk}0cATeFw`^bgK|Kt zz>YxKpf(`*R7Ew&86(%A;-D23ccAPp1_p*lP&Q~u=nE(tl(^nO*`S4SU!ZKzV(4E` zHmF$!K2%Yyo`C_hfRP7u`kopC18A8(=!kGosDKI$38*;eAT&8B`vhoT8k7xMNT&s5 zgBH>mK-r*$)MijNs9dpuvO(pC6O;|A7d*fxGO95!d;%>Zfl7c*U2n~{Mb4a$~aWMBXvs;I`m0NPek0Tl<0SJgq;psivpP_`>0149>-UGK@rz%T*I z0i7K%4ax?su$}{DCxNyBK-r)Zm|=$}f*NT%LE`F=oB}&M5!4ug9i9lvy|BX*LFoW? zcp_+F^mW*YjG&d1u+tMkg%9lXL{Nj`CDZ~?6YV{e4eA$sg|a~f&Tl9iRQEH2PU};L z)EzufHfR@zFq92CKo53!;#^SqFAtRf?VM7DvO#SEZ73U5uNy+ypnAa^$_DMq0H3g^ z4q4Oc3>610iuZ)FnLyivp={7rpin5A7qpHQ#I9FoU=U(tU`PaU)EO8+aS1+cQJsMS zv?x9oDh{ehilJ#cMi%1 z9j12!$_A~>2cNvC&cIL(I->$A4qBxTK6p``p`HOW3Ht>q0XmiYACx^EG&u`8l~0|4 zVHP6;1NekRbq0p{j0_Cm6BgAO7(n|I<)CVofX=0WvR5%OFla&9pwqg+2P~>HFl=FD zV6cOVZ)ap+Z~>plsLsFu+DqaEmDtP3zz_gsA7f--2!pag$9Ts;*;g4E7?PoE&;b|V zLlxB-7+!!5LV$|@0G)3NWiv4`Fw{ZWJfPjaP_}SA69dBpC`XiufngeyEyu*bFbB#8 zjXy7fvNf0(7*;^ppaU`1LD`@ay0<{to=gl3yP#}uCI*ImP<9{_1H(lS8$^sG$KqF;N53F?|me2bJw#p=?kk^c%_s4Yx4zGcbUT{sdJ#>`*qSNyiIi zgVw1FLfN1uxeAC48C|Pq(1LP67K2Yr)MQ`)b#!c?;-CV=3CaeQ2Ody1s5}5IyA#rc zoU|VT6$dS_1}&chiG%tD2~cs+*gzVT4eGw-fZ6p744}?H5tswHGXk{i4Wt>g^12Qx z4q7JM0%e05nO#ses9!e$$_Aa@13pMm6LP}y9H=;`ELjd^gU&Ww2W5k{A8ZGo$f(J{ z0IF>ELM1>I%wZ_|ECU0>Nhljs_?(BbK^=^%P&TL_x(#JNW?*1=0%d~^PJ0Dqg9@du zP&Q}_*&iso9<*(T33R-lCIbVgM*==!QImlIw4o7v!lEYR#7^)Di<%4!pyg}wQ1xt# z3=C>eHs}yF@S%#D3=E*tJq)1Ypwl~@L2OXp4YXYp$_BM9{J|$OYB4Z?`thMq2~fKX zbU6;_lvPj%HW4Zg>LjH@*&wrWp={6wiee}m)Tgh6vb{ma$wAqm@ugNM8vC^D?!~j%H$D*bHT-FflOfgtBKaF)-|h zvez*&FdT)lH!?9WoCcrBsKvklnlrivl{m-5z;GAJzRtwJ@EFSe#l*ny4$A%yI=ceO z=3r)E0H4mN#lT?7%)r0~I^9o;fx!(l><(oIF*7hoLfO5{ptUEEV}vKwGczz~LnY=i zGcXuJ*-M!j7|fyUwag3*wovu~W(EdlDElNc1A`BgeTJEVAr#66%>#f>Vbo$^xXjGJ zkOCFI$;`lz1!do7W?(1)pU9}i!0?cnfuRyA@f18M0CC+5W(I~v4ZABs*Gfs)TvOyCD7oluWXB2#@q7LN#D)6a_I*{YTpF-7u2B?34*w7iV ze^55aGA7W8e!2|cpAbV2^9wo zLQR3PYZw?9W<%Ma{fYCTY|t3+CJ-As?+04t2|L;MFjO4Wz&QnFg9a-ufY|l=kP9%b zfjIgM3?Th?plr~1{v#+Gw4?tmlntuEzChU^pZ$ljL9H4#&`Esy3=E*X>O4?3sCNuL zBvGG%0W`t_J|s~ea+YO1_>@F_1_n^?2YgDRJ_EyQ&^A7(W>BjJd`O}`0|RJ7yA4zv z)T(iUvO$d(4=5Y71<()5z6-h@0Lp&Jz`&3IWrI4qX%Kcj1E^*zgm4%@HCqLg4LW_b z5y}Q_8*7KM-5D7edZBF4$x4%<>>x%4hM7<{sK#3aWrGetSpj87Gcqu&gR;TLi-AvM z)MsD-9e}b6DgioQ>;RMvsuhnx*`1){V4>`OMh1r4Q1$}QdE-#_a?la5P&VkA0q`M- z`V0)485tOULB)52R`r7p;?rkfxB}Xd&j#gy?hW99vLAs~3qaY=K|LNQ8+28GGL#Lv z5AK~Ql}jS4you^yC4Z9w%mRKkggfuR)2 z2A#@O4P^&2F))A+L)2$rhyb0k2Nefh0n`g+r!z4yOop;SR{+g~vO%Xcfe%L1XJ7zb z2LwJC5ftj6O(Niv5%n1uDnMsXK{Ygjt^<= z4QezdLD`@IqYNnfHE4hu$_8yd0v~z^I?MF5>m31x%I?cGo|s7O8tWrOMx@BxU13=E)k3TL6>puxz?P&R0u z7kn6^Ap`ip?fX!1P{H*S$_9n#Yw(GTh71g#`P`3C3D5@k?@%_VNd60DgF22Jpws#c z85ls#bABirR1Awk*`O&m1t=SIiHbUu4Vrq@g|b0YJjPJ=F;Mw$3FUy=@Gej`Xw1$V z$_BOD1EFkC?h zcm&D@6=(9J0~p=?m;b|17=rplr}a>FZFoFCzoPJt#X2G^7S)w=gm=yn?c4 zfKKp&vO#y){eiMqgAPmq9kOQxxdVq=3bg*m2r?`t2$cYhgo#7hdl*5xJRtFRh>?K- zd|;vx1H)0!i5pNg=RhZJK-r+Br*=>_FB1cU3zRLu#K7PMWrGH@0-$USQ28GQ<$!9W z7$_UGF%x`9q7efFsE?Ni6$c#+SOR6oGBGfK&oeY)U?^Z>U}%GigRYpH0A;r`F)+-A zvO%Z*ErPPUL8EA3c0B_Fs3KVh<}ff!W@2F20%b1*4WmKXtC$!V4nx_Xm78av>`kx( z5J92H#K3SHD!!MAf#D&PeVB=X;W?Cjl!<}i1C)J|iGkq@%m-(f7#P?=r|E%)!a;{w zLfN23qXd)<8Uc}qvOz6lEhrl_DrN{}gNj&lC>u13Vhd%1N>yhl8*~zrCzM?eI(@?* z$^o@vL!oTY^hz|8J(+=lAq~m~oi&yVWrL>ZilJ=K$W|qk4VpQxhq6JVB&|?3XojR4 z$_ACN6Tv4knlLbcrb4DeB|uZ;bD?ZdLvb;b4Lag~C6o=?&AJ}S1|1u*70MQ7WMDV| zWrK?0BTzOd%UuVtK{XZw1H)Y?n;BI8KZbHZQ|;ix4NW1lT7RJ8pk5IZ=s-ME$iO5A zlnq)r#Rp}BIwvAfHt76mDJUD%oL7LdL4}|ulnq+8qYq-&n?i16H3e}@AxF15K-r)+ zKWJYR=%jtnbgM5^98?nqL)oAPNFwN;;sz)iG%LOx$_CAZ z?}f5KgIR~6Y|#GPlMr@21E?rH58*I?ipi@`HmJJ14P}GQka!4XgAPl34rPPR7yblg zgO=a^gt9@SU;m+O(BuRw=x{t!$RvaSlnuHvR9qHxB8w>l1LzzoS*XMY(5;+MHmIc2 zhq6KIfi0kHP^o7JWnTtOBtY4qgRi}yY*2GP0Lp&I$iNT@Wj|wNU`T4H_;hhqARnLuXJnXw1I@%C=@=VCaXkL8D?*p=?lTI1kFMVPaqapH*nez);7; zz_0---oV7bunl}7qbcM-)ICs%ekKNnLr^xTWIPRJPX$dLK-n{x7#OZY*(;bB7#=~{ zYe7f7LfN2$Qr|<_pxp^yq3pX%3=F@a>_?#TAG8Arl)_(umTiL$!~-o&1s&lFWrG?E za!@vCY*-V@2Cbq4pGj!WzyO+THiL?TCYWuYY|was6O;{Fh~f)nXM;}u1heZI7(m%6 z3e15lGD(24L8W0flnp8ki=b>!X;=YegBllgQ1%kgJ;P8oXpL7Flnu&36QFERPk9=Y z4az}tzy}?gGcbT|)LI0UxCc5r9?E{sz`(E$$_8bvEl@TnYwd!vLGyu0ScnQh|^``Ga+4Z2M`%j>pU`7UpS5P+Si1-gsHmK+O4a%MfI!7ML1|6iu z1UfX&oPhx}{l)=hgD%VEgR((WZX!@NsBI_#W$y>|f*BaLD>BN>lxEbJzFS7lpV4GG zx2&8$W5o1m5S220HHa#h{u@NSnC>kn=g(*}eKv>+nf@9?aZI zQ75KrE6DjXKA2t&qApB74WcBbODoFxGpbC_22lpncY`RK>D)?kphGdDK~%!@)gVe| z`fm_*V!F4ooIj(+^w}Wl$n@7B%3->-iX7-LjBXG$W%_LuIe(@vzSDJ7<@^|DOs`gz z10BF}8bpOmmsXPl9Uzhoq6DVz22mB$xz**4Gd`GpSzXSb(P6r>hMYg+j_Ji9if8&^ z4LQ)kBi5R7;1gRw)Q;)5K@`JuZ7n%}#tqY}LDZG$r$Lm)bZKole@2Dr*&wQ6`fd=l zVmh}DSYlM$@Ik_%4Paz5Y;o?*+33-B+X>p|@K67kakECQium zQK))`|GbRTC+hHs)*pfDfJvD1F*1NUx-dS-R1kYVno~cdGBJSqARw=Udf_mqUPLp` zou83m322HBWC+xyAm$l}d0g;=UOJ{no5`uOz1Co4xWx%R>0Ysb}YQ4|BO^?De4aH9VjZAJ7tUkcBYJ z#K;CZ6`lE#2m=E%=(ZmQCPt1PaRvq^CRT0%1_tK491IN1VxW~uOib*cwmu6BYi3>v z12gD431%tKa0L?!`vxBHp&8S;K@>X&NY5o61_l;U(AWv{9O1{Ot7H8v_H2 zE@Z7ItkLo!luB>z`%40#Aah#GF{I>PF8TIC<6oYN*M+QrZb?` zNnF;`V;tl(#X!rcctOh%`B<1(SV60~m{`~!PoM1|r&zz05p=}4;0sX8SnvvHyNjSL z$Pz&%Rt5%UK|XE<1{T4Iq6`eIg6o+W7}x|ss}|S=tN0lhI6ybNFmMX0@-Z-Q2`-Xk zVBi*P1sw(;n9Ib#z$@6r%fP@VC?m|kz%QsH!N4FO_*RU8K~V4yXjy?^kN^XNuweaL zNd^WH!A1@S22sH);tUL8g6*uJDNfLAx`f~}76t}ML2-Tt1}VXPVhjw@f(L~d7-R&$ zGcz#A3g+=JFvtm-b1*Q-3xY0RR1gHM;a3za6lY*i61*tEz@RJ$I_h3Ua193ogQ}ne zCj*0;AZV4cx?qJE1A~U36liaRrXc95IW0j@TUlFh4roe9FolhQL01se;MHT`VFA^w z0xY1YXT8t%lZk;r5H#4!ASepjHYC^!idI2TPmEbG1eC4?K@DzJLC{1q8v_puXp1m& zoFoGS+Xhh6oY@<6z=@hDXzK95bW0~WzIt~N1_pLbP<718!9FbjG{G1k%)r1t9mHf{ za|Rt{G6S?(4|J9Y7c&C`4~q&j0|WCGkiMDv%nS@7EF9mNKog3hYs45BIDRmJb}N7v z`!aC+1alZgLF{+&fi8#TU9Njoike^( z#i1sG4zK5sU{E1`caxOHgu~0P?8~b2EsY$;H6HVat3A#NH##z`$Y0tO8mk z$#spHfq}!G8MKpzhouRWRZ>7lqr`y%i&cd4>JwH52DZ7NBTue@qMw27AtwU^=XDU9 zg>4@*0|RHo4G@Qet(cF2f%7Ja&BK-sV&4X_1sIq?xA}73na|3=z$(Fc&w-7Bf$cpL z0|V!MkR1$cpskXe4?t>J*nWYIQ+WttbFe8+w|A8j=L0Q`<$MAX5@BH8Fg?XpPK}9G zXnK#UoK(FcXhX_tZ#K}(F6YnVAd^)E7#KKzf#Q*Y4K%RH`5R;lBU?AHy37L;A92!Qbj>C;+$-Zpk$CH>JBoM9W0X}3c4JelLO4j6x9P+&I#sZ ziI#{kFmQ5#IoYCIASd#GIXR-Bo9#Gx!JJ&t(+|1H=`zlm{=rR7B;Xbg0|Tc7Sc*aP0mwW_Fo#jp0c5Qd zn8PFr4l-#lhglS~(t%S3%wZ7)Em7c<1#?&#xMofdahFpRy(`MVz^TfZ0LncKJS=C} z85p?kOz(1+Qrx7^7*hE2-*__5;4hI95 zGW&E^4><)He~?418NvBXEGIROfzt-8ga?$-9X;d}m2E%)?Zg03PH6zb(z7#KMH851}e7$l`YX*Pf{je~(f zG6>|}K*k3k_8V>n2F@S|`=mJdj2_U&21#~M+=Vb2fYg8{4>?02>>QBZFbKN}l%B&O zW@dqsP6UK~0d&?+Bx8Uq$YRiy+niC1U^b{s=8T4Db^v)k2EzUbI$9_e!uFP7VBm~n zoB&$0%@qUkK|JFeP6h@pNulYBJ>|3*9jBl3lv8E=I{k~MoC)K_>6%`0PW7xH)4CZ! zx7?SAHiG=r!w6c=Tp=0?%0+#Qp!Li(qLV?cpU8NMn}MN0EVrbTfpaoA%vwaAPg&Rf&KoK8{DUCx}-!OFTAcvx0(feQHxptb8fEUerN3|yc&63!Wn zMxf1r>C6laTxOu$#B2;Y3CI(adze96vbg-gqM+d-u3#`zM2dlds}{^mVq#$6ItXSS zm0@7uIu2%XfC`eJW6Q^teSZ+gqw zF*;3`@R4(2JTpDkM^2m3YkH@ToEl@#^bJ08hRScH85p=k8Bg(oeZkAXAPYKCPxvor z$07%)iOf|ooyAv9i?M9FzOS5CeX}S71D6b=7f4E!ACw(r89~dYSw!oF7#O(Z7`K8- za8b}j*%_kfO;GGqJ#VlUue zVBoR_YZc+)vSmC3x5*CKCVQw&wV()hU<8c-Ky7ja+r%OIe)>K?IrVyHVFm^+SH@U= z1_lvkE)T~4aPvHo&GUkqw-0pql{eUWCI+q}pb+$7JO|Ru%H_`(CIItx0J7#lsAjNF zgTVGPiT(k3D!3ke&J44tHYlt@z#J9^t~-JZ3|yg%peDEo3s(f=0=T)6$mT{t%>^43 z4b}|xWDM96W(KaCj0_B1v5ZLqVDBX`g4WY>Urq00TI8wAKn)q_S2xpEjm>-a=?xbhk61YzM&fUK(!rVEs_iohi@ z3%Eq)DhB6u4pC4I!&Sm)4+>WXu5wU;RLW>9$iN`N!&Sj}0%YtYPz+RpV}L=l7?g9X z>cPp7Nwk-Xfq|RGtj7(o{Yi-N6ghpGo#-2t}Qn2CW)8We$@j4VP73?c$tJ&ZGj7#JWL zdZ8MWKuNKWQJ9B;fl>74^y)x4$p}#0#5EBb5*aB)3|x~KK@C?9aE;0}8LX9ufomtI z(3`?&0y3S4YdRyBFwFEBU?mKqVAE&9O@9+8Cs_|ReGbHQQP2u+uDOgR;Iac$Uvtd^ zYvp9%(f}1W^BI?dOc&r<#Fz&+eKA-G10<4`fFp?s;7 zco`VDb~3&ODPiZ@!)PSJzyMLQ7or4`JNAJSE*k^a1W+vRXXF!MU=SDKI?QMx%D^BA z&K^g=30*Q7lw^;Bi%7}(bD(PD7^5pc1A`>EfIbc`t|Y*Wc7xFl6b>w0w;4f;n?GCsLEeUGlYlV*=e2sv`=zEsu+ziQPw>fx$quWx7F_oIhjE^oB4w@p{m8t_(u*p#3I{Lh=Ve z{c9olNYKHDLh=;?3=Awn@}L6{ScT*_gZf!Q@}Lnpb|LvApgy9I{7q1kOGus_loo~L zDL&9|ME1kUVJRq==Bb7N~R+lK&yXz#t|hFV4dNI*o1`69a>Uko;Kz(9&Od(0&>z zA$ic%p3*|{%a|D$WQ62Fw@Jzh$@@q#FvtnX%RtVpix6R8P!N(=K?VjjA^ESO3=HZ*^40rf6pgm}sLh`HF85p#L zzo+OyK$L-j`z?sg$-rDTeMY35oEzAZ&tOX!m~TllFmQwC{aFRLzu$m6=m*3> zpi+bTC%AXU4(gq8{{q>?!@yiR{ZFKv9Hakq=_ol#fppM_8WXra;A7yD=a}viC8x^| zs>iq?9bpLuuIlLxQF3|^K}dI2f`Kb>`rarxCB_-kAAqQy>CDk`ie@`Oo>Bm}m>^Xx zw<6eRPH;8Jtpu)WxI{sV4Y`%UB^nO{m-FobDx>r;rEekxi{TPy=K*a#Xm zV*o95V4R~S%fO(bKb<>9&dxRh6v?2y%M75k5{z?J$ucl#fYKAAH7LFqgET-1jnNvE z&=`X?Kq-*X8k7PVLsayqx5dc$MwWxl2?A{h0^f$tI0rQSrwOXJ7;`|)bI>+e4Ny8{ z%mHnKWDM2-B}B#?P%2^!(E#=I7;{#Ej_?W90PS;P%mFp<8N;;nr|ZPZg{vL_8Q%pO zRR(P*W}LG@j)6fF)Z%CC0yX$ScU!6GPhSx$ryczobm$Ohg&=sjA>*8Uc?JeeP*J2wDRNK3Rcr4(ReJh)d3a zTmo7~3yOhwxh%1HptGAmD-%KYJTfrOnXCYgo$h!!ZDr8S?2Mr8@Zi&A80Ua)bkYDd z0~o)8W?;eg-HeyhR^fojbXzdV0t2#t$upuakF{*=;7-NWGnhfY{CvduC3^fEL zOh!l#jxo#_lx7(L*wk7#KmfEHXe7%?>37 z28bh^!H%e6Vqh@zpPrd0C(Wooy){uTCQy-?fq@aUbPuvrjd4z@GE7e*SkG*b9#CFp zOoTW!*br0zFeZYX!x&-;Dgqc2!BsnBsEPh`qa?W)CIQ~*6O!aaEI|!$#yW_`AVW~* zhw*|9K@DKWI!FUJ#PBBQV8l8`&=zLKP$T{6ca!9d80SnENR|`z1e-DwY|43%bHL_6 z_>94Z*1QZ1j5EOn0AmQmaWf%~3xzmtCd6@JCi>I!lI3Dt%|M5L?E%jXRe>gT=H#d{ zFc^a^*#oxZ0}}&-G1w9aUl6qI1=Jj8+yl2}I)93sG(V{M!?*|B{9z0?(VuRaA{WN! zKYc=qoG3py2|ok}A~>OJNs%*Bv(zKhxD#+Fd|Kux_7PE?33I20b~FuTGAeal2-{Tq6_saLMf}8|CsCr+4mfvDzNq zEN8+!T|RxK$@bTMa%Tmm&okzco4#P)MyKsk3*-uzrQUqG5BE;ar0J;Je#0S-HLJV#Upj-Mt zd=Lit33MeShz&YgLx{nH0kj?z#0Ozr*!GU4a)yv21h*eqCf8+E4_e0$ zJ2!AHsB{6127)#fgV>-6Lk0#0El}|X8d3$_YYt+A4vt`8U;xc=FoK4`7#J9ygTz5Y zdkhQ=CZKZ$K~s9R>yl&|*>$8{`SliYX8qWG-mM6o?I4C%7D>85%;M zRZ>Er*&hZ5hRslMko$H**`NcfK&OF%)PPz)pf#f)HYi=4hN{s7of`rwtw9o?Y2`;C z323mtfU-d${|?Fq9Xj#_$_9B3w3$(egMk5L83Smxk%NH&w9}dm$_AOq17(BL29ymt zKSlz)MUaDm0km5}4k`gUj!y~72KBf=J0U@*;(>zH8YIpMDZ(6~Y*4JZL)jqTdqdfv zrCf0!HZ-lIK-r+^&w{c+>y{Y`pd65^E1_)A0TZBM79lRkMzvO`IA|?-Hg21Rc8v^6`0) zI5)({SD|c>k8eZSpbhSzEtnwnARm7MiGval0|UbkC>zwH`3Gf#G6Fm3xIZ4q<`rJ> zxq&9v_N6)~(;16YkqA3Z)2AvxK@?{2;1JaNOWrJK=0%e0VfR9<^gRGndozN--ib&Ay zy&yIGkPw;l~a8qg6ym!RUHWig=XVURdz5BWW)I4FHQfwDnch+aY2p!D$p$_8z40c{Bd>GcJz z8)gTc>j$zGR4YT-pe!d0WrNBM&|Xm?K?ZO;8GQVrAf#oY3RMF-iANjC206|U$_8!5 zF^952n;)#9Y*5YupTr27`T#{i2uMPRfdQ0uqM&S0IshNbCO ze5dg{C>vzi7bqKK0ciePNCdLWk^ywYp9lj3sB~k4vOz)317(AP8dRc!)PwT91XLW9 z@8zIuSJ3f4;Bx~-AZ36SR07l-F@Ul`2h@PBc>x)e06IGkBn~Qr85kHq*Asxw2L$Dg zV5m4KY9gU*P;`J#Vibk!O#`3AC<;0J6nqk+CX#V86n#|wNEqbTIazFMe3 zpm=JAvO&jmbVAvn22Vef4LYiADwGXssLY14LAzuZLfN3>J3s?YAV-5X!-5X0uNMMk zP*7bCQX~e+$Dm6RK;ocGaSAF9D(OH2zaVi?ns^8j2ML1eekdDMF}{VeL3%$!*&t=# zp=^*|F3^#HpxO&`Zj=C&14{W~P&UX-GEg=s7brp5peC9Ilnp8wK???iBpASh3nox; zPy)1qvO(#?0m=r|elAcpD1Ct1&_a@+Q$`pV7-B&Zl922NI*DIM5>g~*Ld8Lj$cM5) zjwpq)L4{H^lnpAL8=-8FBU-mleZ`u2&+)7O2J(_k!^e*L4IKhuKz z=^CHp{Fsj9Pp<&cck-v70MTFar%Qa6^P7I|w;spzyw7qTj4IQ&e+I9ZW&Z+RIX_07>E_?$KvxvDgQ$|} z*T2d6GxZcs*Z3~y$F!kvdc}9SV@xLsr#t+R^JCPQ-v2|+pJ__b^amg=&vgBtU<>Pi z%K0;GDV~1er<@yOppI9=g+jJ zbovGmS7rKt5O+@5^ngDg=ao%g@JG&%F=P7sKXU$zEYt1(%K0<;Oz-~-vbSRTgTHcq zj11HD|H*-FlB)+%3DeJmD4FT<|K-XV6Q)o9FXzwnV(Ii3|KQH8ojY znQ6<)sU7latZDWP40oq)mRDwSj+yRofJQ@%pu$jy_Z=f>@_`q0D3OQ|FKC~ks1PrxB_Jlm3+e%h3-N-saYzX9g3hj& z6yoh=WnhpJ;+?|Gz#uKeyN3xh`M?XRXJmzVC$oSiA9z7+Zh0YIV^BXph}W78H2J{$ zjRiFMzzZt$m4$ehu!1Kac%%I5!UeF06>O#DrC2kr*yy0vN44Oi`zTn9R zUeK;|Z6V%;pxe5IctK}V=nCo>SkPz=S76t|*Azm{^ z(BuOzXm5#$5N|mPX!3#g6zD{2Ga+8k@mA(Syr6p6LWuX&bTcb?twd1slg*S76jz)A zpcA>-%)lHjfeO%yNpmoVTRpQawN?tbytb zVUUv;JwPr3RkFe$M?tutJzEkWXEAz$WEn#xK+a-WMo*BdKqC|qAcsK| zGEHQV1Y7Gpy~|oYkWqj79cy`gY0v?vAk3aB`-Yu?0fado$mugOFz8Rec!H~J`T~A= zq3!EzkO^gj+VJ^MHmETP8simW zW2k2USJY4mP;7(p8>r<7+PpLqDh_HhFNU%~-h*}gL9NN{P;pQy25lAv=>?4mfi{bR z*q|d-K^sItY|#2}SYJOEbgVKH=(s~R$j+skOxsl=<+VWf0{KVDgYJNxA0>aBX@`$>|p^tQVUu7b9=M$S^%TMjo^QV{8)Kyrh81& z=fuh@F)dM?ejrv}jkT7Wfx&sWbZrZd9R1>)q@nAk<8Ptf5Jo9-7UFTiL&Jw8re zooR>C^nlCj#iq{#iTO`o4-&heG~MF^mm1S|k!kVrYD_6&(`SIVEE3ZVcqPQ9>oLi* zPtT2)=Ydu^=F=PEsr=E28IV547FThT&!nV4K^!4_;V&QH&8mY3#nl>%)<0Bv93Sv7rHv%DMcBVh&xrZtT385kJ& zbEm&-me*&jo-WxUuT-A|>a2<$2Hg}T8mq;?z$D7g%fP@a3cARQMO0Lrfq|8Qup0oqW?rhW~i zgrft2q5jU^nkBZ37~*s#dUFfg#`K?Fd@&aj-E&f6+)!~?ogog>*CbT(M+ zbnjMqY1KQRL#jA3K^IAK7^pKaaAbj)3>=`X-W=H=YgjnUrgyi>8`iIvV_@J&?*cW6 zg5?<)IPyTFX<|*F6jzC@p296rg5nTct3qfm#YeC{Z9H4!*9CfQ$7#RFGgg~a&gU*!5;jm$4 zVBly3u?sjrdyqJqKt`8vuuos!CU0cU0b1?f3L5khVF9IaPD9W^TB5O_{+p<&7HA;1 zACzQ7f3biP!)$fX4x6tM(*@e)#p>l$85lT4FM!rqiGt>rxJB>sg4TsvfHt3q?o?!8 z;1lJRW?#HE($uiheNbb9puP0!1{u+4HUU<5ML~BhDTsm=zA1{PXfiM;i8hEa zFer-gA5;ZJ-+EBvSrl|CF{>zO zK#YxnjRlk(xIozn)a~G%0Gdo>V414Qz`(Tul(Ga^xW6-jE0)^X25uH+kR=?_??6jMSiu}l1|A+c1_o|6W@B~+1_3T^ zPUhX9duSj=aY2omK7Dzoyn1~f$PgjsT98TsZc%2?Wd;z1Vo-%(JH?@PdZ;rna7!?Q z@(73YFOXLxnL%FXVc-FsJi{%;d>mquEOQJ8%=L0mlir9kFmNk^-N+){2jVCNgL$md zmqE@~hMGGW6nd&)86E~6f6)3Gb!O0Q3IYP$dd$n<=ITSuy#NX~Bd}%`X-4Jg3%cYb z>*sJYFmRhPgJvN41h_4jSvVOOWWa%G3D(9B4lyfmAj^Pu)Norf?`CIU;5SfZVBod^ z2Lyi+$dR^Sukf>jjs>*?ThG9g0rI*%^Ck{ZEw&5PHfI4@z*5Z3z`zrC6EqyeF2Zv) z2UO}D2W9kYpg3dT*vAOE#uUV6;kXI9r1S=e&B3u+hJk_SCWy_$0g6zb+aR_814}Gu zY5g5_(2ht6o_i-i<^}OFF!0<5sbb)`4bt}jq?U!_mnH)P&qENKgG01lnSp`l5s1UX znNwWE!1EZy7T}No-F5l|#1>&-0d1M*c?w#^E3Uxv{5K~9g9J$F3y`xVii#L`UV%qfBd4d@VhaL{l<_)EAMAVC$$zyn$a$0NcBT5%}A z#v{&H587KGy&dEM39uOq($=62iIQLrqx5pnFrE~c!z2w32x%~fS$aFj5i(#7i!?vT z09i1Hm4PQ0Mix7P2;Nuz4KPC7^0S2W%$~1CJ#r(d&ZuLkMv37%=XDYc_;x z1|0y;W5ftb5^T~Lpg1*Vd;;pRa4_)923^lV;L8X*gcY)^4E!rVmnH{-gM!}*v;!mv!oCeMF&G@a{4N>{3_Kwab8J9MBtjwV zn;lyeDgET~dI1K#Gpd1wm4lRDrX(BvP5H{#MR-R~xX3$Z}JTVZq zJ}7C$LfBhDdgH*pXW%IZUAG<2SON-Nd5~>sj7gw9uQi|rrJ&3s3@Yt~Z-VaF5e5k| zu(5!GfoDG`5#%!VffR#I02c-;ehzA^fXWvzmw~4qI$3~$fv1lVbjWp$v@@uToX7}j=Qjv~b~y1&2FGcObd^Fq0|U<#Ft1Iz z3{)0P1t*dY>Bk_aP6Kl~r5iz!HXW?2i-C=$i4RoLgS^Scau;N{3aE&f!N|qWz`z2! z@q^b4MA<4kN8w_TOi1;ut@YaIa1|Ss&!Ax^i1_s{a zU}hXI0|W1EFf$Kyk@gc1lLvGb3ok39vH-{(ngR?AvY-;uXS(Agc~!v(uxK3UIOZnM zPUWl9%O}apDY7XsFz|9R_JL)mfb@WjItW(5&%hx3VEVR6@~UE>1;K1AmqEHg+x3J& z$9M}rnEr8+yna1su8@sI0(7#lkst#DR1TyWoGL&bW#H)pwGV|E?F2z?a{;N1L{$q> zCeH!77Mw8^tSlR(tQA!m*hr8V0~-s-cRZQ(VxX2M<8-i=xgafTQM54dOcZ2b;1y#8 z?ObGI0UfI>3mT-l0a69pBO(lHf6PRvOfG<5gh<`AR_=RQT|! zGJ+hh!oUNXf~n_KV+1*pCq{*VfmZ{ZHU*e?wHdbxF)&DjY~s~n+z*=OWZ*FtVPN3Z zWt=Aj>K^hMF!Bg9Fi2Z~ZbUI;JOxrBeOQ)(f!Bx;%%x3q?wi1pHW!^ z7BB(GnggMl!C?^ub|F)}bP>qrV6YRJr9nGqc|*V)76zUN$_xy=p^P^`=CbfcFy_L| zjYKv#3TiIcq-d~aXfVWpEn#Nh0Ufr+8_TFK0`^`4<0_a*A-svmMkPUw0y{Aotec5} zM+p@1DU6jM-8{VMjG&`b6tT_{^*>d{ZY4TF_py^}Y9L8-BUHOcl4KNU01<1Mz zVY=8E7 zu=6%B9t9gUecyC>srt8|bluFj5G2RK+r|jmaR9NV9od==h%F2}pQIQVcsm&{g47G} z_AsV_&SwBSs~4)i15}9hF}?;Z!;}Wi{qXiPeglmYL3}#_tc+P2v^RlwVm&kOnn*jmVa4f>13$P}JOWPV{Nfyn6{;An-2->AegtX81t^uDn;k0mRP( zDu=Fuqldp5)Y7;H4i)|zpgQ9^C~JV4JfT_)47@iOxg{7F_*i&vGlKSF^Mh0K9Y#>2 zjUUvN;=K!w7X}_CPjSpY|;TL z3=CYn|G_*C>6O!E=g6x`e+E@a%uFD21f)#`7#Mh2m_SVc5ozz~adYI=>a#(P;Q)`! zNJ}pPRqUK#j*Rp^bp{4rE+$a!k(I6h1rs+DsB}?~zQD-9z{|t*SBil_MOqY;8hDvF zq!}1Aq(KMc^YSqXOEWO&Nc)2Vi=RnSnt{PUx>lZnfmZ;`31(npc?;Tj^#nA0z{c_e z#0Isb*;tsR85rb1RUsP-ABfou4nHKn1wOeF@MLXc+!nLtOivb>gJVBq6& zkY-?z2QeYTmi(G8WEdC}Hh_i*g%mz(FfcF*DS$3OU=mX3l?0tLq_9}19<*&u!C#Jn zfmKLhmIMO>n~=gM0R{$kAqCL6Kpa8}bxI5joI(okKqHz$3ZTIOZXpF{1qKElA%)$b z1T3Ur#=^kBC!{b(9<*&up;`sBZA}4m=Yyb-0t@JxDItXypq8YN!a_a<1`#2J6g370 zQ6Ytm{0#LBVnPa_wT9wC3RzkV3=%>LF(ROCYYJC|7#O646hH@ZN((8N%YkN&6+pW- zWQ7z!o2TW36hI4QNSKEP6&f$jupgN7#OsK6b|x$wyh~d^MkgnDKH5$Fz5;? zyio*gTT@uf4BED)&?yRbt5*aKPIG`-dHkn9jXWOk*a`n> z(C{N40~?FIBm)DeC&a*i1{A047X0TyM>KMRY9;;)pn-h`j?Kyp4Ez^C!W@=^>8{8x=+ zL8teCM!)%Q>;+xW=?PjjE!v<68vPE{1P!0Y3xT$|u_$XYF!0|4*~Ko#|3FfXfdS&I zhY)9h3U&TRpe7*)2a5;;1OH=CBajc`!6zUO3UJgHD={$eKLyz%#Bl>OHunsiM;TaF zaxgIPKR+SMz`)MM|0)n}_-lyapn{VB4ah(aj(w~Q4E%3FY)%H2a2W;${&y;J3=Hgi z{2xJs+Ym>6g6IP~>ND6;3@j1KatsXoUt&Ot1^B;jgVMhOljuP^ALkI#z;#hX)iVf{d;pr2_nNjA!McBO?6r zj1cSRsWLF|D}dXaP|b>9&79zd1iuovg65J29bd|?46X)v7I!}>@UR<)^!@1qi$HA*PVq;+7*8|%n#lYh&$iTp_ z&v+ALq6ohc<9Y>{Lye&Zg1RRBCg4gN(xT)y1#9M%J`D;FGcbosx><{Xf!`d=;g(hd z*W};|i$_{7T!n#w-x6%Sfb=_1>azl?6J+4|2TEYpjJ6643<5Lw?HCmlVbFV7&ruTi_;nS9l>KgHPVUG|ARc|EY85d?*cY(GPqB`?+UhR3Ioqlki~9{yFsSQ z@Ov_r!%g>snhrM5n-MfZ%pnar>x|zAY?1`H&BX5u=178P1Ni;G94Q8#GoZBU�pa z8j@q-4`SRhefDB`W3Fbf0DmOo$LTi~%j+ncfiie3;{lK`7k>hyo)XM+i4g0h=S){$ zBCi|UjZvtDxUkl0v&5Y`x z8KgWR1_u5X#$FIx4Rq*QD>M`5%A`o(v8@{&Y}kp90Eq_6!U> zZ$XhYm2ry_0|U5QQ1UI7XInT$dz3=Gm&Kp{K}%w~|b2BnzU;DpN}Ej9h) zQh7fe=#Fy03X~mC)^6z1kQwPngf&9Oh5!C)*kiG=++&-`bi*yGl8ul{^faVgU zXM)^yfKd}P@F%@jqn?3*{~&mfS4O&$i-Cdv5Tm6!1A~I}WC;ca{=;CGs7QlO{^LKw zXs^z|U<1iIN5NTVkJ3y~PCLd3n!_|;R08$w_>Y5|^NJajKpj~AhhSa_qY}6teFP4RQbwhU>D4RbrR%jondm84 zu!2#^8N_=A=2bE()qrB;Iha?)s5BpxhF^er)r?Bu!vQrmuqo3RmH6vH9(@OvoX)5u3yQ7x;835z$iT*; zqRzk|2O3`D0+lhKlm?zW0ZEyHPIdqd+WUjr+n~8tc?O>Qpji9B7^DK~AM*cVTn0+% zpurIS-(V{kAf@XcFo#iksVb;&_zUJSNrTo^^Zx^Ln8AY({QtqD11t4jE+$ZOfI+$k6t&#oE&vl96dJrtn?PB}2$TQ?m_W16 zY%Gi#3=A1Uf*PQsBSC~XXxRuG3&=xkEQ^#G7zCE^i!d$FWMGgkVgOD3gV_v_3@XM1 z$)KRcApGJ?pr#;?U{P`s1HS~*22IfUlsO=dB+~&+P!Gd!di5%K$;>#ATV$9(y@m$q z7of1019MuWbwTBr0+`bQ9ysJzWCFD*d!)gcO^FGV+4>;ir_2NzBAg(79pq^hCQ##P zqV#Do1_pjru%{Ni%^0LJQ29E}a5O6WU1*p!86b)oT8vR zu~=Ca7`EC=0IiKr&jOB+n?%C^)@vt-N?W$UUI7ji5y%j4F(} zueBH$;z755J=9`g0G+t32b0zRs>Q$nYD6(GFc`!!GB7ZL&cO#Qxnf{ooby(jfx!?Y z%Xk8u(;0&dcX5E#fTo!kgAG9=9*id$LGw+FAq)l`(hLlYT+HbpCxMo4GR_gwVPJr$ z;$jAcDPs_W#&gi}khd(Lu?Ubt(DieSb8K}O7&Jk}I^$awQ2GE})52iz7o=1Qyigvr zo|$pZRJeIk%;MAY*2$~azjtO}Fky^lDq%2Tj9~%=gu#5!#?FsSAk#tne;DWdhim)D z1aSr=#6B~D!Zw+afk8Wyf$j9Xph<;F9{8#D5hdiP%(3HgM7efz`$Uz6?Ak0=q>{W@Q!K5 zIsKq3>%j4Pj}a79UQ7%OTA+)O86SYF8qm#OMxcH$<6}lpN0@oyhI-HqatvS>f~KKC zmjBTMMM@N-p$TI&E3?G(x^40t(|>J{mt+-mVPH_0F0oNwUR=h7fx!&4bxFg8fx#TK zk-)@-fgyal-$r?bdV3cJhHQPXDWFI-11+oe25A5VLbwY9gE8nV@MIUT3T7^DK?Vj3 z(4~QlpbNbjK$mMU&fzowUAY7*Bd&mk#z0$kt=56k#x>9w9q0}N>jDPG>mX&I)wtFb z6%33wK=Jd6Y5LoZ@|?k-nBxTPy$9`C%XeX5_z!UrqXmN*X#Z6eh+ty@wa{z=Bp4VN zdqE2=z}vhT=UgykV9*5T9>}P;88ay3PWRj-FE0TO;9f@14Dd{51_mwA$Sq?(ln`)FfizfYcntyvoJ8|f|mHlu`n>`!BprgYBMl^ zF4SaTFbD1K1C=R{4Zs1!RLsC&2D)Vg97~{6O+c|EHGSe{d9mqoo8^U-K)%y6gec~i z!Ccz^ypaqVXVrGzvdR7JoBkk$ATjb?DK}8wp zY86mkW~^miXT-n&F3$F_GBD_Zin9-(J32wK;G#?)yu#ZIwBQ@;MvzvJ8=o3MGQ-O) zP_OCQR?!DlZAijG(O@AS16rjXb?oUeS9lB+)`LBU7;or~(3YG&Q_H z(B7LE4G{zvx6zCSCX6v)d1H|8H$glGE?5kh85kHr*9bE(fRZxf zoDxe022F6fX91VNpwl^xKvM*aY)qgj0_KSm>L8^uJCk6&1_J|V#hyb^YB~cW2NP&5 z6!XLxbq>kJ42+yips{P_i3{qqzy%Q(6R0kk%g(@H1nS)|ax;N?H_Q{))H@{Sr!X+` zFo7B(%oEquYk~GHGV+4U^M@G(IOvQ72oph6f_LNSU==h-1I&kFLf$#jDq z^3oEYj2RfrK!+BA12_X(6qlGm(n`e+d12PQE({FQr%%`+FQDrmW;9|j1Kr^P zwi9%YJ1Cy4rZ?`C7n^RkQ(oBMs|y1|3{*?;9*`DLxPa;>juHkl(D`{_t)M%ZL0Tt+ zv}&^cb75fEI(_|4d09vbm}6(vBSbPFsE4y6)iNGScA{%x1MJS1an1+8UvVPG(|goMB4Zh2u| zkX25gqneqD7~-Z!?v~f{m;fa({MJu^fcwgz1(c99ZpkP(J#3G>R{c>cSPSVkI9o6VK@{8t zH%(q~Fff>b_P~PNZLY|`zyPZ5w^)IqA)1+s3sjGTN?c=5^GMMZBn&BmU6bS)7#Q`K zLEQ~dSpvG&o^g)4H3NetsENd=#|$cEI5?#l7_>lhaEu0ErJ0-z3|ikntu8}m!RbGrF=sM2G;|iqqg3HT?X<5 z=nNOeIm>Neo_GuPL;@EBgAu4>&-fl}5!1u~EnQG8{{gIV1;`y>FMVVdoG!OdUMzbC z$W@=ginX{I7|cCEhkm#)FnHTQ0ua=cjAoh`z+eulDJ@+Y7&0L;P?v$SR|x}yIcWEU zt1AOTJ46!O^M@1*C^DkC z85lG_fLak!;3hDr^AGWt444n{R};t}S+GIhxEUDS+87uZ4%xyshk}bQQ01g)i{cTn z00uKq+5r~@pzUg)kT0->gnY_=d1Z|lR|W?24h9AWkY}eubfbFK7}UyeoxXm*yp%D> zMsOEUm_ZKY3s=xF>Wp?Qpw1k~f1oB9*F#p-H2u}aAUtS^*bay$U16W-L4=klQ zf_;A*G$oYD!05yR%8KtmvfyZP2K$|dmw~}77M6HG_cVjN&};|sLe&9z1#Xb%j8A}z zWr*mm1M+h9puMJypab(67$Bj3+n#~J5S#_l!S*r+8G@T0=`5f&A!D!>IH_cU<+OMq z9fK^en{0U*7_?r4&X36k`yd9y2c2Qhm;=^Z#mm6p4!WljG&0d?4{p=cGcYhVfn|F^ zKIma!U`TgmU@!v(W-%ztK{Z#MD+5D?Jt)SaK}`%}(9J5H(7asEz`$S*+R_iIkmrIG zMKP5!FqkJXFff1$|GiMLa&S8Y)V_}a%jYsMFidf+XJEJpRsc5H40N;Vd{BONbp>s) z_y_NVf$A8>IcyFL44U$w67wI}hYLW{nl@b^FN0V1gYTDSoTKLmJ9cY23n=R|25Eve z$}mm`YdX&hE6}F1h$m_=FffK_eFYUpGg%gEF)+LZh1x~XZl77;m=)(^U_kUAK*u|P zVyM*t6da)b3WGVQ?G5Tj&V-7Ad=JX8pcL@X0TS0A4$136Duz~Y3SeN6aD>P>9+p?l z{|+j>_JXqwD1Cws@MfH|)QN#X6Ws9L3yvWzJ_ZIYut)ZTJ>t#Bz~HeDiZ;O3gtf14#E@sAMq%gE{EZ zA&_o!Cy2X4j>yaFfFdNs32X(V6#*)FKt_S?V+0!ox>*>ctsAOs%Mp3udQfFy3>s+# zRTfY!44$AR-b^Q%b~rIGu>A)EInc#;o}je{OsAMGfW$$e!@vL*2d_?l?F5|+=K$w- zMh2I|ppv!dj}xrSk-O@|z~JHo3Z@1jXRs(}+!-v)1&VNWXQ&a33@*Pw$IVT&fGA^N zV2~4cW?=9FZNz3@2I^;c=Yz_(BcNdyh<|;YLE}-bOsUSGMlxt>p6k6j14EfJ1A{Mv z&k@j+gEv!?GXsNMwlf0*7ij)=l5;&+@;7L}&W~vxNU|Ly2^u%r408+@gEu>+e7(mN&!T#lA@CIGd!MNfTLe)uU1_r-3d<+aA%%8#JU&_hA0K%+3{-7(> zKFHNGFt8^0gYp3g3##}<$ucm2FwZqcKWRAz1`y_0#OM#|yMVCJ62CcY3=AO5&cW!n zpM!w`gn6DY`pK#=Fn}<}CPu&QVhju*%+AT^@4>~u0K&ql{*|H(3?R(@z;6OK1H%OF zdIkp0Yg~RuSQ!{Vm|cL;k57w%0fhOxnF5?d7#KjFarY!vp@8=*JNM-VWBsEp*#!>AS@Ql=nuND2!#2x{6V+kfH0qrzrs#71_lro zj`CNQXJ7zfJ}3WP1qKEX=2M$q_%&116T*X-3OddV#0T{Tgcy7o%AxAPRTzUmL+^C`IX2>!pvJfm zLmDFk7VL7?-!Kx|M$Oo$3VZ*1Q_k6>(8|j2c4<~j-%x1+V%?a^`JYIAWnk>>SWMRGE@NM z*cE8}y=eSPX#A&W{2yq1Zt$29!~y{ZhUvb$Rtrwg^ONV;&g7uL!3aur%Xu9Y7-87} zbXvi76DI{brs;p#q$H-#c2Up)pK&=kF*IVkmaBpSBQpbI)N}!V1+DF6ZVHwhlAs6$ z?K%dP2%wUJ0pc^puIVTI6r8q;`6~!APxs#J#={spjkQF4x_6L52;=1G3xX7^87EA? z6QrQbIAL0_f;i)(?GnKXN>cTp*1U)&0|Thg0+mQ2pe7;%0|RK-55@*H_CRb<1b`A2 zNIj_J0(B=rY|vREpji|U8zc@ID+94X%}>w)l`uBw>^~SAbSj>RCPO{=GDgr=c8~=e zptBSi7#O&r-UOA0Fby%Fi{XPHM<{{V+)(d>l!EkvA{4~t1|O)*zyLbc6C@5A@dUBC zL1$kuFfi1D%+X{3+uH^@W(=eVG+G1d0da%c)eH;_eIP|akn`C3rbp)~DC>f<4oE2| zkU(s1(9{qEB;Y`91bG~^^Bu%i*?u@r!Geu(!uCHU3ey=GCrqDGrV!6KVfvRc1%1Xz z(^bk9W;0HmexO`IeERZ}juO)+Pj(h&1DVV?YdS}TLj3gG;!-?}bEXHJa@3!`JCRcx zBDrMyl?nwVZr&KsxiX;8WME)O+Rogfpw7e#y19oDD%LgKyiLKqeh;WE1r<7k#0JgR z!jyu}(1NiUKrJ$;dR`>96cQVBJQhs77m_&WxGR`A=!_ReJJ8v83=9lKNQ$N)u@@q- z!Tlzv#h}Z+UIIFv!1S7O#4|9!I8I24{E^tPNbGtfb`KJJ zCK7u&68psT^X&@Cl0T4ySV1>eLfs-eox4N9dU{^OJRZi}>A@We`i4u8r1v1PPa?5D zAhCI-Z|+dA<^`Sb0P{%9^xqu{`t_4Rty`!?3y|1bkk|*2*yoVgw~^Q{kl0_5*i4|& zOsM(%NNgDh8`LgmV9Skl4qO*jGU9QdodI zM3Q)i#Qu%M<^&BxL4Bi*#0K4$12YG7y&sGXx)Tz{u0c{i55@)!=B$Qs7#J9KBC&5H zvB4t%P>Ur%Jr*ci6^RYHdkSV*G?IAcbnb42{q=UB(*mH{K>bLV(r_g4W+e7XB=$Wd zwj!vH0yReui4D5*5@x0cl6Vq?4Tvd>@4*-UDNU{J##y zVPIgmiNpq7S_IQ9D1<0%hynZs0 z+7(FbZAk3XNbDO(?59ZVPe|M$51Be5qSvF9SOS0k|xAhFMiASKybND^O>*j%8IF=!}@Be7MG*mg*4A0&1n z5<3rxT@7P{{13VV2o{XfU=j=r46BjYJCNANkl448*e{US-;mhcpxYv#9*{s{tBNr& z)Wa;cN0Nv{Vy7dqYmnHTNbG4y>mjjikl2Ap>}(`<1roazi9HF-22GALFfhyqbHM43VJ#B-5EA6(qJH5*u`n70gg?B=HC&b}ACP2#H;f#O^_2&y=!3lmg3; zBsL?l4tT4n?dDMutW=nhhtgCnQso5zaRrz1({A+bx5*fmJ( zW+ZkO5_=*N8+3XE%$oT~;>(cOYawhXb}<{bbC5X z4e0uB7<)UCnte#@qeyJf{sNf#%Ls8khFb^@!^7#^(-o9?MP(6LKx4Y~bOn9hY$Tz+ z>CMv>lqEMJ32jGW@0-4Px`K5*uN=YSg#8yuf=dAr zD&k0N6(qJ15<3Km4O%r1i$c&*5ioW&l9~<}8|43~Fb)F)!y+X11|;?yB=%1vHXCU5 z05r6Ok=Tkz>;NQoED}3Q5h-C;AW6(ZVlPKxZ$)BXM`AxgVt+znizp#NQ4xu)k6?Q- z1R^*L@ks0vBz7YbyAO#y8;QMg`sP^**XyS#BkWv^#9oiYK7z!)h{V2!#QuTAW(CbM zLIYV6iEV|%c89P*@yWmt3*ms%a~2Z29Esh6#GZ)6o`=L{m$aA4qIAHH2qCH#fn|R8m7q&jv_}?2y<#NbD#ib_No=42j)> z#0G7-hFJzW77xZ=hfq_`um{0mIEBQ%fy91>#QuWBW>QD^OaO@;fW%HkVizH?>%nYL z_%kpt^nf|w^v5t0iMOE5O*ggF@dE>u0(|F57NkpI6Uu~{?`!7GTwmP2A| zBe5-z*se(IAS8A?5<5qeK@UFWScxRjhQywX#J)IPe}RIs>R%)wF3@@kXvl*09>YAS zKD~K?LV0}wl5`moyB3MP1c|*BiG2}?&8UqC3SA_&1&9ru*RauMU;y1x0t!ZVkT|T- z9|Yonjx7dVzyxAL-J1krL&Xb`*i|4l)X+Mpp`eWeT_AC&`pHP_86Y-P{Tw9qOSM78 z8&tzukRqtXTR?2k4i5$fh8-XcQ1)SvI8@C=B=&tI_B$l@R}dRKjl{t46J!pQ4LZgX z91)-;FTy&Appyf!LGvIC3=B#-3=E)aszJe}3lfJ~Yyo0J9c>3<+fAmbO6P!t zpwfjPHdMSG#0FiH!@$5W4aA0u&jqnTvmFc!3=2V4LfLCT;!riakl05-Y^eE{k=XS& zKpd!s#~?OT(F+h8YAAy)!msQgHfXK~G()2cI$9p&Qw9bxkT}#FMGzZmjsX(e6vT$A zafYyi!MXz>956cu#D;3lLSpBG*ig-NAU4zy?MUpoAU5~(hPhI5^@l)gsG8GA?1vyW zXlFbF1H&sM_Gcvae-In0S3wVS3Io__44O!6dk`CHjt3Gu5W)r*K@71V4%DD35F6@& zMi3h`DFs?8sK>w{3}sIMi9^-Q2C<<5u>iz|imwK-q2e1rY^eAF5F2XFNj*>=fpYGH zB%m&RfyDlZ#QqCnL)DAwGcdqzTvG(Gq2gLdY-1#L1QI(3#s>Mn6vhGF6NJQ`0AfR3 zJq^SLUB$w{z%Wanfk7C`UJ4S2s#yp&7vMca|sdq8Zc&ki7|KM4|ts=okYL)AP%V!uUVGaDk(4NpB1 zM-+)I4PrwL(nn%jAhG>GY-oZFM`9-+v2#Ies5xaw>>d!C8+1ww0|UcUCmW8X81I4DpgM_xf#H!M0|V&FZIIr#AaSUgA0Rd~RM?Fe7(lDzKx%kEY^WM> zBZhjogbb2|I*1L`Y>LFT00X1Ct2@1L&Y2P<->6ASy)(5E~j=vLH6BjidqMKqbtP z*zQPd9}pXAK`0VC8^ne>x&(<`i^OgQv7vfp zp$5ewvD1*)H6S+BoK_@u9};^?J%|G}Xd4oHKN9;Yhz&L99uoUG68kfV4K+vJ0^~D@ zXEc!5K1l2YC>!kmOehDWr4Na{2#LKJ#0Fhw!N9<90>p+|b{mQPABoLjiExA*hz<3C zIuhH!5>);}CCoq)P($sJ*zrj0QV<)O7^^{S&=OGw28Mb|1_og$y9*=^RWk*|h9=~N zNbF@GHdswP1H%>&2deofhz<4SH4qyr{v5=HHc;P!*idmMD@5tW3u1$oh%qoQ2wE{P zfJPWWAu0nB2V2I#pbla~9i#(d!#XzRAP!W*2E>MHa0juW;^9c_SP&bkCI!R>?K)>* zV8{Sj3}qLC#Gz^$k=Q*THq^}ei69PC!z?8BRwVW@5F2XHMGzZw;UwtN9FS#D_5+YO zRLyG;8*0G^5F0A~8^nf+GgyN|4xIiNxIrAKgd`GM4#b99paEh-4blg(K}*0G7#NJL z85o42Y&(!RRE;-?4UNhu5F2WKJctcdlVuGm|Dh83APJ~J6-ewp5F46Erz5c!AhDN$ z*igN@L2Rf6$3Se*)*1!|hEpJiLfKbA;vh93|33h6ppJM7VuK_Y7#O}FvHyeEP&F(_ zvw8d=HdI^|iLC@;L(S0zv7u^=Ky0WZd~87FKa`V&B+-GyUIAi54cZK1gRX31U|`s8 z!@wX6Wgh~GL)DxGv7we-0D}poUfIhFHc07m;4T%gSb|I7v_J0eA1J&G%#GVggLp85JVsAuZ9|N(W4mt~B zgAOBLU|_gt$G{*AW#0jbL)E-OV*jvX;DQeUGEc8pj1aFEvqyxEB8Uz3pc;q`HNz0Z zhKiek*id_{>>+l7wu3o?#G&f_Ky0Y`U=SOsJ_d=M3Soo8gP{__0VlXFB=$Tc_C6%` zB_#G85F2Xoa}XP}>5_qg;Wfx{Q1&;FI8+Uz1EO=p?f@!}pb~r_3DAOX1_lNp2L=Yv zP#VZZvLJD&8f_%D8Hf$_r8S5RRpW`o4gs;DY9c{wsG1ZI8zc_$ew|tq9TkWAqiqbHS2@eP*+=l*m|Ha zVPLRxWMB}6vOPiKP&FYSHppiT3=EMVHdH(X#DsT_8}zpIS?Ca&O;>jD1d!*8#I39)9I5_=hl4eONcgK)sEc!R|L0b+xeyn}jr&WPN~2V#Tn z?PFkI&;YR^A`)LJ>ai%$Rx5gdj#Bz6}PdlC|R8WMXR5_=I6dleFU9TIyp5_>zC4GMqIHP~PdB;g!FVxL4} zpG9I{MPlDXVn0A)KS5%@Mq4Zr4J-FKN4FUi7k!9RzhN{ zA+hzKY_R{0pd66@t&rGuNNhJGwigmR2#Fnr#EwN`CnB*kkk~n{piUVy0hS<1R3NeI zk=V^h>@FmB9};^i5_={RdjS%A37ozC%N_+TvHEn-3U6pt4cg4e2xWt|e8bpvNNPZv zy7<)BH4ODzR5_>0v4UPqdy$}v478pPqOBtc{&}EP~lzj_{ zeGiEZ+I0<6{}D<22NL@a5*xHD8>U{G540#BYJt}D`cDnwxu&2s>d<1_5{V67>kbw7 zM-m6GdxwfgBZ-49$6o)6frKKeIU@0wNTK`4CpYz4bb)iXiwc06wc7zIq0GwMrfaRF-RQR z#dHFB5Za5I0b)b@My{Y`_R!wJ1`r$CR`wJCHP@i2@+D~5JTx_Bf>wz`<8BX#4Grvv z%nS^mYjQ!3ehy`WHi^B3vO#;gK=(<4)PMrx4^$j9#Kpt{(Fs>BJ3(w{y4eq9GlQltPC_{#gDykapz~wyLD`__dfZ6p744}lR1?Dg?fYO>NlnqJ>pzAn6hJuoU z15_N;jSU8|K@rTrzz_#zg90xV$_7b+?n4(6VgSv#F%&|@jX^CUC>s=gwV*@0K#D+D z&UQd0Kvy15g0ey9yv>BN!$2#Hplr~&gsY)!(4k5jp={6@37`vsKxTrr_knhKg4m$e z)p4jA&>R_Pw63Mzl?;kLFphK$_Aa^l?r8BFfcG=L)oCp5Ol*j$Q;mK z%yOuBFoQb-LoJj8I_anx$_5=#(+OpRj?n9evOyPdPld8UK|K@7?wP*+im7z{UJzG| zfdNzufG&L!0^Oa;z`$@BDh@he?G}_R!@$7s0Llg>JJ1m+AoZYP?GscSl=go>*`Q?i z56T8L-kI1L7(nVleiH?;L8nlIajWAU3EdvWMyg6)m96k05ae1_p*us5s~_kr*f&v_~wNy`F&qqzE+5p9z%! z1!O*y4GO$cC>s=bphG`F>f0F@7+Rp>y$lQtT~IbColbzVXM)y+K-u#d7#QY2*$WvM z7?wiWOFYA6S^9d{d)4chLz7s}oY8vcf|L1$;2hq51mq6x|d9ntp;#0C}H3=9k( zp=?m6>_3zZ3Q-OY1_mKX1_sa;U_K5|VJgYMU;|3FUIS&{U|?VXT|z1(Ss3>@Dj=fosste%I0EZ zVE6`Q3otS;{DHDX85tPZ>p3CuAwOp2I#_6A!!Ei=|nf7;-KtwAIb*Z>hcuIUIQBcg0k0vas-qO zN<-hF?46)J(0`#EP{Lv6VqgGS06J_3bgUVO4LVu@bXzEh4N4!PP&F?=D^H;8*9;5{ zicmJ_3_5iv`zHefgCUg742ljY8+7xEGl&hk$_;dTx+jPu&A=eV$iUzWWy>%!Fo2Fc z16{TaDkVWzxPsWAD9Zty3=Hd_;w20W44~c2AaT%fN4ucnpm9*pVQwIC z&*)1J^~t9 zfwIpsFfe?BvO%@>A1E7i03&FNG{{WQZJr$53=AMP=oCg!9|yz+MS%!tr!t5m$H>4S z1y!UB%5qRP=ooQrC|i$_fdRCQ8l>KWk%7SxDsIilz~BL8yD%~^_(9pALmWe(>{Lbu zhA1dI3lyzTc1}Gb149~=Q^Lr=kOO6xGcqs~LD{X03=9=eHs~VrIw%`-(kkevCy;}t zGcquALB;1Yg3bnl_;?8;1H&|^_;N-D2GIS^AoZIV85kCU*5ZIT+Zh=cRzMXUU}Rue z2W1~+WMJ3=WuInbU;u6S2C2Wu$iM))t^vfp!pOh?+WZY-KVW2FI0se#k&%Jn3Y7hs zk%8eBl>LK|fdO=b7fAhYMuvKZXHW?SCI*I&P&OMA1H%s}o1ck+;UAO@I^2?l2jVkZ zCI$vBDBFz*bXy!m+=q#QK@2J$#KgcL17*iDF)*k@*{Mtn40>R8Jp%*i02vc7hk*ff zJSONOT9E5zGchoDK*i@VF);W+*?XB77($@z156AIQBXGMVBrKP`zjLyLmHF~I#M$S z$_5>sSp;SOWMW{bsE2Yu$7a?+*`Q;vTcB(OW(Ee(ZR#KgfzHmH02Q}lW?+~GW!o|{ zFwB9nW0)Bj7D3sG%nS@Gplr~|nwz2QK4u1nT~K!YbY=#I15nNmW(J01Q1&rq28J_G z_IYLoh6_+O=+Mo_AU3ES2CDI(Y*3-}8OjFrg+K>-3&}GufZ8J*ybKH=HmKdp4`qW2 zC{bQe`7h7F0P3nrLnT0!iXxN^8Y@?avO(=QT__uL=(91D4QkVY_UMBw0B!9A9o`3G zM=&rj1c1~)JK$kZHpro%1O0>)85lr~d4?pY1gNJ6y4e^c0cvpOK*d3=-g*!l)XW7f z3Wc&k26aQ(pq?6N_(uqIiwgq-!*r-PsG~L;$_91#*MZm|2B`D|u|XG(gACdS;()HC z0k!p@Y*1Bw4$203;tG@vYGQ+ie}t477(hL~2T*ZP3-}q74Jz|N!#^N3pbq$Ns5q#p z#{{}aSebzVRLs|NKslg#nh(kb_1Z+BY|v3Ia!__90|SF5lnpB94WMk$od9M~Ht4Kw zD=2$50|SFEhz)Wv0|P?@lnwH5JcM1(01CQP2nXz&Y$zLa@LnO54XUZip=?m&q7ljl zRZcxnb^-$f1L&$+(7iFBBNG>c#G!*JphFjgR3V+S^-yt8hi5AvsQs_XzyKNsH~^IZ z1^a0z8`Rpl3T3M^FfiPPvOz)p5XuHQ^f{CbO1y8OY*4U&hO$A4^e2=JN~Hgx>&j6k731x$-T3aX^ zbOL1nhz)8eFfcGg@q^m`YM^Yuz>or!0QnwtoP>}X0|V&Xvr4FVGy?-e1C$MF&$mI@ zAcyuq*`U)pCqdbuBSvRH*&v6`gR()L_a#vFGEn;;biy;pGSK-vyFn75P8|aS!$Bw; zlvs{K*`Q7|=$b7d4M@x9GE^LNnB+Yu8>Iaylnp9BKsS?u)Pov0po>XCY*4!S3szIl z06xl%8FY)Y1_J}g2b@qgsPzK600N`|)CrM;ii7%ls!%rQuz3S08+5LtIg|}*)YwAV zphk)#lnv^Hgn-zfq7W1Xpqr9~G$AQ70V)A%hNnTvDb7D3sd9908lgGPGV zplnb#y9de!<(f%QHmJ)z1Ih*s+{}Zr>p>$oOQ0N3zit(j9nQeOumQ>jWv6XWHt4j` zJy15N3;>e(bf#S0l27}B6@(4b5XlwHlhz)%EY*K08_fP%3C#L;44042IQC>wN8RtuC3 zI?SpI$_8bp2~ak8kO9gD<@GsGHYfoug0exuz5>bywW>kqrGOj?IwP)r3seHso!$jy zgU%d10A(L!U|=`~WglZ;U^oM1p9Zzzp=?m92Hn05GW05_M+_AQ^{heHhJ(cKgPQPA zanR|(A0X^{2GDVF-yj@@cMJ>+f1qqoyPZjhfdQoX2WX@Y%Kpp1z`zG(GckfLz=Wt_ z2Q}fL;yj=xJd`a6>NP{zpivSXC|erTYX;re39014AN|?ZL>vPy%9u@+xTYAe7ApD*r(@ zIf0J71(j|+Pzg|l0lF_1Bn~QuXF$b4iE%NM4H|k`1!aSZc2QvTnBN`M^k1j+{W`(H!ZpqlU_lnpxn_B)gfs&+xwdJ5?= zFo61poWcwYAU3Ff$PZFyR(Ldfy|G};3$0#%1ok!81 zv0(ai9z}nqHE*ZC;8FBrRGDthtEfGFT~dU|^n2SU39wFh$G}iAy_;82nK5GedR|3! zMvm#%L6pbz|GbLoOgBDG*WgoBW2~6&&!?!)m@&PaPf?xe49oO_8D`?sxAQ6TgE$X% zbBRsA$EPR&=dkfZI16IM#HRcG6&7H0m~PLns6KrX^E!#?b^M9~j55>v`4!a}RiN& zkAtW!)87j#sx!@CpDrPysKyvF-ChLbAdcx7Anu;&{UVC$j5*V{gQ$e*_d!(8baqii zbw-it`l29Tb5D;DRa9eoAvOJhh@#l^X`+e(tO~r03=Pv)iz+HJ&Y6B5q-+7-^dF*% zYK$+Y%Zn+hGj#|~_YhN5W4tguUrbS*(P8>@5S251KZpvM{v4zxLVo&zuX1A3)x;GA zm~!N&FW^)Zo9-vBD8N`SJziWU;FQKT;#G)`=VQZAw^gani0j4by(-%l6sW>0sPR8(eK6Ei(SQc;cRf7SE}AiAbx z`VJ6%zk2!u5dENRI){{^8td^I1_p!a#!`yPtQnPz3@4^XgP7m@85nw|H%lohGd1s; z?r?xhZ2CSaMFGZr)6YvOsxy7tHT}SUIkD+{(ux9%2GixG71bHnO?L-TF4Oa+71i0i z&M`35uuo5L&{E<&ag~7~fQx~lW%_@95qUO=2Mi3FY|{%q8H-GlQ50l1HMBIgFf*GT z(5)rDU0+6#Ya&c&yTe+=M*{WCb6FV}IF&)SRY<;I1`Tbh+~HziVEfF^z`&^rVluFS zI((dJAT|q|KO+MJr}`r<&_s=)7y|>R#x>CCnru-b3=Eu_AhrNo7B2$>rxvI_5@CBQ z&A`B^4Pr~MfhI>dbwESIGHjqTmN<2{f|~Gh3_L8!Tnr36ED>A`49pM285lVAKmsx> zpfZbVE2A{ecHMo7%8aaB_t}DZriboV)Y~q1K(SSr=>^yJrI!_pnE65H@;OL>250%C zL85Bc6|MP^&h(Xku2?WV^s%Mrboq!CtkeIVP~q6V_PHXXqiQ5*t{B=aNkL*4AhBzv zzc1kv=beHiv|xJuIR$aX9n;sJQxLDefF$!0i49uF#t1c>9W<8@W%DAjg^}2jNNjl| zwki@EH2eiK(-0yK3RwmQa|j32Tw}0BVuOztgjx)`=NP8hA4yFp5*u_I0!&RJl6d;` z{TqzMLyM7wDv{WrT}&`-tw`eCNbHG7?CD7CxzqJmg^1U$L=sw$#NLX;-i^dQh{Ohs zdBLndizI#-iG34^eIJSa6v778{R|ARAslcpg2umKhJHs9|BJ+C1}!jv1~2&FL@1jd zNn8|(t%=0eM`D}ufOc6zHCrP|I3ls#k=VZ5cWW!f8NhS2LX1);7vt9LtJ0Lz85!?y zzm%@@I2I-gDFQAZRZ8K?0{3-56H$zFUNJK;i2ehu!O&dI#K6E9#31qovNT~yLiSqf4Hak)J!%;ihLh6OQ*fQDEYw@lw~QAxyh3rtWDw~5rpqj$ipqd^aYl3i~njTEA25I^Y zav^9yi*e3Yn5N&znjjpgrr*=QUQ#kJ0*#JC=3N=*fUd5W0lANl5u!~N>_8|lSQhL; zzUkqYl?;tQ4QU1j&@c$&oT=;#3}AfN95y0mW2^oC_%CEvLI)Q3^ByRTnT#CBW${Hknpb08)Sg%3Rw`RKkH6;Vaz0(`6DT(m!MUmS( zeepFV1EX_bQ$X{}P#)CwbJJO`EBP2bN75J14b}G?MIV$0)%SdQ z^K~U3M#kwEt}BVEF*1S9L}v_QkOuWK7zMzmxPyjE8RzWdW?+y7-89T7FrE8`k}{*> zbp0DjqKt|lp49aC8%ms-MogfJ9h9;`!?TQYTzME66jRGe7#NM1Ktl_l86%kj21cXl z6K^ObGiC8i{}>Q%v0d+`(rY$G&FP5(&Z3N#5bDHq$MalbOwSmm-+!be&G>z~e{iDM z^a&4?EE)T!pL(Da#I%$VtaADta}&<#83N9Hj7O$>KUC6Sd;q4Helvo#GW9WmX~qT9 zuRl~WVcb5Q=aG^X`*|itW)@Di>GK<8#2BAUPkE%I#Mm|c;3Fj&#@P^R4TRbYrdZE0 zGcq$x_kXCQ!t|VZy3a!;_37Ft(xDblnBMqUNrrJDgxa)y-eaZv(a=KIe7b_w1_>rJ zv*~(IVl^2LO@HvoSZez8U$aH0KiI>_KfNk%hQ#z|S(Xyh%^Z{yrt`4|aZF$5pq#T^ z&r$gwtAN)+28Kokh6fxBHGlRp@mNjwa9389Xk=hm!2uD5%gcUXV3=*$veq&|Sh63s^LZ+pFvGIR}c_~XV)%>1*!%JC(-^`IAOo;I!1H(ZE zhE0oFxAS@{Z)KXE_t{ipy51QjiRpZor6s1vU6huXuH_pfG2O~f*$HzG5y_%Ib73y{FS}L zzJo5g03|gB7DmuIAs#0t1_sUP2kvl-*I#63U|_ldnpI_CVZXr7z`(-9zD}5dfrXK+ zNtl6wc>zBI1G5llFpY(gW2+!Yo>hg9fq}V*je&t#3^Xjq{Emr%fmsq%6EhzcWME*H z0vpG{D$C8lz{0`q$jZRL!omugkY{0GuNGinU}a%pVQ&#&U|`c?VdMZ6HO!#4EQ=`U zoOWi=Qc@O0&|Ew70|5pG79G%%3+AoUa{`o=>aBPg7+8xzQ`#(yOp+W749quJ7#P^f zK*O@kpEwv8*rh;{%%H&wcIjuJg~p=X3=BN%@==To3_OY=3=HgwoS>}Fo1DbJt|ZUM zz`()-I@F(C8Ds_r12d?>$gTn!Ibr?-x-2~cB+d*vr zqQET71B!NG(0C{-188`KflCc!1hXY00|U468&FVg1WorTaI3swVqoAo$H&0HtqNi? z@Yo43FmS7Z*epDExEUC@)ju&YFmUh~a56A(YfJ+4H2ekj zDYrI=Ex`i{C2pN+M$ok9Q62^cZe5UfVYp1GDf976t|u;b?va23BFvA}KauP#cXM8Y(=Yks!@- zptXd;ji6PrPzm0K3Xp^!=vD$@El@2joCR8L!o+vx#$O!W?Gcd>sgZdD1!oOG<803XP&29zZd_D$-dPU(` zf(#5w!o5Na49dcN!VC;5!k~LTRfTu4F)*kJgBDJz3xmeCHG~(7FfeEegI1(#34^*^ z+QOigvyO1G2m^zzFlYcykAa;9l&+!Sb)W4&D7-*9l|lG5F9QRka0EEKK$Eb{!Y1qt z^$aY+*F``P`Gp5G?gvij{H)OA&%(gGo}Gb#Pgx4olAXiIz@W# znZd`!H%F0;fq^$8rHFxVE+{w|ct9(+`R0Lqz`?)_TE@mVAGA0Tl3n<=B(pIv2={@r z%LGu07Z&6JCCf62= z4o?H@ETC1r%-tX*Mxd)G#0(huO>eL>Fz|xzXyrEpF&TIS`574a&EK&zFzny~O`-5x zfL!#92Q-DkZ~2d%f#C&D2`d8wzZIxx`oII~+Vj_2gJSFpj|51wEy&^@JjXa082If# z>_6iFK>5)g#AaX=&*Nrb;CBFVSQy1YD<=6JK^zW7@h2b|C(sg79!7D{QWky}5e^0h z4My=NAXj@yaWF9GFf#DJ0J#F@GhI;m_Z8$KP|5~55L~+JGVp^ILV_@u&&a^e0$L-> z&H_q?>@1+%!F(GOoIVQd3=GVmxkUjfGY$p@2@sQeKQjXZkAO@L2Ll6dc4{SqfGlXL zg8^JD3&?@84GYgc76t|Z`5aLC=U`xGDdJ#YkkkfMz97v43f7={m!%veFinJkK|mW+ z?=l}1VPFvS2dx}p?gJG{ijzSKo`aV5du##g0A10}d6a{JfeS=1u(N>DF(iF3hJltD z3SR}?>nFSjToiC|F)-9K2_F#xCAP23ptAE08|VUf<`1CsGl`uOR71!xF)&DJg38*n zpkM+udqC6vjB~bfGB8M+fJ{0I&hZQk3^Jgr+ZfM-)G^8yf(*F;vXwDJjtj)O2ugmS zDLna12F6RE_KlY~0|SEsXioE!7z2YMXzK2-7z4u!&glm?E>fSa5UDH}0UlOT0ktp~ zK=YA|b3i#s^%clPDvTh1g4XJ)8G?2`s4;?U08NvrgQ~?aP?iJNya+2mv%w%MthlB( z7K({Z7ud9jce<{QJ=gTDk;;NmAT8in7hsSC*`oqJmVPbRcF@cylx-MA-e4D@#unnMPER1t}xnVXO z0owptI|{Mk7}y3SM&vL9P5gp9BJS>(+|4Xi%l1cRu;F>%J9tH*l&>A6AaRvrWka7oz44Ao49)gq0Jde!bAI|peS5L#ak0u`@{f4I5e2$lSOGM_2+o|KX>5=}c|J(a zSrMx&S?>+;GDszZ%5hMejuD(tK*7N{CxwrJ!2skEMkY|kbZ25<&;YF+Vq|0jNiha9 zu(M?GF)&DiN@1M|pc)XgVi&y5gmDh2PEZ6b9Saj@U|7xvb`r=RAVxH!ff8d3^K^$e zWzPC|aR!Ec$np$|plQ`Came}{P&#&0VvGT4iDNWi0PT!r00r51h#ru5G{j&AMbNUR zQgH?bK7NojQBYw8(ENWR$WtnhK!GoW_!$@=v1trRutAC-?V$Xz8saKOBjh|1#h?iq zD?*M6onN5D3Yr-QFD77|16mFu4O%K++_Vj8r!=$QZmgBmz7`-3GFnHd;Br&Kb4 zTyO{B0??`zki`r}pq&C=p%R7+3ZUgtV26NKg8vm`nBG({;_R*C>k{qGQGU@#Q|#{^R;159BY0|UchaRvq- zhzvC0DuQC=oHzqR0$3PSurersrnNu;q}U1C{3OP}us{eBTUJTRGW9pXSvr~tqzYX4 zf;m3OrT~Q$oZgJn{kf2Fav`s_#&2ka7YF*Gcahq=VV}DEMx+e zpG*@2K!XJgAm2+0LtGCk<)cBRydtOqcp}cgU?yA-l7ePOP#rKafI$95wxd>an224SUfg^ZHHD#FN9I!svR6x#h|!?RZ6=cZb8HqGgs^Mz+`2~ zdQh;P1It2!4YbDZJ*W%-hYHAOaHt3|NP=uP2BiST8DKYo*1t2(St!E5pb9STXE1>Z z?>1%z2DKlcp3f{MP~&GgGXsN3Ca8Bk8_Y+`f#6a(ce>)AOtIm3TsE?gEP`yW(EdBP+kF9&L|4YWo=+d zaTW#!MbJVKP%ir}0*ZtvP(BB(9R%kxM3n)GZ&2}IAqr7tsKgk}$~?WdP>gf>)f8pn z`nSRi45pwt8gMlZY30a(_R8)ChYnhGLnnkNdsy;u^o9^71z4>Y>Nv<)NTug8VMp`(F7{&Z9#PxRG<*lu(3fB zSOh8`j1)LvcJZ&|sApjC5QFxfSQ#up)jXp&=sq2Y8Il%a3=H6Yb_rY+I3Y1HSa5;v zrpsy-gPA57C&s{FkpS{f$!s*yKcEn;+lVH5o(Z&bzT-HmFh8gneg|e9GlRu`P+dC} zbngz-QD?*$7%W|w85lsA%f}M5)Ek7k609}}Fff2HZ$7)_Uq%K75Ej<71oiqrm?z3| zE*Ap>2(!CcYKt(`GiZZ4E%uhR{0s~rETm}}&B4F`!Xi=DpiAFC*b=mK6@-P9EkUh0 z5Ed}AVgT(*6JcQBy~S?XD8#@3!lGuDYOD+lAS{w<30gS>!a}N+B`gdKAS@7I`G%E& z0fgCgoh;WfF))CzK(u8oI|Bm<3#nTkVP{|fVSx}!T~-DL5N5Zulw@IG0AYa~OVFA- z5N5XrO%5nb4=_uY->#FPe2!^)ZE>$6qxE*(Y-LAg0Z^F=TIR~g5CvN0IAi)dOJ>>W zPm;}qrmxLY{wxSunFvadp!O(;mYlvZUs;_KRCa^7;?pmhW{FS#k*_SlXfR!{Kslad z9mebnxfmFj7!FKNOxBE@zF+|t%k;l@mDIMs7t#=7oW4LrW5@If&ow_xPbg9TppsM) zpOTtZte3&S$-q#OQIwjPqL%?0zDO#`jZZAd)XQLCpWaofte~8cSey}`n^*vmE>6uY z$SBgwU|?ln$So~NtpEv6uZ;$VB`d)f4Jmc#_4m*WTcs1Fiv;$T`4N@j**d>k&}&qkrPxY zz?Izxxubx+kp(O}{lG&dvFSNkW?a*ER4DWCGjobFfb8G^libtqS15}yO=6j@U^rKl zanW?%N@W?=%`A+}tkcg`ic2v4Wt`s7WG^y(eTO8+^sGu{AI6i@6_%)qPCrwr?8kJ0 zW%|Xhg(A}ps+2i+xfwtf@`K&3IDHE?tgk7dXU)--8_k@)yWYAm8y$pH-zS z!_>?=Juy#LVfu|KWnrcntRTz8rU^Q;OlPlF4rY8m-Eqrg(dh-%%ASn7rzZ$Fi!q*@ zez96vZn{E^IOp^R4q<`q8a2u?jMJHfjYX$Fp1MqEdRVP;h=5awV|;LAaJ)x&d~k?= zK*02m4dT+%1=>V}rb{hswwNwmr+i`i|2kz3M($uw_jsp}(0IR4-|5N?%4UL~dz@Wd z!{UQO9795b<3j_cM>Hr~io(>nyZX5XIr_vq`ZxypPG8!fTq&HJn3I#A%#dH48K0Pw zSd<%IoH{+Af4af+oJM5@KA1)iXU}-w;OQH6cqOMl=&`n$e!o%Ke7fFN7wzf$FRO@8 z|FBk)ce;auh4u7>YprC=c-Jw-kN)B1rH`tv4 zVI25w?1WZjjqOufm1i+c=hqeUn%>r-{Aqf3r*hnML0ch_?R;IzF^uq_@%M8L_V5pZ zIySRgS%wwtgz3%Q%4??!rLJ_F9_?5qG~K{suFUowJ<5NWrq4}YB|QCLzw)B#%gw@M zrYkHIWf3ZfFG(y)Pc4Zr$w_4h_4Es|*gkE7vN+>(g~}BY(+etBa7=$N$692%!09zC z)7P$);h26dV}Zc*0FcD|1=BgEzYlcdm@Ya=xn#QjE;F9#4m?p3)8}6<=b0Wb*IHuw zK2H;#={2$}Jk#Uv3h+!9II~7#`UGhfp6L@V8}Ur9N%rNL-oIaxXL@{y8_#qBc}||` z8y4I1Os@~%<(Y19Mone9MLoC2^aGYGJkuYnUM;cx?_^~W#_2X;bt2ORZmkiRZZO|k zWx4}MpMnMp$8?7)Mgr6KeTm?iF8{4uV)}-ne39u3Y{LYm3#^?fG5zjT<%;PIC98O* z&$Y_rm>ySREHFJmpOa_0K_H97^bNnvRHg?ga@tJ)J5BipFQ^Fw+Ij;jPtB$mYO;t= z&p#z8GM#sZvcU8YDl8(?8@iNarZ?(ES%TTZ#AJH?LS?b-A`6v|FixLm%p*6wXP$V#c8|r%&p@O7kY(mV42}#b)6?5c z)ipt7I_TE%3E+kns5pmQ=)4-r2aOE~F}O19m>#bjC7*Z|Dh%3BBE;a%@Dj=g^|gc; zJQ@B&`JkmgLJZyvyx_7CVJxJh$-n?=c7m=IS4NXJ0$+YE30g4@x(ysO9|h733K}5> ze}=5-yJxD)PuB~y5STuVw+(XPx#3QzArM0Y8O}iYpk5~E^6>{yKBzkix_tb@^!#m( z;*y}g8|X@L(0m5S5>O9Hh#{Imak}`n0Qu?nX4?ob`cJ?8H(j1FcY6Ph)$;Wn;K4Tr z@bM9#8^o7D`5@gO%eF%Kpf zXqJH?l|cf9pYF_H2o(U0FbXmhF*u;`3mHOC_yr806JtP@L)7Opl(9_jS);5YXklW) z5FejbnwK0OuVQIoX+Hhr8f6O2CFpH(sagK3zUKU3U74b;=fyvh4LbWy{H;(F)Te)+;MbZ~7dmIQ_(WWz)%V z(R}RCqIG(~9A&ZTIkn0h+r2j^YcNmW?We#qo!eiSXL|R286HNH=>_xE#ivWlv`I|Q z-l{AyoqvmR4rAf;gssYQ(`Ri_7Gx}*{((nOeERNf$~@C&dnxctuV&ZeVJw~gCqzSe zdiNt4p6Rn&>UgG~KI6#4SPjyr%nLf2gMk4Y)QpAGb|_m<_x@eX!wXvH%>dbT!&pE4 z!F?I=>DB*=d8T`_X9!PM+oo(f{q?0Jp6S^K19+x$Z&H?+-n~uPX8QRp$~@Cw7ciWgF({MthV+lz70Y2yvM?XoWlIKs-=N1+lp^rZ?Z?JRqh%^4XBr`zmP_Nxbt zeTaB6fZM;IN1sFMn^0>qYqCUg)Rw7&_|JK_dyjtAKd!k!Eapl&oM2)Lnlt%F*k zAoZY8ZxEXsG<46vzyMli01^jvgFtNVA_h<%WB{Ed!T^#0_3=QbJ#d4v9%$Dd)B?~s zKA@f_clGp!{mOEnxhVz_&?*B41_myW1EHw}6lNk)ki}0R2Z7Xp0tdwAE}Z^gzw&0r z`sq^+C|ffYPQP$KS(&kJ`j-RBry1*~A2oe9*KXMEl`!9|uD^Fj|yOw9V_R#?0 z=~DjlctCN&z}PVT!!=Lw>DD2cJdAzY6OJo~vFEaa#uq^$0!oBPY|w!kj8JjVIz$*- z8%Yglogqxz4@o>4iJgYTE}X9aDn?wg9Z6^s5_|6S;Pc9x>l;9$0#KWKkl3K%A((AT zki<72vG*XcPav_cAhAI;G|U{(ws9C+05o1<1D+LNU=V|Fz|ks$#8yILYap@pkl5hC zET{)STgzb<_#&wZMq;NSv2&O~Cz3%m7a>VhBC%VL*r0(hm<4N*#5W_ccOtPtlcX^9 zN0G!&!`PrA{vwP6Ivp8_4H^Z5X?~0(4r*J##NQ){gC<5{;=hr^89|*=s3+Nx*r25_ zqA(4@ND`9MXJ1l|4+WiM29x$jk`6^;M|7*v@pSpi%Hp2&NJ8K-FsSpo zk;Eq=v8N-k=OVEePxrs9EMC7JNoXq)dp8pMDiZrP68j+%`#BQ(EfV`P68k3-TL3g9 z3QNTL5DqvIdm^zDkl1NR>>MO^F%r8Di49)S1Pz;YNa7cf*mqfx5;5qoFj$<4vN15g z*h)xjOC&aUtt!+4S0r(7Bz7PYI~<7}3uA*4aRH3Oz`#(3#I8YNHzBb*kl6i5>{&?c zJxJ_BNNmtyUoelIV*|}fLVa)*NzrE{wisvt5~{`wiS2~M_CsPvA+ght*hNU}It05O ze25mzMbi-y3`>yM8L78bhYdk&P&fY?y+Zy+{k4wHd_;Wvm4HIxN3x({Vbf!I(-D{ z8^Nw;*a+f4T?#r=i4n>^j3j;%#D;3V3SvVo0MDm@n&qH#`nVVvgrV%$NNPaGB{4!B z@f%5;4K>0SbRmGZVytY8F9aYk}BM2N@%=ZIIYbAU0Gl=qMyusDQV8fjTjuL(#bz z7(n~bK*f9tNIld8Mc_?cP({@s2`C%9kqc_^ERZ;qy%>oN-pvJ7zY`=5H57DG5hJKw z%fP^J1Y|LkeI7~8T__vu|K}hMsM*iJ!0-mdh8pw>#D;3-2CX20Izk%6hN@Qqv7zEx zAU0HeB8Uw&CkMm^HL@8P7(h!&g`wH3=9m`Aam-W95;{zR0HS` zA6SY79pVE^P_ZC2p#BE~14AN6Gn5TFw+E)C1*8V*h)xh2YUUIW8!A2%#D?lM1TU3? za&~|upmBK+iG2!*ePMcjUyX7i=tvz{PUQy8Z9uhwPSJshgBA}lLX9>Ase!u10>lOl z5Hc_@*zhqh2t(O{AaST0!>04UND;3u0||kKBpDbOsz6Gi>{cZ4X&^S}v=#;ih7}+- zRLxEh8yc73=|HIX9gsMb{RzYdby^u17=D1*P;u~7ODVLU!4H~ufl5e%*ie5cfY_j( zI0FNN3P0jTMoW-5)F1XBHdMVAhz%M)Wnf_N1F46ylR@H8^_d_xRDA(IsCELaxnN*m zC;@4JvOx=SU=iL6(f}1-gTw}{Ifkh@3=#*ObHl*Ea2#X~lzj;#4z=tKhz)hbLl7Gz z4k{hqfH+Wzk03Tw^DiW}0BCU{GzCZ^v6Yb6dLTAbFX(g_*ez{dNaCQS?J)5e0S1P8 z7$*;;2x>t&61xG3-40@dT+P71&|`W%A%qQzHwK1k5C=4>1UktG#D;3_2CNF3_WjUYBuFX)sMSe^!*k^)nI5u^s1!R~_CP;)*Cg3>LN13J+JrkNYG zf&(m z`2=XaF6hV;a}Wor$OFWN8tM;XgGS*P7#Meh?e#2oVq)s#jhFln9^_Do7HBAU4z>Dx zL-m#;u{%L*sNP91HYgL!hH*fro`cv>*R2Gxp~up#6=7fyhO&2n#Gz^qgV<0HoB*+* zYR*8_gH{?{1&Kq|KLD|z>Ys`*Fyt{pHGr2yLD@{A3=A-FZX~uMhz<3D782VSiERmD zL(OqQVh4iQHq#Ss6^YfuE@?{#i-8gV149`SyAi|&t&ako>nF;E8Xz{*91{>5THAYq*ii9M5IYtW=L`%Cr63Meq7lRfovX{hz|ak1 zL&c|q*r4S(pj*p9Y^eBJ5F2!OE9m|;5F09f7{mshM8&|sa2LdeioXQ0L5Bu1Ffe?s z2XUYh-;vn=kl0M(2;Xxev3Zf$qDX8>B(?$)TLp=&4P{Rkd!{T+9U;YjRgBz6K4I|YfI4PiqfAs@m4xq+b!iCu-nZbD+WA+dXr*b|Z1GmzMG zkl2fn*vrL1y%uO3tedX?Tv=RlCzAYLB=(W%@z0gTqs}7AmhEzqJ{8q^Jk z7GzZ*HfUN8bQv^=4K0vByL5%1q4gMag#>8(Fz84%C>sj*GkEKvHXq~_YC>!L6ZBRDI5qqF)kRy&k*;b&PprGMj&{ZO!d9xc( z3D9{RpyN0|;-CXZKwAfepa~GPmlMPWS;h*w)c|ye5NNOj$_B-nAe0Rnj*^D5K|WT4 zvO)P!7tF3_U;wRXHw1GSK-YjVxPaKu6z&gYgDeY!vOzwJg0ewA%LTDPf}qp#p=^-) zdMF!|T)?+OfVQiGPQ?d_LvzX;up-b#bOr{71yBi4ZrKcCL$lCMC>vxb_?`&Rrbz|{ zh6^BZkYWY~2GFKI(9QyoWzRw4&};_28$uYg$CQBqd*4D zc>*-N47%(BP`44w=O3@%V{Q2OwOvO!a%K~Q!f zXpR-i2Cd|b0qukZSq4hg;JY56WdQiD2T_QtD?u7W85lqz)&pWg%Z5o%HYikPK-r)P z{&`R~sCWPkS%a!_&@sHLpyHrO{tZyJ3#c!>1IH3Z1f6&f3U<(7IfxB9UegJx1{4JzP&OzB`9ayBTmu?V2dM{b8i|66 zgQlB7TYN#{plGVkhDv~r)XaynL7gGc9xfqh_puiwE(7rmXapW44)XCVs5mIt!S_4J zFff1$%4JY-PzksO$_61!*&s)phq6KG<1&;D zS}^bo#DYkkC@o> zd&^V=ST7WU&KKMdQhCaAwZwG29aUh1ehd>rmq2sJmN{0m_Bc_h5*xqqUnD)Rn(Y77^gP`D~U~icX@#T>zpD6h85HO zxm1*=n_XTYF+EE`PJqd!c={YJ6}9PVHR%%5<)-NfFa;D(e*+Q`a;ue??)QmLfHkI= zfk9%rJ-3STbgN_R64U({R|+td6i@HrR#9W>V4SYN(Jel`eyavQ(~simcR+$G7^g2- zq9``~oVJz#Q$)#h9Uc`mrZ0@siX+9R_kZT&XR;}sUc;lJHvQ1IwGz{J@u&zewUkaj z15%~IG+jYgTx>cQuZjTEjne5dyeewbKk=wYOy}FKA;9EPHa&+|MUAO|X}ZE*F0tuc z>H-2x8_K5d0ST5s1%H9`?kStj!>6LgRKYYId?u(DpNasCBLrGT0V+#C(G1ElFh#TY zR0J3+rmyBxQD@vU{W715I@5`=>3=}xSg=hG;8PTv&ZiqMz*JK{-G^UAjj4xidH@f< z*mOIQMFLDV71QT{1aGiSKLB#uEq)aNrZW}O-+%-a*r#t`5)qrOC7>d}6jM3fMnFZ4 zDTIA`g1x%fbSYD10oE&(3=9d=`vp{#nQGXlU*M1sn|?|_MPRxf>qd_0j|5Z{n5M8# zpRiv;e7gLaGJaN{Dh39R>H2~y%1j&BryCs55Su>FB2R#6O4allK@~NoBka=`fKJoo zGE){{T2M9p3`p<}`*a1zJhACqLMj4GYpSNp2&t$s#c)gmDZDpNM}X-}_4FK&SP94U z3H6O)(^mV|u~?NyY2-Xb3P}shJ)F z68yq3U4chYZ2Bx=6#>=D!ApO!>92%U1ej!Mr~eUF0iA5BETW>$ zlv6j|M?^)9(PVlth?`MAeU1nymvBu3g}j%pfB=(3?vsn8}+hX-_5E-3LZFferR zOmk2do6aS!BEU3*XS%{l6)_=DYYns<8M^wHVGYmp10Jd3)1$>z_?c{4rss&Os4?x~ znI@qqHhmRH;{`BV$NWQgEx>f3W%?XR6*V@{iS)n4r=O5iQDR%s#lWyeYWfFB6(!cm>I@9l z)5WD!lm*XeF)(O>76?KOVw`?nuv(lcWa;!2DHS!QA9|oeSjB`u?IVyXP}>Kja?a}M zTR`$R^rtU4tRXhtt=&n0iDBJz7HJhV!4(D!3`?Qi2#{jN>GA?A#aSaZfU-!qw2CsT zuQdY$@AP_U6=kNV0LUq=yQEbFn5G6ypP<7dCIo8zfFcW|8-&jWO#dRSqQ2``LV)cQbG$ICSKe8-lW?*1~oN&d#3O?b9 zgZ(w=&_-AmzO#%B46J;hgCg1Z zmVz$*;sf1F!@&pIKhMec9dwTkA86+xH{VpySt5MX7#SFN`9N!!`S=1E0~i?i`9RC$ z1o-qB85jilKvxC{@qrqM!hE1R$3*x*7rlt`2{SV=i1C>-Gcbtr9bp13)#kqmT0^LH z8kAr_x1oUg2XoS=t1GK0ixz`cF@``}58wsDjC0mZk5^VP5aj|bdn*Tp0Z1d{5Du~F zOO#by6F_TV8LJneHLSkpB zWn^IB-vV;NHjsXh(RV<+IiL$l#X!v)#%&L$d#b3Y)q8=Qy%Ti6A86ycFerW)cY)mV zl8J#q7!*YiE@(BQxFTpAX*cL%HKvIHpo32tKx^J4&M`1BfEKw)GDa~?3;@L%D6aWI z$1^bgggL+p>;PHN=`02D#SDx;br=~K(x<;uQ4taYujLbDgee7eAsOd{O&3#DQRY|z zN@*vVGN(JLs)!pkf=*Ba`G6k>U74l zewNe!e-RU!z9CPEbNfA26<0QP(7X^61N(HxEM3SRzwLkTD)})^*V9vR!P^P8D;TNFVw_&<7SA*Nw6RK+2xvc7uxm(sK#*sc zqjO|Dcwdu?iAuaUx(sv!)pSAKO!4hIO;oOO3WA!oAP<2eNQgm*!EgHg?LG2>pw=r$ z7!+(m3}OsT)6d(fID_qQkx~oQ%#B^_a6+I?K#px56G{vW{zOYz$`!ahK8@B0Q zN4$8pzjIYlV6+A8YJts!Yl7k$)B#~&U@$;pTY=cDAln!iK-paw$_}1>+g(g11FEA4 zqzcpl11*>XB@QUN8zc@|vkV$ALSipRVuN;!!d$T(Bo1Bf1KPDL3}v62-v3oie0mn& zJf7)NUP?T2?4Y~>wOkOyhFT&HVv9@{*j*$hB@Al0F)%QIvLYjt?GBOOFhN$V9=2vE z0W1dbVit%EH4D6M7Rm-~sbPe&dqHZTc7v{Mf{D*T5?=;lL)EVav7zcgTW_H1(;0Rl zNr3j?z!o%t*U&$uU8$ zItGb@(j@3sVo-YnbW#V14KfjwCP8daoH{_&^D!_mfUX|{iGv1Oe4yf>E;Fc@2Z@9F zzY!4edIr!qWE_M8KFT)*$_9;vWtT&_GKQlnttQ+n{XF zpvz1U8{}dJ28Q`iHpnwenLzg)u`z%)12ce*BLbIe4K!bG;p={7*i04o?X#Ddnlx+nXcK!(EfCfWZK(|dp zV+d65fQFYr4hOAl2eCnp11)R^u|cT>w6Gn-2JK}7Eo=v|K?5zIssO|W1+@{>Owbk= z(A{VtanL{`oD2-0Y9D+-I41+cT+jtA zpeYAV1_n?=2Yf#`Cj$fMJV5aM;G7H$phGyNKx@`P7J#mjQGjXyT_2+cWrI!v)q%1> zx3q$e`Ua^7T_po5LWH124`^9Ehz*L4V32xl1_n^b$3fYkhD|Dz4GPh0C|eSgGQk&z zb3=})E`>^1O#dHit_-@4m0=c0h=+jzl+c$#*`Or@pat?mJPZt=+lN5yI}jT*7_kfEvZ%Yr=UT7f*q&2Ipa50L9z~76v5-kfDj7au%u? zw0Z(Ofy2YVkP9lDwx14HX=h=Sm>wLX;?Jp~1la|qKmB~Omi+WnF)9lfJ*H>Js`xXm zn7%t!#h>Yq(sZ6U6+gy+>Ctg2{){ElSA!^)>Ayi#$8_&_6@SJZ(`SPyo9VCPRkRsb zO&3p4QD%Lk#=tOTx_yF*GGo&8 zs|1s=>GX?h^F)}9O%10fg0>eMn;J}4yrwEFVQgw(#GqG{pORRTs0ZIaYHTt+&})ha zi?NBN;dI3X{Li-^XjUm@_5$${yG)HuEX|R4Ad?U#m>O6h%NZIY^NftQ*SD)Mslokb zz$PZnWNtD2q4*+ArhtU$XV$7*0-XRYFn!)S6%`PRh0$aC>vbwtOw)Test9f`+Nfg7 zG~K$&QfT_a%_^5An-2YKXei;C*>1_+$iSfF!6N&ik%6I!gJF6gTY~EJk5^UXr*m#q zc{zREN;Qe;>+)SCrq_W8xl>9K(`Q}JFqp1a=*q=xz!1B=f18RUBjeWX7q_dZF&gEv zf(i!?W>AB<7s3YZDrTDoVS~DaZ1!v*HQX$q(Qvl=(=~Uh*wn9P0*P@nb2Bio?+3Ga z4A>7cNis7q@MabQ!=s{*pGlY3Je^dxfmGOk1~OJ5FDTr zDcF^nlR-!9rn56Jup2VxgV>-9&+f?F4r1qldU_tr)u8_8^d~!2{_>k}GcbsPDm;5` z28LFa>5Y3;M5j+sGv^Z#0oC1LY0y*-NO})c+Ge+kFhnD${{WKt43#O~ts=|?)&pAY zVLyGsZWUc_5MLa0UA;Xw#Q3|rRZ1bEpbipDv}lh?6Q-!hUX?hAiJ-#IetOMb6GLYRt(;N1xh)qAcS4D!+Yx=XjD*4FjX@#fE(p~7uu&VdGK!t$E~sO~0*X;-@EKf?4fddli*Zf>=urIKp!LVAA%+FXnSs{e zu4YVOg|c`1x*89_Q3LuFQiT(AzJH%z7o)a+Z&m;#!o z50`Q0iC|!0+yLe>O$2omL2U-_!dbSXhuQ~bRH7pTVJp`&sdzkjJ*Vmgesz4w;N494jK{81{?6;_DyOxMcN=b4^+N97OvR1F?R z_35#pEc(+o)N{LR|9V&DBr}VJxtY=QgI-fam`p6U-*~7piG@*UdiFDwenzM1zn`hd z3R#$&SR!f*kn+inv5MQhpR3$qX0)At;kAm~^mFlHJlp$TtN5^j);BPSfEqiXy|tiv z(RRDfM-?^3deBs>2x!QQ0dl7=hz%Op0i_BM8`O;gb!|XwP?H%n%L!tG@;RuF1X>IU z>QR82y&yIy5rNjffYg8zG>FX&(!{{P02*HaiG$`7L2PbQhV36esU-5&gXUrxLAi{9 zf#DV?|ALGL-8jg>z#t4|zXXXx)qF={Gl4P`bYdBF)-B8&Q1cSDc1Ikf2C7#TiERvF zgL*Fv42}>EDD^RfBeCN^Y|uP90|P@6Xm=BooeL6&8d?EjLmg2IVnfB-L2OW`hJk^h z2gHWzor=U>4w^J(1a&AF7#KEyB%th_NNmvDDkIdOdmwSB1y4b2P$V)iFuVjg4$A%l z5{If`1}!*(vcUxes9*;jcL3T;1Y(2yFNvf`1;mE>MhnD-Y6eZAGJ^V&3=9mQZB@ch zwgZwHZx9=*HxR^z>IL0o02_D!O`8gXQU`RmRXr@uN|7|wgV@lu8K7(KVVc3)t)QCc zgVaDn3v`=3EEK`Jt)SxI-BwU@?t;`q9rP8!HevwZqy?1#-<}0!tAJM7LD>c%HmCyt z^8NJqqZ`E;9j5z4Tud5=at);IaH4`)}IG;B6uNF*^fYMsCh4-Y*6p%9h42qv|pfXknz8u zY_M}d%cJ-h7(lHb@Cq_M$TM79O4Vq(Jx434t!^04;lkii6Z_0kNTpXBU(W5(nKs09rT% zvimet98|2Ghq6J%7^q-i1f6?5U3=N2{O#wsRb!c^|F#uPn7)6PlE-xBb9O4zSASPf znf{tnU4>C(x&yzeJEPcihubFN)0uy7be{f>UsZ*3iWLLH8PMXo>HdEv%1^fvP}Sf} zu!fwP;y?X8yQ2K`E|Az9xR^bMqWtt*0;(EJH>{_#2&(#Vy4XOv`2N%7C0*sG_o>B8 zOtDiYJ}ZcY&3Isp;{*~l>VT$%&~`LQAKU3IAjxNUCP*;7Vw`q&g4*;~!m0w(K>|XcMhd8% z0t$VQQ5KBT1L9T1rdx@q3b2CiTWy-|FQTfuJo+7HM#&m;adcZ9+ zvFY=o{REgC9Hwsp37W7%CT~H@0eB@G85lrkOn`=o)Ti6~ib^wWUa3*lp~y{PXWm{K;)`?O&4=76ksZFo^B!m@-N%;1B@bKLjOQ5QP8v4RMvtFf?|8^=?iY= zi%ri0DPoA3UL&ol#yVe{f#JaP<VG z;Pg4aW($Bi=5#wra^cX;A~TJevdiNEUUGZj^xQ$T0NGJq;h#yM}985kf|%|Nzl2FMJ? zU_r2f5Kf5Teo&`uCP)Wks354iWSj|B76x$ygcB|bwrTcs2PIW&WzY~J186vpaZVl! z%%;r{n;^P2PoJlxnkxn>IH3wZ!WEv`uBfa!gH_@N10ypx=(tHv(1sp($Kd<)iyEq8 z5;GYYnK?0KH&6esp{h8&;)yQLb{$RCBkatE1_sj^TUaDn3=B*xK?6H>)9Y`EaZY~_ z#h5?+o{(N5s{#==2q3=~>I415frp+OKIgh4H3(Aq-~ z8x(Ou3<3-o#5dA_7>!z=7@D&F)_dwFuL2?WXV4n*yh)xf^F->#2 zpNXofgdxb04Ds=9p?=OGp8kIE@hXM}2ByZ-56Y^FOs}8ID>Qw*iR$I;4W_E+xEbF} z_jgqFXZ$gJK8RwO{vJdLOt*JZ1>LFK@1%O1al!O(XI0S1;c^glVfuGx)pEuc)ALp`M!F-rxeUvpKJV3e5t-c?myQy9G{Rb*fQb#p;84WMQTsQ&@#cj!#FcT-i@R7X?3 zM-fuOf|P^mWtejN>HTi1>eHWH%NLL|QG(R6AT^*N7ML3E>G$1K)fvO4v%9ORGsaKX z2T_I7!`)TYr>pG~6JTOco<6}{Rcw0Ii`fFxx4ElIOh4D84Z835zPqY6Q#)h`a=M;} zst%JTv@9s_P=#HQYd(E~i@Nys`5vl1%=MtDe9)Pz42*M*gH{t5fJ)&U(DXNB5FhB) zc*Y!%IAbsaKTA3j1A_qQ5&_0$kOEMAgJw?{=YS?m1e0@97#N#D7dwF@_`*OrtOX>) z7|aKnEn#d0&80AgFz~a~Gchpmvw-GF*##i8_|pr0R3!vvfmT(38ZUgHk#fe_+h_Wy zvakrfVPND0H8A11rFHuH096^r+1t+qsLBe##~wcHLugM(qjbXaw6Fb@I zekrOZ)AyyQdTc+Jtoo6YQEB>tTva7T)#;BR6kDFE3Zv?D?L1X^M%C%w5Gp%QRh3a? z`ouidNJgdUuk%z*7?q|g45iS9GAI~9n2C{%gBf&NFsO1A0yTG;7&(~v7#NtCSp7k(=$!=^ z7?{KYK+;U?X`J92+cNV?7?`(%B&0y2_)IM9S6CPrm^fHLM-ek|u!ClBm~}u)kC|_P z6tJ=|v9MNwl(4Xyax*Y6v9Nb>Ffg#OfG$a3XJX`#obFhuD(e1Jh=GAc6x0`I2DNut z6kS2b(>(%RKBo&BHD%rlI(5jb&>2oVp z#iir~85mekg08h=;oc5np8~PjxbHGfKUb+LRo@Ic>iP`mY5`u*?W3Tx{rN$QQdt?e z*x2kEK_-E2_F=OJF&P+mLAFi=E%ksXVqOZGZFB%>L&jr9p;pFfglv?p%`vjgJW^FflOH@F=We zW?#v01nmgT^L#lzliD7&y2$@i8#)s3vhRFz|4Ln*Ka$ zpu=JWxIxqGJQ_1N7#Kvjn^_nbc(fLSE(hYC0NNj-vyOv-L5ABwh=GAe7qr4$f!hL< z$n-&Gs&KysS!MuYYjC@XFfi~Kg4jCTpe5csMn0emgABMqgEBnEAPE!hDS`|PJSHHv z1vlvM3m#Jt+lJc_bfcUZi0!~_46@h)#CGAH1G2yp#P;CkWoKaEu>!GuxaWYpVGUvj zaI=6MX9rsH9>RSIq}LwAj^O^u#lTR{;{xKuaQ_0`LFWo$Cvbxf(&2Fju~WD=f(-Hk zu`{@HL5}kV`96mmv?ZIz7sM{$-pIzlz~c{Mmv9U7GBEH2>;!FDVPI}%WnkcS1FcP9 zW7*Bjz`y}I(u)&JfFg{6jio*i6y?j97#Min?=XWh!y}No@1P3;K}iisvA{Y81_l9M zPZJgf25xf!1_oX~P%JWVgO_Usg6^SX;VuV8z^x0a0hE8UGBBuccY)X{ptG(txL<+TsvvW8xG#dX z3Gu6eI0oF=AVbwbY!hw^(4Ao#AhrcJ=k3r3L2K^>!$9gaxIx$F2u6d}u<9^yfZPI0)gUKw__KrV z&IDyK|9TJ;#Aje*0r`oI#R}xYY>+T0?l?g#1~wK@Sh2B0gXG%bav&B18w;p9U}Gr< z$*q9Pfmz_@EgK6c5ZPEJgA{-^TY}xf30ANIY(H2KsuomNu(5!)PH}*|f>6uA#&REI z0w@q5q9A93jbUJ80bLWy0SX6*6v#vdHWmR;!43)qh$u({0~-tI{%K~=Z4-j=6F})- z2vn)CvABcw_=JNi5)c_23=D#x-Af?M3EB<9z{WBeBoA?a z9Y`0%+o1a>gh0yJSXP2WcY@8@4^q1yRQ|BBYyk;F0{;}KmSF)k7KFAk{^ev~5Dfqg zWQl@mJw{P=P}@NiwBw3d6m%CQi|8)UrJbUS*%=tvL~nztUC{&{1_lmM&^@G_qM*~3 zxJ1Q3mt%@DgYHfg1uaA66}=0(icz!!l$Gm6vji9z1Vkf+7#IXa4+$_Z2#HpLhL1(d zK$l~R8uKzRh>C&^9}*Lt%gewZE@}$eZ76yRbf>xKa#jWgDN)eDk2!QS)y1>c6peT9?bYqz4b`b^!WziLk3=Arw^`NuRR7DR9F)*l! zf+lR$MM3vhYKVgJl&0u4ZUzP|QP8lmwy2yC1A~qz=(bv2QPA!~Jq8g-NZn@xjX{fo zHVrd~f(HK>MZbWWZla(|pO{76K)3RWGJ~#;5q$xgsbUZVwE-AGOF0=hK17UZf8Y0!4DIynZ0 zeV`dO&@DlrE{hE4I4Mj1|Y2#*K0J{yufEWaKTO{ZLZxs91g6xB+ z0$T?%hoK&algu;g|(z zYLOfRvJ31OiFyWMkPGBMO)19d;47vCZEmAlf;;o0KUR4HRkPGBMO-;rwsN*1m8H{se`JmwdVnE!6BOH3r?1F>?B*H;W zTE-SMqw6bRW_R$xQX>wt+pwAqPFx_p;4qeE5C$122Wm<)*23+AWJ1u9Yv6>h3@Vwy z(J5UIi_d4E`-4$(VLdkcaD;IKnp&hV23ZDnn<#@Y$OUqsCO>02)NS>U{i%#|>iD5y z+y{3Yj&P_%vkMZ&;BWxx1=}UbAPh244%F3POkxC8q9A3U^ROA`fR4oihl8d7Lp=i| zKH+H%bjB8H+D^e{AC7QHMN^9u4w?ecq$a{3403@Ss7u6HUx4PgEdtPRI3fT`4{*1E zj@3eSTM?RlAWz~d#f#C@g56dR$)q65zyYVlAPjPW9H{Tcn2F{#e?h3*;z6BtNCJYT zA03gLFkRbLF5Z20ISoHjrgtx5+XHgIpj7>SHp-z}*HZt3W4Xfg|-4 z+-*40PaLvU^{}cBVi!m=*e)IhVUUS(puR0*7~C$VLy50WlyM0*8luuv!8!6f{=A=z`|{Fkxs|rGXkb*u$!x0o){U!)i7-V}mq< zJ)poK3^Gv;G)Tc{hh`V(az$_&xQN>>h*b_KRzaIK& zIwDYi*?_Jz$L=qPT~;V|K|&X56-Y1tB+z*baty*C6XigIGK@xWyC7+MI?OH*17ZM< z=rO@+7o<)Ajr}m{pc(xMWOO~K)d*tYHCqq6*`Vf>9B7P*QI!$Ye*k53(AsgvIklqD zAObNUM#GCT(1n5UqO2Yq{p#4v$5GB|ps9rv7m%h5XzYtojuF(YLAZrO4C)pM_-%D? zx7@B51(ia`?F$7o^FapTDpwWJ)I!_>PPQP+z)4AfK^Wu$InWp#qXfJ`3W?rg&{0+3 zbXyE}9FF*vLbD6(E@;CWG#1Dx2=_N=@e<=4K5+&Hc|Xt*h=SlQ0!RbcDv$&$PC$ha zsMY^a3_To#vDqgJ8l4BJhesed{zTB!)`0AS)^(sUOGYk6P+t`!3YrmNoRcXIjg$IH zaadi4!{0n;W`hiY<{^+?a2WG32!l+N1C5n3vM_>r%OGVCyRN|O0^R%x@i)S%dX#n# z8*aNmn!$E)GYErBQ~(X$GJ@ve8BQ^SR!{zxW?)d<0owT!2pXXP&1EP_gC=;ZLH!}7 zi2>lS=azwaS2>oEfx#FQ{zVcD42p`N1yNH#NwiYu)NPwe-(U3v41|(9% zpa#0=u~QCo=O;vfK^3%Kjj4!14YXSZECX6E!&J(k3hL4^l`^P-W;sC;DxjSvOr;FF z!KQ+5KLuC9(9R%(I%o&L9k65+GuLc38OCTPj{h=@F^n!UjIoSX462|*B|s*E7UY6V zR0XXs23ZAKWebvM105D2$H1ThIt_%WltD%kf%3=9mappj9KGSJilNWV(`M$jBV zDT6brI?yB&NF8Xu21uRyCD2|NWHmC3F-#l|3@T4S`imLr!E&HWKvh9|EtyIf)Ij%J zgY>F^ZZ>BsV%P;%63sL*0IB;6YXrzJ#xWW*NJ}s>Fo2TxOR!o*vB1R9ilix)m3av$ zeW^HtqM(@JH$*ikmRvw0MGR_Qj0_AQ%T+@l0;)?OwAw1DggR(M#zzVq{%CH3HWnaG zQUTqA$yCe`Cj|<~D3BctObiU5_y%213bsQ4BA^P|1O}1-Z2$vFs3d?SN*U&X^}-_o zw8aY)K%nhi^Ip?Sf`1W_Sov4=OGo z$~QojZ-ZK<3Yu2~-B1oL{z3U1TwHK42!l!n4LMLj{FE^Qy7UlIL`TTfGcag^woEZT z2iMLJ&#Qr!c1@9EU{C|q67xX}(1xE?pbXB&5+}pJAPm|osPz`qEDP)CUp=JC*?~uAPyb$-ro^1YQKOv8)2!eIyLJ#Y5>FXw9nO0VK&|Ad5`d z7#NgtKx+|=?jXrM0?C06Xi`c9Eh01ljY>isuLRnRz-S5@kc0?;=jJ43pRQ@sWg7ShDOa&8z(sa-=4+|}@3XlhsK7vX|OK|B3Zf_}tfP&K+G&%{f zM5zmO5V8%DKn3Vv23sTn@R}7nBr{C;L1!B~Ac;hR4xe^J5;z7rP}d1Ga{{$y1L!DP zXOMfL0(~F>7bI)$fPCi$>UKg^w1LcUM-qq!xy%D10QSGqbx;lB2@wJLSF;Ti;5!*X zQ4KLgCleIR3ZU5rr~oL}Fe)Pn>;{FACTIi~qC)p8F9QPz3v23vj@trZZbMyFK?Vj8 z=8eult1U2Hz*mcX`q}BKq0WrVeB9ht+}7Nn z^|gYcjOvn}!XT!QC?&Ai~1P&Fv{{#cj zGfS9RT#sS;Lk@A!sR0tx7oM>cpZ;L28HXjSr!bQQ1A~+a12dneu!$syBi-4=$SBBY z2)0P3tBH|;Nn)at1OtOCOoD+yZn~l{v*h#zg*`0OGmSU#OjkS+DL!3b!94lt%{J{K zJRnD?b~Z6G2r^EdzR;#!4D2k8=^qXRNlsrowU}f2+y(Q*Sxgw1Ii{~K>J^>d?z%vH zx-L{BRfCz?K?8A23|GN7;BMbAS9KEOv=3&9(-)*^@=TYD4zQUHz6E!~qSlD% z6WY{SrvG1{8a%zbT!nYK?2=Z|>5Jd37ndwf%}p%G$S+ET+>M)7T2cyOPv5doRd2fQ zLk)@PzZRMS+ALEb`W`jl0w ziv>%H67!04GfU!=^K)|(^HLb5FRanjo$lFTEk3^a587+l}vxIPSt99LWi}md`^B|x&oL0tvbj}%ubC5-TND#loFqq zl2Wuid%da{a^+gky={Q zo6=Qdc_5(^pIDxlSu#CuLA1*B8+%m6ryq#a(w_e5y{72&q!LwG-h#yB?9`I@w8Z3+ z{G#cBQ>H6T_ck|InSN%I>c{C$S6UUPzuv5BDG60pkXTflTEvi%oEcx1T2!2wpEuoN zi>mMROU0@}(@IoXrqA4>>N35+Y7Wn^ z&om^adu&%Vo*v-OEk6A~nz86~p|`5SLZGlpOv*`RfTxh@Jn6>D(-%BbVwv8$K~-S7 zT&$MKU3sUfBXd$t>eS_$ ziqiwWXb4Sj+o@VUEy0*&`uVFWtkVmp#L7%B($El}p1w;}k~<|oz97H21e~O@--icd2qu@3A!(pKcJX#WMZS3k~`0;=5I28K*0pYh{`KYqzTK z^a*k^Sf^ViXh}}rwntToCoMG*l&*{8lX6n07ba*GPXBO*nS1)e&zcg`OJ_+MOqWm8 z%AbBHIG=l&9D1Q}v%dAC+uLl?0|cq_5(bUa-hs07P(1 z-yh`0F+E|*6PUhXjx`4X0&GgbB73k=9Mkz#g*mqS9Z)?f!enVS zz3{542&3inhhKC>n9MDwUzjB>!fbA70or3JB4KHXWs9Y`r6ow0Ftde$!SsvQRH2Mn z;v!52kiD5K76yh!(+^Iz5uPsKF-4Tw!oUco&ojGzZ@8|?#XNnk zF^~Lo0XHk7?OeB2)%jQ~3@j|Bo4!;H0kKS`U)-RoIKAPeDkq3*Fn#w+RWnu#19LM5 zNZG~xN>vHs2*X#Z4y+aiW)=+7A8u1snm*%|sy>T_ftktl)2~!bKrDml>vyS&PnUYF zstWR;+4PIWs=}bG$qV0(3ikKKVpVBmArph?{jXJZSS$=oET$`LRMnaO`Zd@+CMMH! zi&f<{khB|{F%*{;6yz6`fYT___9O#iqv`fR{5BS;Don3=3%1w5VtU~GXp!l2--5kpU^4x}TUBco3j+g#=?`|R zicMF2r>e|sX=ygy`<1ZcGg%;ITC;){^j>yX&Hkl4qN*q4yl_mJ42 z6(}(Czk!adfN_{W%`>Pk`Hm|jpP1;z#){s3c#A*oM7V&}owpq613 zjKjdd0P2>&G*3bjpNGT-j{`v+3Oa-Vrv3+#8Wzx)1XPUx5?cm|t-%6n8ABC;4pM>{ zG!seDG9>m+B=%7x_C+N2T_iT>`~jGmUy;N?XAwcg>lt`KD?g!*kVImuBC!pT*tSS) z@Fjjwy`f0rp!1-i7BJ)@iB}@ATfuBl_=8Tv26G@8$qaP79n?@yBz7ngI}wQuIw=`u zStXKq8xnga5*xH=5vG14XbA|613Cp6#y*Lp0eoj3)IkrC#NQ&ZeMh|V%I}0SPbGo*(;IQ z>yg-7k=WpFAXNQ9B=O@&?6XMh%Sh~-NbLIiNF4AsPN<=;k;K9Ma;W%sByny~{}n1O zh{P60V#^}2!I$Gf)q{4JGs4P$eI!MoYoK94Y6B7nEm#C?y8-PJg|gj2;!uOY+dDz~ z3mF&~LP2VvY|!>jm^t8!^`M8lfG^gAvWvLt8Q=-90m;xV5F2!M0s{j>KZp(0umHq{ zp0&6E#D=Qb31UOV_k-9_^=CkAs5tlnJ*fJpFmX`%13EDZ=29Ne003yW1!%b`=sr0p zTN)$|^|3054LXz%v>5}$hN`g!v7wfM7I-p3)r264M}gQ-_37LU3~G!}4doySsD=g* z8!FxdVsD>1p--$Hw$XMOSO`>DFfeQYv7tA3Yz47FE5;ZY7(k1sVMc@2Q87Z*+y|+F z8vPW+hN}MrVnfB5KOl*yq2|;xsDmV+fnWq;gZHK|Fqna^n}f0)LE=y~-XJz; zsW|9-LJ%9O27F&0)Ura5I8;p)hz%8Q0I{L!dqHeaQUUpSE{Frwunfe8YB&U9LoEj1 ziw8Xr{UXS5Q1%@pHP1k7(D*q6^jbWq8t}DvP%}Xb#2BG!1nWUVPEZM55F2Wl1&9sW z`3}0`4Rlo&%gk_<_@YR9V8AlvmC^Rs%ZeRq2g^Iwmh_|m<-}T zB^HC&Pz`H9Y^eAN5F2XoWe^)QCI`9|5ac*0`w>VSs^$%d4O+R%z`*bk#D=Q*2Vz6b z_@5SU_W-Pz}5wHdKQqhz+&a1jGhyJ7Qp9umIgc z2W2~h#Gz_@L2S@*;0z25K_E6%O+1JVH8UT?hN=;&0CAuaQ$XzP(+{v#iq#8)&Oc*d zU|0th138g_VF!ra4Pk??$AhXl2NH*xaSz0Xs(B7#L&e{M*iiN0oA03FT%gflsCr=# z8zNrMpbz3eePsn=gHA|cU|_HV-7W`ZdxFHFYQR_DLGPN60Et7@WP;cbLm4VTY^a(h z5F0Aq0b)bdPX)1I<-$@B2dZHmhz->MzP%1=@l}vGXughtf#D{|aZvUXkT_J$I}jVZ zL4kqcGl&gU!vY#$hMFk?Vnfx)f=(|(oihWv_YcIjhL#JnK^&-|t3hn2qAegcRQv*n4K)a~ zUYHRyW68k4a35qDl>G`x%@+_GbRa9}0Dce~s)h|T7!Ng5ObApiKo!X&Nmzr}P|Msv zZ0NZzUZC6OpzKhPI8;qMhz*+8WME)O0kNTK3PEhBWsM*am zV!J|uaVy9&DEk0N9IECNh}{ZNa~{Nos<{JVgAHY10AGg(Rr3`|95mJqZ!LiKnAU?1 zYXmhHK)1$0+0q~hsAZ}kHfU!fsJQ@QL)Cz<%!69y4ibl|0WJE5r6=&!cu;f7L25vU z146IH6Na+u!FS_96-@vs0v+(jz`!sS#D*$b1Y$!i+XP}m)qtf$RU-ppgA8E+t&(S8V1%kM0*OP-1Ydy%RpX5$4!RDn9;P7< zNg@x#hH5AWv7rVvgV<1u`#@~aogeSP&LazZ1C<328J~tHdM`C5F27< zJ;PZL2dd~Ahz*foxC3HCHM|6|q2fP5Y^ZuB&~0&0aXAnhYOyAW4O%I|z`&p@#=sy9 zWm|y6p=z8!>{_TV-9a3vq7V=pYG?|G4Z4j3w6+1nhKg5$*ieI7K0sCYey4K=3=#D*-qV(0_e1!d0^2bKR&Mc}LHsvwS7fuvz8hz&LL zD2NSJa}LCYioXJ}q2_!5u|X%9GB7ZJ?v@jVvj2m`p=vlK7#JAA(NWL9zz5<$C1jA; zY9Mwc#6j91Hq;<}2?hp`p`gV<79eq`UeL5B#83tXcaS(#eIyb)5s94zVk2RDP*Pz#nLu{R*GkAc_=!NxG00kNU#uOPASBC+3s);TfG zgJ}4HB*7q!2o+8wwhR(m1&OVT#I^;oLB|Gwj`;?$p^k_}VyD8`AphsVIG|J8k=S)e z>~Y^VimL2S_Jk_-$Cn?Y=-_--Wj5hV5*Y0zjoRM8!f#65_ik3ejw z_$ws#XC$_u3}PHg2E+!P%)r3Fpa5Ec17&N2#GwU+1&9qjufrC^hN!7$a6@ny{E^rx zAU0HU4HA0+h`k2l&Pxth2nG(|522|*263t}&r-T;z@rnSQ$A*l3u z5PRPA4IpXIVblx^3{OEqQ0b2#_MGVtK+>QSXBik6*yRxMDGXxInl50WCSE@i;xtW= z5LCA*hz&mFhJnEf#DU}_LsCWd34NaG^AU0Gy6U2rlxjYaXDqaO*KY^H2 zUk~CyC7O}gT}bRcB=%G!_Dm%90wnelB=%|~_Ie~X$a=<9hV8kQYJnW}pwr?&b3h=` zpP+dm=#VYw%23c?C`jBJG$R8YsB8nVp#y~nL2T%_+#e7dI&7v2ngD^0Y9)Z!&_Ser z5F0wivk%19hE_%3858J`hZ1OJ1Ull73}Qn&_@J8>8KK?jryy}?mzWPU0Rruff@e~o zoy8oGIJ7S}8^nfowLm*-8KFI)pB$huXJ}7F12mcr?MVcJ*wBW46^IROhl7Xxp{>{t zAaQ6T6MR-8wCxrG8c&8ct!hDRX!B?phz%`!0zm_gpmG9~OW%SH;De5)gAOqQ9k2&l zbH@TYY7QD598fk$9DIW-bWmFjB+d;v_z!g22Gzu#D=C%YbYD!UMDCUWQ{MB4N@NhWrM7VfU-f> zWP{kyv|R>egUqRgu27xbTRc2rS8PpDu0AFD_3&e(I2GBI5kUGS#YoOvFy`bB@ zK;j_1+o0m01*#`OZ0L9-_+D0Rh~C>!agg3;Y@jP3v>_IQrYD8885lr5_y|=5@&OCz zMp047)%Q77#-ZLfIfg&p_EALqP`xfYgH=3OaTH#0F`<3snO$^aF?uEp~oG z*`Uy30`1$khJ+Rylr0PDj7fqxAe{^h3@T7INCW7YW+6L>21BSg$PuPcHYiPj?_7nJ zWx*hECx{0?yZ(ioAbP>~tU5uW7<9@tNF1aWbW636D=7Ry7kh#J70Ne1|HuFy;qc?CB4&7<_H2Kg41gs5nS3_zG2jh+fdSy+Y8! z+YY2A2zv9dE0hDW7&ILXQUuZ*0}_Xp@SvGyp)iPLc~EhX`XVSBq#iV*ECj6uCV<4F zAnK<>*&y|cplp!(m7w`_kOokKS__o`C8z@+Hna*k4P}Eu=n|9-GUzUp4KnBnlnpZH z1(Xdk=QoHAt$x@*7lbB49K;J{bA#$u&`hvUA|#$bXZQ+1>nPA9FNh7Y7&OTXVuLJp z1Zhr%sP}-fK?kt;K-r+pNbw*xw0_HivO(q)LfIg5K*#n9)n`Bq>HtYVE5XT7Hb}!P zC>x|<9+VC8G3cybA!tRp9VA`=@!4J|8?-3@Fq942cykiU24%GKP&R1aP5o6U2efzQ zHk1w8KJyUD1`QuShq6I4dvBp^P?HyQjR43IpxrW{&Ez09Xm8Aas2b4r7*=iu29P-D zG(K)98?*;T48pEw0PTa3g>V?y7#SFpp={8m7fmQzmXU!$AIb*ZN(MR*3}mPtBLf3y z78%3_?QL;{ssU|pafh-&V-~(pb}}OaLok#L+OZVL4J!W&7#JonGBCtLB|v*&QlV_n zlKKKD`y?X+18CM6WZ6|l28LRw_zgw|2GC^;Ao1s*eKb(%|ORZfW$$&VnFlaAa)!x zLp_5oR1s)bj4_lAT2*EVWrOy+*hASfm>C#cp={6&7f&b~w8F$fU$xCVOj~-U$3&_5F&*fcz6L~} z>6!i~O3jbaV!C&^JlD?ZXKiM&vc}3dQXg+AEUwa+c9eX zj1|+hW7Yhb4)jm2iBg=FgZh{dIzxKhuWE(`^#f{Fr`B zp5BwF=EvwT{dS_7Khv5i({+;6{1_#sS0}0YGbT(wodj~k)af$GYJQ9y)3cM+{22qL z?*>sV)45aBjx#-(G5t!4njh1L8Pio#)ykOu%$PnWRn3oS!_4V#Qq}wzQ>I&|srfTX zOz%!p^Jh9Ud-|O;uz$4EK^~biy(S%O{b>+)!QAOG8ESrvA=9%n)cl#Y%$vRk#Lbw_ zovG%}C^J1eQ_Y|0!h-2*GQk1$8zeemx_6eEKhuYW)8}NVf$ryd4dQNCG~Ff}9LC+* zYW|D`({E>kv@V{mlLOXToulT@^km8OGdXI0Of!~Fm&pYM#?t9IAbP>F>3ed);mMr` z4uxniwS9G-+J6?NKWn$IDOTfSVJw)wyIf71aohCg&H^NU;_CF43N4L2H9Rf()R8fG=05sWW}Em~Ox?A|@z?Cao}Cxl&D?^`9jJL-Tb1N;PFhh3UnW zYU)~zZVU{+p$Bq5Q)Gn$!C{^(3b1=}Sz%w^EHqXa?w9 zM6gO0Mhnoferu*5xWg@859+2f-7sbV9bU-}y2g}+i5+}{DI=RYNDCtesF}dR#JT~* z19d$a7+5&iL5)!s7FN(zVk|7|%R!f&vaqnQgEq>sFmixyS7!$8|7Df}Er?)a0j(Nh zFJfR|01a+)fDUtDVCDfG@>egtmH~8l9%#g#b06qJF_0<-E)Hf{(EY327eR{T!1ILM zpiU06JjetV24>KBDYF7d2TvsE#8c4WxeTBKJQ?RmgRW97U|^I28O0dH2Rgi_6?EDp zV-yoeNC2!%48&vrwTnT$UdB0~x>V2@v?yB)>^{&H2q2xHDw7|oQwTJN$f%qNN`oM` zf-IiH#*)v-z#t5AuE;KsemM{yvI|TUQA>XRp;e{@9N@UW$+Z9-sP^YG2JmnM0}dR9*Y78X!jRnmlhvl{}n%cTh{dT`xfg= zXYo*18zYz)w|#k#Bn8qa5++7Zg}P;|L54NPG^^^)gHh(;264R27Pu zzAssG)^r6G_0Z`XY`OWTi+HOWiNS9n1)Y=20J=wsfq_|Sdf_`u(dlj8>N2*4%yEkxATNMyQ=r7q|6Ngp-kr+aB=@JtUmBIXI%=k?cHU6>uDElsO#usoUBQqGqNWG_ z5G$L$VYj64^aismh3N)o)Fh^FIJZV+`i5U-D$^ANqZFqb=&Nc@kBir4o4z1kTWWfT zzdFx!JAZYr=@ALq;?o!StFvzJ^;c(SoW71bJHQ`SXn~R%69aT&0-XIo?N=TKP(vET z1*JVE22eT!@gSI)fe(CPB#6fWN@5HG(*vg(`A;wSEEzB@p3z`hvbNE5xvoxy>2-nD z9PA)9LJWM<4eQl~4U!p=}2o?g}-w48tJkuW>rBe6jT@50o)MiT!BVnas= zLFc=}?#Sf^6+KXK84z0-T)2Ujk}@zbf=-?Utuq0YR8Y1lL=h;=801FCXn$!K)XR%L@i&K?g%$eTr*(5&w*N2HbY@p?sjNH>N?qSrM z{^6c3%k+JR*iAS=>rO!qQJ>C#-AsOZT#cT@^mjU%0-P^+Aon+@PoMv1qWttz+R75s z?Q}H-IKRLp>_7L(Pp_EFB{2QnZY~bS=IOU>wA5KaYsomK-?!0Ho?i4}t;qBs2X&F@ zvp%d9kYwNm-44#c02*cll}Df)2(o+C^zvEe>eF}aTqhtYfusf`2UBxs`h1mm_35*o z7z=P3fX?z|U|>+6UY~3!&d4-9UQbhgdRU#F0Iv;_c7f^n>n2Jw7EGTXuPQ!0&ZJj> zH-wjg0d%wk$OS^v-&-z`W;?;az%Yk#dI*z|QlbbS1H&6ehyy|43bR}h6x+}M2T`EA zbCsYqFo+LhnxLrzb*@0?fPmD1Fyr*~4(bx1)4)Kj6p$l8qsuT`z^NXj42qXCPY-ZY z6`LORDolXaK!AY(bR{}SljL;!cZSkT*O?)=QZ6&d6R2+yU|;}^l7ZwwWg^T_(Cy9a|~$w0AvSDlP3oQ!<^~U)6A9mG6WeIKvTCMEh-Gt6DD#=u|4Hr zVA#w!Jz)KMWgadD22kDuwX>wBub;>z&04|3z>qY3eT+KdM$3S1Epa9zv*{Bv{WO_W z3b!l7svEIQpVphsClnU(uaSXag+?O-!vhY6V_*L>OrQ5xM{Igevid^_9^RXbHwDi! z?PUb1;ee=7laiT!@qU>cvykkE?aNZsTNtPRd%BWq`i~+WzUf>(K@!uW($o#6zw7jX zig`^=hqRo<8=##Z&{^@IQ+s))urM$jXPkcU4!2l6$O}w2Kxf0Vu&{T6?jm4f2i<$j z!pH_%Ho*)U%4QY^(2VR!U^gSu$}_3**HO$G_sza{xMx$j7fuiI%kHuSv?D=1Q!I| zYQQM?l#PLbNw5%fe!d{655OV_Iv<*qfw>NJptl<6Yt^`|)4Wxs%&37WcLmjfLW%fML*n$VR8sb^te?qX%AXJA(V zUEaw21au^@G#BVg8&OCggK=_p)L3vv?Wh)FX#{v!939QCW3sdpe`=+ zRt5$JP6bhrkUJX#1E*2|=oVO(FwhkZiJ&vGK?DOE3+N6a4i-)o(8b)GU_!&So(Yr{ zm{)?%P}T?C*&w0}Is={4a0e3u11IS6c1|7wCR@&MGzr2EN@O&ogi)Ff%al?Ezgb&B7oAa^)Y;P#KEH zKzf+Zfb{G=3_1m#htbH2g@J){F=*1*7{p}Y`~+f~fD#Q0C+N5kMpJ%pc(SoLurM%) zf>I81GpLL+<7HuB5Cd(nWZVOaEYM&o6OZWdeC5%pxP9q@+MTJLyo$Z{2L^dEQ|~cV3nXc6{OOf z4PxfJ9Ca;5ujwaq)aC0zPUi)+S0orjK_R0EN}-I6Am4(*0#u|h&H}= zW@KPc0u>32O`u@t1#!WF)CAH7y4FdN&yc_E=t%pk`Y%~rz5_5Z&V0|Pf` z`3lHvurGKSL_v-f(*>mwa7PE!xL}-foSlI|2Gln=0y^zkB?lD4;2{A}9mhE52S^&! zHUu3>4qA%Ka2|9RE~wvj8>B(Zik-oP0dih6sFTMyM~;JmK^fF)dJc6J=YIwURnP!5 zBRH{xh5;DoluqB7r!LD0YEXXSWnjpjem_rLED)4NK-+2<#6YQp5tJGj@<2&&P7@~s zgE%;SdxFw8W03eJP~!6fbArLaI0=3itt_Z*3JSVM)7|pbwZNe$$T__%UtQCllaGNx z7F6GW+F5#>uz+Kb1=Sq#d<+br*)cgr*f~uypgIebR+K@rHHq5e5vT{aM8A2?_Q z7(_wNQv{_u#zaur1xg^G`7Fjcpq+Y3;h->21eIl=3*Equ1x@ro;~aEy8pyGKrzaMu zYq6DrF3{kbKCwVulue6|fx(Px`kDfD305;c28OcfCkxcA>z(+(&W7lRMl{GkuxmIN zL_wB{fwx|RdPxkR)*s`Xe_RX<;@}!8V~_+mtA7TSCI0kM|J1(ZHCE`s7^EvUEy`PK%+o72wCz@W4bRP3z4{{nfbU{OTu+aTosLo%n32K!xGBScn zLy!fa+MIDt3l9T>7C3`3GJyKR6Pc{Lt7DklC~(QCuHyp6mOQUAgjQ|v?2IN069ia zggQ_KYTy8BDOiJ&FeKy*e=>vC2}v>*A`~*QFfbS#0XfD_4%AWu8)yJNZ@^v?E?@+@ zbQ6Txe2hTlB?z-67`d}BFn}<>rV(gp7lipv8Es=^U;tqbP2(S|3=AO5J(tON4l@J8 zoO)&k1|D%1qjWX~1`y_rHjZRsU;tsBm&`_>a}hw8quyvO8v_Ff3y2$m76E}UhpLeo zBLf2nb5t6;GBGfKFi#4bF=$c}gt@C2jSjOiFn}=MMWZqn1_lu3us2d=Vqj2ZVo+w_ z&^5lw#J~W;JS&(?@)#KyK-lOL0|NsHb68FP7!a;7J-{qoe!BJvc}~z-R^HQZuxn^+ z-&d+0!Z`iy3J!ioO~~<4@vNR4(x4-##2Fa0Ss9o?W1S$b1OtN(_-Lq$lLbUsnZy|w z^rj!kQkI+^+%#QN9dt&OksgD+q>W@AA2T0le3XH~7)5}Ufx%?^@^W=6rs+A&)!ftL zGdJi@_r9geJ>5=xBj5C2mFjKN^M7Pti8X5wULm>#%bjqvv3di6#|#$VIFHmECci-NDMW@TXH zbux}mmq{4zdJ~gi_zGQlaqJ|<%QAK>=^bSQ0fAJ8hcaQhM zG&od2VKhCUMO|$AYefy7EEmTR$M}%Q0M~d&XCDU0say=HWvO{3@ui@HY%&rdK~&6u zQ0eUN>+9&}!cYeGEhtKplNg`}i^b=a=HxJBq!h)22J{&au~jmC|15Rs>3r$Nih`iX z2TOy33KaK~AEt^;ms8i^njW!mB6u8MaQb06JE7?d4he8fkN>ltEeT=0YnZEF2>gs7 zl(@^x%Pc|8RPlMK$?4 zpeO;&Ca~qC=B1ZpOn1CDUu=3&tGfJjgEn=c=?iD6i%vJNHJ6LE#7wuIUSW8D+%bN6Dom zmLx)^MnGi;cwBz^grnKHM?L4>qh14&G2tzYq%)|NDjdGJyOG%4AL@ zA&JG=u4N_hB@9j>@g6Qg3?Z4x*&&q$poy622l~~er#rt?%GZUYKagS%aDrwi0AJ{5pcc~XJF=|W~T)$d*xWO zE;4x#njBm zc>C5#>VKISwWt4YHWlA~YN~n!3!}|+OgGJ5E(W2k8T`xj`)^2FQ4p_cl7(r7R3=9l+Ks{Y3`vnpk)CPyC0i9wCV{?Prtx)w!NNf!xwjL7O z1c_}8VS}bo85rCk9B^2Gj=6UqqfyADI#9n~J290vT^!`H<=LEIIpbiDC!GWof zXP&-fy}Dj~2a-H!$P6Yw6-j&z5_=O8dnXe62on1O5*u_E9n4H-P=68X7BL7L5(r8V z4mc3>kl1cW>_8-TIEW33Oa=yqXch(rVJJHdBo4Kp7>QjAVq1cZXJ`Vkp=x?qKC*&sGld;y3J)vyZ0hKjETv7zGN)1*MNWef}q`#|DQ2OWYs4wSI3g2bVEZ-Lk# zHK4A{V;Bdt-2}u24H|(Ci3T;op=@p>w#4-J(jDUU;De+Zp?dp~*fWsWpcUsZbGC!Tp-uta?9K=pIRu3#==v(qU2!1xTaY5Cp`cS< zVd6ZX9xYTe=%P88p>jy#79ciMuQw9A0K|p{GH4Kt5j2hfI%N&CIvaGy6v*OEBt?@! zY-lLY0I{K(7lGJN@#P>kR2+N*6jU6vL>!h@4}jD_#gBs6Q1$0QY+VM>>SP86(AsgB zi$H_7FrR&aDPmw?_zPk~ea{T)??8P38iIzYR|biL3}s+o&;hZb>Wx5bsCsK8HfU9N zJxp^HNCK(>yx{}N&H;%-4FxR=hdFd5NF3@L&@yjEQ0d9Qz_6K}fdO)Kfz&|7 zPk`7^_2)orP-zVE|0R$H2!{c*%o{dq{0yOp0d(~oO#CNE9BR;i5F0e|0vcKcUEv00 zgLk7q+47)WCs6gOAU0?`fPsNQ6Qo`OQgSf(B1wR^tUwi&fyAMjL3gY(g6bp&28ITZ zW+=NGNe$>)QdrzCMG{{RVuNndW?*0d-7g0-=P1}>Xi#54QUtma4i+`w!^ohPeF3R~ zs%HjmeSsRv17fpIzmc<8PEsGlhN^b}u|bt50|SHG^!Pmn;`QLuy`V;9fux~q@QGef zb`3}zYV-^c8yW_nwbhKEmA?!O49h_G(m~l9k<@?>;)14m&@yXSc$@;M(Sc5lp9gWE znje7JP>bJ#*r1^k1_p*7AU0I|ABYWA58mbjWt)Sx^FZ04rP7Shhy$O21=X7kQUeU+?Y#ITgq2)gE&k#+il?dsz7p!>HO7#OC5?1Zuxf%HM`Tnl1D?K}r! zL&ZVsei@a6qLM!)qk= zcMuyig$P>X0y=dGYN#xT4XSQI^Y9=xR2+0MBO_=nALw`?Bym>|8?;`Zfq}sv#D=Pm z<^^rP1`YQyFfb$_N#ugq&@>4?e+sIh86*x(#2p|uRD24E4Qic&dmz1K*)S50I3;Kw^UrvVyAlj3oXY ziTxjm4Z7nSmNB?M$2~#y@*%NBA#6}SVqlPjaKQ1WfW%foVrwI@^^w@-NNj5)wlfkN zd^i@=5q?PGL3}9;3^12QB1yy|u~U%P8A$8`Bz6fByAp|A3uaGW5N>U@y=b@kRAwD$ z-UhAPhvk28e*h|O0cx&8*-q2zPl<{P`63Agg4xq!_N&XOg63UeIR<>{EHqbvraNKc z4b$brGQ>SWH`c?1K%?0(_Ckurt&%fHZ*ee-Kmx zWM~AG4N4DjP&Q~`b_$dYn$O9CvO$a03ZQIIpR)wYPG(?W0A17z+E55ewcssv&`pOR zKI90f?KQ{M7c)=iPnpO*UG22G>GaoHnmp5|2dSylL)+eiL>f{OcBo0GeGnd=jl5@^aAJU z9Ou;im@YU^j{wmvF4I?lXdTz-KR|SV>vWIv>V8Z!T&K?f(JXG$Uz}He$0Xo3{l*1# zKc*+{(={%t`!T)om|g**1w5yp0MP}W(gr4mKGP#EtE(|(uuosWsVFu*OHDw4 zX@Sr56(BWBrk@9?k?@`V1H|Q-E`LQ`o#}?}bdM|QYK$V&^Fdq#j_C?3Rm7&RyP__@ z=rVmjNGyV5dV*fO*z|uOv6SijSJl;-N;sw~?Bx=h?srvP0M1z_uMOsW5aSn{J`W`G z#CQ6JtLkb@HBja6uBr<#)=d8oGUAW#bd783YK$Gz{jaI3Gj(uG2kYy*rY^uZVfuWK z*c6WG6PoqJrq}%!7GP5FoBrXNx*F>dP6mdS>C)HLm0AA;FfbgM?tEQcnaM+9`h~at zV$m4};h6&S~Z>TG?UP)tMSTKDxh?%3t!0>7MP=U;sjkL!QE&Q!oB3kX<8G=8GUiM#0ErpuPd~u4Mr``Jo9cqBxeN>nEYk%(m@2Ua z8Z$8bVF7OyU<$C9E^td-jcI}1^nhL;vFU!d)P>GRzRI0Qjc_BM==p&|!)&{D(a zx7EX^XPj0On68(iDlq-Q9!3GUPSfe@@2JN!@_-CAnLgh`onv~uxd8k0pu6g`r~kaG zt}WHk$iOg>fnlZuh|mBL7Ce%T3=ESzrvK~I7Mq@sGM!_4!aen$%=IV{8lzd$|-D7#1n9LR7(x(PfeS;K;zR zA_OA7eDXH96c3Z^2eU+m(?*-t|A&}0J?XK!$n;l_)CCzIO}{uoVt|TYK-o(Tp_JSd-nQf60XtCD=4hAD9m=V+C9;<7LFM-&!18Soo$Y}%aW4&vdh`2$`_wnzgS7HLwiniLtr zJU~m(9&j*-?fMJWv_j(n7emh}FuTLz0S80dhyNfQDxOvI3Z!GhUHnR$^C+w}cU)jec_AS&T;xWWk{z{An$G+p_bdN3o`^zvuwK?V@v znoqJHK>kSt1xphL!yXI7Qawcmh80W@Wol9i(+%I2$#U=r$$kJOi|ta+)n_p>%52~I zLj5n}^nJ6mC8p<{R+5;mSLn($^+EvO^t`8;64UR^T_iExi$6hP`nwZzxTc>872un` zYmtz|^mB{>T+<&IxAIM26$$uzd&Z zR{?K-fi3z2-Gs}+#OlY%z`*>7i-Ca|vgpqNbWj6q(I03{C<_O>7-;<<3+r+)#SXfd z9=zyJi50X!4zv-KorRGD)cs>##lyhB0$%f1&+Np^z`z1o^atAS3t99BUJ%B>+z6T* zhb;a31)7M4E&c1@U|`_jU_A!f?8ONhK*P5557d8yE&cnz4Vse&O|7$W27-3`oCay- zVBnt4_D-FjiIaJ{_&as8dVbLELqX87GK_)-JfIbT>)99>m<4Zx7A6Yr;$mQ6WneZ2 z-Au1m1YeWKE)80>C-@T7C=;9onr#)_4q759Siu1bd}e0QGC>8C*=ddJ6?|GcfS5 z8-iM*oS>!@yID49-5zHyXf+{pO&(}j1iK$-A1MceFlg~TXxk}2h+tr20o|4$0D7Gs7pGca&N76b}_n2-g5pw*u| zkOhJDpxsm81%b?qxfmGu{6V`~nJ@4#F!0NQHnoC|j$q&skN`FPI6*7y1tdWs#K4)y z!BEd2AQb{ij+~%gn}9UPryLB-N7)$|1Z3lx85o2>OK(I3wLon=&NHB1txgE2^Ub-9 zoq<76AGA)2g%h;)OwcGE6l|QJm1KgZpa|#T)Zk`d5VQob1sIs!*ccdutU=+-3>u#m zas#FBdNvjY76t}B(9H_qRKX8&0RuB=y{M2o=srj`7DbQ(GtjkLp!Fn3s)S5985jhF zJVAr)oYz2GyZu1!Vc^`xz`!6B*bB<%oVK9dv=J*nD`z?HgU)J+1`Uz(Fz|t-`N6k# z@V{qfVBiNk0c<-P3&=#_MJx;qAPlyVfsF+eerzn0L9PKA0ZuXy=d!V^10{cubA)0* zE@gJ(Wnd7L0u8jYu{;3j_yBT0DB1Ia!=9Ooje$W>`Xwmtm<>USWk8BKcm(B)Ss56> zi**GReuJi^IGsTutqd}Ng|nTDfk9CHJjgc;%zHp)Xt1#|Fz|uyZ{P{uBX#6Y&Pu|%;lFfg02GB602fjr4<&&0qWBJBxE#X_J}Upyl6t3ft{23bWE zQ$caem7K&NqErAXCplx;85l&AK{`1YnA>?67(`U6L47Z8(4tdOnNO_Kw|!DKuHOV& zE2OlI6}A#pR7VWtNG*^@1dBm~(a>eRqK3gBi5s8|B7$E*qjZAxpvw;h_wj&=AJC?K z7D3Q(5vw303j+h2U<(@q13LpV=ng$mq-Ct4q2(ZROhBXef_p# z*(ojt1~ElYHsFw9RCxtjx_bjOaG(lGhzy*d`5Q(xP%N`>%7Mmi)In*1gL59pMH-+a z!Nb`Enpw~Ud0l{WJ4jp$w2D@Q6MWx>HYju@7?|gR6zSCWvN14l2r%mDu`@7mih{)S z!ST(R4eIh3fP`5%L2HB=4NX96o;g7We zT;iuF@3?Q`J&SwOi1Oemu8HIsF7wW1YP0@T|x-b z3tlZI#2^B)K&c269Fbt(fo66Y=YVe6fcP#F=DW$D5Qqf(4z#{q8SJQNMv$XG1&i`= zkb7eoLC(JbI`TyVG|ljuoq++g5d!4@5(WlU(3wNrID^JQJwke9XYWpavexR|Ib@WCNX7z%XB(kAZ;!)ZstL$-tnt3KY94OrX<1 z7=uAmb_|O+>lql7%Rxy_9c+UvBLjnq8Uq7Ej|2k)=wvI9tBM&Iz!%j{mtbJ%;{?SN zc#WT8C}{Jp1c)ES$_yGSVPH@IU6ctrzETBr2FVTy28R7$4N;&NRRCR9dl;k;Gzi9U zPJ)5q8R%9HY0w>>AYp07XeQ4842q!j#EVc3W@7>6EH)NUvSVWb?G_OMRZ!yKK_}2g zW(Ee(0SJt9w73}6p%8Ui^Fbk77N1fWh+06Fuf1OtNtD49NyU|>)Ir6`bNL1Xg}wG0ZNF&R*D zQvoeeZUp&r`utP##neHo!lfDGpa~9^@)#6A2giWaD}rJdnmp@48>ulBqb5_3o59Ic zkU<3GbMY2XGA#xtQ_xy_#yLDZ3=9%r|CfOM&ln^LI#!0U6r4;!8!eQBLAkq}5me?} zfrm~-Jt%k>WSJNkz@B~&@+&COfWl=PH#pY8$rK!A3ZQ`+aJYcH4h|PDXzI8FSIeLP z+BEqK6nY>Jvq~~BsDKWN0Wm-qNx(u6&@iev=oBnQ(B1(C@b*~7IiRC1Ai0i( z2~wtjBTHJ6fx({#>?lSzf)~@i0$FMR3KYMo89=1YU1=M2Blw@GI0u~0{{;U8xniy;a=m;H<6(W4#;#V6qjDf{y1<)=rum;fC zIv@=p5Dj^tF%K*nR6rXpN+cN=viZPa04LQ%qveuu1{cKM4TmHc-L9I7f+}fk7e~l%E0^LDeN= zkTSRe3<6gX6PXwoK!?FFbV-6-0a7F0hFCVSyvIX+r=J|r(ppY&1lHLVDJUh zE;tIRmq9z#80UlwFfbT`U3naodZASkI7=)5WqkpVJENJ4SlAd8Kxq>sr~n$jT@8{2 z4P|cw6#~9sb+8&n0aQI61Z5ecFi^z^D&!a-?Euhq4+?^y!%q1b7{CUBP6k#0jf39+ zX)ule)pO~vJeCQrNSy^47)(HiwK0~0ZhZ!w8O8uA6jVTq{GWjAzYMXTi9n3?OQXBNX>>h^58fBChY{5O{RrZNv@`By1T}_0n`_L$ zEtq|bpcV|cV0$3Uz`zPxb)K`sF2eHGAl zMGh$jh6u12Bo~4<`GfLT30Mqz<2@+p889e-N+wVZqw*JY#Ihg*!$gQ8P_Zvn4?1v$ zsgz*}RIG@BK}HvH$-N3_W52Kz1H%ER9Jrwgl0!5!!CRz25ddyah%$(PVptq>%pl`h za0v%0G8pIBi7+rgD&V!?cxMbU1r>dgA`JE5U@Kx^Pyw}#KxtD~1nyNu(7*<$Edr|K zL3?K8K;33WNk&l52$U>9p~E;wQj~!~65Q>P1e<=Ag@Hj0+**?crz*x^a5~Wx1zlAR z(xwKQU1F328B@=|7@`bLaSGrR2ijKwZfMF$F)-|gI0f7|VDw=CmyDWH3=FR!;;hV| zGFF-~nwd+65nMHZ43}n%Wn~5rxhQ}pv`nNJ7*xQ;pA-WFhbYKz(V%v%BIw8mXTf@q zKolq{AluDAjs%CL1cM03Uk0E-1IFJVgVVrekBk@tgBjSfe?YAY(2a^_a-hWh7t}?x zVr5{k1osmEfqIFIA(r4)?SF7PB^2UOMzBZISs6f$cn<~!Mka75O=5*MX?4V4;iLju zW(5j}LtuAD!2&`7)ItHLW{?j-shLR(lA1xgPB2q51NdMNdnpD6MNo`^ice6Cg0}d8 z6A;Kou%`tWL_q!%2aSj@>VXqbFxc0B#26SP!95{8aL;HrD+7ZBX#9{-58PmfMzJGE z9i&)Q0j<^56J=nSE(Qr=P@;`yGyoUH(1Hv!zYO*UsNVtd#&xha#6bOZEWS|jWME(b z`QkO$NJumWLNgW2L*N#*RT-$@^bwoPohXUIbK<8G;Yxa0hjtAwgp}0aP}7fJ}!9>;*MGJVCvAus}V7;eU`4Z)4C{ zFSvJO2-?2L=mQ$V11n)L1nrSx^g}Xr9>~vuEE2HP!^XlT!N4E_8i>@%NX%hi3U}j(dVNM@AG0+$c2&>!e;$UC^ zVa^!4nOqDE^&o;X!!DDTfdPa$lk6Bl-Czy|1~FAT&`F&j%qefTnwNnAggLeBK&Q=s zu!y}K=oVfO7ICx#4P%3_h_BrT9tH*w7O}Lu&&$97!lF@jqM&`nEDQ`>x^@a|3=AO5 zRbOupD&Rnv_a(EPJr@H52#X)Kd&Um^X#ZzMqMK0fc#~811uI85lsA zcLkFjX!QaJ3+UQ`2BAS%BFYYQgdhk@gxmFTFff3yq^4afI|DGJrREfw75SxRa9xOHI{UO@zUj^}BBIm(?$_p+J~gRZYPtZI20Nqi z^oJ`rqytU3AeM52PUbL$7!R_^4C-5u$>IzQ<_NbjFjzqKu!8hhA}N$$V6dA0;Xsh& z^efYf1!SRmxIKksSQ!{>5nRxgx#>~K-J09~acLMZPCqldm^%s7+h=AdE}0KvfT{;Z zh9D3HY8ipWA!QY0-vp?u!N?EQ@*oCC11^19(;GN4#il2?$*?g6%T5cB6qN?` zfRaE(EJGBC0v$!b$Pf)0B`BEwl1D?j9yB&o4ptBivmVs^2c6-{2tJSnEDBmH0&3DS zGDJCo7MOxHfXoKVf;z7tPp~n7dw}ynw=;l>R~R3}2DMok8Dc;bs5cIin%>N-p*4L` zNVL%O1~+CFSI__(6NABg5DhY)kpVQu0k#EH*n&7PtspjN2Q?!@6o>+;hDuFWyih1S z-QbokD+ee;Gcv@;Pgkh5)|+l%!N{`Rkx!$BiSfwvi}@15(|gzHb1*>9M8XVwV z;h=#-kT?v3;ugfFsrBp^KubXx7C`q_PH0nSnGV}l=?U6u=`nqQhz4|TGb>59-uKS#mOqOQyfCQx~@&W*22~YHmSB5oB{^acXX2K}LSj^fWOIb8jXMt{-WM<;zW&my86qwE}p&`r82i|tc zH(g&s!-jPRGb1z0^a=VZBGbQ1Xh=<;C!rxIq`<()sl)&}Nf>$v-`D8}B{VdrPuExB z1u4^H)7EKuj+*}BTW$Xo&5+R8nBA+MVRh-Snrj z8hT8pSf&>iZ4{fXEvMlj3fh9`6cQTm@8=rq;U5z3=;IjVyS+$GBZpB4zUL3Ip_N%d zV>3TYk5hfUbUS@H8 zYHmSEC1N`uXh&vSI_jo9fQy){I)uT;{gWfVkM6b#vwI$c#o zLr)E47kEb{$OyksU$B`V|AE->qXehV_tX%ZUZkRty#0}iMljR#Us+m0)5Fv?>Lfr0 zfYgHw@eOu|Z^fK$xKm4b`g?VaoA4lWclC1(a`b`tX!?g}ZK>%GH8do2Ae)6j`!*SH zZN!9cu$<1Osj+bSE=`S%f-svwp$d+L=~-GD<=fwBX{a$yzn8IqWBLWtERN{{ePSHb zmvT=Lm>xSrgkyS~zG_KOJkuY@aq>*J z(bZT1+3naN8pShRK~FdP4W8*Q^fh=GrKdaU zYgkW@kLHz_&J)feFg<|ThhzGj`PMwsd91P|rVA)>@-V7QceoiX&S){+;aa&q$ONA0 zJ5)JUrY9I^@G#m=Pn1&-pI)$PCeL(ku_7KunduiNhzU>M_o!N6y8Ho2k?9H6mMo0& z(;b<8#HW8S&{#3OdfG;w=|2=XC8kes3gel6!cZe&`Wyi}9!9R|d23~qr%&*z(wUw= z+f!qEhmpozrtM9p8UoDQ*H~y=WnwlnGM#>LmbfsO;dn|1#4wv)cvV%H$;@bapw|=; zW-}w>=?5RG2s4`*8-llSvX~hgSZwFC(b&&8-A}(LKnm0c1yvxRxmresEC%TI2nH2~ z=?bGP6a5pYWn;&BH~=`P_6>Q^aE=|#I$0dd`JN0Fl3?d(->-?{6>c91_F!4 zET=&EpqibD!JPrLr~%|2h~E;y$3=knpcViVgDV4QODKr{Yx?}}0^-xhH!=+s61$_myrR~n1jfHNM?pehFMT~(B3UZhWP1?UnTXYC#+~NnBFk2)M1)T zn!$=XRcenV3LT4@7P48kA{!k{)FhyzW;ptGN$Tn3Q5)^urG1$jod z>Gx;b$WM=JH5QnDZIg%qW6N}DHx2pee%l=drk~Sk5@38fJ%78Syr2*$VL%N4>6f1V z{>Du4>3P>>BpAJ?dj|{2*Jq$9sYK&9qwy!9@fSk*pvIvPgEs?c8z|I9u#BSxzOIXZ|4b7)7 zkkb&EuJ5TK#tUlBfe%ec%`0P=E@-A9!W$o-R+^U_AFpC&WNAL#@Rhpo^h!^Si7aMD z#-`I9RW(GWD|uVL^wN-5Ff%f>gr7s8VrFD&g3L2BoBohdP;t7V zx5hf=q>|F<(R0)lwzK(wO2I`68Y0sjcB@KEzw4_J!^G%4{ez!|_;l?9B0SS)E86k! zf~FOqo@TV2UT{}UeERAH3!drkw{-IGmOz38T=JAozmUPGJpJ_xL!Rl~db1>^uim08 z!3&x>1+9Ju6+V^IcNj$JGgeP`2+kCrKHEitXL`PWlf-muZXF)R+UW*@8RFBsJL-6* zXHQ-wF}-@V4G&}K^ae;e}p<3W`C-y6G?2b@ZpJPhBMp%2N!m`>{YV%h)_U z;iRLuBq%yzNBV$Pd4P^U1v#T-`h$LFWybdD2X-inPoEs1Au&BVL6K+r>z$%J)2scP zBp5ZPFPQD1%;-NopwC!*x^}1r&-CAn9TL-5ukDmz?3kW0WtH-D>-n8LiCqx?hk%TQ zh6QLemJu|H&cMJBgCq_bk%ftaY6nK>UF4t|gAsa3I_MB9MyNTUUL|Ac^aDE^#2I_1 zH|Wh$o?g9o3eWWFJ$XEgz0(tx*@!dtO>gL^6Q6$iq$8-ZZP1$~&e%UaVTGJHSQU8C z6BhOprq9{vrp!2by25I4aYm2n4M7^>lAtM8SlmKuHqh)XqxSRzTrtYivq9$iO%M3N zB0ha}vK0@b$Ml3jbiFZcmU3H+zGsY=k zOQ%-{Xz)xwy`@uP`fMI4p6Sd}R|!vV)0-tYy_%&3ETJ-8c~67H^xcy*AxS_IH17)9 zpbN4CR8T_?(`PK1{-LW*e0p?d6VLS5_m}Y)f=;vtUH%DD2)$zuoDz_e0LUq@Bp^5a z!5uYmUQkCImO}Wa2OJg=pYAQNRzeEAq7FL0554dY)YD{~#W4NgSr##P(q*3>c34CZ zq=!cp8f}oQ00{`tR2L(P{^<`Q!^9zB5PevLXL_}o9giVVIw2;4NJj7J3j#F6p{XHQ zgU1JSP%|u^p_dtgs#iwng@<4#few#gU;xc}GKhfcX4tt7P&PxJ;sPyN6A@rw08Q9>ytr&01^jT3Sx7E7D|9_vKqo+h*r1RAv0)(xj@Ed{iJc%eH>7HiX8`#WI!i$1_c^S z4d`SZkT@vVL2T|8P$V%hfXXkJ8c@{M!#JSa1kwPC0uYaxf?d zgVcixQ4pKE4Wb?t1t2vbM}oSUFg9o~8l)bS{y}W+cCh+-22i#INr2)B#D*CJYH@%x zgL(*{1PM|D$`K$oR5NG>mO%uxFB4XOBtwE4v|0ux4o+w)kkyai!Z;aH#({G|GHCY$ zXjT&xPsxy~0+d)lnn6AT7Yk4eKxslmg@FMy7!E3mKx#n23o7S9Y*6%p0s+JZ`4ZGz z0I@-8Ko{|X*dR5_pmu>gycMPyY>;K31ri`O$g<~9b3nNYT%9CCPEG=`xjR71YZ(|AK#duY&p;^@lqf)& zLBRuJbAwLDXMkK12oeWnSI}HCNHfS{(4q&BUQnok^n=uZvMPuTD~Let9*{VQ24Pr1 z6b`Z>W#IZMnSlYcIuyj_hPG_;LB3I8U;v#s4XU<4dO;S0*f7gL4Ox&l zsO1Y{!z=?u8%P|~3I?$u>gyR8KsQ5!BtV5Ahz--Q17uk;0|Tge3}SPGOk-eRI0Y34 zHI+eZZfJ8Ev@`}365kjY7(gp1L1u!Q&>%L%G6wKq2uK{1xIqIW+#Jw01J88sjm|Rl zpjFYJOLRb1fN~H60|RJUT_hEfu0gF75E~S;psEtY2E{nI6_W}{z92R?)ErPo2B`rh zWe^)yD1%ZJNF0<*L2T|mP*gH7)Ps^0NCK2LL2Ouo3yM*YI4GHd*swwtG-U%42PIh$ z8|4-g&?pqF%uIuL09^b)#X)w6q(K@Y;0&7vDvcQ+8$Cf1AfJJJDxwW3w?O3>NE}o| zf!N%jO)m@#44?y3Kx#mSfRZLi4amnJHcSmTnWjN%2@snbwAhk?fdO>BIY>RoG3Frq zxhFw_0(4F@NCMi-6K3Xd@0Nn$jUY11-S-iGv&r3Q`aoK~Z4BzyOLP(D}e1anR~RE~q$&Ed^zR z;!YmQ)&-sA3}RCtu6+! zL3%-BG$1x8@q*+;a_S+)3W&o!58_ggq=+RX;ehM`X#k~I5Sts+EP{^OfW$!#1{EmW z&=C(%jRFz}mBAo3H+1v@+-J#wm)}2C6$A{R>)9C? zKoTGyfSU6#AAtI^AaRgJ5F6$La2$jBYOoep9>me0XcEbTcnn;y=RrIGO3Wg*3=AMo z*@0VAd5~5BI8oR#Fo04rxCN01i5d`_8#;{yuCnqVz5%gez5(||^B}bhhz-k4&Y+Z^ z2PqpsY?x<2%OyaLQvubVAP&qoU`K#5KP*AzLwo>Q1t^ja@fj$;gV>-11*%a%Y*2K7 z*xb;eBv4R;#6eL5VsnEE1qMjp6eJFcYEUBOmV}NmfrBd_;sX$yn`8Qc-M!+|r47}2 zrmw%F#xp(J)}LESI0)h%kbNLF$b1lH41!#$76gfPkP{h$ra#Ei(B}<;q2-KzoVaA|oXN={hmt|`Rf>eTP9S{bo6zr9oF1A`7EDmZgf-qyy^b6S#LqR?Q zVaA~8KEKuE#Ksf_+w;3oDKzq$W%hrRYH%w=glLIZ2 z5(ZVippF$(4d{Y25M~UTJ|Uo9PEHdf4r+0L#z8^sAO;4|eNrII7&Lvy`n7U$po>0* zK`W3M7#KXDYJ3h!AMGI|wrdO%H(z z@h~wkfG{Ww^EI^ULHV5#)S7?|1w)qZ!xnpavd{4Jx`B!9#=$&`mW^3qa!xFh!ttI*bjv_8Z0qRogH&Xp{iP z1}AB#IiS`uOdM35!`Q1pW8zRX>p|rOOkx+31Za;8O#B*>I4E_)#6kCj!`PrD<1n@` zC|N))0M)86acv}V(5y0898_O`_J4yp3=9mQ8&6^EZX^w$JECCX(~-o%cYr}HTY@CM z8;K3NCLE^sIFdMM)oeXX;tG<)eIzz`T@BO%&`B3C^`Ps(VQlaYPpBG8&^jC_8+1nj zObuvb6^y+Rp{AbU2!g|K0f~JViTwhJ{TYe<1BuNH+BXQbm;;Fon&5?547%q5#s*#S zz!(V%e^3JyNrOES8+;oC)X-2QanKD&FoSZC#4C{4ElBK%NNn(lTTnAsfEK^Q3<4jy z1(g6Fxdml|kKBT?!AEXE*-w!S{eZ+41Z^{isxe1mJ0r3Ep=_}K!5iSA8q%Q>prRRc z7zfO87m&oki^8Gm{~(F;gBG?!#ifzh;M;Ma;-J$9U}mO)&hUkCz!#4|6@hnUL)jfj z2F*ueuR&si4+n;-|BNIKI$!~2z5r;AJyZ?osx63kJp+R#l7v1I+Z2gyjl_0DVuNlQ zgBZlX;EN<4g2c{7VizK@D?sdesEe9G94LDl5*vJIFjRaUlK3tpHt6Ukm?JJBiQhwF zzeZw%ZkB_oujc~okAzwvhQwAvVuKI*q~`I1_p*s&=J8<_7spfRLvqJ z_F51d>a0y5HdM`C5F09f2*id}vS&dYsKg}@8*0HbB=$ED8)^_EXfGzTgU$*%uNTS| z0Et7@NQ2l=GeMheU@@%=5(f?8FfcF}gHAADglaa28Uz~s1)nbrH3)Rj5+k%(5f0J} z6;A@Op%$cr*idt-k=Xr6>^UGd)Z)b;Hb_0FkXr-eFfcHHPZkDAfW}gh#BYPxP|eRl zY^a(qAU0H72(;k`>NxOW!k`8b0|SFB=&WBTTLVdrF=&SiBh&{LND|Hhv%$Fr>Ehz zhafi8p64Jo)SeGWY$nj=Bd9stNNf=#wk(JZH3xKT7QC_N4w8U&EI>yl!8#dXAaST? zQ;^u81Fc{ISb`*84`M?Dum!}1>g@-yq2g0OY^YsxLA_2!C}%s8!~rDsNhCISKQC1M zv+44e7K+z{HY31{0PR15rFRj~ov4X9fRTA>1BL-jf!u>(PD zE%1aU14B57167ngef_L5@%k>15Hw*;Mqv7tun0kNSy#zP=BRQxIu z`yLYe3y2N1>o0^2312qQ@wre5eh?dK8TjyEsG)KoaVXma#D=Q3oz5@IBVO+h5`t@v~!#E5K4EvGT$C20Lv z1Q;0V8KH_)K@w259unIeiR}SmLpA$>*iiKmAU4#3I1n2&>;_ssAi%&N3}xpciI*YR z^$hh04nrr14K-*ohz%Xrm<}=s%3cH#hpJftVnfB(BC)q2v9BPppMu!X!sH!@4T^tI zs^bu3U|1L^f34m7b;f!I(*vyj+}k=R>7Y-kqRhr~XP#6AaNLoK)oVnau4 z?t&ZvWxoK4M}kH{85kHogE&w}`~b0`nwftUhz&K*2*ifE(G`guiNwwVvHhnjtZtEGoHRXub&GiYT96P_+d(AuGY}gZ6mLOn z(1a5M1H(sQ1_og$`wvJQs)kF1fq@Y!4mubO#@0g;w+FGI>b*d0O9n_5@DpKR5C+YC zf)4xwNkA2)fY{JD$ON&W;^j!}Mi3h`l*Yio&^CSjld0nM^FcyTZA(CGsL^|n*k?g( zXz<Db%Pez{B$k2LpouXC z28PujHq>#4k=SRD*pEPLXh^(9Vt+wm{{^w3W-^O0FffA51XVFSFb)F)gAs@gb)6-M z4VuLTP3DR*FbG509w2e3nqUwc>az$C8!DcL#4Z4_A#Du; zB0UIVL&eX6*pNKPa0$eQir)jVLF3R23=EG!Y^eBq5F4~0h=GCO3y2LB2Tg6m*44|@ zOE54nf>r^7TDu@NRFNf!4XwlMKy0YE7l;iS00#|sgV<2Q?1@P18A$9oNbJQ(?Bz)8bx7<@NbH?R?7b48`_`c@J%S{00*QSd ziG3M~eG7?w4~hL0iTx6Z{Q-&n1f7K!bM#P&pD`y#PJkk}DO?06)0G7>uriCv$E#3@B$ zS0b?+kk~Cq>~17>KN5Qy5_=XBdm$2gDTED9e++9N98mgW*nq^|j>O)L#6Ei7kP|mWQ!H z{#S-^7#J9|kl1=iY*Qq*B@){KiS2^K_C{j+BeBDf*iljp3{o&3BqB+qg4xq%30reO z2P0Ld@1LKoJpGib7>_4tZ9MF%HP8Sgj14NSU~JHWSr{8M90y~AmI%PuNz>~WWGkzJ zR_DWnKx=AXY|zR-&}kT;L@{x?_{2%dTATc|9aIhISWnnU(sqz~=s?pxB=#XBHh6vxs^$hn95i*yz;J*1eq|$Z z)mIQPP@prsLt=A*rpTcB_@>t@nu*tgr|zIapmQ=Ap?x>-jX+Q~_=Zp@8+1xEObzIO zOV~X=pe>>>Hs~62SPwW3WF>T)GaF%S@C+nW z?|YDXs8hfvDniA+7<_d9NV}-JO0uPgtB6bS5Fp z)UVT}?^-F>bAo0Zp^oQ8VuSBuVMChEeh>~g zyMgb5g<1@rN`5k_n>vn!Y0!-bmm!4PoJ*gJYDS`m*8}LEh+iwzs{@{n69_QPIbEU z{XU85-paNT({HnD@=ULm*W{U=KSM)edUs}%#PsAJc@opNgSe{?sB=%x+uFiAJ^ZSL z!SvNzTO_6{8_biKetT<+1TVA<0@=uDJZ)Qx^7Lkdc?Q$>&(v_PUkget(D_^N!UE{r z?0=9rwB_Ol3TfyRWi5yet=K<+*w9MU6*Q|24PVej2(ZgJZ-T_3wHN4|AXqK+6*Tv& z2~GM!pt(+H(H#t8L&sgg6Ryzl)srA`XwZs*W&xqT0-bsX3sdl<8+1@;GiZ_wnw^9| zQ%TU|R0(23lgbLvhBa7^dI#t>3TQ}xGN};gbUg+J2GDVVAU0@=7ij-Jhz(j~cpIc1 z8d?vbY|ui*=TJ6iQU6;g8x(k-p=^-e?@+cZsO`!Hy0`%v)B;d8$RIH&n-jG063PaR zC}=_1ptWEIP&R03rWuqCTFh<(WrNm#fsP3j5@28eH9Fm(;-E2wJ-vv~0fNrN2l7zUL9dt2@BxL2R5R?t_y#$mE z+F~FNWrMaps6yEw4}cb}fXo3!hb2@TR0Y{W*`U>Z0U$Osr-XqP{RzoHERKOnfTAD? z$_A~3&498&(UAvbgB(->WrJ3`g08~`nFDfAD^wg5irr8)$U&2!Y*5^TZo>wtuLsqk z^Pm!-F_a}xHYli9LD`^X)f=E}(AxejP&Vj%lj9&ZC{h_17|uf3pu~F-$_8zid;(%a z%K*^D1VYfgiyzoPH#90h79D?sDgv4H2g(Lbt1^LZTvT9S0PQ#AfU-eZA9QmL$RN-- zsti;dG_nL*Edvq|#*)1GuYlBpq5yQoHi!*c#GDIN1KP7w4rPNJS_@@^9M=qGgVI4Khz+{F z7qqXiAH-2%0B`4<31x#8OD~49L7UpvLfN3*O534q&>o<@P&R0p@L?z$v?=Z+lnvSh zaT&@6ZGHe<&kb@kXkSVFW2gkE4+pwH3M2vAwDuM%{sR;&91ILX(8>_B90$Y(#W5FD z9F#~whg1rIvH)nYI!Ig#5{jBoHmD5Hhq6ISYE2>RdInIZ!WzN>?|pKFvO%SoJCqHo zu)U#dP{ND@v7vQD3X~0UP!^O8Dyj>hY)~l)y8jz=?Gh;0f$skXu|fW6;;3g}0C7Nh z6m+E*hz+V6dZ3y?ee?MsHnb7~T?Q_s3-Q@%s5mHnY=p8wOLezH*`QVQpcOzM^`LBd z5GoF`3v@@g5Ga3w%Kuv+2?L0s51?#NaDi3>ffRuf*BhufsJQ(EWrKz=e?Zxw((oUY z4N6ZeoD2*gy`U{rTu?SBaRg||kdQHCBbPB$98~z& zLfIf+xs<) z+raF42JpF9d%zq922hE12+9WSk~#rpgElCggR(*Gx+_pNXqEFVC>yl(=LwVzTD|`Y z$_8yt`T%8vHZFaGvO$+c`~ltQ0&+DdUxKch0kJ`QyaYhkXPGcCfQDQ^=k0?Kw}WMHU+vO(LqnxJfNMh1qdAT}so z7#J94bAif#b4a3F2$cX8Cd;90P#mv@vO(pxY+KntjZEFo1k_~J23 z$WHw`P&FXEpsNExYCw&b7f^9yQ27tK(j6oLsz|;-B|wX%enHuwGJt`bfdQljw4sF! z$_A~r=Yq09-38DpD99H5%bj0=q@|hl=U%r*n&gk4R#KI(g1? z`xYH>$t@s_pi@XdD=TCQ7!stHz_X-Vz z>E63EZKnTEjhC1%{a#06`t+3=3DdoWv~8vvuhKAJl$>s0W2+20QUl~8&@tw)(a{&v z>yOP6XJnYZ{@5&WHVM!ek<9c9t2D|bp{+acf_f+$e1)~b^f${Gm8bi+ObnT>9MI-r z3o5EX2LOV)mr!;C61xY)hBhN+AhDN#+0$dzXedwjuV|8=K5vbNCU}QBXa_W?9|}q- z3=9k!NNn%|cc{1nlDH3u4a!}hM1sUlL1Kfh*@F!fg4e)9)r0yvFmYZ`2M5MkF#SJh zC<)YUfptfZfXoBcM+^)M7m(O@kl3Iu2~7PLByk2%zZt5R2Z;^pg}~ISAc-45*r4V- z1A`5O1ByNd43j~hj*RBhTh?hP!_HX)waOVSr*B!O zp)3h4=RkL|!-jb*Ks|cv=^sGS(9$IXBm`xHZcb;kovyQ9Lzx#^W-I|oJ4}yRuhGv7 zo&0qG_456u|5&dfH~sn^Mvdto?&-2j-*<@JgwvrIvdyt=di|zJ^3%h@mr6{J;`R{W z^eKjHZETxvzgSUzI@^Wy64T2TD+=&-z$6$L7+9y@->WG-ecQhk64U1;Sqg9-0bSGv zUc=FEyg`2YtRLAD)4QV81bAN*Gk_1h0Uh7LIsN=GLusZ34Ab}&#inojwOW8Pp@e|} zR4lYjuh-9$XS%>JeSv z>8CF(kY-|FoUWiNE;jw&r3C`h_ifVPPy$JUT2`Q4wxAL?A2fBq04bS4F{#2heZz|| zvFW$?)de^olrk`Yu2O27{#r;?o@oXn_`+~m(9{P=KdAKu(qmALuvm0@{_6G8ObZyN zJH&~JO+OVeT|mpD9N||`s~n^kWH;#2JTJ~0aUKFP5*D0C(p#gG`%5MNo@MPD+>fPdnzFNxHW5P($kwX1SF=1HR}mzhEzc|1%o6(tyGwW(?D|uNEYsxZXYKmK7H47V*%cZDumZm zr%TV!k!E}Vk@lORBcSyJNm?Cx%qJ+gz-1(oksQp^6C}FDr)szIa|TpHjhwFi!bG0Q zfO&etPBF3RRSnApc=uF8!;67|L3{fDyAIOR|Gf>9U{szi{w_?NQFFTeyD)Vj&}9_J zkrBWQNjg#N=>ohmH3(lCOqYLYBF$97JbiJ0ZYjn>KGVwph~T$%df7KW}3k<{liZ^F{?kITQ{L?0+4U+)FYIF3LlU$pja{n z)gef+B*HoUgGrvaCFovSB<&oH4B!K)K#l?xR50zqXxdFUr$4CG7Ms2;Yn}kFMI!?P z=(0qRCdcXXU1Oz9cW^?krUN+%ghA$j=t4C67Bn${ciw@tI!}*ZQz^}~g==~NkD{0? zX#N4D4HgI~t%%5Wo&G*hRGR4w*Yto}W@6LpmX-+ccC<1u8~~MR3=9nJ)8|KdOEYP3 zPfv(Q6|*{nW~)aVBI|(Kav*C!fdt-Ah7?F8+>ivYO4LI@SD~GO0o45gITh3thG_zg zU?Qi`9o!5InbV&OsVHkLX=h*nwM#%+KxI5k3+PU6WGyN@kbJ!>)kT1_qXSmPo^H&L zXUpMXVDM#}?!qLd#4FLsz_5S`l4Js>$LDcLGwtD>-Y{E7Z2GyMd;+{Xx)E6_c=~zw zSZSs=ywe}N4-=biC88q0DbWKBqUqf4P2`yZ_@)UficPory;eZ$226^90epBe%&CV! z)iP3$?BJWe;a-;5bT3^20p1zC3=E*29LRr>)AxsnN;C2BPfuVH5u09@G}sW#0A0o-;fMh0~Qu)L{oi$fBFRu39;$B#8d>BZtzbxm~JLM zJ^yPMzt)#NL;?i0vSC4VfDN*NAJqB>Ir|C!bcMZKVnTP&Ooob2uUl0jpe4}{tQ-X^07d+9sgkd6=7E#@J)3chJ_t zX3U10S=fXx>=6?as=zb_Z0i(In+D_zD1N~|{em#RSUqTf4-{IktgO<{zyNBWg3=9W zKQ%}Wl>e5Y=?5)K&H?pvcUu^2Q;3A6Yr z#A1+ENR@Eklz{;>{s9$%o&62I&KRT#<`bP=3=A^R99}V<`>=*I^>&$VfO=WXEbO2q63k5O zm7p4#g*7v;gn^ln?I-9WanMF~W+BizCT2#C0wx9qW+qlpXPpT&pu{W&8WCdVU;iNj7*@V2W%Xy$2b`o7}(Vr85mfPg9hUmIC4_+7+6n$*i7sfLElwkAWkle?_z`(8mx-?$u zFsS@z2aV!$NQ2lc>`_b%3>-3`>zX;(LAR81$b!Uq*uf%lAhrOzJ2L|VhdhWa!oCG$ zj=~=%1_lZCS0Hgk5L<>_8zim-Vk@xcvV-O_l|cuptFZrLWMJS>F=J+6&|nA6TXLv^ z4ANl-Eo$IU1F;R*^FV6UL2MItO^|~$Kx_;4X&?(UL2Mg#(0T71S|GLq`(BW^b^tR2 zgA4oO=^M{$EMa^(J?w&pGE)H4^y&*5GEDQCrq8^f5f=zP4PobOXu1ZSM8r4;w9#GI z0o2{u2?~2qqe~KWQa-Q%K$mNV#X zEyfifK~SOu%@r}u0qutu24!K!6@ttR450B@De!u&RkIF;1KQ3`A*87rd;Y#h5qU21L!8 zo(`fOPM-v#+^6paQO~Ep08!b~g|BFYGAc~ZyrQ8M2#QL^5|}NZNe0F_e4q`>@u0vg z0l6rNk%2)HG*!h2<}wCDf}jlKc;*Vm`4GpKgLE-Txley`MMKXSlv)_GV8%iMa}LN@ zaA0PE0<)QsfdOJt4#*^UVCI7C1O;a3RSh>r?dfx_YDj1+fn1XSk~s|5mITsIb1%qEJ|L4oR{=r1;)iOIKhz|U%7E#C*EB@xSp>uxqZtjw8Dp3x1~4!Pfif$j z0nB(%i->VfEol4kYf$sf0F-{zm>3v@3qZXf1CVX*Anr_%kziTSWe&nUU|EpjP9_Eh zNa`{Ixn&g-0|O+2j6rT;2gOkEbq!6%y6LsoHFOyxrmw!Pq0h)U{q}VYX|;zSJ1>K7 zRtJ@zpgSj785lrgTAZ4SpdmF7<`SQNQC>)Nx`6<*^7Qp;ChXgzZ)i;5;Yuw_%`1t| zO)Soy{_2T_C1-I)eo=`+W?sp3-KQEF)8n6N%$5rE^b4_I$jwhlWdJK@fZQ%)Xcj+R z;+cl*bjN2Jt!%|5MX8Co(@#Isu;DC7EK1BxElDk!&h=bFmn$W)Br(1?vnrKgdchYB zvFYr0Ci6{S@JxwiI@>B${^{O7H264RmkdnreXijkn46fL8ef!}m=d3q5}%loQZ&8b z3YW_CC(kuPnUeFT|LatfoSyPR}y)QLH8QBw) zb3k@(zwk<97B7pbg^AJh{yNRi)8`uV$Zv1>squ-G+0?>hd+C1-YX@;t6Qqhz0bUbM zfB$5<? zi|~ptm>FCVf@XA?KzBC6D?-q^N@fmr(10&93+rxBeaXVUh=C!U0bCJ+&O>Kr(NNG@&#Ky%fJ`bd|a(beVrnnkta*10Cl*L%s zMVJ^ExTQfpW@88470xXKVskJs1x=slqbbJ=x;chNDGwAm?5C%n^wCuIRA**j;Ia6` z%)lVR{*;k{fyaS^1yrR*fa2Q~v~W>|9dwW%kN0tA1_lN81kmA4fuOMi6?QdN1_qum zka`XFQ`=2_HRTzZ7+9x=`DrTEgVxnB9#aNY^Pr=)z(?#HmtcaN^C`R%lx0tVYB|s( zjmSe#HFNqPGvt&+5%BG#=RjTppXdu-EPNis1^G!7q>S@TfVFuCX!9H8_4AX zpeZTFIkVVdx)(uo3!8)bg^S;SLYs+!0pjmvAj3?V7#PIznWu{cYR>Wpg*PK;)fxlD zoE8q4Ia8tLWPrkN8b~9kXKI2l7AhRy=Xfr?R(p??E4XN!R%lo8ZyW&lk^ zGtLR&1Q|MgU67`Co(E|*I)M@gBdE8*06K4vagI0_NI%FO z)lf&}gMy|8q%j=iL2#tjgSepl4|2zKA zs`5|YT%ai=2vVDzkyyl#lb@FkuG`<{YRbWCY=JyYQ>LVn>47<#BGYs8G!-pM^NKUm z^HNh3z?#xh6H7{qQsWB}(^HG#SNJd>D*@Hesl~<9_vLAtP5+&zDLXybn^Aaryels| zTX9KZNon!)jRl(0(=UG25atIv9jYU~pk%tQwyNCptb9!?evl3Ed8N5YsYM_~(*^nF z3s2vcuPHiRze3Y&dgBIFk?A6C@j}zB3pC@E6LWI%lM_qwi{eWdT!RDRef-_y!(4-$ z{DWO#H|9;3&(RcR1-DtI$A@}KY`<5aDbL7~R+O5${ZFChNp5CS3&ZIftTjZKEDWbB zUQ-ojG@b7FU0amd)WR5YZJVjZ^n)H#M3_x2Os9h{bThSpTWMMJ=LaU}NlZE+o{x(e$R#OWzGluB_ zm6|HkbJ{dHSxhZVEvGMZ*VF`aSxqgB%^0RHtkKk+eitHbWHLRcNK+PZ50j~dp~ZAY zcTJ7yHtk>o42>Wu2Wp;)<@CfnP2KHF+BH|WNSK>qZQGbnyDBEJz2=N&6FavNsICJI z2KO*cKX`{*YNE?QQk;4!)G{MBWkd1+Xc{Mu& z1G5-t$tDX2>jqE_&cP141CIGRNY)6{%V%L>{Q#0+VOIuKSS&0o?DIgqXBN;=`0Ol< z9H8}b9H8w;oS@9i;LpYa+OxzAI%J6j+}~$TW@2D~G;^3iV=gSKK!*@AF9+QVuDBmG z5(ql5j#UYC;4cd!lOP)d0~ZJDF(=URxj&ev&#P1wlL8${#d;E~f;$4F@f3*7#%;$q zUF)i*6w^75>26mw&FZ&-ED$^is;&fQaWF7232p+7K?q84GBB_RHnD@6KFo7j85r2q zY8e?AxY*e3&VlR!t&wN92Qe8KctLKu$H>6I51Kb*Wnc#FW?^^O2^!r19T3MM1v(f~ z2*l*#;FRP8HC|q@Gca&U@qvm#r~z_JPy^T*m_es)a!UUM8E}+&y4*EQxq3x*1_mx^ z&@L%14ldbJkQui@LUN$C5(77A?-Q52Cn(?;n9V>E3ZR>_MWPuQ7;3l`7+Dw?xUHBO z7`PR|$L(^1+F;yDAT|rP8Ycq-xAJio1_lo9)oct5+^Tn37#MiCL3@I@)j-Rd1-R>* zKqhDivobJ2SJ%}B_Z3kkzfY>qI&LHz$LF@$XYLGeZAa)A3AyYjA1Gg85lfi8dGRPa``yB35 zAPv4Cb^-SXP@MRK*d^Sc#md|PphRB5AOhL|CBmZx+SI~*nSp_UN9QVNkd6B!s9C8G zi38A4nLI|J;5Y!yGx3;i1IGbqy(f?5HkRoYH#Ft!^H>=ecqKr|je#2!N4%1tRL#WA z%ErLJD+Ll~;eG>ROM}GOxOain%YfJ%49q&L)2H6hT*vrvy30*X1y_(=JklUrn6Gj$ zF!0DkvobJn@$krP0fjhd5dn_^Xki2cw>Ze1%Am#JEZl6I3=BN#0iXsx1M_~C=__w) zs@4mD>Syhf zpvDISlFY|NT%d-LrUXxJVnsYiGicaidgnS-?dgnvG$p1dm8i;2U$nGTbh_TH`J9qP zskw=nd6{|X@j0n^=_MHq>8U00NhR@R)Aj6(G^ZP^;*ypEJF_Gn=KNGp6A9YXJi0+u zce?*4O&PI_#Nv$j+{A)-u#1XI5{pXWOADqeY*f|Zfwurb13`HUqE)6Ftz{OT{`tM8 z2s^ml6`wX;@q?z(^ydpRgs1<0r^(4!GJU~kP08s_S6UUP*L~I$6D=++09`I#9G{ev z%8;CxlarK~oIO2$b+q_&%Pp$XpsSCy>p|B|7NwSD7H8(?F%%>gm1HL7#6z6Vkd$AV zmy%di8K0Jun2sh{%utk?SX`W%o0OB9!T^fblFEWq22ePp7J&?lFJS~hIm#WHi_j~gNrYoKHl$`#lG+UU(&)?5=`U4FOdH#He z&l8K|6N`!xE2kT_YKlzX^jlL-25wwxQDSi_13W2!Is?-iOH`%!z}LOU7Z;=^XQpK) zPrq2KDm~q(NL7*t)(j7K4Dy?0PL)Di}#ka!Q5AZSn_QfEqhauP#EVqQv4 zDnm(8VqS4>W=VWnW?p7-Mk-hiLlEBHcX4$JbqD8w%wq6(VI>2orv%R#(^X1Tg{EIP zqslS;Qn9Mgv=UX;=_XdXb<=BC%5ZGY{jOQU!fa{|Y3ehZnwxC@^;@%x6)e=wsAUEg zI>4wkQI{PyHRiBZQDS?6zE-LrLg+=71f#|DgA2?xnJO%&D>!OdO@FY5k!AV^e=Uyb z{@=JcKwOpSbyfoW(=R$|=}qTPRA-xR=%l4My~|05UQW^sAFPe15J^!fYzuo z34!O;7&*4FF)%POvAzSD3fefqBnDbO&7uX;Ed^?xGjXs=GBPkQaj=611DNVrSV2Sl zOf2l6aRXKsCKmQ};Kn^@aFm^iks}P$SpY3oXBGu5X=Y&ojch7{<`7vx{Rn1V&@3Jc z3m2$?4?6Il1$00)ixQ{@zyjJ7%c2ZwG%+zU^??QnIarQ?Mol@tf%+!L*MX1Y=K@Xc zv77+uVB$0bHPcUm*esl(AoeK`n~f7RlgV-#q?dyMe6av%_K62{emMin^63v;wbbe- zgVql4hk&X_{$$XgCqHQDlbN3z)Oq2L2K5;jSnh)+3DrQ2XckaS&K3dM5Wu3z!oa{T z3A(n2jRj;diwg$>1BXATk-*}>#lXNR3p#Q@Koiu~dMH1?xkh{4e@ci2{17*u(5y+0~Z9%GYG9^WMB{i zDP~{+o$Sx;ZU|Oj&cwhV=)=UoAOs3iBvk^ST@eD@o}ke)&N-kaxgW^c44l=V1q0lH zi$NU*&eNbKa0F=9l7rI;)a;E0jsNm62!f;`rhz6=guqS!+s?)UGEsO369WSXgVivw zv4FhF#pvZtYmyHE9GRgvS4tEU5rS&2#p!CJFl@YYDoF8VSYt61_lv+CN>5J zQGU=4Wifuxf?9EY(Ao_N{#Z~Oj2{%pQvAn3b2t2;lNDt6iy0XhWchu$85rdFK~v-M z{34tT3<~^CEDQ{a{GcYL5$^V{(fkBHOv~gXVzn7DNL5E*~n}I=>A9T379s@L_?z6eFFfj0gjw@&22agr= zC$TdyF!6&{VleZA;(>+V3)Gb52aTe$F^JZIy0xJ5Lcr_Y80Rbj4HklSn^uE1=81v2 zS)hSmanKm>L^cKn&*cceZKqF|ILFyz!LG4B#=mKl#uxx!CD+7a6auNfh&m!n# zvGf^s1_n?U2VxW0r2Qb1K+~IGhk|x#fgI`$>Uv^26ciJ1he|NUL(E|i1Fg+J1u_V< zdKwgn4BT@-=^tblFQ`xuW{?3nM;5g79sC1P($_C*dK; zXL4^qeE`q~0dU%7oFfam1Dz4HsfPhFTPw%Lz#tD=oyzzely@0}Hd|hJq#$>KWKrQbD8sx0o0h zRA+(uUJjs$fP|Ua4>kq{5av!$1NGiPnAJz^3?l;r2(u=rw{tKsfG{r~qZ(*qA_#LQ zs)LRn24P-)Mm5lOG7#pDQ#;SXzyQL0yy_bn85lM)GDtD-S8=L=#tlH2k5BC^XoD%} zcFm~iid!Q*K#ls8>9Z|u_@iIG8&(NK80 z!(Bm{>65=@$xJ_L#Kpa!h&*(;08-3bQjX$g?sq z^G)BwJVREGQIHXID2`HR6C)$YC)kZvn(YgSKT&|WMR69#4uD{gCUPhlpB={3Ev za_k@;1B3eXi7t|&)0Z=5N=}!HP}Zo*A$&z8loj8l3$z&kx42^j87~8ak!?h%Pjr{53N3Y~tK(M)rCW|)@obQeW=+3Eir(mAGI2-A|8-XEbQGfhuS zV7qX*RsrMmS{5^n=?zP`)VDv5(Bfd6Zs0MOWx9dd9QNt&rY>WjuD}<@GF>4`>nBrw z@pQ9jtqA7);>_ua9A=u+4_KOKO>Ynt*WKVC!t|4|TFa-;u`xHCzA;W~ z|8)6x%;M7xqP1A2UvTqfnSQrbPI$UOemnPc{*@W*;OpqOACA}h!8rZ%q-gQ!4-&Qh zPOr6@!!iAx=>(qXA5N{|na*);jl}e|HgkBUCrGpKOjnTO50i&8Pg{?WQk07Q0Ekwo}kakGu5`?h8Aw4>3Nx21%jaAB#>fIQWRnkW!N|U|K?tKLC{bwNElSQ2{DK> ze4IYrMoeB2v?>cE3@YG+7$g}~pan9h2oqwEW-yyRKTFF-5LAM|=I>R&?tPP`6*f5| zNedio9QnnW@tJvHEFSd8Y3!V3gnmEo%UsY6}{S(V3nwjZd6WZCb9D zI3wHi07*0P>8mem@h}=pKa;Da%xFCQL$21Y>5uB?i`0YKchVq@GLR-SXe|Y(8g4d8crSPh1tWWDq9w zA4w^w_JN6WPv5_>T5(}s2f8!VDU5g~NdAj_9P2%<7gP))}z?(Cm?9)g}FCww8BeCxyu^%I`Um~&J zBeB0Cv42C@pmq%d18BYh7O3o?(M6~uq>Jzalxzc?>w(G}<{5KwMwp3ZL>DqcSoWE5yT9<*T@ z#D?lv3SvX8UJYVHv*LP?sZjPVB=N&YZ1A~HP`%ed;-E2c1_lPukut(iHmJ?dC<;wq zUqFhW8vcRUpn?fB)5XfbzzEgAgTxj^VrzrgP!E85EsRjMEs{9sSQyx$f#BVdP%}fp zXG1|bB_It@M}VeX7(vSc85kHqy)0oUyAz}a%ASP8o{hu?9sdH05YVC(Mm|t*Gcc@Y zWnd77vbTZMgX{vOmpvd3s8|DSdj%BFhidriN6Q2K@D=y39=wI zR4*T>?*nCnPIH0j1+Pqjni)0PmfEN|b{%Lkcwp&kWC3G?h67-1(7+Ik4ep2WPnUTuF1Nj^R!fJmUIUaVpgA)V z#D?a;G7uZ;67U^b(6spiBo0k$p!M7^lR*WF5Y!yd@-`3~RO!2e4r~IAATTg6_(IvB zIyw--t_OGLQa~K2#aU1`NOK;P4XUvlL2RglKu669aY0TAmIfy6*lnrtm=y*9H zUP#m80aP612++K)5Hy6q$5rt`917a&B?M9c>WhKSPy#KG0rjlG$5rt|43dFLfZ9@^ zon9afAU&XUWgxcP^n9@n@9A0M^LeJ<6YFrC?j2>FF#T|&md*6d?54tO;2rC{(+yO# z^cnf52k04zPgiGLq{0I&_DVp_km-%t)Ab?ygX0p-O_+|TP1k7F@?+vrpI*_dr8V6t zPE2I_yjkV~tSagZ3>DK)H)|I@7j)1_Oql&4D>DoadX#j7sB zbU=N2MvIo(^jAKC8cb)@r|)RdQe&Jl{eFvvFUa{g#|cgXh1fi znM|(_Q<7(DVVow$FE)LZL5~1ygeC)n$Mo54TFOjw7^fd-(^6wvpgH|To0i)2BHdz% z>FXNw1en%nPPb^+Qe(QpIQ_s^IkD+w?OFoU-Bw3QOrO`TCBXE8ary?3^c~IVH`=w- z*gBX%9ro!g9a>6k0on`Q}kZdV7J*`7afN3iCbc51JvFUvsS^}(p zj2ReiOkdogrOYJDGyQ^&me}-rAVpV9rhn+rQe#Tx0dH}cuGgt0z*Jy5-Jw%Ujdd;$ zXeVoSr|{kOQ4nU2a&ztE+n#_FNOz~C_b zcbAqjQ-|vGf+SV3>1N$p!id56wTj|QhDOsBrTI0P4@_W~ez#?j`+El$h99r-x3| z($okOf@_L}t3=YI$iSe%q$cDu{lWw-(dq1$;`yf^o2ccZ5he!LHwBx%L05h()R#K-*m?*T4s!D(<`QEX-?leS*t|=$vKR`3le>h-@sN`3fdR4t~)1H|P#q=yV0B-O8*3p020_t-gUwS9pO` zDJ}w8!pNk>GTm~9mI3%|R0baK)=Hju(EI_9EoiQT2XquE3lC_UEh_^Hc&=Oxw9tVC zbp0e-4%oS%UKU$1=%!y5(C93C8EBB0g&(vhM+z(oTARor4Vo?BRRS#o;gARIC;%7M z9EzYblo|Nzlam-Yl;S{>6?|7f%Q2KehHx;jfX-UwP{{;I%wl3--~>-u@Pf8hb8v}+ z7B27?XQnf7Nr1e=z@M0z!oVd7Vl(m=fY?$XHWPnhatQ;MG>Fa2pIDU6z$F7Ro`r!0 zbTcBC?0QDff*9}!K9@XbaRrYTXv~1;6sQxx1KLHz#J~-aRt3!z@GychBoAoKHzN<| z@BtClE9(mC6W}Z&aGz$-CrxhEI1~UT#JI^oqb&G;}f2yO*+O$(+6%+eAQD*{CwD7gxQ4j%^f zI2qVjGN;$f(vtK7AELb*rU0~qnsE**3j>2FXrmnCZV(gHniK=+1a*Nx-CPC+aZrt! zC&0iU0cvSf3NSD%WuCrpj+W^3{-s(HMxf=#EdmS-Czu%+BpIU_O(hv)7!4#DV?jh5 z6GsYzIB1FuWPlXt0K7^8i00tgT2hQNr{~Sql1u_0YYkdG#{fF}k8uvD10s4Kl2R70ddL;4^?Kn%DcC}uD)u(5&sXA!>-;thy0 z1_lw33lus*&IfIiXD9)&=72UTgQFO6^x3Kb6D=@;f|i5P%}+d!8+&4MWa1qw(3=YIxq(83_F_dwTlfP(%O*lF7J3=*JY zlI{yIF#JW+2TCU~%v>3a3{s#2F<+qifgMx?f?Uc0ngQWs5CJ(~;U*{pgVtCvfc7jh z&N1L%U;z6GbZ`r@pK`hx7#Nfo7(^Kuzy}>>GBBos0vI$8AXPE_>^v=5X_$|9fR=tS zMj`n)7S+dBVG59a3~Kp;eGEEG5#(bT4p3y6)Povi*gOMrBG@wm3?d+R%iDmWeG(}5 zfy@Q%;%A(r#l^rN3M$taCxK={K{GGPOFK*8SoIObiU-phG*sK?TatASElnN<^nWU7#hy z`dNU1;o5Yzg<6{YU`3!!M<7LFTp)8qrw1?8lBvfQpjKQA4B!CeWe@>{n|u{0Y)*rs z8RS6F=~IkzK=(>Q%DK~^ke&n!Cy+QK!3Y(lmM}1$2WbOM9zlZX2IxR9c*yJrb#=f# zhi8hjs6hid>J6*_WHZj7QRW7D$+%tuv_DginSlXxARDYa0v+Fj=1p*-m;Ve(^!GsS z0~!7goSD;jVa4}7khehV7?iIE@29Ww7UXWYFrnfB760Zk!>d?a%lx$R_LESkf*g;whpoQR!b8ho7FsOp-9wtUm z2!k#gR|BUM7O+atFe^BaK?)&(tPU@`C&q#mX#?9BQBed9X`C zwJ6A?DtsW98jFa73T&`U0@M#FU>R_z$*_Wa+dh56QY|@1UYP_{bR4Sa(^4%N9du8E z3L6#Bo-{@kMo{ViIRrf9F-MGly45l*`Fckfb~UIm09wStzyJzS#yP+F85lHkiy0Ulz*-oCq(HU)e@Nv4 zo_f~l0yWxBGVuw(r=CSX=Ual7{V=ecVp0Q%gTjD;0W7Yo4=P0s_A|lOpz4B8Au==u z@B0UNnt>hEUX2xi7B{jCx}YO77>#`eU|RI7Ss55WnAJzGiIIT;gjo~xQN(htEmS%qYZ@l zHTAAAFff2Hud0CrsF%XZz@P`(f(OF9>iVEP@gU63!l)m~%)kJ`d>5I(GuGSXS7=Ex zO&4jJE;ap*_#Cukm&S)o#`w}p!x!&A4G$cFf(xeoeyGw)Pf|Er(Zl8BnCFk1Kj5Uy8y%jH5nNh zfsO#ir6YyR|^0mdTJm#ovWkOVbyK#DAmZ<)D=N_1;hpA3=j>%pr``H1}F|&rt7ZPawlMlG&WN%fcBa$RhDUY50;J&Wf z_6NSD;f$bV06V5Puvzd-kKLpdrcjcZn_2{#$HJxj-mLlVa={lRWTo`vxFWjt^#Q1Oe6%cRkbjdARGK}WabGB%i zG96?9)6@U7=W$NgSfa{1y6VmN28rbj__=c8rsz8=9Mla~81G?`E}edMn-<4(&Fxy&OifJFKMGoi zOt0FmB{lv0Hm#uP&$esHPv^a*&8fr8$mztu2)@n)zC2+i6WDHa;f>R+c4#R~KQn77 zhsJIukS`$q$IyQOCdtV?J#2?o{q%=Bv@&GCu>@IbT~HPRiaz($5-{!QGCgvqR+U(3 zW?qT0QG5wQYH>k)PJViPc~NFb>hw!HwaR(H@g1L;!T?%@J2@~}YkJ8pEoC>zMtqC- z5(Y;f#~|PM;1I_U*LY7CA6Ev*ta?sjWqfWiLq$kpaW>e#R5_Q->tmfm8%S7l1pk%V&(Mu-CAPP7wy)vo4&YS zNpw1w{6^mC@Ahbk8G(*}0a*|6GH8J{%xAC#!k~4?U>AZ@WqiqW`#oBg(^qUa6Phm6 zuPiiu&K|8G(2{eZ>CzhN{L_v1YN<~*+T|iXJ!`L4^z;wGsyu-p3n02n^K$Z&v%$uJ zf+-%fpgO-eJ}E!H1kBGZW=JYYj)%A=u_(PbzJwt;3B1&v!70Q!KETr@-Y?X5x?G`| z-1HCE#cHO<>#Fii-?C3jY-MX1Oy3{m#xecE9BYp0d@}+#reFBu z%`x5JaSq3HJB=!i=~MS>8B9;$juMzY;j|jdbpO{%9McstR`Ex;9bWveL@{K z&-4wTg(18Lv=XK-Fw5eZ?!XhpGi|9o&-4I!1&Qqw4``JzPIpjd;bAnN&bZxPe7fc# zEft7>)pUpZ(c-M2sTrl|a|>6=vx25yn5O&ZE|5o7G5yAi9Es@;nhGq_6Y}#prZXPa zvVqAb+J}ix|6!5EGd<^@w***px>&5C1TU!V0a^+HY9T93zc@imoY82yzQY7@M%(F% z)A+?1d8g+(g(*)DP@lmwJ#)u0p6QlHv~EnZ2~(NA;oKUP=?h|5R!;wWREuM}>P0P) z?bnWKbuvy5KBgro4vq!PSeYJpOiOrrQk3%%)~$(+`T-2{W6TnNGhrOB}>7fo#n*n|`oK1*F1odSj#s zNCLXu)64+8-IK-C%)n&&$CFy$A**ZV%#KroGfT~lF0BEL@5j+wE;z2Mog9&)k z6o?0^<{0752Z?~Dgv=ODO<(;(SJu!1d=@827@`ogxCq39U}gp@hG!5aWH~5<>vYE_ zD*4kNG-)bKZ+NO=Fg?L7bY>`e;O7nCeinC|dZ(qOv6f{hB(+%pZP7yQ+DFil=x zVS2%e28HPdzDf!)ewkiBKTdx7s`FZYj5^bQp4XCR)?=78ef^w1aZb>Xix7hW!;b0k z%2D#uqb_J^fa_r)1|tU0u{j`@fNFIi1``IJ>H4Nc;`N})U5LSqK?5|z$H2eKz$C#}|V5pimNGaAsHwF&{EF-GQ@njrJc3{iL%pbaOA+vP546)?Kt$#medH3d}YgDMk56#()K z10!e-5X@p=VAP(z;Ifwf^ytGPJd6R;FYFT$pRSzAC_J6*ik2*+|MY@j4ROYxsSbML zj3Lt>%}FV#yr!x_c!oNe=VQO!x)RC%UV&82wl%uP<7qE zswDxjX7x2K8(vUj6;v328oklee{5+`p6*@9$ioXd%maF&C}Y6%0}&SDjQ-Of+|Uw7 zb^@d3bc0?&afopsS5M!qlq)e^edlzE>9emZz%8!6rlkT=#Lb_rJw5M+mLN8Zt+zGs z@Ing%&{2AffzzZHi`zm)K&1d9XrK(V?givr&@dqbc&1xtGV&mW@#;aJp(u z-xW6jbZRvN17qg2TUz3b*3%_!X(`*!NY9N5bL5>3*G6rIU%mm4S*dY5si@6y<8bHH| zpjlLq1Srvg*xb;P3Y3UI;-Cp75Su$1o^J zp!pLJ8y2mgqC&*69un*z4mXHkfSh^_G6=L+9Mq=a23@-X3sO+Bg$1b-Qjj`9;vN)A zB2JJv28SqAJ;+fYaggsp1K%JvNUbF({y`j&1Srjb*q|T_OrCnCYX0GgTr zjg5oEK|z`e$`MYGxCfo=15yJr57f{CsR5Y@(gR|H!V6?BNDVxsofsJEu?Dph;ty2Yf+Rq}4r0UN4-_RJaZvsTu|d;EAP0d)@IVd) zT|)wztplk6Rf8Zl%uLW7&meJ7$b#4~GeLSpq!_06KGfm@1p=sk1dZ);gA8S00MFBb z%m(e71WlfR%m8Hy5F2JTr~?2J2e}o*hM9c`6td0?;64V3jgovo7QvE_3ncl}gG)sh zr1ay0lzyNZ!0E>YDgC&B(hoHGK*d3x6oHxpPChP>5*wU@Wf&MhBa|QvQUeM=P_hw` zVW>w$sS70iU__}4q$b9QQW*wtHw+Y&AVWdP2gHVj5GZ6o;vmO^*su@+m7gGSP)>~o zRl=}b2)eihBmpu6#6}4^(Aq~>(78f_4jgi>NFnEn6mn4YAj?HukwVTDDda%nph62A zbWnr9LFbATbaD&~ppj6}%n-;RQ0~bB#W7SpXjB~}4k{EuW4j_y^`LnmkT^&^==?bl z8x-WA-J~EkC`W>ZeCuHvKodbA36O@HNEU#uwgQQRf)_Lv4^t0v6i6H%mvTtC(-lYV zbj8S>^^l584$_1J1wF`65Dmg8ap}syfSx-+btK3^ppg%7^&kf+OhJ5*IiOq%V#CY< zopucp2jx@{n>zp${tOHZT~Hr`q5{N*wJ$;05@Z2r#CkGR4JcE9*f2xE<(Df1xR(uL z!x9>}EOTXG03|*U8`iQr4mAhV7CjEKA7&Y7ZVqG_XcYVcR1qlqfY>n0K>cx$4?txR zhz+w0v>*v24ywpOY*^w2tsEBtHBuNLvq2y>sErFsFCcahyaD6}N!6eh7Dxh=Sio%z zH%RIQEeaMBJ3^_&{t}sDZ{0Kt_Pl8i);x3D8gk$g`ka1S+{fYCvfZ#D_tHNn*kyRVuPXr+|qZ41QCeM4Jud|!0Rv= zKx#mt3>p}MiG%t@AaPI|2gHVngU$C~0M*M3plyQ;A}WwL2TOp4GGG>aLZTXEnTRJ2 zi#;LnhhecNBsoAVp5CxuS&WH0b6OE&_Vm|WS}N0zzbciOp8a}?%5-gRJ&EbuFSS&r zvllZ;OxNbrRGD7=x>RC%Ge~SZm^DRHWx6zvp2YOuAhGWtb*mq`s7%j(Qz|k2b-oVw z^txAClGB%ixa(hOsZ8hQ)svY18pL{D!YDEQwOX>u^ys&x64R4kYpG114q{oqo1!xP zH%OiINgI{v*Gm~Crf2)jlArGOD%@kb)zK^-M*Zp6s~Cd~L5J=$g3>hu0|TfL31fri ztzc~M)nZUJ6Q|3+4j1YR(j2A$UlQwm;U2UT+bNzHX6 zHt4uFn0nCJYK&IXzr52@mISp<85kJ2K+89vMu2yJSxq;1ucfRC6$%1LLzRLK?1Y&F zK3!6Kdc}J!cSh~$2i|K1^Fps21@BCQC4BsO8S6KfU0imN+k{3}Rqlm;ss^x0*iX zqn0vEG3Xd^M!o4rK5DtEg7(@oFff3wEM^4NwV=Wcv{(tMTLHwjnr`q3p&NW*i0<@+ zPg?qny3;3o(o&X$DxM8e3@Q>C7#Kje05ghBx0&BBSAPa14k}I=7#KkN+!;XyIcT#I zNF1sjwDTM`0Qe6{oEvm}2Go3Y5F6@YT@V}89{}yOWM^OyhO%uy;!rhiAhr&uO~t^# z5D4Nx6@`J=pn?)~ZwQDD4fh-n8>$9$G9S!AT}a}yL2RgJR)N@{h8qI|!)6d0D!voM zhMIGVy`F)A5$c0$ND}vv*x1J#G!0<(B^$8TL8p{S_Zl+ml0}#7Dyawz8i=Q z^?d+{4I1?T)#)Li!`DF^&_&%K385F6_IJP;cyUX8>CU26+Vjgvs)Q1#P6Y^eH$ zAU0?PDgy(U+>!3(OoPkT^t5J%a^^1J&$^#P&jBgRY%rgj$vW5{GDJ$V6fnA+b9^ zY^a$Nk=V14*o#4IEl~I~FfgnHaiE4?1hGLCDFXw;br2gW{s4&$y5*G-YQcYyIF!u+ zx|SZw76h@Ojs_hg4D-DTNE{j}4)q`oG(JG5cfjsq^aC9;4{GUvwx1%YNd~c@QIi2; zL-m3#YGni+IRhFZ0Et7@^nlntGI5;bxf5cyXaro)bKzM8|o|2J*bSJ z<^w2aa5FFnL)lqKYCtEvFhYG>i6q{J#0Fh`$_VOTF)%R92Z=+~uL7~j)v;5Ud36=&gLV1Ri5w2}%IBFZ3fsQEfPph5`B zF$GCLUFrm4Lk;pqVkd&wQ1w|z>|!K#4TudjrwPP{nzIavy&lE}WrCw14%E<1t=)X--jHq_AfNNmtnQJ9ZqcoDug08?;=J5p+TT0|SF9NE~X89unKo1;l|G z+U4q`)%*nq^|iNrnxVndAp9m&lI)q52r4)yCp z5E~LU3~xYe(0~d91H%VC1_og$`!_@!ly(>xSoj$j7@-opNNmt12Uzu_1QG`whQk0l z2Z@0}7|J#Ti9;>30kNTxKhJ_%_Q1%)m@vTVgeMsyRAU4#@^B^{;&&$BTa2aF{hz;`pYb1$3AU0G3Xf6fj zdmRA=1{m7{#D)g7Er<jNbD!m z#d{d7c|q$1U?IaY-M^Pnd3x0W=Ue5%z zj3KpRJ;ON=2U>b91vMI>xeVM0gl3dvP*Vw-393MBXrf*WVnfsD0T3JN8PKJkLQv1t zFf%ZK*r0xS6O;|g_@J9fgh1Q+K|`a{p%S3^KF}%LAPpe_PId(C~VgbnTH|Vrw zA!vd+01_90`0Nyv4KfI{KM|w`WDs~CH*~`D7E}#r7UnI84NZ(cplpzX{zKW^pau;q zXpgoSWSo^B$_53IB$N%B`vYyi6B1)!08K`!Ld8LYh@dkiK;obY3ef6p5F0cZ=>$>( zP5Gc*oI(;14}?I)xfvK3qCo6=35dm@>xn>$Ko*0JTLZB{p#nN<0>lPc20Cj3#0HI0 zwtzHCfbPLzVCaXkL9=0?_17RZpu%pb**sWrIQpbefH_;#ow(DLu0AG8xJSjp5IPvO!ZNbD?a|j+zZ1HmI0m zU|;~xZjMWAfZ1hpKL4I19ofU-eL5l>i0TIuILLy>5ZBL7I0!*&vHggV@k& z_dJx%JiXs1;_&uc`g)9v)9sfqN=%OqP%@al-gmmebZ$+}mg(N_b$F&*2deQ*mlo1i zng0H@GW+zt_d0^p!-cdBrvG*dl$gF+Q{Pz*e4jY97zN!I1{*B;0vhy`m?o@U&I>Ka zDnQK_sp&1k+Sa_#d5-8DZ`I>5CU+2~YpFRabC&y@+rapNcj1{H{W*x*lUJv4) zfOF4-xEj6;44@gbwCVB^+U}ee;M{x=x5AHs0hE2xrtb%FOZ*{Mo2O0Zm(+IW6bN8o zP+(+WNShuH;u-`(&gw{;z8=K=5C~b;kv9Fmq_#QZrRm=Gv(=|Z)h-v{6$ye$fp$($ z=Rc?ErOuVXJBBEo4)$W0_o|GnwCp2Nia?S)3jWTRgQ^)fn)mr zrsc{)pf#wV9rK{J45+!)z%*UJu~2;a?0+r%nl3?*#WtXMWl-7&&HI4bL!fgAK$<}9 z8IYzm)A^;f#TnzKx34HupPnY`D!^M31i6kIq*ZOYbhMu|(-oHK0X+O-)BU3T1b8EY zAvb)3=oes6Arms801rv>G4jprI{Mor%$+~E;c>u_f!F1n2G#T zQsT`?Kv?EDy+4~vn#qG}dH^Wxyh?Hr&^m*p9ki4P<`{WUFA8*a2G}JG3=v%5o6x71 zDQF8YlC2jbLlO%vo76G}wW&;wB;SdJz>XF9)vwzyC)n(zvU`9h$EH^{G$)z=IR zdmyHR&QC%XKEpMAff&D-5a@VXWbr2uajT~+h&fM?4?shlpxpu>HVA{f38FzqxPkg# zpo#><|HB2jA|2EWM-wk#R}=@I;096$#UNu>FixMdAxg>eNdf}{=(a&niUPIFK~{j0 zi7u$rhN=fqOL!Or3?JASl))B*I(sm8$Dmo< zq%vK>u2;+|9L)fgItB*N*&HB;gWA|I{ovXPW;^KE0oCaWAGpNov(faQs7GWkPqLMS3q$BH4_x=ASURbJCGh&&YsZ7zyLZ_0OTG}n-L@j3P@1Lgpq;47<{ZY zNaH*`2JjJWAT|ht3P>Z3pB}16$bcX|6VnT~q89>MOf|P>sL{solNkUtp>cN7b z<04F_C-nG;rENg-=!H&beZ|1Q0BXR(9Cipzzo!`kg8{6h1SJrt!JvyLL3-dG?EmV5CfKICs0bQ!cI2U9bV-Q%+t?7yy+6s)h)15T54fUQfF))Bm z-xq?IA`WWQf!qW-tp@I{5(WlAP*d{5^o1JQ@{A4B4{B(OOUwWr-4Ajj0|Pr~^`c}D zsJ>jfZu$oeZBYeKjSJcJF6GL^zyQMR;ZmTZR6&?Mb-R?N_6El37kKq$r(ZazZ8g1e zoxTX8;Pf~vM)B#s+S(G+Q>_>UKrEi^joR96Ow(2Lv}IYF85x;5rteosl-Ta5r+u7> zH5YWx%k;n>VrA1e?3NS;ZE53}9st@27XaGa#v{+7Fnxlw0?+gUGcBI!7i1MgrZ)t# z2u$Db%M7|9Ou>MYXZitM7M|%J3RbC1FQ_#&oStw@i)H#XBW=0qJ3z!2BW-68S7>^z zu{P&)b7O7k?YYLrAz8Xo4b7h=C8h zkP8w}kmV$xK_w6$)Rq@w5Mc0}F0T|N&aTJ6z#zmRG<~j_w&e7>Nh>&}|9dIO0XmbK zL6AX&pCbuQ4UA2Q9wK)A?7e6Xy*Cr8}sqyy^dcaf)k! zF5YE?8VFvk0m?QE3=E*-l3?QC)fy_(IhHn=G2Wj3|K~b!)n_1+pxRy`u|FcQzi!XB z(dK4i3t5`7K{bck2`4lGuBKOchvT0?3kYJsC}Gq&2)Vy zZSCoo_K1m0&vViiU_3It-bq`Xv0%EtgSzZFy5Jd-bq`Xsexg7!)zU~>Hiov z3NU_|F7K?ZKHbbvQ(}6Yv$g=E$Mk%VKpRM49Y`Qy`hI6^b*2Lh(=MuuP2bnxBRHMk zMO&T8fN}bVBl=>~{amyKI7>hSaLf!0y3^$y)#VwrrnkFjt20iWz8*v^nSLEa2~PhH zqEe=-yK1X5dQSHTQ5U9{gQ&vk^Ibt^N=`rFs;$Oa&B?&fGX1lwwldRyZg6!lUC&Kh zfYEBYy_>c=QxVVfhB#}n>2+?}0!#{0(5p4vT()AN`oN=!e;7{E3CfpII}^nJ6mC8odAStBt$ z@3fM{^jX#%JdB5?fA`k@&iHfsdmrswd0$Z7GDih;gCXd)7)AxqVkuA}1?6A{lj+sI z+Omwz(`Wi>Ybk*;N*^l&!vjVJ24PUC$-^K5Dja9BGBAjO_SY<#{>oR|iq{0xSpqEr zw7L9K-}QG5A4!JVtYneW2BsVEZObFZ2Tyb*u~wd#6wK z)7D}IH2~gBKLle+Pygtrt)&DykJgwO>9+pb=F*@; zo5eUm7hi);44TBuz`y}=mjHuU)AW9SZ3$gI76t~0y9`0@x((gu!T=h`hLqu;@lytn zEB-Q1zv8d0X>19)CLZK_PcYEaNQiwul&il-X{Xp5$S zuJi*9jxc~2NuaZcA*P6eRvd!Fz+nnnzX`h7fiVs=js=Pd(0m``9MFI=#HDc{mx2Nh z9AqGIh)YF5HCXfX)dAY-j-UwT0}baerhoz%WDKbIW1M5h3iEIZ$QW5rwGBa{V6X8qh=FuUgK9q3lT2x#Yc>Caff#7iQW`Wi&w7ffZhC&8wzM|r z!e0>POqF@Xz`y{)Y(6rZm>3v9m@PqO2@?YY2y=#SUlpj`#W>weyHrvgwA_@DAqYf) zk|h&E5wvJyU;rgOP(jAX5al@i;$9B1>1XEWa8I{lpUX9Uez5jqM&IeXL$r-SlN=1b z+joa(t1?fY@_xO@^oj^=o^27@5iD%rsv>!MBa>;z^n%$lIi~N+mE)NHK1RENQG0r! zDyKLj&-BE38V3if+(R{+Fj;PSIAf0hx^05^8L0V2Q#*+B|A(Y>2eY)Y#a_aJpftwiL9T za8S-p36y?77Zm5Emd6+8WF|vyealat-ju5CF#TYv_Ot2Uva@)muXdJ@n696u%`?5a zQ$=|Ct2Axd>90YXKf(JAnLAY^rmyx<03Y(tGu=O3J6aM{41kt2gPLZbrFbAVsF`Xs z{cyUrz9%SUf`mXc2y=r*C_qCkpgNk3fdRCO3sl{L)PT|{h|LW$hk=0sbTchT93*DG z-8w^Cf{{^gdPt`BbxG*(6-bAOB4n*Ah|O&{-6cy~nbB~2MwWIMOFgJH2s=9b6{wB{ zRp|^241YjuaFSsFUwi>NmJ$>vple=XY;jQi2W=Htf!Ls-Yz77f7Z4koJUu`q0+byK z5(jONWME)O0Xj?MOLF++! zq3S^w2f@TacR<0^gBr&$@q3^PP(e4PfPD5Gq#5etw;(pu)&D?js5mcZ+!AVm7>ErO z2VXo6Rc`_khq7&v*#00kRDA@D4Vq8@uh@i2WPv207R&&#p&pe4Qg$h&=`0i1t1nACWm}M%UVF;+9 zS|Bzk6*E9)Erp?M@DcVAfciWP3=E*#ctPuI zK+yrd@)MdSKv#S*LNqWe1F45L#=r;IL-p^_5TCy5hy{;o2S^-hCb-KDWlu&DpEX^+#!y*xC6W-RvkY@P=q_6rd-wGH=_TUR zr-ex*Z09T1c3}<$)dy^#S!*`PegPgR8`KIBg0ew{iUgDm8r716vO!DpRiJFpP#x&l zQXw`52Jh+pWs8)zpDNSNVPUkGZeFeJ&$wiIJBV_aejP;BOjobb_Ger$y&Obcn0~xQ z`}Fij3-m>%SN(1gU}8|1zN1##kMY2C_Bw5UCIO}C5p~*rj0Mw|*J=ARzL@?UL>X*% zuh$l5WUQDT-=M9{cx-xigSIm78x;nI5H?6*r!qZX#$1|FX!`XAZFR<;>Hk5L!*umV zZFR;|)BPK@)tM}Gr&ly;t1${qpAQnfGW|G+@|yl0M5Rm@Z_-w0IwUwczzN#0=D^IrU@`rEo1Q#Vi0pKQP6@H;`QWa-3ovz@k ztHm^dce_lBwiM%bt5)p^9Q9%hYuOvYS10Cjt&oDSbh+HP8P+mEII&!NnHOm>KsaYs z?PXaZ3SsZjQdpz_Vd`=%Qe%WLmrpucupBB}%ca4%0&2|i>CX~Ep-g6S&4jPs^{{B11EIDh*4K5en-ll!!d8P`H&)TojDI15|E8avtZlBz1vl{yGxX@|h1>`+7MK{%bloZ1!HkmA8>eV1 zGs;6K)#5;Htp7&a|5-EKEk+k<7g-@00f z?ek`8$1v8LD?ut%@Db3U(~OOo7#M;W85ll*N-rp8Vq^oII>-!~_F@tO)z(am94|oE zP%^RhfKFFtVqe6>z`$J2%D})R84eoNgd7vi3_2s2Nea|lXJTQ0#t6Erl64(uxS4|; z)c#|x|HI0_z$^+{PQeT+)R}cajcR7l0nN<1plx8xpjw3G2FL`^0nx0Wixrtz*v&zf zv#^6M+GAq@?ZRSW@>>-2;<+N$cHi|H9SLAMGpa;^pi7AHT* zU7VmpVOTgdKn-*T<_PBLYvyRn)`R+BjLHW=p~=7uKFV5U7wCp%4n{SQGq@*!YIJpw zJOj5ns6x~L39~S;v4D;_WL^j=bu~d@E(qFL$fyc-I%qpLDE~OqB_A8x>=a zFsR66)Mf(7fMQ*Q7gVRSC^9gB2TVW=QBVmFVu(RHH4JPlw;3521VIyCjEqR8pMjgs z2s0hLk%XNIBm;_25m0RhG74-szaj$zrs4JATQjf#EPS#AziA44@+|7y=bRj$&iE0y<(F zlq}g;?t_@1YwyK-K~6V>#|~)i1mm2`EDQ_~ryGKuz8-XN2gvD+hD_%`s~lc}#@w<~ zD;XdH42&TPVCNcxoy!<13mW{3kG>m8!TOsfdRBU5MmdDD5#rO1dgOANdKCFK^)xPk(}#$9o&xe0nM{OoTtdZkOewZ8#EdZ3K0|VDFqC*pcDyO zjn|>bz_5yKdgERd(diS^%z39vZ_wt_k_XL$fY%6m1L)44@M>80S1-XJF6(ySN;b$u2N5Ferl~t{fDPjKN^%gVw!3 zY>)?~y~)$F7isG;PM$t%k#?9Ccto`xW-4fVD&w3_957SsL8g9WWMI(P$~0YSv9^>5 zC_I=ziz30{0X5KLG1$Oz2(@gnc8s(>$h93Xb3v=t80WZhfz6#RyF^>6{y3-$*#Rnl z7(=u`riOAcFi3+Eur@f?bc0KTa9Pl*99b>~234@XdZM@(7(jCdvY-WWJRotf>OPQa z&>2;-pb@dBoD2-A;KbAqDtP;t7#QS1Jzh}mI=~4oAL>D;y2^v{5GZ?H0Skijh$!gL zc#s$<&w#TWC^>_394K@^IgW`7Yy`*z5s>pBISyPxK~g;vXqgZ=#ewyK)_j5VfsU32 zrMhwk29bJ@`@tF+ctO=F$oG7kK_v|XJ1CskSQ5Ax7}!BKBC9ZiN~zhP5)>5qpj6H{ zXA9^iU2x3L2F1}DCU6`vFfh&r#XRVGIZbd01?Dn_C_e`kvtTnALqVw`m;q!0Bw0X$ zY9T17ESVV?w4Z@8(=t%hFii~50UuAi9ArCaBOxTl6&V;5xWR$I$_$EIP*`!yo!+=e zTY`16A_If}bjfAf3e(SR(dGj4>!y2v`2V(OvrV77Oq+vg9{2PM8?{C18AL%zeI7X2 zqM0TJh=Gp#XJB9lB|(*RkiS>M(hz8&8si);UT_*>U|?Jg@^>jSEXA(|`I|8q;%f*8 z>T9qG5MMJ$@xl(*1$$bJaU;mr>zSc749M-FJm?-<3-XuFDaG3a4 zGB84T&_IE3z)67tv;_l_612gY<`^hU7^C1(y^|L`L=J&ML_!?o^A{MBho>Ld0!;_v z(;u$TR+xTjv9@|W$QH0y1R2;tE>;2$qdWq61GER6an23UA{RmY2f>ugvfHVCg zkat0gq9KtB<}!vTgX<0mCsY|c@cRgqRv5!{!L{)dP$kD04vuHW@A>si3=E#2o2o%& zFDQ!Q_!$@=Ma?@<;lUWB2r7I)!)xZCGpfNM@g5Ws=`0Kk@}Q##K*a|qKR7Hvd0!qh zJr0UGS+H0%6R61nnl=a3E~22#@~|qZ6m*sm=v*5}Q>BW5fdNz=gn;#dqMbnmv?>-{ z9LR%4FF-YS1zZ-CyNVeY8FWCh-}#L1n<4-@*(G5@`htj7u3` zgSLRfTSiM6K~V%6B>@#C4BR5HY$dz{)MQ@82r4f?t3ZU^K>XE=;UN1#E2d>;g9`pN z;PxbAFr=BW7Qzcx0MB!*gYZK2z?JPYM$q~Ba;Zf{42)YCLFaB1vobKqfG*==+{!o~ z)ajY%APioIw+F0oBIxYz43MpR!F5J`9ekphEs|R49noAfnu7&mO&nL z()T4M28La583y@YMg|6u*g2?J86$(}Tt)^4&*`7mXe;r9n;a(@7#KiKun>Yc!D6kp zGV4`E28M{~32U`=OhFlTrV!Ze@PeC}YdNDB=*n|YP84H|Wo707r2ue+2~vM@`oy)` ziqki2)n<*52OSFnY6m`s7y@nvGIKGoFvx?(gFrHWF=Rl66i7x~7;G_24+n!h=;(lZ zil9rc?AK|lfE}7NJ!74=Yyv1)sv+tjDV5QRK^}COD=2UELnTTX800~P07z^xR1B0S zKqJ*4vF%VXP<{Ie8cU*_OrRiw1kbN^+A8&+v0M&rEgG(fclV( za~eb$7&O3Rw1J?)Xet{6q-i)o6qfL{!6jEHNE>6Y4mi0+fl})WHUr^c*xOtT>>%GM>4Q=y z$aCORxESYL5rZ|M&w)J^1Zi2G11SO5DU}S25Dug$c4RyU%Jk5R7Ni?mr`!SMuq!vk z7#Nr)I>3FeB?fjaJQ*@^T$uiFr#7TgiNuh+2&z;>q(LK-phVe$q2SW=4_mZFI6>_( z(3ZT_(>H9?mSgmsetx62Zv9I!1_rQahqt~Qh=I7R~oXw470L!R+B$Zk-w1hrBb=bV;+)%?FfZWm;SwT6B}Tn{dsZ%e?^D5O`- z0PfUzgD!;!_XiXi7%C*t-TW6^BusBxq%90?!7ZO&xEbbX(3B;phB`R?{AO*@dLGb- z060y7Yyt`?3B&x5Nxwxh;+^Q|YB@e1KL2GZWA{=Y5Sd`$l(r}J&qmSB>X0ypDQ8AL$60kCJm?H7H}rWQtV#)Y7U zKLcciG~*l)4>EWl&IoFZfsRxFJAaQ9EEeGIn=Xa!K1q=KBmdYJkGpw65!noXNQHi0`|5E(@dXqk9e8pEfHFlTNCUmCz#zJ35YL+K|}3~ zI*g#U9carTq@|(D2+qR+%4E{3cfuId>8mP4ga~i}cpn*w7LwIV|0XLDBD8K^T z5FFqwp!<&eLFwKQ>}b%oMsNgdQGf*tq%mU-E`;uaPQd`Tku1P%5+hCq1_e-cQEv%u zaxqPGfV7yb!0iUcP)Hle8o~>Mw2@jF!Hb?i_s21MgN^CoWMB~90cz?%_@G{|>;ce8 z7;+2@kYOnwaL|B)LlGpg26X8$ND`bAeHmjwG84EM7!*Mpb%Gff7&t+);4B;t*1C?1 zfkE~L0|Ub&Sq273CX8U*sldQ+kc)vqo{f=#0ThHwWWnJJZZJzQGBAiMF)*B%erAWZ zJmb~rZ+2))I)YNWyeT83P5d9BT*Q%)0Wy3i4@v|e!{p?^hA~eJU}KQK#Q-tQX}a4^ zZTWgoGbbJ*&sxS%#GnLfOo5sRK2W1eAd+CsA`vjNML;*Pft>)lwhELU=OC*CwZyHl_WD^B;{ zrOlNDY7GU*gS`T44Y4rDgNl8SOctsP2ZKClB_^na&n zN(>AlCtxC1p$z%EpoC3?R&-XmlEM=kRIJ+V>nI&@43=%NT)rq9Du>V+7hW48j~4Mxb#& z5aviS0_~jyVeW7v&{fDF%&TSuI(!aj4jhEPHUeI1{Koe_V@#z+4wAVvyXl7iqJ?E_UUS`In)3q*YYfRTZk=@UAe#iviW zsx3GDz!hz6rqztoFMcf)o4&!yL;xhLGTr>Dwjtwz>5ezFm8LH+H&LFx?y9yt4 zu4-4YFJ%VZ2E#hN@rt(0^z-SOtlJB&XzJvjBNlbiva!F-DYJ5RS zQG7f@acXi&W_}*zPMYG9qP*mSN`}1IUO62FIWv0g$Bo-B?LWChIQ>QoF z*A|&n#Kw`6nFls&x}buF=5)bMV-c6K#GKO9c+m71*gbiv^89DgX&mutaiBesSvb#Oc~1LYaBRsYNC6Nr}nX45@i31tmq(FW%P{ zo-WO*!(E@0pP$3v8XOSsF4GT)|~;qng<;2nW@DfUEoj!MJXr>8FKRSQ&JgH zi;CitL5#G_oK&!rV0Q=Qq?V=T#FsD>#Dl^qJ}Es962>5H@g-m@ic?GClX95ylcqa7 z(iS%dc_zOgHIE@FB|b4Fr6@kHGzSzhd8zSvrMa+>gake~Fu{>gGF?tgTvh; zvSNCtnnran=t_y=lA@H-0*2y@{Gt+YL-9;6cHYuBJ4{~-9nLy)iXix~XEg5!f+ z9bNqWd?FEUpS&?e*g7RO4I01jJCmReD2BNc6fL0W1v@e?wW5R}Cp9mDG z;8YHF0>m}&@CRQ^1Q7#C$EW5NlvE;{368D!c-VzTxv9CJTmwom;JB)cPs_|pVJOan zq*{0$D}mb(?il3f!cZQcoL3TGl3$Vt4PwwJ8q^OEBT9-gbHO)3f#SG?AsMtCBbg!8 z(=WsVqI>#Ba|zMOibW#a&^QL={ONTcwWX%7VbPIPgPH~jI*=SJK*NJPLtLS*Et$^P zVBRoYzgSaX`uo0(9MjK(h2h(-9MeB6vgerI03sed$`P2J z0AhjHxGsFGeP_CWPaV&6fhRc<(|r_Jc($*7qJ4mwF>LzB!hCVi9gYl4(;d$?%TJ$R z#=AWwrdA6T@p*@|K+0?)SyaJZV)L^>dve_ccrUvHIFJ4m>W;Qi2n_hSo z%GhA7A;M@dozZ)W2uS5Y4+uT+t1d`~(R7eJlYt@l1|X1vjRHv`(>?1n#h6Vj&8H{M z5*MCc7il8KY-(sYedBj+5k^a}Su7@&riP%!wZ|cgYuEhH*5Y7n*?L_^jfoi~#hY#- zU5|99iixGA89c43m>L+M@C=cb%$gb+n!wTyq!@)=sHI|JX^NuF2>C)617ibZ3rs8- zg5erX4Nx_jp=dNiG1MHz7;|Ko8CV!@f6J_s#5!I2kfQ_#Xsis>J)a&gpd&LqJ7NOQ z^lp9~kLmxpblA6l;?z;#=LIz@K+OvgX$FSy>GF~~&5S|0 z5?dXKZH>fE1F?fZD;^ja7z#ifP*^iCFq9yj69_&_5bEkqkQ%6~`#@}{_zVymD!vND zhKg@TVuO0EjG$8x7#J9iA&Fn$0v)ym)qE96;w^{`75@ZcLmkHqItdTDa8?M!h8ijj zVnf9hL2RgcBM=)Z?g(N-)q8>1AaT&tNdSlg)sP5cgCszq0%AiofX@Mhir0h0q3XeB z|3TTiK;lr}9|5sJlS&K>3@4Dz8N3VjnzJtnxR{1i5 z)&+qMMnDo*0SHdJo_hz%7F1F@m%(?M*gco~T80! ziMqaT3S&<&eUK*#by**`(zP|y4Wv7zcY1(1p{KG1n|PzebT8x$lA3=Fa$ zHdI^##D*HA3t~gX!N>SP#lgq;LB+k1)TAS^LHABGf*c3(e;r5ys<|1&hH9RK#0H<< z2UW8ONqjAc4He%6VneH~-5@s9oMRw1RLyA+8!CQHfPujaR*c;SNq}6$z`$@{0CFTF zXxbNaXFN>J4lh5Dqv!{YGL73NbLiGO833 zTN#P117brRZ3$vSEsjKDXCbkxL2RgpyM^2t7#N|Nryxnp0578g_%&Q1wSZ zY^eCD>Gvnqi`V}H2|=|<2!jF{>?H<$5F4u05yXb7i2$*o;>jR3RJ;a>JpqZm1c|)^ ziG2{lh6Lti5C>}L9VGTsB=$QH8|n{15e5cWT_6o&gIbZG<*FhK48l;h7DyZ#()UK68i)a z`yz}D^8a%X2deo468k3-n@N;`fe~sM2Z#-|KoE(o4q`*iF+gHlBC(x7Y^XW@qM)rt zP=k^|5>R$I5_=km4Gpe2AU5cDHUZL!cg{VkT_J$4kY#^B=&tI_Dc{Ow1f+^ zs`nj;1J(Qo#D*HmD~8BOG9WfY1A{7v4fUlqhz(V517btPy+LfK`VbHsDjo%5L)B-4 z*r50a#eNlt1J%$BVna1_g4j?E3qWkB_!+qu#Dc2x3Dugn`&l z%hEw?sH4k4Y^dG_5F0Aq24X|iPY1D~;>$s7sQUU1AP!Vw8;A|na2&*jieCq@p&A~5 z*ii9jAU0GzgA@Y;Bb2Rx#MTF~p`NhHMK z4HZuYu|W%m85kHcKy0W%l^{0ML7gBrRLvw18!A2n#D=Or1Y$$YJSzn%|DiKK7eOw9 zvhN@%dJbYk9rOmohHCx>VuQBtF)%Rv2C<=fd8CmFE)W~4Mis<{I!GJD2B`;?|5hLl z)KFIt8??P1v>!m4fk7C`4grZn)x?9?PzR-e*ii925F4~o40Jpshz-@-0%Aigo&sV+ z)y$O!mH$wQ#UKf&hLa#R)X*y+HfZGu0|Ubikb|J?#~^X2ns*>J)Ipy?Y^eBO5F2`c z3X=??)B~L^2+bY!44@-CVRg9zNDrrfq`KHhy#_F4PrxmvjD_~imw8(L91997#Mbe*ibe5 zL2Rg+Qy?}}{4R(M75|CE2Hh*i2z3x^y(}VF1VC)4X3z#Ac&H$WtAg0j2Dl!G4Yj}$ z#D?m%1F@kNIDys(SU^s2@&<`R)rW!De$eti8pMHWh=*zbtv<*Ai9(g^hz&J!DH8iIhz*Utld=q446vYhJpKQv5OGh?!3i)SE;$CcG-wqr zOxzYE4mHCW#D?0FfW$7H{{D1`czp+w&|D<;awPT+5F2XT2@o3^$rnLvsQ7gd8*0r9 z5F0A~1H^`^XOu@|e0C7q0$RLDfH+VM8Xz`QgCU3w6*mX5p%w%pv9pobT}bT7NbHp$ zHq@L=NbKG6pyCZGaRej*wfGc>4Ylkxhz(Wq7Q}{%e?wybM`Cj*ARzMcNbDdab{G;n7KxpR#Lhrs z=OD3*k=W&6HYof-<5^%1q&3-u#O_35_ad>UAhBm4vF9VP7bCG(A+gsXvA5PEadslH z4P>c2sGpaA%V#AZ@LBnmbpHZKxe z5Q!~;#Fjx~t01v8kl6YVHstUQI+qm9PbE6M|jOQVB8%Ipy{3I^-6l;hOdx>J|eNdBC$d1k6>eq+|$>`>nQVrcErGh zbf({r*HNCXwcVPh-WRlf9Xetdg2V>j_y83L?P-DO%|=pF1!6--QtFV{tw?OpZ2++0 zFwkuPFgEy14rTB~^9&60kTfhpVy{7BZ$M&iM`G_rVjo3fpPc?YK}XpLwCe?|?#8d@A%ORnD1D`|+Wy>OoD^AZBwidV5K@u`SVuN?FLbW*{iMt@N zL#EFM8Igb_1U`itstvSz1?GCt#(o$ZbPgws-86l9`b1^MIn&>>=Zo`#&-sArUOT-$ zNynP^5|ZK9rZ=DVQVs=eW`XJdf+YPLi48ixAEt&Iyrvga5-~9FBeBJh*izH&lXa9; zEs=z5k=QOsY>(;f$vVoONk~FzNbFoBb|DfQv=0X6BG7sKF!t2x^-W>os-SZ?VV9bK zukV8n46Oqh0cCHRzW>uIW!~dRLZ_#@r|2k8Z%WaTu>FiA{vC-8zR?eA1QY105-1zA zh8{L{AUfUO)JI$rbeuj+NDHJC+A-Ig{vKqFR;rGKE%^REsCX2TnnWaaDiRyC=pEKg zt(cyks-w&cTK5hUnmK)Xs*dvXOQ|{%^#?)Ppgr27NbEC6>TK9uWp2~wr|BryCxfJ+9j0_7Ht6Vkm{QOgW-vBrRW+>D4Zi#j+Bob7>4mZ*qI zm66z>727bY%#g(Gkl0R0Z14?#P&56I#KVx-Q4ls{ATSBS0SA2=5*s}24>hO=NxTw? zT|51LhK{xEA|#<@NNn)LKGcYfNaCR7;xIoQnI4|06Ri3cN%|ua`v(&H&-C+|I?eSq zpviEksSZeNcO}ptTqb3=I$tIMhJP*kKk- zK@y*h#Ga4DUWdfqgv35Lo!_iPe7jJ#jwbW;`AvcPn$ziPbGUmrCQ76L8Jh81q0rS^=<(<44B%L##&-ou;*z7p4Bdd=lD zx#?|6wgOTx3D6DWFg9o}4Wq?$hZ07y>GM9RaZK;KVI?tr8OsU@A<(`(M$qLU3=9lB zpxs>D(|<^0D1&Y$0|kQ&NQi&BK(fD>5$qT$@U^+1qeDQ)*n{MuY|y4gM$kzK3=9k= zAaT*@PbN)L<^>)106N1BBqTY#AS^}M7TPES->?g1gBI7r+Db7XrO@V90*DQ5`=o%` z(+w`lT2EI$BP_uS9mQ?|iEB)c2(4FEg_fsNKtfRV3=kVy7|sE+r{7rEr3|}Tb`40# zXnI4Bm6$H9h}r=XgO)XWkk|)6Y-ln)GTpgQXLdacs91!0q7=l2I{Xue4Rtu^)(%+H z=@O^}fmY4n6b-FJPJt2))I-Xk)fCV{>S_=h>XUOIHq zW?%rVc=`kt2d#wu0cC^MJN<#OK`WraSIj^IL<+Po3wn2sB7|KJK5SnH!U2uCGZ;hJ zpiNPBP&UZJ;45Zi7#Khv25mh9jkbXt4Y~st#0EJ!9I75vXcHlRv#4^$jf4j+QDL5@2CWe0$|wdbH5&~CyjP&Vkq2kvh9E?}6>K{v^OJR=1a2kqMf)xz~436O6< zRWFDQ3Tk7hB9Lz^p=?l4+e6u)pmv3_LB8>ZvOyyh{!ljPB%CA=8`@vUfU-f30M*f; z(^$c?HYHFA&@s=T+uT4BAWt+v#Xlmoh62y`_t$aSF8r;4HCCm9$RKy3n$_-W8d1W<9%o|slB8?=|I8_Isjz`y{y zJ{Y9_F{liJii0k1nhRxrVPIfb%n7>jO__lKbgB~QDq)ZY&^n6EP(`5K@_V6dEk*{0 z!%#M8qx?xI+n14n;XITLswzNB3PI+8)=1ojiWf67Fg%2^L1*GWhq9{}>lqk6K{=qU z@IRsKWsD3Ap!Z2)xM3`p-e(0Mvg zanR;-O(^>YBLjmzh+VG?In&t`#8GBo0G&y04`qXPp*us_p!3PYKx}CJkO*ai4$%SK zXDp-!xn?F0Dh|rupf!#laZqlmf{KHx8c@RqBo3+}>bsy4rVI=Wpq33t0yIA{3n~se zqGAD*4O+Ik49W)WC|d(%w=pmDh?VlV&P_B0EvV4%5g*4pnH}Cp={7hFX+N# zkQ&g&L(sxW5F50&TMwiLQcp5ia)WMs(}Dz@15^T(kG-L6P(BWVvO(p1ER+o@8B?Ha zP@$9$WrNE3VkjH5(zgx71{JBG906s6JUIi(2HiNvuo%h##Tn>kWg#5~&>SSg2BqFU~ z)NTf48-wmHg0ex2cb%YYQ0)g=BMPz%)SmEzii6q>Ay76b>&8LZ^`L!j8Bk6y0|P@I zlnv@`lt9^_gCVP+>|G2D3=L2==|ls$ow zfdRB?6=W#rk`>URRS+9gN610dtYBndP=T^R`(d@9>`jae3+85lyKY|yUSC@34Wu{IIP25qQKhq7NXGBD&q z+3y$`7>c26&^GT%C>wO5iDx~O1KN4p3T1;1=kABHL7Q)9LfN2WEEho8pnbQXYqLQi z0lJoL^>*iGo!7jK3#RK&)bR&hHUXkuOg}$S$DfIzdAhG_j%{25!O?*~y^ zrt?qM@n^g-Jsw1Tn7$rFHBA2xqOMH$pQ58Z-6>8?WP0Be9RXg4Rt5%8IRZLuM|`?} zDwp(hKm9z3>G!7S2r%xL{(g#%I%CT8`x4sX)Agq62rwE*!C-5qYP0zb$Ejax=NaO=lgm1cz0OOwN^3!$HnPix!C+rjxn;r)ebC{k# zT}PeKW_moYqWJW6AfW}*_k)yWFi$`5RZeXBzv(&xOe#Io1!m}|G1V|nZ&23~pYA_H zho3QFdi)F>b*2eWh3^bC1sLZ{Uk?&n0u{3}(iC94G5!Ax9rfwo_J~PLx0|UWz$DT; zJz%De8dCww^as1S#HROw1PfTEZ-@~SpT2#j4nJJx-b@_<#)9eZXX>aksq{~mn5Cn} zIAOZ|EFE>mis|VfYQyw?5Orqyb`bSp`h5^(F`a$3jyj{obbSzYWqLS>>X}|YTStBR zzK0Vyrmvf=qrkXl`gxG}m+9X@)SKz@b9B@hJ*K;ZD3EYcU7{tqO!WIF#`9d)J@&gm2C8^xyk&D9ZL^qC$H65GQ${egF?`1JX6 zb@*9rrh*Pd-aJ=FnaP1`x`1D**z`Q^YQgFMK`J+JO)n^M5}R%}Pe*`p%5?vEI_gY1 z+|wO|_{FE@i|{jkm_8pQ)WSWzK!jgx`aO`cH`CwG(@|$r;bCClW}05ZD5k`iGu?i^ zjyjV8-*g8@b+PGn^K}Fm-%RfZiCy5E{y{5VY`Wf0J^{uF)9-`CT==JN5CA2r1v&zZ zOQ!2D&{1bv!VkGqFb^blWO_YF>;pf4-4sBD(4KKtflhzXu7u5Qf~8r?*5$fa! z)0>y-D6@Xq#K7P(eKm-wZ^^*$dirG$Q_6;c;mY*iAg0At28I{Ym6z!#GreL!D!Kytx3!^jVo&0@L4}@0XbVU=Je;TtXVeWkr=W zVXT=RU@o8qkwP+Jlc>P-J9`*8P<88qxe;cL40Ar6Hmdn;uo!x-H|$JrU9PpvkW;^9 zKY-5lW?&#vE$AR{hUs;oW|82n!qe9s(&3wKx>`q=6|_$|WxDHX9c9M)=?houNHey9 z59F3;ho6#N^V@q7#MaYJHNU4nTdkuqeMe6^zvP1HNNT!~)#$C!F%Sg14tDN1!=?qx z!3Hy~n0|4!jxgJsE|_Ub3Lw9L4=V@xXV0fi3m8@?L2Ue!1y%(zuO6fVgu&*n!5%_q zP9eey)FI+wLJBc(D401ikf*o)1K46QAvTbc*0MkxxR)7b;hI%E+%RXq@j{5la^2~I z9$UWP2Ry)dSi#O?g_+aybcGPaL|tat4~WqQEDAp2pupo)g* z^d0+kc&4At))Jn6ca4s&G-%Hv?8(dw43|Lt z0gwZsm?;5ty5J2^SBIH}y%~Il2m2f*1_l=BG3<s)+BaNgPa@0WCC4I!Nvu;A&48qWJ+XWU|^U2 z1seMYF(nvf{6U9`Tm&6*CI@QaGVt<)=7QxxBPA@n;I#@0AT|dt=)@#O#Yv!6Gp_(> z(SZ`^#vlRS^Nb7(j4Dx}Lr56vnLr2JvCHiPg$d|TDt7r)M$na=*^CSfoMns*3|t_B zfrABft_ss0kX!_)ufp^nq`oy67J^R16i@=G zt1kp8oQrHD=)7S}8=qpckY;l8T{*#){yT~v^Xf#EL`?4&3W zP)`(eY^)GteH1G*=q@CX=Q!$xUK54M0TWek##2L*f!D5@BP!S+kD!0Z=<*`Lo08fsxgc0(H$Hwc2p z96;`!2f8H$MR_}_a?l7lgCM9s{+ow^0d#06C?tzmK;Gm0&magIiUGwcC{Kc9O6pz?K!Hwn z7eev)bX1RnY+(Q`=3)SO9CYwC#CoZ9nZqRz;_+w z&T}B^LGA?UVVvX34vWllAZH$9WMF_e^8!d6=w2>(p$S^f0!n3=g{Cm5&;&V71T^Ay ziwBbbL6;IR@JWFzy$do7VJT>p3M9|m1zGCE1he!$NZn*6q>_3bXr>EX6vF}nR#Jm4 zHR5GpfLaPpED$^E%RwdR8<1fjOF?r$jB~bezCJ^pxGIu@L=ZR$7ZhxtgJvTR+zc!1<(|?fL#eL)IpYkbFU187|3-p!JzN~ zO+`WOKV+Qa2|B9~>}FA@o53Ly$px$FaDt=0xSsH9|0Pt zW(Q3XfXroK5CjeNgT%lyD6`w~Lp7K_8}$he0HRfq`KvXn>V53VdM#0|$#6 z=-mJFpaz>J$TJ!spMhcml#ChY$n!8T@PnI>8lbk$1kl0y;1W^`q>eFI!4MQPE}%IM zu!k4$GC(F!Ko@8TF-9|bFbIMQ1JIcU+o29A=3x+20r`I$F9X9Vh#;t31?9biybKJl zAVN&V;KoA{gAij3=ww51RRNL*9ajM^<2XP$87$9e0J-%PwAu(P1*&8j4Hy_?K!?aO zf>z2fFn}i880UZ{AV8_To`F#YIq87JA;|%rz?&dVOnBwS%q0g;J`9M4nj+{7W{|C* zgI~an5T%Ep7S~Cp(xxyr$?~p3Qd=D zFy)+Hzg_0KoPj}V`b8^l>FEOQ#vB~1p2AGx z3=A^UH)@qiPCt3PgJ=4KZ&_l~3xdKqOpvrmFfb@U&q(A3l@p4cO^l2nh7!nH(8-CO z;4>4Irw7W3iB4a#mP2rQIgf_W^!Mz(Lem@Em|5gNr92aZ!F&)6nnz}22m(={ehU+W z!Ssi_IfSQA_$0(Sef?SvHe}5{`7G0e)mI5mSBQ3$oo-;k$TEFHxft7Yy$RKvD$EQe zC7@IE!66Rn0E6baK-Pe0Q2U9IA$YpLs|0Z_(COn~)k)I}`8*}2#}zN*m|pPGm4CVb zdld@{NNRe*ac!yT_My>=U?)#EE?g$W6AYT&1hvjUu5{2`D8U7CGBZPQ$$YKp|99w! zPrrX50ji-Uf|+N!-cB8MZct+v)SMw(Q-4LZ48&0zDypTXubC< zncgu+RlpJyDWD((wJt$4DC9sisCf;dLH-BPATJ@)1=A5D zT6wy{q-o;QC(KdhpwJ3!oK}GBfnw0&Cng5Y>547ovD+Wq*ImIlonKVLX8HmV4XNqt z_vrXc@6XZY;zt^((aT_9n?BDrT~Z>qv?R3x#ARS8PR&g$$jC2B1#zd>#so;|LGFoV zU|@d0z{t$Z$;`mW%)-gU06JU}bYvwXCl>=FGZQBV10!=KC)4zcM{>lbcNv;^Mqf)nYi)64hi@G-W)51-`bWP+N@GkwoK9U0cijEv08(;aVVOR|IPW8~zS z{&$~_2IEqQmVnvKys|uChk!_AM?sucHvM9ky@d4+kTFPpU;!Vy$p|{6lNq83LP9h_ z$RbV_ke|T@*q=i)fDvQ>1Nf*<2C$16IQhV*e6p}HGlGJNfr*6$EqLtjQo#`6H%Nwn zA_WvA7fYjsryJxkvsptThzINx@Y$nG42*2dWt>6`jLbaX$bxtd>_%orut+i3qXN?x z^14Ydwt&v{6rG-MB!^Xi6IAsxg6|7vU|{Zro(Q_&i7xAO$)~z}OjDVrC+6u&POsjt z!zX+aDVc!W#l*=mJ#(*)CMPR2lsTp?EEk!+eyJ($l%J&19$V=}_n4Dk-Xr zPt5}jRZeeoQ4pT4e?UiSa$E+RLTO%3esVVW073@PL5&viB@8e_OA@nFr{^5du@Hb5 z3RV@Lms(LWeenSuSLEyiAO93W%2P16NFP^|pDuJzM|k=o1r3quh6i;NEMSM_p^uiv z7o?_U$LAy#moOA(rst)mC?sbj7C~$Voy|FYAuEf-blXEZJd7pa0a|gClS08k06zb6 zx}ue{`1Ig|I-=Sj&!?n6vBVQ$X{f-bl{RD@n}EE1oX6PFZ@o z?O~m!>Fa7FcvwJgpS&SeY`Q*E2FLWvhjorkZ(y_I03H0uG5x_JQI6?5kLUGLOS z6q$ZPAWCAI2B*OE15qqI(`%VG@G$aBf0*hkJ^g{DiUJPN4+bnejI7hwztt6=E}_iH z!zea=qc)59^z~<=b*68yWP#cUa?^BrI7&U{j~pp3t$M-hVcpGp7ken6wuuTl0PR<}SAB5+`*8IbdlXY#_*8;?wt?)Ulra_=Jwq^d~2E^q5VJjlsu+GMO4rFI<}^ z!fa}6G+ptUsxV04B1FJ&y5lJwVP;cf1Mpd+jHc5W?>37vnHo(`be|%^VrpbzhByRt zx{kMn(eyY62|aI32IwW#44{?%j0~WwW1$TJ2GGJPZO{n;U;*$T00U^?70d+_%nZ5= z(2M37M5gC+wuuVrGk`|qL9(EZDtK} zAjIje(+@Uj+D~tIs$wub!EcVj_J-_D6Bwr(I2PnfcT*1pAds40}CUF2f-kDAt)czEEHnU zW>A~{IzUK%`nerF0)n7>2|y}AO+_IFU513|^G%B69YNz%v4{AXQ zF&Hu|hZ+fLNeVF-GaN$Un=;&)K0m-hoDGBgkR6s(H!r@hYaqMi$7D#>nT< z8XKEUw>hMvFkRbQgKN6eMIAMDNRa`lbD?bH3N9H|Ckn1pR_1}#a^S|o#EUwj%;}kB zlOLvvO+R>1N4XxUw85zAq17pdIHEenE(IzgA+7_p2r$$@YUcQ~qWs+W>Hi86*_1#v zYdoylMNtngxInF`=?}8CcqS{P$xpAmpfhi}oQej=^!$p23cN^JmC<#2!7_1iM)&Ct zF6)R-=VsKCVDyHtPjAmtnXbK5oM-y%D_T6$tE(3BOqX5}$20x)JawMw+B@=i82uqC zvl;ayctLCJ85qF1kI{Gf0+tr>>9_ZZNKC)Y83R}Nx^f}Ubot$R5(LdnIO!-3ITZMC z!vYCL_vrx()y1cmS1gp^4Fn}t1_sb25RC5Ab1D`p^MdAhK@+T?IaR1nyw&U^rdQup z<6(@PzG1bv`1I9l_<5#hpIXg>;-dR)x^NHgZ`GBUzWzKn57>3EV5n{ft61QsAU-|& zsXfp1*X#IsroWE2;F)gkFU>x^&Av!*`sNA764S*w1%;=FMOq0??|y90Gkvw6Fb`wa zbb$i_;?v*zDzHy~c3DSodi29-67|rq0%al*Rt5&pZ~@3WBB0z4^#?a-{V4+j1E`z? ziG%L!2C=!_Al?TR3?OmPx@r)c8ycx#Gue>L1P$q+nF%`jjzPo_GSvGqb_NCpF3_@ZsDnU$5dj@W3OX+t6i{Z6Kmhp( z<{*$mKzczb8N`Og7HDDwBo0aqAT}(vKm*|*agf;{Hn%%yv>dd=9BKh5Ie?=V8e5=% z5)p(1AlTKQC0EeAD`F1G9w19#4g%>1iGyMk#D=No8%{uMP=JF{wTLhS11Kke!$z2a0W>BE z%90EqMIb{#7#297oo^swv~1SK<&L7;I)P|Fvj1{8Q8HcEaKW?%p%FOWk) zYCtIg#D>K#C`?3z8S23<0_8=JB9P%AHY`hk)<1y6LCFQghWQxOzydh}G?EzyN)48f zi|RmZSh@vGEQo+wld!yN1xb?NylVvsU1m^<5)nlzQLP{u8985q4FZKL%phwdgRCJ2 zfs>3iL@&7XhN=M<0#G&JU>8TS%bI~f090ZjTLuay5phWJ0VgGEK?lHs!rB(%Wl*<-8?>8)fdSlM0;vZjAW-Lt8#L?207>{DaZn-xML2gN#0Mb9 zgYE+W1r<1z+CqF;58`lxN;L)s22ctEX$A!eh|LY{FoBXVNF0<{Kx~*eI8oR#Fn|&Z zh|LX}Zf0O$02v2T4=V6LZ0=NuBf$O!m6!|=4{@i1QUe2|N)?e|U;vexprkEg2MGxf zn;VpA7$EbnAaRf(pfZ9Rv~!mM(r$q11toWo8c?W!*xaDr2P{;e=7a19sR4zM9fJk~ z156R9TmTsasy@M)*A5ayAU1dG^c~E4T7KYIltoHW_Bdi)mVp5@I|uSN=ulZu;Q+D_ z#0Gf^gc&uaC-k!FgZ8U~3Skfi3FRq*g+Q4Sgc&uaZS17D0AWUr=@V}2fQ3LCIzgCGW7hQtQl7zR@VT89f`gT@eGY|w6F7#p-+5XN2w zvLD6)4J^Rew~;IWAN2tBJ!nD|rse~Zn%_ulc18vUm>OXuwmcGB8^#88t3eyCU>clZ z5)2Fs0Z44nhAWtwS|srfB=%$^_BmWAN_YXmAsQ9z#=L?L)r=RMRYx8W#{78pz-^K2SFJXfvpqB#;`=;u8i22JkUwP%|q);!vlzgV?IjV}K@r zI8cdc)8D5>iu0ZV2|@K;p5A{TR=gg(P82ExK1mE}9cXm|BWUdosMZHvC=X?8fmX*r z)tG?TP^W@cFu;X*#Mz-~qZGt}DgqxE26c7|NE~YM zR1g~~z68XEs$UCYL&Z0P*iiLnkl4?V*uRk2e4w4qFc+DCPSJw8+7849)sPGf3{Gqe z48l;hFGw7!CLF|u`W}2H7?hn25{IgHaE9#1lbho4`Ww2}oWL zluQ^HKsT*}_7Q-1;8VY#_WuQ`f!fIfnihnz!6$t|^=gB}p=^`s^2>z9>-|7NP$MEh zY*71-fq@~0oq<6Z%1#G~L)8?5*ifTEhmkNs*{vXPsQURx>=j7tjYw?JK_iU%4ATP- z7m3z`7N&swa~q@pYSB{=8)`V{01;SNdJkTqGXn$Ys4ihB+ZS}c2TV~k$RMc2pkp>*;-F(T7@>_u@a
bHW_K*f)O*q~!$L2fz+;y@){f!I(-fKTB9wU9t7 zr$F~TL)oD52AJdcKnD>))k}cbpf*3~q8AVws$L7khMI2$Vnfw9b1~F2z=A6tBmp%D zd@dJgYdZr21L#~XVJI7PVg=0NMkMv%o4BBQ!8dV1qjD}t4OH(&B=#;iyPkpJ9Gt_z z@Cb?h8j1Y{iOm5zRtajT3=-P_iR}YoLmd{O7r1ym8}fCyN2 zY6M9@#oIw_sD>US_LAxQ<%-4YPa_F|j&6XRP|5{5$qA}W0mOzH2ReO$5!BTK^%Qv+ z7=)p0GbA;j(-&ZY><1DDbuSqh7=l4;sQMHT8&+qOfH+V^wIDV$s+&Pmad>k=W))Y&#@2=(Gly#hyswzDR7) zX$|!-MG;66@ks1sBz6`O8+3{TOm8WYIQVKXsP7w)#9NTq-3YcFLqCGUFb#=43yHlD ziM|oH}eKsW z=ZjC@&J@#*)f*m(GUA&LKEn%*-nP03ao)C+;y1K#-tWvd~HYay}0-6*IUv+2=~#g!#J zk)(Z**fG=3C(jU{KB<~b!Vk2hA9n2}xYGo!lE9rNXwg3fq!-Gbjl>3bprGQQ-YBEy z^b5AC*3<7R>s3sbKWptVeX{*@gXz-GW4M`wC8v8lit(GS_DRrmdi@KXis`30T_vX5 zpR+cYzCN|gWBTmVvfP|7mlRBYf80!b`m%GT0-UglMr`_gs|fM>9*_f|ebcQVHna!F zfz%ZW1+k$Sa2JRT&1k%!t^za(CV|+{_}va-!@>^K3Wv7O;z4X^vu75FEeT$1&%kgP z#DRtsXloLz!t4VzZDpsOw>GK=84Wt^TZk31?*+7N6vPJga$G^X|Df}nphyCVgJx+! zJ7I)CAqg7f1gT*IEgWHB$bhmzqY`;gHpu)EC>s<9RZup_{07i4ILIJSR~mF)IEW3h zU^++Tnr4Lc>!S%8(Q?rLD?XSRiSK3|L# z2OY@+vKX}a8pH-!TnkkL@^K544H}E@g0ewFt@WVZI!FV^;%QI`(17b4C>u1p3OaBc zqy{u3yaFl?8kk=PWrGH{H$mB;v2V~J<3iB1d>SM!07)Mgp=?n4xDH|0g9i=nLO7s1 zLKq%H*`Rdr63Pbc=X(!jgT^F5$B~090EG}}AOXY%jaxH<_9{YW16iSLP?Sl4*w73m z2W5joONF(bfk8+Ra&n>r=Kx}AHaRSN)`S=`^4N4z3SV1SA2{VAB;1N^;G^g+a$_7Qj zJ186E2=G==VaV(X=%i91VFm_}Wo)1=mBNsT6CNlVlt@9@8Ked@LM#Cl2aVi=c7%e& zQ$Q!4sX!$%K+D3QY|!)?XbUMw5oni-BS;)t*!e)&Am0Q-*&yG5hDC&+Giq5NacF^9 z3T1=T*Ff1I_3dDGJtSZDfjN-b&`D4>IH*BvXuoa)lnpXyJCqGFXg8D%%4X+4Y-oXd z1~SE+95& z$*2%i9JGQ&0?G!>e9A%DpviR5mM4&U(7c!lNF0=~7#J9=pzL~(>l~mQkR#lnY*1qK zfwDn`Mi7(@(hnNG0i6>IDz@XG;vk2nK-r*#nFVEo(nkT54Jud4plr}|LJg=-1u_Vf zSel>`phBh%$_DvhCWs9R5(Wka@FBCZkSw$sDh>)#(0Gp!bUtb;R2<|`P$LYq4Glzt zsuM=&q8gA#A;+>yL*kzi6t)bIDLmLY#~Rb$f2$Io{;PHYPd(_2KiG-UAeS>jXT3qe z%?K)y7#J8pj%9>S*MfqZ5j5Edy3`ERB!}J=23keP2%36hU;v-r#R!T=kn2EdKr2aL z6FE?ag3=VD5x880Of+NC&(>ELHt(gA* zgN4EL<7e$urg!_egiOEBsU9-@{B>)I>G^-fC8o2p`ea`hiRt3XvsI?A z?$A-0e*3mb!t`pEMIO^vKQOfc-IN6Kz6Pje105#;kM2STcR*z?>~LrwkQ(Lb0fBAe zjH=W32wTfdzrKf2WBP}Cx-8T6=Bk-+YB)jyDS5hmw6*+nt>_4e>Fcgf5a9HIOY}!u zD^EXXrYAC8?>(OYXMrPR>1Oiu`zrDBOfd}8!DpJ)z2_59T;RyS017nF>@TQ~4;nHB zRrM=D0Rvj2Gky1iSo!I@ilhZNRh%I4nLJ%zKTm%8wybp$)AMc{2yo7Ef*LZt9wgE9 z#8_hbKgNv$oC?m6dEVsd=k@dCnZ7VUj)sz}OBdkHaE7{yfq{X4djBm4X(kp%sQjPR z0=zSj}o%B0c?92A9P2u2N|M&K+=# z@fA+;OeIj8?`_c#;C$f%wR!q)`&jwuQY$JYrspj$6W~m6g_=11^ourmrY%tK{QD&; zAhp63>Jre9Kj_pJXeP*Inr^`;qQ+FrG(CY)M2)kO2{K>KJl&pAM1K0bRVo}@pxh5i zKt~v-7x43oP3QX~EWmri71BBb#hl7?`-Sz=pi}KY@>cUe$IUQ64)_M?({V#61r=wo zpxOiK>M$@cfLb0PbuvuT6>`>zO;7tH3OeCSo<~u9dfy*W0j&l%sK*!>7&MU_{{dmrKw1Z{ZMRl?1eBby4cyqiFZZe<#{*|dTlLqT_ z1yJJS`!6cM+u(x;QOoK5*<8|0F09k|6vd{$N^%j04l#gP6m~>FejUUI#5W# zP{KMrKv+>s7Bu$-QUfZ&K_L|3i!k1Hy8IDMnd$#!T*aqX-DwigTHwpT06JO|WH_j3 z25AK4dGI|xNQN`8O%J$bCN`Zdd!7LA0Y3%?&^BR^CdcX0?LN{>F>KQvI(@{Z`?dQB zXf^mF(irI8cbK7|!%9Gb3|rgXzy>~jP6*U|Mi!sKHvIsjh?vlAs1IT4x3Eorz^^DK z1iq*Tbc_(ld!XeDY~VxcgxEm^CX)CYw&@Ph@?t{Z3wn^m1=zt^U&t6uy#_nPJ)UUd zHc;_+H1Pm-h`m)%aj0_`GT5g-00oBF=P&`iEB*`&XP6-=64bYV1x62=rXL&(3}<<# z$1sa2B`yeNV5s4P=mFKZFg-KS^c)pqVE6$FIjGGr=4v!`dnFhcHi8;HFm==G*Dn_5 zlu2S>FkoX~NS;ly`AP%&m0Wt5QIU*vPfdO=! zJ}AwB7RbTO12xw{=7HJ=AblRH3=DCs(BS}(07w#qL2Y>u4O6&GYr4Y$E-@h{HUiB3=AEh-XGKu zkOM$W88*})zETWP2l8D4!}NrSTvBX`h71f^Y||4Qw3K*#%o!LCurV-zI-4%j*H7e< zX5+DAV31^<-tkLEl^t@1p!xI*f5jxWpZTS8fl=HMezIB<6T_JwkaOUCw5MAZgNeI;X zVq)X~EyrMDVg()1z{JE38j^*caK^;K9?rzTz{J5i5lpdzR(i0qFtM<{0r6Sbn;_I} zMg|5&CPt1t&^c$tAVL(>8({_=n#-aHS}4QB$fPyh?!S&g{V`B+zzG^dVB`diV={4G z25I1AVrF1q;RFrgu!2t#XJA#^4BCeD0#uAefO=cZpc8D_{Xu(fm{XV-7&v4>rw?#} zTKhbl5}-v&+^d-w7&s+CO+*H6(6u3)QlMi3Shztq+i^;R45{Z}VEzVL4=4*dlg$5|dmC%$0 z=>sJRu%AHnCuFaU7y0Q>q zP=1b{et=OoqTT>hx9h`<2KAp9=YYnLB*3Al5AqhMfd@H`$PlCs8mNw-6EMI<9K-=u zAiE$AU}a!YCh z&Jz{}1_^MydV*{Pt?vhW93&3$xD+UjFb09NF$VL4R`P;kYA3{CR&a&^$E-JMOo6Om z;0KKk7P2xhTn3#bC;&Q9g$1OT^Z)dGW?hN;`Jh(ZNv1z6@bf){7c($0fG+xEU^&GE z+M5AwLV?9)444=gK$uHY<}D)w0|;|y$n0ihU;tqb6&cWN1R%^EC9|K2fdPcM!(}QN z85lsA)kj8#nSlX>SrcUJn1mS^>_GWNNd}ZUK$t@fbZ~~n^a*>l*|$fq=&CR=-kk23 zrQ5vyfp2Lz<8+5TI)&3uaOlQz!uRq|*X7hTX0)H)*x9T&{d~G6>-3liZI0;^ICaGt zuTNjWsjI;#J^do5ZaSkrh?1Ee%B5?{cyhXaqq^wy1zfty)7|Ga3ry$twB}+H3VN>1nC(Y2WF8?MJ8 z2;L#=8XOSs^h{`l3EJiRs@e76?q=*Wk+`3Cd7H45AF66@wtvptLQ- zAkOe&`h8JdB|TF^LldM8Yla5M8`caBkTG7#T z;+$nLq3Q9CD$?7r~qg>M` z7>J8a&(hPiU^3*Mp0E$pX9aNzxu*xXsftaX*PtyhT}oe9gK^<>XMJ6N)_432458Df z>+32rISWJDD4L+7IiV(ks5)VA8)f=0eO&>jZNk$7w0Xp)*L7+MOgA#n)eyWV3^_?2 zq!ff1r~gl#CqBK&Kv#opnJ5E8AQQM%G5wN(u8tn)%p8y+5Qa5R^bIY|6p(ziO}}_e zRhZe>#B_S%EOB8bW0UEHlhj3+jZG}3AAG0+l7VbjW;Ql4n%)>`BFtiJ0?HZ-_>WKL zQ*R2`o>s5Bi-pD5#KLsCN{g;m1V|c@WQ|RX%#nG5j)VGzDjX8YRpO44|Pu1_lj=>gkC)=L>_+ zQJxMytr>CXa@Ap7h3R#Nb!9-rk?B!KbQM77GP7*AJEB{{D2r%}X(&NY%{}u8(q4;^ zo__wQu9TcMyuGHuq#-2x0d!h1TunDvjmK<+8X*idzu}Uw(|G4_L9E!cAOS81);9gE zm$u||sdN=C#`NhQe;W%kW=uCcrfbhwHC-@WMVPS~#1q!d>R{^RvXolMWFd5hd8JT? zl5|I>68t!2lv92e^g?v@fpt!Qb4=HS@eEi<{w%_7CN^e<2&TO(D}){}GxS*LvW9*7 zH{JiZZdnw}r#7$Qs?U6exZVcSW4>H&tPHTjjh72cIV^#mW$nua^ZW8C_jo`@GV@H| ze_S_~aWU8}j7z2)p3tpkJUD&r3Eg{kpdGI9dHE@+3`jd(q3pDx{Jat<8@f*yb*C%C z^tmT>mrk$Cca@m_PG^n8^g8~@T+@9{>GDlq^+sJ{`n(I$64UpsnISQK*C}0(>9edk zB&JI_a7aw|o4#CP`o9hjiRrJdW=Kpw=b^_V1=?f}YnFprx;#$I3=9#V3VwRQXUuGmfn;Fk3P(@hcv@G)c^XKJg;g3%v4i$*f)5gw05zc*Ii7axymMMUVfq_l>C}^=U2b(PD2wXnUl}T)JpmT~D_&^s-vB`tfvoJ7$ZWUouU<4iO z3+e%}vs-|g$si^NBS$PF0|VbQP`i*5)M8=a69zTU>bXGnu`uw1GN1?}FX%cBz9vxf zl4Nz`(%H19C7E zX!$ogFX#wjHWtwKcplJUY9PzGL6(AvdImNYkSp0(birW;Zjpn0DaZ-3Owt+Ae%vDtuW~DG)75~<&421pbMTDr9sLVqeMXyyJCz{j4lieY%Cz}3xc;3 zsDq?IT0v74^^9{stIZ*Xs)Gy#jed)RTHK)4o*1YJ3ECI|+HS#U268`0Cuo$Jan4;P z1_mLpjbJZLKqIMhH_TBA80G`Ec!dl9IXgMx$s z?)Fun<9#8C28Y`tQMA`HBRL*qJ=pP_3<4lG3W5$XXN&`7K9DV-xmw0K6Io%YE)L}O zyRd*?$O=0{6CUt^tmpwBk77A9XdaaT;rLXDdT_vlnzWb!pMa_#$?YKP!EWbc5CAz* z@G>a1rowUzxH~szAsfu?sh~{w4`ja(=sp_8RFEe@1%VK_SV{#&7-$m{I9fKc!Mr9C z21<%qAjOPPlA!J<$c^S~=>AMYbtfqF7$iYMAt2?T#qY2vt!Dt|$aGZo;1gjbK?8Rn z^;0p7&p=fU8dhcy1?{N^6*r)bu%P@4ay2+a1Q`TC9vA!!3Xuv}h=6WXW1Lf844QTX zr^O0TkbtjA0tZ0_CPA#Qf$rD@`w8x)K2+rxUJ^(E9j7kH0ICR2fh-3Z z2pVZ;oCCT+8dAKS0_8H$_?j@d;yJYulmdf=9YEA6kcSvUz}^ArfRr6lpo9imbpTpO z5AoW0km-y;(xBoDRE*1jE8+`xKsRSCW@2Cv1h=1SS=*h)`L>w4Un5a&H&kD3N4P1`cfbOqg3Nl*f{ z=44<1UCRh<{78b<9f0-@RDg~gW(1#%EeTpzCe6jb09tJiQdh#jAP!ncuo#kJK~)F? zydF9O(Fhs51Eq2fJDBG{D|>J*hO~&}!21qAz+xFRn8-M1 zHxI0i`2Z??KqIO`;7A9nn+l5nkTO=#Izk2p5pZVw3NnT<1fKUmE9_7+)F)JjfFhYe z5;Q&va`QSK^sM?BRXI4(h=TTugTf1R3oWRgtY;8Z0p*c}u-F7AqB+k%hdqO1b0NqR z+d!>6aBMCFC9mr+Pk@v`;!_F~NuVa7B`*U5q;y#g@{kq_1A{nd6;dw2<|dT0`eqisN0i|fdS&NLm+>GmK};~fZ87jpW)1k2T|PzvYi1^z{!JVk{Ll>1D}+_ zIA<^1JvtEgNP>#{*Sw&Mu)x6t${C`dmNCR%&I}9+plz+JCz&qrF)*aj2ajaYfJ)Z8jB9Pe}=MM)dmW7q08NOxH^l=bSE^q^mxCm8Q13pfDpdA2+uZ zw>3ATFav{t8pHJdt?MPHCj@D;Pp>sq)Z&t0U=W2Iemq@Z|6-}>DypgiW{iT2hQc5X zQrwJ!j6!T6rZj}fz#s!XBAMG0eAcooH)E(cNP*mR#rL7o+Y@f;@-R;KzNM=;T_Jq~ z_w)l=DqPd=-_+ok9uUvZH9d1qwE^VN;|s^NxuUd zd~by$r|(=inVTOZ%);=QF?c?R6+HdGEnSJ}`fkju)AMiZHcnrYBgZ}cNDRLaH)shK zDD^WUpAHPMX~P{|#pwtlYH1Gl^vx$DC8zJtsuqGMS>?&hz5UJ|-3Z3%&(b!EOn3NW z$}v6Qp00u>sGkE0c2Kh$M1z{JAR5$g1JR(y4v2Q1Zg^i;oiSm0;C)?fUQihZY7~Kb zgK^VO-qZCb&mbl@j_q~#b$OX#L-z|G=?XKR2MyyZO~3v~SB~)-f<67tgLRzK%^TIF z7`dkB?b8vT?i#5rHhsbsZJp@`7A7pyHJ|8;Ocy8>XPfSKm4j`1^kZGF>4~a!l8iq< zr}ipMSGcOpi>i`q`h~~3eAAOv>%%bJ&l}o8)6bra;M~6OnQkK^8|WOg)Qaf}FLd2GGK)*%K_g7l7m66E zPVai5Yr_fRf(M+YA9$g=h!BsdzF1RY`USHrp6MG_ujZM4 zK#m1UAdV&lpHB)V5T}wB_|)-CUmxnmGu?qFif7tVd!Fe5`Ac5vv16U{u+d0%MrOm}*# zTLCJ7zz08p@)67Qg^ep9N1TFBG@br+pNzzGsdu^wj6%~F9&3h5$sW@&n2tg~+`y;+ zI@}brj_zY#zWDU(8p6=SNgMVz^Gug4*X7yX^j`NRhrf`r#K{5oTj! zbFd0YV`Foy2AE9;IgQ2G*whkq1nBeWGFw(VOc#()QmEGl#|@|;0S!7af|qH5co59Y zV8{TfEkHcbf+9u+&`}v69t1Np7&E9qm<-&Y_9p|VIS3U1P1`e=!q=jK#={t)2dBYQ zFxNAfGk`j}AOX-xLyX}2sX#mk1|19v8lwd9Km%rs46z_495XXmGr&qhP)cKj^B_u? z8EhF~b8Qe0L_;K?WIZ$JbW11)VgP7CEK~sO14jnXBmqbS;zLmJ3gSU9GlMh36bKWv z51E0H0kjerDgf5+%CHE^g@gcT@eNdffq{>KnZca_bmtdHh-*5(Z17R}oPuKSi6E*Z@09^zhb(nr(Ua7+L2h6zv+YA0`7%)!1@VME) zv5WyU&I>XGwBl8WK?}SV5X1*zP_I`KG-S&FS(q=xpu+$fNCnA(#w&#w^rxS_b_TH)V*2@g8AOk>U80b(@P}>f{cV##NH2@;-&TtOO z2c>W!22Tc1I}W5C)b1Bz@Md@ol?OGUg&2GpzC-z-mZA`YKLZnZEV&-Ca$ATY5Hj_E ze0(V=e0>4%r93)h48DsV%~SI}}f5zxdG^t3P#8#Mm~ zDq}%xkXq0}9}&pt6KJ9%MXZi<1awlN8JxH^`bhusNXh$lx-Tfk6ax zOaZ8>0%-s1&hb++s6>K8z5J!McvH-C`jt1=#0kPqZ2KBaK zj&_HffF=Oiln1j6)a?Ul0G$*DV#5xE18q|h;bC9^jdOrjP=nNf9Z(5c2MIf` zjStD89*}Yi!=a#IXQ)H#MLdyQ>WSo1Pb8N@)qpxGAocJd6<`3jG(b@X5(m*BjN(vF z$eC^+N27$O0C>fFJp-sG4AKlz0Aj;5gUS#Q(3lZu#UE$|oEOBQpcV&69OMYl=mm%k zN;jZ=J0LbF?!oE63*s5j$~}-c$YG!;1hGMCKy{diS3N`#IM{_C!3AovfE0n!0f-HA z5Xga`<10aq1g+l(sR4xmFfbT`TnzGo2xzH1 z^l(3zOF^}uhzJ7%s22blg#xi%r*D_dFxCRw?E`Ti*lr()`#`x~M2rD^AU)U}V$(m! zW{5jLO9oJQfu!NK`an_#$OS02ia|CxfmU{c)O$|1mdh}%2ixk4WUDX4R&X3kFff4n z^k7>hkbLip!}k(MCs6ugIs+7CpsVFT9tW8#BEg^xE(5^P1a04Pf)b`5#6jSM={G%r zT~FN54-!MjAr96C3Q1V(`Xg!cpMF3}M?BOYhc?hkbeOgPBy9l@?}NQ8hvek|WOJr_ z98uN+Pnw7*AgKvNR)bV-gEq)P3kQ)Ph+W`vI|yPII0l0tdZj_WhpGV=!%#J#;S~`j z2GCKm;Pt>FN(}Xgf+7eKAE5jQi*isM0MY;|V8E#<2ofJ4HcSnu6azU3<|=ZgUTL=BuE21ONKz)jhrRH`6~pX7Q}`X^w!4>CAev64Q6j?6{a412q#p0CTL8;8N5@RfdPDo zDpX?Q^z$HheTT?{i!9J)378pTph*#^Qe`Bz9unIUiS3HS4n$(dA+fWN*q}So8J$6? zmVtqx2}z<4i9HL64L)@S>LBn*Gf?(BBsHKtM4+PtK)(3{I-eEPk_0V>0?pS!)q^e; zhwa`KW71$?fcY4_0|KfDG)E3I$O)`@`Ud?nv3g-PkkJebplt^*ec<5WM z)yxF3p^lgbVnfAOfRFD4RZ9#E44`8~7@-F311W-9b{52js<{SYL&fh**MH|OuJsp5 zhzGPU52{oY#D*#bZPZ|Np8mnSQLJ7VGynxUTN)$}bw>z@4Rv26hz%7_2C+dcVFm_< z3=kWtw-UsLn%x0nL)A1 zco0Y&svdkcCxl%OJ}v{6BAP&opqjfuY^dhtAT~7AHiFoonuCFXVJqn1P$>HVNF1u> z6o?J=0C>9|RQx8A_&pHY8Ja{vCt<)c(_63vB;$Suu|X|y1_p*dAU4z>PSA!osKrts zHq@b-AU0IJ5r_>Hw*axB>ODbhsCWeETnI*}hD0QZbPyY=p#sE)Y5<*P0aHH#NqicJ z4OI_1v;r1o2SMVX&J+U!!%@&dqfqt*khn9bh+tq~0G(O^^Zk9O1jzp{L2PI+z5}tL zzW)JYgPI=<3=H5?LZRYZ>M147-se4uIHD z4W~eCP-~ijf#E!e4HdrwVnZ!>3t~eZ_Xos=s%HhAwh0yI2C<>)Wk77GxHgDg57l4- z;y@*=Ky0W6Zx9=5G3fquMo>$afq@|sbmk|Nor0t$55$K0vKYjM>TN(`_ad?Dr-L}q z&7pHZY^b3Npca5yrYk|>P=i4CsKXqw3#taxvfhuR<|K#>b;LOk8*1hqB=%bn8x;Sb zg!Tu-fjR1?xa;P(z%7 zfngKK5m5GCkT^&UsQft&;y{Dz42TVqU|?Xl24aI+{Gc;lL2Rhz7a%s&vhN@^R1Nq5 zQ>eHM=x9%RJ+7#J8p2bc;&*!2u6KoU?zn?P)+BesLs zQ1OExHYg=BFfbegu_2lnE`!)m%fN@6Le+o|IfaUU2dROY!w5Q96x6!_9efKqv{VTc z{-Du5kOWkb6o?IVggl5171u#xn}OJ%K?(*225S%-G*H37z~BO6L)8a@*ig&Br=mjH zl}O^f^+=p~NbL0>Hq;0EKy0XG$3bkU_*oDeYUnKx8!G-1#D=Q>1Y$$Q|AE+0$8mrT z3RQuY|2#Yl48ovZIOrGi%7tpELXv0zv7s6!g4j?E3qWkB`jsFyRD3;%4OM>-#D-dY8pHQ2RL2Rh_MkMw=5F4uI8WQ^*68k3-`!AS1{lIIZwCU?)^gi%{mjA;JJ$*R+^TKT9 zsDGd?HMHr*1nQka+29Q|P&O};xHu9Uw4VufLMUkR7{*outC@DBKr9v}1irKaYMeV* z8WdFw4B*~3R2(#=3{wwU%@1Q|AgRwsVi!-(e=I6q--sjxS`ZIw(t%DAfU&`+!$O;G z;L~BD?3EzBP&Q~w7fk&YB=H?cY|sjOm>SRoGouK@^rtti1nq7jDSC{=2JP*FX#g#4 zXN0z_KxZhx*o;im1@@ST)q{>GfQf;ZZ$i~dfx5*|wj2^0-0z2qn;?mUml8t7?UBUY zk=Wiy>`(|BQnf}xIN;bxL}I5-*O%EK&IURrf>CU`#eNI3>3ug>$bttl85kILfs{g< zDF>0*N0Hdzu0FICaT_EKWj{h)AnFWGDx;UYZeF zIm?2?p==c-wgwU#wCovn?w1`%99o@$jy*@PG$O+H>=F1JH1^cQU3@e2`&4cA+bRx zh{6ipFG%9Qk=Xx{*x*~-q2};{`rlBt2ohTYi49r^%&5iy8t-FZ&_j|iMPgebu|X?= zVGaVFAPQrHM<1Y;f$#f(vg4=oH-w36Wg!`nhr|Z0B!(H$2o|4S!N@MhIAyy18V&KN z`CuV%a5F4MVuRM{GD1t~Z6I+ddoL3EAQJlo68j98J-z0Xtp4===Q_Kmdqri)PM@!$ zw|IJ#ZlLV++op@Tr{BxbQJDVinv39c?}8@z>CYx}3xdZ_p$l*s)uwNFEhj$Rdakp? z^x3Q0C8pP(4l|g}?b{?V-CI(bd-^Te#gfy1i%LmM*S}fCGo5>%zr^%z!Cvm^tC$6N zr=R}8COq9u-A`cpzcwZFNzJ>E54}B~+ma1++XImY8;cN^oef zg7&5{s!caATdX{tyF@{FI+wbhNBve%N`Q=bFo07Iw7>-q^*~F%4v7vDT?ucq_ zzo4$y#8?j+0-eLmzyLZ27UY=4P&UYL@UgtmId0H+8b}SO{|Y{q7wS9kvAoc8U@w96 z3P6@5fRE*cPFaJGs*ey<7-ogQir#$MQns zxgR7h0+|*8?N$^LfgD`C5F}m?ojL{|zbgVcs1$tst_WnpbPGt42m=FX$Ov?lG)OaO zgzo@U95kkT49W%_g9FM_AT^*y)Fr4msQq#S$_6bsxd&x~LZTjYunR~7XtMMLR00$d z;Ny2e2?BJi5NJ!I7{mvlGpvQgAU*&ezbgir=#hu20Ywey5DSnRP}FEc#X%l0gt9>% zFo&?~89+X;g>V=^J^&3Uf;5AsvOp)4f!Lr~M1QCn(2PFl;vbMW$Oq9-anP(uB9sk^ zKF|plAT^-q%Z7@Bq7QT*kPs*_fyUZF=k$U&pqZu#AVm@opUsA{LFyJk*&v^-fU-e8 zTL)!>+MipXY*6ml2W5kflsW=sgXTw1K-r+K<82TdWFV+N3c5{5ND30XputEG8q>w6FjTMheM6%(sV%gVZ~-fzAnr zPGyIIBtV&-fq?-uFe#(}(U1WZ2WiNGvOyMrZXyzbmO7mvaV3a)&>$s998|8%hKhrd z(IO}tq<00BtqJOnZh~?^!@zr?Y)}v#fwDo)?7K$|(CQ_I|7c0B|5gc;BsM?xwL44^>`aj*mf18As67Rm<2 zt1^@gni0^1vOx~jg|b0Qr@$xfLW^8)khmHoRDz&vkRxKDY*0v~)I&L-v;aO@R}GTy z!AI+=F@UDh8Nf&DLOYr@Q1zhsLh#ADYLFEp9Z+#l)&-pcFQmr60LleZpyHrhFbm2C z&FLu02eh$h8%}QT^vOyEb zH=yip1_p-LAU3q}`37Z!qUJAXJWxmjlI55=7#KioP_Xbq*`Ne03}u7#OG4S8Apv

(>Xp_1W(`1yvTr2X8HqFBXM46w$%aE_cGHhM6{KsFJ6!(JpJ2N zUBT(~BHAjd(0sH6qyoy`fW+PdW>2s1bIG2r9oQx@{kNYB&-8A~)ms8Up#qw(1J(Ob zHt0ldSd$EN2sexkIsy^KwgIV!29gI7J7oHN-zaf8P)3K{;{%?J0F`&3899(r-RTYi zF5-!xaA#m(0Oe)aQOsLF(x5nCfE?ooIf|Kq;S5L|l!X`=7;b>r(4l_ttz@8zfq{YH z14tZH27qQ>Ky35r4Gy;AqR<1G6+rD5=ops{`}6=Axh&2ZE|99Ha(c9xo;&9T==rsk z(^rGI58&M2Ag+KbE7mg%G3Lf8;VTNVpkF1O@T>(RyR!N7gUvIn!*4%wlr>8 zlmPDzBzf-X?^iKOPk&@!CNbUbu)Y8%j~fGcL4W0RYYRPjrV9+<6E~;p>1hh^=0H!7 z1s&hWmdQ?E5#PmFUO#$8-56DTZAW8Y@-gm8~r#r=|NldT1Yc0Tg#DjqWv|$k>sW@Fe zbA~k29!Btaq|?=8Tm^UyJQ)~3H77`3dHQPRjndPdzO0p)evf&h0B;U-og_$7b$Y(O zvh?(2C;KIs1em5DIN7hpDF!;d4Yb~M`uvmq@{9`8ZzqMSPv50qEWlfVq*ZIW|AKmH zrZ0@s4z>$Z5;ataJfu2``sc)_Q=X1(d;HT6Uvp zsbQX85TYbz1=>swQUh8_337dhH^NF#YYij^vhpgL{w>VY6O^sRrvDP~5a2cNVPF8= zzY21v<@EPnw$e;8EYmmK%MzRZ?6SH5uYxbaQ0wX09M#fH1uWAOV#LIz&*P{T;635X zzyRuIf%Mx>kB;$^W;(+%{exGk*z~>_KLOqvKZLyfbbBLZX(j>a0mFSpngUt|{)kWp zRm?C)`-3`Tpk^${XABGsI;_(bGUloARv@W&o<2X(MViS2YMvcuwIFEYBdD4MImdOn zymPEHQwmf%4|E(dM*zY)_v!Z!X-YFSuufwZ0iCsNDWDY)067jBq#e{|g}G)Knrj}g zPEUwP6`LOQXQ}{iN+1IR=u}RSChzIhi%O)Kbl9dVeD4#RzHU*8059lr^BBNWVghD@I%6O^9l$&WhL~VPmIXETL2{rdeT(LvFKpm4%nH;| z1F3=OzY>hdAfQ$TNDibQykY`$x*gOW9`3eY${xw%GJr)8_~<`LIuOP!|&d4^kkR83R>g zr>M=r1=E#R-TB8cqPQVR82(n1KP*hyW!kP*)Ws2Z}q;tt3d=89+0QETCn5AVWZd98kIy za!T=ZUr|NQ`YjO*3?%{#3?RcmeO;Jg)6g9EMuLIiAd=}Y=1MemYo!<%Ku2Ih?E)Q1 z0cL_OWd)fH^Mpnw1H%b+24%3tpxeE+3>32|={^78O*z~sCc>?u!iWnFim>|9dEv$rTdVr=$LXm;N3%c?O zVUDg892Nq;tU})3@AAg<4i*`11O&tTn69$OG zK<5X*93~HHjKMTBFfd5!F))Bmvw;c0%m(#7L3&^wO{j;c1BG@O^sMJVQw9bN$XU;v zHP#Fa0_+S7Rnzn3s^yJ(oER8*VA&Qa>E)J|q*mzV>%)#|L^`7};UE|2oWhIck(x|L z)TU2x(pLfUfvZ ze3Jc8^JqGchn{5QA|(chCLWGX&=Go|lL!|rV1bA=GBB*Y0i+)+GW}n?k_za+JBjJPGc)DvTI1RXvNKJ1}?@Z&|NRw^(>(MoNVtwrs;rGfi!`djf`_Z7pp@|(*c zT&9=-BvWs|z`$P)G8Ht?2EL4gaSmvIBM;ag_8^-XgE&ElO@l7xgXsnt4lu{w$d{nrBxC&?P?>}hEG7&L{5L=@ z0xyyVjm|R8iDzP95CE+j1RDe{*crjw&p^Y`jB`NCPB}p;pMrxnnu+s20|Wm*kaeKJ zO$Lw@;~dcK?O;Pbf?OjAZV(5HgTfzjgohC5L~;;jRb&$aP0@ic>q}-K&^0fbq_S%g5XbP#6MW)tdQVqgGaRvotK9|OYer}z5lMQN}yF!O?UX z1~+Dw>3jV36s8wUUdk;78d(6HUJ*1O!~*qM85x2Mr)%bS2Ts>2UnV+ziC??O^k*3h z1g7`jwd7zFnqF9DD$Xc0J-}Q*979|h6rP~S0fiWd24PT!U}9he9~V9SL7LH ztl$D|`od~4wduQU7^SA`hv@N$f(7+57(jy)46LAVW?+_`9vh-3HGP+;o3MrsBQrB6 zGx!h(5LwG9$iT?V&dJWe$Xp3#vv7ircwm{nvDsci-JX$|5u_Rvw~UN1^Nzu_GlI^5 z;AESAK0;fJlaZ4TEWtE=-R(#j#%t3JLh{9!ZZk|*EE5q`c>tDUW?G8oFSRX*&&q$sqxbn)+>olU(c<}2R>$+51}!w zC^dC@q8DRymSY}>k2}4<6X=-VzOKMJP3FsVasp;~Jro6lewV)%f4?a`$V+XrK zFL}D*T4v$t2gCGKC;MlJszHq^%>%iNp#p4JNMd%XFQ^^~N=+^;D$XoR1s{Md9Uots znO9Ni z5(cnarq`tC$r?f(kdg}a4cvm9{JeC9%)An)lbnlE6H6dQPIv546XtSCEKUW7T*>sn zNWF&X|5b!Jrf(=S6__4Sxk6z2g++NH)9+>Ib43)Bh$rE1aX0;QVb(`7uXM5Z?^+@LXi-GI#oB_M}ZBG3x>u~8{q&WwdS*OeA3|e&`b2GY5wHSO zVFj)AVqjrGWYv%~5_n8Y7*!Y)Mbj@7u9Tm?D^8DV`ouUrV~|z6)8EDEDNo-Qr^m(y z3Crn)@p__Q0bYneJS1?ZuZzYz{7< zK?*^Yl@Nmng93;H#i0BSn#lrjLDi2CgBXM3bpG2$;+&vEjf5B^7}BTPZ(A+S2`V9k z7^E0FrpGrMi)(^PaUlj7hSeaQpap5*Qvu`{4nz46Ese@{6PS2xsH3dXCAp@3RM}txTZ0ny4WJ47w<8njI1l0s0vf$Y<2GBxJ1`%0^ zBGASPZqP(0Xq*eQFAd~%m_c$7HDH4bru&$yKAzrftgbTs_xX7e(_d%ksZ2M&FmL^I zH^~hi)3Ywl3y}mhAYm(DK;01-yKMSlPo2hbui z5E~RSpp8=?HdKu*hz$yD1_lO4(8eAp+Xo~LRRcaW4Qfs_BWNKaRH6u^2r5wyVna1g zMPhFNv7ze0cUMDuTA(8_grRKEvClA%g3rf?ii5hGF!4_yb3m~Jns^4SP6EwtfD#e- zc50{ve4thwSP=sQ=)h{2W+jj~XcH`G=P+oO5R`3*Bo1op!_F78Z6G#OeGiBY+ONvMz%T*iASin_lK4^( z8>)UIhz-i6pk@1U2NfiyANx=tp$gud1XXegqy)+aUtJAl-<$sb@;q_5S4h&Ikl5eA z?CB56YU-vJ73j%MpS)C4c)C~dR3666>G|Oj;?w!m>s6-zdem+(U9D|`!Sq8DGbN_4 znpY(;T}X3-=5&8c^@Qo%_vDxffRvCHVddYD4;-BmVo;Epoj$>Ob%j$3h-A@Ek4=OQBKxcr0IH01j0;&kqDeD5Up}y~fvO$)CI+H@skXQ~9 z=YY(Cg60NK<@l5yHp~S-m z@+qU-^a*e01@nTo3Nt{aju_>pCq$^YPv0G9nKS*joq@`9ZbLnl>AQWW+e}}*Q%Pld zwymhj^z7|oD$_TAnCCqG+#z-q&K=^AEyq^V?Q8Uur>}EcEi&D&I$ePCh&ZG&u$taq zqbEOo-C{+F=~f*R1vu}(b;vtv%TLeJQI?plSMMXh`2sHS|GJs{bSWldiRn?XDgwM; zU`Bzbu>ME8NKdcQ)Rmb2Pm@Q0mj}8%9~5QW)933bOHV%qxMdIdOb;1cIK73HTtvs0H~(qf!uudc=lIwhZDdOr7hWhN`e=@yf8)TZ10 z6c*qOk$?;kgDeu6?$5Jcdip94QHkkcOBDrpD3843d# zECZQr^0L%}PB!UCBAg^Q{qSI9g2^o}6VNI_ zk_S!8g6econo@&JGlB9MXg?g|^a~2v;?u=7I{2AP7^gQxD2Ywqch6dYcZMWn$Pwf^ z)#=e19nx$pObiVFn5NfgbSQDQNHc(!hgnUp|1Kv!eV;}L2NM(PbOU}7vFZ0TIt182 z_h3F{nEpkhLrJSd9&*(j$ShDJ0p=ReA)K&5IFN(hvrTu<>`>$UqQC$?2Fq&t^*Ltp zOz!N{Cunx4=^apn-021~2Gopz83W3;$j0=uGcc$yPv>|!TS>1$iGkq(BLf3S4`_fA zrU$(D6lpASGZzDcA@g(-tqvuoC%n@Yl$ME4&)4eUXOice-k{Z?#uUy6xf*7lR)+v@ zf(m5v6lALD^xIk;(rnZD7#LWXrvK6EP+~iv0%0%HS7Mtjz`*bla-9or3+TK|W(IK6 zNEv)doY5391_sbBWRUkk80L@s;!LEWLj?t-!9$0&isDQb2GbvEcW5#N@J<)luwIJU z%#mTbqwpq?>4}H9RHwfR5s;WJcS?z;9yBfr@-yhlIMCVSJfH&E8fFW~M$jNWBim~* z#Q|DJ!NkP67j)4B6MH*oD2{~{)c0dzVFzvEX5s)B_Dme?phgc93u^^PB@6on2nE`6 z&BVw7y4He;k*Sf9A%lVCIH=(u44Tyf*#;{28Ru*Q4Yq+tv%sTtAPF{5nR*e#Vh3-I z1{Lg(bLZxOM8VQ`K++rvps_@deL5UV85tNrm`QK?#G9_#(;u$jkd|ge9duzs46?9K zPrRus$Du48MHoe<8x|;wLnvVm(0XwK7On-1+S8e)-B4uNF22czogNFRU{SUni&{^LMun`O4>2FmM)%oOL!x^AmV~o=s zWH%asbZfIgG*1^~G?kwI-!nabx&ouA-1PW!V&c=KHPpGdp}ibX-)FjGo4UqyfyZJh ztnp6y`8m@Urs|8D6lX%ak|1|L1^}R4T$p%qMt)HVxZe)yJb_Kpw9=h8eZpxqmg)Yl zl|;ZtLSD#R#WVfxNf(~!m-Z&AOrPM#B0BxAXcV*)JxN<#7~Cyp0rj`0D+=n0O>b!6 z=48$<&II>unNw0Tr!R0?cWU}vV;=eK3HJ?^7(okzKoP|NifbVT4sg8>7J&8^LA@6c zA5{4XF>rxTO9Amg7}Q+^c}XuBM8<=h4Q7A?8RkQ{D9BZrC1?sb6LX+pF#R4skIZzj zW9t>fK<0vKQ4tV>0aDX)OH6;`FMn_Py5sA4rZa8IkO&2>$^&f)0l5TpzzK{EI&u}p z2G!{>b~>n60LoDe3=E*G0}}@=JA$!mrk{UgC~gK?O$6I`4?0Fp7@U!yCl`QvMhpxL z;Cq~*;-H%m8TqCgEYlPd6$Z6_7#J8%fUJYEFHO%sv0jsih=3m<3R)z`G5vp9y!!M>T#HnuFZ-n@pw+?&sR=vTNpbOeySi;D_05S*^(J+I+Q3cfiqFNXk z7`mtX+pU+L-XO=q0v^c*?a`12NkTEK)ZNYi>FdJgn|5$R8Ui3YK+Q*(9iWpSVR}GD z=rKX=5i?V=7GQe8J$=GEF0tue`<4hWg)vQEu%An8dRnrj0Fw&O^at;_#KgdtLV)x^ zF{o)Q$T;2Oaja5M2oGc}3&=`Pa~ftPxLb=GL#mWmX9pITBaCyC$kP)bQfT{*j zw^^q@xUMcX-7HB}fb|9s14G4h?+;wcOu=l^3zAgTSSPSEFie;}`vaGcU&+>c>4J}++6iypxTy+9kfKB znUM`NS;5T6(G1EdOst?g;8;LcZ8O1U!@%=h9PFSw0+?A?UxDFsopb1f6X$=39bBM+H;^n`2IK+o z92qYt3>iU7XTU?SjB`MKgt*)jWHVzBc#aHolLUhx=%O$XR%caa6FkqzzyQLmE0_d9 z_lJTo>q}-q(4qklW))|FPd3SWAx$lDpiVq-qPBs!U=vRa4BTB!j0{W?6P+X&7sGki-8DGO#`Jt6lhNv69X^WloROM%EW?<{G#cN-VN%AStk=j7Dt_Vl0wWjfsPCZ z&HXTfjtggCWM-Z2_)<~AP7Br~6JTIK%rKcF^bww=5;+N*T4ILIM=>xkPEVZAr3{`* z(gHP4;*;}B^GX=tvq~ilun8CNypBg=UP?}C{Pfl^y};?g-i*TF>rVMVH*_+<=XRzS zXlRIlCZQxi;SdkHv~xP>R@3S0K-YTyy)KqNeM7gJ_;mhBMy%5xcr!{*UvpwH=X8(9 z>pZ6iq{^^xBSI;8`lkpzZ5eO_65L#ZU73nHdD8)!vH?%t@PM0$;3*q$JMqJLH65g* z!;$7=2+rLI@JAuHDeuSX$+3VuIvq5zg76uL$6TD6J6-m(uF`bgcs+UM^vtqp@p_`n zC5hP}dU{;E9@})~1^iE^HFF0{Pnc@tF#W(rE`#X>v5W@O;u#&LEBx0qny$y2&7lb@ zoP-#77@&jUpd(2t!&YAT~Et5vZsWVP{|f z4KIP3lb{nGLBRrIb1O`rAh$$+JGa4lX~yYE@=H{v|5~((hZo$I1_v4gL%{UkyY!Xo zvq1$qRHz7v4O)8v+iDEHArPttbipA^d=ip+aElG926Rm!Obz(*A*lE+B=z6{e()i# z3=9n55q_v5&{676z*_PNAVr|iV_;yY0oG%q@RGNy*3 z7|M2^-fuZweEKW1^;4(&KQ$Ddp7+m1cKZGTJ#EIG>HRup;)bAGC}HOzfo|!8v6q5e z0Ucfix09jl4b%PGg~X>no0VlSy-VGQM-J4=fN25^K)~3b``;Par{CD8f2kh4p&1&q zejsN$8fwDn$J?KC* zkQz|-0aeaItPJ%Gpez8YpFw>dP@0F0LW2wiHK~Q5zAFJ4#183Mf(Eug;vlzzhT1`F zP%|4e1p#7%%mhtAfY_i>>q$_(pi%1?P&O#9&0*4JU;rrs4K#snWC4vrgB$@`Q3PUx z9I+FmfrEj8XS%%g`Ulfj{|$7We(JxG=JfwOs`Asj%$C?d#&bgiA-yuq>HMHUSa7fG zosOmeX98Se{-25R)44!HpLV*SeE@=xfnLygo2=7UGfGH9#&qv7N(gYaz;$_>>&Z_q zdSxiV*fYKRm7zK-D6eu%?|)^e%s6Mdap-jQ=~h+C1+*pzLi#x%<3MQ~*69FubwTY* zkk3FTj4@0%IG`am{nuX$0p0^hZs41~Uf)c9`XWw6k?DE24Fq^^2tvkYK_&`Jzdxs5 znrR1Q__Z#=Pe4ltdQ>k+8Wh(s3x9(WDAY0#b%tTuMRhSDP>&a+1lBKe5t_b0Ia@3V zGz0|eTY!|?FfuR%gIBtMcnshU5r_rqB_r#15N2Rl!^FSHXeJM26sSsr83l3*vQcf2{+1P}l?hS< z^U54?NPiEcA2i(yk^?y<090^5tpic}SfO3a4_pFz91@UGPLL+hWCBc6GMXmPF2H?E z)312xDg|YLj>~0)_!-pqh3NsG#emeYT*AS?Fc~cjK^_4YhDhqnxgj0PW>7Z+ZfscVfV7kBadS$i)0t^h37^btd>#4%-nBH#Ct`}Jb z=S}#lx77v4n|4)9Vta~{KC`Zbks;!?j{LN=;?xoo6%!-aMcLpb9cxtN1Evdj&e7U_ zuRuSRNx;a^kO8990;JSvyLYj^jftd@p$TjSDTqdNX16a`uK!RDX7}`fZY}Zc^N;Dr z)=fWPW+aF#F0oz5)!^%FsF20<2`=gq+Z`Sn@V0T!bTM&hQ%Acw#(+(Far*D6YEe{W_aD=cA-U5Ul?1zQ$NZMX9>3NsbA zw161_q7lZ_$IDA@KT>a0s|~f+V)}zbG0E+TtBq3P*h~#AjV;W;c1?fGY23^{8MKM) z3gh&`R8i6COs3w#h8bd>}X2kSAA5)O6|P}dlAmIt#a zsENZ2YLu`jW`M`Snd(9MS=je7PCwwTFDkSGlmc0pSXezZZ>9<1(gvTES@0iK|+E9maz zh`fPFoTXE<&a8cWMB|vVx0b#+gP8mc)Bc)u?nNnb|)TV zX4dIvO)U$i2MZbtPJdjaD?VM0(Ufm`k)W{^Pkg*vsGoC)r@vo({PY?|Q#1DDqlb7 zKr9wc&;SN#3_oCcyqvKzNX$VLdS*2PNbV0P2Qx4*Xn;mVBth~@PN0PlpkM{v77ZF? z11)xiDr3MU2NDOVgXo*CFiA)XWSGEovkU41l5;=-4K)JU_7!kjrQojTfv^rZDEmz3 zQ!xIc?y8`nnxd(oT5P4DTCAf`l$x7gma34HpO=!Em#&bVTB(qhn3>_Vhs>>9vdy?RT=8m^gSu z96S`9oH%68oUY%v=n&LoncmX}dAv~-xEJ8vw@pu1Hm;a{TFF>WMu&}`fkADvh}vbzHXeqJ3=C}S3?Rylm4RXU zSw&+BK^Bndu9*#l&C4Ie=}xP6XtE>XHawI zS8En>11($t#T=+T0HT>d5!g1pLe*GLQ|p@%yP6QM8)%icniG#&lOQCTL8n82)Pfqh zAewReX;ou>Mpo7!N0p%I_tlI$>VpodMhYq&RMBMo%X}j7Mxo4UNYFiE6p0js3sx^$ z01X)oacC%_ig&{|OrVN;FIoUiOHlE8sIA>T(AZI8RGITggGJiNl0`vj!UrQkE0-Wa zUL!#sqYx$|LB606W}^@mB}UaAB~U8m5t9ADz+jfh5X;2FY?R0Val0)Sk5C(^69x-w zSQ)U!>MSEt5irNAqn=SbL*O6-!(LWc5paf!hY6++mdKV*-U_k@w3B1e0%(B%$|z=u zpu`3hu;p^&fhRVYjd!$AY&>J-!I-APD6Isufe&HD5!nw6+oLp$Sr~_E6REJrq>m@a!rr;Y0Wpi>Ww9>BAaZP_?%EULlj%TvO^e8hXiRpR8u3XdC@Fnm~mrE1ln%<*jtTx^2 zK?&4cugU3L(__q*@qxFa*qxdqG5wd8v5I(|5@bvRGz$)@ig`d&I;jlP6W7;@)n5Ru z^0@&T7-C^zcLwbRVPZE14T3PTu?sUWFh}zm7p2wG;fq{{ym4ktS ziRUp70|PUUq!0rG3y&W7_#9APWnfbS?f2njW48mHhsGx*z`($64`MPfaDrTZf{}p% z>K5hzW(Ed!hx)~gP&v?!8?YQd1H^K6Z_pYr9?*HW3_LcViFBUj{2R1afRF$QArxzjJJ5>|_RM0gW&4JO-VT#{=5&&%^^d z^MIKrjT2=5ZcyylqG*rL4 zA`A?gJiB=r7_@jmTe-A(q*xdjba+4olrGOS5e5c51_2q4G`1_u3=D!fCD{xd>1_U> zCYBJW&&QF$2AV(;5CUE2%#q0kT8|&iS z3UmPpj(j#j(9u4i^Lsf8*gykA3_|Kc3=ABFU`tpaMiqfIi!g9l@-i@R6tg{GW?&Ey z;V5GRorDB&R5@5ZgJ4Q#83RWJ*c}33t2rv!Zi3dd3PFsj0vjdFzyVs~$WhHE%fi4Q zAi+_`wiND;dWbt9Mm2zqg1Vy-teFks!X~hd>U_!t;Cn%O|7FA0cqw6Z;7VPFu< zEXro!Xag%@5Sk8JGr`f$7R|`OARy!nTBOy%#t3TnGjLqxW?Ku#=LjEO&=DmZC4vkLoa>lCQN$q%$`b3D zK*7oZYFKe@V2Wk|-EXAM&cMLAkqP8ajt@Kx44j*oKrR)Q;oQQsg_VIpM4Ov|fpaSp z$a0a{!VCdH#Yrf;@Gg;)a1a6=ZBS=wx)} zc0L9M?ov>JCLqJ3#(16$ngMt;7(pkQFn}`vk0zrs8z@#m8GuKN5ma15G60V@BS-bY3=BNFjG*d6K!V4Jkq30{3@8Kem@tA$ct{4|F$G%!Nq9VFV9g>7 z91lU7%^7cltd!xgVf18&rZpZruzCie>Ff*)JobzrUqX@^j{~C}=x}!t297tN!qJgY zf}MduAcUuq5p-I)&|?7x2A*ohO3+}Y5GW1s)PViUB$UL(z`#=rcA$a~C>8M3fi1LP z;II>6VBo1|3v z5^rE&_T*$>;585g88Ly^=o-jj?I0l&kPjI6{tGeGGw_;%@;jSYQcfxZuNlbkJPgcR zg&7!l%|VBn^BVA4@^UgTh-DTr@Pbn{h?&j6YXeH*0%D+i!D|a*D=;vpgF?*iA;>-_ zUWWiq1_r(xd<+b{P9XO%h@}=W@H&H(GV*~2vw2;9fyzHYKG4D1ysjWygcz8`K@N12 z0IhBY1wEe}sG{QpwNc7Ap+PRlAbu9qRJg^&ya=@3CXs>Z7LzO^1A{~ohy@ap%w%A? z!vva8XJBIiEy`gB<#Q=X(9Z00pn4q?GgY9&v>4|Ub1^VT*Mc_dodYpJGBVkzl?;sM z7cf8;aLT?1Z8g6D$~BB3vQD6e$VD(GR8AFiV)W%`P?Kh&gM1}O>grks28J}yX^Y@h z2X8^H04-xs6lGvw$X8@w@Z@4(P-2W?Dq>IqT^2vlL5VSj(TPD3bk0DPA_GGvR30qB zRLr2n7|T@3z@Q8|1f~_Va)yls6oD!aKqs4n7FRNWmMt*O5#nKBkOQT4#yXHZ(?kb| z^BN(}b5jMa16AT-U{C`EC8)(D2^!yLYx85VvGSf zhCvauEbX`=1H*k}H6Uj*D1uH?yQIj#@EpQ0GIPhk-$r4-{ba zQ4pzUMnkaSd+I?+$%jF)i-CawWQ;3VSrk(d7uXn(d<>%xgW?PZP}7ouAsZqOGsOhS z6b}YP(E4DIDculNOhp<vl2c^7lSvQc;n?cEtX(EGcET~+B@>mR8>V+8?m;@OZ zSV3h2109UyV4nD(4!o_?T7ZE;t`~Gd&K^+3!ZgvvxE91aA}+|lU;-+5Knqzx zD-0O-f;t`Ga;JrffdO3ZfaV%aL6VxFG6%G6g@Hj4w2khMA_If00D}~`;GF29#2C#~ z#sEqpMhse@EX<)a-O=1wCIxgWUX}nTsYJ0dg9g+=Dmk_)F~&fgti%}0$_zT%k3kVs z_JNeo#8AEsRXJ!qB!ePoS(UsJ1H(>%=?Be?McK7Lrl|8wziV!6UJnWra6Iuduzv#e zy+9Qf$j4y8WJqMH3qmU}VFt64pc+Mi5tP3{6%MHAXPk3Qkb%J*ToWlUg32t=;nLdR zSXBhKvlxT5!G)G0BX|lNT52gWs)CXwtk_b97h69-_d2LDf`Z40nSlXbEbSBohYzU! zK`xd+$3to;L8Oq2CD4LbGw^xIUW~AE3A|8Y4(KEZuzOt?y}%AGWoBT26rMgXR~UlU z9?F3_1>htDDJ%WKW#u%Gqd-ecKxL(`&~$!FV@ZBvB?bmX(6SgiB?g8mLetGHjVl1Fp9AdNl>K<(y0oOtOu9f z(X7m%sY^&%1JddQkwul9#=yV;(i)E{2};upilFP_Kssx%Np67ZoQW!_0jhNv6!(F) zR4FkqY{QUcU{E{-)p{9K5;U#Ppa`1b09pD0o8&_V28MXhD3u5-7#NgaGB7ZJ+Zo^@ zNKS;I9x`g8%)kzcag{xwb_Zw`BLiry4&$7eBCvKxDYSS2w=`CYAh$F?#Z*Oy2(+QG ziy4~XzcQmYG;~2jwG3LIoy(y70IGZHCk8M;vJl8jaF&u|U&I+xx?`H?VF+ppfs{c?1r5+z3edJ&9dP}a!w4#O8H4pf zllQwo;ol?1zyN6mLxCtXxP2IuL5TvC>a{?PL{O?%0v*``u0%mmr^Faj&&sU9 z2+|P8$_x>Thq#-8L8}9F9UM}wjpi?6FjOgGP%;FaD9^y41S%xW7#I{m>$gA^`YWi_ zpb8zdMGI7)|AUGZF)%2CN^wwqt|$hw5!OnDSLjR=Js1>0$FP9vb8Cbea7n_T2)d;d z6m9-cnTZYz%Ag@kum?d6GprtDWd=>bDKTRD4|E*}Lp`{Qpoj5p@SeZfdeoBlnOhpU~%AjkZ!5PTx z258B`F1UL_K)GPfU2&NGyTJBYvNAA03ijP#_b~=TT(bvk9b<@YJ-7k75A2*MRt5%0 z`|~`s{TTpp+y$`eURDMMEl~788<+@(LHZG(oMgrWsu=FUT?O7EGDlF70qV^MV3U@D zya}2b@dRA~q%MKt&uCU=&}1irB4~XEsBm$|ArHzUpyDtcLmo6q%Ag1u#Rlnb#~}|o zquR4xiGg7`h62#cEQ2Db)&d!D9EUt;?H|Yi&oSgdv$_n5pu@I6`q?GXJqVUp2CWOM zheT!!s2!up1gir<8HI7qPDxmut;qzcvq7hqnS)zbT1=ph2549bQYGpzLHiSy;QoRh zxO>W0%)s$qYQ7?jwz`#}oaVKc_ z735AMDR6M1xYLP23zQr{g$JnA#&jYB8w;p|VwMZ)u6=^1zaUU1ne$%;=Dtthgbo_5 zu}DlwVPO1J4^EI3Yzz$MA3?3t&x|0&GuapzAjSGuusqX52OY3~zCpPzkUHQyv<~pl z0XIv3Knr6(9dJwcC%6s9G%-X6+|>OA<%WW52v%8eQ`ZGF4ghMpg62m+2V62TF*!=Z zsxr`^HK@-FIzrnNBnxi4f^PIcsFet7Bt=;8kU{H~n-r!&?$5+b0pm-1}79cZy4NMF)P9nt5z)&kQ{f2|FyeLTB zN2t1$G7$HgOiy$)76%&v+V22TepP0=p`)=JS1AL77HFfS5dZW@M`QVVkW1NEK%-^g z0$QpR)b2HgWg*Zc6XP67IR*w9a7-J6k_Tw$P(BA#M45urrL!|IKzg@kAX%n~0pQk! zrW^xC&1*Yiv+>gQku?%7VMJpv&tlL48`#xR@fSUj?cHXUT&7!33%TH5nKf zKvm#6s8|UDgCb}NBq-7@!o|R~F|Zg1RHHYFQbSPi`wR z)H5i8>L5_H#U}^1R2k%MNVNrSVuAbuZq>*$u!90a>Kmw}(FXY*)E)(y#W*KLj)6fA z94xvZ3C1WbP-~P6;zZC9Z)TvfmeCDdtbnwEcHY!8&T*7yV9?zS>f3pMrDn3jvW+L0 z&onUr-24Gm8j$9X7ZWrvL4^{iRFMQ30j`65m_UKKgB__o@f6`NMOb^{CseGYo`FFN zbW|89G(lwoIH-`?5&;Yh;2IuW!Gr2lP)M1{BSH#Pl|n+w+6h!@fUf?5tPW(H!>qu- z08R^_oAMMv9SKnXtO=qU5);#}I2jAFff@jd<)^=PGL~iqv5!oj=x8r8UEbN4Lm9+> z3em!71de7<*nt{N4h&kL`r1Q$x|g%DOghLCa3o1Fu!C&2RuN%fU<9qiWncjB$DH$C zfq_9Av|*Srj|s$P46;Zq0x1EFO`c|FU@%_^O4a#HUlkY_-hk%4K&{Z<3eaK#G-A-E zF#W8vu?!oCy;5QNduL-=4G{ah0ys!mOBjklExKrk@1P~W7U;yjON!G?T#Qxg!2@D8 zRiJ6rlT5;j3=C}l!GIk!BWvT!$H2gJib)$J4)P}h16bVF1~khv4LtQ~2O8yOlmd+w zLu|2&0+qSapy6Doz%EcGmH}mIh=9Ew7Xt$b3mDbggHF)}VJW%Q_PxRk3?R&wV829|fdPcM6zoCuI|y^B z+uI8=Fn}9A_~#=sJ@ZE`_jJb?5phdHm=&ON0FAgAL&ZUc8-qk42LduMn1HMf zVhk0BS#1hZHa-7jhxqgb<}&QlHyrckVHBUf_n5b=s00Ip6_R>ZkZIP_H)@qiPPbpl z!7LFqDIuzYHPMJ-v-@ zPnYMPD?0u4t_a2H-@J@f#6b-`HU?%;mvugBkhK8Ou+DH{VbsFgS$RO5igK^Yl9&IWrJq%#EK##8dlT+`)uaw5 z^eO(vlc&#_E5L0Du2va9v$9~PfTk2d^&%+fKr}=ew9gzYt<1mxzC??WA!PbPJ7x(H zP{qNB2s%)}noj?FHd11GVt}#5^k-=sMW(L}FqW`{jb4GqAVEffMzKINXmkifgN6q{ zG^ke&qCr(5hz^f0{DevXHMfr(+$^u%P%*y##?OSWS6N(Al$nuxH#QE%(#r>4+A3$6Z1os>1V@?Uafxxk7b#tMK%KpL1iK`NOzF-3%s)bKGdGADx^#=ykF$Xw3} zGD`{MMDPu6@Y6FlGlE+L+1380} z31llXd2D8=UT%ize3i=59G}4<{|XZFy0gI{&k3rp;U0Ry1d0SuC_;joi4zoNjGSE4 z88@~H`+|ankrTB26B5WwpnzduVqs!t1Sy2Fq(NIkIYCE{GI2_R1C@(`5h{mZNl!n( zCM+Vs&cMjVTnLIXq@b4N|PNMjjZh>JjEB`5Rrib!KU-aX79r-Fi# ziBo)fVz{w1b0sJ1^oxYh=Wkmeoxcj5anEW#JSDryh_eSU45Ho?xAxAf+LrVhpkt zB+dx-Vjalo%uFDYn3=#Lu+XvsB{W!Qfiy64g3@g%NGXzE1;OX8f~L0Mv7kMDRkX3R zTrlh>c`CFQ)M~S*9P4Hg;ut&oZ4a#@Kv1>wW=& zX>DTS(>L%baH=GgB*zz*4qUnl_;!@KS zI;@*miW2iuraP)z`b{_BGiI5-|GP2k^fL;^eA5l%jpe3q;uIEgLpB_9Eh7VDO=EmX zWkD)KW^sH$W=ec^YGr&;a#;#PaY3zQG;?o7%M1B*_nOaVlRj`s|44vMW)Gj-{z)*sJ`hEu!$?5(b#!A8|@x>)Y3^}QJ$ski1l1dWe zrzc8_%TF)Z&nz%~Z=JZ%baqD*VF5_t6Gu_^#HSxfGZvj*#KtKs?BwGb@95$Z z6dw{9;2Iwg>g3}&eW8_*-1G}SIasG#B^z^1&v|LfJKadrSWdl|!70Qs-X+&DCB-Qx z)djq~9UK(N#YNd5XF~#G^7|6$>A980QqwD{c^Uk*z_}wCOiU}#ql|rDG29HzhF66 zYx?Uqwq{%fiJ739AU-*1`ogU)xzmeSOhhIpq_Rx^=V-#~$Jg|W?ZyhzjQraw-v2}40V#Jb|?AD*pKn!X{~RAu`5WMh@-0v#gU(x60I01XBP@Cm_S0(4Z= z^nf~JX@0PYCGq*mC8;GA@g>s@HH{TmQd2U^rW?c?i%!3gWXv;NY-^zS^bKEZ1*T8( zoU1y$K}B%szdJf4ao<2h;7j zr<EJ&=pi@=NnlU{RElpPZNjj>pWD z_!0)tE{~GbcxaSQfAG&zbUN!+7xC#6c$L_uuNM^;o&MnjGyn978K$DsFJ&7GPb%VI zO9ZEn>4vwwg%$GiAPER5p?UcGxWEqrnEvnzmnd&;5O}W%B)3h!>0%-+1P6BY;vKZEs`K;p>IEWQL3)XBL8 z(-Zpwgt5rudOI~7b>U95KmQvH>mDWp5Uvt=nYx?I&BI45vdXzob zLFG_taq)D8f3~vI&$sdGOn*ODRAu^}7ID#O&0-Q3&@g5I8C{l`Q<}<9npd2eo|l@U zkercN!~hBZVz4~OKi~jQPc51LG0s?+H9jY^xMVt?*IW}8P+pmoDmLA0X@>Z8gJ><5 z>G_A5S*IsO`l?J%=n@kb1qEqJY8gs7rRWT%_#UN0aBOD8U_ zPND7$$;Cy}H?Copoc`eqGxzlSe(B=V9sIckrhjZVmYc4dWz04GkLr5K>GgTWqSF`D z8Y@n3EHV|DzGdnL;px8NTH@0WOq7$EZpUcK&YGB#lA1ETuGmy^di)nN$?2zi9XY4J z+^xmOQ2;F@r>|=_7UNIJjYkwe@g>s>SxjW5i&7I);vo^sPyo)9sVUI4^pMmUASli~ zJt4re4v2M%uCCkUhsdt7@t!JEJwKb`?*ejSRg71g3v)@)Vf9&u=crbQdQU0mgvo2Lj#1r%za9&oOq%#>sL0`4e|>G92;9MkXXP2`yVVa`mR>2d|e64QJ8`go?tw|eqSZ|LRc znSN$pGtcxrGAumP|E`kZnXUt3U65konf_q0JoA^a(kv3wWy(z@rk!2GGyOeC zXM(N<&vb+NGbN_)dz#L(ovF}RhG}|&x`G5_=JW?w%f)#?eOS;C7ifKl?DRlG4drP% zoIKODij6C#&%Y)qF+HouIA{9pHX9yB;prb&+e06NIrrGrur4X!cKf`a)(O;pqvVa|EV4II>7gpOED%GF{--8UfHD z;K31=64u<)D6+&-4qKywae(`r!UBs4E7N0(HMY zeN?9D4KqFEr*A0AmzcgMC!c3JSGqIL^h?FYD$~#K+VL>5O}|)>FV3hieWPF$$fpgl zyze^+X(GCgL2HAu~d^OEAMpe3A2(>K~@2{Xz}FXRU+Kj^?BKmEZDdx`0b z%8bwO9$;W#06EeXv><=_!!P2cdSTpoVfW! z+l@hbLF2aK)8(V*Do;NU#lkaPtirf)xGT5?#_i0o96f#FTLH1@u9e2Sxe(2) z=>gTo($fQ~j5)Sd8D}$sSpw;3O}y;^)y6E02!j&Wg$qv)sxe-VY!GjqvBLDf?Z!gW z?W&B~rvI)s=9*qmW6VC?HXc(fC()Q2R8@YPzM#gK1H;1UymiJB(?jZveVHuHrhl~7 z5Mj2oFr0pImbfsBrMa2$^n=b;;>_lz#@j#6lT&A$uJA?DNeX(}2Kd|&Mut%E8DgNw zUCuDQfPb;r^mXe+1^7XuvLHcFOfxb>OkWtssK^hx_ZB1w+Ck085I%k37s*6^(A8B4 z!LaF!UnTRW2b9iL+TQ19(Z@Lbz-LK^=>jroLeupEEEELeL24No7(mxv3Nh$1)K6c1 zSXVj}G>8q_UJ8{3I}Wt{gavdGG6MsHAj7Bspp*`h2X+3181%t=GeLY12I&W#)c|6H z=8=UM3>mnmpKmr6=L8Ky2r(El*iG*@DUzSAr`;qly~s zc2&OobTbcg0mc{8?=KLSpFU4HiUTx80(PGeXp1ca0|RJWLx{ng!D9OMh;(_ubf_?B zm_vxclA(M0?V0NG)5Rjw1*YdQ>IgW3j%S8i3pVEkR0C){M2Nwf0dyZc$lsu80Fb{y z8)`u6LE|Js47LoW)4A79m#+ui!Uhrs4Vwrt*fZpUSI|IC9uQ)1Wax(SLG!ml49*Oo z3#UQqK@*cg46Y34pz@&kKOqKphWAiDXxv4J!IOaxrf_;?ji@K^CurDWP#^2XeA74i%nf% zZa4iyt})BhujYbmxv9Cy1(l%MOBCF4_UkkjpMI~+_y?$(zSM54F!@7?lq4dXLu<2Q zSd(La7^m3u&+W#GCfgPyOuyS>%8i)^8#;~s85yP*9B}lX{<~tKJZLbAfzh1-bbl21 z@;FA;=?A2I#BJRnr|5&i4CV6aI(7^+x69}< zeM7IW_;hbEA09^M=?gUNl&7C|_6M;i^cuTQ&yEh`Vf3EfaGqOydUb#X&-B|doIKO3 z_vGr^`=oJI^gRUHg?d z&-D2BON6J3-Cz-%zB@XLXS#K#FAqfH>{X@0)2Hd^ zx1YgiGhMr8A?s;hEn3t5|{;n(0BapNt99*GRT0!-PPImoZ`b zgI~qs)8Bizuxo)b6C>zMSMZ4&3=E8*!A(%AfrbdEt^lPw#u$iixo558na(fiBQbsU zk#L^rzZdZGOs}q5$TMAAqK#+z??WOy)2%ZZc^CtyKTygQpT6EhL4p^Qq8T8!Vlt*p z_n2U+%nLejje&syREaQ#Ob3VQYL*tB>8E>5d8XTg%)2k8WH5dIo(6VEAb4+4Hkj_s zo*^;a`cE;>^wr@OJkyP<7D`O74%6V_0IddO0G)lJU$syMEHu5jZLP%g>ULe8>AMRU zB_Pp~?x!Fz{q-&p9>(nH2^<;X)1#%8C8nQ$Q^7v{n5v%O^wUS?@-T8iJgPls1rIN1 z7#w6SC@}n{2OJg=XAGELz#%9;-CNQJw8?~lfiV}N9$PY4{M=o5dYPb_plt!a)Smufg0Z-yHUk65P1c}eq1YH0K*+LCf7iY>@heP&FXu)~|tbKoX$J2Xy2WXyY=d zO#{*Zayy944VqM7fZVeU5(m}YpksWvp{WrZsO$_3AP0j(P=|p5G=B?Xb3^NPP(A>e z4{|&x*NW&ca5I2PClH6*dAh-5NPvJQlR@(}Fnyo{Awl{;o&cRA3$h>7umrJTYCwlE zfz*Kf16lwJQUhv}f!HuLphe3dHK11J9;m-TjZ_dDre^xF$;Ptvpqs^^C$fleK)I!Nft~1ri6v7AO#4;@~8u3yF0;kRx;<2af!MnSMOh zpT8dDUJw@+Qy?}dmO*W35E~S;pqu?fxEL5ftF1xpQxLlXv~C7u9Tx+5sVpeWK(hbO95E~TtpsWF7gUkf6K@J8rjbLn0RDswM3=H)Q;CM2G)OVmv z2$BHBH#l<{LUJr<$N(e`ia$_hgRw!KDi9mwL(onJ7#n~}>$3abuAm4)6FukDV{2;xc(Vk17 z_y;Khh0-NZ_5(2(7#Kjy)j{H*L<3@TL)+A##StKJQ1cDMMrrVXntRX#JwYeZgBlwk z3}S;C9C9E}8bJ~-h|LXh87TjQ8d;#zK(8@CN-`190(S-m22dFRVuSKDC}V)wplk_p z3y2L$`Jh$=hz&~lppXQyLFz%P20(0(deDi_AT}r$fOe#T>;i=d2#eGkL+U@!B7Kk| zP*w!7VHGS$6G$ACBS36e1qNhET}03vH+COKvfP%FDQ3_*s%H)6i_fV z^`I0E<5+@%NDy*Q2q+PPG=uUyhz+Y?K?w{b4l)qLh6E!61E}H$nFDJ3fa+q98c+@b zv0*t2)J6q~gK`jv%^e2{e+C8y&_ZO81Ss2p*xaBN90LObXafMqP|&g#aEdjCAaRhLptM#G;(#myB^Z#QphN~@!}=JYAOnem6oc5XEC)7J1X5;zN>9-7 zwV)CYT=9T<8?d@Vgn|Z0a|zoVuSkdAWa}P$U&e%L=jPl1z?|>Pc z%ph$77m)oh2~hBX*dU*P8hRi$$TCnp17d@G58C$yVuQp%7m$P4AaPLr0b+y1!J%RX z2^A0)*5?~mp{D)}aIsG+9F8 z5X6R+-5}#Z)_^+t`JfbU2`LmnY;I6EGcYiK7PW)afEL?>6Q?C4K0$15P^*N2fdMqu z4RRtV4nb^gkk>)iV}e#8f+Rq32x7w|E<-H?#T$qX69)}?gVclK4aA0tGcz(UfW$$e z3}VB?rJ&-V0t&>2iGz;A5s_f1X8_Hxcz_g1Fff3oSilKD3bFAtQZ&+Kyd`( zz-lN^YYL_st0KR1s8||3l>n;5s`tMa}KWEY#_B2hz$!BaP06MAcs?c z+yXKaWD$rB^D)S=AaPJ=f!I(F*E4{7A2N_3K~Q{(fNBoVA><%m+CqE-iZhrv$Ppkm zNG&L7fY=}pfQK4vAr1w#Y(e6nIsnv}0I@+10lKpn3;%pDQT$f)l1KBwK>mFg2hNKbRVDQ_B{TEkSIUnh;R@!xVw$ zLqtHMj|>b9pyn@#4XPYK`%FM=kZ(W<6T}Aj9#kEI*dX773XQpc(Dp1*8zQNapar*D92{zNEx!hHzOKv#dg@ahq&%;%w zPX@8VK`d|AD2eIMH~D^;Zl0SdKb`H7i^ue+M=mPUxjdpgY(ZU4Mo{Gj+6)XD6o#^U zkl3IjaA9gdJ6mDwmD7#$CIs{TMN-N%egD?A;=JH8oZ zNZa)I(0cLuNuV{(Q0bXS>@`U2lSu3jNNmtaRWRfJAc-@978F9w1aBaQvccELLfIk^ zH4q;7Fn9=)K>;EGN*fHIYYkx*=uG$D<||$gx?B_{1Ud;A#&$u{20D)cCJwrE6vhrm zQj?Fw2Hz$NwZ0ljyb+1r4q<~TUIvC<2nX!O$Z|GH&s~%gg;+p$OoO#CI3ltAkk~OuY|triFvoWziO)b{FGFIVm|pJ_ zB|bf`aDs#+6KE3&)OyhEelTGWT_eR=Bj*%5JOgT(eiV#gz~bCB4TNNms! zIhgHJki=Iav9}?yk3iU<@|1z$9)trG>@XyD z5)wO)1GFg&YC+X>`@O#6Mxb-(U>=!|q!xV22~_DmB=PGU(-U5~h}A2Cjx~VFTOhGr zkl2Ap>=-0=ITCvv5_<=T4Qf_^wt;dY?%_BN5{KG#5yVylpBTl!06xW zcLoMftKk%g4HbU~Vnb)&KY`d#aSa|sUNQo)LA5?;xRZy0K^V$*1c^g~&YMRW5##|# z60u0^tm*QRT;lcZNJ5i9Y-r$22eF~%Z3MBQ;@d!MsGV1l*q=absQN!3HmLOh3ItvT z24N_h8+2+9RE;Qztp;j$GcYhnfjCeJO(eDj65Acbh8pAzH54?T6#x>4>ILtWhN?+~ zssT-+WFe_30kNT;spJLi#D!|;1xY~J3z676Kx}AoI0|Az)jU9AgD&=Fgo>+y&enjk z-H_NhNbDXM8&pnhf^k6C@gT8pBC+2hv4ug$WI=r_31Wk~KAvA`*fmJ(E+qC85F0e4!oa{V6U2s^y#mAr zbuvNwm_cl)_8fJmmQ1!cz*czZi(V#vy z2C+fScm@Urb3q0M(D{v^eBlHVhpO=fu|b{zC5Ipo2Py%&iw0JX<{^pKAhElV*wa94 zkU~N48zG>%Y>w`|w0ENd?un367z_13yhKBJb z5F6^MlOQ%!{5*&a6@La|L&ZUdcEW6725k|Bii7UpgNZ93iPx)vI8cLZL2Rf7XAm1I z4&G}F6;D7CF9)%q;(hFjPlKe@K1XR%t zB=&P8_D2vKRG2d`Fnj~CL7EvD7=A$w0@aoOLE=zzctsf)7@=weMHv``L5E0#>Kc$Z zRE?@A14BKm1k?gaKuZ@J5F6?nM-UrokSo+6(7c@=NE~WVEQk$NQ;5W_LSpxT*wCn) zieT3>%tLS(mV?+(U#2^C>?$`U5F4uA28kU2 zW`jlz7#J8L!JO#}d>3ogw}IGDNA!Z&P|eej*sGA(yFhGcNE`*RK_d(d3=Aj57#Kk3 zX@fHLeULabM4y1zQ1$OYY^eAb5L*kHBS3r3VMQOWIHElxi^Ns}v7we3gV@mEwFj}G z;+`Nj)Upr|8#DyMz`zh8&cGlHWhaBgp=$EPK{*2IqGBY8MkIDW5_=Yi4OKrM#D*HQ z6U2s!?*p-+mYoK%p$@$VVnfxx1hGMrJfM(&3vwNZ1DfHGK=>YX2^FL0^b27Qa`hS@ zai|(g5F2VJ=q^)O+TMv$-p2CW$S>%VQI)5#DPYE4TufZ><(f>#eG0*sCXWT4K=72iM<5G zhB|Hohz(V<3&e)%Jqlt&!i3?ZWIY3eFqCrzBmq@)AH;@Q`~<{?ihn|4gNA(>p?Zy_ z7#Lt|HxL`@h)56{sy7A11`XMPR<24hFbIR#py~HwkOWjw9f%FJxDSav8N`OFnFnG+ z)hq_Fq2im6*awl=7pC8TTqJJ$4oT=Q5}RF`fdO`frvQizau;YY7sQ5^vntc=CxwaE z8zBiuR-i&aF8*4k_8o

J6l2`HOi4s=g8M3Fv- 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

UtqAuw&DT^7Bfje^gzs!U^W*rB;+ocPKCu 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

  • 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%0A+*5W6VHjSA#73$H2f~ z1C;>XQ0oL`gF4|JP&Vl17C$H(H0}}tWh*fWrOYk-2!FLVPs&~1!C9RF)%D)WMDV|;@B}TY-D6$I0j{JWn^GD17+_AEsun< zLF)!?K-tF_85r(C*(Vtp7@k1cpc~a*LD{z$85ll5*`O;Hzd_kgKsTI%PSyrR!AnL4 z2GGgcAofQ_1_sc{+8{P)4FTw2Z4eu@h5&T1Hi*r}#J~VLSR2IVU}9hZ9jpyvgRWi# z9jpyv3otP-81O>UlPnVhgEf>5x~R<=!mej9U}9i!hj17`m*GT#*r4VO0|P?>lnp8m z(x7Zk1_p*4C>zw4dn_b8&qG^K-r)=q94SDcIjtA*`Ru1F)yh6cVS=vwfR>< zB|zQu^-wmb*|ZhP2AvhK8_EWq!f_DF23;IW4eAH_K-r-2iXhP0)k0nj44|=s2&e?eXK_$A=xm@AC>u0L3_5Weq#oqx zYLGa{6wn21P&UY7&;i;)&=HUsAaOrPjS4zI8zc^@QCC34IYH(BIw%KJZf}CJLB;S< z5F1p!GB7ZlhO$9%e-X+CH9)RI*`OxcT__vWjeiJbgZegKKx|N)GB7awg0evl1>MOk z6jTrCAhPi@FbF|+r13!6pn6>h$_CZn5>PfMNadhxP(`8wWrOMqEhrmQ9UDN|pfcYK z$_9nB4V2vmy0{)R{sXcY)O_}UN-P3hrT}GwZnO=7vOyP-M?u-3tDaM!Y|!PT8Bq2i z1_p*|5F3>j4QhzqfU-di(R)xfs3H0U$_9n#J1AR|fq~%@KdAj5&A^}yI<--Nfk6m5%Eb+3 zgDew-vOyMzL)oCbE(>LY8l1{dHt1%1O(+{=fj*QCs{2i$Y-0un25TtW0@VI@g>pc- z%NxoDa(qfvf~*T7`8&$pmxInC>xYrPeIwB?0ON(1})3I z4rPOyba$a_P{CFI7|NN%z`*bh$_DK^`T=Ew=6(J{*`P)Qs~`h|P%;Aps1d;pWrNlU z3qskuKw}9|HfYz8ER+rE`zb@&pf-digk2B5$<`RcVE|oZYzt+B8WE0AHmFSy0%C*W zf`Ne{3d#lrbpn(PN_1&ZHmLN>fwDnELq$+FDBV;**`Vfmogk?EPlfdRTc8r4%A*U) z2KBrqK-r+-wP{c`s8Ru)NiLKMiM~ZpaZnwz49W%-?>j+kP^M>KVAv03gB*Pn%H{?Y zrKh1BP>FUP$_Dx15r_>PyL|y=gEYT~vO%@tS123QO8yOHgGxg-AqEDabOr`ci!KZ(3$7;;ANc*3=EneiA+dYtq)~`EHH(#K|yB?WrN0X9ieQ{rSk4jHs~UG zUnmxOW$_BNDYoTn= z;6pQ%4NBFWP&Vkw!G0(kbdmg2C>vDm&W5rwOC{C+4Klt@7*xPyENYTcfOii2hzFGAU@j0_Cdp=?P;28O#(HfXEO z<9a9u)Ixm;WrJF%@1bnaV%D!vHt4SJ-%vKFu?kuU3$hrrb%tG-fdRw@-TTc8WrL=L zKqn@G#6eqRB%$JHpq5HP$pqu zU;t@joC~T186Y>dGtPr30^iRG$~_E_i`E%IO94P#RFI*d>H&1qJBSTxtAN4^#0FjP z$-uw>o|gqx8=xa*K;ocb0S4%_{xXR9pnSs!YTGa{Fnj>n&j_-S0kV;e5me8B)Pbfc zSAiG|4B)Bx)ets#Iu_Iz0tGrq4Jd0fFff2;-9h6Hpg;$SgX$6g1BQi%^^C@%tUb8AGPmuW%Eu2W^yw z#T}@ug2f%Ed}4&g9XQOPaR&-|MrhoDJPnIGP)8gVcc2y>BQ)+noo`s&fr=qm+<^vA z;c*A*Wy9hQ)U#%U#vM4=pm7JDxrW9aIH;g;2U>{02#q_?U@9Xt?!Xh%(6|E^H_*5P ztrLL7T?VKF4U0SQv@$gA8bDzSjXO~B!3d4J86a_J+=2SNjL^6P-!Kl1yFDN^(6|HN z9uAGWD>8DxbY^L`wWz1n@pMF8KIC%Q|!~G$QT+D=%845n)bOgET*dt!+JFQ`=jx*8lb(=9eV<5ZUNbZ%~SgXznaXB()3x(y5r z44|n^*xG*3bS8`qn!;q1pFY9QMcEeAF<@X|U;)j5L)ii#HmKppz`y`rrV3?iAc>oR z+0%ElPSjTg^(Pn@7z#i_P<9Oxy93OgZt*!yUjZt81S|wfu?!5LIXl>L`#aP7*J+B^ ze?gK4FXn`51K(c=WlMmj&7(2y*sR}Nvj zgB=E5iV2lyfk=SGCxFi050A-7S+0$n@*k;2H69cbCgbohR07*mHOOV(bKy2uE@E#=g2_!aX z9tgGu1vK{qV}s^g&N59zqQj0Ih6;vcU@np={7x4oov>{szVd&Dp@%plKS| zQg+bP42%t$j)AcYK<0zG&!C&SA#6|+lYyZF!U4y@6eRWnB=#C4_6{WW5hONvy&u$q zJ4oW-B^priFG%7HoS@4ppc3Hqdr-E-^#AP&?$h%k=GDR$lYy6QfLf-YS^>0#1Iqq` z#O44k;ed*ZAh8vY*g8mT3naD+hz)9%gQ{61c0KsILa0Orl0*p-y8*-oRn(vZZIReB zkl0H=Y*613RBa-$!Pgi<#ZMrKUxBbeBgYI34q3<5}O z86>s_i0wDMLDE{E13D0sGTnZ4ns_~EG#j>#sRN`6)Ybsq%8tYaja0+btU(e74Nk+v zK?Bk-HfRtUw#E)L@C;+W0O^GeyMP9p8G}I8JjipPtNfr6ph0Dr2GBq4A2-cj13wWhOt3o!LWsUpz&WAI|pPJbi|{A2ekYeI?4eW=Y=iO0*&p$*r4%T z*di^^7%q$r8n=b9K|{4LHfVSjws;FPBnxAMhGAiB(9kQG4a$h1;a1qHF3=Dwj13xA zg|R_Hsj$_6I-mte&;bVUU4&3J`2ImC8+_#;lnuUS5XuH$EeK_o@Pd|KLpk941flF6 zBnxIBv6mpRHz2Y1AhAy%v9BPpA0V;cAlUT`;JXE(7K85-gt7%d%cG!udl@7)Xmk^{ z{?P3rOrcNbDC#>@T3TKCq>EpwUOzYG=@ZBa96iWQ4In1B);=XfP4R1`Qy>*q|{( z7#lQB2xBLJ){KF=)S!A9$_D$t0?Gm9#11SIwxB=!m<_7)^IXlxK>8E8BZ#s-Z6 z!q}j3KN$N1Xsi#$0pGL-bshMoJt!M|(;k!!zG)B22H&&?WrHu;gR;RF?LpZApw)0t zb_^0b1J15zU?_oe7#JFm*gZ(>8A$9UNbC(r>^(^A6G-eUNbCnl>^C5GJ=Arep*2`Y zuz=R*LB$1-*fL0L4J5V+659cZ?SsUQKw_sLvFi(vI5kM@4kY#zB=!O%_8KJi4kY#w zB=!X)_8lZPXz+?L3tIkv0ZD*{EkP*|v?3AO-3EL`OGpeI?kfY_jE z4+aK?2_QD~VE8#8HuPls6(Ba`Y<`9fk6bs2CcIJ^=U!u#_1RLFzQYJ za8H+I`o2T#CY&9Nj0`*s3=DUt&o6P3pB`7ECo%orO#=bWDR7C`?xM=m*@~n^q(EWK z0_yI90vy!OXJljm4JO=Wm_Fw)yWI43V%ieZt*Vv_a56A4GJsk*cc<&`Un$R2!Z5vn zM^SA0Hr03mUJsZY=<48epDr=o&rnl9aswM911RZ%oCq3)1vv*4%7>=k zS5H-!-OGgPLJf9kIsx5kGo3$^OPWc7Y5ImYTw>Gr{ge~nHDPCD0F5tzj8mO%zkyMj zDTZl!LX4Q$^nWYL1T;azE})?WkUVH^1!kQ-XrnD?fdDi~?UQdPDTa^P{L(kV9=f}?;I=5^nhvlfv<96)APRa3GfDR zGBSXAL?8=wr|89Q1nNY>9CQ%PK|h$LC+rjxn{KyL zLx6V%C&ERB)BEo`NHa+=gAJ8^!i*YV50K0^p1$5CR(`r(h_}deEddn)&Nnc}P1mn$ zlxH%5m@%F2;RHb*E`+iw?$$)+jD;bP7^Lh2GEGk-RbA+8s(=i`^qOV z{oPz00p2f2x~!+)KPo6a{ToP9OjuEXmw_8$r0w+j^iXN02B?kq=IID%@gT|DgN7g& z7{Fx$6R7u(6gMr*;9P3?mj%_U65NOk3mUkG1toX~Et38P)8ly+#ivi>+9(LJ5;Uv@ ziXG?a^}(Xj)AK5wB&J8{2ng_gKyr`k^wT`m(o7ear%$NW7MuQ$r&>Vk4>uzNEG>bC z2w?WjLvybJ3phQ1((s(_|JXsA$%F+Qi_^QrJp{BgcoE?RTA~Be z3(6YceXdCUv0wp*M?GlqGDr=~d=p+oc=#fPrx0j_0ZD%d3j+gaw-VG@;1U7E=4C?- z-ws|zhAB)844}XQO@M&x0=dT$VjeeWWCo;0z6r1bAfx5E&$J`u!&k z($mE(I|Qb`+s(zn83)nIz&xGbvO|3Oy?Q-P4mQYuG*k$rOehbk3^dgavcZCN8lR$= z6=(x3$PsW4BUu%Ob*<63~(nM)(0VZwXU#3(epLw&@Svhl$BvMGH9-VMg$vBq-!!rq{2jmu7mx zHhluWqL>wUiz@>I19Vh~0kmEA2yB2J>IX&!1_o2m_zO~`ZQz=|Kr3EsdYWOXfL4MC zBLisU6=XiBB80gw9!--5_w)mxl4qM?ssJyCD5B&|n(lvzU7D$Yd-?~jR54l5t`(3O zuz+nqQkpVdnq5SiX$$xC1xpmgru(sr2x$EfWn=)22!reg^*um(L175qsfy%i2A=5) z;#I}0F0-ShEHQ+B(3(D&{{Lw1kKh5jUlz2v6{H5{J_&JzSF)yabBIVYEr2MUZpR@a zz&im+K4*HoU#v9K3yA#GIDP?M4he+zyy^8<*rk~ac)>PV#dDy#v;j#es7VHL1<0rE zpaCKzpH}cr-_X=3W(8U_3{nGg=?@7+Y6G?0Kyo1c%b@yUN%RFDI8VziM6>^dG$K!z zOn>h?TbhZ5AM8}wLug86WDve8n|{BPOPa}t9}>UM(3DO=Qd%)RJ}W|+X#&L5>3vN6 z0=zu32&1Z|TXTs>Gu?m~H9e0@M1Z#iNxo*f{slp4CK-Y06QbqCWP>?T1MrV5BLiqW zACy$;rq_d%&Jmbya6m(Bx?iW0fYuK=Mh4I{1xUUDn*Kon1l}Hs6u=t@q4OK=4kV=pb+NR5kq)Rh#h)i#2XcV&oEfEG8 z05g1zDkB4E)&ryzG@}KQ0~xLi8X!Y*>=BXa1#MblvT|IgfjL2qkpa|^0O{|Vo}cb5 z&BP)K3Cv?WA_7`})DYzsXig7iej1wj5~9;Luu6zoC8C)xqRt3j%>XhVH1`M7-;Jh! zi|8~#ele>yH0^KH5!Qo>2blKtXxfj6f@@XTRcQKIG#D8`lS?4$Cr$S+36*9N5u3h2 zQ%fxO0-DkV8i*DVXsQur)lW35Y{VEC?t|hPib3i?%r9u>z0hD}0L|clte!UgerT*T zlZ-gnlcLE8gcfBG)|X#({Y28b#dG;0Xc1X_cO z>`?|O28KQ?9amN2rwncO+UaWA|_;prl>&<5>mcs;&UMCWxxZ#NQUl_gDi&vWzK0O zX)M#%g(-0ef!47ir-&O+Q$g!kk;T72e6SMDG9Gz|;|}ma+uxyJh^uU7t#vVqn zI#5*JVwj#VkxPp0&@BdrCH&J99JG{pGhQ(;1n@C1++$#1*gjqVr-KaZ4+e(w9McOv z8H-KNvbE-CH#M|0wlK5U-e7Bek%g&;b^1klA&cn~_G+_F7k#nbWBV;9>+7;GRnr5y zwZxf>&88cgbZc$@onU>Lm2t-Q^J&%x7^PSl*g)%DE;BMPu!Bxw=4aq%0gbP-ZQZ^y z!&;q@@&5LUnbv!lq643?GB8MhZkpl@0xeFF0G&L?8N3a&sK||zfq^sRFenN{ggAZJ z*%%naa#HgcI0HZ`8AP=>7#KK1_ppMBb7oI&1_sVBkZH^p*cli&lQ(aFkz-xSRPVo$ zgMmSmi=TmkJHQAOU80&?3=G_XATwAPWSj*-bGYH};EEz3iv0K(7`P+BibQuYGB9vQ zfrcR1#BxhY8MvcC;yes8pebVk?nG@)m<>rtnv+3_Sn46VQ^2}Kf3h+#aHlr0g9eFY zK>K4kxU)g0*FfBtgQPnbtQ%ro9*E7xAQQ{Mz`(&>(g?S%6iGuFND&Kz%o<(>1~KlM zWgtamQ4Mwm z2JX&v>++85Ht|(|vFn6~xGXsNzC}_1LcMnLfi>MYS0|WQu)u5%NZVWPV zYzzzz+%rKF{1BhcLb7c(NC(umIY_q61=#?#Z61iN%OG=?859Cb8sW}fie%6-ut5wm zphE|JxYxV`De?nN_i?WU$uK}-VjU`~853-H};<*hVD`X&^+X!OoLp-qwq}K`J z(aj)_x`<9kOd43GN4&27Vi3kI@}BlqTu9o z2xJt4XdNgl4}-KbF~~4+GB6l$p9F1pg9ObfBp;myX@CaJ8IW6{5pfpeJ}FVq>JaX8 zPuM{_XJkNKX$S5rpe<_gA8avi2?Wh-ynB` z^UVXWNf3h`A{q1uVi0JmmHRP>EyWl^Di85ktagV<9* zSyBSDwUm24DBnpu6JTKAUJl9>5>r45wt|wi#2yfH4=C|UTmh9qM?fh{B9n!If%`lt zDM^494RhZDB^U|NDq8L*peUEv08;xF6lW4&K_+|y#ehT&p9%v5_kU2>awae_FmQ7) zf`W~K=NHJKT;Kp=SR3o^=3`)B1vfQRLA51l^+7rx z1A`i46jLz+gF0wFt45fCK?5{w&^}$@bHCX131-{^)ALKMMR-A)!3Dn%gXZe#6H2W` ztU+_(3a3Hs_c%*t1_scXM+%;xd9^r@4CrKEl}2F(hBAJ*wVtUv|^29T?(1t5V{#H7X;%~Z_7pbpxC3ibqOIuqduc`Jy^H;XVZKvpP2T+Ss3 zb5B3mu~3)ygS`Q9kNosA<n9Kh9nZ znhp*I-4@F*X?jG3wI$=1>60p~y%@Qt->tBgE<-Tl$U&Ffhy%f`mq~6j(-*K@~K?1d;(Q?g#791<4dKFsOpo zm8}$HU^oudQ^dfa4w{ArhaG6hsa=?XL2bIo=YFB-`zx)rl0hy3CjveOO+jH$X$Tt2 zKFMS$%)r3*9}F}>hfC=$1r5BNVgjv@hYoRo#o5dm7#Pxo;cXSY@1Th+@p8BaHN&?1 zR9QD^GFzIMO+P4RC&FZ6JpE$PToGmyBZKJ&ovp-~O$<$^ODwUzHT~^|-pK7+k;=T_HBnHZmDB(CY!a`(j-=`l68kL@`v(%685D_7BS4!;VP}I$B8jUYvGtMI zR!D4D2pcj_4qo;IH8dI`0cztifNB(&1%*iBpbeog@pdHfNl5JZNbHSBY|y?>*xBd% zL7PT}L3?8u7#L0=DFQEn0&PoYU|@I%5{I&%f!I)og7$hcLdCx#iT?+&q2jEdJ| zH;4^7VFolQ&d0z2Iu`^yvLrSA|J`2YdSj40R3CU%6qM}>5{H`M4`PEh0)Z}$0I{Lw zfwptPPGm1c5^n~vLG4x0N=GF2R3tWNJ13(gbV22;`KJf`YZt4x0Es~z?1;qn zLShGl*ibWSKy0X;O&~U?ngLxU%+J6e3}sIQi9^+Z59WfhSA)c%YR-Y!O3*;K0^;z3 zyvo1;S_CBwWj_XqLp6UuV*drPp=!WuouF#eK!rYNV>9SH1OWyHVJI84e-V~^?Llgw z0q7zCTGs;A?1v-~3}QpYV?k`tng#|22GCwcMyR1RAaN)gv}X|}4%(Z@2o2E%AT>}n zXgeZId=p3vMP&R10Ak4C2 zkQ%6Z&};`IRLv?R@hu=Wv_A}50|nY#1=?fFa2O;3)qEDjhQ`e$5F4uD8pvW{2JpF7 z??B>EHJ}}QFh~3ciGvyjpoA{Oz#t4|^MO_hLCpuRje_cx1&f2~Gf-jyb07)O1jL3a zvIMcAnw>#xsCW>VJ$=KZP2%;SdLL91frOxTHXyNQA+f>BpP*_^Ac=#vyD>t=AA`i9 zN#+d_8?=)RmVEw!#G&>ws!xwsj}*5}2erzePAvwpK|6*S7#M0nY^XS>sRj$L4kYoO z>G_M+Do@Y4w;^GAU5~8C_PpcP1%iw^)9>G~_Gh%1u7A_opRr+jJ%~Cn{XB@eGF|?b zwLjy7>G`*;{dqOKKz(Bd2GBNn-s$qk4W*}N87fOm_uI!Mz-Tg^|F*S1qr>!g5aly{ z{cY>xj60^6-?1)dRGI$%j%nz-V8EvMkKeSe7oG{%VM9EAq z2T?Dk&wpsG&eSSD{erT#*z|i3tpyl6roRV?eU+cS;AXzqbiGH`0*rH}+dr~aXAGU5 z4x*M!?*~yW)3<{tuj%(6fy}U;UQiY(K3)E?H9zCt>H3eY)tUYjO^L-}6ka?H|5dpJEh~v>gfq|Kk%|woYf#rq-0|S!~Xz4pMBS(xh0|PS?Yo-_j0}E&|Gm{u- zS2xQXX$A%+DbS`9W)9Yu0t^hy9PCUS3=GUHth>ZO6#I2a1_o9ZW)^lvDUi_|ppy<* z0{9sim_@;BU_OX2Ffc2+fLATJGczzS>w>xhEc4_U7+4g+lSi{aORSVYTh~}X=diIT zgEk?tECemC(R>NYwv0>>JPZtMywlhGvbK^e1Facb%?KK*<<4MbU|?Cp2pS3G&YS-K zm$iPqkvIbb%LYc!gaez82m=GlZ${8|R6Z7vCs^e{JE8bNOU4=ar%Ny}F!ImiVqjq6 z2X&#C`M=39FtG5ONP*61VhLqrU|?12290`woC(@#$pISvVr5_l@t=cE^Z@bs86ak} zc}FoZFx2yd&I@MXHv!H2@lTZm8Lle{s${2vW}^5x6&V;<`Ik#GFtG81Mt9ixi^Lfi zIQZ4r7#KMDLFbBd@u!3Ohx~D}3=BN{_n8?Oc=`8mGcfS+*KjZ}@bgdN0d10G(U4+b zV2cI0f|CX09=0A%1_pLU4knOq1#SpWH~C}jUN57-z`!9}&cpz9B!~PfCI$w6KTsvZ zFE0ZMfNgA`K_rMDI8+0f85sC?feH!!Qc;jJXa_43KWK?CGk=8;D13}Ty*hr-Z47Mu zvp~Vae@!0bg=3v@1ULg5 znHd;_L6ONB1d4lMP+W2bgW_H|j}J6h2nulq&|u*rW(Eeq9PnTvNF{^l5+2ZCVK_6$ z;Vgkdpus|rX)Gm7puxi9j4%gSoklA zfTCos0w_vAr&6->uV4rH$3z6=AJ92QT>L4Z5dwY(Igocitzlk%(Ec<&ekpcPlpGOd zU=ZN%5Mp2u1q_{;yA zg@NH8e>Wck!+!>rVtEDzuIoFP;X!m)mX(2l-x+Mpa!{*~|ECDZ_n-s5g!w;8Gcbtp zS4c82*zrGAU|>)Zvjer%7{$(l(heg7%P~#{2CnBfSU_uRx!!oPGC*R7>n$kK7_3B9 zSQ!|&-hmRR5Ccmfi1S{9m4QJ-gzIYwD+7aIW(ot>H;^_4(Z2!=3|!wqIbN87rC_?j ze`~S&Kj4)32ehD#p9!2(GeBhsznTK5sAB`|M&V*%1ReFswvdg1flCg&ms1>^*}3W% zLC0+JD}ZK|`R9RC3)?ha1_rK1M$k16Z2u(~7`R%&Iv~lPTlza20|WmFP<77#9K64S zA9Pe86F=w-US|H4pfZWy33Rju{{vA_dI2?!*!e$kfkNyBXo#C%k`I*rSAm9Y_`iVD z3xg0i`3r-x@M~F6da>mNrIg*EGrsr_fSPms_k|c3MEFlLF))bogHB2l<6kVoz#v}F z-zvkvAi?h>&%hwbZz{&XAjNMk!@wZTzm1uJL5810kbyy#{~-?pgB<@c9tH+^{$;`p z3<~^JYzz#F{LNAf3`+c6EDQ|F{5*0D3@ZGG*ccd8`9VWdYWxeC7#P&~-J}^9H2A}% z7#K7eSh%?v7`RWhDkt9gxogLHUq{K|oO&Jm8)J zR}=wJR4fJ>a0e?AwE+!PMXhCKU|SU1GFJP@0WK|qlgq@m9=BI*tr|C_uV zGT<&y#t9y92c6Ccv27NTZL>i-ptj9HvTZKN2B>ZGKx|zGfqYg_2rT&ynjQg1=~5(v zmVpgo5CENC>%+YURN#pggIclNYe6y$keFBpiU}r&=hlO)1IP*)i03wf*!mDp zYy#wJ6+&LE4!Z1oZg81MaUuioiZPh2*2tAPvx@Ad2q48o5< z>?xouDf}HY%03^I?}X1tfdY7p!1_n_Efz>h$3`{)6-$C;)prW0}1e63A7zE;Y7#JAqdCUcP85l$t2r)45Sb)64 zz#vcznz`h$c7#jVfF;2Bm&XfwKXR6VwhD1(4;g z#UPVFX^F=TDzTc2fkBMNb4fj1#tSSX`c{yEfyWzUE|cgz4h9AuA5c4knL)r2RB-e7 zpM+}&fM^gCXJFt71my!J1_96@v=&bY=tMY(Lqd@hg@F};a~DrID6@z$2-FuTFfeHG zL}~LeFhF!fBk71i(h&>Qp~(a~cQFAp5D3wbh@>G2NkcMN1GvQGNdd7n83c|Ag1nvH z3%9L414(x#ST}>fEoqROa`wShfonSkQLtC@z=}kjK%Iwt5L=8v;36{vg8@&`Z@7kH zBvVU3ikKkYE(N(mOf*N7fq|!N6)OWny$*u_=%zjgo=VWl4v3GckaSlg>8^q329<_9 zwIH@8#H2cqNj3}ucexoDEO;81^25Ti31Seaw&Q6Av6&!#XaN}tF6ZhQcv?XwNq}n* zo;FYoq9dBj$H2hT4r<#OKy2s$*;KS1mI&dB0)EyQv28NQHV+1YP)?A4rWFgo{4*V712i6H zfNX#U>r9ZTVxs0e3=BN8Kx(ugE&|uxIuP6DfV>9v&RmcMCJX{E`05!LJa`s>wmm}p zvk;^kYQrKV8x})s0Q+GHh^+~+Z7E2-4a7EZ1#btjZ8^v`2Z(o8fNXPN5V$AEz`(+@ z8gv>N#IiNZ!Q-%^dqJ((wctF*AOPA&uE(>%Nf1^lY(&cZn;@AVoDesIoW~AHS6e_% zl4cOdXJ=s0nF7iM!Xh#Z3_SBd$yFG1G#1ZF zP+Af`F2caTvknyL!u6nviDxS)PQVot&mK^~3ri?6Fz_4z1tS9s=;lVAgP=fR+0Dwp zz