From 938d17576ba345875feee6f458b4bbad42fc5153 Mon Sep 17 00:00:00 2001 From: Tommy Sparber Date: Fri, 30 Oct 2015 18:55:11 +1100 Subject: [PATCH] doxygen: Fix many warnings This commit fixes nearly all of the reported doxygen warnings. I tried to not clutter the log with removed trailing spaces. Removed whitespace and converted tab/spaces for all files affected by this commit are in a separate branch. --- apps/program-handler/program-handler.c | 2 +- core/net/ip/uip.h | 6 +- core/net/ipv6/sicslowpan.c | 13 ++-- core/net/ipv6/uip-ds6-nbr.c | 2 +- core/net/ipv6/uip-ds6.c | 16 ++--- core/net/ipv6/uip-ds6.h | 1 + core/net/ipv6/uip-nd6.c | 2 +- core/net/ipv6/uip-nd6.h | 5 +- core/net/ipv6/uip6.c | 2 +- cpu/arm/aducrf101/Common/ADuCRF101.h | 2 +- cpu/arm/aducrf101/Common/radioeng.c | 1 - cpu/arm/aducrf101/Common/system_ADuCRF101.c | 3 +- cpu/arm/aducrf101/Common/system_ADuCRF101.h | 4 +- cpu/arm/at91sam7s/loader/elfloader-arch-otf.h | 3 +- cpu/arm/at91sam7s/loader/elfloader-otf.h | 50 +++++++-------- cpu/avr/dev/lanc111.c | 48 +++++++-------- cpu/avr/minileds.c | 1 + cpu/mc1322x/lib/printf.c | 2 +- cpu/stm32w108/hal/error.h | 10 ++- cpu/stm32w108/hal/micro/cortexm3/mfg-token.h | 52 ++++++++++------ cpu/stm32w108/hal/micro/cortexm3/nvm.h | 3 +- cpu/stm32w108/hal/micro/cortexm3/uart.h | 4 +- .../micro/generic/compiler/platform-common.h | 2 +- cpu/stm32w108/hal/micro/micro-common.h | 57 ++++++++++-------- cpu/stm32w108/hal/micro/system-timer.h | 2 +- doc/Doxyfile | 5 ++ doc/pics/raven3290p.jpg | Bin 0 -> 34027 bytes platform/avr-ravenusb/cdc_task.c | 8 ++- platform/cooja-ip64/contiki-cooja-ip64-main.c | 25 +++++--- platform/cooja/contiki-cooja-main.c | 25 +++++--- .../srf06-cc26xx/sensortag/bmp-280-sensor.c | 2 +- .../srf06-cc26xx/sensortag/opt-3001-sensor.c | 2 +- platform/wismote/dev/acc-sensor.c | 24 +++++--- platform/wismote/dev/ext-sensor.c | 22 ++++--- 34 files changed, 231 insertions(+), 175 deletions(-) create mode 100644 doc/pics/raven3290p.jpg diff --git a/apps/program-handler/program-handler.c b/apps/program-handler/program-handler.c index 4173d7c04..0718b5c89 100644 --- a/apps/program-handler/program-handler.c +++ b/apps/program-handler/program-handler.c @@ -246,6 +246,7 @@ program_handler_load(char *name, char *arg) #else /* WITH_LOADER_ARCH */ #define RUN(prg, process, arg) process_start(process, arg) #endif /* WITH_LOADER_ARCH */ +#if CTK_CONF_SCREENSAVER /*-----------------------------------------------------------------------------------*/ /** * Configures the name of the screensaver to be loaded when @@ -255,7 +256,6 @@ program_handler_load(char *name, char *arg) * should be used. */ /*-----------------------------------------------------------------------------------*/ -#if CTK_CONF_SCREENSAVER void program_handler_setscreensaver(char *name) { diff --git a/core/net/ip/uip.h b/core/net/ip/uip.h index 12861cdd9..ae00a729c 100644 --- a/core/net/ip/uip.h +++ b/core/net/ip/uip.h @@ -142,15 +142,18 @@ typedef struct uip_eth_addr { typedef uip_802154_longaddr uip_lladdr_t; #define UIP_802154_SHORTADDR_LEN 2 #define UIP_802154_LONGADDR_LEN 8 +/** \brief Link layer address length */ #define UIP_LLADDR_LEN UIP_802154_LONGADDR_LEN #else /*UIP_CONF_LL_802154*/ #if UIP_CONF_LL_80211 /** \brief 802.11 address */ typedef uip_80211_addr uip_lladdr_t; +/** \brief Link layer address length */ #define UIP_LLADDR_LEN 6 #else /*UIP_CONF_LL_80211*/ /** \brief Ethernet address */ typedef uip_eth_addr uip_lladdr_t; +/** \brief Link layer address length */ #define UIP_LLADDR_LEN 6 #endif /*UIP_CONF_LL_80211*/ #endif /*UIP_CONF_LL_802154*/ @@ -1379,8 +1382,7 @@ struct uip_conn { uint8_t nrtx; /**< The number of retransmissions for the last segment sent. */ - /** The application state. */ - uip_tcp_appstate_t appstate; + uip_tcp_appstate_t appstate; /** The application state. */ }; diff --git a/core/net/ipv6/sicslowpan.c b/core/net/ipv6/sicslowpan.c index 3a870a8c5..7e5228e9e 100644 --- a/core/net/ipv6/sicslowpan.c +++ b/core/net/ipv6/sicslowpan.c @@ -1046,12 +1046,14 @@ uncompress_hdr_hc06(uint16_t ip_len) * - Both src and dest interface ID are recoverable from lower layer * header * - Next header is either ICMP, UDP or TCP + * * Moreover, if next header is UDP, we try to compress it using HC_UDP. - * This is feasible is both ports are between F0B0 and F0B0 + 15\n\n + * This is feasible is both ports are between F0B0 and F0B0 + 15. + * * * Resulting header structure: - * - For ICMP, TCP, non compressed UDP\n - * HC1 encoding = 11111010 (UDP) 11111110 (TCP) 11111100 (ICMP)\n + * - For ICMP, TCP, non compressed UDP\n + * HC1 encoding = 11111010 (UDP) 11111110 (TCP) 11111100 (ICMP)\n * \verbatim * 1 2 3 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 @@ -1062,8 +1064,8 @@ uncompress_hdr_hc06(uint16_t ip_len) * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * \endverbatim * - * - For compressed UDP - * HC1 encoding = 11111011, HC_UDP encoding = 11100000\n + * - For compressed UDP\n + * HC1 encoding = 11111011, HC_UDP encoding = 11100000\n * \verbatim * 1 2 3 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 @@ -1577,7 +1579,6 @@ output(const uip_lladdr_t *localdest) /*--------------------------------------------------------------------*/ /** \brief Process a received 6lowpan packet. - * \param r The MAC layer * * The 6lowpan packet is put in packetbuf by the MAC. If its a frag1 or * a non-fragmented packet we first uncompress the IP header. The diff --git a/core/net/ipv6/uip-ds6-nbr.c b/core/net/ipv6/uip-ds6-nbr.c index db14f8647..6243b0368 100644 --- a/core/net/ipv6/uip-ds6-nbr.c +++ b/core/net/ipv6/uip-ds6-nbr.c @@ -231,10 +231,10 @@ uip_ds6_link_neighbor_callback(int status, int numtx) } /*---------------------------------------------------------------------------*/ +/** Periodic processing on neighbors */ void uip_ds6_neighbor_periodic(void) { - /* Periodic processing on neighbors */ uip_ds6_nbr_t *nbr = nbr_table_head(ds6_neighbors); while(nbr != NULL) { switch(nbr->state) { diff --git a/core/net/ipv6/uip-ds6.c b/core/net/ipv6/uip-ds6.c index 148c8aa24..463798815 100644 --- a/core/net/ipv6/uip-ds6.c +++ b/core/net/ipv6/uip-ds6.c @@ -53,23 +53,23 @@ #define DEBUG DEBUG_NONE #include "net/ip/uip-debug.h" -struct etimer uip_ds6_timer_periodic; /** \brief Timer for maintenance of data structures */ +struct etimer uip_ds6_timer_periodic; /**< Timer for maintenance of data structures */ #if UIP_CONF_ROUTER -struct stimer uip_ds6_timer_ra; /** \brief RA timer, to schedule RA sending */ +struct stimer uip_ds6_timer_ra; /**< RA timer, to schedule RA sending */ #if UIP_ND6_SEND_RA -static uint8_t racount; /** \brief number of RA already sent */ -static uint16_t rand_time; /** \brief random time value for timers */ +static uint8_t racount; /**< number of RA already sent */ +static uint16_t rand_time; /**< random time value for timers */ #endif #else /* UIP_CONF_ROUTER */ -struct etimer uip_ds6_timer_rs; /** \brief RS timer, to schedule RS sending */ -static uint8_t rscount; /** \brief number of rs already sent */ +struct etimer uip_ds6_timer_rs; /**< RS timer, to schedule RS sending */ +static uint8_t rscount; /**< number of rs already sent */ #endif /* UIP_CONF_ROUTER */ /** \name "DS6" Data structures */ /** @{ */ -uip_ds6_netif_t uip_ds6_if; /** \brief The single interface */ -uip_ds6_prefix_t uip_ds6_prefix_list[UIP_DS6_PREFIX_NB]; /** \brief Prefix list */ +uip_ds6_netif_t uip_ds6_if; /**< The single interface */ +uip_ds6_prefix_t uip_ds6_prefix_list[UIP_DS6_PREFIX_NB]; /**< Prefix list */ /* Used by Cooja to enable extraction of addresses from memory.*/ uint8_t uip_ds6_addr_size; diff --git a/core/net/ipv6/uip-ds6.h b/core/net/ipv6/uip-ds6.h index b111d0f5b..1c00a50b0 100644 --- a/core/net/ipv6/uip-ds6.h +++ b/core/net/ipv6/uip-ds6.h @@ -282,6 +282,7 @@ uint8_t uip_ds6_is_addr_onlink(uip_ipaddr_t *ipaddr); /** \name Unicast address list basic routines */ /** @{ */ +/** \brief Add a unicast address to the interface */ uip_ds6_addr_t *uip_ds6_addr_add(uip_ipaddr_t *ipaddr, unsigned long vlifetime, uint8_t type); void uip_ds6_addr_rm(uip_ds6_addr_t *addr); diff --git a/core/net/ipv6/uip-nd6.c b/core/net/ipv6/uip-nd6.c index 1b966027a..65e534832 100644 --- a/core/net/ipv6/uip-nd6.c +++ b/core/net/ipv6/uip-nd6.c @@ -811,7 +811,7 @@ uip_nd6_rs_output(void) return; } /*---------------------------------------------------------------------------*/ -/* +/** * Process a Router Advertisement * * - Possible actions when receiving a RA: add router to router list, diff --git a/core/net/ipv6/uip-nd6.h b/core/net/ipv6/uip-nd6.h index 8b5893328..c51d465b5 100644 --- a/core/net/ipv6/uip-nd6.h +++ b/core/net/ipv6/uip-nd6.h @@ -59,9 +59,12 @@ /** \name RFC 4861 Host constant */ /** @{ */ +/** \brief Maximum router solicitation delay */ #define UIP_ND6_MAX_RTR_SOLICITATION_DELAY 1 +/** \brief Router solicitation interval */ #define UIP_ND6_RTR_SOLICITATION_INTERVAL 4 -#define UIP_ND6_MAX_RTR_SOLICITATIONS 3 +/** \brief Maximum router solicitations */ +#define UIP_ND6_MAX_RTR_SOLICITATIONS 3 /** @} */ /** \name RFC 4861 Router constants */ diff --git a/core/net/ipv6/uip6.c b/core/net/ipv6/uip6.c index 63858017c..7614b537d 100644 --- a/core/net/ipv6/uip6.c +++ b/core/net/ipv6/uip6.c @@ -654,7 +654,7 @@ static uint8_t uip_reassflags; */ -struct etimer uip_reass_timer; /* timer for reassembly */ +struct etimer uip_reass_timer; /**< Timer for reassembly */ uint8_t uip_reass_on; /* equal to 1 if we are currently reassembling a packet */ static uint32_t uip_id; /* For every packet that is to be fragmented, the source diff --git a/cpu/arm/aducrf101/Common/ADuCRF101.h b/cpu/arm/aducrf101/Common/ADuCRF101.h index 287c6416a..46c02d740 100644 --- a/cpu/arm/aducrf101/Common/ADuCRF101.h +++ b/cpu/arm/aducrf101/Common/ADuCRF101.h @@ -33,7 +33,7 @@ */ /****************************************************************************************************//** - * @file ADUCRF101.h + * @file ADuCRF101.h * * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File for * default ADUCRF101 Device Series diff --git a/cpu/arm/aducrf101/Common/radioeng.c b/cpu/arm/aducrf101/Common/radioeng.c index c4431c832..975ddbde6 100644 --- a/cpu/arm/aducrf101/Common/radioeng.c +++ b/cpu/arm/aducrf101/Common/radioeng.c @@ -1292,7 +1292,6 @@ static RIE_Responses RadioWaitOnState(RadioState FinalState) /** @fn RIE_Responses RadioWaitOnCmdLdr(void) @brief Wait for Final State to be reached - @param FinalState State to wait on @return RIE_Responses Error code **/ static RIE_Responses RadioWaitOnCmdLdr(void) diff --git a/cpu/arm/aducrf101/Common/system_ADuCRF101.c b/cpu/arm/aducrf101/Common/system_ADuCRF101.c index 0db949554..f6abc0a98 100644 --- a/cpu/arm/aducrf101/Common/system_ADuCRF101.c +++ b/cpu/arm/aducrf101/Common/system_ADuCRF101.c @@ -32,7 +32,7 @@ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** -@file system_ADUCRF101.c +@file system_ADuCRF101.c @brief CMSIS Cortex-M3 Device Peripheral Access Layer Implementation File for the ADuCRF101 @version v1.0 @@ -106,7 +106,6 @@ void SystemCoreClockUpdate (void) /* Get Core Clock Frequency */ /** * Initialize the system * - * @param none * @return none * * @brief Setup the microcontroller system. diff --git a/cpu/arm/aducrf101/Common/system_ADuCRF101.h b/cpu/arm/aducrf101/Common/system_ADuCRF101.h index 4e6532215..241e3b062 100644 --- a/cpu/arm/aducrf101/Common/system_ADuCRF101.h +++ b/cpu/arm/aducrf101/Common/system_ADuCRF101.h @@ -32,7 +32,7 @@ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** -@file system_ADUCRF101.h +@file system_ADuCRF101.h @brief: CMSIS Cortex-M3 Device Peripheral Access Layer Header File for the ADuCRF101 @version v0.2 @@ -51,7 +51,6 @@ /** * @brief Initialize the system * - * @param none * @return none * * Setup the microcontroller system. @@ -62,7 +61,6 @@ extern void SystemInit (void); /** * @brief Update internal SystemCoreClock variable * - * @param none * @return none * * Updates the internal SystemCoreClock with current core diff --git a/cpu/arm/at91sam7s/loader/elfloader-arch-otf.h b/cpu/arm/at91sam7s/loader/elfloader-arch-otf.h index 9fe8a77ae..904e601f8 100644 --- a/cpu/arm/at91sam7s/loader/elfloader-arch-otf.h +++ b/cpu/arm/at91sam7s/loader/elfloader-arch-otf.h @@ -71,7 +71,8 @@ /** * \brief Perform a relocation. - * \param output The output object for the segment. + * \param input_fd The file descriptor for the ELF file. + * \param output The output object for the segment. * \param sectionoffset The file offset at which the relocation can be found. * \param sectionaddr The section start address (absolute runtime). * \param rela A pointer to an ELF32 rela structure (struct elf32_rela). diff --git a/cpu/arm/at91sam7s/loader/elfloader-otf.h b/cpu/arm/at91sam7s/loader/elfloader-otf.h index d3c06c091..5812fbe53 100644 --- a/cpu/arm/at91sam7s/loader/elfloader-otf.h +++ b/cpu/arm/at91sam7s/loader/elfloader-otf.h @@ -169,11 +169,11 @@ struct elfloader_output { const struct elfloader_output_ops *ops; }; /** - * \brief Allocate a new segment - * \param input The output object - * \param type Type of segment - * \param size Size of segment in bytes - * \return A pointer to the start of the segment. + * \brief Allocate a new segment + * \param output The output object + * \param type Type of segment + * \param size Size of segment in bytes + * \return A pointer to the start of the segment. * * The returned address doesn't need to correspond to any real memory, * since it's only used for calculating the relocations. @@ -183,41 +183,41 @@ void *elfloader_allocate_segment(struct elfloader_output *output, unsigned int type, int size); /** - * \brief Start writing to a new segment - * \param input The output object - * \param type Type of segment - * \param addr Address of segment from elfloader_allocate_segment - * \param size Size of segment in bytes - * \return Returns ELFLOADER_OK if successful, otherwise an error code + * \brief Start writing to a new segment + * \param output The output object + * \param type Type of segment + * \param addr Address of segment from elfloader_allocate_segment + * \param size Size of segment in bytes + * \return Returns ELFLOADER_OK if successful, otherwise an error code * */ int elfloader_start_segment(struct elfloader_output *output, unsigned int type, void *addr, int size); /** - * \brief Mark end of segment - * \param input The output object - * \return Zero if successful + * \brief Mark end of segment + * \param output The output object + * \return Zero if successful */ int elfloader_end_segment(struct elfloader_output *output); /** - * \brief Write data to a segment - * \param input The output object - * \param buf Data to be written - * \param len Length of data - * \return The number of bytes actually written, or negative if failed. + * \brief Write data to a segment + * \param output The output object + * \param buf Data to be written + * \param len Length of data + * \return The number of bytes actually written, or negative if failed. */ int elfloader_write_segment(struct elfloader_output *output, const char *buf, unsigned int len); /** - * \brief Get the current offset in the file where the next data will - * be written. - * \param input The output object - * \return The current offset. + * \brief Get the current offset in the file where the next data will + * be written. + * \param output The output object + * \return The current offset. */ unsigned int elfloader_segment_offset(struct elfloader_output *output); @@ -259,8 +259,8 @@ void elfloader_init(void); /** * \brief Load and relocate an ELF file. - * \param input Input object defining how to read from the ELF file - * \param output Output object defining how to create and write to seegments. + * \param input_fd Input object defining how to read from the ELF file + * \param output Output object defining how to create and write to seegments. * \return ELFLOADER_OK if loading and relocation worked. * Otherwise an error value. * diff --git a/cpu/avr/dev/lanc111.c b/cpu/avr/dev/lanc111.c index 60cde63af..ebf5242c6 100644 --- a/cpu/avr/dev/lanc111.c +++ b/cpu/avr/dev/lanc111.c @@ -271,6 +271,9 @@ */ #define NIC_MMUCR (LANC111_BASE_ADDR + 0x00) +/*! + * \brief MMU command register busy flag. + */ #define MMUCR_BUSY 0x0001 #define MMU_NOP 0 @@ -292,7 +295,7 @@ /*! * \brief Bank 2 - Allocation result register. * - * This byte register is updated upon a \ref MMU_ALO command. + * This byte register is updated upon a MMU_ALO command. */ #define NIC_ARR (LANC111_BASE_ADDR + 0x03) @@ -334,14 +337,14 @@ */ #define NIC_MSK (LANC111_BASE_ADDR + 0x0D) -#define INT_MD 0x80 /*!< \ref PHY state change interrupt bit mask. */ -#define INT_ERCV 0x40 /*!< \ref Early receive interrupt bit mask. */ -#define INT_EPH 0x20 /*!< \ref Ethernet protocol interrupt bit mask. */ -#define INT_RX_OVRN 0x10 /*!< \ref Receive overrun interrupt bit mask. */ -#define INT_ALLOC 0x08 /*!< \ref Transmit allocation interrupt bit mask. */ -#define INT_TX_EMPTY 0x04 /*!< \ref Transmitter empty interrupt bit mask. */ -#define INT_TX 0x02 /*!< \ref Transmit complete interrupt bit mask. */ -#define INT_RCV 0x01 /*!< \ref Receive interrupt bit mask. */ +#define INT_MD 0x80 /*!< PHY state change interrupt bit mask. */ +#define INT_ERCV 0x40 /*!< Early receive interrupt bit mask. */ +#define INT_EPH 0x20 /*!< Ethernet protocol interrupt bit mask. */ +#define INT_RX_OVRN 0x10 /*!< Receive overrun interrupt bit mask. */ +#define INT_ALLOC 0x08 /*!< Transmit allocation interrupt bit mask. */ +#define INT_TX_EMPTY 0x04 /*!< Transmitter empty interrupt bit mask. */ +#define INT_TX 0x02 /*!< Transmit complete interrupt bit mask. */ +#define INT_RCV 0x01 /*!< Receive interrupt bit mask. */ /*! * \brief Bank 3 - Multicast table register. @@ -493,12 +496,6 @@ #define nic_bs(bank) nic_outlb(NIC_BSR, bank) -/*! - * \struct _NICINFO lanc111.h dev/lanc111.h - * \brief Network interface controller information structure. - */ -/*@}*/ - /*! * \addtogroup xgNicLanc111 */ @@ -840,10 +837,10 @@ static int NicStart(CONST uint8_t * mac) return 0; } +#if 0 /* * NIC interrupt entry. */ -#if 0 static void NicInterrupt(void *arg) { uint8_t isr; @@ -955,7 +952,7 @@ static void NicRead(uint8_t * buf, uint16_t len) * * Nic interrupts must be disabled when calling this funtion. * - * \return Pointer to an allocated ::NETBUF. If there is no + * \return Pointer to an allocated NETBUF. If there is no * no data available, then the function returns a * null pointer. If the NIC's buffer seems to be * corrupted, a pointer to 0xFFFF is returned. @@ -1014,6 +1011,7 @@ static NETBUF *NicGetPacket(void) return nb; } +#if 0 /*! * \brief Load a packet into the nic's transmit ring buffer. * @@ -1028,7 +1026,6 @@ static NETBUF *NicGetPacket(void) * will automatically release the network buffer * structure. */ -#if 0 static int NicPutPacket(NETBUF * nb) { uint16_t sz; @@ -1119,13 +1116,12 @@ static int NicPutPacket(NETBUF * nb) return 0; } -#endif +#endif /* 0 */ -/*! \fn NicRxLanc(void *arg) - * \brief NIC receiver thread. - * - */ #if 1 +/*! + * \brief NIC receiver thread. + */ PROCESS_THREAD(lanc111_process, ev, data) /*THREAD(NicRxLanc, arg)*/ { @@ -1202,7 +1198,7 @@ PROCESS_THREAD(lanc111_process, ev, data) PROCESS_END(); } -#endif /* 0 */ +#endif /* 1 */ #if 0 /*! * \brief Send Ethernet packet. @@ -1245,7 +1241,7 @@ int LancOutput(NUTDEVICE * dev, NETBUF * nb) } return rc; } -#endif +#endif /* 0 */ #if 0 /*! * \brief Initialize Ethernet hardware. @@ -1340,7 +1336,7 @@ NUTDEVICE devSmsc111 = { }; /*@}*/ -#endif +#endif /* 0 */ int diff --git a/cpu/avr/minileds.c b/cpu/avr/minileds.c index 70694c5dc..5cce1bc88 100644 --- a/cpu/avr/minileds.c +++ b/cpu/avr/minileds.c @@ -27,6 +27,7 @@ * SUCH DAMAGE. * * + */ /** * \file * Dummy implementation of minileds module diff --git a/cpu/mc1322x/lib/printf.c b/cpu/mc1322x/lib/printf.c index c716b5893..b6dede7e6 100644 --- a/cpu/mc1322x/lib/printf.c +++ b/cpu/mc1322x/lib/printf.c @@ -34,7 +34,7 @@ */ /** - * \file printf-stdarg.c + * \file lib/printf.c * * \brief sprintf functions to replace newlib for AVR32 UC3. * diff --git a/cpu/stm32w108/hal/error.h b/cpu/stm32w108/hal/error.h index e719fee0c..5daeefc97 100644 --- a/cpu/stm32w108/hal/error.h +++ b/cpu/stm32w108/hal/error.h @@ -10,12 +10,12 @@ #ifndef ERRORS_H_ #define ERRORS_H_ +#ifndef __STSTATUS_TYPE__ +#define __STSTATUS_TYPE__ /** * @brief Return type for St functions. */ -#ifndef __STSTATUS_TYPE__ -#define __STSTATUS_TYPE__ - typedef uint8_t StStatus; +typedef uint8_t StStatus; #endif //__STSTATUS_TYPE__ /** @@ -27,7 +27,7 @@ * @brief Macro used by error-def.h to define all of the return codes. * * @param symbol The name of the constant being defined. All St returns - * begin with ST_. For example, ::ST_CONNECTION_OPEN. + * begin with ST_. For example, ::ST_ERR_FATAL. * * @param value The value of the return code. For example, 0x61. */ @@ -36,9 +36,7 @@ enum { -#ifndef DOXYGEN_SHOULD_SKIP_THIS #include "error-def.h" -#endif //DOXYGEN_SHOULD_SKIP_THIS /** Gets defined as a count of all the possible return codes in the * StZNet stack API. */ diff --git a/cpu/stm32w108/hal/micro/cortexm3/mfg-token.h b/cpu/stm32w108/hal/micro/cortexm3/mfg-token.h index 8344b5b3e..685a3bc72 100644 --- a/cpu/stm32w108/hal/micro/cortexm3/mfg-token.h +++ b/cpu/stm32w108/hal/micro/cortexm3/mfg-token.h @@ -7,6 +7,7 @@ #ifndef MFG_TOKEN_H_ #define MFG_TOKEN_H_ +#ifndef DOXYGEN_SHOULD_SKIP_THIS // The manufacturing tokens live in the Info Blocks, while all other tokens // live in the Simulated EEPROM. This requires the token names to be defined @@ -20,10 +21,13 @@ * that point to the correct location in the Info Blocks. (This is the * extern, the actual definition is found in hal/micro/cortexm3/token.c) * - * \param name: The name of the token. - * - * \param TOKEN_##name##_ADDRESS: The address in EEPROM at which the token - * will be stored. This parameter is generated with a macro above. + * \param name: The name of the token. + * \param creator: The manufacturing creators. + * \param iscnt: + * \param isidx: + * \param type: The token type. The types are found in token-stack.h. + * \param arraysize: The number of elements in an indexed token (arraysize=1 + * for scalar tokens). */ #define TOKEN_MFG(name,creator,iscnt,isidx,type,arraysize,...) \ extern const uint16_t TOKEN_##name; @@ -34,9 +38,13 @@ * \brief Macro for translating token definitions into size variables. * This provides a convenience for abstracting the 'sizeof(type)' anywhere. * - * \param name: The name of the token. - * - * \param type: The token type. The types are found in token-stack.h. + * \param name: The name of the token. + * \param creator: The manufacturing creators. + * \param iscnt: + * \param isidx: + * \param type: The token type. The types are found in token-stack.h. + * \param arraysize: The number of elements in an indexed token (arraysize=1 + * for scalar tokens). */ #define TOKEN_MFG(name,creator,iscnt,isidx,type,arraysize,...) \ TOKEN_##name##_SIZE = sizeof(type), @@ -49,12 +57,16 @@ /** * \brief Macro for typedef'ing the CamelCase token type found in * token-stack.h to a capitalized TOKEN style name that ends in _TYPE. - * This macro allows other macros below to use 'token##_TYPE' to declare + * This macro allows other macros below to use 'token\#\#_TYPE' to declare * a local copy of that token. * - * \param name: The name of the token. - * - * \param type: The token type. The types are found in token-stack.h. + * \param name: The name of the token. + * \param creator: The manufacturing creators. + * \param iscnt: + * \param isidx: + * \param type: The token type. The types are found in token-stack.h. + * \param arraysize: The number of elements in an indexed token (arraysize=1 + * for scalar tokens). */ #define TOKEN_MFG(name,creator,iscnt,isidx,type,arraysize,...) \ typedef type TOKEN_##name##_TYPE; @@ -70,8 +82,7 @@ * subsequent tokens to align against. ( See hal/micro/cortexm3/token.c for * the instances of TOKEN_NEXT_ADDRESS() ); * - * \param region: The name to give to the element in the address enum.. - * + * \param region: The name to give to the element in the address enum. * \param address: The address in EEPROM where the region begins. */ #define TOKEN_NEXT_ADDRESS(region, address) \ @@ -80,14 +91,17 @@ /** * \brief Macro for creating ADDRESS and END elements for each token in * the enum below. The ADDRESS element is linked to from the the normal - * TOKEN_##name macro and provides the value passed into the internal token + * TOKEN_\#\#name macro and provides the value passed into the internal token * system calls. The END element is a placeholder providing the starting * point for the ADDRESS of the next dynamically positioned token. * - * \param name: The name of the token. - * - * \param arraysize: The number of elements in an indexed token (arraysize=1 - * for scalar tokens). + * \param name: The name of the token. + * \param creator: The manufacturing creators. + * \param iscnt: + * \param isidx: + * \param type: The token type. The types are found in token-stack.h. + * \param arraysize: The number of elements in an indexed token (arraysize=1 + * for scalar tokens). */ #define TOKEN_MFG(name,creator,iscnt,isidx,type,arraysize,...) \ TOKEN_##name##_ADDRESS, \ @@ -106,8 +120,6 @@ enum { #undef DEFINETOKENS - -#ifndef DOXYGEN_SHOULD_SKIP_THIS /** * \brief Copies the token value from non-volatile storage into a RAM * location. This is the internal function that the exposed API diff --git a/cpu/stm32w108/hal/micro/cortexm3/nvm.h b/cpu/stm32w108/hal/micro/cortexm3/nvm.h index d8accaed1..0592cf5f5 100644 --- a/cpu/stm32w108/hal/micro/cortexm3/nvm.h +++ b/cpu/stm32w108/hal/micro/cortexm3/nvm.h @@ -14,8 +14,7 @@ * @addtogroup stm32w-cpu * @{ */ -/** @defgroup nvm - * @brief Cortex-M3 Non-Volatile Memory data storage system. +/** @defgroup nvm Cortex-M3 Non-Volatile Memory data storage system. * * This header defines the API for NVM data storage. This header also * describes the algorithm behind the NVM data storage system with notes diff --git a/cpu/stm32w108/hal/micro/cortexm3/uart.h b/cpu/stm32w108/hal/micro/cortexm3/uart.h index c15bf051d..28c56fbbe 100644 --- a/cpu/stm32w108/hal/micro/cortexm3/uart.h +++ b/cpu/stm32w108/hal/micro/cortexm3/uart.h @@ -32,8 +32,8 @@ typedef enum * * @param parity The type of parity used for communication. * See the SerialParity enum for possible values - * - * @return stopbits The number of stop bits used for communication. + * + * @param stopbits The number of stop bits used for communication. * Valid values are 1 or 2 */ void uartInit(uint32_t baudrate, uint8_t databits, SerialParity parity, uint8_t stopbits); diff --git a/cpu/stm32w108/hal/micro/generic/compiler/platform-common.h b/cpu/stm32w108/hal/micro/generic/compiler/platform-common.h index 24bbfceaf..21fe07526 100644 --- a/cpu/stm32w108/hal/micro/generic/compiler/platform-common.h +++ b/cpu/stm32w108/hal/micro/generic/compiler/platform-common.h @@ -15,7 +15,7 @@ * @{ */ /** \file hal/micro/generic/compiler/platform-common.h - * See \ref platform_common for detailed documentation. + * See platform_common.h for detailed documentation. * * */ diff --git a/cpu/stm32w108/hal/micro/micro-common.h b/cpu/stm32w108/hal/micro/micro-common.h index 9cba68903..070de876e 100644 --- a/cpu/stm32w108/hal/micro/micro-common.h +++ b/cpu/stm32w108/hal/micro/micro-common.h @@ -70,38 +70,43 @@ void halInternalDisableWatchDog(uint8_t magicKey); */ boolean halInternalWatchDogEnabled( void ); -#ifdef DOXYGEN_SHOULD_SKIP_THIS /** @brief Enumerations for the possible microcontroller sleep modes. - * - SLEEPMODE_RUNNING - * Everything is active and running. In practice this mode is not - * used, but it is defined for completeness of information. - * - SLEEPMODE_IDLE - * Only the CPU is idled. The rest of the chip continues runing - * normally. The chip will wake from any interrupt. - * - SLEEPMODE_WAKETIMER - * The sleep timer clock sources remain running. The RC is always - * running and the 32kHz XTAL depends on the board header. Wakeup - * is possible from both GPIO and the sleep timer. System time - * is maintained. The sleep timer is assumed to be configured - * properly for wake events. - * - SLEEPMODE_MAINTAINTIMER - * The sleep timer clock sources remain running. The RC is always - * running and the 32kHz XTAL depends on the board header. Wakeup - * is possible from only GPIO. System time is maintained. - * - SLEEPMODE_NOTIMER - * The sleep timer clock sources (both RC and XTAL) are turned off. - * Wakeup is possible from only GPIO. System time is lost. */ +#ifdef DOXYGEN_SHOULD_SKIP_THIS enum SleepModes #else typedef uint8_t SleepModes; enum #endif { + /** + * Everything is active and running. In practice this mode is not + * used, but it is defined for completeness of information. + */ SLEEPMODE_RUNNING = 0, + /** + * Oly the CPU is idled. The rest of the chip continues runing + * normally. The chip will wake from any interrupt. + */ SLEEPMODE_IDLE = 1, + /** + * The sleep timer clock sources remain running. The RC is always + * running and the 32kHz XTAL depends on the board header. Wakeup + * is possible from both GPIO and the sleep timer. System time + * is maintained. The sleep timer is assumed to be configured + * properly for wake events. + */ SLEEPMODE_WAKETIMER = 2, + /** + * The sleep timer clock sources remain running. The RC is always + * running and the 32kHz XTAL depends on the board header. Wakeup + * is possible from only GPIO. System time is maintained. + */ SLEEPMODE_MAINTAINTIMER = 3, + /** + * The sleep timer clock sources (both RC and XTAL) are turned off. + * Wakeup is possible from only GPIO. System time is lost. + */ SLEEPMODE_NOTIMER = 4, }; @@ -128,15 +133,15 @@ void halCommonDelayMicroseconds(uint16_t us); * and if yes it will jump into it according to the user parameters. * * - * @param mode The bootloader mode, 0 UART mode, 1 RF mode. All other - * values are reserved + * @param mode The bootloader mode, 0 UART mode, 1 RF mode. All other + * values are reserved * @param channel The channel where the booloader will operate. 0 means - * default channel (only vaild for RF mode). - * @param panID The panID where the booloader will operate. 0xFFFF means - * default panID (only vaild for RF mode). + * default channel (only vaild for RF mode). + * @param panID The panID where the booloader will operate. 0xFFFF means + * default panID (only vaild for RF mode). * @return An error code or it will never return. */ -StStatus halBootloaderStart(uint8_t mode, uint8_t channel, uint16_t panId); +StStatus halBootloaderStart(uint8_t mode, uint8_t channel, uint16_t panID); #ifdef CORTEXM3_STM32F103 #include "micro/cortexm3/stm32f103ret/micro-specific.h" diff --git a/cpu/stm32w108/hal/micro/system-timer.h b/cpu/stm32w108/hal/micro/system-timer.h index 3a34ab453..8fd5ee91f 100644 --- a/cpu/stm32w108/hal/micro/system-timer.h +++ b/cpu/stm32w108/hal/micro/system-timer.h @@ -10,7 +10,7 @@ * @addtogroup stm32w-cpu * @{ */ -/** @defgroup system_timer +/** @defgroup system_timer System Timer * @brief Functions that provide access to the system clock. * * A single system tick (as returned by ::halCommonGetInt16uMillisecondTick() and diff --git a/doc/Doxyfile b/doc/Doxyfile index e0b0d232e..8d4db61ce 100644 --- a/doc/Doxyfile +++ b/doc/Doxyfile @@ -1959,6 +1959,11 @@ PREDEFINED = CC_FUNCTION_POINTER_ARGS:=1 \ UIP_TCP:=1 \ UIP_UDP:=1 \ UIP_CONF_ICMP6:=1 \ + UIP_ND6_DEF_MAXDADNS:=1 \ + UIP_CONF_IPV6_REASSEMBLY:=1 \ + RNG_CONF_USE_ADC:=0 \ + RNG_CONF_USE_RADIO_CLOCK:=1 \ + CLOCK_SECOND:=128 \ WITH_LOADER_ARCH:=1 \ __attribute__(x):= \ CC_ALIGN_ATTR(n):= \ diff --git a/doc/pics/raven3290p.jpg b/doc/pics/raven3290p.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2a09dc0b176e75838665f8f9553b0276cec70433 GIT binary patch literal 34027 zcmbTdbx<5n6fU~B2Y1=v3GM`42*E>ecemid9fDhc;2t121lQp1?ykXi(FK;}^1Jue zy;bk8_ukp*s;!!yss5&?PoMLhZ(f#PwgGqwGV(G21Ox ze~|q@aN)n=LVTSAWVHWqAs~9bHY9vx6k2Xn0!dXgQx`%yo?vvMkBJ4fJs9-7YG7hB z*BML_2EH9e$bZoOC$j%{z(W3iA^ShT{x7ao05%fB>*OKf13-Xh!mF*B7l5!=qlJn0 zQD!4W?DO@*>;!{^N$c=k4Y#^5`X||1{&!K!NUh4$$0RyU3E6PXcZpnF2tb8lPn4#w z)?Uc*wiFw>b^2@~vk#Djost1Ii|08h&vn_ffJGoBXy*%zH}UI*nW3*Xu6;?-`Y$15 zzKG`^Q~__b_c`O>w7MI9^794JC;AbxTWqmMON?HEqkW}?G~qkefrb7ZZYfh0+`_d_!ktq+)tHJ^BTLuD50U&+hPhYfG@dnNu#^; z<+f@(XjkYD3ZcvAH#Nn>yu^XlyoarZ6nP!IT{eNJ!}VCRbXe|OA(vJP57Ash@%f3+ zrL5ylnlvrviZqvNg_#=(gps55k|U!f2bA;Eu5p56brv=SGVx8e5&_TA5XbESBE< zSo%OB@iI3D>iY;frpe{v)%D zD@;9+FSey8cud5IX}9cSdd{ES84>x(Hm?y6tW`T?0R_h+46 zMM3X7`qe}Zq#z@uN*{>o1jpI;6nMUS4aZPho~miRiN}HWab~ujsl;0cpSX6D(<2(V+1aIGofAqR3wg8yP2yu?wmtbkqmj}@OBA|=) z_7^L2R;HD~Z6uM9-+y}pEBo}W;)ko9;5w0+_+}#+&nLGq@^k4Q1WrcVs)w@AbDzfq znXUPHCovvU(}WRCS>8nV7V#voil8kKYuf`KY(T=E=@LU3kBg;fQ7Z8oM}I$TK;o)` zXDia!yO|RdTt^Y9T8Hm{TPbyLJ>>+h7COVXUjUuuU8(vxr&FRcf8N|6mAvE@_dYD5Ns62Hf)oo zE;TJPh@2^Y2pmvl`_3V%yG?C9zYpKbZT(}hG21+Um!t6k=SczTUfm&IhKL~kH3NZrCc)>q=(+LR2S0^Qs<vg1Y4xz8uasDzC8_iw}}{^rS8l=tF|y8abGDxw?m$;)Fl;%#d53{(g3N!y{f%>_*cVj$ z>*5A$B{a2`IeJ@uC5|2IAF^*>0CM3n@%&Q3Enz>f6XgF^tOS~L#U#V{p$8?E9%)Od zdWDQ}^XDys~?GPrij*GU3cYdJOu{9%BR9_ zd4I*pF!R{)Y_4@sTE-F*AhZd_-u51TViAW(i-qYxm?M~G8Cv5$XXA=v7ohxNP7GbA z5vxdqNS(k*DLkY2qS%UB!56I#&jnvEK4q=T?^mPI=v?*6m4sN4pBf$bDddRZBC(Y4 zN7w!ftSwip@$-UeS9+Ptwl?Li_G!(*4BaU)918WllgAlyD~-=)Icru6k%H_mty{HY z15UW)j*vh#KF~EdMth+xoC2D$7so8uV#}u$y?eMQKvl$axc*5@F!HWUeBq8LDJ3yf z*n-A>zt&ys`ewY%xkA20ENav3AmQh?o8tKM@BYG?#(d2i$w2i1&U9H=12D|>NxhK- zWiMeH=Ayuy@wg+cO$Y!jCQSYqmSh-4KcC>VLrJaQ~y5e=o%Ph_z-ppBAqiKhBg^W@C0&8&w2 zeQ^0Nh;Zz@LqKGI`n|uj<@lKN?5O-h>9skvl3JQNkb@m6{!_}UrX?NMSg&E2?e8e} zTZAF%_nl^*>Y3H`U^xj8Cc*B>f7r_pWN4B7ZQ>0pHGb_seJd}S9O>C>WUzNO7OAjQ!KzEDIF@7hs)1h53*;UY zOW?Z+8>8agYvva;k#CclbKtOi0hs-=F&sfi2Ufjp_Ij)b4mL>$CCMesQYWSWWi)$kF}PS(tm{JxE>2-Ry_} z+j=o?zw~TA&r10MI2!YZd*DnpJ7to^azUFMb3u#Cz%}%6-{M=@cVvLDS!*0QpHCLa z3qWH(@b4GlEJP35sY18tXcEgkCj~c|fv982@=Pjz{RpWmS1}fQhcEx$QA+dB%?!$D zGv%Q|U?1aUEW9qy3!aOuw{t*7jgkz)Vk1vqechT!_q-mdtdEV~_-R9YYncG#s)`HJ?>~F67GZ|}Q{6tD^)1sS6(wge@)@8JXHtv1y&@y3@&%Zi}UjP=y zTTpE^#l%t@QYAAhE4F(5z+)<6*N2!ERH-g*Q4h9i&G$2G zYzFVgm3ReboSzkuRIq8IpN7Pi9CWk)*l>;ZiM|ZLJ7;?K$+d$I!wNT#^_HU9zvPwZ8z?gHaMT&n|4HxMqhysi?Q+6i zd$wOuO!4Iv?W|7`sh@Z1vK8Ts(1W*cZ{Z!g8QH-x8nyJ-NaCuh&yiC@BqG0T|Kmvd zNa~ZvBK;6l#Tl0iY=nZ!PSd#f+-zR}1XVbDAL}l#-fKK*j0KU3f8{bL1-OZtAf(n% zf(65W&pS4-GwZfAYk@n2Qz|F#roEGdC)`};^jqDx=z4y#vwXlV8KaNhgr@BkLxv(v z@x*p!ZYtbEl|pQ(I;RV?jI&bM%8TMV|FTLe=gSX%Hz;VmGzKfyDfhFRG12ip#|f>L z9H5;GJc9;1XMItu-U=!&cD{Q7gqWnp?8aBes%AZrxMT;;P5kxm*W)vL!y^na7K_)) zI0N6*ge$kRa^w=r98N6;n?<`Sn#`ZOp?$o0_2`2{4i={Iw?j5GPpmHh%fa=X*28SR ze{l;G#sxPkbC*nFr~ArGw!^m zmr0WHU%Hx|FS1F3EDQ`t@i{h#^Qu(yQI3LC!4Dc-Ys2dg7rav&R2uEn%3Ef#0T~q% z9|jQy(P-v>@zX3IG@B@r1Cvi|cNytZ{hn=u-+F16U$4)Zw<1gu#zL+&EX~o1A|QM_ z1nyUBSNRy7({a<=(~h!Ip$U3+dKXWLLCW`GI{Mh9qp^FrtQz~sAbX_QU$)b=J9Z;; zOJWkGtJA3T0638^7i(7OTJT$B55!QOcRL#ii^WfLA%P1C-D>if`8(>T*;eJ<{D&H` zrpxu%d*lOr2Il|=GZ)3TCI|%P2}UUtsY2teLboL*LQM;vf?Fzm(>Eo7wwHkRQq_On z{HlDz0wH+OsjTSB;HU=oZ8szDMO}()JDz&N-1+%MnY~nIa8dXI7Ih@)$%nG<7?g

u*nt{%@b=QhF<_ydDIU$De)dtPjoS!S}DOI-sb~f>b=$df&@W1HnGF-CB6tc zX0(!mnv55~c0LG`!$^#E;Eu}y8#SXGz$0Li<&A!ebNC*#!6K|Z|2|-6YIwsQG$c;a z0FBz-kdp2U+Yi-<`o-XE?mt=@%nhQgWGpbYYo2sm&*iU(;KJA`B_;vMqMaM zr&FkUEz98OsA-Vx?If^?K1F!oS5sT)I+1Dv)|@J(263=@?j|I-mvB!1m% z;Ah0DRP_6ms(t8Izt?|9mbh+RWk#yIs=Qg$k&9f#d|e%WSys)ASHj5Pt9(WYd4r4K z=TR$YJ=VBTDC{>5^R`TPU|t@ln|k62tT)czGQ;XqP<(^I{5L?=i{(U2q#u9Eg8@F# zoG8A0a-h`lbvW15@*!NXn#g4mCm;((0x9%Uftvn4xgN0iyDBTW1bA4tb3sqwg;@?{|AX^9>ZDuZVx4+xm-pi&47)G(F4QVI48$MRUn<-_C zWX>g03$%{Z@f!l_eO*lS?&3wt9Zax5Qd&kU76s>=GV_!4d@kTfW4=p^*z0QYV8KFZO^hF6NOR36 z@M8M=nW)@oXzI}W)!9Ao&ul^icX7YN6rC9w=aV)sXtNd5k^sJ~SVMbSj_g%C+(kiwcfS6Lh8=1>ywI*}MR-;P|KSf1R$LH{ZdF0#+PKZ3XV|Ml6x_ zfBi6^3{Nx9N|7hg(F6ef#t4?wce?Oby|`=G8!LQ=Z(0i!gRvLSiE0spqbwXMi&df& z1h#HX$%eL8WQWb26EMUz!PFdS75~}-{;V=y)NN8NIDT&OY(^!#^D<3cpTJ8}zZx{M z|AwHRT-yWUC92rvguW+@?Lfi4r@@#PHMey4WZm4feY6fUS)y%cCzJU7KEvvJ_@p5M z^8U4vr&}pBLJxfAV}Fv`*0OYNQs*GNyIeJyAQm?#ZI4x}bJulIY=-erm`L$CiXLk> zj}i{_kGAFD-$KIuv%N#c`ycw%N~C@n0+`oFyo*{#$gp)n6kJzA}EwdBJ1tQ(7Y_0A~NpEK-Uo~Lr6&0 z`ztkKUcE-i*6qS6A`q;`i2{B4)YxH&JM`!tw!USd^wEKA%9gSBV%(OGlP(R8Kr?Ib zW30urq8&VR?h9TUxJPB@9e9*7aAe(=XDw619mm3-_wlHixTJtD3vQw>X{2RK29$#OL)zsaq`m2lSo&n&{Kd}c z>e7u2^knVXno!aA+av#=VlbuCjh?geO^6NSgFCgeiz5#M_JlP`hxB5f@n=Q-3!$M0 zwTm}deaizrNwq-95b^Lv@e#I2>IJ~i=nxB;&-0#fI$XG`cGi!xrmxrwG@wNhRx1}a zG0)Y@x0X)J1fe+R(5)em|2R6=z!kao^=+)cOyS-X_3Ns@WJ@*V9q4?=Uf$p-tg)E1 zb-W~a=YTvu#S)_fi|VUtMMY~39ZNON{Fpexk-Jy{-5#0%K6vs4Br9P<@>$Bo9;2)H zcnVQ*X!b@BJ24kQulJ;YV(L_#b+QE7__x7D3`Iufznv>TX)%!#_Rks_o=JUYo4lUAC6kEe*rXZ4b+6q>FV3vY3cnvn5=(}ruC=TWgUwOj&+dBV8>$hjvix^J8k^6 z-aTAU_t=kl_w`9azag>u5P2_AA(dPP(Q7_8+x2y(0=It)M}&W+ZC&VK-dS6d|LyB_ z!6vGXtfI)mLSCq=ea+Uh0w*SJ0wDyvZ&y}Q?E#NDLJKG6Sr zmDPKojj%uNY5Ga%1)x)#-fo$||Mz`wks zgbsyhMQX}^q>OWq_aF$B7;=C9_sJD%ZutBYCTqFA)Gu^eCg;N=MrEr)~7CX?u?P(Efbgfb>u(18CIqTzF zsvketjMB^=61%9W?aMuvCX85p|S~H1@7}(P* zjtvomsh$dJ)$HioM}73KEr`*T8xgaJ=XIdtd{WSVo?N&?O?c8+wG+pm>yWi|vffq3 zvHO>%CEOYIjY&QY8-Z(-ei;dooI=LL+(i5BqR0NaSlQ{};-&!es4MUDiA*%nTe2VF z`=}~jHH0sKa2V9o-krL$Y}dXDb6;Q}Mq~Ek?YjSlx!3h&tL$vsIqqEqm@|4`vc&7C zPcX>=>wu%ou~PXdcI^c~uRS7I6>(0xe!~|}?1!EY;JioS64)De0SHt7s;}ZCfUix4 z!TxolkOL{7UHTl2`=4!>NE4?<+qbW{oIxd5#0I4mnVj5FvLnF#_n!)a81g|8#927K zk&rZ3u`jlV(kOC(Bw>8rWvs*vmf--m>^r`sFTag%OY-chs46-RX|o^a_MflIRD(n? zXAmsL2yPP7?{|MFRIa6SsXoq|nf%=Yg6Y5Trjqe6;eNG>L7*qKV5B!JDVVY|AxI&Q zQ>JN16z>bsi0`u|iX*pTKm+8Ca(~8_-vzt?D)zta2E`$JqrZXV^t-ZrYV{^Oyyo)x zfkxCPlBCf*`hom{b&8LyiesWv&BD3kme`6YZ6Akx5>@6Tl0k~xDg8z~MN~D!?GWkK zEfbJ6;&g%k0zfR-&WLt1$)uLNrS zlBjX1yaQ3QUdQ*9)%DTZGo8I3WLjbevN=3ys~KbyUV`Vo5HyM8o&dVcOQog!#l{Eh zRq+xBw5)=Y)BqP1xMP(hx87v@J}p7Y=IyVjQ56uAu#u9uaa(I(YCpN zsltPC=1xvlnT|Qurtml?Y>#6R{WY1$391$$7VJ1C%E&=6&pS%!0_nN@6Q2>(d_bVy zj=%;4pK|8vrWe`PmGxGOl2-T;cE z*sSo~slZwb#M^2(cWT4XTHW0NiW>5IcbdOV%;`K8NxmA1hKzIwl^QYLg%b8TZDXD5 zDH%#lQEdLJy^KFlLrFM9R-_yh8m;&<#SHr57x0`n*Y^TIzU23PxUiV!cw3jN-%du` z#%{C3Wl&gZt>Wre-}Baq8N^{f>Bn5{$KO2TsJ03uGd4u_uNRtIFtZvlPPUih`68z+ zdX&7_R2))lRMU_pnjJ%^#+U6&HCVwFrYA@vCDWc}JxWL|o?cVhW$qNaY8}^!VzcU4 zdpGvvkI(Tfq;55;AeSKrF0HZE#`it4+q4JS#FcgTGP0A`7}tww*FF`?6)kC*(mCMN zWetFIp7|I7#{lk8EB3zt>MqJ`Jyyf|wE}2cbaqk%C5d=?9Ju4Tyf7^s#?erU%)HGF zTKDH|q-9%gbuBsU+H!`@8J}2ex+s}QeJr;U{h1@s!oJ%ReQvt@bN6O%+VZzq-%qPK44J7yWJ9JfSl0pVlltd4^gUQ%+l=5dwKSgWf-_vYys! zPJ-l+663UPJstzwIj>}e&aU>x5G>n^{VRw4?+?l0jM&PU++q3c!PT@Gq4HFr-a4Iu zXt8A&SG;orD!<)mIG~cd6R7^uRr_JLI&o)ZMH9Tbc7hPu5+j3p{Q+889n03{hDMe0 z)6PTnhREneDkG7_TYvLGahk>Igs9c6fwU%Ujz;TwHg}9F>K*+Cya^5qXX>UQ(a!G* z;%?30)YBnx)_Hb5V{B-IX2dzCYg6<+CtqzaaJ4v|N8H)cSFX3WB8pK*sxBy>cXukh z<0D^{)PQzdZic8}WU``L(b{tchis;aPO(lEe3%320_STplRJ6xsEypu$Ht18pRIJa zq9@;q1HL6-LY(?@jOD=E;qL8EBHlF}>J=v>>N+1$vKMRhmCO>GHkQ9DGmiI2VViBS zpph;9h2~inj8qv*Q=k8h2osG7cKLc;5H!ZoA5T|SCtx^!khAwd=SsbzMsglNdLm9g z4O6>^W40}z);c)7d-|;Rt|Mts2(f$aU80qy$z*A)3YRrz!XdHG<^r4z+9aEK-=9ki zwrYbjrH(i`!lZV7wi#+x(hHo7x8Ny0H6g5#KNLO)G_7!C+uVK(SUmdh0-(Hgii1TdGx23j=rjB{yb#^A1+gNFMlDmx&kh*lQs}N3WGed9(1Hsi*H!;tmI*R3r6?&8i zqA?7(46a4}3Z&TO&iM5(#^CMDyP9ReJ4>iFWU8lAAdq;?tHdL$tk2xkCEsq*P1%lQ zf-H)C>+r`z21+V#OYG7Ju!%WXD{u|-dIuh5TT`7;a>Bi~tXQ#D^>_X5@LddfIAYng z=(?%K82}H^{V$h5U&?q|#X|AkTZ*vjTA4Qt#`Ub?Q46W2YR3$fVfTboQ1p&ioDE+$C7| zJD_(i==t}dyBtUmzzXA@m7WUgu-!`tC%F`P&OMS|bpQLoX$+A>r<#HO&;%VjE(w*} zNLpc%KSkI%;G)E=WCCj(Mjz3`m~2^<(iViL$dGqTfY|+Yk5BN(IJtYhQL<0nIGH)+FPulpfGB|~(J+NBN$!l!c4poX4K zzB>sBUaZm?8NcgWXB$L5SUo)ONU_-mXYV&yx@9j_c?l~H4|7+Hq#n62)WRWCqK~=u zd6Zc#Pk;34{RBv`VIxrg7XT_WU@n(qVRP(EoH%45BXHN=zeX>eP6}q1dPy%IJgg-F zTD>&Re?)^3nqA)EKZo#5;cR$C!Hj*2*v{SDaSBLwE*u@1{YzUIaR$~4?M%+E=IjY3 zIG2I-L=>_2t{E!cs#p4+W4X}#nv_>6;qafICJ08T=GB0scCXaX0bvhoYGR)$%C%=E zDELU6cF)*!iQP@a-ui=J>^JrNz-(-BL7ZGE?~W6`pE}fjm)*?ijbJ>SdgCNXVev>g ztv}Vs1D05;p*$W0`GacWHE2HuXNNI#Laj?%TCTMfWmJKy^8;)``!WNA(>i!F^$F?J zEyyN*tWS~w<4Zu44pZ}D(U}v0$KQE4&vEO!LPy4-3K}pbxhRUVYu`ojPrhR1-zIfO3yGCCvSL6q zwF=p=5UPNLFo~1TLufCJ_@W6Dq9W?b~r@|hyU6|Up zr+_wdO-TG50?pH$yH@d^eILBwJz@wXzL-w zh2ty7Pk*24&xjV#8pJ5aJ$kg#OOJ!NHTUO5o8MLtW=7R0X9x4rCc0+fA-ucr-ierg ze@FfP-_8$WZA<#lSc?Er_%{+u(&$|}(VnpFcnvr|k)>Ngdg-=X=1(KhQRiy2Td{xP zGRP=lE4Y4`*Ap0;zc6{RzXvawloe#(X(JYritDVZ>_5%N@eYygGgG@|HdqM@83>u@ zb|7v3em>O?mx+@HeXE_2Jd&fs))6E}v#FteZVPzl717;Q4~%&M>|mu$L4)0j3>1Ia z{xLvrr0kF7T(xLY^AxS^y=r@~bUCO1rmG_@-99^R_4@F`Yb!TakA<}o?HSL{*SAjC zx5FrOEnEYG%_%n`#sMZByIpU@Mg2S=!1IbHMSF4nrdjtKh3f&rIKf^YWaq#Ar{;FC zW%yC%3|#US>{kr|mXp6Ejo*)+Og(A%89)oI0!aNNpc$2G|MWVu9o?V$uuc}6Nm57e z2W{Yi0uttR9#g%nAXXs94&?^ysiXM0Y_<#X=fEc&Cey~x@lOhZ=Q%SuK zg!OGAP^Oh4Y_q;}MbVP~R1!Iyp8n&^CtX-~eurO^>w4zH793Net5G~+Ti-V@TB|J} zXNU3^9s3@l9kME9r4dG69pbkZwOlobMRfCXY0%|^(v5f`cbQTRLP)9&SJ#9j5$ z#A4RBG|%3(zQs($M4?$dAsW=?j}mII(GC$&{9Sn7 zKXBC57R_f(nsZgmlCJi+Y95` zov^%W2J~toZ%WS(n&MY+_~*_^_T_lVlGJe83iHzClHM}ABIe^}cUhlnt3%+y<#w6k z5yg>w51WG@YHGf_Z5qgattT6IE{brW(PJ4bE>3kwtf-ZC=vv!_FAco_$hFlH2H<3n zFL9-x;w*jbMbX)RR<9c~NXJ!HPFH;R8Gg0kJSl0hPzUAwvUx8F`l18dFP~tK&(_t40i3NxvqD z7oUR3@i`OxzE0nULHtNPg@KVb8#L}I--H^yIBAq5r4Z<4Jw5s6j97S?7(A^o%cDI? zYXZ}DwaRvnZ`kQ{_#D*x>!(cZl5~Z8{2kmqPQ{9}QiB~G^e8KY9BBk|Pjt!m(WmQl zD<^jIh+*`gK1wGX<8>o%2mZwZ_Mo@}Z}z?BcCX*L$jRo^^-&rTQ9P!@*38V<{Fr_n z;Kjl8=uFqomp8ZwuLWDLfIY>mFS8sDjq=HT`==y7HdYj7Ca}{~K2!H&E3Ic*{17P~ z1l2PkF4x7u-JXoSeqHtpPiC1!=(g9_CF&@Z>MNv~l;hU%{rOzRMvAx)kq1n1qDp3M zm4Y|SgzgE{{9;b6F~|O)?;j#yA6UOBZ4s~#qw4#0+F&r6quL|*ZQv&Ho9F>n*1;}9 z^H(iZ$*kEdAJL~pP!sclS-rjQS{ZPX9ead4iT~pqZ;1J(Ldc~4VP)w~mG&y8&iB2u znSWjN5y2L9P7d8O(gh<^B&%hgz-R)Ur>>9xWU%St7mw)a?qx4dz~&;3 z(Y+)zl%}F=jK{dA6zZL{xmh#T>Cs4nF1V*+Dk*l_gnyXKI?!;OXCslB?`kcYcdvJgdw388glQR~=FY}?K^ z&qYN``E!o!jSh@PievIxE7tWL&Zl>_i)#~&x&^VFm-V$G0=y1C(zRC{I^1@eW&`VP z3_ax+_>{P15}lC79K^!*6zU}zSC8+mxLf8pO~T#V;!h5JvutnaBk9TIMTgW{jhm&s z8Owj!VOBYytrBQPPnlKXm9279Iak`0129X=Usd2MX>E-aZi?n?pEOwvYS$l)0#~I5 z9wT6Qg@dVqZyY%Zhm5fs+WnDKQ+uWE#tfNybnUb%2Wby@F13Ha81YSw%HZ$ zb97b#sTK9i?iMx-&JDjW?7#?w$hA$T$&hHGwfyXf;G_?KtMmcqdZ1d0+wC? z;4co8cRAqfJW`PL={ce5bmMZ9v6mxx+~3$Fp0q?-`|yFEF94BbYwv?5-HukqSXj<& znK1u1sL|O`vEgFLsNdFWva%tdZT?)D-SKB@9BQaB&8JrTyQCHAP zG*f1)BaIkW77!|2*BOd@0oa1f16O^w1<%#K&h-LGI)MHGU^MthmWqI0yEX8AV~W|2 zcmLi@y4=eu!06{Y$@Pn(wx4|^Avq=SY!{kz^=-8+N?NPhu8G0cR2Z&F+^gn*w$VNj z26c)OLVxh6GU*oM-#A#Zop#zs{a5y2+K6Es5}9qlIw(5eSL;Sj?{PQ!gEf>mO{Mf< zPWatI4)5b&8)PV~6ZhY}z?h3IQ7sCc*p_!f4HBC8!UN|E0A=Ns!~9Xw45llDXnl^NR=JFIZuqm;7_ zRT2Ikt~g>A58q)o@?_?iaH3*A1m@gZwlZ~;>|UO|0PHXvIPvwneKarg^Bch00WtMAe6 zcol7B)0qD)3s-HE8&AXBXlZ|{&B)Xy|Eo0VY`0bla`eh`62YY1*_!kmIy^HEOGckN zSI0T3N+(WqziXN59E`MJihqsXzrkJZ(t+kcIQqBjW{hkyk$>OK_72h$$>_LleQisX zYInoCv*G2R3o%L_rQaQSO`sc51S}*H-<*XNeQBx!6t|b7nt8 zC84FA*VX-P+f@Dm*D&iS)I!pLO#XG}GF!a%PsE=df){wyVg_6oyWyYo-!io+hrMpD z)(L^Ot?unk2wrB_1D<*~9d28aC>sqj8#--+Zlci^A7m)$*VoOR?0PjV*<{)HG2XHG z=IPi3g5_|K`T}tqggP1RK?Hm?MD}{$J+QnBbZj%Lqwm!m@w$I7Y}tP$+sOD6J(kK6 zLs@SMQ+$1&xb&a`gNkc`v5$^vwiwZZ$%CC(^BvqaNeXa1hO~H^x4N-51=@_+o;4-K z)8{bOZRM4v9`<6pHt{&{U{9l=>!l(1u(rrHwYkYha&D*DcOdE`UxL4zup&^>mI)Wj zaHyX%8cw*_kPs%0)(A-mt>N^Og|Nyd-C+SKM|N>)SFqxYK8&XkVC?B0&gKVk;IWQ1 zdWy^6FB(VKU2q)5L)YJzJ63rLQHoD35ga^t)GO%!tVn*`pBJVwdU*z|J^A z%`3DU)MyglboJtQI`*$FR9rLj1O6l}WuF`sq_ zAoTK7c&@(1p&Q)1?=!*&1B233=N&{rm4-H{OQfV}*AHsLshq%ch`!A|ipTZS-TIfk z>`i4EUut`xE_*^x4Ux_L)*DBot$tyv;+?f>(%}V%{koqt5AvGi{)3Xlr>_xkmkkKX z%XcTsHuLCv!J?v*I+30qp}z5;3>Iawvx4}A#FbCr*lSU02^5?u`3~5 z8hUwAV^hlt=y_vCB|}s5T*;hOhgFng71IxSqNJ4y%O)OaCOxi0X;{ze>=y^jbfQ5w zAmx)o-HV+>T{9gVvz42#ML8ksLit_!eeMe$`ByHexYGU&ZAu90mP?}oabm~1hmr!( ztIy&}e^6Q}yqtp4Plh>d2QGv95}X|Q{xxQ8D65l{x5#O1C{x)^TOfy_??I=k{G~~X z$iL_$ze>ShD}J@O;axi@&k3DmHdUl4Y(^Ay1hGVjy7XFsKZ7J0np_d~_q8jT8kuH- zLXVAw#HbT*i1_1+OC5ikXbfxOnr3T+@NDF0xYNquC|wW5j*#H0_`r#Yn)Z_v%hY@@ z5APz4CPG-8y5GoF&kV50{N9Nqz$<)OkXM!Nqf25K+0RP`?kOBB{2`Y(z5?6a1)pVj zD8+^zkkPl)1iw;3HMukpl3)l{9}N%qc`$!ClW`($JjQ`n@87oEA17Wq;<(}`y$Zy! zoW%Eg{PzrXKeLjKKrE#mHBo`vzd#LD5d%O9X!CY_s+P@7AiANQUe(cR`mdAW#e1zg zY>d@z{lP0j7$+0xAUSj{*tJY;QHWdp&KbnjLA}=wftdFR>Uq?-|2{?1YHDp>oEjSa;KWqhI`8gsr-*T0%!#eFZzfAK&V8$y zPQ&o^Sr)9{cf2!!$e#-M9E}&@s!&Qrcw1vsY&&ZZksvsKbBenDgNPRb zV}QNE)t@s{Dw+N%w+LBYWg@GrnQU6h?lJ#lLFtM%ZfYufl7a4ZC;Lf5eTz=ofDzT8 z2B)*LbLNnl!`Se_AztsbLb*cYmTeNHphJ1@(->dd>C_NB<3p1O+bJU@2CeBz6v=E3 z?grRcaP}LYTTsSrWk91?rS*9^b;-H;lbIjyb7zM%_*4ec9LE0_O)6yHuB}1q9%5*~ z#9+a)L>Bw0ojw~kyC}~_joR6-Gw?16YWpMrpN0#71U497SJV@X5vw#O3CynZk33Z&H7u~K==oXD3g>m>{S z`a5Y6w70Q|yqLetRyJ^=dnwAb&pWb9$2EuFjQMKje%MVB zZTF1~bZ;4R4eNuAf5sj{pAeiP$wiqfTKra)!5E@M`YqF<1^X`k%pg6hoO*nS9*rUQ zcg;UNrmAg!b*aoT-Hy4XzWa|C!ynJTrV&Ib4qmn4S(vPw)`w|Q1FGPET7`5{>EI9R zr^aZVw0@*ulB!~_E`9J;^jGHaxzFK%CAINXt=duAKT(V;6p{p%#O5MIUst(M4598% z0w;R7-3bKp6(byBPCf~2dj3^ocIrxOB+YeQ>9tctOoS*4>q^*zE+agj^n@(FfOMf# z5c)w_sPw4#D@#0dE{|7cG*lt1tR(dKJmmcOM?4J;7oG|&2z6( z?drk?`?TnH3!64YS9`5vXXqAK2T9|Y`%5^&ZofC0L~`kJl%`^tZ6?Nuw5&7$A&B)f z+k4fZV#&IB0o`KFgvd^n0exggUZ6K7k{Dru_6>{@!N7R%dU^UY@b zCZ-qM$Mdgg2FW@y;AGa9k+#k)&L!=*EG)B3U$X- zIqKBg`U4%zrzw>MKWpn<&G^y73HF9W(Nq^cc5^2;sw(ORk7lx5ZEsU$;g7wW{3(Y) zfZsyMd3hv2@MmQbKP@QjFR#g~OQm}7!(T&n9U-d@B@WW$342+5VT=v@70>TLx5I8? zsU7392S|*@w4eJfC?b$ZT;x?<3_(??ov_tsA zt#DWo8mAm^Bu#OG_8I`8SU;Br?wAEE$86g>$ZWn7McVl`&yPL>NP4_G*iAD{@wNNV8ga~fFdirf?o z?N4hnDy&&q_DXWI6)$r~sjBa9#=MBcYK@ie&HHh-5rmZa0>Fc@?$l5~kJJ@G`2W81Hk%x0>&rOo4b_+WHXYkjB%nE9-f_226gk;9jk>Z6YFXe>|ltvRb8B0Q_HS_#Xz|XIKjE%Z2%HKgJ9i$$ z_4;X@RIw7OL|+yb^nz`Vxl~{R;|7xpg_?Bt=8UNr1qq(`J zG0BjC_eF^S*l9}4U3W`|Bx(eB^`Sm20Zzbf#!9L2b{~}NNaJ~wlQkdMxY@}t8$f55 z_V`ux*eC2Mq#8Mf6{jjEl*MH_bRIXqx<&@NvnwVB9%K!hn!3xfkWlu+pAgoez*~F^ zam$UEr4fZh#EElvf7>EI_3^wTxlQR1Dw1iU5bIGR#|GzdSFgw+^N-J&#Fh{Gn8UOn z)Dho1h`qh}TdwySY%RXay*afR%Hj!5a-As*P71j9f#fLP#Vs+-9yHe}3C~)m5P82H zp(hY}+x*3!6%~H6)4^M|ZXoaCUTRpf0$*_coYZicq zUIX^s>8yZY8G(nw-zLr62IAQXwDGr(!wv8aj6VMw`Px@Ostzg>m9V$7<1)f!)c$GiIc*kYQ`a;S9ZXwE>jr;O3km5$a4I2uQ zzXA#3jgU7o;IGYk-{q;qG3wf)DnX4F>}?+|0%lkY=u5_sN!a=?I^qg$-!GPSVx&J& zaPCFjYz4jg>3R_EH(k;v#k;`dp2Uty%dBpr5AD->o)?>%m0Blf&L6yev2$4$JAto> zlGZDyn1Ba$8lvzh6MW6Hk(D7pc|%mdRYH0j13;rnZ*+{5Af8(lit;V^0Oq!9*Vkf=7V}7uXTd`gNJmQ?TQp|VxXsg#ECg=65 z?`Zy6$C>#GttFc<0JONrMFO$0Hz{0c>}1OA134jw1pN&}Ear|pxVvS2m^8ID8KHvp0->BizHP-Dv(G)HQ8V>i1dH zuBMhV0uwCPms0stMjND(oR@XkBxNB5N&3t7-2Jb#zlh)PQ6B*4x4OQEr+hg0QLIAJ z-D>P4wbeBtbb{hY;__ya>_YMRK2$Ls;ydVsv3;SPJn#0B_@#N{!Jue1n*Fzm*Hwzv z>eo|G?N+&MJr#^1MAV*Jw4O(rW|^AiRFQ3`6hDHy4T1ws0X zU4U-jaB2w^iXKfzvm)%Lt6m7~+z+}J0ConsXw_sRbeY~Uf-}u*>+1+T(s8UTTNCs^DWRumx@1s5CZ{R9;!Wh(s+d$&Iqhzl+EOR@g-b^ zl@Hw`*p8IyQY~yg#a8iSmPleCa2iw{2?X=koCEJxUq!XNyLIxmt7QC#3UWcn{D|o_Xf9ZBEA@#LPR_pHiDNO^`|8m~KG}btFpT=L|~*^~mo~zk(hK9g<56n6sQs z7#Lu4kbQDV&%JHqV-Cl@DSqiVM* z$v8F7R;5X3jcHAK9+c_I~i2X<8lSoz1womiO%% zg{z5GoB}>*xFJkSjmeIF_j>YQf?u%5hrScoc$yt|MDXv6Z#-XoZYQ}hT1vYFTSBxK zEXu&KnYS-iAk|j=yRPpc{{UGmWk%Hlo;@>I8vg+8Z>Vbdb1V`9cM&4w`t$Evs%!SfyH?y zk^cY$e)wVWi}s=Mu8g|2qv03l-j!Ob+f0FzgcNdaBBs zSxIIaJhXbl{iFW?VlUcT;7`XN3j94ycJJan{{V|{Y$s_ORf64GUn>^}RYr~=rArV= zPy>A9rFt>(AB!|ie*0O|d_#SuYB!N%&9rGOKFkYwjAOw8K4|gs;C$!SwC#UrABlQ5 z#O*)ElIu5jx}KS0_BJw4Bv*2)`34Z;NtNU|GBIU4*XC`aFmYazsRp+(b>h#QK0JIN z_`UlsCYx{ZOW}8eY?oS$7!?Y_ZYFBzGn34_xUs^~TYKP=aleeksUu*cI_UQ4a#E%(xFIMr6m!#^$ z!nZM9PR7^lP? z-z52ahBwRQ1(C@9_CJ++C+s)-Gg*GyAGDpf!>jKVw}ftWohI(@Ou9OH>IU}W03|m5 zTFn-BTP?$e5(h(S6s}(t)9Q!zewX${fvo10J|%sJ3Z7P~E)D3@@Bw4G#zFn8yyI+d zr(NI_ySD;Q(a+gN>*3|E>`~#>{g>{32`|K3oifTR#qnLolc+V(MEhaBSaW$Ss@uX2 zA_QSbTvtvX0nIhfG+|#8B?n}FcKFBs2}|)BU)x_<_&MO~y(3<|(d@0Yi9ADa(rKDK zrJS&&i8S&u%+Y@MyjVM#iZE4W%cNcb{{VtZ{8RBC?Q3c9e^ie{(e5C%gH-VbuWNl4 zrDfsWHcjWxnNj0!HIxw)4q}zJZX`yInDrk`x`xI}g=@<@>=4CL39c*FLA_-p?F1g5j_M}lv)YmXE7*Wyoz zA;0k!wRI}Bp~A%g`AldP01>`@FYKx*=+0G(tz+@q#lHjoA$%M0 zcDiQp=ZbA7@J6+FquuLTUYmL>EpKfb%W)0TqN>UX45Q2pQR6rqRDJ;X^{7STy=PYO zMzP}Ue*XZ(nk~6i%kpTrkHOm;eDVdh;*BDx4VsUIhN;3HjWe!t^JoaKJ|FFg1_LAAG43d-`WGj z8g;M2Zyac{cpmn|O0w#c$>HA=q|n85me3@VNYYz{C?-HH@JgU98#2~!Dw_Tr$MyC9 z051{wYw$F!({{RHP(VJKOvV1>%9vO5i4O3Q>xatO+k}X?a&}@yAULe0_!^dw7Sb#wu-z-jp=aYUuSkn&w0D?>CSon+M zt#HJyx_^dOO$4Z1Npq;$NPrI6j?!)iY}b>EO-{`8aJG9Nb=hijPT@?9+3WHG5506c zbINUp&)?}>o|P8HlzDp^4`&p0KEB0p9 zHLEEW9~Nui=$;%_0h&9hmDR2a_ef$bA@wN|bdZYr52OBrfthe6gTi#GjzA z#Gm*n{{Zbt7wvodNb5IxW!R5E@H@?=Xc4^s04>ZzZ=H6rFFT}~IS-lMDB;_Njmge1 z=be!=Jcr<~#19!oaBOtn5O}9g@StzC>(D`Wa<&(-u2_qRk;GES{{S?3kywyi9OT!y zd>_#-z94v?QSo-P5=-q~V&`H7jYe`7H5@800aRcp00025H}D^UWL+M|Mui#m9eQ}R zO-e=zUMOQ`Ht0%#yRu|v#~E;I>CX&!b+j!eIHN-ti2ws<0|LHR%&IcSTn z;xxcN{d%i$IAU?um8bI@t{BOlp0x|U*CB=&91-Yil|H8cl1Kvo06JqRm9j}y3)+b! z1rGwMTwHkwNjVNMDclVGV$aP+amWXQSid#B+)o3QWjli?!3Vg_Z|X9An#2R#R$Yas znoBI z?rBZ5silyRgB6>mD;0cG;wI3nRo6|r)uf$-VmPB$`^PQ2J$dG>OQ%`gPVYUe5j=`F zl7K&B^JBOmej=D|3~7K!`W#UAB~>s;8$jUG&}QB~Qt zh^A=L<4y3Mh4$aGBVsqYoz)O9=s`w5DeO&rwP6&OunUQ>(p-RMIQ#kJgYA-d_ciIC z8N6ikd^qtP@sy$QuZSK9n|Cd5Y6iy7f0(fU0Duol^ZP_*fJj4_$?87nK9%fBPnAWT zcvQIx`o)*pH@4u+4cX-5nuOXq`BjSl01mz;c)#IBwD+D7@n4C2Ep;qDM6+ocwZ(y!B_)ah z3pdJgGEc2%d`$7@i2gMAzUyA`ezB@}k6P9Qaou0)H&1hOcojq{rJRz=i5mUm$Q5Gb ztV1OG)nDB(C--2U*dI66tJ+Jr`B!7tD2&{2UA7AB~^0zPI5&4R{i70Qi?( z0@CMOx7Wq{TiP6XscZ}}ku-z%LGzT$usKCF@FUx#z>WYU91fWTk@;lf(K3toZ zaBPE+aCjIWrxnv2ej#lm2ZW~eWeE1gXkZZ{0NeMffJdOn^slym;Fi7}I)A}G9%{+} zeN$f3?IK~-zRPWKE3SP9+T$4auZwRXSQS?|QQNhCgMYz1ygwd+`yS|%9myuQuIjp} z&txBGvs3t+LtbtsO~&l)!=$HVd-sQJ0wSm{B9nr|~L4Oz&1um1oAbp5Qa{sR8Z*Ipj* zw6Y%=c+xp6VQ9B3mKFekad9PV2;)Zl4XZNqu#33@}){ zTUB>qV@Ctfu1NI7dOz*2@q@(QwkOBEf8rR@^-ZZ{EQxJzZVK%U z#?cvP0}I9jS4r`+T-N^pWWU);+f4A^k31FPO$uonNwc?9j_Tsn&*n=b5Lb6aa0%pP zeJkCqhow>4QD=;lp{!D1P^eH{Olnc6^*&D57HDpb=+i4SOeqlPa8|GEWlPafVaS{gry>p%v z{e-PPF8osQ2ZB5osYk18{uar*F$GH*u;_!zo;gU)T{tKP18_Q4PY3*lbA;`&;F{a2 z!?l~9-qi+}f(St$H+&lP4~RdpZ;HGr#78iUDwRkF-YjW;}na3J1)m{hU`1 zs(caghlZruY_1%jB~hYfZaU`$h{vNYMGB2WhNc~rl$-`{;^vfXl2L}i=~Z4mQpP1) zixy?ZO9==601`it`U+3&B#Ld*M=h!q$S)qz{{Vd+57wONyBR8M)l91*H5Ssa_x$An;+d_A^evWs}05v@cttPxhfsYVezppa!LBqvN0!^rrxhZTyQ%xN2b={y7A)OOW->+T zp7f$XnHU*8>N6+@9+ZYvCnOAt0Fx)w(^`ITN#c@L`9TM*Gz^Ng0+YIf%|?XzglCM> znTRA~r?oH~gsi+AeJYQ{pBF{op8((LGP4+O<$AwSjHo%bhbvxUd%X^IKfvKpr3-B7cZD=N{GS-|$iWUIqB+;olEi zN-iMqUxn>-$7MMSJGquc9-lOs`qzu4&{%gb%Yn`~HR$41q><_2z5;)@eV!r<`I~s& zIyb#jyVefg7;{p1e?+?R{{W0M?IPat!p41K>1^V-)UHexNi>HDW|*i*z{Y-O1Lhg8 zs=gBc0KpM{E_l;ko(~j1hP*8omm^s~HJfcp=Ty3A&)MNbwRr-<@;Z5wJE)F0VRn)W?o{s`y$OZan6YuWx4-rmI7JlEK6|Hsce@)T!3r!d_8djgDTY%P(wn_6HfSz|4RbuV57B~PJ z@w*Hyx!MANI0|wA^cCjUg*eo-9nVfJw3{2L#7nm9FblbH)SCT7{hRzT7ll7&ABI*^ z1&p_bA-j=E0s*_4TcOAOw-xzksLbhX_H}U~&nsp>Cs@h{u{#^xzuL@g|c7 ztEUJiONmHe;|xJY^&W(KR@G_q=yD&Ce;afScf#KfwI!F~FOMPdh34g3zqaktY$G2i zSS_QE%(x|giOCr0Un1+;4y9|NLYkGu)Kgm@vRhg_5=25M3;|*`^Nf`MHhS}4yI&AI zJF4mMlVx#o!8ac&<&5c`fwr8C``3v0qeRs;8z+la@JEMr=@ml#q(ZUDwMO1}>w${s z!%7f(ob_Qd;2+wn3RO2YSZ@P3TKVYz0KqyubKxB_c)Tg&O$%7luD5|4jxyl)8TG(Fm2uj4?6L7{ z;O~bo?KK|+L$B#~Xj~Y!x<|DPVn8|;$K!*F=~bfE#x4x|Gxk9L0D_qOIq}ErUw;kn z!`&KbbSq1{X4h|~OIy1;hs#9Mg-@G_7X@3D3);3n;F~`e{{Uyti2nc#bz8grU&Oj+ zi0!qBt(#NP(1@K>Ce?AXAmpD>^7Z1sK7JK^O7VZeUxI!o_+8=%{86O*J@GZ#USH|4 zX~-6Ngkm!JF%|@cP)eRa9+d~|HSuFa{hW1Qi8>nTJ{_758QZ;$rm3s_pwFZQ%CD5s z;H!buH$JsWq$RT^^Xz_?{=t@Z9~C|_c#p;Q{{R*&d?(|JJC(Mxi(QpOm#`4Ql?zI^ z+7$^K2nEgsYItWw_>KEje%tq&g|z+}@%8V*_VPuu$dFs=D3Ux(;J85|9D+F@j92DA z{1cO0@K?bf+9$_@#`=$owcS4M)^Vkc9#{l=mFZ9w?S_vHt+Ye;D{z z{t5werFf6W*4`Sm)r^zfY8TfA8*6KDJm^(k-whnh%eDUigphc}UEKC2$ou~Q_M*D+ z2aLaI9RtEPpA7AMIjLzg3$1$JN{%*?_9pV()F&x{8*U6U*CVZ9e%ZEP3VaKu>8s$s z4C}U@A=IxF8(m3BiD6Z9A<6*dzlYOu*U29b{{Y~i-xf6A_$juW{t~&j)U_>MbEMj8 zu}-&#Q*weOm1UpzZlW{+h6g|gYV`jA+ZX-{yRLWx{t6A?U-(b7x79VD4GVjFhMvhS ztpo<)*>?ezaN)C#NX;Dm82yUudj9~&FWC>_&%^%!gi?5_)5dycrz9}PB(^3t^91Y$ z=zxAsGJ5(~J*EEu!9Ki0uKXm^d~KyPXT#csnbadD;E5oGKqGSQ;~`HT=Bt0fM*jfd zq8|?YNvHT09b3ZQAMkCrw6ssn^u=Y znnauZB1IdKLF4aWWDatDYcu`{-|!#CI)}lXYsVJaSB3m(VdAT~Cb?Vq;};gC9hz1d z22thx<}8NMW@5=QZ^w?C+y5$1jdv zH}N*J;49m&0-<;!u+olJ#%x5Y-|XjOwg+}Twas|H!e0;kN&8r7{tMD=bzLh#@&aml zgx1qd_9=ie9F;g76nw)tZfl;V1|0+H?C_+zLV$*k1aZwQcYzz_JFC?H0BL{O>%u<> zH4O?K6UDlBi6z(Obx4vgE=cgBV>U-dVrjn_e_>A={1EWn-no3bbow=-Vq2?w;8rqQ z0IAZW_*nE6EMa{B=d@VQwKjV0=0E-f}S(c^m}bmO#@gOZQMe5=N4?yykulZ z7=H-_AI7Rg@~5_^0b}!(=cePuXUiq0D+1z56`fB~IH6Ao?mwkg69&TuPDcc{IHiiSXaP)GS!komp&ra6HbT|jnSbaA481dy0A-@UeTMgjd-%itPpHtK|2^QW9NKm|&48>GOf!A}851?WF!H?b#g?<0%W`*LZ227lm@8YhP| z?}HW^exdQQ?nRnSdtI37_u37S1x?%tNViFy%OaGF<0Z!izdb%K{B`lS$IlWCU&mf0 z*L+Q?upm#U-McNI?jv8ifb_xz7~lXnuTu{GrTkBf;F?&!dOIJ`7r_X8H}R|B$A$b` zYPUCbJ}J?nx)0||1T#f6pJ*V)gerjTkf32tO88Iy3jzNC1hnx##BUI4zZSd`sp{S< zx@Z8u(Ql{wRMv6D2vl2V1!O3p0rHqTfW)cAL;nB-r2hbdv-~^wXYeP(zY4w}&3WPL z?IGs3u-0UZ$)`&MlKGLxD`323RH~^81_$27ewo^8R=TyNz1^(vUs+xuk{LrRkzB=q z2m}%~o)1zwb+2EVII31STAd1)X#QetWQsyrTXav#$HDp;0oPg9tnA!3 zAS>J;agR-#n!j5wXMIn`TAl7@WS;I>Bl)rjW;j2VEAwam3B%!K*FS9k00oJ#V$x;0 z)uqoMc@~l|{{Y8={{Y`r`a|J8Ij-GL%H+0i!=-unkAU@G5S_) z+DsRApi2VoQ;e9!bp|&MtkR^iFwO@6Qb`+`bDUuO!#^%*SrK!D)P5i7cgH3u(RvjL zfuE<=x!rg6c+hpH#I}$+0iX3sPt7_xGc2arrJ+CxS~HjD0w+ zeg6R9nQN_H!{Sd5{7chrZ|q$KwYAd;CpZMC+AuiDkh%3SByrCP^W%j&1)x5e++C*u{*ige!+->s&-e{2v%J*%v8 z4ZMXQ9IFHQ9M_usd-ze~du?w^)GoXes%aX|mpQ&SD2C$UqyTJi{{X~80(m`2uhxt2 z*nw;zN71#tS4mYF3l-kQ{F~*h*Z2kF&kx&29j>;z#ig{4R^I;JInnnVoU)98^sa@D zMqgK{4NuAM+hgLKpS1LvcDdqn6VUAPt!8{1{KSeIZf!D9gAvkd2x-n74JPl@*5 zw14dX0O6}UI}H=VR^AfRyDr#4^NdwuXqOb*GWAlKqDs1#4J!`1_hQ2;( z{{RkuVviK~qUYj#PvVUh=1XfI4joolFE7-tOLc~Z}=zAfh0*H(0qA+ z;nzEsD{0u}m5xAsj05UDYo53N0D@$A>%q$;{ul8cnXDOPUFmZ1I&NO1YLWfZ?&g9RTB{eDkM%#~&F! z0qc5&+W2EuYkg63aCF<&jV{o!Vx*zvNhIL<*D3Im$NoC~kN*H@TfZ6jPe{J-RqLbJ zymIO3c^pu<`H`b#Dna81sKBJL3H)MIqul#T;*ago@U!B-{1gvD8t#Q*r`khr6gPT3 zp!-`!$T!FVZ{3Hbl%UEwZ*+2k^Vd|_hLtyfASM1{T zxs{KoKV%Ps+CRj<4tSSV@t1-1Ta7zVyE0fyr^&WERXHUW9N=$X$X6Ssd@Ary#IM?i zS@7nYsA|3%@THZzi08USnqN6k5C^e*j(sbD{er)3Z;QVT{{UnA{{SDBI(LKgd+DvN z5B74)4cyC;;vmOzk;Zp=40NjB@J~Q{YE&l*~`&Cbk zKeA7Z{swq(Ynt7)l4$~AYHsZ>6~_GFD2N}|6;|u^&iG&PNA~5GZA(RgEp04gSFzLN zYmsUMAgiX_ZX}X+_9WL=`%ifH;fKVnPr^EXhIPGe*52lSv}$q9x&(pI@PlNe;DOfz zwP);6Ud9KTYhMWbSEXoXTa6oEu(rCk^HS{T%<+U}$a2G=Am+X*{iXyOJ^qE^*lq>l zK=R(rBFC^hmN;yFJbG8{H^mPg&*8t>-t_4|613f4Lz*bG*%J!a5=K+z1KcPdF!is+ zkB@#Nv+?ik2dv8s3#8e>6jtzC1sha>f&d&YPh3-#D?!*$ruoiR^3|l#?No`Ae)k25 z+S^VC;s+J>H^RU8Dii+9AF#)UJ{x>Gw}xL9Uaj@sv3)#DVbjgb_i=!+E*fbBPY)pB ze6-F&iuq&2`hVGNG>cbfky6-5S3D_aIjqxSU_e;NSAokD$nW){h9-D_dIwc%FsQ7^ z{7vHRQ{s1wFLl2VYInM(sjAM`S66pV9$92=tVrWHIQe)3fyM`*(Ot#J(feEwm2}+r@nzt9x`vg`zgnGQ`;A6Cy{qu_O~+*?m_E=))OL zo}P#7hwa}cg(vKd!J(xt?E#aDnu{{1U546Z~lLPO#BDvS}U}xJB*+lSv$F_>>=& zeuH>6;cgWHk35dm@wfaEXT##x!5g;_C1_0!g^1FV^oE41COD_clL1Eh!-%hW7nSj>z(jsgz|;?n5*-)NLGl$-;x5N(dHVvN0L?f$n=$QpRmq5X{WO)}1sy zV8ZVF8kAUx6yRv-X9rK+)Z4*78FqBr=2fj8_q?{=_~Pzb!4KA7PjrtHAzKdmM~c(d#1f z7Gq#|C$1@rr(5qUC{xb_8aY{&k@CgI?3?004_j=|{8_Bq!QY&7-tg>_K1WU#j3Q&b;;+K53`^mSM?}}`Gz-FJyVI@alkB(W7zRXBwfOG9n#lMY@sq}1 zvfa;$EworuL9_8}UuM0A_fIoyOrN`v#xuo!!D@f9?}}`aMX>Qp$jldHSJA~gDv#j= z4a4y{u4}}=zt3xD>Iwee)Px4LGFCZP<`+eF4` zH2ZMzi5M$zI46O{evbI}_AKx=yw_1`{{RcG^x5SgH1;xy3`BML6aq2nUR~qQ_$JT8 z9Yr_k+U~dE>wq>9sM|>tYBSTEjAReUR}yKO^6(S8wluI_ym zq7QYb%VG9MQWOj^JZ>NWab5wT*c-iVueB-G{!7WyStiIE_Z;p$xy^k+<4^b|2Dp|& z-@~3V(KV|%@iK`>Kzr~{U#)q^jXz-DiCPW2GHDBY5^({Mgi4r`sc`%ErUOL-z?86cym9@We33rN>DV?C+S${h29SYO&q6%OTWfyYcz#jLY# z10x64tyCGUDyutl-l|?{XrZNS808yqyfHrh)ezK#ial}7T8iT;8Mp*uns0C*wy_B- z7Hs^RTR+9z=key9tX_S+0#744s*Rgt0O#EIsmxetz!~!a7+zViS-Oxhp>HB&M?Wca z+xSxR1bzAc00h_Y>Ct~>OKYicr(M_XZe;;^3kXOD;hot30C@V>*xwEG$mNa@sUT5+ z2TTh2%l0$TU&Ft%7l3S%FPZe|E~HX1lRVyFKdAhLeP{5-+G3Hpj~lRY*A?g2_|fQL z{{Vu|K=8(zA%Rs@kQ2!q8tE1tiWhkyco}x8dSs0imk=`?^MhImso?-u=hmqkmnD8!&mBoT)SI3t z$r0l`@YDeBDMZ*jbIA0inLv*lijCOd<22Z=)zjyT2iF|aMbb=4;1CaSng9+NiYqqW znPW~i>;C|J)KeoS3V_77rB7_( zqsiQT4(fDqw2i@0%>x*}Dlj|2J-sT$te#9GAv*)SkfHi2oOQ_O)7FC%XOoj$PwhkT z{{T<@lYeG^9Q;YtO`F5uy$1JCf*Yk_9reIaA+;e0awfQVVcrM;OY>lS=R^k+@Q?lq zJMfd^ckN^1UxE4_v8|sSct%Y^*7ryN%m`$Yc$ z!D&7Ue#{>fHE#;|!XJrNSGq2wG?^u}@Rh{2S2rX#$pqkqmvVqtZ(WQ)uggz^e;D8P zLii*5C;V2u_*L=aK-at*<84R89y9T-vEVha@ZX9wuMvfcX0+5$iEdD-i+!B=W5qMrMH+FJuSn%$6p05TJLF&+gd<=E=h0 zazNmN_q&0Qy-vB)T)B;>m^MRfNLZEk2RleVrG6yE`%ZjU{iQ!RvjVOx5nJ?6lLV-I(pm#T})XA*2#Y(#4I_7#QvRWbqH}E&CpS z!92Wg;N5Rq@jrpQ8>#$U(flpp&35y~`fj)4FAM1R3w+v@o!+Bka_epOX)UzHV<(V6 zy=BNpXo2iQogcH8T66hRFlk8&6ZdSSEQgg`=j9}Go>Y%RNOb$pv%HNND0tj67hDa1 zvm7zY92MNEpy$1QW_&d8UXl9`f5CCQAMnRR_?hEx7koDG*TRig#ItGMCD-KFB+zBJ z6B*HjAW9ZkEp6`wxK=x_Op&hHL9doRG5l23wD0&-f3%On{{RsF(1<)~@lk9v{{S3# z>&Kd7+<2A(^2aTldKI?ySZ&e~Ya=$u3M^^l6uL;Qk7Pe+ew%*LU+`E@fM2rD#+LYd z<4+jf+iSK-1lr7&IyKGpwuUBEXx8dTqB~whWPP!g*ccC$fv&6e!2bY(f&41{h;4Lh zZyoBFmm1HCBDkAL(zG2uO;Y;$2$foEl}OGKB#pywl&B#X##?NqeqR3og1&gW;h)DZ z*-Q3-+k{{Zc$;Gcos5%?SN3*pbhy&gZ>d*aW-`yDsowv{fU8cX3VGUm`;@4C2{M*>+{ zy~~2~gjRP?< zc_TKkS@~vA=+Ts7>JeR(Zp4vq)$k|n-|$!Bm+Z%^d}7l4ZDDQj>%+0J*RSsF=JRw3 zM%8F8Ex+U8XA(%U1X!EQXGTrx(HHn*#s2`Xm8a}S`#65bvwT1JweZ`-9~8b8c=qz| zN`m)OG3fp~)O9H=MfIh%#9_Rn5sK0X{L;Q`Vo48@?2xz4{{Xb|d`8v3X8!>AD5ckk zBGK)x{{Z1>_(=GU*TWi&(rC8V0_#v)xcA6oXDf2rdd$xl&BCE&U5m8(tOxB``m6gI z{@&jRKj5GqB-C_&0cx6`_U?}jz1`N0tZ8p!dlj9+r;~Q7zzHqe&WjQz04}?>tdN)R zyFd6X_w32yy$v;+n}3KAcy(POy4I)gZPC+h0hC7D=1thfKM`w^$3CAO=kBj$HmVtl#}Rf$KwU`O zi0&0x`xqim(<|TE>%hMfJTa&0*48>crKIZiao<_r+NhQ*%URS(71VOZNNC+zN-!jq zVVcRk{g8Bh8bX?F?x~~|81kW-MTvc|#I6U@y&LvR{he(80A&9F*^j`V4XrghjZu6J zr9-Dldosrqmv=lHnN<*!NQ(ot7_^GGQpAkca+YZ%Yq#YJ0Knq7+#U2SMISca{>`2w zO)f|+yg_5BTglIpe`=0E^bCL+^IsNz$rqO~$sVKNe++8qzsGKZIb;W~%^*27_RP9c zGBX?%ZZX=Z-1vUn#=Az+o`V=Y>ixA|#QPW@oE|Cv0D^aXI@K;EZCk*eBGO=d1e(zc zh|j6p!+m?#miVv!31Q%ULt38ON%6hTk1@%D3)@##es~^(@vqi-JS}Y`OjMFsaw{_P z;ijFcK_X9U49dfmbqo*SY5QsRGy1f9pNt+W{{Vtpc(Y5mG3ffP1f_(N5SZ9_-YH1ZC?BU%z8J2=Ls z)(?l*+J32VXQ|)b#6G~$M(ZRpZdK%w#z!^#1AqH4>sBxb67NXVRr9$oEZ2O4+~bPm zHGkN`!(6$JO-JG0gMF7qX|2leR~(fi+Ow%xJ)HX)pA0-Ex*v!9H>E_RTWK0Klp9Yh ztgxWR(;~i+_;+X`wgkjJKr_b`z<7V*UHzAdCV4F+g5GD_89y^B1M;qYhAY=J3t04v z01=#%{pIUi&Z*lS6^*-FpDSq*4WwtUT9R9*cO)SL&{PR?6Tq9ogPdm=seaT6;!G&u z0DD(L*n-;IN}TV=KBj_XjmCD6eMef53@91SDH<*^K5t{%wKEb+hE?G}`cf_5131kr zQI?wr@~K|Q6^R%m_Vl2%5$XzKB#;X52dzULjWorItf*6m}p`u+T z@PEg@f%>1re;D|3-&yb`zi9=P-jKIbTSV&ww(?u9=%qVfeZb=WF@Dbe1pT4>Tj1Sy#yTW={-N;O zT2B-Ba^gwutxlDwM9|9}+eZ}9iB~Ba>~v(x4lyH97wo0*<}ZvMKJnZ>8AIaliP}_p zM~bh`p?LCYb}-tdv`|Q*Un&q1H3CSZMr;GRyO8Z9U=}3jaU}9v*XvJfWtsty14eSZ zbR)mkx4R1-BjO+UCQra09e&Jy9{4w?{5H~cFNVGsyPD@g(&p6f_t@M`Jd;T>U5U-& z?~-N=1e*%rax2e1F@M1>{1x!?_ABv!!%u)e4t^A9BgA*smzUaKi!ARo8!r?jQZ$0v z^6<)UW9urxIy)F7E+aPNysPy?N9D=$hAjO_=dM4%enO>&)!etKClJ=DfR}@uhc+ z!9B!8w1|IqY>KZMId6Zp{{Vt5{>wI3x|EUp5zuY!HElvIRp+z3)UB?qt|OCrJ+q|Y z?2t5>FMMCB4p9YG!Dp%A$fu6-B$eAy)4Ho|viH6zlb)Dq)pk(h}2T&{NgDYI$|J8gNCsT+P_ zoQ{9Q{${jQLdfzT*&Fs0_&xg!+-j5jA^3f!cs^ZZ#&2bg?(0#wyhw>*8%=dAk|bw8 z>efY8Djbc%x4&m^*|WeuvRA_!Zv}ia@cMXf!&dh)Ut3tmsNHHYiKIKElg+qym=Zua zS151@;}z%)c%{kSt?%p3MMladQUU@PSG8Al99<4YkeWC=Mr>qQkn zG)ANklzvqgP2XSZMHL_|vW0Ab0X@Y!CMHM8Cz>dr3tLCa!0A%Lqt4C-dQn9HRVNJ~ z>?CjJPhbf-6j4+JYQ!V*cszSms}?36NiZiMHOaZ zT&NLr6-lC2E0t5nr4&;@MR5|V94e2(po!Qy0FVLoqKeKNfnjBQ51GF@j@sf+wc~r> zw@jKStw5R=ChAO*equWN)AbZkW55F-cA|>SffclBVUsEj3GGxzNe^(x2hxft0rC9t zDLj$~T4bLrEsi-fQCa}Q#7aj}2Q>t;vfB(Z48J_}qKW_+$>S#g^vyXxc;7e8k6vh^ YfGg@hF(C2=aqUsWNR57iiYkEr*;F@R7ytkO literal 0 HcmV?d00001 diff --git a/platform/avr-ravenusb/cdc_task.c b/platform/avr-ravenusb/cdc_task.c index 64af3741e..11eca632d 100644 --- a/platform/avr-ravenusb/cdc_task.c +++ b/platform/avr-ravenusb/cdc_task.c @@ -75,6 +75,13 @@ #include #include +#if UIP_CONF_IPV6_RPL +// Include needs to be up here instead of embedded in the other +// UIP_CONF_IPV6_RPL block, as doxygen seems not to be compatible with +// #includes embedded in other functions and spits out a warning. +#include "rpl.h" +#endif + #if JACKDAW_CONF_USE_SETTINGS #include "settings.h" #endif @@ -579,7 +586,6 @@ void menu_process(char c) #if UIP_CONF_IPV6_RPL -#include "rpl.h" extern uip_ds6_netif_t uip_ds6_if; case 'N': { uint8_t i,j; diff --git a/platform/cooja-ip64/contiki-cooja-ip64-main.c b/platform/cooja-ip64/contiki-cooja-ip64-main.c index 1077162a7..0c866a404 100644 --- a/platform/cooja-ip64/contiki-cooja-ip64-main.c +++ b/platform/cooja-ip64/contiki-cooja-ip64-main.c @@ -283,6 +283,8 @@ process_run_thread_loop(void *data) /*---------------------------------------------------------------------------*/ /** * \brief Initialize a mote by starting processes etc. + * \param env JNI Environment interface pointer + * \param obj unused * * This function initializes a mote by starting certain * processes and setting up the environment. @@ -300,12 +302,15 @@ Java_org_contikios_cooja_corecomm_CLASSNAME_init(JNIEnv *env, jobject obj) /*---------------------------------------------------------------------------*/ /** * \brief Get a segment from the process memory. - * \param start Start address of segment - * \param length Size of memory segment + * \param env JNI Environment interface pointer + * \param obj unused + * \param rel_addr Start address of segment + * \param length Size of memory segment + * \param mem_arr Byte array destination for the fetched memory segment * \return Java byte array containing a copy of memory segment. * * Fetches a memory segment from the process memory starting at - * (start), with size (length). This function does not perform + * (rel_addr), with size (length). This function does not perform * ANY error checking, and the process may crash if addresses are * not available/readable. * @@ -326,9 +331,11 @@ Java_org_contikios_cooja_corecomm_CLASSNAME_getMemory(JNIEnv *env, jobject obj, /*---------------------------------------------------------------------------*/ /** * \brief Replace a segment of the process memory with given byte array. - * \param start Start address of segment - * \param length Size of memory segment - * \param mem_arr Byte array contaning new memory + * \param env JNI Environment interface pointer + * \param obj unused + * \param rel_addr Start address of segment + * \param length Size of memory segment + * \param mem_arr Byte array contaning new memory * * Replaces a process memory segment with given byte array. * This function does not perform ANY error checking, and the @@ -349,6 +356,8 @@ Java_org_contikios_cooja_corecomm_CLASSNAME_setMemory(JNIEnv *env, jobject obj, /*---------------------------------------------------------------------------*/ /** * \brief Let mote execute one "block" of code (tick mote). + * \param env JNI Environment interface pointer + * \param obj unused * * Let mote defined by the active contiki processes and current * process memory execute some program code. This code must not block @@ -413,7 +422,9 @@ Java_org_contikios_cooja_corecomm_CLASSNAME_tick(JNIEnv *env, jobject obj) /*---------------------------------------------------------------------------*/ /** * \brief Set the relative memory address of the reference variable. - * \return Relative memory address. + * \param env JNI Environment interface pointer + * \param obj unused + * \param addr Relative memory address * * This is a JNI function and should only be called via the * responsible Java part (MoteType.java). diff --git a/platform/cooja/contiki-cooja-main.c b/platform/cooja/contiki-cooja-main.c index eddfe1adf..e798fa714 100644 --- a/platform/cooja/contiki-cooja-main.c +++ b/platform/cooja/contiki-cooja-main.c @@ -359,6 +359,8 @@ process_run_thread_loop(void *data) /*---------------------------------------------------------------------------*/ /** * \brief Initialize a mote by starting processes etc. + * \param env JNI Environment interface pointer + * \param obj unused * * This function initializes a mote by starting certain * processes and setting up the environment. @@ -376,12 +378,15 @@ Java_org_contikios_cooja_corecomm_CLASSNAME_init(JNIEnv *env, jobject obj) /*---------------------------------------------------------------------------*/ /** * \brief Get a segment from the process memory. - * \param start Start address of segment - * \param length Size of memory segment + * \param env JNI Environment interface pointer + * \param obj unused + * \param rel_addr Start address of segment + * \param length Size of memory segment + * \param mem_arr Byte array destination for the fetched memory segment * \return Java byte array containing a copy of memory segment. * * Fetches a memory segment from the process memory starting at - * (start), with size (length). This function does not perform + * (rel_addr), with size (length). This function does not perform * ANY error checking, and the process may crash if addresses are * not available/readable. * @@ -402,9 +407,11 @@ Java_org_contikios_cooja_corecomm_CLASSNAME_getMemory(JNIEnv *env, jobject obj, /*---------------------------------------------------------------------------*/ /** * \brief Replace a segment of the process memory with given byte array. - * \param start Start address of segment - * \param length Size of memory segment - * \param mem_arr Byte array contaning new memory + * \param env JNI Environment interface pointer + * \param obj unused + * \param rel_addr Start address of segment + * \param length Size of memory segment + * \param mem_arr Byte array contaning new memory * * Replaces a process memory segment with given byte array. * This function does not perform ANY error checking, and the @@ -426,6 +433,8 @@ Java_org_contikios_cooja_corecomm_CLASSNAME_setMemory(JNIEnv *env, jobject obj, /*---------------------------------------------------------------------------*/ /** * \brief Let mote execute one "block" of code (tick mote). + * \param env JNI Environment interface pointer + * \param obj unused * * Let mote defined by the active contiki processes and current * process memory execute some program code. This code must not block @@ -490,7 +499,9 @@ Java_org_contikios_cooja_corecomm_CLASSNAME_tick(JNIEnv *env, jobject obj) /*---------------------------------------------------------------------------*/ /** * \brief Set the relative memory address of the reference variable. - * \return Relative memory address. + * \param env JNI Environment interface pointer + * \param obj unused + * \param addr Relative memory address * * This is a JNI function and should only be called via the * responsible Java part (MoteType.java). diff --git a/platform/srf06-cc26xx/sensortag/bmp-280-sensor.c b/platform/srf06-cc26xx/sensortag/bmp-280-sensor.c index 067fe79b9..a10e86c5e 100644 --- a/platform/srf06-cc26xx/sensortag/bmp-280-sensor.c +++ b/platform/srf06-cc26xx/sensortag/bmp-280-sensor.c @@ -286,7 +286,7 @@ convert(uint8_t *data, int32_t *temp, uint32_t *press) /*---------------------------------------------------------------------------*/ /** * \brief Returns a reading from the sensor - * \param BMP_280_SENSOR_TYPE_TEMP or BMP_280_SENSOR_TYPE_PRESS + * \param type BMP_280_SENSOR_TYPE_TEMP or BMP_280_SENSOR_TYPE_PRESS * \return Temperature (centi degrees C) or Pressure (Pascal). */ static int diff --git a/platform/srf06-cc26xx/sensortag/opt-3001-sensor.c b/platform/srf06-cc26xx/sensortag/opt-3001-sensor.c index f1cbf695e..86047bb14 100644 --- a/platform/srf06-cc26xx/sensortag/opt-3001-sensor.c +++ b/platform/srf06-cc26xx/sensortag/opt-3001-sensor.c @@ -223,7 +223,7 @@ read_data(uint16_t *raw_data) /*---------------------------------------------------------------------------*/ /** * \brief Convert raw data to a value in lux - * \param data Pointer to a buffer with a raw sensor reading + * \param raw_data data Pointer to a buffer with a raw sensor reading * \return Converted value (lux) */ static float diff --git a/platform/wismote/dev/acc-sensor.c b/platform/wismote/dev/acc-sensor.c index 15ea5fd82..75c547c9b 100644 --- a/platform/wismote/dev/acc-sensor.c +++ b/platform/wismote/dev/acc-sensor.c @@ -42,8 +42,8 @@ static void activate(void) { /* This assumes that some other sensor system already did setup the ADC - /* (in the case of the sky platform it is sensors_light_init that does it) - + * (in the case of the sky platform it is sensors_light_init that does it) */ + #if 0 P6SEL |= 0x70; P6DIR = 0x00; P6OUT = 0x00; @@ -52,37 +52,40 @@ activate(void) P2OUT |= 0x48; - /* stop converting immediately + /* stop converting immediately */ ADC12CTL0 &= ~ENC; ADC12CTL1 &= ~CONSEQ_3; /* Configure ADC12_2 to sample channel 11 (voltage) and use - /* the Vref+ as reference (SREF_1) since it is a stable reference + * the Vref+ as reference (SREF_1) since it is a stable reference */ ADC12MCTL2 = (INCH_4 + SREF_1); ADC12MCTL3 = (INCH_5 + SREF_1); ADC12MCTL4 = (INCH_6 + SREF_1); - /* internal temperature can be read as value(3) + /* internal temperature can be read as value(3) */ ADC12MCTL5 = (INCH_10 + SREF_1); ADC12CTL1 |= CONSEQ_3; ADC12CTL0 |= ENC | ADC12SC; - /* Irq_adc12_activate(&acc_sensor, 6, (INCH_11 + SREF_1)); */ + Irq_adc12_activate(&acc_sensor, 6, (INCH_11 + SREF_1)); + #endif /* 0 */ active = 1; } /*---------------------------------------------------------------------------*/ static void deactivate(void) { - /* irq_adc12_deactivate(&acc_sensor, 6); - acc_value = 0;*/ + #if 0 + irq_adc12_deactivate(&acc_sensor, 6); + acc_value = 0; + #endif /* 0 */ active = 0; } /*---------------------------------------------------------------------------*/ static int value(int type) { -/* + #if 0 switch(type) { case 0: return ADC12MEM2; @@ -92,7 +95,8 @@ value(int type) return ADC12MEM4; case 3: return ADC12MEM5; - }*/ + } + #endif /* 0 */ return 0; } /*---------------------------------------------------------------------------*/ diff --git a/platform/wismote/dev/ext-sensor.c b/platform/wismote/dev/ext-sensor.c index a957e5232..0c2292469 100644 --- a/platform/wismote/dev/ext-sensor.c +++ b/platform/wismote/dev/ext-sensor.c @@ -43,8 +43,10 @@ static uint8_t active; static int value(int type) { - /* ADC0 corresponds to the port under the logo, ADC1 to the port over the logo, - ADC2 and ADC3 corresponds to port on the JCreate bottom expansion port) + #if 0 + /* ADC0 corresponds to the port under the logo, + * ADC1 to the port over the logo, + * ADC2 and ADC3 corresponds to port on the JCreate bottom expansion port) */ switch(type) { case ADC0: return ADC12MEM6; @@ -54,7 +56,8 @@ value(int type) return ADC12MEM8; case ADC3: return ADC12MEM9; - }*/ + } + #endif /* 0 */ return 0; } /*---------------------------------------------------------------------------*/ @@ -77,16 +80,17 @@ configure(int type, int c) case SENSORS_ACTIVE: if(c) { if(!status(SENSORS_ACTIVE)) { - /* SREF_1 is Vref+ - /* MemReg6 == P6.0/A0 == port "under" logo + #if 0 + /* SREF_1 is Vref+ */ + /* MemReg6 == P6.0/A0 == port "under" logo */ ADC12MCTL6 = (INCH_0 + SREF_0); - /* MemReg7 == P6.1/A1 == port "over" logo + /* MemReg7 == P6.1/A1 == port "over" logo */ ADC12MCTL7 = (INCH_1 + SREF_0); - /* MemReg8 == P6.2/A2, bottom expansion port + /* MemReg8 == P6.2/A2, bottom expansion port */ ADC12MCTL8 = (INCH_2 + SREF_0); - /* MemReg9 == P6.1/A3, bottom expansion port, End Of (ADC-)Sequence + /* MemReg9 == P6.1/A3, bottom expansion port, End Of (ADC-)Sequence */ ADC12MCTL9 = (INCH_3 + SREF_0); - */ + #endif /* 0 */ sky_sensors_activate(0x0F); active = 1; }