mbed(SerialHalfDuplex入り)
Fork of mbed by
Revision 88:9327015d4013, committed 2014-08-15
- Comitter:
- bogdanm
- Date:
- Fri Aug 15 15:28:31 2014 +0100
- Parent:
- 87:6213f644d804
- Child:
- 89:552587b429a1
- Commit message:
- Release 88 of the mbed library
Main changes:
- changed "error.h" to "mbed_error.h" to avoid conflicts with 3rd party code
- LPC1549 SPI driver fixes
- K64F Ethernet TX buffer reclaim mechanism fix
- STDIO initialization fix
- NUCLEO_F334R8 I2C clock fix
- various other fixes
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,385 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_COMMON BLE SoftDevice Common + @{ + @defgroup ble_api Events, type definitions and API calls + @{ + + @brief Module independent events, type definitions and API calls for the S110 SoftDevice. + + */ + +#ifndef BLE_H__ +#define BLE_H__ + +#include "ble_ranges.h" +#include "ble_types.h" +#include "ble_gap.h" +#include "ble_l2cap.h" +#include "ble_gatt.h" +#include "ble_gattc.h" +#include "ble_gatts.h" + +/** @addtogroup BLE_COMMON_ENUMERATIONS Enumerations + * @{ */ + +/** + * @brief Common API SVC numbers. + */ +enum BLE_COMMON_SVCS +{ + SD_BLE_ENABLE = BLE_SVC_BASE, /**< Enable and initialize the BLE stack */ + SD_BLE_EVT_GET, /**< Get an event from the pending events queue. */ + SD_BLE_TX_BUFFER_COUNT_GET, /**< Get the total number of available application transmission buffers from the stack. */ + SD_BLE_UUID_VS_ADD, /**< Add a Vendor Specific UUID. */ + SD_BLE_UUID_DECODE, /**< Decode UUID bytes. */ + SD_BLE_UUID_ENCODE, /**< Encode UUID bytes. */ + SD_BLE_VERSION_GET, /**< Get the local version information (company id, Link Layer Version, Link Layer Subversion). */ + SD_BLE_USER_MEM_REPLY, /**< User Memory Reply. */ + SD_BLE_OPT_SET, /**< Set a BLE option. */ + SD_BLE_OPT_GET, /**< Get a BLE option. */ +}; + +/** @} */ + +/** @addtogroup BLE_COMMON_DEFINES Defines + * @{ */ + +/** @brief Required pointer alignment for BLE Events. +*/ +#define BLE_EVTS_PTR_ALIGNMENT 4 + +/** @defgroup BLE_USER_MEM_TYPES User Memory Types + * @{ */ +#define BLE_USER_MEM_TYPE_INVALID 0x00 /**< Invalid User Memory Types. */ +#define BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES 0x01 /**< User Memory for GATTS queued writes. */ +/** @} */ + +/** @brief Maximum number of Vendor Specific UUIDs. +*/ +#define BLE_UUID_VS_MAX_COUNT 10 + +/** @} */ + +/** @addtogroup BLE_COMMON_STRUCTURES Structures + * @{ */ + +/** + * @brief BLE Module Independent Event IDs. + */ +enum BLE_COMMON_EVTS +{ + BLE_EVT_TX_COMPLETE = BLE_EVT_BASE, /**< Transmission Complete. */ + BLE_EVT_USER_MEM_REQUEST, /**< User Memory request. */ + BLE_EVT_USER_MEM_RELEASE /**< User Memory release. */ +}; + +/**@brief User Memory Block. */ +typedef struct +{ + uint8_t* p_mem; /**< Pointer to the start of the user memory block. */ + uint16_t len; /**< Length in bytes of the user memory block. */ +} ble_user_mem_block_t; + +/** + * @brief TX complete event. + */ +typedef struct +{ + uint8_t count; /**< Number of packets transmitted. */ +} ble_evt_tx_complete_t; + +/**@brief Event structure for BLE_EVT_USER_MEM_REQUEST. */ +typedef struct +{ + uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ +} ble_evt_user_mem_request_t; + +/**@brief Event structure for BLE_EVT_USER_MEM_RELEASE. */ +typedef struct +{ + uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ + ble_user_mem_block_t mem_block; /**< User memory block */ +} ble_evt_user_mem_release_t; + + +/**@brief Event structure for events not associated with a specific function module. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which this event occured. */ + union + { + ble_evt_tx_complete_t tx_complete; /**< Transmission Complete. */ + ble_evt_user_mem_request_t user_mem_request; /**< User Memory Request Event Parameters. */ + ble_evt_user_mem_release_t user_mem_release; /**< User Memory Release Event Parameters. */ + } params; +} ble_common_evt_t; + +/**@brief BLE Event header. */ +typedef struct +{ + uint16_t evt_id; /**< Value from a BLE_<module>_EVT series. */ + uint16_t evt_len; /**< Length in octets excluding this header. */ +} ble_evt_hdr_t; + +/**@brief Common BLE Event type, wrapping the module specific event reports. */ +typedef struct +{ + ble_evt_hdr_t header; /**< Event header. */ + union + { + ble_common_evt_t common_evt; /**< Common Event, evt_id in BLE_EVT_* series. */ + ble_gap_evt_t gap_evt; /**< GAP originated event, evt_id in BLE_GAP_EVT_* series. */ + ble_l2cap_evt_t l2cap_evt; /**< L2CAP originated event, evt_id in BLE_L2CAP_EVT* series. */ + ble_gattc_evt_t gattc_evt; /**< GATT client originated event, evt_id in BLE_GATTC_EVT* series. */ + ble_gatts_evt_t gatts_evt; /**< GATT server originated event, evt_id in BLE_GATTS_EVT* series. */ + } evt; +} ble_evt_t; + + +/** + * @brief Version Information. + */ +typedef struct +{ + uint8_t version_number; /**< Link Layer Version number for BT 4.1 spec is 7 (https://www.bluetooth.org/en-us/specification/assigned-numbers/link-layer). */ + uint16_t company_id; /**< Company ID, Nordic Semiconductor's company ID is 89 (0x0059) (https://www.bluetooth.org/apps/content/Default.aspx?doc_id=49708). */ + uint16_t subversion_number; /**< Link Layer Sub Version number, corresponds to the SoftDevice Config ID or Firmware ID (FWID). */ +} ble_version_t; + +/**@brief Common BLE Option type, wrapping the module specific options. */ +typedef union +{ + ble_gap_opt_t gap; /**< GAP option, opt_id in BLE_GAP_OPT_* series. */ +} ble_opt_t; + +/** + * @brief BLE GATTS init options + */ +typedef struct +{ + ble_gatts_enable_params_t gatts_enable_params; /**< GATTS init options @ref ble_gatts_enable_params_t. */ +} ble_enable_params_t; + +/** @} */ + +/** @addtogroup BLE_COMMON_FUNCTIONS Functions + * @{ */ + +/**@brief Enable the bluetooth stack + * + * @param[in] p_ble_enable_params Pointer to ble_enable_params_t + * + * @details This call initializes the bluetooth stack, no other BLE related call can be called before this one has been executed. + * + * @return @ref NRF_SUCCESS BLE stack has been initialized successfully + * @return @ref NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. + */ +SVCALL(SD_BLE_ENABLE, uint32_t, sd_ble_enable(ble_enable_params_t * p_ble_enable_params)); + +/**@brief Get an event from the pending events queue. + * + * @param[in] p_dest Pointer to buffer to be filled in with an event, or NULL to retrieve the event length. This buffer <b>must be 4-byte aligned in memory</b>. + * @param[in, out] p_len Pointer the length of the buffer, on return it is filled with the event length. + * + * @details This call allows the application to pull a BLE event from the BLE stack. The application is signalled that an event is + * available from the BLE Stack by the triggering of the SD_EVT_IRQn interrupt (mapped to IRQ 22). + * The application is free to choose whether to call this function from thread mode (main context) or directly from the Interrupt Service Routine + * that maps to SD_EVT_IRQn. In any case however, and because the BLE stack runs at a higher priority than the application, this function should be called + * in a loop (until @ref NRF_ERROR_NOT_FOUND is returned) every time SD_EVT_IRQn is raised to ensure that all available events are pulled from the stack. + * Failure to do so could potentially leave events in the internal queue without the application being aware of this fact. + * Sizing the p_dest buffer is equally important, since the application needs to provide all the memory necessary for the event to be copied into + * application memory. If the buffer provided is not large enough to fit the entire contents of the event, @ref NRF_ERROR_DATA_SIZE will be returned + * and the application can then call again with a larger buffer size. + * Please note that because of the variable length nature of some events, sizeof(ble_evt_t) will not always be large enough to fit certain events, + * and so it is the application's responsability to provide an amount of memory large enough so that the relevant event is copied in full. + * The application may "peek" the event length by providing p_dest as a NULL pointer and inspecting the value of *p_len upon return. + * + * @note The pointer supplied must be aligned to the extend defined by @ref BLE_EVTS_PTR_ALIGNMENT + * + * @return @ref NRF_SUCCESS Event pulled and stored into the supplied buffer. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. + * @return @ref NRF_ERROR_NOT_FOUND No events ready to be pulled. + * @return @ref NRF_ERROR_DATA_SIZE Event ready but could not fit into the supplied buffer. + */ +SVCALL(SD_BLE_EVT_GET, uint32_t, sd_ble_evt_get(uint8_t* p_dest, uint16_t *p_len)); + + +/**@brief Get the total number of available application transmission buffers in the BLE stack. + * + * @details This call allows the application to obtain the total number of + * transmission buffers available for application data. Please note that + * this does not give the number of free buffers, but rather the total amount of them. + * The application has two options to handle its own application transmission buffers: + * - Use a simple arithmetic calculation: at boot time the application should use this function + * to find out the total amount of buffers available to it and store it in a variable. + * Every time a packet that consumes an application buffer is sent using any of the + * exposed functions in this BLE API, the application should decrement that variable. + * Conversely, whenever a @ref BLE_EVT_TX_COMPLETE event is received by the application + * it should retrieve the count field in such event and add that number to the same + * variable storing the number of available packets. + * This mechanism allows the application to be aware at any time of the number of + * application packets available in the BLE stack's internal buffers, and therefore + * it can know with certainty whether it is possible to send more data or it has to + * wait for a @ref BLE_EVT_TX_COMPLETE event before it proceeds. + * - Choose to simply not keep track of available buffers at all, and instead handle the + * @ref BLE_ERROR_NO_TX_BUFFERS error by queueing the packet to be transmitted and + * try again as soon as a @ref BLE_EVT_TX_COMPLETE event arrives. + * + * The API functions that <b>may</b> consume an application buffer depending on + * the parameters supplied to them can be found below: + * + * - @ref sd_ble_gattc_write (write witout response only) + * - @ref sd_ble_gatts_hvx (notifications only) + * - @ref sd_ble_l2cap_tx (all packets) + * + * @param[out] p_count Pointer to a uint8_t which will contain the number of application transmission buffers upon + * successful return. + * + * @return @ref NRF_SUCCESS Number of application transmission buffers retrieved successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_TX_BUFFER_COUNT_GET, uint32_t, sd_ble_tx_buffer_count_get(uint8_t* p_count)); + + +/**@brief Add a Vendor Specific UUID. + * + * @details This call enables the application to add a vendor specific UUID to the BLE stack's table, + * for later use all other modules and APIs. This then allows the application to use the shorter, + * 24-bit @ref ble_uuid_t format when dealing with both 16-bit and 128-bit UUIDs without having to + * check for lengths and having split code paths. The way that this is accomplished is by extending the + * grouping mechanism that the Bluetooth SIG standard base UUID uses for all other 128-bit UUIDs. The + * type field in the @ref ble_uuid_t structure is an index (relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN) + * to the table populated by multiple calls to this function, and the uuid field in the same structure + * contains the 2 bytes at indices 12 and 13. The number of possible 128-bit UUIDs available to the + * application is therefore the number of Vendor Specific UUIDs added with the help of this function times 65536, + * although restricted to modifying bytes 12 and 13 for each of the entries in the supplied array. + * + * @note Bytes 12 and 13 of the provided UUID will not be used internally, since those are always replaced by + * the 16-bit uuid field in @ref ble_uuid_t. + * + * + * @param[in] p_vs_uuid Pointer to a 16-octet (128-bit) little endian Vendor Specific UUID disregarding + * bytes 12 and 13. + * @param[out] p_uuid_type Pointer where the type field in @ref ble_uuid_t corresponding to this UUID will be stored. + * + * @return @ref NRF_SUCCESS Successfully added the Vendor Specific UUID. + * @return @ref NRF_ERROR_INVALID_ADDR If p_vs_uuid or p_uuid_type is NULL or invalid. + * @return @ref NRF_ERROR_NO_MEM If there are no more free slots for VS UUIDs. + * @return @ref NRF_ERROR_FORBIDDEN If p_vs_uuid has already been added to the VS UUID table. + */ +SVCALL(SD_BLE_UUID_VS_ADD, uint32_t, sd_ble_uuid_vs_add(ble_uuid128_t const * const p_vs_uuid, uint8_t * const p_uuid_type)); + + +/** @brief Decode little endian raw UUID bytes (16-bit or 128-bit) into a 24 bit @ref ble_uuid_t structure. + * + * @details The raw UUID bytes excluding bytes 12 and 13 (i.e. bytes 0-11 and 14-15) of p_uuid_le are compared + * to the corresponding ones in each entry of the table of vendor specific UUIDs pouplated with @ref sd_ble_uuid_vs_add + * to look for a match. If there is such a match, bytes 12 and 13 are returned as p_uuid->uuid and the index + * relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN as p_uuid->type. + * + * @note If the UUID length supplied is 2, then the type set by this call will always be @ref BLE_UUID_TYPE_BLE. + * + * @param[in] uuid_le_len Length in bytes of the buffer pointed to by p_uuid_le (must be 2 or 16 bytes). + * @param[in] p_uuid_le Pointer pointing to little endian raw UUID bytes. + * @param[in,out] p_uuid Pointer to a @ref ble_uuid_t structure to be filled in. + * + * @return @ref NRF_SUCCESS Successfully decoded into the @ref ble_uuid_t structure. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_LENGTH Invalid UUID length. + * @return @ref NRF_ERROR_NOT_FOUND For a 128-bit UUID, no match in the populated table of UUIDs. + */ +SVCALL(SD_BLE_UUID_DECODE, uint32_t, sd_ble_uuid_decode(uint8_t uuid_le_len, uint8_t const * const p_uuid_le, ble_uuid_t * const p_uuid)); + + +/** @brief Encode a @ref ble_uuid_t structure into little endian raw UUID bytes (16-bit or 128-bit). + * + * @note The pointer to the destination buffer p_uuid_le may be NULL, in which case only the validitiy and size of p_uuid is computed. + * + * @param[in] p_uuid Pointer to a @ref ble_uuid_t structure that will be encoded into bytes. + * @param[out] p_uuid_le_len Pointer to a uint8_t that will be filled with the encoded length (2 or 16 bytes). + * @param[out] p_uuid_le Pointer to a buffer where the little endian raw UUID bytes (2 or 16) will be stored. + * + * @return @ref NRF_SUCCESS Successfully encoded into the buffer. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid UUID type. + */ +SVCALL(SD_BLE_UUID_ENCODE, uint32_t, sd_ble_uuid_encode(ble_uuid_t const * const p_uuid, uint8_t * const p_uuid_le_len, uint8_t * const p_uuid_le)); + + +/**@brief Get Version Information. + * + * @details This call allows the application to get the BLE stack version information. + * + * @param[in] p_version Pointer to ble_version_t structure to be filled in. + * + * @return @ref NRF_SUCCESS Version information stored successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY The stack is busy (typically doing a locally-initiated disconnection procedure). + */ +SVCALL(SD_BLE_VERSION_GET, uint32_t, sd_ble_version_get(ble_version_t * p_version)); + + +/**@brief Provide a user memory block. + * + * @note This call can only be used as a response to a @ref BLE_EVT_USER_MEM_REQUEST event issued to the application. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_block Pointer to a user memory block structure. + * + * @return @ref NRF_SUCCESS Successfully queued a response to the peer. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_STATE No execute write request pending. + */ +SVCALL(SD_BLE_USER_MEM_REPLY, uint32_t, sd_ble_user_mem_reply(uint16_t conn_handle, ble_user_mem_block_t *p_block)); + + +/**@brief Set a BLE option. + * + * @details This call allows the application to set the value of an option. + * + * @param[in] opt_id Option ID. + * @param[in] p_opt Pointer to a ble_opt_t structure containing the option value. + * + * @retval ::NRF_SUCCESS Option set successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. + * @retval ::NRF_ERROR_INVALID_STATE Unable to set the parameter at this time. + * @retval ::NRF_ERROR_BUSY The stack is busy or the previous procedure has not completed. + */ +SVCALL(SD_BLE_OPT_SET, uint32_t, sd_ble_opt_set(uint32_t opt_id, ble_opt_t const *p_opt)); + + +/**@brief Get a BLE option. + * + * @details This call allows the application to retrieve the value of an option. + * + * @param[in] opt_id Option ID. + * @param[out] p_opt Pointer to a ble_opt_t structure to be filled in. + * + * @retval ::NRF_SUCCESS Option retrieved successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. + * @retval ::NRF_ERROR_INVALID_STATE Unable to retrieve the parameter at this time. + * @retval ::NRF_ERROR_BUSY The stack is busy or the previous procedure has not completed. + * @retval ::NRF_ERROR_NOT_SUPPORTED This option is not supported. + * + */ +SVCALL(SD_BLE_OPT_GET, uint32_t, sd_ble_opt_get(uint32_t opt_id, ble_opt_t *p_opt)); + +/** @} */ + +#endif /* BLE_H__ */ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_err.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + /** + @addtogroup BLE_COMMON + @{ + @addtogroup nrf_error + @{ + @ingroup BLE_COMMON + @} + + @defgroup ble_err General error codes + @{ + + @brief General error code definitions for the BLE API. + + @ingroup BLE_COMMON +*/ +#ifndef NRF_BLE_ERR_H__ +#define NRF_BLE_ERR_H__ + +#include "nrf_error.h" + +/* @defgroup BLE_ERRORS Error Codes + * @{ */ +#define BLE_ERROR_NOT_ENABLED (NRF_ERROR_STK_BASE_NUM+0x001) /**< @ref sd_ble_enable has not been called. */ +#define BLE_ERROR_INVALID_CONN_HANDLE (NRF_ERROR_STK_BASE_NUM+0x002) /**< Invalid connection handle. */ +#define BLE_ERROR_INVALID_ATTR_HANDLE (NRF_ERROR_STK_BASE_NUM+0x003) /**< Invalid attribute handle. */ +#define BLE_ERROR_NO_TX_BUFFERS (NRF_ERROR_STK_BASE_NUM+0x004) /**< Buffer capacity exceeded. */ +/** @} */ + + +/** @defgroup BLE_ERROR_SUBRANGES Module specific error code subranges + * @brief Assignment of subranges for module specific error codes. + * @note For specific error codes, see ble_<module>.h or ble_error_<module>.h. + * @{ */ +#define NRF_L2CAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x100) /**< L2CAP specific errors. */ +#define NRF_GAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x200) /**< GAP specific errors. */ +#define NRF_GATTC_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x300) /**< GATT client specific errors. */ +#define NRF_GATTS_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x400) /**< GATT server specific errors. */ +/** @} */ + +#endif + + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gap.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,1032 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_GAP Generic Access Profile (GAP) + @{ + @brief Definitions and prototypes for the GAP interface. + */ + +#ifndef BLE_GAP_H__ +#define BLE_GAP_H__ + +#include "ble_types.h" +#include "ble_ranges.h" +#include "nrf_svc.h" + + +/**@addtogroup BLE_GAP_ENUMERATIONS Enumerations + * @{ */ + +/**@brief GAP API SVC numbers. + */ +enum BLE_GAP_SVCS +{ + SD_BLE_GAP_ADDRESS_SET = BLE_GAP_SVC_BASE, /**< Set own Bluetooth Address. */ + SD_BLE_GAP_ADDRESS_GET, /**< Get own Bluetooth Address. */ + SD_BLE_GAP_ADV_DATA_SET, /**< Set Advertisement Data. */ + SD_BLE_GAP_ADV_START, /**< Start Advertising. */ + SD_BLE_GAP_ADV_STOP, /**< Stop Advertising. */ + SD_BLE_GAP_CONN_PARAM_UPDATE, /**< Connection Parameter Update. */ + SD_BLE_GAP_DISCONNECT, /**< Disconnect. */ + SD_BLE_GAP_TX_POWER_SET, /**< Set TX Power. */ + SD_BLE_GAP_APPEARANCE_SET, /**< Set Appearance. */ + SD_BLE_GAP_APPEARANCE_GET, /**< Get Appearance. */ + SD_BLE_GAP_PPCP_SET, /**< Set PPCP. */ + SD_BLE_GAP_PPCP_GET, /**< Get PPCP. */ + SD_BLE_GAP_DEVICE_NAME_SET, /**< Set Device Name. */ + SD_BLE_GAP_DEVICE_NAME_GET, /**< Get Device Name. */ + SD_BLE_GAP_AUTHENTICATE, /**< Initiate Pairing/Bonding. */ + SD_BLE_GAP_SEC_PARAMS_REPLY, /**< Reply with Security Parameters. */ + SD_BLE_GAP_AUTH_KEY_REPLY, /**< Reply with an authentication key. */ + SD_BLE_GAP_SEC_INFO_REPLY, /**< Reply with Security Information. */ + SD_BLE_GAP_CONN_SEC_GET, /**< Obtain connection security level. */ + SD_BLE_GAP_RSSI_START, /**< Start reporting of changes in RSSI. */ + SD_BLE_GAP_RSSI_STOP, /**< Stop reporting of changes in RSSI. */ +}; +/**@} */ + +/**@addtogroup BLE_GAP_DEFINES Defines + * @{ */ + +/**@defgroup BLE_ERRORS_GAP SVC return values specific to GAP + * @{ */ +#define BLE_ERROR_GAP_UUID_LIST_MISMATCH (NRF_GAP_ERR_BASE + 0x000) /**< UUID list does not contain an integral number of UUIDs. */ +#define BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST (NRF_GAP_ERR_BASE + 0x001) /**< Use of Whitelist not permitted with discoverable advertising. */ +#define BLE_ERROR_GAP_INVALID_BLE_ADDR (NRF_GAP_ERR_BASE + 0x002) /**< The upper two bits of the address do not correspond to the specified address type. */ +/**@} */ + + +/**@defgroup BLE_GAP_ROLES GAP Roles + * @note Not explicitly used in peripheral API, but will be relevant for central API. + * @{ */ +#define BLE_GAP_ROLE_INVALID 0x0 /**< Invalid Role. */ +#define BLE_GAP_ROLE_PERIPH 0x1 /**< Peripheral Role. */ +#define BLE_GAP_ROLE_CENTRAL 0x2 /**< Central Role. */ +/**@} */ + + +/**@defgroup BLE_GAP_TIMEOUT_SOURCES GAP Timeout sources + * @{ */ +#define BLE_GAP_TIMEOUT_SRC_ADVERTISEMENT 0x00 /**< Advertisement timeout. */ +#define BLE_GAP_TIMEOUT_SRC_SECURITY_REQUEST 0x01 /**< Security request timeout. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADDR_TYPES GAP Address types + * @{ */ +#define BLE_GAP_ADDR_TYPE_PUBLIC 0x00 /**< Public address. */ +#define BLE_GAP_ADDR_TYPE_RANDOM_STATIC 0x01 /**< Random Static address. */ +#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE 0x02 /**< Private Resolvable address. */ +#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE 0x03 /**< Private Non-Resolvable address. */ +/**@} */ + +/**@defgroup BLE_GAP_ADDR_CYCLE_MODES GAP Address cycle modes + * @{ */ +#define BLE_GAP_ADDR_CYCLE_MODE_NONE 0x00 /**< Set addresses directly, no automatic address cycling. */ +#define BLE_GAP_ADDR_CYCLE_MODE_AUTO 0x01 /**< Automatically generate and update private addresses. */ +/** @} */ + +/**@brief The default interval in seconds at which a private address is refreshed when address cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO. */ +#define BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S (60 * 15) + +/** @brief BLE address length. */ +#define BLE_GAP_ADDR_LEN 6 + + +/**@defgroup BLE_GAP_AD_TYPE_DEFINITIONS GAP Advertising and Scan Response Data format + * @note Found at https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm + * @{ */ +#define BLE_GAP_AD_TYPE_FLAGS 0x01 /**< Flags for discoverability. */ +#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE 0x02 /**< Partial list of 16 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE 0x03 /**< Complete list of 16 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE 0x04 /**< Partial list of 32 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE 0x05 /**< Complete list of 32 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE 0x06 /**< Partial list of 128 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE 0x07 /**< Complete list of 128 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME 0x08 /**< Short local device name. */ +#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME 0x09 /**< Complete local device name. */ +#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL 0x0A /**< Transmit power level. */ +#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE 0x0D /**< Class of device. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C 0x0E /**< Simple Pairing Hash C. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R 0x0F /**< Simple Pairing Randomizer R. */ +#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE 0x10 /**< Security Manager TK Value. */ +#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS 0x11 /**< Security Manager Out Of Band Flags. */ +#define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE 0x12 /**< Slave Connection Interval Range. */ +#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT 0x14 /**< List of 16-bit Service Solicitation UUIDs. */ +#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT 0x15 /**< List of 128-bit Service Solicitation UUIDs. */ +#define BLE_GAP_AD_TYPE_SERVICE_DATA 0x16 /**< Service Data - 16-bit UUID. */ +#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS 0x17 /**< Public Target Address. */ +#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS 0x18 /**< Random Target Address. */ +#define BLE_GAP_AD_TYPE_APPEARANCE 0x19 /**< Appearance. */ +#define BLE_GAP_AD_TYPE_ADVERTISING_INTERVAL 0x1A /**< Advertising Interval. */ +#define BLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS 0x1B /**< LE Bluetooth Device Address. */ +#define BLE_GAP_AD_TYPE_LE_ROLE 0x1C /**< LE Role. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C256 0x1D /**< Simple Pairing Hash C-256. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R256 0x1E /**< Simple Pairing Randomizer R-256. */ +#define BLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID 0x20 /**< Service Data - 32-bit UUID. */ +#define BLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID 0x21 /**< Service Data - 128-bit UUID. */ +#define BLE_GAP_AD_TYPE_3D_INFORMATION_DATA 0x3D /**< 3D Information Data. */ +#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA 0xFF /**< Manufacturer Specific Data. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADV_FLAGS GAP Advertisement Flags + * @{ */ +#define BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE (0x01) /**< LE Limited Discoverable Mode. */ +#define BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE (0x02) /**< LE General Discoverable Mode. */ +#define BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED (0x04) /**< BR/EDR not supported. */ +#define BLE_GAP_ADV_FLAG_LE_BR_EDR_CONTROLLER (0x08) /**< Simultaneous LE and BR/EDR, Controller. */ +#define BLE_GAP_ADV_FLAG_LE_BR_EDR_HOST (0x10) /**< Simultaneous LE and BR/EDR, Host. */ +#define BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE (BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE Limited Discoverable Mode, BR/EDR not supported. */ +#define BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE (BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE General Discoverable Mode, BR/EDR not supported. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADV_INTERVALS GAP Advertising interval max and min + * @{ */ +#define BLE_GAP_ADV_INTERVAL_MIN 0x0020 /**< Minimum Advertising interval in 625 us units, i.e. 20 ms. */ +#define BLE_GAP_ADV_NONCON_INTERVAL_MIN 0x00A0 /**< Minimum Advertising interval in 625 us units for non connectable mode, i.e. 100 ms. */ +#define BLE_GAP_ADV_INTERVAL_MAX 0x4000 /**< Maximum Advertising interval in 625 us units, i.e. 10.24 s. */ + /**@} */ + + +/**@brief Maximum size of advertising data in octets. */ +#define BLE_GAP_ADV_MAX_SIZE 31 + + +/**@defgroup BLE_GAP_ADV_TYPES GAP Advertising types + * @{ */ +#define BLE_GAP_ADV_TYPE_ADV_IND 0x00 /**< Connectable undirected. */ +#define BLE_GAP_ADV_TYPE_ADV_DIRECT_IND 0x01 /**< Connectable directed. */ +#define BLE_GAP_ADV_TYPE_ADV_SCAN_IND 0x02 /**< Scannable undirected. */ +#define BLE_GAP_ADV_TYPE_ADV_NONCONN_IND 0x03 /**< Non connectable undirected. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADV_FILTER_POLICIES GAP Advertising filter policies + * @{ */ +#define BLE_GAP_ADV_FP_ANY 0x00 /**< Allow scan requests and connect requests from any device. */ +#define BLE_GAP_ADV_FP_FILTER_SCANREQ 0x01 /**< Filter scan requests with whitelist. */ +#define BLE_GAP_ADV_FP_FILTER_CONNREQ 0x02 /**< Filter connect requests with whitelist. */ +#define BLE_GAP_ADV_FP_FILTER_BOTH 0x03 /**< Filter both scan and connect requests with whitelist. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADV_TIMEOUT_VALUES GAP Advertising timeout values + * @{ */ +#define BLE_GAP_ADV_TIMEOUT_LIMITED_MAX 180 /**< Maximum advertising time in limited discoverable mode (TGAP(lim_adv_timeout) = 180s in spec (Addendum 2)). */ +#define BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED 0 /**< Unlimited advertising in general discoverable mode. */ +/**@} */ + + +/**@defgroup BLE_GAP_DISC_MODES GAP Discovery modes + * @{ */ +#define BLE_GAP_DISC_MODE_NOT_DISCOVERABLE 0x00 /**< Not discoverable discovery Mode. */ +#define BLE_GAP_DISC_MODE_LIMITED 0x01 /**< Limited Discovery Mode. */ +#define BLE_GAP_DISC_MODE_GENERAL 0x02 /**< General Discovery Mode. */ +/**@} */ + +/**@defgroup BLE_GAP_IO_CAPS GAP IO Capabilities + * @{ */ +#define BLE_GAP_IO_CAPS_DISPLAY_ONLY 0x00 /**< Display Only. */ +#define BLE_GAP_IO_CAPS_DISPLAY_YESNO 0x01 /**< Display and Yes/No entry. */ +#define BLE_GAP_IO_CAPS_KEYBOARD_ONLY 0x02 /**< Keyboard Only. */ +#define BLE_GAP_IO_CAPS_NONE 0x03 /**< No I/O capabilities. */ +#define BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY 0x04 /**< Keyboard and Display. */ +/**@} */ + + +/**@defgroup BLE_GAP_AUTH_KEY_TYPES GAP Authentication Key Types + * @{ */ +#define BLE_GAP_AUTH_KEY_TYPE_NONE 0x00 /**< No key (may be used to reject). */ +#define BLE_GAP_AUTH_KEY_TYPE_PASSKEY 0x01 /**< 6-digit Passkey. */ +#define BLE_GAP_AUTH_KEY_TYPE_OOB 0x02 /**< Out Of Band data. */ +/**@} */ + +/**@defgroup BLE_GAP_SEC_STATUS GAP Security status + * @{ */ +#define BLE_GAP_SEC_STATUS_SUCCESS 0x00 /**< Successful parameters. */ +#define BLE_GAP_SEC_STATUS_TIMEOUT 0x01 /**< Procedure timed out. */ +#define BLE_GAP_SEC_STATUS_PDU_INVALID 0x02 /**< Invalid PDU received. */ +#define BLE_GAP_SEC_STATUS_PASSKEY_ENTRY_FAILED 0x81 /**< Passkey entry failed (user cancelled or other). */ +#define BLE_GAP_SEC_STATUS_OOB_NOT_AVAILABLE 0x82 /**< Out of Band Key not available. */ +#define BLE_GAP_SEC_STATUS_AUTH_REQ 0x83 /**< Authentication requirements not met. */ +#define BLE_GAP_SEC_STATUS_CONFIRM_VALUE 0x84 /**< Confirm value failed. */ +#define BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP 0x85 /**< Pairing not supported. */ +#define BLE_GAP_SEC_STATUS_ENC_KEY_SIZE 0x86 /**< Encryption key size. */ +#define BLE_GAP_SEC_STATUS_SMP_CMD_UNSUPPORTED 0x87 /**< Unsupported SMP command. */ +#define BLE_GAP_SEC_STATUS_UNSPECIFIED 0x88 /**< Unspecified reason. */ +#define BLE_GAP_SEC_STATUS_REPEATED_ATTEMPTS 0x89 /**< Too little time elapsed since last attempt. */ +#define BLE_GAP_SEC_STATUS_INVALID_PARAMS 0x8A /**< Invalid parameters. */ +/**@} */ + +/**@defgroup BLE_GAP_SEC_STATUS_SOURCES GAP Security status sources + * @{ */ +#define BLE_GAP_SEC_STATUS_SOURCE_LOCAL 0x00 /**< Local failure. */ +#define BLE_GAP_SEC_STATUS_SOURCE_REMOTE 0x01 /**< Remote failure. */ +/**@} */ + +/**@defgroup BLE_GAP_CP_LIMITS GAP Connection Parameters Limits + * @{ */ +#define BLE_GAP_CP_MIN_CONN_INTVL_NONE 0xFFFF /**< No new minimum connction interval specified in connect parameters. */ +#define BLE_GAP_CP_MIN_CONN_INTVL_MIN 0x0006 /**< Lowest mimimum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ +#define BLE_GAP_CP_MIN_CONN_INTVL_MAX 0x0C80 /**< Highest minimum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ +#define BLE_GAP_CP_MAX_CONN_INTVL_NONE 0xFFFF /**< No new maximum connction interval specified in connect parameters. */ +#define BLE_GAP_CP_MAX_CONN_INTVL_MIN 0x0006 /**< Lowest maximum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ +#define BLE_GAP_CP_MAX_CONN_INTVL_MAX 0x0C80 /**< Highest maximum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ +#define BLE_GAP_CP_SLAVE_LATENCY_MAX 0x03E8 /**< Highest slave latency permitted, in connection events. */ +#define BLE_GAP_CP_CONN_SUP_TIMEOUT_NONE 0xFFFF /**< No new supervision timeout specified in connect parameters. */ +#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MIN 0x000A /**< Lowest supervision timeout permitted, in units of 10 ms, i.e. 100 ms. */ +#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MAX 0x0C80 /**< Highest supervision timeout permitted, in units of 10 ms, i.e. 32 s. */ +/**@} */ + + +/**@brief GAP device name maximum length. */ +#define BLE_GAP_DEVNAME_MAX_LEN 31 + + +/**@defgroup BLE_GAP_CONN_SEC_MODE_SET_MACROS GAP attribute security requirement setters + * + * See @ref ble_gap_conn_sec_mode_t. + * @{ */ +/**@brief Set sec_mode pointed to by ptr to have no access rights.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(ptr) do {(ptr)->sm = 0; (ptr)->lv = 0;} while(0) +/**@brief Set sec_mode pointed to by ptr to require no protection, open link.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_OPEN(ptr) do {(ptr)->sm = 1; (ptr)->lv = 1;} while(0) +/**@brief Set sec_mode pointed to by ptr to require encryption, but no MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 2;} while(0) +/**@brief Set sec_mode pointed to by ptr to require encryption and MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 3;} while(0) +/**@brief Set sec_mode pointed to by ptr to require signing or encryption, no MITM protection needed.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_NO_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 1;} while(0) +/**@brief Set sec_mode pointed to by ptr to require signing or encryption with MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_WITH_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 2;} while(0) +/**@} */ + + +/**@brief GAP Security Key Length. */ +#define BLE_GAP_SEC_KEY_LEN 16 + +/**@brief GAP Passkey Length. */ +#define BLE_GAP_PASSKEY_LEN 6 + +/**@brief Maximum amount of addresses in a whitelist. */ +#define BLE_GAP_WHITELIST_ADDR_MAX_COUNT (8) + +/**@brief Maximum amount of IRKs in a whitelist. + * @note The number of IRKs is limited to 8, even if the hardware supports more. + */ +#define BLE_GAP_WHITELIST_IRK_MAX_COUNT (8) + +/**@defgroup GAP_SEC_MODES GAP Security Modes + * @{ */ +#define BLE_GAP_SEC_MODE 0x00 /**< No key (may be used to reject). */ +/**@} */ + +/**@} */ + +/**@addtogroup BLE_GAP_STRUCTURES Structures + * @{ */ + +/**@brief Bluetooth Low Energy address. */ +typedef struct +{ + uint8_t addr_type; /**< See @ref BLE_GAP_ADDR_TYPES. */ + uint8_t addr[BLE_GAP_ADDR_LEN]; /**< 48-bit address, LSB format. */ +} ble_gap_addr_t; + + +/**@brief GAP connection parameters. + * + * @note When ble_conn_params_t is received in an event, both min_conn_interval and + * max_conn_interval will be equal to the connection interval set by the central. + */ +typedef struct +{ + uint16_t min_conn_interval; /**< Minimum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ + uint16_t max_conn_interval; /**< Maximum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ + uint16_t slave_latency; /**< Slave Latency in number of connection events, see @ref BLE_GAP_CP_LIMITS.*/ + uint16_t conn_sup_timeout; /**< Connection Supervision Timeout in 10 ms units, see @ref BLE_GAP_CP_LIMITS.*/ +} ble_gap_conn_params_t; + + +/**@brief GAP link requirements. + * + * See Bluetooth Core specification, Volume 3 Part C 10.2 for details. + * + * Security Mode 0 Level 0: No access permissions at all (this level is not defined by the Bluetooth Core specification).\n + * Security Mode 1 Level 1: No security is needed (aka open link).\n + * Security Mode 1 Level 2: Encrypted link required, MITM protection not necessary.\n + * Security Mode 1 Level 3: MITM protected encrypted link required.\n + * Security Mode 2 Level 1: Signing or encryption required, MITM protection not necessary.\n + * Security Mode 2 Level 2: MITM protected signing required, unless link is MITM protected encrypted.\n + */ +typedef struct +{ + uint8_t sm : 4; /**< Security Mode (1 or 2), 0 for no permissions at all. */ + uint8_t lv : 4; /**< Level (1, 2 or 3), 0 for no permissions at all. */ + +} ble_gap_conn_sec_mode_t; + + +/**@brief GAP connection security status.*/ +typedef struct +{ + ble_gap_conn_sec_mode_t sec_mode; /**< Currently active security mode for this connection.*/ + uint8_t encr_key_size; /**< Length of currently active encryption key, 7 to 16 octets (only applicable for bonding procedures). */ +} ble_gap_conn_sec_t; + + +/**@brief Identity Resolving Key. */ +typedef struct +{ + uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Array containing IRK. */ +} ble_gap_irk_t; + + +/**@brief Whitelist structure. */ +typedef struct +{ + ble_gap_addr_t ** pp_addrs; /**< Pointer to array of device address pointers, pointing to addresses to be used in whitelist. NULL if none are given. */ + uint8_t addr_count; /**< Count of device addresses in array, up to @ref BLE_GAP_WHITELIST_ADDR_MAX_COUNT. */ + ble_gap_irk_t ** pp_irks; /**< Pointer to array of Identity Resolving Key (IRK) pointers, each pointing to an IRK in the whitelist. NULL if none are given. */ + uint8_t irk_count; /**< Count of IRKs in array, up to @ref BLE_GAP_WHITELIST_IRK_MAX_COUNT. */ +} ble_gap_whitelist_t; + + +/**@brief GAP advertising parameters.*/ +typedef struct +{ + uint8_t type; /**< See @ref BLE_GAP_ADV_TYPES. */ + ble_gap_addr_t* p_peer_addr; /**< For BLE_GAP_CONN_MODE_DIRECTED mode only, known peer address. */ + uint8_t fp; /**< Filter Policy, see @ref BLE_GAP_ADV_FILTER_POLICIES. */ + ble_gap_whitelist_t * p_whitelist; /**< Pointer to whitelist, NULL if none is given. */ + uint16_t interval; /**< Advertising interval between 0x0020 and 0x4000 in 0.625 ms units (20ms to 10.24s), see @ref BLE_GAP_ADV_INTERVALS. This parameter must be set to 0 if type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND. */ + uint16_t timeout; /**< Advertising timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. See also @ref BLE_GAP_ADV_TIMEOUT_VALUES. This parameter must be set to 0 if type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND. */ +} ble_gap_adv_params_t; + + +/**@brief GAP scanning parameters. */ +typedef struct +{ + uint8_t filter; /**< Filter based on discovery mode, see @ref BLE_GAP_DISC_MODES. */ + uint8_t active : 1; /**< If 1, perform active scanning (scan requests). */ + uint8_t selective : 1; /**< If 1, ignore unknown devices (non whitelisted). */ + uint16_t interval; /**< Scan interval between 0x0020 and 0x4000 in 0.625ms units (20ms to 10.24s). */ + uint16_t window; /**< Scan window between 0x0004 and 0x4000 in 0.625ms units (2.5ms to 10.24s). */ + uint16_t timeout; /**< Scan timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. */ +} ble_gap_scan_params_t; + + +/**@brief GAP security parameters. */ +typedef struct +{ + uint16_t timeout; /**< Timeout for SMP transactions or Security Request in seconds, see @ref sd_ble_gap_authenticate and @ref sd_ble_gap_sec_params_reply for more information. */ + uint8_t bond : 1; /**< Perform bonding. */ + uint8_t mitm : 1; /**< Man In The Middle protection required. */ + uint8_t io_caps : 3; /**< IO capabilities, see @ref BLE_GAP_IO_CAPS. */ + uint8_t oob : 1; /**< Out Of Band data available. */ + uint8_t min_key_size; /**< Minimum encryption key size in octets between 7 and 16. */ + uint8_t max_key_size; /**< Maximum encryption key size in octets between min_key_size and 16. */ +} ble_gap_sec_params_t; + + +/**@brief GAP Encryption Information. */ +typedef struct +{ + uint16_t div; /**< Encryption Diversifier. */ + uint8_t ltk[BLE_GAP_SEC_KEY_LEN]; /**< Long Term Key. */ + uint8_t auth : 1; /**< Authenticated Key. */ + uint8_t ltk_len : 7; /**< LTK length in octets. */ +} ble_gap_enc_info_t; + + +/**@brief GAP Master Identification. */ +typedef struct +{ + uint16_t ediv; /**< Encrypted Diversifier. */ + uint8_t rand[8]; /**< Random Number. */ +} ble_gap_master_id_t; + + +/**@brief GAP Identity Information. */ +typedef struct +{ + ble_gap_addr_t addr; /**< Bluetooth address to which this key applies. */ + uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Identity Resolution Key. */ +} ble_gap_id_info_t; + + +/**@brief GAP Signing Information. */ +typedef struct +{ + uint8_t csrk[BLE_GAP_SEC_KEY_LEN]; /* Connection Signature Resolving Key. */ +} ble_gap_sign_info_t; + + +/**@brief GAP Event IDs. + * Those IDs uniquely identify an event coming from the stack to the application. + */ +enum BLE_GAP_EVTS +{ + BLE_GAP_EVT_CONNECTED = BLE_GAP_EVT_BASE, /**< Connection established. */ + BLE_GAP_EVT_DISCONNECTED, /**< Disconnected from peer. */ + BLE_GAP_EVT_CONN_PARAM_UPDATE, /**< Connection Parameters updated. */ + BLE_GAP_EVT_SEC_PARAMS_REQUEST, /**< Request to provide security parameters. */ + BLE_GAP_EVT_SEC_INFO_REQUEST, /**< Request to provide security information. */ + BLE_GAP_EVT_PASSKEY_DISPLAY, /**< Request to display a passkey to the user. */ + BLE_GAP_EVT_AUTH_KEY_REQUEST, /**< Request to provide an authentication key. */ + BLE_GAP_EVT_AUTH_STATUS, /**< Authentication procedure completed with status. */ + BLE_GAP_EVT_CONN_SEC_UPDATE, /**< Connection security updated. */ + BLE_GAP_EVT_TIMEOUT, /**< Timeout expired. */ + BLE_GAP_EVT_RSSI_CHANGED, /**< Signal strength measurement report. */ +}; + + +/** + * @brief GAP Option IDs. + * IDs that uniquely identify a GAP option. + */ +enum BLE_GAP_OPTS +{ + BLE_GAP_OPT_LOCAL_CONN_LATENCY = BLE_GAP_OPT_BASE, /**< Local connection latency. */ + BLE_GAP_OPT_PASSKEY, /**< Set passkey to be used during pairing. This option can be used to make the SoftDevice use an application provided passkey instead of generating a random passkey.*/ + BLE_GAP_OPT_PRIVACY, /**< Set or get custom IRK or custom private address cycle interval. */ +}; +/**@} */ + + +/**@brief Event data for connected event. */ +typedef struct +{ + ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ + uint8_t irk_match :1; /**< If 1, peer device's address resolved using an IRK. */ + uint8_t irk_match_idx :7; /**< Index in IRK list where the address was matched. */ + ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ +} ble_gap_evt_connected_t; + + +/**@brief Event data for disconnected event. */ +typedef struct +{ + uint8_t reason; /**< HCI error code. */ +} ble_gap_evt_disconnected_t; + + +/**@brief Event data for connection parameter update event. */ +typedef struct +{ + ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ +} ble_gap_evt_conn_param_update_t; + + +/**@brief Event data for security parameters request event. */ +typedef struct +{ + ble_gap_sec_params_t peer_params; /**< Initiator Security Parameters. */ +} ble_gap_evt_sec_params_request_t; + + +/**@brief Event data for security info request event. */ +typedef struct +{ + ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ + uint16_t div; /**< Encryption diversifier for LTK lookup. */ + uint8_t enc_info : 1; /**< If 1, Encryption Information required. */ + uint8_t id_info : 1; /**< If 1, Identity Information required. */ + uint8_t sign_info : 1; /**< If 1, Signing Information required. */ +} ble_gap_evt_sec_info_request_t; + + +/**@brief Event data for passkey display event. */ +typedef struct +{ + uint8_t passkey[BLE_GAP_PASSKEY_LEN]; /**< 6-digit passkey in ASCII ('0'-'9' digits only). */ +} ble_gap_evt_passkey_display_t; + + +/**@brief Event data for authentication key request event. */ +typedef struct +{ + uint8_t key_type; /**< See @ref BLE_GAP_AUTH_KEY_TYPES. */ +} ble_gap_evt_auth_key_request_t; + + +/**@brief Security levels supported. + * @note See Bluetooth Specification Version 4.1 Volume 3, Part C, Chapter 10. +*/ +typedef struct +{ + uint8_t lv1 : 1; /**< If 1: Level 1 is supported. */ + uint8_t lv2 : 1; /**< If 1: Level 2 is supported. */ + uint8_t lv3 : 1; /**< If 1: Level 3 is supported. */ +} ble_gap_sec_levels_t; + + +/**@brief Keys that have been exchanged. */ +typedef struct +{ + uint8_t ltk : 1; /**< Long Term Key. */ + uint8_t ediv_rand : 1; /**< Encrypted Diversifier and Random value. */ + uint8_t irk : 1; /**< Identity Resolving Key. */ + uint8_t address : 1; /**< Public or static random address. */ + uint8_t csrk : 1; /**< Connection Signature Resolving Key. */ +} ble_gap_sec_keys_t; + + +/**@brief Event data for authentication status event. */ +typedef struct +{ + uint8_t auth_status; /**< Authentication status, see @ref BLE_GAP_SEC_STATUS. */ + uint8_t error_src; /**< On error, source that caused the failure, see @ref BLE_GAP_SEC_STATUS_SOURCES. */ + ble_gap_sec_levels_t sm1_levels; /**< Levels supported in Security Mode 1. */ + ble_gap_sec_levels_t sm2_levels; /**< Levels supported in Security Mode 2. */ + ble_gap_sec_keys_t periph_kex; /**< Bitmap stating which keys were exchanged (distributed) by the peripheral. */ + ble_gap_sec_keys_t central_kex; /**< Bitmap stating which keys were exchanged (distributed) by the central. */ + struct periph_keys_t + { + ble_gap_enc_info_t enc_info; /**< Peripheral's Encryption information. */ + } periph_keys; /**< Actual keys distributed from the Peripheral to the Central. */ + struct central_keys_t + { + ble_gap_irk_t irk; /**< Central's IRK. */ + ble_gap_addr_t id_info; /**< Central's Identity Info. */ + } central_keys; /**< Actual keys distributed from the Central to the Peripheral. */ +} ble_gap_evt_auth_status_t; + + +/**@brief Event data for connection security update event. */ +typedef struct +{ + ble_gap_conn_sec_t conn_sec; /**< Connection security level. */ +} ble_gap_evt_conn_sec_update_t; + + +/**@brief Event data for timeout event. */ +typedef struct +{ + uint8_t src; /**< Source of timeout event, see @ref BLE_GAP_TIMEOUT_SOURCES. */ +} ble_gap_evt_timeout_t; + + +/**@brief Event data for advertisement report event. */ +typedef struct +{ + int8_t rssi; /**< Received Signal Strength Indication in dBm. */ +} ble_gap_evt_rssi_changed_t; + + +/**@brief GAP event callback event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occured. */ + union /**< union alternative identified by evt_id in enclosing struct. */ + { + ble_gap_evt_connected_t connected; /**< Connected Event Parameters. */ + ble_gap_evt_disconnected_t disconnected; /**< Disconnected Event Parameters. */ + ble_gap_evt_conn_param_update_t conn_param_update; /**< Connection Parameter Update Parameters. */ + ble_gap_evt_sec_params_request_t sec_params_request; /**< Security Parameters Request Event Parameters. */ + ble_gap_evt_sec_info_request_t sec_info_request; /**< Security Information Request Event Parameters. */ + ble_gap_evt_passkey_display_t passkey_display; /**< Passkey Display Event Parameters. */ + ble_gap_evt_auth_key_request_t auth_key_request; /**< Authentication Key Request Event Parameters. */ + ble_gap_evt_auth_status_t auth_status; /**< Authentication Status Event Parameters. */ + ble_gap_evt_conn_sec_update_t conn_sec_update; /**< Connection Security Update Event Parameters. */ + ble_gap_evt_timeout_t timeout; /**< Timeout Event Parameters. */ + ble_gap_evt_rssi_changed_t rssi_changed; /**< RSSI Event parameters. */ + } params; + +} ble_gap_evt_t; + + +/**@brief Local connection latency option. + * + * Local connection latency is a feature which enables the slave to improve + * current consumption by ignoring the slave latency set by the peer. The + * local connection latency can only be set to a multiple of the slave latency, + * and cannot be longer than half of the supervision timeout. + * + * Used with @ref sd_ble_opt_set to set the local connection latency. The + * @ref sd_ble_opt_get is not supported for this option, but the actual + * local connection latency (unless set to NULL) is set as a return parameter + * when setting the option. + * + * @note The latency set will be truncated down to the closest slave latency event + * multiple, or the nearest multiple before half of the supervision timeout. + * + * @note The local connection latency is default off, and needs to be set for new + * connections and whenever the connection is updated. + * + * @retval ::NRF_SUCCESS Set successfully. + * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. + */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle */ + uint16_t requested_latency; /**< Requested local connection latency. */ + uint16_t * p_actual_latency; /**< Pointer to storage for the actual local connection latency (can be set to NULL to skip return value). */ +} ble_gap_opt_local_conn_latency_t; + + +/**@brief Passkey Option. + * + * Structure containing the passkey to be used during pairing. This can be used with @ref + * sd_ble_opt_set to make the SoftDevice use a pre-programmed passkey for authentication + * instead of generating a random one. + * + * @note @ref sd_ble_opt_get is not supported for this option. + * + */ +typedef struct +{ + uint8_t * p_passkey; /**< Pointer to 6-digit ASCII string (digit 0..9 only, no NULL termination) passkey to be used during pairing. If this is NULL, the SoftDevice will generate a random passkey if required.*/ +} ble_gap_opt_passkey_t; + + +/**@brief Custom Privacy Options. + * + * @note The specified address cycle interval is used when the address cycle mode is + * @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO. If 0 is given, the address will not be refreshed at any + * interval, and not at start of advertising. A new address can be generated manually by calling + * @ref sd_ble_gap_address_set with the same type again. The default interval is + * @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S. + * + * @note If cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO, the address will immediately be + * refreshed when this option is set. + */ +typedef struct +{ + ble_gap_irk_t * p_irk; /**< When input: Pointer to custom IRK, or NULL to use/reset to the device's default IRK. When output: Pointer to where the current IRK is to be stored, or NULL to not read out the IRK. */ + uint16_t interval_s; /**< When input: Custom private address cycle interval in seconds. When output: The current private address cycle interval. */ +} ble_gap_opt_privacy_t; + + +/**@brief Option structure for GAP options. */ +typedef union +{ + ble_gap_opt_local_conn_latency_t local_conn_latency; /**< Local connection latency. */ + ble_gap_opt_passkey_t passkey; /**< Passkey to be used for pairing.*/ + ble_gap_opt_privacy_t privacy; /**< Custom privacy options. */ +} ble_gap_opt_t; +/**@} */ + + +/**@addtogroup BLE_GAP_FUNCTIONS Functions + * @{ */ + +/**@brief Set local Bluetooth address. + * + * If the address cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO, the address type is required to + * be @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE or + * @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE. The given address is ignored and the + * SoftDevice will generate a new private address automatically every time advertising is + * (re)started, and every @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S seconds. If this API + * call is used again with the same parameters while advertising, the SoftDevice will immediately + * generate a new private address to replace the current address. + * + * If the application wishes to use a @ref BLE_GAP_ADDR_TYPE_PUBLIC or + * @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC address, the cycle mode must be + * @ref BLE_GAP_ADDR_CYCLE_MODE_NONE. + * + * If this API function is called while advertising, the softdevice will immediately update the + * advertising address without the need to stop advertising in the following cases: + * - If the previously set address is of type @ref BLE_GAP_ADDR_TYPE_PUBLIC and the new address + * is also of type @ref BLE_GAP_ADDR_TYPE_PUBLIC + * - If the previously set address is not @ref BLE_GAP_ADDR_TYPE_PUBLIC and the new address is + * also not @ref BLE_GAP_ADDR_TYPE_PUBLIC. + * + * If the address is changed from a @ref BLE_GAP_ADDR_TYPE_PUBLIC address to another type or from + * another type to a @ref BLE_GAP_ADDR_TYPE_PUBLIC address, the change will take effect the next + * time advertising is started. + * + * @note If the address cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_NONE and the application is + * using privacy, the application must take care to generate and set new private addresses + * periodically to comply with the Privacy specification in Bluetooth Core Spec. + * + * @param[in] addr_cycle_mode Address cycle mode, see @ref BLE_GAP_ADDR_CYCLE_MODES. + * @param[in] p_addr Pointer to address structure. + * + * @return @ref NRF_SUCCESS Address successfully set. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameters. + * @return @ref BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address. + * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. + */ +SVCALL(SD_BLE_GAP_ADDRESS_SET, uint32_t, sd_ble_gap_address_set(uint8_t addr_cycle_mode, ble_gap_addr_t const * const p_addr)); + + +/**@brief Get local Bluetooth address. + * + * @param[out] p_addr Pointer to address structure. + * + * @return @ref NRF_SUCCESS Address successfully retrieved. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_GAP_ADDRESS_GET, uint32_t, sd_ble_gap_address_get(ble_gap_addr_t * const p_addr)); + + +/**@brief Set, clear or update advertisement and scan response data. + * + * @note The format of the advertisement data will be checked by this call to ensure interoperability. + * Limitations imposed by this API call to the data provided include having a flags data type in the scan response data and + * duplicating the local name in the advertisement data and scan response data. + * + * @note: To clear the advertisement data and set it to a 0-length packet, simply provide a valid pointer (p_data/p_sr_data) with its corresponding + * length (dlen/srdlen) set to 0. + * + * @note: The call will fail if p_data and p_sr_data are both NULL since this would have no effect. + * + * @param[in] p_data Raw data to be placed in advertisement packet. If NULL, no changes are made to the current advertisement packet data. + * @param[in] dlen Data length for p_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_data is NULL, can be 0 if p_data is not NULL. + * @param[in] p_sr_data Raw data to be placed in scan response packet. If NULL, no changes are made to the current scan response packet data. + * @param[in] srdlen Data length for p_sr_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_sr_data is NULL, can be 0 if p_data is not NULL. + * + * @return @ref NRF_SUCCESS Advertisement data successfully updated or cleared. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_FLAGS Invalid combination of advertising flags supplied. + * @return @ref NRF_ERROR_INVALID_DATA Invalid data type(s) supplied, check the advertising data format specification. + * @return @ref NRF_ERROR_INVALID_LENGTH Invalid data length(s) supplied. + * @return @ref BLE_ERROR_GAP_UUID_LIST_MISMATCH Invalid UUID list supplied. + * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. + */ +SVCALL(SD_BLE_GAP_ADV_DATA_SET, uint32_t, sd_ble_gap_adv_data_set(uint8_t const * const p_data, uint8_t dlen, uint8_t const * const p_sr_data, uint8_t srdlen)); + + +/**@brief Start advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). + * + * @param[in] p_adv_params Pointer to advertising parameters structure. + * + * @return @ref NRF_SUCCESS The BLE stack has started advertising. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check the accepted ranges and limits. + * @return @ref BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Bluetooth address supplied. + * @return @ref BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST Discoverable mode and whitelist incompatible. + */ +SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start(ble_gap_adv_params_t const * const p_adv_params)); + + +/**@brief Stop advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). + * + * @return @ref NRF_SUCCESS The BLE stack has stopped advertising. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation (most probably not in advertising state). + */ +SVCALL(SD_BLE_GAP_ADV_STOP, uint32_t, sd_ble_gap_adv_stop(void)); + + +/**@brief Update connection parameters. + * + * @details In the central role this will initiate a Link Layer connection parameter update procedure, + * otherwise in the peripheral role, this will send the corresponding L2CAP request and wait for + * the central to perform the procedure. In both cases, and regardless of success or failure, the application + * will be informed of the result with a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE event. + * + * @note If both a connection supervision timeout and a maximum connection interval are specified, then the following constraint + * applies: (conn_sup_timeout * 8) >= (max_conn_interval * (slave_latency + 1)) + * + * @param[in] conn_handle Connection handle. + * @param[in] p_conn_params Pointer to desired connection parameters. If NULL is provided on a peripheral role, + * the parameters in the PPCP characteristic of the GAP service will be used instead. + * + * @return @ref NRF_SUCCESS The Connection Update procedure has been started successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. + * @return @ref NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, process pending events and retry. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_GAP_CONN_PARAM_UPDATE, uint32_t, sd_ble_gap_conn_param_update(uint16_t conn_handle, ble_gap_conn_params_t const * const p_conn_params)); + + +/**@brief Disconnect (GAP Link Termination). + * + * @details This call initiates the disconnection procedure, and its completion will be communicated to the application + * with a BLE_GAP_EVT_DISCONNECTED event. + * + * @param[in] conn_handle Connection handle. + * @param[in] hci_status_code HCI status code, see @ref BLE_HCI_STATUS_CODES (accepted values are BTLE_REMOTE_USER_TERMINATED_CONNECTION and BTLE_CONN_INTERVAL_UNACCEPTABLE). + * + * @return @ref NRF_SUCCESS The disconnection procedure has been started successfully. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation (disconnection is already in progress or not connected at all). + */ +SVCALL(SD_BLE_GAP_DISCONNECT, uint32_t, sd_ble_gap_disconnect(uint16_t conn_handle, uint8_t hci_status_code)); + + +/**@brief Set the radio's transmit power. + * + * @param[in] tx_power Radio transmit power in dBm (accepted values are -40, -30, -20, -16, -12, -8, -4, 0, and 4 dBm). + * + * @note -40 dBm will not actually give -40 dBm, but will instead be remapped to -30 dBm. + * + * @return @ref NRF_SUCCESS Successfully changed the transmit power. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. + */ +SVCALL(SD_BLE_GAP_TX_POWER_SET, uint32_t, sd_ble_gap_tx_power_set(int8_t tx_power)); + + +/**@brief Set GAP Appearance value. + * + * @param[in] appearance Appearance (16-bit), see @ref BLE_APPEARANCES. + * + * @return @ref NRF_SUCCESS Appearance value set successfully. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + */ +SVCALL(SD_BLE_GAP_APPEARANCE_SET, uint32_t, sd_ble_gap_appearance_set(uint16_t appearance)); + + +/**@brief Get GAP Appearance value. + * + * @param[out] p_appearance Appearance (16-bit), see @ref BLE_APPEARANCES. + * + * @return @ref NRF_SUCCESS Appearance value retrieved successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_GAP_APPEARANCE_GET, uint32_t, sd_ble_gap_appearance_get(uint16_t * const p_appearance)); + + +/**@brief Set GAP Peripheral Preferred Connection Parameters. + * + * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure with the desired parameters. + * + * @return @ref NRF_SUCCESS Peripheral Preferred Connection Parameters set successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + */ +SVCALL(SD_BLE_GAP_PPCP_SET, uint32_t, sd_ble_gap_ppcp_set(ble_gap_conn_params_t const * const p_conn_params)); + + +/**@brief Get GAP Peripheral Preferred Connection Parameters. + * + * @param[out] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the parameters will be stored. + * + * @return @ref NRF_SUCCESS Peripheral Preferred Connection Parameters retrieved successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_GAP_PPCP_GET, uint32_t, sd_ble_gap_ppcp_get(ble_gap_conn_params_t * const p_conn_params)); + + +/**@brief Set GAP device name. + * + * @param[in] p_write_perm Write permissions for the Device Name characteristic see @ref ble_gap_conn_sec_mode_t. + * @param[in] p_dev_name Pointer to a UTF-8 encoded, <b>non NULL-terminated</b> string. + * @param[in] len Length of the UTF-8, <b>non NULL-terminated</b> string pointed to by p_dev_name in octets (must be smaller or equal than @ref BLE_GAP_DEVNAME_MAX_LEN). + * + * @return @ref NRF_SUCCESS GAP device name and permissions set successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + */ +SVCALL(SD_BLE_GAP_DEVICE_NAME_SET, uint32_t, sd_ble_gap_device_name_set(ble_gap_conn_sec_mode_t const * const p_write_perm, uint8_t const * const p_dev_name, uint16_t len)); + + +/**@brief Get GAP device name. + * + * @param[in] p_dev_name Pointer to an empty buffer where the UTF-8 <b>non NULL-terminated</b> string will be placed. Set to NULL to obtain the complete device name length. + * @param[in,out] p_len Length of the buffer pointed by p_dev_name, complete device name length on output. + * + * @note If the device name is longer than the size of the supplied buffer, + * p_len will return the complete device name length, + * and not the number of bytes actually returned in p_dev_name. + * The application may use this information to allocate a suitable buffer size. + * + * @return @ref NRF_SUCCESS GAP device name retrieved successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + */ +SVCALL(SD_BLE_GAP_DEVICE_NAME_GET, uint32_t, sd_ble_gap_device_name_get(uint8_t * const p_dev_name, uint16_t * const p_len)); + + +/**@brief Initiate GAP Authentication procedure. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_sec_params Pointer to the @ref ble_gap_sec_params_t structure with the security parameters to be used during the pairing procedure. + * + * @details In the central role, this function will send an SMP Pairing Request, otherwise in the peripheral role, an SMP Security Request will be sent. + * In the peripheral role, only the timeout, bond and mitm fields of @ref ble_gap_sec_params_t are used. + * + * @note The GAP Authentication procedure may be triggered by the central without calling this function when accessing a secure service. + * @note Calling this function may result in the following events depending on the outcome and parameters: @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, + * @ref BLE_GAP_EVT_SEC_INFO_REQUEST, @ref BLE_GAP_EVT_AUTH_KEY_REQUEST, @ref BLE_GAP_EVT_AUTH_STATUS. + * @note The timeout parameter in @ref ble_gap_sec_params_t is interpreted here as the Security Request timeout + * + * + * @return @ref NRF_SUCCESS Successfully initiated authentication procedure. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_AUTHENTICATE, uint32_t, sd_ble_gap_authenticate(uint16_t conn_handle, ble_gap_sec_params_t const * const p_sec_params)); + + +/**@brief Reply with GAP security parameters. + * + * @param[in] conn_handle Connection handle. + * @param[in] sec_status Security status, see @ref BLE_GAP_SEC_STATUS. + * @param[in] p_sec_params Pointer to a @ref ble_gap_sec_params_t security parameters structure. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, calling it at other times will result in an NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * @note The timeout parameter in @ref ble_gap_sec_params_t is interpreted here as the SMP procedure timeout, and must be 30 seconds. The function will fail + * if the application supplies a different value. + * + * @return @ref NRF_SUCCESS Successfully accepted security parameter from the application. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_SEC_PARAMS_REPLY, uint32_t, sd_ble_gap_sec_params_reply(uint16_t conn_handle, uint8_t sec_status, ble_gap_sec_params_t const * const p_sec_params)); + + +/**@brief Reply with an authentication key. + * + * @param[in] conn_handle Connection handle. + * @param[in] key_type See @ref BLE_GAP_AUTH_KEY_TYPES. + * @param[in] key If key type is BLE_GAP_AUTH_KEY_TYPE_NONE, then NULL. + * If key type is BLE_GAP_AUTH_KEY_TYPE_PASSKEY, then a 6-byte ASCII string (digit 0..9 only, no NULL termination). + * If key type is BLE_GAP_AUTH_KEY_TYPE_OOB, then a 16-byte OOB key value in Little Endian format. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_AUTH_KEY_REQUEST, calling it at other times will result in an NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * + * @return @ref NRF_SUCCESS Authentication key successfully set. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_AUTH_KEY_REPLY, uint32_t, sd_ble_gap_auth_key_reply(uint16_t conn_handle, uint8_t key_type, uint8_t const * const key)); + + +/**@brief Reply with GAP security information. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. May be NULL to signal none is available. + * @param[in] p_sign_info Pointer to a @ref ble_gap_sign_info_t signing information structure. May be NULL to signal none is available. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_INFO_REQUEST, calling it at other times will result in NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * @note Data signing is not implemented yet. p_sign_info must therefore be NULL. + * + * @return @ref NRF_SUCCESS Successfully accepted security information. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. + */ +SVCALL(SD_BLE_GAP_SEC_INFO_REPLY, uint32_t, sd_ble_gap_sec_info_reply(uint16_t conn_handle, ble_gap_enc_info_t const * const p_enc_info, ble_gap_sign_info_t const * const p_sign_info)); + + +/**@brief Get the current connection security. + * + * @param[in] conn_handle Connection handle. + * @param[out] p_conn_sec Pointer to a @ref ble_gap_conn_sec_t structure to be filled in. + * + * @return @ref NRF_SUCCESS Current connection security successfully retrieved. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_CONN_SEC_GET, uint32_t, sd_ble_gap_conn_sec_get(uint16_t conn_handle, ble_gap_conn_sec_t * const p_conn_sec)); + + +/**@brief Start reporting the received signal strength to the application. + * + * A new event is reported whenever the RSSI value changes, until @ref sd_ble_gap_rssi_stop is called. + * + * @param[in] conn_handle Connection handle. + * + * @return @ref NRF_SUCCESS Successfully activated RSSI reporting. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_RSSI_START, uint32_t, sd_ble_gap_rssi_start(uint16_t conn_handle)); + + +/**@brief Stop reporting the received singnal strength. + * + * An RSSI change detected before the call but not yet received by the application + * may be reported after @ref sd_ble_gap_rssi_stop has been called. + * + * @param[in] conn_handle Connection handle. + * + * @return @ref NRF_SUCCESS Successfully deactivated RSSI reporting. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_RSSI_STOP, uint32_t, sd_ble_gap_rssi_stop(uint16_t conn_handle)); +/**@} */ + +#endif // BLE_GAP_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gatt.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,171 @@ +/* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + /** + @addtogroup BLE_GATT Generic Attribute Profile (GATT) Common + @{ + @brief Common definitions and prototypes for the GATT interfaces. + */ + +#ifndef BLE_GATT_H__ +#define BLE_GATT_H__ + +#include "ble_types.h" +#include "ble_ranges.h" + + +/** @addtogroup BLE_GATT_DEFINES Defines + * @{ */ + +/** @brief Default MTU size. */ +#define GATT_MTU_SIZE_DEFAULT 23 + +/** @brief Only the default MTU size of 23 is currently supported. */ +#define GATT_RX_MTU 23 + + +/**@brief Invalid Attribute Handle. */ +#define BLE_GATT_HANDLE_INVALID 0x0000 + +/** @defgroup BLE_GATT_TIMEOUT_SOURCES GATT Timeout sources + * @{ */ +#define BLE_GATT_TIMEOUT_SRC_PROTOCOL 0x00 /**< ATT Protocol timeout. */ +/** @} */ + +/** @defgroup BLE_GATT_WRITE_OPS GATT Write operations + * @{ */ +#define BLE_GATT_OP_INVALID 0x00 /**< Invalid Operation. */ +#define BLE_GATT_OP_WRITE_REQ 0x01 /**< Write Request. */ +#define BLE_GATT_OP_WRITE_CMD 0x02 /**< Write Command. */ +#define BLE_GATT_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ +#define BLE_GATT_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ +#define BLE_GATT_OP_EXEC_WRITE_REQ 0x05 /**< Execute Write Request. */ +/** @} */ + +/** @defgroup BLE_GATT_EXEC_WRITE_FLAGS GATT Execute Write flags + * @{ */ +#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_CANCEL 0x00 +#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE 0x01 +/** @} */ + +/** @defgroup BLE_GATT_HVX_TYPES GATT Handle Value operations + * @{ */ +#define BLE_GATT_HVX_INVALID 0x00 /**< Invalid Operation. */ +#define BLE_GATT_HVX_NOTIFICATION 0x01 /**< Handle Value Notification. */ +#define BLE_GATT_HVX_INDICATION 0x02 /**< Handle Value Indication. */ +/** @} */ + +/** @defgroup BLE_GATT_STATUS_CODES GATT Status Codes + * @{ */ +#define BLE_GATT_STATUS_SUCCESS 0x0000 /**< Success. */ +#define BLE_GATT_STATUS_UNKNOWN 0x0001 /**< Unknown or not applicable status. */ +#define BLE_GATT_STATUS_ATTERR_INVALID 0x0100 /**< ATT Error: Invalid Error Code. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_HANDLE 0x0101 /**< ATT Error: Invalid Attribute Handle. */ +#define BLE_GATT_STATUS_ATTERR_READ_NOT_PERMITTED 0x0102 /**< ATT Error: Read not permitted. */ +#define BLE_GATT_STATUS_ATTERR_WRITE_NOT_PERMITTED 0x0103 /**< ATT Error: Write not permitted. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_PDU 0x0104 /**< ATT Error: Used in ATT as Invalid PDU. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHENTICATION 0x0105 /**< ATT Error: Authenticated link required. */ +#define BLE_GATT_STATUS_ATTERR_REQUEST_NOT_SUPPORTED 0x0106 /**< ATT Error: Used in ATT as Request Not Supported. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_OFFSET 0x0107 /**< ATT Error: Offset specified was past the end of the attribute. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHORIZATION 0x0108 /**< ATT Error: Used in ATT as Insufficient Authorisation. */ +#define BLE_GATT_STATUS_ATTERR_PREPARE_QUEUE_FULL 0x0109 /**< ATT Error: Used in ATT as Prepare Queue Full. */ +#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND 0x010A /**< ATT Error: Used in ATT as Attribute not found. */ +#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_LONG 0x010B /**< ATT Error: Attribute cannot be read or written using read/write blob requests. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_ENC_KEY_SIZE 0x010C /**< ATT Error: Encryption key size used is insufficient. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_ATT_VAL_LENGTH 0x010D /**< ATT Error: Invalid value size. */ +#define BLE_GATT_STATUS_ATTERR_UNLIKELY_ERROR 0x010E /**< ATT Error: Very unlikely error. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_ENCRYPTION 0x010F /**< ATT Error: Encrypted link required. */ +#define BLE_GATT_STATUS_ATTERR_UNSUPPORTED_GROUP_TYPE 0x0110 /**< ATT Error: Attribute type is not a supported grouping attribute. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_RESOURCES 0x0111 /**< ATT Error: Encrypted link required. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_BEGIN 0x0112 /**< ATT Error: Reserved for Future Use range #1 begin. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_END 0x017F /**< ATT Error: Reserved for Future Use range #1 end. */ +#define BLE_GATT_STATUS_ATTERR_APP_BEGIN 0x0180 /**< ATT Error: Application range begin. */ +#define BLE_GATT_STATUS_ATTERR_APP_END 0x019F /**< ATT Error: Application range end. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_BEGIN 0x01A0 /**< ATT Error: Reserved for Future Use range #2 begin. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_END 0x01DF /**< ATT Error: Reserved for Future Use range #2 end. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_BEGIN 0x01E0 /**< ATT Error: Reserved for Future Use range #3 begin. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_END 0x01FC /**< ATT Error: Reserved for Future Use range #3 end. */ +#define BLE_GATT_STATUS_ATTERR_CPS_CCCD_CONFIG_ERROR 0x01FD /**< ATT Common Profile and Service Error: Client Characteristic Configuration Descriptor improperly configured. */ +#define BLE_GATT_STATUS_ATTERR_CPS_PROC_ALR_IN_PROG 0x01FE /**< ATT Common Profile and Service Error: Procedure Already in Progress. */ +#define BLE_GATT_STATUS_ATTERR_CPS_OUT_OF_RANGE 0x01FF /**< ATT Common Profile and Service Error: Out Of Range. */ +/** @} */ + + +/** @defgroup BLE_GATT_CPF_FORMATS Characteristic Presentation Formats + * @note Found at http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml + * @{ */ +#define BLE_GATT_CPF_FORMAT_RFU 0x00 /**< Reserved For Future Use. */ +#define BLE_GATT_CPF_FORMAT_BOOLEAN 0x01 /**< Boolean. */ +#define BLE_GATT_CPF_FORMAT_2BIT 0x02 /**< Unsigned 2-bit integer. */ +#define BLE_GATT_CPF_FORMAT_NIBBLE 0x03 /**< Unsigned 4-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT8 0x04 /**< Unsigned 8-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT12 0x05 /**< Unsigned 12-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT16 0x06 /**< Unsigned 16-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT24 0x07 /**< Unsigned 24-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT32 0x08 /**< Unsigned 32-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT48 0x09 /**< Unsigned 48-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT64 0x0A /**< Unsigned 64-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT128 0x0B /**< Unsigned 128-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT8 0x0C /**< Signed 2-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT12 0x0D /**< Signed 12-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT16 0x0E /**< Signed 16-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT24 0x0F /**< Signed 24-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT32 0x10 /**< Signed 32-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT48 0x11 /**< Signed 48-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT64 0x12 /**< Signed 64-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT128 0x13 /**< Signed 128-bit integer. */ +#define BLE_GATT_CPF_FORMAT_FLOAT32 0x14 /**< IEEE-754 32-bit floating point. */ +#define BLE_GATT_CPF_FORMAT_FLOAT64 0x15 /**< IEEE-754 64-bit floating point. */ +#define BLE_GATT_CPF_FORMAT_SFLOAT 0x16 /**< IEEE-11073 16-bit SFLOAT. */ +#define BLE_GATT_CPF_FORMAT_FLOAT 0x17 /**< IEEE-11073 32-bit FLOAT. */ +#define BLE_GATT_CPF_FORMAT_DUINT16 0x18 /**< IEEE-20601 format. */ +#define BLE_GATT_CPF_FORMAT_UTF8S 0x19 /**< UTF-8 string. */ +#define BLE_GATT_CPF_FORMAT_UTF16S 0x1A /**< UTF-16 string. */ +#define BLE_GATT_CPF_FORMAT_STRUCT 0x1B /**< Opaque Structure. */ +/** @} */ + +/** @defgroup BLE_GATT_CPF_NAMESPACES GATT Bluetooth Namespaces + * @{ + */ +#define BLE_GATT_CPF_NAMESPACE_BTSIG 0x01 +#define BLE_GATT_CPF_NAMESPACE_DESCRIPTION_UNKNOWN 0x0000 +/** @} */ + +/** @} */ + +/** @addtogroup BLE_GATT_STRUCTURES Structures + * @{ */ + +/**@brief GATT Characteristic Properties. */ +typedef struct +{ + /* Standard properties */ + uint8_t broadcast :1; /**< Broadcasting of value permitted. */ + uint8_t read :1; /**< Reading value permitted. */ + uint8_t write_wo_resp :1; /**< Writing value with Write Command permitted. */ + uint8_t write :1; /**< Writing value with Write Request permitted. */ + uint8_t notify :1; /**< Notications of value permitted. */ + uint8_t indicate :1; /**< Indications of value permitted. */ + uint8_t auth_signed_wr :1; /**< Writing value with Signed Write Command permitted. */ +} ble_gatt_char_props_t; + +/**@brief GATT Characteristic Extended Properties. */ +typedef struct +{ + /* Extended properties */ + uint8_t reliable_wr :1; /**< Writing value with Queued Write Request permitted. */ + uint8_t wr_aux :1; /**< Writing the Characteristic User Description permitted. */ +} ble_gatt_char_ext_props_t; + +#endif // BLE_GATT_H__ + +/** @} */ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gattc.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,406 @@ +/* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_GATTC Generic Attribute Profile (GATT) Client + @{ + @brief Definitions and prototypes for the GATT Client interface. + */ + +#ifndef BLE_GATTC_H__ +#define BLE_GATTC_H__ + +#include "ble_gatt.h" +#include "ble_types.h" +#include "ble_ranges.h" +#include "nrf_svc.h" + +/** @addtogroup BLE_GATTC_ENUMERATIONS Enumerations + * @{ */ + +/**@brief GATTC API SVC numbers. */ +enum BLE_GATTC_SVCS +{ + SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER = BLE_GATTC_SVC_BASE, /**< Primary Service Discovery. */ + SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, /**< Relationship Discovery. */ + SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, /**< Characteristic Discovery. */ + SD_BLE_GATTC_DESCRIPTORS_DISCOVER, /**< Characteristic Descriptor Discovery. */ + SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, /**< Read Characteristic Value by UUID. */ + SD_BLE_GATTC_READ, /**< Generic read. */ + SD_BLE_GATTC_CHAR_VALUES_READ, /**< Read multiple Characteristic Values. */ + SD_BLE_GATTC_WRITE, /**< Generic write. */ + SD_BLE_GATTC_HV_CONFIRM /**< Handle Value Confirmation. */ +}; + +/** @} */ + +/** @addtogroup BLE_GATTC_DEFINES Defines + * @{ */ + +/** @defgroup BLE_ERRORS_GATTC SVC return values specific to GATTC + * @{ */ +#define BLE_ERROR_GATTC_PROC_NOT_PERMITTED (NRF_GATTC_ERR_BASE + 0x000) +/** @} */ + +/**@brief Last Attribute Handle. */ +#define BLE_GATTC_HANDLE_END 0xFFFF + +/** @} */ + +/** @addtogroup BLE_GATTC_STRUCTURES Structures + * @{ */ + +/**@brief Operation Handle Range. */ +typedef struct +{ + uint16_t start_handle; /**< Start Handle. */ + uint16_t end_handle; /**< End Handle. */ +} ble_gattc_handle_range_t; + + +/**@brief GATT service. */ +typedef struct +{ + ble_uuid_t uuid; /**< Service UUID. */ + ble_gattc_handle_range_t handle_range; /**< Service Handle Range. */ +} ble_gattc_service_t; + + +/**@brief GATT include. */ +typedef struct +{ + uint16_t handle; /**< Include Handle. */ + ble_gattc_service_t included_srvc; /**< Handle of the included service. */ +} ble_gattc_include_t; + + +/**@brief GATT characteristic. */ +typedef struct +{ + ble_uuid_t uuid; /**< Characteristic UUID. */ + ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ + uint8_t char_ext_props : 1; /**< Extended properties present. */ + uint16_t handle_decl; /**< Handle of the Characteristic Declaration. */ + uint16_t handle_value; /**< Handle of the Characteristic Value. */ +} ble_gattc_char_t; + + +/**@brief GATT descriptor. */ +typedef struct +{ + uint16_t handle; /**< Descriptor Handle. */ + ble_uuid_t uuid; /**< Descriptor UUID. */ +} ble_gattc_desc_t; + + +/**@brief Write Parameters. */ +typedef struct +{ + uint8_t write_op; /**< Write Operation to be performed, see @ref BLE_GATT_WRITE_OPS. */ + uint16_t handle; /**< Handle to the attribute to be written. */ + uint16_t offset; /**< Offset in bytes. @note For WRITE_CMD and WRITE_REQ, offset must be 0. */ + uint16_t len; /**< Length of data in bytes. */ + uint8_t* p_value; /**< Pointer to the value data. */ + uint8_t flags; /**< Flags, see @ref BLE_GATT_EXEC_WRITE_FLAGS. */ +} ble_gattc_write_params_t; + + +/** + * @brief GATT Client Event IDs. + */ +enum BLE_GATTC_EVTS +{ + BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP = BLE_GATTC_EVT_BASE, /**< Primary Service Discovery Response event. */ + BLE_GATTC_EVT_REL_DISC_RSP, /**< Relationship Discovery Response event. */ + BLE_GATTC_EVT_CHAR_DISC_RSP, /**< Characteristic Discovery Response event. */ + BLE_GATTC_EVT_DESC_DISC_RSP, /**< Descriptor Discovery Response event. */ + BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP, /**< Read By UUID Response event. */ + BLE_GATTC_EVT_READ_RSP, /**< Read Response event. */ + BLE_GATTC_EVT_CHAR_VALS_READ_RSP, /**< Read multiple Response event. */ + BLE_GATTC_EVT_WRITE_RSP, /**< Write Response event. */ + BLE_GATTC_EVT_HVX, /**< Handle Value Notification or Indication event. */ + BLE_GATTC_EVT_TIMEOUT /**< Timeout event. */ +}; + +/**@brief Event structure for BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Service count. */ + ble_gattc_service_t services[1]; /**< Service data, variable length. */ +} ble_gattc_evt_prim_srvc_disc_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_REL_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Include count. */ + ble_gattc_include_t includes[1]; /**< Include data, variable length. */ +} ble_gattc_evt_rel_disc_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_CHAR_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Characteristic count. */ + ble_gattc_char_t chars[1]; /**< Characteristic data, variable length. */ +} ble_gattc_evt_char_disc_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_DESC_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Descriptor count. */ + ble_gattc_desc_t descs[1]; /**< Descriptor data, variable length. */ +} ble_gattc_evt_desc_disc_rsp_t; + +/**@brief GATT read by UUID handle value pair. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint8_t *p_value; /**< Pointer to value, variable length (length available as value_len in ble_gattc_evt_read_by_uuid_rsp_t). + Please note that this pointer is absolute to the memory provided by the user when retrieving the event, + so it will effectively point to a location inside the handle_value array. */ +} ble_gattc_handle_value_t; + +/**@brief Event structure for BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP. */ +typedef struct +{ + uint16_t count; /**< Handle-Value Pair Count. */ + uint16_t value_len; /**< Length of the value in Handle-Value(s) list. */ + ble_gattc_handle_value_t handle_value[1]; /**< Handle-Value(s) list, variable length. */ +} ble_gattc_evt_char_val_by_uuid_read_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_READ_RSP. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint16_t offset; /**< Offset of the attribute data. */ + uint16_t len; /**< Attribute data length. */ + uint8_t data[1]; /**< Attribute data, variable length. */ +} ble_gattc_evt_read_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_CHAR_VALS_READ_RSP. */ +typedef struct +{ + uint16_t len; /**< Concatenated Attribute values length. */ + uint8_t values[1]; /**< Attribute values, variable length. */ +} ble_gattc_evt_char_vals_read_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_WRITE_RSP. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint8_t write_op; /**< Type of write operation, see @ref BLE_GATT_WRITE_OPS. */ + uint16_t offset; /**< Data Offset. */ + uint16_t len; /**< Data length. */ + uint8_t data[1]; /**< Data, variable length. */ +} ble_gattc_evt_write_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_HVX. */ +typedef struct +{ + uint16_t handle; /**< Handle to which the HVx operation applies. */ + uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ + uint16_t len; /**< Attribute data length. */ + uint8_t data[1]; /**< Attribute data, variable length. */ +} ble_gattc_evt_hvx_t; + +/**@brief Event structure for BLE_GATTC_EVT_TIMEOUT. */ +typedef struct +{ + uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ +} ble_gattc_evt_timeout_t; + +/**@brief GATTC event type. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occured. */ + uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ + uint16_t error_handle; /**< In case of error: The handle causing the error. In all other cases BLE_GATT_HANDLE_INVALID. */ + union + { + ble_gattc_evt_prim_srvc_disc_rsp_t prim_srvc_disc_rsp; /**< Primary Service Discovery Response Event Parameters. */ + ble_gattc_evt_rel_disc_rsp_t rel_disc_rsp; /**< Relationship Discovery Response Event Parameters. */ + ble_gattc_evt_char_disc_rsp_t char_disc_rsp; /**< Characteristic Discovery Response Event Parameters. */ + ble_gattc_evt_desc_disc_rsp_t desc_disc_rsp; /**< Descriptor Discovery Response Event Parameters. */ + ble_gattc_evt_char_val_by_uuid_read_rsp_t char_val_by_uuid_read_rsp; /**< Characteristic Value Read by UUID Response Event Parameters. */ + ble_gattc_evt_read_rsp_t read_rsp; /**< Read Response Event Parameters. */ + ble_gattc_evt_char_vals_read_rsp_t char_vals_read_rsp; /**< Characteristic Values Read Response Event Parameters. */ + ble_gattc_evt_write_rsp_t write_rsp; /**< Write Response Event Parameters. */ + ble_gattc_evt_hvx_t hvx; /**< Handle Value Notification/Indication Event Parameters. */ + ble_gattc_evt_timeout_t timeout; /**< Timeout Event Parameters. */ + } params; /**< Event Parameters. @note Only valid if @ref gatt_status == BLE_GATT_STATUS_SUCCESS. */ +} ble_gattc_evt_t; +/** @} */ + +/** @addtogroup BLE_GATTC_FUNCTIONS Functions + * @{ */ + +/**@brief Initiate or continue a GATT Primary Service Discovery procedure. + * + * @details This function initiates a Primary Service discovery, starting from the supplied handle. + * If the last service has not been reached, this must be called again with an updated start handle value to continue the search. + * + * @note If any of the discovered services have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with + * type BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] start_handle Handle to start searching from. + * @param[in] p_srvc_uuid Pointer to the service UUID to be found. If it is NULL, all primary services will be returned. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Primary Service Discovery procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER, uint32_t, sd_ble_gattc_primary_services_discover(uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const * const p_srvc_uuid)); + + +/**@brief Initiate or continue a GATT Relationship Discovery procedure. + * + * @details This function initiates the Find Included Services sub-procedure. If the last included service has not been reached, + * this must be called again with an updated handle range to continue the search. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Relationship Discovery procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, uint32_t, sd_ble_gattc_relationships_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); + + +/**@brief Initiate or continue a GATT Characteristic Discovery procedure. + * + * @details This function initiates a Characteristic discovery procedure. If the last Characteristic has not been reached, + * this must be called again with an updated handle range to continue the discovery. + * + * @note If any of the discovered characteristics have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with + * type BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Characteristic Discovery procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, uint32_t, sd_ble_gattc_characteristics_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); + + +/**@brief Initiate or continue a GATT Characteristic Descriptor Discovery procedure. + * + * @details This function initiates the Characteristic Descriptor discovery procedure. If the last Descriptor has not been reached, + * this must be called again with an updated handle range to continue the discovery. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range A pointer to the range of handles of the Characteristic to perform this procedure on. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Descriptor Discovery procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_DESCRIPTORS_DISCOVER, uint32_t, sd_ble_gattc_descriptors_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); + + +/**@brief Initiate or continue a GATT Read using Characteristic UUID procedure. + * + * @details This function initiates the Read using Characteristic UUID procedure. If the last Characteristic has not been reached, + * this must be called again with an updated handle range to continue the discovery. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_uuid Pointer to a Characteristic value UUID to read. + * @param[in] p_handle_range A pointer to the range of handles to perform this procedure on. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Read using Characteristic UUID procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, uint32_t, sd_ble_gattc_char_value_by_uuid_read(uint16_t conn_handle, ble_uuid_t const * const p_uuid, ble_gattc_handle_range_t const * const p_handle_range)); + + +/**@brief Initiate or continue a GATT Read (Long) Characteristic or Descriptor procedure. + * + * @details This function initiates a GATT Read (Long) Characteristic or Descriptor procedure. If the Characteristic or Descriptor + * to be read is longer than GATT_MTU - 1, this function must be called multiple times with appropriate offset to read the + * complete value. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] handle The handle of the attribute to be read. + * @param[in] offset Offset into the attribute value to be read. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Read (Long) procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_READ, uint32_t, sd_ble_gattc_read(uint16_t conn_handle, uint16_t handle, uint16_t offset)); + + +/**@brief Initiate a GATT Read Multiple Characteristic Values procedure. + * + * @details This function initiates a GATT Read Multiple Characteristic Values procedure. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. + * @param[in] handle_count The number of handles in p_handles. + * + * @return @ref NRF_SUCCESS Successfully started the Read Multiple Characteristic Values procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_CHAR_VALUES_READ, uint32_t, sd_ble_gattc_char_values_read(uint16_t conn_handle, uint16_t const * const p_handles, uint16_t handle_count)); + + +/**@brief Perform a Write (Characteristic Value or Descriptor, with or without response, signed or not, long or reliable) procedure. + * + * @details This function can perform all write procedures described in GATT. + * + * @note It is important to note that a write without response will <b>consume an application buffer</b>, and will therefore + * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. A write on the other hand will use the + * standard client internal buffer and thus will only generate a @ref BLE_GATTC_EVT_WRITE_RSP event as soon as the write response + * has been received from the peer. Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_write_params A pointer to a write parameters structure. + * + * @return @ref NRF_SUCCESS Successfully started the Write procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + * @return @ref NRF_ERROR_BUSY Procedure already in progress. + * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers left. + */ +SVCALL(SD_BLE_GATTC_WRITE, uint32_t, sd_ble_gattc_write(uint16_t conn_handle, ble_gattc_write_params_t const * const p_write_params)); + + +/**@brief Send a Handle Value Confirmation to the GATT Server. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] handle The handle of the attribute in the indication. + * + * @return @ref NRF_SUCCESS Successfully queued the Handle Value Confirmation for transmission. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_STATE No Indication pending to be confirmed. + * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle. + * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers left. + */ +SVCALL(SD_BLE_GATTC_HV_CONFIRM, uint32_t, sd_ble_gattc_hv_confirm(uint16_t conn_handle, uint16_t handle)); + +/** @} */ + +#endif /* BLE_GATTC_H__ */ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gatts.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,566 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_GATTS Generic Attribute Profile (GATT) Server + @{ + @brief Definitions and prototypes for the GATTS interface. + */ + +#ifndef BLE_GATTS_H__ +#define BLE_GATTS_H__ + +#include "ble_types.h" +#include "ble_ranges.h" +#include "ble_l2cap.h" +#include "ble_gap.h" +#include "ble_gatt.h" +#include "nrf_svc.h" + +/** @addtogroup BLE_GATTS_ENUMERATIONS Enumerations + * @{ */ + +/** + * @brief GATTS API SVC numbers. + */ +enum BLE_GATTS_SVCS +{ + SD_BLE_GATTS_SERVICE_ADD = BLE_GATTS_SVC_BASE, /**< Add a service. */ + SD_BLE_GATTS_INCLUDE_ADD, /**< Add an included service. */ + SD_BLE_GATTS_CHARACTERISTIC_ADD, /**< Add a characteristic. */ + SD_BLE_GATTS_DESCRIPTOR_ADD, /**< Add a generic attribute. */ + SD_BLE_GATTS_VALUE_SET, /**< Set an attribute value. */ + SD_BLE_GATTS_VALUE_GET, /**< Get an attribute value. */ + SD_BLE_GATTS_HVX, /**< Handle Value Notification or Indication. */ + SD_BLE_GATTS_SERVICE_CHANGED, /**< Perform a Service Changed Indication to one or more peers. */ + SD_BLE_GATTS_RW_AUTHORIZE_REPLY, /**< Reply to an authorization request for a read or write operation on one or more attributes. */ + SD_BLE_GATTS_SYS_ATTR_SET, /**< Set the persistent system attributes for a connection. */ + SD_BLE_GATTS_SYS_ATTR_GET, /**< Get updated persistent system attributes after terminating a connection. */ +}; + +/** @} */ + +/** @addtogroup BLE_GATTS_DEFINES Defines + * @{ */ + +/** @brief Only the default MTU size of 23 is currently supported. */ +#define GATT_RX_MTU 23 + +/** @defgroup BLE_ERRORS_GATTS SVC return values specific to GATTS + * @{ */ +#define BLE_ERROR_GATTS_INVALID_ATTR_TYPE (NRF_GATTS_ERR_BASE + 0x000) /**< Invalid attribute type. */ +#define BLE_ERROR_GATTS_SYS_ATTR_MISSING (NRF_GATTS_ERR_BASE + 0x001) /**< System Attributes missing. */ +/** @} */ + +/** @defgroup BLE_GATTS_ATTR_LENS_MAX Maximum attribute lengths + * @{ */ +#define BLE_GATTS_FIX_ATTR_LEN_MAX (510) /**< Maximum length for fixed length Attribute Values. */ +#define BLE_GATTS_VAR_ATTR_LEN_MAX (512) /**< Maximum length for variable length Attribute Values. */ +/** @} */ + +/** @defgroup BLE_GATTS_SRVC_TYPES GATT Server Service Types + * @{ */ +#define BLE_GATTS_SRVC_TYPE_INVALID 0x00 /**< Invalid Service Type. */ +#define BLE_GATTS_SRVC_TYPE_PRIMARY 0x01 /**< Primary Service. */ +#define BLE_GATTS_SRVC_TYPE_SECONDARY 0x02 /**< Secondary Type. */ +/** @} */ + + +/** @defgroup BLE_GATTS_ATTR_TYPES GATT Server Attribute Types + * @{ */ +#define BLE_GATTS_ATTR_TYPE_INVALID 0x00 /**< Invalid Attribute Type. */ +#define BLE_GATTS_ATTR_TYPE_PRIM_SRVC_DECL 0x01 /**< Primary Service Declaration. */ +#define BLE_GATTS_ATTR_TYPE_SEC_SRVC_DECL 0x02 /**< Secondary Service Declaration. */ +#define BLE_GATTS_ATTR_TYPE_INC_DECL 0x03 /**< Include Declaration. */ +#define BLE_GATTS_ATTR_TYPE_CHAR_DECL 0x04 /**< Characteristic Declaration. */ +#define BLE_GATTS_ATTR_TYPE_CHAR_VAL 0x05 /**< Characteristic Value. */ +#define BLE_GATTS_ATTR_TYPE_DESC 0x06 /**< Descriptor. */ +#define BLE_GATTS_ATTR_TYPE_OTHER 0x07 /**< Other, non-GATT specific type. */ +/** @} */ + + +/** @defgroup BLE_GATTS_OPS GATT Server Operations + * @{ */ +#define BLE_GATTS_OP_INVALID 0x00 /**< Invalid Operation. */ +#define BLE_GATTS_OP_WRITE_REQ 0x01 /**< Write Request. */ +#define BLE_GATTS_OP_WRITE_CMD 0x02 /**< Write Command. */ +#define BLE_GATTS_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ +#define BLE_GATTS_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ +#define BLE_GATTS_OP_EXEC_WRITE_REQ_CANCEL 0x05 /**< Execute Write Request: Cancel all prepared writes. */ +#define BLE_GATTS_OP_EXEC_WRITE_REQ_NOW 0x06 /**< Execute Write Request: Immediately execute all prepared writes. */ +/** @} */ + +/** @defgroup BLE_GATTS_VLOCS GATT Value Locations + * @{ */ +#define BLE_GATTS_VLOC_INVALID 0x00 /**< Invalid Location. */ +#define BLE_GATTS_VLOC_STACK 0x01 /**< Attribute Value is located in stack memory, no user memory is required. */ +#define BLE_GATTS_VLOC_USER 0x02 /**< Attribute Value is located in user memory. This requires the user to maintain a valid buffer through the lifetime of the attribute, since the stack + will read and write directly to the memory using the pointer provided in the APIs. There are no alignment requirements for the buffer. */ +/** @} */ + +/** @defgroup BLE_GATTS_AUTHORIZE_TYPES GATT Server Authorization Types + * @{ */ +#define BLE_GATTS_AUTHORIZE_TYPE_INVALID 0x00 /**< Invalid Type. */ +#define BLE_GATTS_AUTHORIZE_TYPE_READ 0x01 /**< Authorize a Read Operation. */ +#define BLE_GATTS_AUTHORIZE_TYPE_WRITE 0x02 /**< Authorize a Write Request Operation. */ +/** @} */ + + +/** @} */ + +/** @addtogroup BLE_GATTS_STRUCTURES Structures + * @{ */ + +/** + * @brief BLE GATTS init options + */ +typedef struct +{ + uint8_t service_changed:1; /**< Include the Service Changed characteristic in the local attributes. */ +} ble_gatts_enable_params_t; + +/**@brief Attribute metadata. */ +typedef struct +{ + ble_gap_conn_sec_mode_t read_perm; /**< Read permissions. */ + ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ + uint8_t vlen :1; /**< Variable length attribute. */ + uint8_t vloc :2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ + uint8_t rd_auth :1; /**< Read Authorization and value will be requested from the application on every read operation. */ + uint8_t wr_auth :1; /**< Write Authorization will be requested from the application on every Write Request operation (but not Write Command). */ +} ble_gatts_attr_md_t; + + +/**@brief GATT Attribute. */ +typedef struct +{ + ble_uuid_t* p_uuid; /**< Pointer to the attribute UUID. */ + ble_gatts_attr_md_t* p_attr_md; /**< Pointer to the attribute metadata structure. */ + uint16_t init_len; /**< Initial attribute value length in bytes. */ + uint16_t init_offs; /**< Initial attribute value offset in bytes. If different from zero, the first init_offs bytes of the attribute value will be left uninitialized. */ + uint16_t max_len; /**< Maximum attribute value length in bytes, see @ref BLE_GATTS_ATTR_LENS_MAX for maximum values. */ + uint8_t* p_value; /**< Pointer to the attribute data. Please note that if the @ref BLE_GATTS_VLOC_USER value location is selected in the attribute metadata, this will have to point to a buffer + that remains valid through the lifetime of the attribute. This excludes usage of automatic variables that may go out of scope or any other temporary location. + The stack may access that memory directly without the application's knowledge. */ +} ble_gatts_attr_t; + + +/**@brief GATT Attribute Context. */ +typedef struct +{ + ble_uuid_t srvc_uuid; /**< Service UUID. */ + ble_uuid_t char_uuid; /**< Characteristic UUID if applicable (BLE_UUID_TYPE_UNKNOWN if N/A). */ + ble_uuid_t desc_uuid; /**< Descriptor UUID if applicable (BLE_UUID_TYPE_UNKNOWN if N/A). */ + uint16_t srvc_handle; /**< Service Handle. */ + uint16_t value_handle; /**< Characteristic Handle if applicable (BLE_GATT_HANDLE_INVALID if N/A). */ + uint8_t type; /**< Attribute Type, see @ref BLE_GATTS_ATTR_TYPES. */ +} ble_gatts_attr_context_t; + + +/**@brief GATT Characteristic Presentation Format. */ +typedef struct +{ + uint8_t format; /**< Format of the value, see @ref BLE_GATT_CPF_FORMATS. */ + int8_t exponent; /**< Exponent for integer data types. */ + uint16_t unit; /**< UUID from Bluetooth Assigned Numbers. */ + uint8_t name_space; /**< Namespace from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ + uint16_t desc; /**< Namespace description from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ +} ble_gatts_char_pf_t; + + +/**@brief GATT Characteristic metadata. */ +typedef struct +{ + ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ + ble_gatt_char_ext_props_t char_ext_props; /**< Characteristic Extended Properties. */ + uint8_t* p_char_user_desc; /**< Pointer to a UTF-8, NULL if the descriptor is not required. */ + uint16_t char_user_desc_max_size; /**< The maximum size in bytes of the user description descriptor. */ + uint16_t char_user_desc_size; /**< The size of the user description, must be smaller or equal to char_user_desc_max_size. */ + ble_gatts_char_pf_t* p_char_pf; /**< Pointer to a presentation format structure or NULL if the descriptor is not required. */ + ble_gatts_attr_md_t* p_user_desc_md; /**< Attribute metadata for the User Description descriptor, or NULL for default values. */ + ble_gatts_attr_md_t* p_cccd_md; /**< Attribute metadata for the Client Characteristic Configuration Descriptor, or NULL for default values. */ + ble_gatts_attr_md_t* p_sccd_md; /**< Attribute metadata for the Server Characteristic Configuration Descriptor, or NULL for default values. */ +} ble_gatts_char_md_t; + + +/**@brief GATT Characteristic Definition Handles. */ +typedef struct +{ + uint16_t value_handle; /**< Handle to the characteristic value. */ + uint16_t user_desc_handle; /**< Handle to the User Description descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ + uint16_t cccd_handle; /**< Handle to the Client Characteristic Configuration Descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ + uint16_t sccd_handle; /**< Handle to the Server Characteristic Configuration Descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ +} ble_gatts_char_handles_t; + + +/**@brief GATT HVx parameters. */ +typedef struct +{ + uint16_t handle; /**< Characteristic Value Handle. */ + uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ + uint16_t offset; /**< Offset within the attribute value. */ + uint16_t* p_len; /**< Length in bytes to be written, length in bytes written after successful return. */ + uint8_t* p_data; /**< Actual data content, use NULL to use the current attribute value. */ +} ble_gatts_hvx_params_t; + +/**@brief GATT Read Authorization parameters. */ +typedef struct +{ + uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ + uint8_t update : 1; /**< If set, data supplied in p_data will be used in the ATT response. */ + uint16_t offset; /**< Offset of the attribute value being updated. */ + uint16_t len; /**< Length in bytes of the value in p_data pointer, see @ref BLE_GATTS_ATTR_LENS_MAX. */ + uint8_t* p_data; /**< Pointer to new value used to update the attribute value. */ +} ble_gatts_read_authorize_params_t; + +/**@brief GATT Write Authorisation parameters. */ +typedef struct +{ + uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ +} ble_gatts_write_authorize_params_t; + +/**@brief GATT Read or Write Authorize Reply parameters. */ +typedef struct +{ + uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ + union { + ble_gatts_read_authorize_params_t read; /**< Read authorization parameters. */ + ble_gatts_write_authorize_params_t write; /**< Write authorization parameters. */ + } params; +} ble_gatts_rw_authorize_reply_params_t; + + +/** + * @brief GATT Server Event IDs. + */ +enum BLE_GATTS_EVTS +{ + BLE_GATTS_EVT_WRITE = BLE_GATTS_EVT_BASE, /**< Write operation performed. */ + BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST, /**< Read/Write Authorization request. */ + BLE_GATTS_EVT_SYS_ATTR_MISSING, /**< A persistent system attribute access is pending, awaiting a sd_ble_gatts_sys_attr_set(). */ + BLE_GATTS_EVT_HVC, /**< Handle Value Confirmation. */ + BLE_GATTS_EVT_SC_CONFIRM, /**< Service Changed Confirmation. */ + BLE_GATTS_EVT_TIMEOUT /**< Timeout. */ +}; + + +/**@brief Event structure for BLE_GATTS_EVT_WRITE. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint8_t op; /**< Type of write operation, see @ref BLE_GATTS_OPS. */ + ble_gatts_attr_context_t context; /**< Attribute Context. */ + uint16_t offset; /**< Offset for the write operation. */ + uint16_t len; /**< Length of the incoming data. */ + uint8_t data[1]; /**< Incoming data, variable length. */ +} ble_gatts_evt_write_t; + +/**@brief Event structure for authorize read request. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + ble_gatts_attr_context_t context; /**< Attribute Context. */ + uint16_t offset; /**< Offset for the read operation. */ +} ble_gatts_evt_read_t; + +/**@brief Event structure for BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST. */ +typedef struct +{ + uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ + union { + ble_gatts_evt_read_t read; /**< Attribute Read Parameters. */ + ble_gatts_evt_write_t write; /**< Attribute Write Parameters. */ + } request; +} ble_gatts_evt_rw_authorize_request_t; + +/**@brief Event structure for BLE_GATTS_EVT_SYS_ATTR_MISSING. */ +typedef struct +{ + uint8_t hint; +} ble_gatts_evt_sys_attr_missing_t; + + +/**@brief Event structure for BLE_GATTS_EVT_HVC. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ +} ble_gatts_evt_hvc_t; + +/**@brief Event structure for BLE_GATTS_EVT_TIMEOUT. */ +typedef struct +{ + uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ +} ble_gatts_evt_timeout_t; + + +/**@brief GATT Server event callback event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occurred. */ + union + { + ble_gatts_evt_write_t write; /**< Write Event Parameters. */ + ble_gatts_evt_rw_authorize_request_t authorize_request; /**< Read or Write Authorize Request Parameters. */ + ble_gatts_evt_sys_attr_missing_t sys_attr_missing; /**< System attributes missing. */ + ble_gatts_evt_hvc_t hvc; /**< Handle Value Confirmation Event Parameters. */ + ble_gatts_evt_timeout_t timeout; /**< Timeout Event. */ + } params; +} ble_gatts_evt_t; + +/** @} */ + +/** @addtogroup BLE_GATTS_FUNCTIONS Functions + * @{ */ + +/**@brief Add a service declaration to the local server ATT table. + * + * @param[in] type Toggles between primary and secondary services, see @ref BLE_GATTS_SRVC_TYPES. + * @param[in] p_uuid Pointer to service UUID. + * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. + * + * @note Secondary Services are only relevant in the context of the entity that references them, it is therefore forbidden to + * add a secondary service declaration that is not referenced by another service later in the ATT table. + * + * @return @ref NRF_SUCCESS Successfully added a service declaration. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, Vendor Specific UUIDs need to be present in the table. + * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_GATTS_SERVICE_ADD, uint32_t, sd_ble_gatts_service_add(uint8_t type, ble_uuid_t const*const p_uuid, uint16_t *const p_handle)); + + +/**@brief Add an include declaration to the local server ATT table. + * + * @note It is currently only possible to add an include declaration to the last added service (i.e. only sequential addition is supported at this time). + * + * @note The included service must already be present in the ATT table prior to this call. + * + * @param[in] service_handle Handle of the service where the included service is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. + * @param[in] inc_srvc_handle Handle of the included service. + * @param[out] p_include_handle Pointer to a 16-bit word where the assigned handle will be stored. + * + * @return @ref NRF_SUCCESS Successfully added an include declaration. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, handle values need to match previously added services. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, self inclusions are not allowed. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. + */ +SVCALL(SD_BLE_GATTS_INCLUDE_ADD, uint32_t, sd_ble_gatts_include_add(uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *const p_include_handle)); + + +/**@brief Add a characteristic declaration, a characteristic value declaration and optional characteristic descriptor declarations to the local server ATT table. + * + * @note It is currently only possible to add a characteristic to the last added service (i.e. only sequential addition is supported at this time). + * + * @note Several restrictions apply to the parameters, such as matching permissions between the user description descriptor and the writeable auxiliaries bits, + * readable (no security) and writeable (selectable) CCCDs and SCCDs and valid presentation format values. + * + * @note If no metadata is provided for the optional descriptors, their permissions will be derived from the characteristic permissions. + * + * @param[in] service_handle Handle of the service where the characteristic is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. + * @param[in] p_char_md Characteristic metadata. + * @param[in] p_attr_char_value Pointer to the attribute structure corresponding to the characteristic value. + * @param[out] p_handles Pointer to the structure where the assigned handles will be stored. + * + * @return @ref NRF_SUCCESS Successfully added a characteristic. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, service handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required. + * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. + */ +SVCALL(SD_BLE_GATTS_CHARACTERISTIC_ADD, uint32_t, sd_ble_gatts_characteristic_add(uint16_t service_handle, ble_gatts_char_md_t const*const p_char_md, ble_gatts_attr_t const*const p_attr_char_value, ble_gatts_char_handles_t *const p_handles)); + + +/**@brief Add a descriptor to the local server ATT table. + * + * @note It is currently only possible to add a descriptor to the last added characteristic (i.e. only sequential addition is supported at this time). + * + * @param[in] char_handle Handle of the characteristic where the descriptor is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. + * @param[in] p_attr Pointer to the attribute structure. + * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. + * + * @return @ref NRF_SUCCESS Successfully added a descriptor. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, characteristic handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, a characteristic context is required. + * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. + */ +SVCALL(SD_BLE_GATTS_DESCRIPTOR_ADD, uint32_t, sd_ble_gatts_descriptor_add(uint16_t char_handle, ble_gatts_attr_t const * const p_attr, uint16_t* const p_handle)); + +/**@brief Set the value of a given attribute. + * + * @param[in] handle Attribute handle. + * @param[in] offset Offset in bytes to write from. + * @param[in,out] p_len Length in bytes to be written, length in bytes written after successful return. + * @param[in] p_value Pointer to a buffer (at least len bytes long) containing the desired attribute value. If value is stored in user memory, only the attribute length is updated when p_value == NULL. + * + * @return @ref NRF_SUCCESS Successfully set the value of the attribute. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. + * @return @ref NRF_ERROR_FORBIDDEN Forbidden handle supplied, certain attributes are not modifiable by the application. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. + */ +SVCALL(SD_BLE_GATTS_VALUE_SET, uint32_t, sd_ble_gatts_value_set(uint16_t handle, uint16_t offset, uint16_t* const p_len, uint8_t const * const p_value)); + +/**@brief Get the value of a given attribute. + * + * @param[in] handle Attribute handle. + * @param[in] offset Offset in bytes to read from. + * @param[in,out] p_len Length in bytes to be read, total length of attribute value (in bytes, starting from offset) after successful return. + * @param[in,out] p_data Pointer to a buffer (at least len bytes long) where to store the attribute value. Set to NULL to obtain the complete length of attribute value. + * + * @note If the attribute value is longer than the size of the supplied buffer, + * p_len will return the total attribute value length (excluding offset), + * and not the number of bytes actually returned in p_data. + * The application may use this information to allocate a suitable buffer size. + * + * @return @ref NRF_SUCCESS Successfully retrieved the value of the attribute. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. + */ +SVCALL(SD_BLE_GATTS_VALUE_GET, uint32_t, sd_ble_gatts_value_get(uint16_t handle, uint16_t offset, uint16_t *const p_len, uint8_t* const p_data)); + +/**@brief Notify or Indicate an attribute value. + * + * @details This function checks for the relevant Client Characteristic Configuration descriptor value to verify that the relevant operation + * (notification or indication) has been enabled by the client. It is also able to update the attribute value before issuing the PDU, so that + * the application can atomically perform a value update and a server initiated transaction with a single API call. + * If the application chooses to indicate an attribute value, a @ref BLE_GATTS_EVT_HVC will be sent up as soon as the confirmation arrives from + * the peer. + * + * @note The local attribute value may be updated even if an outgoing packet is not sent to the peer due to an error during execution. + * When receiveing the error codes @ref NRF_ERROR_INVALID_STATE, @ref NRF_ERROR_BUSY, @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING and + * @ref BLE_ERROR_NO_TX_BUFFERS the ATT table has been updated. + * The caller can check whether the value has been updated by looking at the contents of *(p_hvx_params->p_len). + * + * @note It is important to note that a notification will <b>consume an application buffer</b>, and will therefore + * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. An indication on the other hand will use the + * standard server internal buffer and thus will only generate a @ref BLE_GATTS_EVT_HVC event as soon as the confirmation + * has been received from the peer. Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_hvx_params Pointer to an HVx parameters structure. If the p_data member contains a non-NULL pointer the attribute value will be updated with + * the contents pointed by it before sending the notification or indication. + * + * @return @ref NRF_SUCCESS Successfully queued a notification or indication for transmission, and optionally updated the attribute value. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied. Only attributes added directly by the application are available to notify and indicate. + * @return @ref BLE_ERROR_GATTS_INVALID_ATTR_TYPE Invalid attribute type(s) supplied, only characteristic values may be notified and indicated. + * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, notifications or indications must be enabled in the CCCD. + * @return @ref NRF_ERROR_BUSY Procedure already in progress. + * @return @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. + * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers to send the data, applies only to notifications. + */ +SVCALL(SD_BLE_GATTS_HVX, uint32_t, sd_ble_gatts_hvx(uint16_t conn_handle, ble_gatts_hvx_params_t const*const p_hvx_params)); + +/**@brief Indicate the Service Changed attribute value. + * + * @details This call will send a Handle Value Indication to one or more peers connected to inform them that the attribute + * table layout has changed. As soon as the peer has confirmed the indication, a @ref BLE_GATTS_EVT_SC_CONFIRM event will + * be issued. + * + * @note Some of the restrictions and limitations that apply to @ref sd_ble_gatts_hvx also apply here. + * + * @param[in] conn_handle Connection handle. + * @param[in] start_handle Start of affected attribute handle range. + * @param[in] end_handle End of affected attribute handle range. + * + * @return @ref NRF_SUCCESS Successfully queued the Service Changed indication for transmission. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied, handles must be in the range populated by the application. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, notifications or indications must be enabled in the CCCD. + * @return @ref NRF_ERROR_BUSY Procedure already in progress. + * @return @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. + */ +SVCALL(SD_BLE_GATTS_SERVICE_CHANGED, uint32_t, sd_ble_gatts_service_changed(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle)); + +/**@brief Respond to a Read/Write authorization request. + * + * @note This call should only be used as a response to a @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST event issued to the application. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_rw_authorize_reply_params Pointer to a structure with the attribute provided by the application. + * + * @return @ref NRF_SUCCESS Successfully queued a response to the peer, and in the case of a write operation, ATT table updated. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_STATE No authorization request pending. + * @return @ref NRF_ERROR_INVALID_PARAM Authorization op invalid, + * or for Read Authorization reply: requested handles not replied with, + * or for Write Authorization reply: handle supplied does not match requested handle. + */ +SVCALL(SD_BLE_GATTS_RW_AUTHORIZE_REPLY, uint32_t, sd_ble_gatts_rw_authorize_reply(uint16_t conn_handle, ble_gatts_rw_authorize_reply_params_t const*const p_rw_authorize_reply_params)); + + +/**@brief Update persistent system attribute information. + * + * @details Supply to the stack information about persistent system attributes. + * This call is legal in the connected state only, and is usually + * made immediately after a connection is established and the bond identified. + * usually as a response to a BLE_GATTS_EVT_SYS_ATTR_MISSING. + * + * p_sysattrs may point directly to the application's stored copy of the struct. + * If the pointer is NULL, the system attribute info is initialized, assuming that + * the application does not have any previously saved data for this bond. + * + * @note The state of persistent system attributes is reset upon connection and then remembered for its duration. + * + * @note If this call returns with an error code different from @ref NRF_SUCCESS, the storage of persistent system attributes may have been completed only partially. + * This means that the state of the attribute table is undefined, and the application should either provide a new set of attributes using this same call or + * reset the SoftDevice to return to a known state. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_sys_attr_data Pointer to a saved copy of system attributes supplied to the stack, or NULL. + * @param[in] len Size of data pointed by p_sys_attr_data, in octets. + * + * @return @ref NRF_SUCCESS Successfully set the system attribute information. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_DATA Invalid data supplied, the data should be exactly the same as retrieved with @ref sd_ble_gatts_sys_attr_get. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_GATTS_SYS_ATTR_SET, uint32_t, sd_ble_gatts_sys_attr_set(uint16_t conn_handle, uint8_t const*const p_sys_attr_data, uint16_t len)); + + +/**@brief Retrieve persistent system attribute information from the stack. + * + * @details This call is used to retrieve information about values to be stored perisistently by the application + * after a connection has been terminated. When a new connection is made to the same bond, the values + * should be restored using @ref sd_ble_gatts_sys_attr_set. + * The data should be read before any new advertising is started, or any new connection established. The connection handle for + * the previous now defunct connection will remain valid until a new one is created to allow this API call to refer to it. + * + * @param[in] conn_handle Connection handle of the recently terminated connection. + * @param[in] p_sys_attr_data Pointer to a buffer where updated information about system attributes will be filled in. NULL can be provided to + * obtain the length of the data + * @param[in,out] p_len Size of application buffer if p_sys_attr_data is not NULL. Unconditially updated to actual length of system attribute data. + * + * @return @ref NRF_SUCCESS Successfully retrieved the system attribute information. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_DATA_SIZE The system attribute information did not fit into the provided buffer. + */ +SVCALL(SD_BLE_GATTS_SYS_ATTR_GET, uint32_t, sd_ble_gatts_sys_attr_get(uint16_t conn_handle, uint8_t * const p_sys_attr_data, uint16_t* const p_len)); + +/** @} */ + +#endif // BLE_GATTS_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_hci.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,96 @@ +/* + Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + + The information contained herein is confidential property of Nordic Semiconductor. The use, + copying, transfer or disclosure of such information is prohibited except by express written + agreement with Nordic Semiconductor. + */ +/** + @addtogroup BLE_COMMON + @{ +*/ + + +#ifndef BLE_HCI_H__ +#define BLE_HCI_H__ + +/** @defgroup BLE_HCI_STATUS_CODES Bluetooth status codes + * @{ */ + +#define BLE_HCI_STATUS_CODE_SUCCESS 0x00 +#define BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND 0x01 +#define BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER 0x02 +/*0x03 Hardware Failure +0x04 Page Timeout +*/ +#define BLE_HCI_AUTHENTICATION_FAILURE 0x05 +#define BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING 0x06 +#define BLE_HCI_MEMORY_CAPACITY_EXCEEDED 0x07 +#define BLE_HCI_CONNECTION_TIMEOUT 0x08 +/*0x09 Connection Limit Exceeded +0x0A Synchronous Connection Limit To A Device Exceeded +0x0B ACL Connection Already Exists*/ +#define BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED 0x0C +/*0x0D Connection Rejected due to Limited Resources +0x0E Connection Rejected Due To Security Reasons +0x0F Connection Rejected due to Unacceptable BD_ADDR +0x10 Connection Accept Timeout Exceeded +0x11 Unsupported Feature or Parameter Value*/ +#define BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS 0x12 +#define BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION 0x13 +#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES 0x14 +#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF 0x15 +#define BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION 0x16 +/* +0x17 Repeated Attempts +0x18 Pairing Not Allowed +0x19 Unknown LMP PDU +*/ +#define BLE_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1A +/* +0x1B SCO Offset Rejected +0x1C SCO Interval Rejected +0x1D SCO Air Mode Rejected*/ +#define BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS 0x1E +#define BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR 0x1F +/*0x20 Unsupported LMP Parameter Value +0x21 Role Change Not Allowed +*/ +#define BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT 0x22 +/*0x23 LMP Error Transaction Collision*/ +#define BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED 0x24 +/*0x25 Encryption Mode Not Acceptable +0x26 Link Key Can Not be Changed +0x27 Requested QoS Not Supported +*/ +#define BLE_HCI_INSTANT_PASSED 0x28 +#define BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED 0x29 +#define BLE_HCI_DIFFERENT_TRANSACTION_COLLISION 0x2A +/* +0x2B Reserved +0x2C QoS Unacceptable Parameter +0x2D QoS Rejected +0x2E Channel Classification Not Supported +0x2F Insufficient Security +0x30 Parameter Out Of Mandatory Range +0x31 Reserved +0x32 Role Switch Pending +0x33 Reserved +0x34 Reserved Slot Violation +0x35 Role Switch Failed +0x36 Extended Inquiry Response Too Large +0x37 Secure Simple Pairing Not Supported By Host. +0x38 Host Busy - Pairing +0x39 Connection Rejected due to No Suitable Channel Found*/ +#define BLE_HCI_CONTROLLER_BUSY 0x3A +#define BLE_HCI_CONN_INTERVAL_UNACCEPTABLE 0x3B +#define BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT 0x3C +#define BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE 0x3D +#define BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED 0x3E + +/** @} */ + + +#endif // BLE_HCI_H__ + +/** @} */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_l2cap.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,144 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_L2CAP Logical Link Control and Adaptation Protocol (L2CAP) + @{ + @brief Definitions and prototypes for the L2CAP interface. + */ + +#ifndef BLE_L2CAP_H__ +#define BLE_L2CAP_H__ + +#include "ble_types.h" +#include "ble_ranges.h" +#include "ble_err.h" +#include "nrf_svc.h" + +/**@addtogroup BLE_L2CAP_ENUMERATIONS Enumerations + * @{ */ + +/**@brief L2CAP API SVC numbers. */ +enum BLE_L2CAP_SVCS +{ + SD_BLE_L2CAP_CID_REGISTER = BLE_L2CAP_SVC_BASE, /**< Register a CID. */ + SD_BLE_L2CAP_CID_UNREGISTER, /**< Unregister a CID. */ + SD_BLE_L2CAP_TX /**< Transmit a packet. */ +}; + +/** @} */ + +/**@addtogroup BLE_L2CAP_DEFINES Defines + * @{ */ + +/**@defgroup BLE_ERRORS_L2CAP SVC return values specific to L2CAP + * @{ */ +#define BLE_ERROR_L2CAP_CID_IN_USE (NRF_L2CAP_ERR_BASE + 0x000) /**< CID already in use. */ +/** @} */ + +/**@brief Default L2CAP MTU. */ +#define BLE_L2CAP_MTU_DEF (23) + +/**@brief Invalid Channel Identifier. */ +#define BLE_L2CAP_CID_INVALID (0x0000) + +/**@brief Dynamic Channel Identifier base. */ +#define BLE_L2CAP_CID_DYN_BASE (0x0040) + +/**@brief Maximum amount of dynamic CIDs. */ +#define BLE_L2CAP_CID_DYN_MAX (8) + +/** @} */ + +/**@addtogroup BLE_L2CAP_STRUCTURES Structures + * @{ */ + +/**@brief Packet header format for L2CAP transmission. */ +typedef struct +{ + uint16_t len; /**< Length of valid info in data member. */ + uint16_t cid; /**< Channel ID on which packet is transmitted. */ +} ble_l2cap_header_t; + +/**@brief L2CAP Event IDs. */ +enum BLE_L2CAP_EVTS +{ + BLE_L2CAP_EVT_RX = BLE_L2CAP_EVT_BASE /**< L2CAP packet received. */ +}; + + +/**@brief L2CAP Received packet event report. */ +typedef struct +{ + ble_l2cap_header_t header; /** L2CAP packet header. */ + uint8_t data[1]; /**< Packet data, variable length. */ +} ble_l2cap_evt_rx_t; + + +/**@brief L2CAP event callback event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occured. */ + union + { + ble_l2cap_evt_rx_t rx; /**< RX Event parameters. */ + } params; +} ble_l2cap_evt_t; + + +/**@brief Register a CID with L2CAP. + * + * @details This registers a higher protocol layer with the L2CAP multiplexer, and is requried prior to all operations on the CID. + * + * @param[in] cid L2CAP CID. + * + * @return @ref NRF_SUCCESS Successfully registered a CID with the L2CAP layer. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, CID must be above @ref BLE_L2CAP_CID_DYN_BASE. + * @return @ref BLE_ERROR_L2CAP_CID_IN_USE L2CAP CID already in use. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_L2CAP_CID_REGISTER, uint32_t, sd_ble_l2cap_cid_register(uint16_t cid)); + +/**@brief Unregister a CID with L2CAP. + * + * @details This unregisters a previously registerd higher protocol layer with the L2CAP multiplexer. + * + * @param[in] cid L2CAP CID. + * + * @return @ref NRF_SUCCESS Successfully unregistered the CID. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_NOT_FOUND CID not previously registered. + */ +SVCALL(SD_BLE_L2CAP_CID_UNREGISTER, uint32_t, sd_ble_l2cap_cid_unregister(uint16_t cid)); + +/**@brief Transmit an L2CAP packet. + * + * @note It is important to note that a call to this function will <b>consume an application buffer</b>, and will therefore + * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. + * Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. + * + * @param[in] conn_handle Connection Handle. + * @param[in] p_header Pointer to a packet header containing length and CID. + * @param[in] p_data Pointer to the data to be transmitted. + * + * @return @ref NRF_SUCCESS Successfully queued an L2CAP packet for transmission. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, CIDs must be registered beforehand with @ref sd_ble_l2cap_cid_register. + * @return @ref NRF_ERROR_NOT_FOUND CID not found. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @return @ref BLE_ERROR_NO_TX_BUFFERS Not enough application buffers available. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, see @ref BLE_L2CAP_MTU_DEF. + */ +SVCALL(SD_BLE_L2CAP_TX, uint32_t, sd_ble_l2cap_tx(uint16_t conn_handle, ble_l2cap_header_t const * const p_header, uint8_t const * const p_data)); + +/** @} */ + +#endif // BLE_L2CAP_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_ranges.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,89 @@ +/* + Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + + The information contained herein is confidential property of Nordic Semiconductor. The use, + copying, transfer or disclosure of such information is prohibited except by express written + agreement with Nordic Semiconductor. + */ +/** + @addtogroup BLE_COMMON + @{ + @defgroup ble_ranges Module specific SVC and event number subranges + @{ + + @brief Definition of SVC and event number subranges for each API module. + + @note + SVCs and event numbers are split into subranges for each API module. + Each module receives its entire allocated range of SVC calls, whether implemented or not, + but return BLE_ERROR_NOT_SUPPORTED for unimplemented or undefined calls in its range. + + Note that the symbols BLE_<module>_SVC_LAST is the end of the allocated SVC range, + rather than the last SVC function call actually defined and implemented. + + Specific SVC and event values are defined in each module's ble_<module>.h file, + which defines names of each individual SVC code based on the range start value. +*/ + +#ifndef BLE_RANGES_H__ +#define BLE_RANGES_H__ + +#define BLE_SVC_BASE 0x60 +#define BLE_SVC_LAST 0x6B /* Total: 12. */ + +#define BLE_RESERVED_SVC_BASE 0x6C +#define BLE_RESERVED_SVC_LAST 0x6F /* Total: 4. */ + +#define BLE_GAP_SVC_BASE 0x70 +#define BLE_GAP_SVC_LAST 0x8F /* Total: 32. */ + +#define BLE_GATTC_SVC_BASE 0x90 +#define BLE_GATTC_SVC_LAST 0x9F /* Total: 16. */ + +#define BLE_GATTS_SVC_BASE 0xA0 +#define BLE_GATTS_SVC_LAST 0xAF /* Total: 16. */ + +#define BLE_L2CAP_SVC_BASE 0xB0 +#define BLE_L2CAP_SVC_LAST 0xBF /* Total: 16. */ + + +#define BLE_EVT_INVALID 0x00 + +#define BLE_EVT_BASE 0x01 +#define BLE_EVT_LAST 0x0F /* Total: 15. */ + +#define BLE_GAP_EVT_BASE 0x10 +#define BLE_GAP_EVT_LAST 0x2F /* Total: 32. */ + +#define BLE_GATTC_EVT_BASE 0x30 +#define BLE_GATTC_EVT_LAST 0x4F /* Total: 32. */ + +#define BLE_GATTS_EVT_BASE 0x50 +#define BLE_GATTS_EVT_LAST 0x6F /* Total: 32. */ + +#define BLE_L2CAP_EVT_BASE 0x70 +#define BLE_L2CAP_EVT_LAST 0x8F /* Total: 32. */ + +#define BLE_OPT_INVALID 0x00 /**< Invalid BLE Option. */ + +#define BLE_OPT_BASE 0x01 /**< Common BLE Option base. */ +#define BLE_OPT_LAST 0x1F /**< Total: 31. */ + +#define BLE_GAP_OPT_BASE 0x20 /**< GAP BLE Option base. */ +#define BLE_GAP_OPT_LAST 0x3F /**< Total: 32. */ + +#define BLE_GATTC_OPT_BASE 0x40 /**< GATTC BLE Option base. */ +#define BLE_GATTC_OPT_LAST 0x5F /**< Total: 32. */ + +#define BLE_GATTS_OPT_BASE 0x60 /**< GATTS BLE Option base. */ +#define BLE_GATTS_OPT_LAST 0x7F /**< Total: 32. */ + +#define BLE_L2CAP_OPT_BASE 0x80 /**< L2CAP BLE Option base. */ +#define BLE_L2CAP_OPT_LAST 0x9F /**< Total: 32. */ + +#endif /* BLE_RANGES_H__ */ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_types.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,169 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_COMMON + @{ + @defgroup ble_types Common types and macro definitions + @{ + + @brief Common types and macro definitions for the S110 SoftDevice. + */ + +#ifndef BLE_TYPES_H__ +#define BLE_TYPES_H__ + +#include <stdint.h> + +/** @addtogroup BLE_COMMON_DEFINES Defines + * @{ */ + +/** @defgroup BLE_CONN_HANDLES BLE Connection Handles + * @{ */ +#define BLE_CONN_HANDLE_INVALID 0xFFFF /**< Invalid Connection Handle. */ +#define BLE_CONN_HANDLE_ALL 0xFFFE /**< Applies to all Connection Handles. */ +/** @} */ + + +/** @defgroup BLE_UUID_VALUES Assigned Values for BLE UUIDs + * @{ */ +/* Generic UUIDs, applicable to all services */ +#define BLE_UUID_UNKNOWN 0x0000 /**< Reserved UUID. */ +#define BLE_UUID_SERVICE_PRIMARY 0x2800 /**< Primary Service. */ +#define BLE_UUID_SERVICE_SECONDARY 0x2801 /**< Secondary Service. */ +#define BLE_UUID_SERVICE_INCLUDE 0x2802 /**< Include. */ +#define BLE_UUID_CHARACTERISTIC 0x2803 /**< Characteristic. */ +#define BLE_UUID_DESCRIPTOR_CHAR_EXT_PROP 0x2900 /**< Characteristic Extended Properties Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CHAR_USER_DESC 0x2901 /**< Characteristic User Description Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG 0x2902 /**< Client Characteristic Configuration Descriptor. */ +#define BLE_UUID_DESCRIPTOR_SERVER_CHAR_CONFIG 0x2903 /**< Server Characteristic Configuration Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT 0x2904 /**< Characteristic Presentation Format Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CHAR_AGGREGATE_FORMAT 0x2905 /**< Characteristic Aggregate Format Descriptor. */ +/* GATT specific UUIDs */ +#define BLE_UUID_GATT 0x1801 /**< Generic Attribute Profile. */ +#define BLE_UUID_GATT_CHARACTERISTIC_SERVICE_CHANGED 0x2A05 /**< Service Changed Characteristic. */ +/* GAP specific UUIDs */ +#define BLE_UUID_GAP 0x1800 /**< Generic Access Profile. */ +#define BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME 0x2A00 /**< Device Name Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE 0x2A01 /**< Appearance Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_PPF 0x2A02 /**< Peripheral Privacy Flag Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_RECONN_ADDR 0x2A03 /**< Reconnection Address Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_PPCP 0x2A04 /**< Peripheral Preferred Connection Parameters Characteristic. */ +/** @} */ + + +/** @defgroup BLE_UUID_TYPES Types of UUID + * @{ */ +#define BLE_UUID_TYPE_UNKNOWN 0x00 /**< Invalid UUID type. */ +#define BLE_UUID_TYPE_BLE 0x01 /**< Bluetooth SIG UUID (16-bit). */ +#define BLE_UUID_TYPE_VENDOR_BEGIN 0x02 /**< Vendor UUID types start at this index (128-bit). */ +/** @} */ + + +/** @defgroup BLE_APPEARANCES Bluetooth Appearance values + * @note Retrieved from http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml + * @{ */ +#define BLE_APPEARANCE_UNKNOWN 0 /**< Unknown. */ +#define BLE_APPEARANCE_GENERIC_PHONE 64 /**< Generic Phone. */ +#define BLE_APPEARANCE_GENERIC_COMPUTER 128 /**< Generic Computer. */ +#define BLE_APPEARANCE_GENERIC_WATCH 192 /**< Generic Watch. */ +#define BLE_APPEARANCE_WATCH_SPORTS_WATCH 193 /**< Watch: Sports Watch. */ +#define BLE_APPEARANCE_GENERIC_CLOCK 256 /**< Generic Clock. */ +#define BLE_APPEARANCE_GENERIC_DISPLAY 320 /**< Generic Display. */ +#define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL 384 /**< Generic Remote Control. */ +#define BLE_APPEARANCE_GENERIC_EYE_GLASSES 448 /**< Generic Eye-glasses. */ +#define BLE_APPEARANCE_GENERIC_TAG 512 /**< Generic Tag. */ +#define BLE_APPEARANCE_GENERIC_KEYRING 576 /**< Generic Keyring. */ +#define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 640 /**< Generic Media Player. */ +#define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 704 /**< Generic Barcode Scanner. */ +#define BLE_APPEARANCE_GENERIC_THERMOMETER 768 /**< Generic Thermometer. */ +#define BLE_APPEARANCE_THERMOMETER_EAR 769 /**< Thermometer: Ear. */ +#define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR 832 /**< Generic Heart rate Sensor. */ +#define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT 833 /**< Heart Rate Sensor: Heart Rate Belt. */ +#define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 896 /**< Generic Blood Pressure. */ +#define BLE_APPEARANCE_BLOOD_PRESSURE_ARM 897 /**< Blood Pressure: Arm. */ +#define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 898 /**< Blood Pressure: Wrist. */ +#define BLE_APPEARANCE_GENERIC_HID 960 /**< Human Interface Device (HID). */ +#define BLE_APPEARANCE_HID_KEYBOARD 961 /**< Keyboard (HID Subtype). */ +#define BLE_APPEARANCE_HID_MOUSE 962 /**< Mouse (HID Subtype). */ +#define BLE_APPEARANCE_HID_JOYSTICK 963 /**< Joystiq (HID Subtype). */ +#define BLE_APPEARANCE_HID_GAMEPAD 964 /**< Gamepad (HID Subtype). */ +#define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE 965 /**< Digitizer Tablet (HID Subtype). */ +#define BLE_APPEARANCE_HID_CARD_READER 966 /**< Card Reader (HID Subtype). */ +#define BLE_APPEARANCE_HID_DIGITAL_PEN 967 /**< Digital Pen (HID Subtype). */ +#define BLE_APPEARANCE_HID_BARCODE 968 /**< Barcode Scanner (HID Subtype). */ +#define BLE_APPEARANCE_GENERIC_GLUCOSE_METER 1024 /**< Generic Glucose Meter. */ +#define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR 1088 /**< Generic Running Walking Sensor. */ +#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE 1089 /**< Running Walking Sensor: In-Shoe. */ +#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE 1090 /**< Running Walking Sensor: On-Shoe. */ +#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP 1091 /**< Running Walking Sensor: On-Hip. */ +#define BLE_APPEARANCE_GENERIC_CYCLING 1152 /**< Generic Cycling. */ +#define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER 1153 /**< Cycling: Cycling Computer. */ +#define BLE_APPEARANCE_CYCLING_SPEED_SENSOR 1154 /**< Cycling: Speed Sensor. */ +#define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR 1155 /**< Cycling: Cadence Sensor. */ +#define BLE_APPEARANCE_CYCLING_POWER_SENSOR 1156 /**< Cycling: Power Sensor. */ +#define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR 1157 /**< Cycling: Speed and Cadence Sensor. */ +#define BLE_APPEARANCE_GENERIC_PULSE_OXIMETER 3136 /**< Generic Pulse Oximeter. */ +#define BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 3137 /**< Fingertip (Pulse Oximeter subtype). */ +#define BLE_APPEARANCE_PULSE_OXIMETER_WRIST_WORN 3138 /**< Wrist Worn(Pulse Oximeter subtype). */ +#define BLE_APPEARANCE_GENERIC_WEIGHT_SCALE 3200 /**< Generic Weight Scale. */ +#define BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS_ACT 5184 /**< Generic Outdoor Sports Activity. */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_DISP 5185 /**< Location Display Device (Outdoor Sports Activity subtype). */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_DISP 5186 /**< Location and Navigation Display Device (Outdoor Sports Activity subtype). */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_POD 5187 /**< Location Pod (Outdoor Sports Activity subtype). */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_POD 5188 /**< Location and Navigation Pod (Outdoor Sports Activity subtype). */ +/** @} */ + +/** @brief Set .type and .uuid fields of ble_uuid_struct to specified uuid value. */ +#define BLE_UUID_BLE_ASSIGN(instance, value) do {\ + instance.type = BLE_UUID_TYPE_BLE; \ + instance.uuid = value;} while(0) + +/** @brief Copy type and uuid members from src to dst ble_uuid_t pointer. Both pointers must be valid/non-null. */ +#define BLE_UUID_COPY_PTR(dst, src) do {\ + (dst)->type = (src)->type; \ + (dst)->uuid = (src)->uuid;} while(0) + +/** @brief Copy type and uuid members from src to dst ble_uuid_t struct. */ +#define BLE_UUID_COPY_INST(dst, src) do {\ + (dst).type = (src).type; \ + (dst).uuid = (src).uuid;} while(0) + +/** @brief Compare for equality both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ +#define BLE_UUID_EQ(p_uuid1, p_uuid2) \ + (((p_uuid1)->type == (p_uuid2)->type) && ((p_uuid1)->uuid == (p_uuid2)->uuid)) + +/** @brief Compare for difference both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ +#define BLE_UUID_NEQ(p_uuid1, p_uuid2) \ + (((p_uuid1)->type != (p_uuid2)->type) || ((p_uuid1)->uuid != (p_uuid2)->uuid)) + +/** @} */ + +/** @addtogroup BLE_TYPES_STRUCTURES Structures + * @{ */ + +/** @brief 128 bit UUID values. */ +typedef struct +{ + unsigned char uuid128[16]; +} ble_uuid128_t; + +/** @brief Bluetooth Low Energy UUID type, encapsulates both 16-bit and 128-bit UUIDs. */ +typedef struct +{ + uint16_t uuid; /**< 16-bit UUID value or octets 12-13 of 128-bit UUID. */ + uint8_t type; /**< UUID type, see @ref BLE_UUID_TYPES. If type is BLE_UUID_TYPE_UNKNOWN, the value of uuid is undefined. */ +} ble_uuid_t; + +/** @} */ + +#endif /* BLE_TYPES_H__ */ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_error.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + /** + @defgroup nrf_error SoftDevice Global Error Codes + @{ + + @brief Global Error definitions +*/ + +/* Header guard */ +#ifndef NRF_ERROR_H__ +#define NRF_ERROR_H__ + +/** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions + * @{ */ +#define NRF_ERROR_BASE_NUM (0x0) ///< Global error base +#define NRF_ERROR_SDM_BASE_NUM (0x1000) ///< SDM error base +#define NRF_ERROR_SOC_BASE_NUM (0x2000) ///< SoC error base +#define NRF_ERROR_STK_BASE_NUM (0x3000) ///< STK error base +/** @} */ + +#define NRF_SUCCESS (NRF_ERROR_BASE_NUM + 0) ///< Successful command +#define NRF_ERROR_SVC_HANDLER_MISSING (NRF_ERROR_BASE_NUM + 1) ///< SVC handler is missing +#define NRF_ERROR_SOFTDEVICE_NOT_ENABLED (NRF_ERROR_BASE_NUM + 2) ///< SoftDevice has not been enabled +#define NRF_ERROR_INTERNAL (NRF_ERROR_BASE_NUM + 3) ///< Internal Error +#define NRF_ERROR_NO_MEM (NRF_ERROR_BASE_NUM + 4) ///< No Memory for operation +#define NRF_ERROR_NOT_FOUND (NRF_ERROR_BASE_NUM + 5) ///< Not found +#define NRF_ERROR_NOT_SUPPORTED (NRF_ERROR_BASE_NUM + 6) ///< Not supported +#define NRF_ERROR_INVALID_PARAM (NRF_ERROR_BASE_NUM + 7) ///< Invalid Parameter +#define NRF_ERROR_INVALID_STATE (NRF_ERROR_BASE_NUM + 8) ///< Invalid state, operation disallowed in this state +#define NRF_ERROR_INVALID_LENGTH (NRF_ERROR_BASE_NUM + 9) ///< Invalid Length +#define NRF_ERROR_INVALID_FLAGS (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags +#define NRF_ERROR_INVALID_DATA (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data +#define NRF_ERROR_DATA_SIZE (NRF_ERROR_BASE_NUM + 12) ///< Data size exceeds limit +#define NRF_ERROR_TIMEOUT (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out +#define NRF_ERROR_NULL (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer +#define NRF_ERROR_FORBIDDEN (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation +#define NRF_ERROR_INVALID_ADDR (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address +#define NRF_ERROR_BUSY (NRF_ERROR_BASE_NUM + 17) ///< Busy + +#endif // NRF_ERROR_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_error_sdm.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + /** + @addtogroup nrf_sdm_api + @{ + @defgroup nrf_sdm_error SoftDevice Manager Error Codes + @{ + + @brief Error definitions for the SDM API +*/ + +/* Header guard */ +#ifndef NRF_ERROR_SDM_H__ +#define NRF_ERROR_SDM_H__ + +#include "nrf_error.h" + +#define NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN (NRF_ERROR_SDM_BASE_NUM + 0) ///< Unknown lfclk source +#define NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION (NRF_ERROR_SDM_BASE_NUM + 1) ///< Incorrect interrupt configuration (can be caused by using illegal priority levels, or having enabled SoftDevice interrupts) +#define NRF_ERROR_SDM_INCORRECT_CLENR0 (NRF_ERROR_SDM_BASE_NUM + 2) ///< Incorrect CLENR0 (can be caused by erronous SoftDevice flashing) + +#endif // NRF_ERROR_SDM_H__ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_error_soc.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + /** + @addtogroup nrf_soc_api + @{ + @defgroup nrf_soc_error SoC Library Error Codes + @{ + + @brief Error definitions for the SoC library + +*/ + +/* Header guard */ +#ifndef NRF_ERROR_SOC_H__ +#define NRF_ERROR_SOC_H__ + +#include "nrf_error.h" + +/* Mutex Errors */ +#define NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN (NRF_ERROR_SOC_BASE_NUM + 0) ///< Mutex already taken + +/* NVIC errors */ +#define NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE (NRF_ERROR_SOC_BASE_NUM + 1) ///< NVIC interrupt not available +#define NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED (NRF_ERROR_SOC_BASE_NUM + 2) ///< NVIC interrupt priority not allowed +#define NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 3) ///< NVIC should not return + +/* Power errors */ +#define NRF_ERROR_SOC_POWER_MODE_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 4) ///< Power mode unknown +#define NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 5) ///< Power POF threshold unknown +#define NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 6) ///< Power off should not return + +/* Rand errors */ +#define NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES (NRF_ERROR_SOC_BASE_NUM + 7) ///< RAND not enough values + +/* PPI errors */ +#define NRF_ERROR_SOC_PPI_INVALID_CHANNEL (NRF_ERROR_SOC_BASE_NUM + 8) ///< Invalid PPI Channel +#define NRF_ERROR_SOC_PPI_INVALID_GROUP (NRF_ERROR_SOC_BASE_NUM + 9) ///< Invalid PPI Group + +#endif // NRF_ERROR_SOC_H__ +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_mbr.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @defgroup nrf_mbr_api Master Boot Record API + @{ + + @brief APIs for updating SoftDevice and BootLoader + +*/ + +/* Header guard */ +#ifndef NRF_MBR_H__ +#define NRF_MBR_H__ + +#include "nrf_svc.h" +#include <stdint.h> + + +/** @addtogroup NRF_MBR_DEFINES Defines + * @{ */ + +/**@brief MBR SVC Base number. */ +#define MBR_SVC_BASE 0x18 +/** @} */ + +/** @addtogroup NRF_MBR_ENUMS Enumerations + * @{ */ + +/**@brief nRF Master Boot Record API SVC numbers. */ +enum NRF_MBR_SVCS +{ + SD_MBR_COMMAND = MBR_SVC_BASE, /**< ::sd_mbr_command */ +}; + +/**@brief Possible values for ::sd_mbr_command_t.command */ +enum NRF_MBR_COMMANDS +{ + SD_MBR_COMMAND_COPY_BL, /**< Copy a new a new BootLoader. @see sd_mbr_command_copy_bl_t */ + SD_MBR_COMMAND_COPY_SD, /**< Copy a new SoftDevice. @see ::sd_mbr_command_copy_sd_t*/ + SD_MBR_COMMAND_INIT_SD, /**< Init forwarding interrupts to SD, and run reset function in SD*/ + SD_MBR_COMMAND_COMPARE, /**< This command works like memcmp. @see ::sd_mbr_command_compare_t*/ + SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET, /**< Start forwarding all exception to this address @see ::sd_mbr_command_vector_table_base_set_t*/ +}; + +/** @} */ + +/** @addtogroup NRF_MBR_TYPES Types + * @{ */ + +/**@brief This command copies part of a new SoftDevice + * The destination area is erased before copying. + * If dst is in the middle of a flash page, that whole flash page will be erased. + * If (dst+len) is in the middle of a flash page, that whole flash page will be erased. + * + * The user of this function is responsible for setting the PROTENSET registers. + * + * @retval ::NRF_SUCCESS indicates that the contents of the memory blocks where copied correctly. + * @retval ::NRF_ERROR_INTERNAL indicates that the contents of the memory blocks where not verified correctly after copying. + */ +typedef struct +{ + uint32_t *src; /**< Pointer to the source of data to be copied.*/ + uint32_t *dst; /**< Pointer to the destination where the content is to be copied.*/ + uint32_t len; /**< Number of 32 bit words to copy. Must be a multiple of 256 words*/ +}sd_mbr_command_copy_sd_t; + + +/**@brief This command works like memcmp, but takes the length in words. + * + * @retval ::NRF_SUCCESS indicates that the contents of both memory blocks are equal. + * @retval ::NRF_ERROR_NULL indicates that the contents of the memory blocks are not equal. + */ +typedef struct +{ + uint32_t *ptr1; /**< Pointer to block of memory */ + uint32_t *ptr2; /**< Pointer to block of memory */ + uint32_t len; /**< Number of 32 bit words to compare*/ +}sd_mbr_command_compare_t; + + +/**@brief This command copies a new BootLoader. + * With this command, destination of BootLoader is always the address written in NRF_UICR->BOOTADDR. + * + * Destination is erased by this function. + * If (destination+bl_len) is in the middle of a flash page, that whole flash page will be erased. + * + * This function will use PROTENSET to protect the flash that is not intended to be written. + * + * On Success, this function will not return. It will start the new BootLoader from reset-vector as normal. + * + * @retval ::NRF_ERROR_INVALID_STATE indicates that something was wrong. + * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. + * @retval ::NRF_ERROR_FORBIDDEN if NRF_UICR->BOOTADDR is not set + * @retval ::NRF_ERROR_INVALID_LENGTH is invalid. + */ +typedef struct +{ + uint32_t *bl_src; /**< Pointer to the source of the Bootloader to be be copied.*/ + uint32_t bl_len; /**< Number of 32 bit words to copy for BootLoader */ +}sd_mbr_command_copy_bl_t; + +/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the MBR + * + * Once this function has been called, this address is where the MBR will start to forward interrupts to after a reset. + * + * To restore default forwarding thiss function should be called with @param address set to 0. + * The MBR will then start forwarding to interrupts to the adress in NFR_UICR->BOOTADDR or to the SoftDevice if the BOOTADDR is not set. + * + * @retval ::NRF_SUCCESS + */ +typedef struct +{ + uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ +}sd_mbr_command_vector_table_base_set_t; + +typedef struct +{ + uint32_t command; /**< type of command to be issued see @ref NRF_MBR_COMMANDS. */ + union + { + sd_mbr_command_copy_sd_t copy_sd; /**< Parameters for copy*/ + sd_mbr_command_copy_bl_t copy_bl; /**< Parameters for copy SoftDevice and BootLoader*/ + sd_mbr_command_compare_t compare; /**< Parameters for verify*/ + sd_mbr_command_vector_table_base_set_t base_set; /**< Parameters for vector table base set.*/ + } params; +}sd_mbr_command_t; + +/** @} */ + +/** @addtogroup NRF_MBR_FUNCTIONS Functions + * @{ */ + +/**@brief Issue Master Boot Record commands + * + * Commands used when updating a SoftDevice and bootloader + * + * @param[in] param Pointer to a struct describing the command + * + *@note for retvals see ::sd_mbr_command_copy_sd_t ::sd_mbr_command_copy_bl_t ::sd_mbr_command_compare_t + +*/ +SVCALL(SD_MBR_COMMAND, uint32_t, sd_mbr_command(sd_mbr_command_t* param)); + +/** @} */ +#endif // NRF_MBR_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_sdm.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,167 @@ +/* + * Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @defgroup nrf_sdm_api SoftDevice Manager API + @{ + + @brief APIs for SoftDevice management. + +*/ + +/* Header guard */ +#ifndef NRF_SDM_H__ +#define NRF_SDM_H__ + +#include "nrf_svc.h" +#include "nrf51.h" +#include "nrf_soc.h" +#include "nrf_error_sdm.h" + +/** @addtogroup NRF_SDM_DEFINES Defines + * @{ */ + +/**@brief SoftDevice Manager SVC Base number. */ +#define SDM_SVC_BASE (0x10) + +/** @} */ + +/** @addtogroup NRF_SDM_ENUMS Enumerations + * @{ */ + +/**@brief nRF SoftDevice Manager API SVC numbers. */ +enum NRF_SD_SVCS +{ + SD_SOFTDEVICE_ENABLE = SDM_SVC_BASE, /**< ::sd_softdevice_enable */ + SD_SOFTDEVICE_DISABLE, /**< ::sd_softdevice_disable */ + SD_SOFTDEVICE_IS_ENABLED, /**< ::sd_softdevice_is_enabled */ + SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, /**< ::sd_softdevice_vector_table_base_set */ + SVC_SDM_LAST /**< Placeholder for last SDM SVC */ +}; + +/**@brief Possible lfclk oscillator sources. */ +enum NRF_CLOCK_LFCLKSRCS +{ + NRF_CLOCK_LFCLKSRC_SYNTH_250_PPM, /**< LFCLK Synthesized from HFCLK. */ + NRF_CLOCK_LFCLKSRC_XTAL_500_PPM, /**< LFCLK crystal oscillator 500 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_250_PPM, /**< LFCLK crystal oscillator 250 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_150_PPM, /**< LFCLK crystal oscillator 150 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_100_PPM, /**< LFCLK crystal oscillator 100 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_75_PPM, /**< LFCLK crystal oscillator 75 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_50_PPM, /**< LFCLK crystal oscillator 50 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_30_PPM, /**< LFCLK crystal oscillator 30 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_20_PPM, /**< LFCLK crystal oscillator 20 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_250MS_CALIBRATION, /**< LFCLK RC oscillator, 250ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_500MS_CALIBRATION, /**< LFCLK RC oscillator, 500ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_1000MS_CALIBRATION, /**< LFCLK RC oscillator, 1000ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_2000MS_CALIBRATION, /**< LFCLK RC oscillator, 2000ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_4000MS_CALIBRATION, /**< LFCLK RC oscillator, 4000ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_8000MS_CALIBRATION, /**< LFCLK RC oscillator, 8000ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_1000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 1000ms, if changed above a threshold, a calibration is done.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_2000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 2000ms, if changed above a threshold, a calibration is done.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_4000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 4000ms, if changed above a threshold, a calibration is done.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_8000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 8000ms, if changed above a threshold, a calibration is done.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_16000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 16000ms, if changed above a threshold, a calibration is done.*/ +}; + +/** @} */ + +/** @addtogroup NRF_SDM_TYPES Types + * @{ */ + +/**@brief Type representing lfclk oscillator source. */ +typedef uint32_t nrf_clock_lfclksrc_t; + + +/**@brief SoftDevice Assertion Handler type. + * + * When an unexpected error occurs within the SoftDevice it will call the SoftDevice assertion handler callback. + * The protocol stack will be in an undefined state when this happens and the only way to recover will be to + * perform a reset, using e.g. CMSIS NVIC_SystemReset(). + * + * @note This callback is executed in HardFault context, thus SVC functions cannot be called from the SoftDevice assert callback. + * + * @param[in] pc The program counter of the failed assert. + * @param[in] line_number Line number where the assert failed. + * @param[in] file_name File name where the assert failed. + */ +typedef void (*softdevice_assertion_handler_t)(uint32_t pc, uint16_t line_number, const uint8_t * p_file_name); + +/** @} */ + +/** @addtogroup NRF_SDM_FUNCTIONS Functions + * @{ */ + +/**@brief Enables the SoftDevice and by extension the protocol stack. + * + * Idempotent function to enable the SoftDevice. + * + * @note Some care must be taken if a low frequency clock source is already running when calling this function: + * If the LF clock has a different source then the one currently running, it will be stopped. Then, the new + * clock source will be started. + * + * @note This function has no effect when returning with an error. + * + * @post If return code is ::NRF_SUCCESS + * - SoC library and protocol stack APIs are made available + * - A portion of RAM will be unavailable (see relevant SDS documentation) + * - Some peripherals will be unavailable or available only through the SoC API (see relevant SDS documentation) + * - Interrupts will not arrive from protected peripherals or interrupts + * - nrf_nvic_ functions must be used instead of CMSIS NVIC_ functions for reliable usage of the softdevice. + * - Interrupt latency may be affected by the SoftDevice (see relevant SDS documentation) + * - Chosen low frequency clock source will be running + * + * @param clock_source Low frequency clock source and accuracy. (Note: In the case of XTAL source, the PPM accuracy of the chosen clock source must be greater than or equal to the actual characteristics of your XTAL clock). + * @param assertion_handler Callback for SoftDevice assertions. + * + * @retval ::NRF_SUCCESS + * @retval ::NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION SoftDeviceinterrupt is already enabled, or an enabled interrupt has an illegal priority level + * @retval ::NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN Unknown low frequency clock source selected + */ +SVCALL(SD_SOFTDEVICE_ENABLE, uint32_t, sd_softdevice_enable(nrf_clock_lfclksrc_t clock_source, softdevice_assertion_handler_t assertion_handler)); + +/**@brief Disables the SoftDevice and by extension the protocol stack. + * + * Idempotent function to disable the SoftDevice. + * + * @post SoC library and protocol stack APIs are made unavailable. + * @post All interrupts that was protected by the SoftDevice will be disabled and initialized to priority 0 (highest). + * @post All peripherals used by the SoftDevice will be reset to default values. + * @post All of RAM become available. + * @post All interrupts are forwarded to the application. + * @post LFCLK source chosen in ::sd_softdevice_enable will be left running. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_SOFTDEVICE_DISABLE, uint32_t, sd_softdevice_disable(void)); + +/**@brief Check if the SoftDevice is enabled. + * + * @param[out] p_softdevice_enabled If the SoftDevice is enabled: 1 else 0. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_SOFTDEVICE_IS_ENABLED, uint32_t, sd_softdevice_is_enabled(uint8_t * p_softdevice_enabled)); + +/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the SoftDevice + * + * This function is only intended to be called when a bootloader is enabled. + * + * @param[in] address The base address of the interrupt vector table for forwarded interrupts. + + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, uint32_t, sd_softdevice_vector_table_base_set(uint32_t address)); + +/** @} */ + +#endif // NRF_SDM_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_soc.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,958 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + +/** + * @defgroup nrf_soc_api SoC Library API + * @{ + * + * @brief APIs for the SoC library. + * +*/ + +#ifndef NRF_SOC_H__ +#define NRF_SOC_H__ + +#include <stdint.h> +#include <stdbool.h> +#include "nrf_svc.h" +#include "nrf51.h" +#include "nrf51_bitfields.h" +#include "nrf_error_soc.h" + +/** @addtogroup NRF_SOC_DEFINES Defines + * @{ */ + +/**@brief The number of the lowest SVC number reserved for the SoC library. */ +#define SOC_SVC_BASE (0x20) +#define SOC_SVC_BASE_NOT_AVAILABLE (0x23) + +/**@brief Guranteed time for application to process radio inactive notification. */ +#define NRF_RADIO_NOTIFICATION_INACTIVE_GUARANTEED_TIME_US (62) + +/**@brief The minimum allowed timeslot extension time. */ +#define NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US (200) + +#define SOC_ECB_KEY_LENGTH (16) /**< ECB key length. */ +#define SOC_ECB_CLEARTEXT_LENGTH (16) /**< ECB cleartext length. */ +#define SOC_ECB_CIPHERTEXT_LENGTH (SOC_ECB_CLEARTEXT_LENGTH) /**< ECB ciphertext length. */ + +#define SD_EVT_IRQn (SWI2_IRQn) /**< SoftDevice Event IRQ number. Used for both protocol events and SoC events. */ +#define SD_EVT_IRQHandler (SWI2_IRQHandler) /**< SoftDevice Event IRQ handler. Used for both protocol events and SoC events. */ +#define RADIO_NOTIFICATION_IRQn (SWI1_IRQn) /**< The radio notification IRQ number. */ +#define RADIO_NOTIFICATION_IRQHandler (SWI1_IRQHandler) /**< The radio notification IRQ handler. */ + +#define NRF_RADIO_LENGTH_MIN_US (100) /**< The shortest allowed radio timeslot, in microseconds. */ +#define NRF_RADIO_LENGTH_MAX_US (100000) /**< The longest allowed radio timeslot, in microseconds. */ + +#define NRF_RADIO_DISTANCE_MAX_US (128000000UL - 1UL) /**< The longest timeslot distance, in microseconds, allowed for the distance parameter (see @ref nrf_radio_request_normal_t) in the request. */ + +#define NRF_RADIO_EARLIEST_TIMEOUT_MAX_US (128000000UL - 1UL) /**< The longest timeout, in microseconds, allowed when requesting the earliest possible timeslot. */ + +#define NRF_RADIO_START_JITTER_US (2) /**< The maximum jitter in NRF_RADIO_CALLBACK_SIGNAL_TYPE_START relative to the requested start time. */ + +/** @} */ + +/** @addtogroup NRF_SOC_TYPES Types + * @{ */ + +/**@brief The SVC numbers used by the SVC functions in the SoC library. */ +enum NRF_SOC_SVCS +{ + SD_FLASH_PAGE_ERASE = SOC_SVC_BASE, + SD_FLASH_WRITE, + SD_FLASH_PROTECT, + SD_MUTEX_NEW = SOC_SVC_BASE_NOT_AVAILABLE, + SD_MUTEX_ACQUIRE, + SD_MUTEX_RELEASE, + SD_NVIC_ENABLEIRQ, + SD_NVIC_DISABLEIRQ, + SD_NVIC_GETPENDINGIRQ, + SD_NVIC_SETPENDINGIRQ, + SD_NVIC_CLEARPENDINGIRQ, + SD_NVIC_SETPRIORITY, + SD_NVIC_GETPRIORITY, + SD_NVIC_SYSTEMRESET, + SD_NVIC_CRITICAL_REGION_ENTER, + SD_NVIC_CRITICAL_REGION_EXIT, + SD_RAND_APPLICATION_POOL_CAPACITY, + SD_RAND_APPLICATION_BYTES_AVAILABLE, + SD_RAND_APPLICATION_GET_VECTOR, + SD_POWER_MODE_SET, + SD_POWER_SYSTEM_OFF, + SD_POWER_RESET_REASON_GET, + SD_POWER_RESET_REASON_CLR, + SD_POWER_POF_ENABLE, + SD_POWER_POF_THRESHOLD_SET, + SD_POWER_RAMON_SET, + SD_POWER_RAMON_CLR, + SD_POWER_RAMON_GET, + SD_POWER_GPREGRET_SET, + SD_POWER_GPREGRET_CLR, + SD_POWER_GPREGRET_GET, + SD_POWER_DCDC_MODE_SET, + SD_APP_EVT_WAIT, + SD_CLOCK_HFCLK_REQUEST, + SD_CLOCK_HFCLK_RELEASE, + SD_CLOCK_HFCLK_IS_RUNNING, + SD_PPI_CHANNEL_ENABLE_GET, + SD_PPI_CHANNEL_ENABLE_SET, + SD_PPI_CHANNEL_ENABLE_CLR, + SD_PPI_CHANNEL_ASSIGN, + SD_PPI_GROUP_TASK_ENABLE, + SD_PPI_GROUP_TASK_DISABLE, + SD_PPI_GROUP_ASSIGN, + SD_PPI_GROUP_GET, + SD_RADIO_NOTIFICATION_CFG_SET, + SD_ECB_BLOCK_ENCRYPT, + SD_RADIO_SESSION_OPEN, + SD_RADIO_SESSION_CLOSE, + SD_RADIO_REQUEST, + SD_EVT_GET, + SD_TEMP_GET, + SVC_SOC_LAST +}; + +/**@brief Possible values of a ::nrf_mutex_t. */ +enum NRF_MUTEX_VALUES +{ + NRF_MUTEX_FREE, + NRF_MUTEX_TAKEN +}; + +/**@brief Possible values of ::nrf_app_irq_priority_t. */ +enum NRF_APP_PRIORITIES +{ + NRF_APP_PRIORITY_HIGH = 1, + NRF_APP_PRIORITY_LOW = 3 +}; + +/**@brief Possible values of ::nrf_power_mode_t. */ +enum NRF_POWER_MODES +{ + NRF_POWER_MODE_CONSTLAT, /**< Constant latency mode. See power management in the reference manual. */ + NRF_POWER_MODE_LOWPWR /**< Low power mode. See power management in the reference manual. */ +}; + + +/**@brief Possible values of ::nrf_power_failure_threshold_t */ +enum NRF_POWER_THRESHOLDS +{ + NRF_POWER_THRESHOLD_V21, /**< 2.1 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V23, /**< 2.3 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V25, /**< 2.5 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V27 /**< 2.7 Volts power failure threshold. */ +}; + + +/**@brief Possible values of ::nrf_power_dcdc_mode_t. */ +enum NRF_POWER_DCDC_MODES +{ + NRF_POWER_DCDC_MODE_OFF, /**< The DCDC is always off. */ + NRF_POWER_DCDC_MODE_ON, /**< The DCDC is always on. */ + NRF_POWER_DCDC_MODE_AUTOMATIC /**< The DCDC is automatically managed. */ +}; + +/**@brief Possible values of ::nrf_radio_notification_distance_t. */ +enum NRF_RADIO_NOTIFICATION_DISTANCES +{ + NRF_RADIO_NOTIFICATION_DISTANCE_NONE = 0, /**< The event does not have a notification. */ + NRF_RADIO_NOTIFICATION_DISTANCE_800US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_1740US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_2680US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_3620US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_4560US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_5500US /**< The distance from the active notification to start of radio activity. */ +}; + + +/**@brief Possible values of ::nrf_radio_notification_type_t. */ +enum NRF_RADIO_NOTIFICATION_TYPES +{ + NRF_RADIO_NOTIFICATION_TYPE_NONE = 0, /**< The event does not have a radio notification signal. */ + NRF_RADIO_NOTIFICATION_TYPE_INT_ON_ACTIVE, /**< Using interrupt for notification when the radio will be enabled. */ + NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE, /**< Using interrupt for notification when the radio has been disabled. */ + NRF_RADIO_NOTIFICATION_TYPE_INT_ON_BOTH, /**< Using interrupt for notification both when the radio will be enabled and disabled. */ +}; + +/**@brief SoC Events. */ +enum NRF_SOC_EVTS +{ + NRF_EVT_HFCLKSTARTED, /**< Event indicating that the HFCLK has started. */ + NRF_EVT_POWER_FAILURE_WARNING, /**< Event indicating that a power failure warning has occurred. */ + NRF_EVT_FLASH_OPERATION_SUCCESS, /**< Event indicating that the ongoing flash operation has completed successfully. */ + NRF_EVT_FLASH_OPERATION_ERROR, /**< Event indicating that the ongoing flash operation has timed out with an error. */ + NRF_EVT_RADIO_BLOCKED, /**< Event indicating that a radio timeslot was blocked. */ + NRF_EVT_RADIO_CANCELED, /**< Event indicating that a radio timeslot was canceled by SoftDevice. */ + NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN, /**< Event indicating that a radio signal callback handler return was invalid. */ + NRF_EVT_RADIO_SESSION_IDLE, /**< Event indicating that a radio session is idle. */ + NRF_EVT_RADIO_SESSION_CLOSED, /**< Event indicating that a radio session is closed. */ + NRF_EVT_NUMBER_OF_EVTS +}; + +/** @} */ + +/** @addtogroup NRF_SOC_TYPES Types + * @{ */ + +/**@brief Represents a mutex for use with the nrf_mutex functions. + * @note Accessing the value directly is not safe, use the mutex functions! + */ +typedef volatile uint8_t nrf_mutex_t; + +/**@brief The interrupt priorities available to the application while the softdevice is active. */ +typedef uint8_t nrf_app_irq_priority_t; + +/**@brief Represents a power mode, used in power mode functions */ +typedef uint8_t nrf_power_mode_t; + +/**@brief Represents a power failure threshold value. */ +typedef uint8_t nrf_power_failure_threshold_t; + +/**@brief Represents a DCDC mode value. */ +typedef uint32_t nrf_power_dcdc_mode_t; + +/**@brief Radio notification distances. */ +typedef uint8_t nrf_radio_notification_distance_t; + +/**@brief Radio notification types. */ +typedef uint8_t nrf_radio_notification_type_t; + +/** @brief The Radio signal callback types. */ +enum NRF_RADIO_CALLBACK_SIGNAL_TYPE +{ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_START, /**< This signal indicates the start of the radio timeslot. */ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0, /**< This signal indicates the NRF_TIMER0 interrupt. */ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO, /**< This signal indicates the NRF_RADIO interrupt. */ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_FAILED, /**< This signal indicates extend action failed. */ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_SUCCEEDED /**< This signal indicates extend action succeeded. */ +}; + +/** @brief The actions requested by the signal callback. + * + * This code gives the SOC instructions about what action to take when the signal callback has + * returned. + */ +enum NRF_RADIO_SIGNAL_CALLBACK_ACTION +{ + NRF_RADIO_SIGNAL_CALLBACK_ACTION_NONE, /**< Return without action. */ + NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND, /**< Request an extension of the current timeslot (maximum execution time for this action is when the extension succeeded). */ + NRF_RADIO_SIGNAL_CALLBACK_ACTION_END, /**< End the current radio timeslot. */ + NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END /**< Request a new radio timeslot and end the current timeslot. */ +}; + +/**@brief Radio timeslot high frequency clock source configuration. */ +enum NRF_RADIO_HFCLK_CFG +{ + NRF_RADIO_HFCLK_CFG_DEFAULT, /**< Use the currently selected oscillator as HF clock source during the timeslot (i.e. the source is not specified). */ + NRF_RADIO_HFCLK_CFG_FORCE_XTAL, /**< Force external crystal to be used as HF clock source during whole the timeslot. */ +}; + +/** @brief Radio timeslot priorities. */ +enum NRF_RADIO_PRIORITY +{ + NRF_RADIO_PRIORITY_HIGH, /**< High (equal priority as the normal connection priority of the SoftDevice stack(s)). */ + NRF_RADIO_PRIORITY_NORMAL, /**< Normal (equal priority as the priority of secondary activites of the SoftDevice stack(s)). */ +}; + +/** @brief Radio timeslot request type. */ +enum NRF_RADIO_REQUEST_TYPE +{ + NRF_RADIO_REQ_TYPE_EARLIEST, /**< Request timeslot as early as possible. This should always be used for the first request in a session. */ + NRF_RADIO_REQ_TYPE_NORMAL /**< Normal timeslot request. */ +}; + +/** @brief Parameters for a request for a timeslot as early as possible. */ +typedef struct +{ + uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ + uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ + uint32_t length_us; /**< The radio timeslot length (in the range 100 to 100,000] microseconds). */ + uint32_t timeout_us; /**< Longest acceptable delay until the start of the requested timeslot (up to @ref NRF_RADIO_EARLIEST_TIMEOUT_MAX_US microseconds). */ +} nrf_radio_request_earliest_t; + +/** @brief Parameters for a normal radio request. */ +typedef struct +{ + uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ + uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ + uint32_t distance_us; /**< Distance from the start of the previous radio timeslot (up to @ref NRF_RADIO_DISTANCE_MAX_US microseconds). */ + uint32_t length_us; /**< The radio timeslot length (in the range [100..100,000] microseconds). */ +} nrf_radio_request_normal_t; + +/** @brief Radio request parameters. */ +typedef struct +{ + uint8_t request_type; /**< Type of request, see @ref NRF_RADIO_REQUEST_TYPE. */ + union + { + nrf_radio_request_earliest_t earliest; /**< Parameters for a request for a timeslot as early as possible. */ + nrf_radio_request_normal_t normal; /**< Parameters for a normal radio request. */ + } params; +} nrf_radio_request_t; + +/**@brief Return parameters of the radio timeslot signal callback. */ +typedef struct +{ + uint8_t callback_action; /**< The action requested by the application when returning from the signal callback, see @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION. */ + union + { + struct + { + nrf_radio_request_t * p_next; /**< The request parameters for the next radio timeslot. */ + } request; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END. */ + struct + { + uint32_t length_us; /**< Requested extension of the timeslot duration (microseconds) (for minimum time see @ref NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US). */ + } extend; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND. */ + } params; +} nrf_radio_signal_callback_return_param_t; + +/**@brief The radio signal callback type. + * + * @note In case of invalid return parameters, the radio timeslot will automatically end + * immediately after returning from the signal callback and the + * @ref NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN event will be sent. + * @note The returned struct pointer must remain valid after the signal callback + * function returns. For instance, this means that it must not point to a stack variable. + * + * @param[in] signal_type Type of signal, see @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE. + * + * @return Pointer to structure containing action requested by the application. + */ +typedef nrf_radio_signal_callback_return_param_t * (*nrf_radio_signal_callback_t) (uint8_t signal_type); + +/**@brief AES ECB data structure */ +typedef struct +{ + uint8_t key[SOC_ECB_KEY_LENGTH]; /**< Encryption key. */ + uint8_t cleartext[SOC_ECB_CLEARTEXT_LENGTH]; /**< Clear Text data. */ + uint8_t ciphertext[SOC_ECB_CIPHERTEXT_LENGTH]; /**< Cipher Text data. */ +} nrf_ecb_hal_data_t; + +/** @} */ + +/** @addtogroup NRF_SOC_FUNCTIONS Functions + * @{ */ + +/**@brief Initialize a mutex. + * + * @param[in] p_mutex Pointer to the mutex to initialize. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_MUTEX_NEW, uint32_t, sd_mutex_new(nrf_mutex_t * p_mutex)); + +/**@brief Attempt to acquire a mutex. + * + * @param[in] p_mutex Pointer to the mutex to acquire. + * + * @retval ::NRF_SUCCESS The mutex was successfully acquired. + * @retval ::NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN The mutex could not be acquired. + */ +SVCALL(SD_MUTEX_ACQUIRE, uint32_t, sd_mutex_acquire(nrf_mutex_t * p_mutex)); + +/**@brief Release a mutex. + * + * @param[in] p_mutex Pointer to the mutex to release. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_MUTEX_RELEASE, uint32_t, sd_mutex_release(nrf_mutex_t * p_mutex)); + +/**@brief Enable External Interrupt. + * @note Corresponds to NVIC_EnableIRQ in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS. + * + * @retval ::NRF_SUCCESS The interrupt was enabled. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt has a priority not available for the application. + */ +SVCALL(SD_NVIC_ENABLEIRQ, uint32_t, sd_nvic_EnableIRQ(IRQn_Type IRQn)); + +/**@brief Disable External Interrupt. + * @note Corresponds to NVIC_DisableIRQ in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS + * + * @retval ::NRF_SUCCESS The interrupt was disabled. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. + */ +SVCALL(SD_NVIC_DISABLEIRQ, uint32_t, sd_nvic_DisableIRQ(IRQn_Type IRQn)); + +/**@brief Get Pending Interrupt. + * @note Corresponds to NVIC_GetPendingIRQ in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_GetPendingIRQ documentation in CMSIS. + * @param[out] p_pending_irq Return value from NVIC_GetPendingIRQ. + * + * @retval ::NRF_SUCCESS The interrupt is available for the application. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. + */ +SVCALL(SD_NVIC_GETPENDINGIRQ, uint32_t, sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq)); + +/**@brief Set Pending Interrupt. + * @note Corresponds to NVIC_SetPendingIRQ in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS. + * + * @retval ::NRF_SUCCESS The interrupt is set pending. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. + */ +SVCALL(SD_NVIC_SETPENDINGIRQ, uint32_t, sd_nvic_SetPendingIRQ(IRQn_Type IRQn)); + +/**@brief Clear Pending Interrupt. + * @note Corresponds to NVIC_ClearPendingIRQ in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS. + * + * @retval ::NRF_SUCCESS The interrupt pending flag is cleared. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. + */ +SVCALL(SD_NVIC_CLEARPENDINGIRQ, uint32_t, sd_nvic_ClearPendingIRQ(IRQn_Type IRQn)); + +/**@brief Set Interrupt Priority. + * @note Corresponds to NVIC_SetPriority in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * @pre{priority is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_SetPriority documentation in CMSIS. + * @param[in] priority A valid IRQ priority for use by the application. + * + * @retval ::NRF_SUCCESS The interrupt and priority level is available for the application. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt priority is not available for the application. + */ +SVCALL(SD_NVIC_SETPRIORITY, uint32_t, sd_nvic_SetPriority(IRQn_Type IRQn, nrf_app_irq_priority_t priority)); + +/**@brief Get Interrupt Priority. + * @note Corresponds to NVIC_GetPriority in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_GetPriority documentation in CMSIS. + * @param[out] p_priority Return value from NVIC_GetPriority. + * + * @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE - IRQn is not available for the application. + */ +SVCALL(SD_NVIC_GETPRIORITY, uint32_t, sd_nvic_GetPriority(IRQn_Type IRQn, nrf_app_irq_priority_t * p_priority)); + +/**@brief System Reset. + * @note Corresponds to NVIC_SystemReset in CMSIS. + * + * @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN + */ +SVCALL(SD_NVIC_SYSTEMRESET, uint32_t, sd_nvic_SystemReset(void)); + +/**@brief Enters critical region. + * + * @post Application interrupts will be disabled. + * @sa sd_nvic_critical_region_exit + * + * @param[out] p_is_nested_critical_region 1: If in a nested critical region. + * 0: Otherwise. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_NVIC_CRITICAL_REGION_ENTER, uint32_t, sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region)); + +/**@brief Exit critical region. + * + * @pre Application has entered a critical region using ::sd_nvic_critical_region_enter. + * @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called. + * + * @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_NVIC_CRITICAL_REGION_EXIT, uint32_t, sd_nvic_critical_region_exit(uint8_t is_nested_critical_region)); + +/**@brief Query the capacity of the application random pool. + * + * @param[out] p_pool_capacity The capacity of the pool. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_RAND_APPLICATION_POOL_CAPACITY, uint32_t, sd_rand_application_pool_capacity_get(uint8_t * p_pool_capacity)); + +/**@brief Get number of random bytes available to the application. + * + * @param[out] p_bytes_available The number of bytes currently available in the pool. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_RAND_APPLICATION_BYTES_AVAILABLE, uint32_t, sd_rand_application_bytes_available_get(uint8_t * p_bytes_available)); + +/**@brief Get random bytes from the application pool. + * + * @param[out] p_buff Pointer to unit8_t buffer for storing the bytes. + * @param[in] length Number of bytes to take from pool and place in p_buff. + * + * @retval ::NRF_SUCCESS The requested bytes were written to p_buff. + * @retval ::NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES No bytes were written to the buffer, because there were not enough bytes available. +*/ +SVCALL(SD_RAND_APPLICATION_GET_VECTOR, uint32_t, sd_rand_application_vector_get(uint8_t * p_buff, uint8_t length)); + +/**@brief Gets the reset reason register. + * + * @param[out] p_reset_reason Contents of the NRF_POWER->RESETREAS register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RESET_REASON_GET, uint32_t, sd_power_reset_reason_get(uint32_t * p_reset_reason)); + +/**@brief Clears the bits of the reset reason register. + * + * @param[in] reset_reason_clr_msk Contains the bits to clear from the reset reason register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RESET_REASON_CLR, uint32_t, sd_power_reset_reason_clr(uint32_t reset_reason_clr_msk)); + +/**@brief Sets the power mode when in CPU sleep. + * + * @param[in] power_mode The power mode to use when in CPU sleep. @sa sd_app_evt_wait + * + * @retval ::NRF_SUCCESS The power mode was set. + * @retval ::NRF_ERROR_SOC_POWER_MODE_UNKNOWN The power mode was unknown. + */ +SVCALL(SD_POWER_MODE_SET, uint32_t, sd_power_mode_set(nrf_power_mode_t power_mode)); + +/**@brief Puts the chip in System OFF mode. + * + * @retval ::NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN + */ +SVCALL(SD_POWER_SYSTEM_OFF, uint32_t, sd_power_system_off(void)); + +/**@brief Enables or disables the power-fail comparator. + * + * Enabling this will give a softdevice event (NRF_EVT_POWER_FAILURE_WARNING) when the power failure warning occurs. + * The event can be retrieved with sd_evt_get(); + * + * @param[in] pof_enable True if the power-fail comparator should be enabled, false if it should be disabled. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_POF_ENABLE, uint32_t, sd_power_pof_enable(uint8_t pof_enable)); + +/**@brief Sets the power-fail threshold value. + * + * @param[in] threshold The power-fail threshold value to use. + * + * @retval ::NRF_SUCCESS The power failure threshold was set. + * @retval ::NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN The power failure threshold is unknown. + */ +SVCALL(SD_POWER_POF_THRESHOLD_SET, uint32_t, sd_power_pof_threshold_set(nrf_power_failure_threshold_t threshold)); + +/**@brief Sets bits in the NRF_POWER->RAMON register. + * + * @param[in] ramon Contains the bits needed to be set in the NRF_POWER->RAMON register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RAMON_SET, uint32_t, sd_power_ramon_set(uint32_t ramon)); + +/** @brief Clears bits in the NRF_POWER->RAMON register. + * + * @param ramon Contains the bits needed to be cleared in the NRF_POWER->RAMON register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RAMON_CLR, uint32_t, sd_power_ramon_clr(uint32_t ramon)); + +/**@brief Get contents of NRF_POWER->RAMON register, indicates power status of ram blocks. + * + * @param[out] p_ramon Content of NRF_POWER->RAMON register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RAMON_GET, uint32_t, sd_power_ramon_get(uint32_t * p_ramon)); + +/**@brief Set bits in the NRF_POWER->GPREGRET register. + * + * @param[in] gpregret_msk Bits to be set in the GPREGRET register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_GPREGRET_SET, uint32_t, sd_power_gpregret_set(uint32_t gpregret_msk)); + +/**@brief Clear bits in the NRF_POWER->GPREGRET register. + * + * @param[in] gpregret_msk Bits to be clear in the GPREGRET register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_GPREGRET_CLR, uint32_t, sd_power_gpregret_clr(uint32_t gpregret_msk)); + +/**@brief Get contents of the NRF_POWER->GPREGRET register. + * + * @param[out] p_gpregret Contents of the GPREGRET register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_GPREGRET_GET, uint32_t, sd_power_gpregret_get(uint32_t *p_gpregret)); + +/**@brief Sets the DCDC mode. + * + * Depending on the internal state of the SoftDevice, the mode change may not happen immediately. + * The DCDC mode switch will be blocked when occurring in close proximity to radio transmissions. When + * the radio transmission is done, the last mode will be used. + * + * @param[in] dcdc_mode The mode of the DCDC. + * + * @retval ::NRF_SUCCESS + * @retval ::NRF_ERROR_INVALID_PARAM The DCDC mode is invalid. + */ +SVCALL(SD_POWER_DCDC_MODE_SET, uint32_t, sd_power_dcdc_mode_set(nrf_power_dcdc_mode_t dcdc_mode)); + +/**@brief Request the high frequency crystal oscillator. + * + * Will start the high frequency crystal oscillator, the startup time of the crystal varies + * and the ::sd_clock_hfclk_is_running function can be polled to check if it has started. + * + * @see sd_clock_hfclk_is_running + * @see sd_clock_hfclk_release + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_CLOCK_HFCLK_REQUEST, uint32_t, sd_clock_hfclk_request(void)); + +/**@brief Releases the high frequency crystal oscillator. + * + * Will stop the high frequency crystal oscillator, this happens immediately. + * + * @see sd_clock_hfclk_is_running + * @see sd_clock_hfclk_request + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_CLOCK_HFCLK_RELEASE, uint32_t, sd_clock_hfclk_release(void)); + +/**@brief Checks if the high frequency crystal oscillator is running. + * + * @see sd_clock_hfclk_request + * @see sd_clock_hfclk_release + * + * @param[out] p_is_running 1 if the external crystal oscillator is running, 0 if not. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_CLOCK_HFCLK_IS_RUNNING, uint32_t, sd_clock_hfclk_is_running(uint32_t * p_is_running)); + +/**@brief Waits for an application event. + * + * An application event is either an application interrupt or a pended interrupt when the + * interrupt is disabled. When the interrupt is enabled it will be taken immediately since + * this function will wait in thread mode, then the execution will return in the application's + * main thread. When an interrupt is disabled and gets pended it will return to the application's + * thread main. The application must ensure that the pended flag is cleared using + * ::sd_nvic_ClearPendingIRQ in order to sleep using this function. This is only necessary for + * disabled interrupts, as the interrupt handler will clear the pending flag automatically for + * enabled interrupts. + * + * In order to wake up from disabled interrupts, the SEVONPEND flag has to be set in the Cortex-M0 + * System Control Register (SCR). @sa CMSIS_SCB + * + * @note If an application interrupt has happened since the last time sd_app_evt_wait was + * called this function will return immediately and not go to sleep. This is to avoid race + * conditions that can occur when a flag is updated in the interrupt handler and processed + * in the main loop. + * + * @post An application interrupt has happened or a interrupt pending flag is set. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_APP_EVT_WAIT, uint32_t, sd_app_evt_wait(void)); + +/**@brief Get PPI channel enable register contents. + * + * @param[out] p_channel_enable The contents of the PPI CHEN register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_CHANNEL_ENABLE_GET, uint32_t, sd_ppi_channel_enable_get(uint32_t * p_channel_enable)); + +/**@brief Set PPI channel enable register. + * + * @param[in] channel_enable_set_msk Mask containing the bits to set in the PPI CHEN register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_CHANNEL_ENABLE_SET, uint32_t, sd_ppi_channel_enable_set(uint32_t channel_enable_set_msk)); + +/**@brief Clear PPI channel enable register. + * + * @param[in] channel_enable_clr_msk Mask containing the bits to clear in the PPI CHEN register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_CHANNEL_ENABLE_CLR, uint32_t, sd_ppi_channel_enable_clr(uint32_t channel_enable_clr_msk)); + +/**@brief Assign endpoints to a PPI channel. + * + * @param[in] channel_num Number of the PPI channel to assign. + * @param[in] evt_endpoint Event endpoint of the PPI channel. + * @param[in] task_endpoint Task endpoint of the PPI channel. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_CHANNEL The channel number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_CHANNEL_ASSIGN, uint32_t, sd_ppi_channel_assign(uint8_t channel_num, const volatile void * evt_endpoint, const volatile void * task_endpoint)); + +/**@brief Task to enable a channel group. + * + * @param[in] group_num Number of the channel group. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_GROUP_TASK_ENABLE, uint32_t, sd_ppi_group_task_enable(uint8_t group_num)); + +/**@brief Task to disable a channel group. + * + * @param[in] group_num Number of the PPI group. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_GROUP_TASK_DISABLE, uint32_t, sd_ppi_group_task_disable(uint8_t group_num)); + +/**@brief Assign PPI channels to a channel group. + * + * @param[in] group_num Number of the channel group. + * @param[in] channel_msk Mask of the channels to assign to the group. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_GROUP_ASSIGN, uint32_t, sd_ppi_group_assign(uint8_t group_num, uint32_t channel_msk)); + +/**@brief Gets the PPI channels of a channel group. + * + * @param[in] group_num Number of the channel group. + * @param[out] p_channel_msk Mask of the channels assigned to the group. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_GROUP_GET, uint32_t, sd_ppi_group_get(uint8_t group_num, uint32_t * p_channel_msk)); + +/**@brief Configures the Radio Notification signal. + * + * @note + * - The notification signal latency depends on the interrupt priority settings of SWI used + * for notification signal. + * - In the period between the ACTIVE signal and the start of the Radio Event, the SoftDevice + * will interrupt the application to do Radio Event preparation. + * - Using the Radio Notification feature may limit the bandwidth, as the SoftDevice may have + * to shorten the connection events to have time for the Radio Notification signals. + * + * @param[in] type Type of notification signal. + * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE shall be used to turn off radio + * notification. Using @ref NRF_RADIO_NOTIFICATION_DISTANCE_NONE is + * recommended (but not required) to be used with + * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE. + * + * @param[in] distance Distance between the notification signal and start of radio activity. + * This parameter is ignored when @ref NRF_RADIO_NOTIFICATION_TYPE_NONE or + * @ref NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE is used. + * + * @retval ::NRF_ERROR_INVALID_PARAM The group number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_RADIO_NOTIFICATION_CFG_SET, uint32_t, sd_radio_notification_cfg_set(nrf_radio_notification_type_t type, nrf_radio_notification_distance_t distance)); + +/**@brief Encrypts a block according to the specified parameters. + * + * 128-bit AES encryption. + * + * @param[in, out] p_ecb_data Pointer to the ECB parameters' struct (two input + * parameters and one output parameter). + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_ECB_BLOCK_ENCRYPT, uint32_t, sd_ecb_block_encrypt(nrf_ecb_hal_data_t * p_ecb_data)); + +/**@brief Gets any pending events generated by the SoC API. + * + * The application should keep calling this function to get events, until ::NRF_ERROR_NOT_FOUND is returned. + * + * @param[out] p_evt_id Set to one of the values in @ref NRF_SOC_EVTS, if any events are pending. + * + * @retval ::NRF_SUCCESS An event was pending. The event id is written in the p_evt_id parameter. + * @retval ::NRF_ERROR_NOT_FOUND No pending events. + */ +SVCALL(SD_EVT_GET, uint32_t, sd_evt_get(uint32_t * p_evt_id)); + +/**@brief Get the temperature measured on the chip + * + * This function will block until the temperature measurement is done. + * It takes around 50us from call to return. + * + * @note Pan #28 in PAN-028 v 1.6 "Negative measured values are not represented correctly" is corrected by this function. + * + * @param[out] p_temp Result of temperature measurement. Die temperature in 0.25 degrees celsius. + * + * @retval ::NRF_SUCCESS A temperature measurement was done, and the temperature was written to temp + */ +SVCALL(SD_TEMP_GET, uint32_t, sd_temp_get(int32_t * p_temp)); + +/**@brief Flash Write + * + * Commands to write a buffer to flash + * + * This call initiates the flash access command, and its completion will be communicated to the + * application with exactly one of the following events: + * - NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. + * - NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. + * + * @note + * - This call takes control over the radio and the CPU during flash erase and write to make sure that + * they will not interfere with the flash access. This means that all interrupts will be blocked + * for a predictable time (depending on the NVMC specification in nRF51 Series Reference Manual + * and the command parameters). + * + * + * @param[in] p_dst Pointer to start of flash location to be written. + * @param[in] p_src Pointer to buffer with data to be written + * @param[in] size Number of 32-bit words to write. Maximum size is 256 32bit words. + * + * @retval ::NRF_ERROR_INVALID_ADDR Tried to write to a non existing flash address, or p_dst or p_src was unaligned. + * @retval ::NRF_ERROR_BUSY The previous command has not yet completed. + * @retval ::NRF_ERROR_INVALID_LENGTH Size was 0, or more than 256 words. + * @retval ::NRF_ERROR_FORBIDDEN Tried to write to or read from protected location. + * @retval ::NRF_SUCCESS The command was accepted. + */ +SVCALL(SD_FLASH_WRITE, uint32_t, sd_flash_write(uint32_t * const p_dst, uint32_t const * const p_src, uint32_t size)); + + +/**@brief Flash Erase page + * + * Commands to erase a flash page + * + * This call initiates the flash access command, and its completion will be communicated to the + * application with exactly one of the following events: + * - NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. + * - NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. + * + * @note + * - This call takes control over the radio and the CPU during flash erase and write to make sure that + * they will not interfere with the flash access. This means that all interrupts will be blocked + * for a predictable time (depending on the NVMC specification in nRF51 Series Reference Manual + * and the command parameters). + * + * + * @param[in] page_number Pagenumber of the page to erase + * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. + * @retval ::NRF_ERROR_INVALID_ADDR Tried to erase to a non existing flash page. + * @retval ::NRF_ERROR_BUSY The previous command has not yet completed. + * @retval ::NRF_ERROR_FORBIDDEN Tried to erase a protected page. + * @retval ::NRF_SUCCESS The command was accepted. + */ +SVCALL(SD_FLASH_PAGE_ERASE, uint32_t, sd_flash_page_erase(uint32_t page_number)); + + +/**@brief Flash Protection set + * + * Commands to set the flash protection registers PROTENSETx + * + * @note To read the values in PROTENSETx you can read them directly. They are only write-protected. + * + * @param[in] protenset0 Value to be written to PROTENSET0 + * @param[in] protenset1 Value to be written to PROTENSET1 + * + * @retval ::NRF_ERROR_FORBIDDEN Tried to protect the SoftDevice + * @retval ::NRF_SUCCESS Values successfully written to PROTENSETx + */ +SVCALL(SD_FLASH_PROTECT, uint32_t, sd_flash_protect(uint32_t protenset0, uint32_t protenset1)); + +/**@brief Opens a session for radio requests. + * + * @note Only one session can be open at a time. + * @note p_radio_signal_callback(NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) will be called when the radio timeslot + * starts. From this point the NRF_RADIO and NRF_TIMER0 peripherals can be freely accessed + * by the application. + * @note p_radio_signal_callback(NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0) is called whenever the NRF_TIMER0 + * interrupt occurs. + * @note p_radio_signal_callback(NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO) is called whenever the NRF_RADIO + * interrupt occurs. + * @note p_radio_signal_callback() will be called at ARM interrupt priority level 0. This + * implies that none of the sd_* API calls can be used from p_radio_signal_callback(). + * + * @param[in] p_radio_signal_callback The signal callback. + * + * @retval ::NRF_ERROR_INVALID_ADDR p_radio_signal_callback is an invalid function pointer. + * @retval ::NRF_ERROR_BUSY If session cannot be opened. + * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. + * @retval ::NRF_SUCCESS Otherwise. + */ + SVCALL(SD_RADIO_SESSION_OPEN, uint32_t, sd_radio_session_open(nrf_radio_signal_callback_t p_radio_signal_callback)); + +/**@brief Closes a session for radio requests. + * + * @note Any current radio timeslot will be finished before the session is closed. + * @note If a radio timeslot is scheduled when the session is closed, it will be canceled. + * @note The application cannot consider the session closed until the NRF_EVT_RADIO_SESSION_CLOSED + * event is received. + * + * @retval ::NRF_ERROR_FORBIDDEN If session not opened. + * @retval ::NRF_ERROR_BUSY If session is currently being closed. + * @retval ::NRF_SUCCESS Otherwise. + */ + SVCALL(SD_RADIO_SESSION_CLOSE, uint32_t, sd_radio_session_close(void)); + + /**@brief Requests a radio timeslot. + * + * @note The timing of the radio timeslot is specified by p_request->distance_us. For the first + * request in a session, p_request->distance_us is required to be 0 by convention, and + * the timeslot is scheduled at the first possible opportunity. All following radio timeslots are + * requested with a distance of p_request->distance_us measured from the start of the + * previous radio timeslot. + * @note A too small p_request->distance_us will lead to a NRF_EVT_RADIO_BLOCKED event. + * @note Timeslots scheduled too close will lead to a NRF_EVT_RADIO_BLOCKED event. + * @note See the SoftDevice Specification for more on radio timeslot scheduling, distances and lengths. + * @note If an opportunity for the first radio timeslot is not found before 100ms after the call to this + * function, it is not scheduled, and instead a NRF_EVT_RADIO_BLOCKED event is sent. + * The application may then try to schedule the first radio timeslot again. + * @note Successful requests will result in nrf_radio_signal_callback_t(NRF_RADIO_CALLBACK_SIGNAL_TYPE_START). + * Unsuccessful requests will result in a NRF_EVT_RADIO_BLOCKED event, see @ref NRF_SOC_EVTS. + * @note The jitter in the start time of the radio timeslots is +/- NRF_RADIO_START_JITTER_US us. + * @note The nrf_radio_signal_callback_t(NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) call has a latency relative to the + * specified radio timeslot start, but this does not affect the actual start time of the timeslot. + * @note NRF_TIMER0 is reset at the start of the radio timeslot, and is clocked at 1MHz from the high frequency + * (16 MHz) clock source. If p_request->hfclk_force_xtal is true, the high frequency clock is + * guaranteed to be clocked from the external crystal. + * @note The SoftDevice will neither access the NRF_RADIO peripheral nor the NRF_TIMER0 peripheral + * during the radio timeslot. + * + * @param[in] p_request Pointer to the request parameters. + * + * @retval ::NRF_ERROR_FORBIDDEN If session not opened or the session is not IDLE. + * @retval ::NRF_ERROR_INVALID_ADDR If the p_request pointer is invalid. + * @retval ::NRF_ERROR_INVALID_PARAM If the parameters of p_request are not valid. + * @retval ::NRF_SUCCESS Otherwise. + */ + SVCALL(SD_RADIO_REQUEST, uint32_t, sd_radio_request(nrf_radio_request_t * p_request )); + +/** @} */ + +#endif // NRF_SOC_H__ + +/**@} */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_svc.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,33 @@ +#ifndef NRF_SVC__ +#define NRF_SVC__ + +#ifdef SVCALL_AS_NORMAL_FUNCTION +#define SVCALL(number, return_type, signature) return_type signature +#else + +#ifndef SVCALL +#if defined (__CC_ARM) +#define SVCALL(number, return_type, signature) return_type __svc(number) signature +#elif defined (__GNUC__) +#define SVCALL(number, return_type, signature) \ + _Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \ + _Pragma("GCC diagnostic ignored \"-Wunused-function\"") \ + __attribute__((naked)) static return_type signature \ + { \ + __asm( \ + "svc %0\n" \ + "bx r14" : : "I" (number) : "r0" \ + ); \ + } +#elif defined (__ICCARM__) +#define PRAGMA(x) _Pragma(#x) +#define SVCALL(number, return_type, signature) \ +PRAGMA(swi_number = number) \ + __swi return_type signature; +#else +#define SVCALL(number, return_type, signature) return_type signature +#endif +#endif // SVCALL + +#endif // SVCALL_AS_NORMAL_FUNCTION +#endif // NRF_SVC__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/softdevice_assert.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + +/** @brief Utilities for verifying program logic + */ + +#ifndef SOFTDEVICE_ASSERT_H_ +#define SOFTDEVICE_ASSERT_H_ + +#include <stdint.h> + +/** @brief This function handles assertions. + * + * + * @note + * This function is called when an assertion has triggered. + * + * + * @param line_num The line number where the assertion is called + * @param file_name Pointer to the file name + */ +void assert_softdevice_callback(uint16_t line_num, const uint8_t *file_name); + + +/*lint -emacro(506, ASSERT) */ /* Suppress "Constant value Boolean */ +/*lint -emacro(774, ASSERT) */ /* Suppress "Boolean within 'if' always evaluates to True" */ \ +/** @brief Check intended for production code + * + * Check passes if "expr" evaluates to true. */ +#define ASSERT(expr) \ +if (expr) \ +{ \ +} \ +else \ +{ \ + assert_softdevice_callback((uint16_t)__LINE__, (uint8_t *)__FILE__); \ + /*lint -unreachable */ \ +} + +#endif /* SOFTDEVICE_ASSERT_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_softdevice.hex Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,5290 @@ +:020000040000FA +:10000000C0070000D1060000D1000000B1060000CA +:1000100000000000000000000000000000000000E0 +:100020000000000000000000000000005107000078 +:100030000000000000000000DB000000E500000000 +:10004000EF000000F9000000030100000D010000B6 +:1000500017010000210100002B0100003501000004 +:100060003F01000049010000530100005D01000054 +:1000700067010000710100007B01000085010000A4 +:100080008F01000099010000A3010000AD010000F4 +:10009000B7010000C1010000CB010000D501000044 +:1000A000DF010000E9010000F3010000FD01000094 +:1000B00007020000110200001B02000025020000E0 +:1000C0001FB5C046C04600F0EFFA04B00FB41FBD24 +:1000D00008205A49096809580847382057490968CB +:1000E000095808473C2055490968095808474020E5 +:1000F0005249096809580847442050490968095875 +:10010000084748204D490968095808474C204B4981 +:10011000096809580847502048490968095808479C +:100120005420464909680958084758204349096836 +:10013000095808475C204149096809580847602068 +:100140003E4909680958084764203C49096809582C +:100150000847682039490968095808476C20374919 +:100160000968095808477020344909680958084740 +:100170007420324909680958084778202F490968CE +:10018000095808477C202D490968095808478020EC +:100190002A490968095808478420284909680958E4 +:1001A0000847882025490968095808478C202349B1 +:1001B00009680958084790202049096809580847E4 +:1001C00094201E4909680958084798201B49096866 +:1001D000095808479C201949096809580847A02070 +:1001E0001649096809580847A4201449096809589C +:1001F0000847A8201149096809580847AC200F4949 +:10020000096809580847B0200C4909680958084787 +:10021000B4200A49096809580847B82007490968FD +:1002200009580847BC2005490968095808470000D3 +:1002300003480449024A034B7047000000000020B5 +:10024000C0070000C00700000122D84B5A6000BF61 +:10025000D74A1268002AFBD0016000BFD44A126856 +:10026000002AFBD00022D14B5A6000BFD04A12684E +:10027000002AFBD07047F0B505460E46174600240D +:1002800006E0A200B158A2005019FFF7DDFF641C80 +:10029000BC42F6D30020F0BD0120C043C549086030 +:1002A000401048607047014601229204086890425D +:1002B00001D9102070470020FCE7F0B505460C4638 +:1002C0001646002706E028462168FFF7BDFF2D1DD2 +:1002D000241D7F1CB742F6D3F0BD70B505460C4611 +:1002E0002E460BE0304600F075F9FF2C01D80024B3 +:1002F00001E0FF3C013C012080023618002CF1D1C6 +:1003000070BD0146012292044868904201D909203B +:100310007047A9484069401C01D10F20F8E7002030 +:10032000F6E7FEB504462068030000F037FA05043E +:100330002B4249598B00201DFFF7E3FF0546002D96 +:1003400001D02846FEBDFFF7A7FF0120C00200F044 +:1003500041F9042221469948FFF78DFF002801D07A +:100360000320EFE708222146944800F06DF90028A9 +:1003700006D1002192480068FFF766FF00F00CF9F3 +:100380000320DFE7A768E6686068019031463846D9 +:10039000FFF7A3FF324638460199FFF78EFFB20000 +:1003A0003846019900F050F9002800D1CAE703202F +:1003B000C8E700F0E3F9834800688349086041E03A +:1003C00060680190E668A0680090B200009901980A +:1003D00000F03AF90746002F00D1B3E70E20B1E74D +:1003E000201DFFF760FF0546002D01D02846A9E734 +:1003F0006068002807D1FFF74FFF0320800200F05C +:10040000E9F800F0C9F8FFF747FF0120C00200F04B +:10041000E1F8042221466948FFF72DFF002801D0AA +:1004200003208FE708222146644800F00DF90028D8 +:1004300006D1002162480068FFF706FF00F0ACF823 +:1004400003207FE700BF00207CE770B505460C461F +:10045000182D04D12068FFF764FF206002E001201E +:10046000206000BF00BF70BDF0B589B05248406940 +:1004700003905248806881000398081802900398FE +:10048000000B01900121090302984018401E000B47 +:1004900000900124002520462946019A00F0C4F866 +:1004A0000022401E91410791069001260027304608 +:1004B0003946009A00F0B8F80022401E914105919B +:1004C0000490049BDB43059AD2430698184307998E +:1004D00011430791069037490698086007984860CD +:1004E00009B0F0BD70B53448446934488568466841 +:1004F000AA003146204600F0A7F8002801D00020CD +:1005000070BD0120FCE72D484068002801D0012083 +:1005100000E000200546FFF7E5FF002807D0FFF7C1 +:10052000BBFE0320800200F055F800F035F8FFF71D +:100530009BFF002D0ED020484669204884684768FC +:1005400021463046FFF7C9FE224639463046FFF7BE +:10055000B4FE00BF00F020F810B5184844681A48EF +:100560000460204600F0DCF810BD15480068006803 +:10057000401C01D100BFFEE710480068002802D0EF +:10058000042806D101E0FFF7BEFFFFF7E5FF00BF3B +:10059000FEE700BF00BFFEE7BFF34F8F0B480C49DB +:1005A000C860BFF34F8F00BFFEE7000000E50140C9 +:1005B00000E40140000600400010001000080000A8 +:1005C000B8070000BC070000000000200400FA0586 +:1005D00000ED00E010B50146104B1A6808460223F2 +:1005E0000F4C636000BF0F4B1B68002BFBD0531CEC +:1005F00004D0904202D20A4B186101E0084B986087 +:1006000000BF084B1B68002BFBD00023044C636029 +:1006100000BF044B1B68002BFBD010BD0010001066 +:1006200000E5014000E4014010B5202A04DB01464A +:10063000203A9140002010BD914020239C1A03468F +:10064000E3401943904010BD034610B50B439B0790 +:100650000FD1042A0DD308C810C9121FA342F8D025 +:1006600018BA21BA884201D9012010BD0020C04328 +:1006700010BD002A03D0D30703D0521C07E000208E +:1006800010BD03780C78401C491C1B1B07D1037854 +:100690000C78401C491C1B1B01D1921EF1D118463D +:1006A00010BD70477047704710B500F007F810BDD7 +:1006B000014B1B68DB6818470000002019481A49E5 +:1006C0007047FFF7FBFFFFF7FBFC00BD20BFFDE716 +:1006D0001649174C24688C420BD1164B1B68994263 +:1006E0000CD1154B154A1360186810498842EDD09B +:1006F0000AE0134880F30888124B18470F4A13602A +:1007000018680A498842E1D080F308880E49884277 +:1007100004DD0E48026802210A4302605B68184744 +:100720000346DFE7C0070000C0070000FFFFFFFF30 +:10073000000C000014100010001000000000002049 +:10074000000400206B05000000200020240500406C +:100750000D48704502D1EFF3098101E0EFF3088104 +:10076000886902380078182802D1C046074A104725 +:10077000074A12682C3212681047000000B5054B7A +:10078000054A9B58984700BDFDFFFFFF4B04000042 +:1007900000000020001000000400000030B4744687 +:1007A000641E2578641CAB4204D3635D5B00E318D0 +:1007B00030BC18471D46F8E7000C00000010000090 +:10100000901D002079500100ED3D0000DF4F0100F0 +:1010100000000000000000000000000000000000D0 +:10102000000000000000000000000000E950010086 +:101030000000000000000000ED3D0000ED3D00005C +:10104000555101005B510100ED3D0000ED3D0000F8 +:10105000ED3D0000ED3D0000ED3D0000ED3D0000E8 +:1010600061510100ED3D0000ED3D000067510100C0 +:10107000ED3D00006D5101007351010079510100F7 +:10108000ED3D0000ED3D0000ED3D0000ED3D0000B8 +:10109000ED3D0000ED3D0000ED3D0000ED3D0000A8 +:1010A0007F51010085510100ED3D0000ED3D000044 +:1010B000ED3D0000ED3D0000ED3D0000ED3D000088 +:1010C00000F002F813F0B9FF0CA030C8083824185B +:1010D0002D18A246671EAB4654465D46AC4201D170 +:1010E00013F0ABFF7E460F3E0FCCB64601263342CF +:1010F00000D0FB1AA246AB463343184744410100D7 +:1011000074410100103A02D378C878C1FAD8520766 +:1011100001D330C830C101D504680C6070470000AD +:101120000023002400250026103A01D378C1FBD803 +:10113000520700D330C100D50B6070471FB5C046C1 +:10114000C04613F01BFF04B00FB41FBD82690249F3 +:1011500081610248104470476111000001000000E5 +:1011600001B41EB400B510F02FFC01B401988646FE +:1011700001BC01B01EBD0000F0B4404649465246D5 +:101180005B460FB402A0013001B50648004700BF1E +:1011900001BC86460FBC8046894692469B46F0BC01 +:1011A00070470000C1100000401E00BF00BF00BF1C +:1011B00000BF00BF00BF00BF00BF00BF00BF00BF37 +:1011C00000BFF1D17047000070B505460C461646C9 +:1011D00002E00FCC0FC5103E102EFAD2082E02D31B +:1011E00003CC03C5083E042E07D301CC01C5361F2E +:1011F00003E021782970641C6D1C761EF9D270BD45 +:101200008307FF22DB0E9A408907090E99400028C8 +:101210000BDA0007000F0838830828489B001B18CA +:10122000D86990430843D8617047830824489B00DD +:101230001B181868904308431860704710B504469F +:1012400000210120FFF7DCFF00211820FFF7D8FF65 +:1012500000210B20FFF7D4FF02211920FFF7D0FF58 +:1012600002210D20FFF7CCFF02210E20FFF7C8FF5F +:1012700002210F20FFF7C4FF0221C81FFFF7C0FFA4 +:1012800003211620FFF7BCFF03211520FFF7B8FF4D +:10129000204600F019F8002010BD4F210180704752 +:1012A00010B500F03AF810BD0648704710B500F0D0 +:1012B00035F810BD704770477047000000ED00E042 +:1012C00000E400E003F900C330B50446374D95B0A3 +:1012D00007202870A81CFFF7E0FF5920A880344899 +:1012E00001F020FC0546072000F0DCF929462F48D4 +:1012F00000F08CFA641E072C0AD830216846017071 +:10130000847001F0DDFA002802D009A800F0DDFCAD +:10131000284601F083FE15B030BD7047F8B5234E66 +:101320000446B61E307801270D46002807D0204617 +:1013300060380B2808D8204601F096FB2BE0602C83 +:10134000F9D01C480860F8BD20466C38032803D843 +:10135000204601F0CBFB1EE0204670381F2803D842 +:10136000204600F037F816E0204690380F2803D8C2 +:10137000204600F0BBF80EE02046A0380F2803D826 +:10138000204600F023F906E02046B0380F2804D8A4 +:10139000204600F000F9286000E02F60602CD2D1D8 +:1013A00028680028CFD13770F8BD00001A0000204F +:1013B000C33300000130000070477047704770472A +:1013C000704770477047704710B5012801D100F091 +:1013D00042FA10BD10B57038030013F0EBFE150C87 +:1013E00012161E22252C33383D41454950555C6468 +:1013F0006C747B8085004A680878114603F081FF91 +:1014000010BD086803F0F9FF10BD0C790B7B8A68EA +:101410000868214604F005F810BD086804F07EF85D +:1014200010BD03F05BFC10BD08884A6880B211460D +:1014300004F043FA10BD0A790888114680B204F01E +:1014400091FA10BD087840B204F09CFA10BD0888EB +:1014500080B204F0B8FA10BD086804F0C7FA10BDF5 +:10146000086804F0DFFA10BD086804F00AFB10BD3C +:10147000088982B209C9194604F034FB10BD05C9B8 +:10148000114604F082FB10BD08884A6880B21146FC +:1014900004F0A0FB10BD0B7908888A6880B2194659 +:1014A00004F0FDFB10BD0B7908888A6880B21946EC +:1014B00004F0B3FC10BD08884B688A6880B21946F6 +:1014C00004F0F3FC10BD08884A6880B2114604F0AD +:1014D0003EFD10BD088880B204F056FD10BD08889E +:1014E00080B204F076FD10BD012010BD10B590381B +:1014F000030013F05FFE09060F161D242C363F462D +:101500004E0088888A6883B20888194680B205F040 +:1015100093F910BD08884A6880B2114605F0E9F9D0 +:1015200010BD08884A6880B2114605F02DFA10BD3A +:1015300008884A6880B2114605F063FA10BD088831 +:101540004B688A6880B2194605F094FA10BD088984 +:1015500082B2888883B20888194680B205F0C9FA39 +:1015600010BD08894B6882B20888194680B205F020 +:10157000FEFA10BD08884A6880B2114605F02EFBBD +:1015800010BD888882B20888114680B205F0C2FB7F +:1015900010BD012010BD10B5B02805D0B12808D06D +:1015A000B2280BD0012010BD088880B205F0A6FE3D +:1015B00010BD088880B205F0D1FE10BD08884B68C8 +:1015C0008A6880B2194605F0DAFE10BD10B5A03861 +:1015D000030013F0EFFD0B070E172028323C434D9C +:1015E000545D65004B6808788A68194607F017FA59 +:1015F00010BD88888A6883B20888194680B207F0CF +:1016000023FA10BD08884C68CB688A6880B22146EE +:1016100007F02AFA10BD08884B688A6880B219461C +:1016200007F044FA10BD8888CB6884B208888A68BD +:1016300080B2214607F064FA10BD8888CB6884B276 +:1016400008888A6880B2214607F089FA10BD0888A8 +:101650004A6880B2114607F0BDFA10BD088982B20F +:10166000888883B20888194680B207F0BDFA10BD99 +:1016700008884A6880B2114607F0DAFA10BD088976 +:101680004B6882B20888194680B207F057FB10BD3C +:1016900008884B688A6880B2194607F014FC10BDB0 +:1016A000012010BD10B507F0FAFC0FF0A7FF00F005 +:1016B00007F810F0F5F808F0F5F908F081F910BD19 +:1016C00001202B49C00308602A490020087003202C +:1016D0002949800288607047F8B5264D044628786D +:1016E000A04207D0002C05D0002803D023A14D2014 +:1016F00013F06FFC2878A04213D02C700325002330 +:101700002349AD021C48002C27D01B4A214E4032F1 +:10171000214F012C06D0022C13D018A16E2013F0FB +:1017200058FCF8BD0B6002230B604E6185601B49BD +:1017300011625762091D91621749091DD162456006 +:10174000F8BD0B6003230B604E610121C90281606B +:10175000134B9362D7624160F8BD0B600B608560EC +:10176000F8BD10B505A1772013F033FC10BD0000C3 +:1017700080E100E02000002000F501407372635C0E +:1017800068616C5F63636D5F6161722E630000006E +:1017900000F500407C01002000F0004000110040F6 +:1017A000488100401CB50446002069460870204668 +:1017B00009F0F6F86946204608F0B4FF002803D186 +:1017C000FBA1B62013F005FC01A9204608F009FF93 +:1017D000002803D1F6A1BB2013F0FBFB684600787C +:1017E0001CBD70B5F74D002428462C76203084713E +:1017F000C47113F0EDFC2846403804702030847327 +:10180000847484762C74AC7070BDEAE710B50C4615 +:10181000ED4982888A8042884A80007808700846AC +:101820000A38847008F0B3FEFFF7DBFF20460AF0A9 +:101830002FFAE44AE0321146383908461446813816 +:1018400009F020F92146E0480BF0C2FC09F09FF8AE +:1018500013F0BEFC10BD10B50120FFF7ADFD10BDAB +:10186000F8B509F083FDD84DD64C0A3D022802D0C8 +:10187000207C00287CD0207E0026102819D1A0785A +:10188000002803D0CAA1D14813F0A3FBCD48E83803 +:10189000817A89070DD50146267160398989E180F1 +:1018A000C17A217281896181C089A0810120A070E3 +:1018B0002676C44F203FB87C002859D1C4486946D9 +:1018C000808908F02FFF002805D0694668780978DC +:1018D0004018687004E0BD48B5A11D3013F079FBD5 +:1018E000207C002838D0BA488189FF300930406D0B +:1018F0008089814204D0B548ADA1223013F069FB44 +:10190000B348808908F0B4FF002804D1AF48A8A1EB +:10191000283013F05EFB09F022F800281CD0AC48F8 +:101920008089FFF73FFF697840186870A548403804 +:10193000416D20318A7C012A0DD1A54A3E779289DA +:10194000C287C87C20700120B876207E102801D084 +:10195000282800D1267626746978002908D09C486A +:101960008289FF300930C28601870120B8746E7009 +:1019700009F0CCFC002805D1207C002802D0A878F2 +:1019800001F0F4F8F8BDF8B50F460446FFF768FF1C +:101990008C4D403D28788B4E002813D0002F10D15D +:1019A000307E002804D0FF2081A1C63013F011FB47 +:1019B0002C22A91C204613F06FF90E202070002065 +:1019C00028708FE07F4D203DA87B002818D0002F85 +:1019D000F7D1307E102808D0282806D0002804D05F +:1019E000FF2073A1D23013F0F4FA0120E070E87BFD +:1019F000A070287C60700F2020700020A87371E018 +:101A00000121204608F0E4FF002807D0307C0028A0 +:101A100051D13946204608F0DBFFF8BDA97C694862 +:101A20000C38009068480A38002913D0017805293D +:101A300010D2002F56D1491C0170002666700D206F +:101A40002070012028750622A01C009913F024F9AB +:101A5000AE7447E05C4800210A380170B078002875 +:101A600014D0002F3ED1307E002803D050A1594819 +:101A700013F0AFFA002565700120524920700A2248 +:101A8000091DA01C13F008F9B5702BE0394620465B +:101A90000BF008FB002825D1A87C002805D0002FDA +:101AA00020D149480A380178C5E7A87E002802D02D +:101AB000307C002801D00020F8BD002F12D1307EEC +:101AC000002804D08F203AA1800013F082FA00266B +:101AD00066700A203B4920700622091FA01C13F0E3 +:101AE000DBF8AE760120F8BD10B53648017E00293E +:101AF00008D1007C012805D001210020FFF743FF19 +:101B0000002801D0072010BD012010BD10B5012410 +:101B10000AF006F90443FFF7E7FF044308F038FF33 +:101B200001462143084610BDF8B51D4614460E4631 +:101B300008F077FD002807D0684608F07DFD0028F2 +:101B400003D0002C07D101E00120F8BD9B2018A193 +:101B5000800013F03EFA08F01BFDA04204D21D489D +:101B600013A1583013F035FA009808F089F931467E +:101B7000009808F097F9E2B22946009808F04EFB69 +:101B800008F06CFD002804D19F2009A1800013F00B +:101B900020FA08F0FFFE0E4800244030417C002966 +:101BA00002D044740AF0A7F90948C480CCE70000C9 +:101BB0007372635C6C6C5F6374726C2E73302E6333 +:101BC00000000000200300202C00002082060000FE +:101BD000D80100201502000010B50179002908D0B5 +:101BE00001290BD0FF20FE49043013F0F2F9002048 +:101BF00010BD831D42880488022103E042880488C6 +:101C0000831D01212046FFF78FFF10BDF8B51F4649 +:101C100015460E46044609F0A9FB022803D0F148F8 +:101C2000007C00281FD0F0488089208008F020FE2A +:101C3000002803D1EA49ED4813F0CBF905246846A2 +:101C400008F021FE00280ED0009808F063F93070EB +:101C5000022809D0012807D008F055FE641E24068A +:101C6000240EECD10020F8BD3946009808F0EEFAB9 +:101C70002880002804D1AF20D949800013F0A9F9A9 +:101C800008F041FE002804D1D848D549193013F096 +:101C9000A0F90120F8BD38B50446831D821C6946B1 +:101CA000FFF7B4FF00280DD000206071684600786F +:101CB000012808D0022806D0FF20C949253013F09A +:101CC00088F9012038BD2071FBE700215BE670B583 +:101CD000C44C0546403C2078002803D1C148007E12 +:101CE000002804D0C120BE49C00013F072F9287842 +:101CF00008F085FF28780BF0C1FB0020207101203F +:101D000060713921E170207070BD70B5B54D044629 +:101D1000403D2878002803D1B248007E002804D036 +:101D20005F20AF49000113F054F9AF4E2188B0890C +:101D3000884203D109F01AFB022807D0022028713B +:101D4000012068713821E970287070BD7F2070769D +:101D5000A548E17820304174A17801740020EEE7B5 +:101D600010B5A04C403C207800280BD19D48007E47 +:101D7000002807D109F0FAFA032803D009F0FAFA8B +:101D8000032804D199489649653013F022F9954902 +:101D900000202031C8712071012060713A21E1706A +:101DA000207010BD70B58F4C0646403C207800284E +:101DB0000BD18C48007E002807D109F0D7FA032800 +:101DC00003D009F0D7FA032804D1884884497B302E +:101DD00013F0FFF8834D2035E87908280CD2E87914 +:101DE0001022000100196830314600F025FEE87924 +:101DF000401CE871002000E0072020710120607184 +:101E00003B21E170207070BDF8B5764D0446403D31 +:101E10002878002803D17348007E002803D0704939 +:101E2000734813F0D6F8704F2188B889884203D1DF +:101E300009F09CFA022801D0022022E03E8C64883E +:101E40007200788CF98B521C944217D3694A514323 +:101E50009200504312F09AFF401EFF2180B2F531EC +:101E6000884200D90846844200D22046711C401C9A +:101E700012F08CFF761C7043401E86B2FE85EE8009 +:101E800000202871012068713C21E9702870F8BD9C +:101E9000F8B5544C0546403C2078002803D1514801 +:101EA000007E002804D052484D492C3813F091F898 +:101EB000A878002801D0012804D1A888FF21F53195 +:101EC000884204D959204649000113F082F8464E51 +:101ED0002988B089884203D109F048FA022807D03E +:101EE00002202071012060713621E1702070F8BD60 +:101EF0003D48002720308772A988B18501213176BD +:101F0000A978012900D00021817237484030407CF7 +:101F1000002801D009F0EFFF2771E3E770B5314CDD +:101F20000546403C2078002807D12E48007E002836 +:101F300003D109F01BFA002804D02D482849533852 +:101F400013F047F8287809F0EEFE002020710120F8 +:101F500060713021E170207070BD70B5214C054674 +:101F6000403C2078002803D11E48007E002804D081 +:101F70001F481B495F3013F02CF8287800280BD03D +:101F8000012809D0022807D06878402804D31848CF +:101F90001349663013F01DF8284609F0DEF90028D1 +:101FA00001D0002000E00C2020710120607134215C +:101FB000E170207070BD70B50A4C0546403C207839 +:101FC000002807D10748007E002803D109F0CEF988 +:101FD000002804D057200249000112F0FAFF0BE05C +:101FE000B01B000020030020D8010020AA0200003E +:101FF000B6050000C40900002978002913D00A2979 +:1020000011D014290FD01E290DD028290BD0322928 +:1020100009D04B2907D0642905D0FF2903D0FE49F8 +:10202000FE4812F0D6FF284609F0FCFE0020207181 +:10203000012060713321E170207070BD70B5F84CE3 +:1020400006462078251D002804D120464030007E19 +:10205000002804D05520F049000112F0BAFF3146A3 +:10206000002008F0A1FD2870002804D10622314686 +:10207000EC4812F011FE012060713221E1702070F5 +:1020800070BD70B5E64C05462078002804D1204686 +:102090004030007E002804D0A720DF49C00012F0A5 +:1020A00098FF00216956042914D0002912D0081D78 +:1020B00010D0001D0ED0001D0CD0001D0AD0001D38 +:1020C00008D00A3006D0283104D0D448D249443848 +:1020D00012F07FFFD448297801700120607131210E +:1020E000E170207070BD10B5CD4C2078002804D16F +:1020F00020464030007E002803D0C749CB4812F06C +:1021000068FF08F045FAE08008F00AFB2072002022 +:102110002071012060710521E170207010BDF8B5BB +:10212000BF4C07462034A07B25462035002805D12A +:10213000287E002802D1A878002804D0B748B649E4 +:10214000703812F046FF09F011F91026022822D14A +:10215000B7483988808988421DD1B1494839084635 +:102160000A7F6038807A002A03D080070CD40C20C4 +:102170000CE0800708D406200877AD484030407C4A +:10218000002801D009F0B7FE2E760020E0732674F7 +:102190000120A073F8BD0220F8E710B5A04C20780C +:1021A000002804D120464030007E002804D09B48FF +:1021B0009949823812F00DFF002020710E20A07086 +:1021C0000F20E070FF20A0710020C04320819548BF +:1021D000C01D0178A1728188A1814088E081012021 +:1021E0006071207010BD10B58D4C2078002804D18E +:1021F00020464030007E002803D087498D4812F0E9 +:10220000E8FE0821A01D0FF095FA002020710120A2 +:1022100060712B21E170207010BD70B5804D0446B7 +:102220002878002804D128464030007E002804D0B9 +:102230007A487949B13012F0CCFE7D48102221460F +:10224000303800F0F9FB7A481022A118203800F04D +:10225000F3FB774830380FF074FB754910221039C2 +:102260002C46A81D00F0E8FB002020710E20A07075 +:102270002A20E07001206071207070BDF8B5684CB4 +:1022800005462034A07B26462036002802D1307E29 +:10229000002804D067486049E53012F09AFEA9781A +:1022A000052912D0132910D014290ED015290CD0CD +:1022B0001A290AD0292908D03D2906D03B2904D063 +:1022C0005C485549ED3012F084FE28885A4988420E +:1022D00004D958485049F63012F07BFE09F046F810 +:1022E0000C212827022809D151482A888089904248 +:1022F00015D14B484838027E002A01D0E17310E026 +:10230000A97841760121017637760020E0734848AC +:102310004030407C002804D009F0EDFD01E00220AF +:10232000E07327740120A073F8BDF8B53C4F064652 +:1023300038783D1D002804D138464030007E002802 +:1023400004D089203449C00012F043FE31460120F8 +:1023500008F02AFC01242870002807D13048062202 +:1023600060303146054612F097FCAC717C71172045 +:10237000F8703C70F8BDF0B52B4F85B0403F3D7A0A +:10238000064627480078002804D13846A038007E49 +:10239000002804D0D3202049800012F01AFE3078A3 +:1023A000002806D0012804D022481B492C3812F0FE +:1023B00010FE082D4CD21C4820380190C46930789A +:1023C00000283FD0012804D01A4813491E3812F0C3 +:1023D00000FE294608310120884004430120A8401E +:1023E00020430090B1790E4C0802727969000919F6 +:1023F0001043FF3101318881B01C12F0AEFC7178BE +:1024000000020843A9000919C031C862387A401C8B +:1024100038720199009811E0B01B00007E050000A1 +:10242000E00200202500002000040020E706000054 +:10243000D801002079030000FF0E0000C8610020D1 +:10244000207108E029460831012088408443C5E70F +:10245000FE48072101710121FC480B224171C27025 +:10246000017005B0F0BD10B5F84C2078002804D1FB +:1024700020464030007E002803D0F549F54812F090 +:10248000A8FD12F0A5FE00202071012060710A2134 +:10249000E170207010BD10B509F0DDFB002804D0FC +:1024A000EC48EB49583812F094FD08F06FFA08F048 +:1024B00052F80AF07EFE002804D0BD20E4498000D6 +:1024C00012F087FD08F0B3FA002804D05F20E0493D +:1024D000C00012F07EFD12F07BFEDF480024047085 +:1024E000FFF77FF9D9480121047141710222C270BE +:1024F000017010BD70B5D54D04462878002804D170 +:1025000028464030007E002804D0F320D0498000C7 +:1025100012F05FFD20781F2801D8601C04D1CD483F +:10252000CB498F3012F055FD002028712078611CB6 +:1025300008F054FB012068712021E970287070BDFB +:10254000F8B5C24C0646207825464035002802D111 +:10255000287E002804D0BF48BD499C3012F039FDC8 +:102560003078012806D0002804D0BA48B8499D30F8 +:1025700012F02FFD012060710C20207130780027AF +:10258000B64E012808D008F0F1FE032867D008F005 +:10259000F1FE032871D076E008F0E8FE002803D1B0 +:1025A00008F0E8FE002804D008F0E0FE02283DD044 +:1025B00069E008F07EFA002865D0287C002862D106 +:1025C000A64802210C300FF03EF8002806D00F215B +:1025D000B089090212F0DAFBB18100E0B781012273 +:1025E00003219E4807F05AFE9C4808F006FCB0897B +:1025F00007F0D0FF002804D196489549B83012F072 +:10260000E8FCB089002108F0C9F9002804D09148FD +:102610008F49BC3012F0DDFC297F688B09F087FB05 +:1026200000282FD08B488A49C03015E008F0A2FE60 +:10263000002828D1287F002825D0012823D008F0A1 +:1026400038FA00281FD0297F688B09F070FB00281A +:1026500018D080487E49D33012F0BBFC12E0002035 +:1026600009F098FA00280ED12771287C00280AD199 +:10267000B089FFF797F806E0FFE7002009F08AFA33 +:10268000002800D127711B20E07001202070F8BDC8 +:1026900070B56E4D04462878002804D12846403095 +:1026A000007E002804D06B486949803012F091FC0C +:1026B00020781F2801D8601C04D166486449813005 +:1026C00012F087FC002028712078611C08F09AFA2B +:1026D000012068711A21E970287070BDF8B55B4D52 +:1026E000044628780C272E46403600280AD1307E32 +:1026F000002807D108F03AFE032803D008F03AFE7C +:10270000032804D153485249473012F062FC6079E3 +:10271000002801D001282FD1A079002801D001285C +:102720002AD1A07B002805D0012803D0022801D09F +:10273000032821D1607B40071ED0618801208003DF +:10274000814202D82288824201D920790CE0207986 +:10275000002804D0022805D0032803D004E0202953 +:1027600004D209E0A02A01D2012805D1208888429C +:1027700007D92079012804D0364835495C3012F059 +:1027800028FC20887083207930776079002802D077 +:10279000012803D00CE0324A002105E02B4A6032C8 +:1027A0009079002804D00121204608F086F90746D8 +:1027B00001202F7168711821E9702870F8BD70B57B +:1027C000224C05462078002804D120464030007E67 +:1027D000002803D01E49234812F0FBFB08F0C6FD79 +:1027E0000C2102280ED11D482A8883899A4219D1CA +:1027F0000246C032137F002B04D1807E0E2803D006 +:102800000F2801D0217103E00520107700202071EE +:102810000E20A0702E20E0702888E08001206071DA +:10282000207070BD0220F2E770B5084C0546207894 +:10283000002804D120464030007E002804D00948FA +:1028400003492C3812F0C5FB0EE00000E002002026 +:10285000B01B00003E03000000040020D80100204F +:1028600025000020D104000008F080FD0C21022882 +:102870000ED178482A8883899A421FD10646C036ED +:10288000327F002A04D1807E0E2803D00F2801D089 +:10289000217109E06F481022A91CEA3012F0FCF9FE +:1028A00004203077002020710E20A0702D20E070D1 +:1028B0002888E08001206071207070BD0220F2E75E +:1028C00010B501780B0012F075FC3D8787388787BB +:1028D00058878787873B3E878787515487878787B5 +:1028E00087874228872C3087878787348787878721 +:1028F00087878746874A4E872024876B5B5F63679D +:10290000876F877E827B77738700801CFFF78CFF41 +:1029100060E0801CFFF753FF5CE0801CFFF7DEFEE9 +:1029200058E0801CFFF7B4FE54E0801CFFF708FE5F +:1029300050E0801CFFF7DEFD4CE0FFF7ACFD49E006 +:10294000FFF791FD46E0801CFFF715FD42E0801C7B +:10295000FFF7EBFC3EE0801CFFF790FC3AE0801CA8 +:10296000FFF75BFC36E0FFF73EFC33E0FFF715FCBA +:1029700030E0801CFFF7D3FB2CE0FFF7B4FB29E02D +:10298000801CFFF77EFB25E0801CFFF757FB21E052 +:10299000801CFFF710FB1DE0801CFFF7DEFA19E03A +:1029A000801CFFF7BBFA15E0801CFFF771FA11E0FD +:1029B000801CFFF729FA0DE0801CFFF7F3F909E00E +:1029C000FFF7CEF906E0801CFFF79FF902E0801CBC +:1029D000FFF77DF9012010BD002010BD10B51E4984 +:1029E0001E4812F0F6FA10BD70B51D4A01241146BA +:1029F000184D4031030012F0DDFB05191C1C0419B1 +:102A00001C0001220021134807F048FC1448002153 +:102A1000483801774177C03809F005FA002804D01A +:102A20000E480D49D33012F0D4FA70BD0C745565C0 +:102A300070BD09490B48F6E730B5134606E0CC18DF +:102A4000203CE47FD51A44555B1EDBB2002BF6D147 +:102A500030BD0000D8010020B01B0000410600007E +:102A6000E00200204707000010B56038030012F0B4 +:102A7000A1FB0A060A0F13181F262A31363B0868E5 +:102A800000F093FD10BD05C9114600F0ADFD10BD6D +:102A9000086800F04CFE10BD05C9114600F054FE58 +:102AA00010BD4B6808788A68194600F065FE10BDB5 +:102AB0004B688A680868194600F07FFE10BD0868F8 +:102AC00000F09AFE10BD08884A6880B2114600F0F6 +:102AD000EAFE10BD05C9114600F00AFF10BD05C988 +:102AE000114600F01DFF10BD012010BD10B56C286F +:102AF00001D0012010BD087800F0B8FE10BD000024 +:102B000001203F49400608603E4908603E490A6886 +:102B1000FF231B029A4383121A430A603849803903 +:102B20000860704710B502460420384904E0C3002D +:102B30005B181B79002B0AD00346401EC0B2002B45 +:102B4000F5D133A1432012F044FAFF2010BDC30099 +:102B5000CA50002259184A718A7101220A7110BDA7 +:102B60002A4A0021C00080180171704710B5044640 +:102B7000042803D326A1522012F02BFA2348E100A7 +:102B80000C182079012803D021A1532012F021FA3A +:102B90006079A179401CC0B2814200D060710120EF +:102BA000174940068031086010BD70B516480068AE +:102BB0000004800F022803D015A1692012F009FA41 +:102BC000124E194C03252078C10088190279012A78 +:102BD00007D1427983799A4203D042798271705841 +:102BE00080472078401CC0B22070042801D3002008 +:102BF000207028466D1EEDB20028E4D170BD0000A3 +:102C000080E100E080E200E018E400E02C12002007 +:102C10007372635C736F635F7369676E616C6C6919 +:102C20006E672E63000000003C00002010B5EFF33B +:102C30001080C407E40F72B6D6484178491C417031 +:102C40004078012801D10FF065F9002C00D162B65F +:102C500010BD70B5CF4CE07800280AD10125E57091 +:102C6000FFF7E4FF0FF05EF9002804D000200FF01A +:102C700031F9002070BDC84865714560F9E770B54D +:102C8000EFF31080C507ED0F72B6C24C60780028D4 +:102C900003D1C2A18F2012F09CF96078401E6070B1 +:102CA0006078002801D10FF039F9002D00D162B60B +:102CB00070BD10B5B748C178002904D0002141711A +:102CC000C170FFF7DCFF002010BD10B504460FF007 +:102CD00029F9B049C978084000D0012020600020BF +:102CE00010BDF8B50246AB4C0026A67108200421A1 +:102CF00001251027130012F05DFA0D080A0C0E10C2 +:102D00001214161E262123252800257122E00220F8 +:102D100001E021711EE020711CE027711AE02020E3 +:102D2000F9E7012616E0FFF781FF0FF0FBF8002816 +:102D3000FBD002260EE02171A5710BE02771FBE7A5 +:102D4000202000E040202071F6E7FF2093A17E3094 +:102D500012F03FF90FF0F2F8002809D00FF0F4F864 +:102D6000B04205D130460FF0F2F80028FAD024E046 +:102D700001208007C5608D4A002151608C4A966110 +:102D8000854B02225A6085608A4803690569DB43E6 +:102D9000DB06DB175B1C10273D430561834D00E01C +:102DA00020BF6F68002FFBD0002B03D107691023D1 +:102DB0009F430761784882606960A07900280CD041 +:102DC0000FF0B0F805460FF00DF87B4A002D02D049 +:102DD000A260E06001E0E260A060002E01D100F09E +:102DE000B1F8F8BD10B504460FF0A2F8002805D0E0 +:102DF00068490120C8704A78521C4A702046FFF783 +:102E000070FF10BDF8B5694FB8680025012802D1E0 +:102E1000BD600FF05FF87868012800D17D603868E8 +:102E200001265C4C012814D13D606079002803D054 +:102E300000200FF04FF865712078002809D00FF0BE +:102E400071F8002805D05948C0388663000606612D +:102E5000A670386901282CD13D6100F068F8012086 +:102E600080074661A079002815D00FF05BF800902C +:102E70000EF0B8FF0099002901D0E16800E0A168D8 +:102E8000411A022901DA8A1C13DC0099002901D0B9 +:102E9000E06000E0A060FFF7C9FE0FF043F80028F3 +:102EA00006D04248C038866300060661A67000E07E +:102EB0002670F868012819D100F039F800F037F8C9 +:102EC00000F035F8A078002804D1FF2033A10530A8 +:102ED00012F07FF8FD60A5702570FFF7D0FE0EF0B0 +:102EE000F8FA002802D03148C038C663F8BD10B5E2 +:102EF000284CE078002801D10FF010F8012081075C +:102F0000886100F014F8A07800280BD0274CE06806 +:102F1000002803D10FF01BF80028F8D10020E06052 +:102F200000F005F800201C49C043886010BD08B5BA +:102F30005020694608806A461088411E118000288A +:102F4000F9D108BDF8B51448192787601749002042 +:102F50000860C8600EF0E6FFBD0701240D4E002892 +:102F600005D01248C03884632C61B47000E034701E +:102F7000FFF75CFE084847600D4930798863FFF72A +:102F8000D6FFAC61FFF7D3FF0849002008616C61F0 +:102F9000F8BD000040000020000300407372635C35 +:102FA000736F635F636C6F636B2E6300000100409F +:102FB0000005004000ED00E0FFFFFF7F10B510F0BE +:102FC00064F810BD00200449C8630120012181403C +:102FD000024A116000BF7047C01F004080E200E05D +:102FE00010B504460BF095F820460CF0AAF810BD79 +:102FF0007047704770477047704770477047704719 +:1030000010FFFFFFDBE5B151006001004F00FFFF43 +:1030100003B40148019001BD09000020FE49487039 +:10302000704710B5030012F0C5F8080E050E080829 +:103030000B0B0E1104F07DF810BDFFF7D1FF10BD92 +:103040000DF0E8FF10BD01F095FE10BDFF20F3A1CB +:10305000713011F0BEFF10BD7FB5F44905464868D8 +:103060008968082301910090F14A1946F1480EF051 +:103070008BFD0024F0480EF0A5FD641CE4B2082C82 +:10308000F8D3EB490320803140020CF02FF90028DF +:1030900003D0E2A1962011F09CFF1E220221E748F6 +:1030A0000AF0E7FCE5481E22032110300BF05BFA22 +:1030B000E2480722342174300AF034FCDF484C2106 +:1030C000283011F048FEDD496A46743108464C3814 +:1030D0000164FF317B31416401211172039002F0E0 +:1030E000B4F802A80CF050FC002803D0CBA1AA2011 +:1030F00011F06FFFCF4802222421A8380AF012FCF9 +:10310000CC4802222C215C380AF00CFCCC490B2064 +:103110000EF082F8002803D0C0A1B72011F059FFAB +:1031200003F0F4FF03F0F8F904F05AFE6B460022B6 +:103130000821C4A001F070FF002803D0B7A1BE2071 +:1031400011F047FF284605F071F9002803D0B3A11C +:10315000C02011F03EFF8521C900BD4811F0FBFDE4 +:10316000BB49B24A0020135C0C18401CC0B2E3708B +:103170000428F8D3A849002048608870C8707FBD33 +:1031800070B5B44E0546706A94B00C46401C04D12C +:10319000B06AC0430004000C0BD0306AC007C00FF7 +:1031A0002870706A11F0EAFDB06A2071000A60713F +:1031B00013E02B206946087009A968460AF0F8FB5D +:1031C000002803D095A1E42011F003FF012028700E +:1031D00006220AA9204611F05FFD2878002803D0B6 +:1031E0006079C0210843607114B070BDF0B5994C8E +:1031F0000646206895B00D463746401C0837002823 +:1032000008D16068401C05D1A068401C02D1E0686C +:10321000401C11D02068314611F0B0FD6068311DAE +:1032200011F0ACFDA068394611F0A8FDE068314608 +:103230000C3111F0A3FD25E02B206946087009A987 +:1032400068460AF0B5FB002804D0FF2073A10E30B9 +:1032500011F0BFFE08220AA9304611F01DFD2B20F7 +:103260006946087009A968460AF0A2FB002804D044 +:10327000FF206AA1153011F0ACFE08220AA93846D9 +:1032800011F00AFD20692E46401C0836002808D19E +:103290006069401C05D1A069401C02D1E069401C56 +:1032A00012D02069294611F069FD6069291D11F0CD +:1032B00065FDA069314611F061FDE06929460C31D8 +:1032C00011F05CFD15B0F0BD2B246846047009A90F +:1032D0000AF06EFB002804D0FF2050A1333011F01B +:1032E00078FE082209AF0AA9284611F0D5FC6846E5 +:1032F000047009A90AF05CFB002804D0FF2047A154 +:103300003A3011F066FE0822391D304611F0C4FC37 +:10331000D8E710B5002108460EF00CFD0021012071 +:103320000EF008FD002102200EF004FD0021032014 +:103330000EF000FD002104200EF0FCFC0021052011 +:103340000EF0F8FC10BD10B5414CA0780B2804D34A +:10335000FF2032A18A3011F03CFE207860214843E2 +:1033600000190830002101704178E722C908C9001E +:10337000C91C11404170284A0121917010BD70B5DF +:10338000254CA07800280ED0314800250178491C32 +:10339000C9B201700B2900D105708178491C817078 +:1033A0000EF093FDA57070BD70B51B4C05466068AE +:1033B000002804D0FF2019A1B33011F00AFE656087 +:1033C00070BD70B5144E224DFFF7BDFF7168044605 +:1033D000002907D06022FDF7F7FEFFF7D0FF00209D +:1033E0007060F1E72879002876D012485C380AF03E +:1033F000A9FA6060002804D1FF2008A1D13011F0A3 +:10340000E8FD60680AF0FCFA002831D0204600F0A0 +:103410006FFF607801071FE0340000207372635C67 +:10342000686F73745F636F72652E6300E051010013 +:10343000040400200C12002023300000840A002025 +:10344000B41000206E524635313832320000000090 +:103450008C0C00208000001007D5C008C000401C64 +:1034600060702879401E287127E0F74861682AE0DB +:10347000F54861680AF06FFA687900282CD0F248A4 +:103480004C380AF05FFA6060002804D1FF20EF4951 +:10349000F43011F09EFD60680AF0B6FA002816D0EC +:1034A000204603F085FE6078010709D5C008C000FA +:1034B000801C60706879401E6871FFF760FF83E7C9 +:1034C000E14861684C380AF046FA7DE704E0DE48DE +:1034D00061684C380AF03FFA70BDF7B505460078D0 +:1034E000002700090C463E46062803D0D749D84895 +:1034F00011F06FFD287A00280ED0012814D0D4488E +:10350000D249213011F065FD0298002C068001D0CF +:10351000278066800020FEBD02270926002C0ED0E1 +:10352000A889A080A87B08E003271426002C06D0D9 +:103530002869E060A88A2082287B2072E4E702984C +:103540000680E7E770B50E4600211C461980154637 +:10355000030011F02FFE0723050B1711231D230075 +:1035600022462946304603F0EFFD70BD224629462B +:10357000304601F078F970BD22462946304604F005 +:103580002AFB70BD22462946304602F0F9FF70BD85 +:10359000224629463046FFF7A0FF70BD9720AB4971 +:1035A000800011F016FD032070BD10B5A94C2178E4 +:1035B000002901D0082010BDFFF74EFD012020702A +:1035C000002010BD0146A04810B54C380AF0C3F9E0 +:1035D000A1494879401CC0B24871012803D19D48D7 +:1035E0004078FFF7C3FA10BDF8B50546072040073D +:1035F0000F460A18012189038A4209D2002D02D000 +:103600002818884204D2E81C80088000A84201D013 +:103610001020F8BD90488178002911D03988009198 +:103620004178602251430C18083420783B4600074B +:10363000000F00222146FFF785FF060004D015E0A9 +:10364000002038800520F8BD002D13D0398800985F +:10365000814201D90C260DE020783B460007000F7F +:103660002A462146FFF76EFF060005D00C2E01D03A +:10367000002038803046F8BD774D6878401CC0B2D5 +:1036800068700B2801D100206870A878401EA870CF +:1036900061784807400F022810D00128EAD16A4813 +:1036A00061680AF058F92879401CC0B228710128D5 +:1036B000E0D168484078FFF759FADBE7C806D9D46B +:1036C0006068FFF77FFFD5E770B50446634816468C +:1036D0000D46814204D15E485C49C53011F079FC49 +:1036E000012E05D05A485949D53011F072FC70BDF1 +:1036F00058480121C1706620207000202072A581E9 +:10370000A17370BD70B516460D46040001D1FFF7D8 +:103710001AFE662101700121017229680161A988E0 +:1037200081820673002C01D1FFF729FE70BD0721AD +:103730004907012241189203914201D3102070479A +:103740000721017000207047454A10B590420ED302 +:1037500001239B04C21A434B9A4208D3424B98421E +:1037600005D2072252078A18DB139A4201D3102090 +:1037700010BD0DF08AFD10BD394B10B599420ED326 +:1037800001239B04374CCB1AA34208D3364B9942F2 +:1037900005D2E3020124D318A403A34201D31020CD +:1037A00010BD022803D0102801D0092010BD0DF053 +:1037B00092FD0028FAD0052010BD70B5284B984224 +:1037C00012D301239B04274CC31AA3420CD3264BCC +:1037D000984209D2E4020D19DB139D4204D2002A5B +:1037E00004D014199C4201D3102070BD0DF099FD36 +:1037F0000028FAD0072070BD10B504460720400706 +:1038000001212018890394B0884202D3102014B0FB +:1038100010BD01F06AFD002801D01120F7E70F204C +:1038200008A9087369460BA80AF0C2F80028EED16F +:103830006846007A207068464089608068468089C2 +:10384000A0800020E3E70000B01100201C3400003D +:1038500015020000340000208C0C0020FFFF000047 +:10386000006001000000FC1F0040002010B594B073 +:10387000044601F03AFD002801D01120C7E7002CD2 +:1038800001D00720C3E7392168460170002181700B +:1038900009A90AF08DF8002803D02B492B4811F014 +:1038A00098FB0020B3E770B5294C0846E178002961 +:1038B00013D000280FD007225207012385189B033D +:1038C0009D4203D20568AA189A4201D3102070BD08 +:1038D0008288002A03D0012903D0082070BD092066 +:1038E00070BD04F0E1FA0028FAD10021E17070BD4A +:1038F000184A10B5914208D301229204164B8A1A35 +:103900009A4202D3154A914201D3102010BD0246BB +:10391000203A1F2A02D801F01FFC10BD072010BD5D +:1039200007225207012310B58A189B039A4201D33C +:10393000102010BD0246203A1F2A02D801F068FC70 +:1039400010BD072010BD00001C34000079030000EA +:1039500034000020006001000000FC1F0040002037 +:103960008107C90E002808DA0007000F0838800810 +:103970002C4A80008018C06904E080082A4A800030 +:1039800080180068C8400006800F704710B50D20F1 +:10399000FFF7E6FFC4B20420C043FFF7E1FFC0B267 +:1039A000844203D021A11A2011F013FB10BD012184 +:1039B000234A48031060234B00221A60224A5160B8 +:1039C000224A1060224A11601D4980390860704700 +:1039D00001211B4A480310601D4A5160194A002109 +:1039E00011601A490860704710B516490868012827 +:1039F00004D00EA1562011F0ECFA10BD15488068D5 +:103A00000022C0B20A600DF0BBFE10BD10B50D481B +:103A100001680029FCD0FFF7E7FF01200B494003B4 +:103A2000086010BD00ED00E000E400E07372635C2C +:103A3000736F635F68616C5F726E672E6300000076 +:103A400080E100E000D1004000D3004080E200E0CF +:103A500000D0004000D5004030B40121BC48C9026C +:103A60000160CD1005604A030260BA4803681B027A +:103A70001B0A036004680023240A24020460B64879 +:103A80000468240A24020460B44801244460846069 +:103A9000B34C23606360A360B24B19601D601A6071 +:103AA000B14B19601A600121016030BC704710B43D +:103AB0000121A748CC0204600A0202600B060360E1 +:103AC000A64841608160A64900200860486088607F +:103AD000A44804600260036010BC70470121A14843 +:103AE000C9020160C91001607047002805D0012893 +:103AF00005D0022805D19D4870479D4870479D48D4 +:103B0000704710B59CA18B2011F063FA002010BD06 +:103B100070B500219F4CA04DA04A914B002808D0C1 +:103B200001281DD0022822D093A1B32011F051FA10 +:103B300070BD01200004A060A86011601960984B5E +:103B400042109A60974A9060814A0012106096482D +:103B5000016087480160954801609548017070BD1B +:103B600001204004A060A8605160596070BD012030 +:103B70008004A060A8609160996070BDF8B594461B +:103B8000844A854D00240127754E002808D001285D +:103B900036D0022844D078A1E82011F01AFAF8BDF6 +:103BA000891E0902090A01200004906034606860DF +:103BB0007A4A1160012B21D000217D4A7D4B517042 +:103BC00061463D31DC63DF637B4B5C6002249C60BB +:103BD00004241C61744B196074490F60614B891592 +:103BE0001960704B58606048016075487349C16046 +:103BF00086606B49600348601770F8BD0121DCE7FF +:103C000001205C4E40046F4F012B04D134605060A2 +:103C100068603960F8BD9060346068603960F8BDF4 +:103C20000120524E8004684F012BF4D1EEE7674823 +:103C30004068704770B54A4D28680026554C0128E9 +:103C400006D1A068C00303D501200004A0602E6047 +:103C50006868012809D1A068800306D501204004C6 +:103C6000A0606E6001200FF04CF9A868012809D10E +:103C7000A068400306D501208004A060AE60022049 +:103C80000FF03FF970BD10B549490878002818D0E9 +:103C90000120434AC0039060424A400090602C4A91 +:103CA00000121060404A00201060314A10603F4A04 +:103CB000106008704A78002A02D048700FF021F98D +:103CC00010BD0320FAE70120414900060860704753 +:103CD0000120244900060860704701203C49400546 +:103CE0000860704701201F4940050860704731494E +:103CF0000020C86388151B4908607047410A354A8F +:103D0000C005C00D5043801C5143400A081870473D +:103D100010B4314C430B63431B0C5C020C602D4C04 +:103D20006343C31A2D485C0258432A4B400D43435A +:103D3000E31A0124DB0324041B191B1613700A6801 +:103D40001018086010BC704710B50FF0B2F910BD24 +:103D500080E100E008E400E018E400E000B000408A +:103D600040B1004080E200E000E100E048B10040E6 +:103D70004081004044B100407372635C72656D5FC6 +:103D800068616C5F6576656E745F74696D65722ECF +:103D90006300000000B3004040B3004040B5004065 +:103DA00000F5014000830040408500400082004053 +:103DB00050000020C08F004000850040008000407F +:103DC00080F5014044B5004048B5004000B50040D2 +:103DD00000E200E0093D0000378600006F0C0100A2 +:103DE0000E4A12680C498A420AD118470B4A1268D7 +:103DF000094B9A4204D101B50DF0DDFD03BC8E469E +:103E0000074909680958084706480749054A064B03 +:103E10007047000000000000BEBAFECA1C0100206E +:103E200004000020901D0020901D002010B5FA4CC9 +:103E300094B02168087A002836D017206A4610709E +:103E400000A806220931023010F026FF09A96846B1 +:103E500009F0AEFD112825D02168C03189790629E5 +:103E600020D007291ED008291CD004291AD00929DE +:103E700018D00A2916D00B2914D0052912D00028F1 +:103E800003D0E6A1F32011F0A4F82168B82040582F +:103E900006221C30093110F0FFFE2068017A8030C4 +:103EA000806BC17614B010BD3220C7E770B5DA4D13 +:103EB000044629680300C03111F07CF90C077C0B23 +:103EC0001A212E3B48515C677080FF20D3A1093036 +:103ED0006EE0887901286DD009286BD0052869D05B +:103EE0000A2867D00B2865D0FF20CCA10E305FE0F8 +:103EF000887901285ED0FF20C8A1153058E0887964 +:103F0000062857D0072855D0082853D0052851D067 +:103F1000FF20C2A118304BE0887909284AD00A282E +:103F200048D00B2846D0042844D0FF20BBA11E3027 +:103F30003EE0887903283DD007283BD0082839D0B7 +:103F4000092837D0FF20B5A1243031E08879062830 +:103F500030D00A282ED0FF20B0A12A3028E088795E +:103F6000062827D0072825D00B2823D0FF20ABA177 +:103F70002E301DE0887906281CD00A281AD00B287C +:103F800018D0FF20A5A1333012E08879092811D07C +:103F90000A280FD0FF20A1A1383009E0887909282C +:103FA00008D00A2806D0082804D0FF209BA13C3066 +:103FB00011F00FF82868C030847170BDFF2097A100 +:103FC0004130F5E79449C9220968525CD206920F44 +:103FD00005D1A0318A8B824201D1887F70470020B1 +:103FE000704770B504461120207000218A4D617021 +:103FF0002968C031897A002908D003290ED0042904 +:1040000010D0FF2085A16A3010F0E3FF207800096E +:10401000012802D92868807D607070BD0007000FFC +:10402000203002E00007000F30302070EEE730B59E +:1040300003887E497E4C8B4202D09A1FA2421ED238 +:1040400042888A4202D0951FA54218D2934216D8C0 +:1040500083887D24E400A34211D8C088884205D01B +:10406000734D04460A3C2D1FAC4208D2884208D04A +:104070008A4206D05B1C5A43C000824201DD072001 +:1040800030BD002030BDFFB50022099B002802D0C2 +:10409000994205DC5CE0002902D1002004B0F0BDAB +:1040A0000920FBE7845C002C12D085186F780D2F57 +:1040B0004CD010DC3B0011F07DF80A421B2A2A305C +:1040C0003032323A3A42835C002B3FD1521CD2B29A +:1040D0008A42F8DBE1E7122F31D004DC0E2F35D015 +:1040E0000F2F2CD132E0142F11D0152F27D116E02D +:1040F000022CD5D1AB78039C072B237001D25B0730 +:1041000001D40A20CAE7029B01241B7814E0E34390 +:10411000DB0708E0012C08D011E00620BEE70F25E0 +:1041200023072D075B19002BF4D03046B6E7029B1E +:104130001B789C070AD402242343029C2370835CCF +:10414000521C9A18D2B28A4204DDA9E70B20A5E7D7 +:10415000192676028A42A5DB9FE705E00278401C1B +:10416000002A01D0002070470A46491E89B2002A61 +:10417000F4D10120704730B5274D0021286887B061 +:10418000C943A030818300248477214606200DF0A6 +:10419000D1FD002105200DF0CDFD002102200DF004 +:1041A000C9FD0120FFF782FE28686946C030C4714E +:1041B00004720120087068460BF007FC07B030BDA0 +:1041C00030B5154C95B02268C0329279042A0CD0D3 +:1041D000052A0AD028236A4613705080132906D076 +:1041E0003B2904D0072015B030BD0820FBE7117132 +:1041F000104609A909F0DCFB05000BD12068C0308E +:104200008179062916D0082914D0072912D0052053 +:10421000FFF74CFE2846E6E7540000207372635C0B +:104220006761705F636F72652E630000FFFF0000BF +:104230007B0C00000420EBE730B587B0040003D00E +:10424000002107200DF076FDFE4D012128686A4609 +:1042500001720421117003210C300DF06BFA2968F2 +:104260004022887B8006800E1043887368460BF0DE +:10427000ACFB00280DD12968098A00299ED0002CAA +:104280009CD08B000122002107200DF0AEFC0728F6 +:1042900001D0032092E7002090E770B50025064684 +:1042A000002803D0002107200DF044FDE54C01213A +:1042B00020680172062109300DF03CFA2068817BEC +:1042C0008906890E8173FFF7B1FD2068008A0028F6 +:1042D0000AD0002E08D083000122002107200DF013 +:1042E00084FC072802D00325284670BD0025FBE783 +:1042F000F0B59BB0040004D11920D349400110F05F +:1043000068FE72202070616800260A780825521F16 +:104310000127CC48130010F04DFF0F0976D9FD7628 +:1043200078FCFBB576767676FAF97600C5480068B3 +:10433000C0308079032803D0C349C44810F049FE37 +:10434000002108460DF0F6FC002107200DF0F2FCDC +:104350006078BC4A28436070106810250146C0315F +:104360004B7A2B434B7263689D783C2D48D00246B4 +:104370009D88A032977763688030DB890B80636803 +:104380001B8A4B8063685B8A8B8095836168826B34 +:10439000C97911756168806B08311530062210F0FB +:1043A0007BFC0620FFF782FDA648CA210068FB229D +:1043B0000E54017E11400176B82109588A7A92087C +:1043C00092008A724682284602F0ACFE002804D091 +:1043D0009E489D491A3010F0FCFD284602F0BCF8BA +:1043E000002804D0994898491D3010F0F2FD284665 +:1043F00003F008FD002806D069209349C0003EE183 +:104400000120FFF753FD1BB0F0BD064600688F8802 +:10441000C0308079062812D0072810D008280ED086 +:1044200004280CD009280AD00A2808D00B2806D066 +:10443000052804D0D5208449800010F0CAFD60789A +:10444000284360703068C030417A294341728079D6 +:10445000092811D00A280FD00B280DD005280BD021 +:10446000FFF789FE384602F062FE384602F07AF81D +:10447000384603F0FDFCC6E7FFF77DFE0220FFF79C +:1044800015FDEFE70068C0308079062812D00728B4 +:1044900010D008280ED004280CD009280AD00A28E9 +:1044A00008D00B2806D0052804D06F206649C0002C +:1044B00010F08FFD6068807902F0F1FE0028A2D034 +:1044C0006178294361706168C8809CE7074600688D +:1044D000C0308079062812D0072810D008280ED0C6 +:1044E00004280CD009280AD00A2808D00B2806D0A6 +:1044F000052804D055485449623010F06AFD6078B0 +:10450000284360706068C188386804E032E197E150 +:1045100084E084E00FE0C030018061680989418057 +:10452000616849898180002102200DF003FC386810 +:10453000C030C67167E706460068C030807906283B +:1045400019D0072817D0082815D0042893D0092897 +:1045500011D00A280FD00B280DD005288BD03B484E +:104560003949793010F035FD3068C0308079042841 +:10457000ABD00528A9D03068807C40063AD5606869 +:1045800002210C30FFF7E9FD002833D060680821D4 +:10459000001DFFF7E2FD00282CD03168B8204058FC +:1045A000807A800708D1CA20405C002808D1488A58 +:1045B000C20505D5C00703D14A8A402082434A82FA +:1045C0004A8A802082434A822D2268460270BC209B +:1045D000425A684642801022973101A810F05CFBD5 +:1045E00009A9684609F0E4F90028A3D0174816493C +:1045F000A03044E062683068AC2192890A52616858 +:104600000822091DAE3010F047FB10A80574306871 +:10461000AE30159014A80BF0D8F9F4E68F71064669 +:104620000068C030807906281FD007281DD00828D0 +:104630001BD00428F1D0092817D00A2815D00B2840 +:1046400013D005E0540000201C42000029030000A4 +:104650000528E2D0F949FA4810F0BBFC3068C030B8 +:1046600080790428D9D00528D7D0606881790029BD +:1046700002D08078002805D0F148F0496C3010F065 +:10468000A8FCC0E66078B8212843607030680958FB +:10469000897A8907890F012952D1817C09064FD473 +:1046A000017E490701D5042100E00321C030817259 +:1046B0002B206946087009A9684609F079F9002895 +:1046C00004D0DF48DD49213010F083FC69463068B2 +:1046D000098D81820E2210A90A74DA49B822159137 +:1046E000125808324A61024660324A6092790A7072 +:1046F000024614320A61521D8A601032CA60133AAF +:104700008A619632CA61921C0A62473A4A62103242 +:104710008A621032CA62473ACA63521E0A64921F02 +:1047200050304A64886414A80CF038FB022815D075 +:10473000002813D0C248C1494A3010F04AFC0DE0AD +:10474000817C4906017E490701D5042100E003214F +:10475000C0308172002106200DF0ECFA3068418AE9 +:104760000A0602D440229143418289B280229143B9 +:10477000418248E6B4480068C0308079032804D0FC +:10478000AF48AE49783010F024FC002108460DF007 +:10479000D1FA002107200DF0CDFA6078AA4A28430B +:1047A0006070106810250146C0314B7A2B434B7264 +:1047B00063689D783C2D00D122E602469D88A03298 +:1047C000977763688030DB890B8063681B8A4B8036 +:1047D00063685B8A8B8095836168826BC979117588 +:1047E0006168806B08311530062210F055FA0620FA +:1047F000FFF75CFB9448CA210068FB220E54017E3F +:10480000114001764682284602F08CFC002804D034 +:104810008B488A49923010F0DCFB284601F09CFE60 +:10482000002804D086488549953010F0D2FB2846F0 +:1048300003F0E8FA00289CD08148804997301EE7B1 +:10484000607828436070DEE500290BD088807E48C0 +:104850000068C0300288CA8002880A8142884A8182 +:10486000808888817047F7B5064600780C46002797 +:10487000010982B03D46012974D073480068009058 +:10488000C03002296FD0072904D00A296CD06B49A7 +:104890006E48E3E171680A78521F130010F08AFC39 +:1048A0000F09A551A5A52F585847A5A5A5A5656F22 +:1048B000A5008A783C2A1BD010271625002C7DD015 +:1048C0008888A0807068A21DC08920827068C08915 +:1048D000E0817068008A60827068408AA082716896 +:1048E00008460831C07901F09FFB0020607375E035 +:1048F00019270725002CE2D00021A17171E01127B2 +:104900000725002CDBD089880091A1807168F722EF +:104910008979A171417A11404172009802F008FC36 +:10492000009801F023FE009803F0B0FAC1E10127DE +:104930000925002CC3D08888A080706880792072F7 +:10494000B7E1888812270E252146FFF77DFFB0E1E9 +:1049500018270825002CB2D08888A080A01DFFF75A +:1049600040FBA6E145E0A1E15DE01A270725002C08 +:10497000A5D04888A08070680079A07199E18A78F4 +:104980003C2AB5D010271625002C98D08888A08006 +:104990007068C08920827068C089E0817068008A70 +:1049A00060827068408AA0827168607B497D40089F +:1049B0004000C907C90F0843607300E036E1716821 +:1049C000C007497DC00F49084900084360737168FA +:1049D000A21D08460831C07901F026FB1A4800687C +:1049E000C030417AEF22114046E1532013490001C3 +:1049F00034E1307A012803D014481049C5382DE13C +:104A000012270E2570892146FFF71EFF002C91D03A +:104A100070784007400F032888D10B480068C030E9 +:104A2000417AFB22DFE708490968A031002C01D058 +:104A30008A8BA280327A921E0AE000001C4200009B +:104A4000ED030000AC120020540000200C06000012 +:104A5000130010F0AFFB073D4853EDEE6F05ED007E +:104A600013270C25002C90D0009900224A82F1686F +:104A700089788907890F0129217A26D049084900B8 +:104A80002172FD231940F3689B785B07DB0F5B0005 +:104A900019432172E323E2801940F3681B785B0716 +:104AA000DB0E19432172DF231940F3685B78DB07C3 +:104AB0009B0E194321726272F1680122C978A172BA +:104AC000017A1143F7221140ADE001231943D7E7E2 +:104AD00015270C25002C9AD0F06806220068A11D2D +:104AE0000EF07CFFE5E016270725002C8FD0317BE8 +:104AF000A171017A08221BE00172DAE01427122565 +:104B0000002C84D00098A21D8030806B01461531A6 +:104B1000007D01F089FAB089E081207C0121084301 +:104B2000F92108402074FE480068C030017A022252 +:104B30001143E1E717273825002C77D03221A01D3B +:104B400010F007F90020A071207A03210843207299 +:104B5000FB210840F24909680A7E5207D20F9200F1 +:104B600010432072B8204058807A800757D0A07A2E +:104B70008A7C4008D2074000D20F1043FD2210402B +:104B8000A0728B7CFB229B07DB0F10409B0018431D +:104B9000A0728B7CF7269B07DB0F3040DB001843AD +:104BA000EF231840A072E07A10408A7CD206D20F20 +:104BB00092001043E0728A7C3040D206D20FD200BD +:104BC0001043E072888AA0812046102267310E309F +:104BD00010F062F8D249A07F0968C0078A7DC00F33 +:104BE00052001043A0770A7E400852074000D20FBF +:104BF0001043A077084640304DC820344DC4303CA7 +:104C00003F20405C22463032393101F00DFAC44871 +:104C100000688030806B817A890889008172C04881 +:104C20000068C030017AFB22114065E737E000E000 +:104C300038E0327B022A14D017273825002C2ED0DA +:104C4000017AFB2319400172012A17D0032A17D0D9 +:104C5000042A18D0052A16D0B249B34810F0B9F981 +:104C600027E019270725002C19D0898BA180012165 +:104C7000A171417A4908490041721AE0012000E01F +:104C80000220A07106E0707B0007000F8030A07149 +:104C9000052A02D00020E0710BE00120FBE7049818 +:104CA00005800CE0A0489F490A30D7E7317A0029F7 +:104CB00008D00498002C058001D027806580002052 +:104CC00005B0F0BD19270725002CE8D00021C94305 +:104CD000A1800021A171417AFD2284E610B5904C9B +:104CE00094B02068C0308079022809D0032807D00A +:104CF000052805D0092803D00A2801D00B2837D170 +:104D00001B2108A801730021817369460BA808F0D4 +:104D10004FFE002804D1684640781B2802D00320AB +:104D200014B010BD002108460DF004F80021072042 +:104D30000DF000F868468078002819D12068C0304E +:104D40008079801E030010F035FA0A060613081356 +:104D500013130D0F1113012000E00420FFF7A6F834 +:104D60000020DDE70620F9E70720F7E70820F5E750 +:104D70000820D5E770B50025694C002807D0022827 +:104D800017D0072828D033206649400146E0FFF7B6 +:104D9000A5FF00280CD1FEF7D6FA2221017005727A +:104DA000FEF7EDFA2068C030417A022211434172C9 +:104DB00070BDFEF7C8FA122101700121017221684D +:104DC000BC22525A4281C031CD71FEF7D8FA206818 +:104DD000C030417A0422E9E72168C620405C0228FD +:104DE00009D0032807D0092805D00A2803D00B28AA +:104DF00001D00528DCD1887B8109012911D08009E7 +:104E000004D0494847496E3010F0E3F80020FFF71E +:104E100044FA0028CCD044484249723010F0D9F806 +:104E200070BD0020FFF708FAF3E770B50D460400E7 +:104E300004D1CD203B49C00010F0CBF820780128E8 +:104E400005D0394837499D3010F0C3F870BDA188AE +:104E50003648334E814209D1E288824206D1306819 +:104E60001321A030808BFFF7ABF970BD814202D1D6 +:104E7000E08800280AD012202870687808210843AA +:104E8000687007CC083507C5002106E000227823AA +:104E9000114602200CF0A9FE02213068C030C17119 +:104EA00070BD1F480068C030807A704738B51C4C10 +:104EB00005460278206813000146C03110F07AF9E7 +:104EC00009A8060909A21945728AA800FEF7AEFFD3 +:104ED00038BD8879062806D0092804D0124811491F +:104EE000B53010F076F820680422017E1143017677 +:104EF00088E0A9880029EBD0A030808B0B4988423C +:104F0000E6D0A868002804D107480649C53010F04B +:104F100060F8A8680A38A8600090AB88206807E0AD +:104F2000540000201C420000E9050000FFFF0000C3 +:104F3000A030808B0622042102F028F80028C7D078 +:104F4000F849F94810F045F838BD287902288879E1 +:104F50000DD00428F8D00528F6D0284601F075F8C1 +:104F600020681321A030808BFFF72AF938BD07286D +:104F700006D00A2804D0EC48EA490A3010F029F893 +:104F8000284601F062F820680122C030417A1143BE +:104F900041728079072803D00920FEF787FF38BDCA +:104FA0000620FAE7887906280AD0042808D00928BC +:104FB00006D0052804D0DC48DA49313010F009F871 +:104FC0000ECDDA480361C2608160A2210170FEF754 +:104FD000EBF938BD8879062818D0072816D009289B +:104FE0000DD00A280BD0D048CE4944300FF0F1FF45 +:104FF0002068C0308079062808D0072806D00B200A +:10500000FEF754FF284601F020F838BD0820F7E7E6 +:10501000C548C449583095E7FFB593B001246846A8 +:1050200003218470C9021D4601800AF0A6F90022FE +:105030006946012003F0ABF906460AF0A2F9002EFA +:105040005CD16846152184704902018000271C212B +:1050500001A808970FF07FFE01200146103108A833 +:1050600001700020014608A841708178F9200140B4 +:10507000891C214308A881706846017902263143C2 +:10508000017114998185C7851F21018608A80A909E +:1050900013980D90684609900AF06FF90EAA09A9B5 +:1050A00001A802F036FF07460AF06BF9002F02D084 +:1050B000384617B0F0BD9E4F68463968008F48806B +:1050C000684684709B49018008A88078F9210840CF +:1050D000801C4108490008A88170684686850686BC +:1050E00015A80D900AF049F90EAA09A901A802F025 +:1050F00010FF06460AF045F9002E01D03046D8E7E9 +:1051000068463968008F88808A4968468470C91C5F +:105110000180298810A8018069884180A988818040 +:10512000E988C180082168468185018610A80D9014 +:105130000AF023F90EAA09A901A802F0EAFE044622 +:105140000AF01FF9002C01D02046B2E76846396802 +:10515000008FC8800020ACE7F0B5774D95B00C46C5 +:10516000A9423FD30126B604744FA11BB94239D3DB +:1051700073498C4236D2202806D0212827D02228F5 +:1051800042D0072015B0F0BD3C216846017021884F +:1051900041806188818009A908F00AFC0028F1D1CA +:1051A00008A98979002903D002290ED00320E9E754 +:1051B0006168A942E6D38A1BBA42E3D3604A9142AE +:1051C000E0D26A46128D0A80DCE75E48DAE72068A2 +:1051D000574C002813D00721490701224118920398 +:1051E000914201D31020CDE706210EF0E1FB2168AA +:1051F000A82250500120A03188750020C2E7206805 +:105200000021A0308175F8E7204600F02AFFB9E7B9 +:10521000494A10B5914208D301229204474B8A1A99 +:105220009A4202D3464A914201D3102010BD202851 +:1052300005D0212803D0222803D0072010BD062046 +:1052400010BD084600F051FF10BD70B50446374848 +:10525000CC21AC300FF07FFD3448354EAC3000210E +:105260003060C943A0308183002585770120FEF797 +:105270001DFE3068C7210D54E121C57389000182EC +:10528000B6210D54014609310830FDF779FF316828 +:10529000084629311930FDF7A9FF002C24D03068C9 +:1052A00080308463FEF7C2FD1E20E081607A8F218A +:1052B0000840303060723068014614312161983105 +:1052C0006162933921601031616025721339A162E6 +:1052D000091FE1628531E163303921631031616377 +:1052E00010310930A163A06470BD11480068C0305E +:1052F0008079042803D0052801D0002070470120C0 +:10530000704770B506460C480C46814208D3012010 +:1053100080040A49201A884202D30948844213D3E0 +:10532000102070BD1C420000B30600004C1200208B +:1053300054000020012A0000006001000000FC1F52 +:105340000040002002300000FFF7CFFF002801D00E +:105350001120E6E7FD48FE4D002E02D0012E46D179 +:105360002FE02278002A0AD00121012A09D0022A3E +:1053700014D0032AD5D1A2799209D2D112E000210A +:1053800003E0A2799209032ACBD128680622017290 +:1053900060308171611C0FF07FFC05E0A2799209F9 +:1053A000012ABED128680172002107200CF0C2FC3E +:1053B00028680622611C09300FF06EFCFEF736FDEE +:1053C00011E02178002912D0012910D0022910D033 +:1053D0000329A6D10120FEF760FF002803D0DD4994 +:1053E000DD480FF0F6FD2868C673002099E7072016 +:1053F00097E70120FEF720FFEFE707214907012289 +:1054000010B541189203914201D3102010BDD0492C +:10541000024609680B7A0931184600F005FE0020A3 +:1054200010BDFFB599B005460020694608710872A5 +:1054300008A9087408751E4614460121C748890446 +:10544000C74AC84B002D06D085420DD36F1A97422C +:105450000AD39D4208D2002C09D0844204D3601A9A +:10546000904201D39C4202D310201DB0F0BD2846CB +:10547000204318D01F270CAB01AA009728461A9981 +:10548000FEF701FE0028F0D10DAB02AA31462046FE +:105490000097FEF7F8FD0028E7D16846007AC107BB +:1054A00003D00A20E1E70720DFE7800705D568463B +:1054B0000079800701D50B20D7E7FFF716FF0028FA +:1054C00001D01120D1E703AF002D0FD01A2069467B +:1054D00008731A9888732946F81C1A9A0FF0DCFB97 +:1054E0000EA903A808F064FA0028BED1002C0ED043 +:1054F000202168460173867332462146F81C0FF05E +:10550000CBFB0EA903A808F053FA0028ADD19049AF +:1055100008A80968007C08700020A6E7F0B50446DA +:105520008E48002795B084426FD301208004211A51 +:105530008B488142F8D38B48844266D22378012B72 +:105540000BD1864960688842EED39904421A844997 +:105550008A42E9D383498842EFD27D490A681546D9 +:10556000C035A879022814D0032812D0052810D0FD +:1055700009280ED00A280CD00B280AD0012803D005 +:10558000002B06D0012B04D0687AC506AD0F06D1DA +:1055900001E00820F6E5850701D4400701D5112078 +:1055A000F0E5012B15D0208A6F4E0546203DB5420F +:1055B0007ED2022B01D0032B01D1A02878D3012B5E +:1055C00007D01078C00704D0608A002870D0B428B3 +:1055D0006ED8002B06D0012B08D0022B04D0032B51 +:1055E00066D110E0002512E0022510E06068012578 +:1055F000007800280BD0012808D0022806D0032804 +:1056000004D05248BEE5032501E066E00127D07BC7 +:1056100001281CD1108A002819D0907B810901290A +:1056200011D0800904D04C484A49E4300FF0D1FC35 +:105630000120FEF732FE00280BD047484549E830EC +:105640000FF0C7FC05E00120FEF7F6FDF3E7FEF7DB +:10565000EDFB207A002806D0012806D0022806D0CB +:10566000032825D105E0002604E0012602E00226F9 +:1056700000E00326002D01D0022D42D1002E40D0A3 +:10568000E068002814D00179002928D008290FD813 +:10569000027B9446082A0BD800290ED02F4A0168B5 +:1056A00091421AD3012292048B1A2D4A934200E0B0 +:1056B00084E012D32B4A91420FD26146002912D0C6 +:1056C00080682649884208D301218904421A244966 +:1056D0008A4202D32349884205D3102052E5027B37 +:1056E000002A6BD0D4E71A4800680078800702D0FF +:1056F0001648401E46E5022D03D1022E5ED0032E31 +:105700005CD0182168460170218A4180218A8180FD +:1057100085710F480068007A002801D0012870D1F7 +:105720006946C8716846077221780930012932D06C +:1057300006210FF00EFB07216846C173067409A904 +:1057400008F036F90028C9D10A210FE00232000022 +:10575000540000201C4200005F08000000600100AF +:105760000000FC1F00400020E13F0000684601707F +:1057700009A908F01DF90028B0D13A20694608703F +:1057800009A9684608F014F90028A7D1002D08D00F +:10579000022D06D04CE061680622491C0FF07CFA0D +:1057A000C9E7002E44D00026374623E00168B00048 +:1057B00009580978002903D0012904D00720E1E421 +:1057C00069468F7002E001216A469170E168062205 +:1057D0000968095800A8491C03300FF05DFA0B2036 +:1057E0006946087009A9684608F0E2F80028E6D181 +:1057F000761CF6B2E0680179B142D7D800266F4630 +:1058000012E050E08068B10041581022B81C0FF03F +:1058100043FA3B206946087009A9684608F0C8F8B1 +:105820000028CCD1761CF6B2E068017BB142E9D801 +:105830001B20694608700120887009A9684608F095 +:10584000B7F80028BBD108A840791B282BD1002D20 +:105850000AD0012D04D0022D08D0032D18D105E067 +:105860000320FEF723FB26E003200FE0FE4800683C +:10587000C030807903000FF09DFC0916061616183B +:1058800016081A1C1600022000E00920FEF70EFB85 +:10589000608A00280FD000228300114610460CF0C9 +:1058A000A4F9002807D003206CE40520EEE70A20C5 +:1058B000ECE70B20EAE7002064E470B586B00C004A +:1058C00006460BD0E94884424AD301208004E849C7 +:1058D000201A884244D3E748844241D2E24D2868E6 +:1058E000C030C179022902D0407A400702D5112088 +:1058F00006B016E5002C04D02046FEF798FB0028E1 +:10590000F6D13046FEF75EFB012803D0022823D0F3 +:10591000D948EDE721001BD1082069468882286814 +:1059200001ABC08805AA002103F019F90028DFD1D6 +:105930006846808A082801D00320D9E76846818814 +:105940008181C188C181018901824189418203A984 +:10595000304601F074FCCBE7002C01D00620C7E7ED +:105960001020C5E770B50C460546FEF72BFB012855 +:1059700003D0022801D0C048D3E421462846FEF7D0 +:105980001FFCCEE400B50146143095B0192801D2B1 +:10599000880707D008461E3004D00A3002D00720FE +:1059A00015B000BDFFF7A1FC002801D01120F7E7DA +:1059B000AD4831220068417068460270817009A9C3 +:1059C00007F0F6FFECE701B582B0022069460880D7 +:1059D000A54802AB00686A468088002102F02AFFD1 +:1059E00069460988022900D003200EBD38B502217E +:1059F0006A4611800721490701224118920391420A +:105A000001D3102038BD9849034609686A468C883E +:105A10000021204603F0A3F8694609880229F1D045 +:105A2000032038BD3EB504460820694608808F48EB +:105A3000844208D3012080048D49201A884202D371 +:105A40008C48844201D310203EBD2046FEF7EFFA79 +:105A50000028F9D12088694688806088C880A0889D +:105A60000881E0884881804801AB00686A46C088A8 +:105A7000002102F0DFFE694609880829E4D00320EE +:105A80003EBD1FB504460820694688817748844298 +:105A900008D3012080047649201A884202D3754831 +:105AA000844202D3102004B010BD6F486B460068DA +:105AB00003AAC088002103F052F80028F3D16946F8 +:105AC0008989082901D00320EDE7694609882180EA +:105AD00069464988618069468988A1806946C98884 +:105AE000E180E0E7FEB50546604817460E46814274 +:105AF00008D3012189045E4A731A934202D35D4B95 +:105B00009E4201D31020FEBD1F2F01D90C20FEBDE7 +:105B1000554C85422AD3681A904227D39D4225D2FC +:105B2000206801A9408802F037FE0028EFD12878CC +:105B300069464871206801A9408802F010FE0028DB +:105B4000E5D169460090087802210843694608704B +:105B50004979090703D0082108436946087020687D +:105B60006946408802F0A5FD0028D0D169460F8122 +:105B700020683346408802AA002102F05BFE694695 +:105B80000989B942C3D00320FEBD38B50C460721B0 +:105B9000012249079203002802D04318934202D2FF +:105BA0006118914201D3102038BD21886A461180C6 +:105BB000002801D000290BD02B49034609684D88E5 +:105BC0000021284602F0CBFF69460988218038BDB4 +:105BD0000C2038BD30B50C46244987B08C4208D320 +:105BE00001218904224A611A914202D321498C423F +:105BF00002D3102007B030BD1B4D2968C0310A7A8E +:105C0000520708D48979491F0B000FF0D3FA050415 +:105C10000604040604000820ECE7FEF7D3F9012887 +:105C200003D0022839D01448E4E720881E2801D286 +:105C30000720DFE72868C030807906282BD00A20AB +:105C4000FEF734F90520694608700879A1788008C4 +:105C5000C9078000C90F084369460871FB21084045 +:105C6000A1788907C90F09E05400002000600100F5 +:105C70000000FC1F004000200230000089000843A3 +:105C8000694608712088C880684609F09EFE002891 +:105C9000B0D00320AEE70720D2E70620AAE7F0B590 +:105CA00087B014460D46FEF78DF9012804D002286E +:105CB00002D0FE4807B0F0BDFD4B18680146C03168 +:105CC0000A7AD20707D08A79042A04D0052A02D09A +:105CD000002D02D052E00820ECE7F64A944208D3A7 +:105CE00001229204F44BA21A9A4202D3F34A94423C +:105CF00001D31020DEE7A278D206520F042A0CD876 +:105D0000E378072B09D3102B07D822799A4204D3C2 +:105D1000102A02D822881E2A01D00720CAE702468C +:105D20008032966BF727F372966B23793373966BF9 +:105D3000737A3B40A778BF06FF0FFF003B437372A7 +:105D4000966B2388F381966BA778B37AFF079B083D +:105D50009B00FF0F3B43B372FB273B40A778966B3A +:105D6000BF07FF0FBF003B43B372926BA478537A17 +:105D7000E406DB08DB00640F234353720B226B46FF +:105D80001A70852D22D008DC002D17D0812D17D058 +:105D9000822D17D0832D08D116E0862D18D0882D9E +:105DA00018D0892D18D08A2D18D00B221A71B6223E +:105DB000125CBF4C002A13D0A83012E00022F5E795 +:105DC0000122F3E70222F1E70322EFE70522EDE7E4 +:105DD0000622EBE70822E9E70922E7E70A22E5E7DE +:105DE00000200290887907280BD0082809D00920C4 +:105DF000FEF75CF8684609F0E8FD002803D00320B0 +:105E000058E70620F4E720680422C030017A4908E8 +:105E100049001143017200204CE770B5A44E0D46B5 +:105E2000316886B0C031097A1446090701D40820C8 +:105E30005EE5FEF7C7F8012803D0022801D09B4891 +:105E400056E5002D12D09B48844208D301208004DF +:105E50009949201A884202D39848844201D31020DD +:105E600046E5012D0BD0022D02D106E0002C01D019 +:105E700007203DE50020029005E0022000E001201F +:105E8000694608710294032069460870684609F063 +:105E90009CFD002801D003202AE53068F722C0309D +:105EA000017A11400172002022E570B594B01446C9 +:105EB0000E46FEF787F8012804D0022802D07B485E +:105EC00014B059E57A4D2868C030007A800701D4B3 +:105ED0000820F5E7002C01D00720F1E7FFF705FACD +:105EE000002801D01120EBE7002E1DD02D2168469F +:105EF00001702C68BC20015B684641801022B11CF7 +:105F000001A80EF0C9FE207EFB210840B17CC90724 +:105F1000490F08432076B07CFF214008A075608AB5 +:105F200082310843608207E02E21684601702868AC +:105F3000A030818B6846418009A9684607F038FD8A +:105F40002968FD23C0310A7A1A400A72B8E710B5F1 +:105F50000C46FEF737F8012803D0022801D0534839 +:105F600010BD5448844208D3012080045249201AAD +:105F7000884202D35148844201D3102010BD2046EC +:105F8000FEF72FF8002010BD10B594B00446FEF7C0 +:105F900019F8012804D0022802D0444814B010BDDA +:105FA00043480068C0308179042910D005290ED0FB +:105FB0003820694608704C8001200871487109A991 +:105FC000684607F0F5FC0028E8D00B20E6E7002043 +:105FD000E4E710B594B00446FDF7F4FF012803D0C0 +:105FE000022801D03148D9E731480068C0308179B2 +:105FF00004290DD005290BD03820694608704C8043 +:1060000000200871487109A9684607F0D1FCC5E76E +:106010000020C3E726480068C0308079062801D3F5 +:10602000012070470020704708B51346002806D0AD +:1060300023A00068009048796A468009105C1870B7 +:106040000622581C0EF028FE08BD10B50446FDF7C8 +:106050007AF9A22101700ECC08300EC0FDF78FF93D +:1060600010BD70B5124C054601682068002913D098 +:10607000104A914208D3012292040F4B8A1A9A4285 +:1060800002D30E4A914201D3102075E410227730DA +:106090000EF002FE206801218030806B01722068C2 +:1060A000A9880182C17B012919D10BE002300000CF +:1060B00054000020006001000000FC1F0040002090 +:1060C0000302FF01807B800901280AD00120FEF72E +:1060D000E4F8002803D01A491A480EF07AFF00208D +:1060E0004AE40120FEF7A8F8F3E770B5054600681A +:1060F000154C00281ED007214907401801218903AB +:10610000884201D3102037E42068B8210958097A61 +:10611000012909D00146773129300AF08EFF206825 +:1061200001218030806B017221681022286877314C +:106130000EF0B2FD2068008AA88000201CE4000058 +:106140001C420000FD02000054000020FFB581B099 +:1061500001980E46C078174610360E37022809D02F +:10616000032840D005287DD0F2A1F7480EF031FF7A +:1061700005B0F0BDCC890A2060430E301880312371 +:106180000A98002A0380F3D0486800889080002095 +:10619000D0801081097B9481891FCDB21AE03088AC +:1061A0007168388048780A7800021043F880C8780F +:1061B0008A78000210433881BA1C091D28460BF06A +:1061C0008AF8002D01D0002802D000203871788094 +:1061D00008360A372046641EA4B20028DFD1019990 +:1061E0000020C870C4E7CC890A2060430E301880B4 +:1061F00032230A98002A0380BAD048680025008814 +:106200009080D5801581087B401FC0B2009094819A +:1062100042E0716832880878FA803A79C3075208F8 +:106220005200DB0F1A43FD231A408307DB0F5B008C +:106230001A43FB231A404307DB0F9B001A43F72343 +:106240001A400307DB0FDB001A43EF231A40C30693 +:10625000DB0F1B011A43DF231A408306DB0F5B01B0 +:106260001A4300E020E0BF231A404306DB0F9B01E6 +:106270001A433A71C00978718A784B781002184332 +:1062800038813A46C91C00980BF025F8002801D047 +:10629000BD703D8008360A372046641EA4B200282F +:1062A000B7D10198C57063E7087BCC89801E85B2A1 +:1062B0002846083060431030188034230A98002A9A +:1062C00003808FD048681746008890800020D080D7 +:1062D000108194811037E000D581C0190CE030881E +:1062E0003880009878602A46716800980EF0D4FCD7 +:1062F000009808360837401900902046641EA4B262 +:106300000028ECD16BE7FFB50546C07881B00C469C +:106310000A9E03000EF04EFF0BA3071733414F6D8B +:106320008F9D9D9DA300207B1746082806D003283B +:1063300004D085487FA154300EF04BFE04990E2006 +:10634000088030200CE0207B1746042804D07E48CB +:1063500078A171300EF03DFE04990E2008803120A6 +:106360003080002F44D060680088B880607AFF30A9 +:106370000130F880E08938810020B88137E0207B47 +:106380001746042804D070486AA18D300EF021FE13 +:1063900004990E2008803220E2E7207B174602286D +:1063A00004D0694863A1A9300EF013FE04990E20B1 +:1063B00008803320D4E7207B1746042804D06248A5 +:1063C0005CA1C4300EF005FE049810210180342039 +:1063D0003080002F0CD060680088B880607AFF3071 +:1063E0000130F880E08938810020B881F881E870B8 +:1063F000BEE6207B1746052806D0062804D0524862 +:106400004CA1E1300EF0E5FD049812210180352009 +:106410003080002FECD060680088B880607AFF3050 +:106420000130F880E0893881E089B8810020388225 +:10643000A988F981DBE7207B1746072804D042486A +:106440003CA1F8300EF0C5FD04990E2008803620DE +:1064500086E700962846049B00F02DFD88E635A1CE +:106460003A480EF0B6FD83E670B5054600780C4656 +:10647000082603000EF09EFE124C3434241C380A09 +:106480000A0A0A0A0A0A0A0A0A0A0A4C687800284A +:1064900004D02E4827A12C300EF09BFD002C03D1F8 +:1064A0001F2024A1400108E060783043607020E0A4 +:1064B000002CF9D17D201FA1C0000EF08AFDF3E76A +:1064C000002904D03F201BA100010EF082FDFCF743 +:1064D0003AFF0446407830436070FCF750FF08E014 +:1064E0001A4814A1473002E0184812A14C300EF0AF +:1064F00070FD002C0AD06078000707D5932020702B +:106500002046582229460830FAF75EFE002070BD6A +:106510000E4808A15030EAE710B500200C4C0D4998 +:106520000346C2008C525218401C0006D370000E65 +:10653000F7D010BD7372635C67617474635F636FDF +:1065400072652E63000000005A020000B3030000D1 +:10655000FFFF000058000020FE49088001208870DD +:1065600000207047FB4900208870704710B500215B +:10657000F848C94301800021C17007F053FAD8E7F9 +:10658000F7B584B0054600276846078187806868AC +:106590000C46008800F0ECFB0646287A032805D05C +:1065A000002E03D1EC49ED480EF013FD297A204668 +:1065B000C91E123000900B000EF0FCFD0FF2F1F03E +:1065C0003D09AA465C6D34B3CDF38B8BF000F078B7 +:1065D000012803D0E049AD200EF0FBFCA8896946F4 +:1065E000C0000E30888030200881002C22D06868DE +:1065F0000188A180E7802781A989A18100200DE081 +:10660000C100B27909190A74B288CA81820052198C +:10661000D3894B82128A401C8A8280B2A18981422E +:10662000EED8D7E002A8009001AB224629463046BA +:1066300000F0CCFBF1E002A8009001AB2246294615 +:10664000304600F005FCE8E0F07806281AD0FF207C +:10665000C149223014E068680188A180E780278161 +:10666000A989A181B188E181E9892182EA89296921 +:1066700000982BE0F078062804D0FF20B6493C3083 +:106680000EF0A7FCE8896946123088803520088121 +:10669000002CE0D1C1E0F078072804D0FF20AE49FB +:1066A00056300EF096FCA88969460E308880362058 +:1066B0000881002CBED068680188A180E78027810E +:1066C000A989A1812046AA890E3029690EF0E4FA31 +:1066D00080E0E8896946123080B2382288800A81D9 +:1066E000002C79D068680188A180E7802781A9897A +:1066F000A181287A102809D00221A173E989218279 +:10670000EA89296900980EF0C7FA86E00121F4E7CA +:1067100002A8009001AB224629463046FFF716FD3D +:106720007BE0F078082803D08B498D480EF051FCAF +:1067300014206946888037200881002C6DD0686855 +:106740000188A180E7802781A989A18167822782AA +:106750000120A0733EE0F078092804D080487E49EB +:1067600018300EF036FC288A6946143088803720AD +:106770000881002C51D068680188A180E78004213D +:106780002781A173A989A181E9892182298A61824E +:1067900020462A8A1430696998E702E038E01CE054 +:1067A00024E0F0780A2804D06D486B4933300EF0AD +:1067B00010FC14206946888037200881002C2CD0DA +:1067C00068680188A180E78027810521A173A781DE +:1067D00027826782F77020E017E002A8009001ABE3 +:1067E000224629463046FFF78EFD16E00D20694609 +:1067F000392288800A81002C07D00120E08055488A +:106800000188A1802781277307E00699088010E09E +:106810008F205149C0000EF0DCFB68460699808845 +:106820000880002C05D06846008920806846808852 +:106830006080002007B0F0BDF7B594B015460F4654 +:10684000149800F0A0FA04000AD0032000F088FB9E +:10685000022802D2E078002804D0112017B0F0BD41 +:106860004048FBE71720694601260883002D0FD01A +:106870000321684601711021018210A8024605908B +:1068800004A928460AF04DFD00280DD00720E5E7B1 +:1068900008216846017100210781C9434181052112 +:1068A0008673C90281810CE0A878A0712888A08035 +:1068B000684605218673C902818100210781C94389 +:1068C000418109AA023206A901A807F0E4F80028CC +:1068D00002D000F06BFAC1E707A800906846038B6E +:1068E00004220321149800F051FB0028B6D1E67071 +:1068F000B4E770B592B00D0006460ED000F043FA32 +:1069000004000CD0032000F02BFB022802D2E07818 +:10691000002806D0112012B070BD1020FBE71148EE +:10692000F9E7172168468180042101722988818155 +:106930006988C181012181740B4901820AAA02324E +:1069400001A902A807F0A7F800280FD000F02EFA3E +:10695000E1E7000058000020346500003C0400001E +:1069600063020000023000000228000008A8009026 +:106970006846838804220321304600F007FB002884 +:10698000C9D10221E170C6E770B592B00D0006468C +:106990000DD000F0F8F904000BD0032000F0E0FA6D +:1069A000022802D2E078002805D01120B3E7102099 +:1069B000B1E7FA48AFE717216846818004210172E8 +:1069C000298881816988C18101218174F44901820A +:1069D0000AAA023201A902A807F05DF8002802D035 +:1069E00000F0E4F997E708A800906846838804223D +:1069F0000321304600F0CAFA00288CD10321E1704F +:106A000089E770B592B00D0006460DD000F0BBF9D5 +:106A100004000BD0032000F0A3FA022802D2E07891 +:106A2000002805D0112076E7102074E7DB4872E7D4 +:106A3000022168460172298881816988C1811721F4 +:106A400081800AAA023201A902A807F024F80028CE +:106A500002D000F0ABF95EE708A800906846838892 +:106A600004220321304600F091FA0028DBD10421F2 +:106A7000E17050E7F0B591B015000E4607460ED014 +:106A800000F081F904000CD0032000F069FA02281C +:106A900002D2E078002806D0112011B0F0BD1020FD +:106AA000FBE7BE48F9E7172168468180042101729F +:106AB000298881816988C181B17881743188018296 +:106AC0000AAA023201A902A806F0E5FF002802D0B6 +:106AD00000F06CF9E1E708A800906846838804227A +:106AE0000321384600F052FA0028D6D10521E17082 +:106AF000D3E7F7B592B015460E46129800F043F969 +:106B000004000AD0032000F02BFA022802D2E07819 +:106B1000002804D0112015B0F0BDA048FBE70627DF +:106B2000002D12D0684607728681C581A580172086 +:106B3000694688800AAA023201A902A806F0ABFFC2 +:106B4000002807D000F032F9E5E705216846017218 +:106B50008681EBE708A80090684683880422032119 +:106B6000129800F013FA0028D5D1E770D3E7F7B5F3 +:106B700092B016460D000ED0129800F004F90400F1 +:106B80000BD0032000F0ECF9022802D2E0780028B4 +:106B900005D01120BFE71020BDE78048BBE70727DD +:106BA0006846077286811721049581800AAA0232FD +:106BB00001A902A806F06FFF002802D000F0F6F845 +:106BC000A9E708A800906846838804220321129848 +:106BD00000F0DCF900289ED1E7709CE7F3B51720A0 +:106BE00091B00C46002915D021780B000EF0E2FA86 +:106BF000062B05051A041C2B1520C01EE28880B246 +:106C0000002A02D0A368002B04D0824204D90C20B1 +:106C100013B0F0BD1020FBE7042905D0A0880028A0 +:106C200011D101E00620F3E7119800F0ACF805005F +:106C30000BD02078092701281AD0022807D0042871 +:106C400024D0052835D00720E2E75448E0E768461D +:106C5000077161880181E1884181A068082603905D +:106C6000304600F07DF9072829D34C48801CCFE737 +:106C70000C216846017161880181E1884181A06829 +:106C800003900EE0E878002811D118E00D21684645 +:106C9000017161880181A1884181E1888181A068B9 +:106CA00004900326304600F05BF90228EAD3112055 +:106CB000AEE70E2168460171217B0172F1E71721D1 +:106CC0006846018309AA023206A901A806F0E3FE7C +:106CD000002802D000F06AF89AE707A800906846FA +:106CE000038B04223146119800F050F900288FD10F +:106CF0002178012907D002298AD0042905D0052945 +:106D000005D0032084E7082102E0EF7080E70A2124 +:106D1000E9707DE730B591B00C46054600F033F8D8 +:106D2000002808D0032000F01BF9022805D31B48D7 +:106D3000801C11B030BD1948FBE70F216846017176 +:106D400004811721018309AA023206A901A806F0CD +:106D5000A2FE002802D000F029F8EAE707A8009078 +:106D60006846038B04220321284600F00FF9E0E770 +:106D70000C49884205D00C490988814201D10A4852 +:106D800070470020704710B5FFF7F2FF002802D0CF +:106D90008178C90700D1002010BD0000023000003A +:106DA00003280000FFFF000058000020002806D044 +:106DB000012805D0052805D0062805D003207047F6 +:106DC00011207047082070475C487047FFB583B0BA +:106DD00003980C9EC0781D4614460F46012803D028 +:106DE0005749D2200EF0F5F8F889C0000E302880FF +:106DF00030203080387B001FC0B20190002C26D09C +:106E000078680088A0800020E0802081F889A08137 +:106E1000002616E0F0000519C01900902A464169C5 +:106E20000E3201980AF057FA002802D00020287488 +:106E3000E8810098761C008A68820098B6B2408A81 +:106E4000A882A089B042E5D803990020C870F1E477 +:106E5000F8B50646C0781F4614460D46042804D0EF +:106E6000FF20374903300EF0B4F8A88906214843C3 +:106E70000E30388033210698002C01801AD06868C3 +:106E80000088A0800020E0802081A989A18103469C +:106E90000CE01946062251434A190919D789CF81B6 +:106EA000977C8F74128A5B1C0A829BB2A1899942DB +:106EB000EFD8F070F8BD70B514460546142204985A +:106EC0001A8037220280002C18D0486800260088DB +:106ED000A080487AFF300130E080C8892081C889CD +:106EE000A0816682E878082809D0092811D00A28EC +:106EF00019D0134913480EF06CF8EE7070BD087B82 +:106F00000C2804D00F480E490C380EF062F801200E +:106F100012E0087B0D2804D00A48094908380EF011 +:106F200058F8042008E0087B0E2804D005480449DE +:106F3000001F0EF04EF80520A073DEE703300000BE +:106F4000346500008203000001460020FA4A02E096 +:106F5000401C082803D24300D35A8B42F8D1704713 +:106F600030B50446F44A0020163A117953790AE004 +:106F70005518AD79A54201D1401CC0B2491CC9B217 +:106F8000102900D100218B42F2D130BDFFB5EA4873 +:106F900081B0163841790A9C491CCDB21E46102D8D +:106FA00000D10025E44816380079A84202D1042017 +:106FB00005B0F0BD0820FFF7D3FF0746072804D926 +:106FC000FF20DEA1A5300EF004F80298082801D1B8 +:106FD000072F17D001982080301D6080002060713D +:106FE0002071E68003982081204606F005FD0028E8 +:106FF0000AD0D148029916384379821D99544571B7 +:107000000020D5E7D248D3E7FF20CCA1B7300DF060 +:10701000E0FF0320CCE7F0B58DB0044600256846BC +:10702000057116468C460620FFF79AFF00281CD1F2 +:1070300021780127C807002801D0132917D96846ED +:1070400087766178C17602218183C58304A8009088 +:1070500070680C23008805220621FFF797FF00289F +:1070600003D0B6A185200DF0B4FF0DB0F0BDB2483D +:1070700016380278002AF8D0427863789A42F4D120 +:10708000012918D0132919D16146062916D1057096 +:10709000002101200AF04EFE6846077170680188E1 +:1070A0006846C1800021C9430181607922790102CB +:1070B000114368461AE06146062908D068460079FF +:1070C0000028D2D0314601A8FDF7AFFECDE705700C +:1070D000002101200AF02EFE6846077160792279AE +:1070E00001021143684601810021C9434181E9E75A +:1070F000914810B50021163801704A1E4280417037 +:107100000171417101200AF015FE10BD10B5FFF7A5 +:10711000EFFF0020884902464300401CCA5208285D +:10712000FAD310BD84491639488000207047DFE744 +:1071300070470EB501216846017086498180C18083 +:107140000021FDF772FE0EBDF7B505460078002759 +:1071500000090C463E46012804D0FF2077A1683084 +:107160000DF037FF287A02280CD0FF2073A17E3063 +:107170000DF02FFF0298002C068001D0278066803A +:107180000020FEBDEA89702710460A3086B2002C26 +:107190000BD068680088A080A8892081E280204602 +:1071A0000A3029690DF078FDE4E702980680E7E7E8 +:1071B000F0B543680246D9799C79090221435C7A8B +:1071C0001E7A25025C88981D3543241F87B0A14292 +:1071D0001DD11B79022B1AD1042D1AD0052D2AD0CE +:1071E000062D1AD0402D12D3061D0F4614462846F0 +:1071F000FFF7AAFE08280AD0112020700220207272 +:10720000A581E7812661607808210843607007B096 +:10721000F0BD001D00F0E1F8F9E7041D0D46FEF792 +:10722000F9FE0028F3D0062168460170019405722A +:1072300008F0CBFBEBE7001DFFF7EDFEE7E710B52D +:107240003D4C8AB0163C2278012A26D012236A4689 +:10725000937363789B1CD373082313820B88538228 +:107260004B8893828B88D382C988118301A90091AE +:107270000C2305220721FFF789FE00280BD10022ED +:10728000F023114601200AF0B0FC01202070607844 +:10729000801C607000200AB010BD1120FBE7F0B523 +:1072A000254C0027163C87B00646A51D1FE06079D7 +:1072B0002179884204D1112020A140010DF089FEDE +:1072C0002079405D042804D0082808D17F1CFFB233 +:1072D00005E0072069460870684608F076FB2079CB +:1072E000401CC0B22071102801D10020207130460E +:1072F000761EF6B20028DAD1384688E710B5044683 +:10730000402801D2072010BDFFF71EFE082802D03A +:107310003120000210BD0021074802E0491C082965 +:1073200003D24A00825A002AF8D1082914D0490011 +:107330004452002010BD0000DA1300207372635C19 +:107340006C326361705F636F72652E6300000000D2 +:1073500004300000FFFF00000420EBE700B54028E8 +:1073600001D2072000BDFFF7EFFD082805D000215E +:107370003B4A40001152084600BD052000BDF0B553 +:107380008BB016460C00074607D0002E05D061884A +:10739000402904D207200BB0F0BD1020FBE7208865 +:1073A000002801D0172801D90C20F4E70846FFF780 +:1073B000CBFD08280FD0258803A82A463146023085 +:1073C0000DF06AFC01A8009062882B46082138461F +:1073D000FFF7DCFDDFE70520DDE7F0B50E460746E9 +:1073E00001468BB014460125304606F0D1FC082832 +:1073F0001DD10020694608850120FFF7B1FD002856 +:1074000002D117206946088503AB02330AAA394620 +:107410003046009407F0CFF800280AD0022819D08F +:10742000032804D0FF200F4902300DF0D2FD28467A +:10743000B1E76846038D002BF9D001A80090606881 +:10744000042200880121FFF7A1FD0028EFD00549A3 +:10745000EC20EAE760780025102108436070E6E739 +:10746000DA1300203C730000002803D08178012942 +:1074700039D101E0102070470188FA4A881A9142F8 +:1074800033D01BDCF84A881A91422ED00BDC00293D +:107490002BD00320C002081A27D0012825D00121B3 +:1074A0000903401A07E001281FD002281DD0FF2839 +:1074B0001BD0FF380138002815D116E0FF22013219 +:1074C000811A904211D008DC01280ED002280CD07D +:1074D000FE280AD0FF2806D107E0012905D002299D +:1074E00003D0032901D0002070470F20704700B55A +:1074F0000A2821D008DC03000DF05CFE0A1C2024C1 +:10750000241A24282224261A102819D008DC0B2833 +:1075100016D00C2814D00D281AD00F2808D111E04D +:1075200011280FD0822807D084280DD085280DD0AF +:10753000032000BD002000BD052000BDCB4800BDDC +:10754000072000BD0F2000BD042000BD062000BDA7 +:107550000C2000BD70B500290BD0CB1FFA3B812455 +:107560001E46CDB2112B1BD2012805D0022806D011 +:1075700009E0002010701DE0FF20043001E0FF2032 +:107580000330814218D033000DF014FE111613138E +:1075900016131616131616161313131316131600B6 +:1075A0000846FF3881381F2803D9FF39FE390229E0 +:1075B00002D81570002070BD1470072070BD00B592 +:1075C00003000DF0F7FD060406040C080A0C002069 +:1075D00000BD112000BD072000BD082000BD032014 +:1075E00000BD00780207120F04D0012A05D0022A3C +:1075F0000AD10EE0000907D108E00009012805D0F2 +:10760000022803D0032801D007207047087000200B +:10761000704706207047002807D0012807D00228AD +:1076200007D0032807D007207047002004E011206E +:1076300002E0212000E0312008700020704738B5BA +:107640000C4605004FD06946FFF7CBFF002822D13A +:107650002088032189028843694609788907090D32 +:10766000084320806946681CFFF7BBFF002812D141 +:107670002188032000038143684600788007800C3E +:1076800001432180A8784007820F2020012A03D0DF +:10769000022A03D0072038BD814300E00143218046 +:1076A00088B20105890F08D0012189038843A97890 +:1076B0000907C90F89030843208080B28104890F1C +:1076C0000AD0A9784004C906C90F400CC903084371 +:1076D00020808004800F02D12088400403D52088B8 +:1076E000402108432080002038BD70B504460020AA +:1076F000088015466068FFF7A2FF002815D1218990 +:10770000A089814210D86168594E8978C90707D08D +:10771000711E884208D831460DF038FB298009E0F7 +:10772000FF21FF31884201D90C2070BDFF30FF30AE +:107730000330288060688078C007A08903D0314674 +:107740000DF024FB03E0FF30FF30033081B22980CD +:1077500020688178474801732068464900882039AD +:107760004885002070BD10B5137804785B08E407E5 +:107770005B00E40F23431370FD2423400478A40727 +:10778000E40F640023431370FB2423400478640750 +:10779000E40FA40023431370F72423400478240744 +:1077A000E40FE40023431370EF2423400478E4063D +:1077B000E40F240123431370DF2423400478A4063C +:1077C000E40F6401234313700078BF244006C00F08 +:1077D0002340800103431370002906D00878C107B5 +:1077E00001D1800701D5012000E00020C001590629 +:1077F000490E0843107010BD30B50A8803239B0260 +:1078000004889A4323059D0F02D1A3049C0F01D045 +:107810009B0F00E001239B021A4303230A801B03F2 +:107820009A4303889804840F02D11805830F01D06E +:10783000800F00E00120000302430A8030BDF3B551 +:1078400091B00D0018D01198002818D012212846A8 +:107850000DF07FFA01A9012007F0A9FE00242646B9 +:10786000374677E0022900000128000003300000BD +:10787000010200000C140020102013B0F0BD0720FE +:10788000FBE76846007C01280BD16846C1890520CA +:10789000C002081A0AD001280AD002280CD00328F6 +:1078A0000CD0042C0ED0052C0FD10DE0012400E0EB +:1078B00002246846868908E0032406E0684604241A +:1078C000878902E0052400E0062468468189119832 +:1078D00081423FD12C74002E3AD00BA800900CAB03 +:1078E00010220021304607F0F4FE002820D168461F +:1078F000808D2A46C0B20CA909F0EDFC002817D1F2 +:10790000AE81002F24D00BA8009006AB13220021DB +:10791000384607F0DEFE00280AD16846808D06A9A9 +:10792000C01E0331C0B22A1D09F0D5FC002801D0C9 +:107930000320A2E76846817E427E08021043E88168 +:10794000062C05D16846007CA8726846C08928814B +:10795000002092E701A807F032FE002891D0FFF73F +:10796000C6FD8AE7002804D0012903D0022904D0EB +:1079700003207047F949C98D02E0F8494031C988B0 +:10798000814201D1002070470720704730B5F34C89 +:107990000025608B91B0C00B2ED1216900292BD01E +:1079A000207B800728D401226846027102720022DF +:1079B0004272228B8281A28A8282049117210183E2 +:1079C00009AA0023023206A901A807F0A7F9002896 +:1079D00003D0FFF7F4FD11B030BD207B0221084336 +:1079E000207307A8009069460B8B20880422012190 +:1079F000FFF7CCFA05460BE0FBF7A5FC84210170EC +:107A00000921017218341ECC0C301EC0FBF7B7FCE4 +:107A10002846E0E710B5D14C034621690020002933 +:107A200009D02146012210311846FBF76BFE0020D9 +:107A30002061A0820120217BF9221140217310BD19 +:107A400070B50C4605461C2120460DF082F9002039 +:107A50002080002D08D0012D04D0C1A1C5480DF013 +:107A6000B8FA70BD062000E00520A07070BD10B50A +:107A700007F07CFB10BDFEB50546007800260C46DD +:107A8000374603000DF096FB0C91070C1D962F4610 +:107A90002F46486C899168680A38FBF793FD89E0A6 +:107AA000002904D0B348AEA11B300DF092FAFBF7C9 +:107AB0004AFC04464078082108436070FBF75FFCED +:107AC00078E0002C04D1BB20A5A180000DF081FA44 +:107AD000284601F0B1FA00286CD0607808210843EC +:107AE0006070022666E0E888694608800190002CF4 +:107AF00004D1A0489AA12F300DF06BFA28780728FE +:107B00001CD10198C00B19D0944800218171A9881B +:107B1000818012E003264DE0002C04D1C52090A105 +:107B200080000DF056FA8D48017B89070BD500695E +:107B3000002802D0E888C00B3CD0022660780821DB +:107B40000843607036E0291D8EC918308EC0283871 +:107B50000188022601222046FBF7B6FD0127EDE74A +:107B6000002C04D183487EA164300DF032FA7B48AA +:107B70000821007B4007C00F460060780843607012 +:107B8000002E17D12879012802D16879002811D058 +:107B90002046FFF73FFF07460CE0002CCED10D201A +:107BA0006FA180010DF015FAC8E772486CA17A3018 +:107BB0000DF00FFA002C0CD06078000709D5002FCB +:107BC00007D1842020702046582229460830F9F732 +:107BD000FBFA3046FEBDF7B5027A88B00C46054682 +:107BE00020460C300490069216300027921E029018 +:107BF0003E460A31594813000DF0DCFA0ADF06E66A +:107C00002AE62AE66A98C6E64288002A02D0522767 +:107C10000726DDE051271E26002C7DD06A684F48DC +:107C20001288A2800122A2718079C0004019C08907 +:107C3000FFF705FE002877D148488179C900491926 +:107C4000C98921818079C0004019408AA083BFE0A2 +:107C5000688A00900698072817D1E889C00B14D0CD +:107C600000985127223086B2002C55D0A88904995B +:107C7000FFF7E5FD002857D168680088A080022042 +:107C8000A071A8892081012041E000985027203070 +:107C900086B2002C40D0A889FFF7D1FD002843D13F +:107CA00068680088A080A889E080287A07280AD020 +:107CB00002202072288AA0830098E0832046696908 +:107CC0002030009A01E00120F3E70CF0E5FF7FE0AF +:107CD000698A00910169002902D0E989C90B22D083 +:107CE0000099512722318EB200218171A9898180AA +:107CF000002C5FD00088A080A8890499FFF79FFD21 +:107D0000002811D10220A071A88920810420A0722E +:107D1000288AE083009801E04CE005E0208469694E +:107D2000009A0298D1E703200BB0F0BD007B40071A +:107D300002D55127222601E050272026002C39D0D9 +:107D40006868502F0088A08016D00220A0712146BC +:107D5000287B0831FFF774FE3AE00000EC130020A6 +:107D60007372635C67617474735F636F72652E63B3 +:107D700000000000CB020000287BA11DFFF760FE81 +:107D80000020FFF747FE23E0A9890089884207D138 +:107D900054270626002C0DD068680088A08017E0C4 +:107DA00053270826002C05D068680088A080A88981 +:107DB000E0800DE00A98068010E055270726002C89 +:107DC000F8D00020A07103E0FD49FE480DF001F954 +:107DD0000A98002C068001D0278066800020A3E747 +:107DE000F94800210172203801814181418081716F +:107DF0008180027BF923520852001A40027301610C +:107E00008182704770B5F04C86B0203C2080002005 +:107E10006080A071A0806946012007F0C8FB102691 +:107E200008E00199088802461207D20FB0431201F8 +:107E300010430880684607F0C2FB0500F1D02069B6 +:107E4000002804D0DF48DE4933300DF0C2F8207B33 +:107E5000800704D5DB48DA4934300DF0BAF8822DBA +:107E600004D02846FFF743FB06B070BD0020FBE7B7 +:107E7000D54810B52038017B012211430173002140 +:107E800041808171818006F045FB10BD10B5CE4C5C +:107E90000020C043203C20800020FFF7BBFD207B5A +:107EA00040084000207310BD70B5C74D0446203D0A +:107EB000287B800704D5C348C1494B300DF089F8B1 +:107EC000287BC00706D12888C049884202D028698B +:107ED000002801D0082070BD002C08D0A0881628EA +:107EE00001D2092070BD20682861A088A882FFF710 +:107EF0004DFD70BD10B50C4607F02DFB002804D0D9 +:107F0000C520AF49C0000DF064F82046FFF7EFFA36 +:107F100010BDF0B5AC4D0446203591B0002008905E +:107F200068820E462882E8812946E8804039088622 +:107F3000694608830885088688838882A2480E904F +:107F4000007A1746012808D0022806D0032804D05A +:107F5000042802D0082011B0F0BD9D48844269D3A6 +:107F600001239B049B49E21A8A4263D39A4A9442B2 +:107F700060D286425ED31001331A0846834259D339 +:107F80001046864256D26068002815D09049884233 +:107F900050D31101421A8F498A424BD38E498842ED +:107FA00048D260892189884203D801225202914235 +:107FB00001D90C20CFE7089010AA0CA93046FFF792 +:107FC00094FB0028C7D106A92069FFF738FB0028D9 +:107FD000C1D1206900280CD060788007002868464D +:107FE000008B03DA8004800F75D002E08004800FDC +:107FF00071D16846008B81061ED58004800F6068B1 +:1080000009D0002818D00721490740180121890309 +:1080100088420FD201E000280ED06D496068884286 +:1080200008D301218904421A6A498A4202D36A4963 +:10803000884201D310208EE705A96069FFF7FFFA97 +:10804000002888D16069002808D06846808A010528 +:10805000890F01293FD18004800F3CD007A9A06976 +:10806000FFF7EDFA0028A5D16846808A800632D451 +:108070006846808B81062ED4A169002906D00105AF +:10808000890F012927D18004800F24D0E0680028BF +:1080900004D0007800281ED01C281CD24A4A611C3B +:1080A000123220460992FFF75EFB0321002089026D +:1080B000884301218902411868460D9101850121FB +:1080C000817446490182404A0FA91532306809F08F +:1080D00028F9002801D007203DE708A8007F3A4989 +:1080E000C01CC2B26A7100201031FF3200900190B2 +:1080F000FF3203460291039003320AA904A807F055 +:10810000C5F9002827D130482038008E0B902E4822 +:108110003389383032690146123902910093019255 +:10812000039010A90A8873890CA9306807F0AEF98A +:1081300001007CD12448E98811308170090AC1709E +:108140000026009631386A79008E3146099B07F087 +:108150001CF9002802D0FFF7CAF9FCE60E98807CD3 +:10816000C00928D068460D99018501218174292113 +:1081700009020182AE81287B61784008C90740006E +:10818000C90F08432873FD2108406178022289073E +:10819000C90F4900084328730B4900922A31881CF3 +:1081A00002910190002303960D4A0AA904A807F042 +:1081B0006DF901003BD1606800283DD0206911E0D5 +:1081C000607D0000220400000C140020FFFF00006E +:1081D000006001000000FC1F004000200328000098 +:1081E0000302000000280DD106A90CA8FFF704FB2C +:1081F0006078800706D46946088B03210903884309 +:1082000069460883012069468874FD4808822089F0 +:10821000FC490CF0BBFD6268089BFB48019200938F +:1082200002900A460396002306A904A800E081E014 +:1082300007F02CF901007DD12078C10601D4800619 +:108240002ED568460684606900280DD105A90CA8C2 +:10825000FFF7D2FA6846818A032080028143012019 +:1082600080020918684681826946888A4821084345 +:108270006946888201208874E14808AA401C088267 +:10828000E1490192891C0220DE4A029100900023FC +:108290000396921C05A904A807F0F8F8010063D121 +:1082A0002078C0072ED068460684A06900280DD12A +:1082B00007A90CA8FFF7A0FA6846818B032080026B +:1082C0008143012080020918684681836846818BBA +:1082D000402001436846818301218174C84908AA6E +:1082E000891C0182C8480192001D0221C54A0091E3 +:1082F000029000230396921C07A904A807F0C6F871 +:10830000010031D1E068002832D068460D9901851E +:1083100001218174BA49C91C0182E16808A80A7860 +:10832000027049784170E068418868464184E0689D +:10833000017900E018E008A80171E0680722C1880F +:1083400008A84171090A8171AF4808A9801D0092EF +:1083500001910290412200230396D2000AA904A8A9 +:1083600007F094F8010003D00B98FFF7C3FDF2E586 +:1083700003210E98002F017207D0E8883880E88921 +:108380007880288AB880688AF8800020E3E5F0B514 +:1083900001248BB016460F46012802D002281BD1BB +:1083A00004E0684605218474C90202E068469749E2 +:1083B00084740182002F11D0032100208902884398 +:1083C0000121890241186846018506AA05A9384697 +:1083D00008F0A7FF002803D00720A5E41020A3E49D +:1083E000894DB8782E3D287338882F46203F7885F0 +:1083F0006A46127D0020294606AB00920E31019399 +:10840000FF32029103900346FF3203320AA904A807 +:1084100007F03CF8002802D0FFF769F884E4002E4A +:1084200001D0F88D30802C7200207DE470B592B0C0 +:108430000446012508A8857075496846018406F040 +:108440009CFF002208A90120FFF7A1FF064606F0C5 +:1084500098FF30003AD120780024C00700283FD090 +:108460001C2168460CF077FC684601782020014307 +:108470006846017008A885706649684601841194B1 +:108480000794817FF9200140891C6846817700208C +:10849000014668460177002001466846417704217D +:1084A0008185C485018607A80A9011A80D9008A8A7 +:1084B000099006F062FF0EAA09A96846FFF729FD98 +:1084C000054606F05EFF002D02D0284612B070BDB2 +:1084D0004D486946098F4E3801816946898F41812F +:1084E00049482E3804720020F0E7F7B5464E9CB09C +:1084F00000212E3E0091317A012904D0022902D0B8 +:1085000008201FB0F0BD40494E39CA8D824201D0CB +:108510000620F6E71D98824201D10720F1E73B488B +:10852000012110AA9176401C1083002003239B0296 +:1085300002469A438B02D31810AA93846A46918408 +:108540003549D18410AA9077908317AA0A926A4677 +:1085500091850C9009A807F051F80024254627467C +:1085600004A909A807F04DF8002810D082287BD173 +:10857000002C7CD0002D7AD010A8048145810024E5 +:10858000047518A8807812AD012872D07AE0684688 +:10859000807D002F1FD0012862D16846818A1B4848 +:1085A000401C814219D114A800906846408A0EAB45 +:1085B0001022002107F08DF8002877D110A8008A3A +:1085C000042801D006285BD16846018F1D9881429E +:1085D00046D10F2095E7012842D16846808A0521BF +:1085E000C902884202D0491C884239D106484E3817 +:1085F000C18D6846408A814210D101270FE00000FA +:1086000001290000010200003A14002001280000A6 +:1086100001180000052A0000FFFF00000027002CC1 +:1086200001D0002D0DD01D99884219D114A90091B7 +:1086300004460EAB1022002107F04BF8002835D17C +:1086400001E0009D0CE010A8008A022801D010284B +:1086500016D1C0B218AA0EA908F03DFE00280FD10D +:108660006846408A00907BE720E000E001E00520BA +:1086700047E72A1D15A918A808F053FE002801D0C5 +:1086800003203EE710A8007D0023001DC2B210A801 +:1086900002751E98029019A901950394009216A8DC +:1086A00006F0F4FE002801D102213172FEF71FFF0F +:1086B00027E73EB50B46401E84B201AA00211846AA +:1086C000FFF751F806F059FE02A8009001AB012215 +:1086D0000021204606F059FE044606F052FE684688 +:1086E0000089012803D0FE49FE480CF072FC2046A8 +:1086F000FEF7FDFE3EBDF0B5FB4E0446307A89B074 +:108700000F46032804D0042802D0082009B0F0BD89 +:1087100004AA06A92046FEF7E8FF0500F6D1F248B4 +:108720002389383022690146103902910093019261 +:10873000039069460A8A638906A9206806F0A6FEA6 +:10874000002802D0FEF7D3FEE0E7002F03D0E64872 +:10875000203000893880042030722846D6E738B5AA +:108760000C00054608D00022694607F00CF80028E6 +:1087700004D0FEF7BCFE38BD102038BD6946204647 +:10878000FEF75DFF0028F8D1A0786946C207D20F36 +:10879000284607F013F8ECE73EB50C0008D002AA13 +:1087A000694606F0F0FF002804D0FEF7A0FE3EBDAB +:1087B00010203EBD032120460CF0CBFA684600880D +:1087C00001A90005800FFEF726FF00280BD168469F +:1087D000007920706846008801A98004800FFEF7A8 +:1087E0001AFF002801D003203EBD68460079607062 +:1087F000A278EF20024068460088C10B09010A43B5 +:10880000F7210A404104C90FC9000A43A270F921A7 +:108810000A40800601D5012000E0022040006946A0 +:108820000243097A50084000C907C90F0843A070E5 +:1088300000203EBDFEB51D4614460E46074606F016 +:108840009CFD01A8009022882B463146384606F050 +:108850009CFD054668468088208006F092FD2846EB +:10886000FEF745FEFEBDF0B50C46002199B0074667 +:10887000684681850D46002C11D0E068002806D09E +:10888000A06800280BD002886B469A850180A078EA +:10889000012806D0022804D0072019B0F0BD10200E +:1088A000FBE72088002807D0401E80B201A906F00F +:1088B0007EFE002842D136E08C48EEE769468A8980 +:1088C00021888A420BD26846007C002501282CD1E1 +:1088D0006846C0898649884227D1012525E08A4219 +:1088E00003D1002D2FD06D1C01E0022D02D0032DED +:1088F0001BD31FE06946097C012916D169467C4BD0 +:10890000CA895B1ED11A9A421DD005DC7948101A1B +:1089100019D0012809D116E0012914D0FF390139F5 +:1089200003D1032506E00D26B60201A806F047FE96 +:108930000028C3D0822804D0002806D0FEF7D7FD37 +:10894000ABE7022DFAD13046A7E7E068002813D044 +:1089500006F013FD0BA800906A46A1882088928D2E +:10896000E36806F012FD054606F00BFD002D19D157 +:108970006846A168808D088002980078C00601D5FD +:108980005D488AE706F0F9FC0EA8009068468089E9 +:108990000CAB0222002106F09CFE054606F0F1FC1D +:1089A000002D01D02846C9E76846008F022801D073 +:1089B000032072E7A078012808A8007C03D0800774 +:1089C0000ED4082069E7C007FBD00820FEF7C8FADC +:1089D000072802D34548401C5FE70825022001E034 +:1089E000022503206946087621886846818317217D +:1089F000818611AA002302320DA906A806F08EF97D +:108A0000002802D0FEF7DBFD47E70FA8009068467C +:108A1000838E042229463846FEF7B8FA3DE770B542 +:108A2000064615460C460846FEF71EFD00280AD1EC +:108A300006F0A3FC2A4621463046FFF7A8FC044670 +:108A400006F09FFC204670BD70B514460D460646E4 +:108A500006F093FC224629463046FFF746FD0446C1 +:108A600006F08FFC204670BD70B51E4614460D0002 +:108A70001AD0002C18D06168002915D00121FEF70A +:108A800071FF00280FD12068FEF7EEFC00280AD104 +:108A900006F073FC324621462846FFF73AFA0446B0 +:108AA00006F06FFC204670BD102070BD70B51546F5 +:108AB0000C0023D00221FEF755FF00280ED12068BC +:108AC000FEF7D2FC002809D106F057FC29462046C3 +:108AD000FFF711FE044606F054FC204670BD00006E +:108AE000607D00003E0600000C14002003300000F2 +:108AF0000328000000280000013400001020EDE7EA +:108B0000FEB507460E4607201546400701211218FC +:108B100089031C468A4219D2002C02D020188842B0 +:108B200014D2384600F045FA00280AD1002C0FD1A3 +:108B300001AA6946384606F026FE002802D0FEF754 +:108B4000D6FCFEBD68460088800601D41020FEBD1C +:108B500023462A4631463846FFF76CFEFEBDFFB578 +:108B600085B01E4614000F4609D003AA02A9059835 +:108B700006F009FE002804D0FEF7B9FCC6E5102077 +:108B8000C4E568460089C00601D5FB48BEE506F08D +:108B9000F4FB01A800900023F84A3946059806F036 +:108BA00098FD054606F0EDFB002D11D1002E0CD0EE +:108BB00006F0E3FB002000902288334639460598F2 +:108BC00006F087FD054606F0DCFB684680882080BD +:108BD0002846D1E7002906D0E94B0A885B899A42EA +:108BE00001D8E84870473EE610B586B004236C46CD +:108BF000A382E34B1C89002C07D05B898B4201D2F6 +:108C0000914204D9DF4806B010BD0620FBE76B4651 +:108C100019825A820021009101911C8002219970D1 +:108C200005A9029104A903916946FFF71CFEEAE732 +:108C3000F0B591B00D4681206946087105F09CFCA5 +:108C40000646002D08D02878CD4C012806D00228F1 +:108C500028D0072011B0F0BD1020FBE7A98801AA99 +:108C6000FEF778FC0028F5D1B00734D568460079C6 +:108C7000002820D1A879C0071DD006F07EFB002077 +:108C800000906A892989A088EB6806F07EFB694616 +:108C9000087106F076FB6946087900280BD0FEF7CC +:108CA00026FCD7E7A98801AAFEF754FC0028D1D1F9 +:108CB000342006420FD00121684601720173017908 +:108CC0004173F00609D5A18868460182A18A018313 +:108CD0002069059004E00820BCE7A0886946088266 +:108CE000FAF731FB05461720694688830AAA2B4606 +:108CF000023207A902A806F011F8074668780007B3 +:108D000001D5FAF73CFB002F03D03846FEF757FC9D +:108D1000A0E7F00603D5207B062108432073B006A8 +:108D200002D50020FEF776FE08A8009069468B8BDE +:108D3000208804220121FEF729F98BE7F0B50026EF +:108D400095B014460D4600290FD0022C4FD3A71E14 +:108D5000BAB28A480AF052FE29191039CA7B8B7BB5 +:108D600011021943884242D1BCB201A9012006F088 +:108D70001EFC7AE0029F3888010776D5002D41D08D +:108D8000A9190691CA788B78361D1102B6B219431B +:108D90008919A1422BD869468A8906994B780978A6 +:108DA0001B020B439A4222D1C00623D506F0E5FAF6 +:108DB00007A800900698AB19C17880780A02069936 +:108DC00002434878097800020843002106F0DDFAE2 +:108DD000009006F0D6FA009800283ED10698C17897 +:108DE000827808026946898B1043884202D00B20A2 +:108DF00015B0F0BD0698C17882780802104380193A +:108E000086B22EE0C0062CD5002007AA01461154D8 +:108E1000401C80B21028FAD306F0AFFA06A80090E2 +:108E20006846002380891022194606F052FC009003 +:108E3000002803D006F0A5FA00980EE00BA86946BA +:108E4000009088890A8B07AB002106F09EFA0090FB +:108E500006F097FA0098002803D0FEF748FBC7E712 +:108E600003E0388810218843388001A806F0A7FB6A +:108E7000002800D17EE7424D6988002921D00122D7 +:108E800068460276027700244477018417218185A1 +:108E90000EAA234602320BA906A805F03FFF0028C0 +:108EA00002D0FEF78CFBA3E70CA8009069468B8DDF +:108EB000288804220121FEF769F8002898D16C80E7 +:108EC00096E7002094E7F0B5002487B015460E46DB +:108ED000002A04D002A9012006F069FB41E010201D +:108EE00007B0F0BD0398007800073AD506F045FAC0 +:108EF00001A8009068460023008A204A194606F01F +:108F0000E8FB074606F03DFA002F23D1002E23D0C0 +:108F100068468088298820183719001D814239D376 +:108F20006946098A3970090A797069468988B97071 +:108F3000090AF97006F021FA01A869460090088A2A +:108F40008A883B1D002106F0C4FB074606F019FA8B +:108F5000002F01D00320C3E7684680882018001D39 +:108F600084B202A806F02BFB0028BBD082280BD0CD +:108F7000FEF7BDFAB4E7000001340000FFFF000077 +:108F8000EC13002003300000002E0ED02988A01C16 +:108F9000814201D20C20A3E72246314639480AF02B +:108FA0002DFD31190870000A4870A41C2C80002087 +:108FB00096E700B585B06946FEF741FC00280AD166 +:108FC0006846007C03000CF0F5F808052F2F2F2FC2 +:108FD00008080531032005B000BD684680780128E7 +:108FE00007D1684600880321C902401A1CD0012815 +:108FF0001AD068468079012806D1684680881521F4 +:109000004902401A05280FD96846807A012811D1F3 +:109010006846018929200002081A05D0022803D0D9 +:10902000032801D0042805D10F20D4E7164917489A +:109030000BF0CFFF0020CEE738B5154A0021518054 +:1090400003791AE0CC002418A46800946C462488A4 +:10905000250707D5E50605D5D90008182038C08BA7 +:10906000508006E0640406D59171C9000818C088D4 +:109070009080012038BD491CC9B28B42E2D8002043 +:1090800038BD0000FFFF0000607D000033020000DB +:10909000EC1300200120F8494006C861704770B504 +:1090A000F54D0024AC7028466C7020304470047478 +:1090B0006C61AC72AC6209F01AFFA86128463430CA +:1090C0000AF0B4FD002804D0FF20ECA13A300BF0E8 +:1090D00080FFEE48C46301204006E86170BD70B5B2 +:1090E0000125EB4902260E60E849CD63E949C96ACA +:1090F00009070ED4E7494031CB6AE74A53620B6B4C +:1091000093624B6BD3628B6B1363C96BD3051943AB +:109110005163D949E14CC96900282BD001282DD0D1 +:10912000FF20D6A169300BF054FFDD48A063FF207B +:10913000043060632563DB49032008602061D74960 +:10914000962040314860D948D7494163D549FC3918 +:109150000163D549091FC163D249F03981630320F6 +:10916000D249000340394860D14910204860D148B5 +:10917000066070BDD0486061D04804E0CF48E03060 +:109180006061CE48801F0143A161CEE7BA4901204A +:1091900008707047B84900200870704770477047E2 +:1091A000BE4940310028086802D00122104301E086 +:1091B000400840000860704770B50C46AE4D01464F +:1091C0000622E81C0BF068FD6C7270BDAA482030C6 +:1091D00040787047A84A91705070704770B50D463E +:1091E0000446082904D9FF20A4A1C6300BF0F1FEE3 +:1091F0000022B34809E09100635809180B6053003E +:109200001B191B8C0B62521CD2B2AA42F3D3206BE7 +:10921000AB494031086070BD0B23DB4310B5C21A67 +:109220009E4998421FD008DC1C3222D00A2A20D046 +:10923000142A1CD0182A08D117E0083011D00428AD +:109240000DD0082809D00C2805D0FF208BA1F230C2 +:109250000BF0BFFE10BD04200CE000200AE0FC2053 +:1092600008E0F82006E0F42004E0F02002E0EC2022 +:1092700000E0D820C86010BD7F482030007B7047D8 +:1092800010B5864CC17861620BF067FD0002E061A9 +:1092900010BD252808D0262808D0272808D041004E +:1092A0000A2807D8091D06E0022105E01A2103E07B +:1092B000502101E0891DC9B2784A91607749403157 +:1092C000486170476C494861704770B56A4CA0723C +:1092D00000F01FFBA07AC00740D0724D28688007BD +:1092E00003D466A177480BF074FEA07A01061DD561 +:1092F000800707D5734861A1801C0BF06AFEA07A35 +:10930000000613D52078694E012816D0002804D015 +:109310006C485AA111300BF05CFE6B487061A0697B +:109320003061FF206149013040394860A07A8007F0 +:1093300014D52868C00708D102E06348001FEDE794 +:1093400060484EA11A300BF044FEA07A400728680E +:1093500001D5042100E008210843286070BD70B5E4 +:109360000124454D002807D0012818D002281AD022 +:10937000232042A100010BE000F0CBFA52482978EB +:10938000001F012907D0002907D04E483BA15738BC +:109390000BF01FFE70BD046070BD446070BD812085 +:1093A000FFF793FF70BD00F0B4FA6869002804D19C +:1093B000444832A14F380BF00CFE6969A86A401886 +:1093C0004249C86039484249403001603E490C3149 +:1093D00041600814354940394860274820300474FA +:1093E00070BDF8B50C2069460870314C6068C00645 +:1093F000C50F1026A66034480021FC300161324BB5 +:1094000001221B1F1A610BE000BF00BF00BF00BF9D +:1094100000BF00BF00BF00BF6B461A78521E1A7013 +:109420006A461278002A02D00269002AECD0016153 +:1094300068460078002804D1912010A180000BF02C +:10944000C8FD002D00D06660F8BD0B490020C86142 +:10945000704710B50BF081FC00021049000AC86388 +:1094600010BD0B49022008607047094902200860BE +:109470001049086070470000481400207372635C54 +:1094800068616C5F7263732E63000000C01F004050 +:1094900080E100E08000001000170040001500404F +:1094A0005B060000001200404480004040F501408F +:1094B0000013004080E200E00601020025000300E6 +:1094C0000016004075020000041000404085004076 +:1094D0004C810040F74902200860CBE7F64908704C +:1094E000C8E710B5F5480AF0A9FB002803D0F449F5 +:1094F000F4480BF06EFD10BD10B5F0480AF0B6FB55 +:1095000010BDF1494860B5E7EC4910B53439EF4B6F +:109510000022C8605A60896A0818ED49486000F066 +:10952000FFF910BDE54810B5C2213438C160E74AE3 +:1095300000215160806AE649C230486000F0F0F9CD +:1095400010BD0120E34940028860DC490020343925 +:10955000C860DF4948608DE7D84900203439886207 +:1095600088E7D648DA493438806AFE30886081E777 +:10957000D749002088607DE7D748016810229143D1 +:109580000160D6490120886174E7D5490020C8618F +:10959000D14801681022114301606BE700B5FFF765 +:1095A000EBFFC64900203439087400BD00B5FFF751 +:1095B000ECFFC24901203439087400BDC849CA69AA +:1095C000012A01D0002055E7BF4A40329268520676 +:1095D000520E524202700020C86101204AE7F8B5DD +:1095E000BF4C2069012806D00021B44834380078E7 +:1095F000012802D004E04021F7E7E268012A04D004 +:1096000000220A43012802D004E02022F9E7616821 +:10961000012905D000211143B24A002802D007E0F9 +:109620001021F8E71368012B02D1E368012B04D065 +:1096300000230B43002802D007E00823F9E7116854 +:10964000002902D1E168012905D000221A439F4E6A +:10965000002802D004E00422F8E77168012904D050 +:1096600000211143002802D004E00221F9E76068DC +:10967000012829D000259C480D4301680906090EE0 +:1096800002D06169012900D000218C4F143F397349 +:1096900000680006000E02D0A069012800D000205A +:1096A00078738B488068002803D000F03DFA0128C9 +:1096B00000D00020B8730021E16021616160616128 +:1096C000A16171602846F8BD0125D4E77B480121DE +:1096D0001438C173CEE6F8B5784E0127143E307CBD +:1096E0000025002825D07C4C206800902560FFF7DD +:1096F00078FE009820607A48C56005614560456144 +:1097000085617449001488603046203801787348B8 +:1097100001290AD000290AD0D920694980000BF01C +:1097200058FCF9F775FC3574F8BD0760F9E7476038 +:10973000F7E7FFF754FF04460020F07364484268DF +:109740005E4D343D6A620068A8622978002909D11B +:10975000A978002906D05C4B5B681B780B406978C0 +:10976000994309D000213170E10707D0104602F07B +:1097700029FD0121A86A08E03770F5E7A10601D5A7 +:10978000022102E0A10702D5002102F02AFD4E4F7E +:10979000796806220931E81C0BF051FA002807D13C +:1097A000687A79680978C909884201D1012000E006 +:1097B00000207070204600F0BDF83F48C2270078B6 +:1097C000002815D0012828D002283BD003285AD0E1 +:1097D0003B4946480BF0FDFB287C002804D0287844 +:1097E000002865D0FFF7C8FE2878002861D089E0FE +:1097F000A00701D501F0CCFB200703D50120EF60C5 +:1098000001F0FEFB600703D50020EF6001F0F8FBDC +:10981000A006E1D501F068FBDEE7A00701D503F063 +:1098200026FF200703D50120EF6003F09FFE6007AD +:1098300003D50020EF6003F099FEA006CCD503F01D +:1098400020FEC9E7A00703D5BF200440F9F7D2FBEB +:10985000200705D5BF2004400120EF60F9F7C9FBC0 +:10986000600705D5BF2004400020EF60F9F7C1FB79 +:10987000A00603D5BF200440F9F7BAFB6006ABD5BC +:10988000F9F7B9FBA8E7A00701D5F9F7B7FB20075F +:1098900003D50120EF60F9F7B0FB600703D5002086 +:1098A000EF60F9F7AAFBA00696D5F9F7A5FB93E7B9 +:1098B0001EE020E000E100E0600000207C140020B9 +:1098C0007C940000AB020000001500404081004085 +:1098D0004085004000F501400012004000100040AB +:1098E00000110040001400404016004094040000A5 +:1098F000FFF74BFE78E7E868002803D0A96A09184B +:1099000028484160F07B002800D10DE7F9F780FB83 +:10991000F8BD254903200860881524498860A9E519 +:10992000224823494030C161224981611F494015C5 +:1099300048609FE570B50546FFF7EBFF1E4CA17A26 +:10994000080701D568071CD41C4AC80605D5507BFA +:10995000002802D0907B002813D0880602D510780A +:1099600000280ED1480602D55078002809D00020E2 +:109970008A070026002A07DA4A0704D50122227046 +:1099800002E00120F4E72670CA0709D0AA0705D42F +:10999000890705D5002803D0A80601D4FFF721FDCB +:1099A000A67270BD408500400012004000F50140E5 +:1099B000101000404481004048140020681400202A +:1099C0002E48002101704170704770B5064614465C +:1099D0000D460120F7F780FE28490120284B08702A +:1099E0009E60DC601D6170BDF8B504460120F7F78C +:1099F00073FE22490120087021494C60214900264C +:109A00004E600321204D8902A960204F002C0AD00E +:109A1000012C03D01EA140200BF0DBFA3E60032096 +:109A200080026860F8BD386001208002F9E710B557 +:109A30001248017800290ED00321134A890291604F +:109A400010494A680021002A03D0154A1268427062 +:109A500000E0417001700020F7F73EFE10BD07489E +:109A60000178002907D007484068002802D00C4838 +:109A70000068C0B270474078704700006100002065 +:109A800000F5004000F1004000F5014000F2004008 +:109A90007372635C68616C5F63636D2E63000000CA +:109AA00000F400403648002101704170102181709F +:109AB000704770B5064614460D460220F7F70CFEB7 +:109AC00001202F492F4A0870E41E146196605560EA +:109AD00070BD10B50220F7F7FFFD2949012008707D +:109AE000294800210160416081602849C014486014 +:109AF00010BD10B5224C2078002811D00120234938 +:109B0000C002886000F02EF80021002804D0012057 +:109B100060701F48006801E061701020A070217023 +:109B20000020F7F7D9FD10BD10B5154801780029C0 +:109B300005D000F017F8002800D0012010BD4078B3 +:109B400010BD10B50E480178002909D000F00AF8C0 +:109B5000002803D00E480068C0B210BD102010BD10 +:109B6000807810BD08480168002905D041680029A7 +:109B700002D08068002801D0002070470120704783 +:109B80006300002000F5004000F1004000F50140B6 +:109B900000F4004010B528210BF0DBF810BD407830 +:109BA0008006800E704740788006800EC01C70478B +:109BB0002820704770B5054600780A0700090001A3 +:109BC000120F104328700B000BF0F4FA070507057D +:109BD000070509050B00062408E00C2406E02224F2 +:109BE00004E00024FEA158200BF0F3F96878800906 +:109BF00080012043687070BD00780007000F704737 +:109C000010B50622C01C0BF047F810BD0B4610B56E +:109C1000C11C062218460BF03FF810BD10B50622F5 +:109C200009300BF039F810BD0B46014610B506227D +:109C3000093118460BF030F810BD0278BF23C90770 +:109C40001A40490E0A430270704700784006C00F60 +:109C5000704702785206520EC9010A4302707047DB +:109C60000078C009704770B50C460546C11C2046F7 +:109C7000062209300BF010F820784006400E2070C4 +:109C800029784906C90FC9010843207070BD70B515 +:109C900015460E4604461F2A03D9D1A1A9200BF070 +:109CA00098F920462A46314609300AF0F5FF6078D7 +:109CB000AD1D80098001A906890E0843607070BD42 +:109CC00070B5054640780E468406A40E062C03D2D5 +:109CD000C3A1B9200BF07DF9A41FE4B21F2C00D959 +:109CE0001F2429462246093130460AF0D5FF204676 +:109CF00070BD70B515460E4604461F2A03D9B8A19B +:109D0000CD200BF066F920462A46314609300AF08C +:109D1000C3FF6078AD1D80098001A906890E084344 +:109D2000607070BD70B5044640780E468506AD0E75 +:109D3000062D03D2AAA1DE200BF04BF9AD1FEDB228 +:109D40001F2D03D9A6A1E2200BF043F921462A4694 +:109D5000093130460AF0A0FF284670BD10B5042234 +:109D60000F300AF099FF10BD0B46014610B50422D2 +:109D70000F3118460AF090FF10BD10B503221330C2 +:109D80000AF08AFF10BD0B46014610B503221331BD +:109D900018460AF081FF10BD4176090A81767047A6 +:109DA000817E427E080210437047C176090A01771E +:109DB0007047017FC27E0802104370474177090A4D +:109DC00081777047817F427F080210437047C175D9 +:109DD000090A01767047017EC27D08021043704770 +:109DE00081757047807D704720300279C90652091D +:109DF0005201C90E0A430271704720300079C00633 +:109E0000C00E704720300279D206D20E49010A43B3 +:109E100002717047203000794009704710B5052263 +:109E20001F300AF039FF10BD0B46014610B5052260 +:109E30001F3118460AF030FF10BD30B5411C837E3B +:109E40000A461902D37D447E927D1B0221431343AF +:109E5000674D827D8C1FAC4210D8002A0ED0082A94 +:109E60000CD88A420AD28B4208D8817F427F0802EE +:109E70001043A91D884201D8012030BD002030BD0B +:109E800000210A464254491C2229FBDB70474078D6 +:109E9000C006C00E70474078C006C00EC01C704798 +:109EA0002220704710B502788B07920892009B0F12 +:109EB0001A4302704278520952014270012908D0B7 +:109EC000022906D0032905D0FF2045A1A3300BF0BD +:109ED00080F810BD01210A43427010BD10B5027810 +:109EE0008B07920892009B0F1A4302704278520926 +:109EF00052014270012908D0022906D0032905D059 +:109F0000FF2037A1BD300BF064F810BD01210A43DA +:109F1000427010BD00788007800F70470278FB23E5 +:109F2000C9071A40490F0A4302707047007840077A +:109F3000C00F70470278F723C9071A40090F0A4378 +:109F40000270704700780007C00F70470278EF2357 +:109F5000C9071A40C90E0A43027070470078C0064C +:109F6000C00F704770B50546C1700B000BF022F9A9 +:109F70000E080A0C0E1012120C14141212160C18E1 +:109F80000C2413E0082411E002240FE017240DE054 +:109F90000D240BE0012409E0092407E0062405E074 +:109FA000452000240EA1C0000BF013F8687840098A +:109FB00040012043687070BDC078704770B504469A +:109FC00040780E46C506ED0E1B2D03D904A10948A5 +:109FD0000AF0FFFF6019C01C042231460CE00000AB +:109FE0007372635C756C5F7064752E6300000000B3 +:109FF0007A0C00003A0200000AF04EFE70BD70B507 +:10A00000044640780E46C506ED0E1B2D03D9A04927 +:10A01000A0480AF0DEFF6119C91C042230460AF08C +:10A020003BFE70BDC171090A01727047017AC279A5 +:10A030000802104370474172090A81727047817AA1 +:10A04000427A080210437047C172090A01737047CF +:10A05000017BC27A0802104370474171090A81717D +:10A060007047817942790802104370470171704747 +:10A07000007970474173090A81737047817B427B85 +:10A0800008021043704730B5411C037A0A46C47970 +:10A0900019022143537914791B0223437E4D007921 +:10A0A0008C1FAC4210D800280ED008280CD888424B +:10A0B0000AD28B4208D8D07A917A00020843A91DAF +:10A0C000884201D8012030BD002030BD10B50522E6 +:10A0D000001D0AF0E1FD10BD0B4610B5011D052263 +:10A0E00018460AF0D9FD10BD4172090A8172704705 +:10A0F000817A427A080210437047017170470079F3 +:10A10000704710B50822001D0AF0C6FD10BD0B46B1 +:10A1100010B5011D082218460AF0BEFD10BD0A78D0 +:10A120000273497841737047027B0A70407B487024 +:10A13000704710B508220E300AF0AEFD10BD0B4678 +:10A14000014610B508220E3118460AF0A5FD10BDD3 +:10A1500010B5042216300AF09FFD10BD0B460146D3 +:10A1600010B50422163118460AF096FD10BD10B540 +:10A170000822001D0AF090FD10BD0B4610B5011D10 +:10A18000082218460AF088FD10BD10B504220C30D4 +:10A190000AF082FD10BD0B46014610B504220C31B9 +:10A1A00018460AF079FD10BD017170474171090A26 +:10A1B00081717047C171090A017270470079704757 +:10A1C00081794279080210437047017AC279080206 +:10A1D00010437047017170470079704701717047F3 +:10A1E0000079704710B50822001D0AF055FD10BD1A +:10A1F0000B4610B5011D082218460AF04DFD10BD92 +:10A2000010B50822001D0AF047FD10BD0B4610B521 +:10A21000011D082218460AF03FFD10BD70B5154615 +:10A220000E4604461B2A04D93720194900010AF0BA +:10A23000D0FE2A463146E01C0AF02EFD6078E90681 +:10A2400040094001C90E0843607070BD70B50546F5 +:10A2500040780E46C406E40E1B2C04D9DF200C49BE +:10A2600080000AF0B6FE2246E91C30460AF014FDD2 +:10A27000204670BD4078C006C00E1B2801D80120C2 +:10A2800070470020704710B522220AF005FD10BD6E +:10A29000E09F0000430200007A0C0000FEB50F466C +:10A2A00004460146064620302546C031603640351A +:10A2B0000190032F04D0002F2DD0012F2BD04BE085 +:10A2C00000206080A080E08020816081A082E08505 +:10A2D000E0826874A074E074A076E076A073E07306 +:10A2E00020746074019B987401232B74A8822883C6 +:10A2F0000876E883B0706883A873E8732077607786 +:10A30000019988720199087430727072B072327457 +:10A31000B074A883FEBD0020A8822883012F52D0EC +:10A32000E08B0090608C0290C00000990AF02EFD36 +:10A33000401C80B2E8820099192241439202914266 +:10A3400001DD401EE8827D20000200990AF01EFD1A +:10A35000401C3080002F01D0022FDBD10198007A01 +:10A36000C1060198C90E01720020687322182421C9 +:10A370008B5C4032D9075B08DE07C90FF60F7118F6 +:10A380005B08DE07F60F71185B08DE07F60F711821 +:10A390005B08DE07F60F71185B08DE07F60F711811 +:10A3A0005B08DE07F60F76185908891911726A7B67 +:10A3B000401C5118C0B269730528D7D3002FA9D10A +:10A3C0000020A874FEBD4A7F2046E030022A12D049 +:10A3D000097F022913D050A173200AF0FAFD012051 +:10A3E00000900290E08BA98B484300990AF0DCFCB6 +:10A3F000A883029898E7818800910089F1E7018A93 +:10A400000091808AEDE770B504464034667B0546CE +:10A41000002E68D0252E66D8002964D03E20405DED +:10A42000A27B4843101825210AF0B0FC0846A1730E +:10A430004207C908520F3C4B691820319A5C0979D0 +:10A440008A4367D031460AF0A1FC491CCAB20020F9 +:10A4500006E0002804D029184031C979511ACAB23F +:10A46000291848235B5C93423AD320310979C943C8 +:10A47000CB07DB17D21A521E1206120E34D08B07EE +:10A48000DB17D21A521E1206120E2FD04B07DB1703 +:10A49000D21A521E1206120E2BD00B07DB17D21A3D +:10A4A000521E1206120E27D0CB06DB17D21A521EEE +:10A4B0001206120E23D08B06DB17D21A521E12067A +:10A4C000120E1FD04B06DB17D21A521E1206120EA6 +:10A4D0001BD00906C917511A491E0A06120E17D0B9 +:10A4E000401C0528B5DB70BDC00013E0C000401C57 +:10A4F00010E0C000801C0DE0C000C01C0AE0C000DD +:10A50000001D07E0C000401D04E0C000801D01E008 +:10A51000C000C01DE07370BD7372635C6C6C5F75CE +:10A5200074696C2E63000000EC51010010B5FF4807 +:10A530000021017041708170C17041718171C171E0 +:10A54000083009F073FB002804D0FF20F8A1843004 +:10A550000AF03FFD10BD10B5F44900204872081DF7 +:10A5600009F064FB002804D0FF20F1A1C3300AF0F9 +:10A5700030FDFFF7DBFFF148FFF782FC0021EF48D9 +:10A58000FFF7E4FC0121ED48FFF78CFC10BDE2E78A +:10A590001B207047E5494A7A002A01D00020704705 +:10A5A000488101204872704710B5E0494A7A002A74 +:10A5B00002D04989814201D0002010BDDB48001D36 +:10A5C00009F03CFB002804D0FF20D9A1B4300AF0E8 +:10A5D00000FDD648001D09F049FBFFF7A7FF012049 +:10A5E00010BD70B5D14C0025627A002A02D0628974 +:10A5F000824201D00D700DE0227863789A4203D335 +:10A6000022786378D21A04E062782378D21A102371 +:10A610009A1A0A70FFF7C8FF002801D0657201205E +:10A6200070BDC2494A7A002A04D04989814201D1C9 +:10A630000120704700207047BC490A784B78521CB3 +:10A640001207120F9A4207D0097822225143BC4ABE +:10A65000891801600120704700207047B3480178D5 +:10A660004278491C0907090F914206D00178491C1C +:10A670000907090F01700120704700207047AB499E +:10A680004A7A002A04D04989814201D101207047C9 +:10A6900000207047A5490A784B789A4207D049783C +:10A6A00022225143A64A89180160012070470020E8 +:10A6B000704710B59D4C20786178884216D060783C +:10A6C000401C0007000F6070201D09F0B7FA002839 +:10A6D00004D0E078401CE070012010BDA078401C40 +:10A6E000A0709248001D09F0C1FAF5E7002010BDE6 +:10A6F0008E4801784078814201D1012070470020C6 +:10A7000070478A4801784278914202D301784078B4 +:10A7100003E041780078081A1021081AC0B2704787 +:10A720000F20704770B5814C0D46617A002916D014 +:10A730006189814213D100262E70201D09F07EFA16 +:10A74000002805D1A0782870A670201D09F08EFA87 +:10A750002878E17840182870E670012070BD00204C +:10A7600070BD76490160704770494A7A002A04D06A +:10A770004989814201D101207047002070476B490F +:10A780004979002901D0002070476E4901600120FD +:10A79000704766484179002901D0002070470121A7 +:10A7A00041710846704761494A7A002A04D04989B4 +:10A7B000814201D101207047002070475B494979EF +:10A7C000012901D0002070475E49016001207047D7 +:10A7D00056484179012901D000207047002141717C +:10A7E0000120704751484079012801D0012070476D +:10A7F000002070474D494A7A002A04D04989814295 +:10A8000001D1012070470020704770B5474C0546C4 +:10A81000A0790721401C0AF0B9FAE079814208D0FA +:10A82000A07922214843474922314018286001205D +:10A8300070BD002070BD10B53C4C0721A079401CB4 +:10A840000AF0A4FAE079814207D0A0790721401CE0 +:10A850000AF09CFAA171012010BD002010BD334800 +:10A860008179C079814201D1012070470020704771 +:10A870002E494A7A002A04D04989814201D1012017 +:10A8800070470020704710B504462848083009F08A +:10A89000D5F9002815D125498879CA7990420CD07C +:10A8A000C8792221484327492231401820601F4897 +:10A8B000083009F0DBF9012010BD1C48083009F010 +:10A8C000D5F9002010BD10B504461848083009F02D +:10A8D000B5F9002815D115498879CA7990420CD06C +:10A8E000C8792221484317492231401820600F4877 +:10A8F000083009F0BBF9012010BD0C48083009F000 +:10A90000B5F9002010BD094810B5083009F096F9D6 +:10A91000002822D1054CA079E17988421AD0E0794B +:10A920000721401C0AF032FAE1710DE066000020B8 +:10A930007372635C646D5F712E630000B01700205A +:10A9400080140020A01600202046083009F08EF95F +:10A95000012010BD0C4809F089F9002010BD0A48FB +:10A9600008388179C079814201D1012070470020E7 +:10A970007047054808388179C079814201D10120AA +:10A9800070470020704700006E000020704770473D +:10A99000FF207047704770470020704700207047C5 +:10A9A000002070470020704700207047002070474B +:10A9B000002070470020704700207047012070473A +:10A9C000002070470020704700207047002070472B +:10A9D000F8B5FF4D0446A87F002600280CD00029BA +:10A9E00023D1667010202070E87FA07028462030A8 +:10A9F0000078E070AE7718E0287A012801D00020B6 +:10AA0000F8BD002911D16670F149687A01270A3131 +:10AA1000002801D0132000E0052020701422A01C83 +:10AA20000AF03AF9A7716E722E720120F8BDF8B5DE +:10AA3000E8480078002802D00C273846F8BD0027E7 +:10AA4000E34D3C46203DAF74EF746F75AF752F75C5 +:10AA500028466F732038DE4E47737771E87D0028F3 +:10AA600004D0FEF785FDFFF744F8EC75347274727C +:10AA7000B477D7482430FFF78DF8D5484C30FFF72E +:10AA800089F8DAE710B5D34C00232370D04C203C72 +:10AA9000E375CF4B01241C71603B583307C3FFF7AC +:10AAA000C6FF002804D0FF20CBA102300AF091FAA3 +:10AAB00010BDC7482038807C7047F8B5C44D0646A5 +:10AAC000407B203DE873C24837791346AF73B27BB1 +:10AAD00082710446603C217006221946601C0AF00F +:10AAE000DBF8B07960730622F11DE01D0AF0D4F89E +:10AAF000687B0126002800D0EE74B5484038407BC2 +:10AB0000002800D02E75002F09D0012F09D0022F68 +:10AB100024D0032F46D0FF20AFA14D3013E00021F9 +:10AB20001DE0AB4801212430FFF744F8A848E11D9F +:10AB30002430FFF773F8607B002807D0012807D086 +:10AB4000FF20A5A143300AF044FA0CE0002100E008 +:10AB500001219F482430FFF77CF804E006219C483F +:10AB60002430FFF727F800206875A8759848611C05 +:10AB70002430FFF745F8964821782430FFF75DF838 +:10AB8000934804214C30FFF715F89148611C4C3074 +:10AB9000FFF736F88E4821784C30FFF74EF8AE7448 +:10ABA0000020F8BD0221DAE770B5894C0125203C70 +:10ABB0000246A5758648007A002801D03A2070BD6B +:10ABC000834860380378934206D1002262750622DA +:10ABD000401C0AF061F86575002070BD70B5044630 +:10ABE0007B4D0020203D28752846224632380AF049 +:10ABF00053F82846203844730120287570BD7449E5 +:10AC00000871704710B5724C0022203CE2746073EA +:10AC10000246204612380AF03FF80120E07410BDC9 +:10AC2000F8B500F04CFB6A4C0025203CE07D002884 +:10AC300004D0FEF79DFCFEF75CFFE575654E3570B0 +:10AC4000FEF75AFCA07B012804D00021084601F041 +:10AC500082FAF8BD0021022001F07DFA5C4C207AD6 +:10AC60000127002809D0A07F0028F2D10520E07735 +:10AC7000204620300570A777F8BD70780028FBD0FB +:10AC8000534906226039487BE073C91D0846693084 +:10AC90000AF002F83C20A07227727570F8BD10B55A +:10ACA0004B4C203CE17B207CCA0701D0C2070BD073 +:10ACB0008A070FD582070DD42620FEF7EAFA207CFA +:10ACC00002210843207410BD2520FEF7E2FA207C03 +:10ACD0000121F6E74907F6D54007F4D42720FEF70F +:10ACE000D8FA207C0421ECE770B53A4D287800288A +:10ACF0007CD1374C203CA07C00287CD0FEF7F1FBB7 +:10AD00000026267466746E703046FEF7E7FB00205E +:10AD1000FEF7E5F93448FEF7B3FA2546403D296EC3 +:10AD20008857FEF779FA3048C01EFEF792FBFEF70F +:10AD300008FCFFF7B4FFFEF729FAFEF7CBFB012072 +:10AD4000FEF70DFB0F210520FEF744FA2978681C59 +:10AD5000FEF732FAA07B01280AD0E07C002807D059 +:10AD6000214612390846627B5630FEF790FFE674A2 +:10AD7000207D002808D0164840380146427B123911 +:10AD80008C30FEF7B6FF2675607D00280BD010488A +:10AD9000691C2430FEF734FF0D48691C4C30FEF767 +:10ADA0002FFF6675A675E86D0178002903D001783C +:10ADB000001DFEF713FAA86D0178002907D001786D +:10ADC000034A401C7732FEF774FE0120E0750EE066 +:10ADD00034180020740000207372635C6C6C5F6137 +:10ADE00064762E6300000000F751010003E0FEF7D7 +:10ADF00083FB002070BD0C2070BDFB49486070478C +:10AE000070B50546FEF79DFB002D06D00020FEF72D +:10AE10005CFAFEF7BBF9FFF742FFF44C607C0028B8 +:10AE200009D0A07B012803D1F149F2480AF0D1F8FA +:10AE3000FFF7F6FE70BD0126002D05D00220FEF7BB +:10AE40008EFAEA4820304671E8484430FEF759FB54 +:10AE5000012008F0A8FDFEF7A1F9A07B00280FD083 +:10AE600001280DD002280BD003280BD0E148E0497F +:10AE70001E300AF0AEF8E07B217C884306D009E062 +:10AE8000032000E00120FEF720FAF4E7A07B012870 +:10AE900003D06674D448067070BD00202074F9E7B2 +:10AEA00010B5FEF71EFBD048007800280ED1CF4821 +:10AEB000807C00280AD00020FFF7A2FFF6F781FA75 +:10AEC000CA4820300079012806D007E000F0F7F9E1 +:10AED000FEF712FB0C2010BDF8F79AF8002010BD09 +:10AEE000C14901204870704770B500F0DAFF0028B2 +:10AEF0001BD0FF202D30FEF7E5F9BB4E3078BB4C60 +:10AF00002034012814D0022801D003282ED0A520F7 +:10AF1000B74980000AF05DF83078002807D0F6F7CE +:10AF200050FA207901282BD02FE0FFF779FE70BD71 +:10AF3000AE4DA87B032819D0FEF7F4FAE87D00286F +:10AF400003D0FEF7C6FDFEF70CFBA8489430FEF7D1 +:10AF5000D8FA012008F028FDA87B01280BD0A179A0 +:10AF60006F20012906D0032904D004E00120FFF757 +:10AF700047FFD1E77F20FEF7A8F902203070CBE72A +:10AF80006079002801D1FEF7A1FB0020607170BD3F +:10AF900070B5964CE07D002803D0FEF7E9FAFEF785 +:10AFA000A8FD00F07EFF00281CD08F4D28780228D5 +:10AFB00003D08F4990480AF00CF8A07B012814D0E8 +:10AFC000FF202D30FEF77EF90120FFF719FF2878CA +:10AFD000002809D0F6F7F5F9844C203420790128AF +:10AFE00006D00AE0FFF71CFE70BD99208000E9E75B +:10AFF0006079002801D1FEF769FB0020607170BD07 +:10B00000F8B50446FEF738F90746FEF78DFD01282E +:10B0100027D0002674480078022804D07648744966 +:10B020003C3009F0D6FF714DE87D002803D0FEF7D3 +:10B030009FFAFEF75EFDFEF784FA6C489430FEF747 +:10B04000DBFD21006D4C009064D0FEF7BFF80028B6 +:10B0500060D0009803000AF0ADF8065D5D5D065D06 +:10B060001E5D0126D6E7A87B012853D0374304D1C3 +:10B07000A079002801D002284CD160484C30FEF75E +:10B0800040FA012008F08FFC0120FEF71EF9564817 +:10B090000321017045E059487430C178D438C27931 +:10B0A00091421DD10146D4310A79037A9A4217D1CF +:10B0B0004A79437A9A4213D18A79837A9A420FD194 +:10B0C000CA79C37A9A420BD10A7A037B9A4207D192 +:10B0D0000978407B4906C90F814201D1012100E076 +:10B0E0000021A87B012802D0002803D012E000290B +:10B0F00007D10FE0374304D1A079002801D00128FF +:10B1000008D13E487430FEF798FE002802D0A87D92 +:10B11000002810D0FF202D30FEF7D4F80120FFF7D3 +:10B120006FFE3148007800286AD0F6F74AF9207996 +:10B1300001286ED0C0E02C4F30497868042283315A +:10B14000343009F0A9FD2D484021743000784006C4 +:10B15000C20F78680A54294906227731413009F034 +:10B160009BFD2649786803228731383009F094FD29 +:10B1700022483B217430827D78680A541F4974311B +:10B180000A7ECB7D12021A4382878A7E4B7E120290 +:10B190001A43C2830A7FCB7E1102194301841749E7 +:10B1A00074318A7F4B7F1102194341841349052270 +:10B1B0009331243009F070FD10497F68943108798B +:10B1C000C20638462030D20E0090827709794909AC +:10B1D000C177207A00281DD0A07F00285BD1607A3B +:10B1E00000280ED013200DE0740000201418002059 +:10B1F000D8AD0000F9030000BF02000034180020A1 +:10B200005CE00520E0773449002008700120A07739 +:10B2100041E04CE03048E97D1038002924D000217D +:10B22000A172B989A1814021C95DE1733946062225 +:10B23000413109F031FDF88BE082388C2083788C25 +:10B2400060830098C07F2077607F400840003043D3 +:10B250006077FEF776FC617F4000C907C90F0143A4 +:10B2600061770120607215E00021A172B989A18186 +:10B270004021C95DE17339460622413109F00CFDD8 +:10B28000F88BE082388C2083788C60830098C07FB4 +:10B29000207701202072114D0020287000F00FF857 +:10B2A000FEF72AF90120696800F055FF39E7607957 +:10B2B000002801D1FEF70AFA00206071F8BD10B530 +:10B2C000FEF74AF9FEF73DF9FEF78BF80020FDF78F +:10B2D000FCFFFEF7CAF810BD5418002074000020CF +:10B2E0008107C90E002808DA0007000F0838800817 +:10B2F000FD4A80008018C06904E08008FB4A800095 +:10B3000080180068C8400006800F704710B500F034 +:10B310007BFF10BD70B5F64C0546A26800290DD024 +:10B32000002A04D0FF20F3A14C3009F052FEA560A2 +:10B33000F6F748F80220F6F73FF870BD002A04D16E +:10B34000FF20ECA1543009F044FE0020A060F6F785 +:10B350003AF80120F6F738F870BDE5481030C07EA5 +:10B36000002801D00020704701207047E0481030CD +:10B37000C07E7047DE483430C07E70470021C17601 +:10B38000817601600162DA481030C07E002807D162 +:10B39000D7483430C07E002802D1D549012008703A +:10B3A000704710B50B46C17E847EA14204D0114681 +:10B3B000184607F0B4FB10BDFFF7E0FF10BD38B52D +:10B3C000CB4C606801684978012924D00121684686 +:10B3D00006F05EF968460078CA49000209F0D6FC1A +:10B3E00060680268C0685268511807F0B5F9616872 +:10B3F000C860BF49606834310022884215D0018B93 +:10B40000002912D04272032101720271021D017FD4 +:10B41000FFF7C7FF38BD7D21C068C90007F09CF960 +:10B420006168C860B8480861E3E7018B491C018383 +:10B4300002214172E7E7FFB5AD4F02461037386A87 +:10B440003C68056889B060680790A948C1680291A6 +:10B450006B880B98C01A80B208900C98002804D012 +:10B46000264638362046483002E03E1D28466430E5 +:10B47000059003203071002A15D0012A7ED0022ABF +:10B4800052D0032A7BD09BA1A04809F0A2FD0C98C2 +:10B490000028307974D0032804D09C4895A1093045 +:10B4A00009F097FD40E1002904D1984891A169383D +:10B4B00009F08FFD9549A88FA839484340180A998B +:10B4C00000F0A8FEA0619149E88BA83948430A9989 +:10B4D00000F0A0FEE06186488C4AC068A98FA83AB7 +:10B4E000514384464118A069894A091A8A183B21A8 +:10B4F000A262864B495DA83B594341180818FF30AA +:10B500001630206260626046101AFF38ED2135382F +:10B51000C9008842BBD27F49884204D27B4875A1CA +:10B520005C3809F056FDBAE0784AA88FA83AE1687D +:10B53000504308180A9900F06DFEA0617349E88B2A +:10B54000A83948430A9900F065FEE0616848C06880 +:10B55000002804D16D4867A1543809F03AFD5820FD +:10B56000405B6D4A0028A88FE16822D0504308183C +:10B57000A169401AA0622169A06802E022E051E0BE +:10B58000CDE04843A169644A40183B21495D5143DD +:10B5900041180818FF3014302062E88BE1695043ED +:10B5A000411A0F208001081A60625148A16AC068E0 +:10B5B0006DE050430818A169401A3968D3384968CA +:10B5C0004018D7E7284640300290008B002801D071 +:10B5D000002904D14D4847A13C3809F0FAFCE88B1A +:10B5E0004D494843E169401AA062029A138B2269CF +:10B5F0009B1A9C46A3685343A2699A186346594311 +:10B6000051183B22525D444B5A438A185118FF315E +:10B61000143121620F218901411A61623449C968DC +:10B62000401A35E00C98002803D03420005D002833 +:10B6300074D1E88B38494843E169401A0899484376 +:10B64000A062284640300690008B0028079829D039 +:10B65000002804D02D4827A1163809F0BAFC069816 +:10B660002D4A018B08980818E16948434000FF30D3 +:10B6700014302062E88B5043411A0F208001081AD1 +:10B68000606200F0C1FD00281CD0A16A0298081A6F +:10B69000FF38ED212338C900884200D3F7E60220A5 +:10B6A0003071F4E6002802D00298002804D117482F +:10B6B00010A11D3809F08DFC0798A16AD33808182D +:10B6C000A062CCE706F0B1FD7A690146104607F0AA +:10B6D000D5FFA16A081AFF38ED211E38C90088423B +:10B6E000DCD201200DB0F0BD00ED00E000E400E090 +:10B6F000D01800207372635C6C6C5F6C6D2E7330BD +:10B700002E63000010270000B78913008A0500008F +:10B7100036040000A3020000E20400002AE003282F +:10B7200002D1FD4807210170A16A786907F014F879 +:10B73000B060616A206A884202D90598016001E020 +:10B74000059908600598F54900680818F060A9880F +:10B750000B98081A00B2002801DD022000E000204A +:10B7600070710C9830700C98002805D03420005D62 +:10B77000002801D00220B5E70C9801214840203470 +:10B780006075397F32463846FFF70BFE0020A9E787 +:10B7900010B5E14900284A68116A096807D01268A3 +:10B7A000C98BDF4BD2695943891A09F0EFFA10BDF2 +:10B7B000F8B5D94F35227868016A0C680168525C87 +:10B7C000002A0AD0498E6288914206D1407A002828 +:10B7D00003D1D449D44809F0FCFB06F026FD01460C +:10B7E0007868406907F04AFFFFF7D2FF79686588FB +:10B7F0000B682E185A8EB24202DB521C5A8602E0A7 +:10B80000401C2818588608683622125C002A05D188 +:10B81000428E23899A4201D1521C4286088B03280A +:10B8200002D2401C088302E00868408EA0802046B7 +:10B830004030C18A808A081A6188401E401885B24B +:10B84000203416E0096AE67F097976004B00B74993 +:10B85000007DCB5A895BC91889B20023FFF7EBFD45 +:10B86000002811D0012810D0AF48AE493A3009F075 +:10B87000B0FB79680868428EAB1A1BB2002BE1DA84 +:10B880000820E07400F00BFEF8BD78680068418E77 +:10B89000491C4186EDE770B51F209F4D002128709F +:10B8A000E960A868C27E130009F084FC04545403C4 +:10B8B0004654026A14680268117002685160006898 +:10B8C0002030407D002808D106F0AFFCA968096847 +:10B8D000096C07F0D3FE002815DCA86801684A8EC1 +:10B8E00061888A4204D12289511A6181628004E010 +:10B8F000511A61810168498E61800268C1681164D2 +:10B90000C16841610FE0A8680168098E6288891AE0 +:10B9100061810168098E618001680A6CC2600A6CED +:10B920004261886C6066204601F06DFC00280ED0F4 +:10B930007B487C49BD3808E0C1684161FFF7D4F914 +:10B94000002804D076487749B73809F042FBF5F76C +:10B9500038FD70BD72487349B038F6E710B56E4ACD +:10B960000B00526809F026FC0906090F1E0C2D2D4C +:10B97000082A2D00FFF78FFF10BD00F059FC10BD05 +:10B98000FDF7A9FE10BDD07E022805D0D07E032889 +:10B9900005D0644966480EE0FFF70AFF10BDFFF7C7 +:10B9A0000EFD10BDD07E0228F6D0D07E0328F6D042 +:10B9B0005F485C490B3009F00CFBF0E706F01BFC1C +:10B9C00010BD23205749000109F003FB10BDF3B55A +:10B9D00081B0514C029825460026012710350300FE +:10B9E00009F0E8FB0906313C3C3143433C3C430051 +:10B9F000494801211030FFF78DFC02990198FFF7AB +:10BA0000ADFFE87E022828D1A0680468006A0668B5 +:10BA100006F0EAFBF18B424A5143E269891AD339B5 +:10BA2000FF223232E162904202D24248081802E01C +:10BA3000081A41494018E0624048E16A814200D852 +:10BA40000846E06206E001460198FFF787FFE87EBE +:10BA5000022802D1286820300775FEBD01466560C6 +:10BA60000198FFF77BFF6660FEBDFF202D49C130C6 +:10BA700009F0AFFAFEBDF8B5064627480D4600248A +:10BA80003430254F0B0009F095FB09060C10100C03 +:10BA9000161610101600204801213430FFF73AFC2A +:10BAA00029463046FFF75AFFF8BD78603046FFF769 +:10BAB00055FF7C60F8BDFF201A49F53009F089FA7E +:10BAC000F8BDF0B5144C0020616885B003268E7671 +:10BAD000CA7E0746032A03D0C97E00293FD03FE033 +:10BAE000087F002804D112480E49D93009F071FAB4 +:10BAF0006068057F684606710221417106F095FB7A +:10BB00000290FF20F53003900121684601706946DC +:10BB1000284607F004F814E0D0180020EF160000C3 +:10BB2000E2040000F4B6000074060000FC510100BD +:10BB30001602000084F8FFFFB5F9FFFF161200009F +:10BB400020BF6068007F07F025FE0028F8D06068FD +:10BB5000007F06F050FB60680777FFF70FFC0120BD +:10BB600061688F7605B0BEE5FD494A68907600E0D1 +:10BB700020BF4A68D07E002803D0D07E937E9842B2 +:10BB8000F6D0D07E002803D00020002191767047A7 +:10BB90000120FAE770B5F24900241031CA7EF04D59 +:10BBA000032A03D02431CA7E032A17D169600028F2 +:10BBB00010D001280AD0EB49EB4809F00AFA00201E +:10BBC0006968002C0860686008D070BD0320FFF72A +:10BBD000CBFF01E0FFF775FF0446F0E70C2070BDD6 +:10BBE000F8B5DF4F04461F25E67E330009F0E2FA80 +:10BBF000042A20031B20DA481030844203D0D9499C +:10BC0000DA4809F0E6F902207C60FFF7ADFF002872 +:10BC100005D07968002008600862786012E00C2581 +:10BC2000002078600BE00120FFF7B4FF054604E038 +:10BC3000CE48CC490C3009F0CCF9002D02D0E07E82 +:10BC4000B042D1D1E07E002804D0C848C5491230A6 +:10BC500009F0BFF9F8BDC24810B51030FFF7C0FFBA +:10BC6000BF483430FFF7BCFFBD490020583108758C +:10BC7000BF494870BA49103148610A4624325061C0 +:10BC800088769076012210390A708860486010BD6D +:10BC900070B504460120FFF723FBC5B20B20FFF768 +:10BCA0001FFBC0B2854204D0B048AE49343809F019 +:10BCB00090F90120FFF714FBC5B21820FFF710FB25 +:10BCC000C0B2854204D0A948A649333809F081F9A9 +:10BCD0000420C043FFF704FBC5B21920FFF700FBA7 +:10BCE000C0B2854204D0A1489E49323809F071F9AA +:10BCF0009F489B490C38047000201031C876887624 +:10BD00000A462432D0769076994B0124083B1C7168 +:10BD100018600862106208601060FFF79CFF70BD39 +:10BD20008F48007870479249083908717047F3B519 +:10BD30000D468B4983B01031CA7E08462430884CAA +:10BD4000002A02D1C27E002A03D0C97E022903D074 +:10BD500005E08848616006E0C17E002901D00C2022 +:10BD600000E76060844806F0F2F96168087760686F +:10BD70007F490160007F002804D17B4879496238FF +:10BD800009F027F906F030FA7C49884200D20846CB +:10BD9000FF30C83086B260680321C1760027012DCC +:10BDA0002FD0724A0399121D5143026851600068F6 +:10BDB00001210170684605F06BFC68460078704907 +:10BDC000000208F0E3FF019106F02FFA01997118C3 +:10BDD00006F0C2FC6168032DC86021D06948086183 +:10BDE000606803210172022141720771021D017F07 +:10BDF000FFF7D7FA6068078307202070002067608C +:10BE0000B0E606F012FA314606F0A6FC6168C8609A +:10BE10005D48086108680770096801204870DFE71D +:10BE20005A48DCE77047F8B54D4E1036F17E0029D0 +:10BE300004D131462431C97E002901D00C20F8BD3F +:10BE40000221F176464C4A4F5834083F376234603D +:10BE5000002538602575397920304A004C49C07F6B +:10BE60008A5A4000085A2B46101881B22A462846A2 +:10BE7000FFF7E1FA002804D03B483A49323009F094 +:10BE8000A8F825610120A5602075658625863448BF +:10BE90007830857539684888401E48803583002091 +:10BEA000F8BD10B52E4901248868827E032A0CD083 +:10BEB00000684078002806D0C8683649884202D910 +:10BEC0000024FFF70DF8204610BD0024FBE72448AE +:10BED000826813681978491C1970C1681068C26AB1 +:10BEE000914204D8007D012801D001207047002034 +:10BEF000704700207047F8B51948194C1030606041 +:10BF0000016A00260D68006834212F460E54403720 +:10BF1000B97C002963D1007D032860D106F085F942 +:10BF200001466068406907F0A9FB002857DDFFF76C +:10BF30002FFC6988401C41186068026811860068FF +:10BF40002989028E91424AD9012120308175F88ACF +:10BF5000B98A401A6988401E401887B238E000004C +:10BF6000D0180020F4B600008D0300006D02000020 +:10BF700088000020CFB9000077BA0000F605000065 +:10BF800010270000CB120000B7891300B70800008B +:10BF9000FC5101002E841300096A09794A00CD4939 +:10BFA0008B5A028E007D94463F22525D5200895A80 +:10BFB000C91889B201236246FFF73DFA00280ED066 +:10BFC00001280ED002280AD0C349C44809F001F85C +:10BFD00061680868028EBA1A12B2002ADCDA66605A +:10BFE000F8BD60680068018E491C0186F0E7F8B56D +:10BFF000BB4D0026AA680128116A0C6810D00720E2 +:10C00000287006F05DF8B7480078F6F7AFFDA8682D +:10C010000683026861885186006820308675F8BD05 +:10C02000087913684100AB481F7D415A032F18D08F +:10C030001A7D022A22D01A7D012AE2D13F231B5DFC +:10C0400022895B00C05A0023401881B20120FFF70B +:10C05000F2F90028D5D0A1489F49B53008F0B9FFC2 +:10C06000CFE71E6112683F2396601B5D22895B004B +:10C07000C05A0023401881B20320E8E75822125B1F +:10C080001A613F231B5D22895B00C05A00234018C0 +:10C0900081B20220FFF7CFF9AA6801211268117559 +:10C0A000D7E738B58E4C0021A0680D46006842786D +:10C0B000002A01D045701FE00078002809D0012136 +:10C0C000684605F0E5FA684600788749000208F0FE +:10C0D0005DFEA0680268C0685268511806F03CFB1B +:10C0E0000146A068C160057102214172021D017FF5 +:10C0F000FFF757F9A068058305F0E2FF794800785B +:10C10000F6F734FD38BD10B50146754A0B0090684E +:10C1100009F050F8060D150408190C1C012100F057 +:10C12000A6F807E00021506800F0A1F810BD01203A +:10C13000FFF75DFF00210846FFF7ECF810BD00682F +:10C140000321017510BD00F0A5F810BD62496748D4 +:10C1500008F03FFF10BD70B5614C002809D00128E0 +:10C1600016D0022821D061485B49243008F031FF05 +:10C1700070BDFFF796FF00210846FFF7CBF8A068D7 +:10C18000807E002801D01F2000E00720207070BDB5 +:10C19000A068002501684D70FFF7F0F80320F6F75E +:10C1A00023FC05F08DFFA56070BDFFF77AFFA06846 +:10C1B000FFF7E4F800210846FFF7ACF80420F6F793 +:10C1C00013FC70BD46498968CA7E022A08D10A68F4 +:10C1D0001378002B04D150600968CA6A1018C8622D +:10C1E000704710B53E4A00290CD0012907D002291A +:10C1F00007D03E483849443008F0EBFE10BD401EE1 +:10C2000000E0401FD06010BD35488068002800D095 +:10C210000120704710B504460020002907D034489B +:10C2200008F0B4FD0146204608F0B0FD401C10BDEA +:10C2300010B52B488068C07E030008F0BBFF0414D3 +:10C2400014030A1401F0F2F800280BD022492948FF +:10C2500006E0FEF725FE002804D026481E49001DF2 +:10C2600008F0B7FE10BD23481B490B30F8E710B5A6 +:10C270000446002903D00020FFF7B9FE03E0194867 +:10C280000078F6F773FC2046FFF778F80020F6F701 +:10C29000ABFB10BD10B512488268106A11680068C7 +:10C2A000CB698B60134BC18B9B3359431368D960A7 +:10C2B0000146E0314B8883870C783B231C548B88E4 +:10C2C000C383CB88038409894184116802200875DF +:10C2D00010BD0000FC510100F4B600005A06000039 +:10C2E000D01800207C00002010270000B2070000BA +:10C2F00040420F0047040000F8B5FEF702FA064678 +:10C30000FEF770FAF94D07466879F94C002809D014 +:10C31000012823D0022826D003282ED0FF20F5A103 +:10C32000C63033E0F2481830FEF748FA002801D052 +:10C3300003200FE0EE481830FEF7ACF9002804D0D7 +:10C3400060696030007A002806D0E9481830FEF7AE +:10C3500008FA012068711BE00220FBE7E44818306E +:10C36000FEF7FFF914E0E2481830FEF793F90028D1 +:10C370000ED1FF20DFA1B83008E0DD481830FEF70D +:10C380001DFA002804D1FF20DAA1C03008F021FEF8 +:10C39000A169F722087810400870AA79D207120F15 +:10C3A0001043FB2210400870EA79D207520F104365 +:10C3B00008706B79EF22022B04D0012B07D0032BDE +:10C3C00007D00CE0012E06D8002F04D007E07F1E16 +:10C3D0003E43002E03D010401022104300E01040D6 +:10C3E0000870287C002811D0687901280ED0BF4839 +:10C3F0005438FDF786F8BD49606954397830A26930 +:10C40000FDF7E3FA0020FDF7EFFA04E00846FDF738 +:10C4100078F8FDF70CFBA0690078C00606D4E06947 +:10C420000078C00602D4E079002802D0A079002864 +:10C4300001D0012000E00320FCF747FF032020701B +:10C4400001202071F8BDAA4810B51C30FEF7DDF9B7 +:10C45000A74C002802D00020607004E0012060702A +:10C46000A2485438E061A148407C002802D060789E +:10C47000002805D0E069FDF744F8FDF7D8FA10BDB3 +:10C480009A485438FDF73DF8984A6069543AA0300C +:10C49000E169FDF79AFA0120FDF7A6FA10BD10B583 +:10C4A00093490022486932238276C27601221A54C7 +:10C4B0004030807C002803D00A700021022001E077 +:10C4C00000210320FFF71FFE10BD70B5884C607976 +:10C4D000C2062046416908464030002A01DA00229F +:10C4E00002E0028B4B89D2180B460283C0331A7EBE +:10C4F000002A03D0828B4D8952198283627A002AE6 +:10C5000003D03D2001F0C9F852E08A7E032A4FD0C3 +:10C51000227A002A13D0500701D4D00601D51E205C +:10C5200036E0100701D53D2032E0D00705D1900755 +:10C5300003D470A1734808F04CFD2A2028E0603134 +:10C540008A78002A05D0C28B551CC5830D88AA4263 +:10C550000FD25A7F062A02D01A7F062A05D1428BB3 +:10C56000531C438309888A4203D2828BC18A8A4240 +:10C5700001D322200CE0027C808A002A0FD00628FA +:10C580000FD35A48C07B012801D03E2000E008208C +:10C5900001F083F86069807E032809D001E08842B9 +:10C5A000F5D20120207000210846FFF7ACFD70BDD8 +:10C5B000FFF775FF70BD10B54C494D48CA7B002A86 +:10C5C0002BD0012A29D0022A27D0032A04D049A13E +:10C5D0004D4808F0FEFC10BD897B02290FD00729C9 +:10C5E0001BD0406901464031CA8A898A511A891E86 +:10C5F00089B2032900D30321028951180BE0406955 +:10C60000014640318A8A032A01D2018903E0428827 +:10C61000C98A5118491C818010BD4069F5E700B5F1 +:10C62000030008F0C7FD0604070B0F1212170029BC +:10C630000ED00FE0491E02290AD90BE0491F01293B +:10C6400006D907E0072903D004E00A390C2901D8EC +:10C65000012000BD002000BDFEB50546244818306D +:10C66000FEF78DF8002804D1274822A1CF3808F022 +:10C67000B0FC1F4CA069FDF703FC0321A069FDF786 +:10C680002DFCA069EF220178114001702946FDF7C9 +:10C6900069FC002601272B0008F08CFD0E5D5D086B +:10C6A0005D1D6161155D4D5D613D385D60697121A4 +:10C6B000095C002901D0062101E0C030417EA0695B +:10C6C000FDF71BFD4BE0E069FDF776FC0146A06934 +:10C6D000FDF784FD43E06169A069D031FDF747FDB6 +:10C6E0006169A0699531FDF750FD38E0C819002057 +:10C6F000900000207372635C6C6C5F736C61766594 +:10C700002E6300006B020000780800000621A0697B +:10C71000FDF760FD23E020690178A069FDF744FD85 +:10C7200020698188A069FDF741FD20694188A069E1 +:10C73000FDF740FD13E00096019660696030007CD3 +:10C74000002803D069460878384308706946A06914 +:10C75000FDF756FD03E0FE49FE4808F03AFCFEF7FF +:10C7600018F8002804D1FB48F949801D08F031FC75 +:10C770000C2D07D0072D04D060695E210E52603069 +:10C780008770FEBD606940304683FEBDF0B5F24C57 +:10C79000DC2061698DB0405C042809D0052834D1C3 +:10C7A0006031487A002829D001204874022026E010 +:10C7B0001022EA31684600F0A8FF61691022C831F2 +:10C7C00004A800F0A2FF684605F0BBF8616908AA5A +:10C7D0006CCA0F46CB6778378A670846FE608030A0 +:10C7E000BD60074620376CC7002303634363012005 +:10C7F000A0310876D9494874052000E00D20FFF7E4 +:10C800002BFF61690020C03108770DB0F0BDF8B58D +:10C81000D1481830FDF7B3FF002842D0CE4C207A23 +:10C8200000283ED160690025C030007ECB4E002834 +:10C830000BD0B17B0120FFF7F2FE002805D1B17BC0 +:10C840000420FFF7ECFE002806D060690127C03005 +:10C85000407F062807D00CE060695C210D526030F3 +:10C86000457402202FE0B17B0420FFF7D8FE00289A +:10C8700010D0B07B030008F09DFC173F3F3F3F1EE8 +:10C880003F3F3F3D3F203F3F3F292C3F3F3F3F3F02 +:10C890003F2F3F0060696A21095CC90702D0C030A0 +:10C8A0004577F8BD0C20FFF7D7FE60696030817ACC +:10C8B00039438172F8BD072005E0FDF7D0FF00285D +:10C8C000F8D075740B20FFF7C7FEF8BD00F02CFF01 +:10C8D000F8BDFFF75BFFF8BD606900218030816023 +:10C8E000C160057437740620FFF7B6FE60696030DA +:10C8F0008570F8BD0920E6E700F0D8FEF8BD70B5F8 +:10C90000964DA87B072834D1934CDE22606941887C +:10C91000125A491C91422CD1217A002929D1014671 +:10C92000E0318B88C28B934207D1CA88068CB24211 +:10C9300003D10A89468CB2420DD0884A8689303AA2 +:10C9400056819381CB88D3810989118201462E318A +:10C9500051600121117001221146FDF79FFC002159 +:10C960000420FFF7D0FB61690020C0314877A8732D +:10C97000E87370BD70B5794CA07B162803D074495C +:10C98000774808F026FB74480021426973486032FA +:10C99000117291703038067E0B250123002E06D0CF +:10C9A000027D002A12D14575817503750EE0567A15 +:10C9B000002E06D051722288828381760C22027664 +:10C9C00004E022888283817683770576A17370BD27 +:10C9D000F8B5614DA879800723D5287A002820D1A1 +:10C9E0005E4C0120A17BFFF71AFE002819D1A8692F +:10C9F0000127C0780026030008F0DCFB0E62620805 +:10CA0000622E3B4F0A62146220524562022021E0EE +:10CA1000A07B042804D052484D49333808F0D9FA95 +:10CA2000A673F8BDA07B082804D04D4848492D388E +:10CA300008F0CFFA686960308670F1E7A07B0A28B9 +:10CA400004D047484249263808F0C3FA6869603084 +:10CA500007720B20A073F8BDA07B0E2804D0AB207A +:10CA60003B49C00008F0B5FA6869603007720F20D2 +:10CA7000F0E7A07B0F2804D039483549183808F072 +:10CA8000A8FA1120E6E7A07B0F2804D034483049EB +:10CA9000123808F09EFA1320DCE7FFF76BFFF8BDB1 +:10CAA00069690846C0310A7F062A04D16030807A5D +:10CAB000800700D50E77487F0628F0D14E77F8BD65 +:10CAC000274823496E3008F084FAF8BD10B5234C8E +:10CAD0000020A17BFFF7A3FD002804D11E480122FE +:10CAE000017A114301720420A07310BD10B51A4CD5 +:10CAF00060690146C0314A7F002A06D0097F0629B5 +:10CB000003D0217A0122114321726030807A80079C +:10CB100015D4E069FDF752FB61696031C872E069C4 +:10CB2000FDF74EFB616960318881E069FDF74DFBDF +:10CB3000616902226031C881887A10438872606915 +:10CB400000220146C0310B7F062B00D10A7709E095 +:10CB5000F4C60000ED07000090000020C819002076 +:10CB6000770500006A231B5CDB0703D106234B77A4 +:10CB70004030428310BDF8B5FE48817B0020FFF7AE +:10CB80004EFDFD4C0126002807D160696030407AD7 +:10CB9000002802D1207A30432072616900255E208E +:10CBA000455262204654C831E069FDF7C8FA616910 +:10CBB000E0699131FDF7D2FA6169042208469131AA +:10CBC000B93008F069F8EB483038017E08270029B1 +:10CBD00006D0017D002912D14775857506750EE0D6 +:10CBE0006169054689894183E249E0691439FDF7A5 +:10CBF0008EFAE049E0690C39FDF796FA2F76DD48A8 +:10CC00000E218173F8BD70B5DA4D0020A97BFFF7C6 +:10CC100006FDD94C002803D1207A01210843207257 +:10CC2000E069FDF730FA00280ED0E069FDF726FA3A +:10CC30006169DE225052498800F0C1FD002806D00B +:10CC4000282000F02AFD70BDFFF740FF70BDE069AD +:10CC5000FDF70EFA6169E0310870E069FDF701FA4D +:10CC60006169E0314880E069FDF7E0F96169E03130 +:10CC70008880E069FDF7E3F96169E031C880E06927 +:10CC8000FDF7E6F96169E03108810720A87370BDFE +:10CC9000F8B5B94CA079C0076FD0207A00286CD1C4 +:10CCA000B44D0120A97BFFF7BAFC002853D1E069FD +:10CCB0000027C178022201260B0008F07BFA0D162E +:10CCC0001308354A4A384C474A1929444A00FDF7A7 +:10CCD00016FA6169DA225054AE735E204752603111 +:10CCE0008E7038E000F076FD35E0FFF78CFF32E023 +:10CCF000A97B0020FFF793FC002802D1207A304363 +:10CD0000207260695E210F52603086700A2018E040 +:10CD1000A87B0B2802D0207A104320722F74606900 +:10CD2000603046720C200CE0FFF725FF13E0A87B73 +:10CD3000112802D0207A1043207260696030877019 +:10CD40001620A87307E0FFF7D1FE04E000F00FFD06 +:10CD500001E0FFF7BBFEFDF76EFD002804D14F2078 +:10CD60008649000108F035F9606900238030016BC5 +:10CD7000426B491C5A4142630163F8BDF8B57D4FCF +:10CD8000012814D1787C002802D1387C002801D0F9 +:10CD9000FCF74DFEFCF7E0FBFCF7D3FB0020FCF7B3 +:10CDA00094FAFCF71EFBFCF760FBFCF7A5FBF87B95 +:10CDB00001260025704C00280FD16079C10705D0ED +:10CDC0000220F87360694030057402E0800717D5CF +:10CDD000FE7300210120FFF796F9F87B012802D0AD +:10CDE000022808D00CE06079C00709D00220F8734F +:10CDF0006069403005746079000701D50320F8733D +:10CE000000F018FDFFF703FD2079002801D03D81D7 +:10CE100002E03889401C38816079C007606904D01D +:10CE200072210D544030858203E04030818A491CD4 +:10CE30008182E079002806D061696031887C02280F +:10CE400006D8401C887460696030807C022804D950 +:10CE50003D817D81606960308574B97B0020FFF77A +:10CE6000DEFB002802D1B87B06284BD16069014661 +:10CE7000C0310A7F062A45D0497F062942D03D4964 +:10CE8000C97B03293ED16030807C00283AD1FDF770 +:10CE90002FFC002836D0FDF7A5FC002832D06169B0 +:10CEA000C88801282ED90A4640325674D08A978AFB +:10CEB000831E9F4201DB012002E0C01B401E80B2A6 +:10CEC0002C4B1F89A3899F4201D3012302E0DB1B66 +:10CED0005B1C9BB2984200D91846012800D15574BA +:10CEE0002A22525C002A11D0224A898D52898A4214 +:10CEF00001D3012102E0891A491C89B2884205D96F +:10CF0000084603E06169012040314D7461694A8837 +:10CF100010180881FFF74FFB6069122215490C3089 +:10CF200007F0BAFEFFF7D1FAFEF7E3FF00280AD0B8 +:10CF3000104810388179002905D161690246898934 +:10CF4000203A118586710C481C30FDF7BCFC002886 +:10CF50000FD0E06900788007800F012809D00228EF +:10CF600007D0FDF7D0FC002803D10449044808F09D +:10CF700030F807E0C819002090000020F4C6000037 +:10CF80007F030000606940308574F8BD70B5FE4CC9 +:10CF9000607900283CD0FD4D022810D1FDF789FBB7 +:10CFA000002803D1FA49FB4808F013F86A69002306 +:10CFB00080329068D168401C5941D1609060002651 +:10CFC00066712079012804D12671A87910210843BF +:10CFD000A871E078012816D1E670A87908210843E5 +:10CFE000A871FDF7F5FB002804D1EA48E84918309C +:10CFF00007F0EFFF6969002380318A68C868521C16 +:10D0000058418A60C860A079012802D00120A0712F +:10D0100070BDA67170BDF8B5DC4CDB4DE269002730 +:10D020001078042183079B0FE8790126012B11D08A +:10D03000022B0FD0032B01D0207A30E06178002939 +:10D0400005D1AE70A1793143A17123E0EF71F8BD34 +:10D05000EE71F8BD5278D3061CD060780028F8D164 +:10D06000D006C00E1B2818D8607908436071FDF700 +:10D07000E2FB002804D1C748C5494B3007F0A9FF9F +:10D08000606900238030026B416B521C594102637E +:10D090004163E8790128DBD1D8E7207A10210843E1 +:10D0A0002072F8BDF8B5B84D0446303D287D002704 +:10D0B00000280AD0002978D1677010202070687D80 +:10D0C000A070A87DE0702F756FE02878002814D03C +:10D0D00000296AD1072067702E462070083607E0C5 +:10D0E000686807802F700A223146A01C07F0D4FD23 +:10D0F00028780028F4D1A77057E0287EA24E143E6D +:10D10000002837D0002950D1297EA0480B0008F014 +:10D1100051F80D2C2C2C2C2C2C2C2C112C2C2008C8 +:10D120002C0067700C212170A97EA1704069808954 +:10D13000A08018E008216770217040690A46808944 +:10D14000914960801439201D07F0A6FD3089A08127 +:10D1500009E067700B212170A97EA1704069808968 +:10D16000A080A87FA0712F761FE089498A4807F028 +:10D1700030FF1AE0844810388279002A08D000294C +:10D1800013D1677011212170B189618087710CE022 +:10D19000827A002A0BD0002907D1677012212170F2 +:10D1A000318A6180718AA18087720120F8BD0020D8 +:10D1B000F8BD76480078012801D00C2070477249EC +:10D1C0000020303908700875087620318871704762 +:10D1D00070B56E4C064620780D46002804D093208A +:10D1E0006B49000107F0F5FE01202661E07225621F +:10D1F0002070FFF7DEFF002804D0674864494930FB +:10D2000007F0E7FE70BDF8B5604C2178012902D126 +:10D210002178012901D00C20F8BD01460546606146 +:10D2200012220C31584807F037FD01274035AF7402 +:10D23000554D2888FDF723FA002827D02888FDF7C8 +:10D24000D9FA002822D02888FDF78EFA00281DD0B0 +:10D250002888FDF7A8FA002818D0FCF742F9606981 +:10D260000026C088002825D048481830FDF787FAE6 +:10D2700000281FD06069C030007E00281AD0A97B2A +:10D280000120FFF7CCF9002802D013E01220F8BDEE +:10D29000A97B0420FFF7C3F900280BD16069014680 +:10D2A0004030868360314E740220FFF7D5F9606903 +:10D2B00040304674344830380078002806D1606920 +:10D2C000C18D008C814201D9A18102E06069008C8E +:10D2D000A08160694189491E8AB2298989182981FA +:10D2E000297B002902D06E812E7302E0698989189A +:10D2F0006981014640318B8A9B188B82C388012B40 +:10D3000001D85B1CC380002A01D060308674A87BE2 +:10D31000032816D0487C002815D02889A189884286 +:10D3200011D2FDF7E5F900280DD060692A21095CCA +:10D3300000290BD06989808D814207D3A670E770E0 +:10D340000CE0A7700AE0A670E67007E0688900218B +:10D35000401C6881A7700520FEF7D5FE6069512149 +:10D360000E54A97B052901D0062920D1DE2142884F +:10D37000095A511A09B2002919DB01460522E03188 +:10D380002430F3F721FF09E0C819002090000020A5 +:10D39000F4C6000039070000F10800000122022154 +:10D3A0006069FCF77BFF6069C0304677AE736069E7 +:10D3B0004189FDF728F8A07800282AD1606920303B +:10D3C000807A002800D06E810120FBF788FE60691A +:10D3D0003830FCF73EF860693430FBF751FF216AC2 +:10D3E00000200856FBF718FF0120FCF777F8FBF741 +:10D3F000D1FEFCF76FF80120FBF7B1FF6069406ECA +:10D40000FCF782F8FFF71FF860694030C07BFBF73C +:10D4100040FF6671E671A6712672A6726672267169 +:10D4200002202070FCF768F80020F8BD10B5F74C1A +:10D430002078022801D00C2010BDA078002803D04D +:10D440000020FFF79BFC17E0FCF74BF800F01DF9FC +:10D4500060692030007C012809D0FCF79FF8FBF7B9 +:10D460009EFEF3F7AEFFE07A012803D004E0FCF75C +:10D470009DF8F4E7F5F7CCFD002010BDE349C87234 +:10D48000704710B5E14C2078032803D0E049E1480B +:10D4900007F09FFDE04801218278002A06D0002293 +:10D4A00082700171A27904231A43A271A2691378D0 +:10D4B000DB439B0707D1C378002B04D1C170A0794F +:10D4C00002210843A0711078C00606D4E0690078F4 +:10D4D000C00602D4E07900280CD06078002809D179 +:10D4E000A079002806D1FEF7F2FC002802D0207AAD +:10D4F000002803D00120FFF741FC03E0FEF7A3FF63 +:10D5000000F0C3F82078012806D0F3F75AFFE07A3C +:10D51000012801D1FCF7DAF810BD38B5BB4C6069C1 +:10D520002030007C012820D1A07A00281DD1684637 +:10D53000FCF744F8002818D061693120405C0128CC +:10D5400010D1B54A0D236D460020D356285683428C +:10D5500008D050738989303A9185114620318873FB +:10D5600001208872A07A401CA07238BD70B5A74C0B +:10D5700006462078042804D0A648A549553007F06F +:10D5800028FD607910210843A34D6071002E47D01B +:10D59000FCF765FA61780126084300280ED1687C03 +:10D5A00000280BD0E0694178C90607D00078E979F6 +:10D5B0000007C00F884201D1667247E0E07800287A +:10D5C00009D0E0694178C90605D10078C00602D4C7 +:10D5D000FFF7A3FF3AE0FFF7A0FFE069A979007821 +:10D5E0004007C00F884205D0FFF7D0FC60790821C2 +:10D5F00008436071E069E97900780007C00F88424C +:10D6000001D1FFF708FD6079304360710020E071BF +:10D61000A079000702D5A87B022817D0207A13E052 +:10D62000022108436071E079401CC0B2E07101281A +:10D630000CD8687C00280DD0774854384078C10653 +:10D64000C90E052906D2C006002803D00120FFF725 +:10D6500095FB01E0FEF750FE2078012806D0F3F795 +:10D66000B0FEE07A012801D1FCF730F870BD10B5AA +:10D6700066480078042804D066486549B73007F04A +:10D68000A8FC0120FFF77AFB10BD10B50720FBF7BF +:10D690001CFE5E490420087010BD5C4933224969B4 +:10D6A00050545D4A032090738876704710B5574CEC +:10D6B0006069C030007F00281CD0062806D056487C +:10D6C000817B0020FEF7ABFF002813D06069014684 +:10D6D000C0310A7F130007F06DFD070D0D0D0D0D14 +:10D6E0000D050D006030807AC20704D0C04380076A +:10D6F00000D1087710BD0C20FEF7AEFF6069012253 +:10D700006030817A1143817210BD10B5002A0AD0B1 +:10D71000002306E0D41A6418203CE47FC4545B1C48 +:10D72000DBB29342F6D310BD10B503F0B0FF0C2866 +:10D730001CD3364C08216069D03003F0A9FF0028C3 +:10D7400006D060690421953003F0A2FF002803D1C0 +:10D750002F49324807F03DFC6169042208469531A3 +:10D76000BD3007F099FA0420FEF776FF10BD7CB5B6 +:10D77000294E0020B17BFEF752FF0125234C0028E3 +:10D7800002D1207A284320726946E069FCF73EFD09 +:10D79000684600780021C207D20F684602706069AF +:10D7A000002A02D06030057401E0603001746069C5 +:10D7B0005E221152603085700820B0737CBD401A23 +:10D7C000174900B2884201DC002801DC01207047C3 +:10D7D0000020704770B5104D0020A97BFEF71FFF99 +:10D7E0000A4C002803D1207A012108432072E06905 +:10D7F000FCF77EFC6169DE2250524988FFF7DFFFAB +:10D8000000280FD02820FFF748FF70BD90000020AF +:10D81000F4C60000330A0000C819002062060000A8 +:10D82000FE7F00006169E069E031FCF755FC0520EE +:10D83000A873EAE770B500F047F8384C384D6079C6 +:10D84000400709D5A97B0520FEF7E9FE002803D093 +:10D85000207A082108432072FFF71AFA00F012F824 +:10D86000FFF7B6F8A079C00609D5A87B030007F03A +:10D87000A1FC06060606060604060620A873FFF7A6 +:10D880003EF8C2E710B525488179490714D5017AD9 +:10D89000002911D12249897B0B0007F08BFC080D70 +:10D8A000050D0D0D0E0D100D4069002262210A5468 +:10D8B000C030807EFFF7F1FE10BD012100E00221A3 +:10D8C0004069C030417710BD10B51448817909070F +:10D8D0001DD5017A00291AD1114A947B230007F043 +:10D8E00069FC1416160B16161616161616161616AC +:10D8F0001616161616161716406960308170407C91 +:10D90000002801D0062000E01620FFF7C6FE10BD5B +:10D910004069603001728170917310BD90000020E9 +:10D92000C819002010B5031D03600020521E04E03A +:10D930005C181C60401C2346C0B29042F8DB0020FB +:10D94000186010BD01460A680020002A02D0104667 +:10D9500012680A60704702680A6001607047000040 +:10D9600000B51A2822D00ADC030007F023FC0D11B1 +:10D970001F131F1F191915171F1F1F1B1F002A28F0 +:10D9800014DD3A38030007F015FC030F11091100EC +:10D99000002000BD1E4800BD042000BD0D2000BDBC +:10D9A0000F2000BD082000BD112000BD032000BDD8 +:10D9B00010B50C46F4F784FF00281AD02046F4F77F +:10D9C00084F9002812D020780E280BD00F2809D017 +:10D9D000022807D0032805D00EA1772007F0F9FA16 +:10D9E000002010BDA078FFF7BBFF10BD09A17D206E +:10D9F000F4E708A18320F1E710B5F4F7EDF810BDC6 +:10DA000010B5F4F762F910BD10B5F4F744F910BD84 +:10DA1000023000007372635C686F73745F686369DF +:10DA20002E630000F0B597B00021032004F082F9C6 +:10DA30000025FE4E022775807574347C12E0F06874 +:10DA4000E1004018818800290CD0858069460F705C +:10DA50004D7001680291808869468880002168467F +:10DA6000F8F702FD2046641EE4B20028E7D117B0A3 +:10DA7000F0BDEE4BD86019741A80D3E7EB49EC4B3C +:10DA80004A8800201A4200D00120497C002901D098 +:10DA9000082108437047F7B504460E460078012177 +:10DAA000E34A8140521C114098B0E04A00915188ED +:10DAB000E04B994205D0009B002B05D0DC4B19426E +:10DAC00002D001201BB0F0BD009BD84A1943518001 +:10DAD0001A9D002D11D00020287022781A98002756 +:10DAE000401C130007F066FB10EF0D152137555D44 +:10DAF0006A39AFAB85B3EEEDECEF0B28EDD0042027 +:10DB0000E0E702212970A1880170090A4170032011 +:10DB100093E004212970A1880170090A4170E1880D +:10DB20008170090AC170052087E006212970A1884B +:10DB30000170090A4170E1888170090AC170218968 +:10DB40000171090A4171A289E81D216907F0A4F851 +:10DB5000A089C01D71E0082129702178082901D110 +:10DB600010212970A1880170090A4170E188817033 +:10DB7000090AC1700520308020466A1D01A90830BD +:10DB800003F0CFFB00287DD1694630880979401821 +:10DB900053E00A212970A1880170090A417003200D +:10DBA0000AE00C212970A1880170090A4170E188FE +:10DBB0008170090AC170052030809DE0A0888446EC +:10DBC0004000401C81B2308888425BD3052959D37C +:10DBD0000E202870002008E0A36842009B5A5219CA +:10DBE00053701B0A401C937080B26045F4D331809F +:10DBF000B6E08E49487C002873D0401E4874C8683F +:10DC000021790822C9004518A988286840180838D1 +:10DC1000A16807F041F802216846017100214171B5 +:10DC200028680390A98868460181002101A8F8F7B7 +:10DC30001BFC0020A880002E00D0308090E02978C6 +:10DC400080221143297029784022114329702978B4 +:10DC50008909890112312970A1880170090A41706E +:10DC6000E288E81CA16807F017F8E088C01C308043 +:10DC70002878410640D5C00972D00121684601715B +:10DC8000002100E02BE041713188ED1C091D01816C +:10DC90001A980390E08840190490001D634D059088 +:10DCA000297C68460176002101A8F8F7DDFB0746CC +:10DCB00030880C303080022F06D0002F50D060E02A +:10DCC0003CE032E01CE059E06946097EE868CA00A1 +:10DCD00080182A7C914202D28188002902D0042730 +:10DCE0004FE02EE0697C491C69741A990160318803 +:10DCF00081800020308044E04C48A188C1802FE022 +:10DD000029788909890116312970A1880170090AC9 +:10DD10004170E1888170090AC1702289681DE1683B +:10DD200006F0BAFF2089401D46E728788009800167 +:10DD3000183028702079687002207EE73B480A047A +:10DD400001D405271DE00289A3889A4201D0062745 +:10DD500017E01E222A70012249043280490C4180BA +:10DD6000009800280DD0314D0022288811468300EC +:10DD7000032003F03AFF2078287107E0002030806C +:10DD800003272A48009942888A434280384699E608 +:10DD9000F7B59AB002000C4606D0172A04D82348DB +:10DDA000244B4088984202D107201DB0F0BD237853 +:10DDB0005D0601D4DB0901D00820F6E700236D469B +:10DDC0002B706B701D462378611C9F06931E189361 +:10DDD000531E19939BB2169302AB1793134BBF0EAE +:10DDE000DE883B0007F0E6F9208511F15EF16BF16A +:10DDF000A3F1C6F1F2F1FBF1EEF1EDF1ECF1F1F18D +:10DE0000EBF1EAF1E9F1E8F185F1052A71D104229B +:10DE100069460A7005490A7969460A71E178A3786A +:10DE20000A021A436946CA80227905E0DC190020FB +:10DE3000FE710000FFFF00004A7061788906890EBC +:10DE40000C2923D009DC891E0B0007F0B3F9091354 +:10DE500052155219521B521D520012291CD004DCBB +:10DE60000E2915D01029D1D114E0162916D0182961 +:10DE7000CCD115E0800700E04007002839DA2AE11C +:10DE80000007FAE7C006F8E78006F6E74006F4E781 +:10DE90000006F2E7C005F0E7C004EEE78004ECE717 +:10DEA0004004EAE7800724D5032AAFD105206A465B +:10DEB0001070487809780002084390800BE1400711 +:10DEC000F1D5062A15D31898617880B2012902D0BD +:10DED00002299BD101E0022700E0102706226946B3 +:10DEE0000A7000228A8001AEA11C0236BA1C179269 +:10DEF00018E0B6E04A780B7812021A433280801E8E +:10DF0000891C1890B21C1691384603F0E4F9169952 +:10DF100018986B469A88C919C01BB61D521C9A8066 +:10DF2000179A80B28242E5D900289CD1D3E000073D +:10DF3000B9D51998694682B20720087000208880F8 +:10DF4000601C891D11E0437806781B0233430B8067 +:10DF5000C37886781B0233434B806E46121FB3880A +:10DF6000001D091D5B1C92B2B380042AEBD2002A6B +:10DF700077D1B0E0C00674D5022A72D31898082170 +:10DF800082B2684601700021C18063780371A01CD1 +:10DF900017990EE04678077836023E430E80861CBD +:10DFA0004E606F46D21AFE88C0180831761C92B2B5 +:10DFB000FE809342EED9DAE76FE076E065E051E06B +:10DFC00046E01EE014E00AE000E0A0E0800648D54C +:10DFD00009206A46107096801698D0800FE040069F +:10DFE0003FD50A22684602708680169AC28006E0F3 +:10DFF000000636D50B206A46107016989080029164 +:10E0000069E0C0052DD5022A7FD318980C2182B271 +:10E01000684601700021C18063780371A01C1799C4 +:10E0200013E04678077836023E430E80C67887783C +:10E0300036023E434E80061D4E606F46D21AFE8861 +:10E04000C0180831761C92B2FE809342E9D98EE75F +:10E05000C0045AD5012A58D10D2168460170868026 +:10E0600039E052E0800450D5052A4ED30E2368468D +:10E0700003708680C8788B78010219436846C18096 +:10E08000521F0281601D039025E040043DD5012A06 +:10E090003BD10F20694608701DE0030435D44B784E +:10E0A0000E781B023343244E3381032A2DD31B2FBA +:10E0B00027D011236E46337001261F4BF6033043E1 +:10E0C000588048780B780102194368468180D21E37 +:10E0D000C280E01C029020788006800E1B280AD0A7 +:10E0E0001D2808D00021032003F024FE1248418897 +:10E0F000C90BC903418068461C99F8F7B5F9284651 +:10E1000053E610206B461870DBE70725F7E7082574 +:10E11000F5E700B50022D243074997B04A800328AB +:10E1200007D1032268460270097901710021F8F7CE +:10E130009BF917B000BD0000DC190020FFB589B0C5 +:10E140000020019009981027FE4C1E46154608280D +:10E1500006D0E06901F05EF8002809D03770BEE013 +:10E16000288809213843108013980227017016E08F +:10E17000E169012088710521E269C9029180E169A4 +:10E180008872E169F0480881E16900208873288875 +:10E190002021084328801121139804270170139827 +:10E1A0000225801C0290307806900A203070E548E5 +:10E1B0001830049001F022FA0020059020462C30FF +:10E1C00003906DE00998102808D1022D06D001991E +:10E1D0000298A28D401A8270110AC170E08D0A99CE +:10E1E000884202D901F0CDF806E0884204D10698B1 +:10E1F000002801D030701CE00298E18D0170090AFE +:10E20000417012980088401BC01B82B2FF20C01BC7 +:10E21000904200D2024607A8009002980021C3193C +:10E22000E08D01F056FA3070002805D0C0B2832886 +:10E2300058D0E08D20833EE00598002804D0206C63 +:10E2400000790A282CD336E06846808BC119C9B200 +:10E250000191022D0DD01399019A4978914202D172 +:10E26000228F824208D00191206C0178032908D0C6 +:10E2700023E0084613994870206C0178042906D0E1 +:10E2800007E000790A2818D20120059008E0E18D06 +:10E29000818002990198081802900198281885B287 +:10E2A0000399049801F0ADF9002804D11298008870 +:10E2B000401BB84286DA022D0DD00998102806D1ED +:10E2C00002990198A28D081A8270110AC1701298E1 +:10E2D000058000203070206C0078032802D00020D8 +:10E2E0000DB0F0BD0220FBE7F8B5964A0026126D8E +:10E2F000002A2ED0401F934D84B24035E88A234631 +:10E300000833AF8AC318BB4222D88B784F781B02E0 +:10E3100010183B4303701B0A43700B79CF781A0225 +:10E320003A438270120AC2700471220A4271224674 +:10E33000491D801D06F0B0FCE88AA41D001980B2BA +:10E340008049E882096D002208180270427000E0DE +:10E3500009263046F8BD30B57A4B028840339B8A97 +:10E36000934213D9774B1C6DA3185C781D78240257 +:10E370002C430BD05C791D7924022C436404640C7B +:10E38000A41D1219028000200B6030BD822030BD18 +:10E39000F0B585B0074600266846068155E001982D +:10E3A000417802780D021543417902790802104341 +:10E3B00000044AD43D8003A80023012200905202A9 +:10E3C0001946284601F085F9040044D168460189C0 +:10E3D0000182019841790279090211434378027858 +:10E3E0001C021443AC421CD10A041AD44A04012171 +:10E3F000520C89030A430096C178807809020143D0 +:10E400000023204600F0C1FF040010D10199487993 +:10E410000A79000210430122D20310430871000A56 +:10E42000487101A904A8FFF796FF0400D1D0019913 +:10E4300000964878097800020843694600238A89D3 +:10E44000194600F0A2FF822C05D101A902A8FFF70E +:10E4500082FF0400A3D06846068109E0019948794B +:10E460000A79000210434004400C0871000A487108 +:10E4700001A902A8FFF76FFF0028EFD0822C02D07D +:10E48000204605B0F0BD0020FBE7F7B584B0144688 +:10E490000646002700F071FF2A480025006D00287D +:10E4A0002FD0059801282CD12046FFF771FF0700D7 +:10E4B00027D1002E29D06846058118E001994878B7 +:10E4C0000978000208432080019B0095587919794A +:10E4D0000202D8780A4301029F78587839431F789E +:10E4E00000029B1D384300F050FF002805D101A910 +:10E4F00002A8FFF730FF0028E0D0822800D10020DA +:10E500000746002E01D00F48056500F03AFF384657 +:10E5100007B0F0BDF0B597B00021042003F00AFC6D +:10E52000084F00243D467C8040356C73AC73287BDB +:10E53000B96CC00008380E18B08800280DD0012032 +:10E54000694603E0F01900200128000008703068D7 +:10E55000019000216846F9F78EFAB4803C65AC82E0 +:10E56000EC8217B0F0BDFE4B986418464030017342 +:10E570001A803838D861CDE7F949002049880A0760 +:10E5800000D501200A06120F01D002221043CA054D +:10E5900001D5042210438A0501D5102210434905F4 +:10E5A00001D520210843EE494031497B002901D0A3 +:10E5B000082108437047FFB5A7B004002898164605 +:10E5C0001B9022D00178E6484D06428822920246EE +:10E5D00040320092002D14DB8A06920E1E2A0ED0C5 +:10E5E000229A5205520E10D13288172A0DD3009A62 +:10E5F000927B002A09D1DB4D229AAA4205D0CA0992 +:10E6000006D08A06920E122A02D003202BB0F0BD4B +:10E61000D348826C0098007B2590C0000838101801 +:10E620001F9048060CD40098407B002808D0009921 +:10E6300088731F99289808601F9884800220E5E756 +:10E64000002718A90F7069460F72C54902AA0A640B +:10E65000309A4A6410A90F850F861B981D460078D2 +:10E6600020908106BE4B601F24901A462C322192C6 +:10E670002898DA691833890E1E93401C0B0006F0A7 +:10E6800099FD1FFDFD11FD1AFD90FDFCFDFBFDFA3E +:10E69000FDF9FDFCFDF8FDFDFDF7FDF6FDFDFDFDC1 +:10E6A000FDF5FD00032C7BD10320287017226A7032 +:10E6B0000022AA70E0E2052CF5D141780278090227 +:10E6C0001143A74B10AA19831185C27880781202D2 +:10E6D00002435A8300297DD091427BD800211846FD +:10E6E00081720181491E01841E9800F087FF052078 +:10E6F0002870A81C1D900220009021991E9800F0FF +:10E7000080FF002803D047E018A90870F0E2944881 +:10E710002030807C012803D002206870102002E0A5 +:10E7200001206870022022908D4830302390002212 +:10E7300020A9239802F0F5FD00282AD120A800780E +:10E740002299814225D132880099801C511A814238 +:10E750001FDB83481D99C08D0870000A48701D9802 +:10E7600020A9801C1D9000981D9A801C0090239861 +:10E7700002F0D7FD20A909781D9840181D90009837 +:10E78000401880B2009021991E9800F03AFF0028AE +:10E79000CDD0009802288DD10A2018A908706CE20B +:10E7A0006DE0072C6BD341780378090219436C4B59 +:10E7B0008446198310AB1985C37880781B021843EF +:10E7C000674B0029588305D0814203D801211846A0 +:10E7D000817200E0A4E061464B7909791B020B438A +:10E7E000038100218173104600F014FD00280FD131 +:10E7F0005B480121C26991710522C369D2029A80E6 +:10E80000C2699172C26958491181C069002181733E +:10E810005349E01F08841B98C01D48621E9800F0F1 +:10E82000EDFE07202870681C009001201D904C48C8 +:10E830000021C18530E01D98012815D04848C169E4 +:10E84000897901292FD000981038C17B807B09027B +:10E85000014300980170090A41700098801C0090E3 +:10E860001D98801C80B21D903D4809E013E2BEE176 +:10E870007AE1D8E00DE2A0E080E03BE01EE2B6E005 +:10E88000C18D00980170090A41700098801C0090A9 +:10E890001D98801C80B21D9021991E9800F0B1FE39 +:10E8A000002802D006E0818DD3E731881D98081A30 +:10E8B0000428C0DA1D98012800D16DE72848C169F5 +:10E8C0008979012903D0828D26498A4205D1818D1B +:10E8D00000980170090A417009E000981038C17B66 +:10E8E000827B0802009910430870000A48701D9846 +:10E8F000801CC1E1072C01D0152C78D14178037818 +:10E9000009021943164B198310AB1985C378807817 +:10E910001B02034312480029438301D0994201D9C5 +:10E920000120F1E60E4801218172002101818173ED +:10E93000052C07D024981B99C0B2491D02F0CBFCCE +:10E940000028BAD100200649C04308841B980096CD +:10E950000195007818AB8006800E1CAA002105E006 +:10E96000F0190020FFFF000001280000FFF7E6FB80 +:10E970000746FE4810A9008B08857EE1032CBCD118 +:10E98000402210A90A86417802780802F74910430C +:10E99000088310A9088520A9009131886B1C491EA5 +:10E9A0008AB2002100F095FE18A90870002830D125 +:10E9B0000B20287020A8008833E0052C9DD18021F1 +:10E9C00010AB1986014640780B780202E7481A43DB +:10E9D0000283CB7889781B021943E44B10461984D3 +:10E9E00010AB1A85E24A914202D307208CE697E0E9 +:10E9F0003F23DE4A9B021943118421AA00923288E8 +:10EA00006B1C521E92B200F064FE18A90870002818 +:10EA100003D08328B1D102272FE10D20287020A830 +:10EA20008088401C28E120990C22C9095143C91C47 +:10EA30001E91A14204D92098400671D500201BE107 +:10EA4000417800780902014310A801851B980078DD +:10EA500042062898C01C1D90002A62DA05206A46EA +:10EA600010721B980078C00944D0082268460272D0 +:10EA70008181A01A87B268468782289806901E98DE +:10EA8000201A81B26846C1811D980490401806F092 +:10EA900064F9079006982599C0190890491E08A89E +:10EAA000017102A83099F8F7E6FF07460021684691 +:10EAB0000172002F1BD0022F18D1009808A9007BEB +:10EAC0000979401E884210DDA848289A836CC90045 +:10EAD0005A50816C08A80079C000001D0C520098A3 +:10EAE0000099407B401C4873C7E00527EAE00620F8 +:10EAF00069460872002000901E980021201A20907C +:10EB000082B21B9B10A8DB1C008D00F03EFC01466E +:10EB100018A80170002268460272832903D003E01E +:10EB200093E00720E4E702271B98007840060ED503 +:10EB30008E484188C90506D510AA018B128D9142D5 +:10EB400001D100214162002018A9087094E0FF2142 +:10EB5000013110A80186018D844801832099018428 +:10EB60001D994162132085E0052C6ED3417803780E +:10EB70000A021A4310A90A859446092269460A72B4 +:10EB80000021009101222499D20311438AB2C17855 +:10EB9000807809021B9B01435B1D604600F0F5FB7A +:10EBA00018A90870002269460A720122520210A9AF +:10EBB0000A86832802D0002805D099E06B48098D89 +:10EBC000018302277EE06948006D002807D02046B7 +:10EBD0001B99FFF789FB18A9087000284DD12B4617 +:10EBE000324620461B9900F024FB074645E01B985F +:10EBF000022C4078009064D1002801D0012860D117 +:10EC00000A2168460172009901731AAA002000992E +:10EC1000FFF73BFC0146684641730021817302A85F +:10EC20003099F8F728FF0746002168460172012154 +:10EC3000890210A80186022F08D04C48006C807908 +:10EC4000002807D018A9087020E04BE04749009839 +:10EC5000088337E0002F03D0812018A9087031E025 +:10EC60001AAA01200099FFF710FC18A908700028C3 +:10EC700003D119202870012030806846007A0028CE +:10EC800004D002A83099F8F7F6FE0746002F2BD0E3 +:10EC900018E0062038E522993448090711D5012CDF +:10ECA0000FD10B2269460A72C08888810021042096 +:10ECB00003F040F8082010A90886BFE62098400617 +:10ECC00010D50327294810AA4188128E114341808C +:10ECD0005005400E04D01F99289808601F98848022 +:10ECE000384693E404200FE518A8007800280ED0D9 +:10ECF000012028701B980078687010A8008DA870FB +:10ED0000000AE87018A8007828710520308017489C +:10ED100010AA4188128E91434180E1E7FFB5064673 +:10ED20009FB000201B903178012088401149124A81 +:10ED3000084010A908860D494988914203D000284F +:10ED400004D0080702D5012023B0F0BD219D002783 +:10ED50002F7020983C46018810A8018418A80771DC +:10ED600000F00BFB6846077202A907E0F0190020CB +:10ED70000102000009F80000FFFF0000FA480164EA +:10ED800001464031826C1A91097BC9000839571835 +:10ED900022994164307801282AD0022809D003281A +:10EDA00079D12878800980011D302870EE48B1881B +:10EDB000C1803078022804D12878800980011B3076 +:10EDC000287001A8009010A8008CEB1CC01E82B215 +:10EDD000B088002100F07DFC0028E1D1B188697085 +:10EDE000090AA9706946888810A9C01C08842DE109 +:10EDF000717918A801713079012802D00228CFD189 +:10EE0000E6E0D9487F2340881B010246184010AB3A +:10EE10001886802840D006DC102810D020280ED07C +:10EE200040280AD120E0FF38013859D0FF38013896 +:10EE30006AD0FF38FF3802387ED0052491E0D00632 +:10EE400001D5082000E010201B90042069460872BC +:10EE50000020888118A800900195318919AB1CAA5F +:10EE60001B98FFF76BF977E0BF4B3289188B824212 +:10EE70004FD10A221B92002973D101A9009110A938 +:10EE8000098C6B1C491E8AB2002100F022FC18A9D3 +:10EE900008710B2017E0F6E0B34B3289188B8242E1 +:10EEA00037D10C221B9200295BD101A9009110A936 +:10EEB000098C491E8AB21946098C6B1C00F009FCAA +:10EEC00018A908710D2028706946888810A9401C6F +:10EED0000884042069460872A348008B888140E0BA +:10EEE000A14A3389108B834213D112231B9300292B +:10EEF00037D1536A002B05D00091128C00F045FAEF +:10EF000018A9087113205EE097483289038B9A4252 +:10EF100001D00424E7E016221B92026D002A09D1D9 +:10EF2000F268002A06D002651A98328A82821A9AFA +:10EF30000020D082002900E02FE012D1B888396883 +:10EF4000FFF7D2F918A9087100280AD1B8882B4612 +:10EF500018AA396800F06DF90446022818D0042C6C +:10EF600016D0B88800280FD06846007A002804D050 +:10EF700002A82299F8F77FFD04460120694608722D +:10EF8000386803900020B880002C5FD0052C7BD01F +:10EF90006846007A032873D0A5E018201B9000294A +:10EFA00005D071483189018300210165D9E76E4898 +:10EFB0000246017E18320120FFF767FA18A908718E +:10EFC0000028CED119202870012010A90884C8E794 +:10EFD0001A98407B002856D0307AC0001358001D84 +:10EFE0000193105A1D9000291AD100F0CAF9062089 +:10EFF00069460872002000901D980F3882B201986F +:10F000008178437808021843019B0021DB1C00F043 +:10F01000BCF918A90871002269460A72832830D009 +:10F02000002118A8017110A801840121684601720D +:10F03000019803901A981A99407B401E48731A98B9 +:10F04000807B002802D01A99401E887310A8008E79 +:10F050007F21090102468A431DD0434800220088CF +:10F0600011468300042002F0C0FD3F483178017151 +:10F0700010A94088098E08433B4948800FE003E00F +:10F080002BE002242FE00524374810AA4188128E75 +:10F090009143418027E034494A8882434A80684648 +:10F0A000007A002805D03048416C02A8F8F7E3FC4C +:10F0B000044618A80079002815D01B986870012014 +:10F0C00028702948008BA870000AE87018A80079F9 +:10F0D0002871052110A8018405E02348416C02A88D +:10F0E000F8F7C9FC044600F04CF91F484088400579 +:10F0F000400E20D11A98807B00281CD1B8880028A7 +:10F1000019D0209910AA0988118422990091396890 +:10F1100018AA219BFFF74FFA044602280BD00120C2 +:10F12000694608723868039002A82299F8F7A3FC90 +:10F1300004460020B88010A8018C20980180204649 +:10F1400002E600B50022D243074997B04A8004285E +:10F1500007D1022268460270097901710021F8F78F +:10F160008AFC17B000BD0000F019002010B5394C22 +:10F1700003780022216C012B02D0022B44D126E01F +:10F180000B78002B01D0042B03D10A71226C0321D0 +:10F190001170216C83880A79D200921D8B52216CE8 +:10F1A0000A79D20008328918C2880A80216C038942 +:10F1B0000A79D2000A328B524289206C0179C90047 +:10F1C0000C314252216C0879401C087120E00A740D +:10F1D000226C81889180216CC288CA80226C01894E +:10F1E0001181226C41895181216CC068C860616CB9 +:10F1F000206CF8F740FC0146022807D0206C007C08 +:10F20000002802D1002903D0812010BD832010BD29 +:10F21000002010BD8178012909D100880521C9028B +:10F22000884202D0491C884201D100207047052045 +:10F23000704710B51488844201D2052010BD1724F0 +:10F240001C701080421E491C581C05F025FD002032 +:10F2500010BD0000F019002010B58B78002B11D0E4 +:10F2600082789A4207D10B88002B0BD003E0091D4E +:10F270008B78002B08D08B789A42F8D103880C88C1 +:10F28000A342F4D1002010BD812010BD10B500298B +:10F2900002D001290DD102E00088000501E00088BC +:10F2A0008004800F07D001281CD0022809D0032831 +:10F2B00010D0812010BD002901D0032010BD0220F4 +:10F2C00010BDF5F7EEFD03280CD004280AD0002865 +:10F2D00006D009E0F5F7E5FD042803D0022803D0A5 +:10F2E000052010BD002010BD0F2010BDF3B5C81CB7 +:10F2F00080080E46800081B0B04201D08620FEBD5D +:10F30000FE4C354626600198A08000202081E080D8 +:10F3100014E0B807A978800D0843F94905F036FDD7 +:10F32000E088401CE080B80607D42089401880B2ED +:10F3300020810199081A8019A8600C352F88780758 +:10F34000E7D40020A072FEBDEC480C22C1880089E1 +:10F350005143081880B2704770B51346E74A451804 +:10F360009488AC4201D2842070BD126810180A46FD +:10F37000194605F091FC002070BDE049012088721B +:10F380007047DE49002088727047FFB589B0970446 +:10F390000E460546BF0C029200F034FA040021D05C +:10F3A000002069460873D548807A012812D00121CF +:10F3B0002046FFF76BFF002815D12078400609D5BD +:10F3C0000221684601730582218841828682C782B4 +:10F3D0000C9806900298000407D500273E460125A8 +:10F3E00001970CE001200DB0F0BD2078A1788007D6 +:10F3F000800D0843C249019005F0C8FC0D460298F3 +:10F4000040040AD50198A84207D12088E1788005F8 +:10F41000800F00020843B04201D3AE4201D9072059 +:10F42000E1E7B81980B20290A84201D90D20DAE7CD +:10F430006846007B002804D003A8F8F718FB0028D2 +:10F44000D1D10198A8420BD1208803210902884319 +:10F4500002998905890F0902084320800298E0700B +:10F460001298002800D007800C9800280CD0207833 +:10F47000000609D4A0683A4680190C9905F00CFCE6 +:10F4800020881021884320800020ACE7FFB59B4DE9 +:10F4900081B00E46E8882F680C21009048433C1844 +:10F4A0009749039805F072FC0A462889E11B8446B7 +:10F4B0000C314018318880B28B0601D5002300E062 +:10F4C00013461818AB8880B2834202D8842005B056 +:10F4D000F0BD0098894D401C80B2E88021800D99D4 +:10F4E000002900D00C600399A170E2702188039D6F +:10F4F0008908AD058900AD0F294303252D02A943D5 +:10F500009505AD0F2D0229430425294321800C992F +:10F51000002900D0088001998978A1710199098892 +:10F52000A1803178890601D50B9905E073496244C1 +:10F5300092B20A81991AC919A16000212173327807 +:10F54000920601D50020C2E700910B9B0A9A04990C +:10F55000FFF71BFFBBE7FEB5044600F053F90700B9 +:10F5600008D0664D641EE8880190A6B2286834462B +:10F57000009015E00120FEBD0C2000996043095A5F +:10F580008A060BD489078A0D0099801C085C5C49A7 +:10F59000104305F0FBFB2889401A2881641CA4B2A3 +:10F5A0000198A042E8D8EE8000203870FEBD002807 +:10F5B00003D0401E0880002070470120704710B51E +:10F5C0004E490288CB889A4201D3822010BD0B6835 +:10F5D0000C21514359180B88CC789B059B0F1B02BB +:10F5E000234341608C7904738C884481C38189688A +:10F5F000521C016102800281002010BD01210182A4 +:10F600007047FEB505460020C043088068680F4675 +:10F6100081786846817068680188684601800021A9 +:10F620008171288A2C88A04200D304462C8234E0C1 +:10F63000288A401C2882301D6968FFF70DFE0028CB +:10F6400029D139882F48814201D1601E38806888CD +:10F65000A04227D33088F1788005800F000208434C +:10F6600002906946301DFFF7F7FD002813D1298964 +:10F67000244881421AD000213046FFF707FE0028B7 +:10F6800009D12A890298824205D1E968B06805F05B +:10F69000D6FA00280AD0641CA4B2204600F0B2F8C2 +:10F6A0000600C5D1641E2C828220FEBD7C80B0790C +:10F6B000B871B088B8803088388130788007810D83 +:10F6C000B078014379810298B881B0683861002030 +:10F6D000FEBDFFB585B014460F46059800F092F8C0 +:10F6E000050037D00548BE05807AB60D01281CD02C +:10F6F00000212846FFF7CAFD002805E0481A00202F +:10F7000001020000FFFF000022D1287840060CD53E +:10F71000012168460170059981802988C180068190 +:10F720004481F8F7A4F9002812D12888AA78810723 +:10F73000890D11438005800FEA7800021043BE4214 +:10F740000AD0374A914207D3611E814204DD0B2063 +:10F7500009B0F0BD0120FBE7864201D90720F7E799 +:10F76000801B82B2A24200D922460E98002800D007 +:10F7700002800898002804D0A8688119089805F02C +:10F780008BFA0020E4E770B514460D4600F03AF815 +:10F7900000280DD001882980002C0DD001788078B8 +:10F7A0008907890D01431E48814203D2012002E0EE +:10F7B000012070BD00202070002070BD70B516467D +:10F7C0000D4600F01FF804000DD02D882580FF2E77 +:10F7D00016D0A807A178800D0843114905F0D6FA84 +:10F7E000002E06D101E0012070BDFF31FF31033151 +:10F7F00089B2A170A80880008905890F084320807C +:10F80000002070BD0749CA88824207D3002805D06E +:10F810000C22096850430C380818704700207047C4 +:10F8200001020000481A0020F0B585B00E460546DA +:10F830000020694608707078FE49C00003900C589B +:10F84000FD4F002D0ED0022D73D0002C72D02078E9 +:10F85000801E030005F0AEFC09837F7F7F83797FE4 +:10F8600077727F00002C03D1F4A16B2005F0B1FB6F +:10F870002078801E030005F09DFC09065E5E5E197F +:10F88000365E50545E003078062803D0EBA1762017 +:10F8900005F09FFBB8687168806C032205F0FCF9E5 +:10F8A000012069460870002835D1CEE730780C2851 +:10F8B00003D0E2A1812005F08CFBE06800780028ED +:10F8C00006D0B8687168806B102205F0E5F928E071 +:10F8D000B8681021006B05F03CFAB868816A006BCB +:10F8E0000A787168F1E730780D2803D0D3A194200D +:10F8F00005F06FFB04206946087071684878097844 +:10F9000000020843B9684A6A517812780902114323 +:10F91000484069468880084608E0C8A1AF2005F045 +:10F9200058FB6846007800288FD06846F5F7BEFA85 +:10F930008BE727E01CE0C1A1B420F0E7B86861695B +:10F94000006CFEF708F8A16900E0E168B868006C97 +:10F95000FEF701F803E0B9A1E32005F03AFBB8682F +:10F960002146006CFDF7F7FFB24A03990020505082 +:10F97000022D07D0002D05D0012D03D0AFA1EF201F +:10F9800005F027FB05B0F0BD10B501780124012971 +:10F9900002D0022910D112E04268A74800218260FB +:10F9A0000170A4486C38C166016741678167D289DC +:10F9B00002214C3001F0E1F90024204610BDFF2067 +:10F9C0009EA1163005F005FBF7E7F0B505469EA1B0 +:10F9D00003C997B014911390002008A908759549A0 +:10F9E0002A781031944C0491217805910126914F89 +:10F9F000A168130005F0DEFB0CEF07309AF0EDEC88 +:10FA0000EBEAE9E9E8EF20700124FF264F360546CE +:10FA100010A80570457001F0C1F90746012803D010 +:10FA200086A1304605F0D5FA10A93846FFF7FCFE4E +:10FA30002046641EE4B20028EAD10A206946087014 +:10FA40006846029501F088FA002803D0FF207BA1C8 +:10FA5000583068E0002646E3C86A0078C0072FD017 +:10FA6000012069460870684601F076FA002804D043 +:10FA7000FF2072A16B3005F0ACFAA068006CFDF7B6 +:10FA800061FF050004D1FF206CA16E3005F0A1FAE2 +:10FA900008984078C0003D5006202870A068016892 +:10FAA00069600069A8606448C01CE860284601F0ED +:10FAB00053FA022804D0FF2060A1783005F089FABB +:10FAC000A068C06A00784007C4D501206946087064 +:10FAD000684601F041FA002804D0FF2057A1803089 +:10FAE00005F077FAA068006CFDF72CFF050004D143 +:10FAF000FF2052A1833005F06CFA08984078C000CE +:10FB00003D5006202870A068016869600069A860FF +:10FB10004948401DE860284601F01EFA022899D0A5 +:10FB2000FF2046A18D3005F054FA93E7A96800291B +:10FB300033D0694608712979012932D0022904D0CD +:10FB4000FF203EA1A73005F044FA3A4810221030B9 +:10FB5000A96805F0A1F837481030364920314860CF +:10FB60002078C1062CD5EF2108402070032069467B +:10FB70000870304810300290684601F00FF90446D2 +:10FB8000022808D0002C06D0012C04D0FF202BA185 +:10FB9000B83005F01EFA69466FE101216A4611711D +:10FBA000DBE7244A04996C3AD06748608860C860F3 +:10FBB0000621A86803F0FCFE1E4910310860CAE760 +:10FBC00020210843207045E7A1E15AE119E1E6E070 +:10FBD00086E056E000E081E2886C407980090128E7 +:10FBE00004D0FF2015A1CC3005F0F3F9A068017A0C +:10FBF000002906D1416B406801F01FFAA16801207D +:10FC00000872012069460870684601F0A5F90028CD +:10FC100004D0FF2009A1D73005F0DBF9A068006C03 +:10FC2000FDF790FE050004D1FF2004A1DA3005F0B5 +:10FC3000D0F90DE0C01A0020B40000207372635C9C +:10FC4000736D2E630000000004411A8800A4800038 +:10FC500008984078C0003D5002202870A068416B91 +:10FC60006960806CC01CA860284601F075F904002A +:10FC700004D0FF20FD49E23005F0ABF929462831D8 +:10FC8000FBE0172268460272012202708078820827 +:10FC9000287992008007800F024368468270FB201B +:10FCA000024028794007C00F8000024368468270F6 +:10FCB000EA8882804A6C02A901F090F9002804D0F9 +:10FCC000FF20EA49F73005F084F9052108A80175FD +:10FCD0006846017A0187A0680026406C0F9006E212 +:10FCE000012069460870684601F036F9002803D003 +:10FCF000DE49DF4805F06DF9A068006CFDF722FED3 +:10FD0000060004D18320D949800005F062F9A0687B +:10FD1000006CFDF717FE1290002804D1D448D34997 +:10FD2000801D05F056F9D3488068006CFDF70AFE87 +:10FD3000040004D1CE48CD49093005F04AF90898AD +:10FD40004078C0003E500A203070287A30716868D0 +:10FD5000C84DB060A868406C3061172030731298AD +:10FD6000B4617061304601F0F7F80446022808D00B +:10FD7000002C06D0012C04D01120BC49400105F014 +:10FD800028F92046316AFFF74FFD28780521014008 +:10FD9000042900D05EE6FB21084028702AE005987F +:10FDA00040084000207082071CD5FD2210402070C2 +:10FDB0000F206A46107017201071486C0290684638 +:10FDC00000F0ECFF0546022808D0002D06D0012DDA +:10FDD00004D0A748A5493A3005F0FBF86946284603 +:10FDE000FFF722FD2078052101400429D2D1FB2113 +:10FDF00008402070072008A908759E48807808767A +:10FE000028E6012069460870684601F0A5F8002838 +:10FE100004D097489549543005F0DBF8A068006C91 +:10FE2000FDF790FD060004D113209049400105F034 +:10FE3000D0F890488068006CFDF784FD040004D180 +:10FE40008B488A495A3005F0C4F808984078C000B9 +:10FE50003E5007203070874880684068706068684E +:10FE6000F460B060304601F077F8040004D08048B8 +:10FE70007E49653005F0ADF8316A2046FFF7D4FCC5 +:10FE8000E8E5012069460870684601F065F8002839 +:10FE900004D0774875497A3005F09BF80898407887 +:10FEA0001190A068006CFDF74DFD060004D15120B3 +:10FEB0006E49C00005F08DF8A068006CFDF742FDAA +:10FEC000040004D16A486949823005F082F811982B +:10FED000C0003E50C019296941600920307068682F +:10FEE0007060A868B060A889B08163483061103044 +:10FEF000B4617061304601F02FF8022804D05C48EC +:10FF00005A49903005F065F811982875A2E55A4ACB +:10FF100000208C32107002206B46187001922879F4 +:10FF2000002801D0107098E0524803230C3040683C +:10FF3000FB2703708378504A9B089B003B408370EB +:10FF40004B7A00271B07DB0F43708C3257600B7B0B +:10FF5000C370CB7A1372537A0C7D5B08E4075B00A5 +:10FF6000E40F23430C461534D460FD242340CC7E9B +:10FF7000E407A40F234353720B461C3313614771EC +:10FF800007718B7A3B4A9C070C32A40F1268012C34 +:10FF900004D19478A407A40F012C1DD09B089B00CA +:10FFA0008B7293785B0702D48B7A5B0728D54B7AE8 +:10FFB00013AF5B075B0FDC005B00E3181478640091 +:10FFC0001B19DBB2DC083C5D5F077F0F0623DB1BE0 +:10FFD000DC40A3079B0F14E04C7A53796406640F4E +:10FFE00023404371147906273C400471E4001C430C +:10FFF000204B5C7083789B089B005B1C8370D0E770 +:020000040001F9 +:1000000000238478FB273C408F7A7F07FF0FBF00D7 +:100010003C4384704C7A6407640F04705078012864 +:1000200007D1487A000704D5032008A908750220E3 +:100030002DE0022B27D0012B2BD00F4B0020049A50 +:10004000D86750609060D06018467C30024610320D +:100050005060887AFB2210408872684600F09EFE4D +:10006000040035D0012C34D0004907E03CFC0000EE +:1000700009020000B4000020541A00206520C000CE +:1000800004F0A7FF25E0032008A9087501200876E1 +:10009000E3E77E4C0D21E01C04F05BFE20461030AF +:1000A0004460022008A908750E94A868002807D0AB +:1000B0000068206005997648202211430170CCE742 +:1000C00005980007C9D57349734804F082FFC4E757 +:1000D000002669462046FFF7A7FB04E06E486D49FD +:1000E000203004F076FF08A8007D002802D00DA87B +:1000F000F4F7DCFE304617B0F0BDF0B597B00C4613 +:10010000054600206946087061482F785F4E0178E7 +:10011000583E82683B0005F04DF80BAA8407263B49 +:100120004C6B79798F9CAA002B20694608730CA927 +:1001300003A8FDF73DFC002804D05748554941303D +:1001400004F047FF55490D9804F020FE4F48016028 +:100150004F4869680C300160AA684260019108202C +:10016000694608708CE08A0610D5DF2211400170C4 +:1001700003202070454810304168A1604068002885 +:1001800002D00020207177E00120FBE7102256E02A +:100190002B20694608733D4903A85C39FDF708FC2C +:1001A000002804D03C483B496A3004F012FF042088 +:1001B0001BE02A206946087303A8102202306968F0 +:1001C00004F06AFD07A810220230A96804F064FD5B +:1001D0002E4903A85C39FDF7EBFB002804D0392039 +:1001E0002C49000104F0F5FE05202070666043E014 +:1001F0002A79002A02D001221143017005206946A4 +:10020000087028798880A868029039E0D06A402375 +:10021000018819430180D06B6968102204F03CFD0D +:100220002AE0FB2211400170062069460870A96887 +:1002300068680291019023E0CB0703D002221143AA +:10024000017058E70F20207017202071506CA060BB +:1002500012E0937A9B0706D0D26A44781388FF3461 +:1002600001342343138004221143017004E00A483F +:100270000849BD3004F0ADFE684600780028E0D0A3 +:100280006846F4F713FE36E701207047D01A0020C5 +:10029000B40000203CFC00001503000040420F00A9 +:1002A00070B504780D460646230004F083FF0B1C4E +:1002B000181C1C1C1C07181C1C181C0000210520E5 +:1002C00001F038FDB068007805280CD0FA4800220B +:1002D000008811468300052001F087FC03E000211F +:1002E000052001F027FD002D0ED0002028702946A2 +:1002F0003046FFF702FFF1482978005D884201D1BE +:10030000032070BD022070BD00213046FFF7F5FECE +:10031000002070BD30B5E8494B68497A0A011146A2 +:100320000C315C5C032C0CD0044600252034257174 +:1003300025725C5CA500AA18641C5C5498500320CC +:1003400030BD062030BDF0B50446264620360D46A9 +:100350003279012008218FB0002A0CD0012A21D047 +:10036000022A2BD0032A04D12A78052A01D1297028 +:1003700000200FB0F0BD01203071606800280AD065 +:10038000A069017061684160216981606169C16033 +:10039000FFF7C0FFEDE707202870206968606069FB +:1003A000A86009E029780729E3D1022030710520EF +:1003B0002870C248203868600320DAE729780529C8 +:1003C000D7D1A08910280AD9103880B2A081A1689D +:1003D0001023091803A86A6800F054FE2DE01028C5 +:1003E00004D0C1B20BAA1020A76809E0102322692B +:1003F000A16817E0491EC9B2401EC0B27B5C13540D +:100400000029F7D100280AD0401EC0B28021115423 +:10041000002102E0401EC0B211540028FAD16269E6 +:1004200010230BA907A800F02DFE102307A903A88D +:100430006A6800F027FE032030716068019003A80D +:10044000029005206946087029466846FFF728FF94 +:100450008FE7F0B5044626460D4620363179012057 +:100460008DB000290BD0012938D0022905D1297877 +:10047000052902D10920287000200DB0F0BD217D92 +:100480006846CA07D20F02738807C10F6846017415 +:10049000012203A905A800F0EDFD04A9012205AF82 +:1004A000481D00F0E7FD0722B81CE16800F0E2FDFE +:1004B00007A807220130216900F0DCFD6068019087 +:1004C00009A80290102305AAA16800F0DBFD012015 +:1004D0003071052168460170294621E029780529F7 +:1004E000CBD1062203A8E16900F0C4FD04A80622CE +:1004F0000230A16900F0BEFD042106A800F0B2FDA3 +:100500006068019007A80290102303AA696800F0B0 +:10051000B9FD0220307105206946087029466846F9 +:10052000FFF7BEFEA9E7F0B5074685B00D460020EF +:10053000694608703E466248203632798179133820 +:1005400001240078130004F035FE180DFEFDFCFBBD +:10055000FAF9F8F7F6F5F4F3F2F1F0EFEEEDECEB73 +:10056000EAE9E8E7B968039100291BD0012269464E +:100570000A7003220A710A224A7139690291397993 +:1005800000297DD0039A1278002A7AD00C2A78D2DA +:10059000130004F00FFE0BEF09EF354D8498B0F116 +:1005A000EDECEF000020C8E30021062001F0C2FBC3 +:1005B0003879072866D1424C133C2078022802D0B3 +:1005C00000287FD101E00020207003980079C11F2E +:1005D0000A2901D30A2598E1607039480722C01F13 +:1005E000039900F047FD0120307120700220694618 +:1005F00008703348801F01903869401C029037E230 +:1006000011293DD12E4C133C0228DAD16068617863 +:10061000007A884201D9062577E1039926481022FD +:10062000491C303800F026FD03202070022045E1EF +:100630001129E6D1224C133C0428C2D10520207098 +:1006400003991D481022491C203800F013FD062094 +:100650003071786903210170626851684160164900 +:100660002039816021460C31C160C91D0161017DC5 +:10067000537A49084900DB07DB0F1943017502E093 +:1006800070E354E384E1D3688361FD231940537A16 +:100690009B07DB0F5B0019430175116976E10229A5 +:1006A000AFD1002867D005206946087103984078CB +:1006B00048713869029051E3241B00203452010034 +:1006C000DB00002082E011299BD1F74C06287DD168 +:1006D000A0680399806B1022491C00F0CBFC062116 +:1006E0006846017038690290002168460171FFF781 +:1006F000D7FD072057E00B299BD1EB4C07287ED173 +:10070000A0680399006B0222491C00F0B3FCA068AA +:100710000822406B039917E00EE116E3FDE2DDE2EB +:10072000C7E2BCE29EE267E248E241E21FE2F5E195 +:10073000DFE1C8E1BEE1B1E1A5E16AE147E128E11D +:10074000DAE0BEE0AFE075E0C91C00F093FC0621E2 +:100750006846017038690290002168460171FFF710 +:100760009FFD204613304179490849003EE041E0B1 +:100770001BE001E05CE0EFE2112991D1CA4C0828AE +:100780003DD1A0680399C06B1022491C00F072FC97 +:10079000062168460170386902900021684601719F +:1007A000FFF77EFD09202070C9E208298CD1BE49DF +:1007B000092824D1039842788868016C0A7003994B +:1007C000406C0622891C00F055FC00E017E0062171 +:1007D0006846017038690290002168460171FFF790 +:1007E0005FFDB14813304179FD221FE041715EE2A7 +:1007F0003071F2E11129C0D1AB490A2801D0082596 +:1008000083E088680399806C1022491C00F032FC58 +:10081000062168460170386902900021684601711E +:10082000FFF73EFDA04813304179FB221140DDE780 +:1008300007256AE0297802297ED19B490128FBD14E +:100840006A684A6015780846002D5CD106216A4620 +:1008500011703969029107211171029902240C70FB +:10086000CA785207520FCA704B795B075B0F4B7106 +:100870008B795B075B0F8B71D20701D18A714A714B +:1008800005460A794078824200D26A70864807227B +:10089000133000F0EFFB00202C70307101466846E9 +:1008A000FFF7FEFC4BE229780429C5D103286FD15C +:1008B00008227E48696800F0DDFB032030710420C7 +:1008C000F2E129780429B7D1774F0328B4D17748CA +:1008D00008220830696800F0CDFB04203071786888 +:1008E0004168002906D00321297000212971406840 +:1008F000A86072E10320D7E1287803289CD12879E9 +:1009000000281AD00546002D16D006216846017031 +:100910003869029002216846017102980521017030 +:10092000457000216846FFF7BBFC01216846017055 +:1009300004210171457115E293E15B49A86849689A +:100940000028486001D15A48486005203071786914 +:10095000032202704A684260544A8260524A0C3252 +:10096000C260D21D0261027D4B7A5208DB07520041 +:10097000DB0F1A430275CB688361FD231A404B7A63 +:100980009B07DB0F5B001A4302750969C16130E107 +:100990000DE12978092988D14349032885D104200C +:1009A00008700620694608703869029011200871A5 +:1009B000029803210170401C1022696800F05AFB64 +:1009C00000216846FFF76CFC00203071B7E1297800 +:1009D000092993D1052891D134496A68203910201A +:1009E000401EC0B20B5C145CA34203D0002004255F +:1009F00030718AE70028F3D107203071786904212B +:100A00000170294949684968416028498160103965 +:100A1000EEE028780A28BED10620694608703869B9 +:100A2000029011200871029804210170401C1022CC +:100A30001E4900F01FFB00216846FFF731FC1A48F1 +:100A4000102140786A68091AC9B2101800F00AFB30 +:100A50006868019014481330C178C9070BD08179B8 +:100A6000002902D14079002805D0082030711BE10F +:100A700029466846EFE0072069460870002168466D +:100A8000FFF70EFC5FE128780E2884D106486968DC +:100A900081608969407808700920A9E6C80701D0FB +:100AA0000A20FFE00F20A3E6C8000020141B00204E +:100AB0001452010028780F2879D1A8683861287964 +:100AC00038730B20FAE628780428F5D1FC4C6968C5 +:100AD000A0680822006A00F0CDFA0C203071786915 +:100AE0000722B9690270A268D3684360126A826003 +:100AF0007EE028780D28DFD1F14C6968A0680223D8 +:100B00000269C06900F0BEFA0D20307178690621D3 +:100B10000170A1688A684260096966E028780C283B +:100B2000CAD1E74C6968A0686278406A00F0A2FA0E +:100B30006078A2681021091A526AC9B2101800F030 +:100B400091FA0621684601703869029011226846C0 +:100B50000271029810220170A168401C496A00F0DD +:100B600089FA00216846FFF79BFB0E206EE028788B +:100B70000F2876D1062168460170386902900B2152 +:100B800068460171029C0720CD4D2070A8680222A2 +:100B9000C169601C00F06EFAA8680822016AE01CB6 +:100BA00000F068FA00216846FFF77AFB7AE7C8E0B0 +:100BB000880701D5102075E0132019E628780F2842 +:100BC0004FD1A86838612879387311203071BC483A +:100BD000816848690078002801D00324CAE0786958 +:100BE00006220270C9684160B6498160B549091D95 +:100BF000C160FFF78FFB30E0B14880684169097838 +:100C000000290CD129780C292BD1AD4C6968806A58 +:100C1000102200F02FFAA16801204969087006210E +:100C20006846017038690290112168460171029886 +:100C300008210170A249401C89681022896A00F0CD +:100C400019FA00216846FFF72BFB122030710921A9 +:100C5000684601702946FFF723FB044601287DD032 +:100C600088E06FE028780F286CD10620694608706C +:100C70003869029008200871029809210170904992 +:100C800089680A78D207D20F427049680622801C10 +:100C900000F0F0F900216846FFF702FB8CE74807F7 +:100CA00005D514203071092069460870E0E6162049 +:100CB0009EE528780F2851D1A868386128793873C3 +:100CC000152030717869062101707D4989688A682C +:100CD0004260096981607B49891D89E728780C2871 +:100CE00045D1774C6968A0681022C06A00F0C2F94B +:100CF0000620694608703869029011200871029830 +:100D00000A210170A168401CC96A102200F0B2F9E2 +:100D100000216846FFF7C4FAC9E7694813304079F3 +:100D2000002810D0C10703D065480621017006E0F5 +:100D3000800701D5082000E00A20614908700024DE +:100D400018E00BE013E0172052E55D49002805D0BC +:100D50000020307108700A206946087068460078E3 +:100D6000002804D000216846FFF79AFA002454486E +:100D700000210170204605B0F0BD10B5524BFF2494 +:100D80005C72586019721A80002204E0491EC9B2D0 +:100D90000B010C33C2540029F8D110BDF0B54A4EF6 +:100DA0000546717A01208DB0FF2971D00127727A32 +:100DB000736811015C180C31595C8900091F645873 +:100DC0006A7021780B0004F0F5F90B960709272CBF +:100DD00059888D4A4F5492002F707CE02146203173 +:100DE0000A9109790120002902D0012967D10EE07A +:100DF0006068019005A802900D21C01C00F032F936 +:100E0000032205A8A16800F035F90A984EE0297878 +:100E1000052974D106215DE029462046FFF719FB1C +:100E200069E021462031069109790120002902D08C +:100E3000012964D10EE06068019007A802900822A1 +:100E4000E16800F017F9082209A8A16800F012F97A +:100E500006982BE02978052951D10A213AE0294644 +:100E6000204600F01AF946E029462046FFF76BFAC3 +:100E700041E029462046FFF756FB3CE02146203161 +:100E8000059109790120002903D0012937D11DE0FE +:100E900056E06068019007A802900822A16800F05F +:100EA000E9F8082109A800F0DDF8059869460771FE +:100EB0000520087029466846FFF7F2F91BE00BE0B1 +:100EC000C80000200C520100241B002029780529AD +:100ED00015D10B212970002011E02946204600F091 +:100EE00023F908E02946204600F04EF903E02946A0 +:100EF0002046FFF7C9F9002801D001280CD125624E +:100F0000717A736809010C315A5C521E1206120E76 +:100F10005A5401D003204AE70328FCD0737A726840 +:100F200019011D010D312C46515C7172FF270D34E2 +:100F300017550C35545D002C02D0FF2903D1737274 +:100F40000DB0F0BD21460C010D34145DFF2CF9D11C +:100F500009010D315354F3E770B5AD4C0546607A85 +:100F6000214603464A6811E0010108460C30105C36 +:100F700008E0401EC0B286008E199659AE4201D1DB +:100F8000042070BD0028F4D10D31505CFF28EBD156 +:100F90009F480021007A01E0491CC9B2884204D967 +:100FA0000E010C36965D002EF6D1884201D8052040 +:100FB00070BD08010D30135461722846FFF7AAF97D +:100FC000032806D0617A626809010D31515C6172B3 +:100FD00070BD28462830FFF7E1FE70BD10B50478DB +:100FE0000123012C14D10C78022C11D30B23137084 +:100FF00083785B075B0F537002220A708088002899 +:1010000005D0830000221146062000F0EEFD0023EB +:10101000184610BD0EB50022012105280AD0062869 +:1010200007D1684601700221017142710021FFF76A +:1010300064F80EBD68460170F6E710B58EB00C4638 +:1010400006216A461170019072480290001D0390BB +:101050006846FFF781FF102220460B9900F00AF83E +:101060000EB010BD002202E0491EC9B24254002950 +:10107000FAD1704703E0521ED2B28B5C8354002A2F +:10108000F9D1704730B505E05B1EDBB2CC5CD55CB6 +:101090006C40C454002BF7D130BD3EB5044620301F +:1010A0000D4602790121002A02D0012A3AD10FE02F +:1010B00061680191574908310291012101710520B0 +:1010C0006946087029466846FFF7EAF8014629E0B4 +:1010D0002878052826D169681022A06800F087F8D2 +:1010E0006868C07B000606D54A4AA06810231832FB +:1010F0000146FFF7C7FF1022A168E06800F077F80B +:10110000A068C07B000606D5424AE068102318326A +:101110000146FFF7B7FF07202870A0686860E06805 +:101120000021A86008463EBDF0B5044626460F469D +:1011300020363179012089B0002909D0012905D153 +:101140003978052902D10C203870002009B0F0BD93 +:10115000606803AD01900295022203A8A168FFF721 +:1011600089FF0222A81CE168FFF784FF0C21281DDB +:10117000FFF778FF01203071052069460870394675 +:101180006846FFF78DF8E1E710B5034620331C7978 +:101190000122002C04D0012C10D0022C25D11EE0FD +:1011A00001211971C16806220A7040684860194817 +:1011B000801C8860801CC86008460CE00C780C2CF1 +:1011C00013D102221A71C268052313704968516055 +:1011D000806890601046FFF79DF8024605E00878A9 +:1011E0000B2802D10D2008700022104610BD10B54A +:1011F000002409E00B78521E5B0023430370401C5F +:101200000B78491CD2B2DC09002AF3D110BD0000D2 +:10121000241B00200C52010070B50D46040012D0B2 +:10122000002D10D02101284603F093FD10225449CF +:10123000284603F031FD52480121083801804480DE +:101240004560002070BD012070BD70B54C4E00247B +:101250000546083E11E0716820014018817BAA7B99 +:10126000914209D1C17BEA7B914205D10C222946EA +:1012700003F0E5FC002806D0641C30888442EADBD9 +:101280000020C04370BD204670BD70B50D460600FD +:101290000AD0002D08D03A4C083C20886188401CB8 +:1012A000884203D9042070BD102070BD3046FFF77E +:1012B000CCFF002801DB401C0AE0208861680001A7 +:1012C00040181022314603F0E7FC2088401C2080A3 +:1012D0002870002070BD70B514460D001FD0002C82 +:1012E0001DD00021A170022802D0102817D108E0DB +:1012F000687829780002084311D00121A17010807C +:101300000BE02846FFF7A1FF002808DB401CA07077 +:10131000687B297B000208432080002070BD0120EB +:1013200070BD70B5054614460E000AD0002030701E +:10133000A878012807D004D9114908390A889042B1 +:101340000BD9012070BD002C04D02878207028888B +:10135000000A50700220087010E0002C0CD0496880 +:101360000001411810391022204603F095FC28781E +:1013700020732888000A607310203070002070BD30 +:10138000EC00002073490968016000207047714932 +:1013900008600020704701216F4A704B002803D07D +:1013A000012805D06E48704791630020187001E055 +:1013B000D1631970002070476A49012008606848AD +:1013C000801C70470422684B6649002805D05A608B +:1013D000086901221043086108E0086940084000DC +:1013E00008619A605C490020C03188600020704725 +:1013F0005C490622002808D0012809D002280DD017 +:1014000003280FD05648401C70470869904302E0FB +:1014100008699043801C0861002070470869904368 +:10142000001DF8E708691043F5E74E494A6A024390 +:101430004A62002070474B494A6A82434A62002050 +:1014400070474849496A0160002070474549CA69A8 +:101450000243CA61002070474249CA698243CA6197 +:10146000002070473F49C96901600020704730B5CE +:101470000546002072B601463A4A384C4032002DEB +:1014800011D00123012D0CD0022D02D0072062B60D +:1014900030BDA3706478002C01D09363F7E79163AB +:1014A000F5E7A170F9E7A170F9E72F4904208860FA +:1014B00029490020C03188602849012008702B4943 +:1014C0000A688023120A12021A430A602849086037 +:1014D000704722480078704770B5EFF31080C50759 +:1014E000ED0F72B61D4C6078401C0006000E607057 +:1014F00003D120A1CC2003F06CFD6078012806D137 +:10150000A078002803D01749012040318863002DBE +:1015100000D162B670BD70B5EFF31080C507ED0F56 +:1015200072B60E4C6078002803D112A1DC2003F0C3 +:1015300050FD6078401E0006000E607006D1A07855 +:10154000002803D00749002040318863002D00D1D6 +:1015500062B670BD0004004040000040FC00002066 +:1015600004200000000500400003004000E400E00B +:1015700000E100E07372635C736F635F706F7765A7 +:10158000722E63008107C90E002808DA0007000FD9 +:1015900008388008B94A80008018C06904E08008D3 +:1015A000B74A800080180068C8400006800F704766 +:1015B000B44948788978884201D3401A02E0212250 +:1015C000511A0818C0B27047AE492331487889785B +:1015D000884201D3401A02E02122511A0818C0B2F1 +:1015E0007047A849463148788978884201D3401A23 +:1015F00002E02122511A0818C0B27047A04810B565 +:101600000C300168FF22120291430122D2031143E0 +:1016100001609C490020233148708870233948704C +:101620008870463148708870974802F0FFFA9648F3 +:10163000401C02F0FBFAF2F7A9F900F015F910BD11 +:1016400020207047B4E770B50C4605460026FFF72A +:10165000AFFF8C49A04214D30A46203A002320460B +:10166000641EE4B200280BD08878105C287088785B +:101670006D1C401CC0B288702128F0D18B70EEE741 +:10168000012600F0F1F8304670BD202070479BE73E +:1016900070B50C4605460026FFF796FF79492331C1 +:1016A000A04214D30A46203A00232046641EE4B226 +:1016B00000280BD08878105C287088786D1C401C3E +:1016C000C0B288702128F0D18B70EEE7012600F0BF +:1016D000CBF8304670BD202101700020704710B556 +:1016E0000446FFF77EFF2070002010BD70B50C4649 +:1016F0000546FFF776FF63494631A04215D30A46F7 +:10170000203A00232046641EE4B200280BD08878DB +:10171000105C287088786D1C401CC0B2887021282D +:10172000F0D18B70EEE7002400E0584C00F09CF8FC +:10173000204670BD70B50C460546212904D9FF200E +:1017400053A1473003F045FC4C484068103840B284 +:10175000FFF718FFC6B20D20FFF714FFC0B2864294 +:1017600007D2FF204AA14D3003F033FC01E0F2F72D +:101770004DF921462846FFF766FF0028F7D070BDD7 +:10178000F8B5404E07462336B1787078212200F034 +:1017900060F8354623353B4C00280ED0A1786078A0 +:1017A000212200F056F8002814D0A9786878212268 +:1017B00000F04FF800281AD025E032497078C91C93 +:1017C0000F547078401CC0B2707021281BD10020CB +:1017D000707018E02B49607820390F546078401CF5 +:1017E000C0B2607021280ED1002060700BE0254946 +:1017F000687826310F546878401CC0B26870212880 +:1018000001D100206870B1787078212200F021F8B1 +:1018100000281DD0A1786078212200F01AF8002855 +:1018200016D0A9786878212200F013F800280FD08C +:10183000F2F7CEF8144802F001FA01214903884278 +:1018400003D013A1C12003F0C4FB0F4802F00EFA2D +:10185000F8BD401C884205D0904201D1002901D03A +:10186000002070470120704710B5074802F0E6F9E4 +:10187000002801D1F2F79BF810BD000000ED00E058 +:1018800000E400E0501B0020FF00002007200000C3 +:101890007372635C736F635F72616E642E630000CA +:1018A00010B5284802F0C2F9002803D026A11D2057 +:1018B00003F08FFB2348401C02F0B8F9002803D046 +:1018C00021A1212003F085FB10BDF1B5224D6F68E9 +:1018D00001261C4802F0B2F91A4C002803D1002658 +:1018E000601C02F0C3F91D4A1D490120506000BF71 +:1018F00000BF00BF00BF00BF00230B604B60009B18 +:101900006B60106000BF00BF00BF00BF00BF086871 +:10191000002802D148680028F9D048680028E4D19E +:10192000002E04D06F60601C02F088F907E0601C94 +:1019300002F084F90028D3D1024802F097F9002080 +:10194000F8BDC2E7010100207372635C736F635FCF +:101950006563622E6300000000E5004000E0004087 +:1019600000E1004030B5EFF31081CC07E40F72B610 +:101970001D4A116910230D461D431561002C00D12D +:1019800062B61A4DC406E40E0120A0402C68044241 +:101990000DD0C8060AD4EFF31080C007C00F72B68E +:1019A000116999431161002800D162B630BD20BF92 +:1019B00040BF20BFEAE70E4908784A78401CC0B211 +:1019C000904200D008707047084A094820BF40BFC5 +:1019D00020BF4178037843701368002B02D103784D +:1019E0008B42F3D00020704700ED00E000E200E001 +:1019F00003010020FEB5F64C07466068FF213E015A +:101A000081552178FF2913D0090108314158324608 +:101A1000491E083209020192090A805800F0CEF9E5 +:101A2000002802D02478254615E061682078885582 +:101A30002770FEBDE64842680198115828010090C1 +:101A40000830105800F0BAF9002806D1E0482C46BA +:101A5000416800980D5CFF2DECD1DD482101406804 +:101A600085554754FEBD70B5D94A04460020157A05 +:101A700053680AE00201561C9E5DA64203D10C3257 +:101A80009A588A4204D0401CC0B28542F2D8FF2046 +:101A900070BDF8B5CE4F3E7801F01AFE0146FF2E1C +:101AA00071D03401254678680835405900F086F930 +:101AB00002280CD97868405901F0FDFD01F008FEBC +:101AC00001467868405900F079F902285BD8C0498E +:101AD0004868025D0A70A11C425C002A0CD0521EAC +:101AE000425441590122D20589180902090A41517B +:101AF0003046FFF77FFF30E0631CC25C0092221D7E +:101B000094468258002A10D001239B029A420FD992 +:101B10009205920D43595703DB191B021B0A4351CF +:101B20006346C3589A1A920A09E0FF21C1540AE099 +:101B3000435952039A181202120A42510022425487 +:101B40003046FFF757FFA2480C344168C26800983E +:101B5000095980001258009890479D4C2078FF2822 +:101B600011D0000161680830085801F0A4FD01F0AF +:101B7000AFFD01462078626800010830105800F07F +:101B80001DF9022886D3F8BDF8B51C4615460E4649 +:101B90000746FF2B03D38FA1D42003F01AFA8C48F9 +:101BA000FF21C76045600472067401700022427014 +:101BB000104604E00201521C401CA954C0B2A042CD +:101BC000F8D3F8BD70B5824C06466578207C854216 +:101BD00003D380A1E72003F0FCF9E068A900465098 +:101BE0006078401C6070284670BDFFB581B01D460E +:101BF000FF2401F06DFD764F064679780198814209 +:101C000003D874A1F52003F0E4F971480021037AA8 +:101C1000406810E00A019446521C825CFF2A25D0DD +:101C2000019FBA4205D162460C328758029A974208 +:101C30001ED0491CC9B28B42ECD8FF2C18D0210110 +:101C40004A1C019B83540B460C33029AC250039BDF +:101C50005F4F0022012B0ED00B1DC25001239B02AF +:101C60009D4216D9AA05920D08D008E00C46E0E77F +:101C7000FF2005B0F0BD0B1DC550EFE71A4653031A +:101C80009B190E461B0208361B0AAA1A8351920A98 +:101C900009E0002D00D101256B039B191D022D0ABF +:101CA0000B460833C550891C42543D463E782046B9 +:101CB000FFF7A0FE2878B04214D000016968083010 +:101CC000085801F0F8FC01F003FD29786A68090161 +:101CD000083152580146104600F070F8022801D22F +:101CE000FFF7D7FE0198C4E770B50C46054601F032 +:101CF000EFFC064621462846FFF7B5FEFF2817D021 +:101D0000334D04012046696808300858314600F018 +:101D100055F80121090340186968A41C095D400BAE +:101D2000002901D089020818002800D1012070BDC7 +:101D3000002070BDF3B581B00F460198FFF793FE08 +:101D4000FF282AD0224E3578726829460C4604E0D6 +:101D5000844205D025462301D45CFF2CF8D11CE039 +:101D6000FF2C1AD0A5421CD10801105C3070FF284E +:101D700015D000010830105801F09DFC01F0A8FCBE +:101D800001463078726800010830105800F016F8EB +:101D9000022806D2FFF77DFE03E00020FEBD01F021 +:101DA00092FC39460198FFF79FFF22017168FF23DB +:101DB000541C0B558A5C2B01CA54FEBD401A00020C +:101DC0000121000AC905884200D90020704700009F +:101DD0009C1B00207372635C736F635F74696D6535 +:101DE000722E6300F0B500241C4A01211C4B08032D +:101DF000546018601B4B1C601B4C20601B4804691E +:101E0000E443E406E6170469761C10252C430461BC +:101E1000174C6160174D296000E020BF1F68002F3C +:101E2000FBD0002E03D107691026B74307619068E5 +:101E30008005906801D5104A10436960A1600021B7 +:101E400019600121084A09031160F0BD10B504466C +:101E5000FFF7C8FF2060002010BD000000C5004053 +:101E600080E100E000C1004080E200E000ED00E021 +:101E700000C3004000C0004000FCFFFF70B51F49D8 +:101E80000A68002A17D000231D4601244A68521C04 +:101E90004A60092A00D34D600E792246B2400E688E +:101EA00016420AD072B60B6893430B6062B649685B +:101EB0000160002070BD052070BD5B1C092BE5D3BF +:101EC0000FA1362003F085F8F5E7012010498005C1 +:101ED00008607047EFF31081CA07D20F72B6012174 +:101EE00081400648036819430160002A00D162B6A8 +:101EF000EBE70248002101604160704708010020C3 +:101F00007372635C736F635F6576742E63000000A9 +:101F100000E200E00120810708607047012081078E +:101F2000486070471048C068C00700D00120704763 +:101F30000D488068C00700D0012070470A484069FA +:101F4000C00700D0012070470748C06970470649A4 +:101F50008A69D20306D589698907890F814201D12F +:101F6000012070470020704700040040F8B5FE4C87 +:101F7000207BE17A88421AD00126FC4D0027E07AC6 +:101F8000215C14200A4642435019037C052B0FD0D4 +:101F9000062B1BD0072B28D0437C012B33D0F4A178 +:101FA000F64803F016F8207BE17A8842E7D1F8BDC5 +:101FB0000674E07A0A2807D0E07A401CE072491CD7 +:101FC000C8B2AA5802210CE00020F7E70674E07AB4 +:101FD0000A2808D0E07A401CE072491CC8B2AA580E +:101FE00003219047DFE70020F6E70674E07A0A282D +:101FF00007D0E07A401CE072491CC8B2AA580821F8 +:10200000EFE70020F7E74774E07A0A2807D0E07A84 +:10201000401CE072491CC8B2AA580721E1E7002021 +:10202000F7E770B5D64D06206872D648002444778D +:10203000047738300473C472D34801F0F7FDD348F5 +:102040000475EC72D249601E88606C71AC70EC70E3 +:102050002C716C70CF48022104704470CE4804701B +:10206000047528300470491EFAD10120F1F750FDA3 +:102070000020F1F74DFD0120A871F0F741FDC748A0 +:10208000F0F750FDC64C2070C648F0F74BFD60706D +:10209000F1F7E2FC70BD10B5F1F709FDC04C2078F6 +:1020A000F0F75EFD6078F0F75BFDB54C207A002814 +:1020B00005D0FFF730FAF0F7E2FD0020207210BDE6 +:1020C00070B5AF4CA079002804D0A9A1B64802F0A1 +:1020D00080FF70BDE07A002804D11320A4A1400144 +:1020E00002F077FF0126A6710025E572607A0421CF +:1020F000142250439D4A80180174A5488168491CE8 +:1021000004D0691E81600120F1F702FD0020F1F783 +:10211000FFFCF1F7E3FC01F023FEF1F7E8FDA34833 +:10212000056005600120A249C0030860F0F74AFF7E +:1021300098480078022804D0032804D1E0780028C9 +:1021400001D0A67000E0A570F1F7BDFD70BD03469B +:1021500086490520142242435218203A127F002A51 +:1021600004D0401E0006000EF4D1704714224243F2 +:1021700051180A46403AD362012220390A77704743 +:10218000012805D0032805D1002903D1002070477C +:102190000029FBD010B47A4C002363707D4A0028DC +:1021A00090700CD002280AD007291AD20B007B4469 +:1021B0001B79DB189F441505070D0F111300D37011 +:1021C00003E01B2000E03A20D0700120607010BCBA +:1021D00070475820F8E77720F6E79620F4E7B52017 +:1021E000F2E710BC0020704710B56A484078F1F75C +:1021F00085FD80B210BD411E1422504310B55B4ACC +:102200008418203C042902D8207F002803D158A13B +:10221000684802F0DEFE207F012803D054A1664802 +:1022200002F0D7FE0020207710BD70B5554C607FBE +:10223000217F884201D1012500E00025F1F7F7FC5C +:10224000F1F75CFD617F227F914201D1012100E025 +:102250000021A942EBD170BDF7B50646481E844661 +:102260008EB0C0B2142204905043404A85182846CC +:102270000595007C2D1D07282AD13B4C0027E07ACC +:10228000227B824221D0235C049A934201D1012710 +:1022900001E0002F04D00A2811D0421CA25C225475 +:1022A0000A280ED0401C227BC0B28242EBD1002F04 +:1022B0000BD0207B002806D0207B401E04E00022AB +:1022C000ECE70020EFE70A202073059A0120107444 +:1022D00060462B4C04280FD814204143234808188B +:1022E0002038007F002807D00598007C012807D0FF +:1022F0001098807A012807D01DA1304802F069FEAD +:102300001098807A012871D10598184B007C02281A +:102310001AD0154C207B0A2874D0207BE17A401C0F +:10232000884204D1C92012A1800002F052FE059912 +:1023300001204874217B04986054207B0A2865D0D2 +:10234000207B401C20731CE1607A049A0146904275 +:1023500006D0014614277843C018807C9042F8D1FB +:10236000627A824235D12BE0A81C0020B81C0020E4 +:102370007372635C72656D2E63000000D50500000A +:102380003C1D0020701C0020481D0020901C0020D7 +:102390001C1D002012010020C81C0020931A0100FF +:1023A000100100206D1F01007F02000000F50040B9 +:1023B00080E200E0CD020000CE0200001703000022 +:1023C000617A14225143C918897C61720121A1727A +:1023D00007E014224243D21814277943927CC9188B +:1023E0008A74142206215043C01881741098007A10 +:1023F000062819D203007B441B79DB189F4408127E +:10240000100E0C0AE07A00288CD090E7002099E7A3 +:1024100000210FE0B4210DE073210BE0322109E02F +:102420000A2107E0062105E0FF20FE49E23002F024 +:10243000D0FD0021109802910068401A2860109980 +:10244000097A002912D00221401A0102090A2960E2 +:1024500010980268406810180002000A686010981E +:10246000807A0228109803D0007B74E00421EBE707 +:10247000007A002813D0022202981018844610987F +:102480004268604608301718E748029A4078904240 +:1024900002D9E278002A04D03846083005E0042248 +:1024A000EAE7029A801AC0190830627A062A1CD01C +:1024B000627A14235A43DD4BD2185268914214D0E9 +:1024C000DB4B0793617A14225143D84A89184A6832 +:1024D0008968921B891B12020902120A090A90429A +:1024E0003AD89A4238D8994236D83018C01B0002E0 +:1024F000000A286010996044CE4AC9680002000AA8 +:102500009446421A01239B0507929A4201D2104633 +:1025100014E00A1A09929A4201D207980EE0079A2B +:102520006346624503D9591A0818401C06E0099A07 +:10253000624506D9181A4018401C404200285FDC4A +:1025400003E0B849BC4802F044FD2868C019000205 +:10255000000A6860002028726868082708300002B6 +:10256000000A68601098407AA8721098007A687221 +:1025700003280ED200280CD0FFF7D4FC002803D08B +:1025800007E0002011B0F0BD02983A210F1A322066 +:102590000290A5480178012901D0032909D1417889 +:1025A0000298814205D9E078002802D10298081AE1 +:1025B000C71928689E4A801B844601026868090A78 +:1025C000801B03021B0A8F421AD81746914217D864 +:1025D000BB4215D8617A062916D0677A6146062271 +:1025E000039200923A4614235A43904BD2189368B0 +:1025F0009B1B8B4216D80397977C062FF2D177E06E +:10260000049801F059F9BCE7059802220499027474 +:10261000627A062A00D0627A827461720120A07206 +:1026200011B0F0BD062F63D0002239469446142223 +:102630007E4B4A43D21853689B1B834229D2917B1D +:10264000AB7A99421FD805980521049C7B4D0174F3 +:10265000287B0A2811D0287BE97A401C884203D1C4 +:102660007049774802F0B5FC287B2C54287B0A2857 +:1026700007D0287B401C287383E7E87A0028EFD036 +:10268000F2E70020F7E701218C46917C0629CED1A4 +:1026900002E0604600282AD03D46009114202A46D8 +:1026A000424362480621161831741038007B0A280C +:1026B000624816D0017BC07A491C814203D161A1D6 +:1026C000634802F086FC5D48017B4554017B0A2982 +:1026D0000BD0017B491C0173B57C0098A842DDD169 +:1026E00006E0C07A0028EAD0EDE70021F3E7009782 +:1026F0000599022008744D4D607AB84207D10599BA +:1027000000988874049860720120A07221E00398F8 +:10271000062F0FD0062803D14AA14E4802F059FCDB +:102720000398142250434019049981740599009824 +:1027300088740EE0062803D142A1474802F049FC04 +:102740000398142250434019049981740599062076 +:102750008874012011B0F0BD70B50D4606463F49A2 +:1027600000242046891BA04103D236A13C4802F038 +:1027700030FC3C490020491BA04103D231A13A481A +:1027800002F027FC394A70190021821A8C4101D3CA +:102790003749401870BDF8B5401EC0B214214843F7 +:1027A00022494518687B062813D203007B441B7915 +:1027B000DB189F44020C0A080604002066E0B420DF +:1027C00010E073200EE032200CE00A200AE0062020 +:1027D00008E0FF201BA1E23002F0FBFB697B002038 +:1027E000002953D0022140186968002440180C21A8 +:1027F00000026956000A00294ADBF1F77FFA174AFE +:1028000006460C27EF570021101AA14103D20DA153 +:10281000134802F0DEFB13490020C91BA0412CD253 +:1028200008A127E07023010012010020B81C00203D +:10283000FFFF3F00FFFFFF0014070000A81C00205F +:10284000090200007372635C72656D2E6300000004 +:10285000C7030000DF030000E5030000FF7F841EC4 +:10286000F50300000020A107F60300000080841E8D +:1028700000807BE1FB4802F0ACFBFB4AF019002131 +:10288000821A8C4101D3F9494018F8BD0421AAE706 +:10289000F1F734FA0C21695600224018F449091A5C +:1028A000A241F2D24042F8BDF0B5064683B0F148ED +:1028B0000190457A029534687068001B0702EE4863 +:1028C0003F0A001B0090062D2DD0142029464143BD +:1028D000EA480122081884464168E748920586467E +:1028E000081B904210D3631A93420DD302467046E0 +:1028F000724503D900984018401C05E073450ED975 +:10290000411A0819401C404200280CDA6046029522 +:10291000857C0198C0790028D5D003B0F0BDD84996 +:10292000D84802F056FB0298854226D0142148432D +:10293000D2490123401802908068CF499B058C46FC +:10294000011B8646994210D3221A9A420DD3634640 +:10295000614503D900997144491C06E01946624556 +:102960002DD9091A0819401C4142002905DD029899 +:10297000B17A807B814200D37446062D15D0BF49C1 +:102980001420454368184268121B1202120ABA4208 +:102990000BD2B27A837B9A4200D38468857C0198FB +:1029A000C0790028B9D1062DEAD13068A042B4D050 +:1029B000E0190002000A3460706003B0F0BDB04955 +:1029C000B04802F006FBD8E7F0B5AF4904464868C6 +:1029D00085B0C005C00D1CD0103840B200280CDAFC +:1029E0000207120F083A920892005118C96980072D +:1029F000C00EC1400806800F09E08108A34A890083 +:102A0000891809688007C00EC1400806800F002899 +:102A100008D000262078002806D0012804D0002005 +:102A200005B0F0BD0126F5E72079062813D2030092 +:102A30007B441B79DB189F44020C0A080604002023 +:102A400018E0B42010E073200EE032200CE00A20E1 +:102A50000AE0062008E0FF208949E23002F0B9FAD6 +:102A600021790020002905D002214718814D002E30 +:102A700002D003E00421F8E70020E87102AA6946C9 +:102A8000A068F1F745F9694608228A56E06801A96D +:102A90008018C01C01221F2801DA019209E003AA54 +:102AA000F1F736F96846007B002802D00198401CF7 +:102AB000019000990198401808300002000A019026 +:102AC000C81B0002000A009060796946887200986D +:102AD0000390F1F7ACF8009A019B121A181A6C498E +:102AE00012020002120A000A8A4216D8884214D83A +:102AF0006846FFF7D9FE00990398814205D0C819AE +:102B00000002000AF1F7FAF8A0600120E979002933 +:102B100086D0002EB0D005B0F0BD0020F6E7F3B5AA +:102B20008FB05C480C460B9001F088F85A4A0F9918 +:102B3000504E5518203D594F00280BD05848007D65 +:102B4000002803D057A15A4802F043FA2078012800 +:102B50007DD05FE1787F0A280CD0787F397F401CD8 +:102B6000884203D14FA1534802F033FA207801285C +:102B700004D00CE0387F0028F4D0F7E7E87F002885 +:102B800003D048A14C4802F024FA0120E877787F6E +:102B90000F991422494D504340190174207802289E +:102BA00023D0787F14214843451920792872607911 +:102BB00068722A460C322946A068F1F7A9F80C2061 +:102BC00028560F2804DD1F3828732868401C286009 +:102BD0000C22AA56281DE16802908818C01C1F28E4 +:102BE0003FDA029901200860FDE027494868C005E6 +:102BF000C00D20D0103840B200280CDA0207120FA6 +:102C0000083A920892005118C9698007C00EC14065 +:102C10000806800F09E081081C4A890089180968A4 +:102C20008007C00EC1400806800F002803D11DA1F7 +:102C3000234802F0CEF9787F14214843451900213A +:102C4000E0686A460591117303AA05A900E0D8E07F +:102C5000F1F75EF86A460C2010560F2832DD01208D +:102C600031E0B3E0F60300000080841E00807BE1C9 +:102C7000FF7F841E3C1D0020FFFFFF00B81C0020CA +:102C8000442801001407000000ED00E000E400E02B +:102C9000FFFF3F00481D002016010020701C00208F +:102CA000901C00207372635C72656D2E63000000DF +:102CB00017050000F5040000FA040000B01B002016 +:102CC0000605000000200599401808900220A8720F +:102CD0002079287260796872A068291DC01C039150 +:102CE0001F2801DA01200AE006AAF1F711F8684668 +:102CF000007E002804D0039803990068401C0860F7 +:102D0000287A062813D203007B441B79DB189F44E2 +:102D1000020C0A08060400200FE0B4200DE0732026 +:102D20000BE0322009E00A2007E0062005E0FF2042 +:102D3000FD49E23002F04DF900202179002943D00D +:102D400002214118069168680831401808990590D9 +:102D500008180699401A0C900020F071F0F767FFF0 +:102D600004462860089820180002000AE860707A7B +:102D7000062825D0707A14214843EC494018406851 +:102D80000090059940180002000A0190687A69468F +:102D900088726846FFF788FD0098019A001B121B95 +:102DA00000021202E24B000A120A0C99984207D85C +:102DB0008A4205D80099069808180002000A28607F +:102DC000F0790028C8D110E00421BAE704AA0299DA +:102DD000F0F79EFF6846007C002804D00298029914 +:102DE0000068401C08602078A872787F0A2806D006 +:102DF000787F401C78770B9800F038FF47E0002080 +:102E0000F8E7E87F002803D0CAA1CD4802F0E1F836 +:102E10000120E877CB490F9808742078022803D165 +:102E2000C4A1C94802F0D5F8C64D2079287260794E +:102E300068722A460C322946A068F0F769FF0C2018 +:102E400028560F2804DD1F3828732868401C286086 +:102E50000C22AA56281DE16802908818C01C1F2861 +:102E600003DA0299012008600CE003AA0299F0F746 +:102E70004FFF6846007B002804D002980299006842 +:102E8000401C08602078A872AE4901200875797F3F +:102E9000387F814223D0747A062C22D0F0F7C7FE07 +:102EA00014214C43A1496218117C042917D003292D +:102EB00015D0536892681B1A101A1B0200029C4915 +:102EC0001B0A000A082B0AD30A468B4207D89042F5 +:102ED00005D8787F397F884201D0F0F7F4FE11B031 +:102EE000F0BD787F397F8842F7D111B0F0BD10B5C1 +:102EF0000020F0F7FAFD10BD10B50120F0F7F5FD48 +:102F000010BDF1B5009802281FD0904C607A0628B9 +:102F100003D188A18E4802F05CF80026A671012535 +:102F2000E572607A03211422804F5043C019017466 +:102F3000F0F7CEFE009800280CD001282AD00328F4 +:102F40007CD0B5207BA1C00044E082480078EFF738 +:102F50000DFEF8BD8048007F002803D075A17F4892 +:102F600002F037F865717C4D00202E60F0F7D0FD3F +:102F7000A968481C04D0012300221846F0F7FEFD82 +:102F8000607A617A401CC0B2142251437A58012100 +:102F90009047F8BD0120F0F7BBFD607900280DD007 +:102FA0006D488068401C09D0607A617A401CC0B2CC +:102FB000142251437A5806219047F8BD6648007F95 +:102FC00001280AD0022812D0032824D0042836D0A1 +:102FD00058A1634801F0FDFFF8BD2079002803D017 +:102FE0002671F0F77AFEE5705B480677F8BD207A27 +:102FF000002804D1FEF770FAEFF718FE2572607A08 +:10300000617A401CC0B2142251437A580021904783 +:1030100051480677F8BD504F0123397B786800226C +:10302000411A1846F0F7AAFD2079002803D026712E +:10303000F0F753FEE57002203877F8BD1BE0464EEE +:10304000217870680123411A00221846F0F796FD96 +:10305000207A002804D1FEF73FFAEFF7E7FD25724A +:10306000607A617A401CC0B2142251437A58002120 +:1030700090473577F8BD607A617A401CC0B214225F +:1030800051437A5805219047F8BD10B52F4C607A0E +:10309000062803D127A1334801F09BFF607A617AAB +:1030A000401CC0B214225143204A52580421904778 +:1030B00010BDF0B583B006200290F0F7B8FD234CA8 +:1030C0000090617A28480190062920D0617A142066 +:1030D000414316480918097C042918D0617A142242 +:1030E00051430818007C03287BD00198009A03689C +:1030F00040689B1A801A1B0200020D491B0A000A35 +:10310000082B6ED30A468B426BD8904269D812487E +:103110008068401C03D007A1144801F05AFF00202A +:103120006071607A062823E0A42C0100B81C0020FE +:10313000FFFF3F007372635C72656D2E63000000D9 +:103140001E050000901C0020240500003C1D0020EE +:1031500055050000100100201C1D00206105000025 +:103160009C050000AF0500002C1D0020EB050000B1 +:1031700007D16078002804D0FE48C178417081787A +:103180000170607A062815D0607A1421FA4A484303 +:103190008018007C04280DD1607A0290617A0120A9 +:1031A0001423594389180874617A59438918897C12 +:1031B0006172A072F14D687F297FF14F884233D050 +:1031C000F04E287F142148438019007CC05D0128FF +:1031D000287F07D048438019007CC05D02282FD08B +:1031E00044E001E2142148438019807A01280AD082 +:1031F000287F0221142250438019007CC155287F6A +:103200000A2808D009E0297F002014225143891997 +:10321000097CC8552AE0002001E0287F401C28775F +:10322000687F297F8842CCD1D74D287D00284CD09B +:10323000287CC15D012928D0C05D022830D03AE049 +:10324000287F142148438019807A012803D0CFA118 +:10325000D14801F0BEFE297F002014225143891974 +:103260008872297F51438919097CC855287F142108 +:1032700048438219287F48438019017C0098FEF753 +:10328000EBFF287F0A28C8D1C5E7A97A012904D015 +:103290000221C155002028750DE00021C1550AE02A +:1032A000A87A012803D0B9A1BC4801F092FE002001 +:1032B000A872297CC855287D002806D0297CB24AEE +:1032C0000098FEF7C9FF00202875029806281ED036 +:1032D00014214843A8494018017C012917D107212E +:1032E000AF4D0174287B0A283CD0287BE97A401C2A +:1032F000884203D1A5A1AB4801F06BFE297B02985F +:103300006854287B0A2831D0287B401C2873607AB7 +:1033100006287DD0A07A00287BD00020A072617A98 +:10332000142041439448A04B0A18566891681D46E2 +:10333000D2687C35DE67AA6069609C4D697E002991 +:1033400016D00226617A14228B4851430818407B1C +:1033500006281BD203007B441B79DB189F440A1408 +:1033600012100E0CE87A0028C4D0C7E70020CDE781 +:103370000426E7E700200FE0B4200DE073200BE007 +:10338000322009E00A2007E0062005E0FF207FA1A7 +:10339000E23001F01EFE00202873697E022901D070 +:1033A000012910D12969009A09188A1A1202120AF1 +:1033B0003A2A08D90320687632390802000A2861BF +:1033C000322028730AE0322808D2207A00280ED151 +:1033D000FEF782F8EFF72AFC012007E0207A0028A8 +:1033E00005D0FEF798F8EFF74AFC002020726149FB +:1033F0000822487820700978012901D0032906D1D4 +:1034000001212171297B884201D9421A083201E049 +:1034100091E0A1E0A378002B00D0921C2179002933 +:1034200001D1002B5DD09446614A00990092019A27 +:10343000176852687F1A511A3F0209023F0A090AA7 +:10344000BC451BD85A4A974218D8009A914215D8C1 +:10345000297B884223D92B69421A9A1A1202120A2E +:10346000101880190002000A2A616860002914D02F +:10347000032028770006000E3ED14CE0002020718A +:10348000A070297B002925D02869401880190002E6 +:10349000000A6860022028772EE00120E9E78142D7 +:1034A0000BD92A69511889190902090A696000288B +:1034B00001D00420DDE70220DBE7002B03D133A19C +:1034C0003C4801F086FD286980190002000A686006 +:1034D000002004E0296989190902090A696028772E +:1034E00019E0287B00280FD02969081880190002EC +:1034F000000A6860022028772869012381190022C8 +:103500001846F0F73BFB09E0286980190002000A21 +:103510006860002028770120F0F7FAFA607A142119 +:10352000484315490C22401882560123002069683F +:10353000F0F724FB10E00120F0F7EAFA0020F0F7A2 +:10354000E7FAF0F7CBFA207A002805D0FDF7E3FF81 +:10355000EFF795FB00202072A078002804D0F0F748 +:10356000BCFB0020E070A0706078002827D00148E4 +:10357000C17821E012010020B81C0020701C00203E +:1035800015010020B01B0020901C00207372635CAA +:1035900072656D2E630000000D0600002906000014 +:1035A000A81C00203B060000B01C00201C1D0020B1 +:1035B000FFFF3F008D060000417081780170207987 +:1035C000002806D00020CE49E0700978002900D1FB +:1035D0002071CC48017BC07A814203D0CA48407830 +:1035E000EFF7C4FA0120E07103B0F0BDF0B5C74CAD +:1035F0000746607A83B0062804D16F20C4A1000179 +:1036000001F0E7FC607A1421C44E48438019007C25 +:10361000032803D0BEA1C24801F0DBFCC14DA8685D +:10362000401C03D0BAA1C04801F0D3FC607A142139 +:10363000484381190C20085600216A4600911171F7 +:10364000C01901AA6946F0F763FB6A4604201056C8 +:103650000F2801DD012000E0002000994018696872 +:1036600040180102090AA9606079002804D00123EA +:1036700000221846F0F782FA03B0F0BD70B5AC4CEA +:10368000AA4A0B1AA34214D3451AA54211D3934256 +:1036900003D9101A43185B1C0BE0954204D9511A48 +:1036A0000818401C434204E099A1A24801F091FC93 +:1036B0000023184670BD10B50146012300220220E8 +:1036C000F0F75CFA10BD10B50220F0F721FA10BD3A +:1036D00010B5F0F7ACFA10BDF0B58C4D0446E87AA1 +:1036E00083B0002803D18AA1934801F072FC642CB6 +:1036F0004DD3924A00210846121B884147D3904877 +:10370000417F007F814242D18E48007D00283ED11A +:10371000687A1421814F4843824EC519306801AA46 +:1037200000196946F0F7F4FA6946042008560028A3 +:1037300002DD0098401C0090A96800986B680A1888 +:10374000D21A1202804B120A9A4220D8AA7C062A68 +:1037500008D014235A43D2195268511A0902090A8F +:10376000814214D3B068401C05D00120F0F7D0F995 +:103770000020C043B060306800193060A86800992C +:1037800040180002000A7061012003B0F0BD002063 +:1037900003B0F0BDF8B50646401EC4B214205F4920 +:1037A00060434518287C002804D1772058A10001E7 +:1037B00001F00FFC6248017F407F81420CD0634AD8 +:1037C00014234B439B181B7CB3420CD00A290CD00A +:1037D000491CC9B28142F3D15A48017D002961D008 +:1037E000007CB0425ED10020F8BD0021F1E7052940 +:1037F00003D0062901D0072928D101212974C17AD3 +:103800000023027B8A4221D00246565CA64201D1A7 +:10381000012301E0002B04D00A2911D04E1C965D33 +:1038200056540A290ED0491C167BC9B28E42ECD1DF +:10383000002B0BD0117B002906D0117B491E04E020 +:103840000026ECE70021EFE70A211173697C0029CB +:103850002AD06F74C17A0023027B8A4224D0425C52 +:10386000A24201D1012301E0002B04D00A2912D089 +:103870004A1C825C42540A290FD0491C027BC9B2FF +:103880008A42ECD1002B0FD0027B0146002A06D0E1 +:103890000A7B521E04E00022EBE70021EEE70A2239 +:1038A0000A7301E017480027297C01299FD16A7C0F +:1038B000002A9CD10120F8BD70B505461420174A96 +:1038C0000521684380180F4C0174207B0A2811D011 +:1038D000207BE17A401C884203D10DA11C4801F0F5 +:1038E00078FB207B2554207B0A2807D0207B401CB6 +:1038F000207370BDE07A0028EFD0F2E70020F7E7F0 +:1039000012010020A81C0020100100203C1D0020F6 +:103910007372635C72656D2E63000000B81C00203A +:10392000F10600001C1D0020F2060000FF7F841E2F +:103930000020A1071407000033070000FF1FA107A4 +:10394000701C0020901C0020FFFF3F00B01B0020D7 +:103950000902000010B501462022094801F09CF937 +:1039600007490020C877084610BD06490120486174 +:103970000548064A0168914201D100210160704763 +:103980004C1D0020000500401C010020BEBAFECAEC +:10399000064A10705170704704481C22017841712A +:1039A00042700170704770477047704720010020D7 +:1039B00030B50346002002460DE09C5C2546303DB4 +:1039C0000A2D02D30020C04330BD0A256843303899 +:1039D0002018521CD2B28A42EFD330BD70B50D46CA +:1039E000144608E00A2101F0D1F92A193031203AB1 +:1039F000641ED177E4B2002CF4D170BD10B5002361 +:103A000010E0040A00020443A0B2CC5C444020064B +:103A1000000F60400407240C44402006C00C6040A6 +:103A20005B1C9BB29342ECD310BD10B520380C4602 +:103A3000030001F0BFFB33E0DBE41B1F23272C3125 +:103A4000373C41474D5054585C606D7165697478DE +:103A50007C8084888C9094989C9FA2A6AAAEB2B8D1 +:103A6000BCC0C5CACFE9F0F3D3D7F800206800F096 +:103A7000DDF8D6E0206800F0E1F8D2E0206800F040 +:103A8000F5F8CEE0207840B200F092FAC9E0207854 +:103A900040B200F0B0FAC4E02078616840B200F0B3 +:103AA000C3FABEE0207840B200F0D3FAB9E0207843 +:103AB00040B200F0DEFAB4E02078217940B200F0A4 +:103AC000E9FAAEE02078616840B200F013FBA8E0AC +:103AD00000F01FFBA5E0206800F023FBA1E02078A8 +:103AE00000F038FB9DE02068FDF7F5FD99E02068C7 +:103AF000FDF7F5FD95E021792068FDF7F7FD90E0F1 +:103B00002068FDF73FFC8CE02068FDF740FC88E072 +:103B10002078FDF740FC84E0FDF74EFC81E0207842 +:103B2000FDF750FC7DE02078FDF762FC79E020682D +:103B3000FDF77BFC75E02068FDF77DFC71E02068F7 +:103B4000FDF77FFC6DE02068FDF780FC69E02068F0 +:103B5000FDF782FC65E02068FDF784FC61E02068E9 +:103B6000FDF785FC5DE00846EDF7F0FA59E0EFF768 +:103B700070F856E0EFF79DF853E02068EFF7A5F8EE +:103B80004FE0206800F080F84BE0206800F082F8F9 +:103B900047E0206800F083F843E02078A26861687D +:103BA00000F082F83DE0207800F089F839E02078D4 +:103BB00000F091F835E02078616800F098F830E086 +:103BC0002078616800F09FF82BE02179207800F0E0 +:103BD000D5FB26E02068FDF778FE22E02068FEF79E +:103BE0004DF91EE02068FEF731F91AE0204607C8BB +:103BF00000F0B9FC15E0206800F00CFD11E06168F0 +:103C0000206800F037FD0CE0206800F029FF08E094 +:103C100009E003E0FFE700F03BFF02E0206800F06E +:103C200073FF206010BD0120086010BD00210170ED +:103C3000084670470146002008707047EFF3108176 +:103C4000C907C90F72B60278012A01D0012200E02B +:103C5000002201230370002900D162B6002A01D09E +:103C600000207047012040037047E7E7EFF3108121 +:103C7000C907C90F72B600220270002900D162B6CE +:103C800000207047F2E7000038490968C9B20160B6 +:103C9000002070473549C0B2486000207047334962 +:103CA000C0B2886000207047082801D330487047B0 +:103CB000C3002E4818180161426100207047022895 +:103CC00002D32B48401C70472A4A0121C0008018AB +:103CD000016000207047022802D32548401C70472D +:103CE000244A0121C000801841600020704702284A +:103CF00002D31F48401C70471F4A8000C9B2801879 +:103D0000016000207047022802D31948401C704708 +:103D1000194A800080180068C0B20860002070470F +:103D200010B5FF20114AC043906008200021C30055 +:103D30009B1819615961401C1028F8D300200E4AC5 +:103D400005E0022803D383009B18196004E0830078 +:103D50009B181C68E4B21C60401C0428F1D310BD01 +:103D6000FF200249C04388607047000000F5014011 +:103D70000820000000F0014000F8014010B572B6C4 +:103D800000F0DEF800280BD0EDF78AFAFEF783F991 +:103D900000F0BBFA6F490020C86288626E49086073 +:103DA00062B6002010BDF3B5002501200007C06AEF +:103DB00081B0C0430006000E04D168480068401C72 +:103DC00000D1012572B600F0BBF8002801D062B620 +:103DD00087E0EDF7D1F9EDF767FA614C614A002110 +:103DE0002368CB40DB071FD00346CB40DB0718D14D +:103DF0004BB2002B07DA1E07360F083EB608B60096 +:103E0000B618F66904E09E08574FB600F6193668F2 +:103E10009B07DB0EDE4033069B0F012B04D0032BE8 +:103E200002D062B65148FEBD491C2029D8D3019C5E +:103E300001204F49230001F0BDF914222424242439 +:103E4000242424240B0D1012142016181A1C1E2FC3 +:103E5000002400E00124C86314E00224FBE70324EB +:103E6000F9E70424F7E70824F5E70924F3E70A242F +:103E7000F1E70B24EFE70C24EDE70524EBE707243B +:103E800000E00624D06901210002000AC9070843A6 +:103E9000D061002D04D009E062B601200003FEBD10 +:103EA0002C4D3448E862EDF7FFF9A8622A49324800 +:103EB0000860324902980860EDF7F6F9214600F0F3 +:103EC0000BFAFEF7AEF800F00DFC00F087FA01984F +:103ED000EDF7B4F9040062B603D0FFF74FFF2046B8 +:103EE000FEBD0020FEBD10B5044600F029F80028F4 +:103EF00000D001202070002010BD21490860002062 +:103F0000704710B50C46102808D011280BD0122885 +:103F10000CD013280ED00120086010BD6168206805 +:103F2000FFF741FF0AE0FFF729FF07E02068FFF7EE +:103F3000DAFF03E01249206808600020206010BD0D +:103F400005480D490068884201D1012070470020D2 +:103F500070470000000500401C0100200010001008 +:103F600000E100E000ED00E000E400E001100000EE +:103F70004000004000200000BEBAFECA2801002018 +:103F8000040000208107C90E002808DA0007000F8E +:103F900008388008814A80008018C06904E08008E1 +:103FA0007F4A800080180068C8400006800F704774 +:103FB00010B5044600F0DBF8002813D02046FFF7C8 +:103FC000E1FFC0B200F0E1F800280DD07549E2062B +:103FD0000B78D20E01209040002B08D04A68104385 +:103FE000486006E0704810BD6F48401C10BD6F4926 +:103FF0000860002010BD10B5044600F0B8F8002895 +:104000000BD06849E2060B78D20E01209040002BBD +:1040100005D04A6882434A6004E0634810BD6349A2 +:1040200080310860002010BD70B50D46044600F0D8 +:104030009EF800280BD05E480068E206D20E0121EF +:104040009140084000D001202860002070BD5648F3 +:1040500070BD10B5044600F08AF8002807D0E106CC +:10406000C90E0120884052490860002010BD4E480A +:1040700010BD10B5044600F07AF8002808D0E1061B +:10408000C90E012088404A4980310860002010BDD7 +:10409000454810BD70B50D46044600F068F800288C +:1040A00019D0284600F071F8002816D0A007C20EDB +:1040B000FF209040A907090E9140002C10DA22073A +:1040C000120F083A9308354A9B009B18DA6982431D +:1040D0000A43DA610CE0344870BD3348401C70BDBF +:1040E000A3082F4A9B009B181A6882430A431A6050 +:1040F000002070BD70B50C46054600F038F8002869 +:1041000005D02846FFF73EFF2070002070BD2648EE +:1041100070BDBFF34F8F21492648C860BFF34F8F52 +:10412000FEE770B51F4C05462178012000290ED10D +:10413000207072B600F0F8F81C4E8036316881436A +:10414000616000F0F1F8C043306062B60020287072 +:10415000002070BD13490A78002A06D0002804D137 +:10416000124A48681060002008700020704710B59F +:104170000446202805DA00F0D7F80121A1400842C2 +:1041800001D0002010BD012010BD012803D003285C +:1041900001D00020704701207047000000ED00E0D2 +:1041A00000E400E02C0100200120000000E100E01C +:1041B00000E200E00400FA05F8B504468007002597 +:1041C0000126002804DA5A48C563C66302208443E6 +:1041D000E00404D55748C563C66380148443600077 +:1041E00003D55548456080058443E00504D5534810 +:1041F000C563C66380158443A00404D55048C563D5 +:10420000C6634014844360042704C00FF90F88423A +:1042100003D04CA1612000F0DCFEB80F0AD04E495B +:10422000CD634E48C563C563CE63C663C6630320D2 +:104230008003844320050AD5494FFD632F20ECF706 +:10424000B3FFFE632F20ECF7AFFFF8148443002C7C +:1042500003DAFFF765FD640064084248044203D0B6 +:1042600038A1902000F0B5FEF8BDF0B500210A4657 +:10427000FF230446CC40E4072AD04CB2E606F60EF3 +:104280000125B540384E3560384E3560002C11DAC6 +:1042900025072D0F083DAE08354DB6007619F56996 +:1042A000A407E70E1C46BC40A5431446BC4025436A +:1042B000F5610DE0A6082F4DB60076193568A40704 +:1042C000E70E1C46BC40A5431446BC402543356060 +:1042D000491C2029CDD3F0BD70B5274C0D46206078 +:1042E000FFF76AFF2068FFF7C0FF2846EEF77AFD68 +:1042F000FDF7D6FAFDF782F9FFF712FDFDF7D5F8C5 +:10430000EEF7FEFB00F06AF870BD10B51A4C20689D +:10431000FFF752FF2068FFF7A8FFFFF701FDEEF758 +:10432000E6FD0020206010BD1348006870470000C3 +:10433000C01F0040C0CF004000E50140C08F0040DA +:10434000C0DF00407372635C736F635F636F6E66A0 +:1043500069672E6300000000C0EF0040C0FF00400E +:10436000C0BF0040FEFF0FFC80E100E080E200E003 +:1043700000ED00E000E400E03401002070B500240E +:1043800002460D4620462146002A1ED0012A04D0AE +:10439000022A04D0032A1ED103E0012002E00220F9 +:1043A00013E003202B0000F005FF07160507090B9B +:1043B0000D0F1600012108E0022106E0032104E0B0 +:1043C000042102E0052100E00621FDF7D9FE0028C6 +:1043D00001D0204670BD0724FBE70000B148002152 +:1043E00001708170704770B5AF4D01236B60AF4BAA +:1043F0001C68002CFCD0002407E00E6806601E68D4 +:10440000002EFCD0001D091D641C9442F5D3002031 +:10441000686018680028FCD070BD70B5A14C0D46CE +:104420006178884203D0A2A16C2000F0D2FD2B005D +:1044300000F0C0FE094F0625254F4F4F4F464F0055 +:104440002078022803D09AA1702000F0C2FD03203A +:104450002070A078022802D0012804D008E0A068CB +:1044600000F0CEFB04E02269E168A068FFF7BBFF23 +:104470000020A070FDF724FE0420207070BDFDF721 +:10448000D4FE01466068FFF7F9F805462078022857 +:1044900003D087A1842000F09CFD894A89498A487D +:1044A000954206D8401BC86086496078FEF737FB06 +:1044B00070BD854202D802224A71F3E7032003E06F +:1044C000A0780028FAD10220FDF704FD00F0E0F802 +:1044D00070BD77A1AD2000F07CFD70BD70B50546C4 +:1044E000FDF7A3FE6F4C60602078012803D070A117 +:1044F000B42000F06EFD73490220087000220A719A +:104500008D6003224A71704ACA6020706078FEF79D +:1045100006FB70BD10B5634CA078002802D120784E +:10452000002801D0112010BD6848FDF710FE607012 +:104530006078002803D001202070002010BD0320E7 +:1045400010BD10B50124020B64040121604BA04290 +:1045500002D29140186802E0203A58689140084021 +:1045600000D0012010BDF8B50E46910005464F1948 +:1045700014463F1F009100F054FB009980028919F6 +:10458000091FB14201D2012200E00022002C03D019 +:10459000FF2101318C4201D90920F8BD4D498D42DE +:1045A00019D3AF4217D3854205D2874203D228469A +:1045B0003043800701D01020F8BD8E420BD3002A73 +:1045C00009D12846FFF7BDFF002804D13846FFF780 +:1045D000B8FF002801D00F20F8BD3F483F490068D0 +:1045E000884205D0224631462846FFF7FCFE0FE000 +:1045F000FFF790FF0028EFD12A480121C6608560AF +:10460000046181702046312148431430FFF766FF72 +:104610000020F8BD10B504462E48800A84420BD312 +:1046200000F0FFFAA04201D8102010BDA0020446FD +:10463000FFF787FF002801D00F2010BD264827492B +:104640000068884203D0204600F0DAFA0AE0FFF75B +:1046500061FF0028F1D11348022184608170204855 +:10466000FFF73CFF002010BD1A48010B01208840D5 +:10467000401E704700B50B460246FFF7F5FF10429B +:1046800001D00F2000BD124802604360002000BD31 +:1046900010B5044C6078FDF7AEFD00202070A070CE +:1046A00010BD00003801002000E5014000E4014099 +:1046B0007372635C736F635F666C6173682E630013 +:1046C000307500006C1D0020D0FB01001B44010070 +:1046D00000060040006001001C010020BEBAFECAB6 +:1046E00010540000F74805218170002101704170CD +:1046F000C1708160704710B5F3490A78022A07D06B +:10470000CA681018C860C8689638FEF76FFF10BDF9 +:104710008A68101888608868F6E70378EB49EC4AE5 +:10472000002B02D0012B10D014E00379002B01D014 +:10473000012B0FD14379002B01D0012B0AD18368C3 +:10474000643B8B4206D2C06810E00379002B03D093 +:10475000012B01D0002070474379002B01D0012BA1 +:10476000F8D1C368643B8B42F4D280689042F1D8A0 +:1047700001207047F8B504460226FEF7BDFB00682D +:10478000002803D0D3A1BE2000F023FC0127CD4D8B +:10479000002C08D02078002817D0012805D0022846 +:1047A00011D0032813D02F710DE06068C82808D3FA +:1047B000FEF792FF002804D06068FFF79CFF0126F7 +:1047C00003E0002601E000F0F9F93046F8BD287852 +:1047D0000028F8D16068FFF7A0FF0028E3D06068E8 +:1047E0000078002826D0A878042803D0B9A1F820A2 +:1047F00000F0EFFBB44F00203870606800790128AA +:1048000000D00020387160684079002837D003203C +:10481000787160688168E868FDF79EFFB86060683D +:10482000C0689630F8600320A870A749E878FEF7C2 +:1048300076F9C8E7A4480221017061680979012965 +:1048400019D00021017161684979002915D003212F +:10485000417161688968963181606168C968C16029 +:10486000C068984C14346060FDF7DFFC20606F7006 +:104870000220A870A7E70321E4E70221E8E702206D +:10488000C6E7F8B58F4C0D46E178884204D0FF208A +:1048900090A11A3000F09DFB28468A4F0025012682 +:1048A0001437030000F086FC090612375A7C8D97F6 +:1048B000C4A0C400A078032807D0A078022804D0A0 +:1048C000FF2084A11E3000F084FBF8BDA0780328EF +:1048D00007D0A078022804D0FF207EA1223000F06B +:1048E00078FB0420A07025712078002810D1FFF7F4 +:1048F00002FFE078FDF74FFFE0607D49886A7D4A5E +:10490000024022617B4AD24310408862002050E07E +:1049100000F054F9F8BDA078032807D0A078022849 +:1049200004D0FF206BA1453000F053FB2078002815 +:1049300002D000F04FF9F8BDA07803281FD1042061 +:104940002AE0091A6048C1600146E078FEF7E7F8FE +:10495000F8BD0420FDF7BEFAA570F8BDA0780328C5 +:1049600007D0A078022804D0FF205AA1663000F0BA +:1049700030FB20780028DCD1A07803280BD0FDF78D +:1049800054FC01463868FEF779FE0028E1DB7968BF +:104990008142DEDBD5E70520FDF79CFAA670F8BD65 +:1049A000A078042804D0FF204AA1873000F011FB32 +:1049B0000220A1688847FFF7DDFEFF260546C036C6 +:1049C00042E0A078042804D0FF2042A18C3000F0FF +:1049D00000FB0120EDE7A078042899D0FF203DA13D +:1049E000913000F0F6FA93E7A07804280AD06078B6 +:1049F000002802D0A078022804D0FF2035A19630EC +:104A000000F0E7FA2078002893D12079002804D01C +:104A10000620FDF75FFA2571C0E76078002805D011 +:104A20002949E078FEF77BF86570F8BD0720B3E709 +:104A3000FF2028A1B13046E7002D0AD0012D06D075 +:104A400024A1304600F0C5FA022DF5D1F8BD0420AE +:104A500000E00320A1688847FFF78CFE0546F3E7D6 +:104A600070B5050005D0174CA078052803D011209B +:104A700070BD102070BD2048FDF769FBE070E07844 +:104A8000002803D0A5600020A07070BD032070BD79 +:104A900010B50C480178002901D0112010BD817893 +:104AA00005292BD0817801292AD08178002927D0A7 +:104AB000012101708178012922D0807800281FD03F +:104AC00020E000004C0100207C1D00203D860100FC +:104AD000FF1FA1077372635C736F635F7261646928 +:104AE0006F5F74696D65736C6F742E6300000000F6 +:104AF0000005004002810080834801000F2010BDA6 +:104B000000F068F8002010BDF8B5394E0446B078C2 +:104B1000002801D001280DD1002C0DD02046FFF730 +:104B2000FCFD00280AD02078324D002808D0B0784B +:104B3000012823D00F20F8BD1020F8BD0720F8BDB4 +:104B400002272F702079012814D000202871607965 +:104B5000002811D003206871A0689630A860E06832 +:104B6000E860E868224C14346060FDF75EFB20606A +:104B7000B77019E00320E9E70220ECE70020287075 +:104B80002079012816D0002028716079002813D0E0 +:104B900003206871A168F068FDF7DEFDA860E06899 +:104BA0009630E8600320B0701249F078FDF7B7FF47 +:104BB0000020F8BD0320E7E70220EAE710B50E4821 +:104BC000816A0E4A11400A4A126911438162FDF757 +:104BD00077FA10BD10B5064CE078FDF70CFB082005 +:104BE000FDF778F90520A07000202070607010BDDE +:104BF0004C0100207C1D002000050040FD7EFF7F51 +:104C00000A4A022151600A490B68002BFCD09060CF +:104C100008680028FCD00020506008680028FCD0FC +:104C200070470120000740697047000000E501401F +:104C300000E4014070477047704770477047034673 +:104C400010B50B439B070FD1042A0DD308C810C918 +:104C5000121FA342F8D018BA21BA884201D9012004 +:104C600010BD0020C04310BD002A03D0D30703D0DD +:104C7000521C07E0002010BD03780C78401C491C32 +:104C80001B1B07D103780C78401C491C1B1B01D14E +:104C9000921EF1D1184610BDF8B5042A2CD3830713 +:104CA00012D00B78491C0370401C521E83070BD096 +:104CB0000B78491C0370401C521E830704D00B78EC +:104CC000491C0370401C521E8B079B0F05D0C91A4C +:104CD000DF002023DE1B08C90AE0ECF775FAF8BDF7 +:104CE0001D4608C9FD401C46B4402C4310C0121F8D +:104CF000042AF5D2F308C91A521EF0D40B78491CC5 +:104D00000370401C521EEAD40B78491C0370401CEF +:104D1000521EE4D409780170F8BD01E004C0091FF7 +:104D20000429FBD28B0701D50280801CC90700D063 +:104D30000270704700290BD0C30702D00270401CDC +:104D4000491E022904D3830702D50280801C891ED4 +:104D5000E3E70022EEE70022DFE70378C278194696 +:104D6000437812061B0219438378C0781B04194349 +:104D700011430902090A000608437047020A087035 +:104D80004A70020C8A70020ECA7070470022030932 +:104D90008B4273D3030A8B4258D3030B8B423CD311 +:104DA000030C8B4221D312E003460B437FD4002235 +:104DB00043088B4274D303098B425FD3030A8B42AF +:104DC00044D3030B8B4228D3030C8B420DD3FF2219 +:104DD000090212BA030C8B4202D31212090265D0E7 +:104DE000030B8B4219D300E0090AC30B8B4201D39A +:104DF000CB03C01A5241830B8B4201D38B03C01AE1 +:104E00005241430B8B4201D34B03C01A5241030B57 +:104E10008B4201D30B03C01A5241C30A8B4201D308 +:104E2000CB02C01A5241830A8B4201D38B02C01AB3 +:104E30005241430A8B4201D34B02C01A5241030A2A +:104E40008B4201D30B02C01A5241CDD2C3098B420F +:104E500001D3CB01C01A524183098B4201D38B018C +:104E6000C01A524143098B4201D34B01C01A52412F +:104E700003098B4201D30B01C01A5241C3088B4274 +:104E800001D3CB00C01A524183088B4201D38B005F +:104E9000C01A524143088B4201D34B00C01A524101 +:104EA000411A00D201465241104670475DE0CA0FD8 +:104EB00000D04942031000D34042534000229C4698 +:104EC00003098B422DD3030A8B4212D3FC228901A2 +:104ED00012BA030A8B420CD3890192118B4208D378 +:104EE000890192118B4204D389013AD0921100E0DA +:104EF0008909C3098B4201D3CB01C01A52418309EE +:104F00008B4201D38B01C01A524143098B4201D31A +:104F10004B01C01A524103098B4201D30B01C01A45 +:104F20005241C3088B4201D3CB00C01A52418308BF +:104F30008B4201D38B00C01A5241D9D243088B4215 +:104F400001D34B00C01A5241411A00D201466346B8 +:104F500052415B10104601D34042002B00D549421C +:104F6000704763465B1000D3404201B50020C04645 +:104F7000C04602BD704770477047704710B500F0DB +:104F800059F810BD30B58C180278401C13071B0F60 +:104F900001D10378401C120906D10278401C03E0BD +:104FA0000578401C0D70491C5B1EF9D101E00B70A7 +:104FB000491C521EFBD1A142E6D3002030BD0000A7 +:104FC00001231B68134B1860134B1960134B1A60B5 +:104FD0007047134A134B13607246053AF0E7114AC3 +:104FE0000F4B1B689A420ED10D4B002018600198A0 +:104FF0000D4B04B598470CBC9E460246029800999A +:105000000A4B1B68184706980599094B1B68DB6813 +:105010001847000070010020740100207801002072 +:1050200068010020EFBEADDE5539010028010020E7 +:10503000040000201D481E497047FFF7FBFFECF7F6 +:105040007DF800BD01200007C06AC0B2FF2804D16E +:10505000184819490968884202D01848184901605F +:10506000184819490968884203D1184A13605B68D7 +:10507000184700BD20BFFDE7124813490968884260 +:105080000ED1134B18680B498842F3D080F308887F +:105090001049884204DD1048026802210A43026078 +:1050A0000E4880470E4880470E480047901D00205C +:1050B000901D0020FFFFFFFF001000102C05004096 +:1050C0000800000000100000000000200400002084 +:1050D0000060010000200020240500406B39010021 +:1050E00045500100C14F01001348704502D1EFF354 +:1050F000098101E0EFF308818869023800781028FF +:1051000014DB202810DB23280BDB0C4A12680C4B25 +:105110009A4203D1602804DB0A4A10470220086043 +:105120007047094A10470000084A1047084A1268A9 +:105130002C32126810470000FDFFFFFF1C01002009 +:10514000BEBAFECAAD1200002B3A0100033F0100B7 +:10515000040000200D4B0E4908470E4B0C49084730 +:105160000D4B0B4908470D4B094908470C4B0849A3 +:1051700008470C4B064908470B4B054908470B4BA2 +:10518000034908470A4B024908470000052E000062 +:10519000E13D0000BD2F0000873C0000353C0000D1 +:1051A000E9390000B912000063170000493D000012 +:1051B000AB2B000030B47446641E2578641CAB42EF +:1051C00000D21D46635D5B00E31830BC1847000049 +:1051D00002490020C861203908727047E0030020AE +:1051E00000020207FFFFFFFF0000FFFF01020408AB +:1051F00010204080555555D6BE898E00F401FA0026 +:10520000960064004B0032001E00140001000300F1 +:10521000000001000000000000000000000000008D +:1052200000000000870000000000000000000000F7 +:105230000000000000000203040500000E0F000043 +:10524000705201000800002010000000041100004E +:10525000805201001800002064010000844F01000A +:10526000A45201007C010020141C00002011000049 +:105270000249022208681042FCD0704700E200E0B8 +:10528000E1078F56FF9900CD29022B01360100015D +:1052900000EC3720FB349B5F8074800010027001AB +:0452A000E4C54F0111 +:00000001FF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_MCU_NRF51822/PeripheralNames.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,58 @@ +/* mbed Microcontroller Library + * Copyright (c) 2013 Nordic Semiconductor + * + * 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 MBED_PERIPHERALNAMES_H +#define MBED_PERIPHERALNAMES_H + +#include "cmsis.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define STDIO_UART_TX TX_PIN_NUMBER +#define STDIO_UART_RX RX_PIN_NUMBER +#define STDIO_UART UART_0 + +typedef enum { + UART_0 = (int)NRF_UART0_BASE +} UARTName; + + +typedef enum { + SPI_0 = (int)NRF_SPI0_BASE, + SPI_1 = (int)NRF_SPI1_BASE, + SPIS = (int)NRF_SPIS1_BASE +} SPIName; + +typedef enum { + PWM_1 = 0, + PWM_2 +} PWMName; + +typedef enum { + I2C_0 = (int)NRF_TWI0_BASE, + I2C_1 = (int)NRF_TWI1_BASE +} I2CName; + +typedef enum { + ADC0_0 = (int)NRF_ADC_BASE +} ADCName; + +#ifdef __cplusplus +} +#endif + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_MCU_NRF51822/PortNames.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,30 @@ +/* mbed Microcontroller Library + * Copyright (c) 2013 Nordic Semiconductor + * + * 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 MBED_PORTNAMES_H +#define MBED_PORTNAMES_H + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + Port0 = 0 //GPIO pins 0-31 +} PortName; + +#ifdef __cplusplus +} +#endif +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_MCU_NRF51822/TARGET_ARCH_BLE/PinNames.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,177 @@ +/* mbed Microcontroller Library + * Copyright (c) 2013 Nordic Semiconductor + * + * 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 MBED_PINNAMES_H +#define MBED_PINNAMES_H + +#include "cmsis.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + PIN_INPUT, + PIN_OUTPUT +} PinDirection; + +#define PORT_SHIFT 3 + +typedef enum { + p0 = 0, + p1 = 1, + p2 = 2, + p3 = 3, + p4 = 4, + p5 = 5, + p6 = 6, + p7 = 7, + p8 = 8, + p9 = 9, + p10 = 10, + p11 = 11, + p12 = 12, + p13 = 13, + p14 = 14, + p15 = 15, + p16 = 16, + p17 = 17, + p18 = 18, + p19 = 19, + p20 = 20, + p21 = 21, + p22 = 22, + p23 = 23, + p24 = 24, + p25 = 25, + p26 = 26, + p27 = 27, + p28 = 28, + p29 = 29, + p30 = 30, +// p31=31, + + P0_0 = p0, + P0_1 = p1, + P0_2 = p2, + P0_3 = p3, + P0_4 = p4, + P0_5 = p5, + P0_6 = p6, + P0_7 = p7, + + P0_8 = p8, + P0_9 = p9, + P0_10 = p10, + P0_11 = p11, + P0_12 = p12, + P0_13 = p13, + P0_14 = p14, + P0_15 = p15, + + P0_16 = p16, + P0_17 = p17, + P0_18 = p18, + P0_19 = p19, + P0_20 = p20, + P0_21 = p21, + P0_22 = p22, + P0_23 = p23, + + P0_24 = p24, + P0_25 = p25, + P0_26 = p26, + P0_27 = p27, + P0_28 = p28, + P0_29 = p29, + P0_30 = p30, + + LED1 = p30, + LED2 = p14, + LED3 = p15, + LED4 = p16, + + RX_PIN_NUMBER = p7, + TX_PIN_NUMBER = p8, + CTS_PIN_NUMBER = p26, + RTS_PIN_NUMBER = p27, + + // mBed interface Pins + USBTX = TX_PIN_NUMBER, + USBRX = RX_PIN_NUMBER, + + SPI_PSELMOSI0 = p25, + SPI_PSELMISO0 = p28, + SPI_PSELSS0 = p24, + SPI_PSELSCK0 = p29, + + SPI_PSELMOSI1 = p12, + SPI_PSELMISO1 = p13, + SPI_PSELSS1 = p14, + SPI_PSELSCK1 = p15, + + SPIS_PSELMOSI = p12, + SPIS_PSELMISO = p13, + SPIS_PSELSS = p14, + SPIS_PSELSCK = p15, + + I2C_SDA0 = p5, + I2C_SCL0 = p6, + + I2C_SDA1 = p13, + I2C_SCL1 = p15, + + D0 = p7, + D1 = p8, + D2 = p9, + D3 = p10, + D4 = p11, + D5 = p12, + D6 = p13, + D7 = p17, + + D8 = p18, + D9 = p23, + D10 = p24, + D11 = p25, + D12 = p28, + D13 = p29, + + D14 = p5, + D15 = p6, + + A0 = p1, + A1 = p2, + A2 = p3, + A3 = p4, + A4 = p5, + A5 = p6, + + // Not connected + NC = (int)0xFFFFFFFF +} PinName; + +typedef enum { + PullNone = 0, + PullDown = 1, + PullUp = 3, + PullDefault = PullUp +} PinMode; + +#ifdef __cplusplus +} +#endif + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_MCU_NRF51822/TARGET_ARCH_BLE/device.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,57 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * 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 MBED_DEVICE_H +#define MBED_DEVICE_H + +#define DEVICE_PORTIN 1 +#define DEVICE_PORTOUT 1 +#define DEVICE_PORTINOUT 1 + +#define DEVICE_INTERRUPTIN 1 + +#define DEVICE_ANALOGIN 1 +#define DEVICE_ANALOGOUT 0 + +#define DEVICE_SERIAL 1 + +#define DEVICE_I2C 1 +#define DEVICE_I2CSLAVE 0 + +#define DEVICE_SPI 1 +#define DEVICE_SPISLAVE 1 + +#define DEVICE_CAN 0 + +#define DEVICE_RTC 0 + +#define DEVICE_ETHERNET 0 + +#define DEVICE_PWMOUT 1 + +#define DEVICE_SEMIHOST 0 +#define DEVICE_LOCALFILESYSTEM 0 + +#define DEVICE_SLEEP 1 + +#define DEVICE_DEBUG_AWARENESS 0 + +#define DEVICE_STDIO_MESSAGES 0 + +#define DEVICE_ERROR_PATTERN 1 + +#include "objects.h" + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_MCU_NRF51822/gpio_object.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,52 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * 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 MBED_GPIO_OBJECT_H +#define MBED_GPIO_OBJECT_H + +#include "mbed_assert.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + PinName pin; + uint32_t mask; + + __IO uint32_t *reg_dir; + __IO uint32_t *reg_set; + __IO uint32_t *reg_clr; + __I uint32_t *reg_in; +} gpio_t; + +static inline void gpio_write(gpio_t *obj, int value) { + MBED_ASSERT(obj->pin != (PinName)NC); + if (value) + *obj->reg_set = obj->mask; + else + *obj->reg_clr = obj->mask; +} + +static inline int gpio_read(gpio_t *obj) { + MBED_ASSERT(obj->pin != (PinName)NC); + return ((*obj->reg_in & obj->mask) ? 1 : 0); +} + +#ifdef __cplusplus +} +#endif + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_MCU_NRF51822/objects.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,73 @@ +/* mbed Microcontroller Library + * Copyright (c) 2013 Nordic Semiconductor + * + * 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 MBED_OBJECTS_H +#define MBED_OBJECTS_H + +#include "cmsis.h" +#include "PortNames.h" +#include "PeripheralNames.h" +#include "PinNames.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct serial_s { + NRF_UART_Type *uart; + int index; +}; + +struct spi_s { + NRF_SPI_Type *spi; + NRF_SPIS_Type *spis; +}; + +struct port_s { + __IO uint32_t *reg_cnf; + __IO uint32_t *reg_out; + __I uint32_t *reg_in; + PortName port; + uint32_t mask; +}; + +struct pwmout_s { + PWMName pwm; + PinName pin; +}; + +struct i2c_s { + NRF_TWI_Type *i2c; + PinName sda; + PinName scl; + int freq; +}; + +struct analogin_s { + ADCName adc; + uint8_t adc_pin; +}; + +struct gpio_irq_s { + uint32_t ch; +}; + +#include "gpio_object.h" + +#ifdef __cplusplus +} +#endif + +#endif
--- a/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,385 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_COMMON BLE SoftDevice Common - @{ - @defgroup ble_api Events, type definitions and API calls - @{ - - @brief Module independent events, type definitions and API calls for the S110 SoftDevice. - - */ - -#ifndef BLE_H__ -#define BLE_H__ - -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_gap.h" -#include "ble_l2cap.h" -#include "ble_gatt.h" -#include "ble_gattc.h" -#include "ble_gatts.h" - -/** @addtogroup BLE_COMMON_ENUMERATIONS Enumerations - * @{ */ - -/** - * @brief Common API SVC numbers. - */ -enum BLE_COMMON_SVCS -{ - SD_BLE_ENABLE = BLE_SVC_BASE, /**< Enable and initialize the BLE stack */ - SD_BLE_EVT_GET, /**< Get an event from the pending events queue. */ - SD_BLE_TX_BUFFER_COUNT_GET, /**< Get the total number of available application transmission buffers from the stack. */ - SD_BLE_UUID_VS_ADD, /**< Add a Vendor Specific UUID. */ - SD_BLE_UUID_DECODE, /**< Decode UUID bytes. */ - SD_BLE_UUID_ENCODE, /**< Encode UUID bytes. */ - SD_BLE_VERSION_GET, /**< Get the local version information (company id, Link Layer Version, Link Layer Subversion). */ - SD_BLE_USER_MEM_REPLY, /**< User Memory Reply. */ - SD_BLE_OPT_SET, /**< Set a BLE option. */ - SD_BLE_OPT_GET, /**< Get a BLE option. */ -}; - -/** @} */ - -/** @addtogroup BLE_COMMON_DEFINES Defines - * @{ */ - -/** @brief Required pointer alignment for BLE Events. -*/ -#define BLE_EVTS_PTR_ALIGNMENT 4 - -/** @defgroup BLE_USER_MEM_TYPES User Memory Types - * @{ */ -#define BLE_USER_MEM_TYPE_INVALID 0x00 /**< Invalid User Memory Types. */ -#define BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES 0x01 /**< User Memory for GATTS queued writes. */ -/** @} */ - -/** @brief Maximum number of Vendor Specific UUIDs. -*/ -#define BLE_UUID_VS_MAX_COUNT 10 - -/** @} */ - -/** @addtogroup BLE_COMMON_STRUCTURES Structures - * @{ */ - -/** - * @brief BLE Module Independent Event IDs. - */ -enum BLE_COMMON_EVTS -{ - BLE_EVT_TX_COMPLETE = BLE_EVT_BASE, /**< Transmission Complete. */ - BLE_EVT_USER_MEM_REQUEST, /**< User Memory request. */ - BLE_EVT_USER_MEM_RELEASE /**< User Memory release. */ -}; - -/**@brief User Memory Block. */ -typedef struct -{ - uint8_t* p_mem; /**< Pointer to the start of the user memory block. */ - uint16_t len; /**< Length in bytes of the user memory block. */ -} ble_user_mem_block_t; - -/** - * @brief TX complete event. - */ -typedef struct -{ - uint8_t count; /**< Number of packets transmitted. */ -} ble_evt_tx_complete_t; - -/**@brief Event structure for BLE_EVT_USER_MEM_REQUEST. */ -typedef struct -{ - uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ -} ble_evt_user_mem_request_t; - -/**@brief Event structure for BLE_EVT_USER_MEM_RELEASE. */ -typedef struct -{ - uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ - ble_user_mem_block_t mem_block; /**< User memory block */ -} ble_evt_user_mem_release_t; - - -/**@brief Event structure for events not associated with a specific function module. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which this event occured. */ - union - { - ble_evt_tx_complete_t tx_complete; /**< Transmission Complete. */ - ble_evt_user_mem_request_t user_mem_request; /**< User Memory Request Event Parameters. */ - ble_evt_user_mem_release_t user_mem_release; /**< User Memory Release Event Parameters. */ - } params; -} ble_common_evt_t; - -/**@brief BLE Event header. */ -typedef struct -{ - uint16_t evt_id; /**< Value from a BLE_<module>_EVT series. */ - uint16_t evt_len; /**< Length in octets excluding this header. */ -} ble_evt_hdr_t; - -/**@brief Common BLE Event type, wrapping the module specific event reports. */ -typedef struct -{ - ble_evt_hdr_t header; /**< Event header. */ - union - { - ble_common_evt_t common_evt; /**< Common Event, evt_id in BLE_EVT_* series. */ - ble_gap_evt_t gap_evt; /**< GAP originated event, evt_id in BLE_GAP_EVT_* series. */ - ble_l2cap_evt_t l2cap_evt; /**< L2CAP originated event, evt_id in BLE_L2CAP_EVT* series. */ - ble_gattc_evt_t gattc_evt; /**< GATT client originated event, evt_id in BLE_GATTC_EVT* series. */ - ble_gatts_evt_t gatts_evt; /**< GATT server originated event, evt_id in BLE_GATTS_EVT* series. */ - } evt; -} ble_evt_t; - - -/** - * @brief Version Information. - */ -typedef struct -{ - uint8_t version_number; /**< Link Layer Version number for BT 4.1 spec is 7 (https://www.bluetooth.org/en-us/specification/assigned-numbers/link-layer). */ - uint16_t company_id; /**< Company ID, Nordic Semiconductor's company ID is 89 (0x0059) (https://www.bluetooth.org/apps/content/Default.aspx?doc_id=49708). */ - uint16_t subversion_number; /**< Link Layer Sub Version number, corresponds to the SoftDevice Config ID or Firmware ID (FWID). */ -} ble_version_t; - -/**@brief Common BLE Option type, wrapping the module specific options. */ -typedef union -{ - ble_gap_opt_t gap; /**< GAP option, opt_id in BLE_GAP_OPT_* series. */ -} ble_opt_t; - -/** - * @brief BLE GATTS init options - */ -typedef struct -{ - ble_gatts_enable_params_t gatts_enable_params; /**< GATTS init options @ref ble_gatts_enable_params_t. */ -} ble_enable_params_t; - -/** @} */ - -/** @addtogroup BLE_COMMON_FUNCTIONS Functions - * @{ */ - -/**@brief Enable the bluetooth stack - * - * @param[in] p_ble_enable_params Pointer to ble_enable_params_t - * - * @details This call initializes the bluetooth stack, no other BLE related call can be called before this one has been executed. - * - * @return @ref NRF_SUCCESS BLE stack has been initialized successfully - * @return @ref NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. - */ -SVCALL(SD_BLE_ENABLE, uint32_t, sd_ble_enable(ble_enable_params_t * p_ble_enable_params)); - -/**@brief Get an event from the pending events queue. - * - * @param[in] p_dest Pointer to buffer to be filled in with an event, or NULL to retrieve the event length. This buffer <b>must be 4-byte aligned in memory</b>. - * @param[in, out] p_len Pointer the length of the buffer, on return it is filled with the event length. - * - * @details This call allows the application to pull a BLE event from the BLE stack. The application is signalled that an event is - * available from the BLE Stack by the triggering of the SD_EVT_IRQn interrupt (mapped to IRQ 22). - * The application is free to choose whether to call this function from thread mode (main context) or directly from the Interrupt Service Routine - * that maps to SD_EVT_IRQn. In any case however, and because the BLE stack runs at a higher priority than the application, this function should be called - * in a loop (until @ref NRF_ERROR_NOT_FOUND is returned) every time SD_EVT_IRQn is raised to ensure that all available events are pulled from the stack. - * Failure to do so could potentially leave events in the internal queue without the application being aware of this fact. - * Sizing the p_dest buffer is equally important, since the application needs to provide all the memory necessary for the event to be copied into - * application memory. If the buffer provided is not large enough to fit the entire contents of the event, @ref NRF_ERROR_DATA_SIZE will be returned - * and the application can then call again with a larger buffer size. - * Please note that because of the variable length nature of some events, sizeof(ble_evt_t) will not always be large enough to fit certain events, - * and so it is the application's responsability to provide an amount of memory large enough so that the relevant event is copied in full. - * The application may "peek" the event length by providing p_dest as a NULL pointer and inspecting the value of *p_len upon return. - * - * @note The pointer supplied must be aligned to the extend defined by @ref BLE_EVTS_PTR_ALIGNMENT - * - * @return @ref NRF_SUCCESS Event pulled and stored into the supplied buffer. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. - * @return @ref NRF_ERROR_NOT_FOUND No events ready to be pulled. - * @return @ref NRF_ERROR_DATA_SIZE Event ready but could not fit into the supplied buffer. - */ -SVCALL(SD_BLE_EVT_GET, uint32_t, sd_ble_evt_get(uint8_t* p_dest, uint16_t *p_len)); - - -/**@brief Get the total number of available application transmission buffers in the BLE stack. - * - * @details This call allows the application to obtain the total number of - * transmission buffers available for application data. Please note that - * this does not give the number of free buffers, but rather the total amount of them. - * The application has two options to handle its own application transmission buffers: - * - Use a simple arithmetic calculation: at boot time the application should use this function - * to find out the total amount of buffers available to it and store it in a variable. - * Every time a packet that consumes an application buffer is sent using any of the - * exposed functions in this BLE API, the application should decrement that variable. - * Conversely, whenever a @ref BLE_EVT_TX_COMPLETE event is received by the application - * it should retrieve the count field in such event and add that number to the same - * variable storing the number of available packets. - * This mechanism allows the application to be aware at any time of the number of - * application packets available in the BLE stack's internal buffers, and therefore - * it can know with certainty whether it is possible to send more data or it has to - * wait for a @ref BLE_EVT_TX_COMPLETE event before it proceeds. - * - Choose to simply not keep track of available buffers at all, and instead handle the - * @ref BLE_ERROR_NO_TX_BUFFERS error by queueing the packet to be transmitted and - * try again as soon as a @ref BLE_EVT_TX_COMPLETE event arrives. - * - * The API functions that <b>may</b> consume an application buffer depending on - * the parameters supplied to them can be found below: - * - * - @ref sd_ble_gattc_write (write witout response only) - * - @ref sd_ble_gatts_hvx (notifications only) - * - @ref sd_ble_l2cap_tx (all packets) - * - * @param[out] p_count Pointer to a uint8_t which will contain the number of application transmission buffers upon - * successful return. - * - * @return @ref NRF_SUCCESS Number of application transmission buffers retrieved successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_TX_BUFFER_COUNT_GET, uint32_t, sd_ble_tx_buffer_count_get(uint8_t* p_count)); - - -/**@brief Add a Vendor Specific UUID. - * - * @details This call enables the application to add a vendor specific UUID to the BLE stack's table, - * for later use all other modules and APIs. This then allows the application to use the shorter, - * 24-bit @ref ble_uuid_t format when dealing with both 16-bit and 128-bit UUIDs without having to - * check for lengths and having split code paths. The way that this is accomplished is by extending the - * grouping mechanism that the Bluetooth SIG standard base UUID uses for all other 128-bit UUIDs. The - * type field in the @ref ble_uuid_t structure is an index (relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN) - * to the table populated by multiple calls to this function, and the uuid field in the same structure - * contains the 2 bytes at indices 12 and 13. The number of possible 128-bit UUIDs available to the - * application is therefore the number of Vendor Specific UUIDs added with the help of this function times 65536, - * although restricted to modifying bytes 12 and 13 for each of the entries in the supplied array. - * - * @note Bytes 12 and 13 of the provided UUID will not be used internally, since those are always replaced by - * the 16-bit uuid field in @ref ble_uuid_t. - * - * - * @param[in] p_vs_uuid Pointer to a 16-octet (128-bit) little endian Vendor Specific UUID disregarding - * bytes 12 and 13. - * @param[out] p_uuid_type Pointer where the type field in @ref ble_uuid_t corresponding to this UUID will be stored. - * - * @return @ref NRF_SUCCESS Successfully added the Vendor Specific UUID. - * @return @ref NRF_ERROR_INVALID_ADDR If p_vs_uuid or p_uuid_type is NULL or invalid. - * @return @ref NRF_ERROR_NO_MEM If there are no more free slots for VS UUIDs. - * @return @ref NRF_ERROR_FORBIDDEN If p_vs_uuid has already been added to the VS UUID table. - */ -SVCALL(SD_BLE_UUID_VS_ADD, uint32_t, sd_ble_uuid_vs_add(ble_uuid128_t const * const p_vs_uuid, uint8_t * const p_uuid_type)); - - -/** @brief Decode little endian raw UUID bytes (16-bit or 128-bit) into a 24 bit @ref ble_uuid_t structure. - * - * @details The raw UUID bytes excluding bytes 12 and 13 (i.e. bytes 0-11 and 14-15) of p_uuid_le are compared - * to the corresponding ones in each entry of the table of vendor specific UUIDs pouplated with @ref sd_ble_uuid_vs_add - * to look for a match. If there is such a match, bytes 12 and 13 are returned as p_uuid->uuid and the index - * relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN as p_uuid->type. - * - * @note If the UUID length supplied is 2, then the type set by this call will always be @ref BLE_UUID_TYPE_BLE. - * - * @param[in] uuid_le_len Length in bytes of the buffer pointed to by p_uuid_le (must be 2 or 16 bytes). - * @param[in] p_uuid_le Pointer pointing to little endian raw UUID bytes. - * @param[in,out] p_uuid Pointer to a @ref ble_uuid_t structure to be filled in. - * - * @return @ref NRF_SUCCESS Successfully decoded into the @ref ble_uuid_t structure. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_LENGTH Invalid UUID length. - * @return @ref NRF_ERROR_NOT_FOUND For a 128-bit UUID, no match in the populated table of UUIDs. - */ -SVCALL(SD_BLE_UUID_DECODE, uint32_t, sd_ble_uuid_decode(uint8_t uuid_le_len, uint8_t const * const p_uuid_le, ble_uuid_t * const p_uuid)); - - -/** @brief Encode a @ref ble_uuid_t structure into little endian raw UUID bytes (16-bit or 128-bit). - * - * @note The pointer to the destination buffer p_uuid_le may be NULL, in which case only the validitiy and size of p_uuid is computed. - * - * @param[in] p_uuid Pointer to a @ref ble_uuid_t structure that will be encoded into bytes. - * @param[out] p_uuid_le_len Pointer to a uint8_t that will be filled with the encoded length (2 or 16 bytes). - * @param[out] p_uuid_le Pointer to a buffer where the little endian raw UUID bytes (2 or 16) will be stored. - * - * @return @ref NRF_SUCCESS Successfully encoded into the buffer. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid UUID type. - */ -SVCALL(SD_BLE_UUID_ENCODE, uint32_t, sd_ble_uuid_encode(ble_uuid_t const * const p_uuid, uint8_t * const p_uuid_le_len, uint8_t * const p_uuid_le)); - - -/**@brief Get Version Information. - * - * @details This call allows the application to get the BLE stack version information. - * - * @param[in] p_version Pointer to ble_version_t structure to be filled in. - * - * @return @ref NRF_SUCCESS Version information stored successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY The stack is busy (typically doing a locally-initiated disconnection procedure). - */ -SVCALL(SD_BLE_VERSION_GET, uint32_t, sd_ble_version_get(ble_version_t * p_version)); - - -/**@brief Provide a user memory block. - * - * @note This call can only be used as a response to a @ref BLE_EVT_USER_MEM_REQUEST event issued to the application. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_block Pointer to a user memory block structure. - * - * @return @ref NRF_SUCCESS Successfully queued a response to the peer. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_STATE No execute write request pending. - */ -SVCALL(SD_BLE_USER_MEM_REPLY, uint32_t, sd_ble_user_mem_reply(uint16_t conn_handle, ble_user_mem_block_t *p_block)); - - -/**@brief Set a BLE option. - * - * @details This call allows the application to set the value of an option. - * - * @param[in] opt_id Option ID. - * @param[in] p_opt Pointer to a ble_opt_t structure containing the option value. - * - * @retval ::NRF_SUCCESS Option set successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. - * @retval ::NRF_ERROR_INVALID_STATE Unable to set the parameter at this time. - * @retval ::NRF_ERROR_BUSY The stack is busy or the previous procedure has not completed. - */ -SVCALL(SD_BLE_OPT_SET, uint32_t, sd_ble_opt_set(uint32_t opt_id, ble_opt_t const *p_opt)); - - -/**@brief Get a BLE option. - * - * @details This call allows the application to retrieve the value of an option. - * - * @param[in] opt_id Option ID. - * @param[out] p_opt Pointer to a ble_opt_t structure to be filled in. - * - * @retval ::NRF_SUCCESS Option retrieved successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. - * @retval ::NRF_ERROR_INVALID_STATE Unable to retrieve the parameter at this time. - * @retval ::NRF_ERROR_BUSY The stack is busy or the previous procedure has not completed. - * @retval ::NRF_ERROR_NOT_SUPPORTED This option is not supported. - * - */ -SVCALL(SD_BLE_OPT_GET, uint32_t, sd_ble_opt_get(uint32_t opt_id, ble_opt_t *p_opt)); - -/** @} */ - -#endif /* BLE_H__ */ - -/** - @} - @} -*/
--- a/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_err.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - /** - @addtogroup BLE_COMMON - @{ - @addtogroup nrf_error - @{ - @ingroup BLE_COMMON - @} - - @defgroup ble_err General error codes - @{ - - @brief General error code definitions for the BLE API. - - @ingroup BLE_COMMON -*/ -#ifndef NRF_BLE_ERR_H__ -#define NRF_BLE_ERR_H__ - -#include "nrf_error.h" - -/* @defgroup BLE_ERRORS Error Codes - * @{ */ -#define BLE_ERROR_NOT_ENABLED (NRF_ERROR_STK_BASE_NUM+0x001) /**< @ref sd_ble_enable has not been called. */ -#define BLE_ERROR_INVALID_CONN_HANDLE (NRF_ERROR_STK_BASE_NUM+0x002) /**< Invalid connection handle. */ -#define BLE_ERROR_INVALID_ATTR_HANDLE (NRF_ERROR_STK_BASE_NUM+0x003) /**< Invalid attribute handle. */ -#define BLE_ERROR_NO_TX_BUFFERS (NRF_ERROR_STK_BASE_NUM+0x004) /**< Buffer capacity exceeded. */ -/** @} */ - - -/** @defgroup BLE_ERROR_SUBRANGES Module specific error code subranges - * @brief Assignment of subranges for module specific error codes. - * @note For specific error codes, see ble_<module>.h or ble_error_<module>.h. - * @{ */ -#define NRF_L2CAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x100) /**< L2CAP specific errors. */ -#define NRF_GAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x200) /**< GAP specific errors. */ -#define NRF_GATTC_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x300) /**< GATT client specific errors. */ -#define NRF_GATTS_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x400) /**< GATT server specific errors. */ -/** @} */ - -#endif - - -/** - @} - @} -*/
--- a/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gap.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1032 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_GAP Generic Access Profile (GAP) - @{ - @brief Definitions and prototypes for the GAP interface. - */ - -#ifndef BLE_GAP_H__ -#define BLE_GAP_H__ - -#include "ble_types.h" -#include "ble_ranges.h" -#include "nrf_svc.h" - - -/**@addtogroup BLE_GAP_ENUMERATIONS Enumerations - * @{ */ - -/**@brief GAP API SVC numbers. - */ -enum BLE_GAP_SVCS -{ - SD_BLE_GAP_ADDRESS_SET = BLE_GAP_SVC_BASE, /**< Set own Bluetooth Address. */ - SD_BLE_GAP_ADDRESS_GET, /**< Get own Bluetooth Address. */ - SD_BLE_GAP_ADV_DATA_SET, /**< Set Advertisement Data. */ - SD_BLE_GAP_ADV_START, /**< Start Advertising. */ - SD_BLE_GAP_ADV_STOP, /**< Stop Advertising. */ - SD_BLE_GAP_CONN_PARAM_UPDATE, /**< Connection Parameter Update. */ - SD_BLE_GAP_DISCONNECT, /**< Disconnect. */ - SD_BLE_GAP_TX_POWER_SET, /**< Set TX Power. */ - SD_BLE_GAP_APPEARANCE_SET, /**< Set Appearance. */ - SD_BLE_GAP_APPEARANCE_GET, /**< Get Appearance. */ - SD_BLE_GAP_PPCP_SET, /**< Set PPCP. */ - SD_BLE_GAP_PPCP_GET, /**< Get PPCP. */ - SD_BLE_GAP_DEVICE_NAME_SET, /**< Set Device Name. */ - SD_BLE_GAP_DEVICE_NAME_GET, /**< Get Device Name. */ - SD_BLE_GAP_AUTHENTICATE, /**< Initiate Pairing/Bonding. */ - SD_BLE_GAP_SEC_PARAMS_REPLY, /**< Reply with Security Parameters. */ - SD_BLE_GAP_AUTH_KEY_REPLY, /**< Reply with an authentication key. */ - SD_BLE_GAP_SEC_INFO_REPLY, /**< Reply with Security Information. */ - SD_BLE_GAP_CONN_SEC_GET, /**< Obtain connection security level. */ - SD_BLE_GAP_RSSI_START, /**< Start reporting of changes in RSSI. */ - SD_BLE_GAP_RSSI_STOP, /**< Stop reporting of changes in RSSI. */ -}; -/**@} */ - -/**@addtogroup BLE_GAP_DEFINES Defines - * @{ */ - -/**@defgroup BLE_ERRORS_GAP SVC return values specific to GAP - * @{ */ -#define BLE_ERROR_GAP_UUID_LIST_MISMATCH (NRF_GAP_ERR_BASE + 0x000) /**< UUID list does not contain an integral number of UUIDs. */ -#define BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST (NRF_GAP_ERR_BASE + 0x001) /**< Use of Whitelist not permitted with discoverable advertising. */ -#define BLE_ERROR_GAP_INVALID_BLE_ADDR (NRF_GAP_ERR_BASE + 0x002) /**< The upper two bits of the address do not correspond to the specified address type. */ -/**@} */ - - -/**@defgroup BLE_GAP_ROLES GAP Roles - * @note Not explicitly used in peripheral API, but will be relevant for central API. - * @{ */ -#define BLE_GAP_ROLE_INVALID 0x0 /**< Invalid Role. */ -#define BLE_GAP_ROLE_PERIPH 0x1 /**< Peripheral Role. */ -#define BLE_GAP_ROLE_CENTRAL 0x2 /**< Central Role. */ -/**@} */ - - -/**@defgroup BLE_GAP_TIMEOUT_SOURCES GAP Timeout sources - * @{ */ -#define BLE_GAP_TIMEOUT_SRC_ADVERTISEMENT 0x00 /**< Advertisement timeout. */ -#define BLE_GAP_TIMEOUT_SRC_SECURITY_REQUEST 0x01 /**< Security request timeout. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADDR_TYPES GAP Address types - * @{ */ -#define BLE_GAP_ADDR_TYPE_PUBLIC 0x00 /**< Public address. */ -#define BLE_GAP_ADDR_TYPE_RANDOM_STATIC 0x01 /**< Random Static address. */ -#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE 0x02 /**< Private Resolvable address. */ -#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE 0x03 /**< Private Non-Resolvable address. */ -/**@} */ - -/**@defgroup BLE_GAP_ADDR_CYCLE_MODES GAP Address cycle modes - * @{ */ -#define BLE_GAP_ADDR_CYCLE_MODE_NONE 0x00 /**< Set addresses directly, no automatic address cycling. */ -#define BLE_GAP_ADDR_CYCLE_MODE_AUTO 0x01 /**< Automatically generate and update private addresses. */ -/** @} */ - -/**@brief The default interval in seconds at which a private address is refreshed when address cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO. */ -#define BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S (60 * 15) - -/** @brief BLE address length. */ -#define BLE_GAP_ADDR_LEN 6 - - -/**@defgroup BLE_GAP_AD_TYPE_DEFINITIONS GAP Advertising and Scan Response Data format - * @note Found at https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm - * @{ */ -#define BLE_GAP_AD_TYPE_FLAGS 0x01 /**< Flags for discoverability. */ -#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE 0x02 /**< Partial list of 16 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE 0x03 /**< Complete list of 16 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE 0x04 /**< Partial list of 32 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE 0x05 /**< Complete list of 32 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE 0x06 /**< Partial list of 128 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE 0x07 /**< Complete list of 128 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME 0x08 /**< Short local device name. */ -#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME 0x09 /**< Complete local device name. */ -#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL 0x0A /**< Transmit power level. */ -#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE 0x0D /**< Class of device. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C 0x0E /**< Simple Pairing Hash C. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R 0x0F /**< Simple Pairing Randomizer R. */ -#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE 0x10 /**< Security Manager TK Value. */ -#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS 0x11 /**< Security Manager Out Of Band Flags. */ -#define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE 0x12 /**< Slave Connection Interval Range. */ -#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT 0x14 /**< List of 16-bit Service Solicitation UUIDs. */ -#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT 0x15 /**< List of 128-bit Service Solicitation UUIDs. */ -#define BLE_GAP_AD_TYPE_SERVICE_DATA 0x16 /**< Service Data - 16-bit UUID. */ -#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS 0x17 /**< Public Target Address. */ -#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS 0x18 /**< Random Target Address. */ -#define BLE_GAP_AD_TYPE_APPEARANCE 0x19 /**< Appearance. */ -#define BLE_GAP_AD_TYPE_ADVERTISING_INTERVAL 0x1A /**< Advertising Interval. */ -#define BLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS 0x1B /**< LE Bluetooth Device Address. */ -#define BLE_GAP_AD_TYPE_LE_ROLE 0x1C /**< LE Role. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C256 0x1D /**< Simple Pairing Hash C-256. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R256 0x1E /**< Simple Pairing Randomizer R-256. */ -#define BLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID 0x20 /**< Service Data - 32-bit UUID. */ -#define BLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID 0x21 /**< Service Data - 128-bit UUID. */ -#define BLE_GAP_AD_TYPE_3D_INFORMATION_DATA 0x3D /**< 3D Information Data. */ -#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA 0xFF /**< Manufacturer Specific Data. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADV_FLAGS GAP Advertisement Flags - * @{ */ -#define BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE (0x01) /**< LE Limited Discoverable Mode. */ -#define BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE (0x02) /**< LE General Discoverable Mode. */ -#define BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED (0x04) /**< BR/EDR not supported. */ -#define BLE_GAP_ADV_FLAG_LE_BR_EDR_CONTROLLER (0x08) /**< Simultaneous LE and BR/EDR, Controller. */ -#define BLE_GAP_ADV_FLAG_LE_BR_EDR_HOST (0x10) /**< Simultaneous LE and BR/EDR, Host. */ -#define BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE (BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE Limited Discoverable Mode, BR/EDR not supported. */ -#define BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE (BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE General Discoverable Mode, BR/EDR not supported. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADV_INTERVALS GAP Advertising interval max and min - * @{ */ -#define BLE_GAP_ADV_INTERVAL_MIN 0x0020 /**< Minimum Advertising interval in 625 us units, i.e. 20 ms. */ -#define BLE_GAP_ADV_NONCON_INTERVAL_MIN 0x00A0 /**< Minimum Advertising interval in 625 us units for non connectable mode, i.e. 100 ms. */ -#define BLE_GAP_ADV_INTERVAL_MAX 0x4000 /**< Maximum Advertising interval in 625 us units, i.e. 10.24 s. */ - /**@} */ - - -/**@brief Maximum size of advertising data in octets. */ -#define BLE_GAP_ADV_MAX_SIZE 31 - - -/**@defgroup BLE_GAP_ADV_TYPES GAP Advertising types - * @{ */ -#define BLE_GAP_ADV_TYPE_ADV_IND 0x00 /**< Connectable undirected. */ -#define BLE_GAP_ADV_TYPE_ADV_DIRECT_IND 0x01 /**< Connectable directed. */ -#define BLE_GAP_ADV_TYPE_ADV_SCAN_IND 0x02 /**< Scannable undirected. */ -#define BLE_GAP_ADV_TYPE_ADV_NONCONN_IND 0x03 /**< Non connectable undirected. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADV_FILTER_POLICIES GAP Advertising filter policies - * @{ */ -#define BLE_GAP_ADV_FP_ANY 0x00 /**< Allow scan requests and connect requests from any device. */ -#define BLE_GAP_ADV_FP_FILTER_SCANREQ 0x01 /**< Filter scan requests with whitelist. */ -#define BLE_GAP_ADV_FP_FILTER_CONNREQ 0x02 /**< Filter connect requests with whitelist. */ -#define BLE_GAP_ADV_FP_FILTER_BOTH 0x03 /**< Filter both scan and connect requests with whitelist. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADV_TIMEOUT_VALUES GAP Advertising timeout values - * @{ */ -#define BLE_GAP_ADV_TIMEOUT_LIMITED_MAX 180 /**< Maximum advertising time in limited discoverable mode (TGAP(lim_adv_timeout) = 180s in spec (Addendum 2)). */ -#define BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED 0 /**< Unlimited advertising in general discoverable mode. */ -/**@} */ - - -/**@defgroup BLE_GAP_DISC_MODES GAP Discovery modes - * @{ */ -#define BLE_GAP_DISC_MODE_NOT_DISCOVERABLE 0x00 /**< Not discoverable discovery Mode. */ -#define BLE_GAP_DISC_MODE_LIMITED 0x01 /**< Limited Discovery Mode. */ -#define BLE_GAP_DISC_MODE_GENERAL 0x02 /**< General Discovery Mode. */ -/**@} */ - -/**@defgroup BLE_GAP_IO_CAPS GAP IO Capabilities - * @{ */ -#define BLE_GAP_IO_CAPS_DISPLAY_ONLY 0x00 /**< Display Only. */ -#define BLE_GAP_IO_CAPS_DISPLAY_YESNO 0x01 /**< Display and Yes/No entry. */ -#define BLE_GAP_IO_CAPS_KEYBOARD_ONLY 0x02 /**< Keyboard Only. */ -#define BLE_GAP_IO_CAPS_NONE 0x03 /**< No I/O capabilities. */ -#define BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY 0x04 /**< Keyboard and Display. */ -/**@} */ - - -/**@defgroup BLE_GAP_AUTH_KEY_TYPES GAP Authentication Key Types - * @{ */ -#define BLE_GAP_AUTH_KEY_TYPE_NONE 0x00 /**< No key (may be used to reject). */ -#define BLE_GAP_AUTH_KEY_TYPE_PASSKEY 0x01 /**< 6-digit Passkey. */ -#define BLE_GAP_AUTH_KEY_TYPE_OOB 0x02 /**< Out Of Band data. */ -/**@} */ - -/**@defgroup BLE_GAP_SEC_STATUS GAP Security status - * @{ */ -#define BLE_GAP_SEC_STATUS_SUCCESS 0x00 /**< Successful parameters. */ -#define BLE_GAP_SEC_STATUS_TIMEOUT 0x01 /**< Procedure timed out. */ -#define BLE_GAP_SEC_STATUS_PDU_INVALID 0x02 /**< Invalid PDU received. */ -#define BLE_GAP_SEC_STATUS_PASSKEY_ENTRY_FAILED 0x81 /**< Passkey entry failed (user cancelled or other). */ -#define BLE_GAP_SEC_STATUS_OOB_NOT_AVAILABLE 0x82 /**< Out of Band Key not available. */ -#define BLE_GAP_SEC_STATUS_AUTH_REQ 0x83 /**< Authentication requirements not met. */ -#define BLE_GAP_SEC_STATUS_CONFIRM_VALUE 0x84 /**< Confirm value failed. */ -#define BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP 0x85 /**< Pairing not supported. */ -#define BLE_GAP_SEC_STATUS_ENC_KEY_SIZE 0x86 /**< Encryption key size. */ -#define BLE_GAP_SEC_STATUS_SMP_CMD_UNSUPPORTED 0x87 /**< Unsupported SMP command. */ -#define BLE_GAP_SEC_STATUS_UNSPECIFIED 0x88 /**< Unspecified reason. */ -#define BLE_GAP_SEC_STATUS_REPEATED_ATTEMPTS 0x89 /**< Too little time elapsed since last attempt. */ -#define BLE_GAP_SEC_STATUS_INVALID_PARAMS 0x8A /**< Invalid parameters. */ -/**@} */ - -/**@defgroup BLE_GAP_SEC_STATUS_SOURCES GAP Security status sources - * @{ */ -#define BLE_GAP_SEC_STATUS_SOURCE_LOCAL 0x00 /**< Local failure. */ -#define BLE_GAP_SEC_STATUS_SOURCE_REMOTE 0x01 /**< Remote failure. */ -/**@} */ - -/**@defgroup BLE_GAP_CP_LIMITS GAP Connection Parameters Limits - * @{ */ -#define BLE_GAP_CP_MIN_CONN_INTVL_NONE 0xFFFF /**< No new minimum connction interval specified in connect parameters. */ -#define BLE_GAP_CP_MIN_CONN_INTVL_MIN 0x0006 /**< Lowest mimimum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ -#define BLE_GAP_CP_MIN_CONN_INTVL_MAX 0x0C80 /**< Highest minimum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_NONE 0xFFFF /**< No new maximum connction interval specified in connect parameters. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_MIN 0x0006 /**< Lowest maximum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_MAX 0x0C80 /**< Highest maximum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ -#define BLE_GAP_CP_SLAVE_LATENCY_MAX 0x03E8 /**< Highest slave latency permitted, in connection events. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_NONE 0xFFFF /**< No new supervision timeout specified in connect parameters. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MIN 0x000A /**< Lowest supervision timeout permitted, in units of 10 ms, i.e. 100 ms. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MAX 0x0C80 /**< Highest supervision timeout permitted, in units of 10 ms, i.e. 32 s. */ -/**@} */ - - -/**@brief GAP device name maximum length. */ -#define BLE_GAP_DEVNAME_MAX_LEN 31 - - -/**@defgroup BLE_GAP_CONN_SEC_MODE_SET_MACROS GAP attribute security requirement setters - * - * See @ref ble_gap_conn_sec_mode_t. - * @{ */ -/**@brief Set sec_mode pointed to by ptr to have no access rights.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(ptr) do {(ptr)->sm = 0; (ptr)->lv = 0;} while(0) -/**@brief Set sec_mode pointed to by ptr to require no protection, open link.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_OPEN(ptr) do {(ptr)->sm = 1; (ptr)->lv = 1;} while(0) -/**@brief Set sec_mode pointed to by ptr to require encryption, but no MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 2;} while(0) -/**@brief Set sec_mode pointed to by ptr to require encryption and MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 3;} while(0) -/**@brief Set sec_mode pointed to by ptr to require signing or encryption, no MITM protection needed.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_NO_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 1;} while(0) -/**@brief Set sec_mode pointed to by ptr to require signing or encryption with MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_WITH_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 2;} while(0) -/**@} */ - - -/**@brief GAP Security Key Length. */ -#define BLE_GAP_SEC_KEY_LEN 16 - -/**@brief GAP Passkey Length. */ -#define BLE_GAP_PASSKEY_LEN 6 - -/**@brief Maximum amount of addresses in a whitelist. */ -#define BLE_GAP_WHITELIST_ADDR_MAX_COUNT (8) - -/**@brief Maximum amount of IRKs in a whitelist. - * @note The number of IRKs is limited to 8, even if the hardware supports more. - */ -#define BLE_GAP_WHITELIST_IRK_MAX_COUNT (8) - -/**@defgroup GAP_SEC_MODES GAP Security Modes - * @{ */ -#define BLE_GAP_SEC_MODE 0x00 /**< No key (may be used to reject). */ -/**@} */ - -/**@} */ - -/**@addtogroup BLE_GAP_STRUCTURES Structures - * @{ */ - -/**@brief Bluetooth Low Energy address. */ -typedef struct -{ - uint8_t addr_type; /**< See @ref BLE_GAP_ADDR_TYPES. */ - uint8_t addr[BLE_GAP_ADDR_LEN]; /**< 48-bit address, LSB format. */ -} ble_gap_addr_t; - - -/**@brief GAP connection parameters. - * - * @note When ble_conn_params_t is received in an event, both min_conn_interval and - * max_conn_interval will be equal to the connection interval set by the central. - */ -typedef struct -{ - uint16_t min_conn_interval; /**< Minimum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t max_conn_interval; /**< Maximum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t slave_latency; /**< Slave Latency in number of connection events, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t conn_sup_timeout; /**< Connection Supervision Timeout in 10 ms units, see @ref BLE_GAP_CP_LIMITS.*/ -} ble_gap_conn_params_t; - - -/**@brief GAP link requirements. - * - * See Bluetooth Core specification, Volume 3 Part C 10.2 for details. - * - * Security Mode 0 Level 0: No access permissions at all (this level is not defined by the Bluetooth Core specification).\n - * Security Mode 1 Level 1: No security is needed (aka open link).\n - * Security Mode 1 Level 2: Encrypted link required, MITM protection not necessary.\n - * Security Mode 1 Level 3: MITM protected encrypted link required.\n - * Security Mode 2 Level 1: Signing or encryption required, MITM protection not necessary.\n - * Security Mode 2 Level 2: MITM protected signing required, unless link is MITM protected encrypted.\n - */ -typedef struct -{ - uint8_t sm : 4; /**< Security Mode (1 or 2), 0 for no permissions at all. */ - uint8_t lv : 4; /**< Level (1, 2 or 3), 0 for no permissions at all. */ - -} ble_gap_conn_sec_mode_t; - - -/**@brief GAP connection security status.*/ -typedef struct -{ - ble_gap_conn_sec_mode_t sec_mode; /**< Currently active security mode for this connection.*/ - uint8_t encr_key_size; /**< Length of currently active encryption key, 7 to 16 octets (only applicable for bonding procedures). */ -} ble_gap_conn_sec_t; - - -/**@brief Identity Resolving Key. */ -typedef struct -{ - uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Array containing IRK. */ -} ble_gap_irk_t; - - -/**@brief Whitelist structure. */ -typedef struct -{ - ble_gap_addr_t ** pp_addrs; /**< Pointer to array of device address pointers, pointing to addresses to be used in whitelist. NULL if none are given. */ - uint8_t addr_count; /**< Count of device addresses in array, up to @ref BLE_GAP_WHITELIST_ADDR_MAX_COUNT. */ - ble_gap_irk_t ** pp_irks; /**< Pointer to array of Identity Resolving Key (IRK) pointers, each pointing to an IRK in the whitelist. NULL if none are given. */ - uint8_t irk_count; /**< Count of IRKs in array, up to @ref BLE_GAP_WHITELIST_IRK_MAX_COUNT. */ -} ble_gap_whitelist_t; - - -/**@brief GAP advertising parameters.*/ -typedef struct -{ - uint8_t type; /**< See @ref BLE_GAP_ADV_TYPES. */ - ble_gap_addr_t* p_peer_addr; /**< For BLE_GAP_CONN_MODE_DIRECTED mode only, known peer address. */ - uint8_t fp; /**< Filter Policy, see @ref BLE_GAP_ADV_FILTER_POLICIES. */ - ble_gap_whitelist_t * p_whitelist; /**< Pointer to whitelist, NULL if none is given. */ - uint16_t interval; /**< Advertising interval between 0x0020 and 0x4000 in 0.625 ms units (20ms to 10.24s), see @ref BLE_GAP_ADV_INTERVALS. This parameter must be set to 0 if type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND. */ - uint16_t timeout; /**< Advertising timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. See also @ref BLE_GAP_ADV_TIMEOUT_VALUES. This parameter must be set to 0 if type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND. */ -} ble_gap_adv_params_t; - - -/**@brief GAP scanning parameters. */ -typedef struct -{ - uint8_t filter; /**< Filter based on discovery mode, see @ref BLE_GAP_DISC_MODES. */ - uint8_t active : 1; /**< If 1, perform active scanning (scan requests). */ - uint8_t selective : 1; /**< If 1, ignore unknown devices (non whitelisted). */ - uint16_t interval; /**< Scan interval between 0x0020 and 0x4000 in 0.625ms units (20ms to 10.24s). */ - uint16_t window; /**< Scan window between 0x0004 and 0x4000 in 0.625ms units (2.5ms to 10.24s). */ - uint16_t timeout; /**< Scan timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. */ -} ble_gap_scan_params_t; - - -/**@brief GAP security parameters. */ -typedef struct -{ - uint16_t timeout; /**< Timeout for SMP transactions or Security Request in seconds, see @ref sd_ble_gap_authenticate and @ref sd_ble_gap_sec_params_reply for more information. */ - uint8_t bond : 1; /**< Perform bonding. */ - uint8_t mitm : 1; /**< Man In The Middle protection required. */ - uint8_t io_caps : 3; /**< IO capabilities, see @ref BLE_GAP_IO_CAPS. */ - uint8_t oob : 1; /**< Out Of Band data available. */ - uint8_t min_key_size; /**< Minimum encryption key size in octets between 7 and 16. */ - uint8_t max_key_size; /**< Maximum encryption key size in octets between min_key_size and 16. */ -} ble_gap_sec_params_t; - - -/**@brief GAP Encryption Information. */ -typedef struct -{ - uint16_t div; /**< Encryption Diversifier. */ - uint8_t ltk[BLE_GAP_SEC_KEY_LEN]; /**< Long Term Key. */ - uint8_t auth : 1; /**< Authenticated Key. */ - uint8_t ltk_len : 7; /**< LTK length in octets. */ -} ble_gap_enc_info_t; - - -/**@brief GAP Master Identification. */ -typedef struct -{ - uint16_t ediv; /**< Encrypted Diversifier. */ - uint8_t rand[8]; /**< Random Number. */ -} ble_gap_master_id_t; - - -/**@brief GAP Identity Information. */ -typedef struct -{ - ble_gap_addr_t addr; /**< Bluetooth address to which this key applies. */ - uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Identity Resolution Key. */ -} ble_gap_id_info_t; - - -/**@brief GAP Signing Information. */ -typedef struct -{ - uint8_t csrk[BLE_GAP_SEC_KEY_LEN]; /* Connection Signature Resolving Key. */ -} ble_gap_sign_info_t; - - -/**@brief GAP Event IDs. - * Those IDs uniquely identify an event coming from the stack to the application. - */ -enum BLE_GAP_EVTS -{ - BLE_GAP_EVT_CONNECTED = BLE_GAP_EVT_BASE, /**< Connection established. */ - BLE_GAP_EVT_DISCONNECTED, /**< Disconnected from peer. */ - BLE_GAP_EVT_CONN_PARAM_UPDATE, /**< Connection Parameters updated. */ - BLE_GAP_EVT_SEC_PARAMS_REQUEST, /**< Request to provide security parameters. */ - BLE_GAP_EVT_SEC_INFO_REQUEST, /**< Request to provide security information. */ - BLE_GAP_EVT_PASSKEY_DISPLAY, /**< Request to display a passkey to the user. */ - BLE_GAP_EVT_AUTH_KEY_REQUEST, /**< Request to provide an authentication key. */ - BLE_GAP_EVT_AUTH_STATUS, /**< Authentication procedure completed with status. */ - BLE_GAP_EVT_CONN_SEC_UPDATE, /**< Connection security updated. */ - BLE_GAP_EVT_TIMEOUT, /**< Timeout expired. */ - BLE_GAP_EVT_RSSI_CHANGED, /**< Signal strength measurement report. */ -}; - - -/** - * @brief GAP Option IDs. - * IDs that uniquely identify a GAP option. - */ -enum BLE_GAP_OPTS -{ - BLE_GAP_OPT_LOCAL_CONN_LATENCY = BLE_GAP_OPT_BASE, /**< Local connection latency. */ - BLE_GAP_OPT_PASSKEY, /**< Set passkey to be used during pairing. This option can be used to make the SoftDevice use an application provided passkey instead of generating a random passkey.*/ - BLE_GAP_OPT_PRIVACY, /**< Set or get custom IRK or custom private address cycle interval. */ -}; -/**@} */ - - -/**@brief Event data for connected event. */ -typedef struct -{ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ - uint8_t irk_match :1; /**< If 1, peer device's address resolved using an IRK. */ - uint8_t irk_match_idx :7; /**< Index in IRK list where the address was matched. */ - ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ -} ble_gap_evt_connected_t; - - -/**@brief Event data for disconnected event. */ -typedef struct -{ - uint8_t reason; /**< HCI error code. */ -} ble_gap_evt_disconnected_t; - - -/**@brief Event data for connection parameter update event. */ -typedef struct -{ - ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ -} ble_gap_evt_conn_param_update_t; - - -/**@brief Event data for security parameters request event. */ -typedef struct -{ - ble_gap_sec_params_t peer_params; /**< Initiator Security Parameters. */ -} ble_gap_evt_sec_params_request_t; - - -/**@brief Event data for security info request event. */ -typedef struct -{ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ - uint16_t div; /**< Encryption diversifier for LTK lookup. */ - uint8_t enc_info : 1; /**< If 1, Encryption Information required. */ - uint8_t id_info : 1; /**< If 1, Identity Information required. */ - uint8_t sign_info : 1; /**< If 1, Signing Information required. */ -} ble_gap_evt_sec_info_request_t; - - -/**@brief Event data for passkey display event. */ -typedef struct -{ - uint8_t passkey[BLE_GAP_PASSKEY_LEN]; /**< 6-digit passkey in ASCII ('0'-'9' digits only). */ -} ble_gap_evt_passkey_display_t; - - -/**@brief Event data for authentication key request event. */ -typedef struct -{ - uint8_t key_type; /**< See @ref BLE_GAP_AUTH_KEY_TYPES. */ -} ble_gap_evt_auth_key_request_t; - - -/**@brief Security levels supported. - * @note See Bluetooth Specification Version 4.1 Volume 3, Part C, Chapter 10. -*/ -typedef struct -{ - uint8_t lv1 : 1; /**< If 1: Level 1 is supported. */ - uint8_t lv2 : 1; /**< If 1: Level 2 is supported. */ - uint8_t lv3 : 1; /**< If 1: Level 3 is supported. */ -} ble_gap_sec_levels_t; - - -/**@brief Keys that have been exchanged. */ -typedef struct -{ - uint8_t ltk : 1; /**< Long Term Key. */ - uint8_t ediv_rand : 1; /**< Encrypted Diversifier and Random value. */ - uint8_t irk : 1; /**< Identity Resolving Key. */ - uint8_t address : 1; /**< Public or static random address. */ - uint8_t csrk : 1; /**< Connection Signature Resolving Key. */ -} ble_gap_sec_keys_t; - - -/**@brief Event data for authentication status event. */ -typedef struct -{ - uint8_t auth_status; /**< Authentication status, see @ref BLE_GAP_SEC_STATUS. */ - uint8_t error_src; /**< On error, source that caused the failure, see @ref BLE_GAP_SEC_STATUS_SOURCES. */ - ble_gap_sec_levels_t sm1_levels; /**< Levels supported in Security Mode 1. */ - ble_gap_sec_levels_t sm2_levels; /**< Levels supported in Security Mode 2. */ - ble_gap_sec_keys_t periph_kex; /**< Bitmap stating which keys were exchanged (distributed) by the peripheral. */ - ble_gap_sec_keys_t central_kex; /**< Bitmap stating which keys were exchanged (distributed) by the central. */ - struct periph_keys_t - { - ble_gap_enc_info_t enc_info; /**< Peripheral's Encryption information. */ - } periph_keys; /**< Actual keys distributed from the Peripheral to the Central. */ - struct central_keys_t - { - ble_gap_irk_t irk; /**< Central's IRK. */ - ble_gap_addr_t id_info; /**< Central's Identity Info. */ - } central_keys; /**< Actual keys distributed from the Central to the Peripheral. */ -} ble_gap_evt_auth_status_t; - - -/**@brief Event data for connection security update event. */ -typedef struct -{ - ble_gap_conn_sec_t conn_sec; /**< Connection security level. */ -} ble_gap_evt_conn_sec_update_t; - - -/**@brief Event data for timeout event. */ -typedef struct -{ - uint8_t src; /**< Source of timeout event, see @ref BLE_GAP_TIMEOUT_SOURCES. */ -} ble_gap_evt_timeout_t; - - -/**@brief Event data for advertisement report event. */ -typedef struct -{ - int8_t rssi; /**< Received Signal Strength Indication in dBm. */ -} ble_gap_evt_rssi_changed_t; - - -/**@brief GAP event callback event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occured. */ - union /**< union alternative identified by evt_id in enclosing struct. */ - { - ble_gap_evt_connected_t connected; /**< Connected Event Parameters. */ - ble_gap_evt_disconnected_t disconnected; /**< Disconnected Event Parameters. */ - ble_gap_evt_conn_param_update_t conn_param_update; /**< Connection Parameter Update Parameters. */ - ble_gap_evt_sec_params_request_t sec_params_request; /**< Security Parameters Request Event Parameters. */ - ble_gap_evt_sec_info_request_t sec_info_request; /**< Security Information Request Event Parameters. */ - ble_gap_evt_passkey_display_t passkey_display; /**< Passkey Display Event Parameters. */ - ble_gap_evt_auth_key_request_t auth_key_request; /**< Authentication Key Request Event Parameters. */ - ble_gap_evt_auth_status_t auth_status; /**< Authentication Status Event Parameters. */ - ble_gap_evt_conn_sec_update_t conn_sec_update; /**< Connection Security Update Event Parameters. */ - ble_gap_evt_timeout_t timeout; /**< Timeout Event Parameters. */ - ble_gap_evt_rssi_changed_t rssi_changed; /**< RSSI Event parameters. */ - } params; - -} ble_gap_evt_t; - - -/**@brief Local connection latency option. - * - * Local connection latency is a feature which enables the slave to improve - * current consumption by ignoring the slave latency set by the peer. The - * local connection latency can only be set to a multiple of the slave latency, - * and cannot be longer than half of the supervision timeout. - * - * Used with @ref sd_ble_opt_set to set the local connection latency. The - * @ref sd_ble_opt_get is not supported for this option, but the actual - * local connection latency (unless set to NULL) is set as a return parameter - * when setting the option. - * - * @note The latency set will be truncated down to the closest slave latency event - * multiple, or the nearest multiple before half of the supervision timeout. - * - * @note The local connection latency is default off, and needs to be set for new - * connections and whenever the connection is updated. - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. - */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle */ - uint16_t requested_latency; /**< Requested local connection latency. */ - uint16_t * p_actual_latency; /**< Pointer to storage for the actual local connection latency (can be set to NULL to skip return value). */ -} ble_gap_opt_local_conn_latency_t; - - -/**@brief Passkey Option. - * - * Structure containing the passkey to be used during pairing. This can be used with @ref - * sd_ble_opt_set to make the SoftDevice use a pre-programmed passkey for authentication - * instead of generating a random one. - * - * @note @ref sd_ble_opt_get is not supported for this option. - * - */ -typedef struct -{ - uint8_t * p_passkey; /**< Pointer to 6-digit ASCII string (digit 0..9 only, no NULL termination) passkey to be used during pairing. If this is NULL, the SoftDevice will generate a random passkey if required.*/ -} ble_gap_opt_passkey_t; - - -/**@brief Custom Privacy Options. - * - * @note The specified address cycle interval is used when the address cycle mode is - * @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO. If 0 is given, the address will not be refreshed at any - * interval, and not at start of advertising. A new address can be generated manually by calling - * @ref sd_ble_gap_address_set with the same type again. The default interval is - * @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S. - * - * @note If cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO, the address will immediately be - * refreshed when this option is set. - */ -typedef struct -{ - ble_gap_irk_t * p_irk; /**< When input: Pointer to custom IRK, or NULL to use/reset to the device's default IRK. When output: Pointer to where the current IRK is to be stored, or NULL to not read out the IRK. */ - uint16_t interval_s; /**< When input: Custom private address cycle interval in seconds. When output: The current private address cycle interval. */ -} ble_gap_opt_privacy_t; - - -/**@brief Option structure for GAP options. */ -typedef union -{ - ble_gap_opt_local_conn_latency_t local_conn_latency; /**< Local connection latency. */ - ble_gap_opt_passkey_t passkey; /**< Passkey to be used for pairing.*/ - ble_gap_opt_privacy_t privacy; /**< Custom privacy options. */ -} ble_gap_opt_t; -/**@} */ - - -/**@addtogroup BLE_GAP_FUNCTIONS Functions - * @{ */ - -/**@brief Set local Bluetooth address. - * - * If the address cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO, the address type is required to - * be @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE or - * @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE. The given address is ignored and the - * SoftDevice will generate a new private address automatically every time advertising is - * (re)started, and every @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S seconds. If this API - * call is used again with the same parameters while advertising, the SoftDevice will immediately - * generate a new private address to replace the current address. - * - * If the application wishes to use a @ref BLE_GAP_ADDR_TYPE_PUBLIC or - * @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC address, the cycle mode must be - * @ref BLE_GAP_ADDR_CYCLE_MODE_NONE. - * - * If this API function is called while advertising, the softdevice will immediately update the - * advertising address without the need to stop advertising in the following cases: - * - If the previously set address is of type @ref BLE_GAP_ADDR_TYPE_PUBLIC and the new address - * is also of type @ref BLE_GAP_ADDR_TYPE_PUBLIC - * - If the previously set address is not @ref BLE_GAP_ADDR_TYPE_PUBLIC and the new address is - * also not @ref BLE_GAP_ADDR_TYPE_PUBLIC. - * - * If the address is changed from a @ref BLE_GAP_ADDR_TYPE_PUBLIC address to another type or from - * another type to a @ref BLE_GAP_ADDR_TYPE_PUBLIC address, the change will take effect the next - * time advertising is started. - * - * @note If the address cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_NONE and the application is - * using privacy, the application must take care to generate and set new private addresses - * periodically to comply with the Privacy specification in Bluetooth Core Spec. - * - * @param[in] addr_cycle_mode Address cycle mode, see @ref BLE_GAP_ADDR_CYCLE_MODES. - * @param[in] p_addr Pointer to address structure. - * - * @return @ref NRF_SUCCESS Address successfully set. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameters. - * @return @ref BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address. - * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. - */ -SVCALL(SD_BLE_GAP_ADDRESS_SET, uint32_t, sd_ble_gap_address_set(uint8_t addr_cycle_mode, ble_gap_addr_t const * const p_addr)); - - -/**@brief Get local Bluetooth address. - * - * @param[out] p_addr Pointer to address structure. - * - * @return @ref NRF_SUCCESS Address successfully retrieved. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GAP_ADDRESS_GET, uint32_t, sd_ble_gap_address_get(ble_gap_addr_t * const p_addr)); - - -/**@brief Set, clear or update advertisement and scan response data. - * - * @note The format of the advertisement data will be checked by this call to ensure interoperability. - * Limitations imposed by this API call to the data provided include having a flags data type in the scan response data and - * duplicating the local name in the advertisement data and scan response data. - * - * @note: To clear the advertisement data and set it to a 0-length packet, simply provide a valid pointer (p_data/p_sr_data) with its corresponding - * length (dlen/srdlen) set to 0. - * - * @note: The call will fail if p_data and p_sr_data are both NULL since this would have no effect. - * - * @param[in] p_data Raw data to be placed in advertisement packet. If NULL, no changes are made to the current advertisement packet data. - * @param[in] dlen Data length for p_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_data is NULL, can be 0 if p_data is not NULL. - * @param[in] p_sr_data Raw data to be placed in scan response packet. If NULL, no changes are made to the current scan response packet data. - * @param[in] srdlen Data length for p_sr_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_sr_data is NULL, can be 0 if p_data is not NULL. - * - * @return @ref NRF_SUCCESS Advertisement data successfully updated or cleared. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_FLAGS Invalid combination of advertising flags supplied. - * @return @ref NRF_ERROR_INVALID_DATA Invalid data type(s) supplied, check the advertising data format specification. - * @return @ref NRF_ERROR_INVALID_LENGTH Invalid data length(s) supplied. - * @return @ref BLE_ERROR_GAP_UUID_LIST_MISMATCH Invalid UUID list supplied. - * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. - */ -SVCALL(SD_BLE_GAP_ADV_DATA_SET, uint32_t, sd_ble_gap_adv_data_set(uint8_t const * const p_data, uint8_t dlen, uint8_t const * const p_sr_data, uint8_t srdlen)); - - -/**@brief Start advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). - * - * @param[in] p_adv_params Pointer to advertising parameters structure. - * - * @return @ref NRF_SUCCESS The BLE stack has started advertising. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check the accepted ranges and limits. - * @return @ref BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Bluetooth address supplied. - * @return @ref BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST Discoverable mode and whitelist incompatible. - */ -SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start(ble_gap_adv_params_t const * const p_adv_params)); - - -/**@brief Stop advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). - * - * @return @ref NRF_SUCCESS The BLE stack has stopped advertising. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation (most probably not in advertising state). - */ -SVCALL(SD_BLE_GAP_ADV_STOP, uint32_t, sd_ble_gap_adv_stop(void)); - - -/**@brief Update connection parameters. - * - * @details In the central role this will initiate a Link Layer connection parameter update procedure, - * otherwise in the peripheral role, this will send the corresponding L2CAP request and wait for - * the central to perform the procedure. In both cases, and regardless of success or failure, the application - * will be informed of the result with a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE event. - * - * @note If both a connection supervision timeout and a maximum connection interval are specified, then the following constraint - * applies: (conn_sup_timeout * 8) >= (max_conn_interval * (slave_latency + 1)) - * - * @param[in] conn_handle Connection handle. - * @param[in] p_conn_params Pointer to desired connection parameters. If NULL is provided on a peripheral role, - * the parameters in the PPCP characteristic of the GAP service will be used instead. - * - * @return @ref NRF_SUCCESS The Connection Update procedure has been started successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. - * @return @ref NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, process pending events and retry. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GAP_CONN_PARAM_UPDATE, uint32_t, sd_ble_gap_conn_param_update(uint16_t conn_handle, ble_gap_conn_params_t const * const p_conn_params)); - - -/**@brief Disconnect (GAP Link Termination). - * - * @details This call initiates the disconnection procedure, and its completion will be communicated to the application - * with a BLE_GAP_EVT_DISCONNECTED event. - * - * @param[in] conn_handle Connection handle. - * @param[in] hci_status_code HCI status code, see @ref BLE_HCI_STATUS_CODES (accepted values are BTLE_REMOTE_USER_TERMINATED_CONNECTION and BTLE_CONN_INTERVAL_UNACCEPTABLE). - * - * @return @ref NRF_SUCCESS The disconnection procedure has been started successfully. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation (disconnection is already in progress or not connected at all). - */ -SVCALL(SD_BLE_GAP_DISCONNECT, uint32_t, sd_ble_gap_disconnect(uint16_t conn_handle, uint8_t hci_status_code)); - - -/**@brief Set the radio's transmit power. - * - * @param[in] tx_power Radio transmit power in dBm (accepted values are -40, -30, -20, -16, -12, -8, -4, 0, and 4 dBm). - * - * @note -40 dBm will not actually give -40 dBm, but will instead be remapped to -30 dBm. - * - * @return @ref NRF_SUCCESS Successfully changed the transmit power. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. - */ -SVCALL(SD_BLE_GAP_TX_POWER_SET, uint32_t, sd_ble_gap_tx_power_set(int8_t tx_power)); - - -/**@brief Set GAP Appearance value. - * - * @param[in] appearance Appearance (16-bit), see @ref BLE_APPEARANCES. - * - * @return @ref NRF_SUCCESS Appearance value set successfully. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - */ -SVCALL(SD_BLE_GAP_APPEARANCE_SET, uint32_t, sd_ble_gap_appearance_set(uint16_t appearance)); - - -/**@brief Get GAP Appearance value. - * - * @param[out] p_appearance Appearance (16-bit), see @ref BLE_APPEARANCES. - * - * @return @ref NRF_SUCCESS Appearance value retrieved successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GAP_APPEARANCE_GET, uint32_t, sd_ble_gap_appearance_get(uint16_t * const p_appearance)); - - -/**@brief Set GAP Peripheral Preferred Connection Parameters. - * - * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure with the desired parameters. - * - * @return @ref NRF_SUCCESS Peripheral Preferred Connection Parameters set successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - */ -SVCALL(SD_BLE_GAP_PPCP_SET, uint32_t, sd_ble_gap_ppcp_set(ble_gap_conn_params_t const * const p_conn_params)); - - -/**@brief Get GAP Peripheral Preferred Connection Parameters. - * - * @param[out] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the parameters will be stored. - * - * @return @ref NRF_SUCCESS Peripheral Preferred Connection Parameters retrieved successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GAP_PPCP_GET, uint32_t, sd_ble_gap_ppcp_get(ble_gap_conn_params_t * const p_conn_params)); - - -/**@brief Set GAP device name. - * - * @param[in] p_write_perm Write permissions for the Device Name characteristic see @ref ble_gap_conn_sec_mode_t. - * @param[in] p_dev_name Pointer to a UTF-8 encoded, <b>non NULL-terminated</b> string. - * @param[in] len Length of the UTF-8, <b>non NULL-terminated</b> string pointed to by p_dev_name in octets (must be smaller or equal than @ref BLE_GAP_DEVNAME_MAX_LEN). - * - * @return @ref NRF_SUCCESS GAP device name and permissions set successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - */ -SVCALL(SD_BLE_GAP_DEVICE_NAME_SET, uint32_t, sd_ble_gap_device_name_set(ble_gap_conn_sec_mode_t const * const p_write_perm, uint8_t const * const p_dev_name, uint16_t len)); - - -/**@brief Get GAP device name. - * - * @param[in] p_dev_name Pointer to an empty buffer where the UTF-8 <b>non NULL-terminated</b> string will be placed. Set to NULL to obtain the complete device name length. - * @param[in,out] p_len Length of the buffer pointed by p_dev_name, complete device name length on output. - * - * @note If the device name is longer than the size of the supplied buffer, - * p_len will return the complete device name length, - * and not the number of bytes actually returned in p_dev_name. - * The application may use this information to allocate a suitable buffer size. - * - * @return @ref NRF_SUCCESS GAP device name retrieved successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - */ -SVCALL(SD_BLE_GAP_DEVICE_NAME_GET, uint32_t, sd_ble_gap_device_name_get(uint8_t * const p_dev_name, uint16_t * const p_len)); - - -/**@brief Initiate GAP Authentication procedure. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_sec_params Pointer to the @ref ble_gap_sec_params_t structure with the security parameters to be used during the pairing procedure. - * - * @details In the central role, this function will send an SMP Pairing Request, otherwise in the peripheral role, an SMP Security Request will be sent. - * In the peripheral role, only the timeout, bond and mitm fields of @ref ble_gap_sec_params_t are used. - * - * @note The GAP Authentication procedure may be triggered by the central without calling this function when accessing a secure service. - * @note Calling this function may result in the following events depending on the outcome and parameters: @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, - * @ref BLE_GAP_EVT_SEC_INFO_REQUEST, @ref BLE_GAP_EVT_AUTH_KEY_REQUEST, @ref BLE_GAP_EVT_AUTH_STATUS. - * @note The timeout parameter in @ref ble_gap_sec_params_t is interpreted here as the Security Request timeout - * - * - * @return @ref NRF_SUCCESS Successfully initiated authentication procedure. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_AUTHENTICATE, uint32_t, sd_ble_gap_authenticate(uint16_t conn_handle, ble_gap_sec_params_t const * const p_sec_params)); - - -/**@brief Reply with GAP security parameters. - * - * @param[in] conn_handle Connection handle. - * @param[in] sec_status Security status, see @ref BLE_GAP_SEC_STATUS. - * @param[in] p_sec_params Pointer to a @ref ble_gap_sec_params_t security parameters structure. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, calling it at other times will result in an NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * @note The timeout parameter in @ref ble_gap_sec_params_t is interpreted here as the SMP procedure timeout, and must be 30 seconds. The function will fail - * if the application supplies a different value. - * - * @return @ref NRF_SUCCESS Successfully accepted security parameter from the application. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_SEC_PARAMS_REPLY, uint32_t, sd_ble_gap_sec_params_reply(uint16_t conn_handle, uint8_t sec_status, ble_gap_sec_params_t const * const p_sec_params)); - - -/**@brief Reply with an authentication key. - * - * @param[in] conn_handle Connection handle. - * @param[in] key_type See @ref BLE_GAP_AUTH_KEY_TYPES. - * @param[in] key If key type is BLE_GAP_AUTH_KEY_TYPE_NONE, then NULL. - * If key type is BLE_GAP_AUTH_KEY_TYPE_PASSKEY, then a 6-byte ASCII string (digit 0..9 only, no NULL termination). - * If key type is BLE_GAP_AUTH_KEY_TYPE_OOB, then a 16-byte OOB key value in Little Endian format. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_AUTH_KEY_REQUEST, calling it at other times will result in an NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * - * @return @ref NRF_SUCCESS Authentication key successfully set. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_AUTH_KEY_REPLY, uint32_t, sd_ble_gap_auth_key_reply(uint16_t conn_handle, uint8_t key_type, uint8_t const * const key)); - - -/**@brief Reply with GAP security information. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. May be NULL to signal none is available. - * @param[in] p_sign_info Pointer to a @ref ble_gap_sign_info_t signing information structure. May be NULL to signal none is available. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_INFO_REQUEST, calling it at other times will result in NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * @note Data signing is not implemented yet. p_sign_info must therefore be NULL. - * - * @return @ref NRF_SUCCESS Successfully accepted security information. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. - */ -SVCALL(SD_BLE_GAP_SEC_INFO_REPLY, uint32_t, sd_ble_gap_sec_info_reply(uint16_t conn_handle, ble_gap_enc_info_t const * const p_enc_info, ble_gap_sign_info_t const * const p_sign_info)); - - -/**@brief Get the current connection security. - * - * @param[in] conn_handle Connection handle. - * @param[out] p_conn_sec Pointer to a @ref ble_gap_conn_sec_t structure to be filled in. - * - * @return @ref NRF_SUCCESS Current connection security successfully retrieved. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_CONN_SEC_GET, uint32_t, sd_ble_gap_conn_sec_get(uint16_t conn_handle, ble_gap_conn_sec_t * const p_conn_sec)); - - -/**@brief Start reporting the received signal strength to the application. - * - * A new event is reported whenever the RSSI value changes, until @ref sd_ble_gap_rssi_stop is called. - * - * @param[in] conn_handle Connection handle. - * - * @return @ref NRF_SUCCESS Successfully activated RSSI reporting. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_RSSI_START, uint32_t, sd_ble_gap_rssi_start(uint16_t conn_handle)); - - -/**@brief Stop reporting the received singnal strength. - * - * An RSSI change detected before the call but not yet received by the application - * may be reported after @ref sd_ble_gap_rssi_stop has been called. - * - * @param[in] conn_handle Connection handle. - * - * @return @ref NRF_SUCCESS Successfully deactivated RSSI reporting. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_RSSI_STOP, uint32_t, sd_ble_gap_rssi_stop(uint16_t conn_handle)); -/**@} */ - -#endif // BLE_GAP_H__ - -/** - @} -*/
--- a/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gatt.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,171 +0,0 @@ -/* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - /** - @addtogroup BLE_GATT Generic Attribute Profile (GATT) Common - @{ - @brief Common definitions and prototypes for the GATT interfaces. - */ - -#ifndef BLE_GATT_H__ -#define BLE_GATT_H__ - -#include "ble_types.h" -#include "ble_ranges.h" - - -/** @addtogroup BLE_GATT_DEFINES Defines - * @{ */ - -/** @brief Default MTU size. */ -#define GATT_MTU_SIZE_DEFAULT 23 - -/** @brief Only the default MTU size of 23 is currently supported. */ -#define GATT_RX_MTU 23 - - -/**@brief Invalid Attribute Handle. */ -#define BLE_GATT_HANDLE_INVALID 0x0000 - -/** @defgroup BLE_GATT_TIMEOUT_SOURCES GATT Timeout sources - * @{ */ -#define BLE_GATT_TIMEOUT_SRC_PROTOCOL 0x00 /**< ATT Protocol timeout. */ -/** @} */ - -/** @defgroup BLE_GATT_WRITE_OPS GATT Write operations - * @{ */ -#define BLE_GATT_OP_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATT_OP_WRITE_REQ 0x01 /**< Write Request. */ -#define BLE_GATT_OP_WRITE_CMD 0x02 /**< Write Command. */ -#define BLE_GATT_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ -#define BLE_GATT_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ -#define BLE_GATT_OP_EXEC_WRITE_REQ 0x05 /**< Execute Write Request. */ -/** @} */ - -/** @defgroup BLE_GATT_EXEC_WRITE_FLAGS GATT Execute Write flags - * @{ */ -#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_CANCEL 0x00 -#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE 0x01 -/** @} */ - -/** @defgroup BLE_GATT_HVX_TYPES GATT Handle Value operations - * @{ */ -#define BLE_GATT_HVX_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATT_HVX_NOTIFICATION 0x01 /**< Handle Value Notification. */ -#define BLE_GATT_HVX_INDICATION 0x02 /**< Handle Value Indication. */ -/** @} */ - -/** @defgroup BLE_GATT_STATUS_CODES GATT Status Codes - * @{ */ -#define BLE_GATT_STATUS_SUCCESS 0x0000 /**< Success. */ -#define BLE_GATT_STATUS_UNKNOWN 0x0001 /**< Unknown or not applicable status. */ -#define BLE_GATT_STATUS_ATTERR_INVALID 0x0100 /**< ATT Error: Invalid Error Code. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_HANDLE 0x0101 /**< ATT Error: Invalid Attribute Handle. */ -#define BLE_GATT_STATUS_ATTERR_READ_NOT_PERMITTED 0x0102 /**< ATT Error: Read not permitted. */ -#define BLE_GATT_STATUS_ATTERR_WRITE_NOT_PERMITTED 0x0103 /**< ATT Error: Write not permitted. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_PDU 0x0104 /**< ATT Error: Used in ATT as Invalid PDU. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHENTICATION 0x0105 /**< ATT Error: Authenticated link required. */ -#define BLE_GATT_STATUS_ATTERR_REQUEST_NOT_SUPPORTED 0x0106 /**< ATT Error: Used in ATT as Request Not Supported. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_OFFSET 0x0107 /**< ATT Error: Offset specified was past the end of the attribute. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHORIZATION 0x0108 /**< ATT Error: Used in ATT as Insufficient Authorisation. */ -#define BLE_GATT_STATUS_ATTERR_PREPARE_QUEUE_FULL 0x0109 /**< ATT Error: Used in ATT as Prepare Queue Full. */ -#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND 0x010A /**< ATT Error: Used in ATT as Attribute not found. */ -#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_LONG 0x010B /**< ATT Error: Attribute cannot be read or written using read/write blob requests. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_ENC_KEY_SIZE 0x010C /**< ATT Error: Encryption key size used is insufficient. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_ATT_VAL_LENGTH 0x010D /**< ATT Error: Invalid value size. */ -#define BLE_GATT_STATUS_ATTERR_UNLIKELY_ERROR 0x010E /**< ATT Error: Very unlikely error. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_ENCRYPTION 0x010F /**< ATT Error: Encrypted link required. */ -#define BLE_GATT_STATUS_ATTERR_UNSUPPORTED_GROUP_TYPE 0x0110 /**< ATT Error: Attribute type is not a supported grouping attribute. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_RESOURCES 0x0111 /**< ATT Error: Encrypted link required. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_BEGIN 0x0112 /**< ATT Error: Reserved for Future Use range #1 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_END 0x017F /**< ATT Error: Reserved for Future Use range #1 end. */ -#define BLE_GATT_STATUS_ATTERR_APP_BEGIN 0x0180 /**< ATT Error: Application range begin. */ -#define BLE_GATT_STATUS_ATTERR_APP_END 0x019F /**< ATT Error: Application range end. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_BEGIN 0x01A0 /**< ATT Error: Reserved for Future Use range #2 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_END 0x01DF /**< ATT Error: Reserved for Future Use range #2 end. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_BEGIN 0x01E0 /**< ATT Error: Reserved for Future Use range #3 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_END 0x01FC /**< ATT Error: Reserved for Future Use range #3 end. */ -#define BLE_GATT_STATUS_ATTERR_CPS_CCCD_CONFIG_ERROR 0x01FD /**< ATT Common Profile and Service Error: Client Characteristic Configuration Descriptor improperly configured. */ -#define BLE_GATT_STATUS_ATTERR_CPS_PROC_ALR_IN_PROG 0x01FE /**< ATT Common Profile and Service Error: Procedure Already in Progress. */ -#define BLE_GATT_STATUS_ATTERR_CPS_OUT_OF_RANGE 0x01FF /**< ATT Common Profile and Service Error: Out Of Range. */ -/** @} */ - - -/** @defgroup BLE_GATT_CPF_FORMATS Characteristic Presentation Formats - * @note Found at http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml - * @{ */ -#define BLE_GATT_CPF_FORMAT_RFU 0x00 /**< Reserved For Future Use. */ -#define BLE_GATT_CPF_FORMAT_BOOLEAN 0x01 /**< Boolean. */ -#define BLE_GATT_CPF_FORMAT_2BIT 0x02 /**< Unsigned 2-bit integer. */ -#define BLE_GATT_CPF_FORMAT_NIBBLE 0x03 /**< Unsigned 4-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT8 0x04 /**< Unsigned 8-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT12 0x05 /**< Unsigned 12-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT16 0x06 /**< Unsigned 16-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT24 0x07 /**< Unsigned 24-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT32 0x08 /**< Unsigned 32-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT48 0x09 /**< Unsigned 48-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT64 0x0A /**< Unsigned 64-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT128 0x0B /**< Unsigned 128-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT8 0x0C /**< Signed 2-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT12 0x0D /**< Signed 12-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT16 0x0E /**< Signed 16-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT24 0x0F /**< Signed 24-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT32 0x10 /**< Signed 32-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT48 0x11 /**< Signed 48-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT64 0x12 /**< Signed 64-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT128 0x13 /**< Signed 128-bit integer. */ -#define BLE_GATT_CPF_FORMAT_FLOAT32 0x14 /**< IEEE-754 32-bit floating point. */ -#define BLE_GATT_CPF_FORMAT_FLOAT64 0x15 /**< IEEE-754 64-bit floating point. */ -#define BLE_GATT_CPF_FORMAT_SFLOAT 0x16 /**< IEEE-11073 16-bit SFLOAT. */ -#define BLE_GATT_CPF_FORMAT_FLOAT 0x17 /**< IEEE-11073 32-bit FLOAT. */ -#define BLE_GATT_CPF_FORMAT_DUINT16 0x18 /**< IEEE-20601 format. */ -#define BLE_GATT_CPF_FORMAT_UTF8S 0x19 /**< UTF-8 string. */ -#define BLE_GATT_CPF_FORMAT_UTF16S 0x1A /**< UTF-16 string. */ -#define BLE_GATT_CPF_FORMAT_STRUCT 0x1B /**< Opaque Structure. */ -/** @} */ - -/** @defgroup BLE_GATT_CPF_NAMESPACES GATT Bluetooth Namespaces - * @{ - */ -#define BLE_GATT_CPF_NAMESPACE_BTSIG 0x01 -#define BLE_GATT_CPF_NAMESPACE_DESCRIPTION_UNKNOWN 0x0000 -/** @} */ - -/** @} */ - -/** @addtogroup BLE_GATT_STRUCTURES Structures - * @{ */ - -/**@brief GATT Characteristic Properties. */ -typedef struct -{ - /* Standard properties */ - uint8_t broadcast :1; /**< Broadcasting of value permitted. */ - uint8_t read :1; /**< Reading value permitted. */ - uint8_t write_wo_resp :1; /**< Writing value with Write Command permitted. */ - uint8_t write :1; /**< Writing value with Write Request permitted. */ - uint8_t notify :1; /**< Notications of value permitted. */ - uint8_t indicate :1; /**< Indications of value permitted. */ - uint8_t auth_signed_wr :1; /**< Writing value with Signed Write Command permitted. */ -} ble_gatt_char_props_t; - -/**@brief GATT Characteristic Extended Properties. */ -typedef struct -{ - /* Extended properties */ - uint8_t reliable_wr :1; /**< Writing value with Queued Write Request permitted. */ - uint8_t wr_aux :1; /**< Writing the Characteristic User Description permitted. */ -} ble_gatt_char_ext_props_t; - -#endif // BLE_GATT_H__ - -/** @} */ - -/** - @} - @} -*/
--- a/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gattc.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,406 +0,0 @@ -/* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_GATTC Generic Attribute Profile (GATT) Client - @{ - @brief Definitions and prototypes for the GATT Client interface. - */ - -#ifndef BLE_GATTC_H__ -#define BLE_GATTC_H__ - -#include "ble_gatt.h" -#include "ble_types.h" -#include "ble_ranges.h" -#include "nrf_svc.h" - -/** @addtogroup BLE_GATTC_ENUMERATIONS Enumerations - * @{ */ - -/**@brief GATTC API SVC numbers. */ -enum BLE_GATTC_SVCS -{ - SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER = BLE_GATTC_SVC_BASE, /**< Primary Service Discovery. */ - SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, /**< Relationship Discovery. */ - SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, /**< Characteristic Discovery. */ - SD_BLE_GATTC_DESCRIPTORS_DISCOVER, /**< Characteristic Descriptor Discovery. */ - SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, /**< Read Characteristic Value by UUID. */ - SD_BLE_GATTC_READ, /**< Generic read. */ - SD_BLE_GATTC_CHAR_VALUES_READ, /**< Read multiple Characteristic Values. */ - SD_BLE_GATTC_WRITE, /**< Generic write. */ - SD_BLE_GATTC_HV_CONFIRM /**< Handle Value Confirmation. */ -}; - -/** @} */ - -/** @addtogroup BLE_GATTC_DEFINES Defines - * @{ */ - -/** @defgroup BLE_ERRORS_GATTC SVC return values specific to GATTC - * @{ */ -#define BLE_ERROR_GATTC_PROC_NOT_PERMITTED (NRF_GATTC_ERR_BASE + 0x000) -/** @} */ - -/**@brief Last Attribute Handle. */ -#define BLE_GATTC_HANDLE_END 0xFFFF - -/** @} */ - -/** @addtogroup BLE_GATTC_STRUCTURES Structures - * @{ */ - -/**@brief Operation Handle Range. */ -typedef struct -{ - uint16_t start_handle; /**< Start Handle. */ - uint16_t end_handle; /**< End Handle. */ -} ble_gattc_handle_range_t; - - -/**@brief GATT service. */ -typedef struct -{ - ble_uuid_t uuid; /**< Service UUID. */ - ble_gattc_handle_range_t handle_range; /**< Service Handle Range. */ -} ble_gattc_service_t; - - -/**@brief GATT include. */ -typedef struct -{ - uint16_t handle; /**< Include Handle. */ - ble_gattc_service_t included_srvc; /**< Handle of the included service. */ -} ble_gattc_include_t; - - -/**@brief GATT characteristic. */ -typedef struct -{ - ble_uuid_t uuid; /**< Characteristic UUID. */ - ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ - uint8_t char_ext_props : 1; /**< Extended properties present. */ - uint16_t handle_decl; /**< Handle of the Characteristic Declaration. */ - uint16_t handle_value; /**< Handle of the Characteristic Value. */ -} ble_gattc_char_t; - - -/**@brief GATT descriptor. */ -typedef struct -{ - uint16_t handle; /**< Descriptor Handle. */ - ble_uuid_t uuid; /**< Descriptor UUID. */ -} ble_gattc_desc_t; - - -/**@brief Write Parameters. */ -typedef struct -{ - uint8_t write_op; /**< Write Operation to be performed, see @ref BLE_GATT_WRITE_OPS. */ - uint16_t handle; /**< Handle to the attribute to be written. */ - uint16_t offset; /**< Offset in bytes. @note For WRITE_CMD and WRITE_REQ, offset must be 0. */ - uint16_t len; /**< Length of data in bytes. */ - uint8_t* p_value; /**< Pointer to the value data. */ - uint8_t flags; /**< Flags, see @ref BLE_GATT_EXEC_WRITE_FLAGS. */ -} ble_gattc_write_params_t; - - -/** - * @brief GATT Client Event IDs. - */ -enum BLE_GATTC_EVTS -{ - BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP = BLE_GATTC_EVT_BASE, /**< Primary Service Discovery Response event. */ - BLE_GATTC_EVT_REL_DISC_RSP, /**< Relationship Discovery Response event. */ - BLE_GATTC_EVT_CHAR_DISC_RSP, /**< Characteristic Discovery Response event. */ - BLE_GATTC_EVT_DESC_DISC_RSP, /**< Descriptor Discovery Response event. */ - BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP, /**< Read By UUID Response event. */ - BLE_GATTC_EVT_READ_RSP, /**< Read Response event. */ - BLE_GATTC_EVT_CHAR_VALS_READ_RSP, /**< Read multiple Response event. */ - BLE_GATTC_EVT_WRITE_RSP, /**< Write Response event. */ - BLE_GATTC_EVT_HVX, /**< Handle Value Notification or Indication event. */ - BLE_GATTC_EVT_TIMEOUT /**< Timeout event. */ -}; - -/**@brief Event structure for BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Service count. */ - ble_gattc_service_t services[1]; /**< Service data, variable length. */ -} ble_gattc_evt_prim_srvc_disc_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_REL_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Include count. */ - ble_gattc_include_t includes[1]; /**< Include data, variable length. */ -} ble_gattc_evt_rel_disc_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_CHAR_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Characteristic count. */ - ble_gattc_char_t chars[1]; /**< Characteristic data, variable length. */ -} ble_gattc_evt_char_disc_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_DESC_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Descriptor count. */ - ble_gattc_desc_t descs[1]; /**< Descriptor data, variable length. */ -} ble_gattc_evt_desc_disc_rsp_t; - -/**@brief GATT read by UUID handle value pair. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint8_t *p_value; /**< Pointer to value, variable length (length available as value_len in ble_gattc_evt_read_by_uuid_rsp_t). - Please note that this pointer is absolute to the memory provided by the user when retrieving the event, - so it will effectively point to a location inside the handle_value array. */ -} ble_gattc_handle_value_t; - -/**@brief Event structure for BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP. */ -typedef struct -{ - uint16_t count; /**< Handle-Value Pair Count. */ - uint16_t value_len; /**< Length of the value in Handle-Value(s) list. */ - ble_gattc_handle_value_t handle_value[1]; /**< Handle-Value(s) list, variable length. */ -} ble_gattc_evt_char_val_by_uuid_read_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_READ_RSP. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint16_t offset; /**< Offset of the attribute data. */ - uint16_t len; /**< Attribute data length. */ - uint8_t data[1]; /**< Attribute data, variable length. */ -} ble_gattc_evt_read_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_CHAR_VALS_READ_RSP. */ -typedef struct -{ - uint16_t len; /**< Concatenated Attribute values length. */ - uint8_t values[1]; /**< Attribute values, variable length. */ -} ble_gattc_evt_char_vals_read_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_WRITE_RSP. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint8_t write_op; /**< Type of write operation, see @ref BLE_GATT_WRITE_OPS. */ - uint16_t offset; /**< Data Offset. */ - uint16_t len; /**< Data length. */ - uint8_t data[1]; /**< Data, variable length. */ -} ble_gattc_evt_write_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_HVX. */ -typedef struct -{ - uint16_t handle; /**< Handle to which the HVx operation applies. */ - uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ - uint16_t len; /**< Attribute data length. */ - uint8_t data[1]; /**< Attribute data, variable length. */ -} ble_gattc_evt_hvx_t; - -/**@brief Event structure for BLE_GATTC_EVT_TIMEOUT. */ -typedef struct -{ - uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ -} ble_gattc_evt_timeout_t; - -/**@brief GATTC event type. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occured. */ - uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ - uint16_t error_handle; /**< In case of error: The handle causing the error. In all other cases BLE_GATT_HANDLE_INVALID. */ - union - { - ble_gattc_evt_prim_srvc_disc_rsp_t prim_srvc_disc_rsp; /**< Primary Service Discovery Response Event Parameters. */ - ble_gattc_evt_rel_disc_rsp_t rel_disc_rsp; /**< Relationship Discovery Response Event Parameters. */ - ble_gattc_evt_char_disc_rsp_t char_disc_rsp; /**< Characteristic Discovery Response Event Parameters. */ - ble_gattc_evt_desc_disc_rsp_t desc_disc_rsp; /**< Descriptor Discovery Response Event Parameters. */ - ble_gattc_evt_char_val_by_uuid_read_rsp_t char_val_by_uuid_read_rsp; /**< Characteristic Value Read by UUID Response Event Parameters. */ - ble_gattc_evt_read_rsp_t read_rsp; /**< Read Response Event Parameters. */ - ble_gattc_evt_char_vals_read_rsp_t char_vals_read_rsp; /**< Characteristic Values Read Response Event Parameters. */ - ble_gattc_evt_write_rsp_t write_rsp; /**< Write Response Event Parameters. */ - ble_gattc_evt_hvx_t hvx; /**< Handle Value Notification/Indication Event Parameters. */ - ble_gattc_evt_timeout_t timeout; /**< Timeout Event Parameters. */ - } params; /**< Event Parameters. @note Only valid if @ref gatt_status == BLE_GATT_STATUS_SUCCESS. */ -} ble_gattc_evt_t; -/** @} */ - -/** @addtogroup BLE_GATTC_FUNCTIONS Functions - * @{ */ - -/**@brief Initiate or continue a GATT Primary Service Discovery procedure. - * - * @details This function initiates a Primary Service discovery, starting from the supplied handle. - * If the last service has not been reached, this must be called again with an updated start handle value to continue the search. - * - * @note If any of the discovered services have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with - * type BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] start_handle Handle to start searching from. - * @param[in] p_srvc_uuid Pointer to the service UUID to be found. If it is NULL, all primary services will be returned. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Primary Service Discovery procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER, uint32_t, sd_ble_gattc_primary_services_discover(uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const * const p_srvc_uuid)); - - -/**@brief Initiate or continue a GATT Relationship Discovery procedure. - * - * @details This function initiates the Find Included Services sub-procedure. If the last included service has not been reached, - * this must be called again with an updated handle range to continue the search. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Relationship Discovery procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, uint32_t, sd_ble_gattc_relationships_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); - - -/**@brief Initiate or continue a GATT Characteristic Discovery procedure. - * - * @details This function initiates a Characteristic discovery procedure. If the last Characteristic has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @note If any of the discovered characteristics have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with - * type BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Characteristic Discovery procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, uint32_t, sd_ble_gattc_characteristics_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); - - -/**@brief Initiate or continue a GATT Characteristic Descriptor Discovery procedure. - * - * @details This function initiates the Characteristic Descriptor discovery procedure. If the last Descriptor has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Characteristic to perform this procedure on. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Descriptor Discovery procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_DESCRIPTORS_DISCOVER, uint32_t, sd_ble_gattc_descriptors_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); - - -/**@brief Initiate or continue a GATT Read using Characteristic UUID procedure. - * - * @details This function initiates the Read using Characteristic UUID procedure. If the last Characteristic has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_uuid Pointer to a Characteristic value UUID to read. - * @param[in] p_handle_range A pointer to the range of handles to perform this procedure on. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Read using Characteristic UUID procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, uint32_t, sd_ble_gattc_char_value_by_uuid_read(uint16_t conn_handle, ble_uuid_t const * const p_uuid, ble_gattc_handle_range_t const * const p_handle_range)); - - -/**@brief Initiate or continue a GATT Read (Long) Characteristic or Descriptor procedure. - * - * @details This function initiates a GATT Read (Long) Characteristic or Descriptor procedure. If the Characteristic or Descriptor - * to be read is longer than GATT_MTU - 1, this function must be called multiple times with appropriate offset to read the - * complete value. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] handle The handle of the attribute to be read. - * @param[in] offset Offset into the attribute value to be read. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Read (Long) procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_READ, uint32_t, sd_ble_gattc_read(uint16_t conn_handle, uint16_t handle, uint16_t offset)); - - -/**@brief Initiate a GATT Read Multiple Characteristic Values procedure. - * - * @details This function initiates a GATT Read Multiple Characteristic Values procedure. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. - * @param[in] handle_count The number of handles in p_handles. - * - * @return @ref NRF_SUCCESS Successfully started the Read Multiple Characteristic Values procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_CHAR_VALUES_READ, uint32_t, sd_ble_gattc_char_values_read(uint16_t conn_handle, uint16_t const * const p_handles, uint16_t handle_count)); - - -/**@brief Perform a Write (Characteristic Value or Descriptor, with or without response, signed or not, long or reliable) procedure. - * - * @details This function can perform all write procedures described in GATT. - * - * @note It is important to note that a write without response will <b>consume an application buffer</b>, and will therefore - * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. A write on the other hand will use the - * standard client internal buffer and thus will only generate a @ref BLE_GATTC_EVT_WRITE_RSP event as soon as the write response - * has been received from the peer. Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_write_params A pointer to a write parameters structure. - * - * @return @ref NRF_SUCCESS Successfully started the Write procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - * @return @ref NRF_ERROR_BUSY Procedure already in progress. - * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers left. - */ -SVCALL(SD_BLE_GATTC_WRITE, uint32_t, sd_ble_gattc_write(uint16_t conn_handle, ble_gattc_write_params_t const * const p_write_params)); - - -/**@brief Send a Handle Value Confirmation to the GATT Server. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] handle The handle of the attribute in the indication. - * - * @return @ref NRF_SUCCESS Successfully queued the Handle Value Confirmation for transmission. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_STATE No Indication pending to be confirmed. - * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle. - * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers left. - */ -SVCALL(SD_BLE_GATTC_HV_CONFIRM, uint32_t, sd_ble_gattc_hv_confirm(uint16_t conn_handle, uint16_t handle)); - -/** @} */ - -#endif /* BLE_GATTC_H__ */ - -/** - @} - @} -*/
--- a/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gatts.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,566 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_GATTS Generic Attribute Profile (GATT) Server - @{ - @brief Definitions and prototypes for the GATTS interface. - */ - -#ifndef BLE_GATTS_H__ -#define BLE_GATTS_H__ - -#include "ble_types.h" -#include "ble_ranges.h" -#include "ble_l2cap.h" -#include "ble_gap.h" -#include "ble_gatt.h" -#include "nrf_svc.h" - -/** @addtogroup BLE_GATTS_ENUMERATIONS Enumerations - * @{ */ - -/** - * @brief GATTS API SVC numbers. - */ -enum BLE_GATTS_SVCS -{ - SD_BLE_GATTS_SERVICE_ADD = BLE_GATTS_SVC_BASE, /**< Add a service. */ - SD_BLE_GATTS_INCLUDE_ADD, /**< Add an included service. */ - SD_BLE_GATTS_CHARACTERISTIC_ADD, /**< Add a characteristic. */ - SD_BLE_GATTS_DESCRIPTOR_ADD, /**< Add a generic attribute. */ - SD_BLE_GATTS_VALUE_SET, /**< Set an attribute value. */ - SD_BLE_GATTS_VALUE_GET, /**< Get an attribute value. */ - SD_BLE_GATTS_HVX, /**< Handle Value Notification or Indication. */ - SD_BLE_GATTS_SERVICE_CHANGED, /**< Perform a Service Changed Indication to one or more peers. */ - SD_BLE_GATTS_RW_AUTHORIZE_REPLY, /**< Reply to an authorization request for a read or write operation on one or more attributes. */ - SD_BLE_GATTS_SYS_ATTR_SET, /**< Set the persistent system attributes for a connection. */ - SD_BLE_GATTS_SYS_ATTR_GET, /**< Get updated persistent system attributes after terminating a connection. */ -}; - -/** @} */ - -/** @addtogroup BLE_GATTS_DEFINES Defines - * @{ */ - -/** @brief Only the default MTU size of 23 is currently supported. */ -#define GATT_RX_MTU 23 - -/** @defgroup BLE_ERRORS_GATTS SVC return values specific to GATTS - * @{ */ -#define BLE_ERROR_GATTS_INVALID_ATTR_TYPE (NRF_GATTS_ERR_BASE + 0x000) /**< Invalid attribute type. */ -#define BLE_ERROR_GATTS_SYS_ATTR_MISSING (NRF_GATTS_ERR_BASE + 0x001) /**< System Attributes missing. */ -/** @} */ - -/** @defgroup BLE_GATTS_ATTR_LENS_MAX Maximum attribute lengths - * @{ */ -#define BLE_GATTS_FIX_ATTR_LEN_MAX (510) /**< Maximum length for fixed length Attribute Values. */ -#define BLE_GATTS_VAR_ATTR_LEN_MAX (512) /**< Maximum length for variable length Attribute Values. */ -/** @} */ - -/** @defgroup BLE_GATTS_SRVC_TYPES GATT Server Service Types - * @{ */ -#define BLE_GATTS_SRVC_TYPE_INVALID 0x00 /**< Invalid Service Type. */ -#define BLE_GATTS_SRVC_TYPE_PRIMARY 0x01 /**< Primary Service. */ -#define BLE_GATTS_SRVC_TYPE_SECONDARY 0x02 /**< Secondary Type. */ -/** @} */ - - -/** @defgroup BLE_GATTS_ATTR_TYPES GATT Server Attribute Types - * @{ */ -#define BLE_GATTS_ATTR_TYPE_INVALID 0x00 /**< Invalid Attribute Type. */ -#define BLE_GATTS_ATTR_TYPE_PRIM_SRVC_DECL 0x01 /**< Primary Service Declaration. */ -#define BLE_GATTS_ATTR_TYPE_SEC_SRVC_DECL 0x02 /**< Secondary Service Declaration. */ -#define BLE_GATTS_ATTR_TYPE_INC_DECL 0x03 /**< Include Declaration. */ -#define BLE_GATTS_ATTR_TYPE_CHAR_DECL 0x04 /**< Characteristic Declaration. */ -#define BLE_GATTS_ATTR_TYPE_CHAR_VAL 0x05 /**< Characteristic Value. */ -#define BLE_GATTS_ATTR_TYPE_DESC 0x06 /**< Descriptor. */ -#define BLE_GATTS_ATTR_TYPE_OTHER 0x07 /**< Other, non-GATT specific type. */ -/** @} */ - - -/** @defgroup BLE_GATTS_OPS GATT Server Operations - * @{ */ -#define BLE_GATTS_OP_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATTS_OP_WRITE_REQ 0x01 /**< Write Request. */ -#define BLE_GATTS_OP_WRITE_CMD 0x02 /**< Write Command. */ -#define BLE_GATTS_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ -#define BLE_GATTS_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ -#define BLE_GATTS_OP_EXEC_WRITE_REQ_CANCEL 0x05 /**< Execute Write Request: Cancel all prepared writes. */ -#define BLE_GATTS_OP_EXEC_WRITE_REQ_NOW 0x06 /**< Execute Write Request: Immediately execute all prepared writes. */ -/** @} */ - -/** @defgroup BLE_GATTS_VLOCS GATT Value Locations - * @{ */ -#define BLE_GATTS_VLOC_INVALID 0x00 /**< Invalid Location. */ -#define BLE_GATTS_VLOC_STACK 0x01 /**< Attribute Value is located in stack memory, no user memory is required. */ -#define BLE_GATTS_VLOC_USER 0x02 /**< Attribute Value is located in user memory. This requires the user to maintain a valid buffer through the lifetime of the attribute, since the stack - will read and write directly to the memory using the pointer provided in the APIs. There are no alignment requirements for the buffer. */ -/** @} */ - -/** @defgroup BLE_GATTS_AUTHORIZE_TYPES GATT Server Authorization Types - * @{ */ -#define BLE_GATTS_AUTHORIZE_TYPE_INVALID 0x00 /**< Invalid Type. */ -#define BLE_GATTS_AUTHORIZE_TYPE_READ 0x01 /**< Authorize a Read Operation. */ -#define BLE_GATTS_AUTHORIZE_TYPE_WRITE 0x02 /**< Authorize a Write Request Operation. */ -/** @} */ - - -/** @} */ - -/** @addtogroup BLE_GATTS_STRUCTURES Structures - * @{ */ - -/** - * @brief BLE GATTS init options - */ -typedef struct -{ - uint8_t service_changed:1; /**< Include the Service Changed characteristic in the local attributes. */ -} ble_gatts_enable_params_t; - -/**@brief Attribute metadata. */ -typedef struct -{ - ble_gap_conn_sec_mode_t read_perm; /**< Read permissions. */ - ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ - uint8_t vlen :1; /**< Variable length attribute. */ - uint8_t vloc :2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ - uint8_t rd_auth :1; /**< Read Authorization and value will be requested from the application on every read operation. */ - uint8_t wr_auth :1; /**< Write Authorization will be requested from the application on every Write Request operation (but not Write Command). */ -} ble_gatts_attr_md_t; - - -/**@brief GATT Attribute. */ -typedef struct -{ - ble_uuid_t* p_uuid; /**< Pointer to the attribute UUID. */ - ble_gatts_attr_md_t* p_attr_md; /**< Pointer to the attribute metadata structure. */ - uint16_t init_len; /**< Initial attribute value length in bytes. */ - uint16_t init_offs; /**< Initial attribute value offset in bytes. If different from zero, the first init_offs bytes of the attribute value will be left uninitialized. */ - uint16_t max_len; /**< Maximum attribute value length in bytes, see @ref BLE_GATTS_ATTR_LENS_MAX for maximum values. */ - uint8_t* p_value; /**< Pointer to the attribute data. Please note that if the @ref BLE_GATTS_VLOC_USER value location is selected in the attribute metadata, this will have to point to a buffer - that remains valid through the lifetime of the attribute. This excludes usage of automatic variables that may go out of scope or any other temporary location. - The stack may access that memory directly without the application's knowledge. */ -} ble_gatts_attr_t; - - -/**@brief GATT Attribute Context. */ -typedef struct -{ - ble_uuid_t srvc_uuid; /**< Service UUID. */ - ble_uuid_t char_uuid; /**< Characteristic UUID if applicable (BLE_UUID_TYPE_UNKNOWN if N/A). */ - ble_uuid_t desc_uuid; /**< Descriptor UUID if applicable (BLE_UUID_TYPE_UNKNOWN if N/A). */ - uint16_t srvc_handle; /**< Service Handle. */ - uint16_t value_handle; /**< Characteristic Handle if applicable (BLE_GATT_HANDLE_INVALID if N/A). */ - uint8_t type; /**< Attribute Type, see @ref BLE_GATTS_ATTR_TYPES. */ -} ble_gatts_attr_context_t; - - -/**@brief GATT Characteristic Presentation Format. */ -typedef struct -{ - uint8_t format; /**< Format of the value, see @ref BLE_GATT_CPF_FORMATS. */ - int8_t exponent; /**< Exponent for integer data types. */ - uint16_t unit; /**< UUID from Bluetooth Assigned Numbers. */ - uint8_t name_space; /**< Namespace from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ - uint16_t desc; /**< Namespace description from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ -} ble_gatts_char_pf_t; - - -/**@brief GATT Characteristic metadata. */ -typedef struct -{ - ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ - ble_gatt_char_ext_props_t char_ext_props; /**< Characteristic Extended Properties. */ - uint8_t* p_char_user_desc; /**< Pointer to a UTF-8, NULL if the descriptor is not required. */ - uint16_t char_user_desc_max_size; /**< The maximum size in bytes of the user description descriptor. */ - uint16_t char_user_desc_size; /**< The size of the user description, must be smaller or equal to char_user_desc_max_size. */ - ble_gatts_char_pf_t* p_char_pf; /**< Pointer to a presentation format structure or NULL if the descriptor is not required. */ - ble_gatts_attr_md_t* p_user_desc_md; /**< Attribute metadata for the User Description descriptor, or NULL for default values. */ - ble_gatts_attr_md_t* p_cccd_md; /**< Attribute metadata for the Client Characteristic Configuration Descriptor, or NULL for default values. */ - ble_gatts_attr_md_t* p_sccd_md; /**< Attribute metadata for the Server Characteristic Configuration Descriptor, or NULL for default values. */ -} ble_gatts_char_md_t; - - -/**@brief GATT Characteristic Definition Handles. */ -typedef struct -{ - uint16_t value_handle; /**< Handle to the characteristic value. */ - uint16_t user_desc_handle; /**< Handle to the User Description descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ - uint16_t cccd_handle; /**< Handle to the Client Characteristic Configuration Descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ - uint16_t sccd_handle; /**< Handle to the Server Characteristic Configuration Descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ -} ble_gatts_char_handles_t; - - -/**@brief GATT HVx parameters. */ -typedef struct -{ - uint16_t handle; /**< Characteristic Value Handle. */ - uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ - uint16_t offset; /**< Offset within the attribute value. */ - uint16_t* p_len; /**< Length in bytes to be written, length in bytes written after successful return. */ - uint8_t* p_data; /**< Actual data content, use NULL to use the current attribute value. */ -} ble_gatts_hvx_params_t; - -/**@brief GATT Read Authorization parameters. */ -typedef struct -{ - uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ - uint8_t update : 1; /**< If set, data supplied in p_data will be used in the ATT response. */ - uint16_t offset; /**< Offset of the attribute value being updated. */ - uint16_t len; /**< Length in bytes of the value in p_data pointer, see @ref BLE_GATTS_ATTR_LENS_MAX. */ - uint8_t* p_data; /**< Pointer to new value used to update the attribute value. */ -} ble_gatts_read_authorize_params_t; - -/**@brief GATT Write Authorisation parameters. */ -typedef struct -{ - uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ -} ble_gatts_write_authorize_params_t; - -/**@brief GATT Read or Write Authorize Reply parameters. */ -typedef struct -{ - uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ - union { - ble_gatts_read_authorize_params_t read; /**< Read authorization parameters. */ - ble_gatts_write_authorize_params_t write; /**< Write authorization parameters. */ - } params; -} ble_gatts_rw_authorize_reply_params_t; - - -/** - * @brief GATT Server Event IDs. - */ -enum BLE_GATTS_EVTS -{ - BLE_GATTS_EVT_WRITE = BLE_GATTS_EVT_BASE, /**< Write operation performed. */ - BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST, /**< Read/Write Authorization request. */ - BLE_GATTS_EVT_SYS_ATTR_MISSING, /**< A persistent system attribute access is pending, awaiting a sd_ble_gatts_sys_attr_set(). */ - BLE_GATTS_EVT_HVC, /**< Handle Value Confirmation. */ - BLE_GATTS_EVT_SC_CONFIRM, /**< Service Changed Confirmation. */ - BLE_GATTS_EVT_TIMEOUT /**< Timeout. */ -}; - - -/**@brief Event structure for BLE_GATTS_EVT_WRITE. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint8_t op; /**< Type of write operation, see @ref BLE_GATTS_OPS. */ - ble_gatts_attr_context_t context; /**< Attribute Context. */ - uint16_t offset; /**< Offset for the write operation. */ - uint16_t len; /**< Length of the incoming data. */ - uint8_t data[1]; /**< Incoming data, variable length. */ -} ble_gatts_evt_write_t; - -/**@brief Event structure for authorize read request. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - ble_gatts_attr_context_t context; /**< Attribute Context. */ - uint16_t offset; /**< Offset for the read operation. */ -} ble_gatts_evt_read_t; - -/**@brief Event structure for BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST. */ -typedef struct -{ - uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ - union { - ble_gatts_evt_read_t read; /**< Attribute Read Parameters. */ - ble_gatts_evt_write_t write; /**< Attribute Write Parameters. */ - } request; -} ble_gatts_evt_rw_authorize_request_t; - -/**@brief Event structure for BLE_GATTS_EVT_SYS_ATTR_MISSING. */ -typedef struct -{ - uint8_t hint; -} ble_gatts_evt_sys_attr_missing_t; - - -/**@brief Event structure for BLE_GATTS_EVT_HVC. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ -} ble_gatts_evt_hvc_t; - -/**@brief Event structure for BLE_GATTS_EVT_TIMEOUT. */ -typedef struct -{ - uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ -} ble_gatts_evt_timeout_t; - - -/**@brief GATT Server event callback event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occurred. */ - union - { - ble_gatts_evt_write_t write; /**< Write Event Parameters. */ - ble_gatts_evt_rw_authorize_request_t authorize_request; /**< Read or Write Authorize Request Parameters. */ - ble_gatts_evt_sys_attr_missing_t sys_attr_missing; /**< System attributes missing. */ - ble_gatts_evt_hvc_t hvc; /**< Handle Value Confirmation Event Parameters. */ - ble_gatts_evt_timeout_t timeout; /**< Timeout Event. */ - } params; -} ble_gatts_evt_t; - -/** @} */ - -/** @addtogroup BLE_GATTS_FUNCTIONS Functions - * @{ */ - -/**@brief Add a service declaration to the local server ATT table. - * - * @param[in] type Toggles between primary and secondary services, see @ref BLE_GATTS_SRVC_TYPES. - * @param[in] p_uuid Pointer to service UUID. - * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @note Secondary Services are only relevant in the context of the entity that references them, it is therefore forbidden to - * add a secondary service declaration that is not referenced by another service later in the ATT table. - * - * @return @ref NRF_SUCCESS Successfully added a service declaration. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, Vendor Specific UUIDs need to be present in the table. - * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GATTS_SERVICE_ADD, uint32_t, sd_ble_gatts_service_add(uint8_t type, ble_uuid_t const*const p_uuid, uint16_t *const p_handle)); - - -/**@brief Add an include declaration to the local server ATT table. - * - * @note It is currently only possible to add an include declaration to the last added service (i.e. only sequential addition is supported at this time). - * - * @note The included service must already be present in the ATT table prior to this call. - * - * @param[in] service_handle Handle of the service where the included service is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] inc_srvc_handle Handle of the included service. - * @param[out] p_include_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @return @ref NRF_SUCCESS Successfully added an include declaration. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, handle values need to match previously added services. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, self inclusions are not allowed. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. - */ -SVCALL(SD_BLE_GATTS_INCLUDE_ADD, uint32_t, sd_ble_gatts_include_add(uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *const p_include_handle)); - - -/**@brief Add a characteristic declaration, a characteristic value declaration and optional characteristic descriptor declarations to the local server ATT table. - * - * @note It is currently only possible to add a characteristic to the last added service (i.e. only sequential addition is supported at this time). - * - * @note Several restrictions apply to the parameters, such as matching permissions between the user description descriptor and the writeable auxiliaries bits, - * readable (no security) and writeable (selectable) CCCDs and SCCDs and valid presentation format values. - * - * @note If no metadata is provided for the optional descriptors, their permissions will be derived from the characteristic permissions. - * - * @param[in] service_handle Handle of the service where the characteristic is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] p_char_md Characteristic metadata. - * @param[in] p_attr_char_value Pointer to the attribute structure corresponding to the characteristic value. - * @param[out] p_handles Pointer to the structure where the assigned handles will be stored. - * - * @return @ref NRF_SUCCESS Successfully added a characteristic. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, service handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required. - * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - */ -SVCALL(SD_BLE_GATTS_CHARACTERISTIC_ADD, uint32_t, sd_ble_gatts_characteristic_add(uint16_t service_handle, ble_gatts_char_md_t const*const p_char_md, ble_gatts_attr_t const*const p_attr_char_value, ble_gatts_char_handles_t *const p_handles)); - - -/**@brief Add a descriptor to the local server ATT table. - * - * @note It is currently only possible to add a descriptor to the last added characteristic (i.e. only sequential addition is supported at this time). - * - * @param[in] char_handle Handle of the characteristic where the descriptor is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] p_attr Pointer to the attribute structure. - * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @return @ref NRF_SUCCESS Successfully added a descriptor. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, characteristic handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, a characteristic context is required. - * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - */ -SVCALL(SD_BLE_GATTS_DESCRIPTOR_ADD, uint32_t, sd_ble_gatts_descriptor_add(uint16_t char_handle, ble_gatts_attr_t const * const p_attr, uint16_t* const p_handle)); - -/**@brief Set the value of a given attribute. - * - * @param[in] handle Attribute handle. - * @param[in] offset Offset in bytes to write from. - * @param[in,out] p_len Length in bytes to be written, length in bytes written after successful return. - * @param[in] p_value Pointer to a buffer (at least len bytes long) containing the desired attribute value. If value is stored in user memory, only the attribute length is updated when p_value == NULL. - * - * @return @ref NRF_SUCCESS Successfully set the value of the attribute. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. - * @return @ref NRF_ERROR_FORBIDDEN Forbidden handle supplied, certain attributes are not modifiable by the application. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - */ -SVCALL(SD_BLE_GATTS_VALUE_SET, uint32_t, sd_ble_gatts_value_set(uint16_t handle, uint16_t offset, uint16_t* const p_len, uint8_t const * const p_value)); - -/**@brief Get the value of a given attribute. - * - * @param[in] handle Attribute handle. - * @param[in] offset Offset in bytes to read from. - * @param[in,out] p_len Length in bytes to be read, total length of attribute value (in bytes, starting from offset) after successful return. - * @param[in,out] p_data Pointer to a buffer (at least len bytes long) where to store the attribute value. Set to NULL to obtain the complete length of attribute value. - * - * @note If the attribute value is longer than the size of the supplied buffer, - * p_len will return the total attribute value length (excluding offset), - * and not the number of bytes actually returned in p_data. - * The application may use this information to allocate a suitable buffer size. - * - * @return @ref NRF_SUCCESS Successfully retrieved the value of the attribute. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. - */ -SVCALL(SD_BLE_GATTS_VALUE_GET, uint32_t, sd_ble_gatts_value_get(uint16_t handle, uint16_t offset, uint16_t *const p_len, uint8_t* const p_data)); - -/**@brief Notify or Indicate an attribute value. - * - * @details This function checks for the relevant Client Characteristic Configuration descriptor value to verify that the relevant operation - * (notification or indication) has been enabled by the client. It is also able to update the attribute value before issuing the PDU, so that - * the application can atomically perform a value update and a server initiated transaction with a single API call. - * If the application chooses to indicate an attribute value, a @ref BLE_GATTS_EVT_HVC will be sent up as soon as the confirmation arrives from - * the peer. - * - * @note The local attribute value may be updated even if an outgoing packet is not sent to the peer due to an error during execution. - * When receiveing the error codes @ref NRF_ERROR_INVALID_STATE, @ref NRF_ERROR_BUSY, @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING and - * @ref BLE_ERROR_NO_TX_BUFFERS the ATT table has been updated. - * The caller can check whether the value has been updated by looking at the contents of *(p_hvx_params->p_len). - * - * @note It is important to note that a notification will <b>consume an application buffer</b>, and will therefore - * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. An indication on the other hand will use the - * standard server internal buffer and thus will only generate a @ref BLE_GATTS_EVT_HVC event as soon as the confirmation - * has been received from the peer. Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_hvx_params Pointer to an HVx parameters structure. If the p_data member contains a non-NULL pointer the attribute value will be updated with - * the contents pointed by it before sending the notification or indication. - * - * @return @ref NRF_SUCCESS Successfully queued a notification or indication for transmission, and optionally updated the attribute value. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied. Only attributes added directly by the application are available to notify and indicate. - * @return @ref BLE_ERROR_GATTS_INVALID_ATTR_TYPE Invalid attribute type(s) supplied, only characteristic values may be notified and indicated. - * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, notifications or indications must be enabled in the CCCD. - * @return @ref NRF_ERROR_BUSY Procedure already in progress. - * @return @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. - * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers to send the data, applies only to notifications. - */ -SVCALL(SD_BLE_GATTS_HVX, uint32_t, sd_ble_gatts_hvx(uint16_t conn_handle, ble_gatts_hvx_params_t const*const p_hvx_params)); - -/**@brief Indicate the Service Changed attribute value. - * - * @details This call will send a Handle Value Indication to one or more peers connected to inform them that the attribute - * table layout has changed. As soon as the peer has confirmed the indication, a @ref BLE_GATTS_EVT_SC_CONFIRM event will - * be issued. - * - * @note Some of the restrictions and limitations that apply to @ref sd_ble_gatts_hvx also apply here. - * - * @param[in] conn_handle Connection handle. - * @param[in] start_handle Start of affected attribute handle range. - * @param[in] end_handle End of affected attribute handle range. - * - * @return @ref NRF_SUCCESS Successfully queued the Service Changed indication for transmission. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied, handles must be in the range populated by the application. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, notifications or indications must be enabled in the CCCD. - * @return @ref NRF_ERROR_BUSY Procedure already in progress. - * @return @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. - */ -SVCALL(SD_BLE_GATTS_SERVICE_CHANGED, uint32_t, sd_ble_gatts_service_changed(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle)); - -/**@brief Respond to a Read/Write authorization request. - * - * @note This call should only be used as a response to a @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST event issued to the application. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_rw_authorize_reply_params Pointer to a structure with the attribute provided by the application. - * - * @return @ref NRF_SUCCESS Successfully queued a response to the peer, and in the case of a write operation, ATT table updated. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_STATE No authorization request pending. - * @return @ref NRF_ERROR_INVALID_PARAM Authorization op invalid, - * or for Read Authorization reply: requested handles not replied with, - * or for Write Authorization reply: handle supplied does not match requested handle. - */ -SVCALL(SD_BLE_GATTS_RW_AUTHORIZE_REPLY, uint32_t, sd_ble_gatts_rw_authorize_reply(uint16_t conn_handle, ble_gatts_rw_authorize_reply_params_t const*const p_rw_authorize_reply_params)); - - -/**@brief Update persistent system attribute information. - * - * @details Supply to the stack information about persistent system attributes. - * This call is legal in the connected state only, and is usually - * made immediately after a connection is established and the bond identified. - * usually as a response to a BLE_GATTS_EVT_SYS_ATTR_MISSING. - * - * p_sysattrs may point directly to the application's stored copy of the struct. - * If the pointer is NULL, the system attribute info is initialized, assuming that - * the application does not have any previously saved data for this bond. - * - * @note The state of persistent system attributes is reset upon connection and then remembered for its duration. - * - * @note If this call returns with an error code different from @ref NRF_SUCCESS, the storage of persistent system attributes may have been completed only partially. - * This means that the state of the attribute table is undefined, and the application should either provide a new set of attributes using this same call or - * reset the SoftDevice to return to a known state. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_sys_attr_data Pointer to a saved copy of system attributes supplied to the stack, or NULL. - * @param[in] len Size of data pointed by p_sys_attr_data, in octets. - * - * @return @ref NRF_SUCCESS Successfully set the system attribute information. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_DATA Invalid data supplied, the data should be exactly the same as retrieved with @ref sd_ble_gatts_sys_attr_get. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GATTS_SYS_ATTR_SET, uint32_t, sd_ble_gatts_sys_attr_set(uint16_t conn_handle, uint8_t const*const p_sys_attr_data, uint16_t len)); - - -/**@brief Retrieve persistent system attribute information from the stack. - * - * @details This call is used to retrieve information about values to be stored perisistently by the application - * after a connection has been terminated. When a new connection is made to the same bond, the values - * should be restored using @ref sd_ble_gatts_sys_attr_set. - * The data should be read before any new advertising is started, or any new connection established. The connection handle for - * the previous now defunct connection will remain valid until a new one is created to allow this API call to refer to it. - * - * @param[in] conn_handle Connection handle of the recently terminated connection. - * @param[in] p_sys_attr_data Pointer to a buffer where updated information about system attributes will be filled in. NULL can be provided to - * obtain the length of the data - * @param[in,out] p_len Size of application buffer if p_sys_attr_data is not NULL. Unconditially updated to actual length of system attribute data. - * - * @return @ref NRF_SUCCESS Successfully retrieved the system attribute information. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_DATA_SIZE The system attribute information did not fit into the provided buffer. - */ -SVCALL(SD_BLE_GATTS_SYS_ATTR_GET, uint32_t, sd_ble_gatts_sys_attr_get(uint16_t conn_handle, uint8_t * const p_sys_attr_data, uint16_t* const p_len)); - -/** @} */ - -#endif // BLE_GATTS_H__ - -/** - @} -*/
--- a/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_hci.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,96 +0,0 @@ -/* - Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - - The information contained herein is confidential property of Nordic Semiconductor. The use, - copying, transfer or disclosure of such information is prohibited except by express written - agreement with Nordic Semiconductor. - */ -/** - @addtogroup BLE_COMMON - @{ -*/ - - -#ifndef BLE_HCI_H__ -#define BLE_HCI_H__ - -/** @defgroup BLE_HCI_STATUS_CODES Bluetooth status codes - * @{ */ - -#define BLE_HCI_STATUS_CODE_SUCCESS 0x00 -#define BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND 0x01 -#define BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER 0x02 -/*0x03 Hardware Failure -0x04 Page Timeout -*/ -#define BLE_HCI_AUTHENTICATION_FAILURE 0x05 -#define BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING 0x06 -#define BLE_HCI_MEMORY_CAPACITY_EXCEEDED 0x07 -#define BLE_HCI_CONNECTION_TIMEOUT 0x08 -/*0x09 Connection Limit Exceeded -0x0A Synchronous Connection Limit To A Device Exceeded -0x0B ACL Connection Already Exists*/ -#define BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED 0x0C -/*0x0D Connection Rejected due to Limited Resources -0x0E Connection Rejected Due To Security Reasons -0x0F Connection Rejected due to Unacceptable BD_ADDR -0x10 Connection Accept Timeout Exceeded -0x11 Unsupported Feature or Parameter Value*/ -#define BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS 0x12 -#define BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION 0x13 -#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES 0x14 -#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF 0x15 -#define BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION 0x16 -/* -0x17 Repeated Attempts -0x18 Pairing Not Allowed -0x19 Unknown LMP PDU -*/ -#define BLE_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1A -/* -0x1B SCO Offset Rejected -0x1C SCO Interval Rejected -0x1D SCO Air Mode Rejected*/ -#define BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS 0x1E -#define BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR 0x1F -/*0x20 Unsupported LMP Parameter Value -0x21 Role Change Not Allowed -*/ -#define BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT 0x22 -/*0x23 LMP Error Transaction Collision*/ -#define BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED 0x24 -/*0x25 Encryption Mode Not Acceptable -0x26 Link Key Can Not be Changed -0x27 Requested QoS Not Supported -*/ -#define BLE_HCI_INSTANT_PASSED 0x28 -#define BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED 0x29 -#define BLE_HCI_DIFFERENT_TRANSACTION_COLLISION 0x2A -/* -0x2B Reserved -0x2C QoS Unacceptable Parameter -0x2D QoS Rejected -0x2E Channel Classification Not Supported -0x2F Insufficient Security -0x30 Parameter Out Of Mandatory Range -0x31 Reserved -0x32 Role Switch Pending -0x33 Reserved -0x34 Reserved Slot Violation -0x35 Role Switch Failed -0x36 Extended Inquiry Response Too Large -0x37 Secure Simple Pairing Not Supported By Host. -0x38 Host Busy - Pairing -0x39 Connection Rejected due to No Suitable Channel Found*/ -#define BLE_HCI_CONTROLLER_BUSY 0x3A -#define BLE_HCI_CONN_INTERVAL_UNACCEPTABLE 0x3B -#define BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT 0x3C -#define BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE 0x3D -#define BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED 0x3E - -/** @} */ - - -#endif // BLE_HCI_H__ - -/** @} */
--- a/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_l2cap.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,144 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_L2CAP Logical Link Control and Adaptation Protocol (L2CAP) - @{ - @brief Definitions and prototypes for the L2CAP interface. - */ - -#ifndef BLE_L2CAP_H__ -#define BLE_L2CAP_H__ - -#include "ble_types.h" -#include "ble_ranges.h" -#include "ble_err.h" -#include "nrf_svc.h" - -/**@addtogroup BLE_L2CAP_ENUMERATIONS Enumerations - * @{ */ - -/**@brief L2CAP API SVC numbers. */ -enum BLE_L2CAP_SVCS -{ - SD_BLE_L2CAP_CID_REGISTER = BLE_L2CAP_SVC_BASE, /**< Register a CID. */ - SD_BLE_L2CAP_CID_UNREGISTER, /**< Unregister a CID. */ - SD_BLE_L2CAP_TX /**< Transmit a packet. */ -}; - -/** @} */ - -/**@addtogroup BLE_L2CAP_DEFINES Defines - * @{ */ - -/**@defgroup BLE_ERRORS_L2CAP SVC return values specific to L2CAP - * @{ */ -#define BLE_ERROR_L2CAP_CID_IN_USE (NRF_L2CAP_ERR_BASE + 0x000) /**< CID already in use. */ -/** @} */ - -/**@brief Default L2CAP MTU. */ -#define BLE_L2CAP_MTU_DEF (23) - -/**@brief Invalid Channel Identifier. */ -#define BLE_L2CAP_CID_INVALID (0x0000) - -/**@brief Dynamic Channel Identifier base. */ -#define BLE_L2CAP_CID_DYN_BASE (0x0040) - -/**@brief Maximum amount of dynamic CIDs. */ -#define BLE_L2CAP_CID_DYN_MAX (8) - -/** @} */ - -/**@addtogroup BLE_L2CAP_STRUCTURES Structures - * @{ */ - -/**@brief Packet header format for L2CAP transmission. */ -typedef struct -{ - uint16_t len; /**< Length of valid info in data member. */ - uint16_t cid; /**< Channel ID on which packet is transmitted. */ -} ble_l2cap_header_t; - -/**@brief L2CAP Event IDs. */ -enum BLE_L2CAP_EVTS -{ - BLE_L2CAP_EVT_RX = BLE_L2CAP_EVT_BASE /**< L2CAP packet received. */ -}; - - -/**@brief L2CAP Received packet event report. */ -typedef struct -{ - ble_l2cap_header_t header; /** L2CAP packet header. */ - uint8_t data[1]; /**< Packet data, variable length. */ -} ble_l2cap_evt_rx_t; - - -/**@brief L2CAP event callback event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occured. */ - union - { - ble_l2cap_evt_rx_t rx; /**< RX Event parameters. */ - } params; -} ble_l2cap_evt_t; - - -/**@brief Register a CID with L2CAP. - * - * @details This registers a higher protocol layer with the L2CAP multiplexer, and is requried prior to all operations on the CID. - * - * @param[in] cid L2CAP CID. - * - * @return @ref NRF_SUCCESS Successfully registered a CID with the L2CAP layer. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, CID must be above @ref BLE_L2CAP_CID_DYN_BASE. - * @return @ref BLE_ERROR_L2CAP_CID_IN_USE L2CAP CID already in use. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_L2CAP_CID_REGISTER, uint32_t, sd_ble_l2cap_cid_register(uint16_t cid)); - -/**@brief Unregister a CID with L2CAP. - * - * @details This unregisters a previously registerd higher protocol layer with the L2CAP multiplexer. - * - * @param[in] cid L2CAP CID. - * - * @return @ref NRF_SUCCESS Successfully unregistered the CID. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_NOT_FOUND CID not previously registered. - */ -SVCALL(SD_BLE_L2CAP_CID_UNREGISTER, uint32_t, sd_ble_l2cap_cid_unregister(uint16_t cid)); - -/**@brief Transmit an L2CAP packet. - * - * @note It is important to note that a call to this function will <b>consume an application buffer</b>, and will therefore - * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. - * Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. - * - * @param[in] conn_handle Connection Handle. - * @param[in] p_header Pointer to a packet header containing length and CID. - * @param[in] p_data Pointer to the data to be transmitted. - * - * @return @ref NRF_SUCCESS Successfully queued an L2CAP packet for transmission. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, CIDs must be registered beforehand with @ref sd_ble_l2cap_cid_register. - * @return @ref NRF_ERROR_NOT_FOUND CID not found. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @return @ref BLE_ERROR_NO_TX_BUFFERS Not enough application buffers available. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, see @ref BLE_L2CAP_MTU_DEF. - */ -SVCALL(SD_BLE_L2CAP_TX, uint32_t, sd_ble_l2cap_tx(uint16_t conn_handle, ble_l2cap_header_t const * const p_header, uint8_t const * const p_data)); - -/** @} */ - -#endif // BLE_L2CAP_H__ - -/** - @} -*/
--- a/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_ranges.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,89 +0,0 @@ -/* - Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - - The information contained herein is confidential property of Nordic Semiconductor. The use, - copying, transfer or disclosure of such information is prohibited except by express written - agreement with Nordic Semiconductor. - */ -/** - @addtogroup BLE_COMMON - @{ - @defgroup ble_ranges Module specific SVC and event number subranges - @{ - - @brief Definition of SVC and event number subranges for each API module. - - @note - SVCs and event numbers are split into subranges for each API module. - Each module receives its entire allocated range of SVC calls, whether implemented or not, - but return BLE_ERROR_NOT_SUPPORTED for unimplemented or undefined calls in its range. - - Note that the symbols BLE_<module>_SVC_LAST is the end of the allocated SVC range, - rather than the last SVC function call actually defined and implemented. - - Specific SVC and event values are defined in each module's ble_<module>.h file, - which defines names of each individual SVC code based on the range start value. -*/ - -#ifndef BLE_RANGES_H__ -#define BLE_RANGES_H__ - -#define BLE_SVC_BASE 0x60 -#define BLE_SVC_LAST 0x6B /* Total: 12. */ - -#define BLE_RESERVED_SVC_BASE 0x6C -#define BLE_RESERVED_SVC_LAST 0x6F /* Total: 4. */ - -#define BLE_GAP_SVC_BASE 0x70 -#define BLE_GAP_SVC_LAST 0x8F /* Total: 32. */ - -#define BLE_GATTC_SVC_BASE 0x90 -#define BLE_GATTC_SVC_LAST 0x9F /* Total: 16. */ - -#define BLE_GATTS_SVC_BASE 0xA0 -#define BLE_GATTS_SVC_LAST 0xAF /* Total: 16. */ - -#define BLE_L2CAP_SVC_BASE 0xB0 -#define BLE_L2CAP_SVC_LAST 0xBF /* Total: 16. */ - - -#define BLE_EVT_INVALID 0x00 - -#define BLE_EVT_BASE 0x01 -#define BLE_EVT_LAST 0x0F /* Total: 15. */ - -#define BLE_GAP_EVT_BASE 0x10 -#define BLE_GAP_EVT_LAST 0x2F /* Total: 32. */ - -#define BLE_GATTC_EVT_BASE 0x30 -#define BLE_GATTC_EVT_LAST 0x4F /* Total: 32. */ - -#define BLE_GATTS_EVT_BASE 0x50 -#define BLE_GATTS_EVT_LAST 0x6F /* Total: 32. */ - -#define BLE_L2CAP_EVT_BASE 0x70 -#define BLE_L2CAP_EVT_LAST 0x8F /* Total: 32. */ - -#define BLE_OPT_INVALID 0x00 /**< Invalid BLE Option. */ - -#define BLE_OPT_BASE 0x01 /**< Common BLE Option base. */ -#define BLE_OPT_LAST 0x1F /**< Total: 31. */ - -#define BLE_GAP_OPT_BASE 0x20 /**< GAP BLE Option base. */ -#define BLE_GAP_OPT_LAST 0x3F /**< Total: 32. */ - -#define BLE_GATTC_OPT_BASE 0x40 /**< GATTC BLE Option base. */ -#define BLE_GATTC_OPT_LAST 0x5F /**< Total: 32. */ - -#define BLE_GATTS_OPT_BASE 0x60 /**< GATTS BLE Option base. */ -#define BLE_GATTS_OPT_LAST 0x7F /**< Total: 32. */ - -#define BLE_L2CAP_OPT_BASE 0x80 /**< L2CAP BLE Option base. */ -#define BLE_L2CAP_OPT_LAST 0x9F /**< Total: 32. */ - -#endif /* BLE_RANGES_H__ */ - -/** - @} - @} -*/
--- a/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_types.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,169 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_COMMON - @{ - @defgroup ble_types Common types and macro definitions - @{ - - @brief Common types and macro definitions for the S110 SoftDevice. - */ - -#ifndef BLE_TYPES_H__ -#define BLE_TYPES_H__ - -#include <stdint.h> - -/** @addtogroup BLE_COMMON_DEFINES Defines - * @{ */ - -/** @defgroup BLE_CONN_HANDLES BLE Connection Handles - * @{ */ -#define BLE_CONN_HANDLE_INVALID 0xFFFF /**< Invalid Connection Handle. */ -#define BLE_CONN_HANDLE_ALL 0xFFFE /**< Applies to all Connection Handles. */ -/** @} */ - - -/** @defgroup BLE_UUID_VALUES Assigned Values for BLE UUIDs - * @{ */ -/* Generic UUIDs, applicable to all services */ -#define BLE_UUID_UNKNOWN 0x0000 /**< Reserved UUID. */ -#define BLE_UUID_SERVICE_PRIMARY 0x2800 /**< Primary Service. */ -#define BLE_UUID_SERVICE_SECONDARY 0x2801 /**< Secondary Service. */ -#define BLE_UUID_SERVICE_INCLUDE 0x2802 /**< Include. */ -#define BLE_UUID_CHARACTERISTIC 0x2803 /**< Characteristic. */ -#define BLE_UUID_DESCRIPTOR_CHAR_EXT_PROP 0x2900 /**< Characteristic Extended Properties Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_USER_DESC 0x2901 /**< Characteristic User Description Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG 0x2902 /**< Client Characteristic Configuration Descriptor. */ -#define BLE_UUID_DESCRIPTOR_SERVER_CHAR_CONFIG 0x2903 /**< Server Characteristic Configuration Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT 0x2904 /**< Characteristic Presentation Format Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_AGGREGATE_FORMAT 0x2905 /**< Characteristic Aggregate Format Descriptor. */ -/* GATT specific UUIDs */ -#define BLE_UUID_GATT 0x1801 /**< Generic Attribute Profile. */ -#define BLE_UUID_GATT_CHARACTERISTIC_SERVICE_CHANGED 0x2A05 /**< Service Changed Characteristic. */ -/* GAP specific UUIDs */ -#define BLE_UUID_GAP 0x1800 /**< Generic Access Profile. */ -#define BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME 0x2A00 /**< Device Name Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE 0x2A01 /**< Appearance Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_PPF 0x2A02 /**< Peripheral Privacy Flag Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_RECONN_ADDR 0x2A03 /**< Reconnection Address Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_PPCP 0x2A04 /**< Peripheral Preferred Connection Parameters Characteristic. */ -/** @} */ - - -/** @defgroup BLE_UUID_TYPES Types of UUID - * @{ */ -#define BLE_UUID_TYPE_UNKNOWN 0x00 /**< Invalid UUID type. */ -#define BLE_UUID_TYPE_BLE 0x01 /**< Bluetooth SIG UUID (16-bit). */ -#define BLE_UUID_TYPE_VENDOR_BEGIN 0x02 /**< Vendor UUID types start at this index (128-bit). */ -/** @} */ - - -/** @defgroup BLE_APPEARANCES Bluetooth Appearance values - * @note Retrieved from http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml - * @{ */ -#define BLE_APPEARANCE_UNKNOWN 0 /**< Unknown. */ -#define BLE_APPEARANCE_GENERIC_PHONE 64 /**< Generic Phone. */ -#define BLE_APPEARANCE_GENERIC_COMPUTER 128 /**< Generic Computer. */ -#define BLE_APPEARANCE_GENERIC_WATCH 192 /**< Generic Watch. */ -#define BLE_APPEARANCE_WATCH_SPORTS_WATCH 193 /**< Watch: Sports Watch. */ -#define BLE_APPEARANCE_GENERIC_CLOCK 256 /**< Generic Clock. */ -#define BLE_APPEARANCE_GENERIC_DISPLAY 320 /**< Generic Display. */ -#define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL 384 /**< Generic Remote Control. */ -#define BLE_APPEARANCE_GENERIC_EYE_GLASSES 448 /**< Generic Eye-glasses. */ -#define BLE_APPEARANCE_GENERIC_TAG 512 /**< Generic Tag. */ -#define BLE_APPEARANCE_GENERIC_KEYRING 576 /**< Generic Keyring. */ -#define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 640 /**< Generic Media Player. */ -#define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 704 /**< Generic Barcode Scanner. */ -#define BLE_APPEARANCE_GENERIC_THERMOMETER 768 /**< Generic Thermometer. */ -#define BLE_APPEARANCE_THERMOMETER_EAR 769 /**< Thermometer: Ear. */ -#define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR 832 /**< Generic Heart rate Sensor. */ -#define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT 833 /**< Heart Rate Sensor: Heart Rate Belt. */ -#define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 896 /**< Generic Blood Pressure. */ -#define BLE_APPEARANCE_BLOOD_PRESSURE_ARM 897 /**< Blood Pressure: Arm. */ -#define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 898 /**< Blood Pressure: Wrist. */ -#define BLE_APPEARANCE_GENERIC_HID 960 /**< Human Interface Device (HID). */ -#define BLE_APPEARANCE_HID_KEYBOARD 961 /**< Keyboard (HID Subtype). */ -#define BLE_APPEARANCE_HID_MOUSE 962 /**< Mouse (HID Subtype). */ -#define BLE_APPEARANCE_HID_JOYSTICK 963 /**< Joystiq (HID Subtype). */ -#define BLE_APPEARANCE_HID_GAMEPAD 964 /**< Gamepad (HID Subtype). */ -#define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE 965 /**< Digitizer Tablet (HID Subtype). */ -#define BLE_APPEARANCE_HID_CARD_READER 966 /**< Card Reader (HID Subtype). */ -#define BLE_APPEARANCE_HID_DIGITAL_PEN 967 /**< Digital Pen (HID Subtype). */ -#define BLE_APPEARANCE_HID_BARCODE 968 /**< Barcode Scanner (HID Subtype). */ -#define BLE_APPEARANCE_GENERIC_GLUCOSE_METER 1024 /**< Generic Glucose Meter. */ -#define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR 1088 /**< Generic Running Walking Sensor. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE 1089 /**< Running Walking Sensor: In-Shoe. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE 1090 /**< Running Walking Sensor: On-Shoe. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP 1091 /**< Running Walking Sensor: On-Hip. */ -#define BLE_APPEARANCE_GENERIC_CYCLING 1152 /**< Generic Cycling. */ -#define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER 1153 /**< Cycling: Cycling Computer. */ -#define BLE_APPEARANCE_CYCLING_SPEED_SENSOR 1154 /**< Cycling: Speed Sensor. */ -#define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR 1155 /**< Cycling: Cadence Sensor. */ -#define BLE_APPEARANCE_CYCLING_POWER_SENSOR 1156 /**< Cycling: Power Sensor. */ -#define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR 1157 /**< Cycling: Speed and Cadence Sensor. */ -#define BLE_APPEARANCE_GENERIC_PULSE_OXIMETER 3136 /**< Generic Pulse Oximeter. */ -#define BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 3137 /**< Fingertip (Pulse Oximeter subtype). */ -#define BLE_APPEARANCE_PULSE_OXIMETER_WRIST_WORN 3138 /**< Wrist Worn(Pulse Oximeter subtype). */ -#define BLE_APPEARANCE_GENERIC_WEIGHT_SCALE 3200 /**< Generic Weight Scale. */ -#define BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS_ACT 5184 /**< Generic Outdoor Sports Activity. */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_DISP 5185 /**< Location Display Device (Outdoor Sports Activity subtype). */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_DISP 5186 /**< Location and Navigation Display Device (Outdoor Sports Activity subtype). */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_POD 5187 /**< Location Pod (Outdoor Sports Activity subtype). */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_POD 5188 /**< Location and Navigation Pod (Outdoor Sports Activity subtype). */ -/** @} */ - -/** @brief Set .type and .uuid fields of ble_uuid_struct to specified uuid value. */ -#define BLE_UUID_BLE_ASSIGN(instance, value) do {\ - instance.type = BLE_UUID_TYPE_BLE; \ - instance.uuid = value;} while(0) - -/** @brief Copy type and uuid members from src to dst ble_uuid_t pointer. Both pointers must be valid/non-null. */ -#define BLE_UUID_COPY_PTR(dst, src) do {\ - (dst)->type = (src)->type; \ - (dst)->uuid = (src)->uuid;} while(0) - -/** @brief Copy type and uuid members from src to dst ble_uuid_t struct. */ -#define BLE_UUID_COPY_INST(dst, src) do {\ - (dst).type = (src).type; \ - (dst).uuid = (src).uuid;} while(0) - -/** @brief Compare for equality both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ -#define BLE_UUID_EQ(p_uuid1, p_uuid2) \ - (((p_uuid1)->type == (p_uuid2)->type) && ((p_uuid1)->uuid == (p_uuid2)->uuid)) - -/** @brief Compare for difference both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ -#define BLE_UUID_NEQ(p_uuid1, p_uuid2) \ - (((p_uuid1)->type != (p_uuid2)->type) || ((p_uuid1)->uuid != (p_uuid2)->uuid)) - -/** @} */ - -/** @addtogroup BLE_TYPES_STRUCTURES Structures - * @{ */ - -/** @brief 128 bit UUID values. */ -typedef struct -{ - unsigned char uuid128[16]; -} ble_uuid128_t; - -/** @brief Bluetooth Low Energy UUID type, encapsulates both 16-bit and 128-bit UUIDs. */ -typedef struct -{ - uint16_t uuid; /**< 16-bit UUID value or octets 12-13 of 128-bit UUID. */ - uint8_t type; /**< UUID type, see @ref BLE_UUID_TYPES. If type is BLE_UUID_TYPE_UNKNOWN, the value of uuid is undefined. */ -} ble_uuid_t; - -/** @} */ - -#endif /* BLE_TYPES_H__ */ - -/** - @} - @} -*/
--- a/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_error.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - /** - @defgroup nrf_error SoftDevice Global Error Codes - @{ - - @brief Global Error definitions -*/ - -/* Header guard */ -#ifndef NRF_ERROR_H__ -#define NRF_ERROR_H__ - -/** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions - * @{ */ -#define NRF_ERROR_BASE_NUM (0x0) ///< Global error base -#define NRF_ERROR_SDM_BASE_NUM (0x1000) ///< SDM error base -#define NRF_ERROR_SOC_BASE_NUM (0x2000) ///< SoC error base -#define NRF_ERROR_STK_BASE_NUM (0x3000) ///< STK error base -/** @} */ - -#define NRF_SUCCESS (NRF_ERROR_BASE_NUM + 0) ///< Successful command -#define NRF_ERROR_SVC_HANDLER_MISSING (NRF_ERROR_BASE_NUM + 1) ///< SVC handler is missing -#define NRF_ERROR_SOFTDEVICE_NOT_ENABLED (NRF_ERROR_BASE_NUM + 2) ///< SoftDevice has not been enabled -#define NRF_ERROR_INTERNAL (NRF_ERROR_BASE_NUM + 3) ///< Internal Error -#define NRF_ERROR_NO_MEM (NRF_ERROR_BASE_NUM + 4) ///< No Memory for operation -#define NRF_ERROR_NOT_FOUND (NRF_ERROR_BASE_NUM + 5) ///< Not found -#define NRF_ERROR_NOT_SUPPORTED (NRF_ERROR_BASE_NUM + 6) ///< Not supported -#define NRF_ERROR_INVALID_PARAM (NRF_ERROR_BASE_NUM + 7) ///< Invalid Parameter -#define NRF_ERROR_INVALID_STATE (NRF_ERROR_BASE_NUM + 8) ///< Invalid state, operation disallowed in this state -#define NRF_ERROR_INVALID_LENGTH (NRF_ERROR_BASE_NUM + 9) ///< Invalid Length -#define NRF_ERROR_INVALID_FLAGS (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags -#define NRF_ERROR_INVALID_DATA (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data -#define NRF_ERROR_DATA_SIZE (NRF_ERROR_BASE_NUM + 12) ///< Data size exceeds limit -#define NRF_ERROR_TIMEOUT (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out -#define NRF_ERROR_NULL (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer -#define NRF_ERROR_FORBIDDEN (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation -#define NRF_ERROR_INVALID_ADDR (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address -#define NRF_ERROR_BUSY (NRF_ERROR_BASE_NUM + 17) ///< Busy - -#endif // NRF_ERROR_H__ - -/** - @} -*/
--- a/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_error_sdm.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - /** - @addtogroup nrf_sdm_api - @{ - @defgroup nrf_sdm_error SoftDevice Manager Error Codes - @{ - - @brief Error definitions for the SDM API -*/ - -/* Header guard */ -#ifndef NRF_ERROR_SDM_H__ -#define NRF_ERROR_SDM_H__ - -#include "nrf_error.h" - -#define NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN (NRF_ERROR_SDM_BASE_NUM + 0) ///< Unknown lfclk source -#define NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION (NRF_ERROR_SDM_BASE_NUM + 1) ///< Incorrect interrupt configuration (can be caused by using illegal priority levels, or having enabled SoftDevice interrupts) -#define NRF_ERROR_SDM_INCORRECT_CLENR0 (NRF_ERROR_SDM_BASE_NUM + 2) ///< Incorrect CLENR0 (can be caused by erronous SoftDevice flashing) - -#endif // NRF_ERROR_SDM_H__ - -/** - @} - @} -*/
--- a/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_error_soc.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - /** - @addtogroup nrf_soc_api - @{ - @defgroup nrf_soc_error SoC Library Error Codes - @{ - - @brief Error definitions for the SoC library - -*/ - -/* Header guard */ -#ifndef NRF_ERROR_SOC_H__ -#define NRF_ERROR_SOC_H__ - -#include "nrf_error.h" - -/* Mutex Errors */ -#define NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN (NRF_ERROR_SOC_BASE_NUM + 0) ///< Mutex already taken - -/* NVIC errors */ -#define NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE (NRF_ERROR_SOC_BASE_NUM + 1) ///< NVIC interrupt not available -#define NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED (NRF_ERROR_SOC_BASE_NUM + 2) ///< NVIC interrupt priority not allowed -#define NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 3) ///< NVIC should not return - -/* Power errors */ -#define NRF_ERROR_SOC_POWER_MODE_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 4) ///< Power mode unknown -#define NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 5) ///< Power POF threshold unknown -#define NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 6) ///< Power off should not return - -/* Rand errors */ -#define NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES (NRF_ERROR_SOC_BASE_NUM + 7) ///< RAND not enough values - -/* PPI errors */ -#define NRF_ERROR_SOC_PPI_INVALID_CHANNEL (NRF_ERROR_SOC_BASE_NUM + 8) ///< Invalid PPI Channel -#define NRF_ERROR_SOC_PPI_INVALID_GROUP (NRF_ERROR_SOC_BASE_NUM + 9) ///< Invalid PPI Group - -#endif // NRF_ERROR_SOC_H__ -/** - @} - @} -*/
--- a/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_mbr.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,155 +0,0 @@ -/* - * Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @defgroup nrf_mbr_api Master Boot Record API - @{ - - @brief APIs for updating SoftDevice and BootLoader - -*/ - -/* Header guard */ -#ifndef NRF_MBR_H__ -#define NRF_MBR_H__ - -#include "nrf_svc.h" -#include <stdint.h> - - -/** @addtogroup NRF_MBR_DEFINES Defines - * @{ */ - -/**@brief MBR SVC Base number. */ -#define MBR_SVC_BASE 0x18 -/** @} */ - -/** @addtogroup NRF_MBR_ENUMS Enumerations - * @{ */ - -/**@brief nRF Master Boot Record API SVC numbers. */ -enum NRF_MBR_SVCS -{ - SD_MBR_COMMAND = MBR_SVC_BASE, /**< ::sd_mbr_command */ -}; - -/**@brief Possible values for ::sd_mbr_command_t.command */ -enum NRF_MBR_COMMANDS -{ - SD_MBR_COMMAND_COPY_BL, /**< Copy a new a new BootLoader. @see sd_mbr_command_copy_bl_t */ - SD_MBR_COMMAND_COPY_SD, /**< Copy a new SoftDevice. @see ::sd_mbr_command_copy_sd_t*/ - SD_MBR_COMMAND_INIT_SD, /**< Init forwarding interrupts to SD, and run reset function in SD*/ - SD_MBR_COMMAND_COMPARE, /**< This command works like memcmp. @see ::sd_mbr_command_compare_t*/ - SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET, /**< Start forwarding all exception to this address @see ::sd_mbr_command_vector_table_base_set_t*/ -}; - -/** @} */ - -/** @addtogroup NRF_MBR_TYPES Types - * @{ */ - -/**@brief This command copies part of a new SoftDevice - * The destination area is erased before copying. - * If dst is in the middle of a flash page, that whole flash page will be erased. - * If (dst+len) is in the middle of a flash page, that whole flash page will be erased. - * - * The user of this function is responsible for setting the PROTENSET registers. - * - * @retval ::NRF_SUCCESS indicates that the contents of the memory blocks where copied correctly. - * @retval ::NRF_ERROR_INTERNAL indicates that the contents of the memory blocks where not verified correctly after copying. - */ -typedef struct -{ - uint32_t *src; /**< Pointer to the source of data to be copied.*/ - uint32_t *dst; /**< Pointer to the destination where the content is to be copied.*/ - uint32_t len; /**< Number of 32 bit words to copy. Must be a multiple of 256 words*/ -}sd_mbr_command_copy_sd_t; - - -/**@brief This command works like memcmp, but takes the length in words. - * - * @retval ::NRF_SUCCESS indicates that the contents of both memory blocks are equal. - * @retval ::NRF_ERROR_NULL indicates that the contents of the memory blocks are not equal. - */ -typedef struct -{ - uint32_t *ptr1; /**< Pointer to block of memory */ - uint32_t *ptr2; /**< Pointer to block of memory */ - uint32_t len; /**< Number of 32 bit words to compare*/ -}sd_mbr_command_compare_t; - - -/**@brief This command copies a new BootLoader. - * With this command, destination of BootLoader is always the address written in NRF_UICR->BOOTADDR. - * - * Destination is erased by this function. - * If (destination+bl_len) is in the middle of a flash page, that whole flash page will be erased. - * - * This function will use PROTENSET to protect the flash that is not intended to be written. - * - * On Success, this function will not return. It will start the new BootLoader from reset-vector as normal. - * - * @retval ::NRF_ERROR_INVALID_STATE indicates that something was wrong. - * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. - * @retval ::NRF_ERROR_FORBIDDEN if NRF_UICR->BOOTADDR is not set - * @retval ::NRF_ERROR_INVALID_LENGTH is invalid. - */ -typedef struct -{ - uint32_t *bl_src; /**< Pointer to the source of the Bootloader to be be copied.*/ - uint32_t bl_len; /**< Number of 32 bit words to copy for BootLoader */ -}sd_mbr_command_copy_bl_t; - -/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the MBR - * - * Once this function has been called, this address is where the MBR will start to forward interrupts to after a reset. - * - * To restore default forwarding thiss function should be called with @param address set to 0. - * The MBR will then start forwarding to interrupts to the adress in NFR_UICR->BOOTADDR or to the SoftDevice if the BOOTADDR is not set. - * - * @retval ::NRF_SUCCESS - */ -typedef struct -{ - uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ -}sd_mbr_command_vector_table_base_set_t; - -typedef struct -{ - uint32_t command; /**< type of command to be issued see @ref NRF_MBR_COMMANDS. */ - union - { - sd_mbr_command_copy_sd_t copy_sd; /**< Parameters for copy*/ - sd_mbr_command_copy_bl_t copy_bl; /**< Parameters for copy SoftDevice and BootLoader*/ - sd_mbr_command_compare_t compare; /**< Parameters for verify*/ - sd_mbr_command_vector_table_base_set_t base_set; /**< Parameters for vector table base set.*/ - } params; -}sd_mbr_command_t; - -/** @} */ - -/** @addtogroup NRF_MBR_FUNCTIONS Functions - * @{ */ - -/**@brief Issue Master Boot Record commands - * - * Commands used when updating a SoftDevice and bootloader - * - * @param[in] param Pointer to a struct describing the command - * - *@note for retvals see ::sd_mbr_command_copy_sd_t ::sd_mbr_command_copy_bl_t ::sd_mbr_command_compare_t - -*/ -SVCALL(SD_MBR_COMMAND, uint32_t, sd_mbr_command(sd_mbr_command_t* param)); - -/** @} */ -#endif // NRF_MBR_H__ - -/** - @} -*/
--- a/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_sdm.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,167 +0,0 @@ -/* - * Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @defgroup nrf_sdm_api SoftDevice Manager API - @{ - - @brief APIs for SoftDevice management. - -*/ - -/* Header guard */ -#ifndef NRF_SDM_H__ -#define NRF_SDM_H__ - -#include "nrf_svc.h" -#include "nrf51.h" -#include "nrf_soc.h" -#include "nrf_error_sdm.h" - -/** @addtogroup NRF_SDM_DEFINES Defines - * @{ */ - -/**@brief SoftDevice Manager SVC Base number. */ -#define SDM_SVC_BASE (0x10) - -/** @} */ - -/** @addtogroup NRF_SDM_ENUMS Enumerations - * @{ */ - -/**@brief nRF SoftDevice Manager API SVC numbers. */ -enum NRF_SD_SVCS -{ - SD_SOFTDEVICE_ENABLE = SDM_SVC_BASE, /**< ::sd_softdevice_enable */ - SD_SOFTDEVICE_DISABLE, /**< ::sd_softdevice_disable */ - SD_SOFTDEVICE_IS_ENABLED, /**< ::sd_softdevice_is_enabled */ - SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, /**< ::sd_softdevice_vector_table_base_set */ - SVC_SDM_LAST /**< Placeholder for last SDM SVC */ -}; - -/**@brief Possible lfclk oscillator sources. */ -enum NRF_CLOCK_LFCLKSRCS -{ - NRF_CLOCK_LFCLKSRC_SYNTH_250_PPM, /**< LFCLK Synthesized from HFCLK. */ - NRF_CLOCK_LFCLKSRC_XTAL_500_PPM, /**< LFCLK crystal oscillator 500 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_250_PPM, /**< LFCLK crystal oscillator 250 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_150_PPM, /**< LFCLK crystal oscillator 150 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_100_PPM, /**< LFCLK crystal oscillator 100 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_75_PPM, /**< LFCLK crystal oscillator 75 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_50_PPM, /**< LFCLK crystal oscillator 50 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_30_PPM, /**< LFCLK crystal oscillator 30 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_20_PPM, /**< LFCLK crystal oscillator 20 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_250MS_CALIBRATION, /**< LFCLK RC oscillator, 250ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_500MS_CALIBRATION, /**< LFCLK RC oscillator, 500ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_1000MS_CALIBRATION, /**< LFCLK RC oscillator, 1000ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_2000MS_CALIBRATION, /**< LFCLK RC oscillator, 2000ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_4000MS_CALIBRATION, /**< LFCLK RC oscillator, 4000ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_8000MS_CALIBRATION, /**< LFCLK RC oscillator, 8000ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_1000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 1000ms, if changed above a threshold, a calibration is done.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_2000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 2000ms, if changed above a threshold, a calibration is done.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_4000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 4000ms, if changed above a threshold, a calibration is done.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_8000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 8000ms, if changed above a threshold, a calibration is done.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_16000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 16000ms, if changed above a threshold, a calibration is done.*/ -}; - -/** @} */ - -/** @addtogroup NRF_SDM_TYPES Types - * @{ */ - -/**@brief Type representing lfclk oscillator source. */ -typedef uint32_t nrf_clock_lfclksrc_t; - - -/**@brief SoftDevice Assertion Handler type. - * - * When an unexpected error occurs within the SoftDevice it will call the SoftDevice assertion handler callback. - * The protocol stack will be in an undefined state when this happens and the only way to recover will be to - * perform a reset, using e.g. CMSIS NVIC_SystemReset(). - * - * @note This callback is executed in HardFault context, thus SVC functions cannot be called from the SoftDevice assert callback. - * - * @param[in] pc The program counter of the failed assert. - * @param[in] line_number Line number where the assert failed. - * @param[in] file_name File name where the assert failed. - */ -typedef void (*softdevice_assertion_handler_t)(uint32_t pc, uint16_t line_number, const uint8_t * p_file_name); - -/** @} */ - -/** @addtogroup NRF_SDM_FUNCTIONS Functions - * @{ */ - -/**@brief Enables the SoftDevice and by extension the protocol stack. - * - * Idempotent function to enable the SoftDevice. - * - * @note Some care must be taken if a low frequency clock source is already running when calling this function: - * If the LF clock has a different source then the one currently running, it will be stopped. Then, the new - * clock source will be started. - * - * @note This function has no effect when returning with an error. - * - * @post If return code is ::NRF_SUCCESS - * - SoC library and protocol stack APIs are made available - * - A portion of RAM will be unavailable (see relevant SDS documentation) - * - Some peripherals will be unavailable or available only through the SoC API (see relevant SDS documentation) - * - Interrupts will not arrive from protected peripherals or interrupts - * - nrf_nvic_ functions must be used instead of CMSIS NVIC_ functions for reliable usage of the softdevice. - * - Interrupt latency may be affected by the SoftDevice (see relevant SDS documentation) - * - Chosen low frequency clock source will be running - * - * @param clock_source Low frequency clock source and accuracy. (Note: In the case of XTAL source, the PPM accuracy of the chosen clock source must be greater than or equal to the actual characteristics of your XTAL clock). - * @param assertion_handler Callback for SoftDevice assertions. - * - * @retval ::NRF_SUCCESS - * @retval ::NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION SoftDeviceinterrupt is already enabled, or an enabled interrupt has an illegal priority level - * @retval ::NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN Unknown low frequency clock source selected - */ -SVCALL(SD_SOFTDEVICE_ENABLE, uint32_t, sd_softdevice_enable(nrf_clock_lfclksrc_t clock_source, softdevice_assertion_handler_t assertion_handler)); - -/**@brief Disables the SoftDevice and by extension the protocol stack. - * - * Idempotent function to disable the SoftDevice. - * - * @post SoC library and protocol stack APIs are made unavailable. - * @post All interrupts that was protected by the SoftDevice will be disabled and initialized to priority 0 (highest). - * @post All peripherals used by the SoftDevice will be reset to default values. - * @post All of RAM become available. - * @post All interrupts are forwarded to the application. - * @post LFCLK source chosen in ::sd_softdevice_enable will be left running. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_DISABLE, uint32_t, sd_softdevice_disable(void)); - -/**@brief Check if the SoftDevice is enabled. - * - * @param[out] p_softdevice_enabled If the SoftDevice is enabled: 1 else 0. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_IS_ENABLED, uint32_t, sd_softdevice_is_enabled(uint8_t * p_softdevice_enabled)); - -/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the SoftDevice - * - * This function is only intended to be called when a bootloader is enabled. - * - * @param[in] address The base address of the interrupt vector table for forwarded interrupts. - - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, uint32_t, sd_softdevice_vector_table_base_set(uint32_t address)); - -/** @} */ - -#endif // NRF_SDM_H__ - -/** - @} -*/
--- a/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_soc.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,958 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - -/** - * @defgroup nrf_soc_api SoC Library API - * @{ - * - * @brief APIs for the SoC library. - * -*/ - -#ifndef NRF_SOC_H__ -#define NRF_SOC_H__ - -#include <stdint.h> -#include <stdbool.h> -#include "nrf_svc.h" -#include "nrf51.h" -#include "nrf51_bitfields.h" -#include "nrf_error_soc.h" - -/** @addtogroup NRF_SOC_DEFINES Defines - * @{ */ - -/**@brief The number of the lowest SVC number reserved for the SoC library. */ -#define SOC_SVC_BASE (0x20) -#define SOC_SVC_BASE_NOT_AVAILABLE (0x23) - -/**@brief Guranteed time for application to process radio inactive notification. */ -#define NRF_RADIO_NOTIFICATION_INACTIVE_GUARANTEED_TIME_US (62) - -/**@brief The minimum allowed timeslot extension time. */ -#define NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US (200) - -#define SOC_ECB_KEY_LENGTH (16) /**< ECB key length. */ -#define SOC_ECB_CLEARTEXT_LENGTH (16) /**< ECB cleartext length. */ -#define SOC_ECB_CIPHERTEXT_LENGTH (SOC_ECB_CLEARTEXT_LENGTH) /**< ECB ciphertext length. */ - -#define SD_EVT_IRQn (SWI2_IRQn) /**< SoftDevice Event IRQ number. Used for both protocol events and SoC events. */ -#define SD_EVT_IRQHandler (SWI2_IRQHandler) /**< SoftDevice Event IRQ handler. Used for both protocol events and SoC events. */ -#define RADIO_NOTIFICATION_IRQn (SWI1_IRQn) /**< The radio notification IRQ number. */ -#define RADIO_NOTIFICATION_IRQHandler (SWI1_IRQHandler) /**< The radio notification IRQ handler. */ - -#define NRF_RADIO_LENGTH_MIN_US (100) /**< The shortest allowed radio timeslot, in microseconds. */ -#define NRF_RADIO_LENGTH_MAX_US (100000) /**< The longest allowed radio timeslot, in microseconds. */ - -#define NRF_RADIO_DISTANCE_MAX_US (128000000UL - 1UL) /**< The longest timeslot distance, in microseconds, allowed for the distance parameter (see @ref nrf_radio_request_normal_t) in the request. */ - -#define NRF_RADIO_EARLIEST_TIMEOUT_MAX_US (128000000UL - 1UL) /**< The longest timeout, in microseconds, allowed when requesting the earliest possible timeslot. */ - -#define NRF_RADIO_START_JITTER_US (2) /**< The maximum jitter in NRF_RADIO_CALLBACK_SIGNAL_TYPE_START relative to the requested start time. */ - -/** @} */ - -/** @addtogroup NRF_SOC_TYPES Types - * @{ */ - -/**@brief The SVC numbers used by the SVC functions in the SoC library. */ -enum NRF_SOC_SVCS -{ - SD_FLASH_PAGE_ERASE = SOC_SVC_BASE, - SD_FLASH_WRITE, - SD_FLASH_PROTECT, - SD_MUTEX_NEW = SOC_SVC_BASE_NOT_AVAILABLE, - SD_MUTEX_ACQUIRE, - SD_MUTEX_RELEASE, - SD_NVIC_ENABLEIRQ, - SD_NVIC_DISABLEIRQ, - SD_NVIC_GETPENDINGIRQ, - SD_NVIC_SETPENDINGIRQ, - SD_NVIC_CLEARPENDINGIRQ, - SD_NVIC_SETPRIORITY, - SD_NVIC_GETPRIORITY, - SD_NVIC_SYSTEMRESET, - SD_NVIC_CRITICAL_REGION_ENTER, - SD_NVIC_CRITICAL_REGION_EXIT, - SD_RAND_APPLICATION_POOL_CAPACITY, - SD_RAND_APPLICATION_BYTES_AVAILABLE, - SD_RAND_APPLICATION_GET_VECTOR, - SD_POWER_MODE_SET, - SD_POWER_SYSTEM_OFF, - SD_POWER_RESET_REASON_GET, - SD_POWER_RESET_REASON_CLR, - SD_POWER_POF_ENABLE, - SD_POWER_POF_THRESHOLD_SET, - SD_POWER_RAMON_SET, - SD_POWER_RAMON_CLR, - SD_POWER_RAMON_GET, - SD_POWER_GPREGRET_SET, - SD_POWER_GPREGRET_CLR, - SD_POWER_GPREGRET_GET, - SD_POWER_DCDC_MODE_SET, - SD_APP_EVT_WAIT, - SD_CLOCK_HFCLK_REQUEST, - SD_CLOCK_HFCLK_RELEASE, - SD_CLOCK_HFCLK_IS_RUNNING, - SD_PPI_CHANNEL_ENABLE_GET, - SD_PPI_CHANNEL_ENABLE_SET, - SD_PPI_CHANNEL_ENABLE_CLR, - SD_PPI_CHANNEL_ASSIGN, - SD_PPI_GROUP_TASK_ENABLE, - SD_PPI_GROUP_TASK_DISABLE, - SD_PPI_GROUP_ASSIGN, - SD_PPI_GROUP_GET, - SD_RADIO_NOTIFICATION_CFG_SET, - SD_ECB_BLOCK_ENCRYPT, - SD_RADIO_SESSION_OPEN, - SD_RADIO_SESSION_CLOSE, - SD_RADIO_REQUEST, - SD_EVT_GET, - SD_TEMP_GET, - SVC_SOC_LAST -}; - -/**@brief Possible values of a ::nrf_mutex_t. */ -enum NRF_MUTEX_VALUES -{ - NRF_MUTEX_FREE, - NRF_MUTEX_TAKEN -}; - -/**@brief Possible values of ::nrf_app_irq_priority_t. */ -enum NRF_APP_PRIORITIES -{ - NRF_APP_PRIORITY_HIGH = 1, - NRF_APP_PRIORITY_LOW = 3 -}; - -/**@brief Possible values of ::nrf_power_mode_t. */ -enum NRF_POWER_MODES -{ - NRF_POWER_MODE_CONSTLAT, /**< Constant latency mode. See power management in the reference manual. */ - NRF_POWER_MODE_LOWPWR /**< Low power mode. See power management in the reference manual. */ -}; - - -/**@brief Possible values of ::nrf_power_failure_threshold_t */ -enum NRF_POWER_THRESHOLDS -{ - NRF_POWER_THRESHOLD_V21, /**< 2.1 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V23, /**< 2.3 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V25, /**< 2.5 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V27 /**< 2.7 Volts power failure threshold. */ -}; - - -/**@brief Possible values of ::nrf_power_dcdc_mode_t. */ -enum NRF_POWER_DCDC_MODES -{ - NRF_POWER_DCDC_MODE_OFF, /**< The DCDC is always off. */ - NRF_POWER_DCDC_MODE_ON, /**< The DCDC is always on. */ - NRF_POWER_DCDC_MODE_AUTOMATIC /**< The DCDC is automatically managed. */ -}; - -/**@brief Possible values of ::nrf_radio_notification_distance_t. */ -enum NRF_RADIO_NOTIFICATION_DISTANCES -{ - NRF_RADIO_NOTIFICATION_DISTANCE_NONE = 0, /**< The event does not have a notification. */ - NRF_RADIO_NOTIFICATION_DISTANCE_800US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_1740US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_2680US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_3620US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_4560US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_5500US /**< The distance from the active notification to start of radio activity. */ -}; - - -/**@brief Possible values of ::nrf_radio_notification_type_t. */ -enum NRF_RADIO_NOTIFICATION_TYPES -{ - NRF_RADIO_NOTIFICATION_TYPE_NONE = 0, /**< The event does not have a radio notification signal. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_ACTIVE, /**< Using interrupt for notification when the radio will be enabled. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE, /**< Using interrupt for notification when the radio has been disabled. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_BOTH, /**< Using interrupt for notification both when the radio will be enabled and disabled. */ -}; - -/**@brief SoC Events. */ -enum NRF_SOC_EVTS -{ - NRF_EVT_HFCLKSTARTED, /**< Event indicating that the HFCLK has started. */ - NRF_EVT_POWER_FAILURE_WARNING, /**< Event indicating that a power failure warning has occurred. */ - NRF_EVT_FLASH_OPERATION_SUCCESS, /**< Event indicating that the ongoing flash operation has completed successfully. */ - NRF_EVT_FLASH_OPERATION_ERROR, /**< Event indicating that the ongoing flash operation has timed out with an error. */ - NRF_EVT_RADIO_BLOCKED, /**< Event indicating that a radio timeslot was blocked. */ - NRF_EVT_RADIO_CANCELED, /**< Event indicating that a radio timeslot was canceled by SoftDevice. */ - NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN, /**< Event indicating that a radio signal callback handler return was invalid. */ - NRF_EVT_RADIO_SESSION_IDLE, /**< Event indicating that a radio session is idle. */ - NRF_EVT_RADIO_SESSION_CLOSED, /**< Event indicating that a radio session is closed. */ - NRF_EVT_NUMBER_OF_EVTS -}; - -/** @} */ - -/** @addtogroup NRF_SOC_TYPES Types - * @{ */ - -/**@brief Represents a mutex for use with the nrf_mutex functions. - * @note Accessing the value directly is not safe, use the mutex functions! - */ -typedef volatile uint8_t nrf_mutex_t; - -/**@brief The interrupt priorities available to the application while the softdevice is active. */ -typedef uint8_t nrf_app_irq_priority_t; - -/**@brief Represents a power mode, used in power mode functions */ -typedef uint8_t nrf_power_mode_t; - -/**@brief Represents a power failure threshold value. */ -typedef uint8_t nrf_power_failure_threshold_t; - -/**@brief Represents a DCDC mode value. */ -typedef uint32_t nrf_power_dcdc_mode_t; - -/**@brief Radio notification distances. */ -typedef uint8_t nrf_radio_notification_distance_t; - -/**@brief Radio notification types. */ -typedef uint8_t nrf_radio_notification_type_t; - -/** @brief The Radio signal callback types. */ -enum NRF_RADIO_CALLBACK_SIGNAL_TYPE -{ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_START, /**< This signal indicates the start of the radio timeslot. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0, /**< This signal indicates the NRF_TIMER0 interrupt. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO, /**< This signal indicates the NRF_RADIO interrupt. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_FAILED, /**< This signal indicates extend action failed. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_SUCCEEDED /**< This signal indicates extend action succeeded. */ -}; - -/** @brief The actions requested by the signal callback. - * - * This code gives the SOC instructions about what action to take when the signal callback has - * returned. - */ -enum NRF_RADIO_SIGNAL_CALLBACK_ACTION -{ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_NONE, /**< Return without action. */ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND, /**< Request an extension of the current timeslot (maximum execution time for this action is when the extension succeeded). */ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_END, /**< End the current radio timeslot. */ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END /**< Request a new radio timeslot and end the current timeslot. */ -}; - -/**@brief Radio timeslot high frequency clock source configuration. */ -enum NRF_RADIO_HFCLK_CFG -{ - NRF_RADIO_HFCLK_CFG_DEFAULT, /**< Use the currently selected oscillator as HF clock source during the timeslot (i.e. the source is not specified). */ - NRF_RADIO_HFCLK_CFG_FORCE_XTAL, /**< Force external crystal to be used as HF clock source during whole the timeslot. */ -}; - -/** @brief Radio timeslot priorities. */ -enum NRF_RADIO_PRIORITY -{ - NRF_RADIO_PRIORITY_HIGH, /**< High (equal priority as the normal connection priority of the SoftDevice stack(s)). */ - NRF_RADIO_PRIORITY_NORMAL, /**< Normal (equal priority as the priority of secondary activites of the SoftDevice stack(s)). */ -}; - -/** @brief Radio timeslot request type. */ -enum NRF_RADIO_REQUEST_TYPE -{ - NRF_RADIO_REQ_TYPE_EARLIEST, /**< Request timeslot as early as possible. This should always be used for the first request in a session. */ - NRF_RADIO_REQ_TYPE_NORMAL /**< Normal timeslot request. */ -}; - -/** @brief Parameters for a request for a timeslot as early as possible. */ -typedef struct -{ - uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ - uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ - uint32_t length_us; /**< The radio timeslot length (in the range 100 to 100,000] microseconds). */ - uint32_t timeout_us; /**< Longest acceptable delay until the start of the requested timeslot (up to @ref NRF_RADIO_EARLIEST_TIMEOUT_MAX_US microseconds). */ -} nrf_radio_request_earliest_t; - -/** @brief Parameters for a normal radio request. */ -typedef struct -{ - uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ - uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ - uint32_t distance_us; /**< Distance from the start of the previous radio timeslot (up to @ref NRF_RADIO_DISTANCE_MAX_US microseconds). */ - uint32_t length_us; /**< The radio timeslot length (in the range [100..100,000] microseconds). */ -} nrf_radio_request_normal_t; - -/** @brief Radio request parameters. */ -typedef struct -{ - uint8_t request_type; /**< Type of request, see @ref NRF_RADIO_REQUEST_TYPE. */ - union - { - nrf_radio_request_earliest_t earliest; /**< Parameters for a request for a timeslot as early as possible. */ - nrf_radio_request_normal_t normal; /**< Parameters for a normal radio request. */ - } params; -} nrf_radio_request_t; - -/**@brief Return parameters of the radio timeslot signal callback. */ -typedef struct -{ - uint8_t callback_action; /**< The action requested by the application when returning from the signal callback, see @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION. */ - union - { - struct - { - nrf_radio_request_t * p_next; /**< The request parameters for the next radio timeslot. */ - } request; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END. */ - struct - { - uint32_t length_us; /**< Requested extension of the timeslot duration (microseconds) (for minimum time see @ref NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US). */ - } extend; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND. */ - } params; -} nrf_radio_signal_callback_return_param_t; - -/**@brief The radio signal callback type. - * - * @note In case of invalid return parameters, the radio timeslot will automatically end - * immediately after returning from the signal callback and the - * @ref NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN event will be sent. - * @note The returned struct pointer must remain valid after the signal callback - * function returns. For instance, this means that it must not point to a stack variable. - * - * @param[in] signal_type Type of signal, see @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE. - * - * @return Pointer to structure containing action requested by the application. - */ -typedef nrf_radio_signal_callback_return_param_t * (*nrf_radio_signal_callback_t) (uint8_t signal_type); - -/**@brief AES ECB data structure */ -typedef struct -{ - uint8_t key[SOC_ECB_KEY_LENGTH]; /**< Encryption key. */ - uint8_t cleartext[SOC_ECB_CLEARTEXT_LENGTH]; /**< Clear Text data. */ - uint8_t ciphertext[SOC_ECB_CIPHERTEXT_LENGTH]; /**< Cipher Text data. */ -} nrf_ecb_hal_data_t; - -/** @} */ - -/** @addtogroup NRF_SOC_FUNCTIONS Functions - * @{ */ - -/**@brief Initialize a mutex. - * - * @param[in] p_mutex Pointer to the mutex to initialize. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_MUTEX_NEW, uint32_t, sd_mutex_new(nrf_mutex_t * p_mutex)); - -/**@brief Attempt to acquire a mutex. - * - * @param[in] p_mutex Pointer to the mutex to acquire. - * - * @retval ::NRF_SUCCESS The mutex was successfully acquired. - * @retval ::NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN The mutex could not be acquired. - */ -SVCALL(SD_MUTEX_ACQUIRE, uint32_t, sd_mutex_acquire(nrf_mutex_t * p_mutex)); - -/**@brief Release a mutex. - * - * @param[in] p_mutex Pointer to the mutex to release. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_MUTEX_RELEASE, uint32_t, sd_mutex_release(nrf_mutex_t * p_mutex)); - -/**@brief Enable External Interrupt. - * @note Corresponds to NVIC_EnableIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt was enabled. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt has a priority not available for the application. - */ -SVCALL(SD_NVIC_ENABLEIRQ, uint32_t, sd_nvic_EnableIRQ(IRQn_Type IRQn)); - -/**@brief Disable External Interrupt. - * @note Corresponds to NVIC_DisableIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS - * - * @retval ::NRF_SUCCESS The interrupt was disabled. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. - */ -SVCALL(SD_NVIC_DISABLEIRQ, uint32_t, sd_nvic_DisableIRQ(IRQn_Type IRQn)); - -/**@brief Get Pending Interrupt. - * @note Corresponds to NVIC_GetPendingIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_GetPendingIRQ documentation in CMSIS. - * @param[out] p_pending_irq Return value from NVIC_GetPendingIRQ. - * - * @retval ::NRF_SUCCESS The interrupt is available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -SVCALL(SD_NVIC_GETPENDINGIRQ, uint32_t, sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq)); - -/**@brief Set Pending Interrupt. - * @note Corresponds to NVIC_SetPendingIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt is set pending. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -SVCALL(SD_NVIC_SETPENDINGIRQ, uint32_t, sd_nvic_SetPendingIRQ(IRQn_Type IRQn)); - -/**@brief Clear Pending Interrupt. - * @note Corresponds to NVIC_ClearPendingIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt pending flag is cleared. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -SVCALL(SD_NVIC_CLEARPENDINGIRQ, uint32_t, sd_nvic_ClearPendingIRQ(IRQn_Type IRQn)); - -/**@brief Set Interrupt Priority. - * @note Corresponds to NVIC_SetPriority in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * @pre{priority is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_SetPriority documentation in CMSIS. - * @param[in] priority A valid IRQ priority for use by the application. - * - * @retval ::NRF_SUCCESS The interrupt and priority level is available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt priority is not available for the application. - */ -SVCALL(SD_NVIC_SETPRIORITY, uint32_t, sd_nvic_SetPriority(IRQn_Type IRQn, nrf_app_irq_priority_t priority)); - -/**@brief Get Interrupt Priority. - * @note Corresponds to NVIC_GetPriority in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_GetPriority documentation in CMSIS. - * @param[out] p_priority Return value from NVIC_GetPriority. - * - * @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE - IRQn is not available for the application. - */ -SVCALL(SD_NVIC_GETPRIORITY, uint32_t, sd_nvic_GetPriority(IRQn_Type IRQn, nrf_app_irq_priority_t * p_priority)); - -/**@brief System Reset. - * @note Corresponds to NVIC_SystemReset in CMSIS. - * - * @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN - */ -SVCALL(SD_NVIC_SYSTEMRESET, uint32_t, sd_nvic_SystemReset(void)); - -/**@brief Enters critical region. - * - * @post Application interrupts will be disabled. - * @sa sd_nvic_critical_region_exit - * - * @param[out] p_is_nested_critical_region 1: If in a nested critical region. - * 0: Otherwise. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_NVIC_CRITICAL_REGION_ENTER, uint32_t, sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region)); - -/**@brief Exit critical region. - * - * @pre Application has entered a critical region using ::sd_nvic_critical_region_enter. - * @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called. - * - * @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_NVIC_CRITICAL_REGION_EXIT, uint32_t, sd_nvic_critical_region_exit(uint8_t is_nested_critical_region)); - -/**@brief Query the capacity of the application random pool. - * - * @param[out] p_pool_capacity The capacity of the pool. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RAND_APPLICATION_POOL_CAPACITY, uint32_t, sd_rand_application_pool_capacity_get(uint8_t * p_pool_capacity)); - -/**@brief Get number of random bytes available to the application. - * - * @param[out] p_bytes_available The number of bytes currently available in the pool. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RAND_APPLICATION_BYTES_AVAILABLE, uint32_t, sd_rand_application_bytes_available_get(uint8_t * p_bytes_available)); - -/**@brief Get random bytes from the application pool. - * - * @param[out] p_buff Pointer to unit8_t buffer for storing the bytes. - * @param[in] length Number of bytes to take from pool and place in p_buff. - * - * @retval ::NRF_SUCCESS The requested bytes were written to p_buff. - * @retval ::NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES No bytes were written to the buffer, because there were not enough bytes available. -*/ -SVCALL(SD_RAND_APPLICATION_GET_VECTOR, uint32_t, sd_rand_application_vector_get(uint8_t * p_buff, uint8_t length)); - -/**@brief Gets the reset reason register. - * - * @param[out] p_reset_reason Contents of the NRF_POWER->RESETREAS register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RESET_REASON_GET, uint32_t, sd_power_reset_reason_get(uint32_t * p_reset_reason)); - -/**@brief Clears the bits of the reset reason register. - * - * @param[in] reset_reason_clr_msk Contains the bits to clear from the reset reason register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RESET_REASON_CLR, uint32_t, sd_power_reset_reason_clr(uint32_t reset_reason_clr_msk)); - -/**@brief Sets the power mode when in CPU sleep. - * - * @param[in] power_mode The power mode to use when in CPU sleep. @sa sd_app_evt_wait - * - * @retval ::NRF_SUCCESS The power mode was set. - * @retval ::NRF_ERROR_SOC_POWER_MODE_UNKNOWN The power mode was unknown. - */ -SVCALL(SD_POWER_MODE_SET, uint32_t, sd_power_mode_set(nrf_power_mode_t power_mode)); - -/**@brief Puts the chip in System OFF mode. - * - * @retval ::NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN - */ -SVCALL(SD_POWER_SYSTEM_OFF, uint32_t, sd_power_system_off(void)); - -/**@brief Enables or disables the power-fail comparator. - * - * Enabling this will give a softdevice event (NRF_EVT_POWER_FAILURE_WARNING) when the power failure warning occurs. - * The event can be retrieved with sd_evt_get(); - * - * @param[in] pof_enable True if the power-fail comparator should be enabled, false if it should be disabled. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_POF_ENABLE, uint32_t, sd_power_pof_enable(uint8_t pof_enable)); - -/**@brief Sets the power-fail threshold value. - * - * @param[in] threshold The power-fail threshold value to use. - * - * @retval ::NRF_SUCCESS The power failure threshold was set. - * @retval ::NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN The power failure threshold is unknown. - */ -SVCALL(SD_POWER_POF_THRESHOLD_SET, uint32_t, sd_power_pof_threshold_set(nrf_power_failure_threshold_t threshold)); - -/**@brief Sets bits in the NRF_POWER->RAMON register. - * - * @param[in] ramon Contains the bits needed to be set in the NRF_POWER->RAMON register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAMON_SET, uint32_t, sd_power_ramon_set(uint32_t ramon)); - -/** @brief Clears bits in the NRF_POWER->RAMON register. - * - * @param ramon Contains the bits needed to be cleared in the NRF_POWER->RAMON register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAMON_CLR, uint32_t, sd_power_ramon_clr(uint32_t ramon)); - -/**@brief Get contents of NRF_POWER->RAMON register, indicates power status of ram blocks. - * - * @param[out] p_ramon Content of NRF_POWER->RAMON register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAMON_GET, uint32_t, sd_power_ramon_get(uint32_t * p_ramon)); - -/**@brief Set bits in the NRF_POWER->GPREGRET register. - * - * @param[in] gpregret_msk Bits to be set in the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_SET, uint32_t, sd_power_gpregret_set(uint32_t gpregret_msk)); - -/**@brief Clear bits in the NRF_POWER->GPREGRET register. - * - * @param[in] gpregret_msk Bits to be clear in the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_CLR, uint32_t, sd_power_gpregret_clr(uint32_t gpregret_msk)); - -/**@brief Get contents of the NRF_POWER->GPREGRET register. - * - * @param[out] p_gpregret Contents of the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_GET, uint32_t, sd_power_gpregret_get(uint32_t *p_gpregret)); - -/**@brief Sets the DCDC mode. - * - * Depending on the internal state of the SoftDevice, the mode change may not happen immediately. - * The DCDC mode switch will be blocked when occurring in close proximity to radio transmissions. When - * the radio transmission is done, the last mode will be used. - * - * @param[in] dcdc_mode The mode of the DCDC. - * - * @retval ::NRF_SUCCESS - * @retval ::NRF_ERROR_INVALID_PARAM The DCDC mode is invalid. - */ -SVCALL(SD_POWER_DCDC_MODE_SET, uint32_t, sd_power_dcdc_mode_set(nrf_power_dcdc_mode_t dcdc_mode)); - -/**@brief Request the high frequency crystal oscillator. - * - * Will start the high frequency crystal oscillator, the startup time of the crystal varies - * and the ::sd_clock_hfclk_is_running function can be polled to check if it has started. - * - * @see sd_clock_hfclk_is_running - * @see sd_clock_hfclk_release - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_REQUEST, uint32_t, sd_clock_hfclk_request(void)); - -/**@brief Releases the high frequency crystal oscillator. - * - * Will stop the high frequency crystal oscillator, this happens immediately. - * - * @see sd_clock_hfclk_is_running - * @see sd_clock_hfclk_request - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_RELEASE, uint32_t, sd_clock_hfclk_release(void)); - -/**@brief Checks if the high frequency crystal oscillator is running. - * - * @see sd_clock_hfclk_request - * @see sd_clock_hfclk_release - * - * @param[out] p_is_running 1 if the external crystal oscillator is running, 0 if not. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_IS_RUNNING, uint32_t, sd_clock_hfclk_is_running(uint32_t * p_is_running)); - -/**@brief Waits for an application event. - * - * An application event is either an application interrupt or a pended interrupt when the - * interrupt is disabled. When the interrupt is enabled it will be taken immediately since - * this function will wait in thread mode, then the execution will return in the application's - * main thread. When an interrupt is disabled and gets pended it will return to the application's - * thread main. The application must ensure that the pended flag is cleared using - * ::sd_nvic_ClearPendingIRQ in order to sleep using this function. This is only necessary for - * disabled interrupts, as the interrupt handler will clear the pending flag automatically for - * enabled interrupts. - * - * In order to wake up from disabled interrupts, the SEVONPEND flag has to be set in the Cortex-M0 - * System Control Register (SCR). @sa CMSIS_SCB - * - * @note If an application interrupt has happened since the last time sd_app_evt_wait was - * called this function will return immediately and not go to sleep. This is to avoid race - * conditions that can occur when a flag is updated in the interrupt handler and processed - * in the main loop. - * - * @post An application interrupt has happened or a interrupt pending flag is set. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_APP_EVT_WAIT, uint32_t, sd_app_evt_wait(void)); - -/**@brief Get PPI channel enable register contents. - * - * @param[out] p_channel_enable The contents of the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_GET, uint32_t, sd_ppi_channel_enable_get(uint32_t * p_channel_enable)); - -/**@brief Set PPI channel enable register. - * - * @param[in] channel_enable_set_msk Mask containing the bits to set in the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_SET, uint32_t, sd_ppi_channel_enable_set(uint32_t channel_enable_set_msk)); - -/**@brief Clear PPI channel enable register. - * - * @param[in] channel_enable_clr_msk Mask containing the bits to clear in the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_CLR, uint32_t, sd_ppi_channel_enable_clr(uint32_t channel_enable_clr_msk)); - -/**@brief Assign endpoints to a PPI channel. - * - * @param[in] channel_num Number of the PPI channel to assign. - * @param[in] evt_endpoint Event endpoint of the PPI channel. - * @param[in] task_endpoint Task endpoint of the PPI channel. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_CHANNEL The channel number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ASSIGN, uint32_t, sd_ppi_channel_assign(uint8_t channel_num, const volatile void * evt_endpoint, const volatile void * task_endpoint)); - -/**@brief Task to enable a channel group. - * - * @param[in] group_num Number of the channel group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_TASK_ENABLE, uint32_t, sd_ppi_group_task_enable(uint8_t group_num)); - -/**@brief Task to disable a channel group. - * - * @param[in] group_num Number of the PPI group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_TASK_DISABLE, uint32_t, sd_ppi_group_task_disable(uint8_t group_num)); - -/**@brief Assign PPI channels to a channel group. - * - * @param[in] group_num Number of the channel group. - * @param[in] channel_msk Mask of the channels to assign to the group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_ASSIGN, uint32_t, sd_ppi_group_assign(uint8_t group_num, uint32_t channel_msk)); - -/**@brief Gets the PPI channels of a channel group. - * - * @param[in] group_num Number of the channel group. - * @param[out] p_channel_msk Mask of the channels assigned to the group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_GET, uint32_t, sd_ppi_group_get(uint8_t group_num, uint32_t * p_channel_msk)); - -/**@brief Configures the Radio Notification signal. - * - * @note - * - The notification signal latency depends on the interrupt priority settings of SWI used - * for notification signal. - * - In the period between the ACTIVE signal and the start of the Radio Event, the SoftDevice - * will interrupt the application to do Radio Event preparation. - * - Using the Radio Notification feature may limit the bandwidth, as the SoftDevice may have - * to shorten the connection events to have time for the Radio Notification signals. - * - * @param[in] type Type of notification signal. - * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE shall be used to turn off radio - * notification. Using @ref NRF_RADIO_NOTIFICATION_DISTANCE_NONE is - * recommended (but not required) to be used with - * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE. - * - * @param[in] distance Distance between the notification signal and start of radio activity. - * This parameter is ignored when @ref NRF_RADIO_NOTIFICATION_TYPE_NONE or - * @ref NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE is used. - * - * @retval ::NRF_ERROR_INVALID_PARAM The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RADIO_NOTIFICATION_CFG_SET, uint32_t, sd_radio_notification_cfg_set(nrf_radio_notification_type_t type, nrf_radio_notification_distance_t distance)); - -/**@brief Encrypts a block according to the specified parameters. - * - * 128-bit AES encryption. - * - * @param[in, out] p_ecb_data Pointer to the ECB parameters' struct (two input - * parameters and one output parameter). - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_ECB_BLOCK_ENCRYPT, uint32_t, sd_ecb_block_encrypt(nrf_ecb_hal_data_t * p_ecb_data)); - -/**@brief Gets any pending events generated by the SoC API. - * - * The application should keep calling this function to get events, until ::NRF_ERROR_NOT_FOUND is returned. - * - * @param[out] p_evt_id Set to one of the values in @ref NRF_SOC_EVTS, if any events are pending. - * - * @retval ::NRF_SUCCESS An event was pending. The event id is written in the p_evt_id parameter. - * @retval ::NRF_ERROR_NOT_FOUND No pending events. - */ -SVCALL(SD_EVT_GET, uint32_t, sd_evt_get(uint32_t * p_evt_id)); - -/**@brief Get the temperature measured on the chip - * - * This function will block until the temperature measurement is done. - * It takes around 50us from call to return. - * - * @note Pan #28 in PAN-028 v 1.6 "Negative measured values are not represented correctly" is corrected by this function. - * - * @param[out] p_temp Result of temperature measurement. Die temperature in 0.25 degrees celsius. - * - * @retval ::NRF_SUCCESS A temperature measurement was done, and the temperature was written to temp - */ -SVCALL(SD_TEMP_GET, uint32_t, sd_temp_get(int32_t * p_temp)); - -/**@brief Flash Write - * - * Commands to write a buffer to flash - * - * This call initiates the flash access command, and its completion will be communicated to the - * application with exactly one of the following events: - * - NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. - * - NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. - * - * @note - * - This call takes control over the radio and the CPU during flash erase and write to make sure that - * they will not interfere with the flash access. This means that all interrupts will be blocked - * for a predictable time (depending on the NVMC specification in nRF51 Series Reference Manual - * and the command parameters). - * - * - * @param[in] p_dst Pointer to start of flash location to be written. - * @param[in] p_src Pointer to buffer with data to be written - * @param[in] size Number of 32-bit words to write. Maximum size is 256 32bit words. - * - * @retval ::NRF_ERROR_INVALID_ADDR Tried to write to a non existing flash address, or p_dst or p_src was unaligned. - * @retval ::NRF_ERROR_BUSY The previous command has not yet completed. - * @retval ::NRF_ERROR_INVALID_LENGTH Size was 0, or more than 256 words. - * @retval ::NRF_ERROR_FORBIDDEN Tried to write to or read from protected location. - * @retval ::NRF_SUCCESS The command was accepted. - */ -SVCALL(SD_FLASH_WRITE, uint32_t, sd_flash_write(uint32_t * const p_dst, uint32_t const * const p_src, uint32_t size)); - - -/**@brief Flash Erase page - * - * Commands to erase a flash page - * - * This call initiates the flash access command, and its completion will be communicated to the - * application with exactly one of the following events: - * - NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. - * - NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. - * - * @note - * - This call takes control over the radio and the CPU during flash erase and write to make sure that - * they will not interfere with the flash access. This means that all interrupts will be blocked - * for a predictable time (depending on the NVMC specification in nRF51 Series Reference Manual - * and the command parameters). - * - * - * @param[in] page_number Pagenumber of the page to erase - * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. - * @retval ::NRF_ERROR_INVALID_ADDR Tried to erase to a non existing flash page. - * @retval ::NRF_ERROR_BUSY The previous command has not yet completed. - * @retval ::NRF_ERROR_FORBIDDEN Tried to erase a protected page. - * @retval ::NRF_SUCCESS The command was accepted. - */ -SVCALL(SD_FLASH_PAGE_ERASE, uint32_t, sd_flash_page_erase(uint32_t page_number)); - - -/**@brief Flash Protection set - * - * Commands to set the flash protection registers PROTENSETx - * - * @note To read the values in PROTENSETx you can read them directly. They are only write-protected. - * - * @param[in] protenset0 Value to be written to PROTENSET0 - * @param[in] protenset1 Value to be written to PROTENSET1 - * - * @retval ::NRF_ERROR_FORBIDDEN Tried to protect the SoftDevice - * @retval ::NRF_SUCCESS Values successfully written to PROTENSETx - */ -SVCALL(SD_FLASH_PROTECT, uint32_t, sd_flash_protect(uint32_t protenset0, uint32_t protenset1)); - -/**@brief Opens a session for radio requests. - * - * @note Only one session can be open at a time. - * @note p_radio_signal_callback(NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) will be called when the radio timeslot - * starts. From this point the NRF_RADIO and NRF_TIMER0 peripherals can be freely accessed - * by the application. - * @note p_radio_signal_callback(NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0) is called whenever the NRF_TIMER0 - * interrupt occurs. - * @note p_radio_signal_callback(NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO) is called whenever the NRF_RADIO - * interrupt occurs. - * @note p_radio_signal_callback() will be called at ARM interrupt priority level 0. This - * implies that none of the sd_* API calls can be used from p_radio_signal_callback(). - * - * @param[in] p_radio_signal_callback The signal callback. - * - * @retval ::NRF_ERROR_INVALID_ADDR p_radio_signal_callback is an invalid function pointer. - * @retval ::NRF_ERROR_BUSY If session cannot be opened. - * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. - * @retval ::NRF_SUCCESS Otherwise. - */ - SVCALL(SD_RADIO_SESSION_OPEN, uint32_t, sd_radio_session_open(nrf_radio_signal_callback_t p_radio_signal_callback)); - -/**@brief Closes a session for radio requests. - * - * @note Any current radio timeslot will be finished before the session is closed. - * @note If a radio timeslot is scheduled when the session is closed, it will be canceled. - * @note The application cannot consider the session closed until the NRF_EVT_RADIO_SESSION_CLOSED - * event is received. - * - * @retval ::NRF_ERROR_FORBIDDEN If session not opened. - * @retval ::NRF_ERROR_BUSY If session is currently being closed. - * @retval ::NRF_SUCCESS Otherwise. - */ - SVCALL(SD_RADIO_SESSION_CLOSE, uint32_t, sd_radio_session_close(void)); - - /**@brief Requests a radio timeslot. - * - * @note The timing of the radio timeslot is specified by p_request->distance_us. For the first - * request in a session, p_request->distance_us is required to be 0 by convention, and - * the timeslot is scheduled at the first possible opportunity. All following radio timeslots are - * requested with a distance of p_request->distance_us measured from the start of the - * previous radio timeslot. - * @note A too small p_request->distance_us will lead to a NRF_EVT_RADIO_BLOCKED event. - * @note Timeslots scheduled too close will lead to a NRF_EVT_RADIO_BLOCKED event. - * @note See the SoftDevice Specification for more on radio timeslot scheduling, distances and lengths. - * @note If an opportunity for the first radio timeslot is not found before 100ms after the call to this - * function, it is not scheduled, and instead a NRF_EVT_RADIO_BLOCKED event is sent. - * The application may then try to schedule the first radio timeslot again. - * @note Successful requests will result in nrf_radio_signal_callback_t(NRF_RADIO_CALLBACK_SIGNAL_TYPE_START). - * Unsuccessful requests will result in a NRF_EVT_RADIO_BLOCKED event, see @ref NRF_SOC_EVTS. - * @note The jitter in the start time of the radio timeslots is +/- NRF_RADIO_START_JITTER_US us. - * @note The nrf_radio_signal_callback_t(NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) call has a latency relative to the - * specified radio timeslot start, but this does not affect the actual start time of the timeslot. - * @note NRF_TIMER0 is reset at the start of the radio timeslot, and is clocked at 1MHz from the high frequency - * (16 MHz) clock source. If p_request->hfclk_force_xtal is true, the high frequency clock is - * guaranteed to be clocked from the external crystal. - * @note The SoftDevice will neither access the NRF_RADIO peripheral nor the NRF_TIMER0 peripheral - * during the radio timeslot. - * - * @param[in] p_request Pointer to the request parameters. - * - * @retval ::NRF_ERROR_FORBIDDEN If session not opened or the session is not IDLE. - * @retval ::NRF_ERROR_INVALID_ADDR If the p_request pointer is invalid. - * @retval ::NRF_ERROR_INVALID_PARAM If the parameters of p_request are not valid. - * @retval ::NRF_SUCCESS Otherwise. - */ - SVCALL(SD_RADIO_REQUEST, uint32_t, sd_radio_request(nrf_radio_request_t * p_request )); - -/** @} */ - -#endif // NRF_SOC_H__ - -/**@} */
--- a/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_svc.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -#ifndef NRF_SVC__ -#define NRF_SVC__ - -#ifdef SVCALL_AS_NORMAL_FUNCTION -#define SVCALL(number, return_type, signature) return_type signature -#else - -#ifndef SVCALL -#if defined (__CC_ARM) -#define SVCALL(number, return_type, signature) return_type __svc(number) signature -#elif defined (__GNUC__) -#define SVCALL(number, return_type, signature) \ - _Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \ - _Pragma("GCC diagnostic ignored \"-Wunused-function\"") \ - __attribute__((naked)) static return_type signature \ - { \ - __asm( \ - "svc %0\n" \ - "bx r14" : : "I" (number) : "r0" \ - ); \ - } -#elif defined (__ICCARM__) -#define PRAGMA(x) _Pragma(#x) -#define SVCALL(number, return_type, signature) \ -PRAGMA(swi_number = number) \ - __swi return_type signature; -#else -#define SVCALL(number, return_type, signature) return_type signature -#endif -#endif // SVCALL - -#endif // SVCALL_AS_NORMAL_FUNCTION -#endif // NRF_SVC__
--- a/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/softdevice_assert.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - -/** @brief Utilities for verifying program logic - */ - -#ifndef SOFTDEVICE_ASSERT_H_ -#define SOFTDEVICE_ASSERT_H_ - -#include <stdint.h> - -/** @brief This function handles assertions. - * - * - * @note - * This function is called when an assertion has triggered. - * - * - * @param line_num The line number where the assertion is called - * @param file_name Pointer to the file name - */ -void assert_softdevice_callback(uint16_t line_num, const uint8_t *file_name); - - -/*lint -emacro(506, ASSERT) */ /* Suppress "Constant value Boolean */ -/*lint -emacro(774, ASSERT) */ /* Suppress "Boolean within 'if' always evaluates to True" */ \ -/** @brief Check intended for production code - * - * Check passes if "expr" evaluates to true. */ -#define ASSERT(expr) \ -if (expr) \ -{ \ -} \ -else \ -{ \ - assert_softdevice_callback((uint16_t)__LINE__, (uint8_t *)__FILE__); \ - /*lint -unreachable */ \ -} - -#endif /* SOFTDEVICE_ASSERT_H_ */
--- a/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_softdevice.hex Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5290 +0,0 @@ -:020000040000FA -:10000000C0070000D1060000D1000000B1060000CA -:1000100000000000000000000000000000000000E0 -:100020000000000000000000000000005107000078 -:100030000000000000000000DB000000E500000000 -:10004000EF000000F9000000030100000D010000B6 -:1000500017010000210100002B0100003501000004 -:100060003F01000049010000530100005D01000054 -:1000700067010000710100007B01000085010000A4 -:100080008F01000099010000A3010000AD010000F4 -:10009000B7010000C1010000CB010000D501000044 -:1000A000DF010000E9010000F3010000FD01000094 -:1000B00007020000110200001B02000025020000E0 -:1000C0001FB5C046C04600F0EFFA04B00FB41FBD24 -:1000D00008205A49096809580847382057490968CB -:1000E000095808473C2055490968095808474020E5 -:1000F0005249096809580847442050490968095875 -:10010000084748204D490968095808474C204B4981 -:10011000096809580847502048490968095808479C -:100120005420464909680958084758204349096836 -:10013000095808475C204149096809580847602068 -:100140003E4909680958084764203C49096809582C -:100150000847682039490968095808476C20374919 -:100160000968095808477020344909680958084740 -:100170007420324909680958084778202F490968CE -:10018000095808477C202D490968095808478020EC -:100190002A490968095808478420284909680958E4 -:1001A0000847882025490968095808478C202349B1 -:1001B00009680958084790202049096809580847E4 -:1001C00094201E4909680958084798201B49096866 -:1001D000095808479C201949096809580847A02070 -:1001E0001649096809580847A4201449096809589C -:1001F0000847A8201149096809580847AC200F4949 -:10020000096809580847B0200C4909680958084787 -:10021000B4200A49096809580847B82007490968FD -:1002200009580847BC2005490968095808470000D3 -:1002300003480449024A034B7047000000000020B5 -:10024000C0070000C00700000122D84B5A6000BF61 -:10025000D74A1268002AFBD0016000BFD44A126856 -:10026000002AFBD00022D14B5A6000BFD04A12684E -:10027000002AFBD07047F0B505460E46174600240D -:1002800006E0A200B158A2005019FFF7DDFF641C80 -:10029000BC42F6D30020F0BD0120C043C549086030 -:1002A000401048607047014601229204086890425D -:1002B00001D9102070470020FCE7F0B505460C4638 -:1002C0001646002706E028462168FFF7BDFF2D1DD2 -:1002D000241D7F1CB742F6D3F0BD70B505460C4611 -:1002E0002E460BE0304600F075F9FF2C01D80024B3 -:1002F00001E0FF3C013C012080023618002CF1D1C6 -:1003000070BD0146012292044868904201D909203B -:100310007047A9484069401C01D10F20F8E7002030 -:10032000F6E7FEB504462068030000F037FA05043E -:100330002B4249598B00201DFFF7E3FF0546002D96 -:1003400001D02846FEBDFFF7A7FF0120C00200F044 -:1003500041F9042221469948FFF78DFF002801D07A -:100360000320EFE708222146944800F06DF90028A9 -:1003700006D1002192480068FFF766FF00F00CF9F3 -:100380000320DFE7A768E6686068019031463846D9 -:10039000FFF7A3FF324638460199FFF78EFFB20000 -:1003A0003846019900F050F9002800D1CAE703202F -:1003B000C8E700F0E3F9834800688349086041E03A -:1003C00060680190E668A0680090B200009901980A -:1003D00000F03AF90746002F00D1B3E70E20B1E74D -:1003E000201DFFF760FF0546002D01D02846A9E734 -:1003F0006068002807D1FFF74FFF0320800200F05C -:10040000E9F800F0C9F8FFF747FF0120C00200F04B -:10041000E1F8042221466948FFF72DFF002801D0AA -:1004200003208FE708222146644800F00DF90028D8 -:1004300006D1002162480068FFF706FF00F0ACF823 -:1004400003207FE700BF00207CE770B505460C461F -:10045000182D04D12068FFF764FF206002E001201E -:10046000206000BF00BF70BDF0B589B05248406940 -:1004700003905248806881000398081802900398FE -:10048000000B01900121090302984018401E000B47 -:1004900000900124002520462946019A00F0C4F866 -:1004A0000022401E91410791069001260027304608 -:1004B0003946009A00F0B8F80022401E914105919B -:1004C0000490049BDB43059AD2430698184307998E -:1004D00011430791069037490698086007984860CD -:1004E00009B0F0BD70B53448446934488568466841 -:1004F000AA003146204600F0A7F8002801D00020CD -:1005000070BD0120FCE72D484068002801D0012083 -:1005100000E000200546FFF7E5FF002807D0FFF7C1 -:10052000BBFE0320800200F055F800F035F8FFF71D -:100530009BFF002D0ED020484669204884684768FC -:1005400021463046FFF7C9FE224639463046FFF7BE -:10055000B4FE00BF00F020F810B5184844681A48EF -:100560000460204600F0DCF810BD15480068006803 -:10057000401C01D100BFFEE710480068002802D0EF -:10058000042806D101E0FFF7BEFFFFF7E5FF00BF3B -:10059000FEE700BF00BFFEE7BFF34F8F0B480C49DB -:1005A000C860BFF34F8F00BFFEE7000000E50140C9 -:1005B00000E40140000600400010001000080000A8 -:1005C000B8070000BC070000000000200400FA0586 -:1005D00000ED00E010B50146104B1A6808460223F2 -:1005E0000F4C636000BF0F4B1B68002BFBD0531CEC -:1005F00004D0904202D20A4B186101E0084B986087 -:1006000000BF084B1B68002BFBD00023044C636029 -:1006100000BF044B1B68002BFBD010BD0010001066 -:1006200000E5014000E4014010B5202A04DB01464A -:10063000203A9140002010BD914020239C1A03468F -:10064000E3401943904010BD034610B50B439B0790 -:100650000FD1042A0DD308C810C9121FA342F8D025 -:1006600018BA21BA884201D9012010BD0020C04328 -:1006700010BD002A03D0D30703D0521C07E000208E -:1006800010BD03780C78401C491C1B1B07D1037854 -:100690000C78401C491C1B1B01D1921EF1D118463D -:1006A00010BD70477047704710B500F007F810BDD7 -:1006B000014B1B68DB6818470000002019481A49E5 -:1006C0007047FFF7FBFFFFF7FBFC00BD20BFFDE716 -:1006D0001649174C24688C420BD1164B1B68994263 -:1006E0000CD1154B154A1360186810498842EDD09B -:1006F0000AE0134880F30888124B18470F4A13602A -:1007000018680A498842E1D080F308880E49884277 -:1007100004DD0E48026802210A4302605B68184744 -:100720000346DFE7C0070000C0070000FFFFFFFF30 -:10073000000C000014100010001000000000002049 -:10074000000400206B05000000200020240500406C -:100750000D48704502D1EFF3098101E0EFF3088104 -:10076000886902380078182802D1C046074A104725 -:10077000074A12682C3212681047000000B5054B7A -:10078000054A9B58984700BDFDFFFFFF4B04000042 -:1007900000000020001000000400000030B4744687 -:1007A000641E2578641CAB4204D3635D5B00E318D0 -:1007B00030BC18471D46F8E7000C00000010000090 -:10100000901D002079500100ED3D0000DF4F0100F0 -:1010100000000000000000000000000000000000D0 -:10102000000000000000000000000000E950010086 -:101030000000000000000000ED3D0000ED3D00005C -:10104000555101005B510100ED3D0000ED3D0000F8 -:10105000ED3D0000ED3D0000ED3D0000ED3D0000E8 -:1010600061510100ED3D0000ED3D000067510100C0 -:10107000ED3D00006D5101007351010079510100F7 -:10108000ED3D0000ED3D0000ED3D0000ED3D0000B8 -:10109000ED3D0000ED3D0000ED3D0000ED3D0000A8 -:1010A0007F51010085510100ED3D0000ED3D000044 -:1010B000ED3D0000ED3D0000ED3D0000ED3D000088 -:1010C00000F002F813F0B9FF0CA030C8083824185B -:1010D0002D18A246671EAB4654465D46AC4201D170 -:1010E00013F0ABFF7E460F3E0FCCB64601263342CF -:1010F00000D0FB1AA246AB463343184744410100D7 -:1011000074410100103A02D378C878C1FAD8520766 -:1011100001D330C830C101D504680C6070470000AD -:101120000023002400250026103A01D378C1FBD803 -:10113000520700D330C100D50B6070471FB5C046C1 -:10114000C04613F01BFF04B00FB41FBD82690249F3 -:1011500081610248104470476111000001000000E5 -:1011600001B41EB400B510F02FFC01B401988646FE -:1011700001BC01B01EBD0000F0B4404649465246D5 -:101180005B460FB402A0013001B50648004700BF1E -:1011900001BC86460FBC8046894692469B46F0BC01 -:1011A00070470000C1100000401E00BF00BF00BF1C -:1011B00000BF00BF00BF00BF00BF00BF00BF00BF37 -:1011C00000BFF1D17047000070B505460C461646C9 -:1011D00002E00FCC0FC5103E102EFAD2082E02D31B -:1011E00003CC03C5083E042E07D301CC01C5361F2E -:1011F00003E021782970641C6D1C761EF9D270BD45 -:101200008307FF22DB0E9A408907090E99400028C8 -:101210000BDA0007000F0838830828489B001B18CA -:10122000D86990430843D8617047830824489B00DD -:101230001B181868904308431860704710B504469F -:1012400000210120FFF7DCFF00211820FFF7D8FF65 -:1012500000210B20FFF7D4FF02211920FFF7D0FF58 -:1012600002210D20FFF7CCFF02210E20FFF7C8FF5F -:1012700002210F20FFF7C4FF0221C81FFFF7C0FFA4 -:1012800003211620FFF7BCFF03211520FFF7B8FF4D -:10129000204600F019F8002010BD4F210180704752 -:1012A00010B500F03AF810BD0648704710B500F0D0 -:1012B00035F810BD704770477047000000ED00E042 -:1012C00000E400E003F900C330B50446374D95B0A3 -:1012D00007202870A81CFFF7E0FF5920A880344899 -:1012E00001F020FC0546072000F0DCF929462F48D4 -:1012F00000F08CFA641E072C0AD830216846017071 -:10130000847001F0DDFA002802D009A800F0DDFCAD -:10131000284601F083FE15B030BD7047F8B5234E66 -:101320000446B61E307801270D46002807D0204617 -:1013300060380B2808D8204601F096FB2BE0602C83 -:10134000F9D01C480860F8BD20466C38032803D843 -:10135000204601F0CBFB1EE0204670381F2803D842 -:10136000204600F037F816E0204690380F2803D8C2 -:10137000204600F0BBF80EE02046A0380F2803D826 -:10138000204600F023F906E02046B0380F2804D8A4 -:10139000204600F000F9286000E02F60602CD2D1D8 -:1013A00028680028CFD13770F8BD00001A0000204F -:1013B000C33300000130000070477047704770472A -:1013C000704770477047704710B5012801D100F091 -:1013D00042FA10BD10B57038030013F0EBFE150C87 -:1013E00012161E22252C33383D41454950555C6468 -:1013F0006C747B8085004A680878114603F081FF91 -:1014000010BD086803F0F9FF10BD0C790B7B8A68EA -:101410000868214604F005F810BD086804F07EF85D -:1014200010BD03F05BFC10BD08884A6880B211460D -:1014300004F043FA10BD0A790888114680B204F01E -:1014400091FA10BD087840B204F09CFA10BD0888EB -:1014500080B204F0B8FA10BD086804F0C7FA10BDF5 -:10146000086804F0DFFA10BD086804F00AFB10BD3C -:10147000088982B209C9194604F034FB10BD05C9B8 -:10148000114604F082FB10BD08884A6880B21146FC -:1014900004F0A0FB10BD0B7908888A6880B2194659 -:1014A00004F0FDFB10BD0B7908888A6880B21946EC -:1014B00004F0B3FC10BD08884B688A6880B21946F6 -:1014C00004F0F3FC10BD08884A6880B2114604F0AD -:1014D0003EFD10BD088880B204F056FD10BD08889E -:1014E00080B204F076FD10BD012010BD10B590381B -:1014F000030013F05FFE09060F161D242C363F462D -:101500004E0088888A6883B20888194680B205F040 -:1015100093F910BD08884A6880B2114605F0E9F9D0 -:1015200010BD08884A6880B2114605F02DFA10BD3A -:1015300008884A6880B2114605F063FA10BD088831 -:101540004B688A6880B2194605F094FA10BD088984 -:1015500082B2888883B20888194680B205F0C9FA39 -:1015600010BD08894B6882B20888194680B205F020 -:10157000FEFA10BD08884A6880B2114605F02EFBBD -:1015800010BD888882B20888114680B205F0C2FB7F -:1015900010BD012010BD10B5B02805D0B12808D06D -:1015A000B2280BD0012010BD088880B205F0A6FE3D -:1015B00010BD088880B205F0D1FE10BD08884B68C8 -:1015C0008A6880B2194605F0DAFE10BD10B5A03861 -:1015D000030013F0EFFD0B070E172028323C434D9C -:1015E000545D65004B6808788A68194607F017FA59 -:1015F00010BD88888A6883B20888194680B207F0CF -:1016000023FA10BD08884C68CB688A6880B22146EE -:1016100007F02AFA10BD08884B688A6880B219461C -:1016200007F044FA10BD8888CB6884B208888A68BD -:1016300080B2214607F064FA10BD8888CB6884B276 -:1016400008888A6880B2214607F089FA10BD0888A8 -:101650004A6880B2114607F0BDFA10BD088982B20F -:10166000888883B20888194680B207F0BDFA10BD99 -:1016700008884A6880B2114607F0DAFA10BD088976 -:101680004B6882B20888194680B207F057FB10BD3C -:1016900008884B688A6880B2194607F014FC10BDB0 -:1016A000012010BD10B507F0FAFC0FF0A7FF00F005 -:1016B00007F810F0F5F808F0F5F908F081F910BD19 -:1016C00001202B49C00308602A490020087003202C -:1016D0002949800288607047F8B5264D044628786D -:1016E000A04207D0002C05D0002803D023A14D2014 -:1016F00013F06FFC2878A04213D02C700325002330 -:101700002349AD021C48002C27D01B4A214E4032F1 -:10171000214F012C06D0022C13D018A16E2013F0FB -:1017200058FCF8BD0B6002230B604E6185601B49BD -:1017300011625762091D91621749091DD162456006 -:10174000F8BD0B6003230B604E610121C90281606B -:10175000134B9362D7624160F8BD0B600B608560EC -:10176000F8BD10B505A1772013F033FC10BD0000C3 -:1017700080E100E02000002000F501407372635C0E -:1017800068616C5F63636D5F6161722E630000006E -:1017900000F500407C01002000F0004000110040F6 -:1017A000488100401CB50446002069460870204668 -:1017B00009F0F6F86946204608F0B4FF002803D186 -:1017C000FBA1B62013F005FC01A9204608F009FF93 -:1017D000002803D1F6A1BB2013F0FBFB684600787C -:1017E0001CBD70B5F74D002428462C76203084713E -:1017F000C47113F0EDFC2846403804702030847327 -:10180000847484762C74AC7070BDEAE710B50C4615 -:10181000ED4982888A8042884A80007808700846AC -:101820000A38847008F0B3FEFFF7DBFF20460AF0A9 -:101830002FFAE44AE0321146383908461446813816 -:1018400009F020F92146E0480BF0C2FC09F09FF8AE -:1018500013F0BEFC10BD10B50120FFF7ADFD10BDAB -:10186000F8B509F083FDD84DD64C0A3D022802D0C8 -:10187000207C00287CD0207E0026102819D1A0785A -:10188000002803D0CAA1D14813F0A3FBCD48E83803 -:10189000817A89070DD50146267160398989E180F1 -:1018A000C17A217281896181C089A0810120A070E3 -:1018B0002676C44F203FB87C002859D1C4486946D9 -:1018C000808908F02FFF002805D0694668780978DC -:1018D0004018687004E0BD48B5A11D3013F079FBD5 -:1018E000207C002838D0BA488189FF300930406D0B -:1018F0008089814204D0B548ADA1223013F069FB44 -:10190000B348808908F0B4FF002804D1AF48A8A1EB -:10191000283013F05EFB09F022F800281CD0AC48F8 -:101920008089FFF73FFF697840186870A548403804 -:10193000416D20318A7C012A0DD1A54A3E779289DA -:10194000C287C87C20700120B876207E102801D084 -:10195000282800D1267626746978002908D09C486A -:101960008289FF300930C28601870120B8746E7009 -:1019700009F0CCFC002805D1207C002802D0A878F2 -:1019800001F0F4F8F8BDF8B50F460446FFF768FF1C -:101990008C4D403D28788B4E002813D0002F10D15D -:1019A000307E002804D0FF2081A1C63013F011FB47 -:1019B0002C22A91C204613F06FF90E202070002065 -:1019C00028708FE07F4D203DA87B002818D0002F85 -:1019D000F7D1307E102808D0282806D0002804D05F -:1019E000FF2073A1D23013F0F4FA0120E070E87BFD -:1019F000A070287C60700F2020700020A87371E018 -:101A00000121204608F0E4FF002807D0307C0028A0 -:101A100051D13946204608F0DBFFF8BDA97C694862 -:101A20000C38009068480A38002913D0017805293D -:101A300010D2002F56D1491C0170002666700D206F -:101A40002070012028750622A01C009913F024F9AB -:101A5000AE7447E05C4800210A380170B078002875 -:101A600014D0002F3ED1307E002803D050A1594819 -:101A700013F0AFFA002565700120524920700A2248 -:101A8000091DA01C13F008F9B5702BE0394620465B -:101A90000BF008FB002825D1A87C002805D0002FDA -:101AA00020D149480A380178C5E7A87E002802D02D -:101AB000307C002801D00020F8BD002F12D1307EEC -:101AC000002804D08F203AA1800013F082FA00266B -:101AD00066700A203B4920700622091FA01C13F0E3 -:101AE000DBF8AE760120F8BD10B53648017E00293E -:101AF00008D1007C012805D001210020FFF743FF19 -:101B0000002801D0072010BD012010BD10B5012410 -:101B10000AF006F90443FFF7E7FF044308F038FF33 -:101B200001462143084610BDF8B51D4614460E4631 -:101B300008F077FD002807D0684608F07DFD0028F2 -:101B400003D0002C07D101E00120F8BD9B2018A193 -:101B5000800013F03EFA08F01BFDA04204D21D489D -:101B600013A1583013F035FA009808F089F931467E -:101B7000009808F097F9E2B22946009808F04EFB69 -:101B800008F06CFD002804D19F2009A1800013F00B -:101B900020FA08F0FFFE0E4800244030417C002966 -:101BA00002D044740AF0A7F90948C480CCE70000C9 -:101BB0007372635C6C6C5F6374726C2E73302E6333 -:101BC00000000000200300202C00002082060000FE -:101BD000D80100201502000010B50179002908D0B5 -:101BE00001290BD0FF20FE49043013F0F2F9002048 -:101BF00010BD831D42880488022103E042880488C6 -:101C0000831D01212046FFF78FFF10BDF8B51F4649 -:101C100015460E46044609F0A9FB022803D0F148F8 -:101C2000007C00281FD0F0488089208008F020FE2A -:101C3000002803D1EA49ED4813F0CBF905246846A2 -:101C400008F021FE00280ED0009808F063F93070EB -:101C5000022809D0012807D008F055FE641E24068A -:101C6000240EECD10020F8BD3946009808F0EEFAB9 -:101C70002880002804D1AF20D949800013F0A9F9A9 -:101C800008F041FE002804D1D848D549193013F096 -:101C9000A0F90120F8BD38B50446831D821C6946B1 -:101CA000FFF7B4FF00280DD000206071684600786F -:101CB000012808D0022806D0FF20C949253013F09A -:101CC00088F9012038BD2071FBE700215BE670B583 -:101CD000C44C0546403C2078002803D1C148007E12 -:101CE000002804D0C120BE49C00013F072F9287842 -:101CF00008F085FF28780BF0C1FB0020207101203F -:101D000060713921E170207070BD70B5B54D044629 -:101D1000403D2878002803D1B248007E002804D036 -:101D20005F20AF49000113F054F9AF4E2188B0890C -:101D3000884203D109F01AFB022807D0022028713B -:101D4000012068713821E970287070BD7F2070769D -:101D5000A548E17820304174A17801740020EEE7B5 -:101D600010B5A04C403C207800280BD19D48007E47 -:101D7000002807D109F0FAFA032803D009F0FAFA8B -:101D8000032804D199489649653013F022F9954902 -:101D900000202031C8712071012060713A21E1706A -:101DA000207010BD70B58F4C0646403C207800284E -:101DB0000BD18C48007E002807D109F0D7FA032800 -:101DC00003D009F0D7FA032804D1884884497B302E -:101DD00013F0FFF8834D2035E87908280CD2E87914 -:101DE0001022000100196830314600F025FEE87924 -:101DF000401CE871002000E0072020710120607184 -:101E00003B21E170207070BDF8B5764D0446403D31 -:101E10002878002803D17348007E002803D0704939 -:101E2000734813F0D6F8704F2188B889884203D1DF -:101E300009F09CFA022801D0022022E03E8C64883E -:101E40007200788CF98B521C944217D3694A514323 -:101E50009200504312F09AFF401EFF2180B2F531EC -:101E6000884200D90846844200D22046711C401C9A -:101E700012F08CFF761C7043401E86B2FE85EE8009 -:101E800000202871012068713C21E9702870F8BD9C -:101E9000F8B5544C0546403C2078002803D1514801 -:101EA000007E002804D052484D492C3813F091F898 -:101EB000A878002801D0012804D1A888FF21F53195 -:101EC000884204D959204649000113F082F8464E51 -:101ED0002988B089884203D109F048FA022807D03E -:101EE00002202071012060713621E1702070F8BD60 -:101EF0003D48002720308772A988B18501213176BD -:101F0000A978012900D00021817237484030407CF7 -:101F1000002801D009F0EFFF2771E3E770B5314CDD -:101F20000546403C2078002807D12E48007E002836 -:101F300003D109F01BFA002804D02D482849533852 -:101F400013F047F8287809F0EEFE002020710120F8 -:101F500060713021E170207070BD70B5214C054674 -:101F6000403C2078002803D11E48007E002804D081 -:101F70001F481B495F3013F02CF8287800280BD03D -:101F8000012809D0022807D06878402804D31848CF -:101F90001349663013F01DF8284609F0DEF90028D1 -:101FA00001D0002000E00C2020710120607134215C -:101FB000E170207070BD70B50A4C0546403C207839 -:101FC000002807D10748007E002803D109F0CEF988 -:101FD000002804D057200249000112F0FAFF0BE05C -:101FE000B01B000020030020D8010020AA0200003E -:101FF000B6050000C40900002978002913D00A2979 -:1020000011D014290FD01E290DD028290BD0322928 -:1020100009D04B2907D0642905D0FF2903D0FE49F8 -:10202000FE4812F0D6FF284609F0FCFE0020207181 -:10203000012060713321E170207070BD70B5F84CE3 -:1020400006462078251D002804D120464030007E19 -:10205000002804D05520F049000112F0BAFF3146A3 -:10206000002008F0A1FD2870002804D10622314686 -:10207000EC4812F011FE012060713221E1702070F5 -:1020800070BD70B5E64C05462078002804D1204686 -:102090004030007E002804D0A720DF49C00012F0A5 -:1020A00098FF00216956042914D0002912D0081D78 -:1020B00010D0001D0ED0001D0CD0001D0AD0001D38 -:1020C00008D00A3006D0283104D0D448D249443848 -:1020D00012F07FFFD448297801700120607131210E -:1020E000E170207070BD10B5CD4C2078002804D16F -:1020F00020464030007E002803D0C749CB4812F06C -:1021000068FF08F045FAE08008F00AFB2072002022 -:102110002071012060710521E170207010BDF8B5BB -:10212000BF4C07462034A07B25462035002805D12A -:10213000287E002802D1A878002804D0B748B649E4 -:10214000703812F046FF09F011F91026022822D14A -:10215000B7483988808988421DD1B1494839084635 -:102160000A7F6038807A002A03D080070CD40C20C4 -:102170000CE0800708D406200877AD484030407C4A -:10218000002801D009F0B7FE2E760020E0732674F7 -:102190000120A073F8BD0220F8E710B5A04C20780C -:1021A000002804D120464030007E002804D09B48FF -:1021B0009949823812F00DFF002020710E20A07086 -:1021C0000F20E070FF20A0710020C04320819548BF -:1021D000C01D0178A1728188A1814088E081012021 -:1021E0006071207010BD10B58D4C2078002804D18E -:1021F00020464030007E002803D087498D4812F0E9 -:10220000E8FE0821A01D0FF095FA002020710120A2 -:1022100060712B21E170207010BD70B5804D0446B7 -:102220002878002804D128464030007E002804D0B9 -:102230007A487949B13012F0CCFE7D48102221460F -:10224000303800F0F9FB7A481022A118203800F04D -:10225000F3FB774830380FF074FB754910221039C2 -:102260002C46A81D00F0E8FB002020710E20A07075 -:102270002A20E07001206071207070BDF8B5684CB4 -:1022800005462034A07B26462036002802D1307E29 -:10229000002804D067486049E53012F09AFEA9781A -:1022A000052912D0132910D014290ED015290CD0CD -:1022B0001A290AD0292908D03D2906D03B2904D063 -:1022C0005C485549ED3012F084FE28885A4988420E -:1022D00004D958485049F63012F07BFE09F046F810 -:1022E0000C212827022809D151482A888089904248 -:1022F00015D14B484838027E002A01D0E17310E026 -:10230000A97841760121017637760020E0734848AC -:102310004030407C002804D009F0EDFD01E00220AF -:10232000E07327740120A073F8BDF8B53C4F064652 -:1023300038783D1D002804D138464030007E002802 -:1023400004D089203449C00012F043FE31460120F8 -:1023500008F02AFC01242870002807D13048062202 -:1023600060303146054612F097FCAC717C71172045 -:10237000F8703C70F8BDF0B52B4F85B0403F3D7A0A -:10238000064627480078002804D13846A038007E49 -:10239000002804D0D3202049800012F01AFE3078A3 -:1023A000002806D0012804D022481B492C3812F0FE -:1023B00010FE082D4CD21C4820380190C46930789A -:1023C00000283FD0012804D01A4813491E3812F0C3 -:1023D00000FE294608310120884004430120A8401E -:1023E00020430090B1790E4C0802727969000919F6 -:1023F0001043FF3101318881B01C12F0AEFC7178BE -:1024000000020843A9000919C031C862387A401C8B -:1024100038720199009811E0B01B00007E050000A1 -:10242000E00200202500002000040020E706000054 -:10243000D801002079030000FF0E0000C8610020D1 -:10244000207108E029460831012088408443C5E70F -:10245000FE48072101710121FC480B224171C27025 -:10246000017005B0F0BD10B5F84C2078002804D1FB -:1024700020464030007E002803D0F549F54812F090 -:10248000A8FD12F0A5FE00202071012060710A2134 -:10249000E170207010BD10B509F0DDFB002804D0FC -:1024A000EC48EB49583812F094FD08F06FFA08F048 -:1024B00052F80AF07EFE002804D0BD20E4498000D6 -:1024C00012F087FD08F0B3FA002804D05F20E0493D -:1024D000C00012F07EFD12F07BFEDF480024047085 -:1024E000FFF77FF9D9480121047141710222C270BE -:1024F000017010BD70B5D54D04462878002804D170 -:1025000028464030007E002804D0F320D0498000C7 -:1025100012F05FFD20781F2801D8601C04D1CD483F -:10252000CB498F3012F055FD002028712078611CB6 -:1025300008F054FB012068712021E970287070BDFB -:10254000F8B5C24C0646207825464035002802D111 -:10255000287E002804D0BF48BD499C3012F039FDC8 -:102560003078012806D0002804D0BA48B8499D30F8 -:1025700012F02FFD012060710C20207130780027AF -:10258000B64E012808D008F0F1FE032867D008F005 -:10259000F1FE032871D076E008F0E8FE002803D1B0 -:1025A00008F0E8FE002804D008F0E0FE02283DD044 -:1025B00069E008F07EFA002865D0287C002862D106 -:1025C000A64802210C300FF03EF8002806D00F215B -:1025D000B089090212F0DAFBB18100E0B781012273 -:1025E00003219E4807F05AFE9C4808F006FCB0897B -:1025F00007F0D0FF002804D196489549B83012F072 -:10260000E8FCB089002108F0C9F9002804D09148FD -:102610008F49BC3012F0DDFC297F688B09F087FB05 -:1026200000282FD08B488A49C03015E008F0A2FE60 -:10263000002828D1287F002825D0012823D008F0A1 -:1026400038FA00281FD0297F688B09F070FB00281A -:1026500018D080487E49D33012F0BBFC12E0002035 -:1026600009F098FA00280ED12771287C00280AD199 -:10267000B089FFF797F806E0FFE7002009F08AFA33 -:10268000002800D127711B20E07001202070F8BDC8 -:1026900070B56E4D04462878002804D12846403095 -:1026A000007E002804D06B486949803012F091FC0C -:1026B00020781F2801D8601C04D166486449813005 -:1026C00012F087FC002028712078611C08F09AFA2B -:1026D000012068711A21E970287070BDF8B55B4D52 -:1026E000044628780C272E46403600280AD1307E32 -:1026F000002807D108F03AFE032803D008F03AFE7C -:10270000032804D153485249473012F062FC6079E3 -:10271000002801D001282FD1A079002801D001285C -:102720002AD1A07B002805D0012803D0022801D09F -:10273000032821D1607B40071ED0618801208003DF -:10274000814202D82288824201D920790CE0207986 -:10275000002804D0022805D0032803D004E0202953 -:1027600004D209E0A02A01D2012805D1208888429C -:1027700007D92079012804D0364835495C3012F059 -:1027800028FC20887083207930776079002802D077 -:10279000012803D00CE0324A002105E02B4A6032C8 -:1027A0009079002804D00121204608F086F90746D8 -:1027B00001202F7168711821E9702870F8BD70B57B -:1027C000224C05462078002804D120464030007E67 -:1027D000002803D01E49234812F0FBFB08F0C6FD79 -:1027E0000C2102280ED11D482A8883899A4219D1CA -:1027F0000246C032137F002B04D1807E0E2803D006 -:102800000F2801D0217103E00520107700202071EE -:102810000E20A0702E20E0702888E08001206071DA -:10282000207070BD0220F2E770B5084C0546207894 -:10283000002804D120464030007E002804D00948FA -:1028400003492C3812F0C5FB0EE00000E002002026 -:10285000B01B00003E03000000040020D80100204F -:1028600025000020D104000008F080FD0C21022882 -:102870000ED178482A8883899A421FD10646C036ED -:10288000327F002A04D1807E0E2803D00F2801D089 -:10289000217109E06F481022A91CEA3012F0FCF9FE -:1028A00004203077002020710E20A0702D20E070D1 -:1028B0002888E08001206071207070BD0220F2E75E -:1028C00010B501780B0012F075FC3D8787388787BB -:1028D00058878787873B3E878787515487878787B5 -:1028E00087874228872C3087878787348787878721 -:1028F00087878746874A4E872024876B5B5F63679D -:10290000876F877E827B77738700801CFFF78CFF41 -:1029100060E0801CFFF753FF5CE0801CFFF7DEFEE9 -:1029200058E0801CFFF7B4FE54E0801CFFF708FE5F -:1029300050E0801CFFF7DEFD4CE0FFF7ACFD49E006 -:10294000FFF791FD46E0801CFFF715FD42E0801C7B -:10295000FFF7EBFC3EE0801CFFF790FC3AE0801CA8 -:10296000FFF75BFC36E0FFF73EFC33E0FFF715FCBA -:1029700030E0801CFFF7D3FB2CE0FFF7B4FB29E02D -:10298000801CFFF77EFB25E0801CFFF757FB21E052 -:10299000801CFFF710FB1DE0801CFFF7DEFA19E03A -:1029A000801CFFF7BBFA15E0801CFFF771FA11E0FD -:1029B000801CFFF729FA0DE0801CFFF7F3F909E00E -:1029C000FFF7CEF906E0801CFFF79FF902E0801CBC -:1029D000FFF77DF9012010BD002010BD10B51E4984 -:1029E0001E4812F0F6FA10BD70B51D4A01241146BA -:1029F000184D4031030012F0DDFB05191C1C0419B1 -:102A00001C0001220021134807F048FC1448002153 -:102A1000483801774177C03809F005FA002804D01A -:102A20000E480D49D33012F0D4FA70BD0C745565C0 -:102A300070BD09490B48F6E730B5134606E0CC18DF -:102A4000203CE47FD51A44555B1EDBB2002BF6D147 -:102A500030BD0000D8010020B01B0000410600007E -:102A6000E00200204707000010B56038030012F0B4 -:102A7000A1FB0A060A0F13181F262A31363B0868E5 -:102A800000F093FD10BD05C9114600F0ADFD10BD6D -:102A9000086800F04CFE10BD05C9114600F054FE58 -:102AA00010BD4B6808788A68194600F065FE10BDB5 -:102AB0004B688A680868194600F07FFE10BD0868F8 -:102AC00000F09AFE10BD08884A6880B2114600F0F6 -:102AD000EAFE10BD05C9114600F00AFF10BD05C988 -:102AE000114600F01DFF10BD012010BD10B56C286F -:102AF00001D0012010BD087800F0B8FE10BD000024 -:102B000001203F49400608603E4908603E490A6886 -:102B1000FF231B029A4383121A430A603849803903 -:102B20000860704710B502460420384904E0C3002D -:102B30005B181B79002B0AD00346401EC0B2002B45 -:102B4000F5D133A1432012F044FAFF2010BDC30099 -:102B5000CA50002259184A718A7101220A7110BDA7 -:102B60002A4A0021C00080180171704710B5044640 -:102B7000042803D326A1522012F02BFA2348E100A7 -:102B80000C182079012803D021A1532012F021FA3A -:102B90006079A179401CC0B2814200D060710120EF -:102BA000174940068031086010BD70B516480068AE -:102BB0000004800F022803D015A1692012F009FA41 -:102BC000124E194C03252078C10088190279012A78 -:102BD00007D1427983799A4203D042798271705841 -:102BE00080472078401CC0B22070042801D3002008 -:102BF000207028466D1EEDB20028E4D170BD0000A3 -:102C000080E100E080E200E018E400E02C12002007 -:102C10007372635C736F635F7369676E616C6C6919 -:102C20006E672E63000000003C00002010B5EFF33B -:102C30001080C407E40F72B6D6484178491C417031 -:102C40004078012801D10FF065F9002C00D162B65F -:102C500010BD70B5CF4CE07800280AD10125E57091 -:102C6000FFF7E4FF0FF05EF9002804D000200FF01A -:102C700031F9002070BDC84865714560F9E770B54D -:102C8000EFF31080C507ED0F72B6C24C60780028D4 -:102C900003D1C2A18F2012F09CF96078401E6070B1 -:102CA0006078002801D10FF039F9002D00D162B60B -:102CB00070BD10B5B748C178002904D0002141711A -:102CC000C170FFF7DCFF002010BD10B504460FF007 -:102CD00029F9B049C978084000D0012020600020BF -:102CE00010BDF8B50246AB4C0026A67108200421A1 -:102CF00001251027130012F05DFA0D080A0C0E10C2 -:102D00001214161E262123252800257122E00220F8 -:102D100001E021711EE020711CE027711AE02020E3 -:102D2000F9E7012616E0FFF781FF0FF0FBF8002816 -:102D3000FBD002260EE02171A5710BE02771FBE7A5 -:102D4000202000E040202071F6E7FF2093A17E3094 -:102D500012F03FF90FF0F2F8002809D00FF0F4F864 -:102D6000B04205D130460FF0F2F80028FAD024E046 -:102D700001208007C5608D4A002151608C4A966110 -:102D8000854B02225A6085608A4803690569DB43E6 -:102D9000DB06DB175B1C10273D430561834D00E01C -:102DA00020BF6F68002FFBD0002B03D107691023D1 -:102DB0009F430761784882606960A07900280CD041 -:102DC0000FF0B0F805460FF00DF87B4A002D02D049 -:102DD000A260E06001E0E260A060002E01D100F09E -:102DE000B1F8F8BD10B504460FF0A2F8002805D0E0 -:102DF00068490120C8704A78521C4A702046FFF783 -:102E000070FF10BDF8B5694FB8680025012802D1E0 -:102E1000BD600FF05FF87868012800D17D603868E8 -:102E200001265C4C012814D13D606079002803D054 -:102E300000200FF04FF865712078002809D00FF0BE -:102E400071F8002805D05948C0388663000606612D -:102E5000A670386901282CD13D6100F068F8012086 -:102E600080074661A079002815D00FF05BF800902C -:102E70000EF0B8FF0099002901D0E16800E0A168D8 -:102E8000411A022901DA8A1C13DC0099002901D0B9 -:102E9000E06000E0A060FFF7C9FE0FF043F80028F3 -:102EA00006D04248C038866300060661A67000E07E -:102EB0002670F868012819D100F039F800F037F8C9 -:102EC00000F035F8A078002804D1FF2033A10530A8 -:102ED00012F07FF8FD60A5702570FFF7D0FE0EF0B0 -:102EE000F8FA002802D03148C038C663F8BD10B5E2 -:102EF000284CE078002801D10FF010F8012081075C -:102F0000886100F014F8A07800280BD0274CE06806 -:102F1000002803D10FF01BF80028F8D10020E06052 -:102F200000F005F800201C49C043886010BD08B5BA -:102F30005020694608806A461088411E118000288A -:102F4000F9D108BDF8B51448192787601749002042 -:102F50000860C8600EF0E6FFBD0701240D4E002892 -:102F600005D01248C03884632C61B47000E034701E -:102F7000FFF75CFE084847600D4930798863FFF72A -:102F8000D6FFAC61FFF7D3FF0849002008616C61F0 -:102F9000F8BD000040000020000300407372635C35 -:102FA000736F635F636C6F636B2E6300000100409F -:102FB0000005004000ED00E0FFFFFF7F10B510F0BE -:102FC00064F810BD00200449C8630120012181403C -:102FD000024A116000BF7047C01F004080E200E05D -:102FE00010B504460BF095F820460CF0AAF810BD79 -:102FF0007047704770477047704770477047704719 -:1030000010FFFFFFDBE5B151006001004F00FFFF43 -:1030100003B40148019001BD09000020FE49487039 -:10302000704710B5030012F0C5F8080E050E080829 -:103030000B0B0E1104F07DF810BDFFF7D1FF10BD92 -:103040000DF0E8FF10BD01F095FE10BDFF20F3A1CB -:10305000713011F0BEFF10BD7FB5F44905464868D8 -:103060008968082301910090F14A1946F1480EF051 -:103070008BFD0024F0480EF0A5FD641CE4B2082C82 -:10308000F8D3EB490320803140020CF02FF90028DF -:1030900003D0E2A1962011F09CFF1E220221E748F6 -:1030A0000AF0E7FCE5481E22032110300BF05BFA22 -:1030B000E2480722342174300AF034FCDF484C2106 -:1030C000283011F048FEDD496A46743108464C3814 -:1030D0000164FF317B31416401211172039002F0E0 -:1030E000B4F802A80CF050FC002803D0CBA1AA2011 -:1030F00011F06FFFCF4802222421A8380AF012FCF9 -:10310000CC4802222C215C380AF00CFCCC490B2064 -:103110000EF082F8002803D0C0A1B72011F059FFAB -:1031200003F0F4FF03F0F8F904F05AFE6B460022B6 -:103130000821C4A001F070FF002803D0B7A1BE2071 -:1031400011F047FF284605F071F9002803D0B3A11C -:10315000C02011F03EFF8521C900BD4811F0FBFDE4 -:10316000BB49B24A0020135C0C18401CC0B2E3708B -:103170000428F8D3A849002048608870C8707FBD33 -:1031800070B5B44E0546706A94B00C46401C04D12C -:10319000B06AC0430004000C0BD0306AC007C00FF7 -:1031A0002870706A11F0EAFDB06A2071000A60713F -:1031B00013E02B206946087009A968460AF0F8FB5D -:1031C000002803D095A1E42011F003FF012028700E -:1031D00006220AA9204611F05FFD2878002803D0B6 -:1031E0006079C0210843607114B070BDF0B5994C8E -:1031F0000646206895B00D463746401C0837002823 -:1032000008D16068401C05D1A068401C02D1E0686C -:10321000401C11D02068314611F0B0FD6068311DAE -:1032200011F0ACFDA068394611F0A8FDE068314608 -:103230000C3111F0A3FD25E02B206946087009A987 -:1032400068460AF0B5FB002804D0FF2073A10E30B9 -:1032500011F0BFFE08220AA9304611F01DFD2B20F7 -:103260006946087009A968460AF0A2FB002804D044 -:10327000FF206AA1153011F0ACFE08220AA93846D9 -:1032800011F00AFD20692E46401C0836002808D19E -:103290006069401C05D1A069401C02D1E069401C56 -:1032A00012D02069294611F069FD6069291D11F0CD -:1032B00065FDA069314611F061FDE06929460C31D8 -:1032C00011F05CFD15B0F0BD2B246846047009A90F -:1032D0000AF06EFB002804D0FF2050A1333011F01B -:1032E00078FE082209AF0AA9284611F0D5FC6846E5 -:1032F000047009A90AF05CFB002804D0FF2047A154 -:103300003A3011F066FE0822391D304611F0C4FC37 -:10331000D8E710B5002108460EF00CFD0021012071 -:103320000EF008FD002102200EF004FD0021032014 -:103330000EF000FD002104200EF0FCFC0021052011 -:103340000EF0F8FC10BD10B5414CA0780B2804D34A -:10335000FF2032A18A3011F03CFE207860214843E2 -:1033600000190830002101704178E722C908C9001E -:10337000C91C11404170284A0121917010BD70B5DF -:10338000254CA07800280ED0314800250178491C32 -:10339000C9B201700B2900D105708178491C817078 -:1033A0000EF093FDA57070BD70B51B4C05466068AE -:1033B000002804D0FF2019A1B33011F00AFE656087 -:1033C00070BD70B5144E224DFFF7BDFF7168044605 -:1033D000002907D06022FDF7F7FEFFF7D0FF00209D -:1033E0007060F1E72879002876D012485C380AF03E -:1033F000A9FA6060002804D1FF2008A1D13011F0A3 -:10340000E8FD60680AF0FCFA002831D0204600F0A0 -:103410006FFF607801071FE0340000207372635C67 -:10342000686F73745F636F72652E6300E051010013 -:10343000040400200C12002023300000840A002025 -:10344000B41000206E524635313832320000000090 -:103450008C0C00208000001007D5C008C000401C64 -:1034600060702879401E287127E0F74861682AE0DB -:10347000F54861680AF06FFA687900282CD0F248A4 -:103480004C380AF05FFA6060002804D1FF20EF4951 -:10349000F43011F09EFD60680AF0B6FA002816D0EC -:1034A000204603F085FE6078010709D5C008C000FA -:1034B000801C60706879401E6871FFF760FF83E7C9 -:1034C000E14861684C380AF046FA7DE704E0DE48DE -:1034D00061684C380AF03FFA70BDF7B505460078D0 -:1034E000002700090C463E46062803D0D749D84895 -:1034F00011F06FFD287A00280ED0012814D0D4488E -:10350000D249213011F065FD0298002C068001D0CF -:10351000278066800020FEBD02270926002C0ED0E1 -:10352000A889A080A87B08E003271426002C06D0D9 -:103530002869E060A88A2082287B2072E4E702984C -:103540000680E7E770B50E4600211C461980154637 -:10355000030011F02FFE0723050B1711231D230075 -:1035600022462946304603F0EFFD70BD224629462B -:10357000304601F078F970BD22462946304604F005 -:103580002AFB70BD22462946304602F0F9FF70BD85 -:10359000224629463046FFF7A0FF70BD9720AB4971 -:1035A000800011F016FD032070BD10B5A94C2178E4 -:1035B000002901D0082010BDFFF74EFD012020702A -:1035C000002010BD0146A04810B54C380AF0C3F9E0 -:1035D000A1494879401CC0B24871012803D19D48D7 -:1035E0004078FFF7C3FA10BDF8B50546072040073D -:1035F0000F460A18012189038A4209D2002D02D000 -:103600002818884204D2E81C80088000A84201D013 -:103610001020F8BD90488178002911D03988009198 -:103620004178602251430C18083420783B4600074B -:10363000000F00222146FFF785FF060004D015E0A9 -:10364000002038800520F8BD002D13D0398800985F -:10365000814201D90C260DE020783B460007000F7F -:103660002A462146FFF76EFF060005D00C2E01D03A -:10367000002038803046F8BD774D6878401CC0B2D5 -:1036800068700B2801D100206870A878401EA870CF -:1036900061784807400F022810D00128EAD16A4813 -:1036A00061680AF058F92879401CC0B228710128D5 -:1036B000E0D168484078FFF759FADBE7C806D9D46B -:1036C0006068FFF77FFFD5E770B50446634816468C -:1036D0000D46814204D15E485C49C53011F079FC49 -:1036E000012E05D05A485949D53011F072FC70BDF1 -:1036F00058480121C1706620207000202072A581E9 -:10370000A17370BD70B516460D46040001D1FFF7D8 -:103710001AFE662101700121017229680161A988E0 -:1037200081820673002C01D1FFF729FE70BD0721AD -:103730004907012241189203914201D3102070479A -:103740000721017000207047454A10B590420ED302 -:1037500001239B04C21A434B9A4208D3424B98421E -:1037600005D2072252078A18DB139A4201D3102090 -:1037700010BD0DF08AFD10BD394B10B599420ED326 -:1037800001239B04374CCB1AA34208D3364B9942F2 -:1037900005D2E3020124D318A403A34201D31020CD -:1037A00010BD022803D0102801D0092010BD0DF053 -:1037B00092FD0028FAD0052010BD70B5284B984224 -:1037C00012D301239B04274CC31AA3420CD3264BCC -:1037D000984209D2E4020D19DB139D4204D2002A5B -:1037E00004D014199C4201D3102070BD0DF099FD36 -:1037F0000028FAD0072070BD10B504460720400706 -:1038000001212018890394B0884202D3102014B0FB -:1038100010BD01F06AFD002801D01120F7E70F204C -:1038200008A9087369460BA80AF0C2F80028EED16F -:103830006846007A207068464089608068468089C2 -:10384000A0800020E3E70000B01100201C3400003D -:1038500015020000340000208C0C0020FFFF000047 -:10386000006001000000FC1F0040002010B594B073 -:10387000044601F03AFD002801D01120C7E7002CD2 -:1038800001D00720C3E7392168460170002181700B -:1038900009A90AF08DF8002803D02B492B4811F014 -:1038A00098FB0020B3E770B5294C0846E178002961 -:1038B00013D000280FD007225207012385189B033D -:1038C0009D4203D20568AA189A4201D3102070BD08 -:1038D0008288002A03D0012903D0082070BD092066 -:1038E00070BD04F0E1FA0028FAD10021E17070BD4A -:1038F000184A10B5914208D301229204164B8A1A35 -:103900009A4202D3154A914201D3102010BD0246BB -:10391000203A1F2A02D801F01FFC10BD072010BD5D -:1039200007225207012310B58A189B039A4201D33C -:10393000102010BD0246203A1F2A02D801F068FC70 -:1039400010BD072010BD00001C34000079030000EA -:1039500034000020006001000000FC1F0040002037 -:103960008107C90E002808DA0007000F0838800810 -:103970002C4A80008018C06904E080082A4A800030 -:1039800080180068C8400006800F704710B50D20F1 -:10399000FFF7E6FFC4B20420C043FFF7E1FFC0B267 -:1039A000844203D021A11A2011F013FB10BD012184 -:1039B000234A48031060234B00221A60224A5160B8 -:1039C000224A1060224A11601D4980390860704700 -:1039D00001211B4A480310601D4A5160194A002109 -:1039E00011601A490860704710B516490868012827 -:1039F00004D00EA1562011F0ECFA10BD15488068D5 -:103A00000022C0B20A600DF0BBFE10BD10B50D481B -:103A100001680029FCD0FFF7E7FF01200B494003B4 -:103A2000086010BD00ED00E000E400E07372635C2C -:103A3000736F635F68616C5F726E672E6300000076 -:103A400080E100E000D1004000D3004080E200E0CF -:103A500000D0004000D5004030B40121BC48C9026C -:103A60000160CD1005604A030260BA4803681B027A -:103A70001B0A036004680023240A24020460B64879 -:103A80000468240A24020460B44801244460846069 -:103A9000B34C23606360A360B24B19601D601A6071 -:103AA000B14B19601A600121016030BC704710B43D -:103AB0000121A748CC0204600A0202600B060360E1 -:103AC000A64841608160A64900200860486088607F -:103AD000A44804600260036010BC70470121A14843 -:103AE000C9020160C91001607047002805D0012893 -:103AF00005D0022805D19D4870479D4870479D48D4 -:103B0000704710B59CA18B2011F063FA002010BD06 -:103B100070B500219F4CA04DA04A914B002808D0C1 -:103B200001281DD0022822D093A1B32011F051FA10 -:103B300070BD01200004A060A86011601960984B5E -:103B400042109A60974A9060814A0012106096482D -:103B5000016087480160954801609548017070BD1B -:103B600001204004A060A8605160596070BD012030 -:103B70008004A060A8609160996070BDF8B594461B -:103B8000844A854D00240127754E002808D001285D -:103B900036D0022844D078A1E82011F01AFAF8BDF6 -:103BA000891E0902090A01200004906034606860DF -:103BB0007A4A1160012B21D000217D4A7D4B517042 -:103BC00061463D31DC63DF637B4B5C6002249C60BB -:103BD00004241C61744B196074490F60614B891592 -:103BE0001960704B58606048016075487349C16046 -:103BF00086606B49600348601770F8BD0121DCE7FF -:103C000001205C4E40046F4F012B04D134605060A2 -:103C100068603960F8BD9060346068603960F8BDF4 -:103C20000120524E8004684F012BF4D1EEE7674823 -:103C30004068704770B54A4D28680026554C0128E9 -:103C400006D1A068C00303D501200004A0602E6047 -:103C50006868012809D1A068800306D501204004C6 -:103C6000A0606E6001200FF04CF9A868012809D10E -:103C7000A068400306D501208004A060AE60022049 -:103C80000FF03FF970BD10B549490878002818D0E9 -:103C90000120434AC0039060424A400090602C4A91 -:103CA00000121060404A00201060314A10603F4A04 -:103CB000106008704A78002A02D048700FF021F98D -:103CC00010BD0320FAE70120414900060860704753 -:103CD0000120244900060860704701203C49400546 -:103CE0000860704701201F4940050860704731494E -:103CF0000020C86388151B4908607047410A354A8F -:103D0000C005C00D5043801C5143400A081870473D -:103D100010B4314C430B63431B0C5C020C602D4C04 -:103D20006343C31A2D485C0258432A4B400D43435A -:103D3000E31A0124DB0324041B191B1613700A6801 -:103D40001018086010BC704710B50FF0B2F910BD24 -:103D500080E100E008E400E018E400E000B000408A -:103D600040B1004080E200E000E100E048B10040E6 -:103D70004081004044B100407372635C72656D5FC6 -:103D800068616C5F6576656E745F74696D65722ECF -:103D90006300000000B3004040B3004040B5004065 -:103DA00000F5014000830040408500400082004053 -:103DB00050000020C08F004000850040008000407F -:103DC00080F5014044B5004048B5004000B50040D2 -:103DD00000E200E0093D0000378600006F0C0100A2 -:103DE0000E4A12680C498A420AD118470B4A1268D7 -:103DF000094B9A4204D101B50DF0DDFD03BC8E469E -:103E0000074909680958084706480749054A064B03 -:103E10007047000000000000BEBAFECA1C0100206E -:103E200004000020901D0020901D002010B5FA4CC9 -:103E300094B02168087A002836D017206A4610709E -:103E400000A806220931023010F026FF09A96846B1 -:103E500009F0AEFD112825D02168C03189790629E5 -:103E600020D007291ED008291CD004291AD00929DE -:103E700018D00A2916D00B2914D0052912D00028F1 -:103E800003D0E6A1F32011F0A4F82168B82040582F -:103E900006221C30093110F0FFFE2068017A8030C4 -:103EA000806BC17614B010BD3220C7E770B5DA4D13 -:103EB000044629680300C03111F07CF90C077C0B23 -:103EC0001A212E3B48515C677080FF20D3A1093036 -:103ED0006EE0887901286DD009286BD0052869D05B -:103EE0000A2867D00B2865D0FF20CCA10E305FE0F8 -:103EF000887901285ED0FF20C8A1153058E0887964 -:103F0000062857D0072855D0082853D0052851D067 -:103F1000FF20C2A118304BE0887909284AD00A282E -:103F200048D00B2846D0042844D0FF20BBA11E3027 -:103F30003EE0887903283DD007283BD0082839D0B7 -:103F4000092837D0FF20B5A1243031E08879062830 -:103F500030D00A282ED0FF20B0A12A3028E088795E -:103F6000062827D0072825D00B2823D0FF20ABA177 -:103F70002E301DE0887906281CD00A281AD00B287C -:103F800018D0FF20A5A1333012E08879092811D07C -:103F90000A280FD0FF20A1A1383009E0887909282C -:103FA00008D00A2806D0082804D0FF209BA13C3066 -:103FB00011F00FF82868C030847170BDFF2097A100 -:103FC0004130F5E79449C9220968525CD206920F44 -:103FD00005D1A0318A8B824201D1887F70470020B1 -:103FE000704770B504461120207000218A4D617021 -:103FF0002968C031897A002908D003290ED0042904 -:1040000010D0FF2085A16A3010F0E3FF207800096E -:10401000012802D92868807D607070BD0007000FFC -:10402000203002E00007000F30302070EEE730B59E -:1040300003887E497E4C8B4202D09A1FA2421ED238 -:1040400042888A4202D0951FA54218D2934216D8C0 -:1040500083887D24E400A34211D8C088884205D01B -:10406000734D04460A3C2D1FAC4208D2884208D04A -:104070008A4206D05B1C5A43C000824201DD072001 -:1040800030BD002030BDFFB50022099B002802D0C2 -:10409000994205DC5CE0002902D1002004B0F0BDAB -:1040A0000920FBE7845C002C12D085186F780D2F57 -:1040B0004CD010DC3B0011F07DF80A421B2A2A305C -:1040C0003032323A3A42835C002B3FD1521CD2B29A -:1040D0008A42F8DBE1E7122F31D004DC0E2F35D015 -:1040E0000F2F2CD132E0142F11D0152F27D116E02D -:1040F000022CD5D1AB78039C072B237001D25B0730 -:1041000001D40A20CAE7029B01241B7814E0E34390 -:10411000DB0708E0012C08D011E00620BEE70F25E0 -:1041200023072D075B19002BF4D03046B6E7029B1E -:104130001B789C070AD402242343029C2370835CCF -:10414000521C9A18D2B28A4204DDA9E70B20A5E7D7 -:10415000192676028A42A5DB9FE705E00278401C1B -:10416000002A01D0002070470A46491E89B2002A61 -:10417000F4D10120704730B5274D0021286887B061 -:10418000C943A030818300248477214606200DF0A6 -:10419000D1FD002105200DF0CDFD002102200DF004 -:1041A000C9FD0120FFF782FE28686946C030C4714E -:1041B00004720120087068460BF007FC07B030BDA0 -:1041C00030B5154C95B02268C0329279042A0CD0D3 -:1041D000052A0AD028236A4613705080132906D076 -:1041E0003B2904D0072015B030BD0820FBE7117132 -:1041F000104609A909F0DCFB05000BD12068C0308E -:104200008179062916D0082914D0072912D0052053 -:10421000FFF74CFE2846E6E7540000207372635C0B -:104220006761705F636F72652E630000FFFF0000BF -:104230007B0C00000420EBE730B587B0040003D00E -:10424000002107200DF076FDFE4D012128686A4609 -:1042500001720421117003210C300DF06BFA2968F2 -:104260004022887B8006800E1043887368460BF0DE -:10427000ACFB00280DD12968098A00299ED0002CAA -:104280009CD08B000122002107200DF0AEFC0728F6 -:1042900001D0032092E7002090E770B50025064684 -:1042A000002803D0002107200DF044FDE54C01213A -:1042B00020680172062109300DF03CFA2068817BEC -:1042C0008906890E8173FFF7B1FD2068008A0028F6 -:1042D0000AD0002E08D083000122002107200DF013 -:1042E00084FC072802D00325284670BD0025FBE783 -:1042F000F0B59BB0040004D11920D349400110F05F -:1043000068FE72202070616800260A780825521F16 -:104310000127CC48130010F04DFF0F0976D9FD7628 -:1043200078FCFBB576767676FAF97600C5480068B3 -:10433000C0308079032803D0C349C44810F049FE37 -:10434000002108460DF0F6FC002107200DF0F2FCDC -:104350006078BC4A28436070106810250146C0315F -:104360004B7A2B434B7263689D783C2D48D00246B4 -:104370009D88A032977763688030DB890B80636803 -:104380001B8A4B8063685B8A8B8095836168826B34 -:10439000C97911756168806B08311530062210F0FB -:1043A0007BFC0620FFF782FDA648CA210068FB229D -:1043B0000E54017E11400176B82109588A7A92087C -:1043C00092008A724682284602F0ACFE002804D091 -:1043D0009E489D491A3010F0FCFD284602F0BCF8BA -:1043E000002804D0994898491D3010F0F2FD284665 -:1043F00003F008FD002806D069209349C0003EE183 -:104400000120FFF753FD1BB0F0BD064600688F8802 -:10441000C0308079062812D0072810D008280ED086 -:1044200004280CD009280AD00A2808D00B2806D066 -:10443000052804D0D5208449800010F0CAFD60789A -:10444000284360703068C030417A294341728079D6 -:10445000092811D00A280FD00B280DD005280BD021 -:10446000FFF789FE384602F062FE384602F07AF81D -:10447000384603F0FDFCC6E7FFF77DFE0220FFF79C -:1044800015FDEFE70068C0308079062812D00728B4 -:1044900010D008280ED004280CD009280AD00A28E9 -:1044A00008D00B2806D0052804D06F206649C0002C -:1044B00010F08FFD6068807902F0F1FE0028A2D034 -:1044C0006178294361706168C8809CE7074600688D -:1044D000C0308079062812D0072810D008280ED0C6 -:1044E00004280CD009280AD00A2808D00B2806D0A6 -:1044F000052804D055485449623010F06AFD6078B0 -:10450000284360706068C188386804E032E197E150 -:1045100084E084E00FE0C030018061680989418057 -:10452000616849898180002102200DF003FC386810 -:10453000C030C67167E706460068C030807906283B -:1045400019D0072817D0082815D0042893D0092897 -:1045500011D00A280FD00B280DD005288BD03B484E -:104560003949793010F035FD3068C0308079042841 -:10457000ABD00528A9D03068807C40063AD5606869 -:1045800002210C30FFF7E9FD002833D060680821D4 -:10459000001DFFF7E2FD00282CD03168B8204058FC -:1045A000807A800708D1CA20405C002808D1488A58 -:1045B000C20505D5C00703D14A8A402082434A82FA -:1045C0004A8A802082434A822D2268460270BC209B -:1045D000425A684642801022973101A810F05CFBD5 -:1045E00009A9684609F0E4F90028A3D0174816493C -:1045F000A03044E062683068AC2192890A52616858 -:104600000822091DAE3010F047FB10A80574306871 -:10461000AE30159014A80BF0D8F9F4E68F71064669 -:104620000068C030807906281FD007281DD00828D0 -:104630001BD00428F1D0092817D00A2815D00B2840 -:1046400013D005E0540000201C42000029030000A4 -:104650000528E2D0F949FA4810F0BBFC3068C030B8 -:1046600080790428D9D00528D7D0606881790029BD -:1046700002D08078002805D0F148F0496C3010F065 -:10468000A8FCC0E66078B8212843607030680958FB -:10469000897A8907890F012952D1817C09064FD473 -:1046A000017E490701D5042100E00321C030817259 -:1046B0002B206946087009A9684609F079F9002895 -:1046C00004D0DF48DD49213010F083FC69463068B2 -:1046D000098D81820E2210A90A74DA49B822159137 -:1046E000125808324A61024660324A6092790A7072 -:1046F000024614320A61521D8A601032CA60133AAF -:104700008A619632CA61921C0A62473A4A62103242 -:104710008A621032CA62473ACA63521E0A64921F02 -:1047200050304A64886414A80CF038FB022815D075 -:10473000002813D0C248C1494A3010F04AFC0DE0AD -:10474000817C4906017E490701D5042100E003214F -:10475000C0308172002106200DF0ECFA3068418AE9 -:104760000A0602D440229143418289B280229143B9 -:10477000418248E6B4480068C0308079032804D0FC -:10478000AF48AE49783010F024FC002108460DF007 -:10479000D1FA002107200DF0CDFA6078AA4A28430B -:1047A0006070106810250146C0314B7A2B434B7264 -:1047B00063689D783C2D00D122E602469D88A03298 -:1047C000977763688030DB890B8063681B8A4B8036 -:1047D00063685B8A8B8095836168826BC979117588 -:1047E0006168806B08311530062210F055FA0620FA -:1047F000FFF75CFB9448CA210068FB220E54017E3F -:10480000114001764682284602F08CFC002804D034 -:104810008B488A49923010F0DCFB284601F09CFE60 -:10482000002804D086488549953010F0D2FB2846F0 -:1048300003F0E8FA00289CD08148804997301EE7B1 -:10484000607828436070DEE500290BD088807E48C0 -:104850000068C0300288CA8002880A8142884A8182 -:10486000808888817047F7B5064600780C46002797 -:10487000010982B03D46012974D073480068009058 -:10488000C03002296FD0072904D00A296CD06B49A7 -:104890006E48E3E171680A78521F130010F08AFC39 -:1048A0000F09A551A5A52F585847A5A5A5A5656F22 -:1048B000A5008A783C2A1BD010271625002C7DD015 -:1048C0008888A0807068A21DC08920827068C08915 -:1048D000E0817068008A60827068408AA082716896 -:1048E00008460831C07901F09FFB0020607375E035 -:1048F00019270725002CE2D00021A17171E01127B2 -:104900000725002CDBD089880091A1807168F722EF -:104910008979A171417A11404172009802F008FC36 -:10492000009801F023FE009803F0B0FAC1E10127DE -:104930000925002CC3D08888A080706880792072F7 -:10494000B7E1888812270E252146FFF77DFFB0E1E9 -:1049500018270825002CB2D08888A080A01DFFF75A -:1049600040FBA6E145E0A1E15DE01A270725002C08 -:10497000A5D04888A08070680079A07199E18A78F4 -:104980003C2AB5D010271625002C98D08888A08006 -:104990007068C08920827068C089E0817068008A70 -:1049A00060827068408AA0827168607B497D40089F -:1049B0004000C907C90F0843607300E036E1716821 -:1049C000C007497DC00F49084900084360737168FA -:1049D000A21D08460831C07901F026FB1A4800687C -:1049E000C030417AEF22114046E1532013490001C3 -:1049F00034E1307A012803D014481049C5382DE13C -:104A000012270E2570892146FFF71EFF002C91D03A -:104A100070784007400F032888D10B480068C030E9 -:104A2000417AFB22DFE708490968A031002C01D058 -:104A30008A8BA280327A921E0AE000001C4200009B -:104A4000ED030000AC120020540000200C06000012 -:104A5000130010F0AFFB073D4853EDEE6F05ED007E -:104A600013270C25002C90D0009900224A82F1686F -:104A700089788907890F0129217A26D049084900B8 -:104A80002172FD231940F3689B785B07DB0F5B0005 -:104A900019432172E323E2801940F3681B785B0716 -:104AA000DB0E19432172DF231940F3685B78DB07C3 -:104AB0009B0E194321726272F1680122C978A172BA -:104AC000017A1143F7221140ADE001231943D7E7E2 -:104AD00015270C25002C9AD0F06806220068A11D2D -:104AE0000EF07CFFE5E016270725002C8FD0317BE8 -:104AF000A171017A08221BE00172DAE01427122565 -:104B0000002C84D00098A21D8030806B01461531A6 -:104B1000007D01F089FAB089E081207C0121084301 -:104B2000F92108402074FE480068C030017A022252 -:104B30001143E1E717273825002C77D03221A01D3B -:104B400010F007F90020A071207A03210843207299 -:104B5000FB210840F24909680A7E5207D20F9200F1 -:104B600010432072B8204058807A800757D0A07A2E -:104B70008A7C4008D2074000D20F1043FD2210402B -:104B8000A0728B7CFB229B07DB0F10409B0018431D -:104B9000A0728B7CF7269B07DB0F3040DB001843AD -:104BA000EF231840A072E07A10408A7CD206D20F20 -:104BB00092001043E0728A7C3040D206D20FD200BD -:104BC0001043E072888AA0812046102267310E309F -:104BD00010F062F8D249A07F0968C0078A7DC00F33 -:104BE00052001043A0770A7E400852074000D20FBF -:104BF0001043A077084640304DC820344DC4303CA7 -:104C00003F20405C22463032393101F00DFAC44871 -:104C100000688030806B817A890889008172C04881 -:104C20000068C030017AFB22114065E737E000E000 -:104C300038E0327B022A14D017273825002C2ED0DA -:104C4000017AFB2319400172012A17D0032A17D0D9 -:104C5000042A18D0052A16D0B249B34810F0B9F981 -:104C600027E019270725002C19D0898BA180012165 -:104C7000A171417A4908490041721AE0012000E01F -:104C80000220A07106E0707B0007000F8030A07149 -:104C9000052A02D00020E0710BE00120FBE7049818 -:104CA00005800CE0A0489F490A30D7E7317A0029F7 -:104CB00008D00498002C058001D027806580002052 -:104CC00005B0F0BD19270725002CE8D00021C94305 -:104CD000A1800021A171417AFD2284E610B5904C9B -:104CE00094B02068C0308079022809D0032807D00A -:104CF000052805D0092803D00A2801D00B2837D170 -:104D00001B2108A801730021817369460BA808F0D4 -:104D10004FFE002804D1684640781B2802D00320AB -:104D200014B010BD002108460DF004F80021072042 -:104D30000DF000F868468078002819D12068C0304E -:104D40008079801E030010F035FA0A060613081356 -:104D500013130D0F1113012000E00420FFF7A6F834 -:104D60000020DDE70620F9E70720F7E70820F5E750 -:104D70000820D5E770B50025694C002807D0022827 -:104D800017D0072828D033206649400146E0FFF7B6 -:104D9000A5FF00280CD1FEF7D6FA2221017005727A -:104DA000FEF7EDFA2068C030417A022211434172C9 -:104DB00070BDFEF7C8FA122101700121017221684D -:104DC000BC22525A4281C031CD71FEF7D8FA206818 -:104DD000C030417A0422E9E72168C620405C0228FD -:104DE00009D0032807D0092805D00A2803D00B28AA -:104DF00001D00528DCD1887B8109012911D08009E7 -:104E000004D0494847496E3010F0E3F80020FFF71E -:104E100044FA0028CCD044484249723010F0D9F806 -:104E200070BD0020FFF708FAF3E770B50D460400E7 -:104E300004D1CD203B49C00010F0CBF820780128E8 -:104E400005D0394837499D3010F0C3F870BDA188AE -:104E50003648334E814209D1E288824206D1306819 -:104E60001321A030808BFFF7ABF970BD814202D1D6 -:104E7000E08800280AD012202870687808210843AA -:104E8000687007CC083507C5002106E000227823AA -:104E9000114602200CF0A9FE02213068C030C17119 -:104EA00070BD1F480068C030807A704738B51C4C10 -:104EB00005460278206813000146C03110F07AF9E7 -:104EC00009A8060909A21945728AA800FEF7AEFFD3 -:104ED00038BD8879062806D0092804D0124811491F -:104EE000B53010F076F820680422017E1143017677 -:104EF00088E0A9880029EBD0A030808B0B4988423C -:104F0000E6D0A868002804D107480649C53010F04B -:104F100060F8A8680A38A8600090AB88206807E0AD -:104F2000540000201C420000E9050000FFFF0000C3 -:104F3000A030808B0622042102F028F80028C7D078 -:104F4000F849F94810F045F838BD287902288879E1 -:104F50000DD00428F8D00528F6D0284601F075F8C1 -:104F600020681321A030808BFFF72AF938BD07286D -:104F700006D00A2804D0EC48EA490A3010F029F893 -:104F8000284601F062F820680122C030417A1143BE -:104F900041728079072803D00920FEF787FF38BDCA -:104FA0000620FAE7887906280AD0042808D00928BC -:104FB00006D0052804D0DC48DA49313010F009F871 -:104FC0000ECDDA480361C2608160A2210170FEF754 -:104FD000EBF938BD8879062818D0072816D009289B -:104FE0000DD00A280BD0D048CE4944300FF0F1FF45 -:104FF0002068C0308079062808D0072806D00B200A -:10500000FEF754FF284601F020F838BD0820F7E7E6 -:10501000C548C449583095E7FFB593B001246846A8 -:1050200003218470C9021D4601800AF0A6F90022FE -:105030006946012003F0ABF906460AF0A2F9002EFA -:105040005CD16846152184704902018000271C212B -:1050500001A808970FF07FFE01200146103108A833 -:1050600001700020014608A841708178F9200140B4 -:10507000891C214308A881706846017902263143C2 -:10508000017114998185C7851F21018608A80A909E -:1050900013980D90684609900AF06FF90EAA09A9B5 -:1050A00001A802F036FF07460AF06BF9002F02D084 -:1050B000384617B0F0BD9E4F68463968008F48806B -:1050C000684684709B49018008A88078F9210840CF -:1050D000801C4108490008A88170684686850686BC -:1050E00015A80D900AF049F90EAA09A901A802F025 -:1050F00010FF06460AF045F9002E01D03046D8E7E9 -:1051000068463968008F88808A4968468470C91C5F -:105110000180298810A8018069884180A988818040 -:10512000E988C180082168468185018610A80D9014 -:105130000AF023F90EAA09A901A802F0EAFE044622 -:105140000AF01FF9002C01D02046B2E76846396802 -:10515000008FC8800020ACE7F0B5774D95B00C46C5 -:10516000A9423FD30126B604744FA11BB94239D3DB -:1051700073498C4236D2202806D0212827D02228F5 -:1051800042D0072015B0F0BD3C216846017021884F -:1051900041806188818009A908F00AFC0028F1D1CA -:1051A00008A98979002903D002290ED00320E9E754 -:1051B0006168A942E6D38A1BBA42E3D3604A9142AE -:1051C000E0D26A46128D0A80DCE75E48DAE72068A2 -:1051D000574C002813D00721490701224118920398 -:1051E000914201D31020CDE706210EF0E1FB2168AA -:1051F000A82250500120A03188750020C2E7206805 -:105200000021A0308175F8E7204600F02AFFB9E7B9 -:10521000494A10B5914208D301229204474B8A1A99 -:105220009A4202D3464A914201D3102010BD202851 -:1052300005D0212803D0222803D0072010BD062046 -:1052400010BD084600F051FF10BD70B50446374848 -:10525000CC21AC300FF07FFD3448354EAC3000210E -:105260003060C943A0308183002585770120FEF797 -:105270001DFE3068C7210D54E121C57389000182EC -:10528000B6210D54014609310830FDF779FF316828 -:10529000084629311930FDF7A9FF002C24D03068C9 -:1052A00080308463FEF7C2FD1E20E081607A8F218A -:1052B0000840303060723068014614312161983105 -:1052C0006162933921601031616025721339A162E6 -:1052D000091FE1628531E163303921631031616377 -:1052E00010310930A163A06470BD11480068C0305E -:1052F0008079042803D0052801D0002070470120C0 -:10530000704770B506460C480C46814208D3012010 -:1053100080040A49201A884202D30948844213D3E0 -:10532000102070BD1C420000B30600004C1200208B -:1053300054000020012A0000006001000000FC1F52 -:105340000040002002300000FFF7CFFF002801D00E -:105350001120E6E7FD48FE4D002E02D0012E46D179 -:105360002FE02278002A0AD00121012A09D0022A3E -:1053700014D0032AD5D1A2799209D2D112E000210A -:1053800003E0A2799209032ACBD128680622017290 -:1053900060308171611C0FF07FFC05E0A2799209F9 -:1053A000012ABED128680172002107200CF0C2FC3E -:1053B00028680622611C09300FF06EFCFEF736FDEE -:1053C00011E02178002912D0012910D0022910D033 -:1053D0000329A6D10120FEF760FF002803D0DD4994 -:1053E000DD480FF0F6FD2868C673002099E7072016 -:1053F00097E70120FEF720FFEFE707214907012289 -:1054000010B541189203914201D3102010BDD0492C -:10541000024609680B7A0931184600F005FE0020A3 -:1054200010BDFFB599B005460020694608710872A5 -:1054300008A9087408751E4614460121C748890446 -:10544000C74AC84B002D06D085420DD36F1A97422C -:105450000AD39D4208D2002C09D0844204D3601A9A -:10546000904201D39C4202D310201DB0F0BD2846CB -:10547000204318D01F270CAB01AA009728461A9981 -:10548000FEF701FE0028F0D10DAB02AA31462046FE -:105490000097FEF7F8FD0028E7D16846007AC107BB -:1054A00003D00A20E1E70720DFE7800705D568463B -:1054B0000079800701D50B20D7E7FFF716FF0028FA -:1054C00001D01120D1E703AF002D0FD01A2069467B -:1054D00008731A9888732946F81C1A9A0FF0DCFB97 -:1054E0000EA903A808F064FA0028BED1002C0ED043 -:1054F000202168460173867332462146F81C0FF05E -:10550000CBFB0EA903A808F053FA0028ADD19049AF -:1055100008A80968007C08700020A6E7F0B50446DA -:105520008E48002795B084426FD301208004211A51 -:105530008B488142F8D38B48844266D22378012B72 -:105540000BD1864960688842EED39904421A844997 -:105550008A42E9D383498842EFD27D490A681546D9 -:10556000C035A879022814D0032812D0052810D0FD -:1055700009280ED00A280CD00B280AD0012803D005 -:10558000002B06D0012B04D0687AC506AD0F06D1DA -:1055900001E00820F6E5850701D4400701D5112078 -:1055A000F0E5012B15D0208A6F4E0546203DB5420F -:1055B0007ED2022B01D0032B01D1A02878D3012B5E -:1055C00007D01078C00704D0608A002870D0B428B3 -:1055D0006ED8002B06D0012B08D0022B04D0032B51 -:1055E00066D110E0002512E0022510E06068012578 -:1055F000007800280BD0012808D0022806D0032804 -:1056000004D05248BEE5032501E066E00127D07BC7 -:1056100001281CD1108A002819D0907B810901290A -:1056200011D0800904D04C484A49E4300FF0D1FC35 -:105630000120FEF732FE00280BD047484549E830EC -:105640000FF0C7FC05E00120FEF7F6FDF3E7FEF7DB -:10565000EDFB207A002806D0012806D0022806D0CB -:10566000032825D105E0002604E0012602E00226F9 -:1056700000E00326002D01D0022D42D1002E40D0A3 -:10568000E068002814D00179002928D008290FD813 -:10569000027B9446082A0BD800290ED02F4A0168B5 -:1056A00091421AD3012292048B1A2D4A934200E0B0 -:1056B00084E012D32B4A91420FD26146002912D0C6 -:1056C00080682649884208D301218904421A244966 -:1056D0008A4202D32349884205D3102052E5027B37 -:1056E000002A6BD0D4E71A4800680078800702D0FF -:1056F0001648401E46E5022D03D1022E5ED0032E31 -:105700005CD0182168460170218A4180218A8180FD -:1057100085710F480068007A002801D0012870D1F7 -:105720006946C8716846077221780930012932D06C -:1057300006210FF00EFB07216846C173067409A904 -:1057400008F036F90028C9D10A210FE00232000022 -:10575000540000201C4200005F08000000600100AF -:105760000000FC1F00400020E13F0000684601707F -:1057700009A908F01DF90028B0D13A20694608703F -:1057800009A9684608F014F90028A7D1002D08D00F -:10579000022D06D04CE061680622491C0FF07CFA0D -:1057A000C9E7002E44D00026374623E00168B00048 -:1057B00009580978002903D0012904D00720E1E421 -:1057C00069468F7002E001216A469170E168062205 -:1057D0000968095800A8491C03300FF05DFA0B2036 -:1057E0006946087009A9684608F0E2F80028E6D181 -:1057F000761CF6B2E0680179B142D7D800266F4630 -:1058000012E050E08068B10041581022B81C0FF03F -:1058100043FA3B206946087009A9684608F0C8F8B1 -:105820000028CCD1761CF6B2E068017BB142E9D801 -:105830001B20694608700120887009A9684608F095 -:10584000B7F80028BBD108A840791B282BD1002D20 -:105850000AD0012D04D0022D08D0032D18D105E067 -:105860000320FEF723FB26E003200FE0FE4800683C -:10587000C030807903000FF09DFC0916061616183B -:1058800016081A1C1600022000E00920FEF70EFB85 -:10589000608A00280FD000228300114610460CF0C9 -:1058A000A4F9002807D003206CE40520EEE70A20C5 -:1058B000ECE70B20EAE7002064E470B586B00C004A -:1058C00006460BD0E94884424AD301208004E849C7 -:1058D000201A884244D3E748844241D2E24D2868E6 -:1058E000C030C179022902D0407A400702D5112088 -:1058F00006B016E5002C04D02046FEF798FB0028E1 -:10590000F6D13046FEF75EFB012803D0022823D0F3 -:10591000D948EDE721001BD1082069468882286814 -:1059200001ABC08805AA002103F019F90028DFD1D6 -:105930006846808A082801D00320D9E76846818814 -:105940008181C188C181018901824189418203A984 -:10595000304601F074FCCBE7002C01D00620C7E7ED -:105960001020C5E770B50C460546FEF72BFB012855 -:1059700003D0022801D0C048D3E421462846FEF7D0 -:105980001FFCCEE400B50146143095B0192801D2B1 -:10599000880707D008461E3004D00A3002D00720FE -:1059A00015B000BDFFF7A1FC002801D01120F7E7DA -:1059B000AD4831220068417068460270817009A9C3 -:1059C00007F0F6FFECE701B582B0022069460880D7 -:1059D000A54802AB00686A468088002102F02AFFD1 -:1059E00069460988022900D003200EBD38B502217E -:1059F0006A4611800721490701224118920391420A -:105A000001D3102038BD9849034609686A468C883E -:105A10000021204603F0A3F8694609880229F1D045 -:105A2000032038BD3EB504460820694608808F48EB -:105A3000844208D3012080048D49201A884202D371 -:105A40008C48844201D310203EBD2046FEF7EFFA79 -:105A50000028F9D12088694688806088C880A0889D -:105A60000881E0884881804801AB00686A46C088A8 -:105A7000002102F0DFFE694609880829E4D00320EE -:105A80003EBD1FB504460820694688817748844298 -:105A900008D3012080047649201A884202D3754831 -:105AA000844202D3102004B010BD6F486B460068DA -:105AB00003AAC088002103F052F80028F3D16946F8 -:105AC0008989082901D00320EDE7694609882180EA -:105AD00069464988618069468988A1806946C98884 -:105AE000E180E0E7FEB50546604817460E46814274 -:105AF00008D3012189045E4A731A934202D35D4B95 -:105B00009E4201D31020FEBD1F2F01D90C20FEBDE7 -:105B1000554C85422AD3681A904227D39D4225D2FC -:105B2000206801A9408802F037FE0028EFD12878CC -:105B300069464871206801A9408802F010FE0028DB -:105B4000E5D169460090087802210843694608704B -:105B50004979090703D0082108436946087020687D -:105B60006946408802F0A5FD0028D0D169460F8122 -:105B700020683346408802AA002102F05BFE694695 -:105B80000989B942C3D00320FEBD38B50C460721B0 -:105B9000012249079203002802D04318934202D2FF -:105BA0006118914201D3102038BD21886A461180C6 -:105BB000002801D000290BD02B49034609684D88E5 -:105BC0000021284602F0CBFF69460988218038BDB4 -:105BD0000C2038BD30B50C46244987B08C4208D320 -:105BE00001218904224A611A914202D321498C423F -:105BF00002D3102007B030BD1B4D2968C0310A7A8E -:105C0000520708D48979491F0B000FF0D3FA050415 -:105C10000604040604000820ECE7FEF7D3F9012887 -:105C200003D0022839D01448E4E720881E2801D286 -:105C30000720DFE72868C030807906282BD00A20AB -:105C4000FEF734F90520694608700879A1788008C4 -:105C5000C9078000C90F084369460871FB21084045 -:105C6000A1788907C90F09E05400002000600100F5 -:105C70000000FC1F004000200230000089000843A3 -:105C8000694608712088C880684609F09EFE002891 -:105C9000B0D00320AEE70720D2E70620AAE7F0B590 -:105CA00087B014460D46FEF78DF9012804D002286E -:105CB00002D0FE4807B0F0BDFD4B18680146C03168 -:105CC0000A7AD20707D08A79042A04D0052A02D09A -:105CD000002D02D052E00820ECE7F64A944208D3A7 -:105CE00001229204F44BA21A9A4202D3F34A94423C -:105CF00001D31020DEE7A278D206520F042A0CD876 -:105D0000E378072B09D3102B07D822799A4204D3C2 -:105D1000102A02D822881E2A01D00720CAE702468C -:105D20008032966BF727F372966B23793373966BF9 -:105D3000737A3B40A778BF06FF0FFF003B437372A7 -:105D4000966B2388F381966BA778B37AFF079B083D -:105D50009B00FF0F3B43B372FB273B40A778966B3A -:105D6000BF07FF0FBF003B43B372926BA478537A17 -:105D7000E406DB08DB00640F234353720B226B46FF -:105D80001A70852D22D008DC002D17D0812D17D058 -:105D9000822D17D0832D08D116E0862D18D0882D9E -:105DA00018D0892D18D08A2D18D00B221A71B6223E -:105DB000125CBF4C002A13D0A83012E00022F5E795 -:105DC0000122F3E70222F1E70322EFE70522EDE7E4 -:105DD0000622EBE70822E9E70922E7E70A22E5E7DE -:105DE00000200290887907280BD0082809D00920C4 -:105DF000FEF75CF8684609F0E8FD002803D00320B0 -:105E000058E70620F4E720680422C030017A4908E8 -:105E100049001143017200204CE770B5A44E0D46B5 -:105E2000316886B0C031097A1446090701D40820C8 -:105E30005EE5FEF7C7F8012803D0022801D09B4891 -:105E400056E5002D12D09B48844208D301208004DF -:105E50009949201A884202D39848844201D31020DD -:105E600046E5012D0BD0022D02D106E0002C01D019 -:105E700007203DE50020029005E0022000E001201F -:105E8000694608710294032069460870684609F063 -:105E90009CFD002801D003202AE53068F722C0309D -:105EA000017A11400172002022E570B594B01446C9 -:105EB0000E46FEF787F8012804D0022802D07B485E -:105EC00014B059E57A4D2868C030007A800701D4B3 -:105ED0000820F5E7002C01D00720F1E7FFF705FACD -:105EE000002801D01120EBE7002E1DD02D2168469F -:105EF00001702C68BC20015B684641801022B11CF7 -:105F000001A80EF0C9FE207EFB210840B17CC90724 -:105F1000490F08432076B07CFF214008A075608AB5 -:105F200082310843608207E02E21684601702868AC -:105F3000A030818B6846418009A9684607F038FD8A -:105F40002968FD23C0310A7A1A400A72B8E710B5F1 -:105F50000C46FEF737F8012803D0022801D0534839 -:105F600010BD5448844208D3012080045249201AAD -:105F7000884202D35148844201D3102010BD2046EC -:105F8000FEF72FF8002010BD10B594B00446FEF7C0 -:105F900019F8012804D0022802D0444814B010BDDA -:105FA00043480068C0308179042910D005290ED0FB -:105FB0003820694608704C8001200871487109A991 -:105FC000684607F0F5FC0028E8D00B20E6E7002043 -:105FD000E4E710B594B00446FDF7F4FF012803D0C0 -:105FE000022801D03148D9E731480068C0308179B2 -:105FF00004290DD005290BD03820694608704C8043 -:1060000000200871487109A9684607F0D1FCC5E76E -:106010000020C3E726480068C0308079062801D3F5 -:10602000012070470020704708B51346002806D0AD -:1060300023A00068009048796A468009105C1870B7 -:106040000622581C0EF028FE08BD10B50446FDF7C8 -:106050007AF9A22101700ECC08300EC0FDF78FF93D -:1060600010BD70B5124C054601682068002913D098 -:10607000104A914208D3012292040F4B8A1A9A4285 -:1060800002D30E4A914201D3102075E410227730DA -:106090000EF002FE206801218030806B01722068C2 -:1060A000A9880182C17B012919D10BE002300000CF -:1060B00054000020006001000000FC1F0040002090 -:1060C0000302FF01807B800901280AD00120FEF72E -:1060D000E4F8002803D01A491A480EF07AFF00208D -:1060E0004AE40120FEF7A8F8F3E770B5054600681A -:1060F000154C00281ED007214907401801218903AB -:10610000884201D3102037E42068B8210958097A61 -:10611000012909D00146773129300AF08EFF206825 -:1061200001218030806B017221681022286877314C -:106130000EF0B2FD2068008AA88000201CE4000058 -:106140001C420000FD02000054000020FFB581B099 -:1061500001980E46C078174610360E37022809D02F -:10616000032840D005287DD0F2A1F7480EF031FF7A -:1061700005B0F0BDCC890A2060430E301880312371 -:106180000A98002A0380F3D0486800889080002095 -:10619000D0801081097B9481891FCDB21AE03088AC -:1061A0007168388048780A7800021043F880C8780F -:1061B0008A78000210433881BA1C091D28460BF06A -:1061C0008AF8002D01D0002802D000203871788094 -:1061D00008360A372046641EA4B20028DFD1019990 -:1061E0000020C870C4E7CC890A2060430E301880B4 -:1061F00032230A98002A0380BAD048680025008814 -:106200009080D5801581087B401FC0B2009094819A -:1062100042E0716832880878FA803A79C3075208F8 -:106220005200DB0F1A43FD231A408307DB0F5B008C -:106230001A43FB231A404307DB0F9B001A43F72343 -:106240001A400307DB0FDB001A43EF231A40C30693 -:10625000DB0F1B011A43DF231A408306DB0F5B01B0 -:106260001A4300E020E0BF231A404306DB0F9B01E6 -:106270001A433A71C00978718A784B781002184332 -:1062800038813A46C91C00980BF025F8002801D047 -:10629000BD703D8008360A372046641EA4B200282F -:1062A000B7D10198C57063E7087BCC89801E85B2A1 -:1062B0002846083060431030188034230A98002A9A -:1062C00003808FD048681746008890800020D080D7 -:1062D000108194811037E000D581C0190CE030881E -:1062E0003880009878602A46716800980EF0D4FCD7 -:1062F000009808360837401900902046641EA4B262 -:106300000028ECD16BE7FFB50546C07881B00C469C -:106310000A9E03000EF04EFF0BA3071733414F6D8B -:106320008F9D9D9DA300207B1746082806D003283B -:1063300004D085487FA154300EF04BFE04990E2006 -:10634000088030200CE0207B1746042804D07E48CB -:1063500078A171300EF03DFE04990E2008803120A6 -:106360003080002F44D060680088B880607AFF30A9 -:106370000130F880E08938810020B88137E0207B47 -:106380001746042804D070486AA18D300EF021FE13 -:1063900004990E2008803220E2E7207B174602286D -:1063A00004D0694863A1A9300EF013FE04990E20B1 -:1063B00008803320D4E7207B1746042804D06248A5 -:1063C0005CA1C4300EF005FE049810210180342039 -:1063D0003080002F0CD060680088B880607AFF3071 -:1063E0000130F880E08938810020B881F881E870B8 -:1063F000BEE6207B1746052806D0062804D0524862 -:106400004CA1E1300EF0E5FD049812210180352009 -:106410003080002FECD060680088B880607AFF3050 -:106420000130F880E0893881E089B8810020388225 -:10643000A988F981DBE7207B1746072804D042486A -:106440003CA1F8300EF0C5FD04990E2008803620DE -:1064500086E700962846049B00F02DFD88E635A1CE -:106460003A480EF0B6FD83E670B5054600780C4656 -:10647000082603000EF09EFE124C3434241C380A09 -:106480000A0A0A0A0A0A0A0A0A0A0A4C687800284A -:1064900004D02E4827A12C300EF09BFD002C03D1F8 -:1064A0001F2024A1400108E060783043607020E0A4 -:1064B000002CF9D17D201FA1C0000EF08AFDF3E76A -:1064C000002904D03F201BA100010EF082FDFCF743 -:1064D0003AFF0446407830436070FCF750FF08E014 -:1064E0001A4814A1473002E0184812A14C300EF0AF -:1064F00070FD002C0AD06078000707D5932020702B -:106500002046582229460830FAF75EFE002070BD6A -:106510000E4808A15030EAE710B500200C4C0D4998 -:106520000346C2008C525218401C0006D370000E65 -:10653000F7D010BD7372635C67617474635F636FDF -:1065400072652E63000000005A020000B3030000D1 -:10655000FFFF000058000020FE49088001208870DD -:1065600000207047FB4900208870704710B500215B -:10657000F848C94301800021C17007F053FAD8E7F9 -:10658000F7B584B0054600276846078187806868AC -:106590000C46008800F0ECFB0646287A032805D05C -:1065A000002E03D1EC49ED480EF013FD297A204668 -:1065B000C91E123000900B000EF0FCFD0FF2F1F03E -:1065C0003D09AA465C6D34B3CDF38B8BF000F078B7 -:1065D000012803D0E049AD200EF0FBFCA8896946F4 -:1065E000C0000E30888030200881002C22D06868DE -:1065F0000188A180E7802781A989A18100200DE081 -:10660000C100B27909190A74B288CA81820052198C -:10661000D3894B82128A401C8A8280B2A18981422E -:10662000EED8D7E002A8009001AB224629463046BA -:1066300000F0CCFBF1E002A8009001AB2246294615 -:10664000304600F005FCE8E0F07806281AD0FF207C -:10665000C149223014E068680188A180E780278161 -:10666000A989A181B188E181E9892182EA89296921 -:1066700000982BE0F078062804D0FF20B6493C3083 -:106680000EF0A7FCE8896946123088803520088121 -:10669000002CE0D1C1E0F078072804D0FF20AE49FB -:1066A00056300EF096FCA88969460E308880362058 -:1066B0000881002CBED068680188A180E78027810E -:1066C000A989A1812046AA890E3029690EF0E4FA31 -:1066D00080E0E8896946123080B2382288800A81D9 -:1066E000002C79D068680188A180E7802781A9897A -:1066F000A181287A102809D00221A173E989218279 -:10670000EA89296900980EF0C7FA86E00121F4E7CA -:1067100002A8009001AB224629463046FFF716FD3D -:106720007BE0F078082803D08B498D480EF051FCAF -:1067300014206946888037200881002C6DD0686855 -:106740000188A180E7802781A989A18167822782AA -:106750000120A0733EE0F078092804D080487E49EB -:1067600018300EF036FC288A6946143088803720AD -:106770000881002C51D068680188A180E78004213D -:106780002781A173A989A181E9892182298A61824E -:1067900020462A8A1430696998E702E038E01CE054 -:1067A00024E0F0780A2804D06D486B4933300EF0AD -:1067B00010FC14206946888037200881002C2CD0DA -:1067C00068680188A180E78027810521A173A781DE -:1067D00027826782F77020E017E002A8009001ABE3 -:1067E000224629463046FFF78EFD16E00D20694609 -:1067F000392288800A81002C07D00120E08055488A -:106800000188A1802781277307E00699088010E09E -:106810008F205149C0000EF0DCFB68460699808845 -:106820000880002C05D06846008920806846808852 -:106830006080002007B0F0BDF7B594B015460F4654 -:10684000149800F0A0FA04000AD0032000F088FB9E -:10685000022802D2E078002804D0112017B0F0BD41 -:106860004048FBE71720694601260883002D0FD01A -:106870000321684601711021018210A8024605908B -:1068800004A928460AF04DFD00280DD00720E5E7B1 -:1068900008216846017100210781C9434181052112 -:1068A0008673C90281810CE0A878A0712888A08035 -:1068B000684605218673C902818100210781C94389 -:1068C000418109AA023206A901A807F0E4F80028CC -:1068D00002D000F06BFAC1E707A800906846038B6E -:1068E00004220321149800F051FB0028B6D1E67071 -:1068F000B4E770B592B00D0006460ED000F043FA32 -:1069000004000CD0032000F02BFB022802D2E07818 -:10691000002806D0112012B070BD1020FBE71148EE -:10692000F9E7172168468180042101722988818155 -:106930006988C181012181740B4901820AAA02324E -:1069400001A902A807F0A7F800280FD000F02EFA3E -:10695000E1E7000058000020346500003C0400001E -:1069600063020000023000000228000008A8009026 -:106970006846838804220321304600F007FB002884 -:10698000C9D10221E170C6E770B592B00D0006468C -:106990000DD000F0F8F904000BD0032000F0E0FA6D -:1069A000022802D2E078002805D01120B3E7102099 -:1069B000B1E7FA48AFE717216846818004210172E8 -:1069C000298881816988C18101218174F44901820A -:1069D0000AAA023201A902A807F05DF8002802D035 -:1069E00000F0E4F997E708A800906846838804223D -:1069F0000321304600F0CAFA00288CD10321E1704F -:106A000089E770B592B00D0006460DD000F0BBF9D5 -:106A100004000BD0032000F0A3FA022802D2E07891 -:106A2000002805D0112076E7102074E7DB4872E7D4 -:106A3000022168460172298881816988C1811721F4 -:106A400081800AAA023201A902A807F024F80028CE -:106A500002D000F0ABF95EE708A800906846838892 -:106A600004220321304600F091FA0028DBD10421F2 -:106A7000E17050E7F0B591B015000E4607460ED014 -:106A800000F081F904000CD0032000F069FA02281C -:106A900002D2E078002806D0112011B0F0BD1020FD -:106AA000FBE7BE48F9E7172168468180042101729F -:106AB000298881816988C181B17881743188018296 -:106AC0000AAA023201A902A806F0E5FF002802D0B6 -:106AD00000F06CF9E1E708A800906846838804227A -:106AE0000321384600F052FA0028D6D10521E17082 -:106AF000D3E7F7B592B015460E46129800F043F969 -:106B000004000AD0032000F02BFA022802D2E07819 -:106B1000002804D0112015B0F0BDA048FBE70627DF -:106B2000002D12D0684607728681C581A580172086 -:106B3000694688800AAA023201A902A806F0ABFFC2 -:106B4000002807D000F032F9E5E705216846017218 -:106B50008681EBE708A80090684683880422032119 -:106B6000129800F013FA0028D5D1E770D3E7F7B5F3 -:106B700092B016460D000ED0129800F004F90400F1 -:106B80000BD0032000F0ECF9022802D2E0780028B4 -:106B900005D01120BFE71020BDE78048BBE70727DD -:106BA0006846077286811721049581800AAA0232FD -:106BB00001A902A806F06FFF002802D000F0F6F845 -:106BC000A9E708A800906846838804220321129848 -:106BD00000F0DCF900289ED1E7709CE7F3B51720A0 -:106BE00091B00C46002915D021780B000EF0E2FA86 -:106BF000062B05051A041C2B1520C01EE28880B246 -:106C0000002A02D0A368002B04D0824204D90C20B1 -:106C100013B0F0BD1020FBE7042905D0A0880028A0 -:106C200011D101E00620F3E7119800F0ACF805005F -:106C30000BD02078092701281AD0022807D0042871 -:106C400024D0052835D00720E2E75448E0E768461D -:106C5000077161880181E1884181A068082603905D -:106C6000304600F07DF9072829D34C48801CCFE737 -:106C70000C216846017161880181E1884181A06829 -:106C800003900EE0E878002811D118E00D21684645 -:106C9000017161880181A1884181E1888181A068B9 -:106CA00004900326304600F05BF90228EAD3112055 -:106CB000AEE70E2168460171217B0172F1E71721D1 -:106CC0006846018309AA023206A901A806F0E3FE7C -:106CD000002802D000F06AF89AE707A800906846FA -:106CE000038B04223146119800F050F900288FD10F -:106CF0002178012907D002298AD0042905D0052945 -:106D000005D0032084E7082102E0EF7080E70A2124 -:106D1000E9707DE730B591B00C46054600F033F8D8 -:106D2000002808D0032000F01BF9022805D31B48D7 -:106D3000801C11B030BD1948FBE70F216846017176 -:106D400004811721018309AA023206A901A806F0CD -:106D5000A2FE002802D000F029F8EAE707A8009078 -:106D60006846038B04220321284600F00FF9E0E770 -:106D70000C49884205D00C490988814201D10A4852 -:106D800070470020704710B5FFF7F2FF002802D0CF -:106D90008178C90700D1002010BD0000023000003A -:106DA00003280000FFFF000058000020002806D044 -:106DB000012805D0052805D0062805D003207047F6 -:106DC00011207047082070475C487047FFB583B0BA -:106DD00003980C9EC0781D4614460F46012803D028 -:106DE0005749D2200EF0F5F8F889C0000E302880FF -:106DF00030203080387B001FC0B20190002C26D09C -:106E000078680088A0800020E0802081F889A08137 -:106E1000002616E0F0000519C01900902A464169C5 -:106E20000E3201980AF057FA002802D00020287488 -:106E3000E8810098761C008A68820098B6B2408A81 -:106E4000A882A089B042E5D803990020C870F1E477 -:106E5000F8B50646C0781F4614460D46042804D0EF -:106E6000FF20374903300EF0B4F8A88906214843C3 -:106E70000E30388033210698002C01801AD06868C3 -:106E80000088A0800020E0802081A989A18103469C -:106E90000CE01946062251434A190919D789CF81B6 -:106EA000977C8F74128A5B1C0A829BB2A1899942DB -:106EB000EFD8F070F8BD70B514460546142204985A -:106EC0001A8037220280002C18D0486800260088DB -:106ED000A080487AFF300130E080C8892081C889CD -:106EE000A0816682E878082809D0092811D00A28EC -:106EF00019D0134913480EF06CF8EE7070BD087B82 -:106F00000C2804D00F480E490C380EF062F801200E -:106F100012E0087B0D2804D00A48094908380EF011 -:106F200058F8042008E0087B0E2804D005480449DE -:106F3000001F0EF04EF80520A073DEE703300000BE -:106F4000346500008203000001460020FA4A02E096 -:106F5000401C082803D24300D35A8B42F8D1704713 -:106F600030B50446F44A0020163A117953790AE004 -:106F70005518AD79A54201D1401CC0B2491CC9B217 -:106F8000102900D100218B42F2D130BDFFB5EA4873 -:106F900081B0163841790A9C491CCDB21E46102D8D -:106FA00000D10025E44816380079A84202D1042017 -:106FB00005B0F0BD0820FFF7D3FF0746072804D926 -:106FC000FF20DEA1A5300EF004F80298082801D1B8 -:106FD000072F17D001982080301D6080002060713D -:106FE0002071E68003982081204606F005FD0028E8 -:106FF0000AD0D148029916384379821D99544571B7 -:107000000020D5E7D248D3E7FF20CCA1B7300DF060 -:10701000E0FF0320CCE7F0B58DB0044600256846BC -:10702000057116468C460620FFF79AFF00281CD1F2 -:1070300021780127C807002801D0132917D96846ED -:1070400087766178C17602218183C58304A8009088 -:1070500070680C23008805220621FFF797FF00289F -:1070600003D0B6A185200DF0B4FF0DB0F0BDB2483D -:1070700016380278002AF8D0427863789A42F4D120 -:10708000012918D0132919D16146062916D1057096 -:10709000002101200AF04EFE6846077170680188E1 -:1070A0006846C1800021C9430181607922790102CB -:1070B000114368461AE06146062908D068460079FF -:1070C0000028D2D0314601A8FDF7AFFECDE705700C -:1070D000002101200AF02EFE6846077160792279AE -:1070E00001021143684601810021C9434181E9E75A -:1070F000914810B50021163801704A1E4280417037 -:107100000171417101200AF015FE10BD10B5FFF7A5 -:10711000EFFF0020884902464300401CCA5208285D -:10712000FAD310BD84491639488000207047DFE744 -:1071300070470EB501216846017086498180C18083 -:107140000021FDF772FE0EBDF7B505460078002759 -:1071500000090C463E46012804D0FF2077A1683084 -:107160000DF037FF287A02280CD0FF2073A17E3063 -:107170000DF02FFF0298002C068001D0278066803A -:107180000020FEBDEA89702710460A3086B2002C26 -:107190000BD068680088A080A8892081E280204602 -:1071A0000A3029690DF078FDE4E702980680E7E7E8 -:1071B000F0B543680246D9799C79090221435C7A8B -:1071C0001E7A25025C88981D3543241F87B0A14292 -:1071D0001DD11B79022B1AD1042D1AD0052D2AD0CE -:1071E000062D1AD0402D12D3061D0F4614462846F0 -:1071F000FFF7AAFE08280AD0112020700220207272 -:10720000A581E7812661607808210843607007B096 -:10721000F0BD001D00F0E1F8F9E7041D0D46FEF792 -:10722000F9FE0028F3D0062168460170019405722A -:1072300008F0CBFBEBE7001DFFF7EDFEE7E710B52D -:107240003D4C8AB0163C2278012A26D012236A4689 -:10725000937363789B1CD373082313820B88538228 -:107260004B8893828B88D382C988118301A90091AE -:107270000C2305220721FFF789FE00280BD10022ED -:10728000F023114601200AF0B0FC01202070607844 -:10729000801C607000200AB010BD1120FBE7F0B523 -:1072A000254C0027163C87B00646A51D1FE06079D7 -:1072B0002179884204D1112020A140010DF089FEDE -:1072C0002079405D042804D0082808D17F1CFFB233 -:1072D00005E0072069460870684608F076FB2079CB -:1072E000401CC0B22071102801D10020207130460E -:1072F000761EF6B20028DAD1384688E710B5044683 -:10730000402801D2072010BDFFF71EFE082802D03A -:107310003120000210BD0021074802E0491C082965 -:1073200003D24A00825A002AF8D1082914D0490011 -:107330004452002010BD0000DA1300207372635C19 -:107340006C326361705F636F72652E6300000000D2 -:1073500004300000FFFF00000420EBE700B54028E8 -:1073600001D2072000BDFFF7EFFD082805D000215E -:107370003B4A40001152084600BD052000BDF0B553 -:107380008BB016460C00074607D0002E05D061884A -:10739000402904D207200BB0F0BD1020FBE7208865 -:1073A000002801D0172801D90C20F4E70846FFF780 -:1073B000CBFD08280FD0258803A82A463146023085 -:1073C0000DF06AFC01A8009062882B46082138461F -:1073D000FFF7DCFDDFE70520DDE7F0B50E460746E9 -:1073E00001468BB014460125304606F0D1FC082832 -:1073F0001DD10020694608850120FFF7B1FD002856 -:1074000002D117206946088503AB02330AAA394620 -:107410003046009407F0CFF800280AD0022819D08F -:10742000032804D0FF200F4902300DF0D2FD28467A -:10743000B1E76846038D002BF9D001A80090606881 -:10744000042200880121FFF7A1FD0028EFD00549A3 -:10745000EC20EAE760780025102108436070E6E739 -:10746000DA1300203C730000002803D08178012942 -:1074700039D101E0102070470188FA4A881A9142F8 -:1074800033D01BDCF84A881A91422ED00BDC00293D -:107490002BD00320C002081A27D0012825D00121B3 -:1074A0000903401A07E001281FD002281DD0FF2839 -:1074B0001BD0FF380138002815D116E0FF22013219 -:1074C000811A904211D008DC01280ED002280CD07D -:1074D000FE280AD0FF2806D107E0012905D002299D -:1074E00003D0032901D0002070470F20704700B55A -:1074F0000A2821D008DC03000DF05CFE0A1C2024C1 -:10750000241A24282224261A102819D008DC0B2833 -:1075100016D00C2814D00D281AD00F2808D111E04D -:1075200011280FD0822807D084280DD085280DD0AF -:10753000032000BD002000BD052000BDCB4800BDDC -:10754000072000BD0F2000BD042000BD062000BDA7 -:107550000C2000BD70B500290BD0CB1FFA3B812455 -:107560001E46CDB2112B1BD2012805D0022806D011 -:1075700009E0002010701DE0FF20043001E0FF2032 -:107580000330814218D033000DF014FE111613138E -:1075900016131616131616161313131316131600B6 -:1075A0000846FF3881381F2803D9FF39FE390229E0 -:1075B00002D81570002070BD1470072070BD00B592 -:1075C00003000DF0F7FD060406040C080A0C002069 -:1075D00000BD112000BD072000BD082000BD032014 -:1075E00000BD00780207120F04D0012A05D0022A3C -:1075F0000AD10EE0000907D108E00009012805D0F2 -:10760000022803D0032801D007207047087000200B -:10761000704706207047002807D0012807D00228AD -:1076200007D0032807D007207047002004E011206E -:1076300002E0212000E0312008700020704738B5BA -:107640000C4605004FD06946FFF7CBFF002822D13A -:107650002088032189028843694609788907090D32 -:10766000084320806946681CFFF7BBFF002812D141 -:107670002188032000038143684600788007800C3E -:1076800001432180A8784007820F2020012A03D0DF -:10769000022A03D0072038BD814300E00143218046 -:1076A00088B20105890F08D0012189038843A97890 -:1076B0000907C90F89030843208080B28104890F1C -:1076C0000AD0A9784004C906C90F400CC903084371 -:1076D00020808004800F02D12088400403D52088B8 -:1076E000402108432080002038BD70B504460020AA -:1076F000088015466068FFF7A2FF002815D1218990 -:10770000A089814210D86168594E8978C90707D08D -:10771000711E884208D831460DF038FB298009E0F7 -:10772000FF21FF31884201D90C2070BDFF30FF30AE -:107730000330288060688078C007A08903D0314674 -:107740000DF024FB03E0FF30FF30033081B22980CD -:1077500020688178474801732068464900882039AD -:107760004885002070BD10B5137804785B08E407E5 -:107770005B00E40F23431370FD2423400478A40727 -:10778000E40F640023431370FB2423400478640750 -:10779000E40FA40023431370F72423400478240744 -:1077A000E40FE40023431370EF2423400478E4063D -:1077B000E40F240123431370DF2423400478A4063C -:1077C000E40F6401234313700078BF244006C00F08 -:1077D0002340800103431370002906D00878C107B5 -:1077E00001D1800701D5012000E00020C001590629 -:1077F000490E0843107010BD30B50A8803239B0260 -:1078000004889A4323059D0F02D1A3049C0F01D045 -:107810009B0F00E001239B021A4303230A801B03F2 -:107820009A4303889804840F02D11805830F01D06E -:10783000800F00E00120000302430A8030BDF3B551 -:1078400091B00D0018D01198002818D012212846A8 -:107850000DF07FFA01A9012007F0A9FE00242646B9 -:10786000374677E0022900000128000003300000BD -:10787000010200000C140020102013B0F0BD0720FE -:10788000FBE76846007C01280BD16846C1890520CA -:10789000C002081A0AD001280AD002280CD00328F6 -:1078A0000CD0042C0ED0052C0FD10DE0012400E0EB -:1078B00002246846868908E0032406E0684604241A -:1078C000878902E0052400E0062468468189119832 -:1078D00081423FD12C74002E3AD00BA800900CAB03 -:1078E00010220021304607F0F4FE002820D168461F -:1078F000808D2A46C0B20CA909F0EDFC002817D1F2 -:10790000AE81002F24D00BA8009006AB13220021DB -:10791000384607F0DEFE00280AD16846808D06A9A9 -:10792000C01E0331C0B22A1D09F0D5FC002801D0C9 -:107930000320A2E76846817E427E08021043E88168 -:10794000062C05D16846007CA8726846C08928814B -:10795000002092E701A807F032FE002891D0FFF73F -:10796000C6FD8AE7002804D0012903D0022904D0EB -:1079700003207047F949C98D02E0F8494031C988B0 -:10798000814201D1002070470720704730B5F34C89 -:107990000025608B91B0C00B2ED1216900292BD01E -:1079A000207B800728D401226846027102720022DF -:1079B0004272228B8281A28A8282049117210183E2 -:1079C00009AA0023023206A901A807F0A7F9002896 -:1079D00003D0FFF7F4FD11B030BD207B0221084336 -:1079E000207307A8009069460B8B20880422012190 -:1079F000FFF7CCFA05460BE0FBF7A5FC84210170EC -:107A00000921017218341ECC0C301EC0FBF7B7FCE4 -:107A10002846E0E710B5D14C034621690020002933 -:107A200009D02146012210311846FBF76BFE0020D9 -:107A30002061A0820120217BF9221140217310BD19 -:107A400070B50C4605461C2120460DF082F9002039 -:107A50002080002D08D0012D04D0C1A1C5480DF013 -:107A6000B8FA70BD062000E00520A07070BD10B50A -:107A700007F07CFB10BDFEB50546007800260C46DD -:107A8000374603000DF096FB0C91070C1D962F4610 -:107A90002F46486C899168680A38FBF793FD89E0A6 -:107AA000002904D0B348AEA11B300DF092FAFBF7C9 -:107AB0004AFC04464078082108436070FBF75FFCED -:107AC00078E0002C04D1BB20A5A180000DF081FA44 -:107AD000284601F0B1FA00286CD0607808210843EC -:107AE0006070022666E0E888694608800190002CF4 -:107AF00004D1A0489AA12F300DF06BFA28780728FE -:107B00001CD10198C00B19D0944800218171A9881B -:107B1000818012E003264DE0002C04D1C52090A105 -:107B200080000DF056FA8D48017B89070BD500695E -:107B3000002802D0E888C00B3CD0022660780821DB -:107B40000843607036E0291D8EC918308EC0283871 -:107B50000188022601222046FBF7B6FD0127EDE74A -:107B6000002C04D183487EA164300DF032FA7B48AA -:107B70000821007B4007C00F460060780843607012 -:107B8000002E17D12879012802D16879002811D058 -:107B90002046FFF73FFF07460CE0002CCED10D201A -:107BA0006FA180010DF015FAC8E772486CA17A3018 -:107BB0000DF00FFA002C0CD06078000709D5002FCB -:107BC00007D1842020702046582229460830F9F732 -:107BD000FBFA3046FEBDF7B5027A88B00C46054682 -:107BE00020460C300490069216300027921E029018 -:107BF0003E460A31594813000DF0DCFA0ADF06E66A -:107C00002AE62AE66A98C6E64288002A02D0522767 -:107C10000726DDE051271E26002C7DD06A684F48DC -:107C20001288A2800122A2718079C0004019C08907 -:107C3000FFF705FE002877D148488179C900491926 -:107C4000C98921818079C0004019408AA083BFE0A2 -:107C5000688A00900698072817D1E889C00B14D0CD -:107C600000985127223086B2002C55D0A88904995B -:107C7000FFF7E5FD002857D168680088A080022042 -:107C8000A071A8892081012041E000985027203070 -:107C900086B2002C40D0A889FFF7D1FD002843D13F -:107CA00068680088A080A889E080287A07280AD020 -:107CB00002202072288AA0830098E0832046696908 -:107CC0002030009A01E00120F3E70CF0E5FF7FE0AF -:107CD000698A00910169002902D0E989C90B22D083 -:107CE0000099512722318EB200218171A9898180AA -:107CF000002C5FD00088A080A8890499FFF79FFD21 -:107D0000002811D10220A071A88920810420A0722E -:107D1000288AE083009801E04CE005E0208469694E -:107D2000009A0298D1E703200BB0F0BD007B40071A -:107D300002D55127222601E050272026002C39D0D9 -:107D40006868502F0088A08016D00220A0712146BC -:107D5000287B0831FFF774FE3AE00000EC130020A6 -:107D60007372635C67617474735F636F72652E63B3 -:107D700000000000CB020000287BA11DFFF760FE81 -:107D80000020FFF747FE23E0A9890089884207D138 -:107D900054270626002C0DD068680088A08017E0C4 -:107DA00053270826002C05D068680088A080A88981 -:107DB000E0800DE00A98068010E055270726002C89 -:107DC000F8D00020A07103E0FD49FE480DF001F954 -:107DD0000A98002C068001D0278066800020A3E747 -:107DE000F94800210172203801814181418081716F -:107DF0008180027BF923520852001A40027301610C -:107E00008182704770B5F04C86B0203C2080002005 -:107E10006080A071A0806946012007F0C8FB102691 -:107E200008E00199088802461207D20FB0431201F8 -:107E300010430880684607F0C2FB0500F1D02069B6 -:107E4000002804D0DF48DE4933300DF0C2F8207B33 -:107E5000800704D5DB48DA4934300DF0BAF8822DBA -:107E600004D02846FFF743FB06B070BD0020FBE7B7 -:107E7000D54810B52038017B012211430173002140 -:107E800041808171818006F045FB10BD10B5CE4C5C -:107E90000020C043203C20800020FFF7BBFD207B5A -:107EA00040084000207310BD70B5C74D0446203D0A -:107EB000287B800704D5C348C1494B300DF089F8B1 -:107EC000287BC00706D12888C049884202D028698B -:107ED000002801D0082070BD002C08D0A0881628EA -:107EE00001D2092070BD20682861A088A882FFF710 -:107EF0004DFD70BD10B50C4607F02DFB002804D0D9 -:107F0000C520AF49C0000DF064F82046FFF7EFFA36 -:107F100010BDF0B5AC4D0446203591B0002008905E -:107F200068820E462882E8812946E8804039088622 -:107F3000694608830885088688838882A2480E904F -:107F4000007A1746012808D0022806D0032804D05A -:107F5000042802D0082011B0F0BD9D48844269D3A6 -:107F600001239B049B49E21A8A4263D39A4A9442B2 -:107F700060D286425ED31001331A0846834259D339 -:107F80001046864256D26068002815D09049884233 -:107F900050D31101421A8F498A424BD38E498842ED -:107FA00048D260892189884203D801225202914235 -:107FB00001D90C20CFE7089010AA0CA93046FFF792 -:107FC00094FB0028C7D106A92069FFF738FB0028D9 -:107FD000C1D1206900280CD060788007002868464D -:107FE000008B03DA8004800F75D002E08004800FDC -:107FF00071D16846008B81061ED58004800F6068B1 -:1080000009D0002818D00721490740180121890309 -:1080100088420FD201E000280ED06D496068884286 -:1080200008D301218904421A6A498A4202D36A4963 -:10803000884201D310208EE705A96069FFF7FFFA97 -:10804000002888D16069002808D06846808A010528 -:10805000890F01293FD18004800F3CD007A9A06976 -:10806000FFF7EDFA0028A5D16846808A800632D451 -:108070006846808B81062ED4A169002906D00105AF -:10808000890F012927D18004800F24D0E0680028BF -:1080900004D0007800281ED01C281CD24A4A611C3B -:1080A000123220460992FFF75EFB0321002089026D -:1080B000884301218902411868460D9101850121FB -:1080C000817446490182404A0FA91532306809F08F -:1080D00028F9002801D007203DE708A8007F3A4989 -:1080E000C01CC2B26A7100201031FF3200900190B2 -:1080F000FF3203460291039003320AA904A807F055 -:10810000C5F9002827D130482038008E0B902E4822 -:108110003389383032690146123902910093019255 -:10812000039010A90A8873890CA9306807F0AEF98A -:1081300001007CD12448E98811308170090AC1709E -:108140000026009631386A79008E3146099B07F087 -:108150001CF9002802D0FFF7CAF9FCE60E98807CD3 -:10816000C00928D068460D99018501218174292113 -:1081700009020182AE81287B61784008C90740006E -:10818000C90F08432873FD2108406178022289073E -:10819000C90F4900084328730B4900922A31881CF3 -:1081A00002910190002303960D4A0AA904A807F042 -:1081B0006DF901003BD1606800283DD0206911E0D5 -:1081C000607D0000220400000C140020FFFF00006E -:1081D000006001000000FC1F004000200328000098 -:1081E0000302000000280DD106A90CA8FFF704FB2C -:1081F0006078800706D46946088B03210903884309 -:1082000069460883012069468874FD4808822089F0 -:10821000FC490CF0BBFD6268089BFB48019200938F -:1082200002900A460396002306A904A800E081E014 -:1082300007F02CF901007DD12078C10601D4800619 -:108240002ED568460684606900280DD105A90CA8C2 -:10825000FFF7D2FA6846818A032080028143012019 -:1082600080020918684681826946888A4821084345 -:108270006946888201208874E14808AA401C088267 -:10828000E1490192891C0220DE4A029100900023FC -:108290000396921C05A904A807F0F8F8010063D121 -:1082A0002078C0072ED068460684A06900280DD12A -:1082B00007A90CA8FFF7A0FA6846818B032080026B -:1082C0008143012080020918684681836846818BBA -:1082D000402001436846818301218174C84908AA6E -:1082E000891C0182C8480192001D0221C54A0091E3 -:1082F000029000230396921C07A904A807F0C6F871 -:10830000010031D1E068002832D068460D9901851E -:1083100001218174BA49C91C0182E16808A80A7860 -:10832000027049784170E068418868464184E0689D -:10833000017900E018E008A80171E0680722C1880F -:1083400008A84171090A8171AF4808A9801D0092EF -:1083500001910290412200230396D2000AA904A8A9 -:1083600007F094F8010003D00B98FFF7C3FDF2E586 -:1083700003210E98002F017207D0E8883880E88921 -:108380007880288AB880688AF8800020E3E5F0B514 -:1083900001248BB016460F46012802D002281BD1BB -:1083A00004E0684605218474C90202E068469749E2 -:1083B00084740182002F11D0032100208902884398 -:1083C0000121890241186846018506AA05A9384697 -:1083D00008F0A7FF002803D00720A5E41020A3E49D -:1083E000894DB8782E3D287338882F46203F7885F0 -:1083F0006A46127D0020294606AB00920E31019399 -:10840000FF32029103900346FF3203320AA904A807 -:1084100007F03CF8002802D0FFF769F884E4002E4A -:1084200001D0F88D30802C7200207DE470B592B0C0 -:108430000446012508A8857075496846018406F040 -:108440009CFF002208A90120FFF7A1FF064606F0C5 -:1084500098FF30003AD120780024C00700283FD090 -:108460001C2168460CF077FC684601782020014307 -:108470006846017008A885706649684601841194B1 -:108480000794817FF9200140891C6846817700208C -:10849000014668460177002001466846417704217D -:1084A0008185C485018607A80A9011A80D9008A8A7 -:1084B000099006F062FF0EAA09A96846FFF729FD98 -:1084C000054606F05EFF002D02D0284612B070BDB2 -:1084D0004D486946098F4E3801816946898F41812F -:1084E00049482E3804720020F0E7F7B5464E9CB09C -:1084F00000212E3E0091317A012904D0022902D0B8 -:1085000008201FB0F0BD40494E39CA8D824201D0CB -:108510000620F6E71D98824201D10720F1E73B488B -:10852000012110AA9176401C1083002003239B0296 -:1085300002469A438B02D31810AA93846A46918408 -:108540003549D18410AA9077908317AA0A926A4677 -:1085500091850C9009A807F051F80024254627467C -:1085600004A909A807F04DF8002810D082287BD173 -:10857000002C7CD0002D7AD010A8048145810024E5 -:10858000047518A8807812AD012872D07AE0684688 -:10859000807D002F1FD0012862D16846818A1B4848 -:1085A000401C814219D114A800906846408A0EAB45 -:1085B0001022002107F08DF8002877D110A8008A3A -:1085C000042801D006285BD16846018F1D9881429E -:1085D00046D10F2095E7012842D16846808A0521BF -:1085E000C902884202D0491C884239D106484E3817 -:1085F000C18D6846408A814210D101270FE00000FA -:1086000001290000010200003A14002001280000A6 -:1086100001180000052A0000FFFF00000027002CC1 -:1086200001D0002D0DD01D99884219D114A90091B7 -:1086300004460EAB1022002107F04BF8002835D17C -:1086400001E0009D0CE010A8008A022801D010284B -:1086500016D1C0B218AA0EA908F03DFE00280FD10D -:108660006846408A00907BE720E000E001E00520BA -:1086700047E72A1D15A918A808F053FE002801D0C5 -:1086800003203EE710A8007D0023001DC2B210A801 -:1086900002751E98029019A901950394009216A8DC -:1086A00006F0F4FE002801D102213172FEF71FFF0F -:1086B00027E73EB50B46401E84B201AA00211846AA -:1086C000FFF751F806F059FE02A8009001AB012215 -:1086D0000021204606F059FE044606F052FE684688 -:1086E0000089012803D0FE49FE480CF072FC2046A8 -:1086F000FEF7FDFE3EBDF0B5FB4E0446307A89B074 -:108700000F46032804D0042802D0082009B0F0BD89 -:1087100004AA06A92046FEF7E8FF0500F6D1F248B4 -:108720002389383022690146103902910093019261 -:10873000039069460A8A638906A9206806F0A6FEA6 -:10874000002802D0FEF7D3FEE0E7002F03D0E64872 -:10875000203000893880042030722846D6E738B5AA -:108760000C00054608D00022694607F00CF80028E6 -:1087700004D0FEF7BCFE38BD102038BD6946204647 -:10878000FEF75DFF0028F8D1A0786946C207D20F36 -:10879000284607F013F8ECE73EB50C0008D002AA13 -:1087A000694606F0F0FF002804D0FEF7A0FE3EBDAB -:1087B00010203EBD032120460CF0CBFA684600880D -:1087C00001A90005800FFEF726FF00280BD168469F -:1087D000007920706846008801A98004800FFEF7A8 -:1087E0001AFF002801D003203EBD68460079607062 -:1087F000A278EF20024068460088C10B09010A43B5 -:10880000F7210A404104C90FC9000A43A270F921A7 -:108810000A40800601D5012000E0022040006946A0 -:108820000243097A50084000C907C90F0843A070E5 -:1088300000203EBDFEB51D4614460E46074606F016 -:108840009CFD01A8009022882B463146384606F050 -:108850009CFD054668468088208006F092FD2846EB -:10886000FEF745FEFEBDF0B50C46002199B0074667 -:10887000684681850D46002C11D0E068002806D09E -:10888000A06800280BD002886B469A850180A078EA -:10889000012806D0022804D0072019B0F0BD10200E -:1088A000FBE72088002807D0401E80B201A906F00F -:1088B0007EFE002842D136E08C48EEE769468A8980 -:1088C00021888A420BD26846007C002501282CD1E1 -:1088D0006846C0898649884227D1012525E08A4219 -:1088E00003D1002D2FD06D1C01E0022D02D0032DED -:1088F0001BD31FE06946097C012916D169467C4BD0 -:10890000CA895B1ED11A9A421DD005DC7948101A1B -:1089100019D0012809D116E0012914D0FF390139F5 -:1089200003D1032506E00D26B60201A806F047FE96 -:108930000028C3D0822804D0002806D0FEF7D7FD37 -:10894000ABE7022DFAD13046A7E7E068002813D044 -:1089500006F013FD0BA800906A46A1882088928D2E -:10896000E36806F012FD054606F00BFD002D19D157 -:108970006846A168808D088002980078C00601D5FD -:108980005D488AE706F0F9FC0EA8009068468089E9 -:108990000CAB0222002106F09CFE054606F0F1FC1D -:1089A000002D01D02846C9E76846008F022801D073 -:1089B000032072E7A078012808A8007C03D0800774 -:1089C0000ED4082069E7C007FBD00820FEF7C8FADC -:1089D000072802D34548401C5FE70825022001E034 -:1089E000022503206946087621886846818317217D -:1089F000818611AA002302320DA906A806F08EF97D -:108A0000002802D0FEF7DBFD47E70FA8009068467C -:108A1000838E042229463846FEF7B8FA3DE770B542 -:108A2000064615460C460846FEF71EFD00280AD1EC -:108A300006F0A3FC2A4621463046FFF7A8FC044670 -:108A400006F09FFC204670BD70B514460D460646E4 -:108A500006F093FC224629463046FFF746FD0446C1 -:108A600006F08FFC204670BD70B51E4614460D0002 -:108A70001AD0002C18D06168002915D00121FEF70A -:108A800071FF00280FD12068FEF7EEFC00280AD104 -:108A900006F073FC324621462846FFF73AFA0446B0 -:108AA00006F06FFC204670BD102070BD70B51546F5 -:108AB0000C0023D00221FEF755FF00280ED12068BC -:108AC000FEF7D2FC002809D106F057FC29462046C3 -:108AD000FFF711FE044606F054FC204670BD00006E -:108AE000607D00003E0600000C14002003300000F2 -:108AF0000328000000280000013400001020EDE7EA -:108B0000FEB507460E4607201546400701211218FC -:108B100089031C468A4219D2002C02D020188842B0 -:108B200014D2384600F045FA00280AD1002C0FD1A3 -:108B300001AA6946384606F026FE002802D0FEF754 -:108B4000D6FCFEBD68460088800601D41020FEBD1C -:108B500023462A4631463846FFF76CFEFEBDFFB578 -:108B600085B01E4614000F4609D003AA02A9059835 -:108B700006F009FE002804D0FEF7B9FCC6E5102077 -:108B8000C4E568460089C00601D5FB48BEE506F08D -:108B9000F4FB01A800900023F84A3946059806F036 -:108BA00098FD054606F0EDFB002D11D1002E0CD0EE -:108BB00006F0E3FB002000902288334639460598F2 -:108BC00006F087FD054606F0DCFB684680882080BD -:108BD0002846D1E7002906D0E94B0A885B899A42EA -:108BE00001D8E84870473EE610B586B004236C46CD -:108BF000A382E34B1C89002C07D05B898B4201D2F6 -:108C0000914204D9DF4806B010BD0620FBE76B4651 -:108C100019825A820021009101911C8002219970D1 -:108C200005A9029104A903916946FFF71CFEEAE732 -:108C3000F0B591B00D4681206946087105F09CFCA5 -:108C40000646002D08D02878CD4C012806D00228F1 -:108C500028D0072011B0F0BD1020FBE7A98801AA99 -:108C6000FEF778FC0028F5D1B00734D568460079C6 -:108C7000002820D1A879C0071DD006F07EFB002077 -:108C800000906A892989A088EB6806F07EFB694616 -:108C9000087106F076FB6946087900280BD0FEF7CC -:108CA00026FCD7E7A98801AAFEF754FC0028D1D1F9 -:108CB000342006420FD00121684601720173017908 -:108CC0004173F00609D5A18868460182A18A018313 -:108CD0002069059004E00820BCE7A0886946088266 -:108CE000FAF731FB05461720694688830AAA2B4606 -:108CF000023207A902A806F011F8074668780007B3 -:108D000001D5FAF73CFB002F03D03846FEF757FC9D -:108D1000A0E7F00603D5207B062108432073B006A8 -:108D200002D50020FEF776FE08A8009069468B8BDE -:108D3000208804220121FEF729F98BE7F0B50026EF -:108D400095B014460D4600290FD0022C4FD3A71E14 -:108D5000BAB28A480AF052FE29191039CA7B8B7BB5 -:108D600011021943884242D1BCB201A9012006F088 -:108D70001EFC7AE0029F3888010776D5002D41D08D -:108D8000A9190691CA788B78361D1102B6B219431B -:108D90008919A1422BD869468A8906994B780978A6 -:108DA0001B020B439A4222D1C00623D506F0E5FAF6 -:108DB00007A800900698AB19C17880780A02069936 -:108DC00002434878097800020843002106F0DDFAE2 -:108DD000009006F0D6FA009800283ED10698C17897 -:108DE000827808026946898B1043884202D00B20A2 -:108DF00015B0F0BD0698C17882780802104380193A -:108E000086B22EE0C0062CD5002007AA01461154D8 -:108E1000401C80B21028FAD306F0AFFA06A80090E2 -:108E20006846002380891022194606F052FC009003 -:108E3000002803D006F0A5FA00980EE00BA86946BA -:108E4000009088890A8B07AB002106F09EFA0090FB -:108E500006F097FA0098002803D0FEF748FBC7E712 -:108E600003E0388810218843388001A806F0A7FB6A -:108E7000002800D17EE7424D6988002921D00122D7 -:108E800068460276027700244477018417218185A1 -:108E90000EAA234602320BA906A805F03FFF0028C0 -:108EA00002D0FEF78CFBA3E70CA8009069468B8DDF -:108EB000288804220121FEF769F8002898D16C80E7 -:108EC00096E7002094E7F0B5002487B015460E46DB -:108ED000002A04D002A9012006F069FB41E010201D -:108EE00007B0F0BD0398007800073AD506F045FAC0 -:108EF00001A8009068460023008A204A194606F01F -:108F0000E8FB074606F03DFA002F23D1002E23D0C0 -:108F100068468088298820183719001D814239D376 -:108F20006946098A3970090A797069468988B97071 -:108F3000090AF97006F021FA01A869460090088A2A -:108F40008A883B1D002106F0C4FB074606F019FA8B -:108F5000002F01D00320C3E7684680882018001D39 -:108F600084B202A806F02BFB0028BBD082280BD0CD -:108F7000FEF7BDFAB4E7000001340000FFFF000077 -:108F8000EC13002003300000002E0ED02988A01C16 -:108F9000814201D20C20A3E72246314639480AF02B -:108FA0002DFD31190870000A4870A41C2C80002087 -:108FB00096E700B585B06946FEF741FC00280AD166 -:108FC0006846007C03000CF0F5F808052F2F2F2FC2 -:108FD00008080531032005B000BD684680780128E7 -:108FE00007D1684600880321C902401A1CD0012815 -:108FF0001AD068468079012806D1684680881521F4 -:109000004902401A05280FD96846807A012811D1F3 -:109010006846018929200002081A05D0022803D0D9 -:10902000032801D0042805D10F20D4E7164917489A -:109030000BF0CFFF0020CEE738B5154A0021518054 -:1090400003791AE0CC002418A46800946C462488A4 -:10905000250707D5E50605D5D90008182038C08BA7 -:10906000508006E0640406D59171C9000818C088D4 -:109070009080012038BD491CC9B28B42E2D8002043 -:1090800038BD0000FFFF0000607D000033020000DB -:10909000EC1300200120F8494006C861704770B504 -:1090A000F54D0024AC7028466C7020304470047478 -:1090B0006C61AC72AC6209F01AFFA86128463430CA -:1090C0000AF0B4FD002804D0FF20ECA13A300BF0E8 -:1090D00080FFEE48C46301204006E86170BD70B5B2 -:1090E0000125EB4902260E60E849CD63E949C96ACA -:1090F00009070ED4E7494031CB6AE74A53620B6B4C -:1091000093624B6BD3628B6B1363C96BD3051943AB -:109110005163D949E14CC96900282BD001282DD0D1 -:10912000FF20D6A169300BF054FFDD48A063FF207B -:10913000043060632563DB49032008602061D74960 -:10914000962040314860D948D7494163D549FC3918 -:109150000163D549091FC163D249F03981630320F6 -:10916000D249000340394860D14910204860D148B5 -:10917000066070BDD0486061D04804E0CF48E03060 -:109180006061CE48801F0143A161CEE7BA4901204A -:1091900008707047B84900200870704770477047E2 -:1091A000BE4940310028086802D00122104301E086 -:1091B000400840000860704770B50C46AE4D01464F -:1091C0000622E81C0BF068FD6C7270BDAA482030C6 -:1091D00040787047A84A91705070704770B50D463E -:1091E0000446082904D9FF20A4A1C6300BF0F1FEE3 -:1091F0000022B34809E09100635809180B6053003E -:109200001B191B8C0B62521CD2B2AA42F3D3206BE7 -:10921000AB494031086070BD0B23DB4310B5C21A67 -:109220009E4998421FD008DC1C3222D00A2A20D046 -:10923000142A1CD0182A08D117E0083011D00428AD -:109240000DD0082809D00C2805D0FF208BA1F230C2 -:109250000BF0BFFE10BD04200CE000200AE0FC2053 -:1092600008E0F82006E0F42004E0F02002E0EC2022 -:1092700000E0D820C86010BD7F482030007B7047D8 -:1092800010B5864CC17861620BF067FD0002E061A9 -:1092900010BD252808D0262808D0272808D041004E -:1092A0000A2807D8091D06E0022105E01A2103E07B -:1092B000502101E0891DC9B2784A91607749403157 -:1092C000486170476C494861704770B56A4CA0723C -:1092D00000F01FFBA07AC00740D0724D28688007BD -:1092E00003D466A177480BF074FEA07A01061DD561 -:1092F000800707D5734861A1801C0BF06AFEA07A35 -:10930000000613D52078694E012816D0002804D015 -:109310006C485AA111300BF05CFE6B487061A0697B -:109320003061FF206149013040394860A07A8007F0 -:1093300014D52868C00708D102E06348001FEDE794 -:1093400060484EA11A300BF044FEA07A400728680E -:1093500001D5042100E008210843286070BD70B5E4 -:109360000124454D002807D0012818D002281AD022 -:10937000232042A100010BE000F0CBFA52482978EB -:10938000001F012907D0002907D04E483BA15738BC -:109390000BF01FFE70BD046070BD446070BD812085 -:1093A000FFF793FF70BD00F0B4FA6869002804D19C -:1093B000444832A14F380BF00CFE6969A86A401886 -:1093C0004249C86039484249403001603E490C3149 -:1093D00041600814354940394860274820300474FA -:1093E00070BDF8B50C2069460870314C6068C00645 -:1093F000C50F1026A66034480021FC300161324BB5 -:1094000001221B1F1A610BE000BF00BF00BF00BF9D -:1094100000BF00BF00BF00BF6B461A78521E1A7013 -:109420006A461278002A02D00269002AECD0016153 -:1094300068460078002804D1912010A180000BF02C -:10944000C8FD002D00D06660F8BD0B490020C86142 -:10945000704710B50BF081FC00021049000AC86388 -:1094600010BD0B49022008607047094902200860BE -:109470001049086070470000481400207372635C54 -:1094800068616C5F7263732E63000000C01F004050 -:1094900080E100E08000001000170040001500404F -:1094A0005B060000001200404480004040F501408F -:1094B0000013004080E200E00601020025000300E6 -:1094C0000016004075020000041000404085004076 -:1094D0004C810040F74902200860CBE7F64908704C -:1094E000C8E710B5F5480AF0A9FB002803D0F449F5 -:1094F000F4480BF06EFD10BD10B5F0480AF0B6FB55 -:1095000010BDF1494860B5E7EC4910B53439EF4B6F -:109510000022C8605A60896A0818ED49486000F066 -:10952000FFF910BDE54810B5C2213438C160E74AE3 -:1095300000215160806AE649C230486000F0F0F9CD -:1095400010BD0120E34940028860DC490020343925 -:10955000C860DF4948608DE7D84900203439886207 -:1095600088E7D648DA493438806AFE30886081E777 -:10957000D749002088607DE7D748016810229143D1 -:109580000160D6490120886174E7D5490020C8618F -:10959000D14801681022114301606BE700B5FFF765 -:1095A000EBFFC64900203439087400BD00B5FFF751 -:1095B000ECFFC24901203439087400BDC849CA69AA -:1095C000012A01D0002055E7BF4A40329268520676 -:1095D000520E524202700020C86101204AE7F8B5DD -:1095E000BF4C2069012806D00021B44834380078E7 -:1095F000012802D004E04021F7E7E268012A04D004 -:1096000000220A43012802D004E02022F9E7616821 -:10961000012905D000211143B24A002802D007E0F9 -:109620001021F8E71368012B02D1E368012B04D065 -:1096300000230B43002802D007E00823F9E7116854 -:10964000002902D1E168012905D000221A439F4E6A -:10965000002802D004E00422F8E77168012904D050 -:1096600000211143002802D004E00221F9E76068DC -:10967000012829D000259C480D4301680906090EE0 -:1096800002D06169012900D000218C4F143F397349 -:1096900000680006000E02D0A069012800D000205A -:1096A00078738B488068002803D000F03DFA0128C9 -:1096B00000D00020B8730021E16021616160616128 -:1096C000A16171602846F8BD0125D4E77B480121DE -:1096D0001438C173CEE6F8B5784E0127143E307CBD -:1096E0000025002825D07C4C206800902560FFF7DD -:1096F00078FE009820607A48C56005614560456144 -:1097000085617449001488603046203801787348B8 -:1097100001290AD000290AD0D920694980000BF01C -:1097200058FCF9F775FC3574F8BD0760F9E7476038 -:10973000F7E7FFF754FF04460020F07364484268DF -:109740005E4D343D6A620068A8622978002909D11B -:10975000A978002906D05C4B5B681B780B406978C0 -:10976000994309D000213170E10707D0104602F07B -:1097700029FD0121A86A08E03770F5E7A10601D5A7 -:10978000022102E0A10702D5002102F02AFD4E4F7E -:10979000796806220931E81C0BF051FA002807D13C -:1097A000687A79680978C909884201D1012000E006 -:1097B00000207070204600F0BDF83F48C2270078B6 -:1097C000002815D0012828D002283BD003285AD0E1 -:1097D0003B4946480BF0FDFB287C002804D0287844 -:1097E000002865D0FFF7C8FE2878002861D089E0FE -:1097F000A00701D501F0CCFB200703D50120EF60C5 -:1098000001F0FEFB600703D50020EF6001F0F8FBDC -:10981000A006E1D501F068FBDEE7A00701D503F063 -:1098200026FF200703D50120EF6003F09FFE6007AD -:1098300003D50020EF6003F099FEA006CCD503F01D -:1098400020FEC9E7A00703D5BF200440F9F7D2FBEB -:10985000200705D5BF2004400120EF60F9F7C9FBC0 -:10986000600705D5BF2004400020EF60F9F7C1FB79 -:10987000A00603D5BF200440F9F7BAFB6006ABD5BC -:10988000F9F7B9FBA8E7A00701D5F9F7B7FB20075F -:1098900003D50120EF60F9F7B0FB600703D5002086 -:1098A000EF60F9F7AAFBA00696D5F9F7A5FB93E7B9 -:1098B0001EE020E000E100E0600000207C140020B9 -:1098C0007C940000AB020000001500404081004085 -:1098D0004085004000F501400012004000100040AB -:1098E00000110040001400404016004094040000A5 -:1098F000FFF74BFE78E7E868002803D0A96A09184B -:1099000028484160F07B002800D10DE7F9F780FB83 -:10991000F8BD254903200860881524498860A9E519 -:10992000224823494030C161224981611F494015C5 -:1099300048609FE570B50546FFF7EBFF1E4CA17A26 -:10994000080701D568071CD41C4AC80605D5507BFA -:10995000002802D0907B002813D0880602D510780A -:1099600000280ED1480602D55078002809D00020E2 -:109970008A070026002A07DA4A0704D50122227046 -:1099800002E00120F4E72670CA0709D0AA0705D42F -:10999000890705D5002803D0A80601D4FFF721FDCB -:1099A000A67270BD408500400012004000F50140E5 -:1099B000101000404481004048140020681400202A -:1099C0002E48002101704170704770B5064614465C -:1099D0000D460120F7F780FE28490120284B08702A -:1099E0009E60DC601D6170BDF8B504460120F7F78C -:1099F00073FE22490120087021494C60214900264C -:109A00004E600321204D8902A960204F002C0AD00E -:109A1000012C03D01EA140200BF0DBFA3E60032096 -:109A200080026860F8BD386001208002F9E710B557 -:109A30001248017800290ED00321134A890291604F -:109A400010494A680021002A03D0154A1268427062 -:109A500000E0417001700020F7F73EFE10BD07489E -:109A60000178002907D007484068002802D00C4838 -:109A70000068C0B270474078704700006100002065 -:109A800000F5004000F1004000F5014000F2004008 -:109A90007372635C68616C5F63636D2E63000000CA -:109AA00000F400403648002101704170102181709F -:109AB000704770B5064614460D460220F7F70CFEB7 -:109AC00001202F492F4A0870E41E146196605560EA -:109AD00070BD10B50220F7F7FFFD2949012008707D -:109AE000294800210160416081602849C014486014 -:109AF00010BD10B5224C2078002811D00120234938 -:109B0000C002886000F02EF80021002804D0012057 -:109B100060701F48006801E061701020A070217023 -:109B20000020F7F7D9FD10BD10B5154801780029C0 -:109B300005D000F017F8002800D0012010BD4078B3 -:109B400010BD10B50E480178002909D000F00AF8C0 -:109B5000002803D00E480068C0B210BD102010BD10 -:109B6000807810BD08480168002905D041680029A7 -:109B700002D08068002801D0002070470120704783 -:109B80006300002000F5004000F1004000F50140B6 -:109B900000F4004010B528210BF0DBF810BD407830 -:109BA0008006800E704740788006800EC01C70478B -:109BB0002820704770B5054600780A0700090001A3 -:109BC000120F104328700B000BF0F4FA070507057D -:109BD000070509050B00062408E00C2406E02224F2 -:109BE00004E00024FEA158200BF0F3F96878800906 -:109BF00080012043687070BD00780007000F704737 -:109C000010B50622C01C0BF047F810BD0B4610B56E -:109C1000C11C062218460BF03FF810BD10B50622F5 -:109C200009300BF039F810BD0B46014610B506227D -:109C3000093118460BF030F810BD0278BF23C90770 -:109C40001A40490E0A430270704700784006C00F60 -:109C5000704702785206520EC9010A4302707047DB -:109C60000078C009704770B50C460546C11C2046F7 -:109C7000062209300BF010F820784006400E2070C4 -:109C800029784906C90FC9010843207070BD70B515 -:109C900015460E4604461F2A03D9D1A1A9200BF070 -:109CA00098F920462A46314609300AF0F5FF6078D7 -:109CB000AD1D80098001A906890E0843607070BD42 -:109CC00070B5054640780E468406A40E062C03D2D5 -:109CD000C3A1B9200BF07DF9A41FE4B21F2C00D959 -:109CE0001F2429462246093130460AF0D5FF204676 -:109CF00070BD70B515460E4604461F2A03D9B8A19B -:109D0000CD200BF066F920462A46314609300AF08C -:109D1000C3FF6078AD1D80098001A906890E084344 -:109D2000607070BD70B5044640780E468506AD0E75 -:109D3000062D03D2AAA1DE200BF04BF9AD1FEDB228 -:109D40001F2D03D9A6A1E2200BF043F921462A4694 -:109D5000093130460AF0A0FF284670BD10B5042234 -:109D60000F300AF099FF10BD0B46014610B50422D2 -:109D70000F3118460AF090FF10BD10B503221330C2 -:109D80000AF08AFF10BD0B46014610B503221331BD -:109D900018460AF081FF10BD4176090A81767047A6 -:109DA000817E427E080210437047C176090A01771E -:109DB0007047017FC27E0802104370474177090A4D -:109DC00081777047817F427F080210437047C175D9 -:109DD000090A01767047017EC27D08021043704770 -:109DE00081757047807D704720300279C90652091D -:109DF0005201C90E0A430271704720300079C00633 -:109E0000C00E704720300279D206D20E49010A43B3 -:109E100002717047203000794009704710B5052263 -:109E20001F300AF039FF10BD0B46014610B5052260 -:109E30001F3118460AF030FF10BD30B5411C837E3B -:109E40000A461902D37D447E927D1B0221431343AF -:109E5000674D827D8C1FAC4210D8002A0ED0082A94 -:109E60000CD88A420AD28B4208D8817F427F0802EE -:109E70001043A91D884201D8012030BD002030BD0B -:109E800000210A464254491C2229FBDB70474078D6 -:109E9000C006C00E70474078C006C00EC01C704798 -:109EA0002220704710B502788B07920892009B0F12 -:109EB0001A4302704278520952014270012908D0B7 -:109EC000022906D0032905D0FF2045A1A3300BF0BD -:109ED00080F810BD01210A43427010BD10B5027810 -:109EE0008B07920892009B0F1A4302704278520926 -:109EF00052014270012908D0022906D0032905D059 -:109F0000FF2037A1BD300BF064F810BD01210A43DA -:109F1000427010BD00788007800F70470278FB23E5 -:109F2000C9071A40490F0A4302707047007840077A -:109F3000C00F70470278F723C9071A40090F0A4378 -:109F40000270704700780007C00F70470278EF2357 -:109F5000C9071A40C90E0A43027070470078C0064C -:109F6000C00F704770B50546C1700B000BF022F9A9 -:109F70000E080A0C0E1012120C14141212160C18E1 -:109F80000C2413E0082411E002240FE017240DE054 -:109F90000D240BE0012409E0092407E0062405E074 -:109FA000452000240EA1C0000BF013F8687840098A -:109FB00040012043687070BDC078704770B504469A -:109FC00040780E46C506ED0E1B2D03D904A10948A5 -:109FD0000AF0FFFF6019C01C042231460CE00000AB -:109FE0007372635C756C5F7064752E6300000000B3 -:109FF0007A0C00003A0200000AF04EFE70BD70B507 -:10A00000044640780E46C506ED0E1B2D03D9A04927 -:10A01000A0480AF0DEFF6119C91C042230460AF08C -:10A020003BFE70BDC171090A01727047017AC279A5 -:10A030000802104370474172090A81727047817AA1 -:10A04000427A080210437047C172090A01737047CF -:10A05000017BC27A0802104370474171090A81717D -:10A060007047817942790802104370470171704747 -:10A07000007970474173090A81737047817B427B85 -:10A0800008021043704730B5411C037A0A46C47970 -:10A0900019022143537914791B0223437E4D007921 -:10A0A0008C1FAC4210D800280ED008280CD888424B -:10A0B0000AD28B4208D8D07A917A00020843A91DAF -:10A0C000884201D8012030BD002030BD10B50522E6 -:10A0D000001D0AF0E1FD10BD0B4610B5011D052263 -:10A0E00018460AF0D9FD10BD4172090A8172704705 -:10A0F000817A427A080210437047017170470079F3 -:10A10000704710B50822001D0AF0C6FD10BD0B46B1 -:10A1100010B5011D082218460AF0BEFD10BD0A78D0 -:10A120000273497841737047027B0A70407B487024 -:10A13000704710B508220E300AF0AEFD10BD0B4678 -:10A14000014610B508220E3118460AF0A5FD10BDD3 -:10A1500010B5042216300AF09FFD10BD0B460146D3 -:10A1600010B50422163118460AF096FD10BD10B540 -:10A170000822001D0AF090FD10BD0B4610B5011D10 -:10A18000082218460AF088FD10BD10B504220C30D4 -:10A190000AF082FD10BD0B46014610B504220C31B9 -:10A1A00018460AF079FD10BD017170474171090A26 -:10A1B00081717047C171090A017270470079704757 -:10A1C00081794279080210437047017AC279080206 -:10A1D00010437047017170470079704701717047F3 -:10A1E0000079704710B50822001D0AF055FD10BD1A -:10A1F0000B4610B5011D082218460AF04DFD10BD92 -:10A2000010B50822001D0AF047FD10BD0B4610B521 -:10A21000011D082218460AF03FFD10BD70B5154615 -:10A220000E4604461B2A04D93720194900010AF0BA -:10A23000D0FE2A463146E01C0AF02EFD6078E90681 -:10A2400040094001C90E0843607070BD70B50546F5 -:10A2500040780E46C406E40E1B2C04D9DF200C49BE -:10A2600080000AF0B6FE2246E91C30460AF014FDD2 -:10A27000204670BD4078C006C00E1B2801D80120C2 -:10A2800070470020704710B522220AF005FD10BD6E -:10A29000E09F0000430200007A0C0000FEB50F466C -:10A2A00004460146064620302546C031603640351A -:10A2B0000190032F04D0002F2DD0012F2BD04BE085 -:10A2C00000206080A080E08020816081A082E08505 -:10A2D000E0826874A074E074A076E076A073E07306 -:10A2E00020746074019B987401232B74A8822883C6 -:10A2F0000876E883B0706883A873E8732077607786 -:10A30000019988720199087430727072B072327457 -:10A31000B074A883FEBD0020A8822883012F52D0EC -:10A32000E08B0090608C0290C00000990AF02EFD36 -:10A33000401C80B2E8820099192241439202914266 -:10A3400001DD401EE8827D20000200990AF01EFD1A -:10A35000401C3080002F01D0022FDBD10198007A01 -:10A36000C1060198C90E01720020687322182421C9 -:10A370008B5C4032D9075B08DE07C90FF60F7118F6 -:10A380005B08DE07F60F71185B08DE07F60F711821 -:10A390005B08DE07F60F71185B08DE07F60F711811 -:10A3A0005B08DE07F60F76185908891911726A7B67 -:10A3B000401C5118C0B269730528D7D3002FA9D10A -:10A3C0000020A874FEBD4A7F2046E030022A12D049 -:10A3D000097F022913D050A173200AF0FAFD012051 -:10A3E00000900290E08BA98B484300990AF0DCFCB6 -:10A3F000A883029898E7818800910089F1E7018A93 -:10A400000091808AEDE770B504464034667B0546CE -:10A41000002E68D0252E66D8002964D03E20405DED -:10A42000A27B4843101825210AF0B0FC0846A1730E -:10A430004207C908520F3C4B691820319A5C0979D0 -:10A440008A4367D031460AF0A1FC491CCAB20020F9 -:10A4500006E0002804D029184031C979511ACAB23F -:10A46000291848235B5C93423AD320310979C943C8 -:10A47000CB07DB17D21A521E1206120E34D08B07EE -:10A48000DB17D21A521E1206120E2FD04B07DB1703 -:10A49000D21A521E1206120E2BD00B07DB17D21A3D -:10A4A000521E1206120E27D0CB06DB17D21A521EEE -:10A4B0001206120E23D08B06DB17D21A521E12067A -:10A4C000120E1FD04B06DB17D21A521E1206120EA6 -:10A4D0001BD00906C917511A491E0A06120E17D0B9 -:10A4E000401C0528B5DB70BDC00013E0C000401C57 -:10A4F00010E0C000801C0DE0C000C01C0AE0C000DD -:10A50000001D07E0C000401D04E0C000801D01E008 -:10A51000C000C01DE07370BD7372635C6C6C5F75CE -:10A5200074696C2E63000000EC51010010B5FF4807 -:10A530000021017041708170C17041718171C171E0 -:10A54000083009F073FB002804D0FF20F8A1843004 -:10A550000AF03FFD10BD10B5F44900204872081DF7 -:10A5600009F064FB002804D0FF20F1A1C3300AF0F9 -:10A5700030FDFFF7DBFFF148FFF782FC0021EF48D9 -:10A58000FFF7E4FC0121ED48FFF78CFC10BDE2E78A -:10A590001B207047E5494A7A002A01D00020704705 -:10A5A000488101204872704710B5E0494A7A002A74 -:10A5B00002D04989814201D0002010BDDB48001D36 -:10A5C00009F03CFB002804D0FF20D9A1B4300AF0E8 -:10A5D00000FDD648001D09F049FBFFF7A7FF012049 -:10A5E00010BD70B5D14C0025627A002A02D0628974 -:10A5F000824201D00D700DE0227863789A4203D335 -:10A6000022786378D21A04E062782378D21A102371 -:10A610009A1A0A70FFF7C8FF002801D0657201205E -:10A6200070BDC2494A7A002A04D04989814201D1C9 -:10A630000120704700207047BC490A784B78521CB3 -:10A640001207120F9A4207D0097822225143BC4ABE -:10A65000891801600120704700207047B3480178D5 -:10A660004278491C0907090F914206D00178491C1C -:10A670000907090F01700120704700207047AB499E -:10A680004A7A002A04D04989814201D101207047C9 -:10A6900000207047A5490A784B789A4207D049783C -:10A6A00022225143A64A89180160012070470020E8 -:10A6B000704710B59D4C20786178884216D060783C -:10A6C000401C0007000F6070201D09F0B7FA002839 -:10A6D00004D0E078401CE070012010BDA078401C40 -:10A6E000A0709248001D09F0C1FAF5E7002010BDE6 -:10A6F0008E4801784078814201D1012070470020C6 -:10A7000070478A4801784278914202D301784078B4 -:10A7100003E041780078081A1021081AC0B2704787 -:10A720000F20704770B5814C0D46617A002916D014 -:10A730006189814213D100262E70201D09F07EFA16 -:10A74000002805D1A0782870A670201D09F08EFA87 -:10A750002878E17840182870E670012070BD00204C -:10A7600070BD76490160704770494A7A002A04D06A -:10A770004989814201D101207047002070476B490F -:10A780004979002901D0002070476E4901600120FD -:10A79000704766484179002901D0002070470121A7 -:10A7A00041710846704761494A7A002A04D04989B4 -:10A7B000814201D101207047002070475B494979EF -:10A7C000012901D0002070475E49016001207047D7 -:10A7D00056484179012901D000207047002141717C -:10A7E0000120704751484079012801D0012070476D -:10A7F000002070474D494A7A002A04D04989814295 -:10A8000001D1012070470020704770B5474C0546C4 -:10A81000A0790721401C0AF0B9FAE079814208D0FA -:10A82000A07922214843474922314018286001205D -:10A8300070BD002070BD10B53C4C0721A079401CB4 -:10A840000AF0A4FAE079814207D0A0790721401CE0 -:10A850000AF09CFAA171012010BD002010BD334800 -:10A860008179C079814201D1012070470020704771 -:10A870002E494A7A002A04D04989814201D1012017 -:10A8800070470020704710B504462848083009F08A -:10A89000D5F9002815D125498879CA7990420CD07C -:10A8A000C8792221484327492231401820601F4897 -:10A8B000083009F0DBF9012010BD1C48083009F010 -:10A8C000D5F9002010BD10B504461848083009F02D -:10A8D000B5F9002815D115498879CA7990420CD06C -:10A8E000C8792221484317492231401820600F4877 -:10A8F000083009F0BBF9012010BD0C48083009F000 -:10A90000B5F9002010BD094810B5083009F096F9D6 -:10A91000002822D1054CA079E17988421AD0E0794B -:10A920000721401C0AF032FAE1710DE066000020B8 -:10A930007372635C646D5F712E630000B01700205A -:10A9400080140020A01600202046083009F08EF95F -:10A95000012010BD0C4809F089F9002010BD0A48FB -:10A9600008388179C079814201D1012070470020E7 -:10A970007047054808388179C079814201D10120AA -:10A9800070470020704700006E000020704770473D -:10A99000FF207047704770470020704700207047C5 -:10A9A000002070470020704700207047002070474B -:10A9B000002070470020704700207047012070473A -:10A9C000002070470020704700207047002070472B -:10A9D000F8B5FF4D0446A87F002600280CD00029BA -:10A9E00023D1667010202070E87FA07028462030A8 -:10A9F0000078E070AE7718E0287A012801D00020B6 -:10AA0000F8BD002911D16670F149687A01270A3131 -:10AA1000002801D0132000E0052020701422A01C83 -:10AA20000AF03AF9A7716E722E720120F8BDF8B5DE -:10AA3000E8480078002802D00C273846F8BD0027E7 -:10AA4000E34D3C46203DAF74EF746F75AF752F75C5 -:10AA500028466F732038DE4E47737771E87D0028F3 -:10AA600004D0FEF785FDFFF744F8EC75347274727C -:10AA7000B477D7482430FFF78DF8D5484C30FFF72E -:10AA800089F8DAE710B5D34C00232370D04C203C72 -:10AA9000E375CF4B01241C71603B583307C3FFF7AC -:10AAA000C6FF002804D0FF20CBA102300AF091FAA3 -:10AAB00010BDC7482038807C7047F8B5C44D0646A5 -:10AAC000407B203DE873C24837791346AF73B27BB1 -:10AAD00082710446603C217006221946601C0AF00F -:10AAE000DBF8B07960730622F11DE01D0AF0D4F89E -:10AAF000687B0126002800D0EE74B5484038407BC2 -:10AB0000002800D02E75002F09D0012F09D0022F68 -:10AB100024D0032F46D0FF20AFA14D3013E00021F9 -:10AB20001DE0AB4801212430FFF744F8A848E11D9F -:10AB30002430FFF773F8607B002807D0012807D086 -:10AB4000FF20A5A143300AF044FA0CE0002100E008 -:10AB500001219F482430FFF77CF804E006219C483F -:10AB60002430FFF727F800206875A8759848611C05 -:10AB70002430FFF745F8964821782430FFF75DF838 -:10AB8000934804214C30FFF715F89148611C4C3074 -:10AB9000FFF736F88E4821784C30FFF74EF8AE7448 -:10ABA0000020F8BD0221DAE770B5894C0125203C70 -:10ABB0000246A5758648007A002801D03A2070BD6B -:10ABC000834860380378934206D1002262750622DA -:10ABD000401C0AF061F86575002070BD70B5044630 -:10ABE0007B4D0020203D28752846224632380AF049 -:10ABF00053F82846203844730120287570BD7449E5 -:10AC00000871704710B5724C0022203CE2746073EA -:10AC10000246204612380AF03FF80120E07410BDC9 -:10AC2000F8B500F04CFB6A4C0025203CE07D002884 -:10AC300004D0FEF79DFCFEF75CFFE575654E3570B0 -:10AC4000FEF75AFCA07B012804D00021084601F041 -:10AC500082FAF8BD0021022001F07DFA5C4C207AD6 -:10AC60000127002809D0A07F0028F2D10520E07735 -:10AC7000204620300570A777F8BD70780028FBD0FB -:10AC8000534906226039487BE073C91D0846693084 -:10AC90000AF002F83C20A07227727570F8BD10B55A -:10ACA0004B4C203CE17B207CCA0701D0C2070BD073 -:10ACB0008A070FD582070DD42620FEF7EAFA207CFA -:10ACC00002210843207410BD2520FEF7E2FA207C03 -:10ACD0000121F6E74907F6D54007F4D42720FEF70F -:10ACE000D8FA207C0421ECE770B53A4D287800288A -:10ACF0007CD1374C203CA07C00287CD0FEF7F1FBB7 -:10AD00000026267466746E703046FEF7E7FB00205E -:10AD1000FEF7E5F93448FEF7B3FA2546403D296EC3 -:10AD20008857FEF779FA3048C01EFEF792FBFEF70F -:10AD300008FCFFF7B4FFFEF729FAFEF7CBFB012072 -:10AD4000FEF70DFB0F210520FEF744FA2978681C59 -:10AD5000FEF732FAA07B01280AD0E07C002807D059 -:10AD6000214612390846627B5630FEF790FFE674A2 -:10AD7000207D002808D0164840380146427B123911 -:10AD80008C30FEF7B6FF2675607D00280BD010488A -:10AD9000691C2430FEF734FF0D48691C4C30FEF767 -:10ADA0002FFF6675A675E86D0178002903D001783C -:10ADB000001DFEF713FAA86D0178002907D001786D -:10ADC000034A401C7732FEF774FE0120E0750EE066 -:10ADD00034180020740000207372635C6C6C5F6137 -:10ADE00064762E6300000000F751010003E0FEF7D7 -:10ADF00083FB002070BD0C2070BDFB49486070478C -:10AE000070B50546FEF79DFB002D06D00020FEF72D -:10AE10005CFAFEF7BBF9FFF742FFF44C607C0028B8 -:10AE200009D0A07B012803D1F149F2480AF0D1F8FA -:10AE3000FFF7F6FE70BD0126002D05D00220FEF7BB -:10AE40008EFAEA4820304671E8484430FEF759FB54 -:10AE5000012008F0A8FDFEF7A1F9A07B00280FD083 -:10AE600001280DD002280BD003280BD0E148E0497F -:10AE70001E300AF0AEF8E07B217C884306D009E062 -:10AE8000032000E00120FEF720FAF4E7A07B012870 -:10AE900003D06674D448067070BD00202074F9E7B2 -:10AEA00010B5FEF71EFBD048007800280ED1CF4821 -:10AEB000807C00280AD00020FFF7A2FFF6F781FA75 -:10AEC000CA4820300079012806D007E000F0F7F9E1 -:10AED000FEF712FB0C2010BDF8F79AF8002010BD09 -:10AEE000C14901204870704770B500F0DAFF0028B2 -:10AEF0001BD0FF202D30FEF7E5F9BB4E3078BB4C60 -:10AF00002034012814D0022801D003282ED0A520F7 -:10AF1000B74980000AF05DF83078002807D0F6F7CE -:10AF200050FA207901282BD02FE0FFF779FE70BD71 -:10AF3000AE4DA87B032819D0FEF7F4FAE87D00286F -:10AF400003D0FEF7C6FDFEF70CFBA8489430FEF7D1 -:10AF5000D8FA012008F028FDA87B01280BD0A179A0 -:10AF60006F20012906D0032904D004E00120FFF757 -:10AF700047FFD1E77F20FEF7A8F902203070CBE72A -:10AF80006079002801D1FEF7A1FB0020607170BD3F -:10AF900070B5964CE07D002803D0FEF7E9FAFEF785 -:10AFA000A8FD00F07EFF00281CD08F4D28780228D5 -:10AFB00003D08F4990480AF00CF8A07B012814D0E8 -:10AFC000FF202D30FEF77EF90120FFF719FF2878CA -:10AFD000002809D0F6F7F5F9844C203420790128AF -:10AFE00006D00AE0FFF71CFE70BD99208000E9E75B -:10AFF0006079002801D1FEF769FB0020607170BD07 -:10B00000F8B50446FEF738F90746FEF78DFD01282E -:10B0100027D0002674480078022804D07648744966 -:10B020003C3009F0D6FF714DE87D002803D0FEF7D3 -:10B030009FFAFEF75EFDFEF784FA6C489430FEF747 -:10B04000DBFD21006D4C009064D0FEF7BFF80028B6 -:10B0500060D0009803000AF0ADF8065D5D5D065D06 -:10B060001E5D0126D6E7A87B012853D0374304D1C3 -:10B07000A079002801D002284CD160484C30FEF75E -:10B0800040FA012008F08FFC0120FEF71EF9564817 -:10B090000321017045E059487430C178D438C27931 -:10B0A00091421DD10146D4310A79037A9A4217D1CF -:10B0B0004A79437A9A4213D18A79837A9A420FD194 -:10B0C000CA79C37A9A420BD10A7A037B9A4207D192 -:10B0D0000978407B4906C90F814201D1012100E076 -:10B0E0000021A87B012802D0002803D012E000290B -:10B0F00007D10FE0374304D1A079002801D00128FF -:10B1000008D13E487430FEF798FE002802D0A87D92 -:10B11000002810D0FF202D30FEF7D4F80120FFF7D3 -:10B120006FFE3148007800286AD0F6F74AF9207996 -:10B1300001286ED0C0E02C4F30497868042283315A -:10B14000343009F0A9FD2D484021743000784006C4 -:10B15000C20F78680A54294906227731413009F034 -:10B160009BFD2649786803228731383009F094FD29 -:10B1700022483B217430827D78680A541F4974311B -:10B180000A7ECB7D12021A4382878A7E4B7E120290 -:10B190001A43C2830A7FCB7E1102194301841749E7 -:10B1A00074318A7F4B7F1102194341841349052270 -:10B1B0009331243009F070FD10497F68943108798B -:10B1C000C20638462030D20E0090827709794909AC -:10B1D000C177207A00281DD0A07F00285BD1607A3B -:10B1E00000280ED013200DE0740000201418002059 -:10B1F000D8AD0000F9030000BF02000034180020A1 -:10B200005CE00520E0773449002008700120A07739 -:10B2100041E04CE03048E97D1038002924D000217D -:10B22000A172B989A1814021C95DE1733946062225 -:10B23000413109F031FDF88BE082388C2083788C25 -:10B2400060830098C07F2077607F400840003043D3 -:10B250006077FEF776FC617F4000C907C90F0143A4 -:10B2600061770120607215E00021A172B989A18186 -:10B270004021C95DE17339460622413109F00CFDD8 -:10B28000F88BE082388C2083788C60830098C07FB4 -:10B29000207701202072114D0020287000F00FF857 -:10B2A000FEF72AF90120696800F055FF39E7607957 -:10B2B000002801D1FEF70AFA00206071F8BD10B530 -:10B2C000FEF74AF9FEF73DF9FEF78BF80020FDF78F -:10B2D000FCFFFEF7CAF810BD5418002074000020CF -:10B2E0008107C90E002808DA0007000F0838800817 -:10B2F000FD4A80008018C06904E08008FB4A800095 -:10B3000080180068C8400006800F704710B500F034 -:10B310007BFF10BD70B5F64C0546A26800290DD024 -:10B32000002A04D0FF20F3A14C3009F052FEA560A2 -:10B33000F6F748F80220F6F73FF870BD002A04D16E -:10B34000FF20ECA1543009F044FE0020A060F6F785 -:10B350003AF80120F6F738F870BDE5481030C07EA5 -:10B36000002801D00020704701207047E0481030CD -:10B37000C07E7047DE483430C07E70470021C17601 -:10B38000817601600162DA481030C07E002807D162 -:10B39000D7483430C07E002802D1D549012008703A -:10B3A000704710B50B46C17E847EA14204D0114681 -:10B3B000184607F0B4FB10BDFFF7E0FF10BD38B52D -:10B3C000CB4C606801684978012924D00121684686 -:10B3D00006F05EF968460078CA49000209F0D6FC1A -:10B3E00060680268C0685268511807F0B5F9616872 -:10B3F000C860BF49606834310022884215D0018B93 -:10B40000002912D04272032101720271021D017FD4 -:10B41000FFF7C7FF38BD7D21C068C90007F09CF960 -:10B420006168C860B8480861E3E7018B491C018383 -:10B4300002214172E7E7FFB5AD4F02461037386A87 -:10B440003C68056889B060680790A948C1680291A6 -:10B450006B880B98C01A80B208900C98002804D012 -:10B46000264638362046483002E03E1D28466430E5 -:10B47000059003203071002A15D0012A7ED0022ABF -:10B4800052D0032A7BD09BA1A04809F0A2FD0C98C2 -:10B490000028307974D0032804D09C4895A1093045 -:10B4A00009F097FD40E1002904D1984891A169383D -:10B4B00009F08FFD9549A88FA839484340180A998B -:10B4C00000F0A8FEA0619149E88BA83948430A9989 -:10B4D00000F0A0FEE06186488C4AC068A98FA83AB7 -:10B4E000514384464118A069894A091A8A183B21A8 -:10B4F000A262864B495DA83B594341180818FF30AA -:10B500001630206260626046101AFF38ED2135382F -:10B51000C9008842BBD27F49884204D27B4875A1CA -:10B520005C3809F056FDBAE0784AA88FA83AE1687D -:10B53000504308180A9900F06DFEA0617349E88B2A -:10B54000A83948430A9900F065FEE0616848C06880 -:10B55000002804D16D4867A1543809F03AFD5820FD -:10B56000405B6D4A0028A88FE16822D0504308183C -:10B57000A169401AA0622169A06802E022E051E0BE -:10B58000CDE04843A169644A40183B21495D5143DD -:10B5900041180818FF3014302062E88BE1695043ED -:10B5A000411A0F208001081A60625148A16AC068E0 -:10B5B0006DE050430818A169401A3968D3384968CA -:10B5C0004018D7E7284640300290008B002801D071 -:10B5D000002904D14D4847A13C3809F0FAFCE88B1A -:10B5E0004D494843E169401AA062029A138B2269CF -:10B5F0009B1A9C46A3685343A2699A186346594311 -:10B6000051183B22525D444B5A438A185118FF315E -:10B61000143121620F218901411A61623449C968DC -:10B62000401A35E00C98002803D03420005D002833 -:10B6300074D1E88B38494843E169401A0899484376 -:10B64000A062284640300690008B0028079829D039 -:10B65000002804D02D4827A1163809F0BAFC069816 -:10B660002D4A018B08980818E16948434000FF30D3 -:10B6700014302062E88B5043411A0F208001081AD1 -:10B68000606200F0C1FD00281CD0A16A0298081A6F -:10B69000FF38ED212338C900884200D3F7E60220A5 -:10B6A0003071F4E6002802D00298002804D117482F -:10B6B00010A11D3809F08DFC0798A16AD33808182D -:10B6C000A062CCE706F0B1FD7A690146104607F0AA -:10B6D000D5FFA16A081AFF38ED211E38C90088423B -:10B6E000DCD201200DB0F0BD00ED00E000E400E090 -:10B6F000D01800207372635C6C6C5F6C6D2E7330BD -:10B700002E63000010270000B78913008A0500008F -:10B7100036040000A3020000E20400002AE003282F -:10B7200002D1FD4807210170A16A786907F014F879 -:10B73000B060616A206A884202D90598016001E020 -:10B74000059908600598F54900680818F060A9880F -:10B750000B98081A00B2002801DD022000E000204A -:10B7600070710C9830700C98002805D03420005D62 -:10B77000002801D00220B5E70C9801214840203470 -:10B780006075397F32463846FFF70BFE0020A9E787 -:10B7900010B5E14900284A68116A096807D01268A3 -:10B7A000C98BDF4BD2695943891A09F0EFFA10BDF2 -:10B7B000F8B5D94F35227868016A0C680168525C87 -:10B7C000002A0AD0498E6288914206D1407A002828 -:10B7D00003D1D449D44809F0FCFB06F026FD01460C -:10B7E0007868406907F04AFFFFF7D2FF79686588FB -:10B7F0000B682E185A8EB24202DB521C5A8602E0A7 -:10B80000401C2818588608683622125C002A05D188 -:10B81000428E23899A4201D1521C4286088B03280A -:10B8200002D2401C088302E00868408EA0802046B7 -:10B830004030C18A808A081A6188401E401885B24B -:10B84000203416E0096AE67F097976004B00B74993 -:10B85000007DCB5A895BC91889B20023FFF7EBFD45 -:10B86000002811D0012810D0AF48AE493A3009F075 -:10B87000B0FB79680868428EAB1A1BB2002BE1DA84 -:10B880000820E07400F00BFEF8BD78680068418E77 -:10B89000491C4186EDE770B51F209F4D002128709F -:10B8A000E960A868C27E130009F084FC04545403C4 -:10B8B0004654026A14680268117002685160006898 -:10B8C0002030407D002808D106F0AFFCA968096847 -:10B8D000096C07F0D3FE002815DCA86801684A8EC1 -:10B8E00061888A4204D12289511A6181628004E010 -:10B8F000511A61810168498E61800268C1681164D2 -:10B90000C16841610FE0A8680168098E6288891AE0 -:10B9100061810168098E618001680A6CC2600A6CED -:10B920004261886C6066204601F06DFC00280ED0F4 -:10B930007B487C49BD3808E0C1684161FFF7D4F914 -:10B94000002804D076487749B73809F042FBF5F76C -:10B9500038FD70BD72487349B038F6E710B56E4ACD -:10B960000B00526809F026FC0906090F1E0C2D2D4C -:10B97000082A2D00FFF78FFF10BD00F059FC10BD05 -:10B98000FDF7A9FE10BDD07E022805D0D07E032889 -:10B9900005D0644966480EE0FFF70AFF10BDFFF7C7 -:10B9A0000EFD10BDD07E0228F6D0D07E0328F6D042 -:10B9B0005F485C490B3009F00CFBF0E706F01BFC1C -:10B9C00010BD23205749000109F003FB10BDF3B55A -:10B9D00081B0514C029825460026012710350300FE -:10B9E00009F0E8FB0906313C3C3143433C3C430051 -:10B9F000494801211030FFF78DFC02990198FFF7AB -:10BA0000ADFFE87E022828D1A0680468006A0668B5 -:10BA100006F0EAFBF18B424A5143E269891AD339B5 -:10BA2000FF223232E162904202D24248081802E01C -:10BA3000081A41494018E0624048E16A814200D852 -:10BA40000846E06206E001460198FFF787FFE87EBE -:10BA5000022802D1286820300775FEBD01466560C6 -:10BA60000198FFF77BFF6660FEBDFF202D49C130C6 -:10BA700009F0AFFAFEBDF8B5064627480D4600248A -:10BA80003430254F0B0009F095FB09060C10100C03 -:10BA9000161610101600204801213430FFF73AFC2A -:10BAA00029463046FFF75AFFF8BD78603046FFF769 -:10BAB00055FF7C60F8BDFF201A49F53009F089FA7E -:10BAC000F8BDF0B5144C0020616885B003268E7671 -:10BAD000CA7E0746032A03D0C97E00293FD03FE033 -:10BAE000087F002804D112480E49D93009F071FAB4 -:10BAF0006068057F684606710221417106F095FB7A -:10BB00000290FF20F53003900121684601706946DC -:10BB1000284607F004F814E0D0180020EF160000C3 -:10BB2000E2040000F4B6000074060000FC510100BD -:10BB30001602000084F8FFFFB5F9FFFF161200009F -:10BB400020BF6068007F07F025FE0028F8D06068FD -:10BB5000007F06F050FB60680777FFF70FFC0120BD -:10BB600061688F7605B0BEE5FD494A68907600E0D1 -:10BB700020BF4A68D07E002803D0D07E937E9842B2 -:10BB8000F6D0D07E002803D00020002191767047A7 -:10BB90000120FAE770B5F24900241031CA7EF04D59 -:10BBA000032A03D02431CA7E032A17D169600028F2 -:10BBB00010D001280AD0EB49EB4809F00AFA00201E -:10BBC0006968002C0860686008D070BD0320FFF72A -:10BBD000CBFF01E0FFF775FF0446F0E70C2070BDD6 -:10BBE000F8B5DF4F04461F25E67E330009F0E2FA80 -:10BBF000042A20031B20DA481030844203D0D9499C -:10BC0000DA4809F0E6F902207C60FFF7ADFF002872 -:10BC100005D07968002008600862786012E00C2581 -:10BC2000002078600BE00120FFF7B4FF054604E038 -:10BC3000CE48CC490C3009F0CCF9002D02D0E07E82 -:10BC4000B042D1D1E07E002804D0C848C5491230A6 -:10BC500009F0BFF9F8BDC24810B51030FFF7C0FFBA -:10BC6000BF483430FFF7BCFFBD490020583108758C -:10BC7000BF494870BA49103148610A4624325061C0 -:10BC800088769076012210390A708860486010BD6D -:10BC900070B504460120FFF723FBC5B20B20FFF768 -:10BCA0001FFBC0B2854204D0B048AE49343809F019 -:10BCB00090F90120FFF714FBC5B21820FFF710FB25 -:10BCC000C0B2854204D0A948A649333809F081F9A9 -:10BCD0000420C043FFF704FBC5B21920FFF700FBA7 -:10BCE000C0B2854204D0A1489E49323809F071F9AA -:10BCF0009F489B490C38047000201031C876887624 -:10BD00000A462432D0769076994B0124083B1C7168 -:10BD100018600862106208601060FFF79CFF70BD39 -:10BD20008F48007870479249083908717047F3B519 -:10BD30000D468B4983B01031CA7E08462430884CAA -:10BD4000002A02D1C27E002A03D0C97E022903D074 -:10BD500005E08848616006E0C17E002901D00C2022 -:10BD600000E76060844806F0F2F96168087760686F -:10BD70007F490160007F002804D17B4879496238FF -:10BD800009F027F906F030FA7C49884200D20846CB -:10BD9000FF30C83086B260680321C1760027012DCC -:10BDA0002FD0724A0399121D5143026851600068F6 -:10BDB00001210170684605F06BFC68460078704907 -:10BDC000000208F0E3FF019106F02FFA01997118C3 -:10BDD00006F0C2FC6168032DC86021D06948086183 -:10BDE000606803210172022141720771021D017F07 -:10BDF000FFF7D7FA6068078307202070002067608C -:10BE0000B0E606F012FA314606F0A6FC6168C8609A -:10BE10005D48086108680770096801204870DFE71D -:10BE20005A48DCE77047F8B54D4E1036F17E0029D0 -:10BE300004D131462431C97E002901D00C20F8BD3F -:10BE40000221F176464C4A4F5834083F376234603D -:10BE5000002538602575397920304A004C49C07F6B -:10BE60008A5A4000085A2B46101881B22A462846A2 -:10BE7000FFF7E1FA002804D03B483A49323009F094 -:10BE8000A8F825610120A5602075658625863448BF -:10BE90007830857539684888401E48803583002091 -:10BEA000F8BD10B52E4901248868827E032A0CD083 -:10BEB00000684078002806D0C8683649884202D910 -:10BEC0000024FFF70DF8204610BD0024FBE72448AE -:10BED000826813681978491C1970C1681068C26AB1 -:10BEE000914204D8007D012801D001207047002034 -:10BEF000704700207047F8B51948194C1030606041 -:10BF0000016A00260D68006834212F460E54403720 -:10BF1000B97C002963D1007D032860D106F085F942 -:10BF200001466068406907F0A9FB002857DDFFF76C -:10BF30002FFC6988401C41186068026811860068FF -:10BF40002989028E91424AD9012120308175F88ACF -:10BF5000B98A401A6988401E401887B238E000004C -:10BF6000D0180020F4B600008D0300006D02000020 -:10BF700088000020CFB9000077BA0000F605000065 -:10BF800010270000CB120000B7891300B70800008B -:10BF9000FC5101002E841300096A09794A00CD4939 -:10BFA0008B5A028E007D94463F22525D5200895A80 -:10BFB000C91889B201236246FFF73DFA00280ED066 -:10BFC00001280ED002280AD0C349C44809F001F85C -:10BFD00061680868028EBA1A12B2002ADCDA66605A -:10BFE000F8BD60680068018E491C0186F0E7F8B56D -:10BFF000BB4D0026AA680128116A0C6810D00720E2 -:10C00000287006F05DF8B7480078F6F7AFFDA8682D -:10C010000683026861885186006820308675F8BD05 -:10C02000087913684100AB481F7D415A032F18D08F -:10C030001A7D022A22D01A7D012AE2D13F231B5DFC -:10C0400022895B00C05A0023401881B20120FFF70B -:10C05000F2F90028D5D0A1489F49B53008F0B9FFC2 -:10C06000CFE71E6112683F2396601B5D22895B004B -:10C07000C05A0023401881B20320E8E75822125B1F -:10C080001A613F231B5D22895B00C05A00234018C0 -:10C0900081B20220FFF7CFF9AA6801211268117559 -:10C0A000D7E738B58E4C0021A0680D46006842786D -:10C0B000002A01D045701FE00078002809D0012136 -:10C0C000684605F0E5FA684600788749000208F0FE -:10C0D0005DFEA0680268C0685268511806F03CFB1B -:10C0E0000146A068C160057102214172021D017FF5 -:10C0F000FFF757F9A068058305F0E2FF794800785B -:10C10000F6F734FD38BD10B50146754A0B0090684E -:10C1100009F050F8060D150408190C1C012100F057 -:10C12000A6F807E00021506800F0A1F810BD01203A -:10C13000FFF75DFF00210846FFF7ECF810BD00682F -:10C140000321017510BD00F0A5F810BD62496748D4 -:10C1500008F03FFF10BD70B5614C002809D00128E0 -:10C1600016D0022821D061485B49243008F031FF05 -:10C1700070BDFFF796FF00210846FFF7CBF8A068D7 -:10C18000807E002801D01F2000E00720207070BDB5 -:10C19000A068002501684D70FFF7F0F80320F6F75E -:10C1A00023FC05F08DFFA56070BDFFF77AFFA06846 -:10C1B000FFF7E4F800210846FFF7ACF80420F6F793 -:10C1C00013FC70BD46498968CA7E022A08D10A68F4 -:10C1D0001378002B04D150600968CA6A1018C8622D -:10C1E000704710B53E4A00290CD0012907D002291A -:10C1F00007D03E483849443008F0EBFE10BD401EE1 -:10C2000000E0401FD06010BD35488068002800D095 -:10C210000120704710B504460020002907D034489B -:10C2200008F0B4FD0146204608F0B0FD401C10BDEA -:10C2300010B52B488068C07E030008F0BBFF0414D3 -:10C2400014030A1401F0F2F800280BD022492948FF -:10C2500006E0FEF725FE002804D026481E49001DF2 -:10C2600008F0B7FE10BD23481B490B30F8E710B5A6 -:10C270000446002903D00020FFF7B9FE03E0194867 -:10C280000078F6F773FC2046FFF778F80020F6F701 -:10C29000ABFB10BD10B512488268106A11680068C7 -:10C2A000CB698B60134BC18B9B3359431368D960A7 -:10C2B0000146E0314B8883870C783B231C548B88E4 -:10C2C000C383CB88038409894184116802200875DF -:10C2D00010BD0000FC510100F4B600005A06000039 -:10C2E000D01800207C00002010270000B2070000BA -:10C2F00040420F0047040000F8B5FEF702FA064678 -:10C30000FEF770FAF94D07466879F94C002809D014 -:10C31000012823D0022826D003282ED0FF20F5A103 -:10C32000C63033E0F2481830FEF748FA002801D052 -:10C3300003200FE0EE481830FEF7ACF9002804D0D7 -:10C3400060696030007A002806D0E9481830FEF7AE -:10C3500008FA012068711BE00220FBE7E44818306E -:10C36000FEF7FFF914E0E2481830FEF793F90028D1 -:10C370000ED1FF20DFA1B83008E0DD481830FEF70D -:10C380001DFA002804D1FF20DAA1C03008F021FEF8 -:10C39000A169F722087810400870AA79D207120F15 -:10C3A0001043FB2210400870EA79D207520F104365 -:10C3B00008706B79EF22022B04D0012B07D0032BDE -:10C3C00007D00CE0012E06D8002F04D007E07F1E16 -:10C3D0003E43002E03D010401022104300E01040D6 -:10C3E0000870287C002811D0687901280ED0BF4839 -:10C3F0005438FDF786F8BD49606954397830A26930 -:10C40000FDF7E3FA0020FDF7EFFA04E00846FDF738 -:10C4100078F8FDF70CFBA0690078C00606D4E06947 -:10C420000078C00602D4E079002802D0A079002864 -:10C4300001D0012000E00320FCF747FF032020701B -:10C4400001202071F8BDAA4810B51C30FEF7DDF9B7 -:10C45000A74C002802D00020607004E0012060702A -:10C46000A2485438E061A148407C002802D060789E -:10C47000002805D0E069FDF744F8FDF7D8FA10BDB3 -:10C480009A485438FDF73DF8984A6069543AA0300C -:10C49000E169FDF79AFA0120FDF7A6FA10BD10B583 -:10C4A00093490022486932238276C27601221A54C7 -:10C4B0004030807C002803D00A700021022001E077 -:10C4C00000210320FFF71FFE10BD70B5884C607976 -:10C4D000C2062046416908464030002A01DA00229F -:10C4E00002E0028B4B89D2180B460283C0331A7EBE -:10C4F000002A03D0828B4D8952198283627A002AE6 -:10C5000003D03D2001F0C9F852E08A7E032A4FD0C3 -:10C51000227A002A13D0500701D4D00601D51E205C -:10C5200036E0100701D53D2032E0D00705D1900755 -:10C5300003D470A1734808F04CFD2A2028E0603134 -:10C540008A78002A05D0C28B551CC5830D88AA4263 -:10C550000FD25A7F062A02D01A7F062A05D1428BB3 -:10C56000531C438309888A4203D2828BC18A8A4240 -:10C5700001D322200CE0027C808A002A0FD00628FA -:10C580000FD35A48C07B012801D03E2000E008208C -:10C5900001F083F86069807E032809D001E08842B9 -:10C5A000F5D20120207000210846FFF7ACFD70BDD8 -:10C5B000FFF775FF70BD10B54C494D48CA7B002A86 -:10C5C0002BD0012A29D0022A27D0032A04D049A13E -:10C5D0004D4808F0FEFC10BD897B02290FD00729C9 -:10C5E0001BD0406901464031CA8A898A511A891E86 -:10C5F00089B2032900D30321028951180BE0406955 -:10C60000014640318A8A032A01D2018903E0428827 -:10C61000C98A5118491C818010BD4069F5E700B5F1 -:10C62000030008F0C7FD0604070B0F1212170029BC -:10C630000ED00FE0491E02290AD90BE0491F01293B -:10C6400006D907E0072903D004E00A390C2901D8EC -:10C65000012000BD002000BDFEB50546244818306D -:10C66000FEF78DF8002804D1274822A1CF3808F022 -:10C67000B0FC1F4CA069FDF703FC0321A069FDF786 -:10C680002DFCA069EF220178114001702946FDF7C9 -:10C6900069FC002601272B0008F08CFD0E5D5D086B -:10C6A0005D1D6161155D4D5D613D385D60697121A4 -:10C6B000095C002901D0062101E0C030417EA0695B -:10C6C000FDF71BFD4BE0E069FDF776FC0146A06934 -:10C6D000FDF784FD43E06169A069D031FDF747FDB6 -:10C6E0006169A0699531FDF750FD38E0C819002057 -:10C6F000900000207372635C6C6C5F736C61766594 -:10C700002E6300006B020000780800000621A0697B -:10C71000FDF760FD23E020690178A069FDF744FD85 -:10C7200020698188A069FDF741FD20694188A069E1 -:10C73000FDF740FD13E00096019660696030007CD3 -:10C74000002803D069460878384308706946A06914 -:10C75000FDF756FD03E0FE49FE4808F03AFCFEF7FF -:10C7600018F8002804D1FB48F949801D08F031FC75 -:10C770000C2D07D0072D04D060695E210E52603069 -:10C780008770FEBD606940304683FEBDF0B5F24C57 -:10C79000DC2061698DB0405C042809D0052834D1C3 -:10C7A0006031487A002829D001204874022026E010 -:10C7B0001022EA31684600F0A8FF61691022C831F2 -:10C7C00004A800F0A2FF684605F0BBF8616908AA5A -:10C7D0006CCA0F46CB6778378A670846FE608030A0 -:10C7E000BD60074620376CC7002303634363012005 -:10C7F000A0310876D9494874052000E00D20FFF7E4 -:10C800002BFF61690020C03108770DB0F0BDF8B58D -:10C81000D1481830FDF7B3FF002842D0CE4C207A23 -:10C8200000283ED160690025C030007ECB4E002834 -:10C830000BD0B17B0120FFF7F2FE002805D1B17BC0 -:10C840000420FFF7ECFE002806D060690127C03005 -:10C85000407F062807D00CE060695C210D526030F3 -:10C86000457402202FE0B17B0420FFF7D8FE00289A -:10C8700010D0B07B030008F09DFC173F3F3F3F1EE8 -:10C880003F3F3F3D3F203F3F3F292C3F3F3F3F3F02 -:10C890003F2F3F0060696A21095CC90702D0C030A0 -:10C8A0004577F8BD0C20FFF7D7FE60696030817ACC -:10C8B00039438172F8BD072005E0FDF7D0FF00285D -:10C8C000F8D075740B20FFF7C7FEF8BD00F02CFF01 -:10C8D000F8BDFFF75BFFF8BD606900218030816023 -:10C8E000C160057437740620FFF7B6FE60696030DA -:10C8F0008570F8BD0920E6E700F0D8FEF8BD70B5F8 -:10C90000964DA87B072834D1934CDE22606941887C -:10C91000125A491C91422CD1217A002929D1014671 -:10C92000E0318B88C28B934207D1CA88068CB24211 -:10C9300003D10A89468CB2420DD0884A8689303AA2 -:10C9400056819381CB88D3810989118201462E318A -:10C9500051600121117001221146FDF79FFC002159 -:10C960000420FFF7D0FB61690020C0314877A8732D -:10C97000E87370BD70B5794CA07B162803D074495C -:10C98000774808F026FB74480021426973486032FA -:10C99000117291703038067E0B250123002E06D0CF -:10C9A000027D002A12D14575817503750EE0567A15 -:10C9B000002E06D051722288828381760C22027664 -:10C9C00004E022888283817683770576A17370BD27 -:10C9D000F8B5614DA879800723D5287A002820D1A1 -:10C9E0005E4C0120A17BFFF71AFE002819D1A8692F -:10C9F0000127C0780026030008F0DCFB0E62620805 -:10CA0000622E3B4F0A62146220524562022021E0EE -:10CA1000A07B042804D052484D49333808F0D9FA95 -:10CA2000A673F8BDA07B082804D04D4848492D388E -:10CA300008F0CFFA686960308670F1E7A07B0A28B9 -:10CA400004D047484249263808F0C3FA6869603084 -:10CA500007720B20A073F8BDA07B0E2804D0AB207A -:10CA60003B49C00008F0B5FA6869603007720F20D2 -:10CA7000F0E7A07B0F2804D039483549183808F072 -:10CA8000A8FA1120E6E7A07B0F2804D034483049EB -:10CA9000123808F09EFA1320DCE7FFF76BFFF8BDB1 -:10CAA00069690846C0310A7F062A04D16030807A5D -:10CAB000800700D50E77487F0628F0D14E77F8BD65 -:10CAC000274823496E3008F084FAF8BD10B5234C8E -:10CAD0000020A17BFFF7A3FD002804D11E480122FE -:10CAE000017A114301720420A07310BD10B51A4CD5 -:10CAF00060690146C0314A7F002A06D0097F0629B5 -:10CB000003D0217A0122114321726030807A80079C -:10CB100015D4E069FDF752FB61696031C872E069C4 -:10CB2000FDF74EFB616960318881E069FDF74DFBDF -:10CB3000616902226031C881887A10438872606915 -:10CB400000220146C0310B7F062B00D10A7709E095 -:10CB5000F4C60000ED07000090000020C819002076 -:10CB6000770500006A231B5CDB0703D106234B77A4 -:10CB70004030428310BDF8B5FE48817B0020FFF7AE -:10CB80004EFDFD4C0126002807D160696030407AD7 -:10CB9000002802D1207A30432072616900255E208E -:10CBA000455262204654C831E069FDF7C8FA616910 -:10CBB000E0699131FDF7D2FA6169042208469131AA -:10CBC000B93008F069F8EB483038017E08270029B1 -:10CBD00006D0017D002912D14775857506750EE0D6 -:10CBE0006169054689894183E249E0691439FDF7A5 -:10CBF0008EFAE049E0690C39FDF796FA2F76DD48A8 -:10CC00000E218173F8BD70B5DA4D0020A97BFFF7C6 -:10CC100006FDD94C002803D1207A01210843207257 -:10CC2000E069FDF730FA00280ED0E069FDF726FA3A -:10CC30006169DE225052498800F0C1FD002806D00B -:10CC4000282000F02AFD70BDFFF740FF70BDE069AD -:10CC5000FDF70EFA6169E0310870E069FDF701FA4D -:10CC60006169E0314880E069FDF7E0F96169E03130 -:10CC70008880E069FDF7E3F96169E031C880E06927 -:10CC8000FDF7E6F96169E03108810720A87370BDFE -:10CC9000F8B5B94CA079C0076FD0207A00286CD1C4 -:10CCA000B44D0120A97BFFF7BAFC002853D1E069FD -:10CCB0000027C178022201260B0008F07BFA0D162E -:10CCC0001308354A4A384C474A1929444A00FDF7A7 -:10CCD00016FA6169DA225054AE735E204752603111 -:10CCE0008E7038E000F076FD35E0FFF78CFF32E023 -:10CCF000A97B0020FFF793FC002802D1207A304363 -:10CD0000207260695E210F52603086700A2018E040 -:10CD1000A87B0B2802D0207A104320722F74606900 -:10CD2000603046720C200CE0FFF725FF13E0A87B73 -:10CD3000112802D0207A1043207260696030877019 -:10CD40001620A87307E0FFF7D1FE04E000F00FFD06 -:10CD500001E0FFF7BBFEFDF76EFD002804D14F2078 -:10CD60008649000108F035F9606900238030016BC5 -:10CD7000426B491C5A4142630163F8BDF8B57D4FCF -:10CD8000012814D1787C002802D1387C002801D0F9 -:10CD9000FCF74DFEFCF7E0FBFCF7D3FB0020FCF7B3 -:10CDA00094FAFCF71EFBFCF760FBFCF7A5FBF87B95 -:10CDB00001260025704C00280FD16079C10705D0ED -:10CDC0000220F87360694030057402E0800717D5CF -:10CDD000FE7300210120FFF796F9F87B012802D0AD -:10CDE000022808D00CE06079C00709D00220F8734F -:10CDF0006069403005746079000701D50320F8733D -:10CE000000F018FDFFF703FD2079002801D03D81D7 -:10CE100002E03889401C38816079C007606904D01D -:10CE200072210D544030858203E04030818A491CD4 -:10CE30008182E079002806D061696031887C02280F -:10CE400006D8401C887460696030807C022804D950 -:10CE50003D817D81606960308574B97B0020FFF77A -:10CE6000DEFB002802D1B87B06284BD16069014661 -:10CE7000C0310A7F062A45D0497F062942D03D4964 -:10CE8000C97B03293ED16030807C00283AD1FDF770 -:10CE90002FFC002836D0FDF7A5FC002832D06169B0 -:10CEA000C88801282ED90A4640325674D08A978AFB -:10CEB000831E9F4201DB012002E0C01B401E80B2A6 -:10CEC0002C4B1F89A3899F4201D3012302E0DB1B66 -:10CED0005B1C9BB2984200D91846012800D15574BA -:10CEE0002A22525C002A11D0224A898D52898A4214 -:10CEF00001D3012102E0891A491C89B2884205D96F -:10CF0000084603E06169012040314D7461694A8837 -:10CF100010180881FFF74FFB6069122215490C3089 -:10CF200007F0BAFEFFF7D1FAFEF7E3FF00280AD0B8 -:10CF3000104810388179002905D161690246898934 -:10CF4000203A118586710C481C30FDF7BCFC002886 -:10CF50000FD0E06900788007800F012809D00228EF -:10CF600007D0FDF7D0FC002803D10449044808F09D -:10CF700030F807E0C819002090000020F4C6000037 -:10CF80007F030000606940308574F8BD70B5FE4CC9 -:10CF9000607900283CD0FD4D022810D1FDF789FBB7 -:10CFA000002803D1FA49FB4808F013F86A69002306 -:10CFB00080329068D168401C5941D1609060002651 -:10CFC00066712079012804D12671A87910210843BF -:10CFD000A871E078012816D1E670A87908210843E5 -:10CFE000A871FDF7F5FB002804D1EA48E84918309C -:10CFF00007F0EFFF6969002380318A68C868521C16 -:10D0000058418A60C860A079012802D00120A0712F -:10D0100070BDA67170BDF8B5DC4CDB4DE269002730 -:10D020001078042183079B0FE8790126012B11D08A -:10D03000022B0FD0032B01D0207A30E06178002939 -:10D0400005D1AE70A1793143A17123E0EF71F8BD34 -:10D05000EE71F8BD5278D3061CD060780028F8D164 -:10D06000D006C00E1B2818D8607908436071FDF700 -:10D07000E2FB002804D1C748C5494B3007F0A9FF9F -:10D08000606900238030026B416B521C594102637E -:10D090004163E8790128DBD1D8E7207A10210843E1 -:10D0A0002072F8BDF8B5B84D0446303D287D002704 -:10D0B00000280AD0002978D1677010202070687D80 -:10D0C000A070A87DE0702F756FE02878002814D03C -:10D0D00000296AD1072067702E462070083607E0C5 -:10D0E000686807802F700A223146A01C07F0D4FD23 -:10D0F00028780028F4D1A77057E0287EA24E143E6D -:10D10000002837D0002950D1297EA0480B0008F014 -:10D1100051F80D2C2C2C2C2C2C2C2C112C2C2008C8 -:10D120002C0067700C212170A97EA1704069808954 -:10D13000A08018E008216770217040690A46808944 -:10D14000914960801439201D07F0A6FD3089A08127 -:10D1500009E067700B212170A97EA1704069808968 -:10D16000A080A87FA0712F761FE089498A4807F028 -:10D1700030FF1AE0844810388279002A08D000294C -:10D1800013D1677011212170B189618087710CE022 -:10D19000827A002A0BD0002907D1677012212170F2 -:10D1A000318A6180718AA18087720120F8BD0020D8 -:10D1B000F8BD76480078012801D00C2070477249EC -:10D1C0000020303908700875087620318871704762 -:10D1D00070B56E4C064620780D46002804D093208A -:10D1E0006B49000107F0F5FE01202661E07225621F -:10D1F0002070FFF7DEFF002804D0674864494930FB -:10D2000007F0E7FE70BDF8B5604C2178012902D126 -:10D210002178012901D00C20F8BD01460546606146 -:10D2200012220C31584807F037FD01274035AF7402 -:10D23000554D2888FDF723FA002827D02888FDF7C8 -:10D24000D9FA002822D02888FDF78EFA00281DD0B0 -:10D250002888FDF7A8FA002818D0FCF742F9606981 -:10D260000026C088002825D048481830FDF787FAE6 -:10D2700000281FD06069C030007E00281AD0A97B2A -:10D280000120FFF7CCF9002802D013E01220F8BDEE -:10D29000A97B0420FFF7C3F900280BD16069014680 -:10D2A0004030868360314E740220FFF7D5F9606903 -:10D2B00040304674344830380078002806D1606920 -:10D2C000C18D008C814201D9A18102E06069008C8E -:10D2D000A08160694189491E8AB2298989182981FA -:10D2E000297B002902D06E812E7302E0698989189A -:10D2F0006981014640318B8A9B188B82C388012B40 -:10D3000001D85B1CC380002A01D060308674A87BE2 -:10D31000032816D0487C002815D02889A189884286 -:10D3200011D2FDF7E5F900280DD060692A21095CCA -:10D3300000290BD06989808D814207D3A670E770E0 -:10D340000CE0A7700AE0A670E67007E0688900218B -:10D35000401C6881A7700520FEF7D5FE6069512149 -:10D360000E54A97B052901D0062920D1DE2142884F -:10D37000095A511A09B2002919DB01460522E03188 -:10D380002430F3F721FF09E0C819002090000020A5 -:10D39000F4C6000039070000F10800000122022154 -:10D3A0006069FCF77BFF6069C0304677AE736069E7 -:10D3B0004189FDF728F8A07800282AD1606920303B -:10D3C000807A002800D06E810120FBF788FE60691A -:10D3D0003830FCF73EF860693430FBF751FF216AC2 -:10D3E00000200856FBF718FF0120FCF777F8FBF741 -:10D3F000D1FEFCF76FF80120FBF7B1FF6069406ECA -:10D40000FCF782F8FFF71FF860694030C07BFBF73C -:10D4100040FF6671E671A6712672A6726672267169 -:10D4200002202070FCF768F80020F8BD10B5F74C1A -:10D430002078022801D00C2010BDA078002803D04D -:10D440000020FFF79BFC17E0FCF74BF800F01DF9FC -:10D4500060692030007C012809D0FCF79FF8FBF7B9 -:10D460009EFEF3F7AEFFE07A012803D004E0FCF75C -:10D470009DF8F4E7F5F7CCFD002010BDE349C87234 -:10D48000704710B5E14C2078032803D0E049E1480B -:10D4900007F09FFDE04801218278002A06D0002293 -:10D4A00082700171A27904231A43A271A2691378D0 -:10D4B000DB439B0707D1C378002B04D1C170A0794F -:10D4C00002210843A0711078C00606D4E0690078F4 -:10D4D000C00602D4E07900280CD06078002809D179 -:10D4E000A079002806D1FEF7F2FC002802D0207AAD -:10D4F000002803D00120FFF741FC03E0FEF7A3FF63 -:10D5000000F0C3F82078012806D0F3F75AFFE07A3C -:10D51000012801D1FCF7DAF810BD38B5BB4C6069C1 -:10D520002030007C012820D1A07A00281DD1684637 -:10D53000FCF744F8002818D061693120405C0128CC -:10D5400010D1B54A0D236D460020D356285683428C -:10D5500008D050738989303A9185114620318873FB -:10D5600001208872A07A401CA07238BD70B5A74C0B -:10D5700006462078042804D0A648A549553007F06F -:10D5800028FD607910210843A34D6071002E47D01B -:10D59000FCF765FA61780126084300280ED1687C03 -:10D5A00000280BD0E0694178C90607D00078E979F6 -:10D5B0000007C00F884201D1667247E0E07800287A -:10D5C00009D0E0694178C90605D10078C00602D4C7 -:10D5D000FFF7A3FF3AE0FFF7A0FFE069A979007821 -:10D5E0004007C00F884205D0FFF7D0FC60790821C2 -:10D5F00008436071E069E97900780007C00F88424C -:10D6000001D1FFF708FD6079304360710020E071BF -:10D61000A079000702D5A87B022817D0207A13E052 -:10D62000022108436071E079401CC0B2E07101281A -:10D630000CD8687C00280DD0774854384078C10653 -:10D64000C90E052906D2C006002803D00120FFF725 -:10D6500095FB01E0FEF750FE2078012806D0F3F795 -:10D66000B0FEE07A012801D1FCF730F870BD10B5AA -:10D6700066480078042804D066486549B73007F04A -:10D68000A8FC0120FFF77AFB10BD10B50720FBF7BF -:10D690001CFE5E490420087010BD5C4933224969B4 -:10D6A00050545D4A032090738876704710B5574CEC -:10D6B0006069C030007F00281CD0062806D056487C -:10D6C000817B0020FEF7ABFF002813D06069014684 -:10D6D000C0310A7F130007F06DFD070D0D0D0D0D14 -:10D6E0000D050D006030807AC20704D0C04380076A -:10D6F00000D1087710BD0C20FEF7AEFF6069012253 -:10D700006030817A1143817210BD10B5002A0AD0B1 -:10D71000002306E0D41A6418203CE47FC4545B1C48 -:10D72000DBB29342F6D310BD10B503F0B0FF0C2866 -:10D730001CD3364C08216069D03003F0A9FF0028C3 -:10D7400006D060690421953003F0A2FF002803D1C0 -:10D750002F49324807F03DFC6169042208469531A3 -:10D76000BD3007F099FA0420FEF776FF10BD7CB5B6 -:10D77000294E0020B17BFEF752FF0125234C0028E3 -:10D7800002D1207A284320726946E069FCF73EFD09 -:10D79000684600780021C207D20F684602706069AF -:10D7A000002A02D06030057401E0603001746069C5 -:10D7B0005E221152603085700820B0737CBD401A23 -:10D7C000174900B2884201DC002801DC01207047C3 -:10D7D0000020704770B5104D0020A97BFEF71FFF99 -:10D7E0000A4C002803D1207A012108432072E06905 -:10D7F000FCF77EFC6169DE2250524988FFF7DFFFAB -:10D8000000280FD02820FFF748FF70BD90000020AF -:10D81000F4C60000330A0000C819002062060000A8 -:10D82000FE7F00006169E069E031FCF755FC0520EE -:10D83000A873EAE770B500F047F8384C384D6079C6 -:10D84000400709D5A97B0520FEF7E9FE002803D093 -:10D85000207A082108432072FFF71AFA00F012F824 -:10D86000FFF7B6F8A079C00609D5A87B030007F03A -:10D87000A1FC06060606060604060620A873FFF7A6 -:10D880003EF8C2E710B525488179490714D5017AD9 -:10D89000002911D12249897B0B0007F08BFC080D70 -:10D8A000050D0D0D0E0D100D4069002262210A5468 -:10D8B000C030807EFFF7F1FE10BD012100E00221A3 -:10D8C0004069C030417710BD10B51448817909070F -:10D8D0001DD5017A00291AD1114A947B230007F043 -:10D8E00069FC1416160B16161616161616161616AC -:10D8F0001616161616161716406960308170407C91 -:10D90000002801D0062000E01620FFF7C6FE10BD5B -:10D910004069603001728170917310BD90000020E9 -:10D92000C819002010B5031D03600020521E04E03A -:10D930005C181C60401C2346C0B29042F8DB0020FB -:10D94000186010BD01460A680020002A02D0104667 -:10D9500012680A60704702680A6001607047000040 -:10D9600000B51A2822D00ADC030007F023FC0D11B1 -:10D970001F131F1F191915171F1F1F1B1F002A28F0 -:10D9800014DD3A38030007F015FC030F11091100EC -:10D99000002000BD1E4800BD042000BD0D2000BDBC -:10D9A0000F2000BD082000BD112000BD032000BDD8 -:10D9B00010B50C46F4F784FF00281AD02046F4F77F -:10D9C00084F9002812D020780E280BD00F2809D017 -:10D9D000022807D0032805D00EA1772007F0F9FA16 -:10D9E000002010BDA078FFF7BBFF10BD09A17D206E -:10D9F000F4E708A18320F1E710B5F4F7EDF810BDC6 -:10DA000010B5F4F762F910BD10B5F4F744F910BD84 -:10DA1000023000007372635C686F73745F686369DF -:10DA20002E630000F0B597B00021032004F082F9C6 -:10DA30000025FE4E022775807574347C12E0F06874 -:10DA4000E1004018818800290CD0858069460F705C -:10DA50004D7001680291808869468880002168467F -:10DA6000F8F702FD2046641EE4B20028E7D117B0A3 -:10DA7000F0BDEE4BD86019741A80D3E7EB49EC4B3C -:10DA80004A8800201A4200D00120497C002901D098 -:10DA9000082108437047F7B504460E460078012177 -:10DAA000E34A8140521C114098B0E04A00915188ED -:10DAB000E04B994205D0009B002B05D0DC4B19426E -:10DAC00002D001201BB0F0BD009BD84A1943518001 -:10DAD0001A9D002D11D00020287022781A98002756 -:10DAE000401C130007F066FB10EF0D152137555D44 -:10DAF0006A39AFAB85B3EEEDECEF0B28EDD0042027 -:10DB0000E0E702212970A1880170090A4170032011 -:10DB100093E004212970A1880170090A4170E1880D -:10DB20008170090AC170052087E006212970A1884B -:10DB30000170090A4170E1888170090AC170218968 -:10DB40000171090A4171A289E81D216907F0A4F851 -:10DB5000A089C01D71E0082129702178082901D110 -:10DB600010212970A1880170090A4170E188817033 -:10DB7000090AC1700520308020466A1D01A90830BD -:10DB800003F0CFFB00287DD1694630880979401821 -:10DB900053E00A212970A1880170090A417003200D -:10DBA0000AE00C212970A1880170090A4170E188FE -:10DBB0008170090AC170052030809DE0A0888446EC -:10DBC0004000401C81B2308888425BD3052959D37C -:10DBD0000E202870002008E0A36842009B5A5219CA -:10DBE00053701B0A401C937080B26045F4D331809F -:10DBF000B6E08E49487C002873D0401E4874C8683F -:10DC000021790822C9004518A988286840180838D1 -:10DC1000A16807F041F802216846017100214171B5 -:10DC200028680390A98868460181002101A8F8F7B7 -:10DC30001BFC0020A880002E00D0308090E02978C6 -:10DC400080221143297029784022114329702978B4 -:10DC50008909890112312970A1880170090A41706E -:10DC6000E288E81CA16807F017F8E088C01C308043 -:10DC70002878410640D5C00972D00121684601715B -:10DC8000002100E02BE041713188ED1C091D01816C -:10DC90001A980390E08840190490001D634D059088 -:10DCA000297C68460176002101A8F8F7DDFB0746CC -:10DCB00030880C303080022F06D0002F50D060E02A -:10DCC0003CE032E01CE059E06946097EE868CA00A1 -:10DCD00080182A7C914202D28188002902D0042730 -:10DCE0004FE02EE0697C491C69741A990160318803 -:10DCF00081800020308044E04C48A188C1802FE022 -:10DD000029788909890116312970A1880170090AC9 -:10DD10004170E1888170090AC1702289681DE1683B -:10DD200006F0BAFF2089401D46E728788009800167 -:10DD3000183028702079687002207EE73B480A047A -:10DD400001D405271DE00289A3889A4201D0062745 -:10DD500017E01E222A70012249043280490C4180BA -:10DD6000009800280DD0314D0022288811468300EC -:10DD7000032003F03AFF2078287107E0002030806C -:10DD800003272A48009942888A434280384699E608 -:10DD9000F7B59AB002000C4606D0172A04D82348DB -:10DDA000244B4088984202D107201DB0F0BD237853 -:10DDB0005D0601D4DB0901D00820F6E700236D469B -:10DDC0002B706B701D462378611C9F06931E189361 -:10DDD000531E19939BB2169302AB1793134BBF0EAE -:10DDE000DE883B0007F0E6F9208511F15EF16BF16A -:10DDF000A3F1C6F1F2F1FBF1EEF1EDF1ECF1F1F18D -:10DE0000EBF1EAF1E9F1E8F185F1052A71D104229B -:10DE100069460A7005490A7969460A71E178A3786A -:10DE20000A021A436946CA80227905E0DC190020FB -:10DE3000FE710000FFFF00004A7061788906890EBC -:10DE40000C2923D009DC891E0B0007F0B3F9091354 -:10DE500052155219521B521D520012291CD004DCBB -:10DE60000E2915D01029D1D114E0162916D0182961 -:10DE7000CCD115E0800700E04007002839DA2AE11C -:10DE80000007FAE7C006F8E78006F6E74006F4E781 -:10DE90000006F2E7C005F0E7C004EEE78004ECE717 -:10DEA0004004EAE7800724D5032AAFD105206A465B -:10DEB0001070487809780002084390800BE1400711 -:10DEC000F1D5062A15D31898617880B2012902D0BD -:10DED00002299BD101E0022700E0102706226946B3 -:10DEE0000A7000228A8001AEA11C0236BA1C179269 -:10DEF00018E0B6E04A780B7812021A433280801E8E -:10DF0000891C1890B21C1691384603F0E4F9169952 -:10DF100018986B469A88C919C01BB61D521C9A8066 -:10DF2000179A80B28242E5D900289CD1D3E000073D -:10DF3000B9D51998694682B20720087000208880F8 -:10DF4000601C891D11E0437806781B0233430B8067 -:10DF5000C37886781B0233434B806E46121FB3880A -:10DF6000001D091D5B1C92B2B380042AEBD2002A6B -:10DF700077D1B0E0C00674D5022A72D31898082170 -:10DF800082B2684601700021C18063780371A01CD1 -:10DF900017990EE04678077836023E430E80861CBD -:10DFA0004E606F46D21AFE88C0180831761C92B2B5 -:10DFB000FE809342EED9DAE76FE076E065E051E06B -:10DFC00046E01EE014E00AE000E0A0E0800648D54C -:10DFD00009206A46107096801698D0800FE040069F -:10DFE0003FD50A22684602708680169AC28006E0F3 -:10DFF000000636D50B206A46107016989080029164 -:10E0000069E0C0052DD5022A7FD318980C2182B271 -:10E01000684601700021C18063780371A01C1799C4 -:10E0200013E04678077836023E430E80C67887783C -:10E0300036023E434E80061D4E606F46D21AFE8861 -:10E04000C0180831761C92B2FE809342E9D98EE75F -:10E05000C0045AD5012A58D10D2168460170868026 -:10E0600039E052E0800450D5052A4ED30E2368468D -:10E0700003708680C8788B78010219436846C18096 -:10E08000521F0281601D039025E040043DD5012A06 -:10E090003BD10F20694608701DE0030435D44B784E -:10E0A0000E781B023343244E3381032A2DD31B2FBA -:10E0B00027D011236E46337001261F4BF6033043E1 -:10E0C000588048780B780102194368468180D21E37 -:10E0D000C280E01C029020788006800E1B280AD0A7 -:10E0E0001D2808D00021032003F024FE1248418897 -:10E0F000C90BC903418068461C99F8F7B5F9284651 -:10E1000053E610206B461870DBE70725F7E7082574 -:10E11000F5E700B50022D243074997B04A800328AB -:10E1200007D1032268460270097901710021F8F7CE -:10E130009BF917B000BD0000DC190020FFB589B0C5 -:10E140000020019009981027FE4C1E46154608280D -:10E1500006D0E06901F05EF8002809D03770BEE013 -:10E16000288809213843108013980227017016E08F -:10E17000E169012088710521E269C9029180E169A4 -:10E180008872E169F0480881E16900208873288875 -:10E190002021084328801121139804270170139827 -:10E1A0000225801C0290307806900A203070E548E5 -:10E1B0001830049001F022FA0020059020462C30FF -:10E1C00003906DE00998102808D1022D06D001991E -:10E1D0000298A28D401A8270110AC170E08D0A99CE -:10E1E000884202D901F0CDF806E0884204D10698B1 -:10E1F000002801D030701CE00298E18D0170090AFE -:10E20000417012980088401BC01B82B2FF20C01BC7 -:10E21000904200D2024607A8009002980021C3193C -:10E22000E08D01F056FA3070002805D0C0B2832886 -:10E2300058D0E08D20833EE00598002804D0206C63 -:10E2400000790A282CD336E06846808BC119C9B200 -:10E250000191022D0DD01399019A4978914202D172 -:10E26000228F824208D00191206C0178032908D0C6 -:10E2700023E0084613994870206C0178042906D0E1 -:10E2800007E000790A2818D20120059008E0E18D06 -:10E29000818002990198081802900198281885B287 -:10E2A0000399049801F0ADF9002804D11298008870 -:10E2B000401BB84286DA022D0DD00998102806D1ED -:10E2C00002990198A28D081A8270110AC1701298E1 -:10E2D000058000203070206C0078032802D00020D8 -:10E2E0000DB0F0BD0220FBE7F8B5964A0026126D8E -:10E2F000002A2ED0401F934D84B24035E88A234631 -:10E300000833AF8AC318BB4222D88B784F781B02E0 -:10E3100010183B4303701B0A43700B79CF781A0225 -:10E320003A438270120AC2700471220A4271224674 -:10E33000491D801D06F0B0FCE88AA41D001980B2BA -:10E340008049E882096D002208180270427000E0DE -:10E3500009263046F8BD30B57A4B028840339B8A97 -:10E36000934213D9774B1C6DA3185C781D78240257 -:10E370002C430BD05C791D7924022C436404640C7B -:10E38000A41D1219028000200B6030BD822030BD18 -:10E39000F0B585B0074600266846068155E001982D -:10E3A000417802780D021543417902790802104341 -:10E3B00000044AD43D8003A80023012200905202A9 -:10E3C0001946284601F085F9040044D168460189C0 -:10E3D0000182019841790279090211434378027858 -:10E3E0001C021443AC421CD10A041AD44A04012171 -:10E3F000520C89030A430096C178807809020143D0 -:10E400000023204600F0C1FF040010D10199487993 -:10E410000A79000210430122D20310430871000A56 -:10E42000487101A904A8FFF796FF0400D1D0019913 -:10E4300000964878097800020843694600238A89D3 -:10E44000194600F0A2FF822C05D101A902A8FFF70E -:10E4500082FF0400A3D06846068109E0019948794B -:10E460000A79000210434004400C0871000A487108 -:10E4700001A902A8FFF76FFF0028EFD0822C02D07D -:10E48000204605B0F0BD0020FBE7F7B584B0144688 -:10E490000646002700F071FF2A480025006D00287D -:10E4A0002FD0059801282CD12046FFF771FF0700D7 -:10E4B00027D1002E29D06846058118E001994878B7 -:10E4C0000978000208432080019B0095587919794A -:10E4D0000202D8780A4301029F78587839431F789E -:10E4E00000029B1D384300F050FF002805D101A910 -:10E4F00002A8FFF730FF0028E0D0822800D10020DA -:10E500000746002E01D00F48056500F03AFF384657 -:10E5100007B0F0BDF0B597B00021042003F00AFC6D -:10E52000084F00243D467C8040356C73AC73287BDB -:10E53000B96CC00008380E18B08800280DD0012032 -:10E54000694603E0F01900200128000008703068D7 -:10E55000019000216846F9F78EFAB4803C65AC82E0 -:10E56000EC8217B0F0BDFE4B986418464030017342 -:10E570001A803838D861CDE7F949002049880A0760 -:10E5800000D501200A06120F01D002221043CA054D -:10E5900001D5042210438A0501D5102210434905F4 -:10E5A00001D520210843EE494031497B002901D0A3 -:10E5B000082108437047FFB5A7B004002898164605 -:10E5C0001B9022D00178E6484D06428822920246EE -:10E5D00040320092002D14DB8A06920E1E2A0ED0C5 -:10E5E000229A5205520E10D13288172A0DD3009A62 -:10E5F000927B002A09D1DB4D229AAA4205D0CA0992 -:10E6000006D08A06920E122A02D003202BB0F0BD4B -:10E61000D348826C0098007B2590C0000838101801 -:10E620001F9048060CD40098407B002808D0009921 -:10E6300088731F99289808601F9884800220E5E756 -:10E64000002718A90F7069460F72C54902AA0A640B -:10E65000309A4A6410A90F850F861B981D460078D2 -:10E6600020908106BE4B601F24901A462C322192C6 -:10E670002898DA691833890E1E93401C0B0006F0A7 -:10E6800099FD1FFDFD11FD1AFD90FDFCFDFBFDFA3E -:10E69000FDF9FDFCFDF8FDFDFDF7FDF6FDFDFDFDC1 -:10E6A000FDF5FD00032C7BD10320287017226A7032 -:10E6B0000022AA70E0E2052CF5D141780278090227 -:10E6C0001143A74B10AA19831185C27880781202D2 -:10E6D00002435A8300297DD091427BD800211846FD -:10E6E00081720181491E01841E9800F087FF052078 -:10E6F0002870A81C1D900220009021991E9800F0FF -:10E7000080FF002803D047E018A90870F0E2944881 -:10E710002030807C012803D002206870102002E0A5 -:10E7200001206870022022908D4830302390002212 -:10E7300020A9239802F0F5FD00282AD120A800780E -:10E740002299814225D132880099801C511A814238 -:10E750001FDB83481D99C08D0870000A48701D9802 -:10E7600020A9801C1D9000981D9A801C0090239861 -:10E7700002F0D7FD20A909781D9840181D90009837 -:10E78000401880B2009021991E9800F03AFF0028AE -:10E79000CDD0009802288DD10A2018A908706CE20B -:10E7A0006DE0072C6BD341780378090219436C4B59 -:10E7B0008446198310AB1985C37880781B021843EF -:10E7C000674B0029588305D0814203D801211846A0 -:10E7D000817200E0A4E061464B7909791B020B438A -:10E7E000038100218173104600F014FD00280FD131 -:10E7F0005B480121C26991710522C369D2029A80E6 -:10E80000C2699172C26958491181C069002181733E -:10E810005349E01F08841B98C01D48621E9800F0F1 -:10E82000EDFE07202870681C009001201D904C48C8 -:10E830000021C18530E01D98012815D04848C169E4 -:10E84000897901292FD000981038C17B807B09027B -:10E85000014300980170090A41700098801C0090E3 -:10E860001D98801C80B21D903D4809E013E2BEE176 -:10E870007AE1D8E00DE2A0E080E03BE01EE2B6E005 -:10E88000C18D00980170090A41700098801C0090A9 -:10E890001D98801C80B21D9021991E9800F0B1FE39 -:10E8A000002802D006E0818DD3E731881D98081A30 -:10E8B0000428C0DA1D98012800D16DE72848C169F5 -:10E8C0008979012903D0828D26498A4205D1818D1B -:10E8D00000980170090A417009E000981038C17B66 -:10E8E000827B0802009910430870000A48701D9846 -:10E8F000801CC1E1072C01D0152C78D14178037818 -:10E9000009021943164B198310AB1985C378807817 -:10E910001B02034312480029438301D0994201D9C5 -:10E920000120F1E60E4801218172002101818173ED -:10E93000052C07D024981B99C0B2491D02F0CBFCCE -:10E940000028BAD100200649C04308841B980096CD -:10E950000195007818AB8006800E1CAA002105E006 -:10E96000F0190020FFFF000001280000FFF7E6FB80 -:10E970000746FE4810A9008B08857EE1032CBCD118 -:10E98000402210A90A86417802780802F74910430C -:10E99000088310A9088520A9009131886B1C491EA5 -:10E9A0008AB2002100F095FE18A90870002830D125 -:10E9B0000B20287020A8008833E0052C9DD18021F1 -:10E9C00010AB1986014640780B780202E7481A43DB -:10E9D0000283CB7889781B021943E44B10461984D3 -:10E9E00010AB1A85E24A914202D307208CE697E0E9 -:10E9F0003F23DE4A9B021943118421AA00923288E8 -:10EA00006B1C521E92B200F064FE18A90870002818 -:10EA100003D08328B1D102272FE10D20287020A830 -:10EA20008088401C28E120990C22C9095143C91C47 -:10EA30001E91A14204D92098400671D500201BE107 -:10EA4000417800780902014310A801851B980078DD -:10EA500042062898C01C1D90002A62DA05206A46EA -:10EA600010721B980078C00944D0082268460272D0 -:10EA70008181A01A87B268468782289806901E98DE -:10EA8000201A81B26846C1811D980490401806F092 -:10EA900064F9079006982599C0190890491E08A89E -:10EAA000017102A83099F8F7E6FF07460021684691 -:10EAB0000172002F1BD0022F18D1009808A9007BEB -:10EAC0000979401E884210DDA848289A836CC90045 -:10EAD0005A50816C08A80079C000001D0C520098A3 -:10EAE0000099407B401C4873C7E00527EAE00620F8 -:10EAF00069460872002000901E980021201A20907C -:10EB000082B21B9B10A8DB1C008D00F03EFC01466E -:10EB100018A80170002268460272832903D003E01E -:10EB200093E00720E4E702271B98007840060ED503 -:10EB30008E484188C90506D510AA018B128D9142D5 -:10EB400001D100214162002018A9087094E0FF2142 -:10EB5000013110A80186018D844801832099018428 -:10EB60001D994162132085E0052C6ED3417803780E -:10EB70000A021A4310A90A859446092269460A72B4 -:10EB80000021009101222499D20311438AB2C17855 -:10EB9000807809021B9B01435B1D604600F0F5FB7A -:10EBA00018A90870002269460A720122520210A9AF -:10EBB0000A86832802D0002805D099E06B48098D89 -:10EBC000018302277EE06948006D002807D02046B7 -:10EBD0001B99FFF789FB18A9087000284DD12B4617 -:10EBE000324620461B9900F024FB074645E01B985F -:10EBF000022C4078009064D1002801D0012860D117 -:10EC00000A2168460172009901731AAA002000992E -:10EC1000FFF73BFC0146684641730021817302A85F -:10EC20003099F8F728FF0746002168460172012154 -:10EC3000890210A80186022F08D04C48006C807908 -:10EC4000002807D018A9087020E04BE04749009839 -:10EC5000088337E0002F03D0812018A9087031E025 -:10EC60001AAA01200099FFF710FC18A908700028C3 -:10EC700003D119202870012030806846007A0028CE -:10EC800004D002A83099F8F7F6FE0746002F2BD0E3 -:10EC900018E0062038E522993448090711D5012CDF -:10ECA0000FD10B2269460A72C08888810021042096 -:10ECB00003F040F8082010A90886BFE62098400617 -:10ECC00010D50327294810AA4188128E114341808C -:10ECD0005005400E04D01F99289808601F98848022 -:10ECE000384693E404200FE518A8007800280ED0D9 -:10ECF000012028701B980078687010A8008DA870FB -:10ED0000000AE87018A8007828710520308017489C -:10ED100010AA4188128E91434180E1E7FFB5064673 -:10ED20009FB000201B903178012088401149124A81 -:10ED3000084010A908860D494988914203D000284F -:10ED400004D0080702D5012023B0F0BD219D002783 -:10ED50002F7020983C46018810A8018418A80771DC -:10ED600000F00BFB6846077202A907E0F0190020CB -:10ED70000102000009F80000FFFF0000FA480164EA -:10ED800001464031826C1A91097BC9000839571835 -:10ED900022994164307801282AD0022809D003281A -:10EDA00079D12878800980011D302870EE48B1881B -:10EDB000C1803078022804D12878800980011B3076 -:10EDC000287001A8009010A8008CEB1CC01E82B215 -:10EDD000B088002100F07DFC0028E1D1B188697085 -:10EDE000090AA9706946888810A9C01C08842DE109 -:10EDF000717918A801713079012802D00228CFD189 -:10EE0000E6E0D9487F2340881B010246184010AB3A -:10EE10001886802840D006DC102810D020280ED07C -:10EE200040280AD120E0FF38013859D0FF38013896 -:10EE30006AD0FF38FF3802387ED0052491E0D00632 -:10EE400001D5082000E010201B90042069460872BC -:10EE50000020888118A800900195318919AB1CAA5F -:10EE60001B98FFF76BF977E0BF4B3289188B824212 -:10EE70004FD10A221B92002973D101A9009110A938 -:10EE8000098C6B1C491E8AB2002100F022FC18A9D3 -:10EE900008710B2017E0F6E0B34B3289188B8242E1 -:10EEA00037D10C221B9200295BD101A9009110A936 -:10EEB000098C491E8AB21946098C6B1C00F009FCAA -:10EEC00018A908710D2028706946888810A9401C6F -:10EED0000884042069460872A348008B888140E0BA -:10EEE000A14A3389108B834213D112231B9300292B -:10EEF00037D1536A002B05D00091128C00F045FAEF -:10EF000018A9087113205EE097483289038B9A4252 -:10EF100001D00424E7E016221B92026D002A09D1D9 -:10EF2000F268002A06D002651A98328A82821A9AFA -:10EF30000020D082002900E02FE012D1B888396883 -:10EF4000FFF7D2F918A9087100280AD1B8882B4612 -:10EF500018AA396800F06DF90446022818D0042C6C -:10EF600016D0B88800280FD06846007A002804D050 -:10EF700002A82299F8F77FFD04460120694608722D -:10EF8000386803900020B880002C5FD0052C7BD01F -:10EF90006846007A032873D0A5E018201B9000294A -:10EFA00005D071483189018300210165D9E76E4898 -:10EFB0000246017E18320120FFF767FA18A908718E -:10EFC0000028CED119202870012010A90884C8E794 -:10EFD0001A98407B002856D0307AC0001358001D84 -:10EFE0000193105A1D9000291AD100F0CAF9062089 -:10EFF00069460872002000901D980F3882B201986F -:10F000008178437808021843019B0021DB1C00F043 -:10F01000BCF918A90871002269460A72832830D009 -:10F02000002118A8017110A801840121684601720D -:10F03000019803901A981A99407B401E48731A98B9 -:10F04000807B002802D01A99401E887310A8008E79 -:10F050007F21090102468A431DD0434800220088CF -:10F0600011468300042002F0C0FD3F483178017151 -:10F0700010A94088098E08433B4948800FE003E00F -:10F080002BE002242FE00524374810AA4188128E75 -:10F090009143418027E034494A8882434A80684648 -:10F0A000007A002805D03048416C02A8F8F7E3FC4C -:10F0B000044618A80079002815D01B986870012014 -:10F0C00028702948008BA870000AE87018A80079F9 -:10F0D0002871052110A8018405E02348416C02A88D -:10F0E000F8F7C9FC044600F04CF91F484088400579 -:10F0F000400E20D11A98807B00281CD1B8880028A7 -:10F1000019D0209910AA0988118422990091396890 -:10F1100018AA219BFFF74FFA044602280BD00120C2 -:10F12000694608723868039002A82299F8F7A3FC90 -:10F1300004460020B88010A8018C20980180204649 -:10F1400002E600B50022D243074997B04A8004285E -:10F1500007D1022268460270097901710021F8F78F -:10F160008AFC17B000BD0000F019002010B5394C22 -:10F1700003780022216C012B02D0022B44D126E01F -:10F180000B78002B01D0042B03D10A71226C0321D0 -:10F190001170216C83880A79D200921D8B52216CE8 -:10F1A0000A79D20008328918C2880A80216C038942 -:10F1B0000A79D2000A328B524289206C0179C90047 -:10F1C0000C314252216C0879401C087120E00A740D -:10F1D000226C81889180216CC288CA80226C01894E -:10F1E0001181226C41895181216CC068C860616CB9 -:10F1F000206CF8F740FC0146022807D0206C007C08 -:10F20000002802D1002903D0812010BD832010BD29 -:10F21000002010BD8178012909D100880521C9028B -:10F22000884202D0491C884201D100207047052045 -:10F23000704710B51488844201D2052010BD1724F0 -:10F240001C701080421E491C581C05F025FD002032 -:10F2500010BD0000F019002010B58B78002B11D0E4 -:10F2600082789A4207D10B88002B0BD003E0091D4E -:10F270008B78002B08D08B789A42F8D103880C88C1 -:10F28000A342F4D1002010BD812010BD10B500298B -:10F2900002D001290DD102E00088000501E00088BC -:10F2A0008004800F07D001281CD0022809D0032831 -:10F2B00010D0812010BD002901D0032010BD0220F4 -:10F2C00010BDF5F7EEFD03280CD004280AD0002865 -:10F2D00006D009E0F5F7E5FD042803D0022803D0A5 -:10F2E000052010BD002010BD0F2010BDF3B5C81CB7 -:10F2F00080080E46800081B0B04201D08620FEBD5D -:10F30000FE4C354626600198A08000202081E080D8 -:10F3100014E0B807A978800D0843F94905F036FDD7 -:10F32000E088401CE080B80607D42089401880B2ED -:10F3300020810199081A8019A8600C352F88780758 -:10F34000E7D40020A072FEBDEC480C22C1880089E1 -:10F350005143081880B2704770B51346E74A451804 -:10F360009488AC4201D2842070BD126810180A46FD -:10F37000194605F091FC002070BDE049012088721B -:10F380007047DE49002088727047FFB589B0970446 -:10F390000E460546BF0C029200F034FA040021D05C -:10F3A000002069460873D548807A012812D00121CF -:10F3B0002046FFF76BFF002815D12078400609D5BD -:10F3C0000221684601730582218841828682C782B4 -:10F3D0000C9806900298000407D500273E460125A8 -:10F3E00001970CE001200DB0F0BD2078A1788007D6 -:10F3F000800D0843C249019005F0C8FC0D460298F3 -:10F4000040040AD50198A84207D12088E1788005F8 -:10F41000800F00020843B04201D3AE4201D9072059 -:10F42000E1E7B81980B20290A84201D90D20DAE7CD -:10F430006846007B002804D003A8F8F718FB0028D2 -:10F44000D1D10198A8420BD1208803210902884319 -:10F4500002998905890F0902084320800298E0700B -:10F460001298002800D007800C9800280CD0207833 -:10F47000000609D4A0683A4680190C9905F00CFCE6 -:10F4800020881021884320800020ACE7FFB59B4DE9 -:10F4900081B00E46E8882F680C21009048433C1844 -:10F4A0009749039805F072FC0A462889E11B8446B7 -:10F4B0000C314018318880B28B0601D5002300E062 -:10F4C00013461818AB8880B2834202D8842005B056 -:10F4D000F0BD0098894D401C80B2E88021800D99D4 -:10F4E000002900D00C600399A170E2702188039D6F -:10F4F0008908AD058900AD0F294303252D02A943D5 -:10F500009505AD0F2D0229430425294321800C992F -:10F51000002900D0088001998978A1710199098892 -:10F52000A1803178890601D50B9905E073496244C1 -:10F5300092B20A81991AC919A16000212173327807 -:10F54000920601D50020C2E700910B9B0A9A04990C -:10F55000FFF71BFFBBE7FEB5044600F053F90700B9 -:10F5600008D0664D641EE8880190A6B2286834462B -:10F57000009015E00120FEBD0C2000996043095A5F -:10F580008A060BD489078A0D0099801C085C5C49A7 -:10F59000104305F0FBFB2889401A2881641CA4B2A3 -:10F5A0000198A042E8D8EE8000203870FEBD002807 -:10F5B00003D0401E0880002070470120704710B51E -:10F5C0004E490288CB889A4201D3822010BD0B6835 -:10F5D0000C21514359180B88CC789B059B0F1B02BB -:10F5E000234341608C7904738C884481C38189688A -:10F5F000521C016102800281002010BD01210182A4 -:10F600007047FEB505460020C043088068680F4675 -:10F6100081786846817068680188684601800021A9 -:10F620008171288A2C88A04200D304462C8234E0C1 -:10F63000288A401C2882301D6968FFF70DFE0028CB -:10F6400029D139882F48814201D1601E38806888CD -:10F65000A04227D33088F1788005800F000208434C -:10F6600002906946301DFFF7F7FD002813D1298964 -:10F67000244881421AD000213046FFF707FE0028B7 -:10F6800009D12A890298824205D1E968B06805F05B -:10F69000D6FA00280AD0641CA4B2204600F0B2F8C2 -:10F6A0000600C5D1641E2C828220FEBD7C80B0790C -:10F6B000B871B088B8803088388130788007810D83 -:10F6C000B078014379810298B881B0683861002030 -:10F6D000FEBDFFB585B014460F46059800F092F8C0 -:10F6E000050037D00548BE05807AB60D01281CD02C -:10F6F00000212846FFF7CAFD002805E0481A00202F -:10F7000001020000FFFF000022D1287840060CD53E -:10F71000012168460170059981802988C180068190 -:10F720004481F8F7A4F9002812D12888AA78810723 -:10F73000890D11438005800FEA7800021043BE4214 -:10F740000AD0374A914207D3611E814204DD0B2063 -:10F7500009B0F0BD0120FBE7864201D90720F7E799 -:10F76000801B82B2A24200D922460E98002800D007 -:10F7700002800898002804D0A8688119089805F02C -:10F780008BFA0020E4E770B514460D4600F03AF815 -:10F7900000280DD001882980002C0DD001788078B8 -:10F7A0008907890D01431E48814203D2012002E0EE -:10F7B000012070BD00202070002070BD70B516467D -:10F7C0000D4600F01FF804000DD02D882580FF2E77 -:10F7D00016D0A807A178800D0843114905F0D6FA84 -:10F7E000002E06D101E0012070BDFF31FF31033151 -:10F7F00089B2A170A80880008905890F084320807C -:10F80000002070BD0749CA88824207D3002805D06E -:10F810000C22096850430C380818704700207047C4 -:10F8200001020000481A0020F0B585B00E460546DA -:10F830000020694608707078FE49C00003900C589B -:10F84000FD4F002D0ED0022D73D0002C72D02078E9 -:10F85000801E030005F0AEFC09837F7F7F83797FE4 -:10F8600077727F00002C03D1F4A16B2005F0B1FB6F -:10F870002078801E030005F09DFC09065E5E5E197F -:10F88000365E50545E003078062803D0EBA1762017 -:10F8900005F09FFBB8687168806C032205F0FCF9E5 -:10F8A000012069460870002835D1CEE730780C2851 -:10F8B00003D0E2A1812005F08CFBE06800780028ED -:10F8C00006D0B8687168806B102205F0E5F928E071 -:10F8D000B8681021006B05F03CFAB868816A006BCB -:10F8E0000A787168F1E730780D2803D0D3A194200D -:10F8F00005F06FFB04206946087071684878097844 -:10F9000000020843B9684A6A517812780902114323 -:10F91000484069468880084608E0C8A1AF2005F045 -:10F9200058FB6846007800288FD06846F5F7BEFA85 -:10F930008BE727E01CE0C1A1B420F0E7B86861695B -:10F94000006CFEF708F8A16900E0E168B868006C97 -:10F95000FEF701F803E0B9A1E32005F03AFBB8682F -:10F960002146006CFDF7F7FFB24A03990020505082 -:10F97000022D07D0002D05D0012D03D0AFA1EF201F -:10F9800005F027FB05B0F0BD10B501780124012971 -:10F9900002D0022910D112E04268A74800218260FB -:10F9A0000170A4486C38C166016741678167D289DC -:10F9B00002214C3001F0E1F90024204610BDFF2067 -:10F9C0009EA1163005F005FBF7E7F0B505469EA1B0 -:10F9D00003C997B014911390002008A908759549A0 -:10F9E0002A781031944C0491217805910126914F89 -:10F9F000A168130005F0DEFB0CEF07309AF0EDEC88 -:10FA0000EBEAE9E9E8EF20700124FF264F360546CE -:10FA100010A80570457001F0C1F90746012803D010 -:10FA200086A1304605F0D5FA10A93846FFF7FCFE4E -:10FA30002046641EE4B20028EAD10A206946087014 -:10FA40006846029501F088FA002803D0FF207BA1C8 -:10FA5000583068E0002646E3C86A0078C0072FD017 -:10FA6000012069460870684601F076FA002804D043 -:10FA7000FF2072A16B3005F0ACFAA068006CFDF7B6 -:10FA800061FF050004D1FF206CA16E3005F0A1FAE2 -:10FA900008984078C0003D5006202870A068016892 -:10FAA00069600069A8606448C01CE860284601F0ED -:10FAB00053FA022804D0FF2060A1783005F089FABB -:10FAC000A068C06A00784007C4D501206946087064 -:10FAD000684601F041FA002804D0FF2057A1803089 -:10FAE00005F077FAA068006CFDF72CFF050004D143 -:10FAF000FF2052A1833005F06CFA08984078C000CE -:10FB00003D5006202870A068016869600069A860FF -:10FB10004948401DE860284601F01EFA022899D0A5 -:10FB2000FF2046A18D3005F054FA93E7A96800291B -:10FB300033D0694608712979012932D0022904D0CD -:10FB4000FF203EA1A73005F044FA3A4810221030B9 -:10FB5000A96805F0A1F837481030364920314860CF -:10FB60002078C1062CD5EF2108402070032069467B -:10FB70000870304810300290684601F00FF90446D2 -:10FB8000022808D0002C06D0012C04D0FF202BA185 -:10FB9000B83005F01EFA69466FE101216A4611711D -:10FBA000DBE7244A04996C3AD06748608860C860F3 -:10FBB0000621A86803F0FCFE1E4910310860CAE760 -:10FBC00020210843207045E7A1E15AE119E1E6E070 -:10FBD00086E056E000E081E2886C407980090128E7 -:10FBE00004D0FF2015A1CC3005F0F3F9A068017A0C -:10FBF000002906D1416B406801F01FFAA16801207D -:10FC00000872012069460870684601F0A5F90028CD -:10FC100004D0FF2009A1D73005F0DBF9A068006C03 -:10FC2000FDF790FE050004D1FF2004A1DA3005F0B5 -:10FC3000D0F90DE0C01A0020B40000207372635C9C -:10FC4000736D2E630000000004411A8800A4800038 -:10FC500008984078C0003D5002202870A068416B91 -:10FC60006960806CC01CA860284601F075F904002A -:10FC700004D0FF20FD49E23005F0ABF929462831D8 -:10FC8000FBE0172268460272012202708078820827 -:10FC9000287992008007800F024368468270FB201B -:10FCA000024028794007C00F8000024368468270F6 -:10FCB000EA8882804A6C02A901F090F9002804D0F9 -:10FCC000FF20EA49F73005F084F9052108A80175FD -:10FCD0006846017A0187A0680026406C0F9006E212 -:10FCE000012069460870684601F036F9002803D003 -:10FCF000DE49DF4805F06DF9A068006CFDF722FED3 -:10FD0000060004D18320D949800005F062F9A0687B -:10FD1000006CFDF717FE1290002804D1D448D34997 -:10FD2000801D05F056F9D3488068006CFDF70AFE87 -:10FD3000040004D1CE48CD49093005F04AF90898AD -:10FD40004078C0003E500A203070287A30716868D0 -:10FD5000C84DB060A868406C3061172030731298AD -:10FD6000B4617061304601F0F7F80446022808D00B -:10FD7000002C06D0012C04D01120BC49400105F014 -:10FD800028F92046316AFFF74FFD28780521014008 -:10FD9000042900D05EE6FB21084028702AE005987F -:10FDA00040084000207082071CD5FD2210402070C2 -:10FDB0000F206A46107017201071486C0290684638 -:10FDC00000F0ECFF0546022808D0002D06D0012DDA -:10FDD00004D0A748A5493A3005F0FBF86946284603 -:10FDE000FFF722FD2078052101400429D2D1FB2113 -:10FDF00008402070072008A908759E48807808767A -:10FE000028E6012069460870684601F0A5F8002838 -:10FE100004D097489549543005F0DBF8A068006C91 -:10FE2000FDF790FD060004D113209049400105F034 -:10FE3000D0F890488068006CFDF784FD040004D180 -:10FE40008B488A495A3005F0C4F808984078C000B9 -:10FE50003E5007203070874880684068706068684E -:10FE6000F460B060304601F077F8040004D08048B8 -:10FE70007E49653005F0ADF8316A2046FFF7D4FCC5 -:10FE8000E8E5012069460870684601F065F8002839 -:10FE900004D0774875497A3005F09BF80898407887 -:10FEA0001190A068006CFDF74DFD060004D15120B3 -:10FEB0006E49C00005F08DF8A068006CFDF742FDAA -:10FEC000040004D16A486949823005F082F811982B -:10FED000C0003E50C019296941600920307068682F -:10FEE0007060A868B060A889B08163483061103044 -:10FEF000B4617061304601F02FF8022804D05C48EC -:10FF00005A49903005F065F811982875A2E55A4ACB -:10FF100000208C32107002206B46187001922879F4 -:10FF2000002801D0107098E0524803230C3040683C -:10FF3000FB2703708378504A9B089B003B408370EB -:10FF40004B7A00271B07DB0F43708C3257600B7B0B -:10FF5000C370CB7A1372537A0C7D5B08E4075B00A5 -:10FF6000E40F23430C461534D460FD242340CC7E9B -:10FF7000E407A40F234353720B461C3313614771EC -:10FF800007718B7A3B4A9C070C32A40F1268012C34 -:10FF900004D19478A407A40F012C1DD09B089B00CA -:10FFA0008B7293785B0702D48B7A5B0728D54B7AE8 -:10FFB00013AF5B075B0FDC005B00E3181478640091 -:10FFC0001B19DBB2DC083C5D5F077F0F0623DB1BE0 -:10FFD000DC40A3079B0F14E04C7A53796406640F4E -:10FFE00023404371147906273C400471E4001C430C -:10FFF000204B5C7083789B089B005B1C8370D0E770 -:020000040001F9 -:1000000000238478FB273C408F7A7F07FF0FBF00D7 -:100010003C4384704C7A6407640F04705078012864 -:1000200007D1487A000704D5032008A908750220E3 -:100030002DE0022B27D0012B2BD00F4B0020049A50 -:10004000D86750609060D06018467C30024610320D -:100050005060887AFB2210408872684600F09EFE4D -:10006000040035D0012C34D0004907E03CFC0000EE -:1000700009020000B4000020541A00206520C000CE -:1000800004F0A7FF25E0032008A9087501200876E1 -:10009000E3E77E4C0D21E01C04F05BFE20461030AF -:1000A0004460022008A908750E94A868002807D0AB -:1000B0000068206005997648202211430170CCE742 -:1000C00005980007C9D57349734804F082FFC4E757 -:1000D000002669462046FFF7A7FB04E06E486D49FD -:1000E000203004F076FF08A8007D002802D00DA87B -:1000F000F4F7DCFE304617B0F0BDF0B597B00C4613 -:10010000054600206946087061482F785F4E0178E7 -:10011000583E82683B0005F04DF80BAA8407263B49 -:100120004C6B79798F9CAA002B20694608730CA927 -:1001300003A8FDF73DFC002804D05748554941303D -:1001400004F047FF55490D9804F020FE4F48016028 -:100150004F4869680C300160AA684260019108202C -:10016000694608708CE08A0610D5DF2211400170C4 -:1001700003202070454810304168A1604068002885 -:1001800002D00020207177E00120FBE7102256E02A -:100190002B20694608733D4903A85C39FDF708FC2C -:1001A000002804D03C483B496A3004F012FF042088 -:1001B0001BE02A206946087303A8102202306968F0 -:1001C00004F06AFD07A810220230A96804F064FD5B -:1001D0002E4903A85C39FDF7EBFB002804D0392039 -:1001E0002C49000104F0F5FE05202070666043E014 -:1001F0002A79002A02D001221143017005206946A4 -:10020000087028798880A868029039E0D06A402375 -:10021000018819430180D06B6968102204F03CFD0D -:100220002AE0FB2211400170062069460870A96887 -:1002300068680291019023E0CB0703D002221143AA -:10024000017058E70F20207017202071506CA060BB -:1002500012E0937A9B0706D0D26A44781388FF3461 -:1002600001342343138004221143017004E00A483F -:100270000849BD3004F0ADFE684600780028E0D0A3 -:100280006846F4F713FE36E701207047D01A0020C5 -:10029000B40000203CFC00001503000040420F00A9 -:1002A00070B504780D460646230004F083FF0B1C4E -:1002B000181C1C1C1C07181C1C181C0000210520E5 -:1002C00001F038FDB068007805280CD0FA4800220B -:1002D000008811468300052001F087FC03E000211F -:1002E000052001F027FD002D0ED0002028702946A2 -:1002F0003046FFF702FFF1482978005D884201D1BE -:10030000032070BD022070BD00213046FFF7F5FECE -:10031000002070BD30B5E8494B68497A0A011146A2 -:100320000C315C5C032C0CD0044600252034257174 -:1003300025725C5CA500AA18641C5C5498500320CC -:1003400030BD062030BDF0B50446264620360D46A9 -:100350003279012008218FB0002A0CD0012A21D047 -:10036000022A2BD0032A04D12A78052A01D1297028 -:1003700000200FB0F0BD01203071606800280AD065 -:10038000A069017061684160216981606169C16033 -:10039000FFF7C0FFEDE707202870206968606069FB -:1003A000A86009E029780729E3D1022030710520EF -:1003B0002870C248203868600320DAE729780529C8 -:1003C000D7D1A08910280AD9103880B2A081A1689D -:1003D0001023091803A86A6800F054FE2DE01028C5 -:1003E00004D0C1B20BAA1020A76809E0102322692B -:1003F000A16817E0491EC9B2401EC0B27B5C13540D -:100400000029F7D100280AD0401EC0B28021115423 -:10041000002102E0401EC0B211540028FAD16269E6 -:1004200010230BA907A800F02DFE102307A903A88D -:100430006A6800F027FE032030716068019003A80D -:10044000029005206946087029466846FFF728FF94 -:100450008FE7F0B5044626460D4620363179012057 -:100460008DB000290BD0012938D0022905D1297877 -:10047000052902D10920287000200DB0F0BD217D92 -:100480006846CA07D20F02738807C10F6846017415 -:10049000012203A905A800F0EDFD04A9012205AF82 -:1004A000481D00F0E7FD0722B81CE16800F0E2FDFE -:1004B00007A807220130216900F0DCFD6068019087 -:1004C00009A80290102305AAA16800F0DBFD012015 -:1004D0003071052168460170294621E029780529F7 -:1004E000CBD1062203A8E16900F0C4FD04A80622CE -:1004F0000230A16900F0BEFD042106A800F0B2FDA3 -:100500006068019007A80290102303AA696800F0B0 -:10051000B9FD0220307105206946087029466846F9 -:10052000FFF7BEFEA9E7F0B5074685B00D460020EF -:10053000694608703E466248203632798179133820 -:1005400001240078130004F035FE180DFEFDFCFBBD -:10055000FAF9F8F7F6F5F4F3F2F1F0EFEEEDECEB73 -:10056000EAE9E8E7B968039100291BD0012269464E -:100570000A7003220A710A224A7139690291397993 -:1005800000297DD0039A1278002A7AD00C2A78D2DA -:10059000130004F00FFE0BEF09EF354D8498B0F116 -:1005A000EDECEF000020C8E30021062001F0C2FBC3 -:1005B0003879072866D1424C133C2078022802D0B3 -:1005C00000287FD101E00020207003980079C11F2E -:1005D0000A2901D30A2598E1607039480722C01F13 -:1005E000039900F047FD0120307120700220694618 -:1005F00008703348801F01903869401C029037E230 -:1006000011293DD12E4C133C0228DAD16068617863 -:10061000007A884201D9062577E1039926481022FD -:10062000491C303800F026FD03202070022045E1EF -:100630001129E6D1224C133C0428C2D10520207098 -:1006400003991D481022491C203800F013FD062094 -:100650003071786903210170626851684160164900 -:100660002039816021460C31C160C91D0161017DC5 -:10067000537A49084900DB07DB0F1943017502E093 -:1006800070E354E384E1D3688361FD231940537A16 -:100690009B07DB0F5B0019430175116976E10229A5 -:1006A000AFD1002867D005206946087103984078CB -:1006B00048713869029051E3241B00203452010034 -:1006C000DB00002082E011299BD1F74C06287DD168 -:1006D000A0680399806B1022491C00F0CBFC062116 -:1006E0006846017038690290002168460171FFF781 -:1006F000D7FD072057E00B299BD1EB4C07287ED173 -:10070000A0680399006B0222491C00F0B3FCA068AA -:100710000822406B039917E00EE116E3FDE2DDE2EB -:10072000C7E2BCE29EE267E248E241E21FE2F5E195 -:10073000DFE1C8E1BEE1B1E1A5E16AE147E128E11D -:10074000DAE0BEE0AFE075E0C91C00F093FC0621E2 -:100750006846017038690290002168460171FFF710 -:100760009FFD204613304179490849003EE041E0B1 -:100770001BE001E05CE0EFE2112991D1CA4C0828AE -:100780003DD1A0680399C06B1022491C00F072FC97 -:10079000062168460170386902900021684601719F -:1007A000FFF77EFD09202070C9E208298CD1BE49DF -:1007B000092824D1039842788868016C0A7003994B -:1007C000406C0622891C00F055FC00E017E0062171 -:1007D0006846017038690290002168460171FFF790 -:1007E0005FFDB14813304179FD221FE041715EE2A7 -:1007F0003071F2E11129C0D1AB490A2801D0082596 -:1008000083E088680399806C1022491C00F032FC58 -:10081000062168460170386902900021684601711E -:10082000FFF73EFDA04813304179FB221140DDE780 -:1008300007256AE0297802297ED19B490128FBD14E -:100840006A684A6015780846002D5CD106216A4620 -:1008500011703969029107211171029902240C70FB -:10086000CA785207520FCA704B795B075B0F4B7106 -:100870008B795B075B0F8B71D20701D18A714A714B -:1008800005460A794078824200D26A70864807227B -:10089000133000F0EFFB00202C70307101466846E9 -:1008A000FFF7FEFC4BE229780429C5D103286FD15C -:1008B00008227E48696800F0DDFB032030710420C7 -:1008C000F2E129780429B7D1774F0328B4D17748CA -:1008D00008220830696800F0CDFB04203071786888 -:1008E0004168002906D00321297000212971406840 -:1008F000A86072E10320D7E1287803289CD12879E9 -:1009000000281AD00546002D16D006216846017031 -:100910003869029002216846017102980521017030 -:10092000457000216846FFF7BBFC01216846017055 -:1009300004210171457115E293E15B49A86849689A -:100940000028486001D15A48486005203071786914 -:10095000032202704A684260544A8260524A0C3252 -:10096000C260D21D0261027D4B7A5208DB07520041 -:10097000DB0F1A430275CB688361FD231A404B7A63 -:100980009B07DB0F5B001A4302750969C16130E107 -:100990000DE12978092988D14349032885D104200C -:1009A00008700620694608703869029011200871A5 -:1009B000029803210170401C1022696800F05AFB64 -:1009C00000216846FFF76CFC00203071B7E1297800 -:1009D000092993D1052891D134496A68203910201A -:1009E000401EC0B20B5C145CA34203D0002004255F -:1009F00030718AE70028F3D107203071786904212B -:100A00000170294949684968416028498160103965 -:100A1000EEE028780A28BED10620694608703869B9 -:100A2000029011200871029804210170401C1022CC -:100A30001E4900F01FFB00216846FFF731FC1A48F1 -:100A4000102140786A68091AC9B2101800F00AFB30 -:100A50006868019014481330C178C9070BD08179B8 -:100A6000002902D14079002805D0082030711BE10F -:100A700029466846EFE0072069460870002168466D -:100A8000FFF70EFC5FE128780E2884D106486968DC -:100A900081608969407808700920A9E6C80701D0FB -:100AA0000A20FFE00F20A3E6C8000020141B00204E -:100AB0001452010028780F2879D1A8683861287964 -:100AC00038730B20FAE628780428F5D1FC4C6968C5 -:100AD000A0680822006A00F0CDFA0C203071786915 -:100AE0000722B9690270A268D3684360126A826003 -:100AF0007EE028780D28DFD1F14C6968A0680223D8 -:100B00000269C06900F0BEFA0D20307178690621D3 -:100B10000170A1688A684260096966E028780C283B -:100B2000CAD1E74C6968A0686278406A00F0A2FA0E -:100B30006078A2681021091A526AC9B2101800F030 -:100B400091FA0621684601703869029011226846C0 -:100B50000271029810220170A168401C496A00F0DD -:100B600089FA00216846FFF79BFB0E206EE028788B -:100B70000F2876D1062168460170386902900B2152 -:100B800068460171029C0720CD4D2070A8680222A2 -:100B9000C169601C00F06EFAA8680822016AE01CB6 -:100BA00000F068FA00216846FFF77AFB7AE7C8E0B0 -:100BB000880701D5102075E0132019E628780F2842 -:100BC0004FD1A86838612879387311203071BC483A -:100BD000816848690078002801D00324CAE0786958 -:100BE00006220270C9684160B6498160B549091D95 -:100BF000C160FFF78FFB30E0B14880684169097838 -:100C000000290CD129780C292BD1AD4C6968806A58 -:100C1000102200F02FFAA16801204969087006210E -:100C20006846017038690290112168460171029886 -:100C300008210170A249401C89681022896A00F0CD -:100C400019FA00216846FFF72BFB122030710921A9 -:100C5000684601702946FFF723FB044601287DD032 -:100C600088E06FE028780F286CD10620694608706C -:100C70003869029008200871029809210170904992 -:100C800089680A78D207D20F427049680622801C10 -:100C900000F0F0F900216846FFF702FB8CE74807F7 -:100CA00005D514203071092069460870E0E6162049 -:100CB0009EE528780F2851D1A868386128793873C3 -:100CC000152030717869062101707D4989688A682C -:100CD0004260096981607B49891D89E728780C2871 -:100CE00045D1774C6968A0681022C06A00F0C2F94B -:100CF0000620694608703869029011200871029830 -:100D00000A210170A168401CC96A102200F0B2F9E2 -:100D100000216846FFF7C4FAC9E7694813304079F3 -:100D2000002810D0C10703D065480621017006E0F5 -:100D3000800701D5082000E00A20614908700024DE -:100D400018E00BE013E0172052E55D49002805D0BC -:100D50000020307108700A206946087068460078E3 -:100D6000002804D000216846FFF79AFA002454486E -:100D700000210170204605B0F0BD10B5524BFF2494 -:100D80005C72586019721A80002204E0491EC9B2D0 -:100D90000B010C33C2540029F8D110BDF0B54A4EF6 -:100DA0000546717A01208DB0FF2971D00127727A32 -:100DB000736811015C180C31595C8900091F645873 -:100DC0006A7021780B0004F0F5F90B960709272CBF -:100DD00059888D4A4F5492002F707CE02146203173 -:100DE0000A9109790120002902D0012967D10EE07A -:100DF0006068019005A802900D21C01C00F032F936 -:100E0000032205A8A16800F035F90A984EE0297878 -:100E1000052974D106215DE029462046FFF719FB1C -:100E200069E021462031069109790120002902D08C -:100E3000012964D10EE06068019007A802900822A1 -:100E4000E16800F017F9082209A8A16800F012F97A -:100E500006982BE02978052951D10A213AE0294644 -:100E6000204600F01AF946E029462046FFF76BFAC3 -:100E700041E029462046FFF756FB3CE02146203161 -:100E8000059109790120002903D0012937D11DE0FE -:100E900056E06068019007A802900822A16800F05F -:100EA000E9F8082109A800F0DDF8059869460771FE -:100EB0000520087029466846FFF7F2F91BE00BE0B1 -:100EC000C80000200C520100241B002029780529AD -:100ED00015D10B212970002011E02946204600F091 -:100EE00023F908E02946204600F04EF903E02946A0 -:100EF0002046FFF7C9F9002801D001280CD125624E -:100F0000717A736809010C315A5C521E1206120E76 -:100F10005A5401D003204AE70328FCD0737A726840 -:100F200019011D010D312C46515C7172FF270D34E2 -:100F300017550C35545D002C02D0FF2903D1737274 -:100F40000DB0F0BD21460C010D34145DFF2CF9D11C -:100F500009010D315354F3E770B5AD4C0546607A85 -:100F6000214603464A6811E0010108460C30105C36 -:100F700008E0401EC0B286008E199659AE4201D1DB -:100F8000042070BD0028F4D10D31505CFF28EBD156 -:100F90009F480021007A01E0491CC9B2884204D967 -:100FA0000E010C36965D002EF6D1884201D8052040 -:100FB00070BD08010D30135461722846FFF7AAF97D -:100FC000032806D0617A626809010D31515C6172B3 -:100FD00070BD28462830FFF7E1FE70BD10B50478DB -:100FE0000123012C14D10C78022C11D30B23137084 -:100FF00083785B075B0F537002220A708088002899 -:1010000005D0830000221146062000F0EEFD0023EB -:10101000184610BD0EB50022012105280AD0062869 -:1010200007D1684601700221017142710021FFF76A -:1010300064F80EBD68460170F6E710B58EB00C4638 -:1010400006216A461170019072480290001D0390BB -:101050006846FFF781FF102220460B9900F00AF83E -:101060000EB010BD002202E0491EC9B24254002950 -:10107000FAD1704703E0521ED2B28B5C8354002A2F -:10108000F9D1704730B505E05B1EDBB2CC5CD55CB6 -:101090006C40C454002BF7D130BD3EB5044620301F -:1010A0000D4602790121002A02D0012A3AD10FE02F -:1010B00061680191574908310291012101710520B0 -:1010C0006946087029466846FFF7EAF8014629E0B4 -:1010D0002878052826D169681022A06800F087F8D2 -:1010E0006868C07B000606D54A4AA06810231832FB -:1010F0000146FFF7C7FF1022A168E06800F077F80B -:10110000A068C07B000606D5424AE068102318326A -:101110000146FFF7B7FF07202870A0686860E06805 -:101120000021A86008463EBDF0B5044626460F469D -:1011300020363179012089B0002909D0012905D153 -:101140003978052902D10C203870002009B0F0BD93 -:10115000606803AD01900295022203A8A168FFF721 -:1011600089FF0222A81CE168FFF784FF0C21281DDB -:10117000FFF778FF01203071052069460870394675 -:101180006846FFF78DF8E1E710B5034620331C7978 -:101190000122002C04D0012C10D0022C25D11EE0FD -:1011A00001211971C16806220A7040684860194817 -:1011B000801C8860801CC86008460CE00C780C2CF1 -:1011C00013D102221A71C268052313704968516055 -:1011D000806890601046FFF79DF8024605E00878A9 -:1011E0000B2802D10D2008700022104610BD10B54A -:1011F000002409E00B78521E5B0023430370401C5F -:101200000B78491CD2B2DC09002AF3D110BD0000D2 -:10121000241B00200C52010070B50D46040012D0B2 -:10122000002D10D02101284603F093FD10225449CF -:10123000284603F031FD52480121083801804480DE -:101240004560002070BD012070BD70B54C4E00247B -:101250000546083E11E0716820014018817BAA7B99 -:10126000914209D1C17BEA7B914205D10C222946EA -:1012700003F0E5FC002806D0641C30888442EADBD9 -:101280000020C04370BD204670BD70B50D460600FD -:101290000AD0002D08D03A4C083C20886188401CB8 -:1012A000884203D9042070BD102070BD3046FFF77E -:1012B000CCFF002801DB401C0AE0208861680001A7 -:1012C00040181022314603F0E7FC2088401C2080A3 -:1012D0002870002070BD70B514460D001FD0002C82 -:1012E0001DD00021A170022802D0102817D108E0DB -:1012F000687829780002084311D00121A17010807C -:101300000BE02846FFF7A1FF002808DB401CA07077 -:10131000687B297B000208432080002070BD0120EB -:1013200070BD70B5054614460E000AD0002030701E -:10133000A878012807D004D9114908390A889042B1 -:101340000BD9012070BD002C04D02878207028888B -:10135000000A50700220087010E0002C0CD0496880 -:101360000001411810391022204603F095FC28781E -:1013700020732888000A607310203070002070BD30 -:10138000EC00002073490968016000207047714932 -:1013900008600020704701216F4A704B002803D07D -:1013A000012805D06E48704791630020187001E055 -:1013B000D1631970002070476A49012008606848AD -:1013C000801C70470422684B6649002805D05A608B -:1013D000086901221043086108E0086940084000DC -:1013E00008619A605C490020C03188600020704725 -:1013F0005C490622002808D0012809D002280DD017 -:1014000003280FD05648401C70470869904302E0FB -:1014100008699043801C0861002070470869904368 -:10142000001DF8E708691043F5E74E494A6A024390 -:101430004A62002070474B494A6A82434A62002050 -:1014400070474849496A0160002070474549CA69A8 -:101450000243CA61002070474249CA698243CA6197 -:10146000002070473F49C96901600020704730B5CE -:101470000546002072B601463A4A384C4032002DEB -:1014800011D00123012D0CD0022D02D0072062B60D -:1014900030BDA3706478002C01D09363F7E79163AB -:1014A000F5E7A170F9E7A170F9E72F4904208860FA -:1014B00029490020C03188602849012008702B4943 -:1014C0000A688023120A12021A430A602849086037 -:1014D000704722480078704770B5EFF31080C50759 -:1014E000ED0F72B61D4C6078401C0006000E607057 -:1014F00003D120A1CC2003F06CFD6078012806D137 -:10150000A078002803D01749012040318863002DBE -:1015100000D162B670BD70B5EFF31080C507ED0F56 -:1015200072B60E4C6078002803D112A1DC2003F0C3 -:1015300050FD6078401E0006000E607006D1A07855 -:10154000002803D00749002040318863002D00D1D6 -:1015500062B670BD0004004040000040FC00002066 -:1015600004200000000500400003004000E400E00B -:1015700000E100E07372635C736F635F706F7765A7 -:10158000722E63008107C90E002808DA0007000FD9 -:1015900008388008B94A80008018C06904E08008D3 -:1015A000B74A800080180068C8400006800F704766 -:1015B000B44948788978884201D3401A02E0212250 -:1015C000511A0818C0B27047AE492331487889785B -:1015D000884201D3401A02E02122511A0818C0B2F1 -:1015E0007047A849463148788978884201D3401A23 -:1015F00002E02122511A0818C0B27047A04810B565 -:101600000C300168FF22120291430122D2031143E0 -:1016100001609C490020233148708870233948704C -:101620008870463148708870974802F0FFFA9648F3 -:10163000401C02F0FBFAF2F7A9F900F015F910BD11 -:1016400020207047B4E770B50C4605460026FFF72A -:10165000AFFF8C49A04214D30A46203A002320460B -:10166000641EE4B200280BD08878105C287088785B -:101670006D1C401CC0B288702128F0D18B70EEE741 -:10168000012600F0F1F8304670BD202070479BE73E -:1016900070B50C4605460026FFF796FF79492331C1 -:1016A000A04214D30A46203A00232046641EE4B226 -:1016B00000280BD08878105C287088786D1C401C3E -:1016C000C0B288702128F0D18B70EEE7012600F0BF -:1016D000CBF8304670BD202101700020704710B556 -:1016E0000446FFF77EFF2070002010BD70B50C4649 -:1016F0000546FFF776FF63494631A04215D30A46F7 -:10170000203A00232046641EE4B200280BD08878DB -:10171000105C287088786D1C401CC0B2887021282D -:10172000F0D18B70EEE7002400E0584C00F09CF8FC -:10173000204670BD70B50C460546212904D9FF200E -:1017400053A1473003F045FC4C484068103840B284 -:10175000FFF718FFC6B20D20FFF714FFC0B2864294 -:1017600007D2FF204AA14D3003F033FC01E0F2F72D -:101770004DF921462846FFF766FF0028F7D070BDD7 -:10178000F8B5404E07462336B1787078212200F034 -:1017900060F8354623353B4C00280ED0A1786078A0 -:1017A000212200F056F8002814D0A9786878212268 -:1017B00000F04FF800281AD025E032497078C91C93 -:1017C0000F547078401CC0B2707021281BD10020CB -:1017D000707018E02B49607820390F546078401CF5 -:1017E000C0B2607021280ED1002060700BE0254946 -:1017F000687826310F546878401CC0B26870212880 -:1018000001D100206870B1787078212200F021F8B1 -:1018100000281DD0A1786078212200F01AF8002855 -:1018200016D0A9786878212200F013F800280FD08C -:10183000F2F7CEF8144802F001FA01214903884278 -:1018400003D013A1C12003F0C4FB0F4802F00EFA2D -:10185000F8BD401C884205D0904201D1002901D03A -:10186000002070470120704710B5074802F0E6F9E4 -:10187000002801D1F2F79BF810BD000000ED00E058 -:1018800000E400E0501B0020FF00002007200000C3 -:101890007372635C736F635F72616E642E630000CA -:1018A00010B5284802F0C2F9002803D026A11D2057 -:1018B00003F08FFB2348401C02F0B8F9002803D046 -:1018C00021A1212003F085FB10BDF1B5224D6F68E9 -:1018D00001261C4802F0B2F91A4C002803D1002658 -:1018E000601C02F0C3F91D4A1D490120506000BF71 -:1018F00000BF00BF00BF00BF00230B604B60009B18 -:101900006B60106000BF00BF00BF00BF00BF086871 -:10191000002802D148680028F9D048680028E4D19E -:10192000002E04D06F60601C02F088F907E0601C94 -:1019300002F084F90028D3D1024802F097F9002080 -:10194000F8BDC2E7010100207372635C736F635FCF -:101950006563622E6300000000E5004000E0004087 -:1019600000E1004030B5EFF31081CC07E40F72B610 -:101970001D4A116910230D461D431561002C00D12D -:1019800062B61A4DC406E40E0120A0402C68044241 -:101990000DD0C8060AD4EFF31080C007C00F72B68E -:1019A000116999431161002800D162B630BD20BF92 -:1019B00040BF20BFEAE70E4908784A78401CC0B211 -:1019C000904200D008707047084A094820BF40BFC5 -:1019D00020BF4178037843701368002B02D103784D -:1019E0008B42F3D00020704700ED00E000E200E001 -:1019F00003010020FEB5F64C07466068FF213E015A -:101A000081552178FF2913D0090108314158324608 -:101A1000491E083209020192090A805800F0CEF9E5 -:101A2000002802D02478254615E061682078885582 -:101A30002770FEBDE64842680198115828010090C1 -:101A40000830105800F0BAF9002806D1E0482C46BA -:101A5000416800980D5CFF2DECD1DD482101406804 -:101A600085554754FEBD70B5D94A04460020157A05 -:101A700053680AE00201561C9E5DA64203D10C3257 -:101A80009A588A4204D0401CC0B28542F2D8FF2046 -:101A900070BDF8B5CE4F3E7801F01AFE0146FF2E1C -:101AA00071D03401254678680835405900F086F930 -:101AB00002280CD97868405901F0FDFD01F008FEBC -:101AC00001467868405900F079F902285BD8C0498E -:101AD0004868025D0A70A11C425C002A0CD0521EAC -:101AE000425441590122D20589180902090A41517B -:101AF0003046FFF77FFF30E0631CC25C0092221D7E -:101B000094468258002A10D001239B029A420FD992 -:101B10009205920D43595703DB191B021B0A4351CF -:101B20006346C3589A1A920A09E0FF21C1540AE099 -:101B3000435952039A181202120A42510022425487 -:101B40003046FFF757FFA2480C344168C26800983E -:101B5000095980001258009890479D4C2078FF2822 -:101B600011D0000161680830085801F0A4FD01F0AF -:101B7000AFFD01462078626800010830105800F07F -:101B80001DF9022886D3F8BDF8B51C4615460E4649 -:101B90000746FF2B03D38FA1D42003F01AFA8C48F9 -:101BA000FF21C76045600472067401700022427014 -:101BB000104604E00201521C401CA954C0B2A042CD -:101BC000F8D3F8BD70B5824C06466578207C854216 -:101BD00003D380A1E72003F0FCF9E068A900465098 -:101BE0006078401C6070284670BDFFB581B01D460E -:101BF000FF2401F06DFD764F064679780198814209 -:101C000003D874A1F52003F0E4F971480021037AA8 -:101C1000406810E00A019446521C825CFF2A25D0DD -:101C2000019FBA4205D162460C328758029A974208 -:101C30001ED0491CC9B28B42ECD8FF2C18D0210110 -:101C40004A1C019B83540B460C33029AC250039BDF -:101C50005F4F0022012B0ED00B1DC25001239B02AF -:101C60009D4216D9AA05920D08D008E00C46E0E77F -:101C7000FF2005B0F0BD0B1DC550EFE71A4653031A -:101C80009B190E461B0208361B0AAA1A8351920A98 -:101C900009E0002D00D101256B039B191D022D0ABF -:101CA0000B460833C550891C42543D463E782046B9 -:101CB000FFF7A0FE2878B04214D000016968083010 -:101CC000085801F0F8FC01F003FD29786A68090161 -:101CD000083152580146104600F070F8022801D22F -:101CE000FFF7D7FE0198C4E770B50C46054601F032 -:101CF000EFFC064621462846FFF7B5FEFF2817D021 -:101D0000334D04012046696808300858314600F018 -:101D100055F80121090340186968A41C095D400BAE -:101D2000002901D089020818002800D1012070BDC7 -:101D3000002070BDF3B581B00F460198FFF793FE08 -:101D4000FF282AD0224E3578726829460C4604E0D6 -:101D5000844205D025462301D45CFF2CF8D11CE039 -:101D6000FF2C1AD0A5421CD10801105C3070FF284E -:101D700015D000010830105801F09DFC01F0A8FCBE -:101D800001463078726800010830105800F016F8EB -:101D9000022806D2FFF77DFE03E00020FEBD01F021 -:101DA00092FC39460198FFF79FFF22017168FF23DB -:101DB000541C0B558A5C2B01CA54FEBD401A00020C -:101DC0000121000AC905884200D90020704700009F -:101DD0009C1B00207372635C736F635F74696D6535 -:101DE000722E6300F0B500241C4A01211C4B08032D -:101DF000546018601B4B1C601B4C20601B4804691E -:101E0000E443E406E6170469761C10252C430461BC -:101E1000174C6160174D296000E020BF1F68002F3C -:101E2000FBD0002E03D107691026B74307619068E5 -:101E30008005906801D5104A10436960A1600021B7 -:101E400019600121084A09031160F0BD10B504466C -:101E5000FFF7C8FF2060002010BD000000C5004053 -:101E600080E100E000C1004080E200E000ED00E021 -:101E700000C3004000C0004000FCFFFF70B51F49D8 -:101E80000A68002A17D000231D4601244A68521C04 -:101E90004A60092A00D34D600E792246B2400E688E -:101EA00016420AD072B60B6893430B6062B649685B -:101EB0000160002070BD052070BD5B1C092BE5D3BF -:101EC0000FA1362003F085F8F5E7012010498005C1 -:101ED00008607047EFF31081CA07D20F72B6012174 -:101EE00081400648036819430160002A00D162B6A8 -:101EF000EBE70248002101604160704708010020C3 -:101F00007372635C736F635F6576742E63000000A9 -:101F100000E200E00120810708607047012081078E -:101F2000486070471048C068C00700D00120704763 -:101F30000D488068C00700D0012070470A484069FA -:101F4000C00700D0012070470748C06970470649A4 -:101F50008A69D20306D589698907890F814201D12F -:101F6000012070470020704700040040F8B5FE4C87 -:101F7000207BE17A88421AD00126FC4D0027E07AC6 -:101F8000215C14200A4642435019037C052B0FD0D4 -:101F9000062B1BD0072B28D0437C012B33D0F4A178 -:101FA000F64803F016F8207BE17A8842E7D1F8BDC5 -:101FB0000674E07A0A2807D0E07A401CE072491CD7 -:101FC000C8B2AA5802210CE00020F7E70674E07AB4 -:101FD0000A2808D0E07A401CE072491CC8B2AA580E -:101FE00003219047DFE70020F6E70674E07A0A282D -:101FF00007D0E07A401CE072491CC8B2AA580821F8 -:10200000EFE70020F7E74774E07A0A2807D0E07A84 -:10201000401CE072491CC8B2AA580721E1E7002021 -:10202000F7E770B5D64D06206872D648002444778D -:10203000047738300473C472D34801F0F7FDD348F5 -:102040000475EC72D249601E88606C71AC70EC70E3 -:102050002C716C70CF48022104704470CE4804701B -:10206000047528300470491EFAD10120F1F750FDA3 -:102070000020F1F74DFD0120A871F0F741FDC748A0 -:10208000F0F750FDC64C2070C648F0F74BFD60706D -:10209000F1F7E2FC70BD10B5F1F709FDC04C2078F6 -:1020A000F0F75EFD6078F0F75BFDB54C207A002814 -:1020B00005D0FFF730FAF0F7E2FD0020207210BDE6 -:1020C00070B5AF4CA079002804D0A9A1B64802F0A1 -:1020D00080FF70BDE07A002804D11320A4A1400144 -:1020E00002F077FF0126A6710025E572607A0421CF -:1020F000142250439D4A80180174A5488168491CE8 -:1021000004D0691E81600120F1F702FD0020F1F783 -:10211000FFFCF1F7E3FC01F023FEF1F7E8FDA34833 -:10212000056005600120A249C0030860F0F74AFF7E -:1021300098480078022804D0032804D1E0780028C9 -:1021400001D0A67000E0A570F1F7BDFD70BD03469B -:1021500086490520142242435218203A127F002A51 -:1021600004D0401E0006000EF4D1704714224243F2 -:1021700051180A46403AD362012220390A77704743 -:10218000012805D0032805D1002903D1002070477C -:102190000029FBD010B47A4C002363707D4A0028DC -:1021A00090700CD002280AD007291AD20B007B4469 -:1021B0001B79DB189F441505070D0F111300D37011 -:1021C00003E01B2000E03A20D0700120607010BCBA -:1021D00070475820F8E77720F6E79620F4E7B52017 -:1021E000F2E710BC0020704710B56A484078F1F75C -:1021F00085FD80B210BD411E1422504310B55B4ACC -:102200008418203C042902D8207F002803D158A13B -:10221000684802F0DEFE207F012803D054A1664802 -:1022200002F0D7FE0020207710BD70B5554C607FBE -:10223000217F884201D1012500E00025F1F7F7FC5C -:10224000F1F75CFD617F227F914201D1012100E025 -:102250000021A942EBD170BDF7B50646481E844661 -:102260008EB0C0B2142204905043404A85182846CC -:102270000595007C2D1D07282AD13B4C0027E07ACC -:10228000227B824221D0235C049A934201D1012710 -:1022900001E0002F04D00A2811D0421CA25C225475 -:1022A0000A280ED0401C227BC0B28242EBD1002F04 -:1022B0000BD0207B002806D0207B401E04E00022AB -:1022C000ECE70020EFE70A202073059A0120107444 -:1022D00060462B4C04280FD814204143234808188B -:1022E0002038007F002807D00598007C012807D0FF -:1022F0001098807A012807D01DA1304802F069FEAD -:102300001098807A012871D10598184B007C02281A -:102310001AD0154C207B0A2874D0207BE17A401C0F -:10232000884204D1C92012A1800002F052FE059912 -:1023300001204874217B04986054207B0A2865D0D2 -:10234000207B401C20731CE1607A049A0146904275 -:1023500006D0014614277843C018807C9042F8D1FB -:10236000627A824235D12BE0A81C0020B81C0020E4 -:102370007372635C72656D2E63000000D50500000A -:102380003C1D0020701C0020481D0020901C0020D7 -:102390001C1D002012010020C81C0020931A0100FF -:1023A000100100206D1F01007F02000000F50040B9 -:1023B00080E200E0CD020000CE0200001703000022 -:1023C000617A14225143C918897C61720121A1727A -:1023D00007E014224243D21814277943927CC9188B -:1023E0008A74142206215043C01881741098007A10 -:1023F000062819D203007B441B79DB189F4408127E -:10240000100E0C0AE07A00288CD090E7002099E7A3 -:1024100000210FE0B4210DE073210BE0322109E02F -:102420000A2107E0062105E0FF20FE49E23002F024 -:10243000D0FD0021109802910068401A2860109980 -:10244000097A002912D00221401A0102090A2960E2 -:1024500010980268406810180002000A686010981E -:10246000807A0228109803D0007B74E00421EBE707 -:10247000007A002813D0022202981018844610987F -:102480004268604608301718E748029A4078904240 -:1024900002D9E278002A04D03846083005E0042248 -:1024A000EAE7029A801AC0190830627A062A1CD01C -:1024B000627A14235A43DD4BD2185268914214D0E9 -:1024C000DB4B0793617A14225143D84A89184A6832 -:1024D0008968921B891B12020902120A090A90429A -:1024E0003AD89A4238D8994236D83018C01B0002E0 -:1024F000000A286010996044CE4AC9680002000AA8 -:102500009446421A01239B0507929A4201D2104633 -:1025100014E00A1A09929A4201D207980EE0079A2B -:102520006346624503D9591A0818401C06E0099A07 -:10253000624506D9181A4018401C404200285FDC4A -:1025400003E0B849BC4802F044FD2868C019000205 -:10255000000A6860002028726868082708300002B6 -:10256000000A68601098407AA8721098007A687221 -:1025700003280ED200280CD0FFF7D4FC002803D08B -:1025800007E0002011B0F0BD02983A210F1A322066 -:102590000290A5480178012901D0032909D1417889 -:1025A0000298814205D9E078002802D10298081AE1 -:1025B000C71928689E4A801B844601026868090A78 -:1025C000801B03021B0A8F421AD81746914217D864 -:1025D000BB4215D8617A062916D0677A6146062271 -:1025E000039200923A4614235A43904BD2189368B0 -:1025F0009B1B8B4216D80397977C062FF2D177E06E -:10260000049801F059F9BCE7059802220499027474 -:10261000627A062A00D0627A827461720120A07206 -:1026200011B0F0BD062F63D0002239469446142223 -:102630007E4B4A43D21853689B1B834229D2917B1D -:10264000AB7A99421FD805980521049C7B4D0174F3 -:10265000287B0A2811D0287BE97A401C884203D1C4 -:102660007049774802F0B5FC287B2C54287B0A2857 -:1026700007D0287B401C287383E7E87A0028EFD036 -:10268000F2E70020F7E701218C46917C0629CED1A4 -:1026900002E0604600282AD03D46009114202A46D8 -:1026A000424362480621161831741038007B0A280C -:1026B000624816D0017BC07A491C814203D161A1D6 -:1026C000634802F086FC5D48017B4554017B0A2982 -:1026D0000BD0017B491C0173B57C0098A842DDD169 -:1026E00006E0C07A0028EAD0EDE70021F3E7009782 -:1026F0000599022008744D4D607AB84207D10599BA -:1027000000988874049860720120A07221E00398F8 -:10271000062F0FD0062803D14AA14E4802F059FCDB -:102720000398142250434019049981740599009824 -:1027300088740EE0062803D142A1474802F049FC04 -:102740000398142250434019049981740599062076 -:102750008874012011B0F0BD70B50D4606463F49A2 -:1027600000242046891BA04103D236A13C4802F038 -:1027700030FC3C490020491BA04103D231A13A481A -:1027800002F027FC394A70190021821A8C4101D3CA -:102790003749401870BDF8B5401EC0B214214843F7 -:1027A00022494518687B062813D203007B441B7915 -:1027B000DB189F44020C0A080604002066E0B420DF -:1027C00010E073200EE032200CE00A200AE0062020 -:1027D00008E0FF201BA1E23002F0FBFB697B002038 -:1027E000002953D0022140186968002440180C21A8 -:1027F00000026956000A00294ADBF1F77FFA174AFE -:1028000006460C27EF570021101AA14103D20DA153 -:10281000134802F0DEFB13490020C91BA0412CD253 -:1028200008A127E07023010012010020B81C00203D -:10283000FFFF3F00FFFFFF0014070000A81C00205F -:10284000090200007372635C72656D2E6300000004 -:10285000C7030000DF030000E5030000FF7F841EC4 -:10286000F50300000020A107F60300000080841E8D -:1028700000807BE1FB4802F0ACFBFB4AF019002131 -:10288000821A8C4101D3F9494018F8BD0421AAE706 -:10289000F1F734FA0C21695600224018F449091A5C -:1028A000A241F2D24042F8BDF0B5064683B0F148ED -:1028B0000190457A029534687068001B0702EE4863 -:1028C0003F0A001B0090062D2DD0142029464143BD -:1028D000EA480122081884464168E748920586467E -:1028E000081B904210D3631A93420DD302467046E0 -:1028F000724503D900984018401C05E073450ED975 -:10290000411A0819401C404200280CDA6046029522 -:10291000857C0198C0790028D5D003B0F0BDD84996 -:10292000D84802F056FB0298854226D0142148432D -:10293000D2490123401802908068CF499B058C46FC -:10294000011B8646994210D3221A9A420DD3634640 -:10295000614503D900997144491C06E01946624556 -:102960002DD9091A0819401C4142002905DD029899 -:10297000B17A807B814200D37446062D15D0BF49C1 -:102980001420454368184268121B1202120ABA4208 -:102990000BD2B27A837B9A4200D38468857C0198FB -:1029A000C0790028B9D1062DEAD13068A042B4D050 -:1029B000E0190002000A3460706003B0F0BDB04955 -:1029C000B04802F006FBD8E7F0B5AF4904464868C6 -:1029D00085B0C005C00D1CD0103840B200280CDAFC -:1029E0000207120F083A920892005118C96980072D -:1029F000C00EC1400806800F09E08108A34A890083 -:102A0000891809688007C00EC1400806800F002899 -:102A100008D000262078002806D0012804D0002005 -:102A200005B0F0BD0126F5E72079062813D2030092 -:102A30007B441B79DB189F44020C0A080604002023 -:102A400018E0B42010E073200EE032200CE00A20E1 -:102A50000AE0062008E0FF208949E23002F0B9FAD6 -:102A600021790020002905D002214718814D002E30 -:102A700002D003E00421F8E70020E87102AA6946C9 -:102A8000A068F1F745F9694608228A56E06801A96D -:102A90008018C01C01221F2801DA019209E003AA54 -:102AA000F1F736F96846007B002802D00198401CF7 -:102AB000019000990198401808300002000A019026 -:102AC000C81B0002000A009060796946887200986D -:102AD0000390F1F7ACF8009A019B121A181A6C498E -:102AE00012020002120A000A8A4216D8884214D83A -:102AF0006846FFF7D9FE00990398814205D0C819AE -:102B00000002000AF1F7FAF8A0600120E979002933 -:102B100086D0002EB0D005B0F0BD0020F6E7F3B5AA -:102B20008FB05C480C460B9001F088F85A4A0F9918 -:102B3000504E5518203D594F00280BD05848007D65 -:102B4000002803D057A15A4802F043FA2078012800 -:102B50007DD05FE1787F0A280CD0787F397F401CD8 -:102B6000884203D14FA1534802F033FA207801285C -:102B700004D00CE0387F0028F4D0F7E7E87F002885 -:102B800003D048A14C4802F024FA0120E877787F6E -:102B90000F991422494D504340190174207802289E -:102BA00023D0787F14214843451920792872607911 -:102BB00068722A460C322946A068F1F7A9F80C2061 -:102BC00028560F2804DD1F3828732868401C286009 -:102BD0000C22AA56281DE16802908818C01C1F28E4 -:102BE0003FDA029901200860FDE027494868C005E6 -:102BF000C00D20D0103840B200280CDA0207120FA6 -:102C0000083A920892005118C9698007C00EC14065 -:102C10000806800F09E081081C4A890089180968A4 -:102C20008007C00EC1400806800F002803D11DA1F7 -:102C3000234802F0CEF9787F14214843451900213A -:102C4000E0686A460591117303AA05A900E0D8E07F -:102C5000F1F75EF86A460C2010560F2832DD01208D -:102C600031E0B3E0F60300000080841E00807BE1C9 -:102C7000FF7F841E3C1D0020FFFFFF00B81C0020CA -:102C8000442801001407000000ED00E000E400E02B -:102C9000FFFF3F00481D002016010020701C00208F -:102CA000901C00207372635C72656D2E63000000DF -:102CB00017050000F5040000FA040000B01B002016 -:102CC0000605000000200599401808900220A8720F -:102CD0002079287260796872A068291DC01C039150 -:102CE0001F2801DA01200AE006AAF1F711F8684668 -:102CF000007E002804D0039803990068401C0860F7 -:102D0000287A062813D203007B441B79DB189F44E2 -:102D1000020C0A08060400200FE0B4200DE0732026 -:102D20000BE0322009E00A2007E0062005E0FF2042 -:102D3000FD49E23002F04DF900202179002943D00D -:102D400002214118069168680831401808990590D9 -:102D500008180699401A0C900020F071F0F767FFF0 -:102D600004462860089820180002000AE860707A7B -:102D7000062825D0707A14214843EC494018406851 -:102D80000090059940180002000A0190687A69468F -:102D900088726846FFF788FD0098019A001B121B95 -:102DA00000021202E24B000A120A0C99984207D85C -:102DB0008A4205D80099069808180002000A28607F -:102DC000F0790028C8D110E00421BAE704AA0299DA -:102DD000F0F79EFF6846007C002804D00298029914 -:102DE0000068401C08602078A872787F0A2806D006 -:102DF000787F401C78770B9800F038FF47E0002080 -:102E0000F8E7E87F002803D0CAA1CD4802F0E1F836 -:102E10000120E877CB490F9808742078022803D165 -:102E2000C4A1C94802F0D5F8C64D2079287260794E -:102E300068722A460C322946A068F0F769FF0C2018 -:102E400028560F2804DD1F3828732868401C286086 -:102E50000C22AA56281DE16802908818C01C1F2861 -:102E600003DA0299012008600CE003AA0299F0F746 -:102E70004FFF6846007B002804D002980299006842 -:102E8000401C08602078A872AE4901200875797F3F -:102E9000387F814223D0747A062C22D0F0F7C7FE07 -:102EA00014214C43A1496218117C042917D003292D -:102EB00015D0536892681B1A101A1B0200029C4915 -:102EC0001B0A000A082B0AD30A468B4207D89042F5 -:102ED00005D8787F397F884201D0F0F7F4FE11B031 -:102EE000F0BD787F397F8842F7D111B0F0BD10B5C1 -:102EF0000020F0F7FAFD10BD10B50120F0F7F5FD48 -:102F000010BDF1B5009802281FD0904C607A0628B9 -:102F100003D188A18E4802F05CF80026A671012535 -:102F2000E572607A03211422804F5043C019017466 -:102F3000F0F7CEFE009800280CD001282AD00328F4 -:102F40007CD0B5207BA1C00044E082480078EFF738 -:102F50000DFEF8BD8048007F002803D075A17F4892 -:102F600002F037F865717C4D00202E60F0F7D0FD3F -:102F7000A968481C04D0012300221846F0F7FEFD82 -:102F8000607A617A401CC0B2142251437A58012100 -:102F90009047F8BD0120F0F7BBFD607900280DD007 -:102FA0006D488068401C09D0607A617A401CC0B2CC -:102FB000142251437A5806219047F8BD6648007F95 -:102FC00001280AD0022812D0032824D0042836D0A1 -:102FD00058A1634801F0FDFFF8BD2079002803D017 -:102FE0002671F0F77AFEE5705B480677F8BD207A27 -:102FF000002804D1FEF770FAEFF718FE2572607A08 -:10300000617A401CC0B2142251437A580021904783 -:1030100051480677F8BD504F0123397B786800226C -:10302000411A1846F0F7AAFD2079002803D026712E -:10303000F0F753FEE57002203877F8BD1BE0464EEE -:10304000217870680123411A00221846F0F796FD96 -:10305000207A002804D1FEF73FFAEFF7E7FD25724A -:10306000607A617A401CC0B2142251437A58002120 -:1030700090473577F8BD607A617A401CC0B214225F -:1030800051437A5805219047F8BD10B52F4C607A0E -:10309000062803D127A1334801F09BFF607A617AAB -:1030A000401CC0B214225143204A52580421904778 -:1030B00010BDF0B583B006200290F0F7B8FD234CA8 -:1030C0000090617A28480190062920D0617A142066 -:1030D000414316480918097C042918D0617A142242 -:1030E00051430818007C03287BD00198009A03689C -:1030F00040689B1A801A1B0200020D491B0A000A35 -:10310000082B6ED30A468B426BD8904269D812487E -:103110008068401C03D007A1144801F05AFF00202A -:103120006071607A062823E0A42C0100B81C0020FE -:10313000FFFF3F007372635C72656D2E63000000D9 -:103140001E050000901C0020240500003C1D0020EE -:1031500055050000100100201C1D00206105000025 -:103160009C050000AF0500002C1D0020EB050000B1 -:1031700007D16078002804D0FE48C178417081787A -:103180000170607A062815D0607A1421FA4A484303 -:103190008018007C04280DD1607A0290617A0120A9 -:1031A0001423594389180874617A59438918897C12 -:1031B0006172A072F14D687F297FF14F884233D050 -:1031C000F04E287F142148438019007CC05D0128FF -:1031D000287F07D048438019007CC05D02282FD08B -:1031E00044E001E2142148438019807A01280AD082 -:1031F000287F0221142250438019007CC155287F6A -:103200000A2808D009E0297F002014225143891997 -:10321000097CC8552AE0002001E0287F401C28775F -:10322000687F297F8842CCD1D74D287D00284CD09B -:10323000287CC15D012928D0C05D022830D03AE049 -:10324000287F142148438019807A012803D0CFA118 -:10325000D14801F0BEFE297F002014225143891974 -:103260008872297F51438919097CC855287F142108 -:1032700048438219287F48438019017C0098FEF753 -:10328000EBFF287F0A28C8D1C5E7A97A012904D015 -:103290000221C155002028750DE00021C1550AE02A -:1032A000A87A012803D0B9A1BC4801F092FE002001 -:1032B000A872297CC855287D002806D0297CB24AEE -:1032C0000098FEF7C9FF00202875029806281ED036 -:1032D00014214843A8494018017C012917D107212E -:1032E000AF4D0174287B0A283CD0287BE97A401C2A -:1032F000884203D1A5A1AB4801F06BFE297B02985F -:103300006854287B0A2831D0287B401C2873607AB7 -:1033100006287DD0A07A00287BD00020A072617A98 -:10332000142041439448A04B0A18566891681D46E2 -:10333000D2687C35DE67AA6069609C4D697E002991 -:1033400016D00226617A14228B4851430818407B1C -:1033500006281BD203007B441B79DB189F440A1408 -:1033600012100E0CE87A0028C4D0C7E70020CDE781 -:103370000426E7E700200FE0B4200DE073200BE007 -:10338000322009E00A2007E0062005E0FF207FA1A7 -:10339000E23001F01EFE00202873697E022901D070 -:1033A000012910D12969009A09188A1A1202120AF1 -:1033B0003A2A08D90320687632390802000A2861BF -:1033C000322028730AE0322808D2207A00280ED151 -:1033D000FEF782F8EFF72AFC012007E0207A0028A8 -:1033E00005D0FEF798F8EFF74AFC002020726149FB -:1033F0000822487820700978012901D0032906D1D4 -:1034000001212171297B884201D9421A083201E049 -:1034100091E0A1E0A378002B00D0921C2179002933 -:1034200001D1002B5DD09446614A00990092019A27 -:10343000176852687F1A511A3F0209023F0A090AA7 -:10344000BC451BD85A4A974218D8009A914215D8C1 -:10345000297B884223D92B69421A9A1A1202120A2E -:10346000101880190002000A2A616860002914D02F -:10347000032028770006000E3ED14CE0002020718A -:10348000A070297B002925D02869401880190002E6 -:10349000000A6860022028772EE00120E9E78142D7 -:1034A0000BD92A69511889190902090A696000288B -:1034B00001D00420DDE70220DBE7002B03D133A19C -:1034C0003C4801F086FD286980190002000A686006 -:1034D000002004E0296989190902090A696028772E -:1034E00019E0287B00280FD02969081880190002EC -:1034F000000A6860022028772869012381190022C8 -:103500001846F0F73BFB09E0286980190002000A21 -:103510006860002028770120F0F7FAFA607A142119 -:10352000484315490C22401882560123002069683F -:10353000F0F724FB10E00120F0F7EAFA0020F0F7A2 -:10354000E7FAF0F7CBFA207A002805D0FDF7E3FF81 -:10355000EFF795FB00202072A078002804D0F0F748 -:10356000BCFB0020E070A0706078002827D00148E4 -:10357000C17821E012010020B81C0020701C00203E -:1035800015010020B01B0020901C00207372635CAA -:1035900072656D2E630000000D0600002906000014 -:1035A000A81C00203B060000B01C00201C1D0020B1 -:1035B000FFFF3F008D060000417081780170207987 -:1035C000002806D00020CE49E0700978002900D1FB -:1035D0002071CC48017BC07A814203D0CA48407830 -:1035E000EFF7C4FA0120E07103B0F0BDF0B5C74CAD -:1035F0000746607A83B0062804D16F20C4A1000179 -:1036000001F0E7FC607A1421C44E48438019007C25 -:10361000032803D0BEA1C24801F0DBFCC14DA8685D -:10362000401C03D0BAA1C04801F0D3FC607A142139 -:10363000484381190C20085600216A4600911171F7 -:10364000C01901AA6946F0F763FB6A4604201056C8 -:103650000F2801DD012000E0002000994018696872 -:1036600040180102090AA9606079002804D00123EA -:1036700000221846F0F782FA03B0F0BD70B5AC4CEA -:10368000AA4A0B1AA34214D3451AA54211D3934256 -:1036900003D9101A43185B1C0BE0954204D9511A48 -:1036A0000818401C434204E099A1A24801F091FC93 -:1036B0000023184670BD10B50146012300220220E8 -:1036C000F0F75CFA10BD10B50220F0F721FA10BD3A -:1036D00010B5F0F7ACFA10BDF0B58C4D0446E87AA1 -:1036E00083B0002803D18AA1934801F072FC642CB6 -:1036F0004DD3924A00210846121B884147D3904877 -:10370000417F007F814242D18E48007D00283ED11A -:10371000687A1421814F4843824EC519306801AA46 -:1037200000196946F0F7F4FA6946042008560028A3 -:1037300002DD0098401C0090A96800986B680A1888 -:10374000D21A1202804B120A9A4220D8AA7C062A68 -:1037500008D014235A43D2195268511A0902090A8F -:10376000814214D3B068401C05D00120F0F7D0F995 -:103770000020C043B060306800193060A86800992C -:1037800040180002000A7061012003B0F0BD002063 -:1037900003B0F0BDF8B50646401EC4B214205F4920 -:1037A00060434518287C002804D1772058A10001E7 -:1037B00001F00FFC6248017F407F81420CD0634AD8 -:1037C00014234B439B181B7CB3420CD00A290CD00A -:1037D000491CC9B28142F3D15A48017D002961D008 -:1037E000007CB0425ED10020F8BD0021F1E7052940 -:1037F00003D0062901D0072928D101212974C17AD3 -:103800000023027B8A4221D00246565CA64201D1A7 -:10381000012301E0002B04D00A2911D04E1C965D33 -:1038200056540A290ED0491C167BC9B28E42ECD1DF -:10383000002B0BD0117B002906D0117B491E04E020 -:103840000026ECE70021EFE70A211173697C0029CB -:103850002AD06F74C17A0023027B8A4224D0425C52 -:10386000A24201D1012301E0002B04D00A2912D089 -:103870004A1C825C42540A290FD0491C027BC9B2FF -:103880008A42ECD1002B0FD0027B0146002A06D0E1 -:103890000A7B521E04E00022EBE70021EEE70A2239 -:1038A0000A7301E017480027297C01299FD16A7C0F -:1038B000002A9CD10120F8BD70B505461420174A96 -:1038C0000521684380180F4C0174207B0A2811D011 -:1038D000207BE17A401C884203D10DA11C4801F0F5 -:1038E00078FB207B2554207B0A2807D0207B401CB6 -:1038F000207370BDE07A0028EFD0F2E70020F7E7F0 -:1039000012010020A81C0020100100203C1D0020F6 -:103910007372635C72656D2E63000000B81C00203A -:10392000F10600001C1D0020F2060000FF7F841E2F -:103930000020A1071407000033070000FF1FA107A4 -:10394000701C0020901C0020FFFF3F00B01B0020D7 -:103950000902000010B501462022094801F09CF937 -:1039600007490020C877084610BD06490120486174 -:103970000548064A0168914201D100210160704763 -:103980004C1D0020000500401C010020BEBAFECAEC -:10399000064A10705170704704481C22017841712A -:1039A00042700170704770477047704720010020D7 -:1039B00030B50346002002460DE09C5C2546303DB4 -:1039C0000A2D02D30020C04330BD0A256843303899 -:1039D0002018521CD2B28A42EFD330BD70B50D46CA -:1039E000144608E00A2101F0D1F92A193031203AB1 -:1039F000641ED177E4B2002CF4D170BD10B5002361 -:103A000010E0040A00020443A0B2CC5C444020064B -:103A1000000F60400407240C44402006C00C6040A6 -:103A20005B1C9BB29342ECD310BD10B520380C4602 -:103A3000030001F0BFFB33E0DBE41B1F23272C3125 -:103A4000373C41474D5054585C606D7165697478DE -:103A50007C8084888C9094989C9FA2A6AAAEB2B8D1 -:103A6000BCC0C5CACFE9F0F3D3D7F800206800F096 -:103A7000DDF8D6E0206800F0E1F8D2E0206800F040 -:103A8000F5F8CEE0207840B200F092FAC9E0207854 -:103A900040B200F0B0FAC4E02078616840B200F0B3 -:103AA000C3FABEE0207840B200F0D3FAB9E0207843 -:103AB00040B200F0DEFAB4E02078217940B200F0A4 -:103AC000E9FAAEE02078616840B200F013FBA8E0AC -:103AD00000F01FFBA5E0206800F023FBA1E02078A8 -:103AE00000F038FB9DE02068FDF7F5FD99E02068C7 -:103AF000FDF7F5FD95E021792068FDF7F7FD90E0F1 -:103B00002068FDF73FFC8CE02068FDF740FC88E072 -:103B10002078FDF740FC84E0FDF74EFC81E0207842 -:103B2000FDF750FC7DE02078FDF762FC79E020682D -:103B3000FDF77BFC75E02068FDF77DFC71E02068F7 -:103B4000FDF77FFC6DE02068FDF780FC69E02068F0 -:103B5000FDF782FC65E02068FDF784FC61E02068E9 -:103B6000FDF785FC5DE00846EDF7F0FA59E0EFF768 -:103B700070F856E0EFF79DF853E02068EFF7A5F8EE -:103B80004FE0206800F080F84BE0206800F082F8F9 -:103B900047E0206800F083F843E02078A26861687D -:103BA00000F082F83DE0207800F089F839E02078D4 -:103BB00000F091F835E02078616800F098F830E086 -:103BC0002078616800F09FF82BE02179207800F0E0 -:103BD000D5FB26E02068FDF778FE22E02068FEF79E -:103BE0004DF91EE02068FEF731F91AE0204607C8BB -:103BF00000F0B9FC15E0206800F00CFD11E06168F0 -:103C0000206800F037FD0CE0206800F029FF08E094 -:103C100009E003E0FFE700F03BFF02E0206800F06E -:103C200073FF206010BD0120086010BD00210170ED -:103C3000084670470146002008707047EFF3108176 -:103C4000C907C90F72B60278012A01D0012200E02B -:103C5000002201230370002900D162B6002A01D09E -:103C600000207047012040037047E7E7EFF3108121 -:103C7000C907C90F72B600220270002900D162B6CE -:103C800000207047F2E7000038490968C9B20160B6 -:103C9000002070473549C0B2486000207047334962 -:103CA000C0B2886000207047082801D330487047B0 -:103CB000C3002E4818180161426100207047022895 -:103CC00002D32B48401C70472A4A0121C0008018AB -:103CD000016000207047022802D32548401C70472D -:103CE000244A0121C000801841600020704702284A -:103CF00002D31F48401C70471F4A8000C9B2801879 -:103D0000016000207047022802D31948401C704708 -:103D1000194A800080180068C0B20860002070470F -:103D200010B5FF20114AC043906008200021C30055 -:103D30009B1819615961401C1028F8D300200E4AC5 -:103D400005E0022803D383009B18196004E0830078 -:103D50009B181C68E4B21C60401C0428F1D310BD01 -:103D6000FF200249C04388607047000000F5014011 -:103D70000820000000F0014000F8014010B572B6C4 -:103D800000F0DEF800280BD0EDF78AFAFEF783F991 -:103D900000F0BBFA6F490020C86288626E49086073 -:103DA00062B6002010BDF3B5002501200007C06AEF -:103DB00081B0C0430006000E04D168480068401C72 -:103DC00000D1012572B600F0BBF8002801D062B620 -:103DD00087E0EDF7D1F9EDF767FA614C614A002110 -:103DE0002368CB40DB071FD00346CB40DB0718D14D -:103DF0004BB2002B07DA1E07360F083EB608B60096 -:103E0000B618F66904E09E08574FB600F6193668F2 -:103E10009B07DB0EDE4033069B0F012B04D0032BE8 -:103E200002D062B65148FEBD491C2029D8D3019C5E -:103E300001204F49230001F0BDF914222424242439 -:103E4000242424240B0D1012142016181A1C1E2FC3 -:103E5000002400E00124C86314E00224FBE70324EB -:103E6000F9E70424F7E70824F5E70924F3E70A242F -:103E7000F1E70B24EFE70C24EDE70524EBE707243B -:103E800000E00624D06901210002000AC9070843A6 -:103E9000D061002D04D009E062B601200003FEBD10 -:103EA0002C4D3448E862EDF7FFF9A8622A49324800 -:103EB0000860324902980860EDF7F6F9214600F0F3 -:103EC0000BFAFEF7AEF800F00DFC00F087FA01984F -:103ED000EDF7B4F9040062B603D0FFF74FFF2046B8 -:103EE000FEBD0020FEBD10B5044600F029F80028F4 -:103EF00000D001202070002010BD21490860002062 -:103F0000704710B50C46102808D011280BD0122885 -:103F10000CD013280ED00120086010BD6168206805 -:103F2000FFF741FF0AE0FFF729FF07E02068FFF7EE -:103F3000DAFF03E01249206808600020206010BD0D -:103F400005480D490068884201D1012070470020D2 -:103F500070470000000500401C0100200010001008 -:103F600000E100E000ED00E000E400E001100000EE -:103F70004000004000200000BEBAFECA2801002018 -:103F8000040000208107C90E002808DA0007000F8E -:103F900008388008814A80008018C06904E08008E1 -:103FA0007F4A800080180068C8400006800F704774 -:103FB00010B5044600F0DBF8002813D02046FFF7C8 -:103FC000E1FFC0B200F0E1F800280DD07549E2062B -:103FD0000B78D20E01209040002B08D04A68104385 -:103FE000486006E0704810BD6F48401C10BD6F4926 -:103FF0000860002010BD10B5044600F0B8F8002895 -:104000000BD06849E2060B78D20E01209040002BBD -:1040100005D04A6882434A6004E0634810BD6349A2 -:1040200080310860002010BD70B50D46044600F0D8 -:104030009EF800280BD05E480068E206D20E0121EF -:104040009140084000D001202860002070BD5648F3 -:1040500070BD10B5044600F08AF8002807D0E106CC -:10406000C90E0120884052490860002010BD4E480A -:1040700010BD10B5044600F07AF8002808D0E1061B -:10408000C90E012088404A4980310860002010BDD7 -:10409000454810BD70B50D46044600F068F800288C -:1040A00019D0284600F071F8002816D0A007C20EDB -:1040B000FF209040A907090E9140002C10DA22073A -:1040C000120F083A9308354A9B009B18DA6982431D -:1040D0000A43DA610CE0344870BD3348401C70BDBF -:1040E000A3082F4A9B009B181A6882430A431A6050 -:1040F000002070BD70B50C46054600F038F8002869 -:1041000005D02846FFF73EFF2070002070BD2648EE -:1041100070BDBFF34F8F21492648C860BFF34F8F52 -:10412000FEE770B51F4C05462178012000290ED10D -:10413000207072B600F0F8F81C4E8036316881436A -:10414000616000F0F1F8C043306062B60020287072 -:10415000002070BD13490A78002A06D0002804D137 -:10416000124A48681060002008700020704710B59F -:104170000446202805DA00F0D7F80121A1400842C2 -:1041800001D0002010BD012010BD012803D003285C -:1041900001D00020704701207047000000ED00E0D2 -:1041A00000E400E02C0100200120000000E100E01C -:1041B00000E200E00400FA05F8B504468007002597 -:1041C0000126002804DA5A48C563C66302208443E6 -:1041D000E00404D55748C563C66380148443600077 -:1041E00003D55548456080058443E00504D5534810 -:1041F000C563C66380158443A00404D55048C563D5 -:10420000C6634014844360042704C00FF90F88423A -:1042100003D04CA1612000F0DCFEB80F0AD04E495B -:10422000CD634E48C563C563CE63C663C6630320D2 -:104230008003844320050AD5494FFD632F20ECF706 -:10424000B3FFFE632F20ECF7AFFFF8148443002C7C -:1042500003DAFFF765FD640064084248044203D0B6 -:1042600038A1902000F0B5FEF8BDF0B500210A4657 -:10427000FF230446CC40E4072AD04CB2E606F60EF3 -:104280000125B540384E3560384E3560002C11DAC6 -:1042900025072D0F083DAE08354DB6007619F56996 -:1042A000A407E70E1C46BC40A5431446BC4025436A -:1042B000F5610DE0A6082F4DB60076193568A40704 -:1042C000E70E1C46BC40A5431446BC402543356060 -:1042D000491C2029CDD3F0BD70B5274C0D46206078 -:1042E000FFF76AFF2068FFF7C0FF2846EEF77AFD68 -:1042F000FDF7D6FAFDF782F9FFF712FDFDF7D5F8C5 -:10430000EEF7FEFB00F06AF870BD10B51A4C20689D -:10431000FFF752FF2068FFF7A8FFFFF701FDEEF758 -:10432000E6FD0020206010BD1348006870470000C3 -:10433000C01F0040C0CF004000E50140C08F0040DA -:10434000C0DF00407372635C736F635F636F6E66A0 -:1043500069672E6300000000C0EF0040C0FF00400E -:10436000C0BF0040FEFF0FFC80E100E080E200E003 -:1043700000ED00E000E400E03401002070B500240E -:1043800002460D4620462146002A1ED0012A04D0AE -:10439000022A04D0032A1ED103E0012002E00220F9 -:1043A00013E003202B0000F005FF07160507090B9B -:1043B0000D0F1600012108E0022106E0032104E0B0 -:1043C000042102E0052100E00621FDF7D9FE0028C6 -:1043D00001D0204670BD0724FBE70000B148002152 -:1043E00001708170704770B5AF4D01236B60AF4BAA -:1043F0001C68002CFCD0002407E00E6806601E68D4 -:10440000002EFCD0001D091D641C9442F5D3002031 -:10441000686018680028FCD070BD70B5A14C0D46CE -:104420006178884203D0A2A16C2000F0D2FD2B005D -:1044300000F0C0FE094F0625254F4F4F4F464F0055 -:104440002078022803D09AA1702000F0C2FD03203A -:104450002070A078022802D0012804D008E0A068CB -:1044600000F0CEFB04E02269E168A068FFF7BBFF23 -:104470000020A070FDF724FE0420207070BDFDF721 -:10448000D4FE01466068FFF7F9F805462078022857 -:1044900003D087A1842000F09CFD894A89498A487D -:1044A000954206D8401BC86086496078FEF737FB06 -:1044B00070BD854202D802224A71F3E7032003E06F -:1044C000A0780028FAD10220FDF704FD00F0E0F802 -:1044D00070BD77A1AD2000F07CFD70BD70B50546C4 -:1044E000FDF7A3FE6F4C60602078012803D070A117 -:1044F000B42000F06EFD73490220087000220A719A -:104500008D6003224A71704ACA6020706078FEF79D -:1045100006FB70BD10B5634CA078002802D120784E -:10452000002801D0112010BD6848FDF710FE607012 -:104530006078002803D001202070002010BD0320E7 -:1045400010BD10B50124020B64040121604BA04290 -:1045500002D29140186802E0203A58689140084021 -:1045600000D0012010BDF8B50E46910005464F1948 -:1045700014463F1F009100F054FB009980028919F6 -:10458000091FB14201D2012200E00022002C03D019 -:10459000FF2101318C4201D90920F8BD4D498D42DE -:1045A00019D3AF4217D3854205D2874203D228469A -:1045B0003043800701D01020F8BD8E420BD3002A73 -:1045C00009D12846FFF7BDFF002804D13846FFF780 -:1045D000B8FF002801D00F20F8BD3F483F490068D0 -:1045E000884205D0224631462846FFF7FCFE0FE000 -:1045F000FFF790FF0028EFD12A480121C6608560AF -:10460000046181702046312148431430FFF766FF72 -:104610000020F8BD10B504462E48800A84420BD312 -:1046200000F0FFFAA04201D8102010BDA0020446FD -:10463000FFF787FF002801D00F2010BD264827492B -:104640000068884203D0204600F0DAFA0AE0FFF75B -:1046500061FF0028F1D11348022184608170204855 -:10466000FFF73CFF002010BD1A48010B01208840D5 -:10467000401E704700B50B460246FFF7F5FF10429B -:1046800001D00F2000BD124802604360002000BD31 -:1046900010B5044C6078FDF7AEFD00202070A070CE -:1046A00010BD00003801002000E5014000E4014099 -:1046B0007372635C736F635F666C6173682E630013 -:1046C000307500006C1D0020D0FB01001B44010070 -:1046D00000060040006001001C010020BEBAFECAB6 -:1046E00010540000F74805218170002101704170CD -:1046F000C1708160704710B5F3490A78022A07D06B -:10470000CA681018C860C8689638FEF76FFF10BDF9 -:104710008A68101888608868F6E70378EB49EC4AE5 -:10472000002B02D0012B10D014E00379002B01D014 -:10473000012B0FD14379002B01D0012B0AD18368C3 -:10474000643B8B4206D2C06810E00379002B03D093 -:10475000012B01D0002070474379002B01D0012BA1 -:10476000F8D1C368643B8B42F4D280689042F1D8A0 -:1047700001207047F8B504460226FEF7BDFB00682D -:10478000002803D0D3A1BE2000F023FC0127CD4D8B -:10479000002C08D02078002817D0012805D0022846 -:1047A00011D0032813D02F710DE06068C82808D3FA -:1047B000FEF792FF002804D06068FFF79CFF0126F7 -:1047C00003E0002601E000F0F9F93046F8BD287852 -:1047D0000028F8D16068FFF7A0FF0028E3D06068E8 -:1047E0000078002826D0A878042803D0B9A1F820A2 -:1047F00000F0EFFBB44F00203870606800790128AA -:1048000000D00020387160684079002837D003203C -:10481000787160688168E868FDF79EFFB86060683D -:10482000C0689630F8600320A870A749E878FEF7C2 -:1048300076F9C8E7A4480221017061680979012965 -:1048400019D00021017161684979002915D003212F -:10485000417161688968963181606168C968C16029 -:10486000C068984C14346060FDF7DFFC20606F7006 -:104870000220A870A7E70321E4E70221E8E702206D -:10488000C6E7F8B58F4C0D46E178884204D0FF208A -:1048900090A11A3000F09DFB28468A4F0025012682 -:1048A0001437030000F086FC090612375A7C8D97F6 -:1048B000C4A0C400A078032807D0A078022804D0A0 -:1048C000FF2084A11E3000F084FBF8BDA0780328EF -:1048D00007D0A078022804D0FF207EA1223000F06B -:1048E00078FB0420A07025712078002810D1FFF7F4 -:1048F00002FFE078FDF74FFFE0607D49886A7D4A5E -:10490000024022617B4AD24310408862002050E07E -:1049100000F054F9F8BDA078032807D0A078022849 -:1049200004D0FF206BA1453000F053FB2078002815 -:1049300002D000F04FF9F8BDA07803281FD1042061 -:104940002AE0091A6048C1600146E078FEF7E7F8FE -:10495000F8BD0420FDF7BEFAA570F8BDA0780328C5 -:1049600007D0A078022804D0FF205AA1663000F0BA -:1049700030FB20780028DCD1A07803280BD0FDF78D -:1049800054FC01463868FEF779FE0028E1DB7968BF -:104990008142DEDBD5E70520FDF79CFAA670F8BD65 -:1049A000A078042804D0FF204AA1873000F011FB32 -:1049B0000220A1688847FFF7DDFEFF260546C036C6 -:1049C00042E0A078042804D0FF2042A18C3000F0FF -:1049D00000FB0120EDE7A078042899D0FF203DA13D -:1049E000913000F0F6FA93E7A07804280AD06078B6 -:1049F000002802D0A078022804D0FF2035A19630EC -:104A000000F0E7FA2078002893D12079002804D01C -:104A10000620FDF75FFA2571C0E76078002805D011 -:104A20002949E078FEF77BF86570F8BD0720B3E709 -:104A3000FF2028A1B13046E7002D0AD0012D06D075 -:104A400024A1304600F0C5FA022DF5D1F8BD0420AE -:104A500000E00320A1688847FFF78CFE0546F3E7D6 -:104A600070B5050005D0174CA078052803D011209B -:104A700070BD102070BD2048FDF769FBE070E07844 -:104A8000002803D0A5600020A07070BD032070BD79 -:104A900010B50C480178002901D0112010BD817893 -:104AA00005292BD0817801292AD08178002927D0A7 -:104AB000012101708178012922D0807800281FD03F -:104AC00020E000004C0100207C1D00203D860100FC -:104AD000FF1FA1077372635C736F635F7261646928 -:104AE0006F5F74696D65736C6F742E6300000000F6 -:104AF0000005004002810080834801000F2010BDA6 -:104B000000F068F8002010BDF8B5394E0446B078C2 -:104B1000002801D001280DD1002C0DD02046FFF730 -:104B2000FCFD00280AD02078324D002808D0B0784B -:104B3000012823D00F20F8BD1020F8BD0720F8BDB4 -:104B400002272F702079012814D000202871607965 -:104B5000002811D003206871A0689630A860E06832 -:104B6000E860E868224C14346060FDF75EFB20606A -:104B7000B77019E00320E9E70220ECE70020287075 -:104B80002079012816D0002028716079002813D0E0 -:104B900003206871A168F068FDF7DEFDA860E06899 -:104BA0009630E8600320B0701249F078FDF7B7FF47 -:104BB0000020F8BD0320E7E70220EAE710B50E4821 -:104BC000816A0E4A11400A4A126911438162FDF757 -:104BD00077FA10BD10B5064CE078FDF70CFB082005 -:104BE000FDF778F90520A07000202070607010BDDE -:104BF0004C0100207C1D002000050040FD7EFF7F51 -:104C00000A4A022151600A490B68002BFCD09060CF -:104C100008680028FCD00020506008680028FCD0FC -:104C200070470120000740697047000000E501401F -:104C300000E4014070477047704770477047034673 -:104C400010B50B439B070FD1042A0DD308C810C918 -:104C5000121FA342F8D018BA21BA884201D9012004 -:104C600010BD0020C04310BD002A03D0D30703D0DD -:104C7000521C07E0002010BD03780C78401C491C32 -:104C80001B1B07D103780C78401C491C1B1B01D14E -:104C9000921EF1D1184610BDF8B5042A2CD3830713 -:104CA00012D00B78491C0370401C521E83070BD096 -:104CB0000B78491C0370401C521E830704D00B78EC -:104CC000491C0370401C521E8B079B0F05D0C91A4C -:104CD000DF002023DE1B08C90AE0ECF775FAF8BDF7 -:104CE0001D4608C9FD401C46B4402C4310C0121F8D -:104CF000042AF5D2F308C91A521EF0D40B78491CC5 -:104D00000370401C521EEAD40B78491C0370401CEF -:104D1000521EE4D409780170F8BD01E004C0091FF7 -:104D20000429FBD28B0701D50280801CC90700D063 -:104D30000270704700290BD0C30702D00270401CDC -:104D4000491E022904D3830702D50280801C891ED4 -:104D5000E3E70022EEE70022DFE70378C278194696 -:104D6000437812061B0219438378C0781B04194349 -:104D700011430902090A000608437047020A087035 -:104D80004A70020C8A70020ECA7070470022030932 -:104D90008B4273D3030A8B4258D3030B8B423CD311 -:104DA000030C8B4221D312E003460B437FD4002235 -:104DB00043088B4274D303098B425FD3030A8B42AF -:104DC00044D3030B8B4228D3030C8B420DD3FF2219 -:104DD000090212BA030C8B4202D31212090265D0E7 -:104DE000030B8B4219D300E0090AC30B8B4201D39A -:104DF000CB03C01A5241830B8B4201D38B03C01AE1 -:104E00005241430B8B4201D34B03C01A5241030B57 -:104E10008B4201D30B03C01A5241C30A8B4201D308 -:104E2000CB02C01A5241830A8B4201D38B02C01AB3 -:104E30005241430A8B4201D34B02C01A5241030A2A -:104E40008B4201D30B02C01A5241CDD2C3098B420F -:104E500001D3CB01C01A524183098B4201D38B018C -:104E6000C01A524143098B4201D34B01C01A52412F -:104E700003098B4201D30B01C01A5241C3088B4274 -:104E800001D3CB00C01A524183088B4201D38B005F -:104E9000C01A524143088B4201D34B00C01A524101 -:104EA000411A00D201465241104670475DE0CA0FD8 -:104EB00000D04942031000D34042534000229C4698 -:104EC00003098B422DD3030A8B4212D3FC228901A2 -:104ED00012BA030A8B420CD3890192118B4208D378 -:104EE000890192118B4204D389013AD0921100E0DA -:104EF0008909C3098B4201D3CB01C01A52418309EE -:104F00008B4201D38B01C01A524143098B4201D31A -:104F10004B01C01A524103098B4201D30B01C01A45 -:104F20005241C3088B4201D3CB00C01A52418308BF -:104F30008B4201D38B00C01A5241D9D243088B4215 -:104F400001D34B00C01A5241411A00D201466346B8 -:104F500052415B10104601D34042002B00D549421C -:104F6000704763465B1000D3404201B50020C04645 -:104F7000C04602BD704770477047704710B500F0DB -:104F800059F810BD30B58C180278401C13071B0F60 -:104F900001D10378401C120906D10278401C03E0BD -:104FA0000578401C0D70491C5B1EF9D101E00B70A7 -:104FB000491C521EFBD1A142E6D3002030BD0000A7 -:104FC00001231B68134B1860134B1960134B1A60B5 -:104FD0007047134A134B13607246053AF0E7114AC3 -:104FE0000F4B1B689A420ED10D4B002018600198A0 -:104FF0000D4B04B598470CBC9E460246029800999A -:105000000A4B1B68184706980599094B1B68DB6813 -:105010001847000070010020740100207801002072 -:1050200068010020EFBEADDE5539010028010020E7 -:10503000040000201D481E497047FFF7FBFFECF7F6 -:105040007DF800BD01200007C06AC0B2FF2804D16E -:10505000184819490968884202D01848184901605F -:10506000184819490968884203D1184A13605B68D7 -:10507000184700BD20BFFDE7124813490968884260 -:105080000ED1134B18680B498842F3D080F308887F -:105090001049884204DD1048026802210A43026078 -:1050A0000E4880470E4880470E480047901D00205C -:1050B000901D0020FFFFFFFF001000102C05004096 -:1050C0000800000000100000000000200400002084 -:1050D0000060010000200020240500406B39010021 -:1050E00045500100C14F01001348704502D1EFF354 -:1050F000098101E0EFF308818869023800781028FF -:1051000014DB202810DB23280BDB0C4A12680C4B25 -:105110009A4203D1602804DB0A4A10470220086043 -:105120007047094A10470000084A1047084A1268A9 -:105130002C32126810470000FDFFFFFF1C01002009 -:10514000BEBAFECAAD1200002B3A0100033F0100B7 -:10515000040000200D4B0E4908470E4B0C49084730 -:105160000D4B0B4908470D4B094908470C4B0849A3 -:1051700008470C4B064908470B4B054908470B4BA2 -:10518000034908470A4B024908470000052E000062 -:10519000E13D0000BD2F0000873C0000353C0000D1 -:1051A000E9390000B912000063170000493D000012 -:1051B000AB2B000030B47446641E2578641CAB42EF -:1051C00000D21D46635D5B00E31830BC1847000049 -:1051D00002490020C861203908727047E0030020AE -:1051E00000020207FFFFFFFF0000FFFF01020408AB -:1051F00010204080555555D6BE898E00F401FA0026 -:10520000960064004B0032001E00140001000300F1 -:10521000000001000000000000000000000000008D -:1052200000000000870000000000000000000000F7 -:105230000000000000000203040500000E0F000043 -:10524000705201000800002010000000041100004E -:10525000805201001800002064010000844F01000A -:10526000A45201007C010020141C00002011000049 -:105270000249022208681042FCD0704700E200E0B8 -:10528000E1078F56FF9900CD29022B01360100015D -:1052900000EC3720FB349B5F8074800010027001AB -:0452A000E4C54F0111 -:00000001FF
--- a/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_NRF51822/PeripheralNames.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2013 Nordic Semiconductor - * - * 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 MBED_PERIPHERALNAMES_H -#define MBED_PERIPHERALNAMES_H - -#include "cmsis.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define STDIO_UART_TX TX_PIN_NUMBER -#define STDIO_UART_RX RX_PIN_NUMBER -#define STDIO_UART UART_0 - -typedef enum { - UART_0 = (int)NRF_UART0_BASE -} UARTName; - - -typedef enum { - SPI_0 = (int)NRF_SPI0_BASE, - SPI_1 = (int)NRF_SPI1_BASE, - SPIS = (int)NRF_SPIS1_BASE -} SPIName; - -typedef enum { - PWM_1 = 0, - PWM_2 -} PWMName; - -typedef enum { - I2C_0 = (int)NRF_TWI0_BASE, - I2C_1 = (int)NRF_TWI1_BASE -} I2CName; - -typedef enum { - ADC0_0 = (int)NRF_ADC_BASE -} ADCName; - -#ifdef __cplusplus -} -#endif - -#endif
--- a/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_NRF51822/PortNames.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2013 Nordic Semiconductor - * - * 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 MBED_PORTNAMES_H -#define MBED_PORTNAMES_H - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - Port0 = 0 //GPIO pins 0-31 -} PortName; - -#ifdef __cplusplus -} -#endif -#endif
--- a/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_NRF51822/TARGET_ARCH_BLE/PinNames.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,177 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2013 Nordic Semiconductor - * - * 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 MBED_PINNAMES_H -#define MBED_PINNAMES_H - -#include "cmsis.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - PIN_INPUT, - PIN_OUTPUT -} PinDirection; - -#define PORT_SHIFT 3 - -typedef enum { - p0 = 0, - p1 = 1, - p2 = 2, - p3 = 3, - p4 = 4, - p5 = 5, - p6 = 6, - p7 = 7, - p8 = 8, - p9 = 9, - p10 = 10, - p11 = 11, - p12 = 12, - p13 = 13, - p14 = 14, - p15 = 15, - p16 = 16, - p17 = 17, - p18 = 18, - p19 = 19, - p20 = 20, - p21 = 21, - p22 = 22, - p23 = 23, - p24 = 24, - p25 = 25, - p26 = 26, - p27 = 27, - p28 = 28, - p29 = 29, - p30 = 30, -// p31=31, - - P0_0 = p0, - P0_1 = p1, - P0_2 = p2, - P0_3 = p3, - P0_4 = p4, - P0_5 = p5, - P0_6 = p6, - P0_7 = p7, - - P0_8 = p8, - P0_9 = p9, - P0_10 = p10, - P0_11 = p11, - P0_12 = p12, - P0_13 = p13, - P0_14 = p14, - P0_15 = p15, - - P0_16 = p16, - P0_17 = p17, - P0_18 = p18, - P0_19 = p19, - P0_20 = p20, - P0_21 = p21, - P0_22 = p22, - P0_23 = p23, - - P0_24 = p24, - P0_25 = p25, - P0_26 = p26, - P0_27 = p27, - P0_28 = p28, - P0_29 = p29, - P0_30 = p30, - - LED1 = p30, - LED2 = p14, - LED3 = p15, - LED4 = p16, - - RX_PIN_NUMBER = p7, - TX_PIN_NUMBER = p8, - CTS_PIN_NUMBER = p26, - RTS_PIN_NUMBER = p27, - - // mBed interface Pins - USBTX = TX_PIN_NUMBER, - USBRX = RX_PIN_NUMBER, - - SPI_PSELMOSI0 = p25, - SPI_PSELMISO0 = p28, - SPI_PSELSS0 = p24, - SPI_PSELSCK0 = p29, - - SPI_PSELMOSI1 = p12, - SPI_PSELMISO1 = p13, - SPI_PSELSS1 = p14, - SPI_PSELSCK1 = p15, - - SPIS_PSELMOSI = p12, - SPIS_PSELMISO = p13, - SPIS_PSELSS = p14, - SPIS_PSELSCK = p15, - - I2C_SDA0 = p5, - I2C_SCL0 = p6, - - I2C_SDA1 = p13, - I2C_SCL1 = p15, - - D0 = p7, - D1 = p8, - D2 = p9, - D3 = p10, - D4 = p11, - D5 = p12, - D6 = p13, - D7 = p17, - - D8 = p18, - D9 = p23, - D10 = p24, - D11 = p25, - D12 = p28, - D13 = p29, - - D14 = p5, - D15 = p6, - - A0 = p1, - A1 = p2, - A2 = p3, - A3 = p4, - A4 = p5, - A5 = p6, - - // Not connected - NC = (int)0xFFFFFFFF -} PinName; - -typedef enum { - PullNone = 0, - PullDown = 1, - PullUp = 3, - PullDefault = PullUp -} PinMode; - -#ifdef __cplusplus -} -#endif - -#endif
--- a/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_NRF51822/TARGET_ARCH_BLE/device.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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 MBED_DEVICE_H -#define MBED_DEVICE_H - -#define DEVICE_PORTIN 1 -#define DEVICE_PORTOUT 1 -#define DEVICE_PORTINOUT 1 - -#define DEVICE_INTERRUPTIN 1 - -#define DEVICE_ANALOGIN 1 -#define DEVICE_ANALOGOUT 0 - -#define DEVICE_SERIAL 1 - -#define DEVICE_I2C 1 -#define DEVICE_I2CSLAVE 0 - -#define DEVICE_SPI 1 -#define DEVICE_SPISLAVE 1 - -#define DEVICE_CAN 0 - -#define DEVICE_RTC 0 - -#define DEVICE_ETHERNET 0 - -#define DEVICE_PWMOUT 1 - -#define DEVICE_SEMIHOST 0 -#define DEVICE_LOCALFILESYSTEM 0 - -#define DEVICE_SLEEP 1 - -#define DEVICE_DEBUG_AWARENESS 0 - -#define DEVICE_STDIO_MESSAGES 0 - -#define DEVICE_ERROR_PATTERN 1 - -#include "objects.h" - -#endif
--- a/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_NRF51822/gpio_object.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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 MBED_GPIO_OBJECT_H -#define MBED_GPIO_OBJECT_H - -#include "mbed_assert.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - PinName pin; - uint32_t mask; - - __IO uint32_t *reg_dir; - __IO uint32_t *reg_set; - __IO uint32_t *reg_clr; - __I uint32_t *reg_in; -} gpio_t; - -static inline void gpio_write(gpio_t *obj, int value) { - MBED_ASSERT(obj->pin != (PinName)NC); - if (value) - *obj->reg_set = obj->mask; - else - *obj->reg_clr = obj->mask; -} - -static inline int gpio_read(gpio_t *obj) { - MBED_ASSERT(obj->pin != (PinName)NC); - return ((*obj->reg_in & obj->mask) ? 1 : 0); -} - -#ifdef __cplusplus -} -#endif - -#endif
--- a/TARGET_ARCH_BLE/TARGET_NORDIC/TARGET_NRF51822/objects.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,73 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2013 Nordic Semiconductor - * - * 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 MBED_OBJECTS_H -#define MBED_OBJECTS_H - -#include "cmsis.h" -#include "PortNames.h" -#include "PeripheralNames.h" -#include "PinNames.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct serial_s { - NRF_UART_Type *uart; - int index; -}; - -struct spi_s { - NRF_SPI_Type *spi; - NRF_SPIS_Type *spis; -}; - -struct port_s { - __IO uint32_t *reg_cnf; - __IO uint32_t *reg_out; - __I uint32_t *reg_in; - PortName port; - uint32_t mask; -}; - -struct pwmout_s { - PWMName pwm; - PinName pin; -}; - -struct i2c_s { - NRF_TWI_Type *i2c; - PinName sda; - PinName scl; - int freq; -}; - -struct analogin_s { - ADCName adc; - uint8_t adc_pin; -}; - -struct gpio_irq_s { - uint32_t ch; -}; - -#include "gpio_object.h" - -#ifdef __cplusplus -} -#endif - -#endif
Binary file TARGET_ARCH_BLE/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_ARCH_BLE/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_ARCH_BLE/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_ARCH_BLE/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_ARCH_BLE/TOOLCHAIN_ARM_STD/startup_nRF51822.o has changed
Binary file TARGET_ARCH_BLE/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_ARCH_BLE/TOOLCHAIN_ARM_STD/system_nrf51822.o has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_BLE/TOOLCHAIN_GCC_ARM/NRF51822.ld Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,151 @@ +/* Linker script to configure memory regions. */ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00016000, LENGTH = 0x2A000 + RAM (rwx) : ORIGIN = 0x20002000, LENGTH = 0x2000 +} + +OUTPUT_FORMAT ("elf32-littlearm", "elf32-bigarm", "elf32-littlearm") + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + KEEP(*(.Vectors)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + *(.jcr) + . = ALIGN(4); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + end = __end__; + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +}
Binary file TARGET_ARCH_BLE/TOOLCHAIN_GCC_ARM/board.o has changed
Binary file TARGET_ARCH_BLE/TOOLCHAIN_GCC_ARM/cmsis_nvic.o has changed
Binary file TARGET_ARCH_BLE/TOOLCHAIN_GCC_ARM/libmbed.a has changed
Binary file TARGET_ARCH_BLE/TOOLCHAIN_GCC_ARM/retarget.o has changed
Binary file TARGET_ARCH_BLE/TOOLCHAIN_GCC_ARM/startup_NRF51822.o has changed
Binary file TARGET_ARCH_BLE/TOOLCHAIN_GCC_ARM/system_nrf51822.o has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_GPRS/TARGET_NXP/TARGET_LPC11UXX/PeripheralPins.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,43 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * 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 MBED_PERIPHERALPINS_H +#define MBED_PERIPHERALPINS_H + +#include "pinmap.h" +#include "PeripheralNames.h" + +/************ADC***************/ +extern const PinMap PinMap_ADC[]; + +/************I2C***************/ +extern const PinMap PinMap_I2C_SDA[]; +extern const PinMap PinMap_I2C_SCL[]; + +/************UART***************/ +extern const PinMap PinMap_UART_TX[]; +extern const PinMap PinMap_UART_RX[]; + +/************SPI***************/ +extern const PinMap PinMap_SPI_SCLK[]; +extern const PinMap PinMap_SPI_MOSI[]; +extern const PinMap PinMap_SPI_MISO[]; +extern const PinMap PinMap_SPI_SSEL[]; + +/************PWM***************/ +extern const PinMap PinMap_PWM[]; + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_GPRS/TOOLCHAIN_ARM_MICRO/LPC11U37.sct Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,20 @@ + +LR_IROM1 0x00000000 0x20000 { ; load region size_region (128K) + ER_IROM1 0x00000000 0x20000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + ; 8_byte_aligned(48 vect * 4 bytes) = 8_byte_aligned(0xC0) = 0xC0 + ; 8KB - 0xC0 = 0x1F40 + RW_IRAM1 0x100000C0 0x1F40 { + .ANY (+RW +ZI) + } + RW_IRAM2 0x20000000 0x800 { ; RW data, I/O Handler RAM + .ANY (IOHANDLER_RAM) + } + RW_IRAM3 0x20004000 0x800 { ; RW data, USB RAM + .ANY (USBRAM) + } +} +
Binary file TARGET_ARCH_GPRS/TOOLCHAIN_ARM_MICRO/board.o has changed
Binary file TARGET_ARCH_GPRS/TOOLCHAIN_ARM_MICRO/cmsis_nvic.o has changed
Binary file TARGET_ARCH_GPRS/TOOLCHAIN_ARM_MICRO/mbed.ar has changed
Binary file TARGET_ARCH_GPRS/TOOLCHAIN_ARM_MICRO/retarget.o has changed
Binary file TARGET_ARCH_GPRS/TOOLCHAIN_ARM_MICRO/startup_LPC11xx.o has changed
Binary file TARGET_ARCH_GPRS/TOOLCHAIN_ARM_MICRO/sys.o has changed
Binary file TARGET_ARCH_GPRS/TOOLCHAIN_ARM_MICRO/system_LPC11Uxx.o has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_GPRS/TOOLCHAIN_ARM_STD/LPC11U37.sct Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,20 @@ + +LR_IROM1 0x00000000 0x20000 { ; load region size_region (128K) + ER_IROM1 0x00000000 0x10000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + ; 8_byte_aligned(48 vect * 4 bytes) = 8_byte_aligned(0xC0) = 0xC0 + ; 8KB - 0xC0 = 0x1F40 + RW_IRAM1 0x100000C0 0x1F40 { + .ANY (+RW +ZI) + } + RW_IRAM2 0x20000000 0x800 { ; RW data, I/O Handler RAM + .ANY (IOHANDLER_RAM) + } + RW_IRAM3 0x20004000 0x800 { ; RW data, USB RAM + .ANY (USBRAM) + } +} +
Binary file TARGET_ARCH_GPRS/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_ARCH_GPRS/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_ARCH_GPRS/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_ARCH_GPRS/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_ARCH_GPRS/TOOLCHAIN_ARM_STD/startup_LPC11xx.o has changed
Binary file TARGET_ARCH_GPRS/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_ARCH_GPRS/TOOLCHAIN_ARM_STD/system_LPC11Uxx.o has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_GPRS/TOOLCHAIN_GCC_ARM/LPC11U37.ld Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,151 @@ +/* Linker script to configure memory regions. */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 128K + RAM (rwx) : ORIGIN = 0x100000C0, LENGTH = 0x1F40 + USB_RAM (rwx): ORIGIN = 0x20004000, LENGTH = 0x800 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + KEEP(*(.isr_vector)) + *(.text.Reset_Handler) + + /* Only vectors and code running at reset are safe to be in first 512 + bytes since RAM can be mapped into this area for RAM based interrupt + vectors. */ + . = 0x00000200; + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE (__fini_array_end = .); + + . = ALIGN(4); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + __bss_start__ = .; + *(.bss*) + *(COMMON) + __bss_end__ = .; + } > RAM + + .heap : + { + __end__ = .; + end = __end__; + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy : + { + *(.stack) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +}
Binary file TARGET_ARCH_GPRS/TOOLCHAIN_GCC_ARM/libmbed.a has changed
Binary file TARGET_ARCH_GPRS/TOOLCHAIN_GCC_ARM/retarget.o has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_ARCH_GPRS/TOOLCHAIN_GCC_CR/LPC11U37.ld Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,155 @@ +/* mbed - LPC11U35 linker script + * Based linker script generated by Code Red Technologies Red Suite 4.1 + */ +GROUP(libgcc.a libc_s.a libstdc++_s.a libm.a libcr_newlib_nohost.a crti.o crtn.o crtbegin.o crtend.o) + +MEMORY +{ + /* Define each memory region */ + MFlash32 (rx) : ORIGIN = 0x0, LENGTH = 0x20000 /* 128k */ + RamLoc8 (rwx) : ORIGIN = 0x100000C0, LENGTH = 0x1F40 /* 8k */ + RamUsb2 (rwx) : ORIGIN = 0x20004000, LENGTH = 0x800 /* 2k */ +} + /* Define a symbol for the top of each memory region */ + __top_MFlash32 = 0x0 + 0x10000; + __top_RamLoc8 = 0x10000000 + 0x1F40; + __top_RamUsb2 = 0x20004000 + 0x800; + +ENTRY(ResetISR) + +SECTIONS +{ + + /* MAIN TEXT SECTION */ + .text : ALIGN(4) + { + FILL(0xff) + KEEP(*(.isr_vector)) + *(.text.ResetISR) + . = 0x200; + + /* Global Section Table */ + . = ALIGN(4) ; + __section_table_start = .; + __data_section_table = .; + LONG(LOADADDR(.data)); + LONG( ADDR(.data)) ; + LONG( SIZEOF(.data)); + LONG(LOADADDR(.data_RAM2)); + LONG( ADDR(.data_RAM2)) ; + LONG( SIZEOF(.data_RAM2)); + __data_section_table_end = .; + __bss_section_table = .; + LONG( ADDR(.bss)); + LONG( SIZEOF(.bss)); + LONG( ADDR(.bss_RAM2)); + LONG( SIZEOF(.bss_RAM2)); + __bss_section_table_end = .; + __section_table_end = . ; + /* End of Global Section Table */ + + + *(.after_vectors*) + + *(.text*) + *(.rodata .rodata.*) + . = ALIGN(4); + + /* C++ constructors etc */ + . = ALIGN(4); + KEEP(*(.init)) + + . = ALIGN(4); + __preinit_array_start = .; + KEEP (*(.preinit_array)) + __preinit_array_end = .; + + . = ALIGN(4); + __init_array_start = .; + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array)) + __init_array_end = .; + + KEEP(*(.fini)); + + . = ALIGN(0x4); + KEEP (*crtbegin.o(.ctors)) + KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*crtend.o(.ctors)) + + . = ALIGN(0x4); + KEEP (*crtbegin.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*crtend.o(.dtors)) + /* End C++ */ + } > MFlash32 + + /* + * for exception handling/unwind - some Newlib functions (in common + * with C++ and STDC++) use this. + */ + .ARM.extab : ALIGN(4) + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > MFlash32 + __exidx_start = .; + + .ARM.exidx : ALIGN(4) + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > MFlash32 + __exidx_end = .; + + _etext = .; + + + .data_RAM2 : ALIGN(4) + { + FILL(0xff) + *(.data.$RAM2*) + *(.data.$RamUsb2*) + . = ALIGN(4) ; + } > RamUsb2 AT>MFlash32 + + /* MAIN DATA SECTION */ + + .uninit_RESERVED : ALIGN(4) + { + KEEP(*(.bss.$RESERVED*)) + } > RamLoc8 + + .data : ALIGN(4) + { + FILL(0xff) + _data = .; + *(vtable) + *(.data*) + . = ALIGN(4) ; + _edata = .; + } > RamLoc8 AT>MFlash32 + + + .bss_RAM2 : ALIGN(4) + { + *(.bss.$RAM2*) + *(.bss.$RamUsb2*) + . = ALIGN(4) ; + } > RamUsb2 + + /* MAIN BSS SECTION */ + .bss : ALIGN(4) + { + _bss = .; + *(.bss*) + *(COMMON) + . = ALIGN(4) ; + _ebss = .; + PROVIDE(end = .); + __end__ = .; + } > RamLoc8 + + PROVIDE(_pvHeapStart = .); + PROVIDE(_vStackTop = __top_RamLoc8 - 0); +}
Binary file TARGET_ARCH_GPRS/TOOLCHAIN_GCC_CR/libmbed.a has changed
Binary file TARGET_ARCH_GPRS/TOOLCHAIN_GCC_CR/retarget.o has changed
Binary file TARGET_ARCH_PRO/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_ARCH_PRO/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_ARCH_PRO/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_ARCH_PRO/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_ARCH_PRO/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_ARCH_PRO/TOOLCHAIN_ARM_STD/system_LPC17xx.o has changed
Binary file TARGET_ARCH_PRO/TOOLCHAIN_GCC_ARM/libmbed.a has changed
Binary file TARGET_ARCH_PRO/TOOLCHAIN_GCC_ARM/retarget.o has changed
Binary file TARGET_ARCH_PRO/TOOLCHAIN_GCC_CR/libmbed.a has changed
Binary file TARGET_ARCH_PRO/TOOLCHAIN_GCC_CR/retarget.o has changed
Binary file TARGET_ARCH_PRO/TOOLCHAIN_GCC_CS/libmbed.a has changed
Binary file TARGET_ARCH_PRO/TOOLCHAIN_GCC_CS/retarget.o has changed
Binary file TARGET_ARCH_PRO/TOOLCHAIN_IAR/board.o has changed
Binary file TARGET_ARCH_PRO/TOOLCHAIN_IAR/cmsis_nvic.o has changed
Binary file TARGET_ARCH_PRO/TOOLCHAIN_IAR/mbed.a has changed
Binary file TARGET_ARCH_PRO/TOOLCHAIN_IAR/retarget.o has changed
Binary file TARGET_ARCH_PRO/TOOLCHAIN_IAR/startup_LPC17xx.o has changed
Binary file TARGET_ARCH_PRO/TOOLCHAIN_IAR/system_LPC17xx.o has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_GHI_MBUINO/LPC11Uxx.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,670 @@ + +/****************************************************************************************************//** + * @file LPC11Uxx.h + * + * + * @brief CMSIS Cortex-M0 Core Peripheral Access Layer Header File for + * default LPC11Uxx Device Series + * + * @version V0.1 + * @date 21. March 2011 + * + * @note Generated with SFDGen V2.6 Build 3j (beta) on Thursday, 17.03.2011 13:19:45 + * + * from CMSIS SVD File 'LPC11U1x_svd.xml' Version 0.1, + * created on Wednesday, 16.03.2011 20:30:42, last modified on Thursday, 17.03.2011 20:19:40 + * + *******************************************************************************************************/ + +// ################################################################################ +// Minor fix 8 April 2011 - changed LPC_CT32B1_BASE from 0x40014000 to 0x40018000 +// ################################################################################ + +/** @addtogroup NXP + * @{ + */ + +/** @addtogroup LPC11Uxx + * @{ + */ + +#ifndef __LPC11UXX_H__ +#define __LPC11UXX_H__ + +#ifdef __cplusplus +extern "C" { +#endif + + +#if defined ( __CC_ARM ) + #pragma anon_unions +#endif + + /* Interrupt Number Definition */ + +typedef enum { +// ------------------------- Cortex-M0 Processor Exceptions Numbers ----------------------------- + Reset_IRQn = -15, /*!< 1 Reset Vector, invoked on Power up and warm reset */ + NonMaskableInt_IRQn = -14, /*!< 2 Non maskable Interrupt, cannot be stopped or preempted */ + HardFault_IRQn = -13, /*!< 3 Hard Fault, all classes of Fault */ + SVCall_IRQn = -5, /*!< 11 System Service Call via SVC instruction */ + DebugMonitor_IRQn = -4, /*!< 12 Debug Monitor */ + PendSV_IRQn = -2, /*!< 14 Pendable request for system service */ + SysTick_IRQn = -1, /*!< 15 System Tick Timer */ +// --------------------------- LPC11Uxx Specific Interrupt Numbers ------------------------------ +FLEX_INT0_IRQn = 0, /*!< All I/O pins can be routed to below 8 interrupts. */ + FLEX_INT1_IRQn = 1, + FLEX_INT2_IRQn = 2, + FLEX_INT3_IRQn = 3, + FLEX_INT4_IRQn = 4, + FLEX_INT5_IRQn = 5, + FLEX_INT6_IRQn = 6, + FLEX_INT7_IRQn = 7, + GINT0_IRQn = 8, /*!< Grouped Interrupt 0 */ + GINT1_IRQn = 9, /*!< Grouped Interrupt 1 */ + Reserved0_IRQn = 10, /*!< Reserved Interrupt */ + Reserved1_IRQn = 11, + Reserved2_IRQn = 12, + Reserved3_IRQn = 13, + SSP1_IRQn = 14, /*!< SSP1 Interrupt */ + I2C_IRQn = 15, /*!< I2C Interrupt */ + TIMER_16_0_IRQn = 16, /*!< 16-bit Timer0 Interrupt */ + TIMER_16_1_IRQn = 17, /*!< 16-bit Timer1 Interrupt */ + TIMER_32_0_IRQn = 18, /*!< 32-bit Timer0 Interrupt */ + TIMER_32_1_IRQn = 19, /*!< 32-bit Timer1 Interrupt */ + SSP0_IRQn = 20, /*!< SSP0 Interrupt */ + UART_IRQn = 21, /*!< UART Interrupt */ + USB_IRQn = 22, /*!< USB IRQ Interrupt */ + USB_FIQn = 23, /*!< USB FIQ Interrupt */ + ADC_IRQn = 24, /*!< A/D Converter Interrupt */ + WDT_IRQn = 25, /*!< Watchdog timer Interrupt */ + BOD_IRQn = 26, /*!< Brown Out Detect(BOD) Interrupt */ + FMC_IRQn = 27, /*!< Flash Memory Controller Interrupt */ + Reserved4_IRQn = 28, /*!< Reserved Interrupt */ + Reserved5_IRQn = 29, /*!< Reserved Interrupt */ + USBWakeup_IRQn = 30, /*!< USB wakeup Interrupt */ + Reserved6_IRQn = 31, /*!< Reserved Interrupt */ +} IRQn_Type; + + +/** @addtogroup Configuration_of_CMSIS + * @{ + */ + +/* Processor and Core Peripheral Section */ /* Configuration of the Cortex-M0 Processor and Core Peripherals */ + +#define __MPU_PRESENT 0 /*!< MPU present or not */ +#define __NVIC_PRIO_BITS 3 /*!< Number of Bits used for Priority Levels */ +#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */ +/** @} */ /* End of group Configuration_of_CMSIS */ + +#include "core_cm0.h" /*!< Cortex-M0 processor and core peripherals */ +#include "system_LPC11Uxx.h" /*!< LPC11Uxx System */ + +/** @addtogroup Device_Peripheral_Registers + * @{ + */ + + +// ------------------------------------------------------------------------------------------------ +// ----- I2C ----- +// ------------------------------------------------------------------------------------------------ + + +/** + * @brief Product name title=UM10462 Chapter title=LPC11U1x I2C-bus controller Modification date=3/16/2011 Major revision=0 Minor revision=3 (I2C) + */ + +typedef struct { /*!< (@ 0x40000000) I2C Structure */ + __IO uint32_t CONSET; /*!< (@ 0x40000000) I2C Control Set Register */ + __I uint32_t STAT; /*!< (@ 0x40000004) I2C Status Register */ + __IO uint32_t DAT; /*!< (@ 0x40000008) I2C Data Register. */ + __IO uint32_t ADR0; /*!< (@ 0x4000000C) I2C Slave Address Register 0 */ + __IO uint32_t SCLH; /*!< (@ 0x40000010) SCH Duty Cycle Register High Half Word */ + __IO uint32_t SCLL; /*!< (@ 0x40000014) SCL Duty Cycle Register Low Half Word */ + __IO uint32_t CONCLR; /*!< (@ 0x40000018) I2C Control Clear Register*/ + __IO uint32_t MMCTRL; /*!< (@ 0x4000001C) Monitor mode control register*/ + __IO uint32_t ADR1; /*!< (@ 0x40000020) I2C Slave Address Register 1*/ + __IO uint32_t ADR2; /*!< (@ 0x40000024) I2C Slave Address Register 2*/ + __IO uint32_t ADR3; /*!< (@ 0x40000028) I2C Slave Address Register 3*/ + __I uint32_t DATA_BUFFER; /*!< (@ 0x4000002C) Data buffer register */ +union{ + __IO uint32_t MASK[4]; /*!< (@ 0x40000030) I2C Slave address mask register */ + struct{ + __IO uint32_t MASK0; + __IO uint32_t MASK1; + __IO uint32_t MASK2; + __IO uint32_t MASK3; + }; + }; +} LPC_I2C_Type; + + +// ------------------------------------------------------------------------------------------------ +// ----- WWDT ----- +// ------------------------------------------------------------------------------------------------ + + +/** + * @brief Product name title=UM10462 Chapter title=LPC11U1x Windowed Watchdog Timer (WWDT) Modification date=3/16/2011 Major revision=0 Minor revision=3 (WWDT) + */ + +typedef struct { /*!< (@ 0x40004000) WWDT Structure */ + __IO uint32_t MOD; /*!< (@ 0x40004000) Watchdog mode register*/ + __IO uint32_t TC; /*!< (@ 0x40004004) Watchdog timer constant register */ + __IO uint32_t FEED; /*!< (@ 0x40004008) Watchdog feed sequence register */ + __I uint32_t TV; /*!< (@ 0x4000400C) Watchdog timer value register */ + __IO uint32_t CLKSEL; /*!< (@ 0x40004010) Watchdog clock select register. */ + __IO uint32_t WARNINT; /*!< (@ 0x40004014) Watchdog Warning Interrupt compare value. */ + __IO uint32_t WINDOW; /*!< (@ 0x40004018) Watchdog Window compare value. */ +} LPC_WWDT_Type; + + +// ------------------------------------------------------------------------------------------------ +// ----- USART ----- +// ------------------------------------------------------------------------------------------------ + + +/** + * @brief Product name title=UM10462 Chapter title=LPC11U1x USART Modification date=3/16/2011 Major revision=0 Minor revision=3 (USART) + */ + +typedef struct { /*!< (@ 0x40008000) USART Structure */ + + union { + __IO uint32_t DLL; /*!< (@ 0x40008000) Divisor Latch LSB. Least significant byte of the baud rate divisor value. The full divisor is used to generate a baud rate from the fractional rate divider. (DLAB=1) */ + __O uint32_t THR; /*!< (@ 0x40008000) Transmit Holding Register. The next character to be transmitted is written here. (DLAB=0) */ + __I uint32_t RBR; /*!< (@ 0x40008000) Receiver Buffer Register. Contains the next received character to be read. (DLAB=0) */ + }; + + union { + __IO uint32_t IER; /*!< (@ 0x40008004) Interrupt Enable Register. Contains individual interrupt enable bits for the 7 potential USART interrupts. (DLAB=0) */ + __IO uint32_t DLM; /*!< (@ 0x40008004) Divisor Latch MSB. Most significant byte of the baud rate divisor value. The full divisor is used to generate a baud rate from the fractional rate divider. (DLAB=1) */ + }; + + union { + __O uint32_t FCR; /*!< (@ 0x40008008) FIFO Control Register. Controls USART FIFO usage and modes. */ + __I uint32_t IIR; /*!< (@ 0x40008008) Interrupt ID Register. Identifies which interrupt(s) are pending. */ + }; + __IO uint32_t LCR; /*!< (@ 0x4000800C) Line Control Register. Contains controls for frame formatting and break generation. */ + __IO uint32_t MCR; /*!< (@ 0x40008010) Modem Control Register. */ + __I uint32_t LSR; /*!< (@ 0x40008014) Line Status Register. Contains flags for transmit and receive status, including line errors. */ + __I uint32_t MSR; /*!< (@ 0x40008018) Modem Status Register. */ + __IO uint32_t SCR; /*!< (@ 0x4000801C) Scratch Pad Register. Eight-bit temporary storage for software. */ + __IO uint32_t ACR; /*!< (@ 0x40008020) Auto-baud Control Register. Contains controls for the auto-baud feature. */ + __IO uint32_t ICR; /*!< (@ 0x40008024) IrDA Control Register. Enables and configures the IrDA (remote control) mode. */ + __IO uint32_t FDR; /*!< (@ 0x40008028) Fractional Divider Register. Generates a clock input for the baud rate divider. */ + __IO uint32_t OSR; /*!< (@ 0x4000802C) Oversampling Register. Controls the degree of oversampling during each bit time. */ + __IO uint32_t TER; /*!< (@ 0x40008030) Transmit Enable Register. Turns off USART transmitter for use with software flow control. */ + __I uint32_t RESERVED0[3]; + __IO uint32_t HDEN; /*!< (@ 0x40008040) Half duplex enable register. */ + __I uint32_t RESERVED1; + __IO uint32_t SCICTRL; /*!< (@ 0x40008048) Smart Card Interface Control register. Enables and configures the Smart Card Interface feature. */ + __IO uint32_t RS485CTRL; /*!< (@ 0x4000804C) RS-485/EIA-485 Control. Contains controls to configure various aspects of RS-485/EIA-485 modes. */ + __IO uint32_t RS485ADRMATCH; /*!< (@ 0x40008050) RS-485/EIA-485 address match. Contains the address match value for RS-485/EIA-485 mode. */ + __IO uint32_t RS485DLY; /*!< (@ 0x40008054) RS-485/EIA-485 direction control delay. */ + __IO uint32_t SYNCCTRL; +} LPC_USART_Type; + + +// ------------------------------------------------------------------------------------------------ +// ----- Timer ----- +// ------------------------------------------------------------------------------------------------ + + +/** + * @brief Product name title=UM10462 Chapter title=LPC11U1x 32-bitcounter/timers CT32B0/1 Modification date=3/16/2011 Major revision=0 Minor revision=3 + */ + +typedef struct { /*!< (@ 0x40014000) CT32B0 Structure */ + __IO uint32_t IR; /*!< (@ 0x40014000) Interrupt Register */ + __IO uint32_t TCR; /*!< (@ 0x40014004) Timer Control Register */ + __IO uint32_t TC; /*!< (@ 0x40014008) Timer Counter */ + __IO uint32_t PR; /*!< (@ 0x4001400C) Prescale Register */ + __IO uint32_t PC; /*!< (@ 0x40014010) Prescale Counter */ + __IO uint32_t MCR; /*!< (@ 0x40014014) Match Control Register */ + union { + __IO uint32_t MR[4]; /*!< (@ 0x40014018) Match Register */ + struct{ + __IO uint32_t MR0; /*!< (@ 0x40018018) Match Register. MR0 */ + __IO uint32_t MR1; /*!< (@ 0x4001801C) Match Register. MR1 */ + __IO uint32_t MR2; /*!< (@ 0x40018020) Match Register. MR2 */ + __IO uint32_t MR3; /*!< (@ 0x40018024) Match Register. MR3 */ + }; + }; + __IO uint32_t CCR; /*!< (@ 0x40014028) Capture Control Register */ + union{ + __I uint32_t CR[4]; /*!< (@ 0x4001402C) Capture Register */ + struct{ + __I uint32_t CR0; /*!< (@ 0x4001802C) Capture Register. CR 0 */ + __I uint32_t CR1; /*!< (@ 0x40018030) Capture Register. CR 1 */ + __I uint32_t CR2; /*!< (@ 0x40018034) Capture Register. CR 2 */ + __I uint32_t CR3; /*!< (@ 0x40018038) Capture Register. CR 3 */ + }; + }; +__IO uint32_t EMR; /*!< (@ 0x4001403C) External Match Register */ + __I uint32_t RESERVED0[12]; + __IO uint32_t CTCR; /*!< (@ 0x40014070) Count Control Register */ + __IO uint32_t PWMC; /*!< (@ 0x40014074) PWM Control Register */ +} LPC_CTxxBx_Type; + + + +// ------------------------------------------------------------------------------------------------ +// ----- ADC ----- +// ------------------------------------------------------------------------------------------------ + + +/** + * @brief Product name title=UM10462 Chapter title=LPC11U1x ADC Modification date=3/16/2011 Major revision=0 Minor revision=3 (ADC) + */ + +typedef struct { /*!< (@ 0x4001C000) ADC Structure */ + __IO uint32_t CR; /*!< (@ 0x4001C000) A/D Control Register */ + __IO uint32_t GDR; /*!< (@ 0x4001C004) A/D Global Data Register */ + __I uint32_t RESERVED0[1]; + __IO uint32_t INTEN; /*!< (@ 0x4001C00C) A/D Interrupt Enable Register */ + union{ + __I uint32_t DR[8]; /*!< (@ 0x4001C010) A/D Channel Data Register*/ + struct{ + __IO uint32_t DR0; /*!< (@ 0x40020010) A/D Channel Data Register 0*/ + __IO uint32_t DR1; /*!< (@ 0x40020014) A/D Channel Data Register 1*/ + __IO uint32_t DR2; /*!< (@ 0x40020018) A/D Channel Data Register 2*/ + __IO uint32_t DR3; /*!< (@ 0x4002001C) A/D Channel Data Register 3*/ + __IO uint32_t DR4; /*!< (@ 0x40020020) A/D Channel Data Register 4*/ + __IO uint32_t DR5; /*!< (@ 0x40020024) A/D Channel Data Register 5*/ + __IO uint32_t DR6; /*!< (@ 0x40020028) A/D Channel Data Register 6*/ + __IO uint32_t DR7; /*!< (@ 0x4002002C) A/D Channel Data Register 7*/ + }; + }; + __I uint32_t STAT; /*!< (@ 0x4001C030) A/D Status Register. */ +} LPC_ADC_Type; + + +// ------------------------------------------------------------------------------------------------ +// ----- PMU ----- +// ------------------------------------------------------------------------------------------------ + + +/** + * @brief Product name title=UM10462 Chapter title=LPC11U1x Power Management Unit (PMU) Modification date=3/16/2011 Major revision=0 Minor revision=3 (PMU) + */ + +typedef struct { /*!< (@ 0x40038000) PMU Structure */ + __IO uint32_t PCON; /*!< (@ 0x40038000) Power control register */ + union{ + __IO uint32_t GPREG[4]; /*!< (@ 0x40038004) General purpose register 0 */ + struct{ + __IO uint32_t GPREG0; /*!< (@ 0x40038004) General purpose register 0 */ + __IO uint32_t GPREG1; /*!< (@ 0x40038008) General purpose register 1 */ + __IO uint32_t GPREG2; /*!< (@ 0x4003800C) General purpose register 2 */ + __IO uint32_t GPREG3; /*!< (@ 0x40038010) General purpose register 3 */ + }; + }; +} LPC_PMU_Type; + + +// ------------------------------------------------------------------------------------------------ +// ----- FLASHCTRL ----- +// ------------------------------------------------------------------------------------------------ + + +/** + * @brief Product name title=UM10462 Chapter title=LPC11U1x Flash programming firmware Modification date=3/17/2011 Major revision=0 Minor revision=3 (FLASHCTRL) + */ + +typedef struct { /*!< (@ 0x4003C000) FLASHCTRL Structure */ + __I uint32_t RESERVED0[4]; + __IO uint32_t FLASHCFG; /*!< (@ 0x4003C010) Flash memory access time configuration register */ + __I uint32_t RESERVED1[3]; + __IO uint32_t FMSSTART; /*!< (@ 0x4003C020) Signature start address register */ + __IO uint32_t FMSSTOP; /*!< (@ 0x4003C024) Signature stop-address register */ + __I uint32_t RESERVED2[1]; + __I uint32_t FMSW0; /*!< (@ 0x4003C02C) Word 0 [31:0] */ + __I uint32_t FMSW1; /*!< (@ 0x4003C030) Word 1 [63:32] */ + __I uint32_t FMSW2; /*!< (@ 0x4003C034) Word 2 [95:64] */ + __I uint32_t FMSW3; /*!< (@ 0x4003C038) Word 3 [127:96] */ + __I uint32_t RESERVED3[1001]; + __I uint32_t FMSTAT; /*!< (@ 0x4003CFE0) Signature generation status register */ + __I uint32_t RESERVED4[1]; + __IO uint32_t FMSTATCLR; /*!< (@ 0x4003CFE8) Signature generation status clear register */ +} LPC_FLASHCTRL_Type; + + +// ------------------------------------------------------------------------------------------------ +// ----- SSP0/1 ----- +// ------------------------------------------------------------------------------------------------ + + +/** + * @brief Product name title=UM10462 Chapter title=LPC11U1x SSP/SPI Modification date=3/16/2011 Major revision=0 Minor revision=3 (SSP0) + */ + +typedef struct { /*!< (@ 0x40040000) SSP0 Structure */ + __IO uint32_t CR0; /*!< (@ 0x40040000) Control Register 0. Selects the serial clock rate, bus type, and data size. */ + __IO uint32_t CR1; /*!< (@ 0x40040004) Control Register 1. Selects master/slave and other modes. */ + __IO uint32_t DR; /*!< (@ 0x40040008) Data Register. Writes fill the transmit FIFO, and reads empty the receive FIFO. */ + __I uint32_t SR; /*!< (@ 0x4004000C) Status Register */ + __IO uint32_t CPSR; /*!< (@ 0x40040010) Clock Prescale Register */ + __IO uint32_t IMSC; /*!< (@ 0x40040014) Interrupt Mask Set and Clear Register */ + __I uint32_t RIS; /*!< (@ 0x40040018) Raw Interrupt Status Register */ + __I uint32_t MIS; /*!< (@ 0x4004001C) Masked Interrupt Status Register */ + __IO uint32_t ICR; /*!< (@ 0x40040020) SSPICR Interrupt Clear Register */ +} LPC_SSPx_Type; + + + +// ------------------------------------------------------------------------------------------------ +// ----- IOCONFIG ----- +// ------------------------------------------------------------------------------------------------ + + +/** + * @brief Product name title=UM10462 Chapter title=LPC11U1x I/O configuration Modification date=3/16/2011 Major revision=0 Minor revision=3 (IOCONFIG) + */ + +typedef struct { /*!< (@ 0x40044000) IOCONFIG Structure */ + __IO uint32_t RESET_PIO0_0; /*!< (@ 0x40044000) I/O configuration for pin RESET/PIO0_0 */ + __IO uint32_t PIO0_1; /*!< (@ 0x40044004) I/O configuration for pin PIO0_1/CLKOUT/CT32B0_MAT2/USB_FTOGGLE */ + __IO uint32_t PIO0_2; /*!< (@ 0x40044008) I/O configuration for pin PIO0_2/SSEL0/CT16B0_CAP0 */ + __IO uint32_t PIO0_3; /*!< (@ 0x4004400C) I/O configuration for pin PIO0_3/USB_VBUS */ + __IO uint32_t PIO0_4; /*!< (@ 0x40044010) I/O configuration for pin PIO0_4/SCL */ + __IO uint32_t PIO0_5; /*!< (@ 0x40044014) I/O configuration for pin PIO0_5/SDA */ + __IO uint32_t PIO0_6; /*!< (@ 0x40044018) I/O configuration for pin PIO0_6/USB_CONNECT/SCK0 */ + __IO uint32_t PIO0_7; /*!< (@ 0x4004401C) I/O configuration for pin PIO0_7/CTS */ + __IO uint32_t PIO0_8; /*!< (@ 0x40044020) I/O configuration for pin PIO0_8/MISO0/CT16B0_MAT0 */ + __IO uint32_t PIO0_9; /*!< (@ 0x40044024) I/O configuration for pin PIO0_9/MOSI0/CT16B0_MAT1 */ + __IO uint32_t SWCLK_PIO0_10; /*!< (@ 0x40044028) I/O configuration for pin SWCLK/PIO0_10/ SCK0/CT16B0_MAT2 */ + __IO uint32_t TDI_PIO0_11; /*!< (@ 0x4004402C) I/O configuration for pin TDI/PIO0_11/AD0/CT32B0_MAT3 */ + __IO uint32_t TMS_PIO0_12; /*!< (@ 0x40044030) I/O configuration for pin TMS/PIO0_12/AD1/CT32B1_CAP0 */ + __IO uint32_t TDO_PIO0_13; /*!< (@ 0x40044034) I/O configuration for pin TDO/PIO0_13/AD2/CT32B1_MAT0 */ + __IO uint32_t TRST_PIO0_14; /*!< (@ 0x40044038) I/O configuration for pin TRST/PIO0_14/AD3/CT32B1_MAT1 */ + __IO uint32_t SWDIO_PIO0_15; /*!< (@ 0x4004403C) I/O configuration for pin SWDIO/PIO0_15/AD4/CT32B1_MAT2 */ + __IO uint32_t PIO0_16; /*!< (@ 0x40044040) I/O configuration for pin PIO0_16/AD5/CT32B1_MAT3/ WAKEUP */ + __IO uint32_t PIO0_17; /*!< (@ 0x40044044) I/O configuration for pin PIO0_17/RTS/CT32B0_CAP0/SCLK */ + __IO uint32_t PIO0_18; /*!< (@ 0x40044048) I/O configuration for pin PIO0_18/RXD/CT32B0_MAT0 */ + __IO uint32_t PIO0_19; /*!< (@ 0x4004404C) I/O configuration for pin PIO0_19/TXD/CT32B0_MAT1 */ + __IO uint32_t PIO0_20; /*!< (@ 0x40044050) I/O configuration for pin PIO0_20/CT16B1_CAP0 */ + __IO uint32_t PIO0_21; /*!< (@ 0x40044054) I/O configuration for pin PIO0_21/CT16B1_MAT0/MOSI1 */ + __IO uint32_t PIO0_22; /*!< (@ 0x40044058) I/O configuration for pin PIO0_22/AD6/CT16B1_MAT1/MISO1 */ + __IO uint32_t PIO0_23; /*!< (@ 0x4004405C) I/O configuration for pin PIO0_23/AD7 */ + __IO uint32_t PIO1_0; /*!< Offset: 0x060 */ + __IO uint32_t PIO1_1; + __IO uint32_t PIO1_2; + __IO uint32_t PIO1_3; + __IO uint32_t PIO1_4; /*!< Offset: 0x070 */ + __IO uint32_t PIO1_5; /*!< (@ 0x40044074) I/O configuration for pin PIO1_5/CT32B1_CAP1 */ + __IO uint32_t PIO1_6; + __IO uint32_t PIO1_7; + __IO uint32_t PIO1_8; /*!< Offset: 0x080 */ + __IO uint32_t PIO1_9; + __IO uint32_t PIO1_10; + __IO uint32_t PIO1_11; + __IO uint32_t PIO1_12; /*!< Offset: 0x090 */ + __IO uint32_t PIO1_13; /*!< (@ 0x40044094) I/O configuration for pin PIO1_13/DTR/CT16B0_MAT0/TXD */ + __IO uint32_t PIO1_14; /*!< (@ 0x40044098) I/O configuration for pin PIO1_14/DSR/CT16B0_MAT1/RXD */ + __IO uint32_t PIO1_15; /*!< (@ 0x4004409C) I/O configuration for pin PIO1_15/DCD/ CT16B0_MAT2/SCK1 */ + __IO uint32_t PIO1_16; /*!< (@ 0x400440A0) I/O configuration for pin PIO1_16/RI/CT16B0_CAP0 */ + __IO uint32_t PIO1_17; + __IO uint32_t PIO1_18; + __IO uint32_t PIO1_19; /*!< (@ 0x400440AC) I/O configuration for pin PIO1_19/DTR/SSEL1 */ + __IO uint32_t PIO1_20; /*!< (@ 0x400440B0) I/O configuration for pin PIO1_20/DSR/SCK1 */ + __IO uint32_t PIO1_21; /*!< (@ 0x400440B4) I/O configuration for pin PIO1_21/DCD/MISO1 */ + __IO uint32_t PIO1_22; /*!< (@ 0x400440B8) I/O configuration for pin PIO1_22/RI/MOSI1 */ + __IO uint32_t PIO1_23; /*!< (@ 0x400440BC) I/O configuration for pin PIO1_23/CT16B1_MAT1/SSEL1 */ + __IO uint32_t PIO1_24; /*!< (@ 0x400440C0) I/O configuration for pin PIO1_24/ CT32B0_MAT0 */ + __IO uint32_t PIO1_25; /*!< (@ 0x400440C4) I/O configuration for pin PIO1_25/CT32B0_MAT1 */ + __IO uint32_t PIO1_26; /*!< (@ 0x400440C8) I/O configuration for pin PIO1_26/CT32B0_MAT2/ RXD */ + __IO uint32_t PIO1_27; /*!< (@ 0x400440CC) I/O configuration for pin PIO1_27/CT32B0_MAT3/ TXD */ + __IO uint32_t PIO1_28; /*!< (@ 0x400440D0) I/O configuration for pin PIO1_28/CT32B0_CAP0/ SCLK */ + __IO uint32_t PIO1_29; /*!< (@ 0x400440D4) I/O configuration for pin PIO1_29/SCK0/ CT32B0_CAP1 */ + __IO uint32_t PIO1_30; + __IO uint32_t PIO1_31; /*!< (@ 0x400440DC) I/O configuration for pin PIO1_31 */ +} LPC_IOCON_Type; + + +// ------------------------------------------------------------------------------------------------ +// ----- SYSCON ----- +// ------------------------------------------------------------------------------------------------ + + +/** + * @brief Product name title=UM10462 Chapter title=LPC11U1x System control block Modification date=3/16/2011 Major revision=0 Minor revision=3 (SYSCON) + */ + +typedef struct { /*!< (@ 0x40048000) SYSCON Structure */ + __IO uint32_t SYSMEMREMAP; /*!< (@ 0x40048000) System memory remap */ + __IO uint32_t PRESETCTRL; /*!< (@ 0x40048004) Peripheral reset control */ + __IO uint32_t SYSPLLCTRL; /*!< (@ 0x40048008) System PLL control */ + __I uint32_t SYSPLLSTAT; /*!< (@ 0x4004800C) System PLL status */ + __IO uint32_t USBPLLCTRL; /*!< (@ 0x40048010) USB PLL control */ + __I uint32_t USBPLLSTAT; /*!< (@ 0x40048014) USB PLL status */ + __I uint32_t RESERVED0[2]; + __IO uint32_t SYSOSCCTRL; /*!< (@ 0x40048020) System oscillator control */ + __IO uint32_t WDTOSCCTRL; /*!< (@ 0x40048024) Watchdog oscillator control */ + __I uint32_t RESERVED1[2]; + __IO uint32_t SYSRSTSTAT; /*!< (@ 0x40048030) System reset status register */ + __I uint32_t RESERVED2[3]; + __IO uint32_t SYSPLLCLKSEL; /*!< (@ 0x40048040) System PLL clock source select */ + __IO uint32_t SYSPLLCLKUEN; /*!< (@ 0x40048044) System PLL clock source update enable */ + __IO uint32_t USBPLLCLKSEL; /*!< (@ 0x40048048) USB PLL clock source select */ + __IO uint32_t USBPLLCLKUEN; /*!< (@ 0x4004804C) USB PLL clock source update enable */ + __I uint32_t RESERVED3[8]; + __IO uint32_t MAINCLKSEL; /*!< (@ 0x40048070) Main clock source select */ + __IO uint32_t MAINCLKUEN; /*!< (@ 0x40048074) Main clock source update enable */ + __IO uint32_t SYSAHBCLKDIV; /*!< (@ 0x40048078) System clock divider */ + __I uint32_t RESERVED4[1]; + __IO uint32_t SYSAHBCLKCTRL; /*!< (@ 0x40048080) System clock control */ + __I uint32_t RESERVED5[4]; + __IO uint32_t SSP0CLKDIV; /*!< (@ 0x40048094) SSP0 clock divider */ + __IO uint32_t UARTCLKDIV; /*!< (@ 0x40048098) UART clock divider */ + __IO uint32_t SSP1CLKDIV; /*!< (@ 0x4004809C) SSP1 clock divider */ + __I uint32_t RESERVED6[8]; + __IO uint32_t USBCLKSEL; /*!< (@ 0x400480C0) USB clock source select */ + __IO uint32_t USBCLKUEN; /*!< (@ 0x400480C4) USB clock source update enable */ + __IO uint32_t USBCLKDIV; /*!< (@ 0x400480C8) USB clock source divider */ + __I uint32_t RESERVED7[5]; + __IO uint32_t CLKOUTSEL; /*!< (@ 0x400480E0) CLKOUT clock source select */ + __IO uint32_t CLKOUTUEN; /*!< (@ 0x400480E4) CLKOUT clock source update enable */ + __IO uint32_t CLKOUTDIV; /*!< (@ 0x400480E8) CLKOUT clock divider */ + __I uint32_t RESERVED8[5]; + __I uint32_t PIOPORCAP0; /*!< (@ 0x40048100) POR captured PIO status 0 */ + __I uint32_t PIOPORCAP1; /*!< (@ 0x40048104) POR captured PIO status 1 */ + __I uint32_t RESERVED9[18]; + __IO uint32_t BODCTRL; /*!< (@ 0x40048150) Brown-Out Detect */ + __IO uint32_t SYSTCKCAL; /*!< (@ 0x40048154) System tick counter calibration */ + __I uint32_t RESERVED10[6]; + __IO uint32_t IRQLATENCY; /*!< (@ 0x40048170) IQR delay */ + __IO uint32_t NMISRC; /*!< (@ 0x40048174) NMI Source Control */ + __IO uint32_t PINTSEL[8]; /*!< (@ 0x40048178) GPIO Pin Interrupt Select register 0 */ + __IO uint32_t USBCLKCTRL; /*!< (@ 0x40048198) USB clock control */ + __I uint32_t USBCLKST; /*!< (@ 0x4004819C) USB clock status */ + __I uint32_t RESERVED11[25]; + __IO uint32_t STARTERP0; /*!< (@ 0x40048204) Start logic 0 interrupt wake-up enable register 0 */ + __I uint32_t RESERVED12[3]; + __IO uint32_t STARTERP1; /*!< (@ 0x40048214) Start logic 1 interrupt wake-up enable register 1 */ + __I uint32_t RESERVED13[6]; + __IO uint32_t PDSLEEPCFG; /*!< (@ 0x40048230) Power-down states in deep-sleep mode */ + __IO uint32_t PDAWAKECFG; /*!< (@ 0x40048234) Power-down states for wake-up from deep-sleep */ + __IO uint32_t PDRUNCFG; /*!< (@ 0x40048238) Power configuration register */ + __I uint32_t RESERVED14[110]; + __I uint32_t DEVICE_ID; /*!< (@ 0x400483F4) Device ID */ +} LPC_SYSCON_Type; + + +// ------------------------------------------------------------------------------------------------ +// ----- GPIO_PIN_INT ----- +// ------------------------------------------------------------------------------------------------ + + +/** + * @brief Product name title=UM10462 Chapter title=LPC11U1x GPIO Modification date=3/17/2011 Major revision=0 Minor revision=3 (GPIO_PIN_INT) + */ + +typedef struct { /*!< (@ 0x4004C000) GPIO_PIN_INT Structure */ + __IO uint32_t ISEL; /*!< (@ 0x4004C000) Pin Interrupt Mode register */ + __IO uint32_t IENR; /*!< (@ 0x4004C004) Pin Interrupt Enable (Rising) register */ + __IO uint32_t SIENR; /*!< (@ 0x4004C008) Set Pin Interrupt Enable (Rising) register */ + __IO uint32_t CIENR; /*!< (@ 0x4004C00C) Clear Pin Interrupt Enable (Rising) register */ + __IO uint32_t IENF; /*!< (@ 0x4004C010) Pin Interrupt Enable Falling Edge / Active Level register */ + __IO uint32_t SIENF; /*!< (@ 0x4004C014) Set Pin Interrupt Enable Falling Edge / Active Level register */ + __IO uint32_t CIENF; /*!< (@ 0x4004C018) Clear Pin Interrupt Enable Falling Edge / Active Level address */ + __IO uint32_t RISE; /*!< (@ 0x4004C01C) Pin Interrupt Rising Edge register */ + __IO uint32_t FALL; /*!< (@ 0x4004C020) Pin Interrupt Falling Edge register */ + __IO uint32_t IST; /*!< (@ 0x4004C024) Pin Interrupt Status register */ +} LPC_GPIO_PIN_INT_Type; + + +// ------------------------------------------------------------------------------------------------ +// ----- GPIO_GROUP_INT0/1 ----- +// ------------------------------------------------------------------------------------------------ + + +/** + * @brief Product name title=UM10462 Chapter title=LPC11U1x GPIO Modification date=3/17/2011 Major revision=0 Minor revision=3 (GPIO_GROUP_INT0) + */ + +typedef struct { /*!< (@ 0x4005C000) GPIO_GROUP_INT0 Structure */ + __IO uint32_t CTRL; /*!< (@ 0x4005C000) GPIO grouped interrupt control register */ + __I uint32_t RESERVED0[7]; + __IO uint32_t PORT_POL[2]; /*!< (@ 0x4005C020) GPIO grouped interrupt port 0 polarity register */ + __I uint32_t RESERVED1[6]; + __IO uint32_t PORT_ENA[2]; /*!< (@ 0x4005C040) GPIO grouped interrupt port 0/1 enable register */ +} LPC_GPIO_GROUP_INTx_Type; + + + +// ------------------------------------------------------------------------------------------------ +// ----- USB ----- +// ------------------------------------------------------------------------------------------------ + + +/** + * @brief Product name title=UM10462 Chapter title=LPC11U1x USB2.0device controller Modification date=3/16/2011 Major revision=0 Minor revision=3 (USB) + */ + +typedef struct { /*!< (@ 0x40080000) USB Structure */ + __IO uint32_t DEVCMDSTAT; /*!< (@ 0x40080000) USB Device Command/Status register */ + __IO uint32_t INFO; /*!< (@ 0x40080004) USB Info register */ + __IO uint32_t EPLISTSTART; /*!< (@ 0x40080008) USB EP Command/Status List start address */ + __IO uint32_t DATABUFSTART; /*!< (@ 0x4008000C) USB Data buffer start address */ + __IO uint32_t LPM; /*!< (@ 0x40080010) Link Power Management register */ + __IO uint32_t EPSKIP; /*!< (@ 0x40080014) USB Endpoint skip */ + __IO uint32_t EPINUSE; /*!< (@ 0x40080018) USB Endpoint Buffer in use */ + __IO uint32_t EPBUFCFG; /*!< (@ 0x4008001C) USB Endpoint Buffer Configuration register */ + __IO uint32_t INTSTAT; /*!< (@ 0x40080020) USB interrupt status register */ + __IO uint32_t INTEN; /*!< (@ 0x40080024) USB interrupt enable register */ + __IO uint32_t INTSETSTAT; /*!< (@ 0x40080028) USB set interrupt status register */ + __IO uint32_t INTROUTING; /*!< (@ 0x4008002C) USB interrupt routing register */ + __I uint32_t RESERVED0[1]; + __I uint32_t EPTOGGLE; /*!< (@ 0x40080034) USB Endpoint toggle register */ +} LPC_USB_Type; + + +// ------------------------------------------------------------------------------------------------ +// ----- GPIO_PORT ----- +// ------------------------------------------------------------------------------------------------ + + +/** + * @brief Product name title=UM10462 Chapter title=LPC11U1x GPIO Modification date=3/17/2011 Major revision=0 Minor revision=3 (GPIO_PORT) + */ + +typedef struct { + union { + struct { + __IO uint8_t B0[32]; /*!< (@ 0x50000000) Byte pin registers port 0; pins PIO0_0 to PIO0_31 */ + __IO uint8_t B1[32]; /*!< (@ 0x50000020) Byte pin registers port 1 */ + }; + __IO uint8_t B[64]; /*!< (@ 0x50000000) Byte pin registers port 0/1 */ + }; + __I uint32_t RESERVED0[1008]; + union { + struct { + __IO uint32_t W0[32]; /*!< (@ 0x50001000) Word pin registers port 0 */ + __IO uint32_t W1[32]; /*!< (@ 0x50001080) Word pin registers port 1 */ + }; + __IO uint32_t W[64]; /*!< (@ 0x50001000) Word pin registers port 0/1 */ + }; + uint32_t RESERVED1[960]; + __IO uint32_t DIR[2]; /* 0x2000 */ + uint32_t RESERVED2[30]; + __IO uint32_t MASK[2]; /* 0x2080 */ + uint32_t RESERVED3[30]; + __IO uint32_t PIN[2]; /* 0x2100 */ + uint32_t RESERVED4[30]; + __IO uint32_t MPIN[2]; /* 0x2180 */ + uint32_t RESERVED5[30]; + __IO uint32_t SET[2]; /* 0x2200 */ + uint32_t RESERVED6[30]; + __O uint32_t CLR[2]; /* 0x2280 */ + uint32_t RESERVED7[30]; + __O uint32_t NOT[2]; /* 0x2300 */ +} LPC_GPIO_Type; + + +#if defined ( __CC_ARM ) + #pragma no_anon_unions +#endif + + +// ------------------------------------------------------------------------------------------------ +// ----- Peripheral memory map ----- +// ------------------------------------------------------------------------------------------------ + +#define LPC_I2C_BASE (0x40000000) +#define LPC_WWDT_BASE (0x40004000) +#define LPC_USART_BASE (0x40008000) +#define LPC_CT16B0_BASE (0x4000C000) +#define LPC_CT16B1_BASE (0x40010000) +#define LPC_CT32B0_BASE (0x40014000) +#define LPC_CT32B1_BASE (0x40018000) +#define LPC_ADC_BASE (0x4001C000) +#define LPC_PMU_BASE (0x40038000) +#define LPC_FLASHCTRL_BASE (0x4003C000) +#define LPC_SSP0_BASE (0x40040000) +#define LPC_SSP1_BASE (0x40058000) +#define LPC_IOCON_BASE (0x40044000) +#define LPC_SYSCON_BASE (0x40048000) +#define LPC_GPIO_PIN_INT_BASE (0x4004C000) +#define LPC_GPIO_GROUP_INT0_BASE (0x4005C000) +#define LPC_GPIO_GROUP_INT1_BASE (0x40060000) +#define LPC_USB_BASE (0x40080000) +#define LPC_GPIO_BASE (0x50000000) + + +// ------------------------------------------------------------------------------------------------ +// ----- Peripheral declaration ----- +// ------------------------------------------------------------------------------------------------ + +#define LPC_I2C ((LPC_I2C_Type *) LPC_I2C_BASE) +#define LPC_WWDT ((LPC_WWDT_Type *) LPC_WWDT_BASE) +#define LPC_USART ((LPC_USART_Type *) LPC_USART_BASE) +#define LPC_CT16B0 ((LPC_CTxxBx_Type *) LPC_CT16B0_BASE) +#define LPC_CT16B1 ((LPC_CTxxBx_Type *) LPC_CT16B1_BASE) +#define LPC_CT32B0 ((LPC_CTxxBx_Type *) LPC_CT32B0_BASE) +#define LPC_CT32B1 ((LPC_CTxxBx_Type *) LPC_CT32B1_BASE) +#define LPC_ADC ((LPC_ADC_Type *) LPC_ADC_BASE) +#define LPC_PMU ((LPC_PMU_Type *) LPC_PMU_BASE) +#define LPC_FLASHCTRL ((LPC_FLASHCTRL_Type *) LPC_FLASHCTRL_BASE) +#define LPC_SSP0 ((LPC_SSPx_Type *) LPC_SSP0_BASE) +#define LPC_SSP1 ((LPC_SSPx_Type *) LPC_SSP1_BASE) +#define LPC_IOCON ((LPC_IOCON_Type *) LPC_IOCON_BASE) +#define LPC_SYSCON ((LPC_SYSCON_Type *) LPC_SYSCON_BASE) +#define LPC_GPIO_PIN_INT ((LPC_GPIO_PIN_INT_Type *) LPC_GPIO_PIN_INT_BASE) +#define LPC_GPIO_GROUP_INT0 ((LPC_GPIO_GROUP_INTx_Type*) LPC_GPIO_GROUP_INT0_BASE) +#define LPC_GPIO_GROUP_INT1 ((LPC_GPIO_GROUP_INTx_Type*) LPC_GPIO_GROUP_INT1_BASE) +#define LPC_USB ((LPC_USB_Type *) LPC_USB_BASE) +#define LPC_GPIO ((LPC_GPIO_Type *) LPC_GPIO_BASE) + + +/** @} */ /* End of group Device_Peripheral_Registers */ +/** @} */ /* End of group (null) */ +/** @} */ /* End of group LPC11Uxx */ + +#ifdef __cplusplus +} +#endif + + +#endif // __LPC11UXX_H__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_GHI_MBUINO/TARGET_NXP/TARGET_LPC11UXX/PeripheralPins.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,43 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * 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 MBED_PERIPHERALPINS_H +#define MBED_PERIPHERALPINS_H + +#include "pinmap.h" +#include "PeripheralNames.h" + +/************ADC***************/ +extern const PinMap PinMap_ADC[]; + +/************I2C***************/ +extern const PinMap PinMap_I2C_SDA[]; +extern const PinMap PinMap_I2C_SCL[]; + +/************UART***************/ +extern const PinMap PinMap_UART_TX[]; +extern const PinMap PinMap_UART_RX[]; + +/************SPI***************/ +extern const PinMap PinMap_SPI_SCLK[]; +extern const PinMap PinMap_SPI_MOSI[]; +extern const PinMap PinMap_SPI_MISO[]; +extern const PinMap PinMap_SPI_SSEL[]; + +/************PWM***************/ +extern const PinMap PinMap_PWM[]; + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_GHI_MBUINO/TARGET_NXP/TARGET_LPC11UXX/PortNames.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,31 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * 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 MBED_PORTNAMES_H +#define MBED_PORTNAMES_H + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + Port0 = 0, + Port1 = 1 +} PortName; + +#ifdef __cplusplus +} +#endif +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_GHI_MBUINO/TARGET_NXP/TARGET_LPC11UXX/TARGET_GHI_MBUINO/PeripheralNames.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,91 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * 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 MBED_PERIPHERALNAMES_H +#define MBED_PERIPHERALNAMES_H + +#include "cmsis.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + UART_0 = (int)LPC_USART_BASE +} UARTName; + +typedef enum { + I2C_0 = (int)LPC_I2C_BASE +} I2CName; + +typedef enum { + ADC0_0 = 0, + ADC0_1, + ADC0_2, + ADC0_3, + ADC0_4, + ADC0_5, + ADC0_6, + ADC0_7 +} ADCName; + +typedef enum { + SPI_0 = (int)LPC_SSP0_BASE, + SPI_1 = (int)LPC_SSP1_BASE +} SPIName; + +typedef enum { + PWM_1 = 0, + PWM_2, + PWM_3, + PWM_4, + PWM_5, + PWM_6, + PWM_7, + PWM_8, + PWM_9, + PWM_10, + PWM_11, + PWM_12, + PWM_13 +} PWMName; + +#define STDIO_UART_TX USBTX +#define STDIO_UART_RX USBRX +#define STDIO_UART UART_0 + +// Default peripherals +#define MBED_SPI0 P0_9, P0_8, P0_6, P0_2 // MOSI, MISO, CLK, SEL +#define MBED_SPI1 P0_21, P0_22, P1_15, P01_19 // MOSI, MISO, CLK, SEL + +#define MBED_UART0 USBTX, USBRX +#define MBED_UARTUSB USBTX, USBRX + +#define MBED_I2C0 P0_5, P0_4 + +#define MBED_ANALOGIN0 P0_11 +#define MBED_ANALOGIN1 P0_12 +#define MBED_ANALOGIN2 P0_13 +#define MBED_ANALOGIN3 P0_14 +#define MBED_ANALOGIN4 P0_15 +#define MBED_ANALOGIN5 P0_16 +#define MBED_ANALOGIN6 P0_22 +#define MBED_ANALOGIN7 P0_23 + +#ifdef __cplusplus +} +#endif + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_GHI_MBUINO/TARGET_NXP/TARGET_LPC11UXX/TARGET_GHI_MBUINO/PinNames.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,105 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * 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 MBED_PINNAMES_H +#define MBED_PINNAMES_H + +#include "cmsis.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + PIN_INPUT, + PIN_OUTPUT +} PinDirection; + +#define PORT_SHIFT 5 + +typedef enum { + // LPC11U24 HVQFN33 Pin Names + P0_0 = 0, + P0_1 = 1, + P0_2 = 2, + P0_3 = 3, + P0_4 = 4, + P0_5 = 5, + P0_6 = 6, + P0_7 = 7, + P0_8 = 8, + P0_9 = 9, + P0_10 = 10, + P0_11 = 11, + P0_12 = 12, + P0_13 = 13, + P0_14 = 14, + P0_15 = 15, + P0_16 = 16, + P0_17 = 17, + P0_18 = 18, + P0_19 = 19, + P0_20 = 20, + P0_21 = 21, + P0_22 = 22, + P0_23 = 23, + + P1_15 = 47, + P1_19 = 51, + + // Other mbed Pin Names + LED1 = P0_7, + LED2 = P0_8, + LED3 = P0_2, + LED4 = P0_20, + LED5 = P1_19, + LED6 = P0_17, + LED7 = P0_23, + + USBTX = P0_19, + USBRX = P0_18, + + I2C_SCL = P0_4, + I2C_SDA = P0_5, + + // Not connected + NC = (int)0xFFFFFFFF, +} PinName; + +typedef enum { + CHANNEL0 = FLEX_INT0_IRQn, + CHANNEL1 = FLEX_INT1_IRQn, + CHANNEL2 = FLEX_INT2_IRQn, + CHANNEL3 = FLEX_INT3_IRQn, + CHANNEL4 = FLEX_INT4_IRQn, + CHANNEL5 = FLEX_INT5_IRQn, + CHANNEL6 = FLEX_INT6_IRQn, + CHANNEL7 = FLEX_INT7_IRQn +} Channel; + +typedef enum { + PullUp = 2, + PullDown = 1, + PullNone = 0, + Repeater = 3, + OpenDrain = 4, + PullDefault = PullDown +} PinMode; + +#ifdef __cplusplus +} +#endif + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_GHI_MBUINO/TARGET_NXP/TARGET_LPC11UXX/TARGET_GHI_MBUINO/device.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,59 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * 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 MBED_DEVICE_H +#define MBED_DEVICE_H + +#define DEVICE_PORTIN 1 +#define DEVICE_PORTOUT 1 +#define DEVICE_PORTINOUT 1 + +#define DEVICE_INTERRUPTIN 1 + +#define DEVICE_ANALOGIN 1 +#define DEVICE_ANALOGOUT 0 + +#define DEVICE_SERIAL 1 + +#define DEVICE_I2C 1 +#define DEVICE_I2CSLAVE 1 + +#define DEVICE_SPI 1 +#define DEVICE_SPISLAVE 1 + +#define DEVICE_CAN 0 + +#define DEVICE_RTC 0 + +#define DEVICE_ETHERNET 0 + +#define DEVICE_PWMOUT 1 + +#define DEVICE_SEMIHOST 1 +#define DEVICE_LOCALFILESYSTEM 1 +#define DEVICE_ID_LENGTH 32 +#define DEVICE_MAC_OFFSET 20 + +#define DEVICE_SLEEP 1 + +#define DEVICE_DEBUG_AWARENESS 0 + +#define DEVICE_STDIO_MESSAGES 1 + +#define DEVICE_ERROR_PATTERN 1 + +#include "objects.h" + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_GHI_MBUINO/TARGET_NXP/TARGET_LPC11UXX/gpio_object.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,52 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * 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 MBED_GPIO_OBJECT_H +#define MBED_GPIO_OBJECT_H + +#include "mbed_assert.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + PinName pin; + uint32_t mask; + + __IO uint32_t *reg_dir; + __IO uint32_t *reg_set; + __IO uint32_t *reg_clr; + __I uint32_t *reg_in; +} gpio_t; + +static inline void gpio_write(gpio_t *obj, int value) { + MBED_ASSERT(obj->pin != (PinName)NC); + if (value) + *obj->reg_set = obj->mask; + else + *obj->reg_clr = obj->mask; +} + +static inline int gpio_read(gpio_t *obj) { + MBED_ASSERT(obj->pin != (PinName)NC); + return ((*obj->reg_in & obj->mask) ? 1 : 0); +} + +#ifdef __cplusplus +} +#endif + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_GHI_MBUINO/TARGET_NXP/TARGET_LPC11UXX/objects.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,66 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * 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 MBED_OBJECTS_H +#define MBED_OBJECTS_H + +#include "cmsis.h" +#include "PortNames.h" +#include "PeripheralNames.h" +#include "PinNames.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct gpio_irq_s { + uint32_t ch; +}; + +struct port_s { + __IO uint32_t *reg_dir; + __IO uint32_t *reg_mpin; + PortName port; + uint32_t mask; +}; + +struct pwmout_s { + PWMName pwm; +}; + +struct serial_s { + LPC_USART_Type *uart; + int index; +}; + +struct analogin_s { + ADCName adc; +}; + +struct i2c_s { + LPC_I2C_Type *i2c; +}; + +struct spi_s { + LPC_SSPx_Type *spi; +}; + +#include "gpio_object.h" + +#ifdef __cplusplus +} +#endif + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_GHI_MBUINO/TOOLCHAIN_ARM_MICRO/LPC11U24.sct Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,17 @@ + +LR_IROM1 0x00000000 0x8000 { ; load region size_region (32k) + ER_IROM1 0x00000000 0x8000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + ; 8_byte_aligned(48 vect * 4 bytes) = 8_byte_aligned(0xC0) = 0xC0 + ; 6KB - 0xC0 = 0x1740 + RW_IRAM1 0x100000C0 0x1740 { + .ANY (+RW +ZI) + } + RW_IRAM2 0x20004000 0x800 { ; RW data, USB RAM + .ANY (USBRAM) + } +} +
Binary file TARGET_GHI_MBUINO/TOOLCHAIN_ARM_MICRO/board.o has changed
Binary file TARGET_GHI_MBUINO/TOOLCHAIN_ARM_MICRO/cmsis_nvic.o has changed
Binary file TARGET_GHI_MBUINO/TOOLCHAIN_ARM_MICRO/mbed.ar has changed
Binary file TARGET_GHI_MBUINO/TOOLCHAIN_ARM_MICRO/retarget.o has changed
Binary file TARGET_GHI_MBUINO/TOOLCHAIN_ARM_MICRO/startup_LPC11xx.o has changed
Binary file TARGET_GHI_MBUINO/TOOLCHAIN_ARM_MICRO/sys.o has changed
Binary file TARGET_GHI_MBUINO/TOOLCHAIN_ARM_MICRO/system_LPC11Uxx.o has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_GHI_MBUINO/TOOLCHAIN_ARM_STD/LPC11U24.sct Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,17 @@ + +LR_IROM1 0x00000000 0x8000 { ; load region size_region (32k) + ER_IROM1 0x00000000 0x8000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + ; 8_byte_aligned(48 vect * 4 bytes) = 8_byte_aligned(0xC0) = 0xC0 + ; 6KB - 0xC0 = 0x1740 + RW_IRAM1 0x100000C0 0x1740 { + .ANY (+RW +ZI) + } + RW_IRAM2 0x20004000 0x800 { ; RW data, USB RAM + .ANY (USBRAM) + } +} +
Binary file TARGET_GHI_MBUINO/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_GHI_MBUINO/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_GHI_MBUINO/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_GHI_MBUINO/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_GHI_MBUINO/TOOLCHAIN_ARM_STD/startup_LPC11xx.o has changed
Binary file TARGET_GHI_MBUINO/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_GHI_MBUINO/TOOLCHAIN_ARM_STD/system_LPC11Uxx.o has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_GHI_MBUINO/TOOLCHAIN_GCC_ARM/LPC11U24.ld Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,154 @@ +/* Linker script for mbed LPC1768 */ + +/* Linker script to configure memory regions. */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 32K + RAM (rwx) : ORIGIN = 0x100000C0, LENGTH = 0x1740 + USB_RAM (rwx): ORIGIN = 0x20004000, LENGTH = 0x800 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + KEEP(*(.isr_vector)) + *(.text.Reset_Handler) + *(.text.SystemInit) + + /* Only vectors and code running at reset are safe to be in first 512 + bytes since RAM can be mapped into this area for RAM based interrupt + vectors. */ + . = 0x00000200; + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE (__fini_array_end = .); + + . = ALIGN(4); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + __bss_start__ = .; + *(.bss*) + *(COMMON) + __bss_end__ = .; + } > RAM + + .heap : + { + __end__ = .; + end = __end__; + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy : + { + *(.stack) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +}
Binary file TARGET_GHI_MBUINO/TOOLCHAIN_GCC_ARM/board.o has changed
Binary file TARGET_GHI_MBUINO/TOOLCHAIN_GCC_ARM/cmsis_nvic.o has changed
Binary file TARGET_GHI_MBUINO/TOOLCHAIN_GCC_ARM/libmbed.a has changed
Binary file TARGET_GHI_MBUINO/TOOLCHAIN_GCC_ARM/retarget.o has changed
Binary file TARGET_GHI_MBUINO/TOOLCHAIN_GCC_ARM/startup_LPC11xx.o has changed
Binary file TARGET_GHI_MBUINO/TOOLCHAIN_GCC_ARM/system_LPC11Uxx.o has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_GHI_MBUINO/cmsis.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,13 @@ +/* mbed Microcontroller Library - CMSIS + * Copyright (C) 2009-2011 ARM Limited. All rights reserved. + * + * A generic CMSIS include header, pulling in LPC11U24 specifics + */ + +#ifndef MBED_CMSIS_H +#define MBED_CMSIS_H + +#include "LPC11Uxx.h" +#include "cmsis_nvic.h" + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_GHI_MBUINO/cmsis_nvic.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,26 @@ +/* mbed Microcontroller Library - cmsis_nvic + * Copyright (c) 2009-2011 ARM Limited. All rights reserved. + * + * CMSIS-style functionality to support dynamic vectors + */ + +#ifndef MBED_CMSIS_NVIC_H +#define MBED_CMSIS_NVIC_H + +#include "cmsis.h" + +#define NVIC_NUM_VECTORS (16 + 32) // CORE + MCU Peripherals +#define NVIC_USER_IRQ_OFFSET 16 + +#ifdef __cplusplus +extern "C" { +#endif + +void NVIC_SetVector(IRQn_Type IRQn, uint32_t vector); +uint32_t NVIC_GetVector(IRQn_Type IRQn); + +#ifdef __cplusplus +} +#endif + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_GHI_MBUINO/core_cm0.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,682 @@ +/**************************************************************************//** + * @file core_cm0.h + * @brief CMSIS Cortex-M0 Core Peripheral Access Layer Header File + * @version V3.20 + * @date 25. February 2013 + * + * @note + * + ******************************************************************************/ +/* Copyright (c) 2009 - 2013 ARM LIMITED + + 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 ARM 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 COPYRIGHT HOLDERS AND 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. + ---------------------------------------------------------------------------*/ + + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#endif + +#ifdef __cplusplus + extern "C" { +#endif + +#ifndef __CORE_CM0_H_GENERIC +#define __CORE_CM0_H_GENERIC + +/** \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.<br> + Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br> + Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.<br> + Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** \ingroup Cortex_M0 + @{ + */ + +/* CMSIS CM0 definitions */ +#define __CM0_CMSIS_VERSION_MAIN (0x03) /*!< [31:16] CMSIS HAL main version */ +#define __CM0_CMSIS_VERSION_SUB (0x20) /*!< [15:0] CMSIS HAL sub version */ +#define __CM0_CMSIS_VERSION ((__CM0_CMSIS_VERSION_MAIN << 16) | \ + __CM0_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ + +#define __CORTEX_M (0x00) /*!< Cortex-M Core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + #define __STATIC_INLINE static inline + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + #define __STATIC_INLINE static inline + +#endif + +/** __FPU_USED indicates whether an FPU is used or not. This core does not support an FPU at all +*/ +#define __FPU_USED 0 + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif +#endif + +#include <stdint.h> /* standard types definitions */ +#include <core_cmInstr.h> /* Core Instruction Access */ +#include <core_cmFunc.h> /* Core Function Access */ + +#endif /* __CORE_CM0_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM0_H_DEPENDANT +#define __CORE_CM0_H_DEPENDANT + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM0_REV + #define __CM0_REV 0x0000 + #warning "__CM0_REV not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2 + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0 + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + <strong>IO Type Qualifiers</strong> are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/*@} end of group Cortex_M0 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + ******************************************************************************/ +/** \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ +#else + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ +#endif + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + + +/** \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + + +/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ +#else + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ +#endif + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + + +/** \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/*@} end of group CMSIS_CORE */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IO uint32_t ISER[1]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31]; + __IO uint32_t ICER[1]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[31]; + __IO uint32_t ISPR[1]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31]; + __IO uint32_t ICPR[1]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31]; + uint32_t RESERVED4[64]; + __IO uint32_t IP[8]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + uint32_t RESERVED0; + __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IO uint32_t SHP[2]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Cortex-M0 Core Debug Registers (DCB registers, SHCSR, and DFSR) + are only accessible over DAP and not via processor. Therefore + they are not covered by the Cortex-M0 header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Cortex-M0 Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +/* Interrupt Priorities are WORD accessible only under ARMv6M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( (((uint32_t)(IRQn) ) & 0x03) * 8 ) +#define _SHP_IDX(IRQn) ( ((((uint32_t)(IRQn) & 0x0F)-8) >> 2) ) +#define _IP_IDX(IRQn) ( ((uint32_t)(IRQn) >> 2) ) + + +/** \brief Enable External Interrupt + + The function enables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +{ + NVIC->ISER[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + + +/** \brief Disable External Interrupt + + The function disables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->ICER[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + + +/** \brief Get Pending Interrupt + + The function reads the pending register in the NVIC and returns the pending bit + for the specified interrupt. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + */ +__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t) ((NVIC->ISPR[0] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); +} + + +/** \brief Set Pending Interrupt + + The function sets the pending bit of an external interrupt. + + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ISPR[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + + +/** \brief Clear Pending Interrupt + + The function clears the pending bit of an external interrupt. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ICPR[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ +} + + +/** \brief Set Interrupt Priority + + The function sets the priority of an interrupt. + + \note The priority cannot be set for every core interrupt. + + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + */ +__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if(IRQn < 0) { + SCB->SHP[_SHP_IDX(IRQn)] = (SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) | + (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); } + else { + NVIC->IP[_IP_IDX(IRQn)] = (NVIC->IP[_IP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) | + (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); } +} + + +/** \brief Get Interrupt Priority + + The function reads the priority of an interrupt. The interrupt + number can be positive to specify an external (device specific) + interrupt, or negative to specify an internal (core) interrupt. + + + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented + priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +{ + + if(IRQn < 0) { + return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & 0xFF) >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M0 system interrupts */ + else { + return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & 0xFF) >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ +} + + +/** \brief System Reset + + The function initiates a system reset request to reset the MCU. + */ +__STATIC_INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + while(1); /* wait until reset */ +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if (__Vendor_SysTickConfig == 0) + +/** \brief System Tick Configuration + + The function initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + + \param [in] ticks Number of ticks between two interrupts. + + \return 0 Function succeeded. + \return 1 Function failed. + + \note When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the + function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b> + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ + + SysTick->LOAD = ticks - 1; /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#endif /* __CORE_CM0_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ + +#ifdef __cplusplus +} +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_GHI_MBUINO/core_cm0plus.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,793 @@ +/**************************************************************************//** + * @file core_cm0plus.h + * @brief CMSIS Cortex-M0+ Core Peripheral Access Layer Header File + * @version V3.20 + * @date 25. February 2013 + * + * @note + * + ******************************************************************************/ +/* Copyright (c) 2009 - 2013 ARM LIMITED + + 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 ARM 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 COPYRIGHT HOLDERS AND 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. + ---------------------------------------------------------------------------*/ + + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#endif + +#ifdef __cplusplus + extern "C" { +#endif + +#ifndef __CORE_CM0PLUS_H_GENERIC +#define __CORE_CM0PLUS_H_GENERIC + +/** \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.<br> + Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br> + Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.<br> + Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** \ingroup Cortex-M0+ + @{ + */ + +/* CMSIS CM0P definitions */ +#define __CM0PLUS_CMSIS_VERSION_MAIN (0x03) /*!< [31:16] CMSIS HAL main version */ +#define __CM0PLUS_CMSIS_VERSION_SUB (0x20) /*!< [15:0] CMSIS HAL sub version */ +#define __CM0PLUS_CMSIS_VERSION ((__CM0PLUS_CMSIS_VERSION_MAIN << 16) | \ + __CM0PLUS_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */ + +#define __CORTEX_M (0x00) /*!< Cortex-M Core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + #define __STATIC_INLINE static inline + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + #define __STATIC_INLINE static inline + +#endif + +/** __FPU_USED indicates whether an FPU is used or not. This core does not support an FPU at all +*/ +#define __FPU_USED 0 + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif +#endif + +#include <stdint.h> /* standard types definitions */ +#include <core_cmInstr.h> /* Core Instruction Access */ +#include <core_cmFunc.h> /* Core Function Access */ + +#endif /* __CORE_CM0PLUS_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM0PLUS_H_DEPENDANT +#define __CORE_CM0PLUS_H_DEPENDANT + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM0PLUS_REV + #define __CM0PLUS_REV 0x0000 + #warning "__CM0PLUS_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0 + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 0 + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2 + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0 + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + <strong>IO Type Qualifiers</strong> are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/*@} end of group Cortex-M0+ */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core MPU Register + ******************************************************************************/ +/** \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ +#else + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ +#endif + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + + +/** \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + + +/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ +#else + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ +#endif + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + + +/** \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/*@} end of group CMSIS_CORE */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IO uint32_t ISER[1]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31]; + __IO uint32_t ICER[1]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[31]; + __IO uint32_t ISPR[1]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31]; + __IO uint32_t ICPR[1]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31]; + uint32_t RESERVED4[64]; + __IO uint32_t IP[8]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ +#if (__VTOR_PRESENT == 1) + __IO uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ +#else + uint32_t RESERVED0; +#endif + __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IO uint32_t SHP[2]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ + +#if (__VTOR_PRESENT == 1) +/* SCB Interrupt Control State Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 8 /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0xFFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + +#if (__MPU_PRESENT == 1) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __I uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IO uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IO uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IO uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IO uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register */ +#define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8 /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0 /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL << MPU_TYPE_SEPARATE_Pos) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register */ +#define MPU_CTRL_PRIVDEFENA_Pos 2 /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1 /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0 /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL << MPU_CTRL_ENABLE_Pos) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register */ +#define MPU_RNR_REGION_Pos 0 /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL << MPU_RNR_REGION_Pos) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register */ +#define MPU_RBAR_ADDR_Pos 8 /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0xFFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4 /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0 /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL << MPU_RBAR_REGION_Pos) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register */ +#define MPU_RASR_ATTRS_Pos 16 /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28 /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24 /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19 /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18 /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17 /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16 /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8 /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1 /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0 /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL << MPU_RASR_ENABLE_Pos) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Cortex-M0+ Core Debug Registers (DCB registers, SHCSR, and DFSR) + are only accessible over DAP and not via processor. Therefore + they are not covered by the Cortex-M0 header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Cortex-M0+ Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + +#if (__MPU_PRESENT == 1) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +/* Interrupt Priorities are WORD accessible only under ARMv6M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( (((uint32_t)(IRQn) ) & 0x03) * 8 ) +#define _SHP_IDX(IRQn) ( ((((uint32_t)(IRQn) & 0x0F)-8) >> 2) ) +#define _IP_IDX(IRQn) ( ((uint32_t)(IRQn) >> 2) ) + + +/** \brief Enable External Interrupt + + The function enables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +{ + NVIC->ISER[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + + +/** \brief Disable External Interrupt + + The function disables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->ICER[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + + +/** \brief Get Pending Interrupt + + The function reads the pending register in the NVIC and returns the pending bit + for the specified interrupt. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + */ +__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t) ((NVIC->ISPR[0] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); +} + + +/** \brief Set Pending Interrupt + + The function sets the pending bit of an external interrupt. + + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ISPR[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + + +/** \brief Clear Pending Interrupt + + The function clears the pending bit of an external interrupt. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ICPR[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ +} + + +/** \brief Set Interrupt Priority + + The function sets the priority of an interrupt. + + \note The priority cannot be set for every core interrupt. + + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + */ +__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if(IRQn < 0) { + SCB->SHP[_SHP_IDX(IRQn)] = (SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) | + (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); } + else { + NVIC->IP[_IP_IDX(IRQn)] = (NVIC->IP[_IP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) | + (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); } +} + + +/** \brief Get Interrupt Priority + + The function reads the priority of an interrupt. The interrupt + number can be positive to specify an external (device specific) + interrupt, or negative to specify an internal (core) interrupt. + + + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented + priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +{ + + if(IRQn < 0) { + return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & 0xFF) >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M0 system interrupts */ + else { + return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & 0xFF) >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ +} + + +/** \brief System Reset + + The function initiates a system reset request to reset the MCU. + */ +__STATIC_INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + while(1); /* wait until reset */ +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if (__Vendor_SysTickConfig == 0) + +/** \brief System Tick Configuration + + The function initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + + \param [in] ticks Number of ticks between two interrupts. + + \return 0 Function succeeded. + \return 1 Function failed. + + \note When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the + function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b> + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ + + SysTick->LOAD = ticks - 1; /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#endif /* __CORE_CM0PLUS_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ + +#ifdef __cplusplus +} +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_GHI_MBUINO/core_cm3.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,1627 @@ +/**************************************************************************//** + * @file core_cm3.h + * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File + * @version V3.20 + * @date 25. February 2013 + * + * @note + * + ******************************************************************************/ +/* Copyright (c) 2009 - 2013 ARM LIMITED + + 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 ARM 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 COPYRIGHT HOLDERS AND 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. + ---------------------------------------------------------------------------*/ + + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#endif + +#ifdef __cplusplus + extern "C" { +#endif + +#ifndef __CORE_CM3_H_GENERIC +#define __CORE_CM3_H_GENERIC + +/** \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.<br> + Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br> + Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.<br> + Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** \ingroup Cortex_M3 + @{ + */ + +/* CMSIS CM3 definitions */ +#define __CM3_CMSIS_VERSION_MAIN (0x03) /*!< [31:16] CMSIS HAL main version */ +#define __CM3_CMSIS_VERSION_SUB (0x20) /*!< [15:0] CMSIS HAL sub version */ +#define __CM3_CMSIS_VERSION ((__CM3_CMSIS_VERSION_MAIN << 16) | \ + __CM3_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ + +#define __CORTEX_M (0x03) /*!< Cortex-M Core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + #define __STATIC_INLINE static inline + +#elif defined ( __TMS470__ ) + #define __ASM __asm /*!< asm keyword for TI CCS Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + #define __STATIC_INLINE static inline + +#endif + +/** __FPU_USED indicates whether an FPU is used or not. This core does not support an FPU at all +*/ +#define __FPU_USED 0 + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TMS470__ ) + #if defined __TI__VFP_SUPPORT____ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif +#endif + +#include <stdint.h> /* standard types definitions */ +#include <core_cmInstr.h> /* Core Instruction Access */ +#include <core_cmFunc.h> /* Core Function Access */ + +#endif /* __CORE_CM3_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM3_H_DEPENDANT +#define __CORE_CM3_H_DEPENDANT + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM3_REV + #define __CM3_REV 0x0200 + #warning "__CM3_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0 + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 4 + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0 + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + <strong>IO Type Qualifiers</strong> are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/*@} end of group Cortex_M3 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + ******************************************************************************/ +/** \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ +#else + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ +#endif + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + + +/** \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + + +/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ +#else + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ +#endif + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + + +/** \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/*@} end of group CMSIS_CORE */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IO uint32_t ISER[8]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24]; + __IO uint32_t ICER[8]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24]; + __IO uint32_t ISPR[8]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24]; + __IO uint32_t ICPR[8]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24]; + __IO uint32_t IABR[8]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56]; + __IO uint8_t IP[240]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644]; + __O uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0 /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL << NVIC_STIR_INTID_Pos) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IO uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IO uint8_t SHP[12]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IO uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IO uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IO uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IO uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IO uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IO uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __I uint32_t PFR[2]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __I uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __I uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __I uint32_t MMFR[4]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __I uint32_t ISAR[5]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5]; + __IO uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11 /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#if (__CM3_REV < 0x0201) /* core r2p1 */ +#define SCB_VTOR_TBLBASE_Pos 29 /*!< SCB VTOR: TBLBASE Position */ +#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ + +#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#else +#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8 /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0 /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL << SCB_AIRCR_VECTRESET_Pos) /*!< SCB AIRCR: VECTRESET Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8 /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4 /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1 /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0 /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL << SCB_CCR_NONBASETHRDENA_Pos) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18 /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17 /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16 /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14 /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13 /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12 /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11 /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10 /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8 /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7 /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3 /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1 /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0 /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL << SCB_SHCSR_MEMFAULTACT_Pos) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Registers Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16 /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8 /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0 /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL << SCB_CFSR_MEMFAULTSR_Pos) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* SCB Hard Fault Status Registers Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31 /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30 /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1 /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4 /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3 /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2 /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1 /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0 /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL << SCB_DFSR_HALTED_Pos) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1]; + __I uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ +#if ((defined __CM3_REV) && (__CM3_REV >= 0x200)) + __IO uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +#else + uint32_t RESERVED1[1]; +#endif +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0 /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL << SCnSCB_ICTR_INTLINESNUM_Pos) /*!< ICTR: INTLINESNUM Mask */ + +/* Auxiliary Control Register Definitions */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2 /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1 /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0 /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL << SCnSCB_ACTLR_DISMCYCINT_Pos) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __O union + { + __O uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __O uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __O uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864]; + __IO uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15]; + __IO uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15]; + __IO uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29]; + __O uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __I uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IO uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43]; + __O uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __I uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6]; + __I uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __I uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __I uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __I uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __I uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __I uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __I uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __I uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __I uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __I uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __I uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __I uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0 /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL << ITM_TPR_PRIVMASK_Pos) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23 /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16 /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10 /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPrescale_Pos 8 /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4 /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3 /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1 /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0 /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL << ITM_TCR_ITMENA_Pos) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Integration Write Register Definitions */ +#define ITM_IWR_ATVALIDM_Pos 0 /*!< ITM IWR: ATVALIDM Position */ +#define ITM_IWR_ATVALIDM_Msk (1UL << ITM_IWR_ATVALIDM_Pos) /*!< ITM IWR: ATVALIDM Mask */ + +/* ITM Integration Read Register Definitions */ +#define ITM_IRR_ATREADYM_Pos 0 /*!< ITM IRR: ATREADYM Position */ +#define ITM_IRR_ATREADYM_Msk (1UL << ITM_IRR_ATREADYM_Pos) /*!< ITM IRR: ATREADYM Mask */ + +/* ITM Integration Mode Control Register Definitions */ +#define ITM_IMCR_INTEGRATION_Pos 0 /*!< ITM IMCR: INTEGRATION Position */ +#define ITM_IMCR_INTEGRATION_Msk (1UL << ITM_IMCR_INTEGRATION_Pos) /*!< ITM IMCR: INTEGRATION Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2 /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1 /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0 /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL << ITM_LSR_Present_Pos) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IO uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IO uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IO uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IO uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IO uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IO uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __I uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IO uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IO uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IO uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1]; + __IO uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IO uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IO uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1]; + __IO uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IO uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IO uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1]; + __IO uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IO uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IO uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28 /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27 /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26 /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25 /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24 /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22 /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21 /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20 /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19 /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18 /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17 /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16 /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12 /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10 /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9 /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5 /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1 /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0 /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL << DWT_CTRL_CYCCNTENA_Pos) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0 /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL << DWT_CPICNT_CPICNT_Pos) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0 /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL << DWT_EXCCNT_EXCCNT_Pos) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0 /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL << DWT_SLEEPCNT_SLEEPCNT_Pos) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0 /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL << DWT_LSUCNT_LSUCNT_Pos) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0 /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL << DWT_FOLDCNT_FOLDCNT_Pos) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0 /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL << DWT_MASK_MASK_Pos) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24 /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16 /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12 /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10 /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9 /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8 /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7 /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5 /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0 /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL << DWT_FUNCTION_FUNCTION_Pos) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IO uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IO uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2]; + __IO uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55]; + __IO uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131]; + __I uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IO uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __I uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759]; + __I uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER */ + __I uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __I uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1]; + __I uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __I uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IO uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39]; + __IO uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IO uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8]; + __I uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __I uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0 /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL << TPI_ACPR_PRESCALER_Pos) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0 /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL << TPI_SPPR_TXMODE_Pos) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3 /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2 /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1 /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0 /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL << TPI_FFSR_FlInProg_Pos) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8 /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1 /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0 /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL << TPI_TRIGGER_TRIGGER_Pos) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29 /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27 /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26 /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24 /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16 /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8 /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0 /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL << TPI_FIFO0_ETM0_Pos) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY_Pos 0 /*!< TPI ITATBCTR2: ATREADY Position */ +#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL << TPI_ITATBCTR2_ATREADY_Pos) /*!< TPI ITATBCTR2: ATREADY Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29 /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27 /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26 /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24 /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16 /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8 /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0 /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL << TPI_FIFO1_ITM0_Pos) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY_Pos 0 /*!< TPI ITATBCTR0: ATREADY Position */ +#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL << TPI_ITATBCTR0_ATREADY_Pos) /*!< TPI ITATBCTR0: ATREADY Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0 /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x1UL << TPI_ITCTRL_Mode_Pos) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11 /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10 /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9 /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6 /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5 /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0 /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL << TPI_DEVID_NrTraceInput_Pos) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 0 /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL << TPI_DEVTYPE_SubType_Pos) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 4 /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if (__MPU_PRESENT == 1) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __I uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IO uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IO uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IO uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IO uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IO uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IO uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IO uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IO uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IO uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IO uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register */ +#define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8 /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0 /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL << MPU_TYPE_SEPARATE_Pos) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register */ +#define MPU_CTRL_PRIVDEFENA_Pos 2 /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1 /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0 /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL << MPU_CTRL_ENABLE_Pos) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register */ +#define MPU_RNR_REGION_Pos 0 /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL << MPU_RNR_REGION_Pos) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register */ +#define MPU_RBAR_ADDR_Pos 5 /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4 /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0 /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL << MPU_RBAR_REGION_Pos) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register */ +#define MPU_RASR_ATTRS_Pos 16 /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28 /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24 /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19 /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18 /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17 /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16 /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8 /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1 /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0 /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL << MPU_RASR_ENABLE_Pos) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IO uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __O uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IO uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IO uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16 /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25 /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24 /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19 /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18 /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17 /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16 /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5 /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3 /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2 /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1 /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0 /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL << CoreDebug_DHCSR_C_DEBUGEN_Pos) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register */ +#define CoreDebug_DCRSR_REGWnR_Pos 16 /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0 /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL << CoreDebug_DCRSR_REGSEL_Pos) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register */ +#define CoreDebug_DEMCR_TRCENA_Pos 24 /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19 /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18 /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17 /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16 /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10 /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9 /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8 /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7 /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6 /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5 /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4 /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0 /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL << CoreDebug_DEMCR_VC_CORERESET_Pos) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Cortex-M3 Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ + +#if (__MPU_PRESENT == 1) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +/** \brief Set Priority Grouping + + The function sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FA << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << 8)); /* Insert write key and priorty group */ + SCB->AIRCR = reg_value; +} + + +/** \brief Get Priority Grouping + + The function reads the priority grouping field from the NVIC Interrupt Controller. + + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void) +{ + return ((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos); /* read priority grouping field */ +} + + +/** \brief Enable External Interrupt + + The function enables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +{ + NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* enable interrupt */ +} + + +/** \brief Disable External Interrupt + + The function disables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->ICER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* disable interrupt */ +} + + +/** \brief Get Pending Interrupt + + The function reads the pending register in the NVIC and returns the pending bit + for the specified interrupt. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + */ +__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t) ((NVIC->ISPR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if pending else 0 */ +} + + +/** \brief Set Pending Interrupt + + The function sets the pending bit of an external interrupt. + + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ISPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* set interrupt pending */ +} + + +/** \brief Clear Pending Interrupt + + The function clears the pending bit of an external interrupt. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ICPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ +} + + +/** \brief Get Active Interrupt + + The function reads the active register in NVIC and returns the active bit. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + */ +__STATIC_INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) +{ + return((uint32_t)((NVIC->IABR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if active else 0 */ +} + + +/** \brief Set Interrupt Priority + + The function sets the priority of an interrupt. + + \note The priority cannot be set for every core interrupt. + + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + */ +__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if(IRQn < 0) { + SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M System Interrupts */ + else { + NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */ +} + + +/** \brief Get Interrupt Priority + + The function reads the priority of an interrupt. The interrupt + number can be positive to specify an external (device specific) + interrupt, or negative to specify an internal (core) interrupt. + + + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented + priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +{ + + if(IRQn < 0) { + return((uint32_t)(SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M system interrupts */ + else { + return((uint32_t)(NVIC->IP[(uint32_t)(IRQn)] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ +} + + +/** \brief Encode Priority + + The function encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the samllest possible priority group is set. + + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; + SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; + + return ( + ((PreemptPriority & ((1 << (PreemptPriorityBits)) - 1)) << SubPriorityBits) | + ((SubPriority & ((1 << (SubPriorityBits )) - 1))) + ); +} + + +/** \brief Decode Priority + + The function decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set. + + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; + SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; + + *pPreemptPriority = (Priority >> SubPriorityBits) & ((1 << (PreemptPriorityBits)) - 1); + *pSubPriority = (Priority ) & ((1 << (SubPriorityBits )) - 1); +} + + +/** \brief System Reset + + The function initiates a system reset request to reset the MCU. + */ +__STATIC_INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + while(1); /* wait until reset */ +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if (__Vendor_SysTickConfig == 0) + +/** \brief System Tick Configuration + + The function initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + + \param [in] ticks Number of ticks between two interrupts. + + \return 0 Function succeeded. + \return 1 Function failed. + + \note When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the + function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b> + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ + + SysTick->LOAD = ticks - 1; /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY 0x5AA55AA5 /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** \brief ITM Send Character + + The function transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + + \param [in] ch Character to transmit. + + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if ((ITM->TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */ + (ITM->TER & (1UL << 0) ) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0].u32 == 0); + ITM->PORT[0].u8 = (uint8_t) ch; + } + return (ch); +} + + +/** \brief ITM Receive Character + + The function inputs a character via the external variable \ref ITM_RxBuffer. + + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) { + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** \brief ITM Check Character + + The function checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) { + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) { + return (0); /* no character available */ + } else { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + +#endif /* __CORE_CM3_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ + +#ifdef __cplusplus +} +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_GHI_MBUINO/core_cm4.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,1772 @@ +/**************************************************************************//** + * @file core_cm4.h + * @brief CMSIS Cortex-M4 Core Peripheral Access Layer Header File + * @version V3.20 + * @date 25. February 2013 + * + * @note + * + ******************************************************************************/ +/* Copyright (c) 2009 - 2013 ARM LIMITED + + 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 ARM 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 COPYRIGHT HOLDERS AND 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. + ---------------------------------------------------------------------------*/ + + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#endif + +#ifdef __cplusplus + extern "C" { +#endif + +#ifndef __CORE_CM4_H_GENERIC +#define __CORE_CM4_H_GENERIC + +/** \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.<br> + Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br> + Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.<br> + Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** \ingroup Cortex_M4 + @{ + */ + +/* CMSIS CM4 definitions */ +#define __CM4_CMSIS_VERSION_MAIN (0x03) /*!< [31:16] CMSIS HAL main version */ +#define __CM4_CMSIS_VERSION_SUB (0x20) /*!< [15:0] CMSIS HAL sub version */ +#define __CM4_CMSIS_VERSION ((__CM4_CMSIS_VERSION_MAIN << 16) | \ + __CM4_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ + +#define __CORTEX_M (0x04) /*!< Cortex-M Core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + #define __STATIC_INLINE static inline + +#elif defined ( __TMS470__ ) + #define __ASM __asm /*!< asm keyword for TI CCS Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + #define __STATIC_INLINE static inline + +#endif + +/** __FPU_USED indicates whether an FPU is used or not. For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. +*/ +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #if (__FPU_PRESENT == 1) + #define __FPU_USED 1 + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0 + #endif + #else + #define __FPU_USED 0 + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #if (__FPU_PRESENT == 1) + #define __FPU_USED 1 + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0 + #endif + #else + #define __FPU_USED 0 + #endif + +#elif defined ( __TMS470__ ) + #if defined __TI_VFP_SUPPORT__ + #if (__FPU_PRESENT == 1) + #define __FPU_USED 1 + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0 + #endif + #else + #define __FPU_USED 0 + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if (__FPU_PRESENT == 1) + #define __FPU_USED 1 + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0 + #endif + #else + #define __FPU_USED 0 + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #if (__FPU_PRESENT == 1) + #define __FPU_USED 1 + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0 + #endif + #else + #define __FPU_USED 0 + #endif +#endif + +#include <stdint.h> /* standard types definitions */ +#include <core_cmInstr.h> /* Core Instruction Access */ +#include <core_cmFunc.h> /* Core Function Access */ +#include <core_cm4_simd.h> /* Compiler specific SIMD Intrinsics */ + +#endif /* __CORE_CM4_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM4_H_DEPENDANT +#define __CORE_CM4_H_DEPENDANT + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM4_REV + #define __CM4_REV 0x0000 + #warning "__CM4_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0 + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0 + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 4 + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0 + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + <strong>IO Type Qualifiers</strong> are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/*@} end of group Cortex_M4 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core FPU Register + ******************************************************************************/ +/** \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ +#else + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ +#endif + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + + +/** \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + + +/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ +#else + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ +#endif + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + + +/** \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/*@} end of group CMSIS_CORE */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IO uint32_t ISER[8]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24]; + __IO uint32_t ICER[8]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24]; + __IO uint32_t ISPR[8]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24]; + __IO uint32_t ICPR[8]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24]; + __IO uint32_t IABR[8]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56]; + __IO uint8_t IP[240]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644]; + __O uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0 /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL << NVIC_STIR_INTID_Pos) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IO uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IO uint8_t SHP[12]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IO uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IO uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IO uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IO uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IO uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IO uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __I uint32_t PFR[2]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __I uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __I uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __I uint32_t MMFR[4]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __I uint32_t ISAR[5]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5]; + __IO uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11 /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8 /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0 /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL << SCB_AIRCR_VECTRESET_Pos) /*!< SCB AIRCR: VECTRESET Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8 /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4 /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1 /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0 /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL << SCB_CCR_NONBASETHRDENA_Pos) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18 /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17 /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16 /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14 /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13 /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12 /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11 /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10 /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8 /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7 /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3 /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1 /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0 /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL << SCB_SHCSR_MEMFAULTACT_Pos) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Registers Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16 /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8 /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0 /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL << SCB_CFSR_MEMFAULTSR_Pos) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* SCB Hard Fault Status Registers Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31 /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30 /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1 /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4 /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3 /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2 /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1 /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0 /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL << SCB_DFSR_HALTED_Pos) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1]; + __I uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IO uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0 /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL << SCnSCB_ICTR_INTLINESNUM_Pos) /*!< ICTR: INTLINESNUM Mask */ + +/* Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISOOFP_Pos 9 /*!< ACTLR: DISOOFP Position */ +#define SCnSCB_ACTLR_DISOOFP_Msk (1UL << SCnSCB_ACTLR_DISOOFP_Pos) /*!< ACTLR: DISOOFP Mask */ + +#define SCnSCB_ACTLR_DISFPCA_Pos 8 /*!< ACTLR: DISFPCA Position */ +#define SCnSCB_ACTLR_DISFPCA_Msk (1UL << SCnSCB_ACTLR_DISFPCA_Pos) /*!< ACTLR: DISFPCA Mask */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2 /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1 /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0 /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL << SCnSCB_ACTLR_DISMCYCINT_Pos) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __O union + { + __O uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __O uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __O uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864]; + __IO uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15]; + __IO uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15]; + __IO uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29]; + __O uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __I uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IO uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43]; + __O uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __I uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6]; + __I uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __I uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __I uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __I uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __I uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __I uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __I uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __I uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __I uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __I uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __I uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __I uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0 /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL << ITM_TPR_PRIVMASK_Pos) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23 /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16 /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10 /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPrescale_Pos 8 /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4 /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3 /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1 /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0 /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL << ITM_TCR_ITMENA_Pos) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Integration Write Register Definitions */ +#define ITM_IWR_ATVALIDM_Pos 0 /*!< ITM IWR: ATVALIDM Position */ +#define ITM_IWR_ATVALIDM_Msk (1UL << ITM_IWR_ATVALIDM_Pos) /*!< ITM IWR: ATVALIDM Mask */ + +/* ITM Integration Read Register Definitions */ +#define ITM_IRR_ATREADYM_Pos 0 /*!< ITM IRR: ATREADYM Position */ +#define ITM_IRR_ATREADYM_Msk (1UL << ITM_IRR_ATREADYM_Pos) /*!< ITM IRR: ATREADYM Mask */ + +/* ITM Integration Mode Control Register Definitions */ +#define ITM_IMCR_INTEGRATION_Pos 0 /*!< ITM IMCR: INTEGRATION Position */ +#define ITM_IMCR_INTEGRATION_Msk (1UL << ITM_IMCR_INTEGRATION_Pos) /*!< ITM IMCR: INTEGRATION Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2 /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1 /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0 /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL << ITM_LSR_Present_Pos) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IO uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IO uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IO uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IO uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IO uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IO uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __I uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IO uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IO uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IO uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1]; + __IO uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IO uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IO uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1]; + __IO uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IO uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IO uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1]; + __IO uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IO uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IO uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28 /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27 /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26 /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25 /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24 /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22 /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21 /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20 /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19 /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18 /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17 /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16 /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12 /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10 /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9 /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5 /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1 /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0 /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL << DWT_CTRL_CYCCNTENA_Pos) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0 /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL << DWT_CPICNT_CPICNT_Pos) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0 /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL << DWT_EXCCNT_EXCCNT_Pos) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0 /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL << DWT_SLEEPCNT_SLEEPCNT_Pos) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0 /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL << DWT_LSUCNT_LSUCNT_Pos) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0 /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL << DWT_FOLDCNT_FOLDCNT_Pos) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0 /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL << DWT_MASK_MASK_Pos) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24 /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16 /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12 /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10 /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9 /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8 /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7 /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5 /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0 /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL << DWT_FUNCTION_FUNCTION_Pos) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IO uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IO uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2]; + __IO uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55]; + __IO uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131]; + __I uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IO uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __I uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759]; + __I uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER */ + __I uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __I uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1]; + __I uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __I uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IO uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39]; + __IO uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IO uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8]; + __I uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __I uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0 /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL << TPI_ACPR_PRESCALER_Pos) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0 /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL << TPI_SPPR_TXMODE_Pos) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3 /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2 /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1 /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0 /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL << TPI_FFSR_FlInProg_Pos) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8 /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1 /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0 /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL << TPI_TRIGGER_TRIGGER_Pos) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29 /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27 /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26 /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24 /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16 /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8 /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0 /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL << TPI_FIFO0_ETM0_Pos) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY_Pos 0 /*!< TPI ITATBCTR2: ATREADY Position */ +#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL << TPI_ITATBCTR2_ATREADY_Pos) /*!< TPI ITATBCTR2: ATREADY Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29 /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27 /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26 /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24 /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16 /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8 /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0 /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL << TPI_FIFO1_ITM0_Pos) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY_Pos 0 /*!< TPI ITATBCTR0: ATREADY Position */ +#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL << TPI_ITATBCTR0_ATREADY_Pos) /*!< TPI ITATBCTR0: ATREADY Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0 /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x1UL << TPI_ITCTRL_Mode_Pos) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11 /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10 /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9 /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6 /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5 /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0 /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL << TPI_DEVID_NrTraceInput_Pos) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 0 /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL << TPI_DEVTYPE_SubType_Pos) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 4 /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if (__MPU_PRESENT == 1) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __I uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IO uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IO uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IO uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IO uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IO uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IO uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IO uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IO uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IO uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IO uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register */ +#define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8 /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0 /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL << MPU_TYPE_SEPARATE_Pos) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register */ +#define MPU_CTRL_PRIVDEFENA_Pos 2 /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1 /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0 /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL << MPU_CTRL_ENABLE_Pos) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register */ +#define MPU_RNR_REGION_Pos 0 /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL << MPU_RNR_REGION_Pos) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register */ +#define MPU_RBAR_ADDR_Pos 5 /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4 /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0 /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL << MPU_RBAR_REGION_Pos) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register */ +#define MPU_RASR_ATTRS_Pos 16 /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28 /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24 /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19 /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18 /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17 /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16 /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8 /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1 /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0 /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL << MPU_RASR_ENABLE_Pos) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if (__FPU_PRESENT == 1) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1]; + __IO uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IO uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IO uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __I uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ + __I uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ +} FPU_Type; + +/* Floating-Point Context Control Register */ +#define FPU_FPCCR_ASPEN_Pos 31 /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30 /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8 /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6 /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5 /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4 /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3 /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_USER_Pos 1 /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0 /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL << FPU_FPCCR_LSPACT_Pos) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/* Floating-Point Context Address Register */ +#define FPU_FPCAR_ADDRESS_Pos 3 /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register */ +#define FPU_FPDSCR_AHP_Pos 26 /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25 /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24 /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22 /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/* Media and FP Feature Register 0 */ +#define FPU_MVFR0_FP_rounding_modes_Pos 28 /*!< MVFR0: FP rounding modes bits Position */ +#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ + +#define FPU_MVFR0_Short_vectors_Pos 24 /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_Square_root_Pos 20 /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_Divide_Pos 16 /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FP_excep_trapping_Pos 12 /*!< MVFR0: FP exception trapping bits Position */ +#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ + +#define FPU_MVFR0_Double_precision_Pos 8 /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_Single_precision_Pos 4 /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_A_SIMD_registers_Pos 0 /*!< MVFR0: A_SIMD registers bits Position */ +#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL << FPU_MVFR0_A_SIMD_registers_Pos) /*!< MVFR0: A_SIMD registers bits Mask */ + +/* Media and FP Feature Register 1 */ +#define FPU_MVFR1_FP_fused_MAC_Pos 28 /*!< MVFR1: FP fused MAC bits Position */ +#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ + +#define FPU_MVFR1_FP_HPFP_Pos 24 /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_D_NaN_mode_Pos 4 /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FtZ_mode_Pos 0 /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FtZ_mode_Msk (0xFUL << FPU_MVFR1_FtZ_mode_Pos) /*!< MVFR1: FtZ mode bits Mask */ + +/*@} end of group CMSIS_FPU */ +#endif + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IO uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __O uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IO uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IO uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16 /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25 /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24 /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19 /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18 /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17 /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16 /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5 /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3 /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2 /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1 /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0 /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL << CoreDebug_DHCSR_C_DEBUGEN_Pos) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register */ +#define CoreDebug_DCRSR_REGWnR_Pos 16 /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0 /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL << CoreDebug_DCRSR_REGSEL_Pos) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register */ +#define CoreDebug_DEMCR_TRCENA_Pos 24 /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19 /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18 /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17 /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16 /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10 /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9 /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8 /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7 /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6 /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5 /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4 /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0 /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL << CoreDebug_DEMCR_VC_CORERESET_Pos) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Cortex-M4 Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ + +#if (__MPU_PRESENT == 1) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +#if (__FPU_PRESENT == 1) + #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ + #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +/** \brief Set Priority Grouping + + The function sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FA << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << 8)); /* Insert write key and priorty group */ + SCB->AIRCR = reg_value; +} + + +/** \brief Get Priority Grouping + + The function reads the priority grouping field from the NVIC Interrupt Controller. + + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void) +{ + return ((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos); /* read priority grouping field */ +} + + +/** \brief Enable External Interrupt + + The function enables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +{ +/* NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); enable interrupt */ + NVIC->ISER[(uint32_t)((int32_t)IRQn) >> 5] = (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); /* enable interrupt */ +} + + +/** \brief Disable External Interrupt + + The function disables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->ICER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* disable interrupt */ +} + + +/** \brief Get Pending Interrupt + + The function reads the pending register in the NVIC and returns the pending bit + for the specified interrupt. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + */ +__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t) ((NVIC->ISPR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if pending else 0 */ +} + + +/** \brief Set Pending Interrupt + + The function sets the pending bit of an external interrupt. + + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ISPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* set interrupt pending */ +} + + +/** \brief Clear Pending Interrupt + + The function clears the pending bit of an external interrupt. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ICPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ +} + + +/** \brief Get Active Interrupt + + The function reads the active register in NVIC and returns the active bit. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + */ +__STATIC_INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) +{ + return((uint32_t)((NVIC->IABR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if active else 0 */ +} + + +/** \brief Set Interrupt Priority + + The function sets the priority of an interrupt. + + \note The priority cannot be set for every core interrupt. + + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + */ +__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if(IRQn < 0) { + SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M System Interrupts */ + else { + NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */ +} + + +/** \brief Get Interrupt Priority + + The function reads the priority of an interrupt. The interrupt + number can be positive to specify an external (device specific) + interrupt, or negative to specify an internal (core) interrupt. + + + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented + priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +{ + + if(IRQn < 0) { + return((uint32_t)(SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M system interrupts */ + else { + return((uint32_t)(NVIC->IP[(uint32_t)(IRQn)] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ +} + + +/** \brief Encode Priority + + The function encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the samllest possible priority group is set. + + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; + SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; + + return ( + ((PreemptPriority & ((1 << (PreemptPriorityBits)) - 1)) << SubPriorityBits) | + ((SubPriority & ((1 << (SubPriorityBits )) - 1))) + ); +} + + +/** \brief Decode Priority + + The function decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set. + + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; + SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; + + *pPreemptPriority = (Priority >> SubPriorityBits) & ((1 << (PreemptPriorityBits)) - 1); + *pSubPriority = (Priority ) & ((1 << (SubPriorityBits )) - 1); +} + + +/** \brief System Reset + + The function initiates a system reset request to reset the MCU. + */ +__STATIC_INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + while(1); /* wait until reset */ +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if (__Vendor_SysTickConfig == 0) + +/** \brief System Tick Configuration + + The function initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + + \param [in] ticks Number of ticks between two interrupts. + + \return 0 Function succeeded. + \return 1 Function failed. + + \note When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the + function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b> + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ + + SysTick->LOAD = ticks - 1; /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY 0x5AA55AA5 /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** \brief ITM Send Character + + The function transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + + \param [in] ch Character to transmit. + + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if ((ITM->TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */ + (ITM->TER & (1UL << 0) ) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0].u32 == 0); + ITM->PORT[0].u8 = (uint8_t) ch; + } + return (ch); +} + + +/** \brief ITM Receive Character + + The function inputs a character via the external variable \ref ITM_RxBuffer. + + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) { + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** \brief ITM Check Character + + The function checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) { + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) { + return (0); /* no character available */ + } else { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + +#endif /* __CORE_CM4_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ + +#ifdef __cplusplus +} +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_GHI_MBUINO/core_cm4_simd.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,673 @@ +/**************************************************************************//** + * @file core_cm4_simd.h + * @brief CMSIS Cortex-M4 SIMD Header File + * @version V3.20 + * @date 25. February 2013 + * + * @note + * + ******************************************************************************/ +/* Copyright (c) 2009 - 2013 ARM LIMITED + + 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 ARM 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 COPYRIGHT HOLDERS AND 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. + ---------------------------------------------------------------------------*/ + + +#ifdef __cplusplus + extern "C" { +#endif + +#ifndef __CORE_CM4_SIMD_H +#define __CORE_CM4_SIMD_H + + +/******************************************************************************* + * Hardware Abstraction Layer + ******************************************************************************/ + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ +/* ARM armcc specific functions */ + +/*------ CM4 SIMD Intrinsics -----------------------------------------------------*/ +#define __SADD8 __sadd8 +#define __QADD8 __qadd8 +#define __SHADD8 __shadd8 +#define __UADD8 __uadd8 +#define __UQADD8 __uqadd8 +#define __UHADD8 __uhadd8 +#define __SSUB8 __ssub8 +#define __QSUB8 __qsub8 +#define __SHSUB8 __shsub8 +#define __USUB8 __usub8 +#define __UQSUB8 __uqsub8 +#define __UHSUB8 __uhsub8 +#define __SADD16 __sadd16 +#define __QADD16 __qadd16 +#define __SHADD16 __shadd16 +#define __UADD16 __uadd16 +#define __UQADD16 __uqadd16 +#define __UHADD16 __uhadd16 +#define __SSUB16 __ssub16 +#define __QSUB16 __qsub16 +#define __SHSUB16 __shsub16 +#define __USUB16 __usub16 +#define __UQSUB16 __uqsub16 +#define __UHSUB16 __uhsub16 +#define __SASX __sasx +#define __QASX __qasx +#define __SHASX __shasx +#define __UASX __uasx +#define __UQASX __uqasx +#define __UHASX __uhasx +#define __SSAX __ssax +#define __QSAX __qsax +#define __SHSAX __shsax +#define __USAX __usax +#define __UQSAX __uqsax +#define __UHSAX __uhsax +#define __USAD8 __usad8 +#define __USADA8 __usada8 +#define __SSAT16 __ssat16 +#define __USAT16 __usat16 +#define __UXTB16 __uxtb16 +#define __UXTAB16 __uxtab16 +#define __SXTB16 __sxtb16 +#define __SXTAB16 __sxtab16 +#define __SMUAD __smuad +#define __SMUADX __smuadx +#define __SMLAD __smlad +#define __SMLADX __smladx +#define __SMLALD __smlald +#define __SMLALDX __smlaldx +#define __SMUSD __smusd +#define __SMUSDX __smusdx +#define __SMLSD __smlsd +#define __SMLSDX __smlsdx +#define __SMLSLD __smlsld +#define __SMLSLDX __smlsldx +#define __SEL __sel +#define __QADD __qadd +#define __QSUB __qsub + +#define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \ + ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) + +#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ + ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) + +#define __SMMLA(ARG1,ARG2,ARG3) ( (int32_t)((((int64_t)(ARG1) * (ARG2)) + \ + ((int64_t)(ARG3) << 32) ) >> 32)) + +/*-- End CM4 SIMD Intrinsics -----------------------------------------------------*/ + + + +#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/ +/* IAR iccarm specific functions */ + +/*------ CM4 SIMD Intrinsics -----------------------------------------------------*/ +#include <cmsis_iar.h> + +/*-- End CM4 SIMD Intrinsics -----------------------------------------------------*/ + + + +#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/ +/* TI CCS specific functions */ + +/*------ CM4 SIMD Intrinsics -----------------------------------------------------*/ +#include <cmsis_ccs.h> + +/*-- End CM4 SIMD Intrinsics -----------------------------------------------------*/ + + + +#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/ +/* GNU gcc specific functions */ + +/*------ CM4 SIMD Intrinsics -----------------------------------------------------*/ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USAD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usad8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("usada8 %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#define __SSAT16(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("ssat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + +#define __USAT16(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("usat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM volatile ("uxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM volatile ("sxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUAD (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smuad %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUADX (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smuadx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLAD (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlad %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLADX (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smladx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#define __SMLALD(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __ARG1 = (ARG1), __ARG2 = (ARG2), __ARG3_H = (uint32_t)((uint64_t)(ARG3) >> 32), __ARG3_L = (uint32_t)((uint64_t)(ARG3) & 0xFFFFFFFFUL); \ + __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (__ARG3_L), "=r" (__ARG3_H) : "r" (__ARG1), "r" (__ARG2), "0" (__ARG3_L), "1" (__ARG3_H) ); \ + (uint64_t)(((uint64_t)__ARG3_H << 32) | __ARG3_L); \ + }) + +#define __SMLALDX(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __ARG1 = (ARG1), __ARG2 = (ARG2), __ARG3_H = (uint32_t)((uint64_t)(ARG3) >> 32), __ARG3_L = (uint32_t)((uint64_t)(ARG3) & 0xFFFFFFFFUL); \ + __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (__ARG3_L), "=r" (__ARG3_H) : "r" (__ARG1), "r" (__ARG2), "0" (__ARG3_L), "1" (__ARG3_H) ); \ + (uint64_t)(((uint64_t)__ARG3_H << 32) | __ARG3_L); \ + }) + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUSD (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smusd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUSDX (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smusdx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLSD (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlsd %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLSDX (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlsdx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#define __SMLSLD(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __ARG1 = (ARG1), __ARG2 = (ARG2), __ARG3_H = (uint32_t)((ARG3) >> 32), __ARG3_L = (uint32_t)((ARG3) & 0xFFFFFFFFUL); \ + __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (__ARG3_L), "=r" (__ARG3_H) : "r" (__ARG1), "r" (__ARG2), "0" (__ARG3_L), "1" (__ARG3_H) ); \ + (uint64_t)(((uint64_t)__ARG3_H << 32) | __ARG3_L); \ + }) + +#define __SMLSLDX(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __ARG1 = (ARG1), __ARG2 = (ARG2), __ARG3_H = (uint32_t)((ARG3) >> 32), __ARG3_L = (uint32_t)((ARG3) & 0xFFFFFFFFUL); \ + __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (__ARG3_L), "=r" (__ARG3_H) : "r" (__ARG1), "r" (__ARG2), "0" (__ARG3_L), "1" (__ARG3_H) ); \ + (uint64_t)(((uint64_t)__ARG3_H << 32) | __ARG3_L); \ + }) + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SEL (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sel %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QADD(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qadd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSUB(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsub %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +#define __PKHBT(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + __ASM ("pkhbt %0, %1, %2, lsl %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +#define __PKHTB(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + if (ARG3 == 0) \ + __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2) ); \ + else \ + __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) +{ + int32_t result; + + __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +/*-- End CM4 SIMD Intrinsics -----------------------------------------------------*/ + + + +#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/ +/* TASKING carm specific functions */ + + +/*------ CM4 SIMD Intrinsics -----------------------------------------------------*/ +/* not yet supported */ +/*-- End CM4 SIMD Intrinsics -----------------------------------------------------*/ + + +#endif + +/*@} end of group CMSIS_SIMD_intrinsics */ + + +#endif /* __CORE_CM4_SIMD_H */ + +#ifdef __cplusplus +} +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_GHI_MBUINO/core_cmFunc.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,636 @@ +/**************************************************************************//** + * @file core_cmFunc.h + * @brief CMSIS Cortex-M Core Function Access Header File + * @version V3.20 + * @date 25. February 2013 + * + * @note + * + ******************************************************************************/ +/* Copyright (c) 2009 - 2013 ARM LIMITED + + 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 ARM 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 COPYRIGHT HOLDERS AND 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 __CORE_CMFUNC_H +#define __CORE_CMFUNC_H + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ +/* ARM armcc specific functions */ + +#if (__ARMCC_VERSION < 400677) + #error "Please use ARM Compiler Toolchain V4.0.677 or later!" +#endif + +/* intrinsic void __enable_irq(); */ +/* intrinsic void __disable_irq(); */ + +/** \brief Get Control Register + + This function returns the content of the Control Register. + + \return Control Register value + */ +__STATIC_INLINE uint32_t __get_CONTROL(void) +{ + register uint32_t __regControl __ASM("control"); + return(__regControl); +} + + +/** \brief Set Control Register + + This function writes the given value to the Control Register. + + \param [in] control Control Register value to set + */ +__STATIC_INLINE void __set_CONTROL(uint32_t control) +{ + register uint32_t __regControl __ASM("control"); + __regControl = control; +} + + +/** \brief Get IPSR Register + + This function returns the content of the IPSR Register. + + \return IPSR Register value + */ +__STATIC_INLINE uint32_t __get_IPSR(void) +{ + register uint32_t __regIPSR __ASM("ipsr"); + return(__regIPSR); +} + + +/** \brief Get APSR Register + + This function returns the content of the APSR Register. + + \return APSR Register value + */ +__STATIC_INLINE uint32_t __get_APSR(void) +{ + register uint32_t __regAPSR __ASM("apsr"); + return(__regAPSR); +} + + +/** \brief Get xPSR Register + + This function returns the content of the xPSR Register. + + \return xPSR Register value + */ +__STATIC_INLINE uint32_t __get_xPSR(void) +{ + register uint32_t __regXPSR __ASM("xpsr"); + return(__regXPSR); +} + + +/** \brief Get Process Stack Pointer + + This function returns the current value of the Process Stack Pointer (PSP). + + \return PSP Register value + */ +__STATIC_INLINE uint32_t __get_PSP(void) +{ + register uint32_t __regProcessStackPointer __ASM("psp"); + return(__regProcessStackPointer); +} + + +/** \brief Set Process Stack Pointer + + This function assigns the given value to the Process Stack Pointer (PSP). + + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) +{ + register uint32_t __regProcessStackPointer __ASM("psp"); + __regProcessStackPointer = topOfProcStack; +} + + +/** \brief Get Main Stack Pointer + + This function returns the current value of the Main Stack Pointer (MSP). + + \return MSP Register value + */ +__STATIC_INLINE uint32_t __get_MSP(void) +{ + register uint32_t __regMainStackPointer __ASM("msp"); + return(__regMainStackPointer); +} + + +/** \brief Set Main Stack Pointer + + This function assigns the given value to the Main Stack Pointer (MSP). + + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) +{ + register uint32_t __regMainStackPointer __ASM("msp"); + __regMainStackPointer = topOfMainStack; +} + + +/** \brief Get Priority Mask + + This function returns the current state of the priority mask bit from the Priority Mask Register. + + \return Priority Mask value + */ +__STATIC_INLINE uint32_t __get_PRIMASK(void) +{ + register uint32_t __regPriMask __ASM("primask"); + return(__regPriMask); +} + + +/** \brief Set Priority Mask + + This function assigns the given value to the Priority Mask Register. + + \param [in] priMask Priority Mask + */ +__STATIC_INLINE void __set_PRIMASK(uint32_t priMask) +{ + register uint32_t __regPriMask __ASM("primask"); + __regPriMask = (priMask); +} + + +#if (__CORTEX_M >= 0x03) + +/** \brief Enable FIQ + + This function enables FIQ interrupts by clearing the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +#define __enable_fault_irq __enable_fiq + + +/** \brief Disable FIQ + + This function disables FIQ interrupts by setting the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +#define __disable_fault_irq __disable_fiq + + +/** \brief Get Base Priority + + This function returns the current value of the Base Priority register. + + \return Base Priority register value + */ +__STATIC_INLINE uint32_t __get_BASEPRI(void) +{ + register uint32_t __regBasePri __ASM("basepri"); + return(__regBasePri); +} + + +/** \brief Set Base Priority + + This function assigns the given value to the Base Priority register. + + \param [in] basePri Base Priority value to set + */ +__STATIC_INLINE void __set_BASEPRI(uint32_t basePri) +{ + register uint32_t __regBasePri __ASM("basepri"); + __regBasePri = (basePri & 0xff); +} + + +/** \brief Get Fault Mask + + This function returns the current value of the Fault Mask register. + + \return Fault Mask register value + */ +__STATIC_INLINE uint32_t __get_FAULTMASK(void) +{ + register uint32_t __regFaultMask __ASM("faultmask"); + return(__regFaultMask); +} + + +/** \brief Set Fault Mask + + This function assigns the given value to the Fault Mask register. + + \param [in] faultMask Fault Mask value to set + */ +__STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) +{ + register uint32_t __regFaultMask __ASM("faultmask"); + __regFaultMask = (faultMask & (uint32_t)1); +} + +#endif /* (__CORTEX_M >= 0x03) */ + + +#if (__CORTEX_M == 0x04) + +/** \brief Get FPSCR + + This function returns the current value of the Floating Point Status/Control register. + + \return Floating Point Status/Control register value + */ +__STATIC_INLINE uint32_t __get_FPSCR(void) +{ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + register uint32_t __regfpscr __ASM("fpscr"); + return(__regfpscr); +#else + return(0); +#endif +} + + +/** \brief Set FPSCR + + This function assigns the given value to the Floating Point Status/Control register. + + \param [in] fpscr Floating Point Status/Control value to set + */ +__STATIC_INLINE void __set_FPSCR(uint32_t fpscr) +{ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + register uint32_t __regfpscr __ASM("fpscr"); + __regfpscr = (fpscr); +#endif +} + +#endif /* (__CORTEX_M == 0x04) */ + + +#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/ +/* IAR iccarm specific functions */ + +#include <cmsis_iar.h> + + +#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/ +/* TI CCS specific functions */ + +#include <cmsis_ccs.h> + + +#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/ +/* GNU gcc specific functions */ + +/** \brief Enable IRQ Interrupts + + This function enables IRQ interrupts by clearing the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_irq(void) +{ + __ASM volatile ("cpsie i" : : : "memory"); +} + + +/** \brief Disable IRQ Interrupts + + This function disables IRQ interrupts by setting the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_irq(void) +{ + __ASM volatile ("cpsid i" : : : "memory"); +} + + +/** \brief Get Control Register + + This function returns the content of the Control Register. + + \return Control Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_CONTROL(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return(result); +} + + +/** \brief Set Control Register + + This function writes the given value to the Control Register. + + \param [in] control Control Register value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); +} + + +/** \brief Get IPSR Register + + This function returns the content of the IPSR Register. + + \return IPSR Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_IPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return(result); +} + + +/** \brief Get APSR Register + + This function returns the content of the APSR Register. + + \return APSR Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_APSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return(result); +} + + +/** \brief Get xPSR Register + + This function returns the content of the xPSR Register. + + \return xPSR Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_xPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); + return(result); +} + + +/** \brief Get Process Stack Pointer + + This function returns the current value of the Process Stack Pointer (PSP). + + \return PSP Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_PSP(void) +{ + register uint32_t result; + + __ASM volatile ("MRS %0, psp\n" : "=r" (result) ); + return(result); +} + + +/** \brief Set Process Stack Pointer + + This function assigns the given value to the Process Stack Pointer (PSP). + + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp, %0\n" : : "r" (topOfProcStack) : "sp"); +} + + +/** \brief Get Main Stack Pointer + + This function returns the current value of the Main Stack Pointer (MSP). + + \return MSP Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_MSP(void) +{ + register uint32_t result; + + __ASM volatile ("MRS %0, msp\n" : "=r" (result) ); + return(result); +} + + +/** \brief Set Main Stack Pointer + + This function assigns the given value to the Main Stack Pointer (MSP). + + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp, %0\n" : : "r" (topOfMainStack) : "sp"); +} + + +/** \brief Get Priority Mask + + This function returns the current state of the priority mask bit from the Priority Mask Register. + + \return Priority Mask value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) ); + return(result); +} + + +/** \brief Set Priority Mask + + This function assigns the given value to the Priority Mask Register. + + \param [in] priMask Priority Mask + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_PRIMASK(uint32_t priMask) +{ + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); +} + + +#if (__CORTEX_M >= 0x03) + +/** \brief Enable FIQ + + This function enables FIQ interrupts by clearing the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_fault_irq(void) +{ + __ASM volatile ("cpsie f" : : : "memory"); +} + + +/** \brief Disable FIQ + + This function disables FIQ interrupts by setting the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_fault_irq(void) +{ + __ASM volatile ("cpsid f" : : : "memory"); +} + + +/** \brief Get Base Priority + + This function returns the current value of the Base Priority register. + + \return Base Priority register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_BASEPRI(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri_max" : "=r" (result) ); + return(result); +} + + +/** \brief Set Base Priority + + This function assigns the given value to the Base Priority register. + + \param [in] basePri Base Priority value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_BASEPRI(uint32_t value) +{ + __ASM volatile ("MSR basepri, %0" : : "r" (value) : "memory"); +} + + +/** \brief Get Fault Mask + + This function returns the current value of the Fault Mask register. + + \return Fault Mask register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_FAULTMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return(result); +} + + +/** \brief Set Fault Mask + + This function assigns the given value to the Fault Mask register. + + \param [in] faultMask Fault Mask value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); +} + +#endif /* (__CORTEX_M >= 0x03) */ + + +#if (__CORTEX_M == 0x04) + +/** \brief Get FPSCR + + This function returns the current value of the Floating Point Status/Control register. + + \return Floating Point Status/Control register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_FPSCR(void) +{ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + uint32_t result; + + /* Empty asm statement works as a scheduling barrier */ + __ASM volatile (""); + __ASM volatile ("VMRS %0, fpscr" : "=r" (result) ); + __ASM volatile (""); + return(result); +#else + return(0); +#endif +} + + +/** \brief Set FPSCR + + This function assigns the given value to the Floating Point Status/Control register. + + \param [in] fpscr Floating Point Status/Control value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FPSCR(uint32_t fpscr) +{ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + /* Empty asm statement works as a scheduling barrier */ + __ASM volatile (""); + __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc"); + __ASM volatile (""); +#endif +} + +#endif /* (__CORTEX_M == 0x04) */ + + +#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/ +/* TASKING carm specific functions */ + +/* + * The CMSIS functions have been implemented as intrinsics in the compiler. + * Please use "carm -?i" to get an up to date list of all instrinsics, + * Including the CMSIS ones. + */ + +#endif + +/*@} end of CMSIS_Core_RegAccFunctions */ + + +#endif /* __CORE_CMFUNC_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_GHI_MBUINO/core_cmInstr.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,688 @@ +/**************************************************************************//** + * @file core_cmInstr.h + * @brief CMSIS Cortex-M Core Instruction Access Header File + * @version V3.20 + * @date 05. March 2013 + * + * @note + * + ******************************************************************************/ +/* Copyright (c) 2009 - 2013 ARM LIMITED + + 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 ARM 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 COPYRIGHT HOLDERS AND 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 __CORE_CMINSTR_H +#define __CORE_CMINSTR_H + + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions + @{ +*/ + +#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ +/* ARM armcc specific functions */ + +#if (__ARMCC_VERSION < 400677) + #error "Please use ARM Compiler Toolchain V4.0.677 or later!" +#endif + + +/** \brief No Operation + + No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP __nop + + +/** \brief Wait For Interrupt + + Wait For Interrupt is a hint instruction that suspends execution + until one of a number of events occurs. + */ +#define __WFI __wfi + + +/** \brief Wait For Event + + Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +#define __WFE __wfe + + +/** \brief Send Event + + Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV __sev + + +/** \brief Instruction Synchronization Barrier + + Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or + memory, after the instruction has been completed. + */ +#define __ISB() __isb(0xF) + + +/** \brief Data Synchronization Barrier + + This function acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +#define __DSB() __dsb(0xF) + + +/** \brief Data Memory Barrier + + This function ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +#define __DMB() __dmb(0xF) + + +/** \brief Reverse byte order (32 bit) + + This function reverses the byte order in integer value. + + \param [in] value Value to reverse + \return Reversed value + */ +#define __REV __rev + + +/** \brief Reverse byte order (16 bit) + + This function reverses the byte order in two unsigned short values. + + \param [in] value Value to reverse + \return Reversed value + */ +#ifndef __NO_EMBEDDED_ASM +__attribute__((section(".rev16_text"))) __STATIC_INLINE __ASM uint32_t __REV16(uint32_t value) +{ + rev16 r0, r0 + bx lr +} +#endif + +/** \brief Reverse byte order in signed short value + + This function reverses the byte order in a signed short value with sign extension to integer. + + \param [in] value Value to reverse + \return Reversed value + */ +#ifndef __NO_EMBEDDED_ASM +__attribute__((section(".revsh_text"))) __STATIC_INLINE __ASM int32_t __REVSH(int32_t value) +{ + revsh r0, r0 + bx lr +} +#endif + + +/** \brief Rotate Right in unsigned value (32 bit) + + This function Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + + \param [in] value Value to rotate + \param [in] value Number of Bits to rotate + \return Rotated value + */ +#define __ROR __ror + + +/** \brief Breakpoint + + This function causes the processor to enter Debug state. + Debug tools can use this to investigate system state when the instruction at a particular address is reached. + + \param [in] value is ignored by the processor. + If required, a debugger can use it to store additional information about the breakpoint. + */ +#define __BKPT(value) __breakpoint(value) + + +#if (__CORTEX_M >= 0x03) + +/** \brief Reverse bit order of value + + This function reverses the bit order of the given value. + + \param [in] value Value to reverse + \return Reversed value + */ +#define __RBIT __rbit + + +/** \brief LDR Exclusive (8 bit) + + This function performs a exclusive LDR command for 8 bit value. + + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDREXB(ptr) ((uint8_t ) __ldrex(ptr)) + + +/** \brief LDR Exclusive (16 bit) + + This function performs a exclusive LDR command for 16 bit values. + + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDREXH(ptr) ((uint16_t) __ldrex(ptr)) + + +/** \brief LDR Exclusive (32 bit) + + This function performs a exclusive LDR command for 32 bit values. + + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDREXW(ptr) ((uint32_t ) __ldrex(ptr)) + + +/** \brief STR Exclusive (8 bit) + + This function performs a exclusive STR command for 8 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXB(value, ptr) __strex(value, ptr) + + +/** \brief STR Exclusive (16 bit) + + This function performs a exclusive STR command for 16 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXH(value, ptr) __strex(value, ptr) + + +/** \brief STR Exclusive (32 bit) + + This function performs a exclusive STR command for 32 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXW(value, ptr) __strex(value, ptr) + + +/** \brief Remove the exclusive lock + + This function removes the exclusive lock which is created by LDREX. + + */ +#define __CLREX __clrex + + +/** \brief Signed Saturate + + This function saturates a signed value. + + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT __ssat + + +/** \brief Unsigned Saturate + + This function saturates an unsigned value. + + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT __usat + + +/** \brief Count leading zeros + + This function counts the number of leading zeros of a data value. + + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +#define __CLZ __clz + +#endif /* (__CORTEX_M >= 0x03) */ + + + +#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/ +/* IAR iccarm specific functions */ + +#include <cmsis_iar.h> + + +#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/ +/* TI CCS specific functions */ + +#include <cmsis_ccs.h> + + +#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/ +/* GNU gcc specific functions */ + +/* Define macros for porting to both thumb1 and thumb2. + * For thumb1, use low register (r0-r7), specified by constrant "l" + * Otherwise, use general registers, specified by constrant "r" */ +#if defined (__thumb__) && !defined (__thumb2__) +#define __CMSIS_GCC_OUT_REG(r) "=l" (r) +#define __CMSIS_GCC_USE_REG(r) "l" (r) +#else +#define __CMSIS_GCC_OUT_REG(r) "=r" (r) +#define __CMSIS_GCC_USE_REG(r) "r" (r) +#endif + +/** \brief No Operation + + No Operation does nothing. This instruction can be used for code alignment purposes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __NOP(void) +{ + __ASM volatile ("nop"); +} + + +/** \brief Wait For Interrupt + + Wait For Interrupt is a hint instruction that suspends execution + until one of a number of events occurs. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __WFI(void) +{ + __ASM volatile ("wfi"); +} + + +/** \brief Wait For Event + + Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __WFE(void) +{ + __ASM volatile ("wfe"); +} + + +/** \brief Send Event + + Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __SEV(void) +{ + __ASM volatile ("sev"); +} + + +/** \brief Instruction Synchronization Barrier + + Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or + memory, after the instruction has been completed. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __ISB(void) +{ + __ASM volatile ("isb"); +} + + +/** \brief Data Synchronization Barrier + + This function acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __DSB(void) +{ + __ASM volatile ("dsb"); +} + + +/** \brief Data Memory Barrier + + This function ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __DMB(void) +{ + __ASM volatile ("dmb"); +} + + +/** \brief Reverse byte order (32 bit) + + This function reverses the byte order in integer value. + + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __REV(uint32_t value) +{ +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) + return __builtin_bswap32(value); +#else + uint32_t result; + + __ASM volatile ("rev %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return(result); +#endif +} + + +/** \brief Reverse byte order (16 bit) + + This function reverses the byte order in two unsigned short values. + + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __REV16(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rev16 %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return(result); +} + + +/** \brief Reverse byte order in signed short value + + This function reverses the byte order in a signed short value with sign extension to integer. + + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE int32_t __REVSH(int32_t value) +{ +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + return (short)__builtin_bswap16(value); +#else + uint32_t result; + + __ASM volatile ("revsh %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return(result); +#endif +} + + +/** \brief Rotate Right in unsigned value (32 bit) + + This function Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + + \param [in] value Value to rotate + \param [in] value Number of Bits to rotate + \return Rotated value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __ROR(uint32_t op1, uint32_t op2) +{ + return (op1 >> op2) | (op1 << (32 - op2)); +} + + +/** \brief Breakpoint + + This function causes the processor to enter Debug state. + Debug tools can use this to investigate system state when the instruction at a particular address is reached. + + \param [in] value is ignored by the processor. + If required, a debugger can use it to store additional information about the breakpoint. + */ +#define __BKPT(value) __ASM volatile ("bkpt "#value) + + +#if (__CORTEX_M >= 0x03) + +/** \brief Reverse bit order of value + + This function reverses the bit order of the given value. + + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __RBIT(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); + return(result); +} + + +/** \brief LDR Exclusive (8 bit) + + This function performs a exclusive LDR command for 8 bit value. + + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint8_t __LDREXB(volatile uint8_t *addr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrexb %0, %1" : "=r" (result) : "Q" (*addr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); +#endif + return(result); +} + + +/** \brief LDR Exclusive (16 bit) + + This function performs a exclusive LDR command for 16 bit values. + + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint16_t __LDREXH(volatile uint16_t *addr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrexh %0, %1" : "=r" (result) : "Q" (*addr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); +#endif + return(result); +} + + +/** \brief LDR Exclusive (32 bit) + + This function performs a exclusive LDR command for 32 bit values. + + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __LDREXW(volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + return(result); +} + + +/** \brief STR Exclusive (8 bit) + + This function performs a exclusive STR command for 8 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr) +{ + uint32_t result; + + __ASM volatile ("strexb %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + return(result); +} + + +/** \brief STR Exclusive (16 bit) + + This function performs a exclusive STR command for 16 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr) +{ + uint32_t result; + + __ASM volatile ("strexh %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + return(result); +} + + +/** \brief STR Exclusive (32 bit) + + This function performs a exclusive STR command for 32 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + return(result); +} + + +/** \brief Remove the exclusive lock + + This function removes the exclusive lock which is created by LDREX. + + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __CLREX(void) +{ + __ASM volatile ("clrex" ::: "memory"); +} + + +/** \brief Signed Saturate + + This function saturates a signed value. + + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("ssat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + + +/** \brief Unsigned Saturate + + This function saturates an unsigned value. + + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("usat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + + +/** \brief Count leading zeros + + This function counts the number of leading zeros of a data value. + + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint8_t __CLZ(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("clz %0, %1" : "=r" (result) : "r" (value) ); + return(result); +} + +#endif /* (__CORTEX_M >= 0x03) */ + + + + +#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/ +/* TASKING carm specific functions */ + +/* + * The CMSIS functions have been implemented as intrinsics in the compiler. + * Please use "carm -?i" to get an up to date list of all intrinsics, + * Including the CMSIS ones. + */ + +#endif + +/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ + +#endif /* __CORE_CMINSTR_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_GHI_MBUINO/power_api.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,82 @@ +/**************************************************************************** + * $Id:: power_api.h 6249 2011-01-25 19:23:47Z usb01267 $ + * Project: NXP LPC11Uxx software example + * + * Description: + * Power API Header File for NXP LPC11Uxx Device Series + * + **************************************************************************** + * Software that is described herein is for illustrative purposes only + * which provides customers with programming information regarding the + * products. This software is supplied "AS IS" without any warranties. + * NXP Semiconductors assumes no responsibility or liability for the + * use of the software, conveys no license or title under any patent, + * copyright, or mask work right to the product. NXP Semiconductors + * reserves the right to make changes in the software without + * notification. NXP Semiconductors also make no representation or + * warranty that such application will be suitable for the specified + * use without further testing or modification. +****************************************************************************/ +#ifndef __LPC11UXX_POWER_API_H__ +#define __LPC11UXX_POWER_API_H__ + +#ifdef __cplusplus + extern "C" { +#endif + +#define PWRROMD_PRESENT + +typedef struct _PWRD { + void (*set_pll)(unsigned int cmd[], unsigned int resp[]); + void (*set_power)(unsigned int cmd[], unsigned int resp[]); +} PWRD; + +typedef struct _ROM { +#ifdef USBROMD_PRESENT + const USB * pUSBD; +#else + const unsigned p_usbd; +#endif /* USBROMD_PRESENT */ + const unsigned p_clib; + const unsigned p_cand; +#ifdef PWRROMD_PRESENT + const PWRD * pPWRD; +#else + const unsigned p_pwrd; +#endif /* PWRROMD_PRESENT */ + const unsigned p_dev1; + const unsigned p_dev2; + const unsigned p_dev3; + const unsigned p_dev4; +} ROM; + +//PLL setup related definitions +#define CPU_FREQ_EQU 0 //main PLL freq must be equal to the specified +#define CPU_FREQ_LTE 1 //main PLL freq must be less than or equal the specified +#define CPU_FREQ_GTE 2 //main PLL freq must be greater than or equal the specified +#define CPU_FREQ_APPROX 3 //main PLL freq must be as close as possible the specified + +#define PLL_CMD_SUCCESS 0 //PLL setup successfully found +#define PLL_INVALID_FREQ 1 //specified freq out of range (either input or output) +#define PLL_INVALID_MODE 2 //invalid mode (see above for valid) specified +#define PLL_FREQ_NOT_FOUND 3 //specified freq not found under specified conditions +#define PLL_NOT_LOCKED 4 //PLL not locked => no changes to the PLL setup + +//power setup elated definitions +#define PARAM_DEFAULT 0 //default power settings (voltage regulator, flash interface) +#define PARAM_CPU_PERFORMANCE 1 //setup for maximum CPU performance (higher current, more computation) +#define PARAM_EFFICIENCY 2 //balanced setting (power vs CPU performance) +#define PARAM_LOW_CURRENT 3 //lowest active current, lowest CPU performance + +#define PARAM_CMD_SUCCESS 0 //power setting successfully found +#define PARAM_INVALID_FREQ 1 //specified freq out of range (=0 or > 50 MHz) +#define PARAM_INVALID_MODE 2 //specified mode not valid (see above for valid) + +#define MAX_CLOCK_KHZ_PARAM 50000 + +#ifdef __cplusplus +} +#endif + +#endif /* __LPC11UXX_POWER_API_H__ */ +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_GHI_MBUINO/system_LPC11Uxx.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,64 @@ +/**************************************************************************//** + * @file system_LPC11Uxx.h + * @brief CMSIS Cortex-M0 Device Peripheral Access Layer Header File + * for the NXP LPC11Uxx Device Series + * @version V1.10 + * @date 24. November 2010 + * + * @note + * Copyright (C) 2009-2010 ARM Limited. All rights reserved. + * + * @par + * ARM Limited (ARM) is supplying this software for use with Cortex-M + * processor based microcontrollers. This file can be freely distributed + * within development tools that are supporting such ARM based processors. + * + * @par + * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED + * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. + * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR + * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + * + ******************************************************************************/ + + +#ifndef __SYSTEM_LPC11Uxx_H +#define __SYSTEM_LPC11Uxx_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include <stdint.h> + +extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */ + + +/** + * Initialize the system + * + * @param none + * @return none + * + * @brief Setup the microcontroller system. + * Initialize the System and update the SystemCoreClock variable. + */ +extern void SystemInit (void); + +/** + * Update SystemCoreClock variable + * + * @param none + * @return none + * + * @brief Updates the SystemCoreClock with current core Clock + * retrieved from cpu registers. + */ +extern void SystemCoreClockUpdate (void); + +#ifdef __cplusplus +} +#endif + +#endif /* __SYSTEM_LPC11Uxx_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_HRM1017/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,385 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_COMMON BLE SoftDevice Common + @{ + @defgroup ble_api Events, type definitions and API calls + @{ + + @brief Module independent events, type definitions and API calls for the S110 SoftDevice. + + */ + +#ifndef BLE_H__ +#define BLE_H__ + +#include "ble_ranges.h" +#include "ble_types.h" +#include "ble_gap.h" +#include "ble_l2cap.h" +#include "ble_gatt.h" +#include "ble_gattc.h" +#include "ble_gatts.h" + +/** @addtogroup BLE_COMMON_ENUMERATIONS Enumerations + * @{ */ + +/** + * @brief Common API SVC numbers. + */ +enum BLE_COMMON_SVCS +{ + SD_BLE_ENABLE = BLE_SVC_BASE, /**< Enable and initialize the BLE stack */ + SD_BLE_EVT_GET, /**< Get an event from the pending events queue. */ + SD_BLE_TX_BUFFER_COUNT_GET, /**< Get the total number of available application transmission buffers from the stack. */ + SD_BLE_UUID_VS_ADD, /**< Add a Vendor Specific UUID. */ + SD_BLE_UUID_DECODE, /**< Decode UUID bytes. */ + SD_BLE_UUID_ENCODE, /**< Encode UUID bytes. */ + SD_BLE_VERSION_GET, /**< Get the local version information (company id, Link Layer Version, Link Layer Subversion). */ + SD_BLE_USER_MEM_REPLY, /**< User Memory Reply. */ + SD_BLE_OPT_SET, /**< Set a BLE option. */ + SD_BLE_OPT_GET, /**< Get a BLE option. */ +}; + +/** @} */ + +/** @addtogroup BLE_COMMON_DEFINES Defines + * @{ */ + +/** @brief Required pointer alignment for BLE Events. +*/ +#define BLE_EVTS_PTR_ALIGNMENT 4 + +/** @defgroup BLE_USER_MEM_TYPES User Memory Types + * @{ */ +#define BLE_USER_MEM_TYPE_INVALID 0x00 /**< Invalid User Memory Types. */ +#define BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES 0x01 /**< User Memory for GATTS queued writes. */ +/** @} */ + +/** @brief Maximum number of Vendor Specific UUIDs. +*/ +#define BLE_UUID_VS_MAX_COUNT 10 + +/** @} */ + +/** @addtogroup BLE_COMMON_STRUCTURES Structures + * @{ */ + +/** + * @brief BLE Module Independent Event IDs. + */ +enum BLE_COMMON_EVTS +{ + BLE_EVT_TX_COMPLETE = BLE_EVT_BASE, /**< Transmission Complete. */ + BLE_EVT_USER_MEM_REQUEST, /**< User Memory request. */ + BLE_EVT_USER_MEM_RELEASE /**< User Memory release. */ +}; + +/**@brief User Memory Block. */ +typedef struct +{ + uint8_t* p_mem; /**< Pointer to the start of the user memory block. */ + uint16_t len; /**< Length in bytes of the user memory block. */ +} ble_user_mem_block_t; + +/** + * @brief TX complete event. + */ +typedef struct +{ + uint8_t count; /**< Number of packets transmitted. */ +} ble_evt_tx_complete_t; + +/**@brief Event structure for BLE_EVT_USER_MEM_REQUEST. */ +typedef struct +{ + uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ +} ble_evt_user_mem_request_t; + +/**@brief Event structure for BLE_EVT_USER_MEM_RELEASE. */ +typedef struct +{ + uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ + ble_user_mem_block_t mem_block; /**< User memory block */ +} ble_evt_user_mem_release_t; + + +/**@brief Event structure for events not associated with a specific function module. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which this event occured. */ + union + { + ble_evt_tx_complete_t tx_complete; /**< Transmission Complete. */ + ble_evt_user_mem_request_t user_mem_request; /**< User Memory Request Event Parameters. */ + ble_evt_user_mem_release_t user_mem_release; /**< User Memory Release Event Parameters. */ + } params; +} ble_common_evt_t; + +/**@brief BLE Event header. */ +typedef struct +{ + uint16_t evt_id; /**< Value from a BLE_<module>_EVT series. */ + uint16_t evt_len; /**< Length in octets excluding this header. */ +} ble_evt_hdr_t; + +/**@brief Common BLE Event type, wrapping the module specific event reports. */ +typedef struct +{ + ble_evt_hdr_t header; /**< Event header. */ + union + { + ble_common_evt_t common_evt; /**< Common Event, evt_id in BLE_EVT_* series. */ + ble_gap_evt_t gap_evt; /**< GAP originated event, evt_id in BLE_GAP_EVT_* series. */ + ble_l2cap_evt_t l2cap_evt; /**< L2CAP originated event, evt_id in BLE_L2CAP_EVT* series. */ + ble_gattc_evt_t gattc_evt; /**< GATT client originated event, evt_id in BLE_GATTC_EVT* series. */ + ble_gatts_evt_t gatts_evt; /**< GATT server originated event, evt_id in BLE_GATTS_EVT* series. */ + } evt; +} ble_evt_t; + + +/** + * @brief Version Information. + */ +typedef struct +{ + uint8_t version_number; /**< Link Layer Version number for BT 4.1 spec is 7 (https://www.bluetooth.org/en-us/specification/assigned-numbers/link-layer). */ + uint16_t company_id; /**< Company ID, Nordic Semiconductor's company ID is 89 (0x0059) (https://www.bluetooth.org/apps/content/Default.aspx?doc_id=49708). */ + uint16_t subversion_number; /**< Link Layer Sub Version number, corresponds to the SoftDevice Config ID or Firmware ID (FWID). */ +} ble_version_t; + +/**@brief Common BLE Option type, wrapping the module specific options. */ +typedef union +{ + ble_gap_opt_t gap; /**< GAP option, opt_id in BLE_GAP_OPT_* series. */ +} ble_opt_t; + +/** + * @brief BLE GATTS init options + */ +typedef struct +{ + ble_gatts_enable_params_t gatts_enable_params; /**< GATTS init options @ref ble_gatts_enable_params_t. */ +} ble_enable_params_t; + +/** @} */ + +/** @addtogroup BLE_COMMON_FUNCTIONS Functions + * @{ */ + +/**@brief Enable the bluetooth stack + * + * @param[in] p_ble_enable_params Pointer to ble_enable_params_t + * + * @details This call initializes the bluetooth stack, no other BLE related call can be called before this one has been executed. + * + * @return @ref NRF_SUCCESS BLE stack has been initialized successfully + * @return @ref NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. + */ +SVCALL(SD_BLE_ENABLE, uint32_t, sd_ble_enable(ble_enable_params_t * p_ble_enable_params)); + +/**@brief Get an event from the pending events queue. + * + * @param[in] p_dest Pointer to buffer to be filled in with an event, or NULL to retrieve the event length. This buffer <b>must be 4-byte aligned in memory</b>. + * @param[in, out] p_len Pointer the length of the buffer, on return it is filled with the event length. + * + * @details This call allows the application to pull a BLE event from the BLE stack. The application is signalled that an event is + * available from the BLE Stack by the triggering of the SD_EVT_IRQn interrupt (mapped to IRQ 22). + * The application is free to choose whether to call this function from thread mode (main context) or directly from the Interrupt Service Routine + * that maps to SD_EVT_IRQn. In any case however, and because the BLE stack runs at a higher priority than the application, this function should be called + * in a loop (until @ref NRF_ERROR_NOT_FOUND is returned) every time SD_EVT_IRQn is raised to ensure that all available events are pulled from the stack. + * Failure to do so could potentially leave events in the internal queue without the application being aware of this fact. + * Sizing the p_dest buffer is equally important, since the application needs to provide all the memory necessary for the event to be copied into + * application memory. If the buffer provided is not large enough to fit the entire contents of the event, @ref NRF_ERROR_DATA_SIZE will be returned + * and the application can then call again with a larger buffer size. + * Please note that because of the variable length nature of some events, sizeof(ble_evt_t) will not always be large enough to fit certain events, + * and so it is the application's responsability to provide an amount of memory large enough so that the relevant event is copied in full. + * The application may "peek" the event length by providing p_dest as a NULL pointer and inspecting the value of *p_len upon return. + * + * @note The pointer supplied must be aligned to the extend defined by @ref BLE_EVTS_PTR_ALIGNMENT + * + * @return @ref NRF_SUCCESS Event pulled and stored into the supplied buffer. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. + * @return @ref NRF_ERROR_NOT_FOUND No events ready to be pulled. + * @return @ref NRF_ERROR_DATA_SIZE Event ready but could not fit into the supplied buffer. + */ +SVCALL(SD_BLE_EVT_GET, uint32_t, sd_ble_evt_get(uint8_t* p_dest, uint16_t *p_len)); + + +/**@brief Get the total number of available application transmission buffers in the BLE stack. + * + * @details This call allows the application to obtain the total number of + * transmission buffers available for application data. Please note that + * this does not give the number of free buffers, but rather the total amount of them. + * The application has two options to handle its own application transmission buffers: + * - Use a simple arithmetic calculation: at boot time the application should use this function + * to find out the total amount of buffers available to it and store it in a variable. + * Every time a packet that consumes an application buffer is sent using any of the + * exposed functions in this BLE API, the application should decrement that variable. + * Conversely, whenever a @ref BLE_EVT_TX_COMPLETE event is received by the application + * it should retrieve the count field in such event and add that number to the same + * variable storing the number of available packets. + * This mechanism allows the application to be aware at any time of the number of + * application packets available in the BLE stack's internal buffers, and therefore + * it can know with certainty whether it is possible to send more data or it has to + * wait for a @ref BLE_EVT_TX_COMPLETE event before it proceeds. + * - Choose to simply not keep track of available buffers at all, and instead handle the + * @ref BLE_ERROR_NO_TX_BUFFERS error by queueing the packet to be transmitted and + * try again as soon as a @ref BLE_EVT_TX_COMPLETE event arrives. + * + * The API functions that <b>may</b> consume an application buffer depending on + * the parameters supplied to them can be found below: + * + * - @ref sd_ble_gattc_write (write witout response only) + * - @ref sd_ble_gatts_hvx (notifications only) + * - @ref sd_ble_l2cap_tx (all packets) + * + * @param[out] p_count Pointer to a uint8_t which will contain the number of application transmission buffers upon + * successful return. + * + * @return @ref NRF_SUCCESS Number of application transmission buffers retrieved successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_TX_BUFFER_COUNT_GET, uint32_t, sd_ble_tx_buffer_count_get(uint8_t* p_count)); + + +/**@brief Add a Vendor Specific UUID. + * + * @details This call enables the application to add a vendor specific UUID to the BLE stack's table, + * for later use all other modules and APIs. This then allows the application to use the shorter, + * 24-bit @ref ble_uuid_t format when dealing with both 16-bit and 128-bit UUIDs without having to + * check for lengths and having split code paths. The way that this is accomplished is by extending the + * grouping mechanism that the Bluetooth SIG standard base UUID uses for all other 128-bit UUIDs. The + * type field in the @ref ble_uuid_t structure is an index (relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN) + * to the table populated by multiple calls to this function, and the uuid field in the same structure + * contains the 2 bytes at indices 12 and 13. The number of possible 128-bit UUIDs available to the + * application is therefore the number of Vendor Specific UUIDs added with the help of this function times 65536, + * although restricted to modifying bytes 12 and 13 for each of the entries in the supplied array. + * + * @note Bytes 12 and 13 of the provided UUID will not be used internally, since those are always replaced by + * the 16-bit uuid field in @ref ble_uuid_t. + * + * + * @param[in] p_vs_uuid Pointer to a 16-octet (128-bit) little endian Vendor Specific UUID disregarding + * bytes 12 and 13. + * @param[out] p_uuid_type Pointer where the type field in @ref ble_uuid_t corresponding to this UUID will be stored. + * + * @return @ref NRF_SUCCESS Successfully added the Vendor Specific UUID. + * @return @ref NRF_ERROR_INVALID_ADDR If p_vs_uuid or p_uuid_type is NULL or invalid. + * @return @ref NRF_ERROR_NO_MEM If there are no more free slots for VS UUIDs. + * @return @ref NRF_ERROR_FORBIDDEN If p_vs_uuid has already been added to the VS UUID table. + */ +SVCALL(SD_BLE_UUID_VS_ADD, uint32_t, sd_ble_uuid_vs_add(ble_uuid128_t const * const p_vs_uuid, uint8_t * const p_uuid_type)); + + +/** @brief Decode little endian raw UUID bytes (16-bit or 128-bit) into a 24 bit @ref ble_uuid_t structure. + * + * @details The raw UUID bytes excluding bytes 12 and 13 (i.e. bytes 0-11 and 14-15) of p_uuid_le are compared + * to the corresponding ones in each entry of the table of vendor specific UUIDs pouplated with @ref sd_ble_uuid_vs_add + * to look for a match. If there is such a match, bytes 12 and 13 are returned as p_uuid->uuid and the index + * relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN as p_uuid->type. + * + * @note If the UUID length supplied is 2, then the type set by this call will always be @ref BLE_UUID_TYPE_BLE. + * + * @param[in] uuid_le_len Length in bytes of the buffer pointed to by p_uuid_le (must be 2 or 16 bytes). + * @param[in] p_uuid_le Pointer pointing to little endian raw UUID bytes. + * @param[in,out] p_uuid Pointer to a @ref ble_uuid_t structure to be filled in. + * + * @return @ref NRF_SUCCESS Successfully decoded into the @ref ble_uuid_t structure. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_LENGTH Invalid UUID length. + * @return @ref NRF_ERROR_NOT_FOUND For a 128-bit UUID, no match in the populated table of UUIDs. + */ +SVCALL(SD_BLE_UUID_DECODE, uint32_t, sd_ble_uuid_decode(uint8_t uuid_le_len, uint8_t const * const p_uuid_le, ble_uuid_t * const p_uuid)); + + +/** @brief Encode a @ref ble_uuid_t structure into little endian raw UUID bytes (16-bit or 128-bit). + * + * @note The pointer to the destination buffer p_uuid_le may be NULL, in which case only the validitiy and size of p_uuid is computed. + * + * @param[in] p_uuid Pointer to a @ref ble_uuid_t structure that will be encoded into bytes. + * @param[out] p_uuid_le_len Pointer to a uint8_t that will be filled with the encoded length (2 or 16 bytes). + * @param[out] p_uuid_le Pointer to a buffer where the little endian raw UUID bytes (2 or 16) will be stored. + * + * @return @ref NRF_SUCCESS Successfully encoded into the buffer. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid UUID type. + */ +SVCALL(SD_BLE_UUID_ENCODE, uint32_t, sd_ble_uuid_encode(ble_uuid_t const * const p_uuid, uint8_t * const p_uuid_le_len, uint8_t * const p_uuid_le)); + + +/**@brief Get Version Information. + * + * @details This call allows the application to get the BLE stack version information. + * + * @param[in] p_version Pointer to ble_version_t structure to be filled in. + * + * @return @ref NRF_SUCCESS Version information stored successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY The stack is busy (typically doing a locally-initiated disconnection procedure). + */ +SVCALL(SD_BLE_VERSION_GET, uint32_t, sd_ble_version_get(ble_version_t * p_version)); + + +/**@brief Provide a user memory block. + * + * @note This call can only be used as a response to a @ref BLE_EVT_USER_MEM_REQUEST event issued to the application. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_block Pointer to a user memory block structure. + * + * @return @ref NRF_SUCCESS Successfully queued a response to the peer. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_STATE No execute write request pending. + */ +SVCALL(SD_BLE_USER_MEM_REPLY, uint32_t, sd_ble_user_mem_reply(uint16_t conn_handle, ble_user_mem_block_t *p_block)); + + +/**@brief Set a BLE option. + * + * @details This call allows the application to set the value of an option. + * + * @param[in] opt_id Option ID. + * @param[in] p_opt Pointer to a ble_opt_t structure containing the option value. + * + * @retval ::NRF_SUCCESS Option set successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. + * @retval ::NRF_ERROR_INVALID_STATE Unable to set the parameter at this time. + * @retval ::NRF_ERROR_BUSY The stack is busy or the previous procedure has not completed. + */ +SVCALL(SD_BLE_OPT_SET, uint32_t, sd_ble_opt_set(uint32_t opt_id, ble_opt_t const *p_opt)); + + +/**@brief Get a BLE option. + * + * @details This call allows the application to retrieve the value of an option. + * + * @param[in] opt_id Option ID. + * @param[out] p_opt Pointer to a ble_opt_t structure to be filled in. + * + * @retval ::NRF_SUCCESS Option retrieved successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. + * @retval ::NRF_ERROR_INVALID_STATE Unable to retrieve the parameter at this time. + * @retval ::NRF_ERROR_BUSY The stack is busy or the previous procedure has not completed. + * @retval ::NRF_ERROR_NOT_SUPPORTED This option is not supported. + * + */ +SVCALL(SD_BLE_OPT_GET, uint32_t, sd_ble_opt_get(uint32_t opt_id, ble_opt_t *p_opt)); + +/** @} */ + +#endif /* BLE_H__ */ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_HRM1017/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_err.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + /** + @addtogroup BLE_COMMON + @{ + @addtogroup nrf_error + @{ + @ingroup BLE_COMMON + @} + + @defgroup ble_err General error codes + @{ + + @brief General error code definitions for the BLE API. + + @ingroup BLE_COMMON +*/ +#ifndef NRF_BLE_ERR_H__ +#define NRF_BLE_ERR_H__ + +#include "nrf_error.h" + +/* @defgroup BLE_ERRORS Error Codes + * @{ */ +#define BLE_ERROR_NOT_ENABLED (NRF_ERROR_STK_BASE_NUM+0x001) /**< @ref sd_ble_enable has not been called. */ +#define BLE_ERROR_INVALID_CONN_HANDLE (NRF_ERROR_STK_BASE_NUM+0x002) /**< Invalid connection handle. */ +#define BLE_ERROR_INVALID_ATTR_HANDLE (NRF_ERROR_STK_BASE_NUM+0x003) /**< Invalid attribute handle. */ +#define BLE_ERROR_NO_TX_BUFFERS (NRF_ERROR_STK_BASE_NUM+0x004) /**< Buffer capacity exceeded. */ +/** @} */ + + +/** @defgroup BLE_ERROR_SUBRANGES Module specific error code subranges + * @brief Assignment of subranges for module specific error codes. + * @note For specific error codes, see ble_<module>.h or ble_error_<module>.h. + * @{ */ +#define NRF_L2CAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x100) /**< L2CAP specific errors. */ +#define NRF_GAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x200) /**< GAP specific errors. */ +#define NRF_GATTC_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x300) /**< GATT client specific errors. */ +#define NRF_GATTS_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x400) /**< GATT server specific errors. */ +/** @} */ + +#endif + + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_HRM1017/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gap.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,1032 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_GAP Generic Access Profile (GAP) + @{ + @brief Definitions and prototypes for the GAP interface. + */ + +#ifndef BLE_GAP_H__ +#define BLE_GAP_H__ + +#include "ble_types.h" +#include "ble_ranges.h" +#include "nrf_svc.h" + + +/**@addtogroup BLE_GAP_ENUMERATIONS Enumerations + * @{ */ + +/**@brief GAP API SVC numbers. + */ +enum BLE_GAP_SVCS +{ + SD_BLE_GAP_ADDRESS_SET = BLE_GAP_SVC_BASE, /**< Set own Bluetooth Address. */ + SD_BLE_GAP_ADDRESS_GET, /**< Get own Bluetooth Address. */ + SD_BLE_GAP_ADV_DATA_SET, /**< Set Advertisement Data. */ + SD_BLE_GAP_ADV_START, /**< Start Advertising. */ + SD_BLE_GAP_ADV_STOP, /**< Stop Advertising. */ + SD_BLE_GAP_CONN_PARAM_UPDATE, /**< Connection Parameter Update. */ + SD_BLE_GAP_DISCONNECT, /**< Disconnect. */ + SD_BLE_GAP_TX_POWER_SET, /**< Set TX Power. */ + SD_BLE_GAP_APPEARANCE_SET, /**< Set Appearance. */ + SD_BLE_GAP_APPEARANCE_GET, /**< Get Appearance. */ + SD_BLE_GAP_PPCP_SET, /**< Set PPCP. */ + SD_BLE_GAP_PPCP_GET, /**< Get PPCP. */ + SD_BLE_GAP_DEVICE_NAME_SET, /**< Set Device Name. */ + SD_BLE_GAP_DEVICE_NAME_GET, /**< Get Device Name. */ + SD_BLE_GAP_AUTHENTICATE, /**< Initiate Pairing/Bonding. */ + SD_BLE_GAP_SEC_PARAMS_REPLY, /**< Reply with Security Parameters. */ + SD_BLE_GAP_AUTH_KEY_REPLY, /**< Reply with an authentication key. */ + SD_BLE_GAP_SEC_INFO_REPLY, /**< Reply with Security Information. */ + SD_BLE_GAP_CONN_SEC_GET, /**< Obtain connection security level. */ + SD_BLE_GAP_RSSI_START, /**< Start reporting of changes in RSSI. */ + SD_BLE_GAP_RSSI_STOP, /**< Stop reporting of changes in RSSI. */ +}; +/**@} */ + +/**@addtogroup BLE_GAP_DEFINES Defines + * @{ */ + +/**@defgroup BLE_ERRORS_GAP SVC return values specific to GAP + * @{ */ +#define BLE_ERROR_GAP_UUID_LIST_MISMATCH (NRF_GAP_ERR_BASE + 0x000) /**< UUID list does not contain an integral number of UUIDs. */ +#define BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST (NRF_GAP_ERR_BASE + 0x001) /**< Use of Whitelist not permitted with discoverable advertising. */ +#define BLE_ERROR_GAP_INVALID_BLE_ADDR (NRF_GAP_ERR_BASE + 0x002) /**< The upper two bits of the address do not correspond to the specified address type. */ +/**@} */ + + +/**@defgroup BLE_GAP_ROLES GAP Roles + * @note Not explicitly used in peripheral API, but will be relevant for central API. + * @{ */ +#define BLE_GAP_ROLE_INVALID 0x0 /**< Invalid Role. */ +#define BLE_GAP_ROLE_PERIPH 0x1 /**< Peripheral Role. */ +#define BLE_GAP_ROLE_CENTRAL 0x2 /**< Central Role. */ +/**@} */ + + +/**@defgroup BLE_GAP_TIMEOUT_SOURCES GAP Timeout sources + * @{ */ +#define BLE_GAP_TIMEOUT_SRC_ADVERTISEMENT 0x00 /**< Advertisement timeout. */ +#define BLE_GAP_TIMEOUT_SRC_SECURITY_REQUEST 0x01 /**< Security request timeout. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADDR_TYPES GAP Address types + * @{ */ +#define BLE_GAP_ADDR_TYPE_PUBLIC 0x00 /**< Public address. */ +#define BLE_GAP_ADDR_TYPE_RANDOM_STATIC 0x01 /**< Random Static address. */ +#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE 0x02 /**< Private Resolvable address. */ +#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE 0x03 /**< Private Non-Resolvable address. */ +/**@} */ + +/**@defgroup BLE_GAP_ADDR_CYCLE_MODES GAP Address cycle modes + * @{ */ +#define BLE_GAP_ADDR_CYCLE_MODE_NONE 0x00 /**< Set addresses directly, no automatic address cycling. */ +#define BLE_GAP_ADDR_CYCLE_MODE_AUTO 0x01 /**< Automatically generate and update private addresses. */ +/** @} */ + +/**@brief The default interval in seconds at which a private address is refreshed when address cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO. */ +#define BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S (60 * 15) + +/** @brief BLE address length. */ +#define BLE_GAP_ADDR_LEN 6 + + +/**@defgroup BLE_GAP_AD_TYPE_DEFINITIONS GAP Advertising and Scan Response Data format + * @note Found at https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm + * @{ */ +#define BLE_GAP_AD_TYPE_FLAGS 0x01 /**< Flags for discoverability. */ +#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE 0x02 /**< Partial list of 16 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE 0x03 /**< Complete list of 16 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE 0x04 /**< Partial list of 32 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE 0x05 /**< Complete list of 32 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE 0x06 /**< Partial list of 128 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE 0x07 /**< Complete list of 128 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME 0x08 /**< Short local device name. */ +#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME 0x09 /**< Complete local device name. */ +#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL 0x0A /**< Transmit power level. */ +#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE 0x0D /**< Class of device. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C 0x0E /**< Simple Pairing Hash C. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R 0x0F /**< Simple Pairing Randomizer R. */ +#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE 0x10 /**< Security Manager TK Value. */ +#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS 0x11 /**< Security Manager Out Of Band Flags. */ +#define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE 0x12 /**< Slave Connection Interval Range. */ +#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT 0x14 /**< List of 16-bit Service Solicitation UUIDs. */ +#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT 0x15 /**< List of 128-bit Service Solicitation UUIDs. */ +#define BLE_GAP_AD_TYPE_SERVICE_DATA 0x16 /**< Service Data - 16-bit UUID. */ +#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS 0x17 /**< Public Target Address. */ +#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS 0x18 /**< Random Target Address. */ +#define BLE_GAP_AD_TYPE_APPEARANCE 0x19 /**< Appearance. */ +#define BLE_GAP_AD_TYPE_ADVERTISING_INTERVAL 0x1A /**< Advertising Interval. */ +#define BLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS 0x1B /**< LE Bluetooth Device Address. */ +#define BLE_GAP_AD_TYPE_LE_ROLE 0x1C /**< LE Role. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C256 0x1D /**< Simple Pairing Hash C-256. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R256 0x1E /**< Simple Pairing Randomizer R-256. */ +#define BLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID 0x20 /**< Service Data - 32-bit UUID. */ +#define BLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID 0x21 /**< Service Data - 128-bit UUID. */ +#define BLE_GAP_AD_TYPE_3D_INFORMATION_DATA 0x3D /**< 3D Information Data. */ +#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA 0xFF /**< Manufacturer Specific Data. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADV_FLAGS GAP Advertisement Flags + * @{ */ +#define BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE (0x01) /**< LE Limited Discoverable Mode. */ +#define BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE (0x02) /**< LE General Discoverable Mode. */ +#define BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED (0x04) /**< BR/EDR not supported. */ +#define BLE_GAP_ADV_FLAG_LE_BR_EDR_CONTROLLER (0x08) /**< Simultaneous LE and BR/EDR, Controller. */ +#define BLE_GAP_ADV_FLAG_LE_BR_EDR_HOST (0x10) /**< Simultaneous LE and BR/EDR, Host. */ +#define BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE (BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE Limited Discoverable Mode, BR/EDR not supported. */ +#define BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE (BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE General Discoverable Mode, BR/EDR not supported. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADV_INTERVALS GAP Advertising interval max and min + * @{ */ +#define BLE_GAP_ADV_INTERVAL_MIN 0x0020 /**< Minimum Advertising interval in 625 us units, i.e. 20 ms. */ +#define BLE_GAP_ADV_NONCON_INTERVAL_MIN 0x00A0 /**< Minimum Advertising interval in 625 us units for non connectable mode, i.e. 100 ms. */ +#define BLE_GAP_ADV_INTERVAL_MAX 0x4000 /**< Maximum Advertising interval in 625 us units, i.e. 10.24 s. */ + /**@} */ + + +/**@brief Maximum size of advertising data in octets. */ +#define BLE_GAP_ADV_MAX_SIZE 31 + + +/**@defgroup BLE_GAP_ADV_TYPES GAP Advertising types + * @{ */ +#define BLE_GAP_ADV_TYPE_ADV_IND 0x00 /**< Connectable undirected. */ +#define BLE_GAP_ADV_TYPE_ADV_DIRECT_IND 0x01 /**< Connectable directed. */ +#define BLE_GAP_ADV_TYPE_ADV_SCAN_IND 0x02 /**< Scannable undirected. */ +#define BLE_GAP_ADV_TYPE_ADV_NONCONN_IND 0x03 /**< Non connectable undirected. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADV_FILTER_POLICIES GAP Advertising filter policies + * @{ */ +#define BLE_GAP_ADV_FP_ANY 0x00 /**< Allow scan requests and connect requests from any device. */ +#define BLE_GAP_ADV_FP_FILTER_SCANREQ 0x01 /**< Filter scan requests with whitelist. */ +#define BLE_GAP_ADV_FP_FILTER_CONNREQ 0x02 /**< Filter connect requests with whitelist. */ +#define BLE_GAP_ADV_FP_FILTER_BOTH 0x03 /**< Filter both scan and connect requests with whitelist. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADV_TIMEOUT_VALUES GAP Advertising timeout values + * @{ */ +#define BLE_GAP_ADV_TIMEOUT_LIMITED_MAX 180 /**< Maximum advertising time in limited discoverable mode (TGAP(lim_adv_timeout) = 180s in spec (Addendum 2)). */ +#define BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED 0 /**< Unlimited advertising in general discoverable mode. */ +/**@} */ + + +/**@defgroup BLE_GAP_DISC_MODES GAP Discovery modes + * @{ */ +#define BLE_GAP_DISC_MODE_NOT_DISCOVERABLE 0x00 /**< Not discoverable discovery Mode. */ +#define BLE_GAP_DISC_MODE_LIMITED 0x01 /**< Limited Discovery Mode. */ +#define BLE_GAP_DISC_MODE_GENERAL 0x02 /**< General Discovery Mode. */ +/**@} */ + +/**@defgroup BLE_GAP_IO_CAPS GAP IO Capabilities + * @{ */ +#define BLE_GAP_IO_CAPS_DISPLAY_ONLY 0x00 /**< Display Only. */ +#define BLE_GAP_IO_CAPS_DISPLAY_YESNO 0x01 /**< Display and Yes/No entry. */ +#define BLE_GAP_IO_CAPS_KEYBOARD_ONLY 0x02 /**< Keyboard Only. */ +#define BLE_GAP_IO_CAPS_NONE 0x03 /**< No I/O capabilities. */ +#define BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY 0x04 /**< Keyboard and Display. */ +/**@} */ + + +/**@defgroup BLE_GAP_AUTH_KEY_TYPES GAP Authentication Key Types + * @{ */ +#define BLE_GAP_AUTH_KEY_TYPE_NONE 0x00 /**< No key (may be used to reject). */ +#define BLE_GAP_AUTH_KEY_TYPE_PASSKEY 0x01 /**< 6-digit Passkey. */ +#define BLE_GAP_AUTH_KEY_TYPE_OOB 0x02 /**< Out Of Band data. */ +/**@} */ + +/**@defgroup BLE_GAP_SEC_STATUS GAP Security status + * @{ */ +#define BLE_GAP_SEC_STATUS_SUCCESS 0x00 /**< Successful parameters. */ +#define BLE_GAP_SEC_STATUS_TIMEOUT 0x01 /**< Procedure timed out. */ +#define BLE_GAP_SEC_STATUS_PDU_INVALID 0x02 /**< Invalid PDU received. */ +#define BLE_GAP_SEC_STATUS_PASSKEY_ENTRY_FAILED 0x81 /**< Passkey entry failed (user cancelled or other). */ +#define BLE_GAP_SEC_STATUS_OOB_NOT_AVAILABLE 0x82 /**< Out of Band Key not available. */ +#define BLE_GAP_SEC_STATUS_AUTH_REQ 0x83 /**< Authentication requirements not met. */ +#define BLE_GAP_SEC_STATUS_CONFIRM_VALUE 0x84 /**< Confirm value failed. */ +#define BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP 0x85 /**< Pairing not supported. */ +#define BLE_GAP_SEC_STATUS_ENC_KEY_SIZE 0x86 /**< Encryption key size. */ +#define BLE_GAP_SEC_STATUS_SMP_CMD_UNSUPPORTED 0x87 /**< Unsupported SMP command. */ +#define BLE_GAP_SEC_STATUS_UNSPECIFIED 0x88 /**< Unspecified reason. */ +#define BLE_GAP_SEC_STATUS_REPEATED_ATTEMPTS 0x89 /**< Too little time elapsed since last attempt. */ +#define BLE_GAP_SEC_STATUS_INVALID_PARAMS 0x8A /**< Invalid parameters. */ +/**@} */ + +/**@defgroup BLE_GAP_SEC_STATUS_SOURCES GAP Security status sources + * @{ */ +#define BLE_GAP_SEC_STATUS_SOURCE_LOCAL 0x00 /**< Local failure. */ +#define BLE_GAP_SEC_STATUS_SOURCE_REMOTE 0x01 /**< Remote failure. */ +/**@} */ + +/**@defgroup BLE_GAP_CP_LIMITS GAP Connection Parameters Limits + * @{ */ +#define BLE_GAP_CP_MIN_CONN_INTVL_NONE 0xFFFF /**< No new minimum connction interval specified in connect parameters. */ +#define BLE_GAP_CP_MIN_CONN_INTVL_MIN 0x0006 /**< Lowest mimimum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ +#define BLE_GAP_CP_MIN_CONN_INTVL_MAX 0x0C80 /**< Highest minimum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ +#define BLE_GAP_CP_MAX_CONN_INTVL_NONE 0xFFFF /**< No new maximum connction interval specified in connect parameters. */ +#define BLE_GAP_CP_MAX_CONN_INTVL_MIN 0x0006 /**< Lowest maximum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ +#define BLE_GAP_CP_MAX_CONN_INTVL_MAX 0x0C80 /**< Highest maximum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ +#define BLE_GAP_CP_SLAVE_LATENCY_MAX 0x03E8 /**< Highest slave latency permitted, in connection events. */ +#define BLE_GAP_CP_CONN_SUP_TIMEOUT_NONE 0xFFFF /**< No new supervision timeout specified in connect parameters. */ +#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MIN 0x000A /**< Lowest supervision timeout permitted, in units of 10 ms, i.e. 100 ms. */ +#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MAX 0x0C80 /**< Highest supervision timeout permitted, in units of 10 ms, i.e. 32 s. */ +/**@} */ + + +/**@brief GAP device name maximum length. */ +#define BLE_GAP_DEVNAME_MAX_LEN 31 + + +/**@defgroup BLE_GAP_CONN_SEC_MODE_SET_MACROS GAP attribute security requirement setters + * + * See @ref ble_gap_conn_sec_mode_t. + * @{ */ +/**@brief Set sec_mode pointed to by ptr to have no access rights.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(ptr) do {(ptr)->sm = 0; (ptr)->lv = 0;} while(0) +/**@brief Set sec_mode pointed to by ptr to require no protection, open link.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_OPEN(ptr) do {(ptr)->sm = 1; (ptr)->lv = 1;} while(0) +/**@brief Set sec_mode pointed to by ptr to require encryption, but no MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 2;} while(0) +/**@brief Set sec_mode pointed to by ptr to require encryption and MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 3;} while(0) +/**@brief Set sec_mode pointed to by ptr to require signing or encryption, no MITM protection needed.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_NO_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 1;} while(0) +/**@brief Set sec_mode pointed to by ptr to require signing or encryption with MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_WITH_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 2;} while(0) +/**@} */ + + +/**@brief GAP Security Key Length. */ +#define BLE_GAP_SEC_KEY_LEN 16 + +/**@brief GAP Passkey Length. */ +#define BLE_GAP_PASSKEY_LEN 6 + +/**@brief Maximum amount of addresses in a whitelist. */ +#define BLE_GAP_WHITELIST_ADDR_MAX_COUNT (8) + +/**@brief Maximum amount of IRKs in a whitelist. + * @note The number of IRKs is limited to 8, even if the hardware supports more. + */ +#define BLE_GAP_WHITELIST_IRK_MAX_COUNT (8) + +/**@defgroup GAP_SEC_MODES GAP Security Modes + * @{ */ +#define BLE_GAP_SEC_MODE 0x00 /**< No key (may be used to reject). */ +/**@} */ + +/**@} */ + +/**@addtogroup BLE_GAP_STRUCTURES Structures + * @{ */ + +/**@brief Bluetooth Low Energy address. */ +typedef struct +{ + uint8_t addr_type; /**< See @ref BLE_GAP_ADDR_TYPES. */ + uint8_t addr[BLE_GAP_ADDR_LEN]; /**< 48-bit address, LSB format. */ +} ble_gap_addr_t; + + +/**@brief GAP connection parameters. + * + * @note When ble_conn_params_t is received in an event, both min_conn_interval and + * max_conn_interval will be equal to the connection interval set by the central. + */ +typedef struct +{ + uint16_t min_conn_interval; /**< Minimum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ + uint16_t max_conn_interval; /**< Maximum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ + uint16_t slave_latency; /**< Slave Latency in number of connection events, see @ref BLE_GAP_CP_LIMITS.*/ + uint16_t conn_sup_timeout; /**< Connection Supervision Timeout in 10 ms units, see @ref BLE_GAP_CP_LIMITS.*/ +} ble_gap_conn_params_t; + + +/**@brief GAP link requirements. + * + * See Bluetooth Core specification, Volume 3 Part C 10.2 for details. + * + * Security Mode 0 Level 0: No access permissions at all (this level is not defined by the Bluetooth Core specification).\n + * Security Mode 1 Level 1: No security is needed (aka open link).\n + * Security Mode 1 Level 2: Encrypted link required, MITM protection not necessary.\n + * Security Mode 1 Level 3: MITM protected encrypted link required.\n + * Security Mode 2 Level 1: Signing or encryption required, MITM protection not necessary.\n + * Security Mode 2 Level 2: MITM protected signing required, unless link is MITM protected encrypted.\n + */ +typedef struct +{ + uint8_t sm : 4; /**< Security Mode (1 or 2), 0 for no permissions at all. */ + uint8_t lv : 4; /**< Level (1, 2 or 3), 0 for no permissions at all. */ + +} ble_gap_conn_sec_mode_t; + + +/**@brief GAP connection security status.*/ +typedef struct +{ + ble_gap_conn_sec_mode_t sec_mode; /**< Currently active security mode for this connection.*/ + uint8_t encr_key_size; /**< Length of currently active encryption key, 7 to 16 octets (only applicable for bonding procedures). */ +} ble_gap_conn_sec_t; + + +/**@brief Identity Resolving Key. */ +typedef struct +{ + uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Array containing IRK. */ +} ble_gap_irk_t; + + +/**@brief Whitelist structure. */ +typedef struct +{ + ble_gap_addr_t ** pp_addrs; /**< Pointer to array of device address pointers, pointing to addresses to be used in whitelist. NULL if none are given. */ + uint8_t addr_count; /**< Count of device addresses in array, up to @ref BLE_GAP_WHITELIST_ADDR_MAX_COUNT. */ + ble_gap_irk_t ** pp_irks; /**< Pointer to array of Identity Resolving Key (IRK) pointers, each pointing to an IRK in the whitelist. NULL if none are given. */ + uint8_t irk_count; /**< Count of IRKs in array, up to @ref BLE_GAP_WHITELIST_IRK_MAX_COUNT. */ +} ble_gap_whitelist_t; + + +/**@brief GAP advertising parameters.*/ +typedef struct +{ + uint8_t type; /**< See @ref BLE_GAP_ADV_TYPES. */ + ble_gap_addr_t* p_peer_addr; /**< For BLE_GAP_CONN_MODE_DIRECTED mode only, known peer address. */ + uint8_t fp; /**< Filter Policy, see @ref BLE_GAP_ADV_FILTER_POLICIES. */ + ble_gap_whitelist_t * p_whitelist; /**< Pointer to whitelist, NULL if none is given. */ + uint16_t interval; /**< Advertising interval between 0x0020 and 0x4000 in 0.625 ms units (20ms to 10.24s), see @ref BLE_GAP_ADV_INTERVALS. This parameter must be set to 0 if type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND. */ + uint16_t timeout; /**< Advertising timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. See also @ref BLE_GAP_ADV_TIMEOUT_VALUES. This parameter must be set to 0 if type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND. */ +} ble_gap_adv_params_t; + + +/**@brief GAP scanning parameters. */ +typedef struct +{ + uint8_t filter; /**< Filter based on discovery mode, see @ref BLE_GAP_DISC_MODES. */ + uint8_t active : 1; /**< If 1, perform active scanning (scan requests). */ + uint8_t selective : 1; /**< If 1, ignore unknown devices (non whitelisted). */ + uint16_t interval; /**< Scan interval between 0x0020 and 0x4000 in 0.625ms units (20ms to 10.24s). */ + uint16_t window; /**< Scan window between 0x0004 and 0x4000 in 0.625ms units (2.5ms to 10.24s). */ + uint16_t timeout; /**< Scan timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. */ +} ble_gap_scan_params_t; + + +/**@brief GAP security parameters. */ +typedef struct +{ + uint16_t timeout; /**< Timeout for SMP transactions or Security Request in seconds, see @ref sd_ble_gap_authenticate and @ref sd_ble_gap_sec_params_reply for more information. */ + uint8_t bond : 1; /**< Perform bonding. */ + uint8_t mitm : 1; /**< Man In The Middle protection required. */ + uint8_t io_caps : 3; /**< IO capabilities, see @ref BLE_GAP_IO_CAPS. */ + uint8_t oob : 1; /**< Out Of Band data available. */ + uint8_t min_key_size; /**< Minimum encryption key size in octets between 7 and 16. */ + uint8_t max_key_size; /**< Maximum encryption key size in octets between min_key_size and 16. */ +} ble_gap_sec_params_t; + + +/**@brief GAP Encryption Information. */ +typedef struct +{ + uint16_t div; /**< Encryption Diversifier. */ + uint8_t ltk[BLE_GAP_SEC_KEY_LEN]; /**< Long Term Key. */ + uint8_t auth : 1; /**< Authenticated Key. */ + uint8_t ltk_len : 7; /**< LTK length in octets. */ +} ble_gap_enc_info_t; + + +/**@brief GAP Master Identification. */ +typedef struct +{ + uint16_t ediv; /**< Encrypted Diversifier. */ + uint8_t rand[8]; /**< Random Number. */ +} ble_gap_master_id_t; + + +/**@brief GAP Identity Information. */ +typedef struct +{ + ble_gap_addr_t addr; /**< Bluetooth address to which this key applies. */ + uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Identity Resolution Key. */ +} ble_gap_id_info_t; + + +/**@brief GAP Signing Information. */ +typedef struct +{ + uint8_t csrk[BLE_GAP_SEC_KEY_LEN]; /* Connection Signature Resolving Key. */ +} ble_gap_sign_info_t; + + +/**@brief GAP Event IDs. + * Those IDs uniquely identify an event coming from the stack to the application. + */ +enum BLE_GAP_EVTS +{ + BLE_GAP_EVT_CONNECTED = BLE_GAP_EVT_BASE, /**< Connection established. */ + BLE_GAP_EVT_DISCONNECTED, /**< Disconnected from peer. */ + BLE_GAP_EVT_CONN_PARAM_UPDATE, /**< Connection Parameters updated. */ + BLE_GAP_EVT_SEC_PARAMS_REQUEST, /**< Request to provide security parameters. */ + BLE_GAP_EVT_SEC_INFO_REQUEST, /**< Request to provide security information. */ + BLE_GAP_EVT_PASSKEY_DISPLAY, /**< Request to display a passkey to the user. */ + BLE_GAP_EVT_AUTH_KEY_REQUEST, /**< Request to provide an authentication key. */ + BLE_GAP_EVT_AUTH_STATUS, /**< Authentication procedure completed with status. */ + BLE_GAP_EVT_CONN_SEC_UPDATE, /**< Connection security updated. */ + BLE_GAP_EVT_TIMEOUT, /**< Timeout expired. */ + BLE_GAP_EVT_RSSI_CHANGED, /**< Signal strength measurement report. */ +}; + + +/** + * @brief GAP Option IDs. + * IDs that uniquely identify a GAP option. + */ +enum BLE_GAP_OPTS +{ + BLE_GAP_OPT_LOCAL_CONN_LATENCY = BLE_GAP_OPT_BASE, /**< Local connection latency. */ + BLE_GAP_OPT_PASSKEY, /**< Set passkey to be used during pairing. This option can be used to make the SoftDevice use an application provided passkey instead of generating a random passkey.*/ + BLE_GAP_OPT_PRIVACY, /**< Set or get custom IRK or custom private address cycle interval. */ +}; +/**@} */ + + +/**@brief Event data for connected event. */ +typedef struct +{ + ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ + uint8_t irk_match :1; /**< If 1, peer device's address resolved using an IRK. */ + uint8_t irk_match_idx :7; /**< Index in IRK list where the address was matched. */ + ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ +} ble_gap_evt_connected_t; + + +/**@brief Event data for disconnected event. */ +typedef struct +{ + uint8_t reason; /**< HCI error code. */ +} ble_gap_evt_disconnected_t; + + +/**@brief Event data for connection parameter update event. */ +typedef struct +{ + ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ +} ble_gap_evt_conn_param_update_t; + + +/**@brief Event data for security parameters request event. */ +typedef struct +{ + ble_gap_sec_params_t peer_params; /**< Initiator Security Parameters. */ +} ble_gap_evt_sec_params_request_t; + + +/**@brief Event data for security info request event. */ +typedef struct +{ + ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ + uint16_t div; /**< Encryption diversifier for LTK lookup. */ + uint8_t enc_info : 1; /**< If 1, Encryption Information required. */ + uint8_t id_info : 1; /**< If 1, Identity Information required. */ + uint8_t sign_info : 1; /**< If 1, Signing Information required. */ +} ble_gap_evt_sec_info_request_t; + + +/**@brief Event data for passkey display event. */ +typedef struct +{ + uint8_t passkey[BLE_GAP_PASSKEY_LEN]; /**< 6-digit passkey in ASCII ('0'-'9' digits only). */ +} ble_gap_evt_passkey_display_t; + + +/**@brief Event data for authentication key request event. */ +typedef struct +{ + uint8_t key_type; /**< See @ref BLE_GAP_AUTH_KEY_TYPES. */ +} ble_gap_evt_auth_key_request_t; + + +/**@brief Security levels supported. + * @note See Bluetooth Specification Version 4.1 Volume 3, Part C, Chapter 10. +*/ +typedef struct +{ + uint8_t lv1 : 1; /**< If 1: Level 1 is supported. */ + uint8_t lv2 : 1; /**< If 1: Level 2 is supported. */ + uint8_t lv3 : 1; /**< If 1: Level 3 is supported. */ +} ble_gap_sec_levels_t; + + +/**@brief Keys that have been exchanged. */ +typedef struct +{ + uint8_t ltk : 1; /**< Long Term Key. */ + uint8_t ediv_rand : 1; /**< Encrypted Diversifier and Random value. */ + uint8_t irk : 1; /**< Identity Resolving Key. */ + uint8_t address : 1; /**< Public or static random address. */ + uint8_t csrk : 1; /**< Connection Signature Resolving Key. */ +} ble_gap_sec_keys_t; + + +/**@brief Event data for authentication status event. */ +typedef struct +{ + uint8_t auth_status; /**< Authentication status, see @ref BLE_GAP_SEC_STATUS. */ + uint8_t error_src; /**< On error, source that caused the failure, see @ref BLE_GAP_SEC_STATUS_SOURCES. */ + ble_gap_sec_levels_t sm1_levels; /**< Levels supported in Security Mode 1. */ + ble_gap_sec_levels_t sm2_levels; /**< Levels supported in Security Mode 2. */ + ble_gap_sec_keys_t periph_kex; /**< Bitmap stating which keys were exchanged (distributed) by the peripheral. */ + ble_gap_sec_keys_t central_kex; /**< Bitmap stating which keys were exchanged (distributed) by the central. */ + struct periph_keys_t + { + ble_gap_enc_info_t enc_info; /**< Peripheral's Encryption information. */ + } periph_keys; /**< Actual keys distributed from the Peripheral to the Central. */ + struct central_keys_t + { + ble_gap_irk_t irk; /**< Central's IRK. */ + ble_gap_addr_t id_info; /**< Central's Identity Info. */ + } central_keys; /**< Actual keys distributed from the Central to the Peripheral. */ +} ble_gap_evt_auth_status_t; + + +/**@brief Event data for connection security update event. */ +typedef struct +{ + ble_gap_conn_sec_t conn_sec; /**< Connection security level. */ +} ble_gap_evt_conn_sec_update_t; + + +/**@brief Event data for timeout event. */ +typedef struct +{ + uint8_t src; /**< Source of timeout event, see @ref BLE_GAP_TIMEOUT_SOURCES. */ +} ble_gap_evt_timeout_t; + + +/**@brief Event data for advertisement report event. */ +typedef struct +{ + int8_t rssi; /**< Received Signal Strength Indication in dBm. */ +} ble_gap_evt_rssi_changed_t; + + +/**@brief GAP event callback event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occured. */ + union /**< union alternative identified by evt_id in enclosing struct. */ + { + ble_gap_evt_connected_t connected; /**< Connected Event Parameters. */ + ble_gap_evt_disconnected_t disconnected; /**< Disconnected Event Parameters. */ + ble_gap_evt_conn_param_update_t conn_param_update; /**< Connection Parameter Update Parameters. */ + ble_gap_evt_sec_params_request_t sec_params_request; /**< Security Parameters Request Event Parameters. */ + ble_gap_evt_sec_info_request_t sec_info_request; /**< Security Information Request Event Parameters. */ + ble_gap_evt_passkey_display_t passkey_display; /**< Passkey Display Event Parameters. */ + ble_gap_evt_auth_key_request_t auth_key_request; /**< Authentication Key Request Event Parameters. */ + ble_gap_evt_auth_status_t auth_status; /**< Authentication Status Event Parameters. */ + ble_gap_evt_conn_sec_update_t conn_sec_update; /**< Connection Security Update Event Parameters. */ + ble_gap_evt_timeout_t timeout; /**< Timeout Event Parameters. */ + ble_gap_evt_rssi_changed_t rssi_changed; /**< RSSI Event parameters. */ + } params; + +} ble_gap_evt_t; + + +/**@brief Local connection latency option. + * + * Local connection latency is a feature which enables the slave to improve + * current consumption by ignoring the slave latency set by the peer. The + * local connection latency can only be set to a multiple of the slave latency, + * and cannot be longer than half of the supervision timeout. + * + * Used with @ref sd_ble_opt_set to set the local connection latency. The + * @ref sd_ble_opt_get is not supported for this option, but the actual + * local connection latency (unless set to NULL) is set as a return parameter + * when setting the option. + * + * @note The latency set will be truncated down to the closest slave latency event + * multiple, or the nearest multiple before half of the supervision timeout. + * + * @note The local connection latency is default off, and needs to be set for new + * connections and whenever the connection is updated. + * + * @retval ::NRF_SUCCESS Set successfully. + * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. + */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle */ + uint16_t requested_latency; /**< Requested local connection latency. */ + uint16_t * p_actual_latency; /**< Pointer to storage for the actual local connection latency (can be set to NULL to skip return value). */ +} ble_gap_opt_local_conn_latency_t; + + +/**@brief Passkey Option. + * + * Structure containing the passkey to be used during pairing. This can be used with @ref + * sd_ble_opt_set to make the SoftDevice use a pre-programmed passkey for authentication + * instead of generating a random one. + * + * @note @ref sd_ble_opt_get is not supported for this option. + * + */ +typedef struct +{ + uint8_t * p_passkey; /**< Pointer to 6-digit ASCII string (digit 0..9 only, no NULL termination) passkey to be used during pairing. If this is NULL, the SoftDevice will generate a random passkey if required.*/ +} ble_gap_opt_passkey_t; + + +/**@brief Custom Privacy Options. + * + * @note The specified address cycle interval is used when the address cycle mode is + * @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO. If 0 is given, the address will not be refreshed at any + * interval, and not at start of advertising. A new address can be generated manually by calling + * @ref sd_ble_gap_address_set with the same type again. The default interval is + * @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S. + * + * @note If cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO, the address will immediately be + * refreshed when this option is set. + */ +typedef struct +{ + ble_gap_irk_t * p_irk; /**< When input: Pointer to custom IRK, or NULL to use/reset to the device's default IRK. When output: Pointer to where the current IRK is to be stored, or NULL to not read out the IRK. */ + uint16_t interval_s; /**< When input: Custom private address cycle interval in seconds. When output: The current private address cycle interval. */ +} ble_gap_opt_privacy_t; + + +/**@brief Option structure for GAP options. */ +typedef union +{ + ble_gap_opt_local_conn_latency_t local_conn_latency; /**< Local connection latency. */ + ble_gap_opt_passkey_t passkey; /**< Passkey to be used for pairing.*/ + ble_gap_opt_privacy_t privacy; /**< Custom privacy options. */ +} ble_gap_opt_t; +/**@} */ + + +/**@addtogroup BLE_GAP_FUNCTIONS Functions + * @{ */ + +/**@brief Set local Bluetooth address. + * + * If the address cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO, the address type is required to + * be @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE or + * @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE. The given address is ignored and the + * SoftDevice will generate a new private address automatically every time advertising is + * (re)started, and every @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S seconds. If this API + * call is used again with the same parameters while advertising, the SoftDevice will immediately + * generate a new private address to replace the current address. + * + * If the application wishes to use a @ref BLE_GAP_ADDR_TYPE_PUBLIC or + * @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC address, the cycle mode must be + * @ref BLE_GAP_ADDR_CYCLE_MODE_NONE. + * + * If this API function is called while advertising, the softdevice will immediately update the + * advertising address without the need to stop advertising in the following cases: + * - If the previously set address is of type @ref BLE_GAP_ADDR_TYPE_PUBLIC and the new address + * is also of type @ref BLE_GAP_ADDR_TYPE_PUBLIC + * - If the previously set address is not @ref BLE_GAP_ADDR_TYPE_PUBLIC and the new address is + * also not @ref BLE_GAP_ADDR_TYPE_PUBLIC. + * + * If the address is changed from a @ref BLE_GAP_ADDR_TYPE_PUBLIC address to another type or from + * another type to a @ref BLE_GAP_ADDR_TYPE_PUBLIC address, the change will take effect the next + * time advertising is started. + * + * @note If the address cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_NONE and the application is + * using privacy, the application must take care to generate and set new private addresses + * periodically to comply with the Privacy specification in Bluetooth Core Spec. + * + * @param[in] addr_cycle_mode Address cycle mode, see @ref BLE_GAP_ADDR_CYCLE_MODES. + * @param[in] p_addr Pointer to address structure. + * + * @return @ref NRF_SUCCESS Address successfully set. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameters. + * @return @ref BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address. + * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. + */ +SVCALL(SD_BLE_GAP_ADDRESS_SET, uint32_t, sd_ble_gap_address_set(uint8_t addr_cycle_mode, ble_gap_addr_t const * const p_addr)); + + +/**@brief Get local Bluetooth address. + * + * @param[out] p_addr Pointer to address structure. + * + * @return @ref NRF_SUCCESS Address successfully retrieved. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_GAP_ADDRESS_GET, uint32_t, sd_ble_gap_address_get(ble_gap_addr_t * const p_addr)); + + +/**@brief Set, clear or update advertisement and scan response data. + * + * @note The format of the advertisement data will be checked by this call to ensure interoperability. + * Limitations imposed by this API call to the data provided include having a flags data type in the scan response data and + * duplicating the local name in the advertisement data and scan response data. + * + * @note: To clear the advertisement data and set it to a 0-length packet, simply provide a valid pointer (p_data/p_sr_data) with its corresponding + * length (dlen/srdlen) set to 0. + * + * @note: The call will fail if p_data and p_sr_data are both NULL since this would have no effect. + * + * @param[in] p_data Raw data to be placed in advertisement packet. If NULL, no changes are made to the current advertisement packet data. + * @param[in] dlen Data length for p_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_data is NULL, can be 0 if p_data is not NULL. + * @param[in] p_sr_data Raw data to be placed in scan response packet. If NULL, no changes are made to the current scan response packet data. + * @param[in] srdlen Data length for p_sr_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_sr_data is NULL, can be 0 if p_data is not NULL. + * + * @return @ref NRF_SUCCESS Advertisement data successfully updated or cleared. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_FLAGS Invalid combination of advertising flags supplied. + * @return @ref NRF_ERROR_INVALID_DATA Invalid data type(s) supplied, check the advertising data format specification. + * @return @ref NRF_ERROR_INVALID_LENGTH Invalid data length(s) supplied. + * @return @ref BLE_ERROR_GAP_UUID_LIST_MISMATCH Invalid UUID list supplied. + * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. + */ +SVCALL(SD_BLE_GAP_ADV_DATA_SET, uint32_t, sd_ble_gap_adv_data_set(uint8_t const * const p_data, uint8_t dlen, uint8_t const * const p_sr_data, uint8_t srdlen)); + + +/**@brief Start advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). + * + * @param[in] p_adv_params Pointer to advertising parameters structure. + * + * @return @ref NRF_SUCCESS The BLE stack has started advertising. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check the accepted ranges and limits. + * @return @ref BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Bluetooth address supplied. + * @return @ref BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST Discoverable mode and whitelist incompatible. + */ +SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start(ble_gap_adv_params_t const * const p_adv_params)); + + +/**@brief Stop advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). + * + * @return @ref NRF_SUCCESS The BLE stack has stopped advertising. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation (most probably not in advertising state). + */ +SVCALL(SD_BLE_GAP_ADV_STOP, uint32_t, sd_ble_gap_adv_stop(void)); + + +/**@brief Update connection parameters. + * + * @details In the central role this will initiate a Link Layer connection parameter update procedure, + * otherwise in the peripheral role, this will send the corresponding L2CAP request and wait for + * the central to perform the procedure. In both cases, and regardless of success or failure, the application + * will be informed of the result with a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE event. + * + * @note If both a connection supervision timeout and a maximum connection interval are specified, then the following constraint + * applies: (conn_sup_timeout * 8) >= (max_conn_interval * (slave_latency + 1)) + * + * @param[in] conn_handle Connection handle. + * @param[in] p_conn_params Pointer to desired connection parameters. If NULL is provided on a peripheral role, + * the parameters in the PPCP characteristic of the GAP service will be used instead. + * + * @return @ref NRF_SUCCESS The Connection Update procedure has been started successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. + * @return @ref NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, process pending events and retry. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_GAP_CONN_PARAM_UPDATE, uint32_t, sd_ble_gap_conn_param_update(uint16_t conn_handle, ble_gap_conn_params_t const * const p_conn_params)); + + +/**@brief Disconnect (GAP Link Termination). + * + * @details This call initiates the disconnection procedure, and its completion will be communicated to the application + * with a BLE_GAP_EVT_DISCONNECTED event. + * + * @param[in] conn_handle Connection handle. + * @param[in] hci_status_code HCI status code, see @ref BLE_HCI_STATUS_CODES (accepted values are BTLE_REMOTE_USER_TERMINATED_CONNECTION and BTLE_CONN_INTERVAL_UNACCEPTABLE). + * + * @return @ref NRF_SUCCESS The disconnection procedure has been started successfully. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation (disconnection is already in progress or not connected at all). + */ +SVCALL(SD_BLE_GAP_DISCONNECT, uint32_t, sd_ble_gap_disconnect(uint16_t conn_handle, uint8_t hci_status_code)); + + +/**@brief Set the radio's transmit power. + * + * @param[in] tx_power Radio transmit power in dBm (accepted values are -40, -30, -20, -16, -12, -8, -4, 0, and 4 dBm). + * + * @note -40 dBm will not actually give -40 dBm, but will instead be remapped to -30 dBm. + * + * @return @ref NRF_SUCCESS Successfully changed the transmit power. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. + */ +SVCALL(SD_BLE_GAP_TX_POWER_SET, uint32_t, sd_ble_gap_tx_power_set(int8_t tx_power)); + + +/**@brief Set GAP Appearance value. + * + * @param[in] appearance Appearance (16-bit), see @ref BLE_APPEARANCES. + * + * @return @ref NRF_SUCCESS Appearance value set successfully. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + */ +SVCALL(SD_BLE_GAP_APPEARANCE_SET, uint32_t, sd_ble_gap_appearance_set(uint16_t appearance)); + + +/**@brief Get GAP Appearance value. + * + * @param[out] p_appearance Appearance (16-bit), see @ref BLE_APPEARANCES. + * + * @return @ref NRF_SUCCESS Appearance value retrieved successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_GAP_APPEARANCE_GET, uint32_t, sd_ble_gap_appearance_get(uint16_t * const p_appearance)); + + +/**@brief Set GAP Peripheral Preferred Connection Parameters. + * + * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure with the desired parameters. + * + * @return @ref NRF_SUCCESS Peripheral Preferred Connection Parameters set successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + */ +SVCALL(SD_BLE_GAP_PPCP_SET, uint32_t, sd_ble_gap_ppcp_set(ble_gap_conn_params_t const * const p_conn_params)); + + +/**@brief Get GAP Peripheral Preferred Connection Parameters. + * + * @param[out] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the parameters will be stored. + * + * @return @ref NRF_SUCCESS Peripheral Preferred Connection Parameters retrieved successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_GAP_PPCP_GET, uint32_t, sd_ble_gap_ppcp_get(ble_gap_conn_params_t * const p_conn_params)); + + +/**@brief Set GAP device name. + * + * @param[in] p_write_perm Write permissions for the Device Name characteristic see @ref ble_gap_conn_sec_mode_t. + * @param[in] p_dev_name Pointer to a UTF-8 encoded, <b>non NULL-terminated</b> string. + * @param[in] len Length of the UTF-8, <b>non NULL-terminated</b> string pointed to by p_dev_name in octets (must be smaller or equal than @ref BLE_GAP_DEVNAME_MAX_LEN). + * + * @return @ref NRF_SUCCESS GAP device name and permissions set successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + */ +SVCALL(SD_BLE_GAP_DEVICE_NAME_SET, uint32_t, sd_ble_gap_device_name_set(ble_gap_conn_sec_mode_t const * const p_write_perm, uint8_t const * const p_dev_name, uint16_t len)); + + +/**@brief Get GAP device name. + * + * @param[in] p_dev_name Pointer to an empty buffer where the UTF-8 <b>non NULL-terminated</b> string will be placed. Set to NULL to obtain the complete device name length. + * @param[in,out] p_len Length of the buffer pointed by p_dev_name, complete device name length on output. + * + * @note If the device name is longer than the size of the supplied buffer, + * p_len will return the complete device name length, + * and not the number of bytes actually returned in p_dev_name. + * The application may use this information to allocate a suitable buffer size. + * + * @return @ref NRF_SUCCESS GAP device name retrieved successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + */ +SVCALL(SD_BLE_GAP_DEVICE_NAME_GET, uint32_t, sd_ble_gap_device_name_get(uint8_t * const p_dev_name, uint16_t * const p_len)); + + +/**@brief Initiate GAP Authentication procedure. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_sec_params Pointer to the @ref ble_gap_sec_params_t structure with the security parameters to be used during the pairing procedure. + * + * @details In the central role, this function will send an SMP Pairing Request, otherwise in the peripheral role, an SMP Security Request will be sent. + * In the peripheral role, only the timeout, bond and mitm fields of @ref ble_gap_sec_params_t are used. + * + * @note The GAP Authentication procedure may be triggered by the central without calling this function when accessing a secure service. + * @note Calling this function may result in the following events depending on the outcome and parameters: @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, + * @ref BLE_GAP_EVT_SEC_INFO_REQUEST, @ref BLE_GAP_EVT_AUTH_KEY_REQUEST, @ref BLE_GAP_EVT_AUTH_STATUS. + * @note The timeout parameter in @ref ble_gap_sec_params_t is interpreted here as the Security Request timeout + * + * + * @return @ref NRF_SUCCESS Successfully initiated authentication procedure. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_AUTHENTICATE, uint32_t, sd_ble_gap_authenticate(uint16_t conn_handle, ble_gap_sec_params_t const * const p_sec_params)); + + +/**@brief Reply with GAP security parameters. + * + * @param[in] conn_handle Connection handle. + * @param[in] sec_status Security status, see @ref BLE_GAP_SEC_STATUS. + * @param[in] p_sec_params Pointer to a @ref ble_gap_sec_params_t security parameters structure. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, calling it at other times will result in an NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * @note The timeout parameter in @ref ble_gap_sec_params_t is interpreted here as the SMP procedure timeout, and must be 30 seconds. The function will fail + * if the application supplies a different value. + * + * @return @ref NRF_SUCCESS Successfully accepted security parameter from the application. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_SEC_PARAMS_REPLY, uint32_t, sd_ble_gap_sec_params_reply(uint16_t conn_handle, uint8_t sec_status, ble_gap_sec_params_t const * const p_sec_params)); + + +/**@brief Reply with an authentication key. + * + * @param[in] conn_handle Connection handle. + * @param[in] key_type See @ref BLE_GAP_AUTH_KEY_TYPES. + * @param[in] key If key type is BLE_GAP_AUTH_KEY_TYPE_NONE, then NULL. + * If key type is BLE_GAP_AUTH_KEY_TYPE_PASSKEY, then a 6-byte ASCII string (digit 0..9 only, no NULL termination). + * If key type is BLE_GAP_AUTH_KEY_TYPE_OOB, then a 16-byte OOB key value in Little Endian format. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_AUTH_KEY_REQUEST, calling it at other times will result in an NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * + * @return @ref NRF_SUCCESS Authentication key successfully set. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_AUTH_KEY_REPLY, uint32_t, sd_ble_gap_auth_key_reply(uint16_t conn_handle, uint8_t key_type, uint8_t const * const key)); + + +/**@brief Reply with GAP security information. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. May be NULL to signal none is available. + * @param[in] p_sign_info Pointer to a @ref ble_gap_sign_info_t signing information structure. May be NULL to signal none is available. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_INFO_REQUEST, calling it at other times will result in NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * @note Data signing is not implemented yet. p_sign_info must therefore be NULL. + * + * @return @ref NRF_SUCCESS Successfully accepted security information. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. + */ +SVCALL(SD_BLE_GAP_SEC_INFO_REPLY, uint32_t, sd_ble_gap_sec_info_reply(uint16_t conn_handle, ble_gap_enc_info_t const * const p_enc_info, ble_gap_sign_info_t const * const p_sign_info)); + + +/**@brief Get the current connection security. + * + * @param[in] conn_handle Connection handle. + * @param[out] p_conn_sec Pointer to a @ref ble_gap_conn_sec_t structure to be filled in. + * + * @return @ref NRF_SUCCESS Current connection security successfully retrieved. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_CONN_SEC_GET, uint32_t, sd_ble_gap_conn_sec_get(uint16_t conn_handle, ble_gap_conn_sec_t * const p_conn_sec)); + + +/**@brief Start reporting the received signal strength to the application. + * + * A new event is reported whenever the RSSI value changes, until @ref sd_ble_gap_rssi_stop is called. + * + * @param[in] conn_handle Connection handle. + * + * @return @ref NRF_SUCCESS Successfully activated RSSI reporting. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_RSSI_START, uint32_t, sd_ble_gap_rssi_start(uint16_t conn_handle)); + + +/**@brief Stop reporting the received singnal strength. + * + * An RSSI change detected before the call but not yet received by the application + * may be reported after @ref sd_ble_gap_rssi_stop has been called. + * + * @param[in] conn_handle Connection handle. + * + * @return @ref NRF_SUCCESS Successfully deactivated RSSI reporting. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_RSSI_STOP, uint32_t, sd_ble_gap_rssi_stop(uint16_t conn_handle)); +/**@} */ + +#endif // BLE_GAP_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_HRM1017/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gatt.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,171 @@ +/* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + /** + @addtogroup BLE_GATT Generic Attribute Profile (GATT) Common + @{ + @brief Common definitions and prototypes for the GATT interfaces. + */ + +#ifndef BLE_GATT_H__ +#define BLE_GATT_H__ + +#include "ble_types.h" +#include "ble_ranges.h" + + +/** @addtogroup BLE_GATT_DEFINES Defines + * @{ */ + +/** @brief Default MTU size. */ +#define GATT_MTU_SIZE_DEFAULT 23 + +/** @brief Only the default MTU size of 23 is currently supported. */ +#define GATT_RX_MTU 23 + + +/**@brief Invalid Attribute Handle. */ +#define BLE_GATT_HANDLE_INVALID 0x0000 + +/** @defgroup BLE_GATT_TIMEOUT_SOURCES GATT Timeout sources + * @{ */ +#define BLE_GATT_TIMEOUT_SRC_PROTOCOL 0x00 /**< ATT Protocol timeout. */ +/** @} */ + +/** @defgroup BLE_GATT_WRITE_OPS GATT Write operations + * @{ */ +#define BLE_GATT_OP_INVALID 0x00 /**< Invalid Operation. */ +#define BLE_GATT_OP_WRITE_REQ 0x01 /**< Write Request. */ +#define BLE_GATT_OP_WRITE_CMD 0x02 /**< Write Command. */ +#define BLE_GATT_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ +#define BLE_GATT_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ +#define BLE_GATT_OP_EXEC_WRITE_REQ 0x05 /**< Execute Write Request. */ +/** @} */ + +/** @defgroup BLE_GATT_EXEC_WRITE_FLAGS GATT Execute Write flags + * @{ */ +#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_CANCEL 0x00 +#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE 0x01 +/** @} */ + +/** @defgroup BLE_GATT_HVX_TYPES GATT Handle Value operations + * @{ */ +#define BLE_GATT_HVX_INVALID 0x00 /**< Invalid Operation. */ +#define BLE_GATT_HVX_NOTIFICATION 0x01 /**< Handle Value Notification. */ +#define BLE_GATT_HVX_INDICATION 0x02 /**< Handle Value Indication. */ +/** @} */ + +/** @defgroup BLE_GATT_STATUS_CODES GATT Status Codes + * @{ */ +#define BLE_GATT_STATUS_SUCCESS 0x0000 /**< Success. */ +#define BLE_GATT_STATUS_UNKNOWN 0x0001 /**< Unknown or not applicable status. */ +#define BLE_GATT_STATUS_ATTERR_INVALID 0x0100 /**< ATT Error: Invalid Error Code. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_HANDLE 0x0101 /**< ATT Error: Invalid Attribute Handle. */ +#define BLE_GATT_STATUS_ATTERR_READ_NOT_PERMITTED 0x0102 /**< ATT Error: Read not permitted. */ +#define BLE_GATT_STATUS_ATTERR_WRITE_NOT_PERMITTED 0x0103 /**< ATT Error: Write not permitted. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_PDU 0x0104 /**< ATT Error: Used in ATT as Invalid PDU. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHENTICATION 0x0105 /**< ATT Error: Authenticated link required. */ +#define BLE_GATT_STATUS_ATTERR_REQUEST_NOT_SUPPORTED 0x0106 /**< ATT Error: Used in ATT as Request Not Supported. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_OFFSET 0x0107 /**< ATT Error: Offset specified was past the end of the attribute. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHORIZATION 0x0108 /**< ATT Error: Used in ATT as Insufficient Authorisation. */ +#define BLE_GATT_STATUS_ATTERR_PREPARE_QUEUE_FULL 0x0109 /**< ATT Error: Used in ATT as Prepare Queue Full. */ +#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND 0x010A /**< ATT Error: Used in ATT as Attribute not found. */ +#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_LONG 0x010B /**< ATT Error: Attribute cannot be read or written using read/write blob requests. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_ENC_KEY_SIZE 0x010C /**< ATT Error: Encryption key size used is insufficient. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_ATT_VAL_LENGTH 0x010D /**< ATT Error: Invalid value size. */ +#define BLE_GATT_STATUS_ATTERR_UNLIKELY_ERROR 0x010E /**< ATT Error: Very unlikely error. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_ENCRYPTION 0x010F /**< ATT Error: Encrypted link required. */ +#define BLE_GATT_STATUS_ATTERR_UNSUPPORTED_GROUP_TYPE 0x0110 /**< ATT Error: Attribute type is not a supported grouping attribute. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_RESOURCES 0x0111 /**< ATT Error: Encrypted link required. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_BEGIN 0x0112 /**< ATT Error: Reserved for Future Use range #1 begin. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_END 0x017F /**< ATT Error: Reserved for Future Use range #1 end. */ +#define BLE_GATT_STATUS_ATTERR_APP_BEGIN 0x0180 /**< ATT Error: Application range begin. */ +#define BLE_GATT_STATUS_ATTERR_APP_END 0x019F /**< ATT Error: Application range end. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_BEGIN 0x01A0 /**< ATT Error: Reserved for Future Use range #2 begin. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_END 0x01DF /**< ATT Error: Reserved for Future Use range #2 end. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_BEGIN 0x01E0 /**< ATT Error: Reserved for Future Use range #3 begin. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_END 0x01FC /**< ATT Error: Reserved for Future Use range #3 end. */ +#define BLE_GATT_STATUS_ATTERR_CPS_CCCD_CONFIG_ERROR 0x01FD /**< ATT Common Profile and Service Error: Client Characteristic Configuration Descriptor improperly configured. */ +#define BLE_GATT_STATUS_ATTERR_CPS_PROC_ALR_IN_PROG 0x01FE /**< ATT Common Profile and Service Error: Procedure Already in Progress. */ +#define BLE_GATT_STATUS_ATTERR_CPS_OUT_OF_RANGE 0x01FF /**< ATT Common Profile and Service Error: Out Of Range. */ +/** @} */ + + +/** @defgroup BLE_GATT_CPF_FORMATS Characteristic Presentation Formats + * @note Found at http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml + * @{ */ +#define BLE_GATT_CPF_FORMAT_RFU 0x00 /**< Reserved For Future Use. */ +#define BLE_GATT_CPF_FORMAT_BOOLEAN 0x01 /**< Boolean. */ +#define BLE_GATT_CPF_FORMAT_2BIT 0x02 /**< Unsigned 2-bit integer. */ +#define BLE_GATT_CPF_FORMAT_NIBBLE 0x03 /**< Unsigned 4-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT8 0x04 /**< Unsigned 8-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT12 0x05 /**< Unsigned 12-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT16 0x06 /**< Unsigned 16-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT24 0x07 /**< Unsigned 24-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT32 0x08 /**< Unsigned 32-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT48 0x09 /**< Unsigned 48-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT64 0x0A /**< Unsigned 64-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT128 0x0B /**< Unsigned 128-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT8 0x0C /**< Signed 2-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT12 0x0D /**< Signed 12-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT16 0x0E /**< Signed 16-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT24 0x0F /**< Signed 24-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT32 0x10 /**< Signed 32-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT48 0x11 /**< Signed 48-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT64 0x12 /**< Signed 64-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT128 0x13 /**< Signed 128-bit integer. */ +#define BLE_GATT_CPF_FORMAT_FLOAT32 0x14 /**< IEEE-754 32-bit floating point. */ +#define BLE_GATT_CPF_FORMAT_FLOAT64 0x15 /**< IEEE-754 64-bit floating point. */ +#define BLE_GATT_CPF_FORMAT_SFLOAT 0x16 /**< IEEE-11073 16-bit SFLOAT. */ +#define BLE_GATT_CPF_FORMAT_FLOAT 0x17 /**< IEEE-11073 32-bit FLOAT. */ +#define BLE_GATT_CPF_FORMAT_DUINT16 0x18 /**< IEEE-20601 format. */ +#define BLE_GATT_CPF_FORMAT_UTF8S 0x19 /**< UTF-8 string. */ +#define BLE_GATT_CPF_FORMAT_UTF16S 0x1A /**< UTF-16 string. */ +#define BLE_GATT_CPF_FORMAT_STRUCT 0x1B /**< Opaque Structure. */ +/** @} */ + +/** @defgroup BLE_GATT_CPF_NAMESPACES GATT Bluetooth Namespaces + * @{ + */ +#define BLE_GATT_CPF_NAMESPACE_BTSIG 0x01 +#define BLE_GATT_CPF_NAMESPACE_DESCRIPTION_UNKNOWN 0x0000 +/** @} */ + +/** @} */ + +/** @addtogroup BLE_GATT_STRUCTURES Structures + * @{ */ + +/**@brief GATT Characteristic Properties. */ +typedef struct +{ + /* Standard properties */ + uint8_t broadcast :1; /**< Broadcasting of value permitted. */ + uint8_t read :1; /**< Reading value permitted. */ + uint8_t write_wo_resp :1; /**< Writing value with Write Command permitted. */ + uint8_t write :1; /**< Writing value with Write Request permitted. */ + uint8_t notify :1; /**< Notications of value permitted. */ + uint8_t indicate :1; /**< Indications of value permitted. */ + uint8_t auth_signed_wr :1; /**< Writing value with Signed Write Command permitted. */ +} ble_gatt_char_props_t; + +/**@brief GATT Characteristic Extended Properties. */ +typedef struct +{ + /* Extended properties */ + uint8_t reliable_wr :1; /**< Writing value with Queued Write Request permitted. */ + uint8_t wr_aux :1; /**< Writing the Characteristic User Description permitted. */ +} ble_gatt_char_ext_props_t; + +#endif // BLE_GATT_H__ + +/** @} */ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_HRM1017/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gattc.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,406 @@ +/* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_GATTC Generic Attribute Profile (GATT) Client + @{ + @brief Definitions and prototypes for the GATT Client interface. + */ + +#ifndef BLE_GATTC_H__ +#define BLE_GATTC_H__ + +#include "ble_gatt.h" +#include "ble_types.h" +#include "ble_ranges.h" +#include "nrf_svc.h" + +/** @addtogroup BLE_GATTC_ENUMERATIONS Enumerations + * @{ */ + +/**@brief GATTC API SVC numbers. */ +enum BLE_GATTC_SVCS +{ + SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER = BLE_GATTC_SVC_BASE, /**< Primary Service Discovery. */ + SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, /**< Relationship Discovery. */ + SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, /**< Characteristic Discovery. */ + SD_BLE_GATTC_DESCRIPTORS_DISCOVER, /**< Characteristic Descriptor Discovery. */ + SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, /**< Read Characteristic Value by UUID. */ + SD_BLE_GATTC_READ, /**< Generic read. */ + SD_BLE_GATTC_CHAR_VALUES_READ, /**< Read multiple Characteristic Values. */ + SD_BLE_GATTC_WRITE, /**< Generic write. */ + SD_BLE_GATTC_HV_CONFIRM /**< Handle Value Confirmation. */ +}; + +/** @} */ + +/** @addtogroup BLE_GATTC_DEFINES Defines + * @{ */ + +/** @defgroup BLE_ERRORS_GATTC SVC return values specific to GATTC + * @{ */ +#define BLE_ERROR_GATTC_PROC_NOT_PERMITTED (NRF_GATTC_ERR_BASE + 0x000) +/** @} */ + +/**@brief Last Attribute Handle. */ +#define BLE_GATTC_HANDLE_END 0xFFFF + +/** @} */ + +/** @addtogroup BLE_GATTC_STRUCTURES Structures + * @{ */ + +/**@brief Operation Handle Range. */ +typedef struct +{ + uint16_t start_handle; /**< Start Handle. */ + uint16_t end_handle; /**< End Handle. */ +} ble_gattc_handle_range_t; + + +/**@brief GATT service. */ +typedef struct +{ + ble_uuid_t uuid; /**< Service UUID. */ + ble_gattc_handle_range_t handle_range; /**< Service Handle Range. */ +} ble_gattc_service_t; + + +/**@brief GATT include. */ +typedef struct +{ + uint16_t handle; /**< Include Handle. */ + ble_gattc_service_t included_srvc; /**< Handle of the included service. */ +} ble_gattc_include_t; + + +/**@brief GATT characteristic. */ +typedef struct +{ + ble_uuid_t uuid; /**< Characteristic UUID. */ + ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ + uint8_t char_ext_props : 1; /**< Extended properties present. */ + uint16_t handle_decl; /**< Handle of the Characteristic Declaration. */ + uint16_t handle_value; /**< Handle of the Characteristic Value. */ +} ble_gattc_char_t; + + +/**@brief GATT descriptor. */ +typedef struct +{ + uint16_t handle; /**< Descriptor Handle. */ + ble_uuid_t uuid; /**< Descriptor UUID. */ +} ble_gattc_desc_t; + + +/**@brief Write Parameters. */ +typedef struct +{ + uint8_t write_op; /**< Write Operation to be performed, see @ref BLE_GATT_WRITE_OPS. */ + uint16_t handle; /**< Handle to the attribute to be written. */ + uint16_t offset; /**< Offset in bytes. @note For WRITE_CMD and WRITE_REQ, offset must be 0. */ + uint16_t len; /**< Length of data in bytes. */ + uint8_t* p_value; /**< Pointer to the value data. */ + uint8_t flags; /**< Flags, see @ref BLE_GATT_EXEC_WRITE_FLAGS. */ +} ble_gattc_write_params_t; + + +/** + * @brief GATT Client Event IDs. + */ +enum BLE_GATTC_EVTS +{ + BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP = BLE_GATTC_EVT_BASE, /**< Primary Service Discovery Response event. */ + BLE_GATTC_EVT_REL_DISC_RSP, /**< Relationship Discovery Response event. */ + BLE_GATTC_EVT_CHAR_DISC_RSP, /**< Characteristic Discovery Response event. */ + BLE_GATTC_EVT_DESC_DISC_RSP, /**< Descriptor Discovery Response event. */ + BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP, /**< Read By UUID Response event. */ + BLE_GATTC_EVT_READ_RSP, /**< Read Response event. */ + BLE_GATTC_EVT_CHAR_VALS_READ_RSP, /**< Read multiple Response event. */ + BLE_GATTC_EVT_WRITE_RSP, /**< Write Response event. */ + BLE_GATTC_EVT_HVX, /**< Handle Value Notification or Indication event. */ + BLE_GATTC_EVT_TIMEOUT /**< Timeout event. */ +}; + +/**@brief Event structure for BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Service count. */ + ble_gattc_service_t services[1]; /**< Service data, variable length. */ +} ble_gattc_evt_prim_srvc_disc_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_REL_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Include count. */ + ble_gattc_include_t includes[1]; /**< Include data, variable length. */ +} ble_gattc_evt_rel_disc_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_CHAR_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Characteristic count. */ + ble_gattc_char_t chars[1]; /**< Characteristic data, variable length. */ +} ble_gattc_evt_char_disc_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_DESC_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Descriptor count. */ + ble_gattc_desc_t descs[1]; /**< Descriptor data, variable length. */ +} ble_gattc_evt_desc_disc_rsp_t; + +/**@brief GATT read by UUID handle value pair. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint8_t *p_value; /**< Pointer to value, variable length (length available as value_len in ble_gattc_evt_read_by_uuid_rsp_t). + Please note that this pointer is absolute to the memory provided by the user when retrieving the event, + so it will effectively point to a location inside the handle_value array. */ +} ble_gattc_handle_value_t; + +/**@brief Event structure for BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP. */ +typedef struct +{ + uint16_t count; /**< Handle-Value Pair Count. */ + uint16_t value_len; /**< Length of the value in Handle-Value(s) list. */ + ble_gattc_handle_value_t handle_value[1]; /**< Handle-Value(s) list, variable length. */ +} ble_gattc_evt_char_val_by_uuid_read_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_READ_RSP. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint16_t offset; /**< Offset of the attribute data. */ + uint16_t len; /**< Attribute data length. */ + uint8_t data[1]; /**< Attribute data, variable length. */ +} ble_gattc_evt_read_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_CHAR_VALS_READ_RSP. */ +typedef struct +{ + uint16_t len; /**< Concatenated Attribute values length. */ + uint8_t values[1]; /**< Attribute values, variable length. */ +} ble_gattc_evt_char_vals_read_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_WRITE_RSP. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint8_t write_op; /**< Type of write operation, see @ref BLE_GATT_WRITE_OPS. */ + uint16_t offset; /**< Data Offset. */ + uint16_t len; /**< Data length. */ + uint8_t data[1]; /**< Data, variable length. */ +} ble_gattc_evt_write_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_HVX. */ +typedef struct +{ + uint16_t handle; /**< Handle to which the HVx operation applies. */ + uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ + uint16_t len; /**< Attribute data length. */ + uint8_t data[1]; /**< Attribute data, variable length. */ +} ble_gattc_evt_hvx_t; + +/**@brief Event structure for BLE_GATTC_EVT_TIMEOUT. */ +typedef struct +{ + uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ +} ble_gattc_evt_timeout_t; + +/**@brief GATTC event type. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occured. */ + uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ + uint16_t error_handle; /**< In case of error: The handle causing the error. In all other cases BLE_GATT_HANDLE_INVALID. */ + union + { + ble_gattc_evt_prim_srvc_disc_rsp_t prim_srvc_disc_rsp; /**< Primary Service Discovery Response Event Parameters. */ + ble_gattc_evt_rel_disc_rsp_t rel_disc_rsp; /**< Relationship Discovery Response Event Parameters. */ + ble_gattc_evt_char_disc_rsp_t char_disc_rsp; /**< Characteristic Discovery Response Event Parameters. */ + ble_gattc_evt_desc_disc_rsp_t desc_disc_rsp; /**< Descriptor Discovery Response Event Parameters. */ + ble_gattc_evt_char_val_by_uuid_read_rsp_t char_val_by_uuid_read_rsp; /**< Characteristic Value Read by UUID Response Event Parameters. */ + ble_gattc_evt_read_rsp_t read_rsp; /**< Read Response Event Parameters. */ + ble_gattc_evt_char_vals_read_rsp_t char_vals_read_rsp; /**< Characteristic Values Read Response Event Parameters. */ + ble_gattc_evt_write_rsp_t write_rsp; /**< Write Response Event Parameters. */ + ble_gattc_evt_hvx_t hvx; /**< Handle Value Notification/Indication Event Parameters. */ + ble_gattc_evt_timeout_t timeout; /**< Timeout Event Parameters. */ + } params; /**< Event Parameters. @note Only valid if @ref gatt_status == BLE_GATT_STATUS_SUCCESS. */ +} ble_gattc_evt_t; +/** @} */ + +/** @addtogroup BLE_GATTC_FUNCTIONS Functions + * @{ */ + +/**@brief Initiate or continue a GATT Primary Service Discovery procedure. + * + * @details This function initiates a Primary Service discovery, starting from the supplied handle. + * If the last service has not been reached, this must be called again with an updated start handle value to continue the search. + * + * @note If any of the discovered services have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with + * type BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] start_handle Handle to start searching from. + * @param[in] p_srvc_uuid Pointer to the service UUID to be found. If it is NULL, all primary services will be returned. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Primary Service Discovery procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER, uint32_t, sd_ble_gattc_primary_services_discover(uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const * const p_srvc_uuid)); + + +/**@brief Initiate or continue a GATT Relationship Discovery procedure. + * + * @details This function initiates the Find Included Services sub-procedure. If the last included service has not been reached, + * this must be called again with an updated handle range to continue the search. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Relationship Discovery procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, uint32_t, sd_ble_gattc_relationships_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); + + +/**@brief Initiate or continue a GATT Characteristic Discovery procedure. + * + * @details This function initiates a Characteristic discovery procedure. If the last Characteristic has not been reached, + * this must be called again with an updated handle range to continue the discovery. + * + * @note If any of the discovered characteristics have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with + * type BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Characteristic Discovery procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, uint32_t, sd_ble_gattc_characteristics_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); + + +/**@brief Initiate or continue a GATT Characteristic Descriptor Discovery procedure. + * + * @details This function initiates the Characteristic Descriptor discovery procedure. If the last Descriptor has not been reached, + * this must be called again with an updated handle range to continue the discovery. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range A pointer to the range of handles of the Characteristic to perform this procedure on. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Descriptor Discovery procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_DESCRIPTORS_DISCOVER, uint32_t, sd_ble_gattc_descriptors_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); + + +/**@brief Initiate or continue a GATT Read using Characteristic UUID procedure. + * + * @details This function initiates the Read using Characteristic UUID procedure. If the last Characteristic has not been reached, + * this must be called again with an updated handle range to continue the discovery. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_uuid Pointer to a Characteristic value UUID to read. + * @param[in] p_handle_range A pointer to the range of handles to perform this procedure on. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Read using Characteristic UUID procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, uint32_t, sd_ble_gattc_char_value_by_uuid_read(uint16_t conn_handle, ble_uuid_t const * const p_uuid, ble_gattc_handle_range_t const * const p_handle_range)); + + +/**@brief Initiate or continue a GATT Read (Long) Characteristic or Descriptor procedure. + * + * @details This function initiates a GATT Read (Long) Characteristic or Descriptor procedure. If the Characteristic or Descriptor + * to be read is longer than GATT_MTU - 1, this function must be called multiple times with appropriate offset to read the + * complete value. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] handle The handle of the attribute to be read. + * @param[in] offset Offset into the attribute value to be read. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Read (Long) procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_READ, uint32_t, sd_ble_gattc_read(uint16_t conn_handle, uint16_t handle, uint16_t offset)); + + +/**@brief Initiate a GATT Read Multiple Characteristic Values procedure. + * + * @details This function initiates a GATT Read Multiple Characteristic Values procedure. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. + * @param[in] handle_count The number of handles in p_handles. + * + * @return @ref NRF_SUCCESS Successfully started the Read Multiple Characteristic Values procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_CHAR_VALUES_READ, uint32_t, sd_ble_gattc_char_values_read(uint16_t conn_handle, uint16_t const * const p_handles, uint16_t handle_count)); + + +/**@brief Perform a Write (Characteristic Value or Descriptor, with or without response, signed or not, long or reliable) procedure. + * + * @details This function can perform all write procedures described in GATT. + * + * @note It is important to note that a write without response will <b>consume an application buffer</b>, and will therefore + * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. A write on the other hand will use the + * standard client internal buffer and thus will only generate a @ref BLE_GATTC_EVT_WRITE_RSP event as soon as the write response + * has been received from the peer. Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_write_params A pointer to a write parameters structure. + * + * @return @ref NRF_SUCCESS Successfully started the Write procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + * @return @ref NRF_ERROR_BUSY Procedure already in progress. + * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers left. + */ +SVCALL(SD_BLE_GATTC_WRITE, uint32_t, sd_ble_gattc_write(uint16_t conn_handle, ble_gattc_write_params_t const * const p_write_params)); + + +/**@brief Send a Handle Value Confirmation to the GATT Server. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] handle The handle of the attribute in the indication. + * + * @return @ref NRF_SUCCESS Successfully queued the Handle Value Confirmation for transmission. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_STATE No Indication pending to be confirmed. + * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle. + * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers left. + */ +SVCALL(SD_BLE_GATTC_HV_CONFIRM, uint32_t, sd_ble_gattc_hv_confirm(uint16_t conn_handle, uint16_t handle)); + +/** @} */ + +#endif /* BLE_GATTC_H__ */ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_HRM1017/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gatts.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,566 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_GATTS Generic Attribute Profile (GATT) Server + @{ + @brief Definitions and prototypes for the GATTS interface. + */ + +#ifndef BLE_GATTS_H__ +#define BLE_GATTS_H__ + +#include "ble_types.h" +#include "ble_ranges.h" +#include "ble_l2cap.h" +#include "ble_gap.h" +#include "ble_gatt.h" +#include "nrf_svc.h" + +/** @addtogroup BLE_GATTS_ENUMERATIONS Enumerations + * @{ */ + +/** + * @brief GATTS API SVC numbers. + */ +enum BLE_GATTS_SVCS +{ + SD_BLE_GATTS_SERVICE_ADD = BLE_GATTS_SVC_BASE, /**< Add a service. */ + SD_BLE_GATTS_INCLUDE_ADD, /**< Add an included service. */ + SD_BLE_GATTS_CHARACTERISTIC_ADD, /**< Add a characteristic. */ + SD_BLE_GATTS_DESCRIPTOR_ADD, /**< Add a generic attribute. */ + SD_BLE_GATTS_VALUE_SET, /**< Set an attribute value. */ + SD_BLE_GATTS_VALUE_GET, /**< Get an attribute value. */ + SD_BLE_GATTS_HVX, /**< Handle Value Notification or Indication. */ + SD_BLE_GATTS_SERVICE_CHANGED, /**< Perform a Service Changed Indication to one or more peers. */ + SD_BLE_GATTS_RW_AUTHORIZE_REPLY, /**< Reply to an authorization request for a read or write operation on one or more attributes. */ + SD_BLE_GATTS_SYS_ATTR_SET, /**< Set the persistent system attributes for a connection. */ + SD_BLE_GATTS_SYS_ATTR_GET, /**< Get updated persistent system attributes after terminating a connection. */ +}; + +/** @} */ + +/** @addtogroup BLE_GATTS_DEFINES Defines + * @{ */ + +/** @brief Only the default MTU size of 23 is currently supported. */ +#define GATT_RX_MTU 23 + +/** @defgroup BLE_ERRORS_GATTS SVC return values specific to GATTS + * @{ */ +#define BLE_ERROR_GATTS_INVALID_ATTR_TYPE (NRF_GATTS_ERR_BASE + 0x000) /**< Invalid attribute type. */ +#define BLE_ERROR_GATTS_SYS_ATTR_MISSING (NRF_GATTS_ERR_BASE + 0x001) /**< System Attributes missing. */ +/** @} */ + +/** @defgroup BLE_GATTS_ATTR_LENS_MAX Maximum attribute lengths + * @{ */ +#define BLE_GATTS_FIX_ATTR_LEN_MAX (510) /**< Maximum length for fixed length Attribute Values. */ +#define BLE_GATTS_VAR_ATTR_LEN_MAX (512) /**< Maximum length for variable length Attribute Values. */ +/** @} */ + +/** @defgroup BLE_GATTS_SRVC_TYPES GATT Server Service Types + * @{ */ +#define BLE_GATTS_SRVC_TYPE_INVALID 0x00 /**< Invalid Service Type. */ +#define BLE_GATTS_SRVC_TYPE_PRIMARY 0x01 /**< Primary Service. */ +#define BLE_GATTS_SRVC_TYPE_SECONDARY 0x02 /**< Secondary Type. */ +/** @} */ + + +/** @defgroup BLE_GATTS_ATTR_TYPES GATT Server Attribute Types + * @{ */ +#define BLE_GATTS_ATTR_TYPE_INVALID 0x00 /**< Invalid Attribute Type. */ +#define BLE_GATTS_ATTR_TYPE_PRIM_SRVC_DECL 0x01 /**< Primary Service Declaration. */ +#define BLE_GATTS_ATTR_TYPE_SEC_SRVC_DECL 0x02 /**< Secondary Service Declaration. */ +#define BLE_GATTS_ATTR_TYPE_INC_DECL 0x03 /**< Include Declaration. */ +#define BLE_GATTS_ATTR_TYPE_CHAR_DECL 0x04 /**< Characteristic Declaration. */ +#define BLE_GATTS_ATTR_TYPE_CHAR_VAL 0x05 /**< Characteristic Value. */ +#define BLE_GATTS_ATTR_TYPE_DESC 0x06 /**< Descriptor. */ +#define BLE_GATTS_ATTR_TYPE_OTHER 0x07 /**< Other, non-GATT specific type. */ +/** @} */ + + +/** @defgroup BLE_GATTS_OPS GATT Server Operations + * @{ */ +#define BLE_GATTS_OP_INVALID 0x00 /**< Invalid Operation. */ +#define BLE_GATTS_OP_WRITE_REQ 0x01 /**< Write Request. */ +#define BLE_GATTS_OP_WRITE_CMD 0x02 /**< Write Command. */ +#define BLE_GATTS_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ +#define BLE_GATTS_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ +#define BLE_GATTS_OP_EXEC_WRITE_REQ_CANCEL 0x05 /**< Execute Write Request: Cancel all prepared writes. */ +#define BLE_GATTS_OP_EXEC_WRITE_REQ_NOW 0x06 /**< Execute Write Request: Immediately execute all prepared writes. */ +/** @} */ + +/** @defgroup BLE_GATTS_VLOCS GATT Value Locations + * @{ */ +#define BLE_GATTS_VLOC_INVALID 0x00 /**< Invalid Location. */ +#define BLE_GATTS_VLOC_STACK 0x01 /**< Attribute Value is located in stack memory, no user memory is required. */ +#define BLE_GATTS_VLOC_USER 0x02 /**< Attribute Value is located in user memory. This requires the user to maintain a valid buffer through the lifetime of the attribute, since the stack + will read and write directly to the memory using the pointer provided in the APIs. There are no alignment requirements for the buffer. */ +/** @} */ + +/** @defgroup BLE_GATTS_AUTHORIZE_TYPES GATT Server Authorization Types + * @{ */ +#define BLE_GATTS_AUTHORIZE_TYPE_INVALID 0x00 /**< Invalid Type. */ +#define BLE_GATTS_AUTHORIZE_TYPE_READ 0x01 /**< Authorize a Read Operation. */ +#define BLE_GATTS_AUTHORIZE_TYPE_WRITE 0x02 /**< Authorize a Write Request Operation. */ +/** @} */ + + +/** @} */ + +/** @addtogroup BLE_GATTS_STRUCTURES Structures + * @{ */ + +/** + * @brief BLE GATTS init options + */ +typedef struct +{ + uint8_t service_changed:1; /**< Include the Service Changed characteristic in the local attributes. */ +} ble_gatts_enable_params_t; + +/**@brief Attribute metadata. */ +typedef struct +{ + ble_gap_conn_sec_mode_t read_perm; /**< Read permissions. */ + ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ + uint8_t vlen :1; /**< Variable length attribute. */ + uint8_t vloc :2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ + uint8_t rd_auth :1; /**< Read Authorization and value will be requested from the application on every read operation. */ + uint8_t wr_auth :1; /**< Write Authorization will be requested from the application on every Write Request operation (but not Write Command). */ +} ble_gatts_attr_md_t; + + +/**@brief GATT Attribute. */ +typedef struct +{ + ble_uuid_t* p_uuid; /**< Pointer to the attribute UUID. */ + ble_gatts_attr_md_t* p_attr_md; /**< Pointer to the attribute metadata structure. */ + uint16_t init_len; /**< Initial attribute value length in bytes. */ + uint16_t init_offs; /**< Initial attribute value offset in bytes. If different from zero, the first init_offs bytes of the attribute value will be left uninitialized. */ + uint16_t max_len; /**< Maximum attribute value length in bytes, see @ref BLE_GATTS_ATTR_LENS_MAX for maximum values. */ + uint8_t* p_value; /**< Pointer to the attribute data. Please note that if the @ref BLE_GATTS_VLOC_USER value location is selected in the attribute metadata, this will have to point to a buffer + that remains valid through the lifetime of the attribute. This excludes usage of automatic variables that may go out of scope or any other temporary location. + The stack may access that memory directly without the application's knowledge. */ +} ble_gatts_attr_t; + + +/**@brief GATT Attribute Context. */ +typedef struct +{ + ble_uuid_t srvc_uuid; /**< Service UUID. */ + ble_uuid_t char_uuid; /**< Characteristic UUID if applicable (BLE_UUID_TYPE_UNKNOWN if N/A). */ + ble_uuid_t desc_uuid; /**< Descriptor UUID if applicable (BLE_UUID_TYPE_UNKNOWN if N/A). */ + uint16_t srvc_handle; /**< Service Handle. */ + uint16_t value_handle; /**< Characteristic Handle if applicable (BLE_GATT_HANDLE_INVALID if N/A). */ + uint8_t type; /**< Attribute Type, see @ref BLE_GATTS_ATTR_TYPES. */ +} ble_gatts_attr_context_t; + + +/**@brief GATT Characteristic Presentation Format. */ +typedef struct +{ + uint8_t format; /**< Format of the value, see @ref BLE_GATT_CPF_FORMATS. */ + int8_t exponent; /**< Exponent for integer data types. */ + uint16_t unit; /**< UUID from Bluetooth Assigned Numbers. */ + uint8_t name_space; /**< Namespace from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ + uint16_t desc; /**< Namespace description from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ +} ble_gatts_char_pf_t; + + +/**@brief GATT Characteristic metadata. */ +typedef struct +{ + ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ + ble_gatt_char_ext_props_t char_ext_props; /**< Characteristic Extended Properties. */ + uint8_t* p_char_user_desc; /**< Pointer to a UTF-8, NULL if the descriptor is not required. */ + uint16_t char_user_desc_max_size; /**< The maximum size in bytes of the user description descriptor. */ + uint16_t char_user_desc_size; /**< The size of the user description, must be smaller or equal to char_user_desc_max_size. */ + ble_gatts_char_pf_t* p_char_pf; /**< Pointer to a presentation format structure or NULL if the descriptor is not required. */ + ble_gatts_attr_md_t* p_user_desc_md; /**< Attribute metadata for the User Description descriptor, or NULL for default values. */ + ble_gatts_attr_md_t* p_cccd_md; /**< Attribute metadata for the Client Characteristic Configuration Descriptor, or NULL for default values. */ + ble_gatts_attr_md_t* p_sccd_md; /**< Attribute metadata for the Server Characteristic Configuration Descriptor, or NULL for default values. */ +} ble_gatts_char_md_t; + + +/**@brief GATT Characteristic Definition Handles. */ +typedef struct +{ + uint16_t value_handle; /**< Handle to the characteristic value. */ + uint16_t user_desc_handle; /**< Handle to the User Description descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ + uint16_t cccd_handle; /**< Handle to the Client Characteristic Configuration Descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ + uint16_t sccd_handle; /**< Handle to the Server Characteristic Configuration Descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ +} ble_gatts_char_handles_t; + + +/**@brief GATT HVx parameters. */ +typedef struct +{ + uint16_t handle; /**< Characteristic Value Handle. */ + uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ + uint16_t offset; /**< Offset within the attribute value. */ + uint16_t* p_len; /**< Length in bytes to be written, length in bytes written after successful return. */ + uint8_t* p_data; /**< Actual data content, use NULL to use the current attribute value. */ +} ble_gatts_hvx_params_t; + +/**@brief GATT Read Authorization parameters. */ +typedef struct +{ + uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ + uint8_t update : 1; /**< If set, data supplied in p_data will be used in the ATT response. */ + uint16_t offset; /**< Offset of the attribute value being updated. */ + uint16_t len; /**< Length in bytes of the value in p_data pointer, see @ref BLE_GATTS_ATTR_LENS_MAX. */ + uint8_t* p_data; /**< Pointer to new value used to update the attribute value. */ +} ble_gatts_read_authorize_params_t; + +/**@brief GATT Write Authorisation parameters. */ +typedef struct +{ + uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ +} ble_gatts_write_authorize_params_t; + +/**@brief GATT Read or Write Authorize Reply parameters. */ +typedef struct +{ + uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ + union { + ble_gatts_read_authorize_params_t read; /**< Read authorization parameters. */ + ble_gatts_write_authorize_params_t write; /**< Write authorization parameters. */ + } params; +} ble_gatts_rw_authorize_reply_params_t; + + +/** + * @brief GATT Server Event IDs. + */ +enum BLE_GATTS_EVTS +{ + BLE_GATTS_EVT_WRITE = BLE_GATTS_EVT_BASE, /**< Write operation performed. */ + BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST, /**< Read/Write Authorization request. */ + BLE_GATTS_EVT_SYS_ATTR_MISSING, /**< A persistent system attribute access is pending, awaiting a sd_ble_gatts_sys_attr_set(). */ + BLE_GATTS_EVT_HVC, /**< Handle Value Confirmation. */ + BLE_GATTS_EVT_SC_CONFIRM, /**< Service Changed Confirmation. */ + BLE_GATTS_EVT_TIMEOUT /**< Timeout. */ +}; + + +/**@brief Event structure for BLE_GATTS_EVT_WRITE. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint8_t op; /**< Type of write operation, see @ref BLE_GATTS_OPS. */ + ble_gatts_attr_context_t context; /**< Attribute Context. */ + uint16_t offset; /**< Offset for the write operation. */ + uint16_t len; /**< Length of the incoming data. */ + uint8_t data[1]; /**< Incoming data, variable length. */ +} ble_gatts_evt_write_t; + +/**@brief Event structure for authorize read request. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + ble_gatts_attr_context_t context; /**< Attribute Context. */ + uint16_t offset; /**< Offset for the read operation. */ +} ble_gatts_evt_read_t; + +/**@brief Event structure for BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST. */ +typedef struct +{ + uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ + union { + ble_gatts_evt_read_t read; /**< Attribute Read Parameters. */ + ble_gatts_evt_write_t write; /**< Attribute Write Parameters. */ + } request; +} ble_gatts_evt_rw_authorize_request_t; + +/**@brief Event structure for BLE_GATTS_EVT_SYS_ATTR_MISSING. */ +typedef struct +{ + uint8_t hint; +} ble_gatts_evt_sys_attr_missing_t; + + +/**@brief Event structure for BLE_GATTS_EVT_HVC. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ +} ble_gatts_evt_hvc_t; + +/**@brief Event structure for BLE_GATTS_EVT_TIMEOUT. */ +typedef struct +{ + uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ +} ble_gatts_evt_timeout_t; + + +/**@brief GATT Server event callback event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occurred. */ + union + { + ble_gatts_evt_write_t write; /**< Write Event Parameters. */ + ble_gatts_evt_rw_authorize_request_t authorize_request; /**< Read or Write Authorize Request Parameters. */ + ble_gatts_evt_sys_attr_missing_t sys_attr_missing; /**< System attributes missing. */ + ble_gatts_evt_hvc_t hvc; /**< Handle Value Confirmation Event Parameters. */ + ble_gatts_evt_timeout_t timeout; /**< Timeout Event. */ + } params; +} ble_gatts_evt_t; + +/** @} */ + +/** @addtogroup BLE_GATTS_FUNCTIONS Functions + * @{ */ + +/**@brief Add a service declaration to the local server ATT table. + * + * @param[in] type Toggles between primary and secondary services, see @ref BLE_GATTS_SRVC_TYPES. + * @param[in] p_uuid Pointer to service UUID. + * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. + * + * @note Secondary Services are only relevant in the context of the entity that references them, it is therefore forbidden to + * add a secondary service declaration that is not referenced by another service later in the ATT table. + * + * @return @ref NRF_SUCCESS Successfully added a service declaration. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, Vendor Specific UUIDs need to be present in the table. + * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_GATTS_SERVICE_ADD, uint32_t, sd_ble_gatts_service_add(uint8_t type, ble_uuid_t const*const p_uuid, uint16_t *const p_handle)); + + +/**@brief Add an include declaration to the local server ATT table. + * + * @note It is currently only possible to add an include declaration to the last added service (i.e. only sequential addition is supported at this time). + * + * @note The included service must already be present in the ATT table prior to this call. + * + * @param[in] service_handle Handle of the service where the included service is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. + * @param[in] inc_srvc_handle Handle of the included service. + * @param[out] p_include_handle Pointer to a 16-bit word where the assigned handle will be stored. + * + * @return @ref NRF_SUCCESS Successfully added an include declaration. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, handle values need to match previously added services. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, self inclusions are not allowed. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. + */ +SVCALL(SD_BLE_GATTS_INCLUDE_ADD, uint32_t, sd_ble_gatts_include_add(uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *const p_include_handle)); + + +/**@brief Add a characteristic declaration, a characteristic value declaration and optional characteristic descriptor declarations to the local server ATT table. + * + * @note It is currently only possible to add a characteristic to the last added service (i.e. only sequential addition is supported at this time). + * + * @note Several restrictions apply to the parameters, such as matching permissions between the user description descriptor and the writeable auxiliaries bits, + * readable (no security) and writeable (selectable) CCCDs and SCCDs and valid presentation format values. + * + * @note If no metadata is provided for the optional descriptors, their permissions will be derived from the characteristic permissions. + * + * @param[in] service_handle Handle of the service where the characteristic is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. + * @param[in] p_char_md Characteristic metadata. + * @param[in] p_attr_char_value Pointer to the attribute structure corresponding to the characteristic value. + * @param[out] p_handles Pointer to the structure where the assigned handles will be stored. + * + * @return @ref NRF_SUCCESS Successfully added a characteristic. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, service handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required. + * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. + */ +SVCALL(SD_BLE_GATTS_CHARACTERISTIC_ADD, uint32_t, sd_ble_gatts_characteristic_add(uint16_t service_handle, ble_gatts_char_md_t const*const p_char_md, ble_gatts_attr_t const*const p_attr_char_value, ble_gatts_char_handles_t *const p_handles)); + + +/**@brief Add a descriptor to the local server ATT table. + * + * @note It is currently only possible to add a descriptor to the last added characteristic (i.e. only sequential addition is supported at this time). + * + * @param[in] char_handle Handle of the characteristic where the descriptor is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. + * @param[in] p_attr Pointer to the attribute structure. + * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. + * + * @return @ref NRF_SUCCESS Successfully added a descriptor. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, characteristic handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, a characteristic context is required. + * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. + */ +SVCALL(SD_BLE_GATTS_DESCRIPTOR_ADD, uint32_t, sd_ble_gatts_descriptor_add(uint16_t char_handle, ble_gatts_attr_t const * const p_attr, uint16_t* const p_handle)); + +/**@brief Set the value of a given attribute. + * + * @param[in] handle Attribute handle. + * @param[in] offset Offset in bytes to write from. + * @param[in,out] p_len Length in bytes to be written, length in bytes written after successful return. + * @param[in] p_value Pointer to a buffer (at least len bytes long) containing the desired attribute value. If value is stored in user memory, only the attribute length is updated when p_value == NULL. + * + * @return @ref NRF_SUCCESS Successfully set the value of the attribute. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. + * @return @ref NRF_ERROR_FORBIDDEN Forbidden handle supplied, certain attributes are not modifiable by the application. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. + */ +SVCALL(SD_BLE_GATTS_VALUE_SET, uint32_t, sd_ble_gatts_value_set(uint16_t handle, uint16_t offset, uint16_t* const p_len, uint8_t const * const p_value)); + +/**@brief Get the value of a given attribute. + * + * @param[in] handle Attribute handle. + * @param[in] offset Offset in bytes to read from. + * @param[in,out] p_len Length in bytes to be read, total length of attribute value (in bytes, starting from offset) after successful return. + * @param[in,out] p_data Pointer to a buffer (at least len bytes long) where to store the attribute value. Set to NULL to obtain the complete length of attribute value. + * + * @note If the attribute value is longer than the size of the supplied buffer, + * p_len will return the total attribute value length (excluding offset), + * and not the number of bytes actually returned in p_data. + * The application may use this information to allocate a suitable buffer size. + * + * @return @ref NRF_SUCCESS Successfully retrieved the value of the attribute. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. + */ +SVCALL(SD_BLE_GATTS_VALUE_GET, uint32_t, sd_ble_gatts_value_get(uint16_t handle, uint16_t offset, uint16_t *const p_len, uint8_t* const p_data)); + +/**@brief Notify or Indicate an attribute value. + * + * @details This function checks for the relevant Client Characteristic Configuration descriptor value to verify that the relevant operation + * (notification or indication) has been enabled by the client. It is also able to update the attribute value before issuing the PDU, so that + * the application can atomically perform a value update and a server initiated transaction with a single API call. + * If the application chooses to indicate an attribute value, a @ref BLE_GATTS_EVT_HVC will be sent up as soon as the confirmation arrives from + * the peer. + * + * @note The local attribute value may be updated even if an outgoing packet is not sent to the peer due to an error during execution. + * When receiveing the error codes @ref NRF_ERROR_INVALID_STATE, @ref NRF_ERROR_BUSY, @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING and + * @ref BLE_ERROR_NO_TX_BUFFERS the ATT table has been updated. + * The caller can check whether the value has been updated by looking at the contents of *(p_hvx_params->p_len). + * + * @note It is important to note that a notification will <b>consume an application buffer</b>, and will therefore + * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. An indication on the other hand will use the + * standard server internal buffer and thus will only generate a @ref BLE_GATTS_EVT_HVC event as soon as the confirmation + * has been received from the peer. Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_hvx_params Pointer to an HVx parameters structure. If the p_data member contains a non-NULL pointer the attribute value will be updated with + * the contents pointed by it before sending the notification or indication. + * + * @return @ref NRF_SUCCESS Successfully queued a notification or indication for transmission, and optionally updated the attribute value. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied. Only attributes added directly by the application are available to notify and indicate. + * @return @ref BLE_ERROR_GATTS_INVALID_ATTR_TYPE Invalid attribute type(s) supplied, only characteristic values may be notified and indicated. + * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, notifications or indications must be enabled in the CCCD. + * @return @ref NRF_ERROR_BUSY Procedure already in progress. + * @return @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. + * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers to send the data, applies only to notifications. + */ +SVCALL(SD_BLE_GATTS_HVX, uint32_t, sd_ble_gatts_hvx(uint16_t conn_handle, ble_gatts_hvx_params_t const*const p_hvx_params)); + +/**@brief Indicate the Service Changed attribute value. + * + * @details This call will send a Handle Value Indication to one or more peers connected to inform them that the attribute + * table layout has changed. As soon as the peer has confirmed the indication, a @ref BLE_GATTS_EVT_SC_CONFIRM event will + * be issued. + * + * @note Some of the restrictions and limitations that apply to @ref sd_ble_gatts_hvx also apply here. + * + * @param[in] conn_handle Connection handle. + * @param[in] start_handle Start of affected attribute handle range. + * @param[in] end_handle End of affected attribute handle range. + * + * @return @ref NRF_SUCCESS Successfully queued the Service Changed indication for transmission. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied, handles must be in the range populated by the application. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, notifications or indications must be enabled in the CCCD. + * @return @ref NRF_ERROR_BUSY Procedure already in progress. + * @return @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. + */ +SVCALL(SD_BLE_GATTS_SERVICE_CHANGED, uint32_t, sd_ble_gatts_service_changed(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle)); + +/**@brief Respond to a Read/Write authorization request. + * + * @note This call should only be used as a response to a @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST event issued to the application. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_rw_authorize_reply_params Pointer to a structure with the attribute provided by the application. + * + * @return @ref NRF_SUCCESS Successfully queued a response to the peer, and in the case of a write operation, ATT table updated. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_STATE No authorization request pending. + * @return @ref NRF_ERROR_INVALID_PARAM Authorization op invalid, + * or for Read Authorization reply: requested handles not replied with, + * or for Write Authorization reply: handle supplied does not match requested handle. + */ +SVCALL(SD_BLE_GATTS_RW_AUTHORIZE_REPLY, uint32_t, sd_ble_gatts_rw_authorize_reply(uint16_t conn_handle, ble_gatts_rw_authorize_reply_params_t const*const p_rw_authorize_reply_params)); + + +/**@brief Update persistent system attribute information. + * + * @details Supply to the stack information about persistent system attributes. + * This call is legal in the connected state only, and is usually + * made immediately after a connection is established and the bond identified. + * usually as a response to a BLE_GATTS_EVT_SYS_ATTR_MISSING. + * + * p_sysattrs may point directly to the application's stored copy of the struct. + * If the pointer is NULL, the system attribute info is initialized, assuming that + * the application does not have any previously saved data for this bond. + * + * @note The state of persistent system attributes is reset upon connection and then remembered for its duration. + * + * @note If this call returns with an error code different from @ref NRF_SUCCESS, the storage of persistent system attributes may have been completed only partially. + * This means that the state of the attribute table is undefined, and the application should either provide a new set of attributes using this same call or + * reset the SoftDevice to return to a known state. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_sys_attr_data Pointer to a saved copy of system attributes supplied to the stack, or NULL. + * @param[in] len Size of data pointed by p_sys_attr_data, in octets. + * + * @return @ref NRF_SUCCESS Successfully set the system attribute information. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_DATA Invalid data supplied, the data should be exactly the same as retrieved with @ref sd_ble_gatts_sys_attr_get. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_GATTS_SYS_ATTR_SET, uint32_t, sd_ble_gatts_sys_attr_set(uint16_t conn_handle, uint8_t const*const p_sys_attr_data, uint16_t len)); + + +/**@brief Retrieve persistent system attribute information from the stack. + * + * @details This call is used to retrieve information about values to be stored perisistently by the application + * after a connection has been terminated. When a new connection is made to the same bond, the values + * should be restored using @ref sd_ble_gatts_sys_attr_set. + * The data should be read before any new advertising is started, or any new connection established. The connection handle for + * the previous now defunct connection will remain valid until a new one is created to allow this API call to refer to it. + * + * @param[in] conn_handle Connection handle of the recently terminated connection. + * @param[in] p_sys_attr_data Pointer to a buffer where updated information about system attributes will be filled in. NULL can be provided to + * obtain the length of the data + * @param[in,out] p_len Size of application buffer if p_sys_attr_data is not NULL. Unconditially updated to actual length of system attribute data. + * + * @return @ref NRF_SUCCESS Successfully retrieved the system attribute information. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_DATA_SIZE The system attribute information did not fit into the provided buffer. + */ +SVCALL(SD_BLE_GATTS_SYS_ATTR_GET, uint32_t, sd_ble_gatts_sys_attr_get(uint16_t conn_handle, uint8_t * const p_sys_attr_data, uint16_t* const p_len)); + +/** @} */ + +#endif // BLE_GATTS_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_HRM1017/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_hci.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,96 @@ +/* + Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + + The information contained herein is confidential property of Nordic Semiconductor. The use, + copying, transfer or disclosure of such information is prohibited except by express written + agreement with Nordic Semiconductor. + */ +/** + @addtogroup BLE_COMMON + @{ +*/ + + +#ifndef BLE_HCI_H__ +#define BLE_HCI_H__ + +/** @defgroup BLE_HCI_STATUS_CODES Bluetooth status codes + * @{ */ + +#define BLE_HCI_STATUS_CODE_SUCCESS 0x00 +#define BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND 0x01 +#define BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER 0x02 +/*0x03 Hardware Failure +0x04 Page Timeout +*/ +#define BLE_HCI_AUTHENTICATION_FAILURE 0x05 +#define BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING 0x06 +#define BLE_HCI_MEMORY_CAPACITY_EXCEEDED 0x07 +#define BLE_HCI_CONNECTION_TIMEOUT 0x08 +/*0x09 Connection Limit Exceeded +0x0A Synchronous Connection Limit To A Device Exceeded +0x0B ACL Connection Already Exists*/ +#define BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED 0x0C +/*0x0D Connection Rejected due to Limited Resources +0x0E Connection Rejected Due To Security Reasons +0x0F Connection Rejected due to Unacceptable BD_ADDR +0x10 Connection Accept Timeout Exceeded +0x11 Unsupported Feature or Parameter Value*/ +#define BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS 0x12 +#define BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION 0x13 +#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES 0x14 +#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF 0x15 +#define BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION 0x16 +/* +0x17 Repeated Attempts +0x18 Pairing Not Allowed +0x19 Unknown LMP PDU +*/ +#define BLE_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1A +/* +0x1B SCO Offset Rejected +0x1C SCO Interval Rejected +0x1D SCO Air Mode Rejected*/ +#define BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS 0x1E +#define BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR 0x1F +/*0x20 Unsupported LMP Parameter Value +0x21 Role Change Not Allowed +*/ +#define BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT 0x22 +/*0x23 LMP Error Transaction Collision*/ +#define BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED 0x24 +/*0x25 Encryption Mode Not Acceptable +0x26 Link Key Can Not be Changed +0x27 Requested QoS Not Supported +*/ +#define BLE_HCI_INSTANT_PASSED 0x28 +#define BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED 0x29 +#define BLE_HCI_DIFFERENT_TRANSACTION_COLLISION 0x2A +/* +0x2B Reserved +0x2C QoS Unacceptable Parameter +0x2D QoS Rejected +0x2E Channel Classification Not Supported +0x2F Insufficient Security +0x30 Parameter Out Of Mandatory Range +0x31 Reserved +0x32 Role Switch Pending +0x33 Reserved +0x34 Reserved Slot Violation +0x35 Role Switch Failed +0x36 Extended Inquiry Response Too Large +0x37 Secure Simple Pairing Not Supported By Host. +0x38 Host Busy - Pairing +0x39 Connection Rejected due to No Suitable Channel Found*/ +#define BLE_HCI_CONTROLLER_BUSY 0x3A +#define BLE_HCI_CONN_INTERVAL_UNACCEPTABLE 0x3B +#define BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT 0x3C +#define BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE 0x3D +#define BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED 0x3E + +/** @} */ + + +#endif // BLE_HCI_H__ + +/** @} */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_HRM1017/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_l2cap.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,144 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_L2CAP Logical Link Control and Adaptation Protocol (L2CAP) + @{ + @brief Definitions and prototypes for the L2CAP interface. + */ + +#ifndef BLE_L2CAP_H__ +#define BLE_L2CAP_H__ + +#include "ble_types.h" +#include "ble_ranges.h" +#include "ble_err.h" +#include "nrf_svc.h" + +/**@addtogroup BLE_L2CAP_ENUMERATIONS Enumerations + * @{ */ + +/**@brief L2CAP API SVC numbers. */ +enum BLE_L2CAP_SVCS +{ + SD_BLE_L2CAP_CID_REGISTER = BLE_L2CAP_SVC_BASE, /**< Register a CID. */ + SD_BLE_L2CAP_CID_UNREGISTER, /**< Unregister a CID. */ + SD_BLE_L2CAP_TX /**< Transmit a packet. */ +}; + +/** @} */ + +/**@addtogroup BLE_L2CAP_DEFINES Defines + * @{ */ + +/**@defgroup BLE_ERRORS_L2CAP SVC return values specific to L2CAP + * @{ */ +#define BLE_ERROR_L2CAP_CID_IN_USE (NRF_L2CAP_ERR_BASE + 0x000) /**< CID already in use. */ +/** @} */ + +/**@brief Default L2CAP MTU. */ +#define BLE_L2CAP_MTU_DEF (23) + +/**@brief Invalid Channel Identifier. */ +#define BLE_L2CAP_CID_INVALID (0x0000) + +/**@brief Dynamic Channel Identifier base. */ +#define BLE_L2CAP_CID_DYN_BASE (0x0040) + +/**@brief Maximum amount of dynamic CIDs. */ +#define BLE_L2CAP_CID_DYN_MAX (8) + +/** @} */ + +/**@addtogroup BLE_L2CAP_STRUCTURES Structures + * @{ */ + +/**@brief Packet header format for L2CAP transmission. */ +typedef struct +{ + uint16_t len; /**< Length of valid info in data member. */ + uint16_t cid; /**< Channel ID on which packet is transmitted. */ +} ble_l2cap_header_t; + +/**@brief L2CAP Event IDs. */ +enum BLE_L2CAP_EVTS +{ + BLE_L2CAP_EVT_RX = BLE_L2CAP_EVT_BASE /**< L2CAP packet received. */ +}; + + +/**@brief L2CAP Received packet event report. */ +typedef struct +{ + ble_l2cap_header_t header; /** L2CAP packet header. */ + uint8_t data[1]; /**< Packet data, variable length. */ +} ble_l2cap_evt_rx_t; + + +/**@brief L2CAP event callback event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occured. */ + union + { + ble_l2cap_evt_rx_t rx; /**< RX Event parameters. */ + } params; +} ble_l2cap_evt_t; + + +/**@brief Register a CID with L2CAP. + * + * @details This registers a higher protocol layer with the L2CAP multiplexer, and is requried prior to all operations on the CID. + * + * @param[in] cid L2CAP CID. + * + * @return @ref NRF_SUCCESS Successfully registered a CID with the L2CAP layer. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, CID must be above @ref BLE_L2CAP_CID_DYN_BASE. + * @return @ref BLE_ERROR_L2CAP_CID_IN_USE L2CAP CID already in use. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_L2CAP_CID_REGISTER, uint32_t, sd_ble_l2cap_cid_register(uint16_t cid)); + +/**@brief Unregister a CID with L2CAP. + * + * @details This unregisters a previously registerd higher protocol layer with the L2CAP multiplexer. + * + * @param[in] cid L2CAP CID. + * + * @return @ref NRF_SUCCESS Successfully unregistered the CID. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_NOT_FOUND CID not previously registered. + */ +SVCALL(SD_BLE_L2CAP_CID_UNREGISTER, uint32_t, sd_ble_l2cap_cid_unregister(uint16_t cid)); + +/**@brief Transmit an L2CAP packet. + * + * @note It is important to note that a call to this function will <b>consume an application buffer</b>, and will therefore + * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. + * Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. + * + * @param[in] conn_handle Connection Handle. + * @param[in] p_header Pointer to a packet header containing length and CID. + * @param[in] p_data Pointer to the data to be transmitted. + * + * @return @ref NRF_SUCCESS Successfully queued an L2CAP packet for transmission. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, CIDs must be registered beforehand with @ref sd_ble_l2cap_cid_register. + * @return @ref NRF_ERROR_NOT_FOUND CID not found. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @return @ref BLE_ERROR_NO_TX_BUFFERS Not enough application buffers available. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, see @ref BLE_L2CAP_MTU_DEF. + */ +SVCALL(SD_BLE_L2CAP_TX, uint32_t, sd_ble_l2cap_tx(uint16_t conn_handle, ble_l2cap_header_t const * const p_header, uint8_t const * const p_data)); + +/** @} */ + +#endif // BLE_L2CAP_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_HRM1017/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_ranges.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,89 @@ +/* + Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + + The information contained herein is confidential property of Nordic Semiconductor. The use, + copying, transfer or disclosure of such information is prohibited except by express written + agreement with Nordic Semiconductor. + */ +/** + @addtogroup BLE_COMMON + @{ + @defgroup ble_ranges Module specific SVC and event number subranges + @{ + + @brief Definition of SVC and event number subranges for each API module. + + @note + SVCs and event numbers are split into subranges for each API module. + Each module receives its entire allocated range of SVC calls, whether implemented or not, + but return BLE_ERROR_NOT_SUPPORTED for unimplemented or undefined calls in its range. + + Note that the symbols BLE_<module>_SVC_LAST is the end of the allocated SVC range, + rather than the last SVC function call actually defined and implemented. + + Specific SVC and event values are defined in each module's ble_<module>.h file, + which defines names of each individual SVC code based on the range start value. +*/ + +#ifndef BLE_RANGES_H__ +#define BLE_RANGES_H__ + +#define BLE_SVC_BASE 0x60 +#define BLE_SVC_LAST 0x6B /* Total: 12. */ + +#define BLE_RESERVED_SVC_BASE 0x6C +#define BLE_RESERVED_SVC_LAST 0x6F /* Total: 4. */ + +#define BLE_GAP_SVC_BASE 0x70 +#define BLE_GAP_SVC_LAST 0x8F /* Total: 32. */ + +#define BLE_GATTC_SVC_BASE 0x90 +#define BLE_GATTC_SVC_LAST 0x9F /* Total: 16. */ + +#define BLE_GATTS_SVC_BASE 0xA0 +#define BLE_GATTS_SVC_LAST 0xAF /* Total: 16. */ + +#define BLE_L2CAP_SVC_BASE 0xB0 +#define BLE_L2CAP_SVC_LAST 0xBF /* Total: 16. */ + + +#define BLE_EVT_INVALID 0x00 + +#define BLE_EVT_BASE 0x01 +#define BLE_EVT_LAST 0x0F /* Total: 15. */ + +#define BLE_GAP_EVT_BASE 0x10 +#define BLE_GAP_EVT_LAST 0x2F /* Total: 32. */ + +#define BLE_GATTC_EVT_BASE 0x30 +#define BLE_GATTC_EVT_LAST 0x4F /* Total: 32. */ + +#define BLE_GATTS_EVT_BASE 0x50 +#define BLE_GATTS_EVT_LAST 0x6F /* Total: 32. */ + +#define BLE_L2CAP_EVT_BASE 0x70 +#define BLE_L2CAP_EVT_LAST 0x8F /* Total: 32. */ + +#define BLE_OPT_INVALID 0x00 /**< Invalid BLE Option. */ + +#define BLE_OPT_BASE 0x01 /**< Common BLE Option base. */ +#define BLE_OPT_LAST 0x1F /**< Total: 31. */ + +#define BLE_GAP_OPT_BASE 0x20 /**< GAP BLE Option base. */ +#define BLE_GAP_OPT_LAST 0x3F /**< Total: 32. */ + +#define BLE_GATTC_OPT_BASE 0x40 /**< GATTC BLE Option base. */ +#define BLE_GATTC_OPT_LAST 0x5F /**< Total: 32. */ + +#define BLE_GATTS_OPT_BASE 0x60 /**< GATTS BLE Option base. */ +#define BLE_GATTS_OPT_LAST 0x7F /**< Total: 32. */ + +#define BLE_L2CAP_OPT_BASE 0x80 /**< L2CAP BLE Option base. */ +#define BLE_L2CAP_OPT_LAST 0x9F /**< Total: 32. */ + +#endif /* BLE_RANGES_H__ */ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_HRM1017/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_types.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,169 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_COMMON + @{ + @defgroup ble_types Common types and macro definitions + @{ + + @brief Common types and macro definitions for the S110 SoftDevice. + */ + +#ifndef BLE_TYPES_H__ +#define BLE_TYPES_H__ + +#include <stdint.h> + +/** @addtogroup BLE_COMMON_DEFINES Defines + * @{ */ + +/** @defgroup BLE_CONN_HANDLES BLE Connection Handles + * @{ */ +#define BLE_CONN_HANDLE_INVALID 0xFFFF /**< Invalid Connection Handle. */ +#define BLE_CONN_HANDLE_ALL 0xFFFE /**< Applies to all Connection Handles. */ +/** @} */ + + +/** @defgroup BLE_UUID_VALUES Assigned Values for BLE UUIDs + * @{ */ +/* Generic UUIDs, applicable to all services */ +#define BLE_UUID_UNKNOWN 0x0000 /**< Reserved UUID. */ +#define BLE_UUID_SERVICE_PRIMARY 0x2800 /**< Primary Service. */ +#define BLE_UUID_SERVICE_SECONDARY 0x2801 /**< Secondary Service. */ +#define BLE_UUID_SERVICE_INCLUDE 0x2802 /**< Include. */ +#define BLE_UUID_CHARACTERISTIC 0x2803 /**< Characteristic. */ +#define BLE_UUID_DESCRIPTOR_CHAR_EXT_PROP 0x2900 /**< Characteristic Extended Properties Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CHAR_USER_DESC 0x2901 /**< Characteristic User Description Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG 0x2902 /**< Client Characteristic Configuration Descriptor. */ +#define BLE_UUID_DESCRIPTOR_SERVER_CHAR_CONFIG 0x2903 /**< Server Characteristic Configuration Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT 0x2904 /**< Characteristic Presentation Format Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CHAR_AGGREGATE_FORMAT 0x2905 /**< Characteristic Aggregate Format Descriptor. */ +/* GATT specific UUIDs */ +#define BLE_UUID_GATT 0x1801 /**< Generic Attribute Profile. */ +#define BLE_UUID_GATT_CHARACTERISTIC_SERVICE_CHANGED 0x2A05 /**< Service Changed Characteristic. */ +/* GAP specific UUIDs */ +#define BLE_UUID_GAP 0x1800 /**< Generic Access Profile. */ +#define BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME 0x2A00 /**< Device Name Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE 0x2A01 /**< Appearance Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_PPF 0x2A02 /**< Peripheral Privacy Flag Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_RECONN_ADDR 0x2A03 /**< Reconnection Address Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_PPCP 0x2A04 /**< Peripheral Preferred Connection Parameters Characteristic. */ +/** @} */ + + +/** @defgroup BLE_UUID_TYPES Types of UUID + * @{ */ +#define BLE_UUID_TYPE_UNKNOWN 0x00 /**< Invalid UUID type. */ +#define BLE_UUID_TYPE_BLE 0x01 /**< Bluetooth SIG UUID (16-bit). */ +#define BLE_UUID_TYPE_VENDOR_BEGIN 0x02 /**< Vendor UUID types start at this index (128-bit). */ +/** @} */ + + +/** @defgroup BLE_APPEARANCES Bluetooth Appearance values + * @note Retrieved from http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml + * @{ */ +#define BLE_APPEARANCE_UNKNOWN 0 /**< Unknown. */ +#define BLE_APPEARANCE_GENERIC_PHONE 64 /**< Generic Phone. */ +#define BLE_APPEARANCE_GENERIC_COMPUTER 128 /**< Generic Computer. */ +#define BLE_APPEARANCE_GENERIC_WATCH 192 /**< Generic Watch. */ +#define BLE_APPEARANCE_WATCH_SPORTS_WATCH 193 /**< Watch: Sports Watch. */ +#define BLE_APPEARANCE_GENERIC_CLOCK 256 /**< Generic Clock. */ +#define BLE_APPEARANCE_GENERIC_DISPLAY 320 /**< Generic Display. */ +#define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL 384 /**< Generic Remote Control. */ +#define BLE_APPEARANCE_GENERIC_EYE_GLASSES 448 /**< Generic Eye-glasses. */ +#define BLE_APPEARANCE_GENERIC_TAG 512 /**< Generic Tag. */ +#define BLE_APPEARANCE_GENERIC_KEYRING 576 /**< Generic Keyring. */ +#define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 640 /**< Generic Media Player. */ +#define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 704 /**< Generic Barcode Scanner. */ +#define BLE_APPEARANCE_GENERIC_THERMOMETER 768 /**< Generic Thermometer. */ +#define BLE_APPEARANCE_THERMOMETER_EAR 769 /**< Thermometer: Ear. */ +#define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR 832 /**< Generic Heart rate Sensor. */ +#define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT 833 /**< Heart Rate Sensor: Heart Rate Belt. */ +#define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 896 /**< Generic Blood Pressure. */ +#define BLE_APPEARANCE_BLOOD_PRESSURE_ARM 897 /**< Blood Pressure: Arm. */ +#define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 898 /**< Blood Pressure: Wrist. */ +#define BLE_APPEARANCE_GENERIC_HID 960 /**< Human Interface Device (HID). */ +#define BLE_APPEARANCE_HID_KEYBOARD 961 /**< Keyboard (HID Subtype). */ +#define BLE_APPEARANCE_HID_MOUSE 962 /**< Mouse (HID Subtype). */ +#define BLE_APPEARANCE_HID_JOYSTICK 963 /**< Joystiq (HID Subtype). */ +#define BLE_APPEARANCE_HID_GAMEPAD 964 /**< Gamepad (HID Subtype). */ +#define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE 965 /**< Digitizer Tablet (HID Subtype). */ +#define BLE_APPEARANCE_HID_CARD_READER 966 /**< Card Reader (HID Subtype). */ +#define BLE_APPEARANCE_HID_DIGITAL_PEN 967 /**< Digital Pen (HID Subtype). */ +#define BLE_APPEARANCE_HID_BARCODE 968 /**< Barcode Scanner (HID Subtype). */ +#define BLE_APPEARANCE_GENERIC_GLUCOSE_METER 1024 /**< Generic Glucose Meter. */ +#define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR 1088 /**< Generic Running Walking Sensor. */ +#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE 1089 /**< Running Walking Sensor: In-Shoe. */ +#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE 1090 /**< Running Walking Sensor: On-Shoe. */ +#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP 1091 /**< Running Walking Sensor: On-Hip. */ +#define BLE_APPEARANCE_GENERIC_CYCLING 1152 /**< Generic Cycling. */ +#define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER 1153 /**< Cycling: Cycling Computer. */ +#define BLE_APPEARANCE_CYCLING_SPEED_SENSOR 1154 /**< Cycling: Speed Sensor. */ +#define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR 1155 /**< Cycling: Cadence Sensor. */ +#define BLE_APPEARANCE_CYCLING_POWER_SENSOR 1156 /**< Cycling: Power Sensor. */ +#define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR 1157 /**< Cycling: Speed and Cadence Sensor. */ +#define BLE_APPEARANCE_GENERIC_PULSE_OXIMETER 3136 /**< Generic Pulse Oximeter. */ +#define BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 3137 /**< Fingertip (Pulse Oximeter subtype). */ +#define BLE_APPEARANCE_PULSE_OXIMETER_WRIST_WORN 3138 /**< Wrist Worn(Pulse Oximeter subtype). */ +#define BLE_APPEARANCE_GENERIC_WEIGHT_SCALE 3200 /**< Generic Weight Scale. */ +#define BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS_ACT 5184 /**< Generic Outdoor Sports Activity. */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_DISP 5185 /**< Location Display Device (Outdoor Sports Activity subtype). */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_DISP 5186 /**< Location and Navigation Display Device (Outdoor Sports Activity subtype). */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_POD 5187 /**< Location Pod (Outdoor Sports Activity subtype). */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_POD 5188 /**< Location and Navigation Pod (Outdoor Sports Activity subtype). */ +/** @} */ + +/** @brief Set .type and .uuid fields of ble_uuid_struct to specified uuid value. */ +#define BLE_UUID_BLE_ASSIGN(instance, value) do {\ + instance.type = BLE_UUID_TYPE_BLE; \ + instance.uuid = value;} while(0) + +/** @brief Copy type and uuid members from src to dst ble_uuid_t pointer. Both pointers must be valid/non-null. */ +#define BLE_UUID_COPY_PTR(dst, src) do {\ + (dst)->type = (src)->type; \ + (dst)->uuid = (src)->uuid;} while(0) + +/** @brief Copy type and uuid members from src to dst ble_uuid_t struct. */ +#define BLE_UUID_COPY_INST(dst, src) do {\ + (dst).type = (src).type; \ + (dst).uuid = (src).uuid;} while(0) + +/** @brief Compare for equality both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ +#define BLE_UUID_EQ(p_uuid1, p_uuid2) \ + (((p_uuid1)->type == (p_uuid2)->type) && ((p_uuid1)->uuid == (p_uuid2)->uuid)) + +/** @brief Compare for difference both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ +#define BLE_UUID_NEQ(p_uuid1, p_uuid2) \ + (((p_uuid1)->type != (p_uuid2)->type) || ((p_uuid1)->uuid != (p_uuid2)->uuid)) + +/** @} */ + +/** @addtogroup BLE_TYPES_STRUCTURES Structures + * @{ */ + +/** @brief 128 bit UUID values. */ +typedef struct +{ + unsigned char uuid128[16]; +} ble_uuid128_t; + +/** @brief Bluetooth Low Energy UUID type, encapsulates both 16-bit and 128-bit UUIDs. */ +typedef struct +{ + uint16_t uuid; /**< 16-bit UUID value or octets 12-13 of 128-bit UUID. */ + uint8_t type; /**< UUID type, see @ref BLE_UUID_TYPES. If type is BLE_UUID_TYPE_UNKNOWN, the value of uuid is undefined. */ +} ble_uuid_t; + +/** @} */ + +#endif /* BLE_TYPES_H__ */ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_HRM1017/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_error.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + /** + @defgroup nrf_error SoftDevice Global Error Codes + @{ + + @brief Global Error definitions +*/ + +/* Header guard */ +#ifndef NRF_ERROR_H__ +#define NRF_ERROR_H__ + +/** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions + * @{ */ +#define NRF_ERROR_BASE_NUM (0x0) ///< Global error base +#define NRF_ERROR_SDM_BASE_NUM (0x1000) ///< SDM error base +#define NRF_ERROR_SOC_BASE_NUM (0x2000) ///< SoC error base +#define NRF_ERROR_STK_BASE_NUM (0x3000) ///< STK error base +/** @} */ + +#define NRF_SUCCESS (NRF_ERROR_BASE_NUM + 0) ///< Successful command +#define NRF_ERROR_SVC_HANDLER_MISSING (NRF_ERROR_BASE_NUM + 1) ///< SVC handler is missing +#define NRF_ERROR_SOFTDEVICE_NOT_ENABLED (NRF_ERROR_BASE_NUM + 2) ///< SoftDevice has not been enabled +#define NRF_ERROR_INTERNAL (NRF_ERROR_BASE_NUM + 3) ///< Internal Error +#define NRF_ERROR_NO_MEM (NRF_ERROR_BASE_NUM + 4) ///< No Memory for operation +#define NRF_ERROR_NOT_FOUND (NRF_ERROR_BASE_NUM + 5) ///< Not found +#define NRF_ERROR_NOT_SUPPORTED (NRF_ERROR_BASE_NUM + 6) ///< Not supported +#define NRF_ERROR_INVALID_PARAM (NRF_ERROR_BASE_NUM + 7) ///< Invalid Parameter +#define NRF_ERROR_INVALID_STATE (NRF_ERROR_BASE_NUM + 8) ///< Invalid state, operation disallowed in this state +#define NRF_ERROR_INVALID_LENGTH (NRF_ERROR_BASE_NUM + 9) ///< Invalid Length +#define NRF_ERROR_INVALID_FLAGS (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags +#define NRF_ERROR_INVALID_DATA (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data +#define NRF_ERROR_DATA_SIZE (NRF_ERROR_BASE_NUM + 12) ///< Data size exceeds limit +#define NRF_ERROR_TIMEOUT (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out +#define NRF_ERROR_NULL (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer +#define NRF_ERROR_FORBIDDEN (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation +#define NRF_ERROR_INVALID_ADDR (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address +#define NRF_ERROR_BUSY (NRF_ERROR_BASE_NUM + 17) ///< Busy + +#endif // NRF_ERROR_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_HRM1017/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_error_sdm.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + /** + @addtogroup nrf_sdm_api + @{ + @defgroup nrf_sdm_error SoftDevice Manager Error Codes + @{ + + @brief Error definitions for the SDM API +*/ + +/* Header guard */ +#ifndef NRF_ERROR_SDM_H__ +#define NRF_ERROR_SDM_H__ + +#include "nrf_error.h" + +#define NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN (NRF_ERROR_SDM_BASE_NUM + 0) ///< Unknown lfclk source +#define NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION (NRF_ERROR_SDM_BASE_NUM + 1) ///< Incorrect interrupt configuration (can be caused by using illegal priority levels, or having enabled SoftDevice interrupts) +#define NRF_ERROR_SDM_INCORRECT_CLENR0 (NRF_ERROR_SDM_BASE_NUM + 2) ///< Incorrect CLENR0 (can be caused by erronous SoftDevice flashing) + +#endif // NRF_ERROR_SDM_H__ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_HRM1017/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_error_soc.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + /** + @addtogroup nrf_soc_api + @{ + @defgroup nrf_soc_error SoC Library Error Codes + @{ + + @brief Error definitions for the SoC library + +*/ + +/* Header guard */ +#ifndef NRF_ERROR_SOC_H__ +#define NRF_ERROR_SOC_H__ + +#include "nrf_error.h" + +/* Mutex Errors */ +#define NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN (NRF_ERROR_SOC_BASE_NUM + 0) ///< Mutex already taken + +/* NVIC errors */ +#define NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE (NRF_ERROR_SOC_BASE_NUM + 1) ///< NVIC interrupt not available +#define NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED (NRF_ERROR_SOC_BASE_NUM + 2) ///< NVIC interrupt priority not allowed +#define NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 3) ///< NVIC should not return + +/* Power errors */ +#define NRF_ERROR_SOC_POWER_MODE_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 4) ///< Power mode unknown +#define NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 5) ///< Power POF threshold unknown +#define NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 6) ///< Power off should not return + +/* Rand errors */ +#define NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES (NRF_ERROR_SOC_BASE_NUM + 7) ///< RAND not enough values + +/* PPI errors */ +#define NRF_ERROR_SOC_PPI_INVALID_CHANNEL (NRF_ERROR_SOC_BASE_NUM + 8) ///< Invalid PPI Channel +#define NRF_ERROR_SOC_PPI_INVALID_GROUP (NRF_ERROR_SOC_BASE_NUM + 9) ///< Invalid PPI Group + +#endif // NRF_ERROR_SOC_H__ +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_HRM1017/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_mbr.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @defgroup nrf_mbr_api Master Boot Record API + @{ + + @brief APIs for updating SoftDevice and BootLoader + +*/ + +/* Header guard */ +#ifndef NRF_MBR_H__ +#define NRF_MBR_H__ + +#include "nrf_svc.h" +#include <stdint.h> + + +/** @addtogroup NRF_MBR_DEFINES Defines + * @{ */ + +/**@brief MBR SVC Base number. */ +#define MBR_SVC_BASE 0x18 +/** @} */ + +/** @addtogroup NRF_MBR_ENUMS Enumerations + * @{ */ + +/**@brief nRF Master Boot Record API SVC numbers. */ +enum NRF_MBR_SVCS +{ + SD_MBR_COMMAND = MBR_SVC_BASE, /**< ::sd_mbr_command */ +}; + +/**@brief Possible values for ::sd_mbr_command_t.command */ +enum NRF_MBR_COMMANDS +{ + SD_MBR_COMMAND_COPY_BL, /**< Copy a new a new BootLoader. @see sd_mbr_command_copy_bl_t */ + SD_MBR_COMMAND_COPY_SD, /**< Copy a new SoftDevice. @see ::sd_mbr_command_copy_sd_t*/ + SD_MBR_COMMAND_INIT_SD, /**< Init forwarding interrupts to SD, and run reset function in SD*/ + SD_MBR_COMMAND_COMPARE, /**< This command works like memcmp. @see ::sd_mbr_command_compare_t*/ + SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET, /**< Start forwarding all exception to this address @see ::sd_mbr_command_vector_table_base_set_t*/ +}; + +/** @} */ + +/** @addtogroup NRF_MBR_TYPES Types + * @{ */ + +/**@brief This command copies part of a new SoftDevice + * The destination area is erased before copying. + * If dst is in the middle of a flash page, that whole flash page will be erased. + * If (dst+len) is in the middle of a flash page, that whole flash page will be erased. + * + * The user of this function is responsible for setting the PROTENSET registers. + * + * @retval ::NRF_SUCCESS indicates that the contents of the memory blocks where copied correctly. + * @retval ::NRF_ERROR_INTERNAL indicates that the contents of the memory blocks where not verified correctly after copying. + */ +typedef struct +{ + uint32_t *src; /**< Pointer to the source of data to be copied.*/ + uint32_t *dst; /**< Pointer to the destination where the content is to be copied.*/ + uint32_t len; /**< Number of 32 bit words to copy. Must be a multiple of 256 words*/ +}sd_mbr_command_copy_sd_t; + + +/**@brief This command works like memcmp, but takes the length in words. + * + * @retval ::NRF_SUCCESS indicates that the contents of both memory blocks are equal. + * @retval ::NRF_ERROR_NULL indicates that the contents of the memory blocks are not equal. + */ +typedef struct +{ + uint32_t *ptr1; /**< Pointer to block of memory */ + uint32_t *ptr2; /**< Pointer to block of memory */ + uint32_t len; /**< Number of 32 bit words to compare*/ +}sd_mbr_command_compare_t; + + +/**@brief This command copies a new BootLoader. + * With this command, destination of BootLoader is always the address written in NRF_UICR->BOOTADDR. + * + * Destination is erased by this function. + * If (destination+bl_len) is in the middle of a flash page, that whole flash page will be erased. + * + * This function will use PROTENSET to protect the flash that is not intended to be written. + * + * On Success, this function will not return. It will start the new BootLoader from reset-vector as normal. + * + * @retval ::NRF_ERROR_INVALID_STATE indicates that something was wrong. + * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. + * @retval ::NRF_ERROR_FORBIDDEN if NRF_UICR->BOOTADDR is not set + * @retval ::NRF_ERROR_INVALID_LENGTH is invalid. + */ +typedef struct +{ + uint32_t *bl_src; /**< Pointer to the source of the Bootloader to be be copied.*/ + uint32_t bl_len; /**< Number of 32 bit words to copy for BootLoader */ +}sd_mbr_command_copy_bl_t; + +/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the MBR + * + * Once this function has been called, this address is where the MBR will start to forward interrupts to after a reset. + * + * To restore default forwarding thiss function should be called with @param address set to 0. + * The MBR will then start forwarding to interrupts to the adress in NFR_UICR->BOOTADDR or to the SoftDevice if the BOOTADDR is not set. + * + * @retval ::NRF_SUCCESS + */ +typedef struct +{ + uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ +}sd_mbr_command_vector_table_base_set_t; + +typedef struct +{ + uint32_t command; /**< type of command to be issued see @ref NRF_MBR_COMMANDS. */ + union + { + sd_mbr_command_copy_sd_t copy_sd; /**< Parameters for copy*/ + sd_mbr_command_copy_bl_t copy_bl; /**< Parameters for copy SoftDevice and BootLoader*/ + sd_mbr_command_compare_t compare; /**< Parameters for verify*/ + sd_mbr_command_vector_table_base_set_t base_set; /**< Parameters for vector table base set.*/ + } params; +}sd_mbr_command_t; + +/** @} */ + +/** @addtogroup NRF_MBR_FUNCTIONS Functions + * @{ */ + +/**@brief Issue Master Boot Record commands + * + * Commands used when updating a SoftDevice and bootloader + * + * @param[in] param Pointer to a struct describing the command + * + *@note for retvals see ::sd_mbr_command_copy_sd_t ::sd_mbr_command_copy_bl_t ::sd_mbr_command_compare_t + +*/ +SVCALL(SD_MBR_COMMAND, uint32_t, sd_mbr_command(sd_mbr_command_t* param)); + +/** @} */ +#endif // NRF_MBR_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_HRM1017/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_sdm.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,167 @@ +/* + * Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @defgroup nrf_sdm_api SoftDevice Manager API + @{ + + @brief APIs for SoftDevice management. + +*/ + +/* Header guard */ +#ifndef NRF_SDM_H__ +#define NRF_SDM_H__ + +#include "nrf_svc.h" +#include "nrf51.h" +#include "nrf_soc.h" +#include "nrf_error_sdm.h" + +/** @addtogroup NRF_SDM_DEFINES Defines + * @{ */ + +/**@brief SoftDevice Manager SVC Base number. */ +#define SDM_SVC_BASE (0x10) + +/** @} */ + +/** @addtogroup NRF_SDM_ENUMS Enumerations + * @{ */ + +/**@brief nRF SoftDevice Manager API SVC numbers. */ +enum NRF_SD_SVCS +{ + SD_SOFTDEVICE_ENABLE = SDM_SVC_BASE, /**< ::sd_softdevice_enable */ + SD_SOFTDEVICE_DISABLE, /**< ::sd_softdevice_disable */ + SD_SOFTDEVICE_IS_ENABLED, /**< ::sd_softdevice_is_enabled */ + SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, /**< ::sd_softdevice_vector_table_base_set */ + SVC_SDM_LAST /**< Placeholder for last SDM SVC */ +}; + +/**@brief Possible lfclk oscillator sources. */ +enum NRF_CLOCK_LFCLKSRCS +{ + NRF_CLOCK_LFCLKSRC_SYNTH_250_PPM, /**< LFCLK Synthesized from HFCLK. */ + NRF_CLOCK_LFCLKSRC_XTAL_500_PPM, /**< LFCLK crystal oscillator 500 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_250_PPM, /**< LFCLK crystal oscillator 250 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_150_PPM, /**< LFCLK crystal oscillator 150 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_100_PPM, /**< LFCLK crystal oscillator 100 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_75_PPM, /**< LFCLK crystal oscillator 75 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_50_PPM, /**< LFCLK crystal oscillator 50 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_30_PPM, /**< LFCLK crystal oscillator 30 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_20_PPM, /**< LFCLK crystal oscillator 20 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_250MS_CALIBRATION, /**< LFCLK RC oscillator, 250ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_500MS_CALIBRATION, /**< LFCLK RC oscillator, 500ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_1000MS_CALIBRATION, /**< LFCLK RC oscillator, 1000ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_2000MS_CALIBRATION, /**< LFCLK RC oscillator, 2000ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_4000MS_CALIBRATION, /**< LFCLK RC oscillator, 4000ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_8000MS_CALIBRATION, /**< LFCLK RC oscillator, 8000ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_1000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 1000ms, if changed above a threshold, a calibration is done.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_2000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 2000ms, if changed above a threshold, a calibration is done.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_4000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 4000ms, if changed above a threshold, a calibration is done.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_8000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 8000ms, if changed above a threshold, a calibration is done.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_16000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 16000ms, if changed above a threshold, a calibration is done.*/ +}; + +/** @} */ + +/** @addtogroup NRF_SDM_TYPES Types + * @{ */ + +/**@brief Type representing lfclk oscillator source. */ +typedef uint32_t nrf_clock_lfclksrc_t; + + +/**@brief SoftDevice Assertion Handler type. + * + * When an unexpected error occurs within the SoftDevice it will call the SoftDevice assertion handler callback. + * The protocol stack will be in an undefined state when this happens and the only way to recover will be to + * perform a reset, using e.g. CMSIS NVIC_SystemReset(). + * + * @note This callback is executed in HardFault context, thus SVC functions cannot be called from the SoftDevice assert callback. + * + * @param[in] pc The program counter of the failed assert. + * @param[in] line_number Line number where the assert failed. + * @param[in] file_name File name where the assert failed. + */ +typedef void (*softdevice_assertion_handler_t)(uint32_t pc, uint16_t line_number, const uint8_t * p_file_name); + +/** @} */ + +/** @addtogroup NRF_SDM_FUNCTIONS Functions + * @{ */ + +/**@brief Enables the SoftDevice and by extension the protocol stack. + * + * Idempotent function to enable the SoftDevice. + * + * @note Some care must be taken if a low frequency clock source is already running when calling this function: + * If the LF clock has a different source then the one currently running, it will be stopped. Then, the new + * clock source will be started. + * + * @note This function has no effect when returning with an error. + * + * @post If return code is ::NRF_SUCCESS + * - SoC library and protocol stack APIs are made available + * - A portion of RAM will be unavailable (see relevant SDS documentation) + * - Some peripherals will be unavailable or available only through the SoC API (see relevant SDS documentation) + * - Interrupts will not arrive from protected peripherals or interrupts + * - nrf_nvic_ functions must be used instead of CMSIS NVIC_ functions for reliable usage of the softdevice. + * - Interrupt latency may be affected by the SoftDevice (see relevant SDS documentation) + * - Chosen low frequency clock source will be running + * + * @param clock_source Low frequency clock source and accuracy. (Note: In the case of XTAL source, the PPM accuracy of the chosen clock source must be greater than or equal to the actual characteristics of your XTAL clock). + * @param assertion_handler Callback for SoftDevice assertions. + * + * @retval ::NRF_SUCCESS + * @retval ::NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION SoftDeviceinterrupt is already enabled, or an enabled interrupt has an illegal priority level + * @retval ::NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN Unknown low frequency clock source selected + */ +SVCALL(SD_SOFTDEVICE_ENABLE, uint32_t, sd_softdevice_enable(nrf_clock_lfclksrc_t clock_source, softdevice_assertion_handler_t assertion_handler)); + +/**@brief Disables the SoftDevice and by extension the protocol stack. + * + * Idempotent function to disable the SoftDevice. + * + * @post SoC library and protocol stack APIs are made unavailable. + * @post All interrupts that was protected by the SoftDevice will be disabled and initialized to priority 0 (highest). + * @post All peripherals used by the SoftDevice will be reset to default values. + * @post All of RAM become available. + * @post All interrupts are forwarded to the application. + * @post LFCLK source chosen in ::sd_softdevice_enable will be left running. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_SOFTDEVICE_DISABLE, uint32_t, sd_softdevice_disable(void)); + +/**@brief Check if the SoftDevice is enabled. + * + * @param[out] p_softdevice_enabled If the SoftDevice is enabled: 1 else 0. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_SOFTDEVICE_IS_ENABLED, uint32_t, sd_softdevice_is_enabled(uint8_t * p_softdevice_enabled)); + +/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the SoftDevice + * + * This function is only intended to be called when a bootloader is enabled. + * + * @param[in] address The base address of the interrupt vector table for forwarded interrupts. + + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, uint32_t, sd_softdevice_vector_table_base_set(uint32_t address)); + +/** @} */ + +#endif // NRF_SDM_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_HRM1017/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_soc.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,958 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + +/** + * @defgroup nrf_soc_api SoC Library API + * @{ + * + * @brief APIs for the SoC library. + * +*/ + +#ifndef NRF_SOC_H__ +#define NRF_SOC_H__ + +#include <stdint.h> +#include <stdbool.h> +#include "nrf_svc.h" +#include "nrf51.h" +#include "nrf51_bitfields.h" +#include "nrf_error_soc.h" + +/** @addtogroup NRF_SOC_DEFINES Defines + * @{ */ + +/**@brief The number of the lowest SVC number reserved for the SoC library. */ +#define SOC_SVC_BASE (0x20) +#define SOC_SVC_BASE_NOT_AVAILABLE (0x23) + +/**@brief Guranteed time for application to process radio inactive notification. */ +#define NRF_RADIO_NOTIFICATION_INACTIVE_GUARANTEED_TIME_US (62) + +/**@brief The minimum allowed timeslot extension time. */ +#define NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US (200) + +#define SOC_ECB_KEY_LENGTH (16) /**< ECB key length. */ +#define SOC_ECB_CLEARTEXT_LENGTH (16) /**< ECB cleartext length. */ +#define SOC_ECB_CIPHERTEXT_LENGTH (SOC_ECB_CLEARTEXT_LENGTH) /**< ECB ciphertext length. */ + +#define SD_EVT_IRQn (SWI2_IRQn) /**< SoftDevice Event IRQ number. Used for both protocol events and SoC events. */ +#define SD_EVT_IRQHandler (SWI2_IRQHandler) /**< SoftDevice Event IRQ handler. Used for both protocol events and SoC events. */ +#define RADIO_NOTIFICATION_IRQn (SWI1_IRQn) /**< The radio notification IRQ number. */ +#define RADIO_NOTIFICATION_IRQHandler (SWI1_IRQHandler) /**< The radio notification IRQ handler. */ + +#define NRF_RADIO_LENGTH_MIN_US (100) /**< The shortest allowed radio timeslot, in microseconds. */ +#define NRF_RADIO_LENGTH_MAX_US (100000) /**< The longest allowed radio timeslot, in microseconds. */ + +#define NRF_RADIO_DISTANCE_MAX_US (128000000UL - 1UL) /**< The longest timeslot distance, in microseconds, allowed for the distance parameter (see @ref nrf_radio_request_normal_t) in the request. */ + +#define NRF_RADIO_EARLIEST_TIMEOUT_MAX_US (128000000UL - 1UL) /**< The longest timeout, in microseconds, allowed when requesting the earliest possible timeslot. */ + +#define NRF_RADIO_START_JITTER_US (2) /**< The maximum jitter in NRF_RADIO_CALLBACK_SIGNAL_TYPE_START relative to the requested start time. */ + +/** @} */ + +/** @addtogroup NRF_SOC_TYPES Types + * @{ */ + +/**@brief The SVC numbers used by the SVC functions in the SoC library. */ +enum NRF_SOC_SVCS +{ + SD_FLASH_PAGE_ERASE = SOC_SVC_BASE, + SD_FLASH_WRITE, + SD_FLASH_PROTECT, + SD_MUTEX_NEW = SOC_SVC_BASE_NOT_AVAILABLE, + SD_MUTEX_ACQUIRE, + SD_MUTEX_RELEASE, + SD_NVIC_ENABLEIRQ, + SD_NVIC_DISABLEIRQ, + SD_NVIC_GETPENDINGIRQ, + SD_NVIC_SETPENDINGIRQ, + SD_NVIC_CLEARPENDINGIRQ, + SD_NVIC_SETPRIORITY, + SD_NVIC_GETPRIORITY, + SD_NVIC_SYSTEMRESET, + SD_NVIC_CRITICAL_REGION_ENTER, + SD_NVIC_CRITICAL_REGION_EXIT, + SD_RAND_APPLICATION_POOL_CAPACITY, + SD_RAND_APPLICATION_BYTES_AVAILABLE, + SD_RAND_APPLICATION_GET_VECTOR, + SD_POWER_MODE_SET, + SD_POWER_SYSTEM_OFF, + SD_POWER_RESET_REASON_GET, + SD_POWER_RESET_REASON_CLR, + SD_POWER_POF_ENABLE, + SD_POWER_POF_THRESHOLD_SET, + SD_POWER_RAMON_SET, + SD_POWER_RAMON_CLR, + SD_POWER_RAMON_GET, + SD_POWER_GPREGRET_SET, + SD_POWER_GPREGRET_CLR, + SD_POWER_GPREGRET_GET, + SD_POWER_DCDC_MODE_SET, + SD_APP_EVT_WAIT, + SD_CLOCK_HFCLK_REQUEST, + SD_CLOCK_HFCLK_RELEASE, + SD_CLOCK_HFCLK_IS_RUNNING, + SD_PPI_CHANNEL_ENABLE_GET, + SD_PPI_CHANNEL_ENABLE_SET, + SD_PPI_CHANNEL_ENABLE_CLR, + SD_PPI_CHANNEL_ASSIGN, + SD_PPI_GROUP_TASK_ENABLE, + SD_PPI_GROUP_TASK_DISABLE, + SD_PPI_GROUP_ASSIGN, + SD_PPI_GROUP_GET, + SD_RADIO_NOTIFICATION_CFG_SET, + SD_ECB_BLOCK_ENCRYPT, + SD_RADIO_SESSION_OPEN, + SD_RADIO_SESSION_CLOSE, + SD_RADIO_REQUEST, + SD_EVT_GET, + SD_TEMP_GET, + SVC_SOC_LAST +}; + +/**@brief Possible values of a ::nrf_mutex_t. */ +enum NRF_MUTEX_VALUES +{ + NRF_MUTEX_FREE, + NRF_MUTEX_TAKEN +}; + +/**@brief Possible values of ::nrf_app_irq_priority_t. */ +enum NRF_APP_PRIORITIES +{ + NRF_APP_PRIORITY_HIGH = 1, + NRF_APP_PRIORITY_LOW = 3 +}; + +/**@brief Possible values of ::nrf_power_mode_t. */ +enum NRF_POWER_MODES +{ + NRF_POWER_MODE_CONSTLAT, /**< Constant latency mode. See power management in the reference manual. */ + NRF_POWER_MODE_LOWPWR /**< Low power mode. See power management in the reference manual. */ +}; + + +/**@brief Possible values of ::nrf_power_failure_threshold_t */ +enum NRF_POWER_THRESHOLDS +{ + NRF_POWER_THRESHOLD_V21, /**< 2.1 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V23, /**< 2.3 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V25, /**< 2.5 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V27 /**< 2.7 Volts power failure threshold. */ +}; + + +/**@brief Possible values of ::nrf_power_dcdc_mode_t. */ +enum NRF_POWER_DCDC_MODES +{ + NRF_POWER_DCDC_MODE_OFF, /**< The DCDC is always off. */ + NRF_POWER_DCDC_MODE_ON, /**< The DCDC is always on. */ + NRF_POWER_DCDC_MODE_AUTOMATIC /**< The DCDC is automatically managed. */ +}; + +/**@brief Possible values of ::nrf_radio_notification_distance_t. */ +enum NRF_RADIO_NOTIFICATION_DISTANCES +{ + NRF_RADIO_NOTIFICATION_DISTANCE_NONE = 0, /**< The event does not have a notification. */ + NRF_RADIO_NOTIFICATION_DISTANCE_800US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_1740US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_2680US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_3620US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_4560US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_5500US /**< The distance from the active notification to start of radio activity. */ +}; + + +/**@brief Possible values of ::nrf_radio_notification_type_t. */ +enum NRF_RADIO_NOTIFICATION_TYPES +{ + NRF_RADIO_NOTIFICATION_TYPE_NONE = 0, /**< The event does not have a radio notification signal. */ + NRF_RADIO_NOTIFICATION_TYPE_INT_ON_ACTIVE, /**< Using interrupt for notification when the radio will be enabled. */ + NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE, /**< Using interrupt for notification when the radio has been disabled. */ + NRF_RADIO_NOTIFICATION_TYPE_INT_ON_BOTH, /**< Using interrupt for notification both when the radio will be enabled and disabled. */ +}; + +/**@brief SoC Events. */ +enum NRF_SOC_EVTS +{ + NRF_EVT_HFCLKSTARTED, /**< Event indicating that the HFCLK has started. */ + NRF_EVT_POWER_FAILURE_WARNING, /**< Event indicating that a power failure warning has occurred. */ + NRF_EVT_FLASH_OPERATION_SUCCESS, /**< Event indicating that the ongoing flash operation has completed successfully. */ + NRF_EVT_FLASH_OPERATION_ERROR, /**< Event indicating that the ongoing flash operation has timed out with an error. */ + NRF_EVT_RADIO_BLOCKED, /**< Event indicating that a radio timeslot was blocked. */ + NRF_EVT_RADIO_CANCELED, /**< Event indicating that a radio timeslot was canceled by SoftDevice. */ + NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN, /**< Event indicating that a radio signal callback handler return was invalid. */ + NRF_EVT_RADIO_SESSION_IDLE, /**< Event indicating that a radio session is idle. */ + NRF_EVT_RADIO_SESSION_CLOSED, /**< Event indicating that a radio session is closed. */ + NRF_EVT_NUMBER_OF_EVTS +}; + +/** @} */ + +/** @addtogroup NRF_SOC_TYPES Types + * @{ */ + +/**@brief Represents a mutex for use with the nrf_mutex functions. + * @note Accessing the value directly is not safe, use the mutex functions! + */ +typedef volatile uint8_t nrf_mutex_t; + +/**@brief The interrupt priorities available to the application while the softdevice is active. */ +typedef uint8_t nrf_app_irq_priority_t; + +/**@brief Represents a power mode, used in power mode functions */ +typedef uint8_t nrf_power_mode_t; + +/**@brief Represents a power failure threshold value. */ +typedef uint8_t nrf_power_failure_threshold_t; + +/**@brief Represents a DCDC mode value. */ +typedef uint32_t nrf_power_dcdc_mode_t; + +/**@brief Radio notification distances. */ +typedef uint8_t nrf_radio_notification_distance_t; + +/**@brief Radio notification types. */ +typedef uint8_t nrf_radio_notification_type_t; + +/** @brief The Radio signal callback types. */ +enum NRF_RADIO_CALLBACK_SIGNAL_TYPE +{ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_START, /**< This signal indicates the start of the radio timeslot. */ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0, /**< This signal indicates the NRF_TIMER0 interrupt. */ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO, /**< This signal indicates the NRF_RADIO interrupt. */ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_FAILED, /**< This signal indicates extend action failed. */ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_SUCCEEDED /**< This signal indicates extend action succeeded. */ +}; + +/** @brief The actions requested by the signal callback. + * + * This code gives the SOC instructions about what action to take when the signal callback has + * returned. + */ +enum NRF_RADIO_SIGNAL_CALLBACK_ACTION +{ + NRF_RADIO_SIGNAL_CALLBACK_ACTION_NONE, /**< Return without action. */ + NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND, /**< Request an extension of the current timeslot (maximum execution time for this action is when the extension succeeded). */ + NRF_RADIO_SIGNAL_CALLBACK_ACTION_END, /**< End the current radio timeslot. */ + NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END /**< Request a new radio timeslot and end the current timeslot. */ +}; + +/**@brief Radio timeslot high frequency clock source configuration. */ +enum NRF_RADIO_HFCLK_CFG +{ + NRF_RADIO_HFCLK_CFG_DEFAULT, /**< Use the currently selected oscillator as HF clock source during the timeslot (i.e. the source is not specified). */ + NRF_RADIO_HFCLK_CFG_FORCE_XTAL, /**< Force external crystal to be used as HF clock source during whole the timeslot. */ +}; + +/** @brief Radio timeslot priorities. */ +enum NRF_RADIO_PRIORITY +{ + NRF_RADIO_PRIORITY_HIGH, /**< High (equal priority as the normal connection priority of the SoftDevice stack(s)). */ + NRF_RADIO_PRIORITY_NORMAL, /**< Normal (equal priority as the priority of secondary activites of the SoftDevice stack(s)). */ +}; + +/** @brief Radio timeslot request type. */ +enum NRF_RADIO_REQUEST_TYPE +{ + NRF_RADIO_REQ_TYPE_EARLIEST, /**< Request timeslot as early as possible. This should always be used for the first request in a session. */ + NRF_RADIO_REQ_TYPE_NORMAL /**< Normal timeslot request. */ +}; + +/** @brief Parameters for a request for a timeslot as early as possible. */ +typedef struct +{ + uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ + uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ + uint32_t length_us; /**< The radio timeslot length (in the range 100 to 100,000] microseconds). */ + uint32_t timeout_us; /**< Longest acceptable delay until the start of the requested timeslot (up to @ref NRF_RADIO_EARLIEST_TIMEOUT_MAX_US microseconds). */ +} nrf_radio_request_earliest_t; + +/** @brief Parameters for a normal radio request. */ +typedef struct +{ + uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ + uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ + uint32_t distance_us; /**< Distance from the start of the previous radio timeslot (up to @ref NRF_RADIO_DISTANCE_MAX_US microseconds). */ + uint32_t length_us; /**< The radio timeslot length (in the range [100..100,000] microseconds). */ +} nrf_radio_request_normal_t; + +/** @brief Radio request parameters. */ +typedef struct +{ + uint8_t request_type; /**< Type of request, see @ref NRF_RADIO_REQUEST_TYPE. */ + union + { + nrf_radio_request_earliest_t earliest; /**< Parameters for a request for a timeslot as early as possible. */ + nrf_radio_request_normal_t normal; /**< Parameters for a normal radio request. */ + } params; +} nrf_radio_request_t; + +/**@brief Return parameters of the radio timeslot signal callback. */ +typedef struct +{ + uint8_t callback_action; /**< The action requested by the application when returning from the signal callback, see @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION. */ + union + { + struct + { + nrf_radio_request_t * p_next; /**< The request parameters for the next radio timeslot. */ + } request; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END. */ + struct + { + uint32_t length_us; /**< Requested extension of the timeslot duration (microseconds) (for minimum time see @ref NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US). */ + } extend; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND. */ + } params; +} nrf_radio_signal_callback_return_param_t; + +/**@brief The radio signal callback type. + * + * @note In case of invalid return parameters, the radio timeslot will automatically end + * immediately after returning from the signal callback and the + * @ref NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN event will be sent. + * @note The returned struct pointer must remain valid after the signal callback + * function returns. For instance, this means that it must not point to a stack variable. + * + * @param[in] signal_type Type of signal, see @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE. + * + * @return Pointer to structure containing action requested by the application. + */ +typedef nrf_radio_signal_callback_return_param_t * (*nrf_radio_signal_callback_t) (uint8_t signal_type); + +/**@brief AES ECB data structure */ +typedef struct +{ + uint8_t key[SOC_ECB_KEY_LENGTH]; /**< Encryption key. */ + uint8_t cleartext[SOC_ECB_CLEARTEXT_LENGTH]; /**< Clear Text data. */ + uint8_t ciphertext[SOC_ECB_CIPHERTEXT_LENGTH]; /**< Cipher Text data. */ +} nrf_ecb_hal_data_t; + +/** @} */ + +/** @addtogroup NRF_SOC_FUNCTIONS Functions + * @{ */ + +/**@brief Initialize a mutex. + * + * @param[in] p_mutex Pointer to the mutex to initialize. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_MUTEX_NEW, uint32_t, sd_mutex_new(nrf_mutex_t * p_mutex)); + +/**@brief Attempt to acquire a mutex. + * + * @param[in] p_mutex Pointer to the mutex to acquire. + * + * @retval ::NRF_SUCCESS The mutex was successfully acquired. + * @retval ::NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN The mutex could not be acquired. + */ +SVCALL(SD_MUTEX_ACQUIRE, uint32_t, sd_mutex_acquire(nrf_mutex_t * p_mutex)); + +/**@brief Release a mutex. + * + * @param[in] p_mutex Pointer to the mutex to release. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_MUTEX_RELEASE, uint32_t, sd_mutex_release(nrf_mutex_t * p_mutex)); + +/**@brief Enable External Interrupt. + * @note Corresponds to NVIC_EnableIRQ in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS. + * + * @retval ::NRF_SUCCESS The interrupt was enabled. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt has a priority not available for the application. + */ +SVCALL(SD_NVIC_ENABLEIRQ, uint32_t, sd_nvic_EnableIRQ(IRQn_Type IRQn)); + +/**@brief Disable External Interrupt. + * @note Corresponds to NVIC_DisableIRQ in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS + * + * @retval ::NRF_SUCCESS The interrupt was disabled. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. + */ +SVCALL(SD_NVIC_DISABLEIRQ, uint32_t, sd_nvic_DisableIRQ(IRQn_Type IRQn)); + +/**@brief Get Pending Interrupt. + * @note Corresponds to NVIC_GetPendingIRQ in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_GetPendingIRQ documentation in CMSIS. + * @param[out] p_pending_irq Return value from NVIC_GetPendingIRQ. + * + * @retval ::NRF_SUCCESS The interrupt is available for the application. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. + */ +SVCALL(SD_NVIC_GETPENDINGIRQ, uint32_t, sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq)); + +/**@brief Set Pending Interrupt. + * @note Corresponds to NVIC_SetPendingIRQ in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS. + * + * @retval ::NRF_SUCCESS The interrupt is set pending. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. + */ +SVCALL(SD_NVIC_SETPENDINGIRQ, uint32_t, sd_nvic_SetPendingIRQ(IRQn_Type IRQn)); + +/**@brief Clear Pending Interrupt. + * @note Corresponds to NVIC_ClearPendingIRQ in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS. + * + * @retval ::NRF_SUCCESS The interrupt pending flag is cleared. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. + */ +SVCALL(SD_NVIC_CLEARPENDINGIRQ, uint32_t, sd_nvic_ClearPendingIRQ(IRQn_Type IRQn)); + +/**@brief Set Interrupt Priority. + * @note Corresponds to NVIC_SetPriority in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * @pre{priority is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_SetPriority documentation in CMSIS. + * @param[in] priority A valid IRQ priority for use by the application. + * + * @retval ::NRF_SUCCESS The interrupt and priority level is available for the application. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt priority is not available for the application. + */ +SVCALL(SD_NVIC_SETPRIORITY, uint32_t, sd_nvic_SetPriority(IRQn_Type IRQn, nrf_app_irq_priority_t priority)); + +/**@brief Get Interrupt Priority. + * @note Corresponds to NVIC_GetPriority in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_GetPriority documentation in CMSIS. + * @param[out] p_priority Return value from NVIC_GetPriority. + * + * @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE - IRQn is not available for the application. + */ +SVCALL(SD_NVIC_GETPRIORITY, uint32_t, sd_nvic_GetPriority(IRQn_Type IRQn, nrf_app_irq_priority_t * p_priority)); + +/**@brief System Reset. + * @note Corresponds to NVIC_SystemReset in CMSIS. + * + * @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN + */ +SVCALL(SD_NVIC_SYSTEMRESET, uint32_t, sd_nvic_SystemReset(void)); + +/**@brief Enters critical region. + * + * @post Application interrupts will be disabled. + * @sa sd_nvic_critical_region_exit + * + * @param[out] p_is_nested_critical_region 1: If in a nested critical region. + * 0: Otherwise. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_NVIC_CRITICAL_REGION_ENTER, uint32_t, sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region)); + +/**@brief Exit critical region. + * + * @pre Application has entered a critical region using ::sd_nvic_critical_region_enter. + * @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called. + * + * @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_NVIC_CRITICAL_REGION_EXIT, uint32_t, sd_nvic_critical_region_exit(uint8_t is_nested_critical_region)); + +/**@brief Query the capacity of the application random pool. + * + * @param[out] p_pool_capacity The capacity of the pool. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_RAND_APPLICATION_POOL_CAPACITY, uint32_t, sd_rand_application_pool_capacity_get(uint8_t * p_pool_capacity)); + +/**@brief Get number of random bytes available to the application. + * + * @param[out] p_bytes_available The number of bytes currently available in the pool. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_RAND_APPLICATION_BYTES_AVAILABLE, uint32_t, sd_rand_application_bytes_available_get(uint8_t * p_bytes_available)); + +/**@brief Get random bytes from the application pool. + * + * @param[out] p_buff Pointer to unit8_t buffer for storing the bytes. + * @param[in] length Number of bytes to take from pool and place in p_buff. + * + * @retval ::NRF_SUCCESS The requested bytes were written to p_buff. + * @retval ::NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES No bytes were written to the buffer, because there were not enough bytes available. +*/ +SVCALL(SD_RAND_APPLICATION_GET_VECTOR, uint32_t, sd_rand_application_vector_get(uint8_t * p_buff, uint8_t length)); + +/**@brief Gets the reset reason register. + * + * @param[out] p_reset_reason Contents of the NRF_POWER->RESETREAS register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RESET_REASON_GET, uint32_t, sd_power_reset_reason_get(uint32_t * p_reset_reason)); + +/**@brief Clears the bits of the reset reason register. + * + * @param[in] reset_reason_clr_msk Contains the bits to clear from the reset reason register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RESET_REASON_CLR, uint32_t, sd_power_reset_reason_clr(uint32_t reset_reason_clr_msk)); + +/**@brief Sets the power mode when in CPU sleep. + * + * @param[in] power_mode The power mode to use when in CPU sleep. @sa sd_app_evt_wait + * + * @retval ::NRF_SUCCESS The power mode was set. + * @retval ::NRF_ERROR_SOC_POWER_MODE_UNKNOWN The power mode was unknown. + */ +SVCALL(SD_POWER_MODE_SET, uint32_t, sd_power_mode_set(nrf_power_mode_t power_mode)); + +/**@brief Puts the chip in System OFF mode. + * + * @retval ::NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN + */ +SVCALL(SD_POWER_SYSTEM_OFF, uint32_t, sd_power_system_off(void)); + +/**@brief Enables or disables the power-fail comparator. + * + * Enabling this will give a softdevice event (NRF_EVT_POWER_FAILURE_WARNING) when the power failure warning occurs. + * The event can be retrieved with sd_evt_get(); + * + * @param[in] pof_enable True if the power-fail comparator should be enabled, false if it should be disabled. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_POF_ENABLE, uint32_t, sd_power_pof_enable(uint8_t pof_enable)); + +/**@brief Sets the power-fail threshold value. + * + * @param[in] threshold The power-fail threshold value to use. + * + * @retval ::NRF_SUCCESS The power failure threshold was set. + * @retval ::NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN The power failure threshold is unknown. + */ +SVCALL(SD_POWER_POF_THRESHOLD_SET, uint32_t, sd_power_pof_threshold_set(nrf_power_failure_threshold_t threshold)); + +/**@brief Sets bits in the NRF_POWER->RAMON register. + * + * @param[in] ramon Contains the bits needed to be set in the NRF_POWER->RAMON register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RAMON_SET, uint32_t, sd_power_ramon_set(uint32_t ramon)); + +/** @brief Clears bits in the NRF_POWER->RAMON register. + * + * @param ramon Contains the bits needed to be cleared in the NRF_POWER->RAMON register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RAMON_CLR, uint32_t, sd_power_ramon_clr(uint32_t ramon)); + +/**@brief Get contents of NRF_POWER->RAMON register, indicates power status of ram blocks. + * + * @param[out] p_ramon Content of NRF_POWER->RAMON register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RAMON_GET, uint32_t, sd_power_ramon_get(uint32_t * p_ramon)); + +/**@brief Set bits in the NRF_POWER->GPREGRET register. + * + * @param[in] gpregret_msk Bits to be set in the GPREGRET register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_GPREGRET_SET, uint32_t, sd_power_gpregret_set(uint32_t gpregret_msk)); + +/**@brief Clear bits in the NRF_POWER->GPREGRET register. + * + * @param[in] gpregret_msk Bits to be clear in the GPREGRET register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_GPREGRET_CLR, uint32_t, sd_power_gpregret_clr(uint32_t gpregret_msk)); + +/**@brief Get contents of the NRF_POWER->GPREGRET register. + * + * @param[out] p_gpregret Contents of the GPREGRET register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_GPREGRET_GET, uint32_t, sd_power_gpregret_get(uint32_t *p_gpregret)); + +/**@brief Sets the DCDC mode. + * + * Depending on the internal state of the SoftDevice, the mode change may not happen immediately. + * The DCDC mode switch will be blocked when occurring in close proximity to radio transmissions. When + * the radio transmission is done, the last mode will be used. + * + * @param[in] dcdc_mode The mode of the DCDC. + * + * @retval ::NRF_SUCCESS + * @retval ::NRF_ERROR_INVALID_PARAM The DCDC mode is invalid. + */ +SVCALL(SD_POWER_DCDC_MODE_SET, uint32_t, sd_power_dcdc_mode_set(nrf_power_dcdc_mode_t dcdc_mode)); + +/**@brief Request the high frequency crystal oscillator. + * + * Will start the high frequency crystal oscillator, the startup time of the crystal varies + * and the ::sd_clock_hfclk_is_running function can be polled to check if it has started. + * + * @see sd_clock_hfclk_is_running + * @see sd_clock_hfclk_release + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_CLOCK_HFCLK_REQUEST, uint32_t, sd_clock_hfclk_request(void)); + +/**@brief Releases the high frequency crystal oscillator. + * + * Will stop the high frequency crystal oscillator, this happens immediately. + * + * @see sd_clock_hfclk_is_running + * @see sd_clock_hfclk_request + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_CLOCK_HFCLK_RELEASE, uint32_t, sd_clock_hfclk_release(void)); + +/**@brief Checks if the high frequency crystal oscillator is running. + * + * @see sd_clock_hfclk_request + * @see sd_clock_hfclk_release + * + * @param[out] p_is_running 1 if the external crystal oscillator is running, 0 if not. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_CLOCK_HFCLK_IS_RUNNING, uint32_t, sd_clock_hfclk_is_running(uint32_t * p_is_running)); + +/**@brief Waits for an application event. + * + * An application event is either an application interrupt or a pended interrupt when the + * interrupt is disabled. When the interrupt is enabled it will be taken immediately since + * this function will wait in thread mode, then the execution will return in the application's + * main thread. When an interrupt is disabled and gets pended it will return to the application's + * thread main. The application must ensure that the pended flag is cleared using + * ::sd_nvic_ClearPendingIRQ in order to sleep using this function. This is only necessary for + * disabled interrupts, as the interrupt handler will clear the pending flag automatically for + * enabled interrupts. + * + * In order to wake up from disabled interrupts, the SEVONPEND flag has to be set in the Cortex-M0 + * System Control Register (SCR). @sa CMSIS_SCB + * + * @note If an application interrupt has happened since the last time sd_app_evt_wait was + * called this function will return immediately and not go to sleep. This is to avoid race + * conditions that can occur when a flag is updated in the interrupt handler and processed + * in the main loop. + * + * @post An application interrupt has happened or a interrupt pending flag is set. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_APP_EVT_WAIT, uint32_t, sd_app_evt_wait(void)); + +/**@brief Get PPI channel enable register contents. + * + * @param[out] p_channel_enable The contents of the PPI CHEN register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_CHANNEL_ENABLE_GET, uint32_t, sd_ppi_channel_enable_get(uint32_t * p_channel_enable)); + +/**@brief Set PPI channel enable register. + * + * @param[in] channel_enable_set_msk Mask containing the bits to set in the PPI CHEN register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_CHANNEL_ENABLE_SET, uint32_t, sd_ppi_channel_enable_set(uint32_t channel_enable_set_msk)); + +/**@brief Clear PPI channel enable register. + * + * @param[in] channel_enable_clr_msk Mask containing the bits to clear in the PPI CHEN register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_CHANNEL_ENABLE_CLR, uint32_t, sd_ppi_channel_enable_clr(uint32_t channel_enable_clr_msk)); + +/**@brief Assign endpoints to a PPI channel. + * + * @param[in] channel_num Number of the PPI channel to assign. + * @param[in] evt_endpoint Event endpoint of the PPI channel. + * @param[in] task_endpoint Task endpoint of the PPI channel. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_CHANNEL The channel number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_CHANNEL_ASSIGN, uint32_t, sd_ppi_channel_assign(uint8_t channel_num, const volatile void * evt_endpoint, const volatile void * task_endpoint)); + +/**@brief Task to enable a channel group. + * + * @param[in] group_num Number of the channel group. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_GROUP_TASK_ENABLE, uint32_t, sd_ppi_group_task_enable(uint8_t group_num)); + +/**@brief Task to disable a channel group. + * + * @param[in] group_num Number of the PPI group. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_GROUP_TASK_DISABLE, uint32_t, sd_ppi_group_task_disable(uint8_t group_num)); + +/**@brief Assign PPI channels to a channel group. + * + * @param[in] group_num Number of the channel group. + * @param[in] channel_msk Mask of the channels to assign to the group. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_GROUP_ASSIGN, uint32_t, sd_ppi_group_assign(uint8_t group_num, uint32_t channel_msk)); + +/**@brief Gets the PPI channels of a channel group. + * + * @param[in] group_num Number of the channel group. + * @param[out] p_channel_msk Mask of the channels assigned to the group. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_GROUP_GET, uint32_t, sd_ppi_group_get(uint8_t group_num, uint32_t * p_channel_msk)); + +/**@brief Configures the Radio Notification signal. + * + * @note + * - The notification signal latency depends on the interrupt priority settings of SWI used + * for notification signal. + * - In the period between the ACTIVE signal and the start of the Radio Event, the SoftDevice + * will interrupt the application to do Radio Event preparation. + * - Using the Radio Notification feature may limit the bandwidth, as the SoftDevice may have + * to shorten the connection events to have time for the Radio Notification signals. + * + * @param[in] type Type of notification signal. + * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE shall be used to turn off radio + * notification. Using @ref NRF_RADIO_NOTIFICATION_DISTANCE_NONE is + * recommended (but not required) to be used with + * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE. + * + * @param[in] distance Distance between the notification signal and start of radio activity. + * This parameter is ignored when @ref NRF_RADIO_NOTIFICATION_TYPE_NONE or + * @ref NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE is used. + * + * @retval ::NRF_ERROR_INVALID_PARAM The group number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_RADIO_NOTIFICATION_CFG_SET, uint32_t, sd_radio_notification_cfg_set(nrf_radio_notification_type_t type, nrf_radio_notification_distance_t distance)); + +/**@brief Encrypts a block according to the specified parameters. + * + * 128-bit AES encryption. + * + * @param[in, out] p_ecb_data Pointer to the ECB parameters' struct (two input + * parameters and one output parameter). + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_ECB_BLOCK_ENCRYPT, uint32_t, sd_ecb_block_encrypt(nrf_ecb_hal_data_t * p_ecb_data)); + +/**@brief Gets any pending events generated by the SoC API. + * + * The application should keep calling this function to get events, until ::NRF_ERROR_NOT_FOUND is returned. + * + * @param[out] p_evt_id Set to one of the values in @ref NRF_SOC_EVTS, if any events are pending. + * + * @retval ::NRF_SUCCESS An event was pending. The event id is written in the p_evt_id parameter. + * @retval ::NRF_ERROR_NOT_FOUND No pending events. + */ +SVCALL(SD_EVT_GET, uint32_t, sd_evt_get(uint32_t * p_evt_id)); + +/**@brief Get the temperature measured on the chip + * + * This function will block until the temperature measurement is done. + * It takes around 50us from call to return. + * + * @note Pan #28 in PAN-028 v 1.6 "Negative measured values are not represented correctly" is corrected by this function. + * + * @param[out] p_temp Result of temperature measurement. Die temperature in 0.25 degrees celsius. + * + * @retval ::NRF_SUCCESS A temperature measurement was done, and the temperature was written to temp + */ +SVCALL(SD_TEMP_GET, uint32_t, sd_temp_get(int32_t * p_temp)); + +/**@brief Flash Write + * + * Commands to write a buffer to flash + * + * This call initiates the flash access command, and its completion will be communicated to the + * application with exactly one of the following events: + * - NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. + * - NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. + * + * @note + * - This call takes control over the radio and the CPU during flash erase and write to make sure that + * they will not interfere with the flash access. This means that all interrupts will be blocked + * for a predictable time (depending on the NVMC specification in nRF51 Series Reference Manual + * and the command parameters). + * + * + * @param[in] p_dst Pointer to start of flash location to be written. + * @param[in] p_src Pointer to buffer with data to be written + * @param[in] size Number of 32-bit words to write. Maximum size is 256 32bit words. + * + * @retval ::NRF_ERROR_INVALID_ADDR Tried to write to a non existing flash address, or p_dst or p_src was unaligned. + * @retval ::NRF_ERROR_BUSY The previous command has not yet completed. + * @retval ::NRF_ERROR_INVALID_LENGTH Size was 0, or more than 256 words. + * @retval ::NRF_ERROR_FORBIDDEN Tried to write to or read from protected location. + * @retval ::NRF_SUCCESS The command was accepted. + */ +SVCALL(SD_FLASH_WRITE, uint32_t, sd_flash_write(uint32_t * const p_dst, uint32_t const * const p_src, uint32_t size)); + + +/**@brief Flash Erase page + * + * Commands to erase a flash page + * + * This call initiates the flash access command, and its completion will be communicated to the + * application with exactly one of the following events: + * - NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. + * - NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. + * + * @note + * - This call takes control over the radio and the CPU during flash erase and write to make sure that + * they will not interfere with the flash access. This means that all interrupts will be blocked + * for a predictable time (depending on the NVMC specification in nRF51 Series Reference Manual + * and the command parameters). + * + * + * @param[in] page_number Pagenumber of the page to erase + * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. + * @retval ::NRF_ERROR_INVALID_ADDR Tried to erase to a non existing flash page. + * @retval ::NRF_ERROR_BUSY The previous command has not yet completed. + * @retval ::NRF_ERROR_FORBIDDEN Tried to erase a protected page. + * @retval ::NRF_SUCCESS The command was accepted. + */ +SVCALL(SD_FLASH_PAGE_ERASE, uint32_t, sd_flash_page_erase(uint32_t page_number)); + + +/**@brief Flash Protection set + * + * Commands to set the flash protection registers PROTENSETx + * + * @note To read the values in PROTENSETx you can read them directly. They are only write-protected. + * + * @param[in] protenset0 Value to be written to PROTENSET0 + * @param[in] protenset1 Value to be written to PROTENSET1 + * + * @retval ::NRF_ERROR_FORBIDDEN Tried to protect the SoftDevice + * @retval ::NRF_SUCCESS Values successfully written to PROTENSETx + */ +SVCALL(SD_FLASH_PROTECT, uint32_t, sd_flash_protect(uint32_t protenset0, uint32_t protenset1)); + +/**@brief Opens a session for radio requests. + * + * @note Only one session can be open at a time. + * @note p_radio_signal_callback(NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) will be called when the radio timeslot + * starts. From this point the NRF_RADIO and NRF_TIMER0 peripherals can be freely accessed + * by the application. + * @note p_radio_signal_callback(NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0) is called whenever the NRF_TIMER0 + * interrupt occurs. + * @note p_radio_signal_callback(NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO) is called whenever the NRF_RADIO + * interrupt occurs. + * @note p_radio_signal_callback() will be called at ARM interrupt priority level 0. This + * implies that none of the sd_* API calls can be used from p_radio_signal_callback(). + * + * @param[in] p_radio_signal_callback The signal callback. + * + * @retval ::NRF_ERROR_INVALID_ADDR p_radio_signal_callback is an invalid function pointer. + * @retval ::NRF_ERROR_BUSY If session cannot be opened. + * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. + * @retval ::NRF_SUCCESS Otherwise. + */ + SVCALL(SD_RADIO_SESSION_OPEN, uint32_t, sd_radio_session_open(nrf_radio_signal_callback_t p_radio_signal_callback)); + +/**@brief Closes a session for radio requests. + * + * @note Any current radio timeslot will be finished before the session is closed. + * @note If a radio timeslot is scheduled when the session is closed, it will be canceled. + * @note The application cannot consider the session closed until the NRF_EVT_RADIO_SESSION_CLOSED + * event is received. + * + * @retval ::NRF_ERROR_FORBIDDEN If session not opened. + * @retval ::NRF_ERROR_BUSY If session is currently being closed. + * @retval ::NRF_SUCCESS Otherwise. + */ + SVCALL(SD_RADIO_SESSION_CLOSE, uint32_t, sd_radio_session_close(void)); + + /**@brief Requests a radio timeslot. + * + * @note The timing of the radio timeslot is specified by p_request->distance_us. For the first + * request in a session, p_request->distance_us is required to be 0 by convention, and + * the timeslot is scheduled at the first possible opportunity. All following radio timeslots are + * requested with a distance of p_request->distance_us measured from the start of the + * previous radio timeslot. + * @note A too small p_request->distance_us will lead to a NRF_EVT_RADIO_BLOCKED event. + * @note Timeslots scheduled too close will lead to a NRF_EVT_RADIO_BLOCKED event. + * @note See the SoftDevice Specification for more on radio timeslot scheduling, distances and lengths. + * @note If an opportunity for the first radio timeslot is not found before 100ms after the call to this + * function, it is not scheduled, and instead a NRF_EVT_RADIO_BLOCKED event is sent. + * The application may then try to schedule the first radio timeslot again. + * @note Successful requests will result in nrf_radio_signal_callback_t(NRF_RADIO_CALLBACK_SIGNAL_TYPE_START). + * Unsuccessful requests will result in a NRF_EVT_RADIO_BLOCKED event, see @ref NRF_SOC_EVTS. + * @note The jitter in the start time of the radio timeslots is +/- NRF_RADIO_START_JITTER_US us. + * @note The nrf_radio_signal_callback_t(NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) call has a latency relative to the + * specified radio timeslot start, but this does not affect the actual start time of the timeslot. + * @note NRF_TIMER0 is reset at the start of the radio timeslot, and is clocked at 1MHz from the high frequency + * (16 MHz) clock source. If p_request->hfclk_force_xtal is true, the high frequency clock is + * guaranteed to be clocked from the external crystal. + * @note The SoftDevice will neither access the NRF_RADIO peripheral nor the NRF_TIMER0 peripheral + * during the radio timeslot. + * + * @param[in] p_request Pointer to the request parameters. + * + * @retval ::NRF_ERROR_FORBIDDEN If session not opened or the session is not IDLE. + * @retval ::NRF_ERROR_INVALID_ADDR If the p_request pointer is invalid. + * @retval ::NRF_ERROR_INVALID_PARAM If the parameters of p_request are not valid. + * @retval ::NRF_SUCCESS Otherwise. + */ + SVCALL(SD_RADIO_REQUEST, uint32_t, sd_radio_request(nrf_radio_request_t * p_request )); + +/** @} */ + +#endif // NRF_SOC_H__ + +/**@} */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_HRM1017/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_svc.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,33 @@ +#ifndef NRF_SVC__ +#define NRF_SVC__ + +#ifdef SVCALL_AS_NORMAL_FUNCTION +#define SVCALL(number, return_type, signature) return_type signature +#else + +#ifndef SVCALL +#if defined (__CC_ARM) +#define SVCALL(number, return_type, signature) return_type __svc(number) signature +#elif defined (__GNUC__) +#define SVCALL(number, return_type, signature) \ + _Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \ + _Pragma("GCC diagnostic ignored \"-Wunused-function\"") \ + __attribute__((naked)) static return_type signature \ + { \ + __asm( \ + "svc %0\n" \ + "bx r14" : : "I" (number) : "r0" \ + ); \ + } +#elif defined (__ICCARM__) +#define PRAGMA(x) _Pragma(#x) +#define SVCALL(number, return_type, signature) \ +PRAGMA(swi_number = number) \ + __swi return_type signature; +#else +#define SVCALL(number, return_type, signature) return_type signature +#endif +#endif // SVCALL + +#endif // SVCALL_AS_NORMAL_FUNCTION +#endif // NRF_SVC__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_HRM1017/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/softdevice_assert.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + +/** @brief Utilities for verifying program logic + */ + +#ifndef SOFTDEVICE_ASSERT_H_ +#define SOFTDEVICE_ASSERT_H_ + +#include <stdint.h> + +/** @brief This function handles assertions. + * + * + * @note + * This function is called when an assertion has triggered. + * + * + * @param line_num The line number where the assertion is called + * @param file_name Pointer to the file name + */ +void assert_softdevice_callback(uint16_t line_num, const uint8_t *file_name); + + +/*lint -emacro(506, ASSERT) */ /* Suppress "Constant value Boolean */ +/*lint -emacro(774, ASSERT) */ /* Suppress "Boolean within 'if' always evaluates to True" */ \ +/** @brief Check intended for production code + * + * Check passes if "expr" evaluates to true. */ +#define ASSERT(expr) \ +if (expr) \ +{ \ +} \ +else \ +{ \ + assert_softdevice_callback((uint16_t)__LINE__, (uint8_t *)__FILE__); \ + /*lint -unreachable */ \ +} + +#endif /* SOFTDEVICE_ASSERT_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_HRM1017/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_softdevice.hex Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,5290 @@ +:020000040000FA +:10000000C0070000D1060000D1000000B1060000CA +:1000100000000000000000000000000000000000E0 +:100020000000000000000000000000005107000078 +:100030000000000000000000DB000000E500000000 +:10004000EF000000F9000000030100000D010000B6 +:1000500017010000210100002B0100003501000004 +:100060003F01000049010000530100005D01000054 +:1000700067010000710100007B01000085010000A4 +:100080008F01000099010000A3010000AD010000F4 +:10009000B7010000C1010000CB010000D501000044 +:1000A000DF010000E9010000F3010000FD01000094 +:1000B00007020000110200001B02000025020000E0 +:1000C0001FB5C046C04600F0EFFA04B00FB41FBD24 +:1000D00008205A49096809580847382057490968CB +:1000E000095808473C2055490968095808474020E5 +:1000F0005249096809580847442050490968095875 +:10010000084748204D490968095808474C204B4981 +:10011000096809580847502048490968095808479C +:100120005420464909680958084758204349096836 +:10013000095808475C204149096809580847602068 +:100140003E4909680958084764203C49096809582C +:100150000847682039490968095808476C20374919 +:100160000968095808477020344909680958084740 +:100170007420324909680958084778202F490968CE +:10018000095808477C202D490968095808478020EC +:100190002A490968095808478420284909680958E4 +:1001A0000847882025490968095808478C202349B1 +:1001B00009680958084790202049096809580847E4 +:1001C00094201E4909680958084798201B49096866 +:1001D000095808479C201949096809580847A02070 +:1001E0001649096809580847A4201449096809589C +:1001F0000847A8201149096809580847AC200F4949 +:10020000096809580847B0200C4909680958084787 +:10021000B4200A49096809580847B82007490968FD +:1002200009580847BC2005490968095808470000D3 +:1002300003480449024A034B7047000000000020B5 +:10024000C0070000C00700000122D84B5A6000BF61 +:10025000D74A1268002AFBD0016000BFD44A126856 +:10026000002AFBD00022D14B5A6000BFD04A12684E +:10027000002AFBD07047F0B505460E46174600240D +:1002800006E0A200B158A2005019FFF7DDFF641C80 +:10029000BC42F6D30020F0BD0120C043C549086030 +:1002A000401048607047014601229204086890425D +:1002B00001D9102070470020FCE7F0B505460C4638 +:1002C0001646002706E028462168FFF7BDFF2D1DD2 +:1002D000241D7F1CB742F6D3F0BD70B505460C4611 +:1002E0002E460BE0304600F075F9FF2C01D80024B3 +:1002F00001E0FF3C013C012080023618002CF1D1C6 +:1003000070BD0146012292044868904201D909203B +:100310007047A9484069401C01D10F20F8E7002030 +:10032000F6E7FEB504462068030000F037FA05043E +:100330002B4249598B00201DFFF7E3FF0546002D96 +:1003400001D02846FEBDFFF7A7FF0120C00200F044 +:1003500041F9042221469948FFF78DFF002801D07A +:100360000320EFE708222146944800F06DF90028A9 +:1003700006D1002192480068FFF766FF00F00CF9F3 +:100380000320DFE7A768E6686068019031463846D9 +:10039000FFF7A3FF324638460199FFF78EFFB20000 +:1003A0003846019900F050F9002800D1CAE703202F +:1003B000C8E700F0E3F9834800688349086041E03A +:1003C00060680190E668A0680090B200009901980A +:1003D00000F03AF90746002F00D1B3E70E20B1E74D +:1003E000201DFFF760FF0546002D01D02846A9E734 +:1003F0006068002807D1FFF74FFF0320800200F05C +:10040000E9F800F0C9F8FFF747FF0120C00200F04B +:10041000E1F8042221466948FFF72DFF002801D0AA +:1004200003208FE708222146644800F00DF90028D8 +:1004300006D1002162480068FFF706FF00F0ACF823 +:1004400003207FE700BF00207CE770B505460C461F +:10045000182D04D12068FFF764FF206002E001201E +:10046000206000BF00BF70BDF0B589B05248406940 +:1004700003905248806881000398081802900398FE +:10048000000B01900121090302984018401E000B47 +:1004900000900124002520462946019A00F0C4F866 +:1004A0000022401E91410791069001260027304608 +:1004B0003946009A00F0B8F80022401E914105919B +:1004C0000490049BDB43059AD2430698184307998E +:1004D00011430791069037490698086007984860CD +:1004E00009B0F0BD70B53448446934488568466841 +:1004F000AA003146204600F0A7F8002801D00020CD +:1005000070BD0120FCE72D484068002801D0012083 +:1005100000E000200546FFF7E5FF002807D0FFF7C1 +:10052000BBFE0320800200F055F800F035F8FFF71D +:100530009BFF002D0ED020484669204884684768FC +:1005400021463046FFF7C9FE224639463046FFF7BE +:10055000B4FE00BF00F020F810B5184844681A48EF +:100560000460204600F0DCF810BD15480068006803 +:10057000401C01D100BFFEE710480068002802D0EF +:10058000042806D101E0FFF7BEFFFFF7E5FF00BF3B +:10059000FEE700BF00BFFEE7BFF34F8F0B480C49DB +:1005A000C860BFF34F8F00BFFEE7000000E50140C9 +:1005B00000E40140000600400010001000080000A8 +:1005C000B8070000BC070000000000200400FA0586 +:1005D00000ED00E010B50146104B1A6808460223F2 +:1005E0000F4C636000BF0F4B1B68002BFBD0531CEC +:1005F00004D0904202D20A4B186101E0084B986087 +:1006000000BF084B1B68002BFBD00023044C636029 +:1006100000BF044B1B68002BFBD010BD0010001066 +:1006200000E5014000E4014010B5202A04DB01464A +:10063000203A9140002010BD914020239C1A03468F +:10064000E3401943904010BD034610B50B439B0790 +:100650000FD1042A0DD308C810C9121FA342F8D025 +:1006600018BA21BA884201D9012010BD0020C04328 +:1006700010BD002A03D0D30703D0521C07E000208E +:1006800010BD03780C78401C491C1B1B07D1037854 +:100690000C78401C491C1B1B01D1921EF1D118463D +:1006A00010BD70477047704710B500F007F810BDD7 +:1006B000014B1B68DB6818470000002019481A49E5 +:1006C0007047FFF7FBFFFFF7FBFC00BD20BFFDE716 +:1006D0001649174C24688C420BD1164B1B68994263 +:1006E0000CD1154B154A1360186810498842EDD09B +:1006F0000AE0134880F30888124B18470F4A13602A +:1007000018680A498842E1D080F308880E49884277 +:1007100004DD0E48026802210A4302605B68184744 +:100720000346DFE7C0070000C0070000FFFFFFFF30 +:10073000000C000014100010001000000000002049 +:10074000000400206B05000000200020240500406C +:100750000D48704502D1EFF3098101E0EFF3088104 +:10076000886902380078182802D1C046074A104725 +:10077000074A12682C3212681047000000B5054B7A +:10078000054A9B58984700BDFDFFFFFF4B04000042 +:1007900000000020001000000400000030B4744687 +:1007A000641E2578641CAB4204D3635D5B00E318D0 +:1007B00030BC18471D46F8E7000C00000010000090 +:10100000901D002079500100ED3D0000DF4F0100F0 +:1010100000000000000000000000000000000000D0 +:10102000000000000000000000000000E950010086 +:101030000000000000000000ED3D0000ED3D00005C +:10104000555101005B510100ED3D0000ED3D0000F8 +:10105000ED3D0000ED3D0000ED3D0000ED3D0000E8 +:1010600061510100ED3D0000ED3D000067510100C0 +:10107000ED3D00006D5101007351010079510100F7 +:10108000ED3D0000ED3D0000ED3D0000ED3D0000B8 +:10109000ED3D0000ED3D0000ED3D0000ED3D0000A8 +:1010A0007F51010085510100ED3D0000ED3D000044 +:1010B000ED3D0000ED3D0000ED3D0000ED3D000088 +:1010C00000F002F813F0B9FF0CA030C8083824185B +:1010D0002D18A246671EAB4654465D46AC4201D170 +:1010E00013F0ABFF7E460F3E0FCCB64601263342CF +:1010F00000D0FB1AA246AB463343184744410100D7 +:1011000074410100103A02D378C878C1FAD8520766 +:1011100001D330C830C101D504680C6070470000AD +:101120000023002400250026103A01D378C1FBD803 +:10113000520700D330C100D50B6070471FB5C046C1 +:10114000C04613F01BFF04B00FB41FBD82690249F3 +:1011500081610248104470476111000001000000E5 +:1011600001B41EB400B510F02FFC01B401988646FE +:1011700001BC01B01EBD0000F0B4404649465246D5 +:101180005B460FB402A0013001B50648004700BF1E +:1011900001BC86460FBC8046894692469B46F0BC01 +:1011A00070470000C1100000401E00BF00BF00BF1C +:1011B00000BF00BF00BF00BF00BF00BF00BF00BF37 +:1011C00000BFF1D17047000070B505460C461646C9 +:1011D00002E00FCC0FC5103E102EFAD2082E02D31B +:1011E00003CC03C5083E042E07D301CC01C5361F2E +:1011F00003E021782970641C6D1C761EF9D270BD45 +:101200008307FF22DB0E9A408907090E99400028C8 +:101210000BDA0007000F0838830828489B001B18CA +:10122000D86990430843D8617047830824489B00DD +:101230001B181868904308431860704710B504469F +:1012400000210120FFF7DCFF00211820FFF7D8FF65 +:1012500000210B20FFF7D4FF02211920FFF7D0FF58 +:1012600002210D20FFF7CCFF02210E20FFF7C8FF5F +:1012700002210F20FFF7C4FF0221C81FFFF7C0FFA4 +:1012800003211620FFF7BCFF03211520FFF7B8FF4D +:10129000204600F019F8002010BD4F210180704752 +:1012A00010B500F03AF810BD0648704710B500F0D0 +:1012B00035F810BD704770477047000000ED00E042 +:1012C00000E400E003F900C330B50446374D95B0A3 +:1012D00007202870A81CFFF7E0FF5920A880344899 +:1012E00001F020FC0546072000F0DCF929462F48D4 +:1012F00000F08CFA641E072C0AD830216846017071 +:10130000847001F0DDFA002802D009A800F0DDFCAD +:10131000284601F083FE15B030BD7047F8B5234E66 +:101320000446B61E307801270D46002807D0204617 +:1013300060380B2808D8204601F096FB2BE0602C83 +:10134000F9D01C480860F8BD20466C38032803D843 +:10135000204601F0CBFB1EE0204670381F2803D842 +:10136000204600F037F816E0204690380F2803D8C2 +:10137000204600F0BBF80EE02046A0380F2803D826 +:10138000204600F023F906E02046B0380F2804D8A4 +:10139000204600F000F9286000E02F60602CD2D1D8 +:1013A00028680028CFD13770F8BD00001A0000204F +:1013B000C33300000130000070477047704770472A +:1013C000704770477047704710B5012801D100F091 +:1013D00042FA10BD10B57038030013F0EBFE150C87 +:1013E00012161E22252C33383D41454950555C6468 +:1013F0006C747B8085004A680878114603F081FF91 +:1014000010BD086803F0F9FF10BD0C790B7B8A68EA +:101410000868214604F005F810BD086804F07EF85D +:1014200010BD03F05BFC10BD08884A6880B211460D +:1014300004F043FA10BD0A790888114680B204F01E +:1014400091FA10BD087840B204F09CFA10BD0888EB +:1014500080B204F0B8FA10BD086804F0C7FA10BDF5 +:10146000086804F0DFFA10BD086804F00AFB10BD3C +:10147000088982B209C9194604F034FB10BD05C9B8 +:10148000114604F082FB10BD08884A6880B21146FC +:1014900004F0A0FB10BD0B7908888A6880B2194659 +:1014A00004F0FDFB10BD0B7908888A6880B21946EC +:1014B00004F0B3FC10BD08884B688A6880B21946F6 +:1014C00004F0F3FC10BD08884A6880B2114604F0AD +:1014D0003EFD10BD088880B204F056FD10BD08889E +:1014E00080B204F076FD10BD012010BD10B590381B +:1014F000030013F05FFE09060F161D242C363F462D +:101500004E0088888A6883B20888194680B205F040 +:1015100093F910BD08884A6880B2114605F0E9F9D0 +:1015200010BD08884A6880B2114605F02DFA10BD3A +:1015300008884A6880B2114605F063FA10BD088831 +:101540004B688A6880B2194605F094FA10BD088984 +:1015500082B2888883B20888194680B205F0C9FA39 +:1015600010BD08894B6882B20888194680B205F020 +:10157000FEFA10BD08884A6880B2114605F02EFBBD +:1015800010BD888882B20888114680B205F0C2FB7F +:1015900010BD012010BD10B5B02805D0B12808D06D +:1015A000B2280BD0012010BD088880B205F0A6FE3D +:1015B00010BD088880B205F0D1FE10BD08884B68C8 +:1015C0008A6880B2194605F0DAFE10BD10B5A03861 +:1015D000030013F0EFFD0B070E172028323C434D9C +:1015E000545D65004B6808788A68194607F017FA59 +:1015F00010BD88888A6883B20888194680B207F0CF +:1016000023FA10BD08884C68CB688A6880B22146EE +:1016100007F02AFA10BD08884B688A6880B219461C +:1016200007F044FA10BD8888CB6884B208888A68BD +:1016300080B2214607F064FA10BD8888CB6884B276 +:1016400008888A6880B2214607F089FA10BD0888A8 +:101650004A6880B2114607F0BDFA10BD088982B20F +:10166000888883B20888194680B207F0BDFA10BD99 +:1016700008884A6880B2114607F0DAFA10BD088976 +:101680004B6882B20888194680B207F057FB10BD3C +:1016900008884B688A6880B2194607F014FC10BDB0 +:1016A000012010BD10B507F0FAFC0FF0A7FF00F005 +:1016B00007F810F0F5F808F0F5F908F081F910BD19 +:1016C00001202B49C00308602A490020087003202C +:1016D0002949800288607047F8B5264D044628786D +:1016E000A04207D0002C05D0002803D023A14D2014 +:1016F00013F06FFC2878A04213D02C700325002330 +:101700002349AD021C48002C27D01B4A214E4032F1 +:10171000214F012C06D0022C13D018A16E2013F0FB +:1017200058FCF8BD0B6002230B604E6185601B49BD +:1017300011625762091D91621749091DD162456006 +:10174000F8BD0B6003230B604E610121C90281606B +:10175000134B9362D7624160F8BD0B600B608560EC +:10176000F8BD10B505A1772013F033FC10BD0000C3 +:1017700080E100E02000002000F501407372635C0E +:1017800068616C5F63636D5F6161722E630000006E +:1017900000F500407C01002000F0004000110040F6 +:1017A000488100401CB50446002069460870204668 +:1017B00009F0F6F86946204608F0B4FF002803D186 +:1017C000FBA1B62013F005FC01A9204608F009FF93 +:1017D000002803D1F6A1BB2013F0FBFB684600787C +:1017E0001CBD70B5F74D002428462C76203084713E +:1017F000C47113F0EDFC2846403804702030847327 +:10180000847484762C74AC7070BDEAE710B50C4615 +:10181000ED4982888A8042884A80007808700846AC +:101820000A38847008F0B3FEFFF7DBFF20460AF0A9 +:101830002FFAE44AE0321146383908461446813816 +:1018400009F020F92146E0480BF0C2FC09F09FF8AE +:1018500013F0BEFC10BD10B50120FFF7ADFD10BDAB +:10186000F8B509F083FDD84DD64C0A3D022802D0C8 +:10187000207C00287CD0207E0026102819D1A0785A +:10188000002803D0CAA1D14813F0A3FBCD48E83803 +:10189000817A89070DD50146267160398989E180F1 +:1018A000C17A217281896181C089A0810120A070E3 +:1018B0002676C44F203FB87C002859D1C4486946D9 +:1018C000808908F02FFF002805D0694668780978DC +:1018D0004018687004E0BD48B5A11D3013F079FBD5 +:1018E000207C002838D0BA488189FF300930406D0B +:1018F0008089814204D0B548ADA1223013F069FB44 +:10190000B348808908F0B4FF002804D1AF48A8A1EB +:10191000283013F05EFB09F022F800281CD0AC48F8 +:101920008089FFF73FFF697840186870A548403804 +:10193000416D20318A7C012A0DD1A54A3E779289DA +:10194000C287C87C20700120B876207E102801D084 +:10195000282800D1267626746978002908D09C486A +:101960008289FF300930C28601870120B8746E7009 +:1019700009F0CCFC002805D1207C002802D0A878F2 +:1019800001F0F4F8F8BDF8B50F460446FFF768FF1C +:101990008C4D403D28788B4E002813D0002F10D15D +:1019A000307E002804D0FF2081A1C63013F011FB47 +:1019B0002C22A91C204613F06FF90E202070002065 +:1019C00028708FE07F4D203DA87B002818D0002F85 +:1019D000F7D1307E102808D0282806D0002804D05F +:1019E000FF2073A1D23013F0F4FA0120E070E87BFD +:1019F000A070287C60700F2020700020A87371E018 +:101A00000121204608F0E4FF002807D0307C0028A0 +:101A100051D13946204608F0DBFFF8BDA97C694862 +:101A20000C38009068480A38002913D0017805293D +:101A300010D2002F56D1491C0170002666700D206F +:101A40002070012028750622A01C009913F024F9AB +:101A5000AE7447E05C4800210A380170B078002875 +:101A600014D0002F3ED1307E002803D050A1594819 +:101A700013F0AFFA002565700120524920700A2248 +:101A8000091DA01C13F008F9B5702BE0394620465B +:101A90000BF008FB002825D1A87C002805D0002FDA +:101AA00020D149480A380178C5E7A87E002802D02D +:101AB000307C002801D00020F8BD002F12D1307EEC +:101AC000002804D08F203AA1800013F082FA00266B +:101AD00066700A203B4920700622091FA01C13F0E3 +:101AE000DBF8AE760120F8BD10B53648017E00293E +:101AF00008D1007C012805D001210020FFF743FF19 +:101B0000002801D0072010BD012010BD10B5012410 +:101B10000AF006F90443FFF7E7FF044308F038FF33 +:101B200001462143084610BDF8B51D4614460E4631 +:101B300008F077FD002807D0684608F07DFD0028F2 +:101B400003D0002C07D101E00120F8BD9B2018A193 +:101B5000800013F03EFA08F01BFDA04204D21D489D +:101B600013A1583013F035FA009808F089F931467E +:101B7000009808F097F9E2B22946009808F04EFB69 +:101B800008F06CFD002804D19F2009A1800013F00B +:101B900020FA08F0FFFE0E4800244030417C002966 +:101BA00002D044740AF0A7F90948C480CCE70000C9 +:101BB0007372635C6C6C5F6374726C2E73302E6333 +:101BC00000000000200300202C00002082060000FE +:101BD000D80100201502000010B50179002908D0B5 +:101BE00001290BD0FF20FE49043013F0F2F9002048 +:101BF00010BD831D42880488022103E042880488C6 +:101C0000831D01212046FFF78FFF10BDF8B51F4649 +:101C100015460E46044609F0A9FB022803D0F148F8 +:101C2000007C00281FD0F0488089208008F020FE2A +:101C3000002803D1EA49ED4813F0CBF905246846A2 +:101C400008F021FE00280ED0009808F063F93070EB +:101C5000022809D0012807D008F055FE641E24068A +:101C6000240EECD10020F8BD3946009808F0EEFAB9 +:101C70002880002804D1AF20D949800013F0A9F9A9 +:101C800008F041FE002804D1D848D549193013F096 +:101C9000A0F90120F8BD38B50446831D821C6946B1 +:101CA000FFF7B4FF00280DD000206071684600786F +:101CB000012808D0022806D0FF20C949253013F09A +:101CC00088F9012038BD2071FBE700215BE670B583 +:101CD000C44C0546403C2078002803D1C148007E12 +:101CE000002804D0C120BE49C00013F072F9287842 +:101CF00008F085FF28780BF0C1FB0020207101203F +:101D000060713921E170207070BD70B5B54D044629 +:101D1000403D2878002803D1B248007E002804D036 +:101D20005F20AF49000113F054F9AF4E2188B0890C +:101D3000884203D109F01AFB022807D0022028713B +:101D4000012068713821E970287070BD7F2070769D +:101D5000A548E17820304174A17801740020EEE7B5 +:101D600010B5A04C403C207800280BD19D48007E47 +:101D7000002807D109F0FAFA032803D009F0FAFA8B +:101D8000032804D199489649653013F022F9954902 +:101D900000202031C8712071012060713A21E1706A +:101DA000207010BD70B58F4C0646403C207800284E +:101DB0000BD18C48007E002807D109F0D7FA032800 +:101DC00003D009F0D7FA032804D1884884497B302E +:101DD00013F0FFF8834D2035E87908280CD2E87914 +:101DE0001022000100196830314600F025FEE87924 +:101DF000401CE871002000E0072020710120607184 +:101E00003B21E170207070BDF8B5764D0446403D31 +:101E10002878002803D17348007E002803D0704939 +:101E2000734813F0D6F8704F2188B889884203D1DF +:101E300009F09CFA022801D0022022E03E8C64883E +:101E40007200788CF98B521C944217D3694A514323 +:101E50009200504312F09AFF401EFF2180B2F531EC +:101E6000884200D90846844200D22046711C401C9A +:101E700012F08CFF761C7043401E86B2FE85EE8009 +:101E800000202871012068713C21E9702870F8BD9C +:101E9000F8B5544C0546403C2078002803D1514801 +:101EA000007E002804D052484D492C3813F091F898 +:101EB000A878002801D0012804D1A888FF21F53195 +:101EC000884204D959204649000113F082F8464E51 +:101ED0002988B089884203D109F048FA022807D03E +:101EE00002202071012060713621E1702070F8BD60 +:101EF0003D48002720308772A988B18501213176BD +:101F0000A978012900D00021817237484030407CF7 +:101F1000002801D009F0EFFF2771E3E770B5314CDD +:101F20000546403C2078002807D12E48007E002836 +:101F300003D109F01BFA002804D02D482849533852 +:101F400013F047F8287809F0EEFE002020710120F8 +:101F500060713021E170207070BD70B5214C054674 +:101F6000403C2078002803D11E48007E002804D081 +:101F70001F481B495F3013F02CF8287800280BD03D +:101F8000012809D0022807D06878402804D31848CF +:101F90001349663013F01DF8284609F0DEF90028D1 +:101FA00001D0002000E00C2020710120607134215C +:101FB000E170207070BD70B50A4C0546403C207839 +:101FC000002807D10748007E002803D109F0CEF988 +:101FD000002804D057200249000112F0FAFF0BE05C +:101FE000B01B000020030020D8010020AA0200003E +:101FF000B6050000C40900002978002913D00A2979 +:1020000011D014290FD01E290DD028290BD0322928 +:1020100009D04B2907D0642905D0FF2903D0FE49F8 +:10202000FE4812F0D6FF284609F0FCFE0020207181 +:10203000012060713321E170207070BD70B5F84CE3 +:1020400006462078251D002804D120464030007E19 +:10205000002804D05520F049000112F0BAFF3146A3 +:10206000002008F0A1FD2870002804D10622314686 +:10207000EC4812F011FE012060713221E1702070F5 +:1020800070BD70B5E64C05462078002804D1204686 +:102090004030007E002804D0A720DF49C00012F0A5 +:1020A00098FF00216956042914D0002912D0081D78 +:1020B00010D0001D0ED0001D0CD0001D0AD0001D38 +:1020C00008D00A3006D0283104D0D448D249443848 +:1020D00012F07FFFD448297801700120607131210E +:1020E000E170207070BD10B5CD4C2078002804D16F +:1020F00020464030007E002803D0C749CB4812F06C +:1021000068FF08F045FAE08008F00AFB2072002022 +:102110002071012060710521E170207010BDF8B5BB +:10212000BF4C07462034A07B25462035002805D12A +:10213000287E002802D1A878002804D0B748B649E4 +:10214000703812F046FF09F011F91026022822D14A +:10215000B7483988808988421DD1B1494839084635 +:102160000A7F6038807A002A03D080070CD40C20C4 +:102170000CE0800708D406200877AD484030407C4A +:10218000002801D009F0B7FE2E760020E0732674F7 +:102190000120A073F8BD0220F8E710B5A04C20780C +:1021A000002804D120464030007E002804D09B48FF +:1021B0009949823812F00DFF002020710E20A07086 +:1021C0000F20E070FF20A0710020C04320819548BF +:1021D000C01D0178A1728188A1814088E081012021 +:1021E0006071207010BD10B58D4C2078002804D18E +:1021F00020464030007E002803D087498D4812F0E9 +:10220000E8FE0821A01D0FF095FA002020710120A2 +:1022100060712B21E170207010BD70B5804D0446B7 +:102220002878002804D128464030007E002804D0B9 +:102230007A487949B13012F0CCFE7D48102221460F +:10224000303800F0F9FB7A481022A118203800F04D +:10225000F3FB774830380FF074FB754910221039C2 +:102260002C46A81D00F0E8FB002020710E20A07075 +:102270002A20E07001206071207070BDF8B5684CB4 +:1022800005462034A07B26462036002802D1307E29 +:10229000002804D067486049E53012F09AFEA9781A +:1022A000052912D0132910D014290ED015290CD0CD +:1022B0001A290AD0292908D03D2906D03B2904D063 +:1022C0005C485549ED3012F084FE28885A4988420E +:1022D00004D958485049F63012F07BFE09F046F810 +:1022E0000C212827022809D151482A888089904248 +:1022F00015D14B484838027E002A01D0E17310E026 +:10230000A97841760121017637760020E0734848AC +:102310004030407C002804D009F0EDFD01E00220AF +:10232000E07327740120A073F8BDF8B53C4F064652 +:1023300038783D1D002804D138464030007E002802 +:1023400004D089203449C00012F043FE31460120F8 +:1023500008F02AFC01242870002807D13048062202 +:1023600060303146054612F097FCAC717C71172045 +:10237000F8703C70F8BDF0B52B4F85B0403F3D7A0A +:10238000064627480078002804D13846A038007E49 +:10239000002804D0D3202049800012F01AFE3078A3 +:1023A000002806D0012804D022481B492C3812F0FE +:1023B00010FE082D4CD21C4820380190C46930789A +:1023C00000283FD0012804D01A4813491E3812F0C3 +:1023D00000FE294608310120884004430120A8401E +:1023E00020430090B1790E4C0802727969000919F6 +:1023F0001043FF3101318881B01C12F0AEFC7178BE +:1024000000020843A9000919C031C862387A401C8B +:1024100038720199009811E0B01B00007E050000A1 +:10242000E00200202500002000040020E706000054 +:10243000D801002079030000FF0E0000C8610020D1 +:10244000207108E029460831012088408443C5E70F +:10245000FE48072101710121FC480B224171C27025 +:10246000017005B0F0BD10B5F84C2078002804D1FB +:1024700020464030007E002803D0F549F54812F090 +:10248000A8FD12F0A5FE00202071012060710A2134 +:10249000E170207010BD10B509F0DDFB002804D0FC +:1024A000EC48EB49583812F094FD08F06FFA08F048 +:1024B00052F80AF07EFE002804D0BD20E4498000D6 +:1024C00012F087FD08F0B3FA002804D05F20E0493D +:1024D000C00012F07EFD12F07BFEDF480024047085 +:1024E000FFF77FF9D9480121047141710222C270BE +:1024F000017010BD70B5D54D04462878002804D170 +:1025000028464030007E002804D0F320D0498000C7 +:1025100012F05FFD20781F2801D8601C04D1CD483F +:10252000CB498F3012F055FD002028712078611CB6 +:1025300008F054FB012068712021E970287070BDFB +:10254000F8B5C24C0646207825464035002802D111 +:10255000287E002804D0BF48BD499C3012F039FDC8 +:102560003078012806D0002804D0BA48B8499D30F8 +:1025700012F02FFD012060710C20207130780027AF +:10258000B64E012808D008F0F1FE032867D008F005 +:10259000F1FE032871D076E008F0E8FE002803D1B0 +:1025A00008F0E8FE002804D008F0E0FE02283DD044 +:1025B00069E008F07EFA002865D0287C002862D106 +:1025C000A64802210C300FF03EF8002806D00F215B +:1025D000B089090212F0DAFBB18100E0B781012273 +:1025E00003219E4807F05AFE9C4808F006FCB0897B +:1025F00007F0D0FF002804D196489549B83012F072 +:10260000E8FCB089002108F0C9F9002804D09148FD +:102610008F49BC3012F0DDFC297F688B09F087FB05 +:1026200000282FD08B488A49C03015E008F0A2FE60 +:10263000002828D1287F002825D0012823D008F0A1 +:1026400038FA00281FD0297F688B09F070FB00281A +:1026500018D080487E49D33012F0BBFC12E0002035 +:1026600009F098FA00280ED12771287C00280AD199 +:10267000B089FFF797F806E0FFE7002009F08AFA33 +:10268000002800D127711B20E07001202070F8BDC8 +:1026900070B56E4D04462878002804D12846403095 +:1026A000007E002804D06B486949803012F091FC0C +:1026B00020781F2801D8601C04D166486449813005 +:1026C00012F087FC002028712078611C08F09AFA2B +:1026D000012068711A21E970287070BDF8B55B4D52 +:1026E000044628780C272E46403600280AD1307E32 +:1026F000002807D108F03AFE032803D008F03AFE7C +:10270000032804D153485249473012F062FC6079E3 +:10271000002801D001282FD1A079002801D001285C +:102720002AD1A07B002805D0012803D0022801D09F +:10273000032821D1607B40071ED0618801208003DF +:10274000814202D82288824201D920790CE0207986 +:10275000002804D0022805D0032803D004E0202953 +:1027600004D209E0A02A01D2012805D1208888429C +:1027700007D92079012804D0364835495C3012F059 +:1027800028FC20887083207930776079002802D077 +:10279000012803D00CE0324A002105E02B4A6032C8 +:1027A0009079002804D00121204608F086F90746D8 +:1027B00001202F7168711821E9702870F8BD70B57B +:1027C000224C05462078002804D120464030007E67 +:1027D000002803D01E49234812F0FBFB08F0C6FD79 +:1027E0000C2102280ED11D482A8883899A4219D1CA +:1027F0000246C032137F002B04D1807E0E2803D006 +:102800000F2801D0217103E00520107700202071EE +:102810000E20A0702E20E0702888E08001206071DA +:10282000207070BD0220F2E770B5084C0546207894 +:10283000002804D120464030007E002804D00948FA +:1028400003492C3812F0C5FB0EE00000E002002026 +:10285000B01B00003E03000000040020D80100204F +:1028600025000020D104000008F080FD0C21022882 +:102870000ED178482A8883899A421FD10646C036ED +:10288000327F002A04D1807E0E2803D00F2801D089 +:10289000217109E06F481022A91CEA3012F0FCF9FE +:1028A00004203077002020710E20A0702D20E070D1 +:1028B0002888E08001206071207070BD0220F2E75E +:1028C00010B501780B0012F075FC3D8787388787BB +:1028D00058878787873B3E878787515487878787B5 +:1028E00087874228872C3087878787348787878721 +:1028F00087878746874A4E872024876B5B5F63679D +:10290000876F877E827B77738700801CFFF78CFF41 +:1029100060E0801CFFF753FF5CE0801CFFF7DEFEE9 +:1029200058E0801CFFF7B4FE54E0801CFFF708FE5F +:1029300050E0801CFFF7DEFD4CE0FFF7ACFD49E006 +:10294000FFF791FD46E0801CFFF715FD42E0801C7B +:10295000FFF7EBFC3EE0801CFFF790FC3AE0801CA8 +:10296000FFF75BFC36E0FFF73EFC33E0FFF715FCBA +:1029700030E0801CFFF7D3FB2CE0FFF7B4FB29E02D +:10298000801CFFF77EFB25E0801CFFF757FB21E052 +:10299000801CFFF710FB1DE0801CFFF7DEFA19E03A +:1029A000801CFFF7BBFA15E0801CFFF771FA11E0FD +:1029B000801CFFF729FA0DE0801CFFF7F3F909E00E +:1029C000FFF7CEF906E0801CFFF79FF902E0801CBC +:1029D000FFF77DF9012010BD002010BD10B51E4984 +:1029E0001E4812F0F6FA10BD70B51D4A01241146BA +:1029F000184D4031030012F0DDFB05191C1C0419B1 +:102A00001C0001220021134807F048FC1448002153 +:102A1000483801774177C03809F005FA002804D01A +:102A20000E480D49D33012F0D4FA70BD0C745565C0 +:102A300070BD09490B48F6E730B5134606E0CC18DF +:102A4000203CE47FD51A44555B1EDBB2002BF6D147 +:102A500030BD0000D8010020B01B0000410600007E +:102A6000E00200204707000010B56038030012F0B4 +:102A7000A1FB0A060A0F13181F262A31363B0868E5 +:102A800000F093FD10BD05C9114600F0ADFD10BD6D +:102A9000086800F04CFE10BD05C9114600F054FE58 +:102AA00010BD4B6808788A68194600F065FE10BDB5 +:102AB0004B688A680868194600F07FFE10BD0868F8 +:102AC00000F09AFE10BD08884A6880B2114600F0F6 +:102AD000EAFE10BD05C9114600F00AFF10BD05C988 +:102AE000114600F01DFF10BD012010BD10B56C286F +:102AF00001D0012010BD087800F0B8FE10BD000024 +:102B000001203F49400608603E4908603E490A6886 +:102B1000FF231B029A4383121A430A603849803903 +:102B20000860704710B502460420384904E0C3002D +:102B30005B181B79002B0AD00346401EC0B2002B45 +:102B4000F5D133A1432012F044FAFF2010BDC30099 +:102B5000CA50002259184A718A7101220A7110BDA7 +:102B60002A4A0021C00080180171704710B5044640 +:102B7000042803D326A1522012F02BFA2348E100A7 +:102B80000C182079012803D021A1532012F021FA3A +:102B90006079A179401CC0B2814200D060710120EF +:102BA000174940068031086010BD70B516480068AE +:102BB0000004800F022803D015A1692012F009FA41 +:102BC000124E194C03252078C10088190279012A78 +:102BD00007D1427983799A4203D042798271705841 +:102BE00080472078401CC0B22070042801D3002008 +:102BF000207028466D1EEDB20028E4D170BD0000A3 +:102C000080E100E080E200E018E400E02C12002007 +:102C10007372635C736F635F7369676E616C6C6919 +:102C20006E672E63000000003C00002010B5EFF33B +:102C30001080C407E40F72B6D6484178491C417031 +:102C40004078012801D10FF065F9002C00D162B65F +:102C500010BD70B5CF4CE07800280AD10125E57091 +:102C6000FFF7E4FF0FF05EF9002804D000200FF01A +:102C700031F9002070BDC84865714560F9E770B54D +:102C8000EFF31080C507ED0F72B6C24C60780028D4 +:102C900003D1C2A18F2012F09CF96078401E6070B1 +:102CA0006078002801D10FF039F9002D00D162B60B +:102CB00070BD10B5B748C178002904D0002141711A +:102CC000C170FFF7DCFF002010BD10B504460FF007 +:102CD00029F9B049C978084000D0012020600020BF +:102CE00010BDF8B50246AB4C0026A67108200421A1 +:102CF00001251027130012F05DFA0D080A0C0E10C2 +:102D00001214161E262123252800257122E00220F8 +:102D100001E021711EE020711CE027711AE02020E3 +:102D2000F9E7012616E0FFF781FF0FF0FBF8002816 +:102D3000FBD002260EE02171A5710BE02771FBE7A5 +:102D4000202000E040202071F6E7FF2093A17E3094 +:102D500012F03FF90FF0F2F8002809D00FF0F4F864 +:102D6000B04205D130460FF0F2F80028FAD024E046 +:102D700001208007C5608D4A002151608C4A966110 +:102D8000854B02225A6085608A4803690569DB43E6 +:102D9000DB06DB175B1C10273D430561834D00E01C +:102DA00020BF6F68002FFBD0002B03D107691023D1 +:102DB0009F430761784882606960A07900280CD041 +:102DC0000FF0B0F805460FF00DF87B4A002D02D049 +:102DD000A260E06001E0E260A060002E01D100F09E +:102DE000B1F8F8BD10B504460FF0A2F8002805D0E0 +:102DF00068490120C8704A78521C4A702046FFF783 +:102E000070FF10BDF8B5694FB8680025012802D1E0 +:102E1000BD600FF05FF87868012800D17D603868E8 +:102E200001265C4C012814D13D606079002803D054 +:102E300000200FF04FF865712078002809D00FF0BE +:102E400071F8002805D05948C0388663000606612D +:102E5000A670386901282CD13D6100F068F8012086 +:102E600080074661A079002815D00FF05BF800902C +:102E70000EF0B8FF0099002901D0E16800E0A168D8 +:102E8000411A022901DA8A1C13DC0099002901D0B9 +:102E9000E06000E0A060FFF7C9FE0FF043F80028F3 +:102EA00006D04248C038866300060661A67000E07E +:102EB0002670F868012819D100F039F800F037F8C9 +:102EC00000F035F8A078002804D1FF2033A10530A8 +:102ED00012F07FF8FD60A5702570FFF7D0FE0EF0B0 +:102EE000F8FA002802D03148C038C663F8BD10B5E2 +:102EF000284CE078002801D10FF010F8012081075C +:102F0000886100F014F8A07800280BD0274CE06806 +:102F1000002803D10FF01BF80028F8D10020E06052 +:102F200000F005F800201C49C043886010BD08B5BA +:102F30005020694608806A461088411E118000288A +:102F4000F9D108BDF8B51448192787601749002042 +:102F50000860C8600EF0E6FFBD0701240D4E002892 +:102F600005D01248C03884632C61B47000E034701E +:102F7000FFF75CFE084847600D4930798863FFF72A +:102F8000D6FFAC61FFF7D3FF0849002008616C61F0 +:102F9000F8BD000040000020000300407372635C35 +:102FA000736F635F636C6F636B2E6300000100409F +:102FB0000005004000ED00E0FFFFFF7F10B510F0BE +:102FC00064F810BD00200449C8630120012181403C +:102FD000024A116000BF7047C01F004080E200E05D +:102FE00010B504460BF095F820460CF0AAF810BD79 +:102FF0007047704770477047704770477047704719 +:1030000010FFFFFFDBE5B151006001004F00FFFF43 +:1030100003B40148019001BD09000020FE49487039 +:10302000704710B5030012F0C5F8080E050E080829 +:103030000B0B0E1104F07DF810BDFFF7D1FF10BD92 +:103040000DF0E8FF10BD01F095FE10BDFF20F3A1CB +:10305000713011F0BEFF10BD7FB5F44905464868D8 +:103060008968082301910090F14A1946F1480EF051 +:103070008BFD0024F0480EF0A5FD641CE4B2082C82 +:10308000F8D3EB490320803140020CF02FF90028DF +:1030900003D0E2A1962011F09CFF1E220221E748F6 +:1030A0000AF0E7FCE5481E22032110300BF05BFA22 +:1030B000E2480722342174300AF034FCDF484C2106 +:1030C000283011F048FEDD496A46743108464C3814 +:1030D0000164FF317B31416401211172039002F0E0 +:1030E000B4F802A80CF050FC002803D0CBA1AA2011 +:1030F00011F06FFFCF4802222421A8380AF012FCF9 +:10310000CC4802222C215C380AF00CFCCC490B2064 +:103110000EF082F8002803D0C0A1B72011F059FFAB +:1031200003F0F4FF03F0F8F904F05AFE6B460022B6 +:103130000821C4A001F070FF002803D0B7A1BE2071 +:1031400011F047FF284605F071F9002803D0B3A11C +:10315000C02011F03EFF8521C900BD4811F0FBFDE4 +:10316000BB49B24A0020135C0C18401CC0B2E3708B +:103170000428F8D3A849002048608870C8707FBD33 +:1031800070B5B44E0546706A94B00C46401C04D12C +:10319000B06AC0430004000C0BD0306AC007C00FF7 +:1031A0002870706A11F0EAFDB06A2071000A60713F +:1031B00013E02B206946087009A968460AF0F8FB5D +:1031C000002803D095A1E42011F003FF012028700E +:1031D00006220AA9204611F05FFD2878002803D0B6 +:1031E0006079C0210843607114B070BDF0B5994C8E +:1031F0000646206895B00D463746401C0837002823 +:1032000008D16068401C05D1A068401C02D1E0686C +:10321000401C11D02068314611F0B0FD6068311DAE +:1032200011F0ACFDA068394611F0A8FDE068314608 +:103230000C3111F0A3FD25E02B206946087009A987 +:1032400068460AF0B5FB002804D0FF2073A10E30B9 +:1032500011F0BFFE08220AA9304611F01DFD2B20F7 +:103260006946087009A968460AF0A2FB002804D044 +:10327000FF206AA1153011F0ACFE08220AA93846D9 +:1032800011F00AFD20692E46401C0836002808D19E +:103290006069401C05D1A069401C02D1E069401C56 +:1032A00012D02069294611F069FD6069291D11F0CD +:1032B00065FDA069314611F061FDE06929460C31D8 +:1032C00011F05CFD15B0F0BD2B246846047009A90F +:1032D0000AF06EFB002804D0FF2050A1333011F01B +:1032E00078FE082209AF0AA9284611F0D5FC6846E5 +:1032F000047009A90AF05CFB002804D0FF2047A154 +:103300003A3011F066FE0822391D304611F0C4FC37 +:10331000D8E710B5002108460EF00CFD0021012071 +:103320000EF008FD002102200EF004FD0021032014 +:103330000EF000FD002104200EF0FCFC0021052011 +:103340000EF0F8FC10BD10B5414CA0780B2804D34A +:10335000FF2032A18A3011F03CFE207860214843E2 +:1033600000190830002101704178E722C908C9001E +:10337000C91C11404170284A0121917010BD70B5DF +:10338000254CA07800280ED0314800250178491C32 +:10339000C9B201700B2900D105708178491C817078 +:1033A0000EF093FDA57070BD70B51B4C05466068AE +:1033B000002804D0FF2019A1B33011F00AFE656087 +:1033C00070BD70B5144E224DFFF7BDFF7168044605 +:1033D000002907D06022FDF7F7FEFFF7D0FF00209D +:1033E0007060F1E72879002876D012485C380AF03E +:1033F000A9FA6060002804D1FF2008A1D13011F0A3 +:10340000E8FD60680AF0FCFA002831D0204600F0A0 +:103410006FFF607801071FE0340000207372635C67 +:10342000686F73745F636F72652E6300E051010013 +:10343000040400200C12002023300000840A002025 +:10344000B41000206E524635313832320000000090 +:103450008C0C00208000001007D5C008C000401C64 +:1034600060702879401E287127E0F74861682AE0DB +:10347000F54861680AF06FFA687900282CD0F248A4 +:103480004C380AF05FFA6060002804D1FF20EF4951 +:10349000F43011F09EFD60680AF0B6FA002816D0EC +:1034A000204603F085FE6078010709D5C008C000FA +:1034B000801C60706879401E6871FFF760FF83E7C9 +:1034C000E14861684C380AF046FA7DE704E0DE48DE +:1034D00061684C380AF03FFA70BDF7B505460078D0 +:1034E000002700090C463E46062803D0D749D84895 +:1034F00011F06FFD287A00280ED0012814D0D4488E +:10350000D249213011F065FD0298002C068001D0CF +:10351000278066800020FEBD02270926002C0ED0E1 +:10352000A889A080A87B08E003271426002C06D0D9 +:103530002869E060A88A2082287B2072E4E702984C +:103540000680E7E770B50E4600211C461980154637 +:10355000030011F02FFE0723050B1711231D230075 +:1035600022462946304603F0EFFD70BD224629462B +:10357000304601F078F970BD22462946304604F005 +:103580002AFB70BD22462946304602F0F9FF70BD85 +:10359000224629463046FFF7A0FF70BD9720AB4971 +:1035A000800011F016FD032070BD10B5A94C2178E4 +:1035B000002901D0082010BDFFF74EFD012020702A +:1035C000002010BD0146A04810B54C380AF0C3F9E0 +:1035D000A1494879401CC0B24871012803D19D48D7 +:1035E0004078FFF7C3FA10BDF8B50546072040073D +:1035F0000F460A18012189038A4209D2002D02D000 +:103600002818884204D2E81C80088000A84201D013 +:103610001020F8BD90488178002911D03988009198 +:103620004178602251430C18083420783B4600074B +:10363000000F00222146FFF785FF060004D015E0A9 +:10364000002038800520F8BD002D13D0398800985F +:10365000814201D90C260DE020783B460007000F7F +:103660002A462146FFF76EFF060005D00C2E01D03A +:10367000002038803046F8BD774D6878401CC0B2D5 +:1036800068700B2801D100206870A878401EA870CF +:1036900061784807400F022810D00128EAD16A4813 +:1036A00061680AF058F92879401CC0B228710128D5 +:1036B000E0D168484078FFF759FADBE7C806D9D46B +:1036C0006068FFF77FFFD5E770B50446634816468C +:1036D0000D46814204D15E485C49C53011F079FC49 +:1036E000012E05D05A485949D53011F072FC70BDF1 +:1036F00058480121C1706620207000202072A581E9 +:10370000A17370BD70B516460D46040001D1FFF7D8 +:103710001AFE662101700121017229680161A988E0 +:1037200081820673002C01D1FFF729FE70BD0721AD +:103730004907012241189203914201D3102070479A +:103740000721017000207047454A10B590420ED302 +:1037500001239B04C21A434B9A4208D3424B98421E +:1037600005D2072252078A18DB139A4201D3102090 +:1037700010BD0DF08AFD10BD394B10B599420ED326 +:1037800001239B04374CCB1AA34208D3364B9942F2 +:1037900005D2E3020124D318A403A34201D31020CD +:1037A00010BD022803D0102801D0092010BD0DF053 +:1037B00092FD0028FAD0052010BD70B5284B984224 +:1037C00012D301239B04274CC31AA3420CD3264BCC +:1037D000984209D2E4020D19DB139D4204D2002A5B +:1037E00004D014199C4201D3102070BD0DF099FD36 +:1037F0000028FAD0072070BD10B504460720400706 +:1038000001212018890394B0884202D3102014B0FB +:1038100010BD01F06AFD002801D01120F7E70F204C +:1038200008A9087369460BA80AF0C2F80028EED16F +:103830006846007A207068464089608068468089C2 +:10384000A0800020E3E70000B01100201C3400003D +:1038500015020000340000208C0C0020FFFF000047 +:10386000006001000000FC1F0040002010B594B073 +:10387000044601F03AFD002801D01120C7E7002CD2 +:1038800001D00720C3E7392168460170002181700B +:1038900009A90AF08DF8002803D02B492B4811F014 +:1038A00098FB0020B3E770B5294C0846E178002961 +:1038B00013D000280FD007225207012385189B033D +:1038C0009D4203D20568AA189A4201D3102070BD08 +:1038D0008288002A03D0012903D0082070BD092066 +:1038E00070BD04F0E1FA0028FAD10021E17070BD4A +:1038F000184A10B5914208D301229204164B8A1A35 +:103900009A4202D3154A914201D3102010BD0246BB +:10391000203A1F2A02D801F01FFC10BD072010BD5D +:1039200007225207012310B58A189B039A4201D33C +:10393000102010BD0246203A1F2A02D801F068FC70 +:1039400010BD072010BD00001C34000079030000EA +:1039500034000020006001000000FC1F0040002037 +:103960008107C90E002808DA0007000F0838800810 +:103970002C4A80008018C06904E080082A4A800030 +:1039800080180068C8400006800F704710B50D20F1 +:10399000FFF7E6FFC4B20420C043FFF7E1FFC0B267 +:1039A000844203D021A11A2011F013FB10BD012184 +:1039B000234A48031060234B00221A60224A5160B8 +:1039C000224A1060224A11601D4980390860704700 +:1039D00001211B4A480310601D4A5160194A002109 +:1039E00011601A490860704710B516490868012827 +:1039F00004D00EA1562011F0ECFA10BD15488068D5 +:103A00000022C0B20A600DF0BBFE10BD10B50D481B +:103A100001680029FCD0FFF7E7FF01200B494003B4 +:103A2000086010BD00ED00E000E400E07372635C2C +:103A3000736F635F68616C5F726E672E6300000076 +:103A400080E100E000D1004000D3004080E200E0CF +:103A500000D0004000D5004030B40121BC48C9026C +:103A60000160CD1005604A030260BA4803681B027A +:103A70001B0A036004680023240A24020460B64879 +:103A80000468240A24020460B44801244460846069 +:103A9000B34C23606360A360B24B19601D601A6071 +:103AA000B14B19601A600121016030BC704710B43D +:103AB0000121A748CC0204600A0202600B060360E1 +:103AC000A64841608160A64900200860486088607F +:103AD000A44804600260036010BC70470121A14843 +:103AE000C9020160C91001607047002805D0012893 +:103AF00005D0022805D19D4870479D4870479D48D4 +:103B0000704710B59CA18B2011F063FA002010BD06 +:103B100070B500219F4CA04DA04A914B002808D0C1 +:103B200001281DD0022822D093A1B32011F051FA10 +:103B300070BD01200004A060A86011601960984B5E +:103B400042109A60974A9060814A0012106096482D +:103B5000016087480160954801609548017070BD1B +:103B600001204004A060A8605160596070BD012030 +:103B70008004A060A8609160996070BDF8B594461B +:103B8000844A854D00240127754E002808D001285D +:103B900036D0022844D078A1E82011F01AFAF8BDF6 +:103BA000891E0902090A01200004906034606860DF +:103BB0007A4A1160012B21D000217D4A7D4B517042 +:103BC00061463D31DC63DF637B4B5C6002249C60BB +:103BD00004241C61744B196074490F60614B891592 +:103BE0001960704B58606048016075487349C16046 +:103BF00086606B49600348601770F8BD0121DCE7FF +:103C000001205C4E40046F4F012B04D134605060A2 +:103C100068603960F8BD9060346068603960F8BDF4 +:103C20000120524E8004684F012BF4D1EEE7674823 +:103C30004068704770B54A4D28680026554C0128E9 +:103C400006D1A068C00303D501200004A0602E6047 +:103C50006868012809D1A068800306D501204004C6 +:103C6000A0606E6001200FF04CF9A868012809D10E +:103C7000A068400306D501208004A060AE60022049 +:103C80000FF03FF970BD10B549490878002818D0E9 +:103C90000120434AC0039060424A400090602C4A91 +:103CA00000121060404A00201060314A10603F4A04 +:103CB000106008704A78002A02D048700FF021F98D +:103CC00010BD0320FAE70120414900060860704753 +:103CD0000120244900060860704701203C49400546 +:103CE0000860704701201F4940050860704731494E +:103CF0000020C86388151B4908607047410A354A8F +:103D0000C005C00D5043801C5143400A081870473D +:103D100010B4314C430B63431B0C5C020C602D4C04 +:103D20006343C31A2D485C0258432A4B400D43435A +:103D3000E31A0124DB0324041B191B1613700A6801 +:103D40001018086010BC704710B50FF0B2F910BD24 +:103D500080E100E008E400E018E400E000B000408A +:103D600040B1004080E200E000E100E048B10040E6 +:103D70004081004044B100407372635C72656D5FC6 +:103D800068616C5F6576656E745F74696D65722ECF +:103D90006300000000B3004040B3004040B5004065 +:103DA00000F5014000830040408500400082004053 +:103DB00050000020C08F004000850040008000407F +:103DC00080F5014044B5004048B5004000B50040D2 +:103DD00000E200E0093D0000378600006F0C0100A2 +:103DE0000E4A12680C498A420AD118470B4A1268D7 +:103DF000094B9A4204D101B50DF0DDFD03BC8E469E +:103E0000074909680958084706480749054A064B03 +:103E10007047000000000000BEBAFECA1C0100206E +:103E200004000020901D0020901D002010B5FA4CC9 +:103E300094B02168087A002836D017206A4610709E +:103E400000A806220931023010F026FF09A96846B1 +:103E500009F0AEFD112825D02168C03189790629E5 +:103E600020D007291ED008291CD004291AD00929DE +:103E700018D00A2916D00B2914D0052912D00028F1 +:103E800003D0E6A1F32011F0A4F82168B82040582F +:103E900006221C30093110F0FFFE2068017A8030C4 +:103EA000806BC17614B010BD3220C7E770B5DA4D13 +:103EB000044629680300C03111F07CF90C077C0B23 +:103EC0001A212E3B48515C677080FF20D3A1093036 +:103ED0006EE0887901286DD009286BD0052869D05B +:103EE0000A2867D00B2865D0FF20CCA10E305FE0F8 +:103EF000887901285ED0FF20C8A1153058E0887964 +:103F0000062857D0072855D0082853D0052851D067 +:103F1000FF20C2A118304BE0887909284AD00A282E +:103F200048D00B2846D0042844D0FF20BBA11E3027 +:103F30003EE0887903283DD007283BD0082839D0B7 +:103F4000092837D0FF20B5A1243031E08879062830 +:103F500030D00A282ED0FF20B0A12A3028E088795E +:103F6000062827D0072825D00B2823D0FF20ABA177 +:103F70002E301DE0887906281CD00A281AD00B287C +:103F800018D0FF20A5A1333012E08879092811D07C +:103F90000A280FD0FF20A1A1383009E0887909282C +:103FA00008D00A2806D0082804D0FF209BA13C3066 +:103FB00011F00FF82868C030847170BDFF2097A100 +:103FC0004130F5E79449C9220968525CD206920F44 +:103FD00005D1A0318A8B824201D1887F70470020B1 +:103FE000704770B504461120207000218A4D617021 +:103FF0002968C031897A002908D003290ED0042904 +:1040000010D0FF2085A16A3010F0E3FF207800096E +:10401000012802D92868807D607070BD0007000FFC +:10402000203002E00007000F30302070EEE730B59E +:1040300003887E497E4C8B4202D09A1FA2421ED238 +:1040400042888A4202D0951FA54218D2934216D8C0 +:1040500083887D24E400A34211D8C088884205D01B +:10406000734D04460A3C2D1FAC4208D2884208D04A +:104070008A4206D05B1C5A43C000824201DD072001 +:1040800030BD002030BDFFB50022099B002802D0C2 +:10409000994205DC5CE0002902D1002004B0F0BDAB +:1040A0000920FBE7845C002C12D085186F780D2F57 +:1040B0004CD010DC3B0011F07DF80A421B2A2A305C +:1040C0003032323A3A42835C002B3FD1521CD2B29A +:1040D0008A42F8DBE1E7122F31D004DC0E2F35D015 +:1040E0000F2F2CD132E0142F11D0152F27D116E02D +:1040F000022CD5D1AB78039C072B237001D25B0730 +:1041000001D40A20CAE7029B01241B7814E0E34390 +:10411000DB0708E0012C08D011E00620BEE70F25E0 +:1041200023072D075B19002BF4D03046B6E7029B1E +:104130001B789C070AD402242343029C2370835CCF +:10414000521C9A18D2B28A4204DDA9E70B20A5E7D7 +:10415000192676028A42A5DB9FE705E00278401C1B +:10416000002A01D0002070470A46491E89B2002A61 +:10417000F4D10120704730B5274D0021286887B061 +:10418000C943A030818300248477214606200DF0A6 +:10419000D1FD002105200DF0CDFD002102200DF004 +:1041A000C9FD0120FFF782FE28686946C030C4714E +:1041B00004720120087068460BF007FC07B030BDA0 +:1041C00030B5154C95B02268C0329279042A0CD0D3 +:1041D000052A0AD028236A4613705080132906D076 +:1041E0003B2904D0072015B030BD0820FBE7117132 +:1041F000104609A909F0DCFB05000BD12068C0308E +:104200008179062916D0082914D0072912D0052053 +:10421000FFF74CFE2846E6E7540000207372635C0B +:104220006761705F636F72652E630000FFFF0000BF +:104230007B0C00000420EBE730B587B0040003D00E +:10424000002107200DF076FDFE4D012128686A4609 +:1042500001720421117003210C300DF06BFA2968F2 +:104260004022887B8006800E1043887368460BF0DE +:10427000ACFB00280DD12968098A00299ED0002CAA +:104280009CD08B000122002107200DF0AEFC0728F6 +:1042900001D0032092E7002090E770B50025064684 +:1042A000002803D0002107200DF044FDE54C01213A +:1042B00020680172062109300DF03CFA2068817BEC +:1042C0008906890E8173FFF7B1FD2068008A0028F6 +:1042D0000AD0002E08D083000122002107200DF013 +:1042E00084FC072802D00325284670BD0025FBE783 +:1042F000F0B59BB0040004D11920D349400110F05F +:1043000068FE72202070616800260A780825521F16 +:104310000127CC48130010F04DFF0F0976D9FD7628 +:1043200078FCFBB576767676FAF97600C5480068B3 +:10433000C0308079032803D0C349C44810F049FE37 +:10434000002108460DF0F6FC002107200DF0F2FCDC +:104350006078BC4A28436070106810250146C0315F +:104360004B7A2B434B7263689D783C2D48D00246B4 +:104370009D88A032977763688030DB890B80636803 +:104380001B8A4B8063685B8A8B8095836168826B34 +:10439000C97911756168806B08311530062210F0FB +:1043A0007BFC0620FFF782FDA648CA210068FB229D +:1043B0000E54017E11400176B82109588A7A92087C +:1043C00092008A724682284602F0ACFE002804D091 +:1043D0009E489D491A3010F0FCFD284602F0BCF8BA +:1043E000002804D0994898491D3010F0F2FD284665 +:1043F00003F008FD002806D069209349C0003EE183 +:104400000120FFF753FD1BB0F0BD064600688F8802 +:10441000C0308079062812D0072810D008280ED086 +:1044200004280CD009280AD00A2808D00B2806D066 +:10443000052804D0D5208449800010F0CAFD60789A +:10444000284360703068C030417A294341728079D6 +:10445000092811D00A280FD00B280DD005280BD021 +:10446000FFF789FE384602F062FE384602F07AF81D +:10447000384603F0FDFCC6E7FFF77DFE0220FFF79C +:1044800015FDEFE70068C0308079062812D00728B4 +:1044900010D008280ED004280CD009280AD00A28E9 +:1044A00008D00B2806D0052804D06F206649C0002C +:1044B00010F08FFD6068807902F0F1FE0028A2D034 +:1044C0006178294361706168C8809CE7074600688D +:1044D000C0308079062812D0072810D008280ED0C6 +:1044E00004280CD009280AD00A2808D00B2806D0A6 +:1044F000052804D055485449623010F06AFD6078B0 +:10450000284360706068C188386804E032E197E150 +:1045100084E084E00FE0C030018061680989418057 +:10452000616849898180002102200DF003FC386810 +:10453000C030C67167E706460068C030807906283B +:1045400019D0072817D0082815D0042893D0092897 +:1045500011D00A280FD00B280DD005288BD03B484E +:104560003949793010F035FD3068C0308079042841 +:10457000ABD00528A9D03068807C40063AD5606869 +:1045800002210C30FFF7E9FD002833D060680821D4 +:10459000001DFFF7E2FD00282CD03168B8204058FC +:1045A000807A800708D1CA20405C002808D1488A58 +:1045B000C20505D5C00703D14A8A402082434A82FA +:1045C0004A8A802082434A822D2268460270BC209B +:1045D000425A684642801022973101A810F05CFBD5 +:1045E00009A9684609F0E4F90028A3D0174816493C +:1045F000A03044E062683068AC2192890A52616858 +:104600000822091DAE3010F047FB10A80574306871 +:10461000AE30159014A80BF0D8F9F4E68F71064669 +:104620000068C030807906281FD007281DD00828D0 +:104630001BD00428F1D0092817D00A2815D00B2840 +:1046400013D005E0540000201C42000029030000A4 +:104650000528E2D0F949FA4810F0BBFC3068C030B8 +:1046600080790428D9D00528D7D0606881790029BD +:1046700002D08078002805D0F148F0496C3010F065 +:10468000A8FCC0E66078B8212843607030680958FB +:10469000897A8907890F012952D1817C09064FD473 +:1046A000017E490701D5042100E00321C030817259 +:1046B0002B206946087009A9684609F079F9002895 +:1046C00004D0DF48DD49213010F083FC69463068B2 +:1046D000098D81820E2210A90A74DA49B822159137 +:1046E000125808324A61024660324A6092790A7072 +:1046F000024614320A61521D8A601032CA60133AAF +:104700008A619632CA61921C0A62473A4A62103242 +:104710008A621032CA62473ACA63521E0A64921F02 +:1047200050304A64886414A80CF038FB022815D075 +:10473000002813D0C248C1494A3010F04AFC0DE0AD +:10474000817C4906017E490701D5042100E003214F +:10475000C0308172002106200DF0ECFA3068418AE9 +:104760000A0602D440229143418289B280229143B9 +:10477000418248E6B4480068C0308079032804D0FC +:10478000AF48AE49783010F024FC002108460DF007 +:10479000D1FA002107200DF0CDFA6078AA4A28430B +:1047A0006070106810250146C0314B7A2B434B7264 +:1047B00063689D783C2D00D122E602469D88A03298 +:1047C000977763688030DB890B8063681B8A4B8036 +:1047D00063685B8A8B8095836168826BC979117588 +:1047E0006168806B08311530062210F055FA0620FA +:1047F000FFF75CFB9448CA210068FB220E54017E3F +:10480000114001764682284602F08CFC002804D034 +:104810008B488A49923010F0DCFB284601F09CFE60 +:10482000002804D086488549953010F0D2FB2846F0 +:1048300003F0E8FA00289CD08148804997301EE7B1 +:10484000607828436070DEE500290BD088807E48C0 +:104850000068C0300288CA8002880A8142884A8182 +:10486000808888817047F7B5064600780C46002797 +:10487000010982B03D46012974D073480068009058 +:10488000C03002296FD0072904D00A296CD06B49A7 +:104890006E48E3E171680A78521F130010F08AFC39 +:1048A0000F09A551A5A52F585847A5A5A5A5656F22 +:1048B000A5008A783C2A1BD010271625002C7DD015 +:1048C0008888A0807068A21DC08920827068C08915 +:1048D000E0817068008A60827068408AA082716896 +:1048E00008460831C07901F09FFB0020607375E035 +:1048F00019270725002CE2D00021A17171E01127B2 +:104900000725002CDBD089880091A1807168F722EF +:104910008979A171417A11404172009802F008FC36 +:10492000009801F023FE009803F0B0FAC1E10127DE +:104930000925002CC3D08888A080706880792072F7 +:10494000B7E1888812270E252146FFF77DFFB0E1E9 +:1049500018270825002CB2D08888A080A01DFFF75A +:1049600040FBA6E145E0A1E15DE01A270725002C08 +:10497000A5D04888A08070680079A07199E18A78F4 +:104980003C2AB5D010271625002C98D08888A08006 +:104990007068C08920827068C089E0817068008A70 +:1049A00060827068408AA0827168607B497D40089F +:1049B0004000C907C90F0843607300E036E1716821 +:1049C000C007497DC00F49084900084360737168FA +:1049D000A21D08460831C07901F026FB1A4800687C +:1049E000C030417AEF22114046E1532013490001C3 +:1049F00034E1307A012803D014481049C5382DE13C +:104A000012270E2570892146FFF71EFF002C91D03A +:104A100070784007400F032888D10B480068C030E9 +:104A2000417AFB22DFE708490968A031002C01D058 +:104A30008A8BA280327A921E0AE000001C4200009B +:104A4000ED030000AC120020540000200C06000012 +:104A5000130010F0AFFB073D4853EDEE6F05ED007E +:104A600013270C25002C90D0009900224A82F1686F +:104A700089788907890F0129217A26D049084900B8 +:104A80002172FD231940F3689B785B07DB0F5B0005 +:104A900019432172E323E2801940F3681B785B0716 +:104AA000DB0E19432172DF231940F3685B78DB07C3 +:104AB0009B0E194321726272F1680122C978A172BA +:104AC000017A1143F7221140ADE001231943D7E7E2 +:104AD00015270C25002C9AD0F06806220068A11D2D +:104AE0000EF07CFFE5E016270725002C8FD0317BE8 +:104AF000A171017A08221BE00172DAE01427122565 +:104B0000002C84D00098A21D8030806B01461531A6 +:104B1000007D01F089FAB089E081207C0121084301 +:104B2000F92108402074FE480068C030017A022252 +:104B30001143E1E717273825002C77D03221A01D3B +:104B400010F007F90020A071207A03210843207299 +:104B5000FB210840F24909680A7E5207D20F9200F1 +:104B600010432072B8204058807A800757D0A07A2E +:104B70008A7C4008D2074000D20F1043FD2210402B +:104B8000A0728B7CFB229B07DB0F10409B0018431D +:104B9000A0728B7CF7269B07DB0F3040DB001843AD +:104BA000EF231840A072E07A10408A7CD206D20F20 +:104BB00092001043E0728A7C3040D206D20FD200BD +:104BC0001043E072888AA0812046102267310E309F +:104BD00010F062F8D249A07F0968C0078A7DC00F33 +:104BE00052001043A0770A7E400852074000D20FBF +:104BF0001043A077084640304DC820344DC4303CA7 +:104C00003F20405C22463032393101F00DFAC44871 +:104C100000688030806B817A890889008172C04881 +:104C20000068C030017AFB22114065E737E000E000 +:104C300038E0327B022A14D017273825002C2ED0DA +:104C4000017AFB2319400172012A17D0032A17D0D9 +:104C5000042A18D0052A16D0B249B34810F0B9F981 +:104C600027E019270725002C19D0898BA180012165 +:104C7000A171417A4908490041721AE0012000E01F +:104C80000220A07106E0707B0007000F8030A07149 +:104C9000052A02D00020E0710BE00120FBE7049818 +:104CA00005800CE0A0489F490A30D7E7317A0029F7 +:104CB00008D00498002C058001D027806580002052 +:104CC00005B0F0BD19270725002CE8D00021C94305 +:104CD000A1800021A171417AFD2284E610B5904C9B +:104CE00094B02068C0308079022809D0032807D00A +:104CF000052805D0092803D00A2801D00B2837D170 +:104D00001B2108A801730021817369460BA808F0D4 +:104D10004FFE002804D1684640781B2802D00320AB +:104D200014B010BD002108460DF004F80021072042 +:104D30000DF000F868468078002819D12068C0304E +:104D40008079801E030010F035FA0A060613081356 +:104D500013130D0F1113012000E00420FFF7A6F834 +:104D60000020DDE70620F9E70720F7E70820F5E750 +:104D70000820D5E770B50025694C002807D0022827 +:104D800017D0072828D033206649400146E0FFF7B6 +:104D9000A5FF00280CD1FEF7D6FA2221017005727A +:104DA000FEF7EDFA2068C030417A022211434172C9 +:104DB00070BDFEF7C8FA122101700121017221684D +:104DC000BC22525A4281C031CD71FEF7D8FA206818 +:104DD000C030417A0422E9E72168C620405C0228FD +:104DE00009D0032807D0092805D00A2803D00B28AA +:104DF00001D00528DCD1887B8109012911D08009E7 +:104E000004D0494847496E3010F0E3F80020FFF71E +:104E100044FA0028CCD044484249723010F0D9F806 +:104E200070BD0020FFF708FAF3E770B50D460400E7 +:104E300004D1CD203B49C00010F0CBF820780128E8 +:104E400005D0394837499D3010F0C3F870BDA188AE +:104E50003648334E814209D1E288824206D1306819 +:104E60001321A030808BFFF7ABF970BD814202D1D6 +:104E7000E08800280AD012202870687808210843AA +:104E8000687007CC083507C5002106E000227823AA +:104E9000114602200CF0A9FE02213068C030C17119 +:104EA00070BD1F480068C030807A704738B51C4C10 +:104EB00005460278206813000146C03110F07AF9E7 +:104EC00009A8060909A21945728AA800FEF7AEFFD3 +:104ED00038BD8879062806D0092804D0124811491F +:104EE000B53010F076F820680422017E1143017677 +:104EF00088E0A9880029EBD0A030808B0B4988423C +:104F0000E6D0A868002804D107480649C53010F04B +:104F100060F8A8680A38A8600090AB88206807E0AD +:104F2000540000201C420000E9050000FFFF0000C3 +:104F3000A030808B0622042102F028F80028C7D078 +:104F4000F849F94810F045F838BD287902288879E1 +:104F50000DD00428F8D00528F6D0284601F075F8C1 +:104F600020681321A030808BFFF72AF938BD07286D +:104F700006D00A2804D0EC48EA490A3010F029F893 +:104F8000284601F062F820680122C030417A1143BE +:104F900041728079072803D00920FEF787FF38BDCA +:104FA0000620FAE7887906280AD0042808D00928BC +:104FB00006D0052804D0DC48DA49313010F009F871 +:104FC0000ECDDA480361C2608160A2210170FEF754 +:104FD000EBF938BD8879062818D0072816D009289B +:104FE0000DD00A280BD0D048CE4944300FF0F1FF45 +:104FF0002068C0308079062808D0072806D00B200A +:10500000FEF754FF284601F020F838BD0820F7E7E6 +:10501000C548C449583095E7FFB593B001246846A8 +:1050200003218470C9021D4601800AF0A6F90022FE +:105030006946012003F0ABF906460AF0A2F9002EFA +:105040005CD16846152184704902018000271C212B +:1050500001A808970FF07FFE01200146103108A833 +:1050600001700020014608A841708178F9200140B4 +:10507000891C214308A881706846017902263143C2 +:10508000017114998185C7851F21018608A80A909E +:1050900013980D90684609900AF06FF90EAA09A9B5 +:1050A00001A802F036FF07460AF06BF9002F02D084 +:1050B000384617B0F0BD9E4F68463968008F48806B +:1050C000684684709B49018008A88078F9210840CF +:1050D000801C4108490008A88170684686850686BC +:1050E00015A80D900AF049F90EAA09A901A802F025 +:1050F00010FF06460AF045F9002E01D03046D8E7E9 +:1051000068463968008F88808A4968468470C91C5F +:105110000180298810A8018069884180A988818040 +:10512000E988C180082168468185018610A80D9014 +:105130000AF023F90EAA09A901A802F0EAFE044622 +:105140000AF01FF9002C01D02046B2E76846396802 +:10515000008FC8800020ACE7F0B5774D95B00C46C5 +:10516000A9423FD30126B604744FA11BB94239D3DB +:1051700073498C4236D2202806D0212827D02228F5 +:1051800042D0072015B0F0BD3C216846017021884F +:1051900041806188818009A908F00AFC0028F1D1CA +:1051A00008A98979002903D002290ED00320E9E754 +:1051B0006168A942E6D38A1BBA42E3D3604A9142AE +:1051C000E0D26A46128D0A80DCE75E48DAE72068A2 +:1051D000574C002813D00721490701224118920398 +:1051E000914201D31020CDE706210EF0E1FB2168AA +:1051F000A82250500120A03188750020C2E7206805 +:105200000021A0308175F8E7204600F02AFFB9E7B9 +:10521000494A10B5914208D301229204474B8A1A99 +:105220009A4202D3464A914201D3102010BD202851 +:1052300005D0212803D0222803D0072010BD062046 +:1052400010BD084600F051FF10BD70B50446374848 +:10525000CC21AC300FF07FFD3448354EAC3000210E +:105260003060C943A0308183002585770120FEF797 +:105270001DFE3068C7210D54E121C57389000182EC +:10528000B6210D54014609310830FDF779FF316828 +:10529000084629311930FDF7A9FF002C24D03068C9 +:1052A00080308463FEF7C2FD1E20E081607A8F218A +:1052B0000840303060723068014614312161983105 +:1052C0006162933921601031616025721339A162E6 +:1052D000091FE1628531E163303921631031616377 +:1052E00010310930A163A06470BD11480068C0305E +:1052F0008079042803D0052801D0002070470120C0 +:10530000704770B506460C480C46814208D3012010 +:1053100080040A49201A884202D30948844213D3E0 +:10532000102070BD1C420000B30600004C1200208B +:1053300054000020012A0000006001000000FC1F52 +:105340000040002002300000FFF7CFFF002801D00E +:105350001120E6E7FD48FE4D002E02D0012E46D179 +:105360002FE02278002A0AD00121012A09D0022A3E +:1053700014D0032AD5D1A2799209D2D112E000210A +:1053800003E0A2799209032ACBD128680622017290 +:1053900060308171611C0FF07FFC05E0A2799209F9 +:1053A000012ABED128680172002107200CF0C2FC3E +:1053B00028680622611C09300FF06EFCFEF736FDEE +:1053C00011E02178002912D0012910D0022910D033 +:1053D0000329A6D10120FEF760FF002803D0DD4994 +:1053E000DD480FF0F6FD2868C673002099E7072016 +:1053F00097E70120FEF720FFEFE707214907012289 +:1054000010B541189203914201D3102010BDD0492C +:10541000024609680B7A0931184600F005FE0020A3 +:1054200010BDFFB599B005460020694608710872A5 +:1054300008A9087408751E4614460121C748890446 +:10544000C74AC84B002D06D085420DD36F1A97422C +:105450000AD39D4208D2002C09D0844204D3601A9A +:10546000904201D39C4202D310201DB0F0BD2846CB +:10547000204318D01F270CAB01AA009728461A9981 +:10548000FEF701FE0028F0D10DAB02AA31462046FE +:105490000097FEF7F8FD0028E7D16846007AC107BB +:1054A00003D00A20E1E70720DFE7800705D568463B +:1054B0000079800701D50B20D7E7FFF716FF0028FA +:1054C00001D01120D1E703AF002D0FD01A2069467B +:1054D00008731A9888732946F81C1A9A0FF0DCFB97 +:1054E0000EA903A808F064FA0028BED1002C0ED043 +:1054F000202168460173867332462146F81C0FF05E +:10550000CBFB0EA903A808F053FA0028ADD19049AF +:1055100008A80968007C08700020A6E7F0B50446DA +:105520008E48002795B084426FD301208004211A51 +:105530008B488142F8D38B48844266D22378012B72 +:105540000BD1864960688842EED39904421A844997 +:105550008A42E9D383498842EFD27D490A681546D9 +:10556000C035A879022814D0032812D0052810D0FD +:1055700009280ED00A280CD00B280AD0012803D005 +:10558000002B06D0012B04D0687AC506AD0F06D1DA +:1055900001E00820F6E5850701D4400701D5112078 +:1055A000F0E5012B15D0208A6F4E0546203DB5420F +:1055B0007ED2022B01D0032B01D1A02878D3012B5E +:1055C00007D01078C00704D0608A002870D0B428B3 +:1055D0006ED8002B06D0012B08D0022B04D0032B51 +:1055E00066D110E0002512E0022510E06068012578 +:1055F000007800280BD0012808D0022806D0032804 +:1056000004D05248BEE5032501E066E00127D07BC7 +:1056100001281CD1108A002819D0907B810901290A +:1056200011D0800904D04C484A49E4300FF0D1FC35 +:105630000120FEF732FE00280BD047484549E830EC +:105640000FF0C7FC05E00120FEF7F6FDF3E7FEF7DB +:10565000EDFB207A002806D0012806D0022806D0CB +:10566000032825D105E0002604E0012602E00226F9 +:1056700000E00326002D01D0022D42D1002E40D0A3 +:10568000E068002814D00179002928D008290FD813 +:10569000027B9446082A0BD800290ED02F4A0168B5 +:1056A00091421AD3012292048B1A2D4A934200E0B0 +:1056B00084E012D32B4A91420FD26146002912D0C6 +:1056C00080682649884208D301218904421A244966 +:1056D0008A4202D32349884205D3102052E5027B37 +:1056E000002A6BD0D4E71A4800680078800702D0FF +:1056F0001648401E46E5022D03D1022E5ED0032E31 +:105700005CD0182168460170218A4180218A8180FD +:1057100085710F480068007A002801D0012870D1F7 +:105720006946C8716846077221780930012932D06C +:1057300006210FF00EFB07216846C173067409A904 +:1057400008F036F90028C9D10A210FE00232000022 +:10575000540000201C4200005F08000000600100AF +:105760000000FC1F00400020E13F0000684601707F +:1057700009A908F01DF90028B0D13A20694608703F +:1057800009A9684608F014F90028A7D1002D08D00F +:10579000022D06D04CE061680622491C0FF07CFA0D +:1057A000C9E7002E44D00026374623E00168B00048 +:1057B00009580978002903D0012904D00720E1E421 +:1057C00069468F7002E001216A469170E168062205 +:1057D0000968095800A8491C03300FF05DFA0B2036 +:1057E0006946087009A9684608F0E2F80028E6D181 +:1057F000761CF6B2E0680179B142D7D800266F4630 +:1058000012E050E08068B10041581022B81C0FF03F +:1058100043FA3B206946087009A9684608F0C8F8B1 +:105820000028CCD1761CF6B2E068017BB142E9D801 +:105830001B20694608700120887009A9684608F095 +:10584000B7F80028BBD108A840791B282BD1002D20 +:105850000AD0012D04D0022D08D0032D18D105E067 +:105860000320FEF723FB26E003200FE0FE4800683C +:10587000C030807903000FF09DFC0916061616183B +:1058800016081A1C1600022000E00920FEF70EFB85 +:10589000608A00280FD000228300114610460CF0C9 +:1058A000A4F9002807D003206CE40520EEE70A20C5 +:1058B000ECE70B20EAE7002064E470B586B00C004A +:1058C00006460BD0E94884424AD301208004E849C7 +:1058D000201A884244D3E748844241D2E24D2868E6 +:1058E000C030C179022902D0407A400702D5112088 +:1058F00006B016E5002C04D02046FEF798FB0028E1 +:10590000F6D13046FEF75EFB012803D0022823D0F3 +:10591000D948EDE721001BD1082069468882286814 +:1059200001ABC08805AA002103F019F90028DFD1D6 +:105930006846808A082801D00320D9E76846818814 +:105940008181C188C181018901824189418203A984 +:10595000304601F074FCCBE7002C01D00620C7E7ED +:105960001020C5E770B50C460546FEF72BFB012855 +:1059700003D0022801D0C048D3E421462846FEF7D0 +:105980001FFCCEE400B50146143095B0192801D2B1 +:10599000880707D008461E3004D00A3002D00720FE +:1059A00015B000BDFFF7A1FC002801D01120F7E7DA +:1059B000AD4831220068417068460270817009A9C3 +:1059C00007F0F6FFECE701B582B0022069460880D7 +:1059D000A54802AB00686A468088002102F02AFFD1 +:1059E00069460988022900D003200EBD38B502217E +:1059F0006A4611800721490701224118920391420A +:105A000001D3102038BD9849034609686A468C883E +:105A10000021204603F0A3F8694609880229F1D045 +:105A2000032038BD3EB504460820694608808F48EB +:105A3000844208D3012080048D49201A884202D371 +:105A40008C48844201D310203EBD2046FEF7EFFA79 +:105A50000028F9D12088694688806088C880A0889D +:105A60000881E0884881804801AB00686A46C088A8 +:105A7000002102F0DFFE694609880829E4D00320EE +:105A80003EBD1FB504460820694688817748844298 +:105A900008D3012080047649201A884202D3754831 +:105AA000844202D3102004B010BD6F486B460068DA +:105AB00003AAC088002103F052F80028F3D16946F8 +:105AC0008989082901D00320EDE7694609882180EA +:105AD00069464988618069468988A1806946C98884 +:105AE000E180E0E7FEB50546604817460E46814274 +:105AF00008D3012189045E4A731A934202D35D4B95 +:105B00009E4201D31020FEBD1F2F01D90C20FEBDE7 +:105B1000554C85422AD3681A904227D39D4225D2FC +:105B2000206801A9408802F037FE0028EFD12878CC +:105B300069464871206801A9408802F010FE0028DB +:105B4000E5D169460090087802210843694608704B +:105B50004979090703D0082108436946087020687D +:105B60006946408802F0A5FD0028D0D169460F8122 +:105B700020683346408802AA002102F05BFE694695 +:105B80000989B942C3D00320FEBD38B50C460721B0 +:105B9000012249079203002802D04318934202D2FF +:105BA0006118914201D3102038BD21886A461180C6 +:105BB000002801D000290BD02B49034609684D88E5 +:105BC0000021284602F0CBFF69460988218038BDB4 +:105BD0000C2038BD30B50C46244987B08C4208D320 +:105BE00001218904224A611A914202D321498C423F +:105BF00002D3102007B030BD1B4D2968C0310A7A8E +:105C0000520708D48979491F0B000FF0D3FA050415 +:105C10000604040604000820ECE7FEF7D3F9012887 +:105C200003D0022839D01448E4E720881E2801D286 +:105C30000720DFE72868C030807906282BD00A20AB +:105C4000FEF734F90520694608700879A1788008C4 +:105C5000C9078000C90F084369460871FB21084045 +:105C6000A1788907C90F09E05400002000600100F5 +:105C70000000FC1F004000200230000089000843A3 +:105C8000694608712088C880684609F09EFE002891 +:105C9000B0D00320AEE70720D2E70620AAE7F0B590 +:105CA00087B014460D46FEF78DF9012804D002286E +:105CB00002D0FE4807B0F0BDFD4B18680146C03168 +:105CC0000A7AD20707D08A79042A04D0052A02D09A +:105CD000002D02D052E00820ECE7F64A944208D3A7 +:105CE00001229204F44BA21A9A4202D3F34A94423C +:105CF00001D31020DEE7A278D206520F042A0CD876 +:105D0000E378072B09D3102B07D822799A4204D3C2 +:105D1000102A02D822881E2A01D00720CAE702468C +:105D20008032966BF727F372966B23793373966BF9 +:105D3000737A3B40A778BF06FF0FFF003B437372A7 +:105D4000966B2388F381966BA778B37AFF079B083D +:105D50009B00FF0F3B43B372FB273B40A778966B3A +:105D6000BF07FF0FBF003B43B372926BA478537A17 +:105D7000E406DB08DB00640F234353720B226B46FF +:105D80001A70852D22D008DC002D17D0812D17D058 +:105D9000822D17D0832D08D116E0862D18D0882D9E +:105DA00018D0892D18D08A2D18D00B221A71B6223E +:105DB000125CBF4C002A13D0A83012E00022F5E795 +:105DC0000122F3E70222F1E70322EFE70522EDE7E4 +:105DD0000622EBE70822E9E70922E7E70A22E5E7DE +:105DE00000200290887907280BD0082809D00920C4 +:105DF000FEF75CF8684609F0E8FD002803D00320B0 +:105E000058E70620F4E720680422C030017A4908E8 +:105E100049001143017200204CE770B5A44E0D46B5 +:105E2000316886B0C031097A1446090701D40820C8 +:105E30005EE5FEF7C7F8012803D0022801D09B4891 +:105E400056E5002D12D09B48844208D301208004DF +:105E50009949201A884202D39848844201D31020DD +:105E600046E5012D0BD0022D02D106E0002C01D019 +:105E700007203DE50020029005E0022000E001201F +:105E8000694608710294032069460870684609F063 +:105E90009CFD002801D003202AE53068F722C0309D +:105EA000017A11400172002022E570B594B01446C9 +:105EB0000E46FEF787F8012804D0022802D07B485E +:105EC00014B059E57A4D2868C030007A800701D4B3 +:105ED0000820F5E7002C01D00720F1E7FFF705FACD +:105EE000002801D01120EBE7002E1DD02D2168469F +:105EF00001702C68BC20015B684641801022B11CF7 +:105F000001A80EF0C9FE207EFB210840B17CC90724 +:105F1000490F08432076B07CFF214008A075608AB5 +:105F200082310843608207E02E21684601702868AC +:105F3000A030818B6846418009A9684607F038FD8A +:105F40002968FD23C0310A7A1A400A72B8E710B5F1 +:105F50000C46FEF737F8012803D0022801D0534839 +:105F600010BD5448844208D3012080045249201AAD +:105F7000884202D35148844201D3102010BD2046EC +:105F8000FEF72FF8002010BD10B594B00446FEF7C0 +:105F900019F8012804D0022802D0444814B010BDDA +:105FA00043480068C0308179042910D005290ED0FB +:105FB0003820694608704C8001200871487109A991 +:105FC000684607F0F5FC0028E8D00B20E6E7002043 +:105FD000E4E710B594B00446FDF7F4FF012803D0C0 +:105FE000022801D03148D9E731480068C0308179B2 +:105FF00004290DD005290BD03820694608704C8043 +:1060000000200871487109A9684607F0D1FCC5E76E +:106010000020C3E726480068C0308079062801D3F5 +:10602000012070470020704708B51346002806D0AD +:1060300023A00068009048796A468009105C1870B7 +:106040000622581C0EF028FE08BD10B50446FDF7C8 +:106050007AF9A22101700ECC08300EC0FDF78FF93D +:1060600010BD70B5124C054601682068002913D098 +:10607000104A914208D3012292040F4B8A1A9A4285 +:1060800002D30E4A914201D3102075E410227730DA +:106090000EF002FE206801218030806B01722068C2 +:1060A000A9880182C17B012919D10BE002300000CF +:1060B00054000020006001000000FC1F0040002090 +:1060C0000302FF01807B800901280AD00120FEF72E +:1060D000E4F8002803D01A491A480EF07AFF00208D +:1060E0004AE40120FEF7A8F8F3E770B5054600681A +:1060F000154C00281ED007214907401801218903AB +:10610000884201D3102037E42068B8210958097A61 +:10611000012909D00146773129300AF08EFF206825 +:1061200001218030806B017221681022286877314C +:106130000EF0B2FD2068008AA88000201CE4000058 +:106140001C420000FD02000054000020FFB581B099 +:1061500001980E46C078174610360E37022809D02F +:10616000032840D005287DD0F2A1F7480EF031FF7A +:1061700005B0F0BDCC890A2060430E301880312371 +:106180000A98002A0380F3D0486800889080002095 +:10619000D0801081097B9481891FCDB21AE03088AC +:1061A0007168388048780A7800021043F880C8780F +:1061B0008A78000210433881BA1C091D28460BF06A +:1061C0008AF8002D01D0002802D000203871788094 +:1061D00008360A372046641EA4B20028DFD1019990 +:1061E0000020C870C4E7CC890A2060430E301880B4 +:1061F00032230A98002A0380BAD048680025008814 +:106200009080D5801581087B401FC0B2009094819A +:1062100042E0716832880878FA803A79C3075208F8 +:106220005200DB0F1A43FD231A408307DB0F5B008C +:106230001A43FB231A404307DB0F9B001A43F72343 +:106240001A400307DB0FDB001A43EF231A40C30693 +:10625000DB0F1B011A43DF231A408306DB0F5B01B0 +:106260001A4300E020E0BF231A404306DB0F9B01E6 +:106270001A433A71C00978718A784B781002184332 +:1062800038813A46C91C00980BF025F8002801D047 +:10629000BD703D8008360A372046641EA4B200282F +:1062A000B7D10198C57063E7087BCC89801E85B2A1 +:1062B0002846083060431030188034230A98002A9A +:1062C00003808FD048681746008890800020D080D7 +:1062D000108194811037E000D581C0190CE030881E +:1062E0003880009878602A46716800980EF0D4FCD7 +:1062F000009808360837401900902046641EA4B262 +:106300000028ECD16BE7FFB50546C07881B00C469C +:106310000A9E03000EF04EFF0BA3071733414F6D8B +:106320008F9D9D9DA300207B1746082806D003283B +:1063300004D085487FA154300EF04BFE04990E2006 +:10634000088030200CE0207B1746042804D07E48CB +:1063500078A171300EF03DFE04990E2008803120A6 +:106360003080002F44D060680088B880607AFF30A9 +:106370000130F880E08938810020B88137E0207B47 +:106380001746042804D070486AA18D300EF021FE13 +:1063900004990E2008803220E2E7207B174602286D +:1063A00004D0694863A1A9300EF013FE04990E20B1 +:1063B00008803320D4E7207B1746042804D06248A5 +:1063C0005CA1C4300EF005FE049810210180342039 +:1063D0003080002F0CD060680088B880607AFF3071 +:1063E0000130F880E08938810020B881F881E870B8 +:1063F000BEE6207B1746052806D0062804D0524862 +:106400004CA1E1300EF0E5FD049812210180352009 +:106410003080002FECD060680088B880607AFF3050 +:106420000130F880E0893881E089B8810020388225 +:10643000A988F981DBE7207B1746072804D042486A +:106440003CA1F8300EF0C5FD04990E2008803620DE +:1064500086E700962846049B00F02DFD88E635A1CE +:106460003A480EF0B6FD83E670B5054600780C4656 +:10647000082603000EF09EFE124C3434241C380A09 +:106480000A0A0A0A0A0A0A0A0A0A0A4C687800284A +:1064900004D02E4827A12C300EF09BFD002C03D1F8 +:1064A0001F2024A1400108E060783043607020E0A4 +:1064B000002CF9D17D201FA1C0000EF08AFDF3E76A +:1064C000002904D03F201BA100010EF082FDFCF743 +:1064D0003AFF0446407830436070FCF750FF08E014 +:1064E0001A4814A1473002E0184812A14C300EF0AF +:1064F00070FD002C0AD06078000707D5932020702B +:106500002046582229460830FAF75EFE002070BD6A +:106510000E4808A15030EAE710B500200C4C0D4998 +:106520000346C2008C525218401C0006D370000E65 +:10653000F7D010BD7372635C67617474635F636FDF +:1065400072652E63000000005A020000B3030000D1 +:10655000FFFF000058000020FE49088001208870DD +:1065600000207047FB4900208870704710B500215B +:10657000F848C94301800021C17007F053FAD8E7F9 +:10658000F7B584B0054600276846078187806868AC +:106590000C46008800F0ECFB0646287A032805D05C +:1065A000002E03D1EC49ED480EF013FD297A204668 +:1065B000C91E123000900B000EF0FCFD0FF2F1F03E +:1065C0003D09AA465C6D34B3CDF38B8BF000F078B7 +:1065D000012803D0E049AD200EF0FBFCA8896946F4 +:1065E000C0000E30888030200881002C22D06868DE +:1065F0000188A180E7802781A989A18100200DE081 +:10660000C100B27909190A74B288CA81820052198C +:10661000D3894B82128A401C8A8280B2A18981422E +:10662000EED8D7E002A8009001AB224629463046BA +:1066300000F0CCFBF1E002A8009001AB2246294615 +:10664000304600F005FCE8E0F07806281AD0FF207C +:10665000C149223014E068680188A180E780278161 +:10666000A989A181B188E181E9892182EA89296921 +:1066700000982BE0F078062804D0FF20B6493C3083 +:106680000EF0A7FCE8896946123088803520088121 +:10669000002CE0D1C1E0F078072804D0FF20AE49FB +:1066A00056300EF096FCA88969460E308880362058 +:1066B0000881002CBED068680188A180E78027810E +:1066C000A989A1812046AA890E3029690EF0E4FA31 +:1066D00080E0E8896946123080B2382288800A81D9 +:1066E000002C79D068680188A180E7802781A9897A +:1066F000A181287A102809D00221A173E989218279 +:10670000EA89296900980EF0C7FA86E00121F4E7CA +:1067100002A8009001AB224629463046FFF716FD3D +:106720007BE0F078082803D08B498D480EF051FCAF +:1067300014206946888037200881002C6DD0686855 +:106740000188A180E7802781A989A18167822782AA +:106750000120A0733EE0F078092804D080487E49EB +:1067600018300EF036FC288A6946143088803720AD +:106770000881002C51D068680188A180E78004213D +:106780002781A173A989A181E9892182298A61824E +:1067900020462A8A1430696998E702E038E01CE054 +:1067A00024E0F0780A2804D06D486B4933300EF0AD +:1067B00010FC14206946888037200881002C2CD0DA +:1067C00068680188A180E78027810521A173A781DE +:1067D00027826782F77020E017E002A8009001ABE3 +:1067E000224629463046FFF78EFD16E00D20694609 +:1067F000392288800A81002C07D00120E08055488A +:106800000188A1802781277307E00699088010E09E +:106810008F205149C0000EF0DCFB68460699808845 +:106820000880002C05D06846008920806846808852 +:106830006080002007B0F0BDF7B594B015460F4654 +:10684000149800F0A0FA04000AD0032000F088FB9E +:10685000022802D2E078002804D0112017B0F0BD41 +:106860004048FBE71720694601260883002D0FD01A +:106870000321684601711021018210A8024605908B +:1068800004A928460AF04DFD00280DD00720E5E7B1 +:1068900008216846017100210781C9434181052112 +:1068A0008673C90281810CE0A878A0712888A08035 +:1068B000684605218673C902818100210781C94389 +:1068C000418109AA023206A901A807F0E4F80028CC +:1068D00002D000F06BFAC1E707A800906846038B6E +:1068E00004220321149800F051FB0028B6D1E67071 +:1068F000B4E770B592B00D0006460ED000F043FA32 +:1069000004000CD0032000F02BFB022802D2E07818 +:10691000002806D0112012B070BD1020FBE71148EE +:10692000F9E7172168468180042101722988818155 +:106930006988C181012181740B4901820AAA02324E +:1069400001A902A807F0A7F800280FD000F02EFA3E +:10695000E1E7000058000020346500003C0400001E +:1069600063020000023000000228000008A8009026 +:106970006846838804220321304600F007FB002884 +:10698000C9D10221E170C6E770B592B00D0006468C +:106990000DD000F0F8F904000BD0032000F0E0FA6D +:1069A000022802D2E078002805D01120B3E7102099 +:1069B000B1E7FA48AFE717216846818004210172E8 +:1069C000298881816988C18101218174F44901820A +:1069D0000AAA023201A902A807F05DF8002802D035 +:1069E00000F0E4F997E708A800906846838804223D +:1069F0000321304600F0CAFA00288CD10321E1704F +:106A000089E770B592B00D0006460DD000F0BBF9D5 +:106A100004000BD0032000F0A3FA022802D2E07891 +:106A2000002805D0112076E7102074E7DB4872E7D4 +:106A3000022168460172298881816988C1811721F4 +:106A400081800AAA023201A902A807F024F80028CE +:106A500002D000F0ABF95EE708A800906846838892 +:106A600004220321304600F091FA0028DBD10421F2 +:106A7000E17050E7F0B591B015000E4607460ED014 +:106A800000F081F904000CD0032000F069FA02281C +:106A900002D2E078002806D0112011B0F0BD1020FD +:106AA000FBE7BE48F9E7172168468180042101729F +:106AB000298881816988C181B17881743188018296 +:106AC0000AAA023201A902A806F0E5FF002802D0B6 +:106AD00000F06CF9E1E708A800906846838804227A +:106AE0000321384600F052FA0028D6D10521E17082 +:106AF000D3E7F7B592B015460E46129800F043F969 +:106B000004000AD0032000F02BFA022802D2E07819 +:106B1000002804D0112015B0F0BDA048FBE70627DF +:106B2000002D12D0684607728681C581A580172086 +:106B3000694688800AAA023201A902A806F0ABFFC2 +:106B4000002807D000F032F9E5E705216846017218 +:106B50008681EBE708A80090684683880422032119 +:106B6000129800F013FA0028D5D1E770D3E7F7B5F3 +:106B700092B016460D000ED0129800F004F90400F1 +:106B80000BD0032000F0ECF9022802D2E0780028B4 +:106B900005D01120BFE71020BDE78048BBE70727DD +:106BA0006846077286811721049581800AAA0232FD +:106BB00001A902A806F06FFF002802D000F0F6F845 +:106BC000A9E708A800906846838804220321129848 +:106BD00000F0DCF900289ED1E7709CE7F3B51720A0 +:106BE00091B00C46002915D021780B000EF0E2FA86 +:106BF000062B05051A041C2B1520C01EE28880B246 +:106C0000002A02D0A368002B04D0824204D90C20B1 +:106C100013B0F0BD1020FBE7042905D0A0880028A0 +:106C200011D101E00620F3E7119800F0ACF805005F +:106C30000BD02078092701281AD0022807D0042871 +:106C400024D0052835D00720E2E75448E0E768461D +:106C5000077161880181E1884181A068082603905D +:106C6000304600F07DF9072829D34C48801CCFE737 +:106C70000C216846017161880181E1884181A06829 +:106C800003900EE0E878002811D118E00D21684645 +:106C9000017161880181A1884181E1888181A068B9 +:106CA00004900326304600F05BF90228EAD3112055 +:106CB000AEE70E2168460171217B0172F1E71721D1 +:106CC0006846018309AA023206A901A806F0E3FE7C +:106CD000002802D000F06AF89AE707A800906846FA +:106CE000038B04223146119800F050F900288FD10F +:106CF0002178012907D002298AD0042905D0052945 +:106D000005D0032084E7082102E0EF7080E70A2124 +:106D1000E9707DE730B591B00C46054600F033F8D8 +:106D2000002808D0032000F01BF9022805D31B48D7 +:106D3000801C11B030BD1948FBE70F216846017176 +:106D400004811721018309AA023206A901A806F0CD +:106D5000A2FE002802D000F029F8EAE707A8009078 +:106D60006846038B04220321284600F00FF9E0E770 +:106D70000C49884205D00C490988814201D10A4852 +:106D800070470020704710B5FFF7F2FF002802D0CF +:106D90008178C90700D1002010BD0000023000003A +:106DA00003280000FFFF000058000020002806D044 +:106DB000012805D0052805D0062805D003207047F6 +:106DC00011207047082070475C487047FFB583B0BA +:106DD00003980C9EC0781D4614460F46012803D028 +:106DE0005749D2200EF0F5F8F889C0000E302880FF +:106DF00030203080387B001FC0B20190002C26D09C +:106E000078680088A0800020E0802081F889A08137 +:106E1000002616E0F0000519C01900902A464169C5 +:106E20000E3201980AF057FA002802D00020287488 +:106E3000E8810098761C008A68820098B6B2408A81 +:106E4000A882A089B042E5D803990020C870F1E477 +:106E5000F8B50646C0781F4614460D46042804D0EF +:106E6000FF20374903300EF0B4F8A88906214843C3 +:106E70000E30388033210698002C01801AD06868C3 +:106E80000088A0800020E0802081A989A18103469C +:106E90000CE01946062251434A190919D789CF81B6 +:106EA000977C8F74128A5B1C0A829BB2A1899942DB +:106EB000EFD8F070F8BD70B514460546142204985A +:106EC0001A8037220280002C18D0486800260088DB +:106ED000A080487AFF300130E080C8892081C889CD +:106EE000A0816682E878082809D0092811D00A28EC +:106EF00019D0134913480EF06CF8EE7070BD087B82 +:106F00000C2804D00F480E490C380EF062F801200E +:106F100012E0087B0D2804D00A48094908380EF011 +:106F200058F8042008E0087B0E2804D005480449DE +:106F3000001F0EF04EF80520A073DEE703300000BE +:106F4000346500008203000001460020FA4A02E096 +:106F5000401C082803D24300D35A8B42F8D1704713 +:106F600030B50446F44A0020163A117953790AE004 +:106F70005518AD79A54201D1401CC0B2491CC9B217 +:106F8000102900D100218B42F2D130BDFFB5EA4873 +:106F900081B0163841790A9C491CCDB21E46102D8D +:106FA00000D10025E44816380079A84202D1042017 +:106FB00005B0F0BD0820FFF7D3FF0746072804D926 +:106FC000FF20DEA1A5300EF004F80298082801D1B8 +:106FD000072F17D001982080301D6080002060713D +:106FE0002071E68003982081204606F005FD0028E8 +:106FF0000AD0D148029916384379821D99544571B7 +:107000000020D5E7D248D3E7FF20CCA1B7300DF060 +:10701000E0FF0320CCE7F0B58DB0044600256846BC +:10702000057116468C460620FFF79AFF00281CD1F2 +:1070300021780127C807002801D0132917D96846ED +:1070400087766178C17602218183C58304A8009088 +:1070500070680C23008805220621FFF797FF00289F +:1070600003D0B6A185200DF0B4FF0DB0F0BDB2483D +:1070700016380278002AF8D0427863789A42F4D120 +:10708000012918D0132919D16146062916D1057096 +:10709000002101200AF04EFE6846077170680188E1 +:1070A0006846C1800021C9430181607922790102CB +:1070B000114368461AE06146062908D068460079FF +:1070C0000028D2D0314601A8FDF7AFFECDE705700C +:1070D000002101200AF02EFE6846077160792279AE +:1070E00001021143684601810021C9434181E9E75A +:1070F000914810B50021163801704A1E4280417037 +:107100000171417101200AF015FE10BD10B5FFF7A5 +:10711000EFFF0020884902464300401CCA5208285D +:10712000FAD310BD84491639488000207047DFE744 +:1071300070470EB501216846017086498180C18083 +:107140000021FDF772FE0EBDF7B505460078002759 +:1071500000090C463E46012804D0FF2077A1683084 +:107160000DF037FF287A02280CD0FF2073A17E3063 +:107170000DF02FFF0298002C068001D0278066803A +:107180000020FEBDEA89702710460A3086B2002C26 +:107190000BD068680088A080A8892081E280204602 +:1071A0000A3029690DF078FDE4E702980680E7E7E8 +:1071B000F0B543680246D9799C79090221435C7A8B +:1071C0001E7A25025C88981D3543241F87B0A14292 +:1071D0001DD11B79022B1AD1042D1AD0052D2AD0CE +:1071E000062D1AD0402D12D3061D0F4614462846F0 +:1071F000FFF7AAFE08280AD0112020700220207272 +:10720000A581E7812661607808210843607007B096 +:10721000F0BD001D00F0E1F8F9E7041D0D46FEF792 +:10722000F9FE0028F3D0062168460170019405722A +:1072300008F0CBFBEBE7001DFFF7EDFEE7E710B52D +:107240003D4C8AB0163C2278012A26D012236A4689 +:10725000937363789B1CD373082313820B88538228 +:107260004B8893828B88D382C988118301A90091AE +:107270000C2305220721FFF789FE00280BD10022ED +:10728000F023114601200AF0B0FC01202070607844 +:10729000801C607000200AB010BD1120FBE7F0B523 +:1072A000254C0027163C87B00646A51D1FE06079D7 +:1072B0002179884204D1112020A140010DF089FEDE +:1072C0002079405D042804D0082808D17F1CFFB233 +:1072D00005E0072069460870684608F076FB2079CB +:1072E000401CC0B22071102801D10020207130460E +:1072F000761EF6B20028DAD1384688E710B5044683 +:10730000402801D2072010BDFFF71EFE082802D03A +:107310003120000210BD0021074802E0491C082965 +:1073200003D24A00825A002AF8D1082914D0490011 +:107330004452002010BD0000DA1300207372635C19 +:107340006C326361705F636F72652E6300000000D2 +:1073500004300000FFFF00000420EBE700B54028E8 +:1073600001D2072000BDFFF7EFFD082805D000215E +:107370003B4A40001152084600BD052000BDF0B553 +:107380008BB016460C00074607D0002E05D061884A +:10739000402904D207200BB0F0BD1020FBE7208865 +:1073A000002801D0172801D90C20F4E70846FFF780 +:1073B000CBFD08280FD0258803A82A463146023085 +:1073C0000DF06AFC01A8009062882B46082138461F +:1073D000FFF7DCFDDFE70520DDE7F0B50E460746E9 +:1073E00001468BB014460125304606F0D1FC082832 +:1073F0001DD10020694608850120FFF7B1FD002856 +:1074000002D117206946088503AB02330AAA394620 +:107410003046009407F0CFF800280AD0022819D08F +:10742000032804D0FF200F4902300DF0D2FD28467A +:10743000B1E76846038D002BF9D001A80090606881 +:10744000042200880121FFF7A1FD0028EFD00549A3 +:10745000EC20EAE760780025102108436070E6E739 +:10746000DA1300203C730000002803D08178012942 +:1074700039D101E0102070470188FA4A881A9142F8 +:1074800033D01BDCF84A881A91422ED00BDC00293D +:107490002BD00320C002081A27D0012825D00121B3 +:1074A0000903401A07E001281FD002281DD0FF2839 +:1074B0001BD0FF380138002815D116E0FF22013219 +:1074C000811A904211D008DC01280ED002280CD07D +:1074D000FE280AD0FF2806D107E0012905D002299D +:1074E00003D0032901D0002070470F20704700B55A +:1074F0000A2821D008DC03000DF05CFE0A1C2024C1 +:10750000241A24282224261A102819D008DC0B2833 +:1075100016D00C2814D00D281AD00F2808D111E04D +:1075200011280FD0822807D084280DD085280DD0AF +:10753000032000BD002000BD052000BDCB4800BDDC +:10754000072000BD0F2000BD042000BD062000BDA7 +:107550000C2000BD70B500290BD0CB1FFA3B812455 +:107560001E46CDB2112B1BD2012805D0022806D011 +:1075700009E0002010701DE0FF20043001E0FF2032 +:107580000330814218D033000DF014FE111613138E +:1075900016131616131616161313131316131600B6 +:1075A0000846FF3881381F2803D9FF39FE390229E0 +:1075B00002D81570002070BD1470072070BD00B592 +:1075C00003000DF0F7FD060406040C080A0C002069 +:1075D00000BD112000BD072000BD082000BD032014 +:1075E00000BD00780207120F04D0012A05D0022A3C +:1075F0000AD10EE0000907D108E00009012805D0F2 +:10760000022803D0032801D007207047087000200B +:10761000704706207047002807D0012807D00228AD +:1076200007D0032807D007207047002004E011206E +:1076300002E0212000E0312008700020704738B5BA +:107640000C4605004FD06946FFF7CBFF002822D13A +:107650002088032189028843694609788907090D32 +:10766000084320806946681CFFF7BBFF002812D141 +:107670002188032000038143684600788007800C3E +:1076800001432180A8784007820F2020012A03D0DF +:10769000022A03D0072038BD814300E00143218046 +:1076A00088B20105890F08D0012189038843A97890 +:1076B0000907C90F89030843208080B28104890F1C +:1076C0000AD0A9784004C906C90F400CC903084371 +:1076D00020808004800F02D12088400403D52088B8 +:1076E000402108432080002038BD70B504460020AA +:1076F000088015466068FFF7A2FF002815D1218990 +:10770000A089814210D86168594E8978C90707D08D +:10771000711E884208D831460DF038FB298009E0F7 +:10772000FF21FF31884201D90C2070BDFF30FF30AE +:107730000330288060688078C007A08903D0314674 +:107740000DF024FB03E0FF30FF30033081B22980CD +:1077500020688178474801732068464900882039AD +:107760004885002070BD10B5137804785B08E407E5 +:107770005B00E40F23431370FD2423400478A40727 +:10778000E40F640023431370FB2423400478640750 +:10779000E40FA40023431370F72423400478240744 +:1077A000E40FE40023431370EF2423400478E4063D +:1077B000E40F240123431370DF2423400478A4063C +:1077C000E40F6401234313700078BF244006C00F08 +:1077D0002340800103431370002906D00878C107B5 +:1077E00001D1800701D5012000E00020C001590629 +:1077F000490E0843107010BD30B50A8803239B0260 +:1078000004889A4323059D0F02D1A3049C0F01D045 +:107810009B0F00E001239B021A4303230A801B03F2 +:107820009A4303889804840F02D11805830F01D06E +:10783000800F00E00120000302430A8030BDF3B551 +:1078400091B00D0018D01198002818D012212846A8 +:107850000DF07FFA01A9012007F0A9FE00242646B9 +:10786000374677E0022900000128000003300000BD +:10787000010200000C140020102013B0F0BD0720FE +:10788000FBE76846007C01280BD16846C1890520CA +:10789000C002081A0AD001280AD002280CD00328F6 +:1078A0000CD0042C0ED0052C0FD10DE0012400E0EB +:1078B00002246846868908E0032406E0684604241A +:1078C000878902E0052400E0062468468189119832 +:1078D00081423FD12C74002E3AD00BA800900CAB03 +:1078E00010220021304607F0F4FE002820D168461F +:1078F000808D2A46C0B20CA909F0EDFC002817D1F2 +:10790000AE81002F24D00BA8009006AB13220021DB +:10791000384607F0DEFE00280AD16846808D06A9A9 +:10792000C01E0331C0B22A1D09F0D5FC002801D0C9 +:107930000320A2E76846817E427E08021043E88168 +:10794000062C05D16846007CA8726846C08928814B +:10795000002092E701A807F032FE002891D0FFF73F +:10796000C6FD8AE7002804D0012903D0022904D0EB +:1079700003207047F949C98D02E0F8494031C988B0 +:10798000814201D1002070470720704730B5F34C89 +:107990000025608B91B0C00B2ED1216900292BD01E +:1079A000207B800728D401226846027102720022DF +:1079B0004272228B8281A28A8282049117210183E2 +:1079C00009AA0023023206A901A807F0A7F9002896 +:1079D00003D0FFF7F4FD11B030BD207B0221084336 +:1079E000207307A8009069460B8B20880422012190 +:1079F000FFF7CCFA05460BE0FBF7A5FC84210170EC +:107A00000921017218341ECC0C301EC0FBF7B7FCE4 +:107A10002846E0E710B5D14C034621690020002933 +:107A200009D02146012210311846FBF76BFE0020D9 +:107A30002061A0820120217BF9221140217310BD19 +:107A400070B50C4605461C2120460DF082F9002039 +:107A50002080002D08D0012D04D0C1A1C5480DF013 +:107A6000B8FA70BD062000E00520A07070BD10B50A +:107A700007F07CFB10BDFEB50546007800260C46DD +:107A8000374603000DF096FB0C91070C1D962F4610 +:107A90002F46486C899168680A38FBF793FD89E0A6 +:107AA000002904D0B348AEA11B300DF092FAFBF7C9 +:107AB0004AFC04464078082108436070FBF75FFCED +:107AC00078E0002C04D1BB20A5A180000DF081FA44 +:107AD000284601F0B1FA00286CD0607808210843EC +:107AE0006070022666E0E888694608800190002CF4 +:107AF00004D1A0489AA12F300DF06BFA28780728FE +:107B00001CD10198C00B19D0944800218171A9881B +:107B1000818012E003264DE0002C04D1C52090A105 +:107B200080000DF056FA8D48017B89070BD500695E +:107B3000002802D0E888C00B3CD0022660780821DB +:107B40000843607036E0291D8EC918308EC0283871 +:107B50000188022601222046FBF7B6FD0127EDE74A +:107B6000002C04D183487EA164300DF032FA7B48AA +:107B70000821007B4007C00F460060780843607012 +:107B8000002E17D12879012802D16879002811D058 +:107B90002046FFF73FFF07460CE0002CCED10D201A +:107BA0006FA180010DF015FAC8E772486CA17A3018 +:107BB0000DF00FFA002C0CD06078000709D5002FCB +:107BC00007D1842020702046582229460830F9F732 +:107BD000FBFA3046FEBDF7B5027A88B00C46054682 +:107BE00020460C300490069216300027921E029018 +:107BF0003E460A31594813000DF0DCFA0ADF06E66A +:107C00002AE62AE66A98C6E64288002A02D0522767 +:107C10000726DDE051271E26002C7DD06A684F48DC +:107C20001288A2800122A2718079C0004019C08907 +:107C3000FFF705FE002877D148488179C900491926 +:107C4000C98921818079C0004019408AA083BFE0A2 +:107C5000688A00900698072817D1E889C00B14D0CD +:107C600000985127223086B2002C55D0A88904995B +:107C7000FFF7E5FD002857D168680088A080022042 +:107C8000A071A8892081012041E000985027203070 +:107C900086B2002C40D0A889FFF7D1FD002843D13F +:107CA00068680088A080A889E080287A07280AD020 +:107CB00002202072288AA0830098E0832046696908 +:107CC0002030009A01E00120F3E70CF0E5FF7FE0AF +:107CD000698A00910169002902D0E989C90B22D083 +:107CE0000099512722318EB200218171A9898180AA +:107CF000002C5FD00088A080A8890499FFF79FFD21 +:107D0000002811D10220A071A88920810420A0722E +:107D1000288AE083009801E04CE005E0208469694E +:107D2000009A0298D1E703200BB0F0BD007B40071A +:107D300002D55127222601E050272026002C39D0D9 +:107D40006868502F0088A08016D00220A0712146BC +:107D5000287B0831FFF774FE3AE00000EC130020A6 +:107D60007372635C67617474735F636F72652E63B3 +:107D700000000000CB020000287BA11DFFF760FE81 +:107D80000020FFF747FE23E0A9890089884207D138 +:107D900054270626002C0DD068680088A08017E0C4 +:107DA00053270826002C05D068680088A080A88981 +:107DB000E0800DE00A98068010E055270726002C89 +:107DC000F8D00020A07103E0FD49FE480DF001F954 +:107DD0000A98002C068001D0278066800020A3E747 +:107DE000F94800210172203801814181418081716F +:107DF0008180027BF923520852001A40027301610C +:107E00008182704770B5F04C86B0203C2080002005 +:107E10006080A071A0806946012007F0C8FB102691 +:107E200008E00199088802461207D20FB0431201F8 +:107E300010430880684607F0C2FB0500F1D02069B6 +:107E4000002804D0DF48DE4933300DF0C2F8207B33 +:107E5000800704D5DB48DA4934300DF0BAF8822DBA +:107E600004D02846FFF743FB06B070BD0020FBE7B7 +:107E7000D54810B52038017B012211430173002140 +:107E800041808171818006F045FB10BD10B5CE4C5C +:107E90000020C043203C20800020FFF7BBFD207B5A +:107EA00040084000207310BD70B5C74D0446203D0A +:107EB000287B800704D5C348C1494B300DF089F8B1 +:107EC000287BC00706D12888C049884202D028698B +:107ED000002801D0082070BD002C08D0A0881628EA +:107EE00001D2092070BD20682861A088A882FFF710 +:107EF0004DFD70BD10B50C4607F02DFB002804D0D9 +:107F0000C520AF49C0000DF064F82046FFF7EFFA36 +:107F100010BDF0B5AC4D0446203591B0002008905E +:107F200068820E462882E8812946E8804039088622 +:107F3000694608830885088688838882A2480E904F +:107F4000007A1746012808D0022806D0032804D05A +:107F5000042802D0082011B0F0BD9D48844269D3A6 +:107F600001239B049B49E21A8A4263D39A4A9442B2 +:107F700060D286425ED31001331A0846834259D339 +:107F80001046864256D26068002815D09049884233 +:107F900050D31101421A8F498A424BD38E498842ED +:107FA00048D260892189884203D801225202914235 +:107FB00001D90C20CFE7089010AA0CA93046FFF792 +:107FC00094FB0028C7D106A92069FFF738FB0028D9 +:107FD000C1D1206900280CD060788007002868464D +:107FE000008B03DA8004800F75D002E08004800FDC +:107FF00071D16846008B81061ED58004800F6068B1 +:1080000009D0002818D00721490740180121890309 +:1080100088420FD201E000280ED06D496068884286 +:1080200008D301218904421A6A498A4202D36A4963 +:10803000884201D310208EE705A96069FFF7FFFA97 +:10804000002888D16069002808D06846808A010528 +:10805000890F01293FD18004800F3CD007A9A06976 +:10806000FFF7EDFA0028A5D16846808A800632D451 +:108070006846808B81062ED4A169002906D00105AF +:10808000890F012927D18004800F24D0E0680028BF +:1080900004D0007800281ED01C281CD24A4A611C3B +:1080A000123220460992FFF75EFB0321002089026D +:1080B000884301218902411868460D9101850121FB +:1080C000817446490182404A0FA91532306809F08F +:1080D00028F9002801D007203DE708A8007F3A4989 +:1080E000C01CC2B26A7100201031FF3200900190B2 +:1080F000FF3203460291039003320AA904A807F055 +:10810000C5F9002827D130482038008E0B902E4822 +:108110003389383032690146123902910093019255 +:10812000039010A90A8873890CA9306807F0AEF98A +:1081300001007CD12448E98811308170090AC1709E +:108140000026009631386A79008E3146099B07F087 +:108150001CF9002802D0FFF7CAF9FCE60E98807CD3 +:10816000C00928D068460D99018501218174292113 +:1081700009020182AE81287B61784008C90740006E +:10818000C90F08432873FD2108406178022289073E +:10819000C90F4900084328730B4900922A31881CF3 +:1081A00002910190002303960D4A0AA904A807F042 +:1081B0006DF901003BD1606800283DD0206911E0D5 +:1081C000607D0000220400000C140020FFFF00006E +:1081D000006001000000FC1F004000200328000098 +:1081E0000302000000280DD106A90CA8FFF704FB2C +:1081F0006078800706D46946088B03210903884309 +:1082000069460883012069468874FD4808822089F0 +:10821000FC490CF0BBFD6268089BFB48019200938F +:1082200002900A460396002306A904A800E081E014 +:1082300007F02CF901007DD12078C10601D4800619 +:108240002ED568460684606900280DD105A90CA8C2 +:10825000FFF7D2FA6846818A032080028143012019 +:1082600080020918684681826946888A4821084345 +:108270006946888201208874E14808AA401C088267 +:10828000E1490192891C0220DE4A029100900023FC +:108290000396921C05A904A807F0F8F8010063D121 +:1082A0002078C0072ED068460684A06900280DD12A +:1082B00007A90CA8FFF7A0FA6846818B032080026B +:1082C0008143012080020918684681836846818BBA +:1082D000402001436846818301218174C84908AA6E +:1082E000891C0182C8480192001D0221C54A0091E3 +:1082F000029000230396921C07A904A807F0C6F871 +:10830000010031D1E068002832D068460D9901851E +:1083100001218174BA49C91C0182E16808A80A7860 +:10832000027049784170E068418868464184E0689D +:10833000017900E018E008A80171E0680722C1880F +:1083400008A84171090A8171AF4808A9801D0092EF +:1083500001910290412200230396D2000AA904A8A9 +:1083600007F094F8010003D00B98FFF7C3FDF2E586 +:1083700003210E98002F017207D0E8883880E88921 +:108380007880288AB880688AF8800020E3E5F0B514 +:1083900001248BB016460F46012802D002281BD1BB +:1083A00004E0684605218474C90202E068469749E2 +:1083B00084740182002F11D0032100208902884398 +:1083C0000121890241186846018506AA05A9384697 +:1083D00008F0A7FF002803D00720A5E41020A3E49D +:1083E000894DB8782E3D287338882F46203F7885F0 +:1083F0006A46127D0020294606AB00920E31019399 +:10840000FF32029103900346FF3203320AA904A807 +:1084100007F03CF8002802D0FFF769F884E4002E4A +:1084200001D0F88D30802C7200207DE470B592B0C0 +:108430000446012508A8857075496846018406F040 +:108440009CFF002208A90120FFF7A1FF064606F0C5 +:1084500098FF30003AD120780024C00700283FD090 +:108460001C2168460CF077FC684601782020014307 +:108470006846017008A885706649684601841194B1 +:108480000794817FF9200140891C6846817700208C +:10849000014668460177002001466846417704217D +:1084A0008185C485018607A80A9011A80D9008A8A7 +:1084B000099006F062FF0EAA09A96846FFF729FD98 +:1084C000054606F05EFF002D02D0284612B070BDB2 +:1084D0004D486946098F4E3801816946898F41812F +:1084E00049482E3804720020F0E7F7B5464E9CB09C +:1084F00000212E3E0091317A012904D0022902D0B8 +:1085000008201FB0F0BD40494E39CA8D824201D0CB +:108510000620F6E71D98824201D10720F1E73B488B +:10852000012110AA9176401C1083002003239B0296 +:1085300002469A438B02D31810AA93846A46918408 +:108540003549D18410AA9077908317AA0A926A4677 +:1085500091850C9009A807F051F80024254627467C +:1085600004A909A807F04DF8002810D082287BD173 +:10857000002C7CD0002D7AD010A8048145810024E5 +:10858000047518A8807812AD012872D07AE0684688 +:10859000807D002F1FD0012862D16846818A1B4848 +:1085A000401C814219D114A800906846408A0EAB45 +:1085B0001022002107F08DF8002877D110A8008A3A +:1085C000042801D006285BD16846018F1D9881429E +:1085D00046D10F2095E7012842D16846808A0521BF +:1085E000C902884202D0491C884239D106484E3817 +:1085F000C18D6846408A814210D101270FE00000FA +:1086000001290000010200003A14002001280000A6 +:1086100001180000052A0000FFFF00000027002CC1 +:1086200001D0002D0DD01D99884219D114A90091B7 +:1086300004460EAB1022002107F04BF8002835D17C +:1086400001E0009D0CE010A8008A022801D010284B +:1086500016D1C0B218AA0EA908F03DFE00280FD10D +:108660006846408A00907BE720E000E001E00520BA +:1086700047E72A1D15A918A808F053FE002801D0C5 +:1086800003203EE710A8007D0023001DC2B210A801 +:1086900002751E98029019A901950394009216A8DC +:1086A00006F0F4FE002801D102213172FEF71FFF0F +:1086B00027E73EB50B46401E84B201AA00211846AA +:1086C000FFF751F806F059FE02A8009001AB012215 +:1086D0000021204606F059FE044606F052FE684688 +:1086E0000089012803D0FE49FE480CF072FC2046A8 +:1086F000FEF7FDFE3EBDF0B5FB4E0446307A89B074 +:108700000F46032804D0042802D0082009B0F0BD89 +:1087100004AA06A92046FEF7E8FF0500F6D1F248B4 +:108720002389383022690146103902910093019261 +:10873000039069460A8A638906A9206806F0A6FEA6 +:10874000002802D0FEF7D3FEE0E7002F03D0E64872 +:10875000203000893880042030722846D6E738B5AA +:108760000C00054608D00022694607F00CF80028E6 +:1087700004D0FEF7BCFE38BD102038BD6946204647 +:10878000FEF75DFF0028F8D1A0786946C207D20F36 +:10879000284607F013F8ECE73EB50C0008D002AA13 +:1087A000694606F0F0FF002804D0FEF7A0FE3EBDAB +:1087B00010203EBD032120460CF0CBFA684600880D +:1087C00001A90005800FFEF726FF00280BD168469F +:1087D000007920706846008801A98004800FFEF7A8 +:1087E0001AFF002801D003203EBD68460079607062 +:1087F000A278EF20024068460088C10B09010A43B5 +:10880000F7210A404104C90FC9000A43A270F921A7 +:108810000A40800601D5012000E0022040006946A0 +:108820000243097A50084000C907C90F0843A070E5 +:1088300000203EBDFEB51D4614460E46074606F016 +:108840009CFD01A8009022882B463146384606F050 +:108850009CFD054668468088208006F092FD2846EB +:10886000FEF745FEFEBDF0B50C46002199B0074667 +:10887000684681850D46002C11D0E068002806D09E +:10888000A06800280BD002886B469A850180A078EA +:10889000012806D0022804D0072019B0F0BD10200E +:1088A000FBE72088002807D0401E80B201A906F00F +:1088B0007EFE002842D136E08C48EEE769468A8980 +:1088C00021888A420BD26846007C002501282CD1E1 +:1088D0006846C0898649884227D1012525E08A4219 +:1088E00003D1002D2FD06D1C01E0022D02D0032DED +:1088F0001BD31FE06946097C012916D169467C4BD0 +:10890000CA895B1ED11A9A421DD005DC7948101A1B +:1089100019D0012809D116E0012914D0FF390139F5 +:1089200003D1032506E00D26B60201A806F047FE96 +:108930000028C3D0822804D0002806D0FEF7D7FD37 +:10894000ABE7022DFAD13046A7E7E068002813D044 +:1089500006F013FD0BA800906A46A1882088928D2E +:10896000E36806F012FD054606F00BFD002D19D157 +:108970006846A168808D088002980078C00601D5FD +:108980005D488AE706F0F9FC0EA8009068468089E9 +:108990000CAB0222002106F09CFE054606F0F1FC1D +:1089A000002D01D02846C9E76846008F022801D073 +:1089B000032072E7A078012808A8007C03D0800774 +:1089C0000ED4082069E7C007FBD00820FEF7C8FADC +:1089D000072802D34548401C5FE70825022001E034 +:1089E000022503206946087621886846818317217D +:1089F000818611AA002302320DA906A806F08EF97D +:108A0000002802D0FEF7DBFD47E70FA8009068467C +:108A1000838E042229463846FEF7B8FA3DE770B542 +:108A2000064615460C460846FEF71EFD00280AD1EC +:108A300006F0A3FC2A4621463046FFF7A8FC044670 +:108A400006F09FFC204670BD70B514460D460646E4 +:108A500006F093FC224629463046FFF746FD0446C1 +:108A600006F08FFC204670BD70B51E4614460D0002 +:108A70001AD0002C18D06168002915D00121FEF70A +:108A800071FF00280FD12068FEF7EEFC00280AD104 +:108A900006F073FC324621462846FFF73AFA0446B0 +:108AA00006F06FFC204670BD102070BD70B51546F5 +:108AB0000C0023D00221FEF755FF00280ED12068BC +:108AC000FEF7D2FC002809D106F057FC29462046C3 +:108AD000FFF711FE044606F054FC204670BD00006E +:108AE000607D00003E0600000C14002003300000F2 +:108AF0000328000000280000013400001020EDE7EA +:108B0000FEB507460E4607201546400701211218FC +:108B100089031C468A4219D2002C02D020188842B0 +:108B200014D2384600F045FA00280AD1002C0FD1A3 +:108B300001AA6946384606F026FE002802D0FEF754 +:108B4000D6FCFEBD68460088800601D41020FEBD1C +:108B500023462A4631463846FFF76CFEFEBDFFB578 +:108B600085B01E4614000F4609D003AA02A9059835 +:108B700006F009FE002804D0FEF7B9FCC6E5102077 +:108B8000C4E568460089C00601D5FB48BEE506F08D +:108B9000F4FB01A800900023F84A3946059806F036 +:108BA00098FD054606F0EDFB002D11D1002E0CD0EE +:108BB00006F0E3FB002000902288334639460598F2 +:108BC00006F087FD054606F0DCFB684680882080BD +:108BD0002846D1E7002906D0E94B0A885B899A42EA +:108BE00001D8E84870473EE610B586B004236C46CD +:108BF000A382E34B1C89002C07D05B898B4201D2F6 +:108C0000914204D9DF4806B010BD0620FBE76B4651 +:108C100019825A820021009101911C8002219970D1 +:108C200005A9029104A903916946FFF71CFEEAE732 +:108C3000F0B591B00D4681206946087105F09CFCA5 +:108C40000646002D08D02878CD4C012806D00228F1 +:108C500028D0072011B0F0BD1020FBE7A98801AA99 +:108C6000FEF778FC0028F5D1B00734D568460079C6 +:108C7000002820D1A879C0071DD006F07EFB002077 +:108C800000906A892989A088EB6806F07EFB694616 +:108C9000087106F076FB6946087900280BD0FEF7CC +:108CA00026FCD7E7A98801AAFEF754FC0028D1D1F9 +:108CB000342006420FD00121684601720173017908 +:108CC0004173F00609D5A18868460182A18A018313 +:108CD0002069059004E00820BCE7A0886946088266 +:108CE000FAF731FB05461720694688830AAA2B4606 +:108CF000023207A902A806F011F8074668780007B3 +:108D000001D5FAF73CFB002F03D03846FEF757FC9D +:108D1000A0E7F00603D5207B062108432073B006A8 +:108D200002D50020FEF776FE08A8009069468B8BDE +:108D3000208804220121FEF729F98BE7F0B50026EF +:108D400095B014460D4600290FD0022C4FD3A71E14 +:108D5000BAB28A480AF052FE29191039CA7B8B7BB5 +:108D600011021943884242D1BCB201A9012006F088 +:108D70001EFC7AE0029F3888010776D5002D41D08D +:108D8000A9190691CA788B78361D1102B6B219431B +:108D90008919A1422BD869468A8906994B780978A6 +:108DA0001B020B439A4222D1C00623D506F0E5FAF6 +:108DB00007A800900698AB19C17880780A02069936 +:108DC00002434878097800020843002106F0DDFAE2 +:108DD000009006F0D6FA009800283ED10698C17897 +:108DE000827808026946898B1043884202D00B20A2 +:108DF00015B0F0BD0698C17882780802104380193A +:108E000086B22EE0C0062CD5002007AA01461154D8 +:108E1000401C80B21028FAD306F0AFFA06A80090E2 +:108E20006846002380891022194606F052FC009003 +:108E3000002803D006F0A5FA00980EE00BA86946BA +:108E4000009088890A8B07AB002106F09EFA0090FB +:108E500006F097FA0098002803D0FEF748FBC7E712 +:108E600003E0388810218843388001A806F0A7FB6A +:108E7000002800D17EE7424D6988002921D00122D7 +:108E800068460276027700244477018417218185A1 +:108E90000EAA234602320BA906A805F03FFF0028C0 +:108EA00002D0FEF78CFBA3E70CA8009069468B8DDF +:108EB000288804220121FEF769F8002898D16C80E7 +:108EC00096E7002094E7F0B5002487B015460E46DB +:108ED000002A04D002A9012006F069FB41E010201D +:108EE00007B0F0BD0398007800073AD506F045FAC0 +:108EF00001A8009068460023008A204A194606F01F +:108F0000E8FB074606F03DFA002F23D1002E23D0C0 +:108F100068468088298820183719001D814239D376 +:108F20006946098A3970090A797069468988B97071 +:108F3000090AF97006F021FA01A869460090088A2A +:108F40008A883B1D002106F0C4FB074606F019FA8B +:108F5000002F01D00320C3E7684680882018001D39 +:108F600084B202A806F02BFB0028BBD082280BD0CD +:108F7000FEF7BDFAB4E7000001340000FFFF000077 +:108F8000EC13002003300000002E0ED02988A01C16 +:108F9000814201D20C20A3E72246314639480AF02B +:108FA0002DFD31190870000A4870A41C2C80002087 +:108FB00096E700B585B06946FEF741FC00280AD166 +:108FC0006846007C03000CF0F5F808052F2F2F2FC2 +:108FD00008080531032005B000BD684680780128E7 +:108FE00007D1684600880321C902401A1CD0012815 +:108FF0001AD068468079012806D1684680881521F4 +:109000004902401A05280FD96846807A012811D1F3 +:109010006846018929200002081A05D0022803D0D9 +:10902000032801D0042805D10F20D4E7164917489A +:109030000BF0CFFF0020CEE738B5154A0021518054 +:1090400003791AE0CC002418A46800946C462488A4 +:10905000250707D5E50605D5D90008182038C08BA7 +:10906000508006E0640406D59171C9000818C088D4 +:109070009080012038BD491CC9B28B42E2D8002043 +:1090800038BD0000FFFF0000607D000033020000DB +:10909000EC1300200120F8494006C861704770B504 +:1090A000F54D0024AC7028466C7020304470047478 +:1090B0006C61AC72AC6209F01AFFA86128463430CA +:1090C0000AF0B4FD002804D0FF20ECA13A300BF0E8 +:1090D00080FFEE48C46301204006E86170BD70B5B2 +:1090E0000125EB4902260E60E849CD63E949C96ACA +:1090F00009070ED4E7494031CB6AE74A53620B6B4C +:1091000093624B6BD3628B6B1363C96BD3051943AB +:109110005163D949E14CC96900282BD001282DD0D1 +:10912000FF20D6A169300BF054FFDD48A063FF207B +:10913000043060632563DB49032008602061D74960 +:10914000962040314860D948D7494163D549FC3918 +:109150000163D549091FC163D249F03981630320F6 +:10916000D249000340394860D14910204860D148B5 +:10917000066070BDD0486061D04804E0CF48E03060 +:109180006061CE48801F0143A161CEE7BA4901204A +:1091900008707047B84900200870704770477047E2 +:1091A000BE4940310028086802D00122104301E086 +:1091B000400840000860704770B50C46AE4D01464F +:1091C0000622E81C0BF068FD6C7270BDAA482030C6 +:1091D00040787047A84A91705070704770B50D463E +:1091E0000446082904D9FF20A4A1C6300BF0F1FEE3 +:1091F0000022B34809E09100635809180B6053003E +:109200001B191B8C0B62521CD2B2AA42F3D3206BE7 +:10921000AB494031086070BD0B23DB4310B5C21A67 +:109220009E4998421FD008DC1C3222D00A2A20D046 +:10923000142A1CD0182A08D117E0083011D00428AD +:109240000DD0082809D00C2805D0FF208BA1F230C2 +:109250000BF0BFFE10BD04200CE000200AE0FC2053 +:1092600008E0F82006E0F42004E0F02002E0EC2022 +:1092700000E0D820C86010BD7F482030007B7047D8 +:1092800010B5864CC17861620BF067FD0002E061A9 +:1092900010BD252808D0262808D0272808D041004E +:1092A0000A2807D8091D06E0022105E01A2103E07B +:1092B000502101E0891DC9B2784A91607749403157 +:1092C000486170476C494861704770B56A4CA0723C +:1092D00000F01FFBA07AC00740D0724D28688007BD +:1092E00003D466A177480BF074FEA07A01061DD561 +:1092F000800707D5734861A1801C0BF06AFEA07A35 +:10930000000613D52078694E012816D0002804D015 +:109310006C485AA111300BF05CFE6B487061A0697B +:109320003061FF206149013040394860A07A8007F0 +:1093300014D52868C00708D102E06348001FEDE794 +:1093400060484EA11A300BF044FEA07A400728680E +:1093500001D5042100E008210843286070BD70B5E4 +:109360000124454D002807D0012818D002281AD022 +:10937000232042A100010BE000F0CBFA52482978EB +:10938000001F012907D0002907D04E483BA15738BC +:109390000BF01FFE70BD046070BD446070BD812085 +:1093A000FFF793FF70BD00F0B4FA6869002804D19C +:1093B000444832A14F380BF00CFE6969A86A401886 +:1093C0004249C86039484249403001603E490C3149 +:1093D00041600814354940394860274820300474FA +:1093E00070BDF8B50C2069460870314C6068C00645 +:1093F000C50F1026A66034480021FC300161324BB5 +:1094000001221B1F1A610BE000BF00BF00BF00BF9D +:1094100000BF00BF00BF00BF6B461A78521E1A7013 +:109420006A461278002A02D00269002AECD0016153 +:1094300068460078002804D1912010A180000BF02C +:10944000C8FD002D00D06660F8BD0B490020C86142 +:10945000704710B50BF081FC00021049000AC86388 +:1094600010BD0B49022008607047094902200860BE +:109470001049086070470000481400207372635C54 +:1094800068616C5F7263732E63000000C01F004050 +:1094900080E100E08000001000170040001500404F +:1094A0005B060000001200404480004040F501408F +:1094B0000013004080E200E00601020025000300E6 +:1094C0000016004075020000041000404085004076 +:1094D0004C810040F74902200860CBE7F64908704C +:1094E000C8E710B5F5480AF0A9FB002803D0F449F5 +:1094F000F4480BF06EFD10BD10B5F0480AF0B6FB55 +:1095000010BDF1494860B5E7EC4910B53439EF4B6F +:109510000022C8605A60896A0818ED49486000F066 +:10952000FFF910BDE54810B5C2213438C160E74AE3 +:1095300000215160806AE649C230486000F0F0F9CD +:1095400010BD0120E34940028860DC490020343925 +:10955000C860DF4948608DE7D84900203439886207 +:1095600088E7D648DA493438806AFE30886081E777 +:10957000D749002088607DE7D748016810229143D1 +:109580000160D6490120886174E7D5490020C8618F +:10959000D14801681022114301606BE700B5FFF765 +:1095A000EBFFC64900203439087400BD00B5FFF751 +:1095B000ECFFC24901203439087400BDC849CA69AA +:1095C000012A01D0002055E7BF4A40329268520676 +:1095D000520E524202700020C86101204AE7F8B5DD +:1095E000BF4C2069012806D00021B44834380078E7 +:1095F000012802D004E04021F7E7E268012A04D004 +:1096000000220A43012802D004E02022F9E7616821 +:10961000012905D000211143B24A002802D007E0F9 +:109620001021F8E71368012B02D1E368012B04D065 +:1096300000230B43002802D007E00823F9E7116854 +:10964000002902D1E168012905D000221A439F4E6A +:10965000002802D004E00422F8E77168012904D050 +:1096600000211143002802D004E00221F9E76068DC +:10967000012829D000259C480D4301680906090EE0 +:1096800002D06169012900D000218C4F143F397349 +:1096900000680006000E02D0A069012800D000205A +:1096A00078738B488068002803D000F03DFA0128C9 +:1096B00000D00020B8730021E16021616160616128 +:1096C000A16171602846F8BD0125D4E77B480121DE +:1096D0001438C173CEE6F8B5784E0127143E307CBD +:1096E0000025002825D07C4C206800902560FFF7DD +:1096F00078FE009820607A48C56005614560456144 +:1097000085617449001488603046203801787348B8 +:1097100001290AD000290AD0D920694980000BF01C +:1097200058FCF9F775FC3574F8BD0760F9E7476038 +:10973000F7E7FFF754FF04460020F07364484268DF +:109740005E4D343D6A620068A8622978002909D11B +:10975000A978002906D05C4B5B681B780B406978C0 +:10976000994309D000213170E10707D0104602F07B +:1097700029FD0121A86A08E03770F5E7A10601D5A7 +:10978000022102E0A10702D5002102F02AFD4E4F7E +:10979000796806220931E81C0BF051FA002807D13C +:1097A000687A79680978C909884201D1012000E006 +:1097B00000207070204600F0BDF83F48C2270078B6 +:1097C000002815D0012828D002283BD003285AD0E1 +:1097D0003B4946480BF0FDFB287C002804D0287844 +:1097E000002865D0FFF7C8FE2878002861D089E0FE +:1097F000A00701D501F0CCFB200703D50120EF60C5 +:1098000001F0FEFB600703D50020EF6001F0F8FBDC +:10981000A006E1D501F068FBDEE7A00701D503F063 +:1098200026FF200703D50120EF6003F09FFE6007AD +:1098300003D50020EF6003F099FEA006CCD503F01D +:1098400020FEC9E7A00703D5BF200440F9F7D2FBEB +:10985000200705D5BF2004400120EF60F9F7C9FBC0 +:10986000600705D5BF2004400020EF60F9F7C1FB79 +:10987000A00603D5BF200440F9F7BAFB6006ABD5BC +:10988000F9F7B9FBA8E7A00701D5F9F7B7FB20075F +:1098900003D50120EF60F9F7B0FB600703D5002086 +:1098A000EF60F9F7AAFBA00696D5F9F7A5FB93E7B9 +:1098B0001EE020E000E100E0600000207C140020B9 +:1098C0007C940000AB020000001500404081004085 +:1098D0004085004000F501400012004000100040AB +:1098E00000110040001400404016004094040000A5 +:1098F000FFF74BFE78E7E868002803D0A96A09184B +:1099000028484160F07B002800D10DE7F9F780FB83 +:10991000F8BD254903200860881524498860A9E519 +:10992000224823494030C161224981611F494015C5 +:1099300048609FE570B50546FFF7EBFF1E4CA17A26 +:10994000080701D568071CD41C4AC80605D5507BFA +:10995000002802D0907B002813D0880602D510780A +:1099600000280ED1480602D55078002809D00020E2 +:109970008A070026002A07DA4A0704D50122227046 +:1099800002E00120F4E72670CA0709D0AA0705D42F +:10999000890705D5002803D0A80601D4FFF721FDCB +:1099A000A67270BD408500400012004000F50140E5 +:1099B000101000404481004048140020681400202A +:1099C0002E48002101704170704770B5064614465C +:1099D0000D460120F7F780FE28490120284B08702A +:1099E0009E60DC601D6170BDF8B504460120F7F78C +:1099F00073FE22490120087021494C60214900264C +:109A00004E600321204D8902A960204F002C0AD00E +:109A1000012C03D01EA140200BF0DBFA3E60032096 +:109A200080026860F8BD386001208002F9E710B557 +:109A30001248017800290ED00321134A890291604F +:109A400010494A680021002A03D0154A1268427062 +:109A500000E0417001700020F7F73EFE10BD07489E +:109A60000178002907D007484068002802D00C4838 +:109A70000068C0B270474078704700006100002065 +:109A800000F5004000F1004000F5014000F2004008 +:109A90007372635C68616C5F63636D2E63000000CA +:109AA00000F400403648002101704170102181709F +:109AB000704770B5064614460D460220F7F70CFEB7 +:109AC00001202F492F4A0870E41E146196605560EA +:109AD00070BD10B50220F7F7FFFD2949012008707D +:109AE000294800210160416081602849C014486014 +:109AF00010BD10B5224C2078002811D00120234938 +:109B0000C002886000F02EF80021002804D0012057 +:109B100060701F48006801E061701020A070217023 +:109B20000020F7F7D9FD10BD10B5154801780029C0 +:109B300005D000F017F8002800D0012010BD4078B3 +:109B400010BD10B50E480178002909D000F00AF8C0 +:109B5000002803D00E480068C0B210BD102010BD10 +:109B6000807810BD08480168002905D041680029A7 +:109B700002D08068002801D0002070470120704783 +:109B80006300002000F5004000F1004000F50140B6 +:109B900000F4004010B528210BF0DBF810BD407830 +:109BA0008006800E704740788006800EC01C70478B +:109BB0002820704770B5054600780A0700090001A3 +:109BC000120F104328700B000BF0F4FA070507057D +:109BD000070509050B00062408E00C2406E02224F2 +:109BE00004E00024FEA158200BF0F3F96878800906 +:109BF00080012043687070BD00780007000F704737 +:109C000010B50622C01C0BF047F810BD0B4610B56E +:109C1000C11C062218460BF03FF810BD10B50622F5 +:109C200009300BF039F810BD0B46014610B506227D +:109C3000093118460BF030F810BD0278BF23C90770 +:109C40001A40490E0A430270704700784006C00F60 +:109C5000704702785206520EC9010A4302707047DB +:109C60000078C009704770B50C460546C11C2046F7 +:109C7000062209300BF010F820784006400E2070C4 +:109C800029784906C90FC9010843207070BD70B515 +:109C900015460E4604461F2A03D9D1A1A9200BF070 +:109CA00098F920462A46314609300AF0F5FF6078D7 +:109CB000AD1D80098001A906890E0843607070BD42 +:109CC00070B5054640780E468406A40E062C03D2D5 +:109CD000C3A1B9200BF07DF9A41FE4B21F2C00D959 +:109CE0001F2429462246093130460AF0D5FF204676 +:109CF00070BD70B515460E4604461F2A03D9B8A19B +:109D0000CD200BF066F920462A46314609300AF08C +:109D1000C3FF6078AD1D80098001A906890E084344 +:109D2000607070BD70B5044640780E468506AD0E75 +:109D3000062D03D2AAA1DE200BF04BF9AD1FEDB228 +:109D40001F2D03D9A6A1E2200BF043F921462A4694 +:109D5000093130460AF0A0FF284670BD10B5042234 +:109D60000F300AF099FF10BD0B46014610B50422D2 +:109D70000F3118460AF090FF10BD10B503221330C2 +:109D80000AF08AFF10BD0B46014610B503221331BD +:109D900018460AF081FF10BD4176090A81767047A6 +:109DA000817E427E080210437047C176090A01771E +:109DB0007047017FC27E0802104370474177090A4D +:109DC00081777047817F427F080210437047C175D9 +:109DD000090A01767047017EC27D08021043704770 +:109DE00081757047807D704720300279C90652091D +:109DF0005201C90E0A430271704720300079C00633 +:109E0000C00E704720300279D206D20E49010A43B3 +:109E100002717047203000794009704710B5052263 +:109E20001F300AF039FF10BD0B46014610B5052260 +:109E30001F3118460AF030FF10BD30B5411C837E3B +:109E40000A461902D37D447E927D1B0221431343AF +:109E5000674D827D8C1FAC4210D8002A0ED0082A94 +:109E60000CD88A420AD28B4208D8817F427F0802EE +:109E70001043A91D884201D8012030BD002030BD0B +:109E800000210A464254491C2229FBDB70474078D6 +:109E9000C006C00E70474078C006C00EC01C704798 +:109EA0002220704710B502788B07920892009B0F12 +:109EB0001A4302704278520952014270012908D0B7 +:109EC000022906D0032905D0FF2045A1A3300BF0BD +:109ED00080F810BD01210A43427010BD10B5027810 +:109EE0008B07920892009B0F1A4302704278520926 +:109EF00052014270012908D0022906D0032905D059 +:109F0000FF2037A1BD300BF064F810BD01210A43DA +:109F1000427010BD00788007800F70470278FB23E5 +:109F2000C9071A40490F0A4302707047007840077A +:109F3000C00F70470278F723C9071A40090F0A4378 +:109F40000270704700780007C00F70470278EF2357 +:109F5000C9071A40C90E0A43027070470078C0064C +:109F6000C00F704770B50546C1700B000BF022F9A9 +:109F70000E080A0C0E1012120C14141212160C18E1 +:109F80000C2413E0082411E002240FE017240DE054 +:109F90000D240BE0012409E0092407E0062405E074 +:109FA000452000240EA1C0000BF013F8687840098A +:109FB00040012043687070BDC078704770B504469A +:109FC00040780E46C506ED0E1B2D03D904A10948A5 +:109FD0000AF0FFFF6019C01C042231460CE00000AB +:109FE0007372635C756C5F7064752E6300000000B3 +:109FF0007A0C00003A0200000AF04EFE70BD70B507 +:10A00000044640780E46C506ED0E1B2D03D9A04927 +:10A01000A0480AF0DEFF6119C91C042230460AF08C +:10A020003BFE70BDC171090A01727047017AC279A5 +:10A030000802104370474172090A81727047817AA1 +:10A04000427A080210437047C172090A01737047CF +:10A05000017BC27A0802104370474171090A81717D +:10A060007047817942790802104370470171704747 +:10A07000007970474173090A81737047817B427B85 +:10A0800008021043704730B5411C037A0A46C47970 +:10A0900019022143537914791B0223437E4D007921 +:10A0A0008C1FAC4210D800280ED008280CD888424B +:10A0B0000AD28B4208D8D07A917A00020843A91DAF +:10A0C000884201D8012030BD002030BD10B50522E6 +:10A0D000001D0AF0E1FD10BD0B4610B5011D052263 +:10A0E00018460AF0D9FD10BD4172090A8172704705 +:10A0F000817A427A080210437047017170470079F3 +:10A10000704710B50822001D0AF0C6FD10BD0B46B1 +:10A1100010B5011D082218460AF0BEFD10BD0A78D0 +:10A120000273497841737047027B0A70407B487024 +:10A13000704710B508220E300AF0AEFD10BD0B4678 +:10A14000014610B508220E3118460AF0A5FD10BDD3 +:10A1500010B5042216300AF09FFD10BD0B460146D3 +:10A1600010B50422163118460AF096FD10BD10B540 +:10A170000822001D0AF090FD10BD0B4610B5011D10 +:10A18000082218460AF088FD10BD10B504220C30D4 +:10A190000AF082FD10BD0B46014610B504220C31B9 +:10A1A00018460AF079FD10BD017170474171090A26 +:10A1B00081717047C171090A017270470079704757 +:10A1C00081794279080210437047017AC279080206 +:10A1D00010437047017170470079704701717047F3 +:10A1E0000079704710B50822001D0AF055FD10BD1A +:10A1F0000B4610B5011D082218460AF04DFD10BD92 +:10A2000010B50822001D0AF047FD10BD0B4610B521 +:10A21000011D082218460AF03FFD10BD70B5154615 +:10A220000E4604461B2A04D93720194900010AF0BA +:10A23000D0FE2A463146E01C0AF02EFD6078E90681 +:10A2400040094001C90E0843607070BD70B50546F5 +:10A2500040780E46C406E40E1B2C04D9DF200C49BE +:10A2600080000AF0B6FE2246E91C30460AF014FDD2 +:10A27000204670BD4078C006C00E1B2801D80120C2 +:10A2800070470020704710B522220AF005FD10BD6E +:10A29000E09F0000430200007A0C0000FEB50F466C +:10A2A00004460146064620302546C031603640351A +:10A2B0000190032F04D0002F2DD0012F2BD04BE085 +:10A2C00000206080A080E08020816081A082E08505 +:10A2D000E0826874A074E074A076E076A073E07306 +:10A2E00020746074019B987401232B74A8822883C6 +:10A2F0000876E883B0706883A873E8732077607786 +:10A30000019988720199087430727072B072327457 +:10A31000B074A883FEBD0020A8822883012F52D0EC +:10A32000E08B0090608C0290C00000990AF02EFD36 +:10A33000401C80B2E8820099192241439202914266 +:10A3400001DD401EE8827D20000200990AF01EFD1A +:10A35000401C3080002F01D0022FDBD10198007A01 +:10A36000C1060198C90E01720020687322182421C9 +:10A370008B5C4032D9075B08DE07C90FF60F7118F6 +:10A380005B08DE07F60F71185B08DE07F60F711821 +:10A390005B08DE07F60F71185B08DE07F60F711811 +:10A3A0005B08DE07F60F76185908891911726A7B67 +:10A3B000401C5118C0B269730528D7D3002FA9D10A +:10A3C0000020A874FEBD4A7F2046E030022A12D049 +:10A3D000097F022913D050A173200AF0FAFD012051 +:10A3E00000900290E08BA98B484300990AF0DCFCB6 +:10A3F000A883029898E7818800910089F1E7018A93 +:10A400000091808AEDE770B504464034667B0546CE +:10A41000002E68D0252E66D8002964D03E20405DED +:10A42000A27B4843101825210AF0B0FC0846A1730E +:10A430004207C908520F3C4B691820319A5C0979D0 +:10A440008A4367D031460AF0A1FC491CCAB20020F9 +:10A4500006E0002804D029184031C979511ACAB23F +:10A46000291848235B5C93423AD320310979C943C8 +:10A47000CB07DB17D21A521E1206120E34D08B07EE +:10A48000DB17D21A521E1206120E2FD04B07DB1703 +:10A49000D21A521E1206120E2BD00B07DB17D21A3D +:10A4A000521E1206120E27D0CB06DB17D21A521EEE +:10A4B0001206120E23D08B06DB17D21A521E12067A +:10A4C000120E1FD04B06DB17D21A521E1206120EA6 +:10A4D0001BD00906C917511A491E0A06120E17D0B9 +:10A4E000401C0528B5DB70BDC00013E0C000401C57 +:10A4F00010E0C000801C0DE0C000C01C0AE0C000DD +:10A50000001D07E0C000401D04E0C000801D01E008 +:10A51000C000C01DE07370BD7372635C6C6C5F75CE +:10A5200074696C2E63000000EC51010010B5FF4807 +:10A530000021017041708170C17041718171C171E0 +:10A54000083009F073FB002804D0FF20F8A1843004 +:10A550000AF03FFD10BD10B5F44900204872081DF7 +:10A5600009F064FB002804D0FF20F1A1C3300AF0F9 +:10A5700030FDFFF7DBFFF148FFF782FC0021EF48D9 +:10A58000FFF7E4FC0121ED48FFF78CFC10BDE2E78A +:10A590001B207047E5494A7A002A01D00020704705 +:10A5A000488101204872704710B5E0494A7A002A74 +:10A5B00002D04989814201D0002010BDDB48001D36 +:10A5C00009F03CFB002804D0FF20D9A1B4300AF0E8 +:10A5D00000FDD648001D09F049FBFFF7A7FF012049 +:10A5E00010BD70B5D14C0025627A002A02D0628974 +:10A5F000824201D00D700DE0227863789A4203D335 +:10A6000022786378D21A04E062782378D21A102371 +:10A610009A1A0A70FFF7C8FF002801D0657201205E +:10A6200070BDC2494A7A002A04D04989814201D1C9 +:10A630000120704700207047BC490A784B78521CB3 +:10A640001207120F9A4207D0097822225143BC4ABE +:10A65000891801600120704700207047B3480178D5 +:10A660004278491C0907090F914206D00178491C1C +:10A670000907090F01700120704700207047AB499E +:10A680004A7A002A04D04989814201D101207047C9 +:10A6900000207047A5490A784B789A4207D049783C +:10A6A00022225143A64A89180160012070470020E8 +:10A6B000704710B59D4C20786178884216D060783C +:10A6C000401C0007000F6070201D09F0B7FA002839 +:10A6D00004D0E078401CE070012010BDA078401C40 +:10A6E000A0709248001D09F0C1FAF5E7002010BDE6 +:10A6F0008E4801784078814201D1012070470020C6 +:10A7000070478A4801784278914202D301784078B4 +:10A7100003E041780078081A1021081AC0B2704787 +:10A720000F20704770B5814C0D46617A002916D014 +:10A730006189814213D100262E70201D09F07EFA16 +:10A74000002805D1A0782870A670201D09F08EFA87 +:10A750002878E17840182870E670012070BD00204C +:10A7600070BD76490160704770494A7A002A04D06A +:10A770004989814201D101207047002070476B490F +:10A780004979002901D0002070476E4901600120FD +:10A79000704766484179002901D0002070470121A7 +:10A7A00041710846704761494A7A002A04D04989B4 +:10A7B000814201D101207047002070475B494979EF +:10A7C000012901D0002070475E49016001207047D7 +:10A7D00056484179012901D000207047002141717C +:10A7E0000120704751484079012801D0012070476D +:10A7F000002070474D494A7A002A04D04989814295 +:10A8000001D1012070470020704770B5474C0546C4 +:10A81000A0790721401C0AF0B9FAE079814208D0FA +:10A82000A07922214843474922314018286001205D +:10A8300070BD002070BD10B53C4C0721A079401CB4 +:10A840000AF0A4FAE079814207D0A0790721401CE0 +:10A850000AF09CFAA171012010BD002010BD334800 +:10A860008179C079814201D1012070470020704771 +:10A870002E494A7A002A04D04989814201D1012017 +:10A8800070470020704710B504462848083009F08A +:10A89000D5F9002815D125498879CA7990420CD07C +:10A8A000C8792221484327492231401820601F4897 +:10A8B000083009F0DBF9012010BD1C48083009F010 +:10A8C000D5F9002010BD10B504461848083009F02D +:10A8D000B5F9002815D115498879CA7990420CD06C +:10A8E000C8792221484317492231401820600F4877 +:10A8F000083009F0BBF9012010BD0C48083009F000 +:10A90000B5F9002010BD094810B5083009F096F9D6 +:10A91000002822D1054CA079E17988421AD0E0794B +:10A920000721401C0AF032FAE1710DE066000020B8 +:10A930007372635C646D5F712E630000B01700205A +:10A9400080140020A01600202046083009F08EF95F +:10A95000012010BD0C4809F089F9002010BD0A48FB +:10A9600008388179C079814201D1012070470020E7 +:10A970007047054808388179C079814201D10120AA +:10A9800070470020704700006E000020704770473D +:10A99000FF207047704770470020704700207047C5 +:10A9A000002070470020704700207047002070474B +:10A9B000002070470020704700207047012070473A +:10A9C000002070470020704700207047002070472B +:10A9D000F8B5FF4D0446A87F002600280CD00029BA +:10A9E00023D1667010202070E87FA07028462030A8 +:10A9F0000078E070AE7718E0287A012801D00020B6 +:10AA0000F8BD002911D16670F149687A01270A3131 +:10AA1000002801D0132000E0052020701422A01C83 +:10AA20000AF03AF9A7716E722E720120F8BDF8B5DE +:10AA3000E8480078002802D00C273846F8BD0027E7 +:10AA4000E34D3C46203DAF74EF746F75AF752F75C5 +:10AA500028466F732038DE4E47737771E87D0028F3 +:10AA600004D0FEF785FDFFF744F8EC75347274727C +:10AA7000B477D7482430FFF78DF8D5484C30FFF72E +:10AA800089F8DAE710B5D34C00232370D04C203C72 +:10AA9000E375CF4B01241C71603B583307C3FFF7AC +:10AAA000C6FF002804D0FF20CBA102300AF091FAA3 +:10AAB00010BDC7482038807C7047F8B5C44D0646A5 +:10AAC000407B203DE873C24837791346AF73B27BB1 +:10AAD00082710446603C217006221946601C0AF00F +:10AAE000DBF8B07960730622F11DE01D0AF0D4F89E +:10AAF000687B0126002800D0EE74B5484038407BC2 +:10AB0000002800D02E75002F09D0012F09D0022F68 +:10AB100024D0032F46D0FF20AFA14D3013E00021F9 +:10AB20001DE0AB4801212430FFF744F8A848E11D9F +:10AB30002430FFF773F8607B002807D0012807D086 +:10AB4000FF20A5A143300AF044FA0CE0002100E008 +:10AB500001219F482430FFF77CF804E006219C483F +:10AB60002430FFF727F800206875A8759848611C05 +:10AB70002430FFF745F8964821782430FFF75DF838 +:10AB8000934804214C30FFF715F89148611C4C3074 +:10AB9000FFF736F88E4821784C30FFF74EF8AE7448 +:10ABA0000020F8BD0221DAE770B5894C0125203C70 +:10ABB0000246A5758648007A002801D03A2070BD6B +:10ABC000834860380378934206D1002262750622DA +:10ABD000401C0AF061F86575002070BD70B5044630 +:10ABE0007B4D0020203D28752846224632380AF049 +:10ABF00053F82846203844730120287570BD7449E5 +:10AC00000871704710B5724C0022203CE2746073EA +:10AC10000246204612380AF03FF80120E07410BDC9 +:10AC2000F8B500F04CFB6A4C0025203CE07D002884 +:10AC300004D0FEF79DFCFEF75CFFE575654E3570B0 +:10AC4000FEF75AFCA07B012804D00021084601F041 +:10AC500082FAF8BD0021022001F07DFA5C4C207AD6 +:10AC60000127002809D0A07F0028F2D10520E07735 +:10AC7000204620300570A777F8BD70780028FBD0FB +:10AC8000534906226039487BE073C91D0846693084 +:10AC90000AF002F83C20A07227727570F8BD10B55A +:10ACA0004B4C203CE17B207CCA0701D0C2070BD073 +:10ACB0008A070FD582070DD42620FEF7EAFA207CFA +:10ACC00002210843207410BD2520FEF7E2FA207C03 +:10ACD0000121F6E74907F6D54007F4D42720FEF70F +:10ACE000D8FA207C0421ECE770B53A4D287800288A +:10ACF0007CD1374C203CA07C00287CD0FEF7F1FBB7 +:10AD00000026267466746E703046FEF7E7FB00205E +:10AD1000FEF7E5F93448FEF7B3FA2546403D296EC3 +:10AD20008857FEF779FA3048C01EFEF792FBFEF70F +:10AD300008FCFFF7B4FFFEF729FAFEF7CBFB012072 +:10AD4000FEF70DFB0F210520FEF744FA2978681C59 +:10AD5000FEF732FAA07B01280AD0E07C002807D059 +:10AD6000214612390846627B5630FEF790FFE674A2 +:10AD7000207D002808D0164840380146427B123911 +:10AD80008C30FEF7B6FF2675607D00280BD010488A +:10AD9000691C2430FEF734FF0D48691C4C30FEF767 +:10ADA0002FFF6675A675E86D0178002903D001783C +:10ADB000001DFEF713FAA86D0178002907D001786D +:10ADC000034A401C7732FEF774FE0120E0750EE066 +:10ADD00034180020740000207372635C6C6C5F6137 +:10ADE00064762E6300000000F751010003E0FEF7D7 +:10ADF00083FB002070BD0C2070BDFB49486070478C +:10AE000070B50546FEF79DFB002D06D00020FEF72D +:10AE10005CFAFEF7BBF9FFF742FFF44C607C0028B8 +:10AE200009D0A07B012803D1F149F2480AF0D1F8FA +:10AE3000FFF7F6FE70BD0126002D05D00220FEF7BB +:10AE40008EFAEA4820304671E8484430FEF759FB54 +:10AE5000012008F0A8FDFEF7A1F9A07B00280FD083 +:10AE600001280DD002280BD003280BD0E148E0497F +:10AE70001E300AF0AEF8E07B217C884306D009E062 +:10AE8000032000E00120FEF720FAF4E7A07B012870 +:10AE900003D06674D448067070BD00202074F9E7B2 +:10AEA00010B5FEF71EFBD048007800280ED1CF4821 +:10AEB000807C00280AD00020FFF7A2FFF6F781FA75 +:10AEC000CA4820300079012806D007E000F0F7F9E1 +:10AED000FEF712FB0C2010BDF8F79AF8002010BD09 +:10AEE000C14901204870704770B500F0DAFF0028B2 +:10AEF0001BD0FF202D30FEF7E5F9BB4E3078BB4C60 +:10AF00002034012814D0022801D003282ED0A520F7 +:10AF1000B74980000AF05DF83078002807D0F6F7CE +:10AF200050FA207901282BD02FE0FFF779FE70BD71 +:10AF3000AE4DA87B032819D0FEF7F4FAE87D00286F +:10AF400003D0FEF7C6FDFEF70CFBA8489430FEF7D1 +:10AF5000D8FA012008F028FDA87B01280BD0A179A0 +:10AF60006F20012906D0032904D004E00120FFF757 +:10AF700047FFD1E77F20FEF7A8F902203070CBE72A +:10AF80006079002801D1FEF7A1FB0020607170BD3F +:10AF900070B5964CE07D002803D0FEF7E9FAFEF785 +:10AFA000A8FD00F07EFF00281CD08F4D28780228D5 +:10AFB00003D08F4990480AF00CF8A07B012814D0E8 +:10AFC000FF202D30FEF77EF90120FFF719FF2878CA +:10AFD000002809D0F6F7F5F9844C203420790128AF +:10AFE00006D00AE0FFF71CFE70BD99208000E9E75B +:10AFF0006079002801D1FEF769FB0020607170BD07 +:10B00000F8B50446FEF738F90746FEF78DFD01282E +:10B0100027D0002674480078022804D07648744966 +:10B020003C3009F0D6FF714DE87D002803D0FEF7D3 +:10B030009FFAFEF75EFDFEF784FA6C489430FEF747 +:10B04000DBFD21006D4C009064D0FEF7BFF80028B6 +:10B0500060D0009803000AF0ADF8065D5D5D065D06 +:10B060001E5D0126D6E7A87B012853D0374304D1C3 +:10B07000A079002801D002284CD160484C30FEF75E +:10B0800040FA012008F08FFC0120FEF71EF9564817 +:10B090000321017045E059487430C178D438C27931 +:10B0A00091421DD10146D4310A79037A9A4217D1CF +:10B0B0004A79437A9A4213D18A79837A9A420FD194 +:10B0C000CA79C37A9A420BD10A7A037B9A4207D192 +:10B0D0000978407B4906C90F814201D1012100E076 +:10B0E0000021A87B012802D0002803D012E000290B +:10B0F00007D10FE0374304D1A079002801D00128FF +:10B1000008D13E487430FEF798FE002802D0A87D92 +:10B11000002810D0FF202D30FEF7D4F80120FFF7D3 +:10B120006FFE3148007800286AD0F6F74AF9207996 +:10B1300001286ED0C0E02C4F30497868042283315A +:10B14000343009F0A9FD2D484021743000784006C4 +:10B15000C20F78680A54294906227731413009F034 +:10B160009BFD2649786803228731383009F094FD29 +:10B1700022483B217430827D78680A541F4974311B +:10B180000A7ECB7D12021A4382878A7E4B7E120290 +:10B190001A43C2830A7FCB7E1102194301841749E7 +:10B1A00074318A7F4B7F1102194341841349052270 +:10B1B0009331243009F070FD10497F68943108798B +:10B1C000C20638462030D20E0090827709794909AC +:10B1D000C177207A00281DD0A07F00285BD1607A3B +:10B1E00000280ED013200DE0740000201418002059 +:10B1F000D8AD0000F9030000BF02000034180020A1 +:10B200005CE00520E0773449002008700120A07739 +:10B2100041E04CE03048E97D1038002924D000217D +:10B22000A172B989A1814021C95DE1733946062225 +:10B23000413109F031FDF88BE082388C2083788C25 +:10B2400060830098C07F2077607F400840003043D3 +:10B250006077FEF776FC617F4000C907C90F0143A4 +:10B2600061770120607215E00021A172B989A18186 +:10B270004021C95DE17339460622413109F00CFDD8 +:10B28000F88BE082388C2083788C60830098C07FB4 +:10B29000207701202072114D0020287000F00FF857 +:10B2A000FEF72AF90120696800F055FF39E7607957 +:10B2B000002801D1FEF70AFA00206071F8BD10B530 +:10B2C000FEF74AF9FEF73DF9FEF78BF80020FDF78F +:10B2D000FCFFFEF7CAF810BD5418002074000020CF +:10B2E0008107C90E002808DA0007000F0838800817 +:10B2F000FD4A80008018C06904E08008FB4A800095 +:10B3000080180068C8400006800F704710B500F034 +:10B310007BFF10BD70B5F64C0546A26800290DD024 +:10B32000002A04D0FF20F3A14C3009F052FEA560A2 +:10B33000F6F748F80220F6F73FF870BD002A04D16E +:10B34000FF20ECA1543009F044FE0020A060F6F785 +:10B350003AF80120F6F738F870BDE5481030C07EA5 +:10B36000002801D00020704701207047E0481030CD +:10B37000C07E7047DE483430C07E70470021C17601 +:10B38000817601600162DA481030C07E002807D162 +:10B39000D7483430C07E002802D1D549012008703A +:10B3A000704710B50B46C17E847EA14204D0114681 +:10B3B000184607F0B4FB10BDFFF7E0FF10BD38B52D +:10B3C000CB4C606801684978012924D00121684686 +:10B3D00006F05EF968460078CA49000209F0D6FC1A +:10B3E00060680268C0685268511807F0B5F9616872 +:10B3F000C860BF49606834310022884215D0018B93 +:10B40000002912D04272032101720271021D017FD4 +:10B41000FFF7C7FF38BD7D21C068C90007F09CF960 +:10B420006168C860B8480861E3E7018B491C018383 +:10B4300002214172E7E7FFB5AD4F02461037386A87 +:10B440003C68056889B060680790A948C1680291A6 +:10B450006B880B98C01A80B208900C98002804D012 +:10B46000264638362046483002E03E1D28466430E5 +:10B47000059003203071002A15D0012A7ED0022ABF +:10B4800052D0032A7BD09BA1A04809F0A2FD0C98C2 +:10B490000028307974D0032804D09C4895A1093045 +:10B4A00009F097FD40E1002904D1984891A169383D +:10B4B00009F08FFD9549A88FA839484340180A998B +:10B4C00000F0A8FEA0619149E88BA83948430A9989 +:10B4D00000F0A0FEE06186488C4AC068A98FA83AB7 +:10B4E000514384464118A069894A091A8A183B21A8 +:10B4F000A262864B495DA83B594341180818FF30AA +:10B500001630206260626046101AFF38ED2135382F +:10B51000C9008842BBD27F49884204D27B4875A1CA +:10B520005C3809F056FDBAE0784AA88FA83AE1687D +:10B53000504308180A9900F06DFEA0617349E88B2A +:10B54000A83948430A9900F065FEE0616848C06880 +:10B55000002804D16D4867A1543809F03AFD5820FD +:10B56000405B6D4A0028A88FE16822D0504308183C +:10B57000A169401AA0622169A06802E022E051E0BE +:10B58000CDE04843A169644A40183B21495D5143DD +:10B5900041180818FF3014302062E88BE1695043ED +:10B5A000411A0F208001081A60625148A16AC068E0 +:10B5B0006DE050430818A169401A3968D3384968CA +:10B5C0004018D7E7284640300290008B002801D071 +:10B5D000002904D14D4847A13C3809F0FAFCE88B1A +:10B5E0004D494843E169401AA062029A138B2269CF +:10B5F0009B1A9C46A3685343A2699A186346594311 +:10B6000051183B22525D444B5A438A185118FF315E +:10B61000143121620F218901411A61623449C968DC +:10B62000401A35E00C98002803D03420005D002833 +:10B6300074D1E88B38494843E169401A0899484376 +:10B64000A062284640300690008B0028079829D039 +:10B65000002804D02D4827A1163809F0BAFC069816 +:10B660002D4A018B08980818E16948434000FF30D3 +:10B6700014302062E88B5043411A0F208001081AD1 +:10B68000606200F0C1FD00281CD0A16A0298081A6F +:10B69000FF38ED212338C900884200D3F7E60220A5 +:10B6A0003071F4E6002802D00298002804D117482F +:10B6B00010A11D3809F08DFC0798A16AD33808182D +:10B6C000A062CCE706F0B1FD7A690146104607F0AA +:10B6D000D5FFA16A081AFF38ED211E38C90088423B +:10B6E000DCD201200DB0F0BD00ED00E000E400E090 +:10B6F000D01800207372635C6C6C5F6C6D2E7330BD +:10B700002E63000010270000B78913008A0500008F +:10B7100036040000A3020000E20400002AE003282F +:10B7200002D1FD4807210170A16A786907F014F879 +:10B73000B060616A206A884202D90598016001E020 +:10B74000059908600598F54900680818F060A9880F +:10B750000B98081A00B2002801DD022000E000204A +:10B7600070710C9830700C98002805D03420005D62 +:10B77000002801D00220B5E70C9801214840203470 +:10B780006075397F32463846FFF70BFE0020A9E787 +:10B7900010B5E14900284A68116A096807D01268A3 +:10B7A000C98BDF4BD2695943891A09F0EFFA10BDF2 +:10B7B000F8B5D94F35227868016A0C680168525C87 +:10B7C000002A0AD0498E6288914206D1407A002828 +:10B7D00003D1D449D44809F0FCFB06F026FD01460C +:10B7E0007868406907F04AFFFFF7D2FF79686588FB +:10B7F0000B682E185A8EB24202DB521C5A8602E0A7 +:10B80000401C2818588608683622125C002A05D188 +:10B81000428E23899A4201D1521C4286088B03280A +:10B8200002D2401C088302E00868408EA0802046B7 +:10B830004030C18A808A081A6188401E401885B24B +:10B84000203416E0096AE67F097976004B00B74993 +:10B85000007DCB5A895BC91889B20023FFF7EBFD45 +:10B86000002811D0012810D0AF48AE493A3009F075 +:10B87000B0FB79680868428EAB1A1BB2002BE1DA84 +:10B880000820E07400F00BFEF8BD78680068418E77 +:10B89000491C4186EDE770B51F209F4D002128709F +:10B8A000E960A868C27E130009F084FC04545403C4 +:10B8B0004654026A14680268117002685160006898 +:10B8C0002030407D002808D106F0AFFCA968096847 +:10B8D000096C07F0D3FE002815DCA86801684A8EC1 +:10B8E00061888A4204D12289511A6181628004E010 +:10B8F000511A61810168498E61800268C1681164D2 +:10B90000C16841610FE0A8680168098E6288891AE0 +:10B9100061810168098E618001680A6CC2600A6CED +:10B920004261886C6066204601F06DFC00280ED0F4 +:10B930007B487C49BD3808E0C1684161FFF7D4F914 +:10B94000002804D076487749B73809F042FBF5F76C +:10B9500038FD70BD72487349B038F6E710B56E4ACD +:10B960000B00526809F026FC0906090F1E0C2D2D4C +:10B97000082A2D00FFF78FFF10BD00F059FC10BD05 +:10B98000FDF7A9FE10BDD07E022805D0D07E032889 +:10B9900005D0644966480EE0FFF70AFF10BDFFF7C7 +:10B9A0000EFD10BDD07E0228F6D0D07E0328F6D042 +:10B9B0005F485C490B3009F00CFBF0E706F01BFC1C +:10B9C00010BD23205749000109F003FB10BDF3B55A +:10B9D00081B0514C029825460026012710350300FE +:10B9E00009F0E8FB0906313C3C3143433C3C430051 +:10B9F000494801211030FFF78DFC02990198FFF7AB +:10BA0000ADFFE87E022828D1A0680468006A0668B5 +:10BA100006F0EAFBF18B424A5143E269891AD339B5 +:10BA2000FF223232E162904202D24248081802E01C +:10BA3000081A41494018E0624048E16A814200D852 +:10BA40000846E06206E001460198FFF787FFE87EBE +:10BA5000022802D1286820300775FEBD01466560C6 +:10BA60000198FFF77BFF6660FEBDFF202D49C130C6 +:10BA700009F0AFFAFEBDF8B5064627480D4600248A +:10BA80003430254F0B0009F095FB09060C10100C03 +:10BA9000161610101600204801213430FFF73AFC2A +:10BAA00029463046FFF75AFFF8BD78603046FFF769 +:10BAB00055FF7C60F8BDFF201A49F53009F089FA7E +:10BAC000F8BDF0B5144C0020616885B003268E7671 +:10BAD000CA7E0746032A03D0C97E00293FD03FE033 +:10BAE000087F002804D112480E49D93009F071FAB4 +:10BAF0006068057F684606710221417106F095FB7A +:10BB00000290FF20F53003900121684601706946DC +:10BB1000284607F004F814E0D0180020EF160000C3 +:10BB2000E2040000F4B6000074060000FC510100BD +:10BB30001602000084F8FFFFB5F9FFFF161200009F +:10BB400020BF6068007F07F025FE0028F8D06068FD +:10BB5000007F06F050FB60680777FFF70FFC0120BD +:10BB600061688F7605B0BEE5FD494A68907600E0D1 +:10BB700020BF4A68D07E002803D0D07E937E9842B2 +:10BB8000F6D0D07E002803D00020002191767047A7 +:10BB90000120FAE770B5F24900241031CA7EF04D59 +:10BBA000032A03D02431CA7E032A17D169600028F2 +:10BBB00010D001280AD0EB49EB4809F00AFA00201E +:10BBC0006968002C0860686008D070BD0320FFF72A +:10BBD000CBFF01E0FFF775FF0446F0E70C2070BDD6 +:10BBE000F8B5DF4F04461F25E67E330009F0E2FA80 +:10BBF000042A20031B20DA481030844203D0D9499C +:10BC0000DA4809F0E6F902207C60FFF7ADFF002872 +:10BC100005D07968002008600862786012E00C2581 +:10BC2000002078600BE00120FFF7B4FF054604E038 +:10BC3000CE48CC490C3009F0CCF9002D02D0E07E82 +:10BC4000B042D1D1E07E002804D0C848C5491230A6 +:10BC500009F0BFF9F8BDC24810B51030FFF7C0FFBA +:10BC6000BF483430FFF7BCFFBD490020583108758C +:10BC7000BF494870BA49103148610A4624325061C0 +:10BC800088769076012210390A708860486010BD6D +:10BC900070B504460120FFF723FBC5B20B20FFF768 +:10BCA0001FFBC0B2854204D0B048AE49343809F019 +:10BCB00090F90120FFF714FBC5B21820FFF710FB25 +:10BCC000C0B2854204D0A948A649333809F081F9A9 +:10BCD0000420C043FFF704FBC5B21920FFF700FBA7 +:10BCE000C0B2854204D0A1489E49323809F071F9AA +:10BCF0009F489B490C38047000201031C876887624 +:10BD00000A462432D0769076994B0124083B1C7168 +:10BD100018600862106208601060FFF79CFF70BD39 +:10BD20008F48007870479249083908717047F3B519 +:10BD30000D468B4983B01031CA7E08462430884CAA +:10BD4000002A02D1C27E002A03D0C97E022903D074 +:10BD500005E08848616006E0C17E002901D00C2022 +:10BD600000E76060844806F0F2F96168087760686F +:10BD70007F490160007F002804D17B4879496238FF +:10BD800009F027F906F030FA7C49884200D20846CB +:10BD9000FF30C83086B260680321C1760027012DCC +:10BDA0002FD0724A0399121D5143026851600068F6 +:10BDB00001210170684605F06BFC68460078704907 +:10BDC000000208F0E3FF019106F02FFA01997118C3 +:10BDD00006F0C2FC6168032DC86021D06948086183 +:10BDE000606803210172022141720771021D017F07 +:10BDF000FFF7D7FA6068078307202070002067608C +:10BE0000B0E606F012FA314606F0A6FC6168C8609A +:10BE10005D48086108680770096801204870DFE71D +:10BE20005A48DCE77047F8B54D4E1036F17E0029D0 +:10BE300004D131462431C97E002901D00C20F8BD3F +:10BE40000221F176464C4A4F5834083F376234603D +:10BE5000002538602575397920304A004C49C07F6B +:10BE60008A5A4000085A2B46101881B22A462846A2 +:10BE7000FFF7E1FA002804D03B483A49323009F094 +:10BE8000A8F825610120A5602075658625863448BF +:10BE90007830857539684888401E48803583002091 +:10BEA000F8BD10B52E4901248868827E032A0CD083 +:10BEB00000684078002806D0C8683649884202D910 +:10BEC0000024FFF70DF8204610BD0024FBE72448AE +:10BED000826813681978491C1970C1681068C26AB1 +:10BEE000914204D8007D012801D001207047002034 +:10BEF000704700207047F8B51948194C1030606041 +:10BF0000016A00260D68006834212F460E54403720 +:10BF1000B97C002963D1007D032860D106F085F942 +:10BF200001466068406907F0A9FB002857DDFFF76C +:10BF30002FFC6988401C41186068026811860068FF +:10BF40002989028E91424AD9012120308175F88ACF +:10BF5000B98A401A6988401E401887B238E000004C +:10BF6000D0180020F4B600008D0300006D02000020 +:10BF700088000020CFB9000077BA0000F605000065 +:10BF800010270000CB120000B7891300B70800008B +:10BF9000FC5101002E841300096A09794A00CD4939 +:10BFA0008B5A028E007D94463F22525D5200895A80 +:10BFB000C91889B201236246FFF73DFA00280ED066 +:10BFC00001280ED002280AD0C349C44809F001F85C +:10BFD00061680868028EBA1A12B2002ADCDA66605A +:10BFE000F8BD60680068018E491C0186F0E7F8B56D +:10BFF000BB4D0026AA680128116A0C6810D00720E2 +:10C00000287006F05DF8B7480078F6F7AFFDA8682D +:10C010000683026861885186006820308675F8BD05 +:10C02000087913684100AB481F7D415A032F18D08F +:10C030001A7D022A22D01A7D012AE2D13F231B5DFC +:10C0400022895B00C05A0023401881B20120FFF70B +:10C05000F2F90028D5D0A1489F49B53008F0B9FFC2 +:10C06000CFE71E6112683F2396601B5D22895B004B +:10C07000C05A0023401881B20320E8E75822125B1F +:10C080001A613F231B5D22895B00C05A00234018C0 +:10C0900081B20220FFF7CFF9AA6801211268117559 +:10C0A000D7E738B58E4C0021A0680D46006842786D +:10C0B000002A01D045701FE00078002809D0012136 +:10C0C000684605F0E5FA684600788749000208F0FE +:10C0D0005DFEA0680268C0685268511806F03CFB1B +:10C0E0000146A068C160057102214172021D017FF5 +:10C0F000FFF757F9A068058305F0E2FF794800785B +:10C10000F6F734FD38BD10B50146754A0B0090684E +:10C1100009F050F8060D150408190C1C012100F057 +:10C12000A6F807E00021506800F0A1F810BD01203A +:10C13000FFF75DFF00210846FFF7ECF810BD00682F +:10C140000321017510BD00F0A5F810BD62496748D4 +:10C1500008F03FFF10BD70B5614C002809D00128E0 +:10C1600016D0022821D061485B49243008F031FF05 +:10C1700070BDFFF796FF00210846FFF7CBF8A068D7 +:10C18000807E002801D01F2000E00720207070BDB5 +:10C19000A068002501684D70FFF7F0F80320F6F75E +:10C1A00023FC05F08DFFA56070BDFFF77AFFA06846 +:10C1B000FFF7E4F800210846FFF7ACF80420F6F793 +:10C1C00013FC70BD46498968CA7E022A08D10A68F4 +:10C1D0001378002B04D150600968CA6A1018C8622D +:10C1E000704710B53E4A00290CD0012907D002291A +:10C1F00007D03E483849443008F0EBFE10BD401EE1 +:10C2000000E0401FD06010BD35488068002800D095 +:10C210000120704710B504460020002907D034489B +:10C2200008F0B4FD0146204608F0B0FD401C10BDEA +:10C2300010B52B488068C07E030008F0BBFF0414D3 +:10C2400014030A1401F0F2F800280BD022492948FF +:10C2500006E0FEF725FE002804D026481E49001DF2 +:10C2600008F0B7FE10BD23481B490B30F8E710B5A6 +:10C270000446002903D00020FFF7B9FE03E0194867 +:10C280000078F6F773FC2046FFF778F80020F6F701 +:10C29000ABFB10BD10B512488268106A11680068C7 +:10C2A000CB698B60134BC18B9B3359431368D960A7 +:10C2B0000146E0314B8883870C783B231C548B88E4 +:10C2C000C383CB88038409894184116802200875DF +:10C2D00010BD0000FC510100F4B600005A06000039 +:10C2E000D01800207C00002010270000B2070000BA +:10C2F00040420F0047040000F8B5FEF702FA064678 +:10C30000FEF770FAF94D07466879F94C002809D014 +:10C31000012823D0022826D003282ED0FF20F5A103 +:10C32000C63033E0F2481830FEF748FA002801D052 +:10C3300003200FE0EE481830FEF7ACF9002804D0D7 +:10C3400060696030007A002806D0E9481830FEF7AE +:10C3500008FA012068711BE00220FBE7E44818306E +:10C36000FEF7FFF914E0E2481830FEF793F90028D1 +:10C370000ED1FF20DFA1B83008E0DD481830FEF70D +:10C380001DFA002804D1FF20DAA1C03008F021FEF8 +:10C39000A169F722087810400870AA79D207120F15 +:10C3A0001043FB2210400870EA79D207520F104365 +:10C3B00008706B79EF22022B04D0012B07D0032BDE +:10C3C00007D00CE0012E06D8002F04D007E07F1E16 +:10C3D0003E43002E03D010401022104300E01040D6 +:10C3E0000870287C002811D0687901280ED0BF4839 +:10C3F0005438FDF786F8BD49606954397830A26930 +:10C40000FDF7E3FA0020FDF7EFFA04E00846FDF738 +:10C4100078F8FDF70CFBA0690078C00606D4E06947 +:10C420000078C00602D4E079002802D0A079002864 +:10C4300001D0012000E00320FCF747FF032020701B +:10C4400001202071F8BDAA4810B51C30FEF7DDF9B7 +:10C45000A74C002802D00020607004E0012060702A +:10C46000A2485438E061A148407C002802D060789E +:10C47000002805D0E069FDF744F8FDF7D8FA10BDB3 +:10C480009A485438FDF73DF8984A6069543AA0300C +:10C49000E169FDF79AFA0120FDF7A6FA10BD10B583 +:10C4A00093490022486932238276C27601221A54C7 +:10C4B0004030807C002803D00A700021022001E077 +:10C4C00000210320FFF71FFE10BD70B5884C607976 +:10C4D000C2062046416908464030002A01DA00229F +:10C4E00002E0028B4B89D2180B460283C0331A7EBE +:10C4F000002A03D0828B4D8952198283627A002AE6 +:10C5000003D03D2001F0C9F852E08A7E032A4FD0C3 +:10C51000227A002A13D0500701D4D00601D51E205C +:10C5200036E0100701D53D2032E0D00705D1900755 +:10C5300003D470A1734808F04CFD2A2028E0603134 +:10C540008A78002A05D0C28B551CC5830D88AA4263 +:10C550000FD25A7F062A02D01A7F062A05D1428BB3 +:10C56000531C438309888A4203D2828BC18A8A4240 +:10C5700001D322200CE0027C808A002A0FD00628FA +:10C580000FD35A48C07B012801D03E2000E008208C +:10C5900001F083F86069807E032809D001E08842B9 +:10C5A000F5D20120207000210846FFF7ACFD70BDD8 +:10C5B000FFF775FF70BD10B54C494D48CA7B002A86 +:10C5C0002BD0012A29D0022A27D0032A04D049A13E +:10C5D0004D4808F0FEFC10BD897B02290FD00729C9 +:10C5E0001BD0406901464031CA8A898A511A891E86 +:10C5F00089B2032900D30321028951180BE0406955 +:10C60000014640318A8A032A01D2018903E0428827 +:10C61000C98A5118491C818010BD4069F5E700B5F1 +:10C62000030008F0C7FD0604070B0F1212170029BC +:10C630000ED00FE0491E02290AD90BE0491F01293B +:10C6400006D907E0072903D004E00A390C2901D8EC +:10C65000012000BD002000BDFEB50546244818306D +:10C66000FEF78DF8002804D1274822A1CF3808F022 +:10C67000B0FC1F4CA069FDF703FC0321A069FDF786 +:10C680002DFCA069EF220178114001702946FDF7C9 +:10C6900069FC002601272B0008F08CFD0E5D5D086B +:10C6A0005D1D6161155D4D5D613D385D60697121A4 +:10C6B000095C002901D0062101E0C030417EA0695B +:10C6C000FDF71BFD4BE0E069FDF776FC0146A06934 +:10C6D000FDF784FD43E06169A069D031FDF747FDB6 +:10C6E0006169A0699531FDF750FD38E0C819002057 +:10C6F000900000207372635C6C6C5F736C61766594 +:10C700002E6300006B020000780800000621A0697B +:10C71000FDF760FD23E020690178A069FDF744FD85 +:10C7200020698188A069FDF741FD20694188A069E1 +:10C73000FDF740FD13E00096019660696030007CD3 +:10C74000002803D069460878384308706946A06914 +:10C75000FDF756FD03E0FE49FE4808F03AFCFEF7FF +:10C7600018F8002804D1FB48F949801D08F031FC75 +:10C770000C2D07D0072D04D060695E210E52603069 +:10C780008770FEBD606940304683FEBDF0B5F24C57 +:10C79000DC2061698DB0405C042809D0052834D1C3 +:10C7A0006031487A002829D001204874022026E010 +:10C7B0001022EA31684600F0A8FF61691022C831F2 +:10C7C00004A800F0A2FF684605F0BBF8616908AA5A +:10C7D0006CCA0F46CB6778378A670846FE608030A0 +:10C7E000BD60074620376CC7002303634363012005 +:10C7F000A0310876D9494874052000E00D20FFF7E4 +:10C800002BFF61690020C03108770DB0F0BDF8B58D +:10C81000D1481830FDF7B3FF002842D0CE4C207A23 +:10C8200000283ED160690025C030007ECB4E002834 +:10C830000BD0B17B0120FFF7F2FE002805D1B17BC0 +:10C840000420FFF7ECFE002806D060690127C03005 +:10C85000407F062807D00CE060695C210D526030F3 +:10C86000457402202FE0B17B0420FFF7D8FE00289A +:10C8700010D0B07B030008F09DFC173F3F3F3F1EE8 +:10C880003F3F3F3D3F203F3F3F292C3F3F3F3F3F02 +:10C890003F2F3F0060696A21095CC90702D0C030A0 +:10C8A0004577F8BD0C20FFF7D7FE60696030817ACC +:10C8B00039438172F8BD072005E0FDF7D0FF00285D +:10C8C000F8D075740B20FFF7C7FEF8BD00F02CFF01 +:10C8D000F8BDFFF75BFFF8BD606900218030816023 +:10C8E000C160057437740620FFF7B6FE60696030DA +:10C8F0008570F8BD0920E6E700F0D8FEF8BD70B5F8 +:10C90000964DA87B072834D1934CDE22606941887C +:10C91000125A491C91422CD1217A002929D1014671 +:10C92000E0318B88C28B934207D1CA88068CB24211 +:10C9300003D10A89468CB2420DD0884A8689303AA2 +:10C9400056819381CB88D3810989118201462E318A +:10C9500051600121117001221146FDF79FFC002159 +:10C960000420FFF7D0FB61690020C0314877A8732D +:10C97000E87370BD70B5794CA07B162803D074495C +:10C98000774808F026FB74480021426973486032FA +:10C99000117291703038067E0B250123002E06D0CF +:10C9A000027D002A12D14575817503750EE0567A15 +:10C9B000002E06D051722288828381760C22027664 +:10C9C00004E022888283817683770576A17370BD27 +:10C9D000F8B5614DA879800723D5287A002820D1A1 +:10C9E0005E4C0120A17BFFF71AFE002819D1A8692F +:10C9F0000127C0780026030008F0DCFB0E62620805 +:10CA0000622E3B4F0A62146220524562022021E0EE +:10CA1000A07B042804D052484D49333808F0D9FA95 +:10CA2000A673F8BDA07B082804D04D4848492D388E +:10CA300008F0CFFA686960308670F1E7A07B0A28B9 +:10CA400004D047484249263808F0C3FA6869603084 +:10CA500007720B20A073F8BDA07B0E2804D0AB207A +:10CA60003B49C00008F0B5FA6869603007720F20D2 +:10CA7000F0E7A07B0F2804D039483549183808F072 +:10CA8000A8FA1120E6E7A07B0F2804D034483049EB +:10CA9000123808F09EFA1320DCE7FFF76BFFF8BDB1 +:10CAA00069690846C0310A7F062A04D16030807A5D +:10CAB000800700D50E77487F0628F0D14E77F8BD65 +:10CAC000274823496E3008F084FAF8BD10B5234C8E +:10CAD0000020A17BFFF7A3FD002804D11E480122FE +:10CAE000017A114301720420A07310BD10B51A4CD5 +:10CAF00060690146C0314A7F002A06D0097F0629B5 +:10CB000003D0217A0122114321726030807A80079C +:10CB100015D4E069FDF752FB61696031C872E069C4 +:10CB2000FDF74EFB616960318881E069FDF74DFBDF +:10CB3000616902226031C881887A10438872606915 +:10CB400000220146C0310B7F062B00D10A7709E095 +:10CB5000F4C60000ED07000090000020C819002076 +:10CB6000770500006A231B5CDB0703D106234B77A4 +:10CB70004030428310BDF8B5FE48817B0020FFF7AE +:10CB80004EFDFD4C0126002807D160696030407AD7 +:10CB9000002802D1207A30432072616900255E208E +:10CBA000455262204654C831E069FDF7C8FA616910 +:10CBB000E0699131FDF7D2FA6169042208469131AA +:10CBC000B93008F069F8EB483038017E08270029B1 +:10CBD00006D0017D002912D14775857506750EE0D6 +:10CBE0006169054689894183E249E0691439FDF7A5 +:10CBF0008EFAE049E0690C39FDF796FA2F76DD48A8 +:10CC00000E218173F8BD70B5DA4D0020A97BFFF7C6 +:10CC100006FDD94C002803D1207A01210843207257 +:10CC2000E069FDF730FA00280ED0E069FDF726FA3A +:10CC30006169DE225052498800F0C1FD002806D00B +:10CC4000282000F02AFD70BDFFF740FF70BDE069AD +:10CC5000FDF70EFA6169E0310870E069FDF701FA4D +:10CC60006169E0314880E069FDF7E0F96169E03130 +:10CC70008880E069FDF7E3F96169E031C880E06927 +:10CC8000FDF7E6F96169E03108810720A87370BDFE +:10CC9000F8B5B94CA079C0076FD0207A00286CD1C4 +:10CCA000B44D0120A97BFFF7BAFC002853D1E069FD +:10CCB0000027C178022201260B0008F07BFA0D162E +:10CCC0001308354A4A384C474A1929444A00FDF7A7 +:10CCD00016FA6169DA225054AE735E204752603111 +:10CCE0008E7038E000F076FD35E0FFF78CFF32E023 +:10CCF000A97B0020FFF793FC002802D1207A304363 +:10CD0000207260695E210F52603086700A2018E040 +:10CD1000A87B0B2802D0207A104320722F74606900 +:10CD2000603046720C200CE0FFF725FF13E0A87B73 +:10CD3000112802D0207A1043207260696030877019 +:10CD40001620A87307E0FFF7D1FE04E000F00FFD06 +:10CD500001E0FFF7BBFEFDF76EFD002804D14F2078 +:10CD60008649000108F035F9606900238030016BC5 +:10CD7000426B491C5A4142630163F8BDF8B57D4FCF +:10CD8000012814D1787C002802D1387C002801D0F9 +:10CD9000FCF74DFEFCF7E0FBFCF7D3FB0020FCF7B3 +:10CDA00094FAFCF71EFBFCF760FBFCF7A5FBF87B95 +:10CDB00001260025704C00280FD16079C10705D0ED +:10CDC0000220F87360694030057402E0800717D5CF +:10CDD000FE7300210120FFF796F9F87B012802D0AD +:10CDE000022808D00CE06079C00709D00220F8734F +:10CDF0006069403005746079000701D50320F8733D +:10CE000000F018FDFFF703FD2079002801D03D81D7 +:10CE100002E03889401C38816079C007606904D01D +:10CE200072210D544030858203E04030818A491CD4 +:10CE30008182E079002806D061696031887C02280F +:10CE400006D8401C887460696030807C022804D950 +:10CE50003D817D81606960308574B97B0020FFF77A +:10CE6000DEFB002802D1B87B06284BD16069014661 +:10CE7000C0310A7F062A45D0497F062942D03D4964 +:10CE8000C97B03293ED16030807C00283AD1FDF770 +:10CE90002FFC002836D0FDF7A5FC002832D06169B0 +:10CEA000C88801282ED90A4640325674D08A978AFB +:10CEB000831E9F4201DB012002E0C01B401E80B2A6 +:10CEC0002C4B1F89A3899F4201D3012302E0DB1B66 +:10CED0005B1C9BB2984200D91846012800D15574BA +:10CEE0002A22525C002A11D0224A898D52898A4214 +:10CEF00001D3012102E0891A491C89B2884205D96F +:10CF0000084603E06169012040314D7461694A8837 +:10CF100010180881FFF74FFB6069122215490C3089 +:10CF200007F0BAFEFFF7D1FAFEF7E3FF00280AD0B8 +:10CF3000104810388179002905D161690246898934 +:10CF4000203A118586710C481C30FDF7BCFC002886 +:10CF50000FD0E06900788007800F012809D00228EF +:10CF600007D0FDF7D0FC002803D10449044808F09D +:10CF700030F807E0C819002090000020F4C6000037 +:10CF80007F030000606940308574F8BD70B5FE4CC9 +:10CF9000607900283CD0FD4D022810D1FDF789FBB7 +:10CFA000002803D1FA49FB4808F013F86A69002306 +:10CFB00080329068D168401C5941D1609060002651 +:10CFC00066712079012804D12671A87910210843BF +:10CFD000A871E078012816D1E670A87908210843E5 +:10CFE000A871FDF7F5FB002804D1EA48E84918309C +:10CFF00007F0EFFF6969002380318A68C868521C16 +:10D0000058418A60C860A079012802D00120A0712F +:10D0100070BDA67170BDF8B5DC4CDB4DE269002730 +:10D020001078042183079B0FE8790126012B11D08A +:10D03000022B0FD0032B01D0207A30E06178002939 +:10D0400005D1AE70A1793143A17123E0EF71F8BD34 +:10D05000EE71F8BD5278D3061CD060780028F8D164 +:10D06000D006C00E1B2818D8607908436071FDF700 +:10D07000E2FB002804D1C748C5494B3007F0A9FF9F +:10D08000606900238030026B416B521C594102637E +:10D090004163E8790128DBD1D8E7207A10210843E1 +:10D0A0002072F8BDF8B5B84D0446303D287D002704 +:10D0B00000280AD0002978D1677010202070687D80 +:10D0C000A070A87DE0702F756FE02878002814D03C +:10D0D00000296AD1072067702E462070083607E0C5 +:10D0E000686807802F700A223146A01C07F0D4FD23 +:10D0F00028780028F4D1A77057E0287EA24E143E6D +:10D10000002837D0002950D1297EA0480B0008F014 +:10D1100051F80D2C2C2C2C2C2C2C2C112C2C2008C8 +:10D120002C0067700C212170A97EA1704069808954 +:10D13000A08018E008216770217040690A46808944 +:10D14000914960801439201D07F0A6FD3089A08127 +:10D1500009E067700B212170A97EA1704069808968 +:10D16000A080A87FA0712F761FE089498A4807F028 +:10D1700030FF1AE0844810388279002A08D000294C +:10D1800013D1677011212170B189618087710CE022 +:10D19000827A002A0BD0002907D1677012212170F2 +:10D1A000318A6180718AA18087720120F8BD0020D8 +:10D1B000F8BD76480078012801D00C2070477249EC +:10D1C0000020303908700875087620318871704762 +:10D1D00070B56E4C064620780D46002804D093208A +:10D1E0006B49000107F0F5FE01202661E07225621F +:10D1F0002070FFF7DEFF002804D0674864494930FB +:10D2000007F0E7FE70BDF8B5604C2178012902D126 +:10D210002178012901D00C20F8BD01460546606146 +:10D2200012220C31584807F037FD01274035AF7402 +:10D23000554D2888FDF723FA002827D02888FDF7C8 +:10D24000D9FA002822D02888FDF78EFA00281DD0B0 +:10D250002888FDF7A8FA002818D0FCF742F9606981 +:10D260000026C088002825D048481830FDF787FAE6 +:10D2700000281FD06069C030007E00281AD0A97B2A +:10D280000120FFF7CCF9002802D013E01220F8BDEE +:10D29000A97B0420FFF7C3F900280BD16069014680 +:10D2A0004030868360314E740220FFF7D5F9606903 +:10D2B00040304674344830380078002806D1606920 +:10D2C000C18D008C814201D9A18102E06069008C8E +:10D2D000A08160694189491E8AB2298989182981FA +:10D2E000297B002902D06E812E7302E0698989189A +:10D2F0006981014640318B8A9B188B82C388012B40 +:10D3000001D85B1CC380002A01D060308674A87BE2 +:10D31000032816D0487C002815D02889A189884286 +:10D3200011D2FDF7E5F900280DD060692A21095CCA +:10D3300000290BD06989808D814207D3A670E770E0 +:10D340000CE0A7700AE0A670E67007E0688900218B +:10D35000401C6881A7700520FEF7D5FE6069512149 +:10D360000E54A97B052901D0062920D1DE2142884F +:10D37000095A511A09B2002919DB01460522E03188 +:10D380002430F3F721FF09E0C819002090000020A5 +:10D39000F4C6000039070000F10800000122022154 +:10D3A0006069FCF77BFF6069C0304677AE736069E7 +:10D3B0004189FDF728F8A07800282AD1606920303B +:10D3C000807A002800D06E810120FBF788FE60691A +:10D3D0003830FCF73EF860693430FBF751FF216AC2 +:10D3E00000200856FBF718FF0120FCF777F8FBF741 +:10D3F000D1FEFCF76FF80120FBF7B1FF6069406ECA +:10D40000FCF782F8FFF71FF860694030C07BFBF73C +:10D4100040FF6671E671A6712672A6726672267169 +:10D4200002202070FCF768F80020F8BD10B5F74C1A +:10D430002078022801D00C2010BDA078002803D04D +:10D440000020FFF79BFC17E0FCF74BF800F01DF9FC +:10D4500060692030007C012809D0FCF79FF8FBF7B9 +:10D460009EFEF3F7AEFFE07A012803D004E0FCF75C +:10D470009DF8F4E7F5F7CCFD002010BDE349C87234 +:10D48000704710B5E14C2078032803D0E049E1480B +:10D4900007F09FFDE04801218278002A06D0002293 +:10D4A00082700171A27904231A43A271A2691378D0 +:10D4B000DB439B0707D1C378002B04D1C170A0794F +:10D4C00002210843A0711078C00606D4E0690078F4 +:10D4D000C00602D4E07900280CD06078002809D179 +:10D4E000A079002806D1FEF7F2FC002802D0207AAD +:10D4F000002803D00120FFF741FC03E0FEF7A3FF63 +:10D5000000F0C3F82078012806D0F3F75AFFE07A3C +:10D51000012801D1FCF7DAF810BD38B5BB4C6069C1 +:10D520002030007C012820D1A07A00281DD1684637 +:10D53000FCF744F8002818D061693120405C0128CC +:10D5400010D1B54A0D236D460020D356285683428C +:10D5500008D050738989303A9185114620318873FB +:10D5600001208872A07A401CA07238BD70B5A74C0B +:10D5700006462078042804D0A648A549553007F06F +:10D5800028FD607910210843A34D6071002E47D01B +:10D59000FCF765FA61780126084300280ED1687C03 +:10D5A00000280BD0E0694178C90607D00078E979F6 +:10D5B0000007C00F884201D1667247E0E07800287A +:10D5C00009D0E0694178C90605D10078C00602D4C7 +:10D5D000FFF7A3FF3AE0FFF7A0FFE069A979007821 +:10D5E0004007C00F884205D0FFF7D0FC60790821C2 +:10D5F00008436071E069E97900780007C00F88424C +:10D6000001D1FFF708FD6079304360710020E071BF +:10D61000A079000702D5A87B022817D0207A13E052 +:10D62000022108436071E079401CC0B2E07101281A +:10D630000CD8687C00280DD0774854384078C10653 +:10D64000C90E052906D2C006002803D00120FFF725 +:10D6500095FB01E0FEF750FE2078012806D0F3F795 +:10D66000B0FEE07A012801D1FCF730F870BD10B5AA +:10D6700066480078042804D066486549B73007F04A +:10D68000A8FC0120FFF77AFB10BD10B50720FBF7BF +:10D690001CFE5E490420087010BD5C4933224969B4 +:10D6A00050545D4A032090738876704710B5574CEC +:10D6B0006069C030007F00281CD0062806D056487C +:10D6C000817B0020FEF7ABFF002813D06069014684 +:10D6D000C0310A7F130007F06DFD070D0D0D0D0D14 +:10D6E0000D050D006030807AC20704D0C04380076A +:10D6F00000D1087710BD0C20FEF7AEFF6069012253 +:10D700006030817A1143817210BD10B5002A0AD0B1 +:10D71000002306E0D41A6418203CE47FC4545B1C48 +:10D72000DBB29342F6D310BD10B503F0B0FF0C2866 +:10D730001CD3364C08216069D03003F0A9FF0028C3 +:10D7400006D060690421953003F0A2FF002803D1C0 +:10D750002F49324807F03DFC6169042208469531A3 +:10D76000BD3007F099FA0420FEF776FF10BD7CB5B6 +:10D77000294E0020B17BFEF752FF0125234C0028E3 +:10D7800002D1207A284320726946E069FCF73EFD09 +:10D79000684600780021C207D20F684602706069AF +:10D7A000002A02D06030057401E0603001746069C5 +:10D7B0005E221152603085700820B0737CBD401A23 +:10D7C000174900B2884201DC002801DC01207047C3 +:10D7D0000020704770B5104D0020A97BFEF71FFF99 +:10D7E0000A4C002803D1207A012108432072E06905 +:10D7F000FCF77EFC6169DE2250524988FFF7DFFFAB +:10D8000000280FD02820FFF748FF70BD90000020AF +:10D81000F4C60000330A0000C819002062060000A8 +:10D82000FE7F00006169E069E031FCF755FC0520EE +:10D83000A873EAE770B500F047F8384C384D6079C6 +:10D84000400709D5A97B0520FEF7E9FE002803D093 +:10D85000207A082108432072FFF71AFA00F012F824 +:10D86000FFF7B6F8A079C00609D5A87B030007F03A +:10D87000A1FC06060606060604060620A873FFF7A6 +:10D880003EF8C2E710B525488179490714D5017AD9 +:10D89000002911D12249897B0B0007F08BFC080D70 +:10D8A000050D0D0D0E0D100D4069002262210A5468 +:10D8B000C030807EFFF7F1FE10BD012100E00221A3 +:10D8C0004069C030417710BD10B51448817909070F +:10D8D0001DD5017A00291AD1114A947B230007F043 +:10D8E00069FC1416160B16161616161616161616AC +:10D8F0001616161616161716406960308170407C91 +:10D90000002801D0062000E01620FFF7C6FE10BD5B +:10D910004069603001728170917310BD90000020E9 +:10D92000C819002010B5031D03600020521E04E03A +:10D930005C181C60401C2346C0B29042F8DB0020FB +:10D94000186010BD01460A680020002A02D0104667 +:10D9500012680A60704702680A6001607047000040 +:10D9600000B51A2822D00ADC030007F023FC0D11B1 +:10D970001F131F1F191915171F1F1F1B1F002A28F0 +:10D9800014DD3A38030007F015FC030F11091100EC +:10D99000002000BD1E4800BD042000BD0D2000BDBC +:10D9A0000F2000BD082000BD112000BD032000BDD8 +:10D9B00010B50C46F4F784FF00281AD02046F4F77F +:10D9C00084F9002812D020780E280BD00F2809D017 +:10D9D000022807D0032805D00EA1772007F0F9FA16 +:10D9E000002010BDA078FFF7BBFF10BD09A17D206E +:10D9F000F4E708A18320F1E710B5F4F7EDF810BDC6 +:10DA000010B5F4F762F910BD10B5F4F744F910BD84 +:10DA1000023000007372635C686F73745F686369DF +:10DA20002E630000F0B597B00021032004F082F9C6 +:10DA30000025FE4E022775807574347C12E0F06874 +:10DA4000E1004018818800290CD0858069460F705C +:10DA50004D7001680291808869468880002168467F +:10DA6000F8F702FD2046641EE4B20028E7D117B0A3 +:10DA7000F0BDEE4BD86019741A80D3E7EB49EC4B3C +:10DA80004A8800201A4200D00120497C002901D098 +:10DA9000082108437047F7B504460E460078012177 +:10DAA000E34A8140521C114098B0E04A00915188ED +:10DAB000E04B994205D0009B002B05D0DC4B19426E +:10DAC00002D001201BB0F0BD009BD84A1943518001 +:10DAD0001A9D002D11D00020287022781A98002756 +:10DAE000401C130007F066FB10EF0D152137555D44 +:10DAF0006A39AFAB85B3EEEDECEF0B28EDD0042027 +:10DB0000E0E702212970A1880170090A4170032011 +:10DB100093E004212970A1880170090A4170E1880D +:10DB20008170090AC170052087E006212970A1884B +:10DB30000170090A4170E1888170090AC170218968 +:10DB40000171090A4171A289E81D216907F0A4F851 +:10DB5000A089C01D71E0082129702178082901D110 +:10DB600010212970A1880170090A4170E188817033 +:10DB7000090AC1700520308020466A1D01A90830BD +:10DB800003F0CFFB00287DD1694630880979401821 +:10DB900053E00A212970A1880170090A417003200D +:10DBA0000AE00C212970A1880170090A4170E188FE +:10DBB0008170090AC170052030809DE0A0888446EC +:10DBC0004000401C81B2308888425BD3052959D37C +:10DBD0000E202870002008E0A36842009B5A5219CA +:10DBE00053701B0A401C937080B26045F4D331809F +:10DBF000B6E08E49487C002873D0401E4874C8683F +:10DC000021790822C9004518A988286840180838D1 +:10DC1000A16807F041F802216846017100214171B5 +:10DC200028680390A98868460181002101A8F8F7B7 +:10DC30001BFC0020A880002E00D0308090E02978C6 +:10DC400080221143297029784022114329702978B4 +:10DC50008909890112312970A1880170090A41706E +:10DC6000E288E81CA16807F017F8E088C01C308043 +:10DC70002878410640D5C00972D00121684601715B +:10DC8000002100E02BE041713188ED1C091D01816C +:10DC90001A980390E08840190490001D634D059088 +:10DCA000297C68460176002101A8F8F7DDFB0746CC +:10DCB00030880C303080022F06D0002F50D060E02A +:10DCC0003CE032E01CE059E06946097EE868CA00A1 +:10DCD00080182A7C914202D28188002902D0042730 +:10DCE0004FE02EE0697C491C69741A990160318803 +:10DCF00081800020308044E04C48A188C1802FE022 +:10DD000029788909890116312970A1880170090AC9 +:10DD10004170E1888170090AC1702289681DE1683B +:10DD200006F0BAFF2089401D46E728788009800167 +:10DD3000183028702079687002207EE73B480A047A +:10DD400001D405271DE00289A3889A4201D0062745 +:10DD500017E01E222A70012249043280490C4180BA +:10DD6000009800280DD0314D0022288811468300EC +:10DD7000032003F03AFF2078287107E0002030806C +:10DD800003272A48009942888A434280384699E608 +:10DD9000F7B59AB002000C4606D0172A04D82348DB +:10DDA000244B4088984202D107201DB0F0BD237853 +:10DDB0005D0601D4DB0901D00820F6E700236D469B +:10DDC0002B706B701D462378611C9F06931E189361 +:10DDD000531E19939BB2169302AB1793134BBF0EAE +:10DDE000DE883B0007F0E6F9208511F15EF16BF16A +:10DDF000A3F1C6F1F2F1FBF1EEF1EDF1ECF1F1F18D +:10DE0000EBF1EAF1E9F1E8F185F1052A71D104229B +:10DE100069460A7005490A7969460A71E178A3786A +:10DE20000A021A436946CA80227905E0DC190020FB +:10DE3000FE710000FFFF00004A7061788906890EBC +:10DE40000C2923D009DC891E0B0007F0B3F9091354 +:10DE500052155219521B521D520012291CD004DCBB +:10DE60000E2915D01029D1D114E0162916D0182961 +:10DE7000CCD115E0800700E04007002839DA2AE11C +:10DE80000007FAE7C006F8E78006F6E74006F4E781 +:10DE90000006F2E7C005F0E7C004EEE78004ECE717 +:10DEA0004004EAE7800724D5032AAFD105206A465B +:10DEB0001070487809780002084390800BE1400711 +:10DEC000F1D5062A15D31898617880B2012902D0BD +:10DED00002299BD101E0022700E0102706226946B3 +:10DEE0000A7000228A8001AEA11C0236BA1C179269 +:10DEF00018E0B6E04A780B7812021A433280801E8E +:10DF0000891C1890B21C1691384603F0E4F9169952 +:10DF100018986B469A88C919C01BB61D521C9A8066 +:10DF2000179A80B28242E5D900289CD1D3E000073D +:10DF3000B9D51998694682B20720087000208880F8 +:10DF4000601C891D11E0437806781B0233430B8067 +:10DF5000C37886781B0233434B806E46121FB3880A +:10DF6000001D091D5B1C92B2B380042AEBD2002A6B +:10DF700077D1B0E0C00674D5022A72D31898082170 +:10DF800082B2684601700021C18063780371A01CD1 +:10DF900017990EE04678077836023E430E80861CBD +:10DFA0004E606F46D21AFE88C0180831761C92B2B5 +:10DFB000FE809342EED9DAE76FE076E065E051E06B +:10DFC00046E01EE014E00AE000E0A0E0800648D54C +:10DFD00009206A46107096801698D0800FE040069F +:10DFE0003FD50A22684602708680169AC28006E0F3 +:10DFF000000636D50B206A46107016989080029164 +:10E0000069E0C0052DD5022A7FD318980C2182B271 +:10E01000684601700021C18063780371A01C1799C4 +:10E0200013E04678077836023E430E80C67887783C +:10E0300036023E434E80061D4E606F46D21AFE8861 +:10E04000C0180831761C92B2FE809342E9D98EE75F +:10E05000C0045AD5012A58D10D2168460170868026 +:10E0600039E052E0800450D5052A4ED30E2368468D +:10E0700003708680C8788B78010219436846C18096 +:10E08000521F0281601D039025E040043DD5012A06 +:10E090003BD10F20694608701DE0030435D44B784E +:10E0A0000E781B023343244E3381032A2DD31B2FBA +:10E0B00027D011236E46337001261F4BF6033043E1 +:10E0C000588048780B780102194368468180D21E37 +:10E0D000C280E01C029020788006800E1B280AD0A7 +:10E0E0001D2808D00021032003F024FE1248418897 +:10E0F000C90BC903418068461C99F8F7B5F9284651 +:10E1000053E610206B461870DBE70725F7E7082574 +:10E11000F5E700B50022D243074997B04A800328AB +:10E1200007D1032268460270097901710021F8F7CE +:10E130009BF917B000BD0000DC190020FFB589B0C5 +:10E140000020019009981027FE4C1E46154608280D +:10E1500006D0E06901F05EF8002809D03770BEE013 +:10E16000288809213843108013980227017016E08F +:10E17000E169012088710521E269C9029180E169A4 +:10E180008872E169F0480881E16900208873288875 +:10E190002021084328801121139804270170139827 +:10E1A0000225801C0290307806900A203070E548E5 +:10E1B0001830049001F022FA0020059020462C30FF +:10E1C00003906DE00998102808D1022D06D001991E +:10E1D0000298A28D401A8270110AC170E08D0A99CE +:10E1E000884202D901F0CDF806E0884204D10698B1 +:10E1F000002801D030701CE00298E18D0170090AFE +:10E20000417012980088401BC01B82B2FF20C01BC7 +:10E21000904200D2024607A8009002980021C3193C +:10E22000E08D01F056FA3070002805D0C0B2832886 +:10E2300058D0E08D20833EE00598002804D0206C63 +:10E2400000790A282CD336E06846808BC119C9B200 +:10E250000191022D0DD01399019A4978914202D172 +:10E26000228F824208D00191206C0178032908D0C6 +:10E2700023E0084613994870206C0178042906D0E1 +:10E2800007E000790A2818D20120059008E0E18D06 +:10E29000818002990198081802900198281885B287 +:10E2A0000399049801F0ADF9002804D11298008870 +:10E2B000401BB84286DA022D0DD00998102806D1ED +:10E2C00002990198A28D081A8270110AC1701298E1 +:10E2D000058000203070206C0078032802D00020D8 +:10E2E0000DB0F0BD0220FBE7F8B5964A0026126D8E +:10E2F000002A2ED0401F934D84B24035E88A234631 +:10E300000833AF8AC318BB4222D88B784F781B02E0 +:10E3100010183B4303701B0A43700B79CF781A0225 +:10E320003A438270120AC2700471220A4271224674 +:10E33000491D801D06F0B0FCE88AA41D001980B2BA +:10E340008049E882096D002208180270427000E0DE +:10E3500009263046F8BD30B57A4B028840339B8A97 +:10E36000934213D9774B1C6DA3185C781D78240257 +:10E370002C430BD05C791D7924022C436404640C7B +:10E38000A41D1219028000200B6030BD822030BD18 +:10E39000F0B585B0074600266846068155E001982D +:10E3A000417802780D021543417902790802104341 +:10E3B00000044AD43D8003A80023012200905202A9 +:10E3C0001946284601F085F9040044D168460189C0 +:10E3D0000182019841790279090211434378027858 +:10E3E0001C021443AC421CD10A041AD44A04012171 +:10E3F000520C89030A430096C178807809020143D0 +:10E400000023204600F0C1FF040010D10199487993 +:10E410000A79000210430122D20310430871000A56 +:10E42000487101A904A8FFF796FF0400D1D0019913 +:10E4300000964878097800020843694600238A89D3 +:10E44000194600F0A2FF822C05D101A902A8FFF70E +:10E4500082FF0400A3D06846068109E0019948794B +:10E460000A79000210434004400C0871000A487108 +:10E4700001A902A8FFF76FFF0028EFD0822C02D07D +:10E48000204605B0F0BD0020FBE7F7B584B0144688 +:10E490000646002700F071FF2A480025006D00287D +:10E4A0002FD0059801282CD12046FFF771FF0700D7 +:10E4B00027D1002E29D06846058118E001994878B7 +:10E4C0000978000208432080019B0095587919794A +:10E4D0000202D8780A4301029F78587839431F789E +:10E4E00000029B1D384300F050FF002805D101A910 +:10E4F00002A8FFF730FF0028E0D0822800D10020DA +:10E500000746002E01D00F48056500F03AFF384657 +:10E5100007B0F0BDF0B597B00021042003F00AFC6D +:10E52000084F00243D467C8040356C73AC73287BDB +:10E53000B96CC00008380E18B08800280DD0012032 +:10E54000694603E0F01900200128000008703068D7 +:10E55000019000216846F9F78EFAB4803C65AC82E0 +:10E56000EC8217B0F0BDFE4B986418464030017342 +:10E570001A803838D861CDE7F949002049880A0760 +:10E5800000D501200A06120F01D002221043CA054D +:10E5900001D5042210438A0501D5102210434905F4 +:10E5A00001D520210843EE494031497B002901D0A3 +:10E5B000082108437047FFB5A7B004002898164605 +:10E5C0001B9022D00178E6484D06428822920246EE +:10E5D00040320092002D14DB8A06920E1E2A0ED0C5 +:10E5E000229A5205520E10D13288172A0DD3009A62 +:10E5F000927B002A09D1DB4D229AAA4205D0CA0992 +:10E6000006D08A06920E122A02D003202BB0F0BD4B +:10E61000D348826C0098007B2590C0000838101801 +:10E620001F9048060CD40098407B002808D0009921 +:10E6300088731F99289808601F9884800220E5E756 +:10E64000002718A90F7069460F72C54902AA0A640B +:10E65000309A4A6410A90F850F861B981D460078D2 +:10E6600020908106BE4B601F24901A462C322192C6 +:10E670002898DA691833890E1E93401C0B0006F0A7 +:10E6800099FD1FFDFD11FD1AFD90FDFCFDFBFDFA3E +:10E69000FDF9FDFCFDF8FDFDFDF7FDF6FDFDFDFDC1 +:10E6A000FDF5FD00032C7BD10320287017226A7032 +:10E6B0000022AA70E0E2052CF5D141780278090227 +:10E6C0001143A74B10AA19831185C27880781202D2 +:10E6D00002435A8300297DD091427BD800211846FD +:10E6E00081720181491E01841E9800F087FF052078 +:10E6F0002870A81C1D900220009021991E9800F0FF +:10E7000080FF002803D047E018A90870F0E2944881 +:10E710002030807C012803D002206870102002E0A5 +:10E7200001206870022022908D4830302390002212 +:10E7300020A9239802F0F5FD00282AD120A800780E +:10E740002299814225D132880099801C511A814238 +:10E750001FDB83481D99C08D0870000A48701D9802 +:10E7600020A9801C1D9000981D9A801C0090239861 +:10E7700002F0D7FD20A909781D9840181D90009837 +:10E78000401880B2009021991E9800F03AFF0028AE +:10E79000CDD0009802288DD10A2018A908706CE20B +:10E7A0006DE0072C6BD341780378090219436C4B59 +:10E7B0008446198310AB1985C37880781B021843EF +:10E7C000674B0029588305D0814203D801211846A0 +:10E7D000817200E0A4E061464B7909791B020B438A +:10E7E000038100218173104600F014FD00280FD131 +:10E7F0005B480121C26991710522C369D2029A80E6 +:10E80000C2699172C26958491181C069002181733E +:10E810005349E01F08841B98C01D48621E9800F0F1 +:10E82000EDFE07202870681C009001201D904C48C8 +:10E830000021C18530E01D98012815D04848C169E4 +:10E84000897901292FD000981038C17B807B09027B +:10E85000014300980170090A41700098801C0090E3 +:10E860001D98801C80B21D903D4809E013E2BEE176 +:10E870007AE1D8E00DE2A0E080E03BE01EE2B6E005 +:10E88000C18D00980170090A41700098801C0090A9 +:10E890001D98801C80B21D9021991E9800F0B1FE39 +:10E8A000002802D006E0818DD3E731881D98081A30 +:10E8B0000428C0DA1D98012800D16DE72848C169F5 +:10E8C0008979012903D0828D26498A4205D1818D1B +:10E8D00000980170090A417009E000981038C17B66 +:10E8E000827B0802009910430870000A48701D9846 +:10E8F000801CC1E1072C01D0152C78D14178037818 +:10E9000009021943164B198310AB1985C378807817 +:10E910001B02034312480029438301D0994201D9C5 +:10E920000120F1E60E4801218172002101818173ED +:10E93000052C07D024981B99C0B2491D02F0CBFCCE +:10E940000028BAD100200649C04308841B980096CD +:10E950000195007818AB8006800E1CAA002105E006 +:10E96000F0190020FFFF000001280000FFF7E6FB80 +:10E970000746FE4810A9008B08857EE1032CBCD118 +:10E98000402210A90A86417802780802F74910430C +:10E99000088310A9088520A9009131886B1C491EA5 +:10E9A0008AB2002100F095FE18A90870002830D125 +:10E9B0000B20287020A8008833E0052C9DD18021F1 +:10E9C00010AB1986014640780B780202E7481A43DB +:10E9D0000283CB7889781B021943E44B10461984D3 +:10E9E00010AB1A85E24A914202D307208CE697E0E9 +:10E9F0003F23DE4A9B021943118421AA00923288E8 +:10EA00006B1C521E92B200F064FE18A90870002818 +:10EA100003D08328B1D102272FE10D20287020A830 +:10EA20008088401C28E120990C22C9095143C91C47 +:10EA30001E91A14204D92098400671D500201BE107 +:10EA4000417800780902014310A801851B980078DD +:10EA500042062898C01C1D90002A62DA05206A46EA +:10EA600010721B980078C00944D0082268460272D0 +:10EA70008181A01A87B268468782289806901E98DE +:10EA8000201A81B26846C1811D980490401806F092 +:10EA900064F9079006982599C0190890491E08A89E +:10EAA000017102A83099F8F7E6FF07460021684691 +:10EAB0000172002F1BD0022F18D1009808A9007BEB +:10EAC0000979401E884210DDA848289A836CC90045 +:10EAD0005A50816C08A80079C000001D0C520098A3 +:10EAE0000099407B401C4873C7E00527EAE00620F8 +:10EAF00069460872002000901E980021201A20907C +:10EB000082B21B9B10A8DB1C008D00F03EFC01466E +:10EB100018A80170002268460272832903D003E01E +:10EB200093E00720E4E702271B98007840060ED503 +:10EB30008E484188C90506D510AA018B128D9142D5 +:10EB400001D100214162002018A9087094E0FF2142 +:10EB5000013110A80186018D844801832099018428 +:10EB60001D994162132085E0052C6ED3417803780E +:10EB70000A021A4310A90A859446092269460A72B4 +:10EB80000021009101222499D20311438AB2C17855 +:10EB9000807809021B9B01435B1D604600F0F5FB7A +:10EBA00018A90870002269460A720122520210A9AF +:10EBB0000A86832802D0002805D099E06B48098D89 +:10EBC000018302277EE06948006D002807D02046B7 +:10EBD0001B99FFF789FB18A9087000284DD12B4617 +:10EBE000324620461B9900F024FB074645E01B985F +:10EBF000022C4078009064D1002801D0012860D117 +:10EC00000A2168460172009901731AAA002000992E +:10EC1000FFF73BFC0146684641730021817302A85F +:10EC20003099F8F728FF0746002168460172012154 +:10EC3000890210A80186022F08D04C48006C807908 +:10EC4000002807D018A9087020E04BE04749009839 +:10EC5000088337E0002F03D0812018A9087031E025 +:10EC60001AAA01200099FFF710FC18A908700028C3 +:10EC700003D119202870012030806846007A0028CE +:10EC800004D002A83099F8F7F6FE0746002F2BD0E3 +:10EC900018E0062038E522993448090711D5012CDF +:10ECA0000FD10B2269460A72C08888810021042096 +:10ECB00003F040F8082010A90886BFE62098400617 +:10ECC00010D50327294810AA4188128E114341808C +:10ECD0005005400E04D01F99289808601F98848022 +:10ECE000384693E404200FE518A8007800280ED0D9 +:10ECF000012028701B980078687010A8008DA870FB +:10ED0000000AE87018A8007828710520308017489C +:10ED100010AA4188128E91434180E1E7FFB5064673 +:10ED20009FB000201B903178012088401149124A81 +:10ED3000084010A908860D494988914203D000284F +:10ED400004D0080702D5012023B0F0BD219D002783 +:10ED50002F7020983C46018810A8018418A80771DC +:10ED600000F00BFB6846077202A907E0F0190020CB +:10ED70000102000009F80000FFFF0000FA480164EA +:10ED800001464031826C1A91097BC9000839571835 +:10ED900022994164307801282AD0022809D003281A +:10EDA00079D12878800980011D302870EE48B1881B +:10EDB000C1803078022804D12878800980011B3076 +:10EDC000287001A8009010A8008CEB1CC01E82B215 +:10EDD000B088002100F07DFC0028E1D1B188697085 +:10EDE000090AA9706946888810A9C01C08842DE109 +:10EDF000717918A801713079012802D00228CFD189 +:10EE0000E6E0D9487F2340881B010246184010AB3A +:10EE10001886802840D006DC102810D020280ED07C +:10EE200040280AD120E0FF38013859D0FF38013896 +:10EE30006AD0FF38FF3802387ED0052491E0D00632 +:10EE400001D5082000E010201B90042069460872BC +:10EE50000020888118A800900195318919AB1CAA5F +:10EE60001B98FFF76BF977E0BF4B3289188B824212 +:10EE70004FD10A221B92002973D101A9009110A938 +:10EE8000098C6B1C491E8AB2002100F022FC18A9D3 +:10EE900008710B2017E0F6E0B34B3289188B8242E1 +:10EEA00037D10C221B9200295BD101A9009110A936 +:10EEB000098C491E8AB21946098C6B1C00F009FCAA +:10EEC00018A908710D2028706946888810A9401C6F +:10EED0000884042069460872A348008B888140E0BA +:10EEE000A14A3389108B834213D112231B9300292B +:10EEF00037D1536A002B05D00091128C00F045FAEF +:10EF000018A9087113205EE097483289038B9A4252 +:10EF100001D00424E7E016221B92026D002A09D1D9 +:10EF2000F268002A06D002651A98328A82821A9AFA +:10EF30000020D082002900E02FE012D1B888396883 +:10EF4000FFF7D2F918A9087100280AD1B8882B4612 +:10EF500018AA396800F06DF90446022818D0042C6C +:10EF600016D0B88800280FD06846007A002804D050 +:10EF700002A82299F8F77FFD04460120694608722D +:10EF8000386803900020B880002C5FD0052C7BD01F +:10EF90006846007A032873D0A5E018201B9000294A +:10EFA00005D071483189018300210165D9E76E4898 +:10EFB0000246017E18320120FFF767FA18A908718E +:10EFC0000028CED119202870012010A90884C8E794 +:10EFD0001A98407B002856D0307AC0001358001D84 +:10EFE0000193105A1D9000291AD100F0CAF9062089 +:10EFF00069460872002000901D980F3882B201986F +:10F000008178437808021843019B0021DB1C00F043 +:10F01000BCF918A90871002269460A72832830D009 +:10F02000002118A8017110A801840121684601720D +:10F03000019803901A981A99407B401E48731A98B9 +:10F04000807B002802D01A99401E887310A8008E79 +:10F050007F21090102468A431DD0434800220088CF +:10F0600011468300042002F0C0FD3F483178017151 +:10F0700010A94088098E08433B4948800FE003E00F +:10F080002BE002242FE00524374810AA4188128E75 +:10F090009143418027E034494A8882434A80684648 +:10F0A000007A002805D03048416C02A8F8F7E3FC4C +:10F0B000044618A80079002815D01B986870012014 +:10F0C00028702948008BA870000AE87018A80079F9 +:10F0D0002871052110A8018405E02348416C02A88D +:10F0E000F8F7C9FC044600F04CF91F484088400579 +:10F0F000400E20D11A98807B00281CD1B8880028A7 +:10F1000019D0209910AA0988118422990091396890 +:10F1100018AA219BFFF74FFA044602280BD00120C2 +:10F12000694608723868039002A82299F8F7A3FC90 +:10F1300004460020B88010A8018C20980180204649 +:10F1400002E600B50022D243074997B04A8004285E +:10F1500007D1022268460270097901710021F8F78F +:10F160008AFC17B000BD0000F019002010B5394C22 +:10F1700003780022216C012B02D0022B44D126E01F +:10F180000B78002B01D0042B03D10A71226C0321D0 +:10F190001170216C83880A79D200921D8B52216CE8 +:10F1A0000A79D20008328918C2880A80216C038942 +:10F1B0000A79D2000A328B524289206C0179C90047 +:10F1C0000C314252216C0879401C087120E00A740D +:10F1D000226C81889180216CC288CA80226C01894E +:10F1E0001181226C41895181216CC068C860616CB9 +:10F1F000206CF8F740FC0146022807D0206C007C08 +:10F20000002802D1002903D0812010BD832010BD29 +:10F21000002010BD8178012909D100880521C9028B +:10F22000884202D0491C884201D100207047052045 +:10F23000704710B51488844201D2052010BD1724F0 +:10F240001C701080421E491C581C05F025FD002032 +:10F2500010BD0000F019002010B58B78002B11D0E4 +:10F2600082789A4207D10B88002B0BD003E0091D4E +:10F270008B78002B08D08B789A42F8D103880C88C1 +:10F28000A342F4D1002010BD812010BD10B500298B +:10F2900002D001290DD102E00088000501E00088BC +:10F2A0008004800F07D001281CD0022809D0032831 +:10F2B00010D0812010BD002901D0032010BD0220F4 +:10F2C00010BDF5F7EEFD03280CD004280AD0002865 +:10F2D00006D009E0F5F7E5FD042803D0022803D0A5 +:10F2E000052010BD002010BD0F2010BDF3B5C81CB7 +:10F2F00080080E46800081B0B04201D08620FEBD5D +:10F30000FE4C354626600198A08000202081E080D8 +:10F3100014E0B807A978800D0843F94905F036FDD7 +:10F32000E088401CE080B80607D42089401880B2ED +:10F3300020810199081A8019A8600C352F88780758 +:10F34000E7D40020A072FEBDEC480C22C1880089E1 +:10F350005143081880B2704770B51346E74A451804 +:10F360009488AC4201D2842070BD126810180A46FD +:10F37000194605F091FC002070BDE049012088721B +:10F380007047DE49002088727047FFB589B0970446 +:10F390000E460546BF0C029200F034FA040021D05C +:10F3A000002069460873D548807A012812D00121CF +:10F3B0002046FFF76BFF002815D12078400609D5BD +:10F3C0000221684601730582218841828682C782B4 +:10F3D0000C9806900298000407D500273E460125A8 +:10F3E00001970CE001200DB0F0BD2078A1788007D6 +:10F3F000800D0843C249019005F0C8FC0D460298F3 +:10F4000040040AD50198A84207D12088E1788005F8 +:10F41000800F00020843B04201D3AE4201D9072059 +:10F42000E1E7B81980B20290A84201D90D20DAE7CD +:10F430006846007B002804D003A8F8F718FB0028D2 +:10F44000D1D10198A8420BD1208803210902884319 +:10F4500002998905890F0902084320800298E0700B +:10F460001298002800D007800C9800280CD0207833 +:10F47000000609D4A0683A4680190C9905F00CFCE6 +:10F4800020881021884320800020ACE7FFB59B4DE9 +:10F4900081B00E46E8882F680C21009048433C1844 +:10F4A0009749039805F072FC0A462889E11B8446B7 +:10F4B0000C314018318880B28B0601D5002300E062 +:10F4C00013461818AB8880B2834202D8842005B056 +:10F4D000F0BD0098894D401C80B2E88021800D99D4 +:10F4E000002900D00C600399A170E2702188039D6F +:10F4F0008908AD058900AD0F294303252D02A943D5 +:10F500009505AD0F2D0229430425294321800C992F +:10F51000002900D0088001998978A1710199098892 +:10F52000A1803178890601D50B9905E073496244C1 +:10F5300092B20A81991AC919A16000212173327807 +:10F54000920601D50020C2E700910B9B0A9A04990C +:10F55000FFF71BFFBBE7FEB5044600F053F90700B9 +:10F5600008D0664D641EE8880190A6B2286834462B +:10F57000009015E00120FEBD0C2000996043095A5F +:10F580008A060BD489078A0D0099801C085C5C49A7 +:10F59000104305F0FBFB2889401A2881641CA4B2A3 +:10F5A0000198A042E8D8EE8000203870FEBD002807 +:10F5B00003D0401E0880002070470120704710B51E +:10F5C0004E490288CB889A4201D3822010BD0B6835 +:10F5D0000C21514359180B88CC789B059B0F1B02BB +:10F5E000234341608C7904738C884481C38189688A +:10F5F000521C016102800281002010BD01210182A4 +:10F600007047FEB505460020C043088068680F4675 +:10F6100081786846817068680188684601800021A9 +:10F620008171288A2C88A04200D304462C8234E0C1 +:10F63000288A401C2882301D6968FFF70DFE0028CB +:10F6400029D139882F48814201D1601E38806888CD +:10F65000A04227D33088F1788005800F000208434C +:10F6600002906946301DFFF7F7FD002813D1298964 +:10F67000244881421AD000213046FFF707FE0028B7 +:10F6800009D12A890298824205D1E968B06805F05B +:10F69000D6FA00280AD0641CA4B2204600F0B2F8C2 +:10F6A0000600C5D1641E2C828220FEBD7C80B0790C +:10F6B000B871B088B8803088388130788007810D83 +:10F6C000B078014379810298B881B0683861002030 +:10F6D000FEBDFFB585B014460F46059800F092F8C0 +:10F6E000050037D00548BE05807AB60D01281CD02C +:10F6F00000212846FFF7CAFD002805E0481A00202F +:10F7000001020000FFFF000022D1287840060CD53E +:10F71000012168460170059981802988C180068190 +:10F720004481F8F7A4F9002812D12888AA78810723 +:10F73000890D11438005800FEA7800021043BE4214 +:10F740000AD0374A914207D3611E814204DD0B2063 +:10F7500009B0F0BD0120FBE7864201D90720F7E799 +:10F76000801B82B2A24200D922460E98002800D007 +:10F7700002800898002804D0A8688119089805F02C +:10F780008BFA0020E4E770B514460D4600F03AF815 +:10F7900000280DD001882980002C0DD001788078B8 +:10F7A0008907890D01431E48814203D2012002E0EE +:10F7B000012070BD00202070002070BD70B516467D +:10F7C0000D4600F01FF804000DD02D882580FF2E77 +:10F7D00016D0A807A178800D0843114905F0D6FA84 +:10F7E000002E06D101E0012070BDFF31FF31033151 +:10F7F00089B2A170A80880008905890F084320807C +:10F80000002070BD0749CA88824207D3002805D06E +:10F810000C22096850430C380818704700207047C4 +:10F8200001020000481A0020F0B585B00E460546DA +:10F830000020694608707078FE49C00003900C589B +:10F84000FD4F002D0ED0022D73D0002C72D02078E9 +:10F85000801E030005F0AEFC09837F7F7F83797FE4 +:10F8600077727F00002C03D1F4A16B2005F0B1FB6F +:10F870002078801E030005F09DFC09065E5E5E197F +:10F88000365E50545E003078062803D0EBA1762017 +:10F8900005F09FFBB8687168806C032205F0FCF9E5 +:10F8A000012069460870002835D1CEE730780C2851 +:10F8B00003D0E2A1812005F08CFBE06800780028ED +:10F8C00006D0B8687168806B102205F0E5F928E071 +:10F8D000B8681021006B05F03CFAB868816A006BCB +:10F8E0000A787168F1E730780D2803D0D3A194200D +:10F8F00005F06FFB04206946087071684878097844 +:10F9000000020843B9684A6A517812780902114323 +:10F91000484069468880084608E0C8A1AF2005F045 +:10F9200058FB6846007800288FD06846F5F7BEFA85 +:10F930008BE727E01CE0C1A1B420F0E7B86861695B +:10F94000006CFEF708F8A16900E0E168B868006C97 +:10F95000FEF701F803E0B9A1E32005F03AFBB8682F +:10F960002146006CFDF7F7FFB24A03990020505082 +:10F97000022D07D0002D05D0012D03D0AFA1EF201F +:10F9800005F027FB05B0F0BD10B501780124012971 +:10F9900002D0022910D112E04268A74800218260FB +:10F9A0000170A4486C38C166016741678167D289DC +:10F9B00002214C3001F0E1F90024204610BDFF2067 +:10F9C0009EA1163005F005FBF7E7F0B505469EA1B0 +:10F9D00003C997B014911390002008A908759549A0 +:10F9E0002A781031944C0491217805910126914F89 +:10F9F000A168130005F0DEFB0CEF07309AF0EDEC88 +:10FA0000EBEAE9E9E8EF20700124FF264F360546CE +:10FA100010A80570457001F0C1F90746012803D010 +:10FA200086A1304605F0D5FA10A93846FFF7FCFE4E +:10FA30002046641EE4B20028EAD10A206946087014 +:10FA40006846029501F088FA002803D0FF207BA1C8 +:10FA5000583068E0002646E3C86A0078C0072FD017 +:10FA6000012069460870684601F076FA002804D043 +:10FA7000FF2072A16B3005F0ACFAA068006CFDF7B6 +:10FA800061FF050004D1FF206CA16E3005F0A1FAE2 +:10FA900008984078C0003D5006202870A068016892 +:10FAA00069600069A8606448C01CE860284601F0ED +:10FAB00053FA022804D0FF2060A1783005F089FABB +:10FAC000A068C06A00784007C4D501206946087064 +:10FAD000684601F041FA002804D0FF2057A1803089 +:10FAE00005F077FAA068006CFDF72CFF050004D143 +:10FAF000FF2052A1833005F06CFA08984078C000CE +:10FB00003D5006202870A068016869600069A860FF +:10FB10004948401DE860284601F01EFA022899D0A5 +:10FB2000FF2046A18D3005F054FA93E7A96800291B +:10FB300033D0694608712979012932D0022904D0CD +:10FB4000FF203EA1A73005F044FA3A4810221030B9 +:10FB5000A96805F0A1F837481030364920314860CF +:10FB60002078C1062CD5EF2108402070032069467B +:10FB70000870304810300290684601F00FF90446D2 +:10FB8000022808D0002C06D0012C04D0FF202BA185 +:10FB9000B83005F01EFA69466FE101216A4611711D +:10FBA000DBE7244A04996C3AD06748608860C860F3 +:10FBB0000621A86803F0FCFE1E4910310860CAE760 +:10FBC00020210843207045E7A1E15AE119E1E6E070 +:10FBD00086E056E000E081E2886C407980090128E7 +:10FBE00004D0FF2015A1CC3005F0F3F9A068017A0C +:10FBF000002906D1416B406801F01FFAA16801207D +:10FC00000872012069460870684601F0A5F90028CD +:10FC100004D0FF2009A1D73005F0DBF9A068006C03 +:10FC2000FDF790FE050004D1FF2004A1DA3005F0B5 +:10FC3000D0F90DE0C01A0020B40000207372635C9C +:10FC4000736D2E630000000004411A8800A4800038 +:10FC500008984078C0003D5002202870A068416B91 +:10FC60006960806CC01CA860284601F075F904002A +:10FC700004D0FF20FD49E23005F0ABF929462831D8 +:10FC8000FBE0172268460272012202708078820827 +:10FC9000287992008007800F024368468270FB201B +:10FCA000024028794007C00F8000024368468270F6 +:10FCB000EA8882804A6C02A901F090F9002804D0F9 +:10FCC000FF20EA49F73005F084F9052108A80175FD +:10FCD0006846017A0187A0680026406C0F9006E212 +:10FCE000012069460870684601F036F9002803D003 +:10FCF000DE49DF4805F06DF9A068006CFDF722FED3 +:10FD0000060004D18320D949800005F062F9A0687B +:10FD1000006CFDF717FE1290002804D1D448D34997 +:10FD2000801D05F056F9D3488068006CFDF70AFE87 +:10FD3000040004D1CE48CD49093005F04AF90898AD +:10FD40004078C0003E500A203070287A30716868D0 +:10FD5000C84DB060A868406C3061172030731298AD +:10FD6000B4617061304601F0F7F80446022808D00B +:10FD7000002C06D0012C04D01120BC49400105F014 +:10FD800028F92046316AFFF74FFD28780521014008 +:10FD9000042900D05EE6FB21084028702AE005987F +:10FDA00040084000207082071CD5FD2210402070C2 +:10FDB0000F206A46107017201071486C0290684638 +:10FDC00000F0ECFF0546022808D0002D06D0012DDA +:10FDD00004D0A748A5493A3005F0FBF86946284603 +:10FDE000FFF722FD2078052101400429D2D1FB2113 +:10FDF00008402070072008A908759E48807808767A +:10FE000028E6012069460870684601F0A5F8002838 +:10FE100004D097489549543005F0DBF8A068006C91 +:10FE2000FDF790FD060004D113209049400105F034 +:10FE3000D0F890488068006CFDF784FD040004D180 +:10FE40008B488A495A3005F0C4F808984078C000B9 +:10FE50003E5007203070874880684068706068684E +:10FE6000F460B060304601F077F8040004D08048B8 +:10FE70007E49653005F0ADF8316A2046FFF7D4FCC5 +:10FE8000E8E5012069460870684601F065F8002839 +:10FE900004D0774875497A3005F09BF80898407887 +:10FEA0001190A068006CFDF74DFD060004D15120B3 +:10FEB0006E49C00005F08DF8A068006CFDF742FDAA +:10FEC000040004D16A486949823005F082F811982B +:10FED000C0003E50C019296941600920307068682F +:10FEE0007060A868B060A889B08163483061103044 +:10FEF000B4617061304601F02FF8022804D05C48EC +:10FF00005A49903005F065F811982875A2E55A4ACB +:10FF100000208C32107002206B46187001922879F4 +:10FF2000002801D0107098E0524803230C3040683C +:10FF3000FB2703708378504A9B089B003B408370EB +:10FF40004B7A00271B07DB0F43708C3257600B7B0B +:10FF5000C370CB7A1372537A0C7D5B08E4075B00A5 +:10FF6000E40F23430C461534D460FD242340CC7E9B +:10FF7000E407A40F234353720B461C3313614771EC +:10FF800007718B7A3B4A9C070C32A40F1268012C34 +:10FF900004D19478A407A40F012C1DD09B089B00CA +:10FFA0008B7293785B0702D48B7A5B0728D54B7AE8 +:10FFB00013AF5B075B0FDC005B00E3181478640091 +:10FFC0001B19DBB2DC083C5D5F077F0F0623DB1BE0 +:10FFD000DC40A3079B0F14E04C7A53796406640F4E +:10FFE00023404371147906273C400471E4001C430C +:10FFF000204B5C7083789B089B005B1C8370D0E770 +:020000040001F9 +:1000000000238478FB273C408F7A7F07FF0FBF00D7 +:100010003C4384704C7A6407640F04705078012864 +:1000200007D1487A000704D5032008A908750220E3 +:100030002DE0022B27D0012B2BD00F4B0020049A50 +:10004000D86750609060D06018467C30024610320D +:100050005060887AFB2210408872684600F09EFE4D +:10006000040035D0012C34D0004907E03CFC0000EE +:1000700009020000B4000020541A00206520C000CE +:1000800004F0A7FF25E0032008A9087501200876E1 +:10009000E3E77E4C0D21E01C04F05BFE20461030AF +:1000A0004460022008A908750E94A868002807D0AB +:1000B0000068206005997648202211430170CCE742 +:1000C00005980007C9D57349734804F082FFC4E757 +:1000D000002669462046FFF7A7FB04E06E486D49FD +:1000E000203004F076FF08A8007D002802D00DA87B +:1000F000F4F7DCFE304617B0F0BDF0B597B00C4613 +:10010000054600206946087061482F785F4E0178E7 +:10011000583E82683B0005F04DF80BAA8407263B49 +:100120004C6B79798F9CAA002B20694608730CA927 +:1001300003A8FDF73DFC002804D05748554941303D +:1001400004F047FF55490D9804F020FE4F48016028 +:100150004F4869680C300160AA684260019108202C +:10016000694608708CE08A0610D5DF2211400170C4 +:1001700003202070454810304168A1604068002885 +:1001800002D00020207177E00120FBE7102256E02A +:100190002B20694608733D4903A85C39FDF708FC2C +:1001A000002804D03C483B496A3004F012FF042088 +:1001B0001BE02A206946087303A8102202306968F0 +:1001C00004F06AFD07A810220230A96804F064FD5B +:1001D0002E4903A85C39FDF7EBFB002804D0392039 +:1001E0002C49000104F0F5FE05202070666043E014 +:1001F0002A79002A02D001221143017005206946A4 +:10020000087028798880A868029039E0D06A402375 +:10021000018819430180D06B6968102204F03CFD0D +:100220002AE0FB2211400170062069460870A96887 +:1002300068680291019023E0CB0703D002221143AA +:10024000017058E70F20207017202071506CA060BB +:1002500012E0937A9B0706D0D26A44781388FF3461 +:1002600001342343138004221143017004E00A483F +:100270000849BD3004F0ADFE684600780028E0D0A3 +:100280006846F4F713FE36E701207047D01A0020C5 +:10029000B40000203CFC00001503000040420F00A9 +:1002A00070B504780D460646230004F083FF0B1C4E +:1002B000181C1C1C1C07181C1C181C0000210520E5 +:1002C00001F038FDB068007805280CD0FA4800220B +:1002D000008811468300052001F087FC03E000211F +:1002E000052001F027FD002D0ED0002028702946A2 +:1002F0003046FFF702FFF1482978005D884201D1BE +:10030000032070BD022070BD00213046FFF7F5FECE +:10031000002070BD30B5E8494B68497A0A011146A2 +:100320000C315C5C032C0CD0044600252034257174 +:1003300025725C5CA500AA18641C5C5498500320CC +:1003400030BD062030BDF0B50446264620360D46A9 +:100350003279012008218FB0002A0CD0012A21D047 +:10036000022A2BD0032A04D12A78052A01D1297028 +:1003700000200FB0F0BD01203071606800280AD065 +:10038000A069017061684160216981606169C16033 +:10039000FFF7C0FFEDE707202870206968606069FB +:1003A000A86009E029780729E3D1022030710520EF +:1003B0002870C248203868600320DAE729780529C8 +:1003C000D7D1A08910280AD9103880B2A081A1689D +:1003D0001023091803A86A6800F054FE2DE01028C5 +:1003E00004D0C1B20BAA1020A76809E0102322692B +:1003F000A16817E0491EC9B2401EC0B27B5C13540D +:100400000029F7D100280AD0401EC0B28021115423 +:10041000002102E0401EC0B211540028FAD16269E6 +:1004200010230BA907A800F02DFE102307A903A88D +:100430006A6800F027FE032030716068019003A80D +:10044000029005206946087029466846FFF728FF94 +:100450008FE7F0B5044626460D4620363179012057 +:100460008DB000290BD0012938D0022905D1297877 +:10047000052902D10920287000200DB0F0BD217D92 +:100480006846CA07D20F02738807C10F6846017415 +:10049000012203A905A800F0EDFD04A9012205AF82 +:1004A000481D00F0E7FD0722B81CE16800F0E2FDFE +:1004B00007A807220130216900F0DCFD6068019087 +:1004C00009A80290102305AAA16800F0DBFD012015 +:1004D0003071052168460170294621E029780529F7 +:1004E000CBD1062203A8E16900F0C4FD04A80622CE +:1004F0000230A16900F0BEFD042106A800F0B2FDA3 +:100500006068019007A80290102303AA696800F0B0 +:10051000B9FD0220307105206946087029466846F9 +:10052000FFF7BEFEA9E7F0B5074685B00D460020EF +:10053000694608703E466248203632798179133820 +:1005400001240078130004F035FE180DFEFDFCFBBD +:10055000FAF9F8F7F6F5F4F3F2F1F0EFEEEDECEB73 +:10056000EAE9E8E7B968039100291BD0012269464E +:100570000A7003220A710A224A7139690291397993 +:1005800000297DD0039A1278002A7AD00C2A78D2DA +:10059000130004F00FFE0BEF09EF354D8498B0F116 +:1005A000EDECEF000020C8E30021062001F0C2FBC3 +:1005B0003879072866D1424C133C2078022802D0B3 +:1005C00000287FD101E00020207003980079C11F2E +:1005D0000A2901D30A2598E1607039480722C01F13 +:1005E000039900F047FD0120307120700220694618 +:1005F00008703348801F01903869401C029037E230 +:1006000011293DD12E4C133C0228DAD16068617863 +:10061000007A884201D9062577E1039926481022FD +:10062000491C303800F026FD03202070022045E1EF +:100630001129E6D1224C133C0428C2D10520207098 +:1006400003991D481022491C203800F013FD062094 +:100650003071786903210170626851684160164900 +:100660002039816021460C31C160C91D0161017DC5 +:10067000537A49084900DB07DB0F1943017502E093 +:1006800070E354E384E1D3688361FD231940537A16 +:100690009B07DB0F5B0019430175116976E10229A5 +:1006A000AFD1002867D005206946087103984078CB +:1006B00048713869029051E3241B00203452010034 +:1006C000DB00002082E011299BD1F74C06287DD168 +:1006D000A0680399806B1022491C00F0CBFC062116 +:1006E0006846017038690290002168460171FFF781 +:1006F000D7FD072057E00B299BD1EB4C07287ED173 +:10070000A0680399006B0222491C00F0B3FCA068AA +:100710000822406B039917E00EE116E3FDE2DDE2EB +:10072000C7E2BCE29EE267E248E241E21FE2F5E195 +:10073000DFE1C8E1BEE1B1E1A5E16AE147E128E11D +:10074000DAE0BEE0AFE075E0C91C00F093FC0621E2 +:100750006846017038690290002168460171FFF710 +:100760009FFD204613304179490849003EE041E0B1 +:100770001BE001E05CE0EFE2112991D1CA4C0828AE +:100780003DD1A0680399C06B1022491C00F072FC97 +:10079000062168460170386902900021684601719F +:1007A000FFF77EFD09202070C9E208298CD1BE49DF +:1007B000092824D1039842788868016C0A7003994B +:1007C000406C0622891C00F055FC00E017E0062171 +:1007D0006846017038690290002168460171FFF790 +:1007E0005FFDB14813304179FD221FE041715EE2A7 +:1007F0003071F2E11129C0D1AB490A2801D0082596 +:1008000083E088680399806C1022491C00F032FC58 +:10081000062168460170386902900021684601711E +:10082000FFF73EFDA04813304179FB221140DDE780 +:1008300007256AE0297802297ED19B490128FBD14E +:100840006A684A6015780846002D5CD106216A4620 +:1008500011703969029107211171029902240C70FB +:10086000CA785207520FCA704B795B075B0F4B7106 +:100870008B795B075B0F8B71D20701D18A714A714B +:1008800005460A794078824200D26A70864807227B +:10089000133000F0EFFB00202C70307101466846E9 +:1008A000FFF7FEFC4BE229780429C5D103286FD15C +:1008B00008227E48696800F0DDFB032030710420C7 +:1008C000F2E129780429B7D1774F0328B4D17748CA +:1008D00008220830696800F0CDFB04203071786888 +:1008E0004168002906D00321297000212971406840 +:1008F000A86072E10320D7E1287803289CD12879E9 +:1009000000281AD00546002D16D006216846017031 +:100910003869029002216846017102980521017030 +:10092000457000216846FFF7BBFC01216846017055 +:1009300004210171457115E293E15B49A86849689A +:100940000028486001D15A48486005203071786914 +:10095000032202704A684260544A8260524A0C3252 +:10096000C260D21D0261027D4B7A5208DB07520041 +:10097000DB0F1A430275CB688361FD231A404B7A63 +:100980009B07DB0F5B001A4302750969C16130E107 +:100990000DE12978092988D14349032885D104200C +:1009A00008700620694608703869029011200871A5 +:1009B000029803210170401C1022696800F05AFB64 +:1009C00000216846FFF76CFC00203071B7E1297800 +:1009D000092993D1052891D134496A68203910201A +:1009E000401EC0B20B5C145CA34203D0002004255F +:1009F00030718AE70028F3D107203071786904212B +:100A00000170294949684968416028498160103965 +:100A1000EEE028780A28BED10620694608703869B9 +:100A2000029011200871029804210170401C1022CC +:100A30001E4900F01FFB00216846FFF731FC1A48F1 +:100A4000102140786A68091AC9B2101800F00AFB30 +:100A50006868019014481330C178C9070BD08179B8 +:100A6000002902D14079002805D0082030711BE10F +:100A700029466846EFE0072069460870002168466D +:100A8000FFF70EFC5FE128780E2884D106486968DC +:100A900081608969407808700920A9E6C80701D0FB +:100AA0000A20FFE00F20A3E6C8000020141B00204E +:100AB0001452010028780F2879D1A8683861287964 +:100AC00038730B20FAE628780428F5D1FC4C6968C5 +:100AD000A0680822006A00F0CDFA0C203071786915 +:100AE0000722B9690270A268D3684360126A826003 +:100AF0007EE028780D28DFD1F14C6968A0680223D8 +:100B00000269C06900F0BEFA0D20307178690621D3 +:100B10000170A1688A684260096966E028780C283B +:100B2000CAD1E74C6968A0686278406A00F0A2FA0E +:100B30006078A2681021091A526AC9B2101800F030 +:100B400091FA0621684601703869029011226846C0 +:100B50000271029810220170A168401C496A00F0DD +:100B600089FA00216846FFF79BFB0E206EE028788B +:100B70000F2876D1062168460170386902900B2152 +:100B800068460171029C0720CD4D2070A8680222A2 +:100B9000C169601C00F06EFAA8680822016AE01CB6 +:100BA00000F068FA00216846FFF77AFB7AE7C8E0B0 +:100BB000880701D5102075E0132019E628780F2842 +:100BC0004FD1A86838612879387311203071BC483A +:100BD000816848690078002801D00324CAE0786958 +:100BE00006220270C9684160B6498160B549091D95 +:100BF000C160FFF78FFB30E0B14880684169097838 +:100C000000290CD129780C292BD1AD4C6968806A58 +:100C1000102200F02FFAA16801204969087006210E +:100C20006846017038690290112168460171029886 +:100C300008210170A249401C89681022896A00F0CD +:100C400019FA00216846FFF72BFB122030710921A9 +:100C5000684601702946FFF723FB044601287DD032 +:100C600088E06FE028780F286CD10620694608706C +:100C70003869029008200871029809210170904992 +:100C800089680A78D207D20F427049680622801C10 +:100C900000F0F0F900216846FFF702FB8CE74807F7 +:100CA00005D514203071092069460870E0E6162049 +:100CB0009EE528780F2851D1A868386128793873C3 +:100CC000152030717869062101707D4989688A682C +:100CD0004260096981607B49891D89E728780C2871 +:100CE00045D1774C6968A0681022C06A00F0C2F94B +:100CF0000620694608703869029011200871029830 +:100D00000A210170A168401CC96A102200F0B2F9E2 +:100D100000216846FFF7C4FAC9E7694813304079F3 +:100D2000002810D0C10703D065480621017006E0F5 +:100D3000800701D5082000E00A20614908700024DE +:100D400018E00BE013E0172052E55D49002805D0BC +:100D50000020307108700A206946087068460078E3 +:100D6000002804D000216846FFF79AFA002454486E +:100D700000210170204605B0F0BD10B5524BFF2494 +:100D80005C72586019721A80002204E0491EC9B2D0 +:100D90000B010C33C2540029F8D110BDF0B54A4EF6 +:100DA0000546717A01208DB0FF2971D00127727A32 +:100DB000736811015C180C31595C8900091F645873 +:100DC0006A7021780B0004F0F5F90B960709272CBF +:100DD00059888D4A4F5492002F707CE02146203173 +:100DE0000A9109790120002902D0012967D10EE07A +:100DF0006068019005A802900D21C01C00F032F936 +:100E0000032205A8A16800F035F90A984EE0297878 +:100E1000052974D106215DE029462046FFF719FB1C +:100E200069E021462031069109790120002902D08C +:100E3000012964D10EE06068019007A802900822A1 +:100E4000E16800F017F9082209A8A16800F012F97A +:100E500006982BE02978052951D10A213AE0294644 +:100E6000204600F01AF946E029462046FFF76BFAC3 +:100E700041E029462046FFF756FB3CE02146203161 +:100E8000059109790120002903D0012937D11DE0FE +:100E900056E06068019007A802900822A16800F05F +:100EA000E9F8082109A800F0DDF8059869460771FE +:100EB0000520087029466846FFF7F2F91BE00BE0B1 +:100EC000C80000200C520100241B002029780529AD +:100ED00015D10B212970002011E02946204600F091 +:100EE00023F908E02946204600F04EF903E02946A0 +:100EF0002046FFF7C9F9002801D001280CD125624E +:100F0000717A736809010C315A5C521E1206120E76 +:100F10005A5401D003204AE70328FCD0737A726840 +:100F200019011D010D312C46515C7172FF270D34E2 +:100F300017550C35545D002C02D0FF2903D1737274 +:100F40000DB0F0BD21460C010D34145DFF2CF9D11C +:100F500009010D315354F3E770B5AD4C0546607A85 +:100F6000214603464A6811E0010108460C30105C36 +:100F700008E0401EC0B286008E199659AE4201D1DB +:100F8000042070BD0028F4D10D31505CFF28EBD156 +:100F90009F480021007A01E0491CC9B2884204D967 +:100FA0000E010C36965D002EF6D1884201D8052040 +:100FB00070BD08010D30135461722846FFF7AAF97D +:100FC000032806D0617A626809010D31515C6172B3 +:100FD00070BD28462830FFF7E1FE70BD10B50478DB +:100FE0000123012C14D10C78022C11D30B23137084 +:100FF00083785B075B0F537002220A708088002899 +:1010000005D0830000221146062000F0EEFD0023EB +:10101000184610BD0EB50022012105280AD0062869 +:1010200007D1684601700221017142710021FFF76A +:1010300064F80EBD68460170F6E710B58EB00C4638 +:1010400006216A461170019072480290001D0390BB +:101050006846FFF781FF102220460B9900F00AF83E +:101060000EB010BD002202E0491EC9B24254002950 +:10107000FAD1704703E0521ED2B28B5C8354002A2F +:10108000F9D1704730B505E05B1EDBB2CC5CD55CB6 +:101090006C40C454002BF7D130BD3EB5044620301F +:1010A0000D4602790121002A02D0012A3AD10FE02F +:1010B00061680191574908310291012101710520B0 +:1010C0006946087029466846FFF7EAF8014629E0B4 +:1010D0002878052826D169681022A06800F087F8D2 +:1010E0006868C07B000606D54A4AA06810231832FB +:1010F0000146FFF7C7FF1022A168E06800F077F80B +:10110000A068C07B000606D5424AE068102318326A +:101110000146FFF7B7FF07202870A0686860E06805 +:101120000021A86008463EBDF0B5044626460F469D +:1011300020363179012089B0002909D0012905D153 +:101140003978052902D10C203870002009B0F0BD93 +:10115000606803AD01900295022203A8A168FFF721 +:1011600089FF0222A81CE168FFF784FF0C21281DDB +:10117000FFF778FF01203071052069460870394675 +:101180006846FFF78DF8E1E710B5034620331C7978 +:101190000122002C04D0012C10D0022C25D11EE0FD +:1011A00001211971C16806220A7040684860194817 +:1011B000801C8860801CC86008460CE00C780C2CF1 +:1011C00013D102221A71C268052313704968516055 +:1011D000806890601046FFF79DF8024605E00878A9 +:1011E0000B2802D10D2008700022104610BD10B54A +:1011F000002409E00B78521E5B0023430370401C5F +:101200000B78491CD2B2DC09002AF3D110BD0000D2 +:10121000241B00200C52010070B50D46040012D0B2 +:10122000002D10D02101284603F093FD10225449CF +:10123000284603F031FD52480121083801804480DE +:101240004560002070BD012070BD70B54C4E00247B +:101250000546083E11E0716820014018817BAA7B99 +:10126000914209D1C17BEA7B914205D10C222946EA +:1012700003F0E5FC002806D0641C30888442EADBD9 +:101280000020C04370BD204670BD70B50D460600FD +:101290000AD0002D08D03A4C083C20886188401CB8 +:1012A000884203D9042070BD102070BD3046FFF77E +:1012B000CCFF002801DB401C0AE0208861680001A7 +:1012C00040181022314603F0E7FC2088401C2080A3 +:1012D0002870002070BD70B514460D001FD0002C82 +:1012E0001DD00021A170022802D0102817D108E0DB +:1012F000687829780002084311D00121A17010807C +:101300000BE02846FFF7A1FF002808DB401CA07077 +:10131000687B297B000208432080002070BD0120EB +:1013200070BD70B5054614460E000AD0002030701E +:10133000A878012807D004D9114908390A889042B1 +:101340000BD9012070BD002C04D02878207028888B +:10135000000A50700220087010E0002C0CD0496880 +:101360000001411810391022204603F095FC28781E +:1013700020732888000A607310203070002070BD30 +:10138000EC00002073490968016000207047714932 +:1013900008600020704701216F4A704B002803D07D +:1013A000012805D06E48704791630020187001E055 +:1013B000D1631970002070476A49012008606848AD +:1013C000801C70470422684B6649002805D05A608B +:1013D000086901221043086108E0086940084000DC +:1013E00008619A605C490020C03188600020704725 +:1013F0005C490622002808D0012809D002280DD017 +:1014000003280FD05648401C70470869904302E0FB +:1014100008699043801C0861002070470869904368 +:10142000001DF8E708691043F5E74E494A6A024390 +:101430004A62002070474B494A6A82434A62002050 +:1014400070474849496A0160002070474549CA69A8 +:101450000243CA61002070474249CA698243CA6197 +:10146000002070473F49C96901600020704730B5CE +:101470000546002072B601463A4A384C4032002DEB +:1014800011D00123012D0CD0022D02D0072062B60D +:1014900030BDA3706478002C01D09363F7E79163AB +:1014A000F5E7A170F9E7A170F9E72F4904208860FA +:1014B00029490020C03188602849012008702B4943 +:1014C0000A688023120A12021A430A602849086037 +:1014D000704722480078704770B5EFF31080C50759 +:1014E000ED0F72B61D4C6078401C0006000E607057 +:1014F00003D120A1CC2003F06CFD6078012806D137 +:10150000A078002803D01749012040318863002DBE +:1015100000D162B670BD70B5EFF31080C507ED0F56 +:1015200072B60E4C6078002803D112A1DC2003F0C3 +:1015300050FD6078401E0006000E607006D1A07855 +:10154000002803D00749002040318863002D00D1D6 +:1015500062B670BD0004004040000040FC00002066 +:1015600004200000000500400003004000E400E00B +:1015700000E100E07372635C736F635F706F7765A7 +:10158000722E63008107C90E002808DA0007000FD9 +:1015900008388008B94A80008018C06904E08008D3 +:1015A000B74A800080180068C8400006800F704766 +:1015B000B44948788978884201D3401A02E0212250 +:1015C000511A0818C0B27047AE492331487889785B +:1015D000884201D3401A02E02122511A0818C0B2F1 +:1015E0007047A849463148788978884201D3401A23 +:1015F00002E02122511A0818C0B27047A04810B565 +:101600000C300168FF22120291430122D2031143E0 +:1016100001609C490020233148708870233948704C +:101620008870463148708870974802F0FFFA9648F3 +:10163000401C02F0FBFAF2F7A9F900F015F910BD11 +:1016400020207047B4E770B50C4605460026FFF72A +:10165000AFFF8C49A04214D30A46203A002320460B +:10166000641EE4B200280BD08878105C287088785B +:101670006D1C401CC0B288702128F0D18B70EEE741 +:10168000012600F0F1F8304670BD202070479BE73E +:1016900070B50C4605460026FFF796FF79492331C1 +:1016A000A04214D30A46203A00232046641EE4B226 +:1016B00000280BD08878105C287088786D1C401C3E +:1016C000C0B288702128F0D18B70EEE7012600F0BF +:1016D000CBF8304670BD202101700020704710B556 +:1016E0000446FFF77EFF2070002010BD70B50C4649 +:1016F0000546FFF776FF63494631A04215D30A46F7 +:10170000203A00232046641EE4B200280BD08878DB +:10171000105C287088786D1C401CC0B2887021282D +:10172000F0D18B70EEE7002400E0584C00F09CF8FC +:10173000204670BD70B50C460546212904D9FF200E +:1017400053A1473003F045FC4C484068103840B284 +:10175000FFF718FFC6B20D20FFF714FFC0B2864294 +:1017600007D2FF204AA14D3003F033FC01E0F2F72D +:101770004DF921462846FFF766FF0028F7D070BDD7 +:10178000F8B5404E07462336B1787078212200F034 +:1017900060F8354623353B4C00280ED0A1786078A0 +:1017A000212200F056F8002814D0A9786878212268 +:1017B00000F04FF800281AD025E032497078C91C93 +:1017C0000F547078401CC0B2707021281BD10020CB +:1017D000707018E02B49607820390F546078401CF5 +:1017E000C0B2607021280ED1002060700BE0254946 +:1017F000687826310F546878401CC0B26870212880 +:1018000001D100206870B1787078212200F021F8B1 +:1018100000281DD0A1786078212200F01AF8002855 +:1018200016D0A9786878212200F013F800280FD08C +:10183000F2F7CEF8144802F001FA01214903884278 +:1018400003D013A1C12003F0C4FB0F4802F00EFA2D +:10185000F8BD401C884205D0904201D1002901D03A +:10186000002070470120704710B5074802F0E6F9E4 +:10187000002801D1F2F79BF810BD000000ED00E058 +:1018800000E400E0501B0020FF00002007200000C3 +:101890007372635C736F635F72616E642E630000CA +:1018A00010B5284802F0C2F9002803D026A11D2057 +:1018B00003F08FFB2348401C02F0B8F9002803D046 +:1018C00021A1212003F085FB10BDF1B5224D6F68E9 +:1018D00001261C4802F0B2F91A4C002803D1002658 +:1018E000601C02F0C3F91D4A1D490120506000BF71 +:1018F00000BF00BF00BF00BF00230B604B60009B18 +:101900006B60106000BF00BF00BF00BF00BF086871 +:10191000002802D148680028F9D048680028E4D19E +:10192000002E04D06F60601C02F088F907E0601C94 +:1019300002F084F90028D3D1024802F097F9002080 +:10194000F8BDC2E7010100207372635C736F635FCF +:101950006563622E6300000000E5004000E0004087 +:1019600000E1004030B5EFF31081CC07E40F72B610 +:101970001D4A116910230D461D431561002C00D12D +:1019800062B61A4DC406E40E0120A0402C68044241 +:101990000DD0C8060AD4EFF31080C007C00F72B68E +:1019A000116999431161002800D162B630BD20BF92 +:1019B00040BF20BFEAE70E4908784A78401CC0B211 +:1019C000904200D008707047084A094820BF40BFC5 +:1019D00020BF4178037843701368002B02D103784D +:1019E0008B42F3D00020704700ED00E000E200E001 +:1019F00003010020FEB5F64C07466068FF213E015A +:101A000081552178FF2913D0090108314158324608 +:101A1000491E083209020192090A805800F0CEF9E5 +:101A2000002802D02478254615E061682078885582 +:101A30002770FEBDE64842680198115828010090C1 +:101A40000830105800F0BAF9002806D1E0482C46BA +:101A5000416800980D5CFF2DECD1DD482101406804 +:101A600085554754FEBD70B5D94A04460020157A05 +:101A700053680AE00201561C9E5DA64203D10C3257 +:101A80009A588A4204D0401CC0B28542F2D8FF2046 +:101A900070BDF8B5CE4F3E7801F01AFE0146FF2E1C +:101AA00071D03401254678680835405900F086F930 +:101AB00002280CD97868405901F0FDFD01F008FEBC +:101AC00001467868405900F079F902285BD8C0498E +:101AD0004868025D0A70A11C425C002A0CD0521EAC +:101AE000425441590122D20589180902090A41517B +:101AF0003046FFF77FFF30E0631CC25C0092221D7E +:101B000094468258002A10D001239B029A420FD992 +:101B10009205920D43595703DB191B021B0A4351CF +:101B20006346C3589A1A920A09E0FF21C1540AE099 +:101B3000435952039A181202120A42510022425487 +:101B40003046FFF757FFA2480C344168C26800983E +:101B5000095980001258009890479D4C2078FF2822 +:101B600011D0000161680830085801F0A4FD01F0AF +:101B7000AFFD01462078626800010830105800F07F +:101B80001DF9022886D3F8BDF8B51C4615460E4649 +:101B90000746FF2B03D38FA1D42003F01AFA8C48F9 +:101BA000FF21C76045600472067401700022427014 +:101BB000104604E00201521C401CA954C0B2A042CD +:101BC000F8D3F8BD70B5824C06466578207C854216 +:101BD00003D380A1E72003F0FCF9E068A900465098 +:101BE0006078401C6070284670BDFFB581B01D460E +:101BF000FF2401F06DFD764F064679780198814209 +:101C000003D874A1F52003F0E4F971480021037AA8 +:101C1000406810E00A019446521C825CFF2A25D0DD +:101C2000019FBA4205D162460C328758029A974208 +:101C30001ED0491CC9B28B42ECD8FF2C18D0210110 +:101C40004A1C019B83540B460C33029AC250039BDF +:101C50005F4F0022012B0ED00B1DC25001239B02AF +:101C60009D4216D9AA05920D08D008E00C46E0E77F +:101C7000FF2005B0F0BD0B1DC550EFE71A4653031A +:101C80009B190E461B0208361B0AAA1A8351920A98 +:101C900009E0002D00D101256B039B191D022D0ABF +:101CA0000B460833C550891C42543D463E782046B9 +:101CB000FFF7A0FE2878B04214D000016968083010 +:101CC000085801F0F8FC01F003FD29786A68090161 +:101CD000083152580146104600F070F8022801D22F +:101CE000FFF7D7FE0198C4E770B50C46054601F032 +:101CF000EFFC064621462846FFF7B5FEFF2817D021 +:101D0000334D04012046696808300858314600F018 +:101D100055F80121090340186968A41C095D400BAE +:101D2000002901D089020818002800D1012070BDC7 +:101D3000002070BDF3B581B00F460198FFF793FE08 +:101D4000FF282AD0224E3578726829460C4604E0D6 +:101D5000844205D025462301D45CFF2CF8D11CE039 +:101D6000FF2C1AD0A5421CD10801105C3070FF284E +:101D700015D000010830105801F09DFC01F0A8FCBE +:101D800001463078726800010830105800F016F8EB +:101D9000022806D2FFF77DFE03E00020FEBD01F021 +:101DA00092FC39460198FFF79FFF22017168FF23DB +:101DB000541C0B558A5C2B01CA54FEBD401A00020C +:101DC0000121000AC905884200D90020704700009F +:101DD0009C1B00207372635C736F635F74696D6535 +:101DE000722E6300F0B500241C4A01211C4B08032D +:101DF000546018601B4B1C601B4C20601B4804691E +:101E0000E443E406E6170469761C10252C430461BC +:101E1000174C6160174D296000E020BF1F68002F3C +:101E2000FBD0002E03D107691026B74307619068E5 +:101E30008005906801D5104A10436960A1600021B7 +:101E400019600121084A09031160F0BD10B504466C +:101E5000FFF7C8FF2060002010BD000000C5004053 +:101E600080E100E000C1004080E200E000ED00E021 +:101E700000C3004000C0004000FCFFFF70B51F49D8 +:101E80000A68002A17D000231D4601244A68521C04 +:101E90004A60092A00D34D600E792246B2400E688E +:101EA00016420AD072B60B6893430B6062B649685B +:101EB0000160002070BD052070BD5B1C092BE5D3BF +:101EC0000FA1362003F085F8F5E7012010498005C1 +:101ED00008607047EFF31081CA07D20F72B6012174 +:101EE00081400648036819430160002A00D162B6A8 +:101EF000EBE70248002101604160704708010020C3 +:101F00007372635C736F635F6576742E63000000A9 +:101F100000E200E00120810708607047012081078E +:101F2000486070471048C068C00700D00120704763 +:101F30000D488068C00700D0012070470A484069FA +:101F4000C00700D0012070470748C06970470649A4 +:101F50008A69D20306D589698907890F814201D12F +:101F6000012070470020704700040040F8B5FE4C87 +:101F7000207BE17A88421AD00126FC4D0027E07AC6 +:101F8000215C14200A4642435019037C052B0FD0D4 +:101F9000062B1BD0072B28D0437C012B33D0F4A178 +:101FA000F64803F016F8207BE17A8842E7D1F8BDC5 +:101FB0000674E07A0A2807D0E07A401CE072491CD7 +:101FC000C8B2AA5802210CE00020F7E70674E07AB4 +:101FD0000A2808D0E07A401CE072491CC8B2AA580E +:101FE00003219047DFE70020F6E70674E07A0A282D +:101FF00007D0E07A401CE072491CC8B2AA580821F8 +:10200000EFE70020F7E74774E07A0A2807D0E07A84 +:10201000401CE072491CC8B2AA580721E1E7002021 +:10202000F7E770B5D64D06206872D648002444778D +:10203000047738300473C472D34801F0F7FDD348F5 +:102040000475EC72D249601E88606C71AC70EC70E3 +:102050002C716C70CF48022104704470CE4804701B +:10206000047528300470491EFAD10120F1F750FDA3 +:102070000020F1F74DFD0120A871F0F741FDC748A0 +:10208000F0F750FDC64C2070C648F0F74BFD60706D +:10209000F1F7E2FC70BD10B5F1F709FDC04C2078F6 +:1020A000F0F75EFD6078F0F75BFDB54C207A002814 +:1020B00005D0FFF730FAF0F7E2FD0020207210BDE6 +:1020C00070B5AF4CA079002804D0A9A1B64802F0A1 +:1020D00080FF70BDE07A002804D11320A4A1400144 +:1020E00002F077FF0126A6710025E572607A0421CF +:1020F000142250439D4A80180174A5488168491CE8 +:1021000004D0691E81600120F1F702FD0020F1F783 +:10211000FFFCF1F7E3FC01F023FEF1F7E8FDA34833 +:10212000056005600120A249C0030860F0F74AFF7E +:1021300098480078022804D0032804D1E0780028C9 +:1021400001D0A67000E0A570F1F7BDFD70BD03469B +:1021500086490520142242435218203A127F002A51 +:1021600004D0401E0006000EF4D1704714224243F2 +:1021700051180A46403AD362012220390A77704743 +:10218000012805D0032805D1002903D1002070477C +:102190000029FBD010B47A4C002363707D4A0028DC +:1021A00090700CD002280AD007291AD20B007B4469 +:1021B0001B79DB189F441505070D0F111300D37011 +:1021C00003E01B2000E03A20D0700120607010BCBA +:1021D00070475820F8E77720F6E79620F4E7B52017 +:1021E000F2E710BC0020704710B56A484078F1F75C +:1021F00085FD80B210BD411E1422504310B55B4ACC +:102200008418203C042902D8207F002803D158A13B +:10221000684802F0DEFE207F012803D054A1664802 +:1022200002F0D7FE0020207710BD70B5554C607FBE +:10223000217F884201D1012500E00025F1F7F7FC5C +:10224000F1F75CFD617F227F914201D1012100E025 +:102250000021A942EBD170BDF7B50646481E844661 +:102260008EB0C0B2142204905043404A85182846CC +:102270000595007C2D1D07282AD13B4C0027E07ACC +:10228000227B824221D0235C049A934201D1012710 +:1022900001E0002F04D00A2811D0421CA25C225475 +:1022A0000A280ED0401C227BC0B28242EBD1002F04 +:1022B0000BD0207B002806D0207B401E04E00022AB +:1022C000ECE70020EFE70A202073059A0120107444 +:1022D00060462B4C04280FD814204143234808188B +:1022E0002038007F002807D00598007C012807D0FF +:1022F0001098807A012807D01DA1304802F069FEAD +:102300001098807A012871D10598184B007C02281A +:102310001AD0154C207B0A2874D0207BE17A401C0F +:10232000884204D1C92012A1800002F052FE059912 +:1023300001204874217B04986054207B0A2865D0D2 +:10234000207B401C20731CE1607A049A0146904275 +:1023500006D0014614277843C018807C9042F8D1FB +:10236000627A824235D12BE0A81C0020B81C0020E4 +:102370007372635C72656D2E63000000D50500000A +:102380003C1D0020701C0020481D0020901C0020D7 +:102390001C1D002012010020C81C0020931A0100FF +:1023A000100100206D1F01007F02000000F50040B9 +:1023B00080E200E0CD020000CE0200001703000022 +:1023C000617A14225143C918897C61720121A1727A +:1023D00007E014224243D21814277943927CC9188B +:1023E0008A74142206215043C01881741098007A10 +:1023F000062819D203007B441B79DB189F4408127E +:10240000100E0C0AE07A00288CD090E7002099E7A3 +:1024100000210FE0B4210DE073210BE0322109E02F +:102420000A2107E0062105E0FF20FE49E23002F024 +:10243000D0FD0021109802910068401A2860109980 +:10244000097A002912D00221401A0102090A2960E2 +:1024500010980268406810180002000A686010981E +:10246000807A0228109803D0007B74E00421EBE707 +:10247000007A002813D0022202981018844610987F +:102480004268604608301718E748029A4078904240 +:1024900002D9E278002A04D03846083005E0042248 +:1024A000EAE7029A801AC0190830627A062A1CD01C +:1024B000627A14235A43DD4BD2185268914214D0E9 +:1024C000DB4B0793617A14225143D84A89184A6832 +:1024D0008968921B891B12020902120A090A90429A +:1024E0003AD89A4238D8994236D83018C01B0002E0 +:1024F000000A286010996044CE4AC9680002000AA8 +:102500009446421A01239B0507929A4201D2104633 +:1025100014E00A1A09929A4201D207980EE0079A2B +:102520006346624503D9591A0818401C06E0099A07 +:10253000624506D9181A4018401C404200285FDC4A +:1025400003E0B849BC4802F044FD2868C019000205 +:10255000000A6860002028726868082708300002B6 +:10256000000A68601098407AA8721098007A687221 +:1025700003280ED200280CD0FFF7D4FC002803D08B +:1025800007E0002011B0F0BD02983A210F1A322066 +:102590000290A5480178012901D0032909D1417889 +:1025A0000298814205D9E078002802D10298081AE1 +:1025B000C71928689E4A801B844601026868090A78 +:1025C000801B03021B0A8F421AD81746914217D864 +:1025D000BB4215D8617A062916D0677A6146062271 +:1025E000039200923A4614235A43904BD2189368B0 +:1025F0009B1B8B4216D80397977C062FF2D177E06E +:10260000049801F059F9BCE7059802220499027474 +:10261000627A062A00D0627A827461720120A07206 +:1026200011B0F0BD062F63D0002239469446142223 +:102630007E4B4A43D21853689B1B834229D2917B1D +:10264000AB7A99421FD805980521049C7B4D0174F3 +:10265000287B0A2811D0287BE97A401C884203D1C4 +:102660007049774802F0B5FC287B2C54287B0A2857 +:1026700007D0287B401C287383E7E87A0028EFD036 +:10268000F2E70020F7E701218C46917C0629CED1A4 +:1026900002E0604600282AD03D46009114202A46D8 +:1026A000424362480621161831741038007B0A280C +:1026B000624816D0017BC07A491C814203D161A1D6 +:1026C000634802F086FC5D48017B4554017B0A2982 +:1026D0000BD0017B491C0173B57C0098A842DDD169 +:1026E00006E0C07A0028EAD0EDE70021F3E7009782 +:1026F0000599022008744D4D607AB84207D10599BA +:1027000000988874049860720120A07221E00398F8 +:10271000062F0FD0062803D14AA14E4802F059FCDB +:102720000398142250434019049981740599009824 +:1027300088740EE0062803D142A1474802F049FC04 +:102740000398142250434019049981740599062076 +:102750008874012011B0F0BD70B50D4606463F49A2 +:1027600000242046891BA04103D236A13C4802F038 +:1027700030FC3C490020491BA04103D231A13A481A +:1027800002F027FC394A70190021821A8C4101D3CA +:102790003749401870BDF8B5401EC0B214214843F7 +:1027A00022494518687B062813D203007B441B7915 +:1027B000DB189F44020C0A080604002066E0B420DF +:1027C00010E073200EE032200CE00A200AE0062020 +:1027D00008E0FF201BA1E23002F0FBFB697B002038 +:1027E000002953D0022140186968002440180C21A8 +:1027F00000026956000A00294ADBF1F77FFA174AFE +:1028000006460C27EF570021101AA14103D20DA153 +:10281000134802F0DEFB13490020C91BA0412CD253 +:1028200008A127E07023010012010020B81C00203D +:10283000FFFF3F00FFFFFF0014070000A81C00205F +:10284000090200007372635C72656D2E6300000004 +:10285000C7030000DF030000E5030000FF7F841EC4 +:10286000F50300000020A107F60300000080841E8D +:1028700000807BE1FB4802F0ACFBFB4AF019002131 +:10288000821A8C4101D3F9494018F8BD0421AAE706 +:10289000F1F734FA0C21695600224018F449091A5C +:1028A000A241F2D24042F8BDF0B5064683B0F148ED +:1028B0000190457A029534687068001B0702EE4863 +:1028C0003F0A001B0090062D2DD0142029464143BD +:1028D000EA480122081884464168E748920586467E +:1028E000081B904210D3631A93420DD302467046E0 +:1028F000724503D900984018401C05E073450ED975 +:10290000411A0819401C404200280CDA6046029522 +:10291000857C0198C0790028D5D003B0F0BDD84996 +:10292000D84802F056FB0298854226D0142148432D +:10293000D2490123401802908068CF499B058C46FC +:10294000011B8646994210D3221A9A420DD3634640 +:10295000614503D900997144491C06E01946624556 +:102960002DD9091A0819401C4142002905DD029899 +:10297000B17A807B814200D37446062D15D0BF49C1 +:102980001420454368184268121B1202120ABA4208 +:102990000BD2B27A837B9A4200D38468857C0198FB +:1029A000C0790028B9D1062DEAD13068A042B4D050 +:1029B000E0190002000A3460706003B0F0BDB04955 +:1029C000B04802F006FBD8E7F0B5AF4904464868C6 +:1029D00085B0C005C00D1CD0103840B200280CDAFC +:1029E0000207120F083A920892005118C96980072D +:1029F000C00EC1400806800F09E08108A34A890083 +:102A0000891809688007C00EC1400806800F002899 +:102A100008D000262078002806D0012804D0002005 +:102A200005B0F0BD0126F5E72079062813D2030092 +:102A30007B441B79DB189F44020C0A080604002023 +:102A400018E0B42010E073200EE032200CE00A20E1 +:102A50000AE0062008E0FF208949E23002F0B9FAD6 +:102A600021790020002905D002214718814D002E30 +:102A700002D003E00421F8E70020E87102AA6946C9 +:102A8000A068F1F745F9694608228A56E06801A96D +:102A90008018C01C01221F2801DA019209E003AA54 +:102AA000F1F736F96846007B002802D00198401CF7 +:102AB000019000990198401808300002000A019026 +:102AC000C81B0002000A009060796946887200986D +:102AD0000390F1F7ACF8009A019B121A181A6C498E +:102AE00012020002120A000A8A4216D8884214D83A +:102AF0006846FFF7D9FE00990398814205D0C819AE +:102B00000002000AF1F7FAF8A0600120E979002933 +:102B100086D0002EB0D005B0F0BD0020F6E7F3B5AA +:102B20008FB05C480C460B9001F088F85A4A0F9918 +:102B3000504E5518203D594F00280BD05848007D65 +:102B4000002803D057A15A4802F043FA2078012800 +:102B50007DD05FE1787F0A280CD0787F397F401CD8 +:102B6000884203D14FA1534802F033FA207801285C +:102B700004D00CE0387F0028F4D0F7E7E87F002885 +:102B800003D048A14C4802F024FA0120E877787F6E +:102B90000F991422494D504340190174207802289E +:102BA00023D0787F14214843451920792872607911 +:102BB00068722A460C322946A068F1F7A9F80C2061 +:102BC00028560F2804DD1F3828732868401C286009 +:102BD0000C22AA56281DE16802908818C01C1F28E4 +:102BE0003FDA029901200860FDE027494868C005E6 +:102BF000C00D20D0103840B200280CDA0207120FA6 +:102C0000083A920892005118C9698007C00EC14065 +:102C10000806800F09E081081C4A890089180968A4 +:102C20008007C00EC1400806800F002803D11DA1F7 +:102C3000234802F0CEF9787F14214843451900213A +:102C4000E0686A460591117303AA05A900E0D8E07F +:102C5000F1F75EF86A460C2010560F2832DD01208D +:102C600031E0B3E0F60300000080841E00807BE1C9 +:102C7000FF7F841E3C1D0020FFFFFF00B81C0020CA +:102C8000442801001407000000ED00E000E400E02B +:102C9000FFFF3F00481D002016010020701C00208F +:102CA000901C00207372635C72656D2E63000000DF +:102CB00017050000F5040000FA040000B01B002016 +:102CC0000605000000200599401808900220A8720F +:102CD0002079287260796872A068291DC01C039150 +:102CE0001F2801DA01200AE006AAF1F711F8684668 +:102CF000007E002804D0039803990068401C0860F7 +:102D0000287A062813D203007B441B79DB189F44E2 +:102D1000020C0A08060400200FE0B4200DE0732026 +:102D20000BE0322009E00A2007E0062005E0FF2042 +:102D3000FD49E23002F04DF900202179002943D00D +:102D400002214118069168680831401808990590D9 +:102D500008180699401A0C900020F071F0F767FFF0 +:102D600004462860089820180002000AE860707A7B +:102D7000062825D0707A14214843EC494018406851 +:102D80000090059940180002000A0190687A69468F +:102D900088726846FFF788FD0098019A001B121B95 +:102DA00000021202E24B000A120A0C99984207D85C +:102DB0008A4205D80099069808180002000A28607F +:102DC000F0790028C8D110E00421BAE704AA0299DA +:102DD000F0F79EFF6846007C002804D00298029914 +:102DE0000068401C08602078A872787F0A2806D006 +:102DF000787F401C78770B9800F038FF47E0002080 +:102E0000F8E7E87F002803D0CAA1CD4802F0E1F836 +:102E10000120E877CB490F9808742078022803D165 +:102E2000C4A1C94802F0D5F8C64D2079287260794E +:102E300068722A460C322946A068F0F769FF0C2018 +:102E400028560F2804DD1F3828732868401C286086 +:102E50000C22AA56281DE16802908818C01C1F2861 +:102E600003DA0299012008600CE003AA0299F0F746 +:102E70004FFF6846007B002804D002980299006842 +:102E8000401C08602078A872AE4901200875797F3F +:102E9000387F814223D0747A062C22D0F0F7C7FE07 +:102EA00014214C43A1496218117C042917D003292D +:102EB00015D0536892681B1A101A1B0200029C4915 +:102EC0001B0A000A082B0AD30A468B4207D89042F5 +:102ED00005D8787F397F884201D0F0F7F4FE11B031 +:102EE000F0BD787F397F8842F7D111B0F0BD10B5C1 +:102EF0000020F0F7FAFD10BD10B50120F0F7F5FD48 +:102F000010BDF1B5009802281FD0904C607A0628B9 +:102F100003D188A18E4802F05CF80026A671012535 +:102F2000E572607A03211422804F5043C019017466 +:102F3000F0F7CEFE009800280CD001282AD00328F4 +:102F40007CD0B5207BA1C00044E082480078EFF738 +:102F50000DFEF8BD8048007F002803D075A17F4892 +:102F600002F037F865717C4D00202E60F0F7D0FD3F +:102F7000A968481C04D0012300221846F0F7FEFD82 +:102F8000607A617A401CC0B2142251437A58012100 +:102F90009047F8BD0120F0F7BBFD607900280DD007 +:102FA0006D488068401C09D0607A617A401CC0B2CC +:102FB000142251437A5806219047F8BD6648007F95 +:102FC00001280AD0022812D0032824D0042836D0A1 +:102FD00058A1634801F0FDFFF8BD2079002803D017 +:102FE0002671F0F77AFEE5705B480677F8BD207A27 +:102FF000002804D1FEF770FAEFF718FE2572607A08 +:10300000617A401CC0B2142251437A580021904783 +:1030100051480677F8BD504F0123397B786800226C +:10302000411A1846F0F7AAFD2079002803D026712E +:10303000F0F753FEE57002203877F8BD1BE0464EEE +:10304000217870680123411A00221846F0F796FD96 +:10305000207A002804D1FEF73FFAEFF7E7FD25724A +:10306000607A617A401CC0B2142251437A58002120 +:1030700090473577F8BD607A617A401CC0B214225F +:1030800051437A5805219047F8BD10B52F4C607A0E +:10309000062803D127A1334801F09BFF607A617AAB +:1030A000401CC0B214225143204A52580421904778 +:1030B00010BDF0B583B006200290F0F7B8FD234CA8 +:1030C0000090617A28480190062920D0617A142066 +:1030D000414316480918097C042918D0617A142242 +:1030E00051430818007C03287BD00198009A03689C +:1030F00040689B1A801A1B0200020D491B0A000A35 +:10310000082B6ED30A468B426BD8904269D812487E +:103110008068401C03D007A1144801F05AFF00202A +:103120006071607A062823E0A42C0100B81C0020FE +:10313000FFFF3F007372635C72656D2E63000000D9 +:103140001E050000901C0020240500003C1D0020EE +:1031500055050000100100201C1D00206105000025 +:103160009C050000AF0500002C1D0020EB050000B1 +:1031700007D16078002804D0FE48C178417081787A +:103180000170607A062815D0607A1421FA4A484303 +:103190008018007C04280DD1607A0290617A0120A9 +:1031A0001423594389180874617A59438918897C12 +:1031B0006172A072F14D687F297FF14F884233D050 +:1031C000F04E287F142148438019007CC05D0128FF +:1031D000287F07D048438019007CC05D02282FD08B +:1031E00044E001E2142148438019807A01280AD082 +:1031F000287F0221142250438019007CC155287F6A +:103200000A2808D009E0297F002014225143891997 +:10321000097CC8552AE0002001E0287F401C28775F +:10322000687F297F8842CCD1D74D287D00284CD09B +:10323000287CC15D012928D0C05D022830D03AE049 +:10324000287F142148438019807A012803D0CFA118 +:10325000D14801F0BEFE297F002014225143891974 +:103260008872297F51438919097CC855287F142108 +:1032700048438219287F48438019017C0098FEF753 +:10328000EBFF287F0A28C8D1C5E7A97A012904D015 +:103290000221C155002028750DE00021C1550AE02A +:1032A000A87A012803D0B9A1BC4801F092FE002001 +:1032B000A872297CC855287D002806D0297CB24AEE +:1032C0000098FEF7C9FF00202875029806281ED036 +:1032D00014214843A8494018017C012917D107212E +:1032E000AF4D0174287B0A283CD0287BE97A401C2A +:1032F000884203D1A5A1AB4801F06BFE297B02985F +:103300006854287B0A2831D0287B401C2873607AB7 +:1033100006287DD0A07A00287BD00020A072617A98 +:10332000142041439448A04B0A18566891681D46E2 +:10333000D2687C35DE67AA6069609C4D697E002991 +:1033400016D00226617A14228B4851430818407B1C +:1033500006281BD203007B441B79DB189F440A1408 +:1033600012100E0CE87A0028C4D0C7E70020CDE781 +:103370000426E7E700200FE0B4200DE073200BE007 +:10338000322009E00A2007E0062005E0FF207FA1A7 +:10339000E23001F01EFE00202873697E022901D070 +:1033A000012910D12969009A09188A1A1202120AF1 +:1033B0003A2A08D90320687632390802000A2861BF +:1033C000322028730AE0322808D2207A00280ED151 +:1033D000FEF782F8EFF72AFC012007E0207A0028A8 +:1033E00005D0FEF798F8EFF74AFC002020726149FB +:1033F0000822487820700978012901D0032906D1D4 +:1034000001212171297B884201D9421A083201E049 +:1034100091E0A1E0A378002B00D0921C2179002933 +:1034200001D1002B5DD09446614A00990092019A27 +:10343000176852687F1A511A3F0209023F0A090AA7 +:10344000BC451BD85A4A974218D8009A914215D8C1 +:10345000297B884223D92B69421A9A1A1202120A2E +:10346000101880190002000A2A616860002914D02F +:10347000032028770006000E3ED14CE0002020718A +:10348000A070297B002925D02869401880190002E6 +:10349000000A6860022028772EE00120E9E78142D7 +:1034A0000BD92A69511889190902090A696000288B +:1034B00001D00420DDE70220DBE7002B03D133A19C +:1034C0003C4801F086FD286980190002000A686006 +:1034D000002004E0296989190902090A696028772E +:1034E00019E0287B00280FD02969081880190002EC +:1034F000000A6860022028772869012381190022C8 +:103500001846F0F73BFB09E0286980190002000A21 +:103510006860002028770120F0F7FAFA607A142119 +:10352000484315490C22401882560123002069683F +:10353000F0F724FB10E00120F0F7EAFA0020F0F7A2 +:10354000E7FAF0F7CBFA207A002805D0FDF7E3FF81 +:10355000EFF795FB00202072A078002804D0F0F748 +:10356000BCFB0020E070A0706078002827D00148E4 +:10357000C17821E012010020B81C0020701C00203E +:1035800015010020B01B0020901C00207372635CAA +:1035900072656D2E630000000D0600002906000014 +:1035A000A81C00203B060000B01C00201C1D0020B1 +:1035B000FFFF3F008D060000417081780170207987 +:1035C000002806D00020CE49E0700978002900D1FB +:1035D0002071CC48017BC07A814203D0CA48407830 +:1035E000EFF7C4FA0120E07103B0F0BDF0B5C74CAD +:1035F0000746607A83B0062804D16F20C4A1000179 +:1036000001F0E7FC607A1421C44E48438019007C25 +:10361000032803D0BEA1C24801F0DBFCC14DA8685D +:10362000401C03D0BAA1C04801F0D3FC607A142139 +:10363000484381190C20085600216A4600911171F7 +:10364000C01901AA6946F0F763FB6A4604201056C8 +:103650000F2801DD012000E0002000994018696872 +:1036600040180102090AA9606079002804D00123EA +:1036700000221846F0F782FA03B0F0BD70B5AC4CEA +:10368000AA4A0B1AA34214D3451AA54211D3934256 +:1036900003D9101A43185B1C0BE0954204D9511A48 +:1036A0000818401C434204E099A1A24801F091FC93 +:1036B0000023184670BD10B50146012300220220E8 +:1036C000F0F75CFA10BD10B50220F0F721FA10BD3A +:1036D00010B5F0F7ACFA10BDF0B58C4D0446E87AA1 +:1036E00083B0002803D18AA1934801F072FC642CB6 +:1036F0004DD3924A00210846121B884147D3904877 +:10370000417F007F814242D18E48007D00283ED11A +:10371000687A1421814F4843824EC519306801AA46 +:1037200000196946F0F7F4FA6946042008560028A3 +:1037300002DD0098401C0090A96800986B680A1888 +:10374000D21A1202804B120A9A4220D8AA7C062A68 +:1037500008D014235A43D2195268511A0902090A8F +:10376000814214D3B068401C05D00120F0F7D0F995 +:103770000020C043B060306800193060A86800992C +:1037800040180002000A7061012003B0F0BD002063 +:1037900003B0F0BDF8B50646401EC4B214205F4920 +:1037A00060434518287C002804D1772058A10001E7 +:1037B00001F00FFC6248017F407F81420CD0634AD8 +:1037C00014234B439B181B7CB3420CD00A290CD00A +:1037D000491CC9B28142F3D15A48017D002961D008 +:1037E000007CB0425ED10020F8BD0021F1E7052940 +:1037F00003D0062901D0072928D101212974C17AD3 +:103800000023027B8A4221D00246565CA64201D1A7 +:10381000012301E0002B04D00A2911D04E1C965D33 +:1038200056540A290ED0491C167BC9B28E42ECD1DF +:10383000002B0BD0117B002906D0117B491E04E020 +:103840000026ECE70021EFE70A211173697C0029CB +:103850002AD06F74C17A0023027B8A4224D0425C52 +:10386000A24201D1012301E0002B04D00A2912D089 +:103870004A1C825C42540A290FD0491C027BC9B2FF +:103880008A42ECD1002B0FD0027B0146002A06D0E1 +:103890000A7B521E04E00022EBE70021EEE70A2239 +:1038A0000A7301E017480027297C01299FD16A7C0F +:1038B000002A9CD10120F8BD70B505461420174A96 +:1038C0000521684380180F4C0174207B0A2811D011 +:1038D000207BE17A401C884203D10DA11C4801F0F5 +:1038E00078FB207B2554207B0A2807D0207B401CB6 +:1038F000207370BDE07A0028EFD0F2E70020F7E7F0 +:1039000012010020A81C0020100100203C1D0020F6 +:103910007372635C72656D2E63000000B81C00203A +:10392000F10600001C1D0020F2060000FF7F841E2F +:103930000020A1071407000033070000FF1FA107A4 +:10394000701C0020901C0020FFFF3F00B01B0020D7 +:103950000902000010B501462022094801F09CF937 +:1039600007490020C877084610BD06490120486174 +:103970000548064A0168914201D100210160704763 +:103980004C1D0020000500401C010020BEBAFECAEC +:10399000064A10705170704704481C22017841712A +:1039A00042700170704770477047704720010020D7 +:1039B00030B50346002002460DE09C5C2546303DB4 +:1039C0000A2D02D30020C04330BD0A256843303899 +:1039D0002018521CD2B28A42EFD330BD70B50D46CA +:1039E000144608E00A2101F0D1F92A193031203AB1 +:1039F000641ED177E4B2002CF4D170BD10B5002361 +:103A000010E0040A00020443A0B2CC5C444020064B +:103A1000000F60400407240C44402006C00C6040A6 +:103A20005B1C9BB29342ECD310BD10B520380C4602 +:103A3000030001F0BFFB33E0DBE41B1F23272C3125 +:103A4000373C41474D5054585C606D7165697478DE +:103A50007C8084888C9094989C9FA2A6AAAEB2B8D1 +:103A6000BCC0C5CACFE9F0F3D3D7F800206800F096 +:103A7000DDF8D6E0206800F0E1F8D2E0206800F040 +:103A8000F5F8CEE0207840B200F092FAC9E0207854 +:103A900040B200F0B0FAC4E02078616840B200F0B3 +:103AA000C3FABEE0207840B200F0D3FAB9E0207843 +:103AB00040B200F0DEFAB4E02078217940B200F0A4 +:103AC000E9FAAEE02078616840B200F013FBA8E0AC +:103AD00000F01FFBA5E0206800F023FBA1E02078A8 +:103AE00000F038FB9DE02068FDF7F5FD99E02068C7 +:103AF000FDF7F5FD95E021792068FDF7F7FD90E0F1 +:103B00002068FDF73FFC8CE02068FDF740FC88E072 +:103B10002078FDF740FC84E0FDF74EFC81E0207842 +:103B2000FDF750FC7DE02078FDF762FC79E020682D +:103B3000FDF77BFC75E02068FDF77DFC71E02068F7 +:103B4000FDF77FFC6DE02068FDF780FC69E02068F0 +:103B5000FDF782FC65E02068FDF784FC61E02068E9 +:103B6000FDF785FC5DE00846EDF7F0FA59E0EFF768 +:103B700070F856E0EFF79DF853E02068EFF7A5F8EE +:103B80004FE0206800F080F84BE0206800F082F8F9 +:103B900047E0206800F083F843E02078A26861687D +:103BA00000F082F83DE0207800F089F839E02078D4 +:103BB00000F091F835E02078616800F098F830E086 +:103BC0002078616800F09FF82BE02179207800F0E0 +:103BD000D5FB26E02068FDF778FE22E02068FEF79E +:103BE0004DF91EE02068FEF731F91AE0204607C8BB +:103BF00000F0B9FC15E0206800F00CFD11E06168F0 +:103C0000206800F037FD0CE0206800F029FF08E094 +:103C100009E003E0FFE700F03BFF02E0206800F06E +:103C200073FF206010BD0120086010BD00210170ED +:103C3000084670470146002008707047EFF3108176 +:103C4000C907C90F72B60278012A01D0012200E02B +:103C5000002201230370002900D162B6002A01D09E +:103C600000207047012040037047E7E7EFF3108121 +:103C7000C907C90F72B600220270002900D162B6CE +:103C800000207047F2E7000038490968C9B20160B6 +:103C9000002070473549C0B2486000207047334962 +:103CA000C0B2886000207047082801D330487047B0 +:103CB000C3002E4818180161426100207047022895 +:103CC00002D32B48401C70472A4A0121C0008018AB +:103CD000016000207047022802D32548401C70472D +:103CE000244A0121C000801841600020704702284A +:103CF00002D31F48401C70471F4A8000C9B2801879 +:103D0000016000207047022802D31948401C704708 +:103D1000194A800080180068C0B20860002070470F +:103D200010B5FF20114AC043906008200021C30055 +:103D30009B1819615961401C1028F8D300200E4AC5 +:103D400005E0022803D383009B18196004E0830078 +:103D50009B181C68E4B21C60401C0428F1D310BD01 +:103D6000FF200249C04388607047000000F5014011 +:103D70000820000000F0014000F8014010B572B6C4 +:103D800000F0DEF800280BD0EDF78AFAFEF783F991 +:103D900000F0BBFA6F490020C86288626E49086073 +:103DA00062B6002010BDF3B5002501200007C06AEF +:103DB00081B0C0430006000E04D168480068401C72 +:103DC00000D1012572B600F0BBF8002801D062B620 +:103DD00087E0EDF7D1F9EDF767FA614C614A002110 +:103DE0002368CB40DB071FD00346CB40DB0718D14D +:103DF0004BB2002B07DA1E07360F083EB608B60096 +:103E0000B618F66904E09E08574FB600F6193668F2 +:103E10009B07DB0EDE4033069B0F012B04D0032BE8 +:103E200002D062B65148FEBD491C2029D8D3019C5E +:103E300001204F49230001F0BDF914222424242439 +:103E4000242424240B0D1012142016181A1C1E2FC3 +:103E5000002400E00124C86314E00224FBE70324EB +:103E6000F9E70424F7E70824F5E70924F3E70A242F +:103E7000F1E70B24EFE70C24EDE70524EBE707243B +:103E800000E00624D06901210002000AC9070843A6 +:103E9000D061002D04D009E062B601200003FEBD10 +:103EA0002C4D3448E862EDF7FFF9A8622A49324800 +:103EB0000860324902980860EDF7F6F9214600F0F3 +:103EC0000BFAFEF7AEF800F00DFC00F087FA01984F +:103ED000EDF7B4F9040062B603D0FFF74FFF2046B8 +:103EE000FEBD0020FEBD10B5044600F029F80028F4 +:103EF00000D001202070002010BD21490860002062 +:103F0000704710B50C46102808D011280BD0122885 +:103F10000CD013280ED00120086010BD6168206805 +:103F2000FFF741FF0AE0FFF729FF07E02068FFF7EE +:103F3000DAFF03E01249206808600020206010BD0D +:103F400005480D490068884201D1012070470020D2 +:103F500070470000000500401C0100200010001008 +:103F600000E100E000ED00E000E400E001100000EE +:103F70004000004000200000BEBAFECA2801002018 +:103F8000040000208107C90E002808DA0007000F8E +:103F900008388008814A80008018C06904E08008E1 +:103FA0007F4A800080180068C8400006800F704774 +:103FB00010B5044600F0DBF8002813D02046FFF7C8 +:103FC000E1FFC0B200F0E1F800280DD07549E2062B +:103FD0000B78D20E01209040002B08D04A68104385 +:103FE000486006E0704810BD6F48401C10BD6F4926 +:103FF0000860002010BD10B5044600F0B8F8002895 +:104000000BD06849E2060B78D20E01209040002BBD +:1040100005D04A6882434A6004E0634810BD6349A2 +:1040200080310860002010BD70B50D46044600F0D8 +:104030009EF800280BD05E480068E206D20E0121EF +:104040009140084000D001202860002070BD5648F3 +:1040500070BD10B5044600F08AF8002807D0E106CC +:10406000C90E0120884052490860002010BD4E480A +:1040700010BD10B5044600F07AF8002808D0E1061B +:10408000C90E012088404A4980310860002010BDD7 +:10409000454810BD70B50D46044600F068F800288C +:1040A00019D0284600F071F8002816D0A007C20EDB +:1040B000FF209040A907090E9140002C10DA22073A +:1040C000120F083A9308354A9B009B18DA6982431D +:1040D0000A43DA610CE0344870BD3348401C70BDBF +:1040E000A3082F4A9B009B181A6882430A431A6050 +:1040F000002070BD70B50C46054600F038F8002869 +:1041000005D02846FFF73EFF2070002070BD2648EE +:1041100070BDBFF34F8F21492648C860BFF34F8F52 +:10412000FEE770B51F4C05462178012000290ED10D +:10413000207072B600F0F8F81C4E8036316881436A +:10414000616000F0F1F8C043306062B60020287072 +:10415000002070BD13490A78002A06D0002804D137 +:10416000124A48681060002008700020704710B59F +:104170000446202805DA00F0D7F80121A1400842C2 +:1041800001D0002010BD012010BD012803D003285C +:1041900001D00020704701207047000000ED00E0D2 +:1041A00000E400E02C0100200120000000E100E01C +:1041B00000E200E00400FA05F8B504468007002597 +:1041C0000126002804DA5A48C563C66302208443E6 +:1041D000E00404D55748C563C66380148443600077 +:1041E00003D55548456080058443E00504D5534810 +:1041F000C563C66380158443A00404D55048C563D5 +:10420000C6634014844360042704C00FF90F88423A +:1042100003D04CA1612000F0DCFEB80F0AD04E495B +:10422000CD634E48C563C563CE63C663C6630320D2 +:104230008003844320050AD5494FFD632F20ECF706 +:10424000B3FFFE632F20ECF7AFFFF8148443002C7C +:1042500003DAFFF765FD640064084248044203D0B6 +:1042600038A1902000F0B5FEF8BDF0B500210A4657 +:10427000FF230446CC40E4072AD04CB2E606F60EF3 +:104280000125B540384E3560384E3560002C11DAC6 +:1042900025072D0F083DAE08354DB6007619F56996 +:1042A000A407E70E1C46BC40A5431446BC4025436A +:1042B000F5610DE0A6082F4DB60076193568A40704 +:1042C000E70E1C46BC40A5431446BC402543356060 +:1042D000491C2029CDD3F0BD70B5274C0D46206078 +:1042E000FFF76AFF2068FFF7C0FF2846EEF77AFD68 +:1042F000FDF7D6FAFDF782F9FFF712FDFDF7D5F8C5 +:10430000EEF7FEFB00F06AF870BD10B51A4C20689D +:10431000FFF752FF2068FFF7A8FFFFF701FDEEF758 +:10432000E6FD0020206010BD1348006870470000C3 +:10433000C01F0040C0CF004000E50140C08F0040DA +:10434000C0DF00407372635C736F635F636F6E66A0 +:1043500069672E6300000000C0EF0040C0FF00400E +:10436000C0BF0040FEFF0FFC80E100E080E200E003 +:1043700000ED00E000E400E03401002070B500240E +:1043800002460D4620462146002A1ED0012A04D0AE +:10439000022A04D0032A1ED103E0012002E00220F9 +:1043A00013E003202B0000F005FF07160507090B9B +:1043B0000D0F1600012108E0022106E0032104E0B0 +:1043C000042102E0052100E00621FDF7D9FE0028C6 +:1043D00001D0204670BD0724FBE70000B148002152 +:1043E00001708170704770B5AF4D01236B60AF4BAA +:1043F0001C68002CFCD0002407E00E6806601E68D4 +:10440000002EFCD0001D091D641C9442F5D3002031 +:10441000686018680028FCD070BD70B5A14C0D46CE +:104420006178884203D0A2A16C2000F0D2FD2B005D +:1044300000F0C0FE094F0625254F4F4F4F464F0055 +:104440002078022803D09AA1702000F0C2FD03203A +:104450002070A078022802D0012804D008E0A068CB +:1044600000F0CEFB04E02269E168A068FFF7BBFF23 +:104470000020A070FDF724FE0420207070BDFDF721 +:10448000D4FE01466068FFF7F9F805462078022857 +:1044900003D087A1842000F09CFD894A89498A487D +:1044A000954206D8401BC86086496078FEF737FB06 +:1044B00070BD854202D802224A71F3E7032003E06F +:1044C000A0780028FAD10220FDF704FD00F0E0F802 +:1044D00070BD77A1AD2000F07CFD70BD70B50546C4 +:1044E000FDF7A3FE6F4C60602078012803D070A117 +:1044F000B42000F06EFD73490220087000220A719A +:104500008D6003224A71704ACA6020706078FEF79D +:1045100006FB70BD10B5634CA078002802D120784E +:10452000002801D0112010BD6848FDF710FE607012 +:104530006078002803D001202070002010BD0320E7 +:1045400010BD10B50124020B64040121604BA04290 +:1045500002D29140186802E0203A58689140084021 +:1045600000D0012010BDF8B50E46910005464F1948 +:1045700014463F1F009100F054FB009980028919F6 +:10458000091FB14201D2012200E00022002C03D019 +:10459000FF2101318C4201D90920F8BD4D498D42DE +:1045A00019D3AF4217D3854205D2874203D228469A +:1045B0003043800701D01020F8BD8E420BD3002A73 +:1045C00009D12846FFF7BDFF002804D13846FFF780 +:1045D000B8FF002801D00F20F8BD3F483F490068D0 +:1045E000884205D0224631462846FFF7FCFE0FE000 +:1045F000FFF790FF0028EFD12A480121C6608560AF +:10460000046181702046312148431430FFF766FF72 +:104610000020F8BD10B504462E48800A84420BD312 +:1046200000F0FFFAA04201D8102010BDA0020446FD +:10463000FFF787FF002801D00F2010BD264827492B +:104640000068884203D0204600F0DAFA0AE0FFF75B +:1046500061FF0028F1D11348022184608170204855 +:10466000FFF73CFF002010BD1A48010B01208840D5 +:10467000401E704700B50B460246FFF7F5FF10429B +:1046800001D00F2000BD124802604360002000BD31 +:1046900010B5044C6078FDF7AEFD00202070A070CE +:1046A00010BD00003801002000E5014000E4014099 +:1046B0007372635C736F635F666C6173682E630013 +:1046C000307500006C1D0020D0FB01001B44010070 +:1046D00000060040006001001C010020BEBAFECAB6 +:1046E00010540000F74805218170002101704170CD +:1046F000C1708160704710B5F3490A78022A07D06B +:10470000CA681018C860C8689638FEF76FFF10BDF9 +:104710008A68101888608868F6E70378EB49EC4AE5 +:10472000002B02D0012B10D014E00379002B01D014 +:10473000012B0FD14379002B01D0012B0AD18368C3 +:10474000643B8B4206D2C06810E00379002B03D093 +:10475000012B01D0002070474379002B01D0012BA1 +:10476000F8D1C368643B8B42F4D280689042F1D8A0 +:1047700001207047F8B504460226FEF7BDFB00682D +:10478000002803D0D3A1BE2000F023FC0127CD4D8B +:10479000002C08D02078002817D0012805D0022846 +:1047A00011D0032813D02F710DE06068C82808D3FA +:1047B000FEF792FF002804D06068FFF79CFF0126F7 +:1047C00003E0002601E000F0F9F93046F8BD287852 +:1047D0000028F8D16068FFF7A0FF0028E3D06068E8 +:1047E0000078002826D0A878042803D0B9A1F820A2 +:1047F00000F0EFFBB44F00203870606800790128AA +:1048000000D00020387160684079002837D003203C +:10481000787160688168E868FDF79EFFB86060683D +:10482000C0689630F8600320A870A749E878FEF7C2 +:1048300076F9C8E7A4480221017061680979012965 +:1048400019D00021017161684979002915D003212F +:10485000417161688968963181606168C968C16029 +:10486000C068984C14346060FDF7DFFC20606F7006 +:104870000220A870A7E70321E4E70221E8E702206D +:10488000C6E7F8B58F4C0D46E178884204D0FF208A +:1048900090A11A3000F09DFB28468A4F0025012682 +:1048A0001437030000F086FC090612375A7C8D97F6 +:1048B000C4A0C400A078032807D0A078022804D0A0 +:1048C000FF2084A11E3000F084FBF8BDA0780328EF +:1048D00007D0A078022804D0FF207EA1223000F06B +:1048E00078FB0420A07025712078002810D1FFF7F4 +:1048F00002FFE078FDF74FFFE0607D49886A7D4A5E +:10490000024022617B4AD24310408862002050E07E +:1049100000F054F9F8BDA078032807D0A078022849 +:1049200004D0FF206BA1453000F053FB2078002815 +:1049300002D000F04FF9F8BDA07803281FD1042061 +:104940002AE0091A6048C1600146E078FEF7E7F8FE +:10495000F8BD0420FDF7BEFAA570F8BDA0780328C5 +:1049600007D0A078022804D0FF205AA1663000F0BA +:1049700030FB20780028DCD1A07803280BD0FDF78D +:1049800054FC01463868FEF779FE0028E1DB7968BF +:104990008142DEDBD5E70520FDF79CFAA670F8BD65 +:1049A000A078042804D0FF204AA1873000F011FB32 +:1049B0000220A1688847FFF7DDFEFF260546C036C6 +:1049C00042E0A078042804D0FF2042A18C3000F0FF +:1049D00000FB0120EDE7A078042899D0FF203DA13D +:1049E000913000F0F6FA93E7A07804280AD06078B6 +:1049F000002802D0A078022804D0FF2035A19630EC +:104A000000F0E7FA2078002893D12079002804D01C +:104A10000620FDF75FFA2571C0E76078002805D011 +:104A20002949E078FEF77BF86570F8BD0720B3E709 +:104A3000FF2028A1B13046E7002D0AD0012D06D075 +:104A400024A1304600F0C5FA022DF5D1F8BD0420AE +:104A500000E00320A1688847FFF78CFE0546F3E7D6 +:104A600070B5050005D0174CA078052803D011209B +:104A700070BD102070BD2048FDF769FBE070E07844 +:104A8000002803D0A5600020A07070BD032070BD79 +:104A900010B50C480178002901D0112010BD817893 +:104AA00005292BD0817801292AD08178002927D0A7 +:104AB000012101708178012922D0807800281FD03F +:104AC00020E000004C0100207C1D00203D860100FC +:104AD000FF1FA1077372635C736F635F7261646928 +:104AE0006F5F74696D65736C6F742E6300000000F6 +:104AF0000005004002810080834801000F2010BDA6 +:104B000000F068F8002010BDF8B5394E0446B078C2 +:104B1000002801D001280DD1002C0DD02046FFF730 +:104B2000FCFD00280AD02078324D002808D0B0784B +:104B3000012823D00F20F8BD1020F8BD0720F8BDB4 +:104B400002272F702079012814D000202871607965 +:104B5000002811D003206871A0689630A860E06832 +:104B6000E860E868224C14346060FDF75EFB20606A +:104B7000B77019E00320E9E70220ECE70020287075 +:104B80002079012816D0002028716079002813D0E0 +:104B900003206871A168F068FDF7DEFDA860E06899 +:104BA0009630E8600320B0701249F078FDF7B7FF47 +:104BB0000020F8BD0320E7E70220EAE710B50E4821 +:104BC000816A0E4A11400A4A126911438162FDF757 +:104BD00077FA10BD10B5064CE078FDF70CFB082005 +:104BE000FDF778F90520A07000202070607010BDDE +:104BF0004C0100207C1D002000050040FD7EFF7F51 +:104C00000A4A022151600A490B68002BFCD09060CF +:104C100008680028FCD00020506008680028FCD0FC +:104C200070470120000740697047000000E501401F +:104C300000E4014070477047704770477047034673 +:104C400010B50B439B070FD1042A0DD308C810C918 +:104C5000121FA342F8D018BA21BA884201D9012004 +:104C600010BD0020C04310BD002A03D0D30703D0DD +:104C7000521C07E0002010BD03780C78401C491C32 +:104C80001B1B07D103780C78401C491C1B1B01D14E +:104C9000921EF1D1184610BDF8B5042A2CD3830713 +:104CA00012D00B78491C0370401C521E83070BD096 +:104CB0000B78491C0370401C521E830704D00B78EC +:104CC000491C0370401C521E8B079B0F05D0C91A4C +:104CD000DF002023DE1B08C90AE0ECF775FAF8BDF7 +:104CE0001D4608C9FD401C46B4402C4310C0121F8D +:104CF000042AF5D2F308C91A521EF0D40B78491CC5 +:104D00000370401C521EEAD40B78491C0370401CEF +:104D1000521EE4D409780170F8BD01E004C0091FF7 +:104D20000429FBD28B0701D50280801CC90700D063 +:104D30000270704700290BD0C30702D00270401CDC +:104D4000491E022904D3830702D50280801C891ED4 +:104D5000E3E70022EEE70022DFE70378C278194696 +:104D6000437812061B0219438378C0781B04194349 +:104D700011430902090A000608437047020A087035 +:104D80004A70020C8A70020ECA7070470022030932 +:104D90008B4273D3030A8B4258D3030B8B423CD311 +:104DA000030C8B4221D312E003460B437FD4002235 +:104DB00043088B4274D303098B425FD3030A8B42AF +:104DC00044D3030B8B4228D3030C8B420DD3FF2219 +:104DD000090212BA030C8B4202D31212090265D0E7 +:104DE000030B8B4219D300E0090AC30B8B4201D39A +:104DF000CB03C01A5241830B8B4201D38B03C01AE1 +:104E00005241430B8B4201D34B03C01A5241030B57 +:104E10008B4201D30B03C01A5241C30A8B4201D308 +:104E2000CB02C01A5241830A8B4201D38B02C01AB3 +:104E30005241430A8B4201D34B02C01A5241030A2A +:104E40008B4201D30B02C01A5241CDD2C3098B420F +:104E500001D3CB01C01A524183098B4201D38B018C +:104E6000C01A524143098B4201D34B01C01A52412F +:104E700003098B4201D30B01C01A5241C3088B4274 +:104E800001D3CB00C01A524183088B4201D38B005F +:104E9000C01A524143088B4201D34B00C01A524101 +:104EA000411A00D201465241104670475DE0CA0FD8 +:104EB00000D04942031000D34042534000229C4698 +:104EC00003098B422DD3030A8B4212D3FC228901A2 +:104ED00012BA030A8B420CD3890192118B4208D378 +:104EE000890192118B4204D389013AD0921100E0DA +:104EF0008909C3098B4201D3CB01C01A52418309EE +:104F00008B4201D38B01C01A524143098B4201D31A +:104F10004B01C01A524103098B4201D30B01C01A45 +:104F20005241C3088B4201D3CB00C01A52418308BF +:104F30008B4201D38B00C01A5241D9D243088B4215 +:104F400001D34B00C01A5241411A00D201466346B8 +:104F500052415B10104601D34042002B00D549421C +:104F6000704763465B1000D3404201B50020C04645 +:104F7000C04602BD704770477047704710B500F0DB +:104F800059F810BD30B58C180278401C13071B0F60 +:104F900001D10378401C120906D10278401C03E0BD +:104FA0000578401C0D70491C5B1EF9D101E00B70A7 +:104FB000491C521EFBD1A142E6D3002030BD0000A7 +:104FC00001231B68134B1860134B1960134B1A60B5 +:104FD0007047134A134B13607246053AF0E7114AC3 +:104FE0000F4B1B689A420ED10D4B002018600198A0 +:104FF0000D4B04B598470CBC9E460246029800999A +:105000000A4B1B68184706980599094B1B68DB6813 +:105010001847000070010020740100207801002072 +:1050200068010020EFBEADDE5539010028010020E7 +:10503000040000201D481E497047FFF7FBFFECF7F6 +:105040007DF800BD01200007C06AC0B2FF2804D16E +:10505000184819490968884202D01848184901605F +:10506000184819490968884203D1184A13605B68D7 +:10507000184700BD20BFFDE7124813490968884260 +:105080000ED1134B18680B498842F3D080F308887F +:105090001049884204DD1048026802210A43026078 +:1050A0000E4880470E4880470E480047901D00205C +:1050B000901D0020FFFFFFFF001000102C05004096 +:1050C0000800000000100000000000200400002084 +:1050D0000060010000200020240500406B39010021 +:1050E00045500100C14F01001348704502D1EFF354 +:1050F000098101E0EFF308818869023800781028FF +:1051000014DB202810DB23280BDB0C4A12680C4B25 +:105110009A4203D1602804DB0A4A10470220086043 +:105120007047094A10470000084A1047084A1268A9 +:105130002C32126810470000FDFFFFFF1C01002009 +:10514000BEBAFECAAD1200002B3A0100033F0100B7 +:10515000040000200D4B0E4908470E4B0C49084730 +:105160000D4B0B4908470D4B094908470C4B0849A3 +:1051700008470C4B064908470B4B054908470B4BA2 +:10518000034908470A4B024908470000052E000062 +:10519000E13D0000BD2F0000873C0000353C0000D1 +:1051A000E9390000B912000063170000493D000012 +:1051B000AB2B000030B47446641E2578641CAB42EF +:1051C00000D21D46635D5B00E31830BC1847000049 +:1051D00002490020C861203908727047E0030020AE +:1051E00000020207FFFFFFFF0000FFFF01020408AB +:1051F00010204080555555D6BE898E00F401FA0026 +:10520000960064004B0032001E00140001000300F1 +:10521000000001000000000000000000000000008D +:1052200000000000870000000000000000000000F7 +:105230000000000000000203040500000E0F000043 +:10524000705201000800002010000000041100004E +:10525000805201001800002064010000844F01000A +:10526000A45201007C010020141C00002011000049 +:105270000249022208681042FCD0704700E200E0B8 +:10528000E1078F56FF9900CD29022B01360100015D +:1052900000EC3720FB349B5F8074800010027001AB +:0452A000E4C54F0111 +:00000001FF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_HRM1017/TARGET_NORDIC/TARGET_MCU_NRF51822/PeripheralNames.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,58 @@ +/* mbed Microcontroller Library + * Copyright (c) 2013 Nordic Semiconductor + * + * 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 MBED_PERIPHERALNAMES_H +#define MBED_PERIPHERALNAMES_H + +#include "cmsis.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define STDIO_UART_TX TX_PIN_NUMBER +#define STDIO_UART_RX RX_PIN_NUMBER +#define STDIO_UART UART_0 + +typedef enum { + UART_0 = (int)NRF_UART0_BASE +} UARTName; + + +typedef enum { + SPI_0 = (int)NRF_SPI0_BASE, + SPI_1 = (int)NRF_SPI1_BASE, + SPIS = (int)NRF_SPIS1_BASE +} SPIName; + +typedef enum { + PWM_1 = 0, + PWM_2 +} PWMName; + +typedef enum { + I2C_0 = (int)NRF_TWI0_BASE, + I2C_1 = (int)NRF_TWI1_BASE +} I2CName; + +typedef enum { + ADC0_0 = (int)NRF_ADC_BASE +} ADCName; + +#ifdef __cplusplus +} +#endif + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_HRM1017/TARGET_NORDIC/TARGET_MCU_NRF51822/PortNames.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,30 @@ +/* mbed Microcontroller Library + * Copyright (c) 2013 Nordic Semiconductor + * + * 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 MBED_PORTNAMES_H +#define MBED_PORTNAMES_H + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + Port0 = 0 //GPIO pins 0-31 +} PortName; + +#ifdef __cplusplus +} +#endif +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_HRM1017/TARGET_NORDIC/TARGET_MCU_NRF51822/TARGET_HRM1017/PinNames.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,153 @@ +/* mbed Microcontroller Library + * Copyright (c) 2013 Nordic Semiconductor + * + * 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 MBED_PINNAMES_H +#define MBED_PINNAMES_H + +#include "cmsis.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + PIN_INPUT, + PIN_OUTPUT +} PinDirection; + +#define PORT_SHIFT 3 + +typedef enum { + p0 = 0, + p1 = 1, + p2 = 2, + p3 = 3, + p4 = 4, + p5 = 5, + p6 = 6, + p7 = 7, + p8 = 8, + p9 = 9, + p10 = 10, + p11 = 11, + p12 = 12, + p13 = 13, + p14 = 14, + p15 = 15, + p16 = 16, + p17 = 17, + p18 = 18, + p19 = 19, + p20 = 20, + p21 = 21, + p22 = 22, + p23 = 23, + p24 = 24, + p25 = 25, + p26 = 26, + p27 = 27, + p28 = 28, + p29 = 29, + p30 = 30, +// p31=31, + + P0_0 = p0, + P0_1 = p1, + P0_2 = p2, + P0_3 = p3, + P0_4 = p4, + P0_5 = p5, + P0_6 = p6, + P0_7 = p7, + + P0_8 = p8, + P0_9 = p9, + P0_10 = p10, + P0_11 = p11, + P0_12 = p12, + P0_13 = p13, + P0_14 = p14, + P0_15 = p15, + + P0_16 = p16, + P0_17 = p17, + P0_18 = p18, + P0_19 = p19, + P0_20 = p20, + P0_21 = p21, + P0_22 = p22, + P0_23 = p23, + + P0_24 = p24, + P0_25 = p25, + P0_26 = p26, + P0_27 = p27, + P0_28 = p28, + P0_29 = p29, + P0_30 = p30, + + LED1 = p18, + LED2 = p19, + LED3 = p18, + LED4 = p19, + + BUTTON1 = p16, + BUTTON2 = p17, + + RX_PIN_NUMBER = p11, + TX_PIN_NUMBER = p9, + CTS_PIN_NUMBER = p10, + RTS_PIN_NUMBER = p8, + + // mBed interface Pins + USBTX = TX_PIN_NUMBER, + USBRX = RX_PIN_NUMBER, + + SPI_PSELMOSI0 = p20, + SPI_PSELMISO0 = p22, + SPI_PSELSS0 = p24, + SPI_PSELSCK0 = p25, + + SPI_PSELMOSI1 = p12, + SPI_PSELMISO1 = p13, + SPI_PSELSS1 = p14, + SPI_PSELSCK1 = p15, + + SPIS_PSELMOSI = p12, + SPIS_PSELMISO = p13, + SPIS_PSELSS = p14, + SPIS_PSELSCK = p15, + + I2C_SDA0 = p22, + I2C_SCL0 = p20, + + I2C_SDA1 = p13, + I2C_SCL1 = p15, + // Not connected + NC = (int)0xFFFFFFFF +} PinName; + +typedef enum { + PullNone = 0, + PullDown = 1, + PullUp = 3, + PullDefault = PullUp +} PinMode; + +#ifdef __cplusplus +} +#endif + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_HRM1017/TARGET_NORDIC/TARGET_MCU_NRF51822/TARGET_HRM1017/device.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,57 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * 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 MBED_DEVICE_H +#define MBED_DEVICE_H + +#define DEVICE_PORTIN 1 +#define DEVICE_PORTOUT 1 +#define DEVICE_PORTINOUT 1 + +#define DEVICE_INTERRUPTIN 1 + +#define DEVICE_ANALOGIN 1 +#define DEVICE_ANALOGOUT 0 + +#define DEVICE_SERIAL 1 + +#define DEVICE_I2C 1 +#define DEVICE_I2CSLAVE 0 + +#define DEVICE_SPI 1 +#define DEVICE_SPISLAVE 1 + +#define DEVICE_CAN 0 + +#define DEVICE_RTC 0 + +#define DEVICE_ETHERNET 0 + +#define DEVICE_PWMOUT 1 + +#define DEVICE_SEMIHOST 0 +#define DEVICE_LOCALFILESYSTEM 0 + +#define DEVICE_SLEEP 1 + +#define DEVICE_DEBUG_AWARENESS 0 + +#define DEVICE_STDIO_MESSAGES 0 + +#define DEVICE_ERROR_PATTERN 1 + +#include "objects.h" + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_HRM1017/TARGET_NORDIC/TARGET_MCU_NRF51822/gpio_object.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,52 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * 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 MBED_GPIO_OBJECT_H +#define MBED_GPIO_OBJECT_H + +#include "mbed_assert.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + PinName pin; + uint32_t mask; + + __IO uint32_t *reg_dir; + __IO uint32_t *reg_set; + __IO uint32_t *reg_clr; + __I uint32_t *reg_in; +} gpio_t; + +static inline void gpio_write(gpio_t *obj, int value) { + MBED_ASSERT(obj->pin != (PinName)NC); + if (value) + *obj->reg_set = obj->mask; + else + *obj->reg_clr = obj->mask; +} + +static inline int gpio_read(gpio_t *obj) { + MBED_ASSERT(obj->pin != (PinName)NC); + return ((*obj->reg_in & obj->mask) ? 1 : 0); +} + +#ifdef __cplusplus +} +#endif + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_HRM1017/TARGET_NORDIC/TARGET_MCU_NRF51822/objects.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,73 @@ +/* mbed Microcontroller Library + * Copyright (c) 2013 Nordic Semiconductor + * + * 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 MBED_OBJECTS_H +#define MBED_OBJECTS_H + +#include "cmsis.h" +#include "PortNames.h" +#include "PeripheralNames.h" +#include "PinNames.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct serial_s { + NRF_UART_Type *uart; + int index; +}; + +struct spi_s { + NRF_SPI_Type *spi; + NRF_SPIS_Type *spis; +}; + +struct port_s { + __IO uint32_t *reg_cnf; + __IO uint32_t *reg_out; + __I uint32_t *reg_in; + PortName port; + uint32_t mask; +}; + +struct pwmout_s { + PWMName pwm; + PinName pin; +}; + +struct i2c_s { + NRF_TWI_Type *i2c; + PinName sda; + PinName scl; + int freq; +}; + +struct analogin_s { + ADCName adc; + uint8_t adc_pin; +}; + +struct gpio_irq_s { + uint32_t ch; +}; + +#include "gpio_object.h" + +#ifdef __cplusplus +} +#endif + +#endif
--- a/TARGET_HRM1017/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,385 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_COMMON BLE SoftDevice Common - @{ - @defgroup ble_api Events, type definitions and API calls - @{ - - @brief Module independent events, type definitions and API calls for the S110 SoftDevice. - - */ - -#ifndef BLE_H__ -#define BLE_H__ - -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_gap.h" -#include "ble_l2cap.h" -#include "ble_gatt.h" -#include "ble_gattc.h" -#include "ble_gatts.h" - -/** @addtogroup BLE_COMMON_ENUMERATIONS Enumerations - * @{ */ - -/** - * @brief Common API SVC numbers. - */ -enum BLE_COMMON_SVCS -{ - SD_BLE_ENABLE = BLE_SVC_BASE, /**< Enable and initialize the BLE stack */ - SD_BLE_EVT_GET, /**< Get an event from the pending events queue. */ - SD_BLE_TX_BUFFER_COUNT_GET, /**< Get the total number of available application transmission buffers from the stack. */ - SD_BLE_UUID_VS_ADD, /**< Add a Vendor Specific UUID. */ - SD_BLE_UUID_DECODE, /**< Decode UUID bytes. */ - SD_BLE_UUID_ENCODE, /**< Encode UUID bytes. */ - SD_BLE_VERSION_GET, /**< Get the local version information (company id, Link Layer Version, Link Layer Subversion). */ - SD_BLE_USER_MEM_REPLY, /**< User Memory Reply. */ - SD_BLE_OPT_SET, /**< Set a BLE option. */ - SD_BLE_OPT_GET, /**< Get a BLE option. */ -}; - -/** @} */ - -/** @addtogroup BLE_COMMON_DEFINES Defines - * @{ */ - -/** @brief Required pointer alignment for BLE Events. -*/ -#define BLE_EVTS_PTR_ALIGNMENT 4 - -/** @defgroup BLE_USER_MEM_TYPES User Memory Types - * @{ */ -#define BLE_USER_MEM_TYPE_INVALID 0x00 /**< Invalid User Memory Types. */ -#define BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES 0x01 /**< User Memory for GATTS queued writes. */ -/** @} */ - -/** @brief Maximum number of Vendor Specific UUIDs. -*/ -#define BLE_UUID_VS_MAX_COUNT 10 - -/** @} */ - -/** @addtogroup BLE_COMMON_STRUCTURES Structures - * @{ */ - -/** - * @brief BLE Module Independent Event IDs. - */ -enum BLE_COMMON_EVTS -{ - BLE_EVT_TX_COMPLETE = BLE_EVT_BASE, /**< Transmission Complete. */ - BLE_EVT_USER_MEM_REQUEST, /**< User Memory request. */ - BLE_EVT_USER_MEM_RELEASE /**< User Memory release. */ -}; - -/**@brief User Memory Block. */ -typedef struct -{ - uint8_t* p_mem; /**< Pointer to the start of the user memory block. */ - uint16_t len; /**< Length in bytes of the user memory block. */ -} ble_user_mem_block_t; - -/** - * @brief TX complete event. - */ -typedef struct -{ - uint8_t count; /**< Number of packets transmitted. */ -} ble_evt_tx_complete_t; - -/**@brief Event structure for BLE_EVT_USER_MEM_REQUEST. */ -typedef struct -{ - uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ -} ble_evt_user_mem_request_t; - -/**@brief Event structure for BLE_EVT_USER_MEM_RELEASE. */ -typedef struct -{ - uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ - ble_user_mem_block_t mem_block; /**< User memory block */ -} ble_evt_user_mem_release_t; - - -/**@brief Event structure for events not associated with a specific function module. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which this event occured. */ - union - { - ble_evt_tx_complete_t tx_complete; /**< Transmission Complete. */ - ble_evt_user_mem_request_t user_mem_request; /**< User Memory Request Event Parameters. */ - ble_evt_user_mem_release_t user_mem_release; /**< User Memory Release Event Parameters. */ - } params; -} ble_common_evt_t; - -/**@brief BLE Event header. */ -typedef struct -{ - uint16_t evt_id; /**< Value from a BLE_<module>_EVT series. */ - uint16_t evt_len; /**< Length in octets excluding this header. */ -} ble_evt_hdr_t; - -/**@brief Common BLE Event type, wrapping the module specific event reports. */ -typedef struct -{ - ble_evt_hdr_t header; /**< Event header. */ - union - { - ble_common_evt_t common_evt; /**< Common Event, evt_id in BLE_EVT_* series. */ - ble_gap_evt_t gap_evt; /**< GAP originated event, evt_id in BLE_GAP_EVT_* series. */ - ble_l2cap_evt_t l2cap_evt; /**< L2CAP originated event, evt_id in BLE_L2CAP_EVT* series. */ - ble_gattc_evt_t gattc_evt; /**< GATT client originated event, evt_id in BLE_GATTC_EVT* series. */ - ble_gatts_evt_t gatts_evt; /**< GATT server originated event, evt_id in BLE_GATTS_EVT* series. */ - } evt; -} ble_evt_t; - - -/** - * @brief Version Information. - */ -typedef struct -{ - uint8_t version_number; /**< Link Layer Version number for BT 4.1 spec is 7 (https://www.bluetooth.org/en-us/specification/assigned-numbers/link-layer). */ - uint16_t company_id; /**< Company ID, Nordic Semiconductor's company ID is 89 (0x0059) (https://www.bluetooth.org/apps/content/Default.aspx?doc_id=49708). */ - uint16_t subversion_number; /**< Link Layer Sub Version number, corresponds to the SoftDevice Config ID or Firmware ID (FWID). */ -} ble_version_t; - -/**@brief Common BLE Option type, wrapping the module specific options. */ -typedef union -{ - ble_gap_opt_t gap; /**< GAP option, opt_id in BLE_GAP_OPT_* series. */ -} ble_opt_t; - -/** - * @brief BLE GATTS init options - */ -typedef struct -{ - ble_gatts_enable_params_t gatts_enable_params; /**< GATTS init options @ref ble_gatts_enable_params_t. */ -} ble_enable_params_t; - -/** @} */ - -/** @addtogroup BLE_COMMON_FUNCTIONS Functions - * @{ */ - -/**@brief Enable the bluetooth stack - * - * @param[in] p_ble_enable_params Pointer to ble_enable_params_t - * - * @details This call initializes the bluetooth stack, no other BLE related call can be called before this one has been executed. - * - * @return @ref NRF_SUCCESS BLE stack has been initialized successfully - * @return @ref NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. - */ -SVCALL(SD_BLE_ENABLE, uint32_t, sd_ble_enable(ble_enable_params_t * p_ble_enable_params)); - -/**@brief Get an event from the pending events queue. - * - * @param[in] p_dest Pointer to buffer to be filled in with an event, or NULL to retrieve the event length. This buffer <b>must be 4-byte aligned in memory</b>. - * @param[in, out] p_len Pointer the length of the buffer, on return it is filled with the event length. - * - * @details This call allows the application to pull a BLE event from the BLE stack. The application is signalled that an event is - * available from the BLE Stack by the triggering of the SD_EVT_IRQn interrupt (mapped to IRQ 22). - * The application is free to choose whether to call this function from thread mode (main context) or directly from the Interrupt Service Routine - * that maps to SD_EVT_IRQn. In any case however, and because the BLE stack runs at a higher priority than the application, this function should be called - * in a loop (until @ref NRF_ERROR_NOT_FOUND is returned) every time SD_EVT_IRQn is raised to ensure that all available events are pulled from the stack. - * Failure to do so could potentially leave events in the internal queue without the application being aware of this fact. - * Sizing the p_dest buffer is equally important, since the application needs to provide all the memory necessary for the event to be copied into - * application memory. If the buffer provided is not large enough to fit the entire contents of the event, @ref NRF_ERROR_DATA_SIZE will be returned - * and the application can then call again with a larger buffer size. - * Please note that because of the variable length nature of some events, sizeof(ble_evt_t) will not always be large enough to fit certain events, - * and so it is the application's responsability to provide an amount of memory large enough so that the relevant event is copied in full. - * The application may "peek" the event length by providing p_dest as a NULL pointer and inspecting the value of *p_len upon return. - * - * @note The pointer supplied must be aligned to the extend defined by @ref BLE_EVTS_PTR_ALIGNMENT - * - * @return @ref NRF_SUCCESS Event pulled and stored into the supplied buffer. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. - * @return @ref NRF_ERROR_NOT_FOUND No events ready to be pulled. - * @return @ref NRF_ERROR_DATA_SIZE Event ready but could not fit into the supplied buffer. - */ -SVCALL(SD_BLE_EVT_GET, uint32_t, sd_ble_evt_get(uint8_t* p_dest, uint16_t *p_len)); - - -/**@brief Get the total number of available application transmission buffers in the BLE stack. - * - * @details This call allows the application to obtain the total number of - * transmission buffers available for application data. Please note that - * this does not give the number of free buffers, but rather the total amount of them. - * The application has two options to handle its own application transmission buffers: - * - Use a simple arithmetic calculation: at boot time the application should use this function - * to find out the total amount of buffers available to it and store it in a variable. - * Every time a packet that consumes an application buffer is sent using any of the - * exposed functions in this BLE API, the application should decrement that variable. - * Conversely, whenever a @ref BLE_EVT_TX_COMPLETE event is received by the application - * it should retrieve the count field in such event and add that number to the same - * variable storing the number of available packets. - * This mechanism allows the application to be aware at any time of the number of - * application packets available in the BLE stack's internal buffers, and therefore - * it can know with certainty whether it is possible to send more data or it has to - * wait for a @ref BLE_EVT_TX_COMPLETE event before it proceeds. - * - Choose to simply not keep track of available buffers at all, and instead handle the - * @ref BLE_ERROR_NO_TX_BUFFERS error by queueing the packet to be transmitted and - * try again as soon as a @ref BLE_EVT_TX_COMPLETE event arrives. - * - * The API functions that <b>may</b> consume an application buffer depending on - * the parameters supplied to them can be found below: - * - * - @ref sd_ble_gattc_write (write witout response only) - * - @ref sd_ble_gatts_hvx (notifications only) - * - @ref sd_ble_l2cap_tx (all packets) - * - * @param[out] p_count Pointer to a uint8_t which will contain the number of application transmission buffers upon - * successful return. - * - * @return @ref NRF_SUCCESS Number of application transmission buffers retrieved successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_TX_BUFFER_COUNT_GET, uint32_t, sd_ble_tx_buffer_count_get(uint8_t* p_count)); - - -/**@brief Add a Vendor Specific UUID. - * - * @details This call enables the application to add a vendor specific UUID to the BLE stack's table, - * for later use all other modules and APIs. This then allows the application to use the shorter, - * 24-bit @ref ble_uuid_t format when dealing with both 16-bit and 128-bit UUIDs without having to - * check for lengths and having split code paths. The way that this is accomplished is by extending the - * grouping mechanism that the Bluetooth SIG standard base UUID uses for all other 128-bit UUIDs. The - * type field in the @ref ble_uuid_t structure is an index (relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN) - * to the table populated by multiple calls to this function, and the uuid field in the same structure - * contains the 2 bytes at indices 12 and 13. The number of possible 128-bit UUIDs available to the - * application is therefore the number of Vendor Specific UUIDs added with the help of this function times 65536, - * although restricted to modifying bytes 12 and 13 for each of the entries in the supplied array. - * - * @note Bytes 12 and 13 of the provided UUID will not be used internally, since those are always replaced by - * the 16-bit uuid field in @ref ble_uuid_t. - * - * - * @param[in] p_vs_uuid Pointer to a 16-octet (128-bit) little endian Vendor Specific UUID disregarding - * bytes 12 and 13. - * @param[out] p_uuid_type Pointer where the type field in @ref ble_uuid_t corresponding to this UUID will be stored. - * - * @return @ref NRF_SUCCESS Successfully added the Vendor Specific UUID. - * @return @ref NRF_ERROR_INVALID_ADDR If p_vs_uuid or p_uuid_type is NULL or invalid. - * @return @ref NRF_ERROR_NO_MEM If there are no more free slots for VS UUIDs. - * @return @ref NRF_ERROR_FORBIDDEN If p_vs_uuid has already been added to the VS UUID table. - */ -SVCALL(SD_BLE_UUID_VS_ADD, uint32_t, sd_ble_uuid_vs_add(ble_uuid128_t const * const p_vs_uuid, uint8_t * const p_uuid_type)); - - -/** @brief Decode little endian raw UUID bytes (16-bit or 128-bit) into a 24 bit @ref ble_uuid_t structure. - * - * @details The raw UUID bytes excluding bytes 12 and 13 (i.e. bytes 0-11 and 14-15) of p_uuid_le are compared - * to the corresponding ones in each entry of the table of vendor specific UUIDs pouplated with @ref sd_ble_uuid_vs_add - * to look for a match. If there is such a match, bytes 12 and 13 are returned as p_uuid->uuid and the index - * relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN as p_uuid->type. - * - * @note If the UUID length supplied is 2, then the type set by this call will always be @ref BLE_UUID_TYPE_BLE. - * - * @param[in] uuid_le_len Length in bytes of the buffer pointed to by p_uuid_le (must be 2 or 16 bytes). - * @param[in] p_uuid_le Pointer pointing to little endian raw UUID bytes. - * @param[in,out] p_uuid Pointer to a @ref ble_uuid_t structure to be filled in. - * - * @return @ref NRF_SUCCESS Successfully decoded into the @ref ble_uuid_t structure. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_LENGTH Invalid UUID length. - * @return @ref NRF_ERROR_NOT_FOUND For a 128-bit UUID, no match in the populated table of UUIDs. - */ -SVCALL(SD_BLE_UUID_DECODE, uint32_t, sd_ble_uuid_decode(uint8_t uuid_le_len, uint8_t const * const p_uuid_le, ble_uuid_t * const p_uuid)); - - -/** @brief Encode a @ref ble_uuid_t structure into little endian raw UUID bytes (16-bit or 128-bit). - * - * @note The pointer to the destination buffer p_uuid_le may be NULL, in which case only the validitiy and size of p_uuid is computed. - * - * @param[in] p_uuid Pointer to a @ref ble_uuid_t structure that will be encoded into bytes. - * @param[out] p_uuid_le_len Pointer to a uint8_t that will be filled with the encoded length (2 or 16 bytes). - * @param[out] p_uuid_le Pointer to a buffer where the little endian raw UUID bytes (2 or 16) will be stored. - * - * @return @ref NRF_SUCCESS Successfully encoded into the buffer. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid UUID type. - */ -SVCALL(SD_BLE_UUID_ENCODE, uint32_t, sd_ble_uuid_encode(ble_uuid_t const * const p_uuid, uint8_t * const p_uuid_le_len, uint8_t * const p_uuid_le)); - - -/**@brief Get Version Information. - * - * @details This call allows the application to get the BLE stack version information. - * - * @param[in] p_version Pointer to ble_version_t structure to be filled in. - * - * @return @ref NRF_SUCCESS Version information stored successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY The stack is busy (typically doing a locally-initiated disconnection procedure). - */ -SVCALL(SD_BLE_VERSION_GET, uint32_t, sd_ble_version_get(ble_version_t * p_version)); - - -/**@brief Provide a user memory block. - * - * @note This call can only be used as a response to a @ref BLE_EVT_USER_MEM_REQUEST event issued to the application. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_block Pointer to a user memory block structure. - * - * @return @ref NRF_SUCCESS Successfully queued a response to the peer. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_STATE No execute write request pending. - */ -SVCALL(SD_BLE_USER_MEM_REPLY, uint32_t, sd_ble_user_mem_reply(uint16_t conn_handle, ble_user_mem_block_t *p_block)); - - -/**@brief Set a BLE option. - * - * @details This call allows the application to set the value of an option. - * - * @param[in] opt_id Option ID. - * @param[in] p_opt Pointer to a ble_opt_t structure containing the option value. - * - * @retval ::NRF_SUCCESS Option set successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. - * @retval ::NRF_ERROR_INVALID_STATE Unable to set the parameter at this time. - * @retval ::NRF_ERROR_BUSY The stack is busy or the previous procedure has not completed. - */ -SVCALL(SD_BLE_OPT_SET, uint32_t, sd_ble_opt_set(uint32_t opt_id, ble_opt_t const *p_opt)); - - -/**@brief Get a BLE option. - * - * @details This call allows the application to retrieve the value of an option. - * - * @param[in] opt_id Option ID. - * @param[out] p_opt Pointer to a ble_opt_t structure to be filled in. - * - * @retval ::NRF_SUCCESS Option retrieved successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. - * @retval ::NRF_ERROR_INVALID_STATE Unable to retrieve the parameter at this time. - * @retval ::NRF_ERROR_BUSY The stack is busy or the previous procedure has not completed. - * @retval ::NRF_ERROR_NOT_SUPPORTED This option is not supported. - * - */ -SVCALL(SD_BLE_OPT_GET, uint32_t, sd_ble_opt_get(uint32_t opt_id, ble_opt_t *p_opt)); - -/** @} */ - -#endif /* BLE_H__ */ - -/** - @} - @} -*/
--- a/TARGET_HRM1017/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_err.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - /** - @addtogroup BLE_COMMON - @{ - @addtogroup nrf_error - @{ - @ingroup BLE_COMMON - @} - - @defgroup ble_err General error codes - @{ - - @brief General error code definitions for the BLE API. - - @ingroup BLE_COMMON -*/ -#ifndef NRF_BLE_ERR_H__ -#define NRF_BLE_ERR_H__ - -#include "nrf_error.h" - -/* @defgroup BLE_ERRORS Error Codes - * @{ */ -#define BLE_ERROR_NOT_ENABLED (NRF_ERROR_STK_BASE_NUM+0x001) /**< @ref sd_ble_enable has not been called. */ -#define BLE_ERROR_INVALID_CONN_HANDLE (NRF_ERROR_STK_BASE_NUM+0x002) /**< Invalid connection handle. */ -#define BLE_ERROR_INVALID_ATTR_HANDLE (NRF_ERROR_STK_BASE_NUM+0x003) /**< Invalid attribute handle. */ -#define BLE_ERROR_NO_TX_BUFFERS (NRF_ERROR_STK_BASE_NUM+0x004) /**< Buffer capacity exceeded. */ -/** @} */ - - -/** @defgroup BLE_ERROR_SUBRANGES Module specific error code subranges - * @brief Assignment of subranges for module specific error codes. - * @note For specific error codes, see ble_<module>.h or ble_error_<module>.h. - * @{ */ -#define NRF_L2CAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x100) /**< L2CAP specific errors. */ -#define NRF_GAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x200) /**< GAP specific errors. */ -#define NRF_GATTC_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x300) /**< GATT client specific errors. */ -#define NRF_GATTS_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x400) /**< GATT server specific errors. */ -/** @} */ - -#endif - - -/** - @} - @} -*/
--- a/TARGET_HRM1017/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gap.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1032 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_GAP Generic Access Profile (GAP) - @{ - @brief Definitions and prototypes for the GAP interface. - */ - -#ifndef BLE_GAP_H__ -#define BLE_GAP_H__ - -#include "ble_types.h" -#include "ble_ranges.h" -#include "nrf_svc.h" - - -/**@addtogroup BLE_GAP_ENUMERATIONS Enumerations - * @{ */ - -/**@brief GAP API SVC numbers. - */ -enum BLE_GAP_SVCS -{ - SD_BLE_GAP_ADDRESS_SET = BLE_GAP_SVC_BASE, /**< Set own Bluetooth Address. */ - SD_BLE_GAP_ADDRESS_GET, /**< Get own Bluetooth Address. */ - SD_BLE_GAP_ADV_DATA_SET, /**< Set Advertisement Data. */ - SD_BLE_GAP_ADV_START, /**< Start Advertising. */ - SD_BLE_GAP_ADV_STOP, /**< Stop Advertising. */ - SD_BLE_GAP_CONN_PARAM_UPDATE, /**< Connection Parameter Update. */ - SD_BLE_GAP_DISCONNECT, /**< Disconnect. */ - SD_BLE_GAP_TX_POWER_SET, /**< Set TX Power. */ - SD_BLE_GAP_APPEARANCE_SET, /**< Set Appearance. */ - SD_BLE_GAP_APPEARANCE_GET, /**< Get Appearance. */ - SD_BLE_GAP_PPCP_SET, /**< Set PPCP. */ - SD_BLE_GAP_PPCP_GET, /**< Get PPCP. */ - SD_BLE_GAP_DEVICE_NAME_SET, /**< Set Device Name. */ - SD_BLE_GAP_DEVICE_NAME_GET, /**< Get Device Name. */ - SD_BLE_GAP_AUTHENTICATE, /**< Initiate Pairing/Bonding. */ - SD_BLE_GAP_SEC_PARAMS_REPLY, /**< Reply with Security Parameters. */ - SD_BLE_GAP_AUTH_KEY_REPLY, /**< Reply with an authentication key. */ - SD_BLE_GAP_SEC_INFO_REPLY, /**< Reply with Security Information. */ - SD_BLE_GAP_CONN_SEC_GET, /**< Obtain connection security level. */ - SD_BLE_GAP_RSSI_START, /**< Start reporting of changes in RSSI. */ - SD_BLE_GAP_RSSI_STOP, /**< Stop reporting of changes in RSSI. */ -}; -/**@} */ - -/**@addtogroup BLE_GAP_DEFINES Defines - * @{ */ - -/**@defgroup BLE_ERRORS_GAP SVC return values specific to GAP - * @{ */ -#define BLE_ERROR_GAP_UUID_LIST_MISMATCH (NRF_GAP_ERR_BASE + 0x000) /**< UUID list does not contain an integral number of UUIDs. */ -#define BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST (NRF_GAP_ERR_BASE + 0x001) /**< Use of Whitelist not permitted with discoverable advertising. */ -#define BLE_ERROR_GAP_INVALID_BLE_ADDR (NRF_GAP_ERR_BASE + 0x002) /**< The upper two bits of the address do not correspond to the specified address type. */ -/**@} */ - - -/**@defgroup BLE_GAP_ROLES GAP Roles - * @note Not explicitly used in peripheral API, but will be relevant for central API. - * @{ */ -#define BLE_GAP_ROLE_INVALID 0x0 /**< Invalid Role. */ -#define BLE_GAP_ROLE_PERIPH 0x1 /**< Peripheral Role. */ -#define BLE_GAP_ROLE_CENTRAL 0x2 /**< Central Role. */ -/**@} */ - - -/**@defgroup BLE_GAP_TIMEOUT_SOURCES GAP Timeout sources - * @{ */ -#define BLE_GAP_TIMEOUT_SRC_ADVERTISEMENT 0x00 /**< Advertisement timeout. */ -#define BLE_GAP_TIMEOUT_SRC_SECURITY_REQUEST 0x01 /**< Security request timeout. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADDR_TYPES GAP Address types - * @{ */ -#define BLE_GAP_ADDR_TYPE_PUBLIC 0x00 /**< Public address. */ -#define BLE_GAP_ADDR_TYPE_RANDOM_STATIC 0x01 /**< Random Static address. */ -#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE 0x02 /**< Private Resolvable address. */ -#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE 0x03 /**< Private Non-Resolvable address. */ -/**@} */ - -/**@defgroup BLE_GAP_ADDR_CYCLE_MODES GAP Address cycle modes - * @{ */ -#define BLE_GAP_ADDR_CYCLE_MODE_NONE 0x00 /**< Set addresses directly, no automatic address cycling. */ -#define BLE_GAP_ADDR_CYCLE_MODE_AUTO 0x01 /**< Automatically generate and update private addresses. */ -/** @} */ - -/**@brief The default interval in seconds at which a private address is refreshed when address cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO. */ -#define BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S (60 * 15) - -/** @brief BLE address length. */ -#define BLE_GAP_ADDR_LEN 6 - - -/**@defgroup BLE_GAP_AD_TYPE_DEFINITIONS GAP Advertising and Scan Response Data format - * @note Found at https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm - * @{ */ -#define BLE_GAP_AD_TYPE_FLAGS 0x01 /**< Flags for discoverability. */ -#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE 0x02 /**< Partial list of 16 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE 0x03 /**< Complete list of 16 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE 0x04 /**< Partial list of 32 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE 0x05 /**< Complete list of 32 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE 0x06 /**< Partial list of 128 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE 0x07 /**< Complete list of 128 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME 0x08 /**< Short local device name. */ -#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME 0x09 /**< Complete local device name. */ -#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL 0x0A /**< Transmit power level. */ -#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE 0x0D /**< Class of device. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C 0x0E /**< Simple Pairing Hash C. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R 0x0F /**< Simple Pairing Randomizer R. */ -#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE 0x10 /**< Security Manager TK Value. */ -#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS 0x11 /**< Security Manager Out Of Band Flags. */ -#define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE 0x12 /**< Slave Connection Interval Range. */ -#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT 0x14 /**< List of 16-bit Service Solicitation UUIDs. */ -#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT 0x15 /**< List of 128-bit Service Solicitation UUIDs. */ -#define BLE_GAP_AD_TYPE_SERVICE_DATA 0x16 /**< Service Data - 16-bit UUID. */ -#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS 0x17 /**< Public Target Address. */ -#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS 0x18 /**< Random Target Address. */ -#define BLE_GAP_AD_TYPE_APPEARANCE 0x19 /**< Appearance. */ -#define BLE_GAP_AD_TYPE_ADVERTISING_INTERVAL 0x1A /**< Advertising Interval. */ -#define BLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS 0x1B /**< LE Bluetooth Device Address. */ -#define BLE_GAP_AD_TYPE_LE_ROLE 0x1C /**< LE Role. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C256 0x1D /**< Simple Pairing Hash C-256. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R256 0x1E /**< Simple Pairing Randomizer R-256. */ -#define BLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID 0x20 /**< Service Data - 32-bit UUID. */ -#define BLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID 0x21 /**< Service Data - 128-bit UUID. */ -#define BLE_GAP_AD_TYPE_3D_INFORMATION_DATA 0x3D /**< 3D Information Data. */ -#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA 0xFF /**< Manufacturer Specific Data. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADV_FLAGS GAP Advertisement Flags - * @{ */ -#define BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE (0x01) /**< LE Limited Discoverable Mode. */ -#define BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE (0x02) /**< LE General Discoverable Mode. */ -#define BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED (0x04) /**< BR/EDR not supported. */ -#define BLE_GAP_ADV_FLAG_LE_BR_EDR_CONTROLLER (0x08) /**< Simultaneous LE and BR/EDR, Controller. */ -#define BLE_GAP_ADV_FLAG_LE_BR_EDR_HOST (0x10) /**< Simultaneous LE and BR/EDR, Host. */ -#define BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE (BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE Limited Discoverable Mode, BR/EDR not supported. */ -#define BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE (BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE General Discoverable Mode, BR/EDR not supported. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADV_INTERVALS GAP Advertising interval max and min - * @{ */ -#define BLE_GAP_ADV_INTERVAL_MIN 0x0020 /**< Minimum Advertising interval in 625 us units, i.e. 20 ms. */ -#define BLE_GAP_ADV_NONCON_INTERVAL_MIN 0x00A0 /**< Minimum Advertising interval in 625 us units for non connectable mode, i.e. 100 ms. */ -#define BLE_GAP_ADV_INTERVAL_MAX 0x4000 /**< Maximum Advertising interval in 625 us units, i.e. 10.24 s. */ - /**@} */ - - -/**@brief Maximum size of advertising data in octets. */ -#define BLE_GAP_ADV_MAX_SIZE 31 - - -/**@defgroup BLE_GAP_ADV_TYPES GAP Advertising types - * @{ */ -#define BLE_GAP_ADV_TYPE_ADV_IND 0x00 /**< Connectable undirected. */ -#define BLE_GAP_ADV_TYPE_ADV_DIRECT_IND 0x01 /**< Connectable directed. */ -#define BLE_GAP_ADV_TYPE_ADV_SCAN_IND 0x02 /**< Scannable undirected. */ -#define BLE_GAP_ADV_TYPE_ADV_NONCONN_IND 0x03 /**< Non connectable undirected. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADV_FILTER_POLICIES GAP Advertising filter policies - * @{ */ -#define BLE_GAP_ADV_FP_ANY 0x00 /**< Allow scan requests and connect requests from any device. */ -#define BLE_GAP_ADV_FP_FILTER_SCANREQ 0x01 /**< Filter scan requests with whitelist. */ -#define BLE_GAP_ADV_FP_FILTER_CONNREQ 0x02 /**< Filter connect requests with whitelist. */ -#define BLE_GAP_ADV_FP_FILTER_BOTH 0x03 /**< Filter both scan and connect requests with whitelist. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADV_TIMEOUT_VALUES GAP Advertising timeout values - * @{ */ -#define BLE_GAP_ADV_TIMEOUT_LIMITED_MAX 180 /**< Maximum advertising time in limited discoverable mode (TGAP(lim_adv_timeout) = 180s in spec (Addendum 2)). */ -#define BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED 0 /**< Unlimited advertising in general discoverable mode. */ -/**@} */ - - -/**@defgroup BLE_GAP_DISC_MODES GAP Discovery modes - * @{ */ -#define BLE_GAP_DISC_MODE_NOT_DISCOVERABLE 0x00 /**< Not discoverable discovery Mode. */ -#define BLE_GAP_DISC_MODE_LIMITED 0x01 /**< Limited Discovery Mode. */ -#define BLE_GAP_DISC_MODE_GENERAL 0x02 /**< General Discovery Mode. */ -/**@} */ - -/**@defgroup BLE_GAP_IO_CAPS GAP IO Capabilities - * @{ */ -#define BLE_GAP_IO_CAPS_DISPLAY_ONLY 0x00 /**< Display Only. */ -#define BLE_GAP_IO_CAPS_DISPLAY_YESNO 0x01 /**< Display and Yes/No entry. */ -#define BLE_GAP_IO_CAPS_KEYBOARD_ONLY 0x02 /**< Keyboard Only. */ -#define BLE_GAP_IO_CAPS_NONE 0x03 /**< No I/O capabilities. */ -#define BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY 0x04 /**< Keyboard and Display. */ -/**@} */ - - -/**@defgroup BLE_GAP_AUTH_KEY_TYPES GAP Authentication Key Types - * @{ */ -#define BLE_GAP_AUTH_KEY_TYPE_NONE 0x00 /**< No key (may be used to reject). */ -#define BLE_GAP_AUTH_KEY_TYPE_PASSKEY 0x01 /**< 6-digit Passkey. */ -#define BLE_GAP_AUTH_KEY_TYPE_OOB 0x02 /**< Out Of Band data. */ -/**@} */ - -/**@defgroup BLE_GAP_SEC_STATUS GAP Security status - * @{ */ -#define BLE_GAP_SEC_STATUS_SUCCESS 0x00 /**< Successful parameters. */ -#define BLE_GAP_SEC_STATUS_TIMEOUT 0x01 /**< Procedure timed out. */ -#define BLE_GAP_SEC_STATUS_PDU_INVALID 0x02 /**< Invalid PDU received. */ -#define BLE_GAP_SEC_STATUS_PASSKEY_ENTRY_FAILED 0x81 /**< Passkey entry failed (user cancelled or other). */ -#define BLE_GAP_SEC_STATUS_OOB_NOT_AVAILABLE 0x82 /**< Out of Band Key not available. */ -#define BLE_GAP_SEC_STATUS_AUTH_REQ 0x83 /**< Authentication requirements not met. */ -#define BLE_GAP_SEC_STATUS_CONFIRM_VALUE 0x84 /**< Confirm value failed. */ -#define BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP 0x85 /**< Pairing not supported. */ -#define BLE_GAP_SEC_STATUS_ENC_KEY_SIZE 0x86 /**< Encryption key size. */ -#define BLE_GAP_SEC_STATUS_SMP_CMD_UNSUPPORTED 0x87 /**< Unsupported SMP command. */ -#define BLE_GAP_SEC_STATUS_UNSPECIFIED 0x88 /**< Unspecified reason. */ -#define BLE_GAP_SEC_STATUS_REPEATED_ATTEMPTS 0x89 /**< Too little time elapsed since last attempt. */ -#define BLE_GAP_SEC_STATUS_INVALID_PARAMS 0x8A /**< Invalid parameters. */ -/**@} */ - -/**@defgroup BLE_GAP_SEC_STATUS_SOURCES GAP Security status sources - * @{ */ -#define BLE_GAP_SEC_STATUS_SOURCE_LOCAL 0x00 /**< Local failure. */ -#define BLE_GAP_SEC_STATUS_SOURCE_REMOTE 0x01 /**< Remote failure. */ -/**@} */ - -/**@defgroup BLE_GAP_CP_LIMITS GAP Connection Parameters Limits - * @{ */ -#define BLE_GAP_CP_MIN_CONN_INTVL_NONE 0xFFFF /**< No new minimum connction interval specified in connect parameters. */ -#define BLE_GAP_CP_MIN_CONN_INTVL_MIN 0x0006 /**< Lowest mimimum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ -#define BLE_GAP_CP_MIN_CONN_INTVL_MAX 0x0C80 /**< Highest minimum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_NONE 0xFFFF /**< No new maximum connction interval specified in connect parameters. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_MIN 0x0006 /**< Lowest maximum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_MAX 0x0C80 /**< Highest maximum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ -#define BLE_GAP_CP_SLAVE_LATENCY_MAX 0x03E8 /**< Highest slave latency permitted, in connection events. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_NONE 0xFFFF /**< No new supervision timeout specified in connect parameters. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MIN 0x000A /**< Lowest supervision timeout permitted, in units of 10 ms, i.e. 100 ms. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MAX 0x0C80 /**< Highest supervision timeout permitted, in units of 10 ms, i.e. 32 s. */ -/**@} */ - - -/**@brief GAP device name maximum length. */ -#define BLE_GAP_DEVNAME_MAX_LEN 31 - - -/**@defgroup BLE_GAP_CONN_SEC_MODE_SET_MACROS GAP attribute security requirement setters - * - * See @ref ble_gap_conn_sec_mode_t. - * @{ */ -/**@brief Set sec_mode pointed to by ptr to have no access rights.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(ptr) do {(ptr)->sm = 0; (ptr)->lv = 0;} while(0) -/**@brief Set sec_mode pointed to by ptr to require no protection, open link.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_OPEN(ptr) do {(ptr)->sm = 1; (ptr)->lv = 1;} while(0) -/**@brief Set sec_mode pointed to by ptr to require encryption, but no MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 2;} while(0) -/**@brief Set sec_mode pointed to by ptr to require encryption and MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 3;} while(0) -/**@brief Set sec_mode pointed to by ptr to require signing or encryption, no MITM protection needed.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_NO_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 1;} while(0) -/**@brief Set sec_mode pointed to by ptr to require signing or encryption with MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_WITH_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 2;} while(0) -/**@} */ - - -/**@brief GAP Security Key Length. */ -#define BLE_GAP_SEC_KEY_LEN 16 - -/**@brief GAP Passkey Length. */ -#define BLE_GAP_PASSKEY_LEN 6 - -/**@brief Maximum amount of addresses in a whitelist. */ -#define BLE_GAP_WHITELIST_ADDR_MAX_COUNT (8) - -/**@brief Maximum amount of IRKs in a whitelist. - * @note The number of IRKs is limited to 8, even if the hardware supports more. - */ -#define BLE_GAP_WHITELIST_IRK_MAX_COUNT (8) - -/**@defgroup GAP_SEC_MODES GAP Security Modes - * @{ */ -#define BLE_GAP_SEC_MODE 0x00 /**< No key (may be used to reject). */ -/**@} */ - -/**@} */ - -/**@addtogroup BLE_GAP_STRUCTURES Structures - * @{ */ - -/**@brief Bluetooth Low Energy address. */ -typedef struct -{ - uint8_t addr_type; /**< See @ref BLE_GAP_ADDR_TYPES. */ - uint8_t addr[BLE_GAP_ADDR_LEN]; /**< 48-bit address, LSB format. */ -} ble_gap_addr_t; - - -/**@brief GAP connection parameters. - * - * @note When ble_conn_params_t is received in an event, both min_conn_interval and - * max_conn_interval will be equal to the connection interval set by the central. - */ -typedef struct -{ - uint16_t min_conn_interval; /**< Minimum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t max_conn_interval; /**< Maximum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t slave_latency; /**< Slave Latency in number of connection events, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t conn_sup_timeout; /**< Connection Supervision Timeout in 10 ms units, see @ref BLE_GAP_CP_LIMITS.*/ -} ble_gap_conn_params_t; - - -/**@brief GAP link requirements. - * - * See Bluetooth Core specification, Volume 3 Part C 10.2 for details. - * - * Security Mode 0 Level 0: No access permissions at all (this level is not defined by the Bluetooth Core specification).\n - * Security Mode 1 Level 1: No security is needed (aka open link).\n - * Security Mode 1 Level 2: Encrypted link required, MITM protection not necessary.\n - * Security Mode 1 Level 3: MITM protected encrypted link required.\n - * Security Mode 2 Level 1: Signing or encryption required, MITM protection not necessary.\n - * Security Mode 2 Level 2: MITM protected signing required, unless link is MITM protected encrypted.\n - */ -typedef struct -{ - uint8_t sm : 4; /**< Security Mode (1 or 2), 0 for no permissions at all. */ - uint8_t lv : 4; /**< Level (1, 2 or 3), 0 for no permissions at all. */ - -} ble_gap_conn_sec_mode_t; - - -/**@brief GAP connection security status.*/ -typedef struct -{ - ble_gap_conn_sec_mode_t sec_mode; /**< Currently active security mode for this connection.*/ - uint8_t encr_key_size; /**< Length of currently active encryption key, 7 to 16 octets (only applicable for bonding procedures). */ -} ble_gap_conn_sec_t; - - -/**@brief Identity Resolving Key. */ -typedef struct -{ - uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Array containing IRK. */ -} ble_gap_irk_t; - - -/**@brief Whitelist structure. */ -typedef struct -{ - ble_gap_addr_t ** pp_addrs; /**< Pointer to array of device address pointers, pointing to addresses to be used in whitelist. NULL if none are given. */ - uint8_t addr_count; /**< Count of device addresses in array, up to @ref BLE_GAP_WHITELIST_ADDR_MAX_COUNT. */ - ble_gap_irk_t ** pp_irks; /**< Pointer to array of Identity Resolving Key (IRK) pointers, each pointing to an IRK in the whitelist. NULL if none are given. */ - uint8_t irk_count; /**< Count of IRKs in array, up to @ref BLE_GAP_WHITELIST_IRK_MAX_COUNT. */ -} ble_gap_whitelist_t; - - -/**@brief GAP advertising parameters.*/ -typedef struct -{ - uint8_t type; /**< See @ref BLE_GAP_ADV_TYPES. */ - ble_gap_addr_t* p_peer_addr; /**< For BLE_GAP_CONN_MODE_DIRECTED mode only, known peer address. */ - uint8_t fp; /**< Filter Policy, see @ref BLE_GAP_ADV_FILTER_POLICIES. */ - ble_gap_whitelist_t * p_whitelist; /**< Pointer to whitelist, NULL if none is given. */ - uint16_t interval; /**< Advertising interval between 0x0020 and 0x4000 in 0.625 ms units (20ms to 10.24s), see @ref BLE_GAP_ADV_INTERVALS. This parameter must be set to 0 if type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND. */ - uint16_t timeout; /**< Advertising timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. See also @ref BLE_GAP_ADV_TIMEOUT_VALUES. This parameter must be set to 0 if type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND. */ -} ble_gap_adv_params_t; - - -/**@brief GAP scanning parameters. */ -typedef struct -{ - uint8_t filter; /**< Filter based on discovery mode, see @ref BLE_GAP_DISC_MODES. */ - uint8_t active : 1; /**< If 1, perform active scanning (scan requests). */ - uint8_t selective : 1; /**< If 1, ignore unknown devices (non whitelisted). */ - uint16_t interval; /**< Scan interval between 0x0020 and 0x4000 in 0.625ms units (20ms to 10.24s). */ - uint16_t window; /**< Scan window between 0x0004 and 0x4000 in 0.625ms units (2.5ms to 10.24s). */ - uint16_t timeout; /**< Scan timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. */ -} ble_gap_scan_params_t; - - -/**@brief GAP security parameters. */ -typedef struct -{ - uint16_t timeout; /**< Timeout for SMP transactions or Security Request in seconds, see @ref sd_ble_gap_authenticate and @ref sd_ble_gap_sec_params_reply for more information. */ - uint8_t bond : 1; /**< Perform bonding. */ - uint8_t mitm : 1; /**< Man In The Middle protection required. */ - uint8_t io_caps : 3; /**< IO capabilities, see @ref BLE_GAP_IO_CAPS. */ - uint8_t oob : 1; /**< Out Of Band data available. */ - uint8_t min_key_size; /**< Minimum encryption key size in octets between 7 and 16. */ - uint8_t max_key_size; /**< Maximum encryption key size in octets between min_key_size and 16. */ -} ble_gap_sec_params_t; - - -/**@brief GAP Encryption Information. */ -typedef struct -{ - uint16_t div; /**< Encryption Diversifier. */ - uint8_t ltk[BLE_GAP_SEC_KEY_LEN]; /**< Long Term Key. */ - uint8_t auth : 1; /**< Authenticated Key. */ - uint8_t ltk_len : 7; /**< LTK length in octets. */ -} ble_gap_enc_info_t; - - -/**@brief GAP Master Identification. */ -typedef struct -{ - uint16_t ediv; /**< Encrypted Diversifier. */ - uint8_t rand[8]; /**< Random Number. */ -} ble_gap_master_id_t; - - -/**@brief GAP Identity Information. */ -typedef struct -{ - ble_gap_addr_t addr; /**< Bluetooth address to which this key applies. */ - uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Identity Resolution Key. */ -} ble_gap_id_info_t; - - -/**@brief GAP Signing Information. */ -typedef struct -{ - uint8_t csrk[BLE_GAP_SEC_KEY_LEN]; /* Connection Signature Resolving Key. */ -} ble_gap_sign_info_t; - - -/**@brief GAP Event IDs. - * Those IDs uniquely identify an event coming from the stack to the application. - */ -enum BLE_GAP_EVTS -{ - BLE_GAP_EVT_CONNECTED = BLE_GAP_EVT_BASE, /**< Connection established. */ - BLE_GAP_EVT_DISCONNECTED, /**< Disconnected from peer. */ - BLE_GAP_EVT_CONN_PARAM_UPDATE, /**< Connection Parameters updated. */ - BLE_GAP_EVT_SEC_PARAMS_REQUEST, /**< Request to provide security parameters. */ - BLE_GAP_EVT_SEC_INFO_REQUEST, /**< Request to provide security information. */ - BLE_GAP_EVT_PASSKEY_DISPLAY, /**< Request to display a passkey to the user. */ - BLE_GAP_EVT_AUTH_KEY_REQUEST, /**< Request to provide an authentication key. */ - BLE_GAP_EVT_AUTH_STATUS, /**< Authentication procedure completed with status. */ - BLE_GAP_EVT_CONN_SEC_UPDATE, /**< Connection security updated. */ - BLE_GAP_EVT_TIMEOUT, /**< Timeout expired. */ - BLE_GAP_EVT_RSSI_CHANGED, /**< Signal strength measurement report. */ -}; - - -/** - * @brief GAP Option IDs. - * IDs that uniquely identify a GAP option. - */ -enum BLE_GAP_OPTS -{ - BLE_GAP_OPT_LOCAL_CONN_LATENCY = BLE_GAP_OPT_BASE, /**< Local connection latency. */ - BLE_GAP_OPT_PASSKEY, /**< Set passkey to be used during pairing. This option can be used to make the SoftDevice use an application provided passkey instead of generating a random passkey.*/ - BLE_GAP_OPT_PRIVACY, /**< Set or get custom IRK or custom private address cycle interval. */ -}; -/**@} */ - - -/**@brief Event data for connected event. */ -typedef struct -{ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ - uint8_t irk_match :1; /**< If 1, peer device's address resolved using an IRK. */ - uint8_t irk_match_idx :7; /**< Index in IRK list where the address was matched. */ - ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ -} ble_gap_evt_connected_t; - - -/**@brief Event data for disconnected event. */ -typedef struct -{ - uint8_t reason; /**< HCI error code. */ -} ble_gap_evt_disconnected_t; - - -/**@brief Event data for connection parameter update event. */ -typedef struct -{ - ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ -} ble_gap_evt_conn_param_update_t; - - -/**@brief Event data for security parameters request event. */ -typedef struct -{ - ble_gap_sec_params_t peer_params; /**< Initiator Security Parameters. */ -} ble_gap_evt_sec_params_request_t; - - -/**@brief Event data for security info request event. */ -typedef struct -{ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ - uint16_t div; /**< Encryption diversifier for LTK lookup. */ - uint8_t enc_info : 1; /**< If 1, Encryption Information required. */ - uint8_t id_info : 1; /**< If 1, Identity Information required. */ - uint8_t sign_info : 1; /**< If 1, Signing Information required. */ -} ble_gap_evt_sec_info_request_t; - - -/**@brief Event data for passkey display event. */ -typedef struct -{ - uint8_t passkey[BLE_GAP_PASSKEY_LEN]; /**< 6-digit passkey in ASCII ('0'-'9' digits only). */ -} ble_gap_evt_passkey_display_t; - - -/**@brief Event data for authentication key request event. */ -typedef struct -{ - uint8_t key_type; /**< See @ref BLE_GAP_AUTH_KEY_TYPES. */ -} ble_gap_evt_auth_key_request_t; - - -/**@brief Security levels supported. - * @note See Bluetooth Specification Version 4.1 Volume 3, Part C, Chapter 10. -*/ -typedef struct -{ - uint8_t lv1 : 1; /**< If 1: Level 1 is supported. */ - uint8_t lv2 : 1; /**< If 1: Level 2 is supported. */ - uint8_t lv3 : 1; /**< If 1: Level 3 is supported. */ -} ble_gap_sec_levels_t; - - -/**@brief Keys that have been exchanged. */ -typedef struct -{ - uint8_t ltk : 1; /**< Long Term Key. */ - uint8_t ediv_rand : 1; /**< Encrypted Diversifier and Random value. */ - uint8_t irk : 1; /**< Identity Resolving Key. */ - uint8_t address : 1; /**< Public or static random address. */ - uint8_t csrk : 1; /**< Connection Signature Resolving Key. */ -} ble_gap_sec_keys_t; - - -/**@brief Event data for authentication status event. */ -typedef struct -{ - uint8_t auth_status; /**< Authentication status, see @ref BLE_GAP_SEC_STATUS. */ - uint8_t error_src; /**< On error, source that caused the failure, see @ref BLE_GAP_SEC_STATUS_SOURCES. */ - ble_gap_sec_levels_t sm1_levels; /**< Levels supported in Security Mode 1. */ - ble_gap_sec_levels_t sm2_levels; /**< Levels supported in Security Mode 2. */ - ble_gap_sec_keys_t periph_kex; /**< Bitmap stating which keys were exchanged (distributed) by the peripheral. */ - ble_gap_sec_keys_t central_kex; /**< Bitmap stating which keys were exchanged (distributed) by the central. */ - struct periph_keys_t - { - ble_gap_enc_info_t enc_info; /**< Peripheral's Encryption information. */ - } periph_keys; /**< Actual keys distributed from the Peripheral to the Central. */ - struct central_keys_t - { - ble_gap_irk_t irk; /**< Central's IRK. */ - ble_gap_addr_t id_info; /**< Central's Identity Info. */ - } central_keys; /**< Actual keys distributed from the Central to the Peripheral. */ -} ble_gap_evt_auth_status_t; - - -/**@brief Event data for connection security update event. */ -typedef struct -{ - ble_gap_conn_sec_t conn_sec; /**< Connection security level. */ -} ble_gap_evt_conn_sec_update_t; - - -/**@brief Event data for timeout event. */ -typedef struct -{ - uint8_t src; /**< Source of timeout event, see @ref BLE_GAP_TIMEOUT_SOURCES. */ -} ble_gap_evt_timeout_t; - - -/**@brief Event data for advertisement report event. */ -typedef struct -{ - int8_t rssi; /**< Received Signal Strength Indication in dBm. */ -} ble_gap_evt_rssi_changed_t; - - -/**@brief GAP event callback event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occured. */ - union /**< union alternative identified by evt_id in enclosing struct. */ - { - ble_gap_evt_connected_t connected; /**< Connected Event Parameters. */ - ble_gap_evt_disconnected_t disconnected; /**< Disconnected Event Parameters. */ - ble_gap_evt_conn_param_update_t conn_param_update; /**< Connection Parameter Update Parameters. */ - ble_gap_evt_sec_params_request_t sec_params_request; /**< Security Parameters Request Event Parameters. */ - ble_gap_evt_sec_info_request_t sec_info_request; /**< Security Information Request Event Parameters. */ - ble_gap_evt_passkey_display_t passkey_display; /**< Passkey Display Event Parameters. */ - ble_gap_evt_auth_key_request_t auth_key_request; /**< Authentication Key Request Event Parameters. */ - ble_gap_evt_auth_status_t auth_status; /**< Authentication Status Event Parameters. */ - ble_gap_evt_conn_sec_update_t conn_sec_update; /**< Connection Security Update Event Parameters. */ - ble_gap_evt_timeout_t timeout; /**< Timeout Event Parameters. */ - ble_gap_evt_rssi_changed_t rssi_changed; /**< RSSI Event parameters. */ - } params; - -} ble_gap_evt_t; - - -/**@brief Local connection latency option. - * - * Local connection latency is a feature which enables the slave to improve - * current consumption by ignoring the slave latency set by the peer. The - * local connection latency can only be set to a multiple of the slave latency, - * and cannot be longer than half of the supervision timeout. - * - * Used with @ref sd_ble_opt_set to set the local connection latency. The - * @ref sd_ble_opt_get is not supported for this option, but the actual - * local connection latency (unless set to NULL) is set as a return parameter - * when setting the option. - * - * @note The latency set will be truncated down to the closest slave latency event - * multiple, or the nearest multiple before half of the supervision timeout. - * - * @note The local connection latency is default off, and needs to be set for new - * connections and whenever the connection is updated. - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. - */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle */ - uint16_t requested_latency; /**< Requested local connection latency. */ - uint16_t * p_actual_latency; /**< Pointer to storage for the actual local connection latency (can be set to NULL to skip return value). */ -} ble_gap_opt_local_conn_latency_t; - - -/**@brief Passkey Option. - * - * Structure containing the passkey to be used during pairing. This can be used with @ref - * sd_ble_opt_set to make the SoftDevice use a pre-programmed passkey for authentication - * instead of generating a random one. - * - * @note @ref sd_ble_opt_get is not supported for this option. - * - */ -typedef struct -{ - uint8_t * p_passkey; /**< Pointer to 6-digit ASCII string (digit 0..9 only, no NULL termination) passkey to be used during pairing. If this is NULL, the SoftDevice will generate a random passkey if required.*/ -} ble_gap_opt_passkey_t; - - -/**@brief Custom Privacy Options. - * - * @note The specified address cycle interval is used when the address cycle mode is - * @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO. If 0 is given, the address will not be refreshed at any - * interval, and not at start of advertising. A new address can be generated manually by calling - * @ref sd_ble_gap_address_set with the same type again. The default interval is - * @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S. - * - * @note If cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO, the address will immediately be - * refreshed when this option is set. - */ -typedef struct -{ - ble_gap_irk_t * p_irk; /**< When input: Pointer to custom IRK, or NULL to use/reset to the device's default IRK. When output: Pointer to where the current IRK is to be stored, or NULL to not read out the IRK. */ - uint16_t interval_s; /**< When input: Custom private address cycle interval in seconds. When output: The current private address cycle interval. */ -} ble_gap_opt_privacy_t; - - -/**@brief Option structure for GAP options. */ -typedef union -{ - ble_gap_opt_local_conn_latency_t local_conn_latency; /**< Local connection latency. */ - ble_gap_opt_passkey_t passkey; /**< Passkey to be used for pairing.*/ - ble_gap_opt_privacy_t privacy; /**< Custom privacy options. */ -} ble_gap_opt_t; -/**@} */ - - -/**@addtogroup BLE_GAP_FUNCTIONS Functions - * @{ */ - -/**@brief Set local Bluetooth address. - * - * If the address cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO, the address type is required to - * be @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE or - * @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE. The given address is ignored and the - * SoftDevice will generate a new private address automatically every time advertising is - * (re)started, and every @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S seconds. If this API - * call is used again with the same parameters while advertising, the SoftDevice will immediately - * generate a new private address to replace the current address. - * - * If the application wishes to use a @ref BLE_GAP_ADDR_TYPE_PUBLIC or - * @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC address, the cycle mode must be - * @ref BLE_GAP_ADDR_CYCLE_MODE_NONE. - * - * If this API function is called while advertising, the softdevice will immediately update the - * advertising address without the need to stop advertising in the following cases: - * - If the previously set address is of type @ref BLE_GAP_ADDR_TYPE_PUBLIC and the new address - * is also of type @ref BLE_GAP_ADDR_TYPE_PUBLIC - * - If the previously set address is not @ref BLE_GAP_ADDR_TYPE_PUBLIC and the new address is - * also not @ref BLE_GAP_ADDR_TYPE_PUBLIC. - * - * If the address is changed from a @ref BLE_GAP_ADDR_TYPE_PUBLIC address to another type or from - * another type to a @ref BLE_GAP_ADDR_TYPE_PUBLIC address, the change will take effect the next - * time advertising is started. - * - * @note If the address cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_NONE and the application is - * using privacy, the application must take care to generate and set new private addresses - * periodically to comply with the Privacy specification in Bluetooth Core Spec. - * - * @param[in] addr_cycle_mode Address cycle mode, see @ref BLE_GAP_ADDR_CYCLE_MODES. - * @param[in] p_addr Pointer to address structure. - * - * @return @ref NRF_SUCCESS Address successfully set. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameters. - * @return @ref BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address. - * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. - */ -SVCALL(SD_BLE_GAP_ADDRESS_SET, uint32_t, sd_ble_gap_address_set(uint8_t addr_cycle_mode, ble_gap_addr_t const * const p_addr)); - - -/**@brief Get local Bluetooth address. - * - * @param[out] p_addr Pointer to address structure. - * - * @return @ref NRF_SUCCESS Address successfully retrieved. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GAP_ADDRESS_GET, uint32_t, sd_ble_gap_address_get(ble_gap_addr_t * const p_addr)); - - -/**@brief Set, clear or update advertisement and scan response data. - * - * @note The format of the advertisement data will be checked by this call to ensure interoperability. - * Limitations imposed by this API call to the data provided include having a flags data type in the scan response data and - * duplicating the local name in the advertisement data and scan response data. - * - * @note: To clear the advertisement data and set it to a 0-length packet, simply provide a valid pointer (p_data/p_sr_data) with its corresponding - * length (dlen/srdlen) set to 0. - * - * @note: The call will fail if p_data and p_sr_data are both NULL since this would have no effect. - * - * @param[in] p_data Raw data to be placed in advertisement packet. If NULL, no changes are made to the current advertisement packet data. - * @param[in] dlen Data length for p_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_data is NULL, can be 0 if p_data is not NULL. - * @param[in] p_sr_data Raw data to be placed in scan response packet. If NULL, no changes are made to the current scan response packet data. - * @param[in] srdlen Data length for p_sr_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_sr_data is NULL, can be 0 if p_data is not NULL. - * - * @return @ref NRF_SUCCESS Advertisement data successfully updated or cleared. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_FLAGS Invalid combination of advertising flags supplied. - * @return @ref NRF_ERROR_INVALID_DATA Invalid data type(s) supplied, check the advertising data format specification. - * @return @ref NRF_ERROR_INVALID_LENGTH Invalid data length(s) supplied. - * @return @ref BLE_ERROR_GAP_UUID_LIST_MISMATCH Invalid UUID list supplied. - * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. - */ -SVCALL(SD_BLE_GAP_ADV_DATA_SET, uint32_t, sd_ble_gap_adv_data_set(uint8_t const * const p_data, uint8_t dlen, uint8_t const * const p_sr_data, uint8_t srdlen)); - - -/**@brief Start advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). - * - * @param[in] p_adv_params Pointer to advertising parameters structure. - * - * @return @ref NRF_SUCCESS The BLE stack has started advertising. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check the accepted ranges and limits. - * @return @ref BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Bluetooth address supplied. - * @return @ref BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST Discoverable mode and whitelist incompatible. - */ -SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start(ble_gap_adv_params_t const * const p_adv_params)); - - -/**@brief Stop advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). - * - * @return @ref NRF_SUCCESS The BLE stack has stopped advertising. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation (most probably not in advertising state). - */ -SVCALL(SD_BLE_GAP_ADV_STOP, uint32_t, sd_ble_gap_adv_stop(void)); - - -/**@brief Update connection parameters. - * - * @details In the central role this will initiate a Link Layer connection parameter update procedure, - * otherwise in the peripheral role, this will send the corresponding L2CAP request and wait for - * the central to perform the procedure. In both cases, and regardless of success or failure, the application - * will be informed of the result with a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE event. - * - * @note If both a connection supervision timeout and a maximum connection interval are specified, then the following constraint - * applies: (conn_sup_timeout * 8) >= (max_conn_interval * (slave_latency + 1)) - * - * @param[in] conn_handle Connection handle. - * @param[in] p_conn_params Pointer to desired connection parameters. If NULL is provided on a peripheral role, - * the parameters in the PPCP characteristic of the GAP service will be used instead. - * - * @return @ref NRF_SUCCESS The Connection Update procedure has been started successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. - * @return @ref NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, process pending events and retry. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GAP_CONN_PARAM_UPDATE, uint32_t, sd_ble_gap_conn_param_update(uint16_t conn_handle, ble_gap_conn_params_t const * const p_conn_params)); - - -/**@brief Disconnect (GAP Link Termination). - * - * @details This call initiates the disconnection procedure, and its completion will be communicated to the application - * with a BLE_GAP_EVT_DISCONNECTED event. - * - * @param[in] conn_handle Connection handle. - * @param[in] hci_status_code HCI status code, see @ref BLE_HCI_STATUS_CODES (accepted values are BTLE_REMOTE_USER_TERMINATED_CONNECTION and BTLE_CONN_INTERVAL_UNACCEPTABLE). - * - * @return @ref NRF_SUCCESS The disconnection procedure has been started successfully. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation (disconnection is already in progress or not connected at all). - */ -SVCALL(SD_BLE_GAP_DISCONNECT, uint32_t, sd_ble_gap_disconnect(uint16_t conn_handle, uint8_t hci_status_code)); - - -/**@brief Set the radio's transmit power. - * - * @param[in] tx_power Radio transmit power in dBm (accepted values are -40, -30, -20, -16, -12, -8, -4, 0, and 4 dBm). - * - * @note -40 dBm will not actually give -40 dBm, but will instead be remapped to -30 dBm. - * - * @return @ref NRF_SUCCESS Successfully changed the transmit power. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. - */ -SVCALL(SD_BLE_GAP_TX_POWER_SET, uint32_t, sd_ble_gap_tx_power_set(int8_t tx_power)); - - -/**@brief Set GAP Appearance value. - * - * @param[in] appearance Appearance (16-bit), see @ref BLE_APPEARANCES. - * - * @return @ref NRF_SUCCESS Appearance value set successfully. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - */ -SVCALL(SD_BLE_GAP_APPEARANCE_SET, uint32_t, sd_ble_gap_appearance_set(uint16_t appearance)); - - -/**@brief Get GAP Appearance value. - * - * @param[out] p_appearance Appearance (16-bit), see @ref BLE_APPEARANCES. - * - * @return @ref NRF_SUCCESS Appearance value retrieved successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GAP_APPEARANCE_GET, uint32_t, sd_ble_gap_appearance_get(uint16_t * const p_appearance)); - - -/**@brief Set GAP Peripheral Preferred Connection Parameters. - * - * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure with the desired parameters. - * - * @return @ref NRF_SUCCESS Peripheral Preferred Connection Parameters set successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - */ -SVCALL(SD_BLE_GAP_PPCP_SET, uint32_t, sd_ble_gap_ppcp_set(ble_gap_conn_params_t const * const p_conn_params)); - - -/**@brief Get GAP Peripheral Preferred Connection Parameters. - * - * @param[out] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the parameters will be stored. - * - * @return @ref NRF_SUCCESS Peripheral Preferred Connection Parameters retrieved successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GAP_PPCP_GET, uint32_t, sd_ble_gap_ppcp_get(ble_gap_conn_params_t * const p_conn_params)); - - -/**@brief Set GAP device name. - * - * @param[in] p_write_perm Write permissions for the Device Name characteristic see @ref ble_gap_conn_sec_mode_t. - * @param[in] p_dev_name Pointer to a UTF-8 encoded, <b>non NULL-terminated</b> string. - * @param[in] len Length of the UTF-8, <b>non NULL-terminated</b> string pointed to by p_dev_name in octets (must be smaller or equal than @ref BLE_GAP_DEVNAME_MAX_LEN). - * - * @return @ref NRF_SUCCESS GAP device name and permissions set successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - */ -SVCALL(SD_BLE_GAP_DEVICE_NAME_SET, uint32_t, sd_ble_gap_device_name_set(ble_gap_conn_sec_mode_t const * const p_write_perm, uint8_t const * const p_dev_name, uint16_t len)); - - -/**@brief Get GAP device name. - * - * @param[in] p_dev_name Pointer to an empty buffer where the UTF-8 <b>non NULL-terminated</b> string will be placed. Set to NULL to obtain the complete device name length. - * @param[in,out] p_len Length of the buffer pointed by p_dev_name, complete device name length on output. - * - * @note If the device name is longer than the size of the supplied buffer, - * p_len will return the complete device name length, - * and not the number of bytes actually returned in p_dev_name. - * The application may use this information to allocate a suitable buffer size. - * - * @return @ref NRF_SUCCESS GAP device name retrieved successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - */ -SVCALL(SD_BLE_GAP_DEVICE_NAME_GET, uint32_t, sd_ble_gap_device_name_get(uint8_t * const p_dev_name, uint16_t * const p_len)); - - -/**@brief Initiate GAP Authentication procedure. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_sec_params Pointer to the @ref ble_gap_sec_params_t structure with the security parameters to be used during the pairing procedure. - * - * @details In the central role, this function will send an SMP Pairing Request, otherwise in the peripheral role, an SMP Security Request will be sent. - * In the peripheral role, only the timeout, bond and mitm fields of @ref ble_gap_sec_params_t are used. - * - * @note The GAP Authentication procedure may be triggered by the central without calling this function when accessing a secure service. - * @note Calling this function may result in the following events depending on the outcome and parameters: @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, - * @ref BLE_GAP_EVT_SEC_INFO_REQUEST, @ref BLE_GAP_EVT_AUTH_KEY_REQUEST, @ref BLE_GAP_EVT_AUTH_STATUS. - * @note The timeout parameter in @ref ble_gap_sec_params_t is interpreted here as the Security Request timeout - * - * - * @return @ref NRF_SUCCESS Successfully initiated authentication procedure. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_AUTHENTICATE, uint32_t, sd_ble_gap_authenticate(uint16_t conn_handle, ble_gap_sec_params_t const * const p_sec_params)); - - -/**@brief Reply with GAP security parameters. - * - * @param[in] conn_handle Connection handle. - * @param[in] sec_status Security status, see @ref BLE_GAP_SEC_STATUS. - * @param[in] p_sec_params Pointer to a @ref ble_gap_sec_params_t security parameters structure. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, calling it at other times will result in an NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * @note The timeout parameter in @ref ble_gap_sec_params_t is interpreted here as the SMP procedure timeout, and must be 30 seconds. The function will fail - * if the application supplies a different value. - * - * @return @ref NRF_SUCCESS Successfully accepted security parameter from the application. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_SEC_PARAMS_REPLY, uint32_t, sd_ble_gap_sec_params_reply(uint16_t conn_handle, uint8_t sec_status, ble_gap_sec_params_t const * const p_sec_params)); - - -/**@brief Reply with an authentication key. - * - * @param[in] conn_handle Connection handle. - * @param[in] key_type See @ref BLE_GAP_AUTH_KEY_TYPES. - * @param[in] key If key type is BLE_GAP_AUTH_KEY_TYPE_NONE, then NULL. - * If key type is BLE_GAP_AUTH_KEY_TYPE_PASSKEY, then a 6-byte ASCII string (digit 0..9 only, no NULL termination). - * If key type is BLE_GAP_AUTH_KEY_TYPE_OOB, then a 16-byte OOB key value in Little Endian format. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_AUTH_KEY_REQUEST, calling it at other times will result in an NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * - * @return @ref NRF_SUCCESS Authentication key successfully set. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_AUTH_KEY_REPLY, uint32_t, sd_ble_gap_auth_key_reply(uint16_t conn_handle, uint8_t key_type, uint8_t const * const key)); - - -/**@brief Reply with GAP security information. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. May be NULL to signal none is available. - * @param[in] p_sign_info Pointer to a @ref ble_gap_sign_info_t signing information structure. May be NULL to signal none is available. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_INFO_REQUEST, calling it at other times will result in NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * @note Data signing is not implemented yet. p_sign_info must therefore be NULL. - * - * @return @ref NRF_SUCCESS Successfully accepted security information. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. - */ -SVCALL(SD_BLE_GAP_SEC_INFO_REPLY, uint32_t, sd_ble_gap_sec_info_reply(uint16_t conn_handle, ble_gap_enc_info_t const * const p_enc_info, ble_gap_sign_info_t const * const p_sign_info)); - - -/**@brief Get the current connection security. - * - * @param[in] conn_handle Connection handle. - * @param[out] p_conn_sec Pointer to a @ref ble_gap_conn_sec_t structure to be filled in. - * - * @return @ref NRF_SUCCESS Current connection security successfully retrieved. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_CONN_SEC_GET, uint32_t, sd_ble_gap_conn_sec_get(uint16_t conn_handle, ble_gap_conn_sec_t * const p_conn_sec)); - - -/**@brief Start reporting the received signal strength to the application. - * - * A new event is reported whenever the RSSI value changes, until @ref sd_ble_gap_rssi_stop is called. - * - * @param[in] conn_handle Connection handle. - * - * @return @ref NRF_SUCCESS Successfully activated RSSI reporting. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_RSSI_START, uint32_t, sd_ble_gap_rssi_start(uint16_t conn_handle)); - - -/**@brief Stop reporting the received singnal strength. - * - * An RSSI change detected before the call but not yet received by the application - * may be reported after @ref sd_ble_gap_rssi_stop has been called. - * - * @param[in] conn_handle Connection handle. - * - * @return @ref NRF_SUCCESS Successfully deactivated RSSI reporting. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_RSSI_STOP, uint32_t, sd_ble_gap_rssi_stop(uint16_t conn_handle)); -/**@} */ - -#endif // BLE_GAP_H__ - -/** - @} -*/
--- a/TARGET_HRM1017/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gatt.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,171 +0,0 @@ -/* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - /** - @addtogroup BLE_GATT Generic Attribute Profile (GATT) Common - @{ - @brief Common definitions and prototypes for the GATT interfaces. - */ - -#ifndef BLE_GATT_H__ -#define BLE_GATT_H__ - -#include "ble_types.h" -#include "ble_ranges.h" - - -/** @addtogroup BLE_GATT_DEFINES Defines - * @{ */ - -/** @brief Default MTU size. */ -#define GATT_MTU_SIZE_DEFAULT 23 - -/** @brief Only the default MTU size of 23 is currently supported. */ -#define GATT_RX_MTU 23 - - -/**@brief Invalid Attribute Handle. */ -#define BLE_GATT_HANDLE_INVALID 0x0000 - -/** @defgroup BLE_GATT_TIMEOUT_SOURCES GATT Timeout sources - * @{ */ -#define BLE_GATT_TIMEOUT_SRC_PROTOCOL 0x00 /**< ATT Protocol timeout. */ -/** @} */ - -/** @defgroup BLE_GATT_WRITE_OPS GATT Write operations - * @{ */ -#define BLE_GATT_OP_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATT_OP_WRITE_REQ 0x01 /**< Write Request. */ -#define BLE_GATT_OP_WRITE_CMD 0x02 /**< Write Command. */ -#define BLE_GATT_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ -#define BLE_GATT_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ -#define BLE_GATT_OP_EXEC_WRITE_REQ 0x05 /**< Execute Write Request. */ -/** @} */ - -/** @defgroup BLE_GATT_EXEC_WRITE_FLAGS GATT Execute Write flags - * @{ */ -#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_CANCEL 0x00 -#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE 0x01 -/** @} */ - -/** @defgroup BLE_GATT_HVX_TYPES GATT Handle Value operations - * @{ */ -#define BLE_GATT_HVX_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATT_HVX_NOTIFICATION 0x01 /**< Handle Value Notification. */ -#define BLE_GATT_HVX_INDICATION 0x02 /**< Handle Value Indication. */ -/** @} */ - -/** @defgroup BLE_GATT_STATUS_CODES GATT Status Codes - * @{ */ -#define BLE_GATT_STATUS_SUCCESS 0x0000 /**< Success. */ -#define BLE_GATT_STATUS_UNKNOWN 0x0001 /**< Unknown or not applicable status. */ -#define BLE_GATT_STATUS_ATTERR_INVALID 0x0100 /**< ATT Error: Invalid Error Code. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_HANDLE 0x0101 /**< ATT Error: Invalid Attribute Handle. */ -#define BLE_GATT_STATUS_ATTERR_READ_NOT_PERMITTED 0x0102 /**< ATT Error: Read not permitted. */ -#define BLE_GATT_STATUS_ATTERR_WRITE_NOT_PERMITTED 0x0103 /**< ATT Error: Write not permitted. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_PDU 0x0104 /**< ATT Error: Used in ATT as Invalid PDU. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHENTICATION 0x0105 /**< ATT Error: Authenticated link required. */ -#define BLE_GATT_STATUS_ATTERR_REQUEST_NOT_SUPPORTED 0x0106 /**< ATT Error: Used in ATT as Request Not Supported. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_OFFSET 0x0107 /**< ATT Error: Offset specified was past the end of the attribute. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHORIZATION 0x0108 /**< ATT Error: Used in ATT as Insufficient Authorisation. */ -#define BLE_GATT_STATUS_ATTERR_PREPARE_QUEUE_FULL 0x0109 /**< ATT Error: Used in ATT as Prepare Queue Full. */ -#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND 0x010A /**< ATT Error: Used in ATT as Attribute not found. */ -#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_LONG 0x010B /**< ATT Error: Attribute cannot be read or written using read/write blob requests. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_ENC_KEY_SIZE 0x010C /**< ATT Error: Encryption key size used is insufficient. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_ATT_VAL_LENGTH 0x010D /**< ATT Error: Invalid value size. */ -#define BLE_GATT_STATUS_ATTERR_UNLIKELY_ERROR 0x010E /**< ATT Error: Very unlikely error. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_ENCRYPTION 0x010F /**< ATT Error: Encrypted link required. */ -#define BLE_GATT_STATUS_ATTERR_UNSUPPORTED_GROUP_TYPE 0x0110 /**< ATT Error: Attribute type is not a supported grouping attribute. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_RESOURCES 0x0111 /**< ATT Error: Encrypted link required. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_BEGIN 0x0112 /**< ATT Error: Reserved for Future Use range #1 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_END 0x017F /**< ATT Error: Reserved for Future Use range #1 end. */ -#define BLE_GATT_STATUS_ATTERR_APP_BEGIN 0x0180 /**< ATT Error: Application range begin. */ -#define BLE_GATT_STATUS_ATTERR_APP_END 0x019F /**< ATT Error: Application range end. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_BEGIN 0x01A0 /**< ATT Error: Reserved for Future Use range #2 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_END 0x01DF /**< ATT Error: Reserved for Future Use range #2 end. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_BEGIN 0x01E0 /**< ATT Error: Reserved for Future Use range #3 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_END 0x01FC /**< ATT Error: Reserved for Future Use range #3 end. */ -#define BLE_GATT_STATUS_ATTERR_CPS_CCCD_CONFIG_ERROR 0x01FD /**< ATT Common Profile and Service Error: Client Characteristic Configuration Descriptor improperly configured. */ -#define BLE_GATT_STATUS_ATTERR_CPS_PROC_ALR_IN_PROG 0x01FE /**< ATT Common Profile and Service Error: Procedure Already in Progress. */ -#define BLE_GATT_STATUS_ATTERR_CPS_OUT_OF_RANGE 0x01FF /**< ATT Common Profile and Service Error: Out Of Range. */ -/** @} */ - - -/** @defgroup BLE_GATT_CPF_FORMATS Characteristic Presentation Formats - * @note Found at http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml - * @{ */ -#define BLE_GATT_CPF_FORMAT_RFU 0x00 /**< Reserved For Future Use. */ -#define BLE_GATT_CPF_FORMAT_BOOLEAN 0x01 /**< Boolean. */ -#define BLE_GATT_CPF_FORMAT_2BIT 0x02 /**< Unsigned 2-bit integer. */ -#define BLE_GATT_CPF_FORMAT_NIBBLE 0x03 /**< Unsigned 4-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT8 0x04 /**< Unsigned 8-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT12 0x05 /**< Unsigned 12-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT16 0x06 /**< Unsigned 16-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT24 0x07 /**< Unsigned 24-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT32 0x08 /**< Unsigned 32-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT48 0x09 /**< Unsigned 48-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT64 0x0A /**< Unsigned 64-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT128 0x0B /**< Unsigned 128-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT8 0x0C /**< Signed 2-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT12 0x0D /**< Signed 12-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT16 0x0E /**< Signed 16-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT24 0x0F /**< Signed 24-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT32 0x10 /**< Signed 32-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT48 0x11 /**< Signed 48-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT64 0x12 /**< Signed 64-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT128 0x13 /**< Signed 128-bit integer. */ -#define BLE_GATT_CPF_FORMAT_FLOAT32 0x14 /**< IEEE-754 32-bit floating point. */ -#define BLE_GATT_CPF_FORMAT_FLOAT64 0x15 /**< IEEE-754 64-bit floating point. */ -#define BLE_GATT_CPF_FORMAT_SFLOAT 0x16 /**< IEEE-11073 16-bit SFLOAT. */ -#define BLE_GATT_CPF_FORMAT_FLOAT 0x17 /**< IEEE-11073 32-bit FLOAT. */ -#define BLE_GATT_CPF_FORMAT_DUINT16 0x18 /**< IEEE-20601 format. */ -#define BLE_GATT_CPF_FORMAT_UTF8S 0x19 /**< UTF-8 string. */ -#define BLE_GATT_CPF_FORMAT_UTF16S 0x1A /**< UTF-16 string. */ -#define BLE_GATT_CPF_FORMAT_STRUCT 0x1B /**< Opaque Structure. */ -/** @} */ - -/** @defgroup BLE_GATT_CPF_NAMESPACES GATT Bluetooth Namespaces - * @{ - */ -#define BLE_GATT_CPF_NAMESPACE_BTSIG 0x01 -#define BLE_GATT_CPF_NAMESPACE_DESCRIPTION_UNKNOWN 0x0000 -/** @} */ - -/** @} */ - -/** @addtogroup BLE_GATT_STRUCTURES Structures - * @{ */ - -/**@brief GATT Characteristic Properties. */ -typedef struct -{ - /* Standard properties */ - uint8_t broadcast :1; /**< Broadcasting of value permitted. */ - uint8_t read :1; /**< Reading value permitted. */ - uint8_t write_wo_resp :1; /**< Writing value with Write Command permitted. */ - uint8_t write :1; /**< Writing value with Write Request permitted. */ - uint8_t notify :1; /**< Notications of value permitted. */ - uint8_t indicate :1; /**< Indications of value permitted. */ - uint8_t auth_signed_wr :1; /**< Writing value with Signed Write Command permitted. */ -} ble_gatt_char_props_t; - -/**@brief GATT Characteristic Extended Properties. */ -typedef struct -{ - /* Extended properties */ - uint8_t reliable_wr :1; /**< Writing value with Queued Write Request permitted. */ - uint8_t wr_aux :1; /**< Writing the Characteristic User Description permitted. */ -} ble_gatt_char_ext_props_t; - -#endif // BLE_GATT_H__ - -/** @} */ - -/** - @} - @} -*/
--- a/TARGET_HRM1017/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gattc.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,406 +0,0 @@ -/* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_GATTC Generic Attribute Profile (GATT) Client - @{ - @brief Definitions and prototypes for the GATT Client interface. - */ - -#ifndef BLE_GATTC_H__ -#define BLE_GATTC_H__ - -#include "ble_gatt.h" -#include "ble_types.h" -#include "ble_ranges.h" -#include "nrf_svc.h" - -/** @addtogroup BLE_GATTC_ENUMERATIONS Enumerations - * @{ */ - -/**@brief GATTC API SVC numbers. */ -enum BLE_GATTC_SVCS -{ - SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER = BLE_GATTC_SVC_BASE, /**< Primary Service Discovery. */ - SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, /**< Relationship Discovery. */ - SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, /**< Characteristic Discovery. */ - SD_BLE_GATTC_DESCRIPTORS_DISCOVER, /**< Characteristic Descriptor Discovery. */ - SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, /**< Read Characteristic Value by UUID. */ - SD_BLE_GATTC_READ, /**< Generic read. */ - SD_BLE_GATTC_CHAR_VALUES_READ, /**< Read multiple Characteristic Values. */ - SD_BLE_GATTC_WRITE, /**< Generic write. */ - SD_BLE_GATTC_HV_CONFIRM /**< Handle Value Confirmation. */ -}; - -/** @} */ - -/** @addtogroup BLE_GATTC_DEFINES Defines - * @{ */ - -/** @defgroup BLE_ERRORS_GATTC SVC return values specific to GATTC - * @{ */ -#define BLE_ERROR_GATTC_PROC_NOT_PERMITTED (NRF_GATTC_ERR_BASE + 0x000) -/** @} */ - -/**@brief Last Attribute Handle. */ -#define BLE_GATTC_HANDLE_END 0xFFFF - -/** @} */ - -/** @addtogroup BLE_GATTC_STRUCTURES Structures - * @{ */ - -/**@brief Operation Handle Range. */ -typedef struct -{ - uint16_t start_handle; /**< Start Handle. */ - uint16_t end_handle; /**< End Handle. */ -} ble_gattc_handle_range_t; - - -/**@brief GATT service. */ -typedef struct -{ - ble_uuid_t uuid; /**< Service UUID. */ - ble_gattc_handle_range_t handle_range; /**< Service Handle Range. */ -} ble_gattc_service_t; - - -/**@brief GATT include. */ -typedef struct -{ - uint16_t handle; /**< Include Handle. */ - ble_gattc_service_t included_srvc; /**< Handle of the included service. */ -} ble_gattc_include_t; - - -/**@brief GATT characteristic. */ -typedef struct -{ - ble_uuid_t uuid; /**< Characteristic UUID. */ - ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ - uint8_t char_ext_props : 1; /**< Extended properties present. */ - uint16_t handle_decl; /**< Handle of the Characteristic Declaration. */ - uint16_t handle_value; /**< Handle of the Characteristic Value. */ -} ble_gattc_char_t; - - -/**@brief GATT descriptor. */ -typedef struct -{ - uint16_t handle; /**< Descriptor Handle. */ - ble_uuid_t uuid; /**< Descriptor UUID. */ -} ble_gattc_desc_t; - - -/**@brief Write Parameters. */ -typedef struct -{ - uint8_t write_op; /**< Write Operation to be performed, see @ref BLE_GATT_WRITE_OPS. */ - uint16_t handle; /**< Handle to the attribute to be written. */ - uint16_t offset; /**< Offset in bytes. @note For WRITE_CMD and WRITE_REQ, offset must be 0. */ - uint16_t len; /**< Length of data in bytes. */ - uint8_t* p_value; /**< Pointer to the value data. */ - uint8_t flags; /**< Flags, see @ref BLE_GATT_EXEC_WRITE_FLAGS. */ -} ble_gattc_write_params_t; - - -/** - * @brief GATT Client Event IDs. - */ -enum BLE_GATTC_EVTS -{ - BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP = BLE_GATTC_EVT_BASE, /**< Primary Service Discovery Response event. */ - BLE_GATTC_EVT_REL_DISC_RSP, /**< Relationship Discovery Response event. */ - BLE_GATTC_EVT_CHAR_DISC_RSP, /**< Characteristic Discovery Response event. */ - BLE_GATTC_EVT_DESC_DISC_RSP, /**< Descriptor Discovery Response event. */ - BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP, /**< Read By UUID Response event. */ - BLE_GATTC_EVT_READ_RSP, /**< Read Response event. */ - BLE_GATTC_EVT_CHAR_VALS_READ_RSP, /**< Read multiple Response event. */ - BLE_GATTC_EVT_WRITE_RSP, /**< Write Response event. */ - BLE_GATTC_EVT_HVX, /**< Handle Value Notification or Indication event. */ - BLE_GATTC_EVT_TIMEOUT /**< Timeout event. */ -}; - -/**@brief Event structure for BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Service count. */ - ble_gattc_service_t services[1]; /**< Service data, variable length. */ -} ble_gattc_evt_prim_srvc_disc_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_REL_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Include count. */ - ble_gattc_include_t includes[1]; /**< Include data, variable length. */ -} ble_gattc_evt_rel_disc_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_CHAR_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Characteristic count. */ - ble_gattc_char_t chars[1]; /**< Characteristic data, variable length. */ -} ble_gattc_evt_char_disc_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_DESC_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Descriptor count. */ - ble_gattc_desc_t descs[1]; /**< Descriptor data, variable length. */ -} ble_gattc_evt_desc_disc_rsp_t; - -/**@brief GATT read by UUID handle value pair. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint8_t *p_value; /**< Pointer to value, variable length (length available as value_len in ble_gattc_evt_read_by_uuid_rsp_t). - Please note that this pointer is absolute to the memory provided by the user when retrieving the event, - so it will effectively point to a location inside the handle_value array. */ -} ble_gattc_handle_value_t; - -/**@brief Event structure for BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP. */ -typedef struct -{ - uint16_t count; /**< Handle-Value Pair Count. */ - uint16_t value_len; /**< Length of the value in Handle-Value(s) list. */ - ble_gattc_handle_value_t handle_value[1]; /**< Handle-Value(s) list, variable length. */ -} ble_gattc_evt_char_val_by_uuid_read_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_READ_RSP. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint16_t offset; /**< Offset of the attribute data. */ - uint16_t len; /**< Attribute data length. */ - uint8_t data[1]; /**< Attribute data, variable length. */ -} ble_gattc_evt_read_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_CHAR_VALS_READ_RSP. */ -typedef struct -{ - uint16_t len; /**< Concatenated Attribute values length. */ - uint8_t values[1]; /**< Attribute values, variable length. */ -} ble_gattc_evt_char_vals_read_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_WRITE_RSP. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint8_t write_op; /**< Type of write operation, see @ref BLE_GATT_WRITE_OPS. */ - uint16_t offset; /**< Data Offset. */ - uint16_t len; /**< Data length. */ - uint8_t data[1]; /**< Data, variable length. */ -} ble_gattc_evt_write_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_HVX. */ -typedef struct -{ - uint16_t handle; /**< Handle to which the HVx operation applies. */ - uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ - uint16_t len; /**< Attribute data length. */ - uint8_t data[1]; /**< Attribute data, variable length. */ -} ble_gattc_evt_hvx_t; - -/**@brief Event structure for BLE_GATTC_EVT_TIMEOUT. */ -typedef struct -{ - uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ -} ble_gattc_evt_timeout_t; - -/**@brief GATTC event type. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occured. */ - uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ - uint16_t error_handle; /**< In case of error: The handle causing the error. In all other cases BLE_GATT_HANDLE_INVALID. */ - union - { - ble_gattc_evt_prim_srvc_disc_rsp_t prim_srvc_disc_rsp; /**< Primary Service Discovery Response Event Parameters. */ - ble_gattc_evt_rel_disc_rsp_t rel_disc_rsp; /**< Relationship Discovery Response Event Parameters. */ - ble_gattc_evt_char_disc_rsp_t char_disc_rsp; /**< Characteristic Discovery Response Event Parameters. */ - ble_gattc_evt_desc_disc_rsp_t desc_disc_rsp; /**< Descriptor Discovery Response Event Parameters. */ - ble_gattc_evt_char_val_by_uuid_read_rsp_t char_val_by_uuid_read_rsp; /**< Characteristic Value Read by UUID Response Event Parameters. */ - ble_gattc_evt_read_rsp_t read_rsp; /**< Read Response Event Parameters. */ - ble_gattc_evt_char_vals_read_rsp_t char_vals_read_rsp; /**< Characteristic Values Read Response Event Parameters. */ - ble_gattc_evt_write_rsp_t write_rsp; /**< Write Response Event Parameters. */ - ble_gattc_evt_hvx_t hvx; /**< Handle Value Notification/Indication Event Parameters. */ - ble_gattc_evt_timeout_t timeout; /**< Timeout Event Parameters. */ - } params; /**< Event Parameters. @note Only valid if @ref gatt_status == BLE_GATT_STATUS_SUCCESS. */ -} ble_gattc_evt_t; -/** @} */ - -/** @addtogroup BLE_GATTC_FUNCTIONS Functions - * @{ */ - -/**@brief Initiate or continue a GATT Primary Service Discovery procedure. - * - * @details This function initiates a Primary Service discovery, starting from the supplied handle. - * If the last service has not been reached, this must be called again with an updated start handle value to continue the search. - * - * @note If any of the discovered services have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with - * type BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] start_handle Handle to start searching from. - * @param[in] p_srvc_uuid Pointer to the service UUID to be found. If it is NULL, all primary services will be returned. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Primary Service Discovery procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER, uint32_t, sd_ble_gattc_primary_services_discover(uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const * const p_srvc_uuid)); - - -/**@brief Initiate or continue a GATT Relationship Discovery procedure. - * - * @details This function initiates the Find Included Services sub-procedure. If the last included service has not been reached, - * this must be called again with an updated handle range to continue the search. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Relationship Discovery procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, uint32_t, sd_ble_gattc_relationships_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); - - -/**@brief Initiate or continue a GATT Characteristic Discovery procedure. - * - * @details This function initiates a Characteristic discovery procedure. If the last Characteristic has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @note If any of the discovered characteristics have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with - * type BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Characteristic Discovery procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, uint32_t, sd_ble_gattc_characteristics_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); - - -/**@brief Initiate or continue a GATT Characteristic Descriptor Discovery procedure. - * - * @details This function initiates the Characteristic Descriptor discovery procedure. If the last Descriptor has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Characteristic to perform this procedure on. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Descriptor Discovery procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_DESCRIPTORS_DISCOVER, uint32_t, sd_ble_gattc_descriptors_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); - - -/**@brief Initiate or continue a GATT Read using Characteristic UUID procedure. - * - * @details This function initiates the Read using Characteristic UUID procedure. If the last Characteristic has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_uuid Pointer to a Characteristic value UUID to read. - * @param[in] p_handle_range A pointer to the range of handles to perform this procedure on. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Read using Characteristic UUID procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, uint32_t, sd_ble_gattc_char_value_by_uuid_read(uint16_t conn_handle, ble_uuid_t const * const p_uuid, ble_gattc_handle_range_t const * const p_handle_range)); - - -/**@brief Initiate or continue a GATT Read (Long) Characteristic or Descriptor procedure. - * - * @details This function initiates a GATT Read (Long) Characteristic or Descriptor procedure. If the Characteristic or Descriptor - * to be read is longer than GATT_MTU - 1, this function must be called multiple times with appropriate offset to read the - * complete value. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] handle The handle of the attribute to be read. - * @param[in] offset Offset into the attribute value to be read. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Read (Long) procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_READ, uint32_t, sd_ble_gattc_read(uint16_t conn_handle, uint16_t handle, uint16_t offset)); - - -/**@brief Initiate a GATT Read Multiple Characteristic Values procedure. - * - * @details This function initiates a GATT Read Multiple Characteristic Values procedure. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. - * @param[in] handle_count The number of handles in p_handles. - * - * @return @ref NRF_SUCCESS Successfully started the Read Multiple Characteristic Values procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_CHAR_VALUES_READ, uint32_t, sd_ble_gattc_char_values_read(uint16_t conn_handle, uint16_t const * const p_handles, uint16_t handle_count)); - - -/**@brief Perform a Write (Characteristic Value or Descriptor, with or without response, signed or not, long or reliable) procedure. - * - * @details This function can perform all write procedures described in GATT. - * - * @note It is important to note that a write without response will <b>consume an application buffer</b>, and will therefore - * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. A write on the other hand will use the - * standard client internal buffer and thus will only generate a @ref BLE_GATTC_EVT_WRITE_RSP event as soon as the write response - * has been received from the peer. Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_write_params A pointer to a write parameters structure. - * - * @return @ref NRF_SUCCESS Successfully started the Write procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - * @return @ref NRF_ERROR_BUSY Procedure already in progress. - * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers left. - */ -SVCALL(SD_BLE_GATTC_WRITE, uint32_t, sd_ble_gattc_write(uint16_t conn_handle, ble_gattc_write_params_t const * const p_write_params)); - - -/**@brief Send a Handle Value Confirmation to the GATT Server. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] handle The handle of the attribute in the indication. - * - * @return @ref NRF_SUCCESS Successfully queued the Handle Value Confirmation for transmission. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_STATE No Indication pending to be confirmed. - * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle. - * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers left. - */ -SVCALL(SD_BLE_GATTC_HV_CONFIRM, uint32_t, sd_ble_gattc_hv_confirm(uint16_t conn_handle, uint16_t handle)); - -/** @} */ - -#endif /* BLE_GATTC_H__ */ - -/** - @} - @} -*/
--- a/TARGET_HRM1017/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gatts.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,566 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_GATTS Generic Attribute Profile (GATT) Server - @{ - @brief Definitions and prototypes for the GATTS interface. - */ - -#ifndef BLE_GATTS_H__ -#define BLE_GATTS_H__ - -#include "ble_types.h" -#include "ble_ranges.h" -#include "ble_l2cap.h" -#include "ble_gap.h" -#include "ble_gatt.h" -#include "nrf_svc.h" - -/** @addtogroup BLE_GATTS_ENUMERATIONS Enumerations - * @{ */ - -/** - * @brief GATTS API SVC numbers. - */ -enum BLE_GATTS_SVCS -{ - SD_BLE_GATTS_SERVICE_ADD = BLE_GATTS_SVC_BASE, /**< Add a service. */ - SD_BLE_GATTS_INCLUDE_ADD, /**< Add an included service. */ - SD_BLE_GATTS_CHARACTERISTIC_ADD, /**< Add a characteristic. */ - SD_BLE_GATTS_DESCRIPTOR_ADD, /**< Add a generic attribute. */ - SD_BLE_GATTS_VALUE_SET, /**< Set an attribute value. */ - SD_BLE_GATTS_VALUE_GET, /**< Get an attribute value. */ - SD_BLE_GATTS_HVX, /**< Handle Value Notification or Indication. */ - SD_BLE_GATTS_SERVICE_CHANGED, /**< Perform a Service Changed Indication to one or more peers. */ - SD_BLE_GATTS_RW_AUTHORIZE_REPLY, /**< Reply to an authorization request for a read or write operation on one or more attributes. */ - SD_BLE_GATTS_SYS_ATTR_SET, /**< Set the persistent system attributes for a connection. */ - SD_BLE_GATTS_SYS_ATTR_GET, /**< Get updated persistent system attributes after terminating a connection. */ -}; - -/** @} */ - -/** @addtogroup BLE_GATTS_DEFINES Defines - * @{ */ - -/** @brief Only the default MTU size of 23 is currently supported. */ -#define GATT_RX_MTU 23 - -/** @defgroup BLE_ERRORS_GATTS SVC return values specific to GATTS - * @{ */ -#define BLE_ERROR_GATTS_INVALID_ATTR_TYPE (NRF_GATTS_ERR_BASE + 0x000) /**< Invalid attribute type. */ -#define BLE_ERROR_GATTS_SYS_ATTR_MISSING (NRF_GATTS_ERR_BASE + 0x001) /**< System Attributes missing. */ -/** @} */ - -/** @defgroup BLE_GATTS_ATTR_LENS_MAX Maximum attribute lengths - * @{ */ -#define BLE_GATTS_FIX_ATTR_LEN_MAX (510) /**< Maximum length for fixed length Attribute Values. */ -#define BLE_GATTS_VAR_ATTR_LEN_MAX (512) /**< Maximum length for variable length Attribute Values. */ -/** @} */ - -/** @defgroup BLE_GATTS_SRVC_TYPES GATT Server Service Types - * @{ */ -#define BLE_GATTS_SRVC_TYPE_INVALID 0x00 /**< Invalid Service Type. */ -#define BLE_GATTS_SRVC_TYPE_PRIMARY 0x01 /**< Primary Service. */ -#define BLE_GATTS_SRVC_TYPE_SECONDARY 0x02 /**< Secondary Type. */ -/** @} */ - - -/** @defgroup BLE_GATTS_ATTR_TYPES GATT Server Attribute Types - * @{ */ -#define BLE_GATTS_ATTR_TYPE_INVALID 0x00 /**< Invalid Attribute Type. */ -#define BLE_GATTS_ATTR_TYPE_PRIM_SRVC_DECL 0x01 /**< Primary Service Declaration. */ -#define BLE_GATTS_ATTR_TYPE_SEC_SRVC_DECL 0x02 /**< Secondary Service Declaration. */ -#define BLE_GATTS_ATTR_TYPE_INC_DECL 0x03 /**< Include Declaration. */ -#define BLE_GATTS_ATTR_TYPE_CHAR_DECL 0x04 /**< Characteristic Declaration. */ -#define BLE_GATTS_ATTR_TYPE_CHAR_VAL 0x05 /**< Characteristic Value. */ -#define BLE_GATTS_ATTR_TYPE_DESC 0x06 /**< Descriptor. */ -#define BLE_GATTS_ATTR_TYPE_OTHER 0x07 /**< Other, non-GATT specific type. */ -/** @} */ - - -/** @defgroup BLE_GATTS_OPS GATT Server Operations - * @{ */ -#define BLE_GATTS_OP_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATTS_OP_WRITE_REQ 0x01 /**< Write Request. */ -#define BLE_GATTS_OP_WRITE_CMD 0x02 /**< Write Command. */ -#define BLE_GATTS_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ -#define BLE_GATTS_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ -#define BLE_GATTS_OP_EXEC_WRITE_REQ_CANCEL 0x05 /**< Execute Write Request: Cancel all prepared writes. */ -#define BLE_GATTS_OP_EXEC_WRITE_REQ_NOW 0x06 /**< Execute Write Request: Immediately execute all prepared writes. */ -/** @} */ - -/** @defgroup BLE_GATTS_VLOCS GATT Value Locations - * @{ */ -#define BLE_GATTS_VLOC_INVALID 0x00 /**< Invalid Location. */ -#define BLE_GATTS_VLOC_STACK 0x01 /**< Attribute Value is located in stack memory, no user memory is required. */ -#define BLE_GATTS_VLOC_USER 0x02 /**< Attribute Value is located in user memory. This requires the user to maintain a valid buffer through the lifetime of the attribute, since the stack - will read and write directly to the memory using the pointer provided in the APIs. There are no alignment requirements for the buffer. */ -/** @} */ - -/** @defgroup BLE_GATTS_AUTHORIZE_TYPES GATT Server Authorization Types - * @{ */ -#define BLE_GATTS_AUTHORIZE_TYPE_INVALID 0x00 /**< Invalid Type. */ -#define BLE_GATTS_AUTHORIZE_TYPE_READ 0x01 /**< Authorize a Read Operation. */ -#define BLE_GATTS_AUTHORIZE_TYPE_WRITE 0x02 /**< Authorize a Write Request Operation. */ -/** @} */ - - -/** @} */ - -/** @addtogroup BLE_GATTS_STRUCTURES Structures - * @{ */ - -/** - * @brief BLE GATTS init options - */ -typedef struct -{ - uint8_t service_changed:1; /**< Include the Service Changed characteristic in the local attributes. */ -} ble_gatts_enable_params_t; - -/**@brief Attribute metadata. */ -typedef struct -{ - ble_gap_conn_sec_mode_t read_perm; /**< Read permissions. */ - ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ - uint8_t vlen :1; /**< Variable length attribute. */ - uint8_t vloc :2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ - uint8_t rd_auth :1; /**< Read Authorization and value will be requested from the application on every read operation. */ - uint8_t wr_auth :1; /**< Write Authorization will be requested from the application on every Write Request operation (but not Write Command). */ -} ble_gatts_attr_md_t; - - -/**@brief GATT Attribute. */ -typedef struct -{ - ble_uuid_t* p_uuid; /**< Pointer to the attribute UUID. */ - ble_gatts_attr_md_t* p_attr_md; /**< Pointer to the attribute metadata structure. */ - uint16_t init_len; /**< Initial attribute value length in bytes. */ - uint16_t init_offs; /**< Initial attribute value offset in bytes. If different from zero, the first init_offs bytes of the attribute value will be left uninitialized. */ - uint16_t max_len; /**< Maximum attribute value length in bytes, see @ref BLE_GATTS_ATTR_LENS_MAX for maximum values. */ - uint8_t* p_value; /**< Pointer to the attribute data. Please note that if the @ref BLE_GATTS_VLOC_USER value location is selected in the attribute metadata, this will have to point to a buffer - that remains valid through the lifetime of the attribute. This excludes usage of automatic variables that may go out of scope or any other temporary location. - The stack may access that memory directly without the application's knowledge. */ -} ble_gatts_attr_t; - - -/**@brief GATT Attribute Context. */ -typedef struct -{ - ble_uuid_t srvc_uuid; /**< Service UUID. */ - ble_uuid_t char_uuid; /**< Characteristic UUID if applicable (BLE_UUID_TYPE_UNKNOWN if N/A). */ - ble_uuid_t desc_uuid; /**< Descriptor UUID if applicable (BLE_UUID_TYPE_UNKNOWN if N/A). */ - uint16_t srvc_handle; /**< Service Handle. */ - uint16_t value_handle; /**< Characteristic Handle if applicable (BLE_GATT_HANDLE_INVALID if N/A). */ - uint8_t type; /**< Attribute Type, see @ref BLE_GATTS_ATTR_TYPES. */ -} ble_gatts_attr_context_t; - - -/**@brief GATT Characteristic Presentation Format. */ -typedef struct -{ - uint8_t format; /**< Format of the value, see @ref BLE_GATT_CPF_FORMATS. */ - int8_t exponent; /**< Exponent for integer data types. */ - uint16_t unit; /**< UUID from Bluetooth Assigned Numbers. */ - uint8_t name_space; /**< Namespace from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ - uint16_t desc; /**< Namespace description from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ -} ble_gatts_char_pf_t; - - -/**@brief GATT Characteristic metadata. */ -typedef struct -{ - ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ - ble_gatt_char_ext_props_t char_ext_props; /**< Characteristic Extended Properties. */ - uint8_t* p_char_user_desc; /**< Pointer to a UTF-8, NULL if the descriptor is not required. */ - uint16_t char_user_desc_max_size; /**< The maximum size in bytes of the user description descriptor. */ - uint16_t char_user_desc_size; /**< The size of the user description, must be smaller or equal to char_user_desc_max_size. */ - ble_gatts_char_pf_t* p_char_pf; /**< Pointer to a presentation format structure or NULL if the descriptor is not required. */ - ble_gatts_attr_md_t* p_user_desc_md; /**< Attribute metadata for the User Description descriptor, or NULL for default values. */ - ble_gatts_attr_md_t* p_cccd_md; /**< Attribute metadata for the Client Characteristic Configuration Descriptor, or NULL for default values. */ - ble_gatts_attr_md_t* p_sccd_md; /**< Attribute metadata for the Server Characteristic Configuration Descriptor, or NULL for default values. */ -} ble_gatts_char_md_t; - - -/**@brief GATT Characteristic Definition Handles. */ -typedef struct -{ - uint16_t value_handle; /**< Handle to the characteristic value. */ - uint16_t user_desc_handle; /**< Handle to the User Description descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ - uint16_t cccd_handle; /**< Handle to the Client Characteristic Configuration Descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ - uint16_t sccd_handle; /**< Handle to the Server Characteristic Configuration Descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ -} ble_gatts_char_handles_t; - - -/**@brief GATT HVx parameters. */ -typedef struct -{ - uint16_t handle; /**< Characteristic Value Handle. */ - uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ - uint16_t offset; /**< Offset within the attribute value. */ - uint16_t* p_len; /**< Length in bytes to be written, length in bytes written after successful return. */ - uint8_t* p_data; /**< Actual data content, use NULL to use the current attribute value. */ -} ble_gatts_hvx_params_t; - -/**@brief GATT Read Authorization parameters. */ -typedef struct -{ - uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ - uint8_t update : 1; /**< If set, data supplied in p_data will be used in the ATT response. */ - uint16_t offset; /**< Offset of the attribute value being updated. */ - uint16_t len; /**< Length in bytes of the value in p_data pointer, see @ref BLE_GATTS_ATTR_LENS_MAX. */ - uint8_t* p_data; /**< Pointer to new value used to update the attribute value. */ -} ble_gatts_read_authorize_params_t; - -/**@brief GATT Write Authorisation parameters. */ -typedef struct -{ - uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ -} ble_gatts_write_authorize_params_t; - -/**@brief GATT Read or Write Authorize Reply parameters. */ -typedef struct -{ - uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ - union { - ble_gatts_read_authorize_params_t read; /**< Read authorization parameters. */ - ble_gatts_write_authorize_params_t write; /**< Write authorization parameters. */ - } params; -} ble_gatts_rw_authorize_reply_params_t; - - -/** - * @brief GATT Server Event IDs. - */ -enum BLE_GATTS_EVTS -{ - BLE_GATTS_EVT_WRITE = BLE_GATTS_EVT_BASE, /**< Write operation performed. */ - BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST, /**< Read/Write Authorization request. */ - BLE_GATTS_EVT_SYS_ATTR_MISSING, /**< A persistent system attribute access is pending, awaiting a sd_ble_gatts_sys_attr_set(). */ - BLE_GATTS_EVT_HVC, /**< Handle Value Confirmation. */ - BLE_GATTS_EVT_SC_CONFIRM, /**< Service Changed Confirmation. */ - BLE_GATTS_EVT_TIMEOUT /**< Timeout. */ -}; - - -/**@brief Event structure for BLE_GATTS_EVT_WRITE. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint8_t op; /**< Type of write operation, see @ref BLE_GATTS_OPS. */ - ble_gatts_attr_context_t context; /**< Attribute Context. */ - uint16_t offset; /**< Offset for the write operation. */ - uint16_t len; /**< Length of the incoming data. */ - uint8_t data[1]; /**< Incoming data, variable length. */ -} ble_gatts_evt_write_t; - -/**@brief Event structure for authorize read request. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - ble_gatts_attr_context_t context; /**< Attribute Context. */ - uint16_t offset; /**< Offset for the read operation. */ -} ble_gatts_evt_read_t; - -/**@brief Event structure for BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST. */ -typedef struct -{ - uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ - union { - ble_gatts_evt_read_t read; /**< Attribute Read Parameters. */ - ble_gatts_evt_write_t write; /**< Attribute Write Parameters. */ - } request; -} ble_gatts_evt_rw_authorize_request_t; - -/**@brief Event structure for BLE_GATTS_EVT_SYS_ATTR_MISSING. */ -typedef struct -{ - uint8_t hint; -} ble_gatts_evt_sys_attr_missing_t; - - -/**@brief Event structure for BLE_GATTS_EVT_HVC. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ -} ble_gatts_evt_hvc_t; - -/**@brief Event structure for BLE_GATTS_EVT_TIMEOUT. */ -typedef struct -{ - uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ -} ble_gatts_evt_timeout_t; - - -/**@brief GATT Server event callback event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occurred. */ - union - { - ble_gatts_evt_write_t write; /**< Write Event Parameters. */ - ble_gatts_evt_rw_authorize_request_t authorize_request; /**< Read or Write Authorize Request Parameters. */ - ble_gatts_evt_sys_attr_missing_t sys_attr_missing; /**< System attributes missing. */ - ble_gatts_evt_hvc_t hvc; /**< Handle Value Confirmation Event Parameters. */ - ble_gatts_evt_timeout_t timeout; /**< Timeout Event. */ - } params; -} ble_gatts_evt_t; - -/** @} */ - -/** @addtogroup BLE_GATTS_FUNCTIONS Functions - * @{ */ - -/**@brief Add a service declaration to the local server ATT table. - * - * @param[in] type Toggles between primary and secondary services, see @ref BLE_GATTS_SRVC_TYPES. - * @param[in] p_uuid Pointer to service UUID. - * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @note Secondary Services are only relevant in the context of the entity that references them, it is therefore forbidden to - * add a secondary service declaration that is not referenced by another service later in the ATT table. - * - * @return @ref NRF_SUCCESS Successfully added a service declaration. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, Vendor Specific UUIDs need to be present in the table. - * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GATTS_SERVICE_ADD, uint32_t, sd_ble_gatts_service_add(uint8_t type, ble_uuid_t const*const p_uuid, uint16_t *const p_handle)); - - -/**@brief Add an include declaration to the local server ATT table. - * - * @note It is currently only possible to add an include declaration to the last added service (i.e. only sequential addition is supported at this time). - * - * @note The included service must already be present in the ATT table prior to this call. - * - * @param[in] service_handle Handle of the service where the included service is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] inc_srvc_handle Handle of the included service. - * @param[out] p_include_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @return @ref NRF_SUCCESS Successfully added an include declaration. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, handle values need to match previously added services. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, self inclusions are not allowed. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. - */ -SVCALL(SD_BLE_GATTS_INCLUDE_ADD, uint32_t, sd_ble_gatts_include_add(uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *const p_include_handle)); - - -/**@brief Add a characteristic declaration, a characteristic value declaration and optional characteristic descriptor declarations to the local server ATT table. - * - * @note It is currently only possible to add a characteristic to the last added service (i.e. only sequential addition is supported at this time). - * - * @note Several restrictions apply to the parameters, such as matching permissions between the user description descriptor and the writeable auxiliaries bits, - * readable (no security) and writeable (selectable) CCCDs and SCCDs and valid presentation format values. - * - * @note If no metadata is provided for the optional descriptors, their permissions will be derived from the characteristic permissions. - * - * @param[in] service_handle Handle of the service where the characteristic is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] p_char_md Characteristic metadata. - * @param[in] p_attr_char_value Pointer to the attribute structure corresponding to the characteristic value. - * @param[out] p_handles Pointer to the structure where the assigned handles will be stored. - * - * @return @ref NRF_SUCCESS Successfully added a characteristic. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, service handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required. - * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - */ -SVCALL(SD_BLE_GATTS_CHARACTERISTIC_ADD, uint32_t, sd_ble_gatts_characteristic_add(uint16_t service_handle, ble_gatts_char_md_t const*const p_char_md, ble_gatts_attr_t const*const p_attr_char_value, ble_gatts_char_handles_t *const p_handles)); - - -/**@brief Add a descriptor to the local server ATT table. - * - * @note It is currently only possible to add a descriptor to the last added characteristic (i.e. only sequential addition is supported at this time). - * - * @param[in] char_handle Handle of the characteristic where the descriptor is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] p_attr Pointer to the attribute structure. - * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @return @ref NRF_SUCCESS Successfully added a descriptor. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, characteristic handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, a characteristic context is required. - * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - */ -SVCALL(SD_BLE_GATTS_DESCRIPTOR_ADD, uint32_t, sd_ble_gatts_descriptor_add(uint16_t char_handle, ble_gatts_attr_t const * const p_attr, uint16_t* const p_handle)); - -/**@brief Set the value of a given attribute. - * - * @param[in] handle Attribute handle. - * @param[in] offset Offset in bytes to write from. - * @param[in,out] p_len Length in bytes to be written, length in bytes written after successful return. - * @param[in] p_value Pointer to a buffer (at least len bytes long) containing the desired attribute value. If value is stored in user memory, only the attribute length is updated when p_value == NULL. - * - * @return @ref NRF_SUCCESS Successfully set the value of the attribute. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. - * @return @ref NRF_ERROR_FORBIDDEN Forbidden handle supplied, certain attributes are not modifiable by the application. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - */ -SVCALL(SD_BLE_GATTS_VALUE_SET, uint32_t, sd_ble_gatts_value_set(uint16_t handle, uint16_t offset, uint16_t* const p_len, uint8_t const * const p_value)); - -/**@brief Get the value of a given attribute. - * - * @param[in] handle Attribute handle. - * @param[in] offset Offset in bytes to read from. - * @param[in,out] p_len Length in bytes to be read, total length of attribute value (in bytes, starting from offset) after successful return. - * @param[in,out] p_data Pointer to a buffer (at least len bytes long) where to store the attribute value. Set to NULL to obtain the complete length of attribute value. - * - * @note If the attribute value is longer than the size of the supplied buffer, - * p_len will return the total attribute value length (excluding offset), - * and not the number of bytes actually returned in p_data. - * The application may use this information to allocate a suitable buffer size. - * - * @return @ref NRF_SUCCESS Successfully retrieved the value of the attribute. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. - */ -SVCALL(SD_BLE_GATTS_VALUE_GET, uint32_t, sd_ble_gatts_value_get(uint16_t handle, uint16_t offset, uint16_t *const p_len, uint8_t* const p_data)); - -/**@brief Notify or Indicate an attribute value. - * - * @details This function checks for the relevant Client Characteristic Configuration descriptor value to verify that the relevant operation - * (notification or indication) has been enabled by the client. It is also able to update the attribute value before issuing the PDU, so that - * the application can atomically perform a value update and a server initiated transaction with a single API call. - * If the application chooses to indicate an attribute value, a @ref BLE_GATTS_EVT_HVC will be sent up as soon as the confirmation arrives from - * the peer. - * - * @note The local attribute value may be updated even if an outgoing packet is not sent to the peer due to an error during execution. - * When receiveing the error codes @ref NRF_ERROR_INVALID_STATE, @ref NRF_ERROR_BUSY, @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING and - * @ref BLE_ERROR_NO_TX_BUFFERS the ATT table has been updated. - * The caller can check whether the value has been updated by looking at the contents of *(p_hvx_params->p_len). - * - * @note It is important to note that a notification will <b>consume an application buffer</b>, and will therefore - * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. An indication on the other hand will use the - * standard server internal buffer and thus will only generate a @ref BLE_GATTS_EVT_HVC event as soon as the confirmation - * has been received from the peer. Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_hvx_params Pointer to an HVx parameters structure. If the p_data member contains a non-NULL pointer the attribute value will be updated with - * the contents pointed by it before sending the notification or indication. - * - * @return @ref NRF_SUCCESS Successfully queued a notification or indication for transmission, and optionally updated the attribute value. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied. Only attributes added directly by the application are available to notify and indicate. - * @return @ref BLE_ERROR_GATTS_INVALID_ATTR_TYPE Invalid attribute type(s) supplied, only characteristic values may be notified and indicated. - * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, notifications or indications must be enabled in the CCCD. - * @return @ref NRF_ERROR_BUSY Procedure already in progress. - * @return @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. - * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers to send the data, applies only to notifications. - */ -SVCALL(SD_BLE_GATTS_HVX, uint32_t, sd_ble_gatts_hvx(uint16_t conn_handle, ble_gatts_hvx_params_t const*const p_hvx_params)); - -/**@brief Indicate the Service Changed attribute value. - * - * @details This call will send a Handle Value Indication to one or more peers connected to inform them that the attribute - * table layout has changed. As soon as the peer has confirmed the indication, a @ref BLE_GATTS_EVT_SC_CONFIRM event will - * be issued. - * - * @note Some of the restrictions and limitations that apply to @ref sd_ble_gatts_hvx also apply here. - * - * @param[in] conn_handle Connection handle. - * @param[in] start_handle Start of affected attribute handle range. - * @param[in] end_handle End of affected attribute handle range. - * - * @return @ref NRF_SUCCESS Successfully queued the Service Changed indication for transmission. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied, handles must be in the range populated by the application. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, notifications or indications must be enabled in the CCCD. - * @return @ref NRF_ERROR_BUSY Procedure already in progress. - * @return @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. - */ -SVCALL(SD_BLE_GATTS_SERVICE_CHANGED, uint32_t, sd_ble_gatts_service_changed(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle)); - -/**@brief Respond to a Read/Write authorization request. - * - * @note This call should only be used as a response to a @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST event issued to the application. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_rw_authorize_reply_params Pointer to a structure with the attribute provided by the application. - * - * @return @ref NRF_SUCCESS Successfully queued a response to the peer, and in the case of a write operation, ATT table updated. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_STATE No authorization request pending. - * @return @ref NRF_ERROR_INVALID_PARAM Authorization op invalid, - * or for Read Authorization reply: requested handles not replied with, - * or for Write Authorization reply: handle supplied does not match requested handle. - */ -SVCALL(SD_BLE_GATTS_RW_AUTHORIZE_REPLY, uint32_t, sd_ble_gatts_rw_authorize_reply(uint16_t conn_handle, ble_gatts_rw_authorize_reply_params_t const*const p_rw_authorize_reply_params)); - - -/**@brief Update persistent system attribute information. - * - * @details Supply to the stack information about persistent system attributes. - * This call is legal in the connected state only, and is usually - * made immediately after a connection is established and the bond identified. - * usually as a response to a BLE_GATTS_EVT_SYS_ATTR_MISSING. - * - * p_sysattrs may point directly to the application's stored copy of the struct. - * If the pointer is NULL, the system attribute info is initialized, assuming that - * the application does not have any previously saved data for this bond. - * - * @note The state of persistent system attributes is reset upon connection and then remembered for its duration. - * - * @note If this call returns with an error code different from @ref NRF_SUCCESS, the storage of persistent system attributes may have been completed only partially. - * This means that the state of the attribute table is undefined, and the application should either provide a new set of attributes using this same call or - * reset the SoftDevice to return to a known state. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_sys_attr_data Pointer to a saved copy of system attributes supplied to the stack, or NULL. - * @param[in] len Size of data pointed by p_sys_attr_data, in octets. - * - * @return @ref NRF_SUCCESS Successfully set the system attribute information. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_DATA Invalid data supplied, the data should be exactly the same as retrieved with @ref sd_ble_gatts_sys_attr_get. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GATTS_SYS_ATTR_SET, uint32_t, sd_ble_gatts_sys_attr_set(uint16_t conn_handle, uint8_t const*const p_sys_attr_data, uint16_t len)); - - -/**@brief Retrieve persistent system attribute information from the stack. - * - * @details This call is used to retrieve information about values to be stored perisistently by the application - * after a connection has been terminated. When a new connection is made to the same bond, the values - * should be restored using @ref sd_ble_gatts_sys_attr_set. - * The data should be read before any new advertising is started, or any new connection established. The connection handle for - * the previous now defunct connection will remain valid until a new one is created to allow this API call to refer to it. - * - * @param[in] conn_handle Connection handle of the recently terminated connection. - * @param[in] p_sys_attr_data Pointer to a buffer where updated information about system attributes will be filled in. NULL can be provided to - * obtain the length of the data - * @param[in,out] p_len Size of application buffer if p_sys_attr_data is not NULL. Unconditially updated to actual length of system attribute data. - * - * @return @ref NRF_SUCCESS Successfully retrieved the system attribute information. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_DATA_SIZE The system attribute information did not fit into the provided buffer. - */ -SVCALL(SD_BLE_GATTS_SYS_ATTR_GET, uint32_t, sd_ble_gatts_sys_attr_get(uint16_t conn_handle, uint8_t * const p_sys_attr_data, uint16_t* const p_len)); - -/** @} */ - -#endif // BLE_GATTS_H__ - -/** - @} -*/
--- a/TARGET_HRM1017/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_hci.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,96 +0,0 @@ -/* - Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - - The information contained herein is confidential property of Nordic Semiconductor. The use, - copying, transfer or disclosure of such information is prohibited except by express written - agreement with Nordic Semiconductor. - */ -/** - @addtogroup BLE_COMMON - @{ -*/ - - -#ifndef BLE_HCI_H__ -#define BLE_HCI_H__ - -/** @defgroup BLE_HCI_STATUS_CODES Bluetooth status codes - * @{ */ - -#define BLE_HCI_STATUS_CODE_SUCCESS 0x00 -#define BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND 0x01 -#define BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER 0x02 -/*0x03 Hardware Failure -0x04 Page Timeout -*/ -#define BLE_HCI_AUTHENTICATION_FAILURE 0x05 -#define BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING 0x06 -#define BLE_HCI_MEMORY_CAPACITY_EXCEEDED 0x07 -#define BLE_HCI_CONNECTION_TIMEOUT 0x08 -/*0x09 Connection Limit Exceeded -0x0A Synchronous Connection Limit To A Device Exceeded -0x0B ACL Connection Already Exists*/ -#define BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED 0x0C -/*0x0D Connection Rejected due to Limited Resources -0x0E Connection Rejected Due To Security Reasons -0x0F Connection Rejected due to Unacceptable BD_ADDR -0x10 Connection Accept Timeout Exceeded -0x11 Unsupported Feature or Parameter Value*/ -#define BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS 0x12 -#define BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION 0x13 -#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES 0x14 -#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF 0x15 -#define BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION 0x16 -/* -0x17 Repeated Attempts -0x18 Pairing Not Allowed -0x19 Unknown LMP PDU -*/ -#define BLE_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1A -/* -0x1B SCO Offset Rejected -0x1C SCO Interval Rejected -0x1D SCO Air Mode Rejected*/ -#define BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS 0x1E -#define BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR 0x1F -/*0x20 Unsupported LMP Parameter Value -0x21 Role Change Not Allowed -*/ -#define BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT 0x22 -/*0x23 LMP Error Transaction Collision*/ -#define BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED 0x24 -/*0x25 Encryption Mode Not Acceptable -0x26 Link Key Can Not be Changed -0x27 Requested QoS Not Supported -*/ -#define BLE_HCI_INSTANT_PASSED 0x28 -#define BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED 0x29 -#define BLE_HCI_DIFFERENT_TRANSACTION_COLLISION 0x2A -/* -0x2B Reserved -0x2C QoS Unacceptable Parameter -0x2D QoS Rejected -0x2E Channel Classification Not Supported -0x2F Insufficient Security -0x30 Parameter Out Of Mandatory Range -0x31 Reserved -0x32 Role Switch Pending -0x33 Reserved -0x34 Reserved Slot Violation -0x35 Role Switch Failed -0x36 Extended Inquiry Response Too Large -0x37 Secure Simple Pairing Not Supported By Host. -0x38 Host Busy - Pairing -0x39 Connection Rejected due to No Suitable Channel Found*/ -#define BLE_HCI_CONTROLLER_BUSY 0x3A -#define BLE_HCI_CONN_INTERVAL_UNACCEPTABLE 0x3B -#define BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT 0x3C -#define BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE 0x3D -#define BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED 0x3E - -/** @} */ - - -#endif // BLE_HCI_H__ - -/** @} */
--- a/TARGET_HRM1017/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_l2cap.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,144 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_L2CAP Logical Link Control and Adaptation Protocol (L2CAP) - @{ - @brief Definitions and prototypes for the L2CAP interface. - */ - -#ifndef BLE_L2CAP_H__ -#define BLE_L2CAP_H__ - -#include "ble_types.h" -#include "ble_ranges.h" -#include "ble_err.h" -#include "nrf_svc.h" - -/**@addtogroup BLE_L2CAP_ENUMERATIONS Enumerations - * @{ */ - -/**@brief L2CAP API SVC numbers. */ -enum BLE_L2CAP_SVCS -{ - SD_BLE_L2CAP_CID_REGISTER = BLE_L2CAP_SVC_BASE, /**< Register a CID. */ - SD_BLE_L2CAP_CID_UNREGISTER, /**< Unregister a CID. */ - SD_BLE_L2CAP_TX /**< Transmit a packet. */ -}; - -/** @} */ - -/**@addtogroup BLE_L2CAP_DEFINES Defines - * @{ */ - -/**@defgroup BLE_ERRORS_L2CAP SVC return values specific to L2CAP - * @{ */ -#define BLE_ERROR_L2CAP_CID_IN_USE (NRF_L2CAP_ERR_BASE + 0x000) /**< CID already in use. */ -/** @} */ - -/**@brief Default L2CAP MTU. */ -#define BLE_L2CAP_MTU_DEF (23) - -/**@brief Invalid Channel Identifier. */ -#define BLE_L2CAP_CID_INVALID (0x0000) - -/**@brief Dynamic Channel Identifier base. */ -#define BLE_L2CAP_CID_DYN_BASE (0x0040) - -/**@brief Maximum amount of dynamic CIDs. */ -#define BLE_L2CAP_CID_DYN_MAX (8) - -/** @} */ - -/**@addtogroup BLE_L2CAP_STRUCTURES Structures - * @{ */ - -/**@brief Packet header format for L2CAP transmission. */ -typedef struct -{ - uint16_t len; /**< Length of valid info in data member. */ - uint16_t cid; /**< Channel ID on which packet is transmitted. */ -} ble_l2cap_header_t; - -/**@brief L2CAP Event IDs. */ -enum BLE_L2CAP_EVTS -{ - BLE_L2CAP_EVT_RX = BLE_L2CAP_EVT_BASE /**< L2CAP packet received. */ -}; - - -/**@brief L2CAP Received packet event report. */ -typedef struct -{ - ble_l2cap_header_t header; /** L2CAP packet header. */ - uint8_t data[1]; /**< Packet data, variable length. */ -} ble_l2cap_evt_rx_t; - - -/**@brief L2CAP event callback event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occured. */ - union - { - ble_l2cap_evt_rx_t rx; /**< RX Event parameters. */ - } params; -} ble_l2cap_evt_t; - - -/**@brief Register a CID with L2CAP. - * - * @details This registers a higher protocol layer with the L2CAP multiplexer, and is requried prior to all operations on the CID. - * - * @param[in] cid L2CAP CID. - * - * @return @ref NRF_SUCCESS Successfully registered a CID with the L2CAP layer. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, CID must be above @ref BLE_L2CAP_CID_DYN_BASE. - * @return @ref BLE_ERROR_L2CAP_CID_IN_USE L2CAP CID already in use. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_L2CAP_CID_REGISTER, uint32_t, sd_ble_l2cap_cid_register(uint16_t cid)); - -/**@brief Unregister a CID with L2CAP. - * - * @details This unregisters a previously registerd higher protocol layer with the L2CAP multiplexer. - * - * @param[in] cid L2CAP CID. - * - * @return @ref NRF_SUCCESS Successfully unregistered the CID. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_NOT_FOUND CID not previously registered. - */ -SVCALL(SD_BLE_L2CAP_CID_UNREGISTER, uint32_t, sd_ble_l2cap_cid_unregister(uint16_t cid)); - -/**@brief Transmit an L2CAP packet. - * - * @note It is important to note that a call to this function will <b>consume an application buffer</b>, and will therefore - * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. - * Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. - * - * @param[in] conn_handle Connection Handle. - * @param[in] p_header Pointer to a packet header containing length and CID. - * @param[in] p_data Pointer to the data to be transmitted. - * - * @return @ref NRF_SUCCESS Successfully queued an L2CAP packet for transmission. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, CIDs must be registered beforehand with @ref sd_ble_l2cap_cid_register. - * @return @ref NRF_ERROR_NOT_FOUND CID not found. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @return @ref BLE_ERROR_NO_TX_BUFFERS Not enough application buffers available. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, see @ref BLE_L2CAP_MTU_DEF. - */ -SVCALL(SD_BLE_L2CAP_TX, uint32_t, sd_ble_l2cap_tx(uint16_t conn_handle, ble_l2cap_header_t const * const p_header, uint8_t const * const p_data)); - -/** @} */ - -#endif // BLE_L2CAP_H__ - -/** - @} -*/
--- a/TARGET_HRM1017/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_ranges.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,89 +0,0 @@ -/* - Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - - The information contained herein is confidential property of Nordic Semiconductor. The use, - copying, transfer or disclosure of such information is prohibited except by express written - agreement with Nordic Semiconductor. - */ -/** - @addtogroup BLE_COMMON - @{ - @defgroup ble_ranges Module specific SVC and event number subranges - @{ - - @brief Definition of SVC and event number subranges for each API module. - - @note - SVCs and event numbers are split into subranges for each API module. - Each module receives its entire allocated range of SVC calls, whether implemented or not, - but return BLE_ERROR_NOT_SUPPORTED for unimplemented or undefined calls in its range. - - Note that the symbols BLE_<module>_SVC_LAST is the end of the allocated SVC range, - rather than the last SVC function call actually defined and implemented. - - Specific SVC and event values are defined in each module's ble_<module>.h file, - which defines names of each individual SVC code based on the range start value. -*/ - -#ifndef BLE_RANGES_H__ -#define BLE_RANGES_H__ - -#define BLE_SVC_BASE 0x60 -#define BLE_SVC_LAST 0x6B /* Total: 12. */ - -#define BLE_RESERVED_SVC_BASE 0x6C -#define BLE_RESERVED_SVC_LAST 0x6F /* Total: 4. */ - -#define BLE_GAP_SVC_BASE 0x70 -#define BLE_GAP_SVC_LAST 0x8F /* Total: 32. */ - -#define BLE_GATTC_SVC_BASE 0x90 -#define BLE_GATTC_SVC_LAST 0x9F /* Total: 16. */ - -#define BLE_GATTS_SVC_BASE 0xA0 -#define BLE_GATTS_SVC_LAST 0xAF /* Total: 16. */ - -#define BLE_L2CAP_SVC_BASE 0xB0 -#define BLE_L2CAP_SVC_LAST 0xBF /* Total: 16. */ - - -#define BLE_EVT_INVALID 0x00 - -#define BLE_EVT_BASE 0x01 -#define BLE_EVT_LAST 0x0F /* Total: 15. */ - -#define BLE_GAP_EVT_BASE 0x10 -#define BLE_GAP_EVT_LAST 0x2F /* Total: 32. */ - -#define BLE_GATTC_EVT_BASE 0x30 -#define BLE_GATTC_EVT_LAST 0x4F /* Total: 32. */ - -#define BLE_GATTS_EVT_BASE 0x50 -#define BLE_GATTS_EVT_LAST 0x6F /* Total: 32. */ - -#define BLE_L2CAP_EVT_BASE 0x70 -#define BLE_L2CAP_EVT_LAST 0x8F /* Total: 32. */ - -#define BLE_OPT_INVALID 0x00 /**< Invalid BLE Option. */ - -#define BLE_OPT_BASE 0x01 /**< Common BLE Option base. */ -#define BLE_OPT_LAST 0x1F /**< Total: 31. */ - -#define BLE_GAP_OPT_BASE 0x20 /**< GAP BLE Option base. */ -#define BLE_GAP_OPT_LAST 0x3F /**< Total: 32. */ - -#define BLE_GATTC_OPT_BASE 0x40 /**< GATTC BLE Option base. */ -#define BLE_GATTC_OPT_LAST 0x5F /**< Total: 32. */ - -#define BLE_GATTS_OPT_BASE 0x60 /**< GATTS BLE Option base. */ -#define BLE_GATTS_OPT_LAST 0x7F /**< Total: 32. */ - -#define BLE_L2CAP_OPT_BASE 0x80 /**< L2CAP BLE Option base. */ -#define BLE_L2CAP_OPT_LAST 0x9F /**< Total: 32. */ - -#endif /* BLE_RANGES_H__ */ - -/** - @} - @} -*/
--- a/TARGET_HRM1017/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_types.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,169 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_COMMON - @{ - @defgroup ble_types Common types and macro definitions - @{ - - @brief Common types and macro definitions for the S110 SoftDevice. - */ - -#ifndef BLE_TYPES_H__ -#define BLE_TYPES_H__ - -#include <stdint.h> - -/** @addtogroup BLE_COMMON_DEFINES Defines - * @{ */ - -/** @defgroup BLE_CONN_HANDLES BLE Connection Handles - * @{ */ -#define BLE_CONN_HANDLE_INVALID 0xFFFF /**< Invalid Connection Handle. */ -#define BLE_CONN_HANDLE_ALL 0xFFFE /**< Applies to all Connection Handles. */ -/** @} */ - - -/** @defgroup BLE_UUID_VALUES Assigned Values for BLE UUIDs - * @{ */ -/* Generic UUIDs, applicable to all services */ -#define BLE_UUID_UNKNOWN 0x0000 /**< Reserved UUID. */ -#define BLE_UUID_SERVICE_PRIMARY 0x2800 /**< Primary Service. */ -#define BLE_UUID_SERVICE_SECONDARY 0x2801 /**< Secondary Service. */ -#define BLE_UUID_SERVICE_INCLUDE 0x2802 /**< Include. */ -#define BLE_UUID_CHARACTERISTIC 0x2803 /**< Characteristic. */ -#define BLE_UUID_DESCRIPTOR_CHAR_EXT_PROP 0x2900 /**< Characteristic Extended Properties Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_USER_DESC 0x2901 /**< Characteristic User Description Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG 0x2902 /**< Client Characteristic Configuration Descriptor. */ -#define BLE_UUID_DESCRIPTOR_SERVER_CHAR_CONFIG 0x2903 /**< Server Characteristic Configuration Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT 0x2904 /**< Characteristic Presentation Format Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_AGGREGATE_FORMAT 0x2905 /**< Characteristic Aggregate Format Descriptor. */ -/* GATT specific UUIDs */ -#define BLE_UUID_GATT 0x1801 /**< Generic Attribute Profile. */ -#define BLE_UUID_GATT_CHARACTERISTIC_SERVICE_CHANGED 0x2A05 /**< Service Changed Characteristic. */ -/* GAP specific UUIDs */ -#define BLE_UUID_GAP 0x1800 /**< Generic Access Profile. */ -#define BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME 0x2A00 /**< Device Name Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE 0x2A01 /**< Appearance Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_PPF 0x2A02 /**< Peripheral Privacy Flag Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_RECONN_ADDR 0x2A03 /**< Reconnection Address Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_PPCP 0x2A04 /**< Peripheral Preferred Connection Parameters Characteristic. */ -/** @} */ - - -/** @defgroup BLE_UUID_TYPES Types of UUID - * @{ */ -#define BLE_UUID_TYPE_UNKNOWN 0x00 /**< Invalid UUID type. */ -#define BLE_UUID_TYPE_BLE 0x01 /**< Bluetooth SIG UUID (16-bit). */ -#define BLE_UUID_TYPE_VENDOR_BEGIN 0x02 /**< Vendor UUID types start at this index (128-bit). */ -/** @} */ - - -/** @defgroup BLE_APPEARANCES Bluetooth Appearance values - * @note Retrieved from http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml - * @{ */ -#define BLE_APPEARANCE_UNKNOWN 0 /**< Unknown. */ -#define BLE_APPEARANCE_GENERIC_PHONE 64 /**< Generic Phone. */ -#define BLE_APPEARANCE_GENERIC_COMPUTER 128 /**< Generic Computer. */ -#define BLE_APPEARANCE_GENERIC_WATCH 192 /**< Generic Watch. */ -#define BLE_APPEARANCE_WATCH_SPORTS_WATCH 193 /**< Watch: Sports Watch. */ -#define BLE_APPEARANCE_GENERIC_CLOCK 256 /**< Generic Clock. */ -#define BLE_APPEARANCE_GENERIC_DISPLAY 320 /**< Generic Display. */ -#define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL 384 /**< Generic Remote Control. */ -#define BLE_APPEARANCE_GENERIC_EYE_GLASSES 448 /**< Generic Eye-glasses. */ -#define BLE_APPEARANCE_GENERIC_TAG 512 /**< Generic Tag. */ -#define BLE_APPEARANCE_GENERIC_KEYRING 576 /**< Generic Keyring. */ -#define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 640 /**< Generic Media Player. */ -#define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 704 /**< Generic Barcode Scanner. */ -#define BLE_APPEARANCE_GENERIC_THERMOMETER 768 /**< Generic Thermometer. */ -#define BLE_APPEARANCE_THERMOMETER_EAR 769 /**< Thermometer: Ear. */ -#define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR 832 /**< Generic Heart rate Sensor. */ -#define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT 833 /**< Heart Rate Sensor: Heart Rate Belt. */ -#define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 896 /**< Generic Blood Pressure. */ -#define BLE_APPEARANCE_BLOOD_PRESSURE_ARM 897 /**< Blood Pressure: Arm. */ -#define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 898 /**< Blood Pressure: Wrist. */ -#define BLE_APPEARANCE_GENERIC_HID 960 /**< Human Interface Device (HID). */ -#define BLE_APPEARANCE_HID_KEYBOARD 961 /**< Keyboard (HID Subtype). */ -#define BLE_APPEARANCE_HID_MOUSE 962 /**< Mouse (HID Subtype). */ -#define BLE_APPEARANCE_HID_JOYSTICK 963 /**< Joystiq (HID Subtype). */ -#define BLE_APPEARANCE_HID_GAMEPAD 964 /**< Gamepad (HID Subtype). */ -#define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE 965 /**< Digitizer Tablet (HID Subtype). */ -#define BLE_APPEARANCE_HID_CARD_READER 966 /**< Card Reader (HID Subtype). */ -#define BLE_APPEARANCE_HID_DIGITAL_PEN 967 /**< Digital Pen (HID Subtype). */ -#define BLE_APPEARANCE_HID_BARCODE 968 /**< Barcode Scanner (HID Subtype). */ -#define BLE_APPEARANCE_GENERIC_GLUCOSE_METER 1024 /**< Generic Glucose Meter. */ -#define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR 1088 /**< Generic Running Walking Sensor. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE 1089 /**< Running Walking Sensor: In-Shoe. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE 1090 /**< Running Walking Sensor: On-Shoe. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP 1091 /**< Running Walking Sensor: On-Hip. */ -#define BLE_APPEARANCE_GENERIC_CYCLING 1152 /**< Generic Cycling. */ -#define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER 1153 /**< Cycling: Cycling Computer. */ -#define BLE_APPEARANCE_CYCLING_SPEED_SENSOR 1154 /**< Cycling: Speed Sensor. */ -#define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR 1155 /**< Cycling: Cadence Sensor. */ -#define BLE_APPEARANCE_CYCLING_POWER_SENSOR 1156 /**< Cycling: Power Sensor. */ -#define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR 1157 /**< Cycling: Speed and Cadence Sensor. */ -#define BLE_APPEARANCE_GENERIC_PULSE_OXIMETER 3136 /**< Generic Pulse Oximeter. */ -#define BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 3137 /**< Fingertip (Pulse Oximeter subtype). */ -#define BLE_APPEARANCE_PULSE_OXIMETER_WRIST_WORN 3138 /**< Wrist Worn(Pulse Oximeter subtype). */ -#define BLE_APPEARANCE_GENERIC_WEIGHT_SCALE 3200 /**< Generic Weight Scale. */ -#define BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS_ACT 5184 /**< Generic Outdoor Sports Activity. */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_DISP 5185 /**< Location Display Device (Outdoor Sports Activity subtype). */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_DISP 5186 /**< Location and Navigation Display Device (Outdoor Sports Activity subtype). */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_POD 5187 /**< Location Pod (Outdoor Sports Activity subtype). */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_POD 5188 /**< Location and Navigation Pod (Outdoor Sports Activity subtype). */ -/** @} */ - -/** @brief Set .type and .uuid fields of ble_uuid_struct to specified uuid value. */ -#define BLE_UUID_BLE_ASSIGN(instance, value) do {\ - instance.type = BLE_UUID_TYPE_BLE; \ - instance.uuid = value;} while(0) - -/** @brief Copy type and uuid members from src to dst ble_uuid_t pointer. Both pointers must be valid/non-null. */ -#define BLE_UUID_COPY_PTR(dst, src) do {\ - (dst)->type = (src)->type; \ - (dst)->uuid = (src)->uuid;} while(0) - -/** @brief Copy type and uuid members from src to dst ble_uuid_t struct. */ -#define BLE_UUID_COPY_INST(dst, src) do {\ - (dst).type = (src).type; \ - (dst).uuid = (src).uuid;} while(0) - -/** @brief Compare for equality both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ -#define BLE_UUID_EQ(p_uuid1, p_uuid2) \ - (((p_uuid1)->type == (p_uuid2)->type) && ((p_uuid1)->uuid == (p_uuid2)->uuid)) - -/** @brief Compare for difference both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ -#define BLE_UUID_NEQ(p_uuid1, p_uuid2) \ - (((p_uuid1)->type != (p_uuid2)->type) || ((p_uuid1)->uuid != (p_uuid2)->uuid)) - -/** @} */ - -/** @addtogroup BLE_TYPES_STRUCTURES Structures - * @{ */ - -/** @brief 128 bit UUID values. */ -typedef struct -{ - unsigned char uuid128[16]; -} ble_uuid128_t; - -/** @brief Bluetooth Low Energy UUID type, encapsulates both 16-bit and 128-bit UUIDs. */ -typedef struct -{ - uint16_t uuid; /**< 16-bit UUID value or octets 12-13 of 128-bit UUID. */ - uint8_t type; /**< UUID type, see @ref BLE_UUID_TYPES. If type is BLE_UUID_TYPE_UNKNOWN, the value of uuid is undefined. */ -} ble_uuid_t; - -/** @} */ - -#endif /* BLE_TYPES_H__ */ - -/** - @} - @} -*/
--- a/TARGET_HRM1017/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_error.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - /** - @defgroup nrf_error SoftDevice Global Error Codes - @{ - - @brief Global Error definitions -*/ - -/* Header guard */ -#ifndef NRF_ERROR_H__ -#define NRF_ERROR_H__ - -/** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions - * @{ */ -#define NRF_ERROR_BASE_NUM (0x0) ///< Global error base -#define NRF_ERROR_SDM_BASE_NUM (0x1000) ///< SDM error base -#define NRF_ERROR_SOC_BASE_NUM (0x2000) ///< SoC error base -#define NRF_ERROR_STK_BASE_NUM (0x3000) ///< STK error base -/** @} */ - -#define NRF_SUCCESS (NRF_ERROR_BASE_NUM + 0) ///< Successful command -#define NRF_ERROR_SVC_HANDLER_MISSING (NRF_ERROR_BASE_NUM + 1) ///< SVC handler is missing -#define NRF_ERROR_SOFTDEVICE_NOT_ENABLED (NRF_ERROR_BASE_NUM + 2) ///< SoftDevice has not been enabled -#define NRF_ERROR_INTERNAL (NRF_ERROR_BASE_NUM + 3) ///< Internal Error -#define NRF_ERROR_NO_MEM (NRF_ERROR_BASE_NUM + 4) ///< No Memory for operation -#define NRF_ERROR_NOT_FOUND (NRF_ERROR_BASE_NUM + 5) ///< Not found -#define NRF_ERROR_NOT_SUPPORTED (NRF_ERROR_BASE_NUM + 6) ///< Not supported -#define NRF_ERROR_INVALID_PARAM (NRF_ERROR_BASE_NUM + 7) ///< Invalid Parameter -#define NRF_ERROR_INVALID_STATE (NRF_ERROR_BASE_NUM + 8) ///< Invalid state, operation disallowed in this state -#define NRF_ERROR_INVALID_LENGTH (NRF_ERROR_BASE_NUM + 9) ///< Invalid Length -#define NRF_ERROR_INVALID_FLAGS (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags -#define NRF_ERROR_INVALID_DATA (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data -#define NRF_ERROR_DATA_SIZE (NRF_ERROR_BASE_NUM + 12) ///< Data size exceeds limit -#define NRF_ERROR_TIMEOUT (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out -#define NRF_ERROR_NULL (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer -#define NRF_ERROR_FORBIDDEN (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation -#define NRF_ERROR_INVALID_ADDR (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address -#define NRF_ERROR_BUSY (NRF_ERROR_BASE_NUM + 17) ///< Busy - -#endif // NRF_ERROR_H__ - -/** - @} -*/
--- a/TARGET_HRM1017/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_error_sdm.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - /** - @addtogroup nrf_sdm_api - @{ - @defgroup nrf_sdm_error SoftDevice Manager Error Codes - @{ - - @brief Error definitions for the SDM API -*/ - -/* Header guard */ -#ifndef NRF_ERROR_SDM_H__ -#define NRF_ERROR_SDM_H__ - -#include "nrf_error.h" - -#define NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN (NRF_ERROR_SDM_BASE_NUM + 0) ///< Unknown lfclk source -#define NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION (NRF_ERROR_SDM_BASE_NUM + 1) ///< Incorrect interrupt configuration (can be caused by using illegal priority levels, or having enabled SoftDevice interrupts) -#define NRF_ERROR_SDM_INCORRECT_CLENR0 (NRF_ERROR_SDM_BASE_NUM + 2) ///< Incorrect CLENR0 (can be caused by erronous SoftDevice flashing) - -#endif // NRF_ERROR_SDM_H__ - -/** - @} - @} -*/
--- a/TARGET_HRM1017/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_error_soc.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - /** - @addtogroup nrf_soc_api - @{ - @defgroup nrf_soc_error SoC Library Error Codes - @{ - - @brief Error definitions for the SoC library - -*/ - -/* Header guard */ -#ifndef NRF_ERROR_SOC_H__ -#define NRF_ERROR_SOC_H__ - -#include "nrf_error.h" - -/* Mutex Errors */ -#define NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN (NRF_ERROR_SOC_BASE_NUM + 0) ///< Mutex already taken - -/* NVIC errors */ -#define NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE (NRF_ERROR_SOC_BASE_NUM + 1) ///< NVIC interrupt not available -#define NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED (NRF_ERROR_SOC_BASE_NUM + 2) ///< NVIC interrupt priority not allowed -#define NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 3) ///< NVIC should not return - -/* Power errors */ -#define NRF_ERROR_SOC_POWER_MODE_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 4) ///< Power mode unknown -#define NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 5) ///< Power POF threshold unknown -#define NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 6) ///< Power off should not return - -/* Rand errors */ -#define NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES (NRF_ERROR_SOC_BASE_NUM + 7) ///< RAND not enough values - -/* PPI errors */ -#define NRF_ERROR_SOC_PPI_INVALID_CHANNEL (NRF_ERROR_SOC_BASE_NUM + 8) ///< Invalid PPI Channel -#define NRF_ERROR_SOC_PPI_INVALID_GROUP (NRF_ERROR_SOC_BASE_NUM + 9) ///< Invalid PPI Group - -#endif // NRF_ERROR_SOC_H__ -/** - @} - @} -*/
--- a/TARGET_HRM1017/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_mbr.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,155 +0,0 @@ -/* - * Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @defgroup nrf_mbr_api Master Boot Record API - @{ - - @brief APIs for updating SoftDevice and BootLoader - -*/ - -/* Header guard */ -#ifndef NRF_MBR_H__ -#define NRF_MBR_H__ - -#include "nrf_svc.h" -#include <stdint.h> - - -/** @addtogroup NRF_MBR_DEFINES Defines - * @{ */ - -/**@brief MBR SVC Base number. */ -#define MBR_SVC_BASE 0x18 -/** @} */ - -/** @addtogroup NRF_MBR_ENUMS Enumerations - * @{ */ - -/**@brief nRF Master Boot Record API SVC numbers. */ -enum NRF_MBR_SVCS -{ - SD_MBR_COMMAND = MBR_SVC_BASE, /**< ::sd_mbr_command */ -}; - -/**@brief Possible values for ::sd_mbr_command_t.command */ -enum NRF_MBR_COMMANDS -{ - SD_MBR_COMMAND_COPY_BL, /**< Copy a new a new BootLoader. @see sd_mbr_command_copy_bl_t */ - SD_MBR_COMMAND_COPY_SD, /**< Copy a new SoftDevice. @see ::sd_mbr_command_copy_sd_t*/ - SD_MBR_COMMAND_INIT_SD, /**< Init forwarding interrupts to SD, and run reset function in SD*/ - SD_MBR_COMMAND_COMPARE, /**< This command works like memcmp. @see ::sd_mbr_command_compare_t*/ - SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET, /**< Start forwarding all exception to this address @see ::sd_mbr_command_vector_table_base_set_t*/ -}; - -/** @} */ - -/** @addtogroup NRF_MBR_TYPES Types - * @{ */ - -/**@brief This command copies part of a new SoftDevice - * The destination area is erased before copying. - * If dst is in the middle of a flash page, that whole flash page will be erased. - * If (dst+len) is in the middle of a flash page, that whole flash page will be erased. - * - * The user of this function is responsible for setting the PROTENSET registers. - * - * @retval ::NRF_SUCCESS indicates that the contents of the memory blocks where copied correctly. - * @retval ::NRF_ERROR_INTERNAL indicates that the contents of the memory blocks where not verified correctly after copying. - */ -typedef struct -{ - uint32_t *src; /**< Pointer to the source of data to be copied.*/ - uint32_t *dst; /**< Pointer to the destination where the content is to be copied.*/ - uint32_t len; /**< Number of 32 bit words to copy. Must be a multiple of 256 words*/ -}sd_mbr_command_copy_sd_t; - - -/**@brief This command works like memcmp, but takes the length in words. - * - * @retval ::NRF_SUCCESS indicates that the contents of both memory blocks are equal. - * @retval ::NRF_ERROR_NULL indicates that the contents of the memory blocks are not equal. - */ -typedef struct -{ - uint32_t *ptr1; /**< Pointer to block of memory */ - uint32_t *ptr2; /**< Pointer to block of memory */ - uint32_t len; /**< Number of 32 bit words to compare*/ -}sd_mbr_command_compare_t; - - -/**@brief This command copies a new BootLoader. - * With this command, destination of BootLoader is always the address written in NRF_UICR->BOOTADDR. - * - * Destination is erased by this function. - * If (destination+bl_len) is in the middle of a flash page, that whole flash page will be erased. - * - * This function will use PROTENSET to protect the flash that is not intended to be written. - * - * On Success, this function will not return. It will start the new BootLoader from reset-vector as normal. - * - * @retval ::NRF_ERROR_INVALID_STATE indicates that something was wrong. - * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. - * @retval ::NRF_ERROR_FORBIDDEN if NRF_UICR->BOOTADDR is not set - * @retval ::NRF_ERROR_INVALID_LENGTH is invalid. - */ -typedef struct -{ - uint32_t *bl_src; /**< Pointer to the source of the Bootloader to be be copied.*/ - uint32_t bl_len; /**< Number of 32 bit words to copy for BootLoader */ -}sd_mbr_command_copy_bl_t; - -/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the MBR - * - * Once this function has been called, this address is where the MBR will start to forward interrupts to after a reset. - * - * To restore default forwarding thiss function should be called with @param address set to 0. - * The MBR will then start forwarding to interrupts to the adress in NFR_UICR->BOOTADDR or to the SoftDevice if the BOOTADDR is not set. - * - * @retval ::NRF_SUCCESS - */ -typedef struct -{ - uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ -}sd_mbr_command_vector_table_base_set_t; - -typedef struct -{ - uint32_t command; /**< type of command to be issued see @ref NRF_MBR_COMMANDS. */ - union - { - sd_mbr_command_copy_sd_t copy_sd; /**< Parameters for copy*/ - sd_mbr_command_copy_bl_t copy_bl; /**< Parameters for copy SoftDevice and BootLoader*/ - sd_mbr_command_compare_t compare; /**< Parameters for verify*/ - sd_mbr_command_vector_table_base_set_t base_set; /**< Parameters for vector table base set.*/ - } params; -}sd_mbr_command_t; - -/** @} */ - -/** @addtogroup NRF_MBR_FUNCTIONS Functions - * @{ */ - -/**@brief Issue Master Boot Record commands - * - * Commands used when updating a SoftDevice and bootloader - * - * @param[in] param Pointer to a struct describing the command - * - *@note for retvals see ::sd_mbr_command_copy_sd_t ::sd_mbr_command_copy_bl_t ::sd_mbr_command_compare_t - -*/ -SVCALL(SD_MBR_COMMAND, uint32_t, sd_mbr_command(sd_mbr_command_t* param)); - -/** @} */ -#endif // NRF_MBR_H__ - -/** - @} -*/
--- a/TARGET_HRM1017/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_sdm.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,167 +0,0 @@ -/* - * Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @defgroup nrf_sdm_api SoftDevice Manager API - @{ - - @brief APIs for SoftDevice management. - -*/ - -/* Header guard */ -#ifndef NRF_SDM_H__ -#define NRF_SDM_H__ - -#include "nrf_svc.h" -#include "nrf51.h" -#include "nrf_soc.h" -#include "nrf_error_sdm.h" - -/** @addtogroup NRF_SDM_DEFINES Defines - * @{ */ - -/**@brief SoftDevice Manager SVC Base number. */ -#define SDM_SVC_BASE (0x10) - -/** @} */ - -/** @addtogroup NRF_SDM_ENUMS Enumerations - * @{ */ - -/**@brief nRF SoftDevice Manager API SVC numbers. */ -enum NRF_SD_SVCS -{ - SD_SOFTDEVICE_ENABLE = SDM_SVC_BASE, /**< ::sd_softdevice_enable */ - SD_SOFTDEVICE_DISABLE, /**< ::sd_softdevice_disable */ - SD_SOFTDEVICE_IS_ENABLED, /**< ::sd_softdevice_is_enabled */ - SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, /**< ::sd_softdevice_vector_table_base_set */ - SVC_SDM_LAST /**< Placeholder for last SDM SVC */ -}; - -/**@brief Possible lfclk oscillator sources. */ -enum NRF_CLOCK_LFCLKSRCS -{ - NRF_CLOCK_LFCLKSRC_SYNTH_250_PPM, /**< LFCLK Synthesized from HFCLK. */ - NRF_CLOCK_LFCLKSRC_XTAL_500_PPM, /**< LFCLK crystal oscillator 500 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_250_PPM, /**< LFCLK crystal oscillator 250 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_150_PPM, /**< LFCLK crystal oscillator 150 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_100_PPM, /**< LFCLK crystal oscillator 100 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_75_PPM, /**< LFCLK crystal oscillator 75 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_50_PPM, /**< LFCLK crystal oscillator 50 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_30_PPM, /**< LFCLK crystal oscillator 30 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_20_PPM, /**< LFCLK crystal oscillator 20 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_250MS_CALIBRATION, /**< LFCLK RC oscillator, 250ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_500MS_CALIBRATION, /**< LFCLK RC oscillator, 500ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_1000MS_CALIBRATION, /**< LFCLK RC oscillator, 1000ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_2000MS_CALIBRATION, /**< LFCLK RC oscillator, 2000ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_4000MS_CALIBRATION, /**< LFCLK RC oscillator, 4000ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_8000MS_CALIBRATION, /**< LFCLK RC oscillator, 8000ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_1000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 1000ms, if changed above a threshold, a calibration is done.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_2000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 2000ms, if changed above a threshold, a calibration is done.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_4000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 4000ms, if changed above a threshold, a calibration is done.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_8000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 8000ms, if changed above a threshold, a calibration is done.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_16000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 16000ms, if changed above a threshold, a calibration is done.*/ -}; - -/** @} */ - -/** @addtogroup NRF_SDM_TYPES Types - * @{ */ - -/**@brief Type representing lfclk oscillator source. */ -typedef uint32_t nrf_clock_lfclksrc_t; - - -/**@brief SoftDevice Assertion Handler type. - * - * When an unexpected error occurs within the SoftDevice it will call the SoftDevice assertion handler callback. - * The protocol stack will be in an undefined state when this happens and the only way to recover will be to - * perform a reset, using e.g. CMSIS NVIC_SystemReset(). - * - * @note This callback is executed in HardFault context, thus SVC functions cannot be called from the SoftDevice assert callback. - * - * @param[in] pc The program counter of the failed assert. - * @param[in] line_number Line number where the assert failed. - * @param[in] file_name File name where the assert failed. - */ -typedef void (*softdevice_assertion_handler_t)(uint32_t pc, uint16_t line_number, const uint8_t * p_file_name); - -/** @} */ - -/** @addtogroup NRF_SDM_FUNCTIONS Functions - * @{ */ - -/**@brief Enables the SoftDevice and by extension the protocol stack. - * - * Idempotent function to enable the SoftDevice. - * - * @note Some care must be taken if a low frequency clock source is already running when calling this function: - * If the LF clock has a different source then the one currently running, it will be stopped. Then, the new - * clock source will be started. - * - * @note This function has no effect when returning with an error. - * - * @post If return code is ::NRF_SUCCESS - * - SoC library and protocol stack APIs are made available - * - A portion of RAM will be unavailable (see relevant SDS documentation) - * - Some peripherals will be unavailable or available only through the SoC API (see relevant SDS documentation) - * - Interrupts will not arrive from protected peripherals or interrupts - * - nrf_nvic_ functions must be used instead of CMSIS NVIC_ functions for reliable usage of the softdevice. - * - Interrupt latency may be affected by the SoftDevice (see relevant SDS documentation) - * - Chosen low frequency clock source will be running - * - * @param clock_source Low frequency clock source and accuracy. (Note: In the case of XTAL source, the PPM accuracy of the chosen clock source must be greater than or equal to the actual characteristics of your XTAL clock). - * @param assertion_handler Callback for SoftDevice assertions. - * - * @retval ::NRF_SUCCESS - * @retval ::NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION SoftDeviceinterrupt is already enabled, or an enabled interrupt has an illegal priority level - * @retval ::NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN Unknown low frequency clock source selected - */ -SVCALL(SD_SOFTDEVICE_ENABLE, uint32_t, sd_softdevice_enable(nrf_clock_lfclksrc_t clock_source, softdevice_assertion_handler_t assertion_handler)); - -/**@brief Disables the SoftDevice and by extension the protocol stack. - * - * Idempotent function to disable the SoftDevice. - * - * @post SoC library and protocol stack APIs are made unavailable. - * @post All interrupts that was protected by the SoftDevice will be disabled and initialized to priority 0 (highest). - * @post All peripherals used by the SoftDevice will be reset to default values. - * @post All of RAM become available. - * @post All interrupts are forwarded to the application. - * @post LFCLK source chosen in ::sd_softdevice_enable will be left running. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_DISABLE, uint32_t, sd_softdevice_disable(void)); - -/**@brief Check if the SoftDevice is enabled. - * - * @param[out] p_softdevice_enabled If the SoftDevice is enabled: 1 else 0. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_IS_ENABLED, uint32_t, sd_softdevice_is_enabled(uint8_t * p_softdevice_enabled)); - -/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the SoftDevice - * - * This function is only intended to be called when a bootloader is enabled. - * - * @param[in] address The base address of the interrupt vector table for forwarded interrupts. - - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, uint32_t, sd_softdevice_vector_table_base_set(uint32_t address)); - -/** @} */ - -#endif // NRF_SDM_H__ - -/** - @} -*/
--- a/TARGET_HRM1017/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_soc.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,958 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - -/** - * @defgroup nrf_soc_api SoC Library API - * @{ - * - * @brief APIs for the SoC library. - * -*/ - -#ifndef NRF_SOC_H__ -#define NRF_SOC_H__ - -#include <stdint.h> -#include <stdbool.h> -#include "nrf_svc.h" -#include "nrf51.h" -#include "nrf51_bitfields.h" -#include "nrf_error_soc.h" - -/** @addtogroup NRF_SOC_DEFINES Defines - * @{ */ - -/**@brief The number of the lowest SVC number reserved for the SoC library. */ -#define SOC_SVC_BASE (0x20) -#define SOC_SVC_BASE_NOT_AVAILABLE (0x23) - -/**@brief Guranteed time for application to process radio inactive notification. */ -#define NRF_RADIO_NOTIFICATION_INACTIVE_GUARANTEED_TIME_US (62) - -/**@brief The minimum allowed timeslot extension time. */ -#define NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US (200) - -#define SOC_ECB_KEY_LENGTH (16) /**< ECB key length. */ -#define SOC_ECB_CLEARTEXT_LENGTH (16) /**< ECB cleartext length. */ -#define SOC_ECB_CIPHERTEXT_LENGTH (SOC_ECB_CLEARTEXT_LENGTH) /**< ECB ciphertext length. */ - -#define SD_EVT_IRQn (SWI2_IRQn) /**< SoftDevice Event IRQ number. Used for both protocol events and SoC events. */ -#define SD_EVT_IRQHandler (SWI2_IRQHandler) /**< SoftDevice Event IRQ handler. Used for both protocol events and SoC events. */ -#define RADIO_NOTIFICATION_IRQn (SWI1_IRQn) /**< The radio notification IRQ number. */ -#define RADIO_NOTIFICATION_IRQHandler (SWI1_IRQHandler) /**< The radio notification IRQ handler. */ - -#define NRF_RADIO_LENGTH_MIN_US (100) /**< The shortest allowed radio timeslot, in microseconds. */ -#define NRF_RADIO_LENGTH_MAX_US (100000) /**< The longest allowed radio timeslot, in microseconds. */ - -#define NRF_RADIO_DISTANCE_MAX_US (128000000UL - 1UL) /**< The longest timeslot distance, in microseconds, allowed for the distance parameter (see @ref nrf_radio_request_normal_t) in the request. */ - -#define NRF_RADIO_EARLIEST_TIMEOUT_MAX_US (128000000UL - 1UL) /**< The longest timeout, in microseconds, allowed when requesting the earliest possible timeslot. */ - -#define NRF_RADIO_START_JITTER_US (2) /**< The maximum jitter in NRF_RADIO_CALLBACK_SIGNAL_TYPE_START relative to the requested start time. */ - -/** @} */ - -/** @addtogroup NRF_SOC_TYPES Types - * @{ */ - -/**@brief The SVC numbers used by the SVC functions in the SoC library. */ -enum NRF_SOC_SVCS -{ - SD_FLASH_PAGE_ERASE = SOC_SVC_BASE, - SD_FLASH_WRITE, - SD_FLASH_PROTECT, - SD_MUTEX_NEW = SOC_SVC_BASE_NOT_AVAILABLE, - SD_MUTEX_ACQUIRE, - SD_MUTEX_RELEASE, - SD_NVIC_ENABLEIRQ, - SD_NVIC_DISABLEIRQ, - SD_NVIC_GETPENDINGIRQ, - SD_NVIC_SETPENDINGIRQ, - SD_NVIC_CLEARPENDINGIRQ, - SD_NVIC_SETPRIORITY, - SD_NVIC_GETPRIORITY, - SD_NVIC_SYSTEMRESET, - SD_NVIC_CRITICAL_REGION_ENTER, - SD_NVIC_CRITICAL_REGION_EXIT, - SD_RAND_APPLICATION_POOL_CAPACITY, - SD_RAND_APPLICATION_BYTES_AVAILABLE, - SD_RAND_APPLICATION_GET_VECTOR, - SD_POWER_MODE_SET, - SD_POWER_SYSTEM_OFF, - SD_POWER_RESET_REASON_GET, - SD_POWER_RESET_REASON_CLR, - SD_POWER_POF_ENABLE, - SD_POWER_POF_THRESHOLD_SET, - SD_POWER_RAMON_SET, - SD_POWER_RAMON_CLR, - SD_POWER_RAMON_GET, - SD_POWER_GPREGRET_SET, - SD_POWER_GPREGRET_CLR, - SD_POWER_GPREGRET_GET, - SD_POWER_DCDC_MODE_SET, - SD_APP_EVT_WAIT, - SD_CLOCK_HFCLK_REQUEST, - SD_CLOCK_HFCLK_RELEASE, - SD_CLOCK_HFCLK_IS_RUNNING, - SD_PPI_CHANNEL_ENABLE_GET, - SD_PPI_CHANNEL_ENABLE_SET, - SD_PPI_CHANNEL_ENABLE_CLR, - SD_PPI_CHANNEL_ASSIGN, - SD_PPI_GROUP_TASK_ENABLE, - SD_PPI_GROUP_TASK_DISABLE, - SD_PPI_GROUP_ASSIGN, - SD_PPI_GROUP_GET, - SD_RADIO_NOTIFICATION_CFG_SET, - SD_ECB_BLOCK_ENCRYPT, - SD_RADIO_SESSION_OPEN, - SD_RADIO_SESSION_CLOSE, - SD_RADIO_REQUEST, - SD_EVT_GET, - SD_TEMP_GET, - SVC_SOC_LAST -}; - -/**@brief Possible values of a ::nrf_mutex_t. */ -enum NRF_MUTEX_VALUES -{ - NRF_MUTEX_FREE, - NRF_MUTEX_TAKEN -}; - -/**@brief Possible values of ::nrf_app_irq_priority_t. */ -enum NRF_APP_PRIORITIES -{ - NRF_APP_PRIORITY_HIGH = 1, - NRF_APP_PRIORITY_LOW = 3 -}; - -/**@brief Possible values of ::nrf_power_mode_t. */ -enum NRF_POWER_MODES -{ - NRF_POWER_MODE_CONSTLAT, /**< Constant latency mode. See power management in the reference manual. */ - NRF_POWER_MODE_LOWPWR /**< Low power mode. See power management in the reference manual. */ -}; - - -/**@brief Possible values of ::nrf_power_failure_threshold_t */ -enum NRF_POWER_THRESHOLDS -{ - NRF_POWER_THRESHOLD_V21, /**< 2.1 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V23, /**< 2.3 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V25, /**< 2.5 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V27 /**< 2.7 Volts power failure threshold. */ -}; - - -/**@brief Possible values of ::nrf_power_dcdc_mode_t. */ -enum NRF_POWER_DCDC_MODES -{ - NRF_POWER_DCDC_MODE_OFF, /**< The DCDC is always off. */ - NRF_POWER_DCDC_MODE_ON, /**< The DCDC is always on. */ - NRF_POWER_DCDC_MODE_AUTOMATIC /**< The DCDC is automatically managed. */ -}; - -/**@brief Possible values of ::nrf_radio_notification_distance_t. */ -enum NRF_RADIO_NOTIFICATION_DISTANCES -{ - NRF_RADIO_NOTIFICATION_DISTANCE_NONE = 0, /**< The event does not have a notification. */ - NRF_RADIO_NOTIFICATION_DISTANCE_800US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_1740US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_2680US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_3620US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_4560US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_5500US /**< The distance from the active notification to start of radio activity. */ -}; - - -/**@brief Possible values of ::nrf_radio_notification_type_t. */ -enum NRF_RADIO_NOTIFICATION_TYPES -{ - NRF_RADIO_NOTIFICATION_TYPE_NONE = 0, /**< The event does not have a radio notification signal. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_ACTIVE, /**< Using interrupt for notification when the radio will be enabled. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE, /**< Using interrupt for notification when the radio has been disabled. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_BOTH, /**< Using interrupt for notification both when the radio will be enabled and disabled. */ -}; - -/**@brief SoC Events. */ -enum NRF_SOC_EVTS -{ - NRF_EVT_HFCLKSTARTED, /**< Event indicating that the HFCLK has started. */ - NRF_EVT_POWER_FAILURE_WARNING, /**< Event indicating that a power failure warning has occurred. */ - NRF_EVT_FLASH_OPERATION_SUCCESS, /**< Event indicating that the ongoing flash operation has completed successfully. */ - NRF_EVT_FLASH_OPERATION_ERROR, /**< Event indicating that the ongoing flash operation has timed out with an error. */ - NRF_EVT_RADIO_BLOCKED, /**< Event indicating that a radio timeslot was blocked. */ - NRF_EVT_RADIO_CANCELED, /**< Event indicating that a radio timeslot was canceled by SoftDevice. */ - NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN, /**< Event indicating that a radio signal callback handler return was invalid. */ - NRF_EVT_RADIO_SESSION_IDLE, /**< Event indicating that a radio session is idle. */ - NRF_EVT_RADIO_SESSION_CLOSED, /**< Event indicating that a radio session is closed. */ - NRF_EVT_NUMBER_OF_EVTS -}; - -/** @} */ - -/** @addtogroup NRF_SOC_TYPES Types - * @{ */ - -/**@brief Represents a mutex for use with the nrf_mutex functions. - * @note Accessing the value directly is not safe, use the mutex functions! - */ -typedef volatile uint8_t nrf_mutex_t; - -/**@brief The interrupt priorities available to the application while the softdevice is active. */ -typedef uint8_t nrf_app_irq_priority_t; - -/**@brief Represents a power mode, used in power mode functions */ -typedef uint8_t nrf_power_mode_t; - -/**@brief Represents a power failure threshold value. */ -typedef uint8_t nrf_power_failure_threshold_t; - -/**@brief Represents a DCDC mode value. */ -typedef uint32_t nrf_power_dcdc_mode_t; - -/**@brief Radio notification distances. */ -typedef uint8_t nrf_radio_notification_distance_t; - -/**@brief Radio notification types. */ -typedef uint8_t nrf_radio_notification_type_t; - -/** @brief The Radio signal callback types. */ -enum NRF_RADIO_CALLBACK_SIGNAL_TYPE -{ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_START, /**< This signal indicates the start of the radio timeslot. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0, /**< This signal indicates the NRF_TIMER0 interrupt. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO, /**< This signal indicates the NRF_RADIO interrupt. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_FAILED, /**< This signal indicates extend action failed. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_SUCCEEDED /**< This signal indicates extend action succeeded. */ -}; - -/** @brief The actions requested by the signal callback. - * - * This code gives the SOC instructions about what action to take when the signal callback has - * returned. - */ -enum NRF_RADIO_SIGNAL_CALLBACK_ACTION -{ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_NONE, /**< Return without action. */ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND, /**< Request an extension of the current timeslot (maximum execution time for this action is when the extension succeeded). */ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_END, /**< End the current radio timeslot. */ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END /**< Request a new radio timeslot and end the current timeslot. */ -}; - -/**@brief Radio timeslot high frequency clock source configuration. */ -enum NRF_RADIO_HFCLK_CFG -{ - NRF_RADIO_HFCLK_CFG_DEFAULT, /**< Use the currently selected oscillator as HF clock source during the timeslot (i.e. the source is not specified). */ - NRF_RADIO_HFCLK_CFG_FORCE_XTAL, /**< Force external crystal to be used as HF clock source during whole the timeslot. */ -}; - -/** @brief Radio timeslot priorities. */ -enum NRF_RADIO_PRIORITY -{ - NRF_RADIO_PRIORITY_HIGH, /**< High (equal priority as the normal connection priority of the SoftDevice stack(s)). */ - NRF_RADIO_PRIORITY_NORMAL, /**< Normal (equal priority as the priority of secondary activites of the SoftDevice stack(s)). */ -}; - -/** @brief Radio timeslot request type. */ -enum NRF_RADIO_REQUEST_TYPE -{ - NRF_RADIO_REQ_TYPE_EARLIEST, /**< Request timeslot as early as possible. This should always be used for the first request in a session. */ - NRF_RADIO_REQ_TYPE_NORMAL /**< Normal timeslot request. */ -}; - -/** @brief Parameters for a request for a timeslot as early as possible. */ -typedef struct -{ - uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ - uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ - uint32_t length_us; /**< The radio timeslot length (in the range 100 to 100,000] microseconds). */ - uint32_t timeout_us; /**< Longest acceptable delay until the start of the requested timeslot (up to @ref NRF_RADIO_EARLIEST_TIMEOUT_MAX_US microseconds). */ -} nrf_radio_request_earliest_t; - -/** @brief Parameters for a normal radio request. */ -typedef struct -{ - uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ - uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ - uint32_t distance_us; /**< Distance from the start of the previous radio timeslot (up to @ref NRF_RADIO_DISTANCE_MAX_US microseconds). */ - uint32_t length_us; /**< The radio timeslot length (in the range [100..100,000] microseconds). */ -} nrf_radio_request_normal_t; - -/** @brief Radio request parameters. */ -typedef struct -{ - uint8_t request_type; /**< Type of request, see @ref NRF_RADIO_REQUEST_TYPE. */ - union - { - nrf_radio_request_earliest_t earliest; /**< Parameters for a request for a timeslot as early as possible. */ - nrf_radio_request_normal_t normal; /**< Parameters for a normal radio request. */ - } params; -} nrf_radio_request_t; - -/**@brief Return parameters of the radio timeslot signal callback. */ -typedef struct -{ - uint8_t callback_action; /**< The action requested by the application when returning from the signal callback, see @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION. */ - union - { - struct - { - nrf_radio_request_t * p_next; /**< The request parameters for the next radio timeslot. */ - } request; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END. */ - struct - { - uint32_t length_us; /**< Requested extension of the timeslot duration (microseconds) (for minimum time see @ref NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US). */ - } extend; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND. */ - } params; -} nrf_radio_signal_callback_return_param_t; - -/**@brief The radio signal callback type. - * - * @note In case of invalid return parameters, the radio timeslot will automatically end - * immediately after returning from the signal callback and the - * @ref NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN event will be sent. - * @note The returned struct pointer must remain valid after the signal callback - * function returns. For instance, this means that it must not point to a stack variable. - * - * @param[in] signal_type Type of signal, see @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE. - * - * @return Pointer to structure containing action requested by the application. - */ -typedef nrf_radio_signal_callback_return_param_t * (*nrf_radio_signal_callback_t) (uint8_t signal_type); - -/**@brief AES ECB data structure */ -typedef struct -{ - uint8_t key[SOC_ECB_KEY_LENGTH]; /**< Encryption key. */ - uint8_t cleartext[SOC_ECB_CLEARTEXT_LENGTH]; /**< Clear Text data. */ - uint8_t ciphertext[SOC_ECB_CIPHERTEXT_LENGTH]; /**< Cipher Text data. */ -} nrf_ecb_hal_data_t; - -/** @} */ - -/** @addtogroup NRF_SOC_FUNCTIONS Functions - * @{ */ - -/**@brief Initialize a mutex. - * - * @param[in] p_mutex Pointer to the mutex to initialize. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_MUTEX_NEW, uint32_t, sd_mutex_new(nrf_mutex_t * p_mutex)); - -/**@brief Attempt to acquire a mutex. - * - * @param[in] p_mutex Pointer to the mutex to acquire. - * - * @retval ::NRF_SUCCESS The mutex was successfully acquired. - * @retval ::NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN The mutex could not be acquired. - */ -SVCALL(SD_MUTEX_ACQUIRE, uint32_t, sd_mutex_acquire(nrf_mutex_t * p_mutex)); - -/**@brief Release a mutex. - * - * @param[in] p_mutex Pointer to the mutex to release. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_MUTEX_RELEASE, uint32_t, sd_mutex_release(nrf_mutex_t * p_mutex)); - -/**@brief Enable External Interrupt. - * @note Corresponds to NVIC_EnableIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt was enabled. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt has a priority not available for the application. - */ -SVCALL(SD_NVIC_ENABLEIRQ, uint32_t, sd_nvic_EnableIRQ(IRQn_Type IRQn)); - -/**@brief Disable External Interrupt. - * @note Corresponds to NVIC_DisableIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS - * - * @retval ::NRF_SUCCESS The interrupt was disabled. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. - */ -SVCALL(SD_NVIC_DISABLEIRQ, uint32_t, sd_nvic_DisableIRQ(IRQn_Type IRQn)); - -/**@brief Get Pending Interrupt. - * @note Corresponds to NVIC_GetPendingIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_GetPendingIRQ documentation in CMSIS. - * @param[out] p_pending_irq Return value from NVIC_GetPendingIRQ. - * - * @retval ::NRF_SUCCESS The interrupt is available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -SVCALL(SD_NVIC_GETPENDINGIRQ, uint32_t, sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq)); - -/**@brief Set Pending Interrupt. - * @note Corresponds to NVIC_SetPendingIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt is set pending. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -SVCALL(SD_NVIC_SETPENDINGIRQ, uint32_t, sd_nvic_SetPendingIRQ(IRQn_Type IRQn)); - -/**@brief Clear Pending Interrupt. - * @note Corresponds to NVIC_ClearPendingIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt pending flag is cleared. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -SVCALL(SD_NVIC_CLEARPENDINGIRQ, uint32_t, sd_nvic_ClearPendingIRQ(IRQn_Type IRQn)); - -/**@brief Set Interrupt Priority. - * @note Corresponds to NVIC_SetPriority in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * @pre{priority is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_SetPriority documentation in CMSIS. - * @param[in] priority A valid IRQ priority for use by the application. - * - * @retval ::NRF_SUCCESS The interrupt and priority level is available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt priority is not available for the application. - */ -SVCALL(SD_NVIC_SETPRIORITY, uint32_t, sd_nvic_SetPriority(IRQn_Type IRQn, nrf_app_irq_priority_t priority)); - -/**@brief Get Interrupt Priority. - * @note Corresponds to NVIC_GetPriority in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_GetPriority documentation in CMSIS. - * @param[out] p_priority Return value from NVIC_GetPriority. - * - * @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE - IRQn is not available for the application. - */ -SVCALL(SD_NVIC_GETPRIORITY, uint32_t, sd_nvic_GetPriority(IRQn_Type IRQn, nrf_app_irq_priority_t * p_priority)); - -/**@brief System Reset. - * @note Corresponds to NVIC_SystemReset in CMSIS. - * - * @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN - */ -SVCALL(SD_NVIC_SYSTEMRESET, uint32_t, sd_nvic_SystemReset(void)); - -/**@brief Enters critical region. - * - * @post Application interrupts will be disabled. - * @sa sd_nvic_critical_region_exit - * - * @param[out] p_is_nested_critical_region 1: If in a nested critical region. - * 0: Otherwise. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_NVIC_CRITICAL_REGION_ENTER, uint32_t, sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region)); - -/**@brief Exit critical region. - * - * @pre Application has entered a critical region using ::sd_nvic_critical_region_enter. - * @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called. - * - * @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_NVIC_CRITICAL_REGION_EXIT, uint32_t, sd_nvic_critical_region_exit(uint8_t is_nested_critical_region)); - -/**@brief Query the capacity of the application random pool. - * - * @param[out] p_pool_capacity The capacity of the pool. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RAND_APPLICATION_POOL_CAPACITY, uint32_t, sd_rand_application_pool_capacity_get(uint8_t * p_pool_capacity)); - -/**@brief Get number of random bytes available to the application. - * - * @param[out] p_bytes_available The number of bytes currently available in the pool. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RAND_APPLICATION_BYTES_AVAILABLE, uint32_t, sd_rand_application_bytes_available_get(uint8_t * p_bytes_available)); - -/**@brief Get random bytes from the application pool. - * - * @param[out] p_buff Pointer to unit8_t buffer for storing the bytes. - * @param[in] length Number of bytes to take from pool and place in p_buff. - * - * @retval ::NRF_SUCCESS The requested bytes were written to p_buff. - * @retval ::NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES No bytes were written to the buffer, because there were not enough bytes available. -*/ -SVCALL(SD_RAND_APPLICATION_GET_VECTOR, uint32_t, sd_rand_application_vector_get(uint8_t * p_buff, uint8_t length)); - -/**@brief Gets the reset reason register. - * - * @param[out] p_reset_reason Contents of the NRF_POWER->RESETREAS register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RESET_REASON_GET, uint32_t, sd_power_reset_reason_get(uint32_t * p_reset_reason)); - -/**@brief Clears the bits of the reset reason register. - * - * @param[in] reset_reason_clr_msk Contains the bits to clear from the reset reason register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RESET_REASON_CLR, uint32_t, sd_power_reset_reason_clr(uint32_t reset_reason_clr_msk)); - -/**@brief Sets the power mode when in CPU sleep. - * - * @param[in] power_mode The power mode to use when in CPU sleep. @sa sd_app_evt_wait - * - * @retval ::NRF_SUCCESS The power mode was set. - * @retval ::NRF_ERROR_SOC_POWER_MODE_UNKNOWN The power mode was unknown. - */ -SVCALL(SD_POWER_MODE_SET, uint32_t, sd_power_mode_set(nrf_power_mode_t power_mode)); - -/**@brief Puts the chip in System OFF mode. - * - * @retval ::NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN - */ -SVCALL(SD_POWER_SYSTEM_OFF, uint32_t, sd_power_system_off(void)); - -/**@brief Enables or disables the power-fail comparator. - * - * Enabling this will give a softdevice event (NRF_EVT_POWER_FAILURE_WARNING) when the power failure warning occurs. - * The event can be retrieved with sd_evt_get(); - * - * @param[in] pof_enable True if the power-fail comparator should be enabled, false if it should be disabled. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_POF_ENABLE, uint32_t, sd_power_pof_enable(uint8_t pof_enable)); - -/**@brief Sets the power-fail threshold value. - * - * @param[in] threshold The power-fail threshold value to use. - * - * @retval ::NRF_SUCCESS The power failure threshold was set. - * @retval ::NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN The power failure threshold is unknown. - */ -SVCALL(SD_POWER_POF_THRESHOLD_SET, uint32_t, sd_power_pof_threshold_set(nrf_power_failure_threshold_t threshold)); - -/**@brief Sets bits in the NRF_POWER->RAMON register. - * - * @param[in] ramon Contains the bits needed to be set in the NRF_POWER->RAMON register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAMON_SET, uint32_t, sd_power_ramon_set(uint32_t ramon)); - -/** @brief Clears bits in the NRF_POWER->RAMON register. - * - * @param ramon Contains the bits needed to be cleared in the NRF_POWER->RAMON register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAMON_CLR, uint32_t, sd_power_ramon_clr(uint32_t ramon)); - -/**@brief Get contents of NRF_POWER->RAMON register, indicates power status of ram blocks. - * - * @param[out] p_ramon Content of NRF_POWER->RAMON register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAMON_GET, uint32_t, sd_power_ramon_get(uint32_t * p_ramon)); - -/**@brief Set bits in the NRF_POWER->GPREGRET register. - * - * @param[in] gpregret_msk Bits to be set in the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_SET, uint32_t, sd_power_gpregret_set(uint32_t gpregret_msk)); - -/**@brief Clear bits in the NRF_POWER->GPREGRET register. - * - * @param[in] gpregret_msk Bits to be clear in the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_CLR, uint32_t, sd_power_gpregret_clr(uint32_t gpregret_msk)); - -/**@brief Get contents of the NRF_POWER->GPREGRET register. - * - * @param[out] p_gpregret Contents of the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_GET, uint32_t, sd_power_gpregret_get(uint32_t *p_gpregret)); - -/**@brief Sets the DCDC mode. - * - * Depending on the internal state of the SoftDevice, the mode change may not happen immediately. - * The DCDC mode switch will be blocked when occurring in close proximity to radio transmissions. When - * the radio transmission is done, the last mode will be used. - * - * @param[in] dcdc_mode The mode of the DCDC. - * - * @retval ::NRF_SUCCESS - * @retval ::NRF_ERROR_INVALID_PARAM The DCDC mode is invalid. - */ -SVCALL(SD_POWER_DCDC_MODE_SET, uint32_t, sd_power_dcdc_mode_set(nrf_power_dcdc_mode_t dcdc_mode)); - -/**@brief Request the high frequency crystal oscillator. - * - * Will start the high frequency crystal oscillator, the startup time of the crystal varies - * and the ::sd_clock_hfclk_is_running function can be polled to check if it has started. - * - * @see sd_clock_hfclk_is_running - * @see sd_clock_hfclk_release - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_REQUEST, uint32_t, sd_clock_hfclk_request(void)); - -/**@brief Releases the high frequency crystal oscillator. - * - * Will stop the high frequency crystal oscillator, this happens immediately. - * - * @see sd_clock_hfclk_is_running - * @see sd_clock_hfclk_request - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_RELEASE, uint32_t, sd_clock_hfclk_release(void)); - -/**@brief Checks if the high frequency crystal oscillator is running. - * - * @see sd_clock_hfclk_request - * @see sd_clock_hfclk_release - * - * @param[out] p_is_running 1 if the external crystal oscillator is running, 0 if not. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_IS_RUNNING, uint32_t, sd_clock_hfclk_is_running(uint32_t * p_is_running)); - -/**@brief Waits for an application event. - * - * An application event is either an application interrupt or a pended interrupt when the - * interrupt is disabled. When the interrupt is enabled it will be taken immediately since - * this function will wait in thread mode, then the execution will return in the application's - * main thread. When an interrupt is disabled and gets pended it will return to the application's - * thread main. The application must ensure that the pended flag is cleared using - * ::sd_nvic_ClearPendingIRQ in order to sleep using this function. This is only necessary for - * disabled interrupts, as the interrupt handler will clear the pending flag automatically for - * enabled interrupts. - * - * In order to wake up from disabled interrupts, the SEVONPEND flag has to be set in the Cortex-M0 - * System Control Register (SCR). @sa CMSIS_SCB - * - * @note If an application interrupt has happened since the last time sd_app_evt_wait was - * called this function will return immediately and not go to sleep. This is to avoid race - * conditions that can occur when a flag is updated in the interrupt handler and processed - * in the main loop. - * - * @post An application interrupt has happened or a interrupt pending flag is set. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_APP_EVT_WAIT, uint32_t, sd_app_evt_wait(void)); - -/**@brief Get PPI channel enable register contents. - * - * @param[out] p_channel_enable The contents of the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_GET, uint32_t, sd_ppi_channel_enable_get(uint32_t * p_channel_enable)); - -/**@brief Set PPI channel enable register. - * - * @param[in] channel_enable_set_msk Mask containing the bits to set in the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_SET, uint32_t, sd_ppi_channel_enable_set(uint32_t channel_enable_set_msk)); - -/**@brief Clear PPI channel enable register. - * - * @param[in] channel_enable_clr_msk Mask containing the bits to clear in the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_CLR, uint32_t, sd_ppi_channel_enable_clr(uint32_t channel_enable_clr_msk)); - -/**@brief Assign endpoints to a PPI channel. - * - * @param[in] channel_num Number of the PPI channel to assign. - * @param[in] evt_endpoint Event endpoint of the PPI channel. - * @param[in] task_endpoint Task endpoint of the PPI channel. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_CHANNEL The channel number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ASSIGN, uint32_t, sd_ppi_channel_assign(uint8_t channel_num, const volatile void * evt_endpoint, const volatile void * task_endpoint)); - -/**@brief Task to enable a channel group. - * - * @param[in] group_num Number of the channel group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_TASK_ENABLE, uint32_t, sd_ppi_group_task_enable(uint8_t group_num)); - -/**@brief Task to disable a channel group. - * - * @param[in] group_num Number of the PPI group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_TASK_DISABLE, uint32_t, sd_ppi_group_task_disable(uint8_t group_num)); - -/**@brief Assign PPI channels to a channel group. - * - * @param[in] group_num Number of the channel group. - * @param[in] channel_msk Mask of the channels to assign to the group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_ASSIGN, uint32_t, sd_ppi_group_assign(uint8_t group_num, uint32_t channel_msk)); - -/**@brief Gets the PPI channels of a channel group. - * - * @param[in] group_num Number of the channel group. - * @param[out] p_channel_msk Mask of the channels assigned to the group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_GET, uint32_t, sd_ppi_group_get(uint8_t group_num, uint32_t * p_channel_msk)); - -/**@brief Configures the Radio Notification signal. - * - * @note - * - The notification signal latency depends on the interrupt priority settings of SWI used - * for notification signal. - * - In the period between the ACTIVE signal and the start of the Radio Event, the SoftDevice - * will interrupt the application to do Radio Event preparation. - * - Using the Radio Notification feature may limit the bandwidth, as the SoftDevice may have - * to shorten the connection events to have time for the Radio Notification signals. - * - * @param[in] type Type of notification signal. - * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE shall be used to turn off radio - * notification. Using @ref NRF_RADIO_NOTIFICATION_DISTANCE_NONE is - * recommended (but not required) to be used with - * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE. - * - * @param[in] distance Distance between the notification signal and start of radio activity. - * This parameter is ignored when @ref NRF_RADIO_NOTIFICATION_TYPE_NONE or - * @ref NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE is used. - * - * @retval ::NRF_ERROR_INVALID_PARAM The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RADIO_NOTIFICATION_CFG_SET, uint32_t, sd_radio_notification_cfg_set(nrf_radio_notification_type_t type, nrf_radio_notification_distance_t distance)); - -/**@brief Encrypts a block according to the specified parameters. - * - * 128-bit AES encryption. - * - * @param[in, out] p_ecb_data Pointer to the ECB parameters' struct (two input - * parameters and one output parameter). - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_ECB_BLOCK_ENCRYPT, uint32_t, sd_ecb_block_encrypt(nrf_ecb_hal_data_t * p_ecb_data)); - -/**@brief Gets any pending events generated by the SoC API. - * - * The application should keep calling this function to get events, until ::NRF_ERROR_NOT_FOUND is returned. - * - * @param[out] p_evt_id Set to one of the values in @ref NRF_SOC_EVTS, if any events are pending. - * - * @retval ::NRF_SUCCESS An event was pending. The event id is written in the p_evt_id parameter. - * @retval ::NRF_ERROR_NOT_FOUND No pending events. - */ -SVCALL(SD_EVT_GET, uint32_t, sd_evt_get(uint32_t * p_evt_id)); - -/**@brief Get the temperature measured on the chip - * - * This function will block until the temperature measurement is done. - * It takes around 50us from call to return. - * - * @note Pan #28 in PAN-028 v 1.6 "Negative measured values are not represented correctly" is corrected by this function. - * - * @param[out] p_temp Result of temperature measurement. Die temperature in 0.25 degrees celsius. - * - * @retval ::NRF_SUCCESS A temperature measurement was done, and the temperature was written to temp - */ -SVCALL(SD_TEMP_GET, uint32_t, sd_temp_get(int32_t * p_temp)); - -/**@brief Flash Write - * - * Commands to write a buffer to flash - * - * This call initiates the flash access command, and its completion will be communicated to the - * application with exactly one of the following events: - * - NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. - * - NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. - * - * @note - * - This call takes control over the radio and the CPU during flash erase and write to make sure that - * they will not interfere with the flash access. This means that all interrupts will be blocked - * for a predictable time (depending on the NVMC specification in nRF51 Series Reference Manual - * and the command parameters). - * - * - * @param[in] p_dst Pointer to start of flash location to be written. - * @param[in] p_src Pointer to buffer with data to be written - * @param[in] size Number of 32-bit words to write. Maximum size is 256 32bit words. - * - * @retval ::NRF_ERROR_INVALID_ADDR Tried to write to a non existing flash address, or p_dst or p_src was unaligned. - * @retval ::NRF_ERROR_BUSY The previous command has not yet completed. - * @retval ::NRF_ERROR_INVALID_LENGTH Size was 0, or more than 256 words. - * @retval ::NRF_ERROR_FORBIDDEN Tried to write to or read from protected location. - * @retval ::NRF_SUCCESS The command was accepted. - */ -SVCALL(SD_FLASH_WRITE, uint32_t, sd_flash_write(uint32_t * const p_dst, uint32_t const * const p_src, uint32_t size)); - - -/**@brief Flash Erase page - * - * Commands to erase a flash page - * - * This call initiates the flash access command, and its completion will be communicated to the - * application with exactly one of the following events: - * - NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. - * - NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. - * - * @note - * - This call takes control over the radio and the CPU during flash erase and write to make sure that - * they will not interfere with the flash access. This means that all interrupts will be blocked - * for a predictable time (depending on the NVMC specification in nRF51 Series Reference Manual - * and the command parameters). - * - * - * @param[in] page_number Pagenumber of the page to erase - * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. - * @retval ::NRF_ERROR_INVALID_ADDR Tried to erase to a non existing flash page. - * @retval ::NRF_ERROR_BUSY The previous command has not yet completed. - * @retval ::NRF_ERROR_FORBIDDEN Tried to erase a protected page. - * @retval ::NRF_SUCCESS The command was accepted. - */ -SVCALL(SD_FLASH_PAGE_ERASE, uint32_t, sd_flash_page_erase(uint32_t page_number)); - - -/**@brief Flash Protection set - * - * Commands to set the flash protection registers PROTENSETx - * - * @note To read the values in PROTENSETx you can read them directly. They are only write-protected. - * - * @param[in] protenset0 Value to be written to PROTENSET0 - * @param[in] protenset1 Value to be written to PROTENSET1 - * - * @retval ::NRF_ERROR_FORBIDDEN Tried to protect the SoftDevice - * @retval ::NRF_SUCCESS Values successfully written to PROTENSETx - */ -SVCALL(SD_FLASH_PROTECT, uint32_t, sd_flash_protect(uint32_t protenset0, uint32_t protenset1)); - -/**@brief Opens a session for radio requests. - * - * @note Only one session can be open at a time. - * @note p_radio_signal_callback(NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) will be called when the radio timeslot - * starts. From this point the NRF_RADIO and NRF_TIMER0 peripherals can be freely accessed - * by the application. - * @note p_radio_signal_callback(NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0) is called whenever the NRF_TIMER0 - * interrupt occurs. - * @note p_radio_signal_callback(NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO) is called whenever the NRF_RADIO - * interrupt occurs. - * @note p_radio_signal_callback() will be called at ARM interrupt priority level 0. This - * implies that none of the sd_* API calls can be used from p_radio_signal_callback(). - * - * @param[in] p_radio_signal_callback The signal callback. - * - * @retval ::NRF_ERROR_INVALID_ADDR p_radio_signal_callback is an invalid function pointer. - * @retval ::NRF_ERROR_BUSY If session cannot be opened. - * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. - * @retval ::NRF_SUCCESS Otherwise. - */ - SVCALL(SD_RADIO_SESSION_OPEN, uint32_t, sd_radio_session_open(nrf_radio_signal_callback_t p_radio_signal_callback)); - -/**@brief Closes a session for radio requests. - * - * @note Any current radio timeslot will be finished before the session is closed. - * @note If a radio timeslot is scheduled when the session is closed, it will be canceled. - * @note The application cannot consider the session closed until the NRF_EVT_RADIO_SESSION_CLOSED - * event is received. - * - * @retval ::NRF_ERROR_FORBIDDEN If session not opened. - * @retval ::NRF_ERROR_BUSY If session is currently being closed. - * @retval ::NRF_SUCCESS Otherwise. - */ - SVCALL(SD_RADIO_SESSION_CLOSE, uint32_t, sd_radio_session_close(void)); - - /**@brief Requests a radio timeslot. - * - * @note The timing of the radio timeslot is specified by p_request->distance_us. For the first - * request in a session, p_request->distance_us is required to be 0 by convention, and - * the timeslot is scheduled at the first possible opportunity. All following radio timeslots are - * requested with a distance of p_request->distance_us measured from the start of the - * previous radio timeslot. - * @note A too small p_request->distance_us will lead to a NRF_EVT_RADIO_BLOCKED event. - * @note Timeslots scheduled too close will lead to a NRF_EVT_RADIO_BLOCKED event. - * @note See the SoftDevice Specification for more on radio timeslot scheduling, distances and lengths. - * @note If an opportunity for the first radio timeslot is not found before 100ms after the call to this - * function, it is not scheduled, and instead a NRF_EVT_RADIO_BLOCKED event is sent. - * The application may then try to schedule the first radio timeslot again. - * @note Successful requests will result in nrf_radio_signal_callback_t(NRF_RADIO_CALLBACK_SIGNAL_TYPE_START). - * Unsuccessful requests will result in a NRF_EVT_RADIO_BLOCKED event, see @ref NRF_SOC_EVTS. - * @note The jitter in the start time of the radio timeslots is +/- NRF_RADIO_START_JITTER_US us. - * @note The nrf_radio_signal_callback_t(NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) call has a latency relative to the - * specified radio timeslot start, but this does not affect the actual start time of the timeslot. - * @note NRF_TIMER0 is reset at the start of the radio timeslot, and is clocked at 1MHz from the high frequency - * (16 MHz) clock source. If p_request->hfclk_force_xtal is true, the high frequency clock is - * guaranteed to be clocked from the external crystal. - * @note The SoftDevice will neither access the NRF_RADIO peripheral nor the NRF_TIMER0 peripheral - * during the radio timeslot. - * - * @param[in] p_request Pointer to the request parameters. - * - * @retval ::NRF_ERROR_FORBIDDEN If session not opened or the session is not IDLE. - * @retval ::NRF_ERROR_INVALID_ADDR If the p_request pointer is invalid. - * @retval ::NRF_ERROR_INVALID_PARAM If the parameters of p_request are not valid. - * @retval ::NRF_SUCCESS Otherwise. - */ - SVCALL(SD_RADIO_REQUEST, uint32_t, sd_radio_request(nrf_radio_request_t * p_request )); - -/** @} */ - -#endif // NRF_SOC_H__ - -/**@} */
--- a/TARGET_HRM1017/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_svc.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -#ifndef NRF_SVC__ -#define NRF_SVC__ - -#ifdef SVCALL_AS_NORMAL_FUNCTION -#define SVCALL(number, return_type, signature) return_type signature -#else - -#ifndef SVCALL -#if defined (__CC_ARM) -#define SVCALL(number, return_type, signature) return_type __svc(number) signature -#elif defined (__GNUC__) -#define SVCALL(number, return_type, signature) \ - _Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \ - _Pragma("GCC diagnostic ignored \"-Wunused-function\"") \ - __attribute__((naked)) static return_type signature \ - { \ - __asm( \ - "svc %0\n" \ - "bx r14" : : "I" (number) : "r0" \ - ); \ - } -#elif defined (__ICCARM__) -#define PRAGMA(x) _Pragma(#x) -#define SVCALL(number, return_type, signature) \ -PRAGMA(swi_number = number) \ - __swi return_type signature; -#else -#define SVCALL(number, return_type, signature) return_type signature -#endif -#endif // SVCALL - -#endif // SVCALL_AS_NORMAL_FUNCTION -#endif // NRF_SVC__
--- a/TARGET_HRM1017/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/softdevice_assert.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - -/** @brief Utilities for verifying program logic - */ - -#ifndef SOFTDEVICE_ASSERT_H_ -#define SOFTDEVICE_ASSERT_H_ - -#include <stdint.h> - -/** @brief This function handles assertions. - * - * - * @note - * This function is called when an assertion has triggered. - * - * - * @param line_num The line number where the assertion is called - * @param file_name Pointer to the file name - */ -void assert_softdevice_callback(uint16_t line_num, const uint8_t *file_name); - - -/*lint -emacro(506, ASSERT) */ /* Suppress "Constant value Boolean */ -/*lint -emacro(774, ASSERT) */ /* Suppress "Boolean within 'if' always evaluates to True" */ \ -/** @brief Check intended for production code - * - * Check passes if "expr" evaluates to true. */ -#define ASSERT(expr) \ -if (expr) \ -{ \ -} \ -else \ -{ \ - assert_softdevice_callback((uint16_t)__LINE__, (uint8_t *)__FILE__); \ - /*lint -unreachable */ \ -} - -#endif /* SOFTDEVICE_ASSERT_H_ */
--- a/TARGET_HRM1017/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_softdevice.hex Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5290 +0,0 @@ -:020000040000FA -:10000000C0070000D1060000D1000000B1060000CA -:1000100000000000000000000000000000000000E0 -:100020000000000000000000000000005107000078 -:100030000000000000000000DB000000E500000000 -:10004000EF000000F9000000030100000D010000B6 -:1000500017010000210100002B0100003501000004 -:100060003F01000049010000530100005D01000054 -:1000700067010000710100007B01000085010000A4 -:100080008F01000099010000A3010000AD010000F4 -:10009000B7010000C1010000CB010000D501000044 -:1000A000DF010000E9010000F3010000FD01000094 -:1000B00007020000110200001B02000025020000E0 -:1000C0001FB5C046C04600F0EFFA04B00FB41FBD24 -:1000D00008205A49096809580847382057490968CB -:1000E000095808473C2055490968095808474020E5 -:1000F0005249096809580847442050490968095875 -:10010000084748204D490968095808474C204B4981 -:10011000096809580847502048490968095808479C -:100120005420464909680958084758204349096836 -:10013000095808475C204149096809580847602068 -:100140003E4909680958084764203C49096809582C -:100150000847682039490968095808476C20374919 -:100160000968095808477020344909680958084740 -:100170007420324909680958084778202F490968CE -:10018000095808477C202D490968095808478020EC -:100190002A490968095808478420284909680958E4 -:1001A0000847882025490968095808478C202349B1 -:1001B00009680958084790202049096809580847E4 -:1001C00094201E4909680958084798201B49096866 -:1001D000095808479C201949096809580847A02070 -:1001E0001649096809580847A4201449096809589C -:1001F0000847A8201149096809580847AC200F4949 -:10020000096809580847B0200C4909680958084787 -:10021000B4200A49096809580847B82007490968FD -:1002200009580847BC2005490968095808470000D3 -:1002300003480449024A034B7047000000000020B5 -:10024000C0070000C00700000122D84B5A6000BF61 -:10025000D74A1268002AFBD0016000BFD44A126856 -:10026000002AFBD00022D14B5A6000BFD04A12684E -:10027000002AFBD07047F0B505460E46174600240D -:1002800006E0A200B158A2005019FFF7DDFF641C80 -:10029000BC42F6D30020F0BD0120C043C549086030 -:1002A000401048607047014601229204086890425D -:1002B00001D9102070470020FCE7F0B505460C4638 -:1002C0001646002706E028462168FFF7BDFF2D1DD2 -:1002D000241D7F1CB742F6D3F0BD70B505460C4611 -:1002E0002E460BE0304600F075F9FF2C01D80024B3 -:1002F00001E0FF3C013C012080023618002CF1D1C6 -:1003000070BD0146012292044868904201D909203B -:100310007047A9484069401C01D10F20F8E7002030 -:10032000F6E7FEB504462068030000F037FA05043E -:100330002B4249598B00201DFFF7E3FF0546002D96 -:1003400001D02846FEBDFFF7A7FF0120C00200F044 -:1003500041F9042221469948FFF78DFF002801D07A -:100360000320EFE708222146944800F06DF90028A9 -:1003700006D1002192480068FFF766FF00F00CF9F3 -:100380000320DFE7A768E6686068019031463846D9 -:10039000FFF7A3FF324638460199FFF78EFFB20000 -:1003A0003846019900F050F9002800D1CAE703202F -:1003B000C8E700F0E3F9834800688349086041E03A -:1003C00060680190E668A0680090B200009901980A -:1003D00000F03AF90746002F00D1B3E70E20B1E74D -:1003E000201DFFF760FF0546002D01D02846A9E734 -:1003F0006068002807D1FFF74FFF0320800200F05C -:10040000E9F800F0C9F8FFF747FF0120C00200F04B -:10041000E1F8042221466948FFF72DFF002801D0AA -:1004200003208FE708222146644800F00DF90028D8 -:1004300006D1002162480068FFF706FF00F0ACF823 -:1004400003207FE700BF00207CE770B505460C461F -:10045000182D04D12068FFF764FF206002E001201E -:10046000206000BF00BF70BDF0B589B05248406940 -:1004700003905248806881000398081802900398FE -:10048000000B01900121090302984018401E000B47 -:1004900000900124002520462946019A00F0C4F866 -:1004A0000022401E91410791069001260027304608 -:1004B0003946009A00F0B8F80022401E914105919B -:1004C0000490049BDB43059AD2430698184307998E -:1004D00011430791069037490698086007984860CD -:1004E00009B0F0BD70B53448446934488568466841 -:1004F000AA003146204600F0A7F8002801D00020CD -:1005000070BD0120FCE72D484068002801D0012083 -:1005100000E000200546FFF7E5FF002807D0FFF7C1 -:10052000BBFE0320800200F055F800F035F8FFF71D -:100530009BFF002D0ED020484669204884684768FC -:1005400021463046FFF7C9FE224639463046FFF7BE -:10055000B4FE00BF00F020F810B5184844681A48EF -:100560000460204600F0DCF810BD15480068006803 -:10057000401C01D100BFFEE710480068002802D0EF -:10058000042806D101E0FFF7BEFFFFF7E5FF00BF3B -:10059000FEE700BF00BFFEE7BFF34F8F0B480C49DB -:1005A000C860BFF34F8F00BFFEE7000000E50140C9 -:1005B00000E40140000600400010001000080000A8 -:1005C000B8070000BC070000000000200400FA0586 -:1005D00000ED00E010B50146104B1A6808460223F2 -:1005E0000F4C636000BF0F4B1B68002BFBD0531CEC -:1005F00004D0904202D20A4B186101E0084B986087 -:1006000000BF084B1B68002BFBD00023044C636029 -:1006100000BF044B1B68002BFBD010BD0010001066 -:1006200000E5014000E4014010B5202A04DB01464A -:10063000203A9140002010BD914020239C1A03468F -:10064000E3401943904010BD034610B50B439B0790 -:100650000FD1042A0DD308C810C9121FA342F8D025 -:1006600018BA21BA884201D9012010BD0020C04328 -:1006700010BD002A03D0D30703D0521C07E000208E -:1006800010BD03780C78401C491C1B1B07D1037854 -:100690000C78401C491C1B1B01D1921EF1D118463D -:1006A00010BD70477047704710B500F007F810BDD7 -:1006B000014B1B68DB6818470000002019481A49E5 -:1006C0007047FFF7FBFFFFF7FBFC00BD20BFFDE716 -:1006D0001649174C24688C420BD1164B1B68994263 -:1006E0000CD1154B154A1360186810498842EDD09B -:1006F0000AE0134880F30888124B18470F4A13602A -:1007000018680A498842E1D080F308880E49884277 -:1007100004DD0E48026802210A4302605B68184744 -:100720000346DFE7C0070000C0070000FFFFFFFF30 -:10073000000C000014100010001000000000002049 -:10074000000400206B05000000200020240500406C -:100750000D48704502D1EFF3098101E0EFF3088104 -:10076000886902380078182802D1C046074A104725 -:10077000074A12682C3212681047000000B5054B7A -:10078000054A9B58984700BDFDFFFFFF4B04000042 -:1007900000000020001000000400000030B4744687 -:1007A000641E2578641CAB4204D3635D5B00E318D0 -:1007B00030BC18471D46F8E7000C00000010000090 -:10100000901D002079500100ED3D0000DF4F0100F0 -:1010100000000000000000000000000000000000D0 -:10102000000000000000000000000000E950010086 -:101030000000000000000000ED3D0000ED3D00005C -:10104000555101005B510100ED3D0000ED3D0000F8 -:10105000ED3D0000ED3D0000ED3D0000ED3D0000E8 -:1010600061510100ED3D0000ED3D000067510100C0 -:10107000ED3D00006D5101007351010079510100F7 -:10108000ED3D0000ED3D0000ED3D0000ED3D0000B8 -:10109000ED3D0000ED3D0000ED3D0000ED3D0000A8 -:1010A0007F51010085510100ED3D0000ED3D000044 -:1010B000ED3D0000ED3D0000ED3D0000ED3D000088 -:1010C00000F002F813F0B9FF0CA030C8083824185B -:1010D0002D18A246671EAB4654465D46AC4201D170 -:1010E00013F0ABFF7E460F3E0FCCB64601263342CF -:1010F00000D0FB1AA246AB463343184744410100D7 -:1011000074410100103A02D378C878C1FAD8520766 -:1011100001D330C830C101D504680C6070470000AD -:101120000023002400250026103A01D378C1FBD803 -:10113000520700D330C100D50B6070471FB5C046C1 -:10114000C04613F01BFF04B00FB41FBD82690249F3 -:1011500081610248104470476111000001000000E5 -:1011600001B41EB400B510F02FFC01B401988646FE -:1011700001BC01B01EBD0000F0B4404649465246D5 -:101180005B460FB402A0013001B50648004700BF1E -:1011900001BC86460FBC8046894692469B46F0BC01 -:1011A00070470000C1100000401E00BF00BF00BF1C -:1011B00000BF00BF00BF00BF00BF00BF00BF00BF37 -:1011C00000BFF1D17047000070B505460C461646C9 -:1011D00002E00FCC0FC5103E102EFAD2082E02D31B -:1011E00003CC03C5083E042E07D301CC01C5361F2E -:1011F00003E021782970641C6D1C761EF9D270BD45 -:101200008307FF22DB0E9A408907090E99400028C8 -:101210000BDA0007000F0838830828489B001B18CA -:10122000D86990430843D8617047830824489B00DD -:101230001B181868904308431860704710B504469F -:1012400000210120FFF7DCFF00211820FFF7D8FF65 -:1012500000210B20FFF7D4FF02211920FFF7D0FF58 -:1012600002210D20FFF7CCFF02210E20FFF7C8FF5F -:1012700002210F20FFF7C4FF0221C81FFFF7C0FFA4 -:1012800003211620FFF7BCFF03211520FFF7B8FF4D -:10129000204600F019F8002010BD4F210180704752 -:1012A00010B500F03AF810BD0648704710B500F0D0 -:1012B00035F810BD704770477047000000ED00E042 -:1012C00000E400E003F900C330B50446374D95B0A3 -:1012D00007202870A81CFFF7E0FF5920A880344899 -:1012E00001F020FC0546072000F0DCF929462F48D4 -:1012F00000F08CFA641E072C0AD830216846017071 -:10130000847001F0DDFA002802D009A800F0DDFCAD -:10131000284601F083FE15B030BD7047F8B5234E66 -:101320000446B61E307801270D46002807D0204617 -:1013300060380B2808D8204601F096FB2BE0602C83 -:10134000F9D01C480860F8BD20466C38032803D843 -:10135000204601F0CBFB1EE0204670381F2803D842 -:10136000204600F037F816E0204690380F2803D8C2 -:10137000204600F0BBF80EE02046A0380F2803D826 -:10138000204600F023F906E02046B0380F2804D8A4 -:10139000204600F000F9286000E02F60602CD2D1D8 -:1013A00028680028CFD13770F8BD00001A0000204F -:1013B000C33300000130000070477047704770472A -:1013C000704770477047704710B5012801D100F091 -:1013D00042FA10BD10B57038030013F0EBFE150C87 -:1013E00012161E22252C33383D41454950555C6468 -:1013F0006C747B8085004A680878114603F081FF91 -:1014000010BD086803F0F9FF10BD0C790B7B8A68EA -:101410000868214604F005F810BD086804F07EF85D -:1014200010BD03F05BFC10BD08884A6880B211460D -:1014300004F043FA10BD0A790888114680B204F01E -:1014400091FA10BD087840B204F09CFA10BD0888EB -:1014500080B204F0B8FA10BD086804F0C7FA10BDF5 -:10146000086804F0DFFA10BD086804F00AFB10BD3C -:10147000088982B209C9194604F034FB10BD05C9B8 -:10148000114604F082FB10BD08884A6880B21146FC -:1014900004F0A0FB10BD0B7908888A6880B2194659 -:1014A00004F0FDFB10BD0B7908888A6880B21946EC -:1014B00004F0B3FC10BD08884B688A6880B21946F6 -:1014C00004F0F3FC10BD08884A6880B2114604F0AD -:1014D0003EFD10BD088880B204F056FD10BD08889E -:1014E00080B204F076FD10BD012010BD10B590381B -:1014F000030013F05FFE09060F161D242C363F462D -:101500004E0088888A6883B20888194680B205F040 -:1015100093F910BD08884A6880B2114605F0E9F9D0 -:1015200010BD08884A6880B2114605F02DFA10BD3A -:1015300008884A6880B2114605F063FA10BD088831 -:101540004B688A6880B2194605F094FA10BD088984 -:1015500082B2888883B20888194680B205F0C9FA39 -:1015600010BD08894B6882B20888194680B205F020 -:10157000FEFA10BD08884A6880B2114605F02EFBBD -:1015800010BD888882B20888114680B205F0C2FB7F -:1015900010BD012010BD10B5B02805D0B12808D06D -:1015A000B2280BD0012010BD088880B205F0A6FE3D -:1015B00010BD088880B205F0D1FE10BD08884B68C8 -:1015C0008A6880B2194605F0DAFE10BD10B5A03861 -:1015D000030013F0EFFD0B070E172028323C434D9C -:1015E000545D65004B6808788A68194607F017FA59 -:1015F00010BD88888A6883B20888194680B207F0CF -:1016000023FA10BD08884C68CB688A6880B22146EE -:1016100007F02AFA10BD08884B688A6880B219461C -:1016200007F044FA10BD8888CB6884B208888A68BD -:1016300080B2214607F064FA10BD8888CB6884B276 -:1016400008888A6880B2214607F089FA10BD0888A8 -:101650004A6880B2114607F0BDFA10BD088982B20F -:10166000888883B20888194680B207F0BDFA10BD99 -:1016700008884A6880B2114607F0DAFA10BD088976 -:101680004B6882B20888194680B207F057FB10BD3C -:1016900008884B688A6880B2194607F014FC10BDB0 -:1016A000012010BD10B507F0FAFC0FF0A7FF00F005 -:1016B00007F810F0F5F808F0F5F908F081F910BD19 -:1016C00001202B49C00308602A490020087003202C -:1016D0002949800288607047F8B5264D044628786D -:1016E000A04207D0002C05D0002803D023A14D2014 -:1016F00013F06FFC2878A04213D02C700325002330 -:101700002349AD021C48002C27D01B4A214E4032F1 -:10171000214F012C06D0022C13D018A16E2013F0FB -:1017200058FCF8BD0B6002230B604E6185601B49BD -:1017300011625762091D91621749091DD162456006 -:10174000F8BD0B6003230B604E610121C90281606B -:10175000134B9362D7624160F8BD0B600B608560EC -:10176000F8BD10B505A1772013F033FC10BD0000C3 -:1017700080E100E02000002000F501407372635C0E -:1017800068616C5F63636D5F6161722E630000006E -:1017900000F500407C01002000F0004000110040F6 -:1017A000488100401CB50446002069460870204668 -:1017B00009F0F6F86946204608F0B4FF002803D186 -:1017C000FBA1B62013F005FC01A9204608F009FF93 -:1017D000002803D1F6A1BB2013F0FBFB684600787C -:1017E0001CBD70B5F74D002428462C76203084713E -:1017F000C47113F0EDFC2846403804702030847327 -:10180000847484762C74AC7070BDEAE710B50C4615 -:10181000ED4982888A8042884A80007808700846AC -:101820000A38847008F0B3FEFFF7DBFF20460AF0A9 -:101830002FFAE44AE0321146383908461446813816 -:1018400009F020F92146E0480BF0C2FC09F09FF8AE -:1018500013F0BEFC10BD10B50120FFF7ADFD10BDAB -:10186000F8B509F083FDD84DD64C0A3D022802D0C8 -:10187000207C00287CD0207E0026102819D1A0785A -:10188000002803D0CAA1D14813F0A3FBCD48E83803 -:10189000817A89070DD50146267160398989E180F1 -:1018A000C17A217281896181C089A0810120A070E3 -:1018B0002676C44F203FB87C002859D1C4486946D9 -:1018C000808908F02FFF002805D0694668780978DC -:1018D0004018687004E0BD48B5A11D3013F079FBD5 -:1018E000207C002838D0BA488189FF300930406D0B -:1018F0008089814204D0B548ADA1223013F069FB44 -:10190000B348808908F0B4FF002804D1AF48A8A1EB -:10191000283013F05EFB09F022F800281CD0AC48F8 -:101920008089FFF73FFF697840186870A548403804 -:10193000416D20318A7C012A0DD1A54A3E779289DA -:10194000C287C87C20700120B876207E102801D084 -:10195000282800D1267626746978002908D09C486A -:101960008289FF300930C28601870120B8746E7009 -:1019700009F0CCFC002805D1207C002802D0A878F2 -:1019800001F0F4F8F8BDF8B50F460446FFF768FF1C -:101990008C4D403D28788B4E002813D0002F10D15D -:1019A000307E002804D0FF2081A1C63013F011FB47 -:1019B0002C22A91C204613F06FF90E202070002065 -:1019C00028708FE07F4D203DA87B002818D0002F85 -:1019D000F7D1307E102808D0282806D0002804D05F -:1019E000FF2073A1D23013F0F4FA0120E070E87BFD -:1019F000A070287C60700F2020700020A87371E018 -:101A00000121204608F0E4FF002807D0307C0028A0 -:101A100051D13946204608F0DBFFF8BDA97C694862 -:101A20000C38009068480A38002913D0017805293D -:101A300010D2002F56D1491C0170002666700D206F -:101A40002070012028750622A01C009913F024F9AB -:101A5000AE7447E05C4800210A380170B078002875 -:101A600014D0002F3ED1307E002803D050A1594819 -:101A700013F0AFFA002565700120524920700A2248 -:101A8000091DA01C13F008F9B5702BE0394620465B -:101A90000BF008FB002825D1A87C002805D0002FDA -:101AA00020D149480A380178C5E7A87E002802D02D -:101AB000307C002801D00020F8BD002F12D1307EEC -:101AC000002804D08F203AA1800013F082FA00266B -:101AD00066700A203B4920700622091FA01C13F0E3 -:101AE000DBF8AE760120F8BD10B53648017E00293E -:101AF00008D1007C012805D001210020FFF743FF19 -:101B0000002801D0072010BD012010BD10B5012410 -:101B10000AF006F90443FFF7E7FF044308F038FF33 -:101B200001462143084610BDF8B51D4614460E4631 -:101B300008F077FD002807D0684608F07DFD0028F2 -:101B400003D0002C07D101E00120F8BD9B2018A193 -:101B5000800013F03EFA08F01BFDA04204D21D489D -:101B600013A1583013F035FA009808F089F931467E -:101B7000009808F097F9E2B22946009808F04EFB69 -:101B800008F06CFD002804D19F2009A1800013F00B -:101B900020FA08F0FFFE0E4800244030417C002966 -:101BA00002D044740AF0A7F90948C480CCE70000C9 -:101BB0007372635C6C6C5F6374726C2E73302E6333 -:101BC00000000000200300202C00002082060000FE -:101BD000D80100201502000010B50179002908D0B5 -:101BE00001290BD0FF20FE49043013F0F2F9002048 -:101BF00010BD831D42880488022103E042880488C6 -:101C0000831D01212046FFF78FFF10BDF8B51F4649 -:101C100015460E46044609F0A9FB022803D0F148F8 -:101C2000007C00281FD0F0488089208008F020FE2A -:101C3000002803D1EA49ED4813F0CBF905246846A2 -:101C400008F021FE00280ED0009808F063F93070EB -:101C5000022809D0012807D008F055FE641E24068A -:101C6000240EECD10020F8BD3946009808F0EEFAB9 -:101C70002880002804D1AF20D949800013F0A9F9A9 -:101C800008F041FE002804D1D848D549193013F096 -:101C9000A0F90120F8BD38B50446831D821C6946B1 -:101CA000FFF7B4FF00280DD000206071684600786F -:101CB000012808D0022806D0FF20C949253013F09A -:101CC00088F9012038BD2071FBE700215BE670B583 -:101CD000C44C0546403C2078002803D1C148007E12 -:101CE000002804D0C120BE49C00013F072F9287842 -:101CF00008F085FF28780BF0C1FB0020207101203F -:101D000060713921E170207070BD70B5B54D044629 -:101D1000403D2878002803D1B248007E002804D036 -:101D20005F20AF49000113F054F9AF4E2188B0890C -:101D3000884203D109F01AFB022807D0022028713B -:101D4000012068713821E970287070BD7F2070769D -:101D5000A548E17820304174A17801740020EEE7B5 -:101D600010B5A04C403C207800280BD19D48007E47 -:101D7000002807D109F0FAFA032803D009F0FAFA8B -:101D8000032804D199489649653013F022F9954902 -:101D900000202031C8712071012060713A21E1706A -:101DA000207010BD70B58F4C0646403C207800284E -:101DB0000BD18C48007E002807D109F0D7FA032800 -:101DC00003D009F0D7FA032804D1884884497B302E -:101DD00013F0FFF8834D2035E87908280CD2E87914 -:101DE0001022000100196830314600F025FEE87924 -:101DF000401CE871002000E0072020710120607184 -:101E00003B21E170207070BDF8B5764D0446403D31 -:101E10002878002803D17348007E002803D0704939 -:101E2000734813F0D6F8704F2188B889884203D1DF -:101E300009F09CFA022801D0022022E03E8C64883E -:101E40007200788CF98B521C944217D3694A514323 -:101E50009200504312F09AFF401EFF2180B2F531EC -:101E6000884200D90846844200D22046711C401C9A -:101E700012F08CFF761C7043401E86B2FE85EE8009 -:101E800000202871012068713C21E9702870F8BD9C -:101E9000F8B5544C0546403C2078002803D1514801 -:101EA000007E002804D052484D492C3813F091F898 -:101EB000A878002801D0012804D1A888FF21F53195 -:101EC000884204D959204649000113F082F8464E51 -:101ED0002988B089884203D109F048FA022807D03E -:101EE00002202071012060713621E1702070F8BD60 -:101EF0003D48002720308772A988B18501213176BD -:101F0000A978012900D00021817237484030407CF7 -:101F1000002801D009F0EFFF2771E3E770B5314CDD -:101F20000546403C2078002807D12E48007E002836 -:101F300003D109F01BFA002804D02D482849533852 -:101F400013F047F8287809F0EEFE002020710120F8 -:101F500060713021E170207070BD70B5214C054674 -:101F6000403C2078002803D11E48007E002804D081 -:101F70001F481B495F3013F02CF8287800280BD03D -:101F8000012809D0022807D06878402804D31848CF -:101F90001349663013F01DF8284609F0DEF90028D1 -:101FA00001D0002000E00C2020710120607134215C -:101FB000E170207070BD70B50A4C0546403C207839 -:101FC000002807D10748007E002803D109F0CEF988 -:101FD000002804D057200249000112F0FAFF0BE05C -:101FE000B01B000020030020D8010020AA0200003E -:101FF000B6050000C40900002978002913D00A2979 -:1020000011D014290FD01E290DD028290BD0322928 -:1020100009D04B2907D0642905D0FF2903D0FE49F8 -:10202000FE4812F0D6FF284609F0FCFE0020207181 -:10203000012060713321E170207070BD70B5F84CE3 -:1020400006462078251D002804D120464030007E19 -:10205000002804D05520F049000112F0BAFF3146A3 -:10206000002008F0A1FD2870002804D10622314686 -:10207000EC4812F011FE012060713221E1702070F5 -:1020800070BD70B5E64C05462078002804D1204686 -:102090004030007E002804D0A720DF49C00012F0A5 -:1020A00098FF00216956042914D0002912D0081D78 -:1020B00010D0001D0ED0001D0CD0001D0AD0001D38 -:1020C00008D00A3006D0283104D0D448D249443848 -:1020D00012F07FFFD448297801700120607131210E -:1020E000E170207070BD10B5CD4C2078002804D16F -:1020F00020464030007E002803D0C749CB4812F06C -:1021000068FF08F045FAE08008F00AFB2072002022 -:102110002071012060710521E170207010BDF8B5BB -:10212000BF4C07462034A07B25462035002805D12A -:10213000287E002802D1A878002804D0B748B649E4 -:10214000703812F046FF09F011F91026022822D14A -:10215000B7483988808988421DD1B1494839084635 -:102160000A7F6038807A002A03D080070CD40C20C4 -:102170000CE0800708D406200877AD484030407C4A -:10218000002801D009F0B7FE2E760020E0732674F7 -:102190000120A073F8BD0220F8E710B5A04C20780C -:1021A000002804D120464030007E002804D09B48FF -:1021B0009949823812F00DFF002020710E20A07086 -:1021C0000F20E070FF20A0710020C04320819548BF -:1021D000C01D0178A1728188A1814088E081012021 -:1021E0006071207010BD10B58D4C2078002804D18E -:1021F00020464030007E002803D087498D4812F0E9 -:10220000E8FE0821A01D0FF095FA002020710120A2 -:1022100060712B21E170207010BD70B5804D0446B7 -:102220002878002804D128464030007E002804D0B9 -:102230007A487949B13012F0CCFE7D48102221460F -:10224000303800F0F9FB7A481022A118203800F04D -:10225000F3FB774830380FF074FB754910221039C2 -:102260002C46A81D00F0E8FB002020710E20A07075 -:102270002A20E07001206071207070BDF8B5684CB4 -:1022800005462034A07B26462036002802D1307E29 -:10229000002804D067486049E53012F09AFEA9781A -:1022A000052912D0132910D014290ED015290CD0CD -:1022B0001A290AD0292908D03D2906D03B2904D063 -:1022C0005C485549ED3012F084FE28885A4988420E -:1022D00004D958485049F63012F07BFE09F046F810 -:1022E0000C212827022809D151482A888089904248 -:1022F00015D14B484838027E002A01D0E17310E026 -:10230000A97841760121017637760020E0734848AC -:102310004030407C002804D009F0EDFD01E00220AF -:10232000E07327740120A073F8BDF8B53C4F064652 -:1023300038783D1D002804D138464030007E002802 -:1023400004D089203449C00012F043FE31460120F8 -:1023500008F02AFC01242870002807D13048062202 -:1023600060303146054612F097FCAC717C71172045 -:10237000F8703C70F8BDF0B52B4F85B0403F3D7A0A -:10238000064627480078002804D13846A038007E49 -:10239000002804D0D3202049800012F01AFE3078A3 -:1023A000002806D0012804D022481B492C3812F0FE -:1023B00010FE082D4CD21C4820380190C46930789A -:1023C00000283FD0012804D01A4813491E3812F0C3 -:1023D00000FE294608310120884004430120A8401E -:1023E00020430090B1790E4C0802727969000919F6 -:1023F0001043FF3101318881B01C12F0AEFC7178BE -:1024000000020843A9000919C031C862387A401C8B -:1024100038720199009811E0B01B00007E050000A1 -:10242000E00200202500002000040020E706000054 -:10243000D801002079030000FF0E0000C8610020D1 -:10244000207108E029460831012088408443C5E70F -:10245000FE48072101710121FC480B224171C27025 -:10246000017005B0F0BD10B5F84C2078002804D1FB -:1024700020464030007E002803D0F549F54812F090 -:10248000A8FD12F0A5FE00202071012060710A2134 -:10249000E170207010BD10B509F0DDFB002804D0FC -:1024A000EC48EB49583812F094FD08F06FFA08F048 -:1024B00052F80AF07EFE002804D0BD20E4498000D6 -:1024C00012F087FD08F0B3FA002804D05F20E0493D -:1024D000C00012F07EFD12F07BFEDF480024047085 -:1024E000FFF77FF9D9480121047141710222C270BE -:1024F000017010BD70B5D54D04462878002804D170 -:1025000028464030007E002804D0F320D0498000C7 -:1025100012F05FFD20781F2801D8601C04D1CD483F -:10252000CB498F3012F055FD002028712078611CB6 -:1025300008F054FB012068712021E970287070BDFB -:10254000F8B5C24C0646207825464035002802D111 -:10255000287E002804D0BF48BD499C3012F039FDC8 -:102560003078012806D0002804D0BA48B8499D30F8 -:1025700012F02FFD012060710C20207130780027AF -:10258000B64E012808D008F0F1FE032867D008F005 -:10259000F1FE032871D076E008F0E8FE002803D1B0 -:1025A00008F0E8FE002804D008F0E0FE02283DD044 -:1025B00069E008F07EFA002865D0287C002862D106 -:1025C000A64802210C300FF03EF8002806D00F215B -:1025D000B089090212F0DAFBB18100E0B781012273 -:1025E00003219E4807F05AFE9C4808F006FCB0897B -:1025F00007F0D0FF002804D196489549B83012F072 -:10260000E8FCB089002108F0C9F9002804D09148FD -:102610008F49BC3012F0DDFC297F688B09F087FB05 -:1026200000282FD08B488A49C03015E008F0A2FE60 -:10263000002828D1287F002825D0012823D008F0A1 -:1026400038FA00281FD0297F688B09F070FB00281A -:1026500018D080487E49D33012F0BBFC12E0002035 -:1026600009F098FA00280ED12771287C00280AD199 -:10267000B089FFF797F806E0FFE7002009F08AFA33 -:10268000002800D127711B20E07001202070F8BDC8 -:1026900070B56E4D04462878002804D12846403095 -:1026A000007E002804D06B486949803012F091FC0C -:1026B00020781F2801D8601C04D166486449813005 -:1026C00012F087FC002028712078611C08F09AFA2B -:1026D000012068711A21E970287070BDF8B55B4D52 -:1026E000044628780C272E46403600280AD1307E32 -:1026F000002807D108F03AFE032803D008F03AFE7C -:10270000032804D153485249473012F062FC6079E3 -:10271000002801D001282FD1A079002801D001285C -:102720002AD1A07B002805D0012803D0022801D09F -:10273000032821D1607B40071ED0618801208003DF -:10274000814202D82288824201D920790CE0207986 -:10275000002804D0022805D0032803D004E0202953 -:1027600004D209E0A02A01D2012805D1208888429C -:1027700007D92079012804D0364835495C3012F059 -:1027800028FC20887083207930776079002802D077 -:10279000012803D00CE0324A002105E02B4A6032C8 -:1027A0009079002804D00121204608F086F90746D8 -:1027B00001202F7168711821E9702870F8BD70B57B -:1027C000224C05462078002804D120464030007E67 -:1027D000002803D01E49234812F0FBFB08F0C6FD79 -:1027E0000C2102280ED11D482A8883899A4219D1CA -:1027F0000246C032137F002B04D1807E0E2803D006 -:102800000F2801D0217103E00520107700202071EE -:102810000E20A0702E20E0702888E08001206071DA -:10282000207070BD0220F2E770B5084C0546207894 -:10283000002804D120464030007E002804D00948FA -:1028400003492C3812F0C5FB0EE00000E002002026 -:10285000B01B00003E03000000040020D80100204F -:1028600025000020D104000008F080FD0C21022882 -:102870000ED178482A8883899A421FD10646C036ED -:10288000327F002A04D1807E0E2803D00F2801D089 -:10289000217109E06F481022A91CEA3012F0FCF9FE -:1028A00004203077002020710E20A0702D20E070D1 -:1028B0002888E08001206071207070BD0220F2E75E -:1028C00010B501780B0012F075FC3D8787388787BB -:1028D00058878787873B3E878787515487878787B5 -:1028E00087874228872C3087878787348787878721 -:1028F00087878746874A4E872024876B5B5F63679D -:10290000876F877E827B77738700801CFFF78CFF41 -:1029100060E0801CFFF753FF5CE0801CFFF7DEFEE9 -:1029200058E0801CFFF7B4FE54E0801CFFF708FE5F -:1029300050E0801CFFF7DEFD4CE0FFF7ACFD49E006 -:10294000FFF791FD46E0801CFFF715FD42E0801C7B -:10295000FFF7EBFC3EE0801CFFF790FC3AE0801CA8 -:10296000FFF75BFC36E0FFF73EFC33E0FFF715FCBA -:1029700030E0801CFFF7D3FB2CE0FFF7B4FB29E02D -:10298000801CFFF77EFB25E0801CFFF757FB21E052 -:10299000801CFFF710FB1DE0801CFFF7DEFA19E03A -:1029A000801CFFF7BBFA15E0801CFFF771FA11E0FD -:1029B000801CFFF729FA0DE0801CFFF7F3F909E00E -:1029C000FFF7CEF906E0801CFFF79FF902E0801CBC -:1029D000FFF77DF9012010BD002010BD10B51E4984 -:1029E0001E4812F0F6FA10BD70B51D4A01241146BA -:1029F000184D4031030012F0DDFB05191C1C0419B1 -:102A00001C0001220021134807F048FC1448002153 -:102A1000483801774177C03809F005FA002804D01A -:102A20000E480D49D33012F0D4FA70BD0C745565C0 -:102A300070BD09490B48F6E730B5134606E0CC18DF -:102A4000203CE47FD51A44555B1EDBB2002BF6D147 -:102A500030BD0000D8010020B01B0000410600007E -:102A6000E00200204707000010B56038030012F0B4 -:102A7000A1FB0A060A0F13181F262A31363B0868E5 -:102A800000F093FD10BD05C9114600F0ADFD10BD6D -:102A9000086800F04CFE10BD05C9114600F054FE58 -:102AA00010BD4B6808788A68194600F065FE10BDB5 -:102AB0004B688A680868194600F07FFE10BD0868F8 -:102AC00000F09AFE10BD08884A6880B2114600F0F6 -:102AD000EAFE10BD05C9114600F00AFF10BD05C988 -:102AE000114600F01DFF10BD012010BD10B56C286F -:102AF00001D0012010BD087800F0B8FE10BD000024 -:102B000001203F49400608603E4908603E490A6886 -:102B1000FF231B029A4383121A430A603849803903 -:102B20000860704710B502460420384904E0C3002D -:102B30005B181B79002B0AD00346401EC0B2002B45 -:102B4000F5D133A1432012F044FAFF2010BDC30099 -:102B5000CA50002259184A718A7101220A7110BDA7 -:102B60002A4A0021C00080180171704710B5044640 -:102B7000042803D326A1522012F02BFA2348E100A7 -:102B80000C182079012803D021A1532012F021FA3A -:102B90006079A179401CC0B2814200D060710120EF -:102BA000174940068031086010BD70B516480068AE -:102BB0000004800F022803D015A1692012F009FA41 -:102BC000124E194C03252078C10088190279012A78 -:102BD00007D1427983799A4203D042798271705841 -:102BE00080472078401CC0B22070042801D3002008 -:102BF000207028466D1EEDB20028E4D170BD0000A3 -:102C000080E100E080E200E018E400E02C12002007 -:102C10007372635C736F635F7369676E616C6C6919 -:102C20006E672E63000000003C00002010B5EFF33B -:102C30001080C407E40F72B6D6484178491C417031 -:102C40004078012801D10FF065F9002C00D162B65F -:102C500010BD70B5CF4CE07800280AD10125E57091 -:102C6000FFF7E4FF0FF05EF9002804D000200FF01A -:102C700031F9002070BDC84865714560F9E770B54D -:102C8000EFF31080C507ED0F72B6C24C60780028D4 -:102C900003D1C2A18F2012F09CF96078401E6070B1 -:102CA0006078002801D10FF039F9002D00D162B60B -:102CB00070BD10B5B748C178002904D0002141711A -:102CC000C170FFF7DCFF002010BD10B504460FF007 -:102CD00029F9B049C978084000D0012020600020BF -:102CE00010BDF8B50246AB4C0026A67108200421A1 -:102CF00001251027130012F05DFA0D080A0C0E10C2 -:102D00001214161E262123252800257122E00220F8 -:102D100001E021711EE020711CE027711AE02020E3 -:102D2000F9E7012616E0FFF781FF0FF0FBF8002816 -:102D3000FBD002260EE02171A5710BE02771FBE7A5 -:102D4000202000E040202071F6E7FF2093A17E3094 -:102D500012F03FF90FF0F2F8002809D00FF0F4F864 -:102D6000B04205D130460FF0F2F80028FAD024E046 -:102D700001208007C5608D4A002151608C4A966110 -:102D8000854B02225A6085608A4803690569DB43E6 -:102D9000DB06DB175B1C10273D430561834D00E01C -:102DA00020BF6F68002FFBD0002B03D107691023D1 -:102DB0009F430761784882606960A07900280CD041 -:102DC0000FF0B0F805460FF00DF87B4A002D02D049 -:102DD000A260E06001E0E260A060002E01D100F09E -:102DE000B1F8F8BD10B504460FF0A2F8002805D0E0 -:102DF00068490120C8704A78521C4A702046FFF783 -:102E000070FF10BDF8B5694FB8680025012802D1E0 -:102E1000BD600FF05FF87868012800D17D603868E8 -:102E200001265C4C012814D13D606079002803D054 -:102E300000200FF04FF865712078002809D00FF0BE -:102E400071F8002805D05948C0388663000606612D -:102E5000A670386901282CD13D6100F068F8012086 -:102E600080074661A079002815D00FF05BF800902C -:102E70000EF0B8FF0099002901D0E16800E0A168D8 -:102E8000411A022901DA8A1C13DC0099002901D0B9 -:102E9000E06000E0A060FFF7C9FE0FF043F80028F3 -:102EA00006D04248C038866300060661A67000E07E -:102EB0002670F868012819D100F039F800F037F8C9 -:102EC00000F035F8A078002804D1FF2033A10530A8 -:102ED00012F07FF8FD60A5702570FFF7D0FE0EF0B0 -:102EE000F8FA002802D03148C038C663F8BD10B5E2 -:102EF000284CE078002801D10FF010F8012081075C -:102F0000886100F014F8A07800280BD0274CE06806 -:102F1000002803D10FF01BF80028F8D10020E06052 -:102F200000F005F800201C49C043886010BD08B5BA -:102F30005020694608806A461088411E118000288A -:102F4000F9D108BDF8B51448192787601749002042 -:102F50000860C8600EF0E6FFBD0701240D4E002892 -:102F600005D01248C03884632C61B47000E034701E -:102F7000FFF75CFE084847600D4930798863FFF72A -:102F8000D6FFAC61FFF7D3FF0849002008616C61F0 -:102F9000F8BD000040000020000300407372635C35 -:102FA000736F635F636C6F636B2E6300000100409F -:102FB0000005004000ED00E0FFFFFF7F10B510F0BE -:102FC00064F810BD00200449C8630120012181403C -:102FD000024A116000BF7047C01F004080E200E05D -:102FE00010B504460BF095F820460CF0AAF810BD79 -:102FF0007047704770477047704770477047704719 -:1030000010FFFFFFDBE5B151006001004F00FFFF43 -:1030100003B40148019001BD09000020FE49487039 -:10302000704710B5030012F0C5F8080E050E080829 -:103030000B0B0E1104F07DF810BDFFF7D1FF10BD92 -:103040000DF0E8FF10BD01F095FE10BDFF20F3A1CB -:10305000713011F0BEFF10BD7FB5F44905464868D8 -:103060008968082301910090F14A1946F1480EF051 -:103070008BFD0024F0480EF0A5FD641CE4B2082C82 -:10308000F8D3EB490320803140020CF02FF90028DF -:1030900003D0E2A1962011F09CFF1E220221E748F6 -:1030A0000AF0E7FCE5481E22032110300BF05BFA22 -:1030B000E2480722342174300AF034FCDF484C2106 -:1030C000283011F048FEDD496A46743108464C3814 -:1030D0000164FF317B31416401211172039002F0E0 -:1030E000B4F802A80CF050FC002803D0CBA1AA2011 -:1030F00011F06FFFCF4802222421A8380AF012FCF9 -:10310000CC4802222C215C380AF00CFCCC490B2064 -:103110000EF082F8002803D0C0A1B72011F059FFAB -:1031200003F0F4FF03F0F8F904F05AFE6B460022B6 -:103130000821C4A001F070FF002803D0B7A1BE2071 -:1031400011F047FF284605F071F9002803D0B3A11C -:10315000C02011F03EFF8521C900BD4811F0FBFDE4 -:10316000BB49B24A0020135C0C18401CC0B2E3708B -:103170000428F8D3A849002048608870C8707FBD33 -:1031800070B5B44E0546706A94B00C46401C04D12C -:10319000B06AC0430004000C0BD0306AC007C00FF7 -:1031A0002870706A11F0EAFDB06A2071000A60713F -:1031B00013E02B206946087009A968460AF0F8FB5D -:1031C000002803D095A1E42011F003FF012028700E -:1031D00006220AA9204611F05FFD2878002803D0B6 -:1031E0006079C0210843607114B070BDF0B5994C8E -:1031F0000646206895B00D463746401C0837002823 -:1032000008D16068401C05D1A068401C02D1E0686C -:10321000401C11D02068314611F0B0FD6068311DAE -:1032200011F0ACFDA068394611F0A8FDE068314608 -:103230000C3111F0A3FD25E02B206946087009A987 -:1032400068460AF0B5FB002804D0FF2073A10E30B9 -:1032500011F0BFFE08220AA9304611F01DFD2B20F7 -:103260006946087009A968460AF0A2FB002804D044 -:10327000FF206AA1153011F0ACFE08220AA93846D9 -:1032800011F00AFD20692E46401C0836002808D19E -:103290006069401C05D1A069401C02D1E069401C56 -:1032A00012D02069294611F069FD6069291D11F0CD -:1032B00065FDA069314611F061FDE06929460C31D8 -:1032C00011F05CFD15B0F0BD2B246846047009A90F -:1032D0000AF06EFB002804D0FF2050A1333011F01B -:1032E00078FE082209AF0AA9284611F0D5FC6846E5 -:1032F000047009A90AF05CFB002804D0FF2047A154 -:103300003A3011F066FE0822391D304611F0C4FC37 -:10331000D8E710B5002108460EF00CFD0021012071 -:103320000EF008FD002102200EF004FD0021032014 -:103330000EF000FD002104200EF0FCFC0021052011 -:103340000EF0F8FC10BD10B5414CA0780B2804D34A -:10335000FF2032A18A3011F03CFE207860214843E2 -:1033600000190830002101704178E722C908C9001E -:10337000C91C11404170284A0121917010BD70B5DF -:10338000254CA07800280ED0314800250178491C32 -:10339000C9B201700B2900D105708178491C817078 -:1033A0000EF093FDA57070BD70B51B4C05466068AE -:1033B000002804D0FF2019A1B33011F00AFE656087 -:1033C00070BD70B5144E224DFFF7BDFF7168044605 -:1033D000002907D06022FDF7F7FEFFF7D0FF00209D -:1033E0007060F1E72879002876D012485C380AF03E -:1033F000A9FA6060002804D1FF2008A1D13011F0A3 -:10340000E8FD60680AF0FCFA002831D0204600F0A0 -:103410006FFF607801071FE0340000207372635C67 -:10342000686F73745F636F72652E6300E051010013 -:10343000040400200C12002023300000840A002025 -:10344000B41000206E524635313832320000000090 -:103450008C0C00208000001007D5C008C000401C64 -:1034600060702879401E287127E0F74861682AE0DB -:10347000F54861680AF06FFA687900282CD0F248A4 -:103480004C380AF05FFA6060002804D1FF20EF4951 -:10349000F43011F09EFD60680AF0B6FA002816D0EC -:1034A000204603F085FE6078010709D5C008C000FA -:1034B000801C60706879401E6871FFF760FF83E7C9 -:1034C000E14861684C380AF046FA7DE704E0DE48DE -:1034D00061684C380AF03FFA70BDF7B505460078D0 -:1034E000002700090C463E46062803D0D749D84895 -:1034F00011F06FFD287A00280ED0012814D0D4488E -:10350000D249213011F065FD0298002C068001D0CF -:10351000278066800020FEBD02270926002C0ED0E1 -:10352000A889A080A87B08E003271426002C06D0D9 -:103530002869E060A88A2082287B2072E4E702984C -:103540000680E7E770B50E4600211C461980154637 -:10355000030011F02FFE0723050B1711231D230075 -:1035600022462946304603F0EFFD70BD224629462B -:10357000304601F078F970BD22462946304604F005 -:103580002AFB70BD22462946304602F0F9FF70BD85 -:10359000224629463046FFF7A0FF70BD9720AB4971 -:1035A000800011F016FD032070BD10B5A94C2178E4 -:1035B000002901D0082010BDFFF74EFD012020702A -:1035C000002010BD0146A04810B54C380AF0C3F9E0 -:1035D000A1494879401CC0B24871012803D19D48D7 -:1035E0004078FFF7C3FA10BDF8B50546072040073D -:1035F0000F460A18012189038A4209D2002D02D000 -:103600002818884204D2E81C80088000A84201D013 -:103610001020F8BD90488178002911D03988009198 -:103620004178602251430C18083420783B4600074B -:10363000000F00222146FFF785FF060004D015E0A9 -:10364000002038800520F8BD002D13D0398800985F -:10365000814201D90C260DE020783B460007000F7F -:103660002A462146FFF76EFF060005D00C2E01D03A -:10367000002038803046F8BD774D6878401CC0B2D5 -:1036800068700B2801D100206870A878401EA870CF -:1036900061784807400F022810D00128EAD16A4813 -:1036A00061680AF058F92879401CC0B228710128D5 -:1036B000E0D168484078FFF759FADBE7C806D9D46B -:1036C0006068FFF77FFFD5E770B50446634816468C -:1036D0000D46814204D15E485C49C53011F079FC49 -:1036E000012E05D05A485949D53011F072FC70BDF1 -:1036F00058480121C1706620207000202072A581E9 -:10370000A17370BD70B516460D46040001D1FFF7D8 -:103710001AFE662101700121017229680161A988E0 -:1037200081820673002C01D1FFF729FE70BD0721AD -:103730004907012241189203914201D3102070479A -:103740000721017000207047454A10B590420ED302 -:1037500001239B04C21A434B9A4208D3424B98421E -:1037600005D2072252078A18DB139A4201D3102090 -:1037700010BD0DF08AFD10BD394B10B599420ED326 -:1037800001239B04374CCB1AA34208D3364B9942F2 -:1037900005D2E3020124D318A403A34201D31020CD -:1037A00010BD022803D0102801D0092010BD0DF053 -:1037B00092FD0028FAD0052010BD70B5284B984224 -:1037C00012D301239B04274CC31AA3420CD3264BCC -:1037D000984209D2E4020D19DB139D4204D2002A5B -:1037E00004D014199C4201D3102070BD0DF099FD36 -:1037F0000028FAD0072070BD10B504460720400706 -:1038000001212018890394B0884202D3102014B0FB -:1038100010BD01F06AFD002801D01120F7E70F204C -:1038200008A9087369460BA80AF0C2F80028EED16F -:103830006846007A207068464089608068468089C2 -:10384000A0800020E3E70000B01100201C3400003D -:1038500015020000340000208C0C0020FFFF000047 -:10386000006001000000FC1F0040002010B594B073 -:10387000044601F03AFD002801D01120C7E7002CD2 -:1038800001D00720C3E7392168460170002181700B -:1038900009A90AF08DF8002803D02B492B4811F014 -:1038A00098FB0020B3E770B5294C0846E178002961 -:1038B00013D000280FD007225207012385189B033D -:1038C0009D4203D20568AA189A4201D3102070BD08 -:1038D0008288002A03D0012903D0082070BD092066 -:1038E00070BD04F0E1FA0028FAD10021E17070BD4A -:1038F000184A10B5914208D301229204164B8A1A35 -:103900009A4202D3154A914201D3102010BD0246BB -:10391000203A1F2A02D801F01FFC10BD072010BD5D -:1039200007225207012310B58A189B039A4201D33C -:10393000102010BD0246203A1F2A02D801F068FC70 -:1039400010BD072010BD00001C34000079030000EA -:1039500034000020006001000000FC1F0040002037 -:103960008107C90E002808DA0007000F0838800810 -:103970002C4A80008018C06904E080082A4A800030 -:1039800080180068C8400006800F704710B50D20F1 -:10399000FFF7E6FFC4B20420C043FFF7E1FFC0B267 -:1039A000844203D021A11A2011F013FB10BD012184 -:1039B000234A48031060234B00221A60224A5160B8 -:1039C000224A1060224A11601D4980390860704700 -:1039D00001211B4A480310601D4A5160194A002109 -:1039E00011601A490860704710B516490868012827 -:1039F00004D00EA1562011F0ECFA10BD15488068D5 -:103A00000022C0B20A600DF0BBFE10BD10B50D481B -:103A100001680029FCD0FFF7E7FF01200B494003B4 -:103A2000086010BD00ED00E000E400E07372635C2C -:103A3000736F635F68616C5F726E672E6300000076 -:103A400080E100E000D1004000D3004080E200E0CF -:103A500000D0004000D5004030B40121BC48C9026C -:103A60000160CD1005604A030260BA4803681B027A -:103A70001B0A036004680023240A24020460B64879 -:103A80000468240A24020460B44801244460846069 -:103A9000B34C23606360A360B24B19601D601A6071 -:103AA000B14B19601A600121016030BC704710B43D -:103AB0000121A748CC0204600A0202600B060360E1 -:103AC000A64841608160A64900200860486088607F -:103AD000A44804600260036010BC70470121A14843 -:103AE000C9020160C91001607047002805D0012893 -:103AF00005D0022805D19D4870479D4870479D48D4 -:103B0000704710B59CA18B2011F063FA002010BD06 -:103B100070B500219F4CA04DA04A914B002808D0C1 -:103B200001281DD0022822D093A1B32011F051FA10 -:103B300070BD01200004A060A86011601960984B5E -:103B400042109A60974A9060814A0012106096482D -:103B5000016087480160954801609548017070BD1B -:103B600001204004A060A8605160596070BD012030 -:103B70008004A060A8609160996070BDF8B594461B -:103B8000844A854D00240127754E002808D001285D -:103B900036D0022844D078A1E82011F01AFAF8BDF6 -:103BA000891E0902090A01200004906034606860DF -:103BB0007A4A1160012B21D000217D4A7D4B517042 -:103BC00061463D31DC63DF637B4B5C6002249C60BB -:103BD00004241C61744B196074490F60614B891592 -:103BE0001960704B58606048016075487349C16046 -:103BF00086606B49600348601770F8BD0121DCE7FF -:103C000001205C4E40046F4F012B04D134605060A2 -:103C100068603960F8BD9060346068603960F8BDF4 -:103C20000120524E8004684F012BF4D1EEE7674823 -:103C30004068704770B54A4D28680026554C0128E9 -:103C400006D1A068C00303D501200004A0602E6047 -:103C50006868012809D1A068800306D501204004C6 -:103C6000A0606E6001200FF04CF9A868012809D10E -:103C7000A068400306D501208004A060AE60022049 -:103C80000FF03FF970BD10B549490878002818D0E9 -:103C90000120434AC0039060424A400090602C4A91 -:103CA00000121060404A00201060314A10603F4A04 -:103CB000106008704A78002A02D048700FF021F98D -:103CC00010BD0320FAE70120414900060860704753 -:103CD0000120244900060860704701203C49400546 -:103CE0000860704701201F4940050860704731494E -:103CF0000020C86388151B4908607047410A354A8F -:103D0000C005C00D5043801C5143400A081870473D -:103D100010B4314C430B63431B0C5C020C602D4C04 -:103D20006343C31A2D485C0258432A4B400D43435A -:103D3000E31A0124DB0324041B191B1613700A6801 -:103D40001018086010BC704710B50FF0B2F910BD24 -:103D500080E100E008E400E018E400E000B000408A -:103D600040B1004080E200E000E100E048B10040E6 -:103D70004081004044B100407372635C72656D5FC6 -:103D800068616C5F6576656E745F74696D65722ECF -:103D90006300000000B3004040B3004040B5004065 -:103DA00000F5014000830040408500400082004053 -:103DB00050000020C08F004000850040008000407F -:103DC00080F5014044B5004048B5004000B50040D2 -:103DD00000E200E0093D0000378600006F0C0100A2 -:103DE0000E4A12680C498A420AD118470B4A1268D7 -:103DF000094B9A4204D101B50DF0DDFD03BC8E469E -:103E0000074909680958084706480749054A064B03 -:103E10007047000000000000BEBAFECA1C0100206E -:103E200004000020901D0020901D002010B5FA4CC9 -:103E300094B02168087A002836D017206A4610709E -:103E400000A806220931023010F026FF09A96846B1 -:103E500009F0AEFD112825D02168C03189790629E5 -:103E600020D007291ED008291CD004291AD00929DE -:103E700018D00A2916D00B2914D0052912D00028F1 -:103E800003D0E6A1F32011F0A4F82168B82040582F -:103E900006221C30093110F0FFFE2068017A8030C4 -:103EA000806BC17614B010BD3220C7E770B5DA4D13 -:103EB000044629680300C03111F07CF90C077C0B23 -:103EC0001A212E3B48515C677080FF20D3A1093036 -:103ED0006EE0887901286DD009286BD0052869D05B -:103EE0000A2867D00B2865D0FF20CCA10E305FE0F8 -:103EF000887901285ED0FF20C8A1153058E0887964 -:103F0000062857D0072855D0082853D0052851D067 -:103F1000FF20C2A118304BE0887909284AD00A282E -:103F200048D00B2846D0042844D0FF20BBA11E3027 -:103F30003EE0887903283DD007283BD0082839D0B7 -:103F4000092837D0FF20B5A1243031E08879062830 -:103F500030D00A282ED0FF20B0A12A3028E088795E -:103F6000062827D0072825D00B2823D0FF20ABA177 -:103F70002E301DE0887906281CD00A281AD00B287C -:103F800018D0FF20A5A1333012E08879092811D07C -:103F90000A280FD0FF20A1A1383009E0887909282C -:103FA00008D00A2806D0082804D0FF209BA13C3066 -:103FB00011F00FF82868C030847170BDFF2097A100 -:103FC0004130F5E79449C9220968525CD206920F44 -:103FD00005D1A0318A8B824201D1887F70470020B1 -:103FE000704770B504461120207000218A4D617021 -:103FF0002968C031897A002908D003290ED0042904 -:1040000010D0FF2085A16A3010F0E3FF207800096E -:10401000012802D92868807D607070BD0007000FFC -:10402000203002E00007000F30302070EEE730B59E -:1040300003887E497E4C8B4202D09A1FA2421ED238 -:1040400042888A4202D0951FA54218D2934216D8C0 -:1040500083887D24E400A34211D8C088884205D01B -:10406000734D04460A3C2D1FAC4208D2884208D04A -:104070008A4206D05B1C5A43C000824201DD072001 -:1040800030BD002030BDFFB50022099B002802D0C2 -:10409000994205DC5CE0002902D1002004B0F0BDAB -:1040A0000920FBE7845C002C12D085186F780D2F57 -:1040B0004CD010DC3B0011F07DF80A421B2A2A305C -:1040C0003032323A3A42835C002B3FD1521CD2B29A -:1040D0008A42F8DBE1E7122F31D004DC0E2F35D015 -:1040E0000F2F2CD132E0142F11D0152F27D116E02D -:1040F000022CD5D1AB78039C072B237001D25B0730 -:1041000001D40A20CAE7029B01241B7814E0E34390 -:10411000DB0708E0012C08D011E00620BEE70F25E0 -:1041200023072D075B19002BF4D03046B6E7029B1E -:104130001B789C070AD402242343029C2370835CCF -:10414000521C9A18D2B28A4204DDA9E70B20A5E7D7 -:10415000192676028A42A5DB9FE705E00278401C1B -:10416000002A01D0002070470A46491E89B2002A61 -:10417000F4D10120704730B5274D0021286887B061 -:10418000C943A030818300248477214606200DF0A6 -:10419000D1FD002105200DF0CDFD002102200DF004 -:1041A000C9FD0120FFF782FE28686946C030C4714E -:1041B00004720120087068460BF007FC07B030BDA0 -:1041C00030B5154C95B02268C0329279042A0CD0D3 -:1041D000052A0AD028236A4613705080132906D076 -:1041E0003B2904D0072015B030BD0820FBE7117132 -:1041F000104609A909F0DCFB05000BD12068C0308E -:104200008179062916D0082914D0072912D0052053 -:10421000FFF74CFE2846E6E7540000207372635C0B -:104220006761705F636F72652E630000FFFF0000BF -:104230007B0C00000420EBE730B587B0040003D00E -:10424000002107200DF076FDFE4D012128686A4609 -:1042500001720421117003210C300DF06BFA2968F2 -:104260004022887B8006800E1043887368460BF0DE -:10427000ACFB00280DD12968098A00299ED0002CAA -:104280009CD08B000122002107200DF0AEFC0728F6 -:1042900001D0032092E7002090E770B50025064684 -:1042A000002803D0002107200DF044FDE54C01213A -:1042B00020680172062109300DF03CFA2068817BEC -:1042C0008906890E8173FFF7B1FD2068008A0028F6 -:1042D0000AD0002E08D083000122002107200DF013 -:1042E00084FC072802D00325284670BD0025FBE783 -:1042F000F0B59BB0040004D11920D349400110F05F -:1043000068FE72202070616800260A780825521F16 -:104310000127CC48130010F04DFF0F0976D9FD7628 -:1043200078FCFBB576767676FAF97600C5480068B3 -:10433000C0308079032803D0C349C44810F049FE37 -:10434000002108460DF0F6FC002107200DF0F2FCDC -:104350006078BC4A28436070106810250146C0315F -:104360004B7A2B434B7263689D783C2D48D00246B4 -:104370009D88A032977763688030DB890B80636803 -:104380001B8A4B8063685B8A8B8095836168826B34 -:10439000C97911756168806B08311530062210F0FB -:1043A0007BFC0620FFF782FDA648CA210068FB229D -:1043B0000E54017E11400176B82109588A7A92087C -:1043C00092008A724682284602F0ACFE002804D091 -:1043D0009E489D491A3010F0FCFD284602F0BCF8BA -:1043E000002804D0994898491D3010F0F2FD284665 -:1043F00003F008FD002806D069209349C0003EE183 -:104400000120FFF753FD1BB0F0BD064600688F8802 -:10441000C0308079062812D0072810D008280ED086 -:1044200004280CD009280AD00A2808D00B2806D066 -:10443000052804D0D5208449800010F0CAFD60789A -:10444000284360703068C030417A294341728079D6 -:10445000092811D00A280FD00B280DD005280BD021 -:10446000FFF789FE384602F062FE384602F07AF81D -:10447000384603F0FDFCC6E7FFF77DFE0220FFF79C -:1044800015FDEFE70068C0308079062812D00728B4 -:1044900010D008280ED004280CD009280AD00A28E9 -:1044A00008D00B2806D0052804D06F206649C0002C -:1044B00010F08FFD6068807902F0F1FE0028A2D034 -:1044C0006178294361706168C8809CE7074600688D -:1044D000C0308079062812D0072810D008280ED0C6 -:1044E00004280CD009280AD00A2808D00B2806D0A6 -:1044F000052804D055485449623010F06AFD6078B0 -:10450000284360706068C188386804E032E197E150 -:1045100084E084E00FE0C030018061680989418057 -:10452000616849898180002102200DF003FC386810 -:10453000C030C67167E706460068C030807906283B -:1045400019D0072817D0082815D0042893D0092897 -:1045500011D00A280FD00B280DD005288BD03B484E -:104560003949793010F035FD3068C0308079042841 -:10457000ABD00528A9D03068807C40063AD5606869 -:1045800002210C30FFF7E9FD002833D060680821D4 -:10459000001DFFF7E2FD00282CD03168B8204058FC -:1045A000807A800708D1CA20405C002808D1488A58 -:1045B000C20505D5C00703D14A8A402082434A82FA -:1045C0004A8A802082434A822D2268460270BC209B -:1045D000425A684642801022973101A810F05CFBD5 -:1045E00009A9684609F0E4F90028A3D0174816493C -:1045F000A03044E062683068AC2192890A52616858 -:104600000822091DAE3010F047FB10A80574306871 -:10461000AE30159014A80BF0D8F9F4E68F71064669 -:104620000068C030807906281FD007281DD00828D0 -:104630001BD00428F1D0092817D00A2815D00B2840 -:1046400013D005E0540000201C42000029030000A4 -:104650000528E2D0F949FA4810F0BBFC3068C030B8 -:1046600080790428D9D00528D7D0606881790029BD -:1046700002D08078002805D0F148F0496C3010F065 -:10468000A8FCC0E66078B8212843607030680958FB -:10469000897A8907890F012952D1817C09064FD473 -:1046A000017E490701D5042100E00321C030817259 -:1046B0002B206946087009A9684609F079F9002895 -:1046C00004D0DF48DD49213010F083FC69463068B2 -:1046D000098D81820E2210A90A74DA49B822159137 -:1046E000125808324A61024660324A6092790A7072 -:1046F000024614320A61521D8A601032CA60133AAF -:104700008A619632CA61921C0A62473A4A62103242 -:104710008A621032CA62473ACA63521E0A64921F02 -:1047200050304A64886414A80CF038FB022815D075 -:10473000002813D0C248C1494A3010F04AFC0DE0AD -:10474000817C4906017E490701D5042100E003214F -:10475000C0308172002106200DF0ECFA3068418AE9 -:104760000A0602D440229143418289B280229143B9 -:10477000418248E6B4480068C0308079032804D0FC -:10478000AF48AE49783010F024FC002108460DF007 -:10479000D1FA002107200DF0CDFA6078AA4A28430B -:1047A0006070106810250146C0314B7A2B434B7264 -:1047B00063689D783C2D00D122E602469D88A03298 -:1047C000977763688030DB890B8063681B8A4B8036 -:1047D00063685B8A8B8095836168826BC979117588 -:1047E0006168806B08311530062210F055FA0620FA -:1047F000FFF75CFB9448CA210068FB220E54017E3F -:10480000114001764682284602F08CFC002804D034 -:104810008B488A49923010F0DCFB284601F09CFE60 -:10482000002804D086488549953010F0D2FB2846F0 -:1048300003F0E8FA00289CD08148804997301EE7B1 -:10484000607828436070DEE500290BD088807E48C0 -:104850000068C0300288CA8002880A8142884A8182 -:10486000808888817047F7B5064600780C46002797 -:10487000010982B03D46012974D073480068009058 -:10488000C03002296FD0072904D00A296CD06B49A7 -:104890006E48E3E171680A78521F130010F08AFC39 -:1048A0000F09A551A5A52F585847A5A5A5A5656F22 -:1048B000A5008A783C2A1BD010271625002C7DD015 -:1048C0008888A0807068A21DC08920827068C08915 -:1048D000E0817068008A60827068408AA082716896 -:1048E00008460831C07901F09FFB0020607375E035 -:1048F00019270725002CE2D00021A17171E01127B2 -:104900000725002CDBD089880091A1807168F722EF -:104910008979A171417A11404172009802F008FC36 -:10492000009801F023FE009803F0B0FAC1E10127DE -:104930000925002CC3D08888A080706880792072F7 -:10494000B7E1888812270E252146FFF77DFFB0E1E9 -:1049500018270825002CB2D08888A080A01DFFF75A -:1049600040FBA6E145E0A1E15DE01A270725002C08 -:10497000A5D04888A08070680079A07199E18A78F4 -:104980003C2AB5D010271625002C98D08888A08006 -:104990007068C08920827068C089E0817068008A70 -:1049A00060827068408AA0827168607B497D40089F -:1049B0004000C907C90F0843607300E036E1716821 -:1049C000C007497DC00F49084900084360737168FA -:1049D000A21D08460831C07901F026FB1A4800687C -:1049E000C030417AEF22114046E1532013490001C3 -:1049F00034E1307A012803D014481049C5382DE13C -:104A000012270E2570892146FFF71EFF002C91D03A -:104A100070784007400F032888D10B480068C030E9 -:104A2000417AFB22DFE708490968A031002C01D058 -:104A30008A8BA280327A921E0AE000001C4200009B -:104A4000ED030000AC120020540000200C06000012 -:104A5000130010F0AFFB073D4853EDEE6F05ED007E -:104A600013270C25002C90D0009900224A82F1686F -:104A700089788907890F0129217A26D049084900B8 -:104A80002172FD231940F3689B785B07DB0F5B0005 -:104A900019432172E323E2801940F3681B785B0716 -:104AA000DB0E19432172DF231940F3685B78DB07C3 -:104AB0009B0E194321726272F1680122C978A172BA -:104AC000017A1143F7221140ADE001231943D7E7E2 -:104AD00015270C25002C9AD0F06806220068A11D2D -:104AE0000EF07CFFE5E016270725002C8FD0317BE8 -:104AF000A171017A08221BE00172DAE01427122565 -:104B0000002C84D00098A21D8030806B01461531A6 -:104B1000007D01F089FAB089E081207C0121084301 -:104B2000F92108402074FE480068C030017A022252 -:104B30001143E1E717273825002C77D03221A01D3B -:104B400010F007F90020A071207A03210843207299 -:104B5000FB210840F24909680A7E5207D20F9200F1 -:104B600010432072B8204058807A800757D0A07A2E -:104B70008A7C4008D2074000D20F1043FD2210402B -:104B8000A0728B7CFB229B07DB0F10409B0018431D -:104B9000A0728B7CF7269B07DB0F3040DB001843AD -:104BA000EF231840A072E07A10408A7CD206D20F20 -:104BB00092001043E0728A7C3040D206D20FD200BD -:104BC0001043E072888AA0812046102267310E309F -:104BD00010F062F8D249A07F0968C0078A7DC00F33 -:104BE00052001043A0770A7E400852074000D20FBF -:104BF0001043A077084640304DC820344DC4303CA7 -:104C00003F20405C22463032393101F00DFAC44871 -:104C100000688030806B817A890889008172C04881 -:104C20000068C030017AFB22114065E737E000E000 -:104C300038E0327B022A14D017273825002C2ED0DA -:104C4000017AFB2319400172012A17D0032A17D0D9 -:104C5000042A18D0052A16D0B249B34810F0B9F981 -:104C600027E019270725002C19D0898BA180012165 -:104C7000A171417A4908490041721AE0012000E01F -:104C80000220A07106E0707B0007000F8030A07149 -:104C9000052A02D00020E0710BE00120FBE7049818 -:104CA00005800CE0A0489F490A30D7E7317A0029F7 -:104CB00008D00498002C058001D027806580002052 -:104CC00005B0F0BD19270725002CE8D00021C94305 -:104CD000A1800021A171417AFD2284E610B5904C9B -:104CE00094B02068C0308079022809D0032807D00A -:104CF000052805D0092803D00A2801D00B2837D170 -:104D00001B2108A801730021817369460BA808F0D4 -:104D10004FFE002804D1684640781B2802D00320AB -:104D200014B010BD002108460DF004F80021072042 -:104D30000DF000F868468078002819D12068C0304E -:104D40008079801E030010F035FA0A060613081356 -:104D500013130D0F1113012000E00420FFF7A6F834 -:104D60000020DDE70620F9E70720F7E70820F5E750 -:104D70000820D5E770B50025694C002807D0022827 -:104D800017D0072828D033206649400146E0FFF7B6 -:104D9000A5FF00280CD1FEF7D6FA2221017005727A -:104DA000FEF7EDFA2068C030417A022211434172C9 -:104DB00070BDFEF7C8FA122101700121017221684D -:104DC000BC22525A4281C031CD71FEF7D8FA206818 -:104DD000C030417A0422E9E72168C620405C0228FD -:104DE00009D0032807D0092805D00A2803D00B28AA -:104DF00001D00528DCD1887B8109012911D08009E7 -:104E000004D0494847496E3010F0E3F80020FFF71E -:104E100044FA0028CCD044484249723010F0D9F806 -:104E200070BD0020FFF708FAF3E770B50D460400E7 -:104E300004D1CD203B49C00010F0CBF820780128E8 -:104E400005D0394837499D3010F0C3F870BDA188AE -:104E50003648334E814209D1E288824206D1306819 -:104E60001321A030808BFFF7ABF970BD814202D1D6 -:104E7000E08800280AD012202870687808210843AA -:104E8000687007CC083507C5002106E000227823AA -:104E9000114602200CF0A9FE02213068C030C17119 -:104EA00070BD1F480068C030807A704738B51C4C10 -:104EB00005460278206813000146C03110F07AF9E7 -:104EC00009A8060909A21945728AA800FEF7AEFFD3 -:104ED00038BD8879062806D0092804D0124811491F -:104EE000B53010F076F820680422017E1143017677 -:104EF00088E0A9880029EBD0A030808B0B4988423C -:104F0000E6D0A868002804D107480649C53010F04B -:104F100060F8A8680A38A8600090AB88206807E0AD -:104F2000540000201C420000E9050000FFFF0000C3 -:104F3000A030808B0622042102F028F80028C7D078 -:104F4000F849F94810F045F838BD287902288879E1 -:104F50000DD00428F8D00528F6D0284601F075F8C1 -:104F600020681321A030808BFFF72AF938BD07286D -:104F700006D00A2804D0EC48EA490A3010F029F893 -:104F8000284601F062F820680122C030417A1143BE -:104F900041728079072803D00920FEF787FF38BDCA -:104FA0000620FAE7887906280AD0042808D00928BC -:104FB00006D0052804D0DC48DA49313010F009F871 -:104FC0000ECDDA480361C2608160A2210170FEF754 -:104FD000EBF938BD8879062818D0072816D009289B -:104FE0000DD00A280BD0D048CE4944300FF0F1FF45 -:104FF0002068C0308079062808D0072806D00B200A -:10500000FEF754FF284601F020F838BD0820F7E7E6 -:10501000C548C449583095E7FFB593B001246846A8 -:1050200003218470C9021D4601800AF0A6F90022FE -:105030006946012003F0ABF906460AF0A2F9002EFA -:105040005CD16846152184704902018000271C212B -:1050500001A808970FF07FFE01200146103108A833 -:1050600001700020014608A841708178F9200140B4 -:10507000891C214308A881706846017902263143C2 -:10508000017114998185C7851F21018608A80A909E -:1050900013980D90684609900AF06FF90EAA09A9B5 -:1050A00001A802F036FF07460AF06BF9002F02D084 -:1050B000384617B0F0BD9E4F68463968008F48806B -:1050C000684684709B49018008A88078F9210840CF -:1050D000801C4108490008A88170684686850686BC -:1050E00015A80D900AF049F90EAA09A901A802F025 -:1050F00010FF06460AF045F9002E01D03046D8E7E9 -:1051000068463968008F88808A4968468470C91C5F -:105110000180298810A8018069884180A988818040 -:10512000E988C180082168468185018610A80D9014 -:105130000AF023F90EAA09A901A802F0EAFE044622 -:105140000AF01FF9002C01D02046B2E76846396802 -:10515000008FC8800020ACE7F0B5774D95B00C46C5 -:10516000A9423FD30126B604744FA11BB94239D3DB -:1051700073498C4236D2202806D0212827D02228F5 -:1051800042D0072015B0F0BD3C216846017021884F -:1051900041806188818009A908F00AFC0028F1D1CA -:1051A00008A98979002903D002290ED00320E9E754 -:1051B0006168A942E6D38A1BBA42E3D3604A9142AE -:1051C000E0D26A46128D0A80DCE75E48DAE72068A2 -:1051D000574C002813D00721490701224118920398 -:1051E000914201D31020CDE706210EF0E1FB2168AA -:1051F000A82250500120A03188750020C2E7206805 -:105200000021A0308175F8E7204600F02AFFB9E7B9 -:10521000494A10B5914208D301229204474B8A1A99 -:105220009A4202D3464A914201D3102010BD202851 -:1052300005D0212803D0222803D0072010BD062046 -:1052400010BD084600F051FF10BD70B50446374848 -:10525000CC21AC300FF07FFD3448354EAC3000210E -:105260003060C943A0308183002585770120FEF797 -:105270001DFE3068C7210D54E121C57389000182EC -:10528000B6210D54014609310830FDF779FF316828 -:10529000084629311930FDF7A9FF002C24D03068C9 -:1052A00080308463FEF7C2FD1E20E081607A8F218A -:1052B0000840303060723068014614312161983105 -:1052C0006162933921601031616025721339A162E6 -:1052D000091FE1628531E163303921631031616377 -:1052E00010310930A163A06470BD11480068C0305E -:1052F0008079042803D0052801D0002070470120C0 -:10530000704770B506460C480C46814208D3012010 -:1053100080040A49201A884202D30948844213D3E0 -:10532000102070BD1C420000B30600004C1200208B -:1053300054000020012A0000006001000000FC1F52 -:105340000040002002300000FFF7CFFF002801D00E -:105350001120E6E7FD48FE4D002E02D0012E46D179 -:105360002FE02278002A0AD00121012A09D0022A3E -:1053700014D0032AD5D1A2799209D2D112E000210A -:1053800003E0A2799209032ACBD128680622017290 -:1053900060308171611C0FF07FFC05E0A2799209F9 -:1053A000012ABED128680172002107200CF0C2FC3E -:1053B00028680622611C09300FF06EFCFEF736FDEE -:1053C00011E02178002912D0012910D0022910D033 -:1053D0000329A6D10120FEF760FF002803D0DD4994 -:1053E000DD480FF0F6FD2868C673002099E7072016 -:1053F00097E70120FEF720FFEFE707214907012289 -:1054000010B541189203914201D3102010BDD0492C -:10541000024609680B7A0931184600F005FE0020A3 -:1054200010BDFFB599B005460020694608710872A5 -:1054300008A9087408751E4614460121C748890446 -:10544000C74AC84B002D06D085420DD36F1A97422C -:105450000AD39D4208D2002C09D0844204D3601A9A -:10546000904201D39C4202D310201DB0F0BD2846CB -:10547000204318D01F270CAB01AA009728461A9981 -:10548000FEF701FE0028F0D10DAB02AA31462046FE -:105490000097FEF7F8FD0028E7D16846007AC107BB -:1054A00003D00A20E1E70720DFE7800705D568463B -:1054B0000079800701D50B20D7E7FFF716FF0028FA -:1054C00001D01120D1E703AF002D0FD01A2069467B -:1054D00008731A9888732946F81C1A9A0FF0DCFB97 -:1054E0000EA903A808F064FA0028BED1002C0ED043 -:1054F000202168460173867332462146F81C0FF05E -:10550000CBFB0EA903A808F053FA0028ADD19049AF -:1055100008A80968007C08700020A6E7F0B50446DA -:105520008E48002795B084426FD301208004211A51 -:105530008B488142F8D38B48844266D22378012B72 -:105540000BD1864960688842EED39904421A844997 -:105550008A42E9D383498842EFD27D490A681546D9 -:10556000C035A879022814D0032812D0052810D0FD -:1055700009280ED00A280CD00B280AD0012803D005 -:10558000002B06D0012B04D0687AC506AD0F06D1DA -:1055900001E00820F6E5850701D4400701D5112078 -:1055A000F0E5012B15D0208A6F4E0546203DB5420F -:1055B0007ED2022B01D0032B01D1A02878D3012B5E -:1055C00007D01078C00704D0608A002870D0B428B3 -:1055D0006ED8002B06D0012B08D0022B04D0032B51 -:1055E00066D110E0002512E0022510E06068012578 -:1055F000007800280BD0012808D0022806D0032804 -:1056000004D05248BEE5032501E066E00127D07BC7 -:1056100001281CD1108A002819D0907B810901290A -:1056200011D0800904D04C484A49E4300FF0D1FC35 -:105630000120FEF732FE00280BD047484549E830EC -:105640000FF0C7FC05E00120FEF7F6FDF3E7FEF7DB -:10565000EDFB207A002806D0012806D0022806D0CB -:10566000032825D105E0002604E0012602E00226F9 -:1056700000E00326002D01D0022D42D1002E40D0A3 -:10568000E068002814D00179002928D008290FD813 -:10569000027B9446082A0BD800290ED02F4A0168B5 -:1056A00091421AD3012292048B1A2D4A934200E0B0 -:1056B00084E012D32B4A91420FD26146002912D0C6 -:1056C00080682649884208D301218904421A244966 -:1056D0008A4202D32349884205D3102052E5027B37 -:1056E000002A6BD0D4E71A4800680078800702D0FF -:1056F0001648401E46E5022D03D1022E5ED0032E31 -:105700005CD0182168460170218A4180218A8180FD -:1057100085710F480068007A002801D0012870D1F7 -:105720006946C8716846077221780930012932D06C -:1057300006210FF00EFB07216846C173067409A904 -:1057400008F036F90028C9D10A210FE00232000022 -:10575000540000201C4200005F08000000600100AF -:105760000000FC1F00400020E13F0000684601707F -:1057700009A908F01DF90028B0D13A20694608703F -:1057800009A9684608F014F90028A7D1002D08D00F -:10579000022D06D04CE061680622491C0FF07CFA0D -:1057A000C9E7002E44D00026374623E00168B00048 -:1057B00009580978002903D0012904D00720E1E421 -:1057C00069468F7002E001216A469170E168062205 -:1057D0000968095800A8491C03300FF05DFA0B2036 -:1057E0006946087009A9684608F0E2F80028E6D181 -:1057F000761CF6B2E0680179B142D7D800266F4630 -:1058000012E050E08068B10041581022B81C0FF03F -:1058100043FA3B206946087009A9684608F0C8F8B1 -:105820000028CCD1761CF6B2E068017BB142E9D801 -:105830001B20694608700120887009A9684608F095 -:10584000B7F80028BBD108A840791B282BD1002D20 -:105850000AD0012D04D0022D08D0032D18D105E067 -:105860000320FEF723FB26E003200FE0FE4800683C -:10587000C030807903000FF09DFC0916061616183B -:1058800016081A1C1600022000E00920FEF70EFB85 -:10589000608A00280FD000228300114610460CF0C9 -:1058A000A4F9002807D003206CE40520EEE70A20C5 -:1058B000ECE70B20EAE7002064E470B586B00C004A -:1058C00006460BD0E94884424AD301208004E849C7 -:1058D000201A884244D3E748844241D2E24D2868E6 -:1058E000C030C179022902D0407A400702D5112088 -:1058F00006B016E5002C04D02046FEF798FB0028E1 -:10590000F6D13046FEF75EFB012803D0022823D0F3 -:10591000D948EDE721001BD1082069468882286814 -:1059200001ABC08805AA002103F019F90028DFD1D6 -:105930006846808A082801D00320D9E76846818814 -:105940008181C188C181018901824189418203A984 -:10595000304601F074FCCBE7002C01D00620C7E7ED -:105960001020C5E770B50C460546FEF72BFB012855 -:1059700003D0022801D0C048D3E421462846FEF7D0 -:105980001FFCCEE400B50146143095B0192801D2B1 -:10599000880707D008461E3004D00A3002D00720FE -:1059A00015B000BDFFF7A1FC002801D01120F7E7DA -:1059B000AD4831220068417068460270817009A9C3 -:1059C00007F0F6FFECE701B582B0022069460880D7 -:1059D000A54802AB00686A468088002102F02AFFD1 -:1059E00069460988022900D003200EBD38B502217E -:1059F0006A4611800721490701224118920391420A -:105A000001D3102038BD9849034609686A468C883E -:105A10000021204603F0A3F8694609880229F1D045 -:105A2000032038BD3EB504460820694608808F48EB -:105A3000844208D3012080048D49201A884202D371 -:105A40008C48844201D310203EBD2046FEF7EFFA79 -:105A50000028F9D12088694688806088C880A0889D -:105A60000881E0884881804801AB00686A46C088A8 -:105A7000002102F0DFFE694609880829E4D00320EE -:105A80003EBD1FB504460820694688817748844298 -:105A900008D3012080047649201A884202D3754831 -:105AA000844202D3102004B010BD6F486B460068DA -:105AB00003AAC088002103F052F80028F3D16946F8 -:105AC0008989082901D00320EDE7694609882180EA -:105AD00069464988618069468988A1806946C98884 -:105AE000E180E0E7FEB50546604817460E46814274 -:105AF00008D3012189045E4A731A934202D35D4B95 -:105B00009E4201D31020FEBD1F2F01D90C20FEBDE7 -:105B1000554C85422AD3681A904227D39D4225D2FC -:105B2000206801A9408802F037FE0028EFD12878CC -:105B300069464871206801A9408802F010FE0028DB -:105B4000E5D169460090087802210843694608704B -:105B50004979090703D0082108436946087020687D -:105B60006946408802F0A5FD0028D0D169460F8122 -:105B700020683346408802AA002102F05BFE694695 -:105B80000989B942C3D00320FEBD38B50C460721B0 -:105B9000012249079203002802D04318934202D2FF -:105BA0006118914201D3102038BD21886A461180C6 -:105BB000002801D000290BD02B49034609684D88E5 -:105BC0000021284602F0CBFF69460988218038BDB4 -:105BD0000C2038BD30B50C46244987B08C4208D320 -:105BE00001218904224A611A914202D321498C423F -:105BF00002D3102007B030BD1B4D2968C0310A7A8E -:105C0000520708D48979491F0B000FF0D3FA050415 -:105C10000604040604000820ECE7FEF7D3F9012887 -:105C200003D0022839D01448E4E720881E2801D286 -:105C30000720DFE72868C030807906282BD00A20AB -:105C4000FEF734F90520694608700879A1788008C4 -:105C5000C9078000C90F084369460871FB21084045 -:105C6000A1788907C90F09E05400002000600100F5 -:105C70000000FC1F004000200230000089000843A3 -:105C8000694608712088C880684609F09EFE002891 -:105C9000B0D00320AEE70720D2E70620AAE7F0B590 -:105CA00087B014460D46FEF78DF9012804D002286E -:105CB00002D0FE4807B0F0BDFD4B18680146C03168 -:105CC0000A7AD20707D08A79042A04D0052A02D09A -:105CD000002D02D052E00820ECE7F64A944208D3A7 -:105CE00001229204F44BA21A9A4202D3F34A94423C -:105CF00001D31020DEE7A278D206520F042A0CD876 -:105D0000E378072B09D3102B07D822799A4204D3C2 -:105D1000102A02D822881E2A01D00720CAE702468C -:105D20008032966BF727F372966B23793373966BF9 -:105D3000737A3B40A778BF06FF0FFF003B437372A7 -:105D4000966B2388F381966BA778B37AFF079B083D -:105D50009B00FF0F3B43B372FB273B40A778966B3A -:105D6000BF07FF0FBF003B43B372926BA478537A17 -:105D7000E406DB08DB00640F234353720B226B46FF -:105D80001A70852D22D008DC002D17D0812D17D058 -:105D9000822D17D0832D08D116E0862D18D0882D9E -:105DA00018D0892D18D08A2D18D00B221A71B6223E -:105DB000125CBF4C002A13D0A83012E00022F5E795 -:105DC0000122F3E70222F1E70322EFE70522EDE7E4 -:105DD0000622EBE70822E9E70922E7E70A22E5E7DE -:105DE00000200290887907280BD0082809D00920C4 -:105DF000FEF75CF8684609F0E8FD002803D00320B0 -:105E000058E70620F4E720680422C030017A4908E8 -:105E100049001143017200204CE770B5A44E0D46B5 -:105E2000316886B0C031097A1446090701D40820C8 -:105E30005EE5FEF7C7F8012803D0022801D09B4891 -:105E400056E5002D12D09B48844208D301208004DF -:105E50009949201A884202D39848844201D31020DD -:105E600046E5012D0BD0022D02D106E0002C01D019 -:105E700007203DE50020029005E0022000E001201F -:105E8000694608710294032069460870684609F063 -:105E90009CFD002801D003202AE53068F722C0309D -:105EA000017A11400172002022E570B594B01446C9 -:105EB0000E46FEF787F8012804D0022802D07B485E -:105EC00014B059E57A4D2868C030007A800701D4B3 -:105ED0000820F5E7002C01D00720F1E7FFF705FACD -:105EE000002801D01120EBE7002E1DD02D2168469F -:105EF00001702C68BC20015B684641801022B11CF7 -:105F000001A80EF0C9FE207EFB210840B17CC90724 -:105F1000490F08432076B07CFF214008A075608AB5 -:105F200082310843608207E02E21684601702868AC -:105F3000A030818B6846418009A9684607F038FD8A -:105F40002968FD23C0310A7A1A400A72B8E710B5F1 -:105F50000C46FEF737F8012803D0022801D0534839 -:105F600010BD5448844208D3012080045249201AAD -:105F7000884202D35148844201D3102010BD2046EC -:105F8000FEF72FF8002010BD10B594B00446FEF7C0 -:105F900019F8012804D0022802D0444814B010BDDA -:105FA00043480068C0308179042910D005290ED0FB -:105FB0003820694608704C8001200871487109A991 -:105FC000684607F0F5FC0028E8D00B20E6E7002043 -:105FD000E4E710B594B00446FDF7F4FF012803D0C0 -:105FE000022801D03148D9E731480068C0308179B2 -:105FF00004290DD005290BD03820694608704C8043 -:1060000000200871487109A9684607F0D1FCC5E76E -:106010000020C3E726480068C0308079062801D3F5 -:10602000012070470020704708B51346002806D0AD -:1060300023A00068009048796A468009105C1870B7 -:106040000622581C0EF028FE08BD10B50446FDF7C8 -:106050007AF9A22101700ECC08300EC0FDF78FF93D -:1060600010BD70B5124C054601682068002913D098 -:10607000104A914208D3012292040F4B8A1A9A4285 -:1060800002D30E4A914201D3102075E410227730DA -:106090000EF002FE206801218030806B01722068C2 -:1060A000A9880182C17B012919D10BE002300000CF -:1060B00054000020006001000000FC1F0040002090 -:1060C0000302FF01807B800901280AD00120FEF72E -:1060D000E4F8002803D01A491A480EF07AFF00208D -:1060E0004AE40120FEF7A8F8F3E770B5054600681A -:1060F000154C00281ED007214907401801218903AB -:10610000884201D3102037E42068B8210958097A61 -:10611000012909D00146773129300AF08EFF206825 -:1061200001218030806B017221681022286877314C -:106130000EF0B2FD2068008AA88000201CE4000058 -:106140001C420000FD02000054000020FFB581B099 -:1061500001980E46C078174610360E37022809D02F -:10616000032840D005287DD0F2A1F7480EF031FF7A -:1061700005B0F0BDCC890A2060430E301880312371 -:106180000A98002A0380F3D0486800889080002095 -:10619000D0801081097B9481891FCDB21AE03088AC -:1061A0007168388048780A7800021043F880C8780F -:1061B0008A78000210433881BA1C091D28460BF06A -:1061C0008AF8002D01D0002802D000203871788094 -:1061D00008360A372046641EA4B20028DFD1019990 -:1061E0000020C870C4E7CC890A2060430E301880B4 -:1061F00032230A98002A0380BAD048680025008814 -:106200009080D5801581087B401FC0B2009094819A -:1062100042E0716832880878FA803A79C3075208F8 -:106220005200DB0F1A43FD231A408307DB0F5B008C -:106230001A43FB231A404307DB0F9B001A43F72343 -:106240001A400307DB0FDB001A43EF231A40C30693 -:10625000DB0F1B011A43DF231A408306DB0F5B01B0 -:106260001A4300E020E0BF231A404306DB0F9B01E6 -:106270001A433A71C00978718A784B781002184332 -:1062800038813A46C91C00980BF025F8002801D047 -:10629000BD703D8008360A372046641EA4B200282F -:1062A000B7D10198C57063E7087BCC89801E85B2A1 -:1062B0002846083060431030188034230A98002A9A -:1062C00003808FD048681746008890800020D080D7 -:1062D000108194811037E000D581C0190CE030881E -:1062E0003880009878602A46716800980EF0D4FCD7 -:1062F000009808360837401900902046641EA4B262 -:106300000028ECD16BE7FFB50546C07881B00C469C -:106310000A9E03000EF04EFF0BA3071733414F6D8B -:106320008F9D9D9DA300207B1746082806D003283B -:1063300004D085487FA154300EF04BFE04990E2006 -:10634000088030200CE0207B1746042804D07E48CB -:1063500078A171300EF03DFE04990E2008803120A6 -:106360003080002F44D060680088B880607AFF30A9 -:106370000130F880E08938810020B88137E0207B47 -:106380001746042804D070486AA18D300EF021FE13 -:1063900004990E2008803220E2E7207B174602286D -:1063A00004D0694863A1A9300EF013FE04990E20B1 -:1063B00008803320D4E7207B1746042804D06248A5 -:1063C0005CA1C4300EF005FE049810210180342039 -:1063D0003080002F0CD060680088B880607AFF3071 -:1063E0000130F880E08938810020B881F881E870B8 -:1063F000BEE6207B1746052806D0062804D0524862 -:106400004CA1E1300EF0E5FD049812210180352009 -:106410003080002FECD060680088B880607AFF3050 -:106420000130F880E0893881E089B8810020388225 -:10643000A988F981DBE7207B1746072804D042486A -:106440003CA1F8300EF0C5FD04990E2008803620DE -:1064500086E700962846049B00F02DFD88E635A1CE -:106460003A480EF0B6FD83E670B5054600780C4656 -:10647000082603000EF09EFE124C3434241C380A09 -:106480000A0A0A0A0A0A0A0A0A0A0A4C687800284A -:1064900004D02E4827A12C300EF09BFD002C03D1F8 -:1064A0001F2024A1400108E060783043607020E0A4 -:1064B000002CF9D17D201FA1C0000EF08AFDF3E76A -:1064C000002904D03F201BA100010EF082FDFCF743 -:1064D0003AFF0446407830436070FCF750FF08E014 -:1064E0001A4814A1473002E0184812A14C300EF0AF -:1064F00070FD002C0AD06078000707D5932020702B -:106500002046582229460830FAF75EFE002070BD6A -:106510000E4808A15030EAE710B500200C4C0D4998 -:106520000346C2008C525218401C0006D370000E65 -:10653000F7D010BD7372635C67617474635F636FDF -:1065400072652E63000000005A020000B3030000D1 -:10655000FFFF000058000020FE49088001208870DD -:1065600000207047FB4900208870704710B500215B -:10657000F848C94301800021C17007F053FAD8E7F9 -:10658000F7B584B0054600276846078187806868AC -:106590000C46008800F0ECFB0646287A032805D05C -:1065A000002E03D1EC49ED480EF013FD297A204668 -:1065B000C91E123000900B000EF0FCFD0FF2F1F03E -:1065C0003D09AA465C6D34B3CDF38B8BF000F078B7 -:1065D000012803D0E049AD200EF0FBFCA8896946F4 -:1065E000C0000E30888030200881002C22D06868DE -:1065F0000188A180E7802781A989A18100200DE081 -:10660000C100B27909190A74B288CA81820052198C -:10661000D3894B82128A401C8A8280B2A18981422E -:10662000EED8D7E002A8009001AB224629463046BA -:1066300000F0CCFBF1E002A8009001AB2246294615 -:10664000304600F005FCE8E0F07806281AD0FF207C -:10665000C149223014E068680188A180E780278161 -:10666000A989A181B188E181E9892182EA89296921 -:1066700000982BE0F078062804D0FF20B6493C3083 -:106680000EF0A7FCE8896946123088803520088121 -:10669000002CE0D1C1E0F078072804D0FF20AE49FB -:1066A00056300EF096FCA88969460E308880362058 -:1066B0000881002CBED068680188A180E78027810E -:1066C000A989A1812046AA890E3029690EF0E4FA31 -:1066D00080E0E8896946123080B2382288800A81D9 -:1066E000002C79D068680188A180E7802781A9897A -:1066F000A181287A102809D00221A173E989218279 -:10670000EA89296900980EF0C7FA86E00121F4E7CA -:1067100002A8009001AB224629463046FFF716FD3D -:106720007BE0F078082803D08B498D480EF051FCAF -:1067300014206946888037200881002C6DD0686855 -:106740000188A180E7802781A989A18167822782AA -:106750000120A0733EE0F078092804D080487E49EB -:1067600018300EF036FC288A6946143088803720AD -:106770000881002C51D068680188A180E78004213D -:106780002781A173A989A181E9892182298A61824E -:1067900020462A8A1430696998E702E038E01CE054 -:1067A00024E0F0780A2804D06D486B4933300EF0AD -:1067B00010FC14206946888037200881002C2CD0DA -:1067C00068680188A180E78027810521A173A781DE -:1067D00027826782F77020E017E002A8009001ABE3 -:1067E000224629463046FFF78EFD16E00D20694609 -:1067F000392288800A81002C07D00120E08055488A -:106800000188A1802781277307E00699088010E09E -:106810008F205149C0000EF0DCFB68460699808845 -:106820000880002C05D06846008920806846808852 -:106830006080002007B0F0BDF7B594B015460F4654 -:10684000149800F0A0FA04000AD0032000F088FB9E -:10685000022802D2E078002804D0112017B0F0BD41 -:106860004048FBE71720694601260883002D0FD01A -:106870000321684601711021018210A8024605908B -:1068800004A928460AF04DFD00280DD00720E5E7B1 -:1068900008216846017100210781C9434181052112 -:1068A0008673C90281810CE0A878A0712888A08035 -:1068B000684605218673C902818100210781C94389 -:1068C000418109AA023206A901A807F0E4F80028CC -:1068D00002D000F06BFAC1E707A800906846038B6E -:1068E00004220321149800F051FB0028B6D1E67071 -:1068F000B4E770B592B00D0006460ED000F043FA32 -:1069000004000CD0032000F02BFB022802D2E07818 -:10691000002806D0112012B070BD1020FBE71148EE -:10692000F9E7172168468180042101722988818155 -:106930006988C181012181740B4901820AAA02324E -:1069400001A902A807F0A7F800280FD000F02EFA3E -:10695000E1E7000058000020346500003C0400001E -:1069600063020000023000000228000008A8009026 -:106970006846838804220321304600F007FB002884 -:10698000C9D10221E170C6E770B592B00D0006468C -:106990000DD000F0F8F904000BD0032000F0E0FA6D -:1069A000022802D2E078002805D01120B3E7102099 -:1069B000B1E7FA48AFE717216846818004210172E8 -:1069C000298881816988C18101218174F44901820A -:1069D0000AAA023201A902A807F05DF8002802D035 -:1069E00000F0E4F997E708A800906846838804223D -:1069F0000321304600F0CAFA00288CD10321E1704F -:106A000089E770B592B00D0006460DD000F0BBF9D5 -:106A100004000BD0032000F0A3FA022802D2E07891 -:106A2000002805D0112076E7102074E7DB4872E7D4 -:106A3000022168460172298881816988C1811721F4 -:106A400081800AAA023201A902A807F024F80028CE -:106A500002D000F0ABF95EE708A800906846838892 -:106A600004220321304600F091FA0028DBD10421F2 -:106A7000E17050E7F0B591B015000E4607460ED014 -:106A800000F081F904000CD0032000F069FA02281C -:106A900002D2E078002806D0112011B0F0BD1020FD -:106AA000FBE7BE48F9E7172168468180042101729F -:106AB000298881816988C181B17881743188018296 -:106AC0000AAA023201A902A806F0E5FF002802D0B6 -:106AD00000F06CF9E1E708A800906846838804227A -:106AE0000321384600F052FA0028D6D10521E17082 -:106AF000D3E7F7B592B015460E46129800F043F969 -:106B000004000AD0032000F02BFA022802D2E07819 -:106B1000002804D0112015B0F0BDA048FBE70627DF -:106B2000002D12D0684607728681C581A580172086 -:106B3000694688800AAA023201A902A806F0ABFFC2 -:106B4000002807D000F032F9E5E705216846017218 -:106B50008681EBE708A80090684683880422032119 -:106B6000129800F013FA0028D5D1E770D3E7F7B5F3 -:106B700092B016460D000ED0129800F004F90400F1 -:106B80000BD0032000F0ECF9022802D2E0780028B4 -:106B900005D01120BFE71020BDE78048BBE70727DD -:106BA0006846077286811721049581800AAA0232FD -:106BB00001A902A806F06FFF002802D000F0F6F845 -:106BC000A9E708A800906846838804220321129848 -:106BD00000F0DCF900289ED1E7709CE7F3B51720A0 -:106BE00091B00C46002915D021780B000EF0E2FA86 -:106BF000062B05051A041C2B1520C01EE28880B246 -:106C0000002A02D0A368002B04D0824204D90C20B1 -:106C100013B0F0BD1020FBE7042905D0A0880028A0 -:106C200011D101E00620F3E7119800F0ACF805005F -:106C30000BD02078092701281AD0022807D0042871 -:106C400024D0052835D00720E2E75448E0E768461D -:106C5000077161880181E1884181A068082603905D -:106C6000304600F07DF9072829D34C48801CCFE737 -:106C70000C216846017161880181E1884181A06829 -:106C800003900EE0E878002811D118E00D21684645 -:106C9000017161880181A1884181E1888181A068B9 -:106CA00004900326304600F05BF90228EAD3112055 -:106CB000AEE70E2168460171217B0172F1E71721D1 -:106CC0006846018309AA023206A901A806F0E3FE7C -:106CD000002802D000F06AF89AE707A800906846FA -:106CE000038B04223146119800F050F900288FD10F -:106CF0002178012907D002298AD0042905D0052945 -:106D000005D0032084E7082102E0EF7080E70A2124 -:106D1000E9707DE730B591B00C46054600F033F8D8 -:106D2000002808D0032000F01BF9022805D31B48D7 -:106D3000801C11B030BD1948FBE70F216846017176 -:106D400004811721018309AA023206A901A806F0CD -:106D5000A2FE002802D000F029F8EAE707A8009078 -:106D60006846038B04220321284600F00FF9E0E770 -:106D70000C49884205D00C490988814201D10A4852 -:106D800070470020704710B5FFF7F2FF002802D0CF -:106D90008178C90700D1002010BD0000023000003A -:106DA00003280000FFFF000058000020002806D044 -:106DB000012805D0052805D0062805D003207047F6 -:106DC00011207047082070475C487047FFB583B0BA -:106DD00003980C9EC0781D4614460F46012803D028 -:106DE0005749D2200EF0F5F8F889C0000E302880FF -:106DF00030203080387B001FC0B20190002C26D09C -:106E000078680088A0800020E0802081F889A08137 -:106E1000002616E0F0000519C01900902A464169C5 -:106E20000E3201980AF057FA002802D00020287488 -:106E3000E8810098761C008A68820098B6B2408A81 -:106E4000A882A089B042E5D803990020C870F1E477 -:106E5000F8B50646C0781F4614460D46042804D0EF -:106E6000FF20374903300EF0B4F8A88906214843C3 -:106E70000E30388033210698002C01801AD06868C3 -:106E80000088A0800020E0802081A989A18103469C -:106E90000CE01946062251434A190919D789CF81B6 -:106EA000977C8F74128A5B1C0A829BB2A1899942DB -:106EB000EFD8F070F8BD70B514460546142204985A -:106EC0001A8037220280002C18D0486800260088DB -:106ED000A080487AFF300130E080C8892081C889CD -:106EE000A0816682E878082809D0092811D00A28EC -:106EF00019D0134913480EF06CF8EE7070BD087B82 -:106F00000C2804D00F480E490C380EF062F801200E -:106F100012E0087B0D2804D00A48094908380EF011 -:106F200058F8042008E0087B0E2804D005480449DE -:106F3000001F0EF04EF80520A073DEE703300000BE -:106F4000346500008203000001460020FA4A02E096 -:106F5000401C082803D24300D35A8B42F8D1704713 -:106F600030B50446F44A0020163A117953790AE004 -:106F70005518AD79A54201D1401CC0B2491CC9B217 -:106F8000102900D100218B42F2D130BDFFB5EA4873 -:106F900081B0163841790A9C491CCDB21E46102D8D -:106FA00000D10025E44816380079A84202D1042017 -:106FB00005B0F0BD0820FFF7D3FF0746072804D926 -:106FC000FF20DEA1A5300EF004F80298082801D1B8 -:106FD000072F17D001982080301D6080002060713D -:106FE0002071E68003982081204606F005FD0028E8 -:106FF0000AD0D148029916384379821D99544571B7 -:107000000020D5E7D248D3E7FF20CCA1B7300DF060 -:10701000E0FF0320CCE7F0B58DB0044600256846BC -:10702000057116468C460620FFF79AFF00281CD1F2 -:1070300021780127C807002801D0132917D96846ED -:1070400087766178C17602218183C58304A8009088 -:1070500070680C23008805220621FFF797FF00289F -:1070600003D0B6A185200DF0B4FF0DB0F0BDB2483D -:1070700016380278002AF8D0427863789A42F4D120 -:10708000012918D0132919D16146062916D1057096 -:10709000002101200AF04EFE6846077170680188E1 -:1070A0006846C1800021C9430181607922790102CB -:1070B000114368461AE06146062908D068460079FF -:1070C0000028D2D0314601A8FDF7AFFECDE705700C -:1070D000002101200AF02EFE6846077160792279AE -:1070E00001021143684601810021C9434181E9E75A -:1070F000914810B50021163801704A1E4280417037 -:107100000171417101200AF015FE10BD10B5FFF7A5 -:10711000EFFF0020884902464300401CCA5208285D -:10712000FAD310BD84491639488000207047DFE744 -:1071300070470EB501216846017086498180C18083 -:107140000021FDF772FE0EBDF7B505460078002759 -:1071500000090C463E46012804D0FF2077A1683084 -:107160000DF037FF287A02280CD0FF2073A17E3063 -:107170000DF02FFF0298002C068001D0278066803A -:107180000020FEBDEA89702710460A3086B2002C26 -:107190000BD068680088A080A8892081E280204602 -:1071A0000A3029690DF078FDE4E702980680E7E7E8 -:1071B000F0B543680246D9799C79090221435C7A8B -:1071C0001E7A25025C88981D3543241F87B0A14292 -:1071D0001DD11B79022B1AD1042D1AD0052D2AD0CE -:1071E000062D1AD0402D12D3061D0F4614462846F0 -:1071F000FFF7AAFE08280AD0112020700220207272 -:10720000A581E7812661607808210843607007B096 -:10721000F0BD001D00F0E1F8F9E7041D0D46FEF792 -:10722000F9FE0028F3D0062168460170019405722A -:1072300008F0CBFBEBE7001DFFF7EDFEE7E710B52D -:107240003D4C8AB0163C2278012A26D012236A4689 -:10725000937363789B1CD373082313820B88538228 -:107260004B8893828B88D382C988118301A90091AE -:107270000C2305220721FFF789FE00280BD10022ED -:10728000F023114601200AF0B0FC01202070607844 -:10729000801C607000200AB010BD1120FBE7F0B523 -:1072A000254C0027163C87B00646A51D1FE06079D7 -:1072B0002179884204D1112020A140010DF089FEDE -:1072C0002079405D042804D0082808D17F1CFFB233 -:1072D00005E0072069460870684608F076FB2079CB -:1072E000401CC0B22071102801D10020207130460E -:1072F000761EF6B20028DAD1384688E710B5044683 -:10730000402801D2072010BDFFF71EFE082802D03A -:107310003120000210BD0021074802E0491C082965 -:1073200003D24A00825A002AF8D1082914D0490011 -:107330004452002010BD0000DA1300207372635C19 -:107340006C326361705F636F72652E6300000000D2 -:1073500004300000FFFF00000420EBE700B54028E8 -:1073600001D2072000BDFFF7EFFD082805D000215E -:107370003B4A40001152084600BD052000BDF0B553 -:107380008BB016460C00074607D0002E05D061884A -:10739000402904D207200BB0F0BD1020FBE7208865 -:1073A000002801D0172801D90C20F4E70846FFF780 -:1073B000CBFD08280FD0258803A82A463146023085 -:1073C0000DF06AFC01A8009062882B46082138461F -:1073D000FFF7DCFDDFE70520DDE7F0B50E460746E9 -:1073E00001468BB014460125304606F0D1FC082832 -:1073F0001DD10020694608850120FFF7B1FD002856 -:1074000002D117206946088503AB02330AAA394620 -:107410003046009407F0CFF800280AD0022819D08F -:10742000032804D0FF200F4902300DF0D2FD28467A -:10743000B1E76846038D002BF9D001A80090606881 -:10744000042200880121FFF7A1FD0028EFD00549A3 -:10745000EC20EAE760780025102108436070E6E739 -:10746000DA1300203C730000002803D08178012942 -:1074700039D101E0102070470188FA4A881A9142F8 -:1074800033D01BDCF84A881A91422ED00BDC00293D -:107490002BD00320C002081A27D0012825D00121B3 -:1074A0000903401A07E001281FD002281DD0FF2839 -:1074B0001BD0FF380138002815D116E0FF22013219 -:1074C000811A904211D008DC01280ED002280CD07D -:1074D000FE280AD0FF2806D107E0012905D002299D -:1074E00003D0032901D0002070470F20704700B55A -:1074F0000A2821D008DC03000DF05CFE0A1C2024C1 -:10750000241A24282224261A102819D008DC0B2833 -:1075100016D00C2814D00D281AD00F2808D111E04D -:1075200011280FD0822807D084280DD085280DD0AF -:10753000032000BD002000BD052000BDCB4800BDDC -:10754000072000BD0F2000BD042000BD062000BDA7 -:107550000C2000BD70B500290BD0CB1FFA3B812455 -:107560001E46CDB2112B1BD2012805D0022806D011 -:1075700009E0002010701DE0FF20043001E0FF2032 -:107580000330814218D033000DF014FE111613138E -:1075900016131616131616161313131316131600B6 -:1075A0000846FF3881381F2803D9FF39FE390229E0 -:1075B00002D81570002070BD1470072070BD00B592 -:1075C00003000DF0F7FD060406040C080A0C002069 -:1075D00000BD112000BD072000BD082000BD032014 -:1075E00000BD00780207120F04D0012A05D0022A3C -:1075F0000AD10EE0000907D108E00009012805D0F2 -:10760000022803D0032801D007207047087000200B -:10761000704706207047002807D0012807D00228AD -:1076200007D0032807D007207047002004E011206E -:1076300002E0212000E0312008700020704738B5BA -:107640000C4605004FD06946FFF7CBFF002822D13A -:107650002088032189028843694609788907090D32 -:10766000084320806946681CFFF7BBFF002812D141 -:107670002188032000038143684600788007800C3E -:1076800001432180A8784007820F2020012A03D0DF -:10769000022A03D0072038BD814300E00143218046 -:1076A00088B20105890F08D0012189038843A97890 -:1076B0000907C90F89030843208080B28104890F1C -:1076C0000AD0A9784004C906C90F400CC903084371 -:1076D00020808004800F02D12088400403D52088B8 -:1076E000402108432080002038BD70B504460020AA -:1076F000088015466068FFF7A2FF002815D1218990 -:10770000A089814210D86168594E8978C90707D08D -:10771000711E884208D831460DF038FB298009E0F7 -:10772000FF21FF31884201D90C2070BDFF30FF30AE -:107730000330288060688078C007A08903D0314674 -:107740000DF024FB03E0FF30FF30033081B22980CD -:1077500020688178474801732068464900882039AD -:107760004885002070BD10B5137804785B08E407E5 -:107770005B00E40F23431370FD2423400478A40727 -:10778000E40F640023431370FB2423400478640750 -:10779000E40FA40023431370F72423400478240744 -:1077A000E40FE40023431370EF2423400478E4063D -:1077B000E40F240123431370DF2423400478A4063C -:1077C000E40F6401234313700078BF244006C00F08 -:1077D0002340800103431370002906D00878C107B5 -:1077E00001D1800701D5012000E00020C001590629 -:1077F000490E0843107010BD30B50A8803239B0260 -:1078000004889A4323059D0F02D1A3049C0F01D045 -:107810009B0F00E001239B021A4303230A801B03F2 -:107820009A4303889804840F02D11805830F01D06E -:10783000800F00E00120000302430A8030BDF3B551 -:1078400091B00D0018D01198002818D012212846A8 -:107850000DF07FFA01A9012007F0A9FE00242646B9 -:10786000374677E0022900000128000003300000BD -:10787000010200000C140020102013B0F0BD0720FE -:10788000FBE76846007C01280BD16846C1890520CA -:10789000C002081A0AD001280AD002280CD00328F6 -:1078A0000CD0042C0ED0052C0FD10DE0012400E0EB -:1078B00002246846868908E0032406E0684604241A -:1078C000878902E0052400E0062468468189119832 -:1078D00081423FD12C74002E3AD00BA800900CAB03 -:1078E00010220021304607F0F4FE002820D168461F -:1078F000808D2A46C0B20CA909F0EDFC002817D1F2 -:10790000AE81002F24D00BA8009006AB13220021DB -:10791000384607F0DEFE00280AD16846808D06A9A9 -:10792000C01E0331C0B22A1D09F0D5FC002801D0C9 -:107930000320A2E76846817E427E08021043E88168 -:10794000062C05D16846007CA8726846C08928814B -:10795000002092E701A807F032FE002891D0FFF73F -:10796000C6FD8AE7002804D0012903D0022904D0EB -:1079700003207047F949C98D02E0F8494031C988B0 -:10798000814201D1002070470720704730B5F34C89 -:107990000025608B91B0C00B2ED1216900292BD01E -:1079A000207B800728D401226846027102720022DF -:1079B0004272228B8281A28A8282049117210183E2 -:1079C00009AA0023023206A901A807F0A7F9002896 -:1079D00003D0FFF7F4FD11B030BD207B0221084336 -:1079E000207307A8009069460B8B20880422012190 -:1079F000FFF7CCFA05460BE0FBF7A5FC84210170EC -:107A00000921017218341ECC0C301EC0FBF7B7FCE4 -:107A10002846E0E710B5D14C034621690020002933 -:107A200009D02146012210311846FBF76BFE0020D9 -:107A30002061A0820120217BF9221140217310BD19 -:107A400070B50C4605461C2120460DF082F9002039 -:107A50002080002D08D0012D04D0C1A1C5480DF013 -:107A6000B8FA70BD062000E00520A07070BD10B50A -:107A700007F07CFB10BDFEB50546007800260C46DD -:107A8000374603000DF096FB0C91070C1D962F4610 -:107A90002F46486C899168680A38FBF793FD89E0A6 -:107AA000002904D0B348AEA11B300DF092FAFBF7C9 -:107AB0004AFC04464078082108436070FBF75FFCED -:107AC00078E0002C04D1BB20A5A180000DF081FA44 -:107AD000284601F0B1FA00286CD0607808210843EC -:107AE0006070022666E0E888694608800190002CF4 -:107AF00004D1A0489AA12F300DF06BFA28780728FE -:107B00001CD10198C00B19D0944800218171A9881B -:107B1000818012E003264DE0002C04D1C52090A105 -:107B200080000DF056FA8D48017B89070BD500695E -:107B3000002802D0E888C00B3CD0022660780821DB -:107B40000843607036E0291D8EC918308EC0283871 -:107B50000188022601222046FBF7B6FD0127EDE74A -:107B6000002C04D183487EA164300DF032FA7B48AA -:107B70000821007B4007C00F460060780843607012 -:107B8000002E17D12879012802D16879002811D058 -:107B90002046FFF73FFF07460CE0002CCED10D201A -:107BA0006FA180010DF015FAC8E772486CA17A3018 -:107BB0000DF00FFA002C0CD06078000709D5002FCB -:107BC00007D1842020702046582229460830F9F732 -:107BD000FBFA3046FEBDF7B5027A88B00C46054682 -:107BE00020460C300490069216300027921E029018 -:107BF0003E460A31594813000DF0DCFA0ADF06E66A -:107C00002AE62AE66A98C6E64288002A02D0522767 -:107C10000726DDE051271E26002C7DD06A684F48DC -:107C20001288A2800122A2718079C0004019C08907 -:107C3000FFF705FE002877D148488179C900491926 -:107C4000C98921818079C0004019408AA083BFE0A2 -:107C5000688A00900698072817D1E889C00B14D0CD -:107C600000985127223086B2002C55D0A88904995B -:107C7000FFF7E5FD002857D168680088A080022042 -:107C8000A071A8892081012041E000985027203070 -:107C900086B2002C40D0A889FFF7D1FD002843D13F -:107CA00068680088A080A889E080287A07280AD020 -:107CB00002202072288AA0830098E0832046696908 -:107CC0002030009A01E00120F3E70CF0E5FF7FE0AF -:107CD000698A00910169002902D0E989C90B22D083 -:107CE0000099512722318EB200218171A9898180AA -:107CF000002C5FD00088A080A8890499FFF79FFD21 -:107D0000002811D10220A071A88920810420A0722E -:107D1000288AE083009801E04CE005E0208469694E -:107D2000009A0298D1E703200BB0F0BD007B40071A -:107D300002D55127222601E050272026002C39D0D9 -:107D40006868502F0088A08016D00220A0712146BC -:107D5000287B0831FFF774FE3AE00000EC130020A6 -:107D60007372635C67617474735F636F72652E63B3 -:107D700000000000CB020000287BA11DFFF760FE81 -:107D80000020FFF747FE23E0A9890089884207D138 -:107D900054270626002C0DD068680088A08017E0C4 -:107DA00053270826002C05D068680088A080A88981 -:107DB000E0800DE00A98068010E055270726002C89 -:107DC000F8D00020A07103E0FD49FE480DF001F954 -:107DD0000A98002C068001D0278066800020A3E747 -:107DE000F94800210172203801814181418081716F -:107DF0008180027BF923520852001A40027301610C -:107E00008182704770B5F04C86B0203C2080002005 -:107E10006080A071A0806946012007F0C8FB102691 -:107E200008E00199088802461207D20FB0431201F8 -:107E300010430880684607F0C2FB0500F1D02069B6 -:107E4000002804D0DF48DE4933300DF0C2F8207B33 -:107E5000800704D5DB48DA4934300DF0BAF8822DBA -:107E600004D02846FFF743FB06B070BD0020FBE7B7 -:107E7000D54810B52038017B012211430173002140 -:107E800041808171818006F045FB10BD10B5CE4C5C -:107E90000020C043203C20800020FFF7BBFD207B5A -:107EA00040084000207310BD70B5C74D0446203D0A -:107EB000287B800704D5C348C1494B300DF089F8B1 -:107EC000287BC00706D12888C049884202D028698B -:107ED000002801D0082070BD002C08D0A0881628EA -:107EE00001D2092070BD20682861A088A882FFF710 -:107EF0004DFD70BD10B50C4607F02DFB002804D0D9 -:107F0000C520AF49C0000DF064F82046FFF7EFFA36 -:107F100010BDF0B5AC4D0446203591B0002008905E -:107F200068820E462882E8812946E8804039088622 -:107F3000694608830885088688838882A2480E904F -:107F4000007A1746012808D0022806D0032804D05A -:107F5000042802D0082011B0F0BD9D48844269D3A6 -:107F600001239B049B49E21A8A4263D39A4A9442B2 -:107F700060D286425ED31001331A0846834259D339 -:107F80001046864256D26068002815D09049884233 -:107F900050D31101421A8F498A424BD38E498842ED -:107FA00048D260892189884203D801225202914235 -:107FB00001D90C20CFE7089010AA0CA93046FFF792 -:107FC00094FB0028C7D106A92069FFF738FB0028D9 -:107FD000C1D1206900280CD060788007002868464D -:107FE000008B03DA8004800F75D002E08004800FDC -:107FF00071D16846008B81061ED58004800F6068B1 -:1080000009D0002818D00721490740180121890309 -:1080100088420FD201E000280ED06D496068884286 -:1080200008D301218904421A6A498A4202D36A4963 -:10803000884201D310208EE705A96069FFF7FFFA97 -:10804000002888D16069002808D06846808A010528 -:10805000890F01293FD18004800F3CD007A9A06976 -:10806000FFF7EDFA0028A5D16846808A800632D451 -:108070006846808B81062ED4A169002906D00105AF -:10808000890F012927D18004800F24D0E0680028BF -:1080900004D0007800281ED01C281CD24A4A611C3B -:1080A000123220460992FFF75EFB0321002089026D -:1080B000884301218902411868460D9101850121FB -:1080C000817446490182404A0FA91532306809F08F -:1080D00028F9002801D007203DE708A8007F3A4989 -:1080E000C01CC2B26A7100201031FF3200900190B2 -:1080F000FF3203460291039003320AA904A807F055 -:10810000C5F9002827D130482038008E0B902E4822 -:108110003389383032690146123902910093019255 -:10812000039010A90A8873890CA9306807F0AEF98A -:1081300001007CD12448E98811308170090AC1709E -:108140000026009631386A79008E3146099B07F087 -:108150001CF9002802D0FFF7CAF9FCE60E98807CD3 -:10816000C00928D068460D99018501218174292113 -:1081700009020182AE81287B61784008C90740006E -:10818000C90F08432873FD2108406178022289073E -:10819000C90F4900084328730B4900922A31881CF3 -:1081A00002910190002303960D4A0AA904A807F042 -:1081B0006DF901003BD1606800283DD0206911E0D5 -:1081C000607D0000220400000C140020FFFF00006E -:1081D000006001000000FC1F004000200328000098 -:1081E0000302000000280DD106A90CA8FFF704FB2C -:1081F0006078800706D46946088B03210903884309 -:1082000069460883012069468874FD4808822089F0 -:10821000FC490CF0BBFD6268089BFB48019200938F -:1082200002900A460396002306A904A800E081E014 -:1082300007F02CF901007DD12078C10601D4800619 -:108240002ED568460684606900280DD105A90CA8C2 -:10825000FFF7D2FA6846818A032080028143012019 -:1082600080020918684681826946888A4821084345 -:108270006946888201208874E14808AA401C088267 -:10828000E1490192891C0220DE4A029100900023FC -:108290000396921C05A904A807F0F8F8010063D121 -:1082A0002078C0072ED068460684A06900280DD12A -:1082B00007A90CA8FFF7A0FA6846818B032080026B -:1082C0008143012080020918684681836846818BBA -:1082D000402001436846818301218174C84908AA6E -:1082E000891C0182C8480192001D0221C54A0091E3 -:1082F000029000230396921C07A904A807F0C6F871 -:10830000010031D1E068002832D068460D9901851E -:1083100001218174BA49C91C0182E16808A80A7860 -:10832000027049784170E068418868464184E0689D -:10833000017900E018E008A80171E0680722C1880F -:1083400008A84171090A8171AF4808A9801D0092EF -:1083500001910290412200230396D2000AA904A8A9 -:1083600007F094F8010003D00B98FFF7C3FDF2E586 -:1083700003210E98002F017207D0E8883880E88921 -:108380007880288AB880688AF8800020E3E5F0B514 -:1083900001248BB016460F46012802D002281BD1BB -:1083A00004E0684605218474C90202E068469749E2 -:1083B00084740182002F11D0032100208902884398 -:1083C0000121890241186846018506AA05A9384697 -:1083D00008F0A7FF002803D00720A5E41020A3E49D -:1083E000894DB8782E3D287338882F46203F7885F0 -:1083F0006A46127D0020294606AB00920E31019399 -:10840000FF32029103900346FF3203320AA904A807 -:1084100007F03CF8002802D0FFF769F884E4002E4A -:1084200001D0F88D30802C7200207DE470B592B0C0 -:108430000446012508A8857075496846018406F040 -:108440009CFF002208A90120FFF7A1FF064606F0C5 -:1084500098FF30003AD120780024C00700283FD090 -:108460001C2168460CF077FC684601782020014307 -:108470006846017008A885706649684601841194B1 -:108480000794817FF9200140891C6846817700208C -:10849000014668460177002001466846417704217D -:1084A0008185C485018607A80A9011A80D9008A8A7 -:1084B000099006F062FF0EAA09A96846FFF729FD98 -:1084C000054606F05EFF002D02D0284612B070BDB2 -:1084D0004D486946098F4E3801816946898F41812F -:1084E00049482E3804720020F0E7F7B5464E9CB09C -:1084F00000212E3E0091317A012904D0022902D0B8 -:1085000008201FB0F0BD40494E39CA8D824201D0CB -:108510000620F6E71D98824201D10720F1E73B488B -:10852000012110AA9176401C1083002003239B0296 -:1085300002469A438B02D31810AA93846A46918408 -:108540003549D18410AA9077908317AA0A926A4677 -:1085500091850C9009A807F051F80024254627467C -:1085600004A909A807F04DF8002810D082287BD173 -:10857000002C7CD0002D7AD010A8048145810024E5 -:10858000047518A8807812AD012872D07AE0684688 -:10859000807D002F1FD0012862D16846818A1B4848 -:1085A000401C814219D114A800906846408A0EAB45 -:1085B0001022002107F08DF8002877D110A8008A3A -:1085C000042801D006285BD16846018F1D9881429E -:1085D00046D10F2095E7012842D16846808A0521BF -:1085E000C902884202D0491C884239D106484E3817 -:1085F000C18D6846408A814210D101270FE00000FA -:1086000001290000010200003A14002001280000A6 -:1086100001180000052A0000FFFF00000027002CC1 -:1086200001D0002D0DD01D99884219D114A90091B7 -:1086300004460EAB1022002107F04BF8002835D17C -:1086400001E0009D0CE010A8008A022801D010284B -:1086500016D1C0B218AA0EA908F03DFE00280FD10D -:108660006846408A00907BE720E000E001E00520BA -:1086700047E72A1D15A918A808F053FE002801D0C5 -:1086800003203EE710A8007D0023001DC2B210A801 -:1086900002751E98029019A901950394009216A8DC -:1086A00006F0F4FE002801D102213172FEF71FFF0F -:1086B00027E73EB50B46401E84B201AA00211846AA -:1086C000FFF751F806F059FE02A8009001AB012215 -:1086D0000021204606F059FE044606F052FE684688 -:1086E0000089012803D0FE49FE480CF072FC2046A8 -:1086F000FEF7FDFE3EBDF0B5FB4E0446307A89B074 -:108700000F46032804D0042802D0082009B0F0BD89 -:1087100004AA06A92046FEF7E8FF0500F6D1F248B4 -:108720002389383022690146103902910093019261 -:10873000039069460A8A638906A9206806F0A6FEA6 -:10874000002802D0FEF7D3FEE0E7002F03D0E64872 -:10875000203000893880042030722846D6E738B5AA -:108760000C00054608D00022694607F00CF80028E6 -:1087700004D0FEF7BCFE38BD102038BD6946204647 -:10878000FEF75DFF0028F8D1A0786946C207D20F36 -:10879000284607F013F8ECE73EB50C0008D002AA13 -:1087A000694606F0F0FF002804D0FEF7A0FE3EBDAB -:1087B00010203EBD032120460CF0CBFA684600880D -:1087C00001A90005800FFEF726FF00280BD168469F -:1087D000007920706846008801A98004800FFEF7A8 -:1087E0001AFF002801D003203EBD68460079607062 -:1087F000A278EF20024068460088C10B09010A43B5 -:10880000F7210A404104C90FC9000A43A270F921A7 -:108810000A40800601D5012000E0022040006946A0 -:108820000243097A50084000C907C90F0843A070E5 -:1088300000203EBDFEB51D4614460E46074606F016 -:108840009CFD01A8009022882B463146384606F050 -:108850009CFD054668468088208006F092FD2846EB -:10886000FEF745FEFEBDF0B50C46002199B0074667 -:10887000684681850D46002C11D0E068002806D09E -:10888000A06800280BD002886B469A850180A078EA -:10889000012806D0022804D0072019B0F0BD10200E -:1088A000FBE72088002807D0401E80B201A906F00F -:1088B0007EFE002842D136E08C48EEE769468A8980 -:1088C00021888A420BD26846007C002501282CD1E1 -:1088D0006846C0898649884227D1012525E08A4219 -:1088E00003D1002D2FD06D1C01E0022D02D0032DED -:1088F0001BD31FE06946097C012916D169467C4BD0 -:10890000CA895B1ED11A9A421DD005DC7948101A1B -:1089100019D0012809D116E0012914D0FF390139F5 -:1089200003D1032506E00D26B60201A806F047FE96 -:108930000028C3D0822804D0002806D0FEF7D7FD37 -:10894000ABE7022DFAD13046A7E7E068002813D044 -:1089500006F013FD0BA800906A46A1882088928D2E -:10896000E36806F012FD054606F00BFD002D19D157 -:108970006846A168808D088002980078C00601D5FD -:108980005D488AE706F0F9FC0EA8009068468089E9 -:108990000CAB0222002106F09CFE054606F0F1FC1D -:1089A000002D01D02846C9E76846008F022801D073 -:1089B000032072E7A078012808A8007C03D0800774 -:1089C0000ED4082069E7C007FBD00820FEF7C8FADC -:1089D000072802D34548401C5FE70825022001E034 -:1089E000022503206946087621886846818317217D -:1089F000818611AA002302320DA906A806F08EF97D -:108A0000002802D0FEF7DBFD47E70FA8009068467C -:108A1000838E042229463846FEF7B8FA3DE770B542 -:108A2000064615460C460846FEF71EFD00280AD1EC -:108A300006F0A3FC2A4621463046FFF7A8FC044670 -:108A400006F09FFC204670BD70B514460D460646E4 -:108A500006F093FC224629463046FFF746FD0446C1 -:108A600006F08FFC204670BD70B51E4614460D0002 -:108A70001AD0002C18D06168002915D00121FEF70A -:108A800071FF00280FD12068FEF7EEFC00280AD104 -:108A900006F073FC324621462846FFF73AFA0446B0 -:108AA00006F06FFC204670BD102070BD70B51546F5 -:108AB0000C0023D00221FEF755FF00280ED12068BC -:108AC000FEF7D2FC002809D106F057FC29462046C3 -:108AD000FFF711FE044606F054FC204670BD00006E -:108AE000607D00003E0600000C14002003300000F2 -:108AF0000328000000280000013400001020EDE7EA -:108B0000FEB507460E4607201546400701211218FC -:108B100089031C468A4219D2002C02D020188842B0 -:108B200014D2384600F045FA00280AD1002C0FD1A3 -:108B300001AA6946384606F026FE002802D0FEF754 -:108B4000D6FCFEBD68460088800601D41020FEBD1C -:108B500023462A4631463846FFF76CFEFEBDFFB578 -:108B600085B01E4614000F4609D003AA02A9059835 -:108B700006F009FE002804D0FEF7B9FCC6E5102077 -:108B8000C4E568460089C00601D5FB48BEE506F08D -:108B9000F4FB01A800900023F84A3946059806F036 -:108BA00098FD054606F0EDFB002D11D1002E0CD0EE -:108BB00006F0E3FB002000902288334639460598F2 -:108BC00006F087FD054606F0DCFB684680882080BD -:108BD0002846D1E7002906D0E94B0A885B899A42EA -:108BE00001D8E84870473EE610B586B004236C46CD -:108BF000A382E34B1C89002C07D05B898B4201D2F6 -:108C0000914204D9DF4806B010BD0620FBE76B4651 -:108C100019825A820021009101911C8002219970D1 -:108C200005A9029104A903916946FFF71CFEEAE732 -:108C3000F0B591B00D4681206946087105F09CFCA5 -:108C40000646002D08D02878CD4C012806D00228F1 -:108C500028D0072011B0F0BD1020FBE7A98801AA99 -:108C6000FEF778FC0028F5D1B00734D568460079C6 -:108C7000002820D1A879C0071DD006F07EFB002077 -:108C800000906A892989A088EB6806F07EFB694616 -:108C9000087106F076FB6946087900280BD0FEF7CC -:108CA00026FCD7E7A98801AAFEF754FC0028D1D1F9 -:108CB000342006420FD00121684601720173017908 -:108CC0004173F00609D5A18868460182A18A018313 -:108CD0002069059004E00820BCE7A0886946088266 -:108CE000FAF731FB05461720694688830AAA2B4606 -:108CF000023207A902A806F011F8074668780007B3 -:108D000001D5FAF73CFB002F03D03846FEF757FC9D -:108D1000A0E7F00603D5207B062108432073B006A8 -:108D200002D50020FEF776FE08A8009069468B8BDE -:108D3000208804220121FEF729F98BE7F0B50026EF -:108D400095B014460D4600290FD0022C4FD3A71E14 -:108D5000BAB28A480AF052FE29191039CA7B8B7BB5 -:108D600011021943884242D1BCB201A9012006F088 -:108D70001EFC7AE0029F3888010776D5002D41D08D -:108D8000A9190691CA788B78361D1102B6B219431B -:108D90008919A1422BD869468A8906994B780978A6 -:108DA0001B020B439A4222D1C00623D506F0E5FAF6 -:108DB00007A800900698AB19C17880780A02069936 -:108DC00002434878097800020843002106F0DDFAE2 -:108DD000009006F0D6FA009800283ED10698C17897 -:108DE000827808026946898B1043884202D00B20A2 -:108DF00015B0F0BD0698C17882780802104380193A -:108E000086B22EE0C0062CD5002007AA01461154D8 -:108E1000401C80B21028FAD306F0AFFA06A80090E2 -:108E20006846002380891022194606F052FC009003 -:108E3000002803D006F0A5FA00980EE00BA86946BA -:108E4000009088890A8B07AB002106F09EFA0090FB -:108E500006F097FA0098002803D0FEF748FBC7E712 -:108E600003E0388810218843388001A806F0A7FB6A -:108E7000002800D17EE7424D6988002921D00122D7 -:108E800068460276027700244477018417218185A1 -:108E90000EAA234602320BA906A805F03FFF0028C0 -:108EA00002D0FEF78CFBA3E70CA8009069468B8DDF -:108EB000288804220121FEF769F8002898D16C80E7 -:108EC00096E7002094E7F0B5002487B015460E46DB -:108ED000002A04D002A9012006F069FB41E010201D -:108EE00007B0F0BD0398007800073AD506F045FAC0 -:108EF00001A8009068460023008A204A194606F01F -:108F0000E8FB074606F03DFA002F23D1002E23D0C0 -:108F100068468088298820183719001D814239D376 -:108F20006946098A3970090A797069468988B97071 -:108F3000090AF97006F021FA01A869460090088A2A -:108F40008A883B1D002106F0C4FB074606F019FA8B -:108F5000002F01D00320C3E7684680882018001D39 -:108F600084B202A806F02BFB0028BBD082280BD0CD -:108F7000FEF7BDFAB4E7000001340000FFFF000077 -:108F8000EC13002003300000002E0ED02988A01C16 -:108F9000814201D20C20A3E72246314639480AF02B -:108FA0002DFD31190870000A4870A41C2C80002087 -:108FB00096E700B585B06946FEF741FC00280AD166 -:108FC0006846007C03000CF0F5F808052F2F2F2FC2 -:108FD00008080531032005B000BD684680780128E7 -:108FE00007D1684600880321C902401A1CD0012815 -:108FF0001AD068468079012806D1684680881521F4 -:109000004902401A05280FD96846807A012811D1F3 -:109010006846018929200002081A05D0022803D0D9 -:10902000032801D0042805D10F20D4E7164917489A -:109030000BF0CFFF0020CEE738B5154A0021518054 -:1090400003791AE0CC002418A46800946C462488A4 -:10905000250707D5E50605D5D90008182038C08BA7 -:10906000508006E0640406D59171C9000818C088D4 -:109070009080012038BD491CC9B28B42E2D8002043 -:1090800038BD0000FFFF0000607D000033020000DB -:10909000EC1300200120F8494006C861704770B504 -:1090A000F54D0024AC7028466C7020304470047478 -:1090B0006C61AC72AC6209F01AFFA86128463430CA -:1090C0000AF0B4FD002804D0FF20ECA13A300BF0E8 -:1090D00080FFEE48C46301204006E86170BD70B5B2 -:1090E0000125EB4902260E60E849CD63E949C96ACA -:1090F00009070ED4E7494031CB6AE74A53620B6B4C -:1091000093624B6BD3628B6B1363C96BD3051943AB -:109110005163D949E14CC96900282BD001282DD0D1 -:10912000FF20D6A169300BF054FFDD48A063FF207B -:10913000043060632563DB49032008602061D74960 -:10914000962040314860D948D7494163D549FC3918 -:109150000163D549091FC163D249F03981630320F6 -:10916000D249000340394860D14910204860D148B5 -:10917000066070BDD0486061D04804E0CF48E03060 -:109180006061CE48801F0143A161CEE7BA4901204A -:1091900008707047B84900200870704770477047E2 -:1091A000BE4940310028086802D00122104301E086 -:1091B000400840000860704770B50C46AE4D01464F -:1091C0000622E81C0BF068FD6C7270BDAA482030C6 -:1091D00040787047A84A91705070704770B50D463E -:1091E0000446082904D9FF20A4A1C6300BF0F1FEE3 -:1091F0000022B34809E09100635809180B6053003E -:109200001B191B8C0B62521CD2B2AA42F3D3206BE7 -:10921000AB494031086070BD0B23DB4310B5C21A67 -:109220009E4998421FD008DC1C3222D00A2A20D046 -:10923000142A1CD0182A08D117E0083011D00428AD -:109240000DD0082809D00C2805D0FF208BA1F230C2 -:109250000BF0BFFE10BD04200CE000200AE0FC2053 -:1092600008E0F82006E0F42004E0F02002E0EC2022 -:1092700000E0D820C86010BD7F482030007B7047D8 -:1092800010B5864CC17861620BF067FD0002E061A9 -:1092900010BD252808D0262808D0272808D041004E -:1092A0000A2807D8091D06E0022105E01A2103E07B -:1092B000502101E0891DC9B2784A91607749403157 -:1092C000486170476C494861704770B56A4CA0723C -:1092D00000F01FFBA07AC00740D0724D28688007BD -:1092E00003D466A177480BF074FEA07A01061DD561 -:1092F000800707D5734861A1801C0BF06AFEA07A35 -:10930000000613D52078694E012816D0002804D015 -:109310006C485AA111300BF05CFE6B487061A0697B -:109320003061FF206149013040394860A07A8007F0 -:1093300014D52868C00708D102E06348001FEDE794 -:1093400060484EA11A300BF044FEA07A400728680E -:1093500001D5042100E008210843286070BD70B5E4 -:109360000124454D002807D0012818D002281AD022 -:10937000232042A100010BE000F0CBFA52482978EB -:10938000001F012907D0002907D04E483BA15738BC -:109390000BF01FFE70BD046070BD446070BD812085 -:1093A000FFF793FF70BD00F0B4FA6869002804D19C -:1093B000444832A14F380BF00CFE6969A86A401886 -:1093C0004249C86039484249403001603E490C3149 -:1093D00041600814354940394860274820300474FA -:1093E00070BDF8B50C2069460870314C6068C00645 -:1093F000C50F1026A66034480021FC300161324BB5 -:1094000001221B1F1A610BE000BF00BF00BF00BF9D -:1094100000BF00BF00BF00BF6B461A78521E1A7013 -:109420006A461278002A02D00269002AECD0016153 -:1094300068460078002804D1912010A180000BF02C -:10944000C8FD002D00D06660F8BD0B490020C86142 -:10945000704710B50BF081FC00021049000AC86388 -:1094600010BD0B49022008607047094902200860BE -:109470001049086070470000481400207372635C54 -:1094800068616C5F7263732E63000000C01F004050 -:1094900080E100E08000001000170040001500404F -:1094A0005B060000001200404480004040F501408F -:1094B0000013004080E200E00601020025000300E6 -:1094C0000016004075020000041000404085004076 -:1094D0004C810040F74902200860CBE7F64908704C -:1094E000C8E710B5F5480AF0A9FB002803D0F449F5 -:1094F000F4480BF06EFD10BD10B5F0480AF0B6FB55 -:1095000010BDF1494860B5E7EC4910B53439EF4B6F -:109510000022C8605A60896A0818ED49486000F066 -:10952000FFF910BDE54810B5C2213438C160E74AE3 -:1095300000215160806AE649C230486000F0F0F9CD -:1095400010BD0120E34940028860DC490020343925 -:10955000C860DF4948608DE7D84900203439886207 -:1095600088E7D648DA493438806AFE30886081E777 -:10957000D749002088607DE7D748016810229143D1 -:109580000160D6490120886174E7D5490020C8618F -:10959000D14801681022114301606BE700B5FFF765 -:1095A000EBFFC64900203439087400BD00B5FFF751 -:1095B000ECFFC24901203439087400BDC849CA69AA -:1095C000012A01D0002055E7BF4A40329268520676 -:1095D000520E524202700020C86101204AE7F8B5DD -:1095E000BF4C2069012806D00021B44834380078E7 -:1095F000012802D004E04021F7E7E268012A04D004 -:1096000000220A43012802D004E02022F9E7616821 -:10961000012905D000211143B24A002802D007E0F9 -:109620001021F8E71368012B02D1E368012B04D065 -:1096300000230B43002802D007E00823F9E7116854 -:10964000002902D1E168012905D000221A439F4E6A -:10965000002802D004E00422F8E77168012904D050 -:1096600000211143002802D004E00221F9E76068DC -:10967000012829D000259C480D4301680906090EE0 -:1096800002D06169012900D000218C4F143F397349 -:1096900000680006000E02D0A069012800D000205A -:1096A00078738B488068002803D000F03DFA0128C9 -:1096B00000D00020B8730021E16021616160616128 -:1096C000A16171602846F8BD0125D4E77B480121DE -:1096D0001438C173CEE6F8B5784E0127143E307CBD -:1096E0000025002825D07C4C206800902560FFF7DD -:1096F00078FE009820607A48C56005614560456144 -:1097000085617449001488603046203801787348B8 -:1097100001290AD000290AD0D920694980000BF01C -:1097200058FCF9F775FC3574F8BD0760F9E7476038 -:10973000F7E7FFF754FF04460020F07364484268DF -:109740005E4D343D6A620068A8622978002909D11B -:10975000A978002906D05C4B5B681B780B406978C0 -:10976000994309D000213170E10707D0104602F07B -:1097700029FD0121A86A08E03770F5E7A10601D5A7 -:10978000022102E0A10702D5002102F02AFD4E4F7E -:10979000796806220931E81C0BF051FA002807D13C -:1097A000687A79680978C909884201D1012000E006 -:1097B00000207070204600F0BDF83F48C2270078B6 -:1097C000002815D0012828D002283BD003285AD0E1 -:1097D0003B4946480BF0FDFB287C002804D0287844 -:1097E000002865D0FFF7C8FE2878002861D089E0FE -:1097F000A00701D501F0CCFB200703D50120EF60C5 -:1098000001F0FEFB600703D50020EF6001F0F8FBDC -:10981000A006E1D501F068FBDEE7A00701D503F063 -:1098200026FF200703D50120EF6003F09FFE6007AD -:1098300003D50020EF6003F099FEA006CCD503F01D -:1098400020FEC9E7A00703D5BF200440F9F7D2FBEB -:10985000200705D5BF2004400120EF60F9F7C9FBC0 -:10986000600705D5BF2004400020EF60F9F7C1FB79 -:10987000A00603D5BF200440F9F7BAFB6006ABD5BC -:10988000F9F7B9FBA8E7A00701D5F9F7B7FB20075F -:1098900003D50120EF60F9F7B0FB600703D5002086 -:1098A000EF60F9F7AAFBA00696D5F9F7A5FB93E7B9 -:1098B0001EE020E000E100E0600000207C140020B9 -:1098C0007C940000AB020000001500404081004085 -:1098D0004085004000F501400012004000100040AB -:1098E00000110040001400404016004094040000A5 -:1098F000FFF74BFE78E7E868002803D0A96A09184B -:1099000028484160F07B002800D10DE7F9F780FB83 -:10991000F8BD254903200860881524498860A9E519 -:10992000224823494030C161224981611F494015C5 -:1099300048609FE570B50546FFF7EBFF1E4CA17A26 -:10994000080701D568071CD41C4AC80605D5507BFA -:10995000002802D0907B002813D0880602D510780A -:1099600000280ED1480602D55078002809D00020E2 -:109970008A070026002A07DA4A0704D50122227046 -:1099800002E00120F4E72670CA0709D0AA0705D42F -:10999000890705D5002803D0A80601D4FFF721FDCB -:1099A000A67270BD408500400012004000F50140E5 -:1099B000101000404481004048140020681400202A -:1099C0002E48002101704170704770B5064614465C -:1099D0000D460120F7F780FE28490120284B08702A -:1099E0009E60DC601D6170BDF8B504460120F7F78C -:1099F00073FE22490120087021494C60214900264C -:109A00004E600321204D8902A960204F002C0AD00E -:109A1000012C03D01EA140200BF0DBFA3E60032096 -:109A200080026860F8BD386001208002F9E710B557 -:109A30001248017800290ED00321134A890291604F -:109A400010494A680021002A03D0154A1268427062 -:109A500000E0417001700020F7F73EFE10BD07489E -:109A60000178002907D007484068002802D00C4838 -:109A70000068C0B270474078704700006100002065 -:109A800000F5004000F1004000F5014000F2004008 -:109A90007372635C68616C5F63636D2E63000000CA -:109AA00000F400403648002101704170102181709F -:109AB000704770B5064614460D460220F7F70CFEB7 -:109AC00001202F492F4A0870E41E146196605560EA -:109AD00070BD10B50220F7F7FFFD2949012008707D -:109AE000294800210160416081602849C014486014 -:109AF00010BD10B5224C2078002811D00120234938 -:109B0000C002886000F02EF80021002804D0012057 -:109B100060701F48006801E061701020A070217023 -:109B20000020F7F7D9FD10BD10B5154801780029C0 -:109B300005D000F017F8002800D0012010BD4078B3 -:109B400010BD10B50E480178002909D000F00AF8C0 -:109B5000002803D00E480068C0B210BD102010BD10 -:109B6000807810BD08480168002905D041680029A7 -:109B700002D08068002801D0002070470120704783 -:109B80006300002000F5004000F1004000F50140B6 -:109B900000F4004010B528210BF0DBF810BD407830 -:109BA0008006800E704740788006800EC01C70478B -:109BB0002820704770B5054600780A0700090001A3 -:109BC000120F104328700B000BF0F4FA070507057D -:109BD000070509050B00062408E00C2406E02224F2 -:109BE00004E00024FEA158200BF0F3F96878800906 -:109BF00080012043687070BD00780007000F704737 -:109C000010B50622C01C0BF047F810BD0B4610B56E -:109C1000C11C062218460BF03FF810BD10B50622F5 -:109C200009300BF039F810BD0B46014610B506227D -:109C3000093118460BF030F810BD0278BF23C90770 -:109C40001A40490E0A430270704700784006C00F60 -:109C5000704702785206520EC9010A4302707047DB -:109C60000078C009704770B50C460546C11C2046F7 -:109C7000062209300BF010F820784006400E2070C4 -:109C800029784906C90FC9010843207070BD70B515 -:109C900015460E4604461F2A03D9D1A1A9200BF070 -:109CA00098F920462A46314609300AF0F5FF6078D7 -:109CB000AD1D80098001A906890E0843607070BD42 -:109CC00070B5054640780E468406A40E062C03D2D5 -:109CD000C3A1B9200BF07DF9A41FE4B21F2C00D959 -:109CE0001F2429462246093130460AF0D5FF204676 -:109CF00070BD70B515460E4604461F2A03D9B8A19B -:109D0000CD200BF066F920462A46314609300AF08C -:109D1000C3FF6078AD1D80098001A906890E084344 -:109D2000607070BD70B5044640780E468506AD0E75 -:109D3000062D03D2AAA1DE200BF04BF9AD1FEDB228 -:109D40001F2D03D9A6A1E2200BF043F921462A4694 -:109D5000093130460AF0A0FF284670BD10B5042234 -:109D60000F300AF099FF10BD0B46014610B50422D2 -:109D70000F3118460AF090FF10BD10B503221330C2 -:109D80000AF08AFF10BD0B46014610B503221331BD -:109D900018460AF081FF10BD4176090A81767047A6 -:109DA000817E427E080210437047C176090A01771E -:109DB0007047017FC27E0802104370474177090A4D -:109DC00081777047817F427F080210437047C175D9 -:109DD000090A01767047017EC27D08021043704770 -:109DE00081757047807D704720300279C90652091D -:109DF0005201C90E0A430271704720300079C00633 -:109E0000C00E704720300279D206D20E49010A43B3 -:109E100002717047203000794009704710B5052263 -:109E20001F300AF039FF10BD0B46014610B5052260 -:109E30001F3118460AF030FF10BD30B5411C837E3B -:109E40000A461902D37D447E927D1B0221431343AF -:109E5000674D827D8C1FAC4210D8002A0ED0082A94 -:109E60000CD88A420AD28B4208D8817F427F0802EE -:109E70001043A91D884201D8012030BD002030BD0B -:109E800000210A464254491C2229FBDB70474078D6 -:109E9000C006C00E70474078C006C00EC01C704798 -:109EA0002220704710B502788B07920892009B0F12 -:109EB0001A4302704278520952014270012908D0B7 -:109EC000022906D0032905D0FF2045A1A3300BF0BD -:109ED00080F810BD01210A43427010BD10B5027810 -:109EE0008B07920892009B0F1A4302704278520926 -:109EF00052014270012908D0022906D0032905D059 -:109F0000FF2037A1BD300BF064F810BD01210A43DA -:109F1000427010BD00788007800F70470278FB23E5 -:109F2000C9071A40490F0A4302707047007840077A -:109F3000C00F70470278F723C9071A40090F0A4378 -:109F40000270704700780007C00F70470278EF2357 -:109F5000C9071A40C90E0A43027070470078C0064C -:109F6000C00F704770B50546C1700B000BF022F9A9 -:109F70000E080A0C0E1012120C14141212160C18E1 -:109F80000C2413E0082411E002240FE017240DE054 -:109F90000D240BE0012409E0092407E0062405E074 -:109FA000452000240EA1C0000BF013F8687840098A -:109FB00040012043687070BDC078704770B504469A -:109FC00040780E46C506ED0E1B2D03D904A10948A5 -:109FD0000AF0FFFF6019C01C042231460CE00000AB -:109FE0007372635C756C5F7064752E6300000000B3 -:109FF0007A0C00003A0200000AF04EFE70BD70B507 -:10A00000044640780E46C506ED0E1B2D03D9A04927 -:10A01000A0480AF0DEFF6119C91C042230460AF08C -:10A020003BFE70BDC171090A01727047017AC279A5 -:10A030000802104370474172090A81727047817AA1 -:10A04000427A080210437047C172090A01737047CF -:10A05000017BC27A0802104370474171090A81717D -:10A060007047817942790802104370470171704747 -:10A07000007970474173090A81737047817B427B85 -:10A0800008021043704730B5411C037A0A46C47970 -:10A0900019022143537914791B0223437E4D007921 -:10A0A0008C1FAC4210D800280ED008280CD888424B -:10A0B0000AD28B4208D8D07A917A00020843A91DAF -:10A0C000884201D8012030BD002030BD10B50522E6 -:10A0D000001D0AF0E1FD10BD0B4610B5011D052263 -:10A0E00018460AF0D9FD10BD4172090A8172704705 -:10A0F000817A427A080210437047017170470079F3 -:10A10000704710B50822001D0AF0C6FD10BD0B46B1 -:10A1100010B5011D082218460AF0BEFD10BD0A78D0 -:10A120000273497841737047027B0A70407B487024 -:10A13000704710B508220E300AF0AEFD10BD0B4678 -:10A14000014610B508220E3118460AF0A5FD10BDD3 -:10A1500010B5042216300AF09FFD10BD0B460146D3 -:10A1600010B50422163118460AF096FD10BD10B540 -:10A170000822001D0AF090FD10BD0B4610B5011D10 -:10A18000082218460AF088FD10BD10B504220C30D4 -:10A190000AF082FD10BD0B46014610B504220C31B9 -:10A1A00018460AF079FD10BD017170474171090A26 -:10A1B00081717047C171090A017270470079704757 -:10A1C00081794279080210437047017AC279080206 -:10A1D00010437047017170470079704701717047F3 -:10A1E0000079704710B50822001D0AF055FD10BD1A -:10A1F0000B4610B5011D082218460AF04DFD10BD92 -:10A2000010B50822001D0AF047FD10BD0B4610B521 -:10A21000011D082218460AF03FFD10BD70B5154615 -:10A220000E4604461B2A04D93720194900010AF0BA -:10A23000D0FE2A463146E01C0AF02EFD6078E90681 -:10A2400040094001C90E0843607070BD70B50546F5 -:10A2500040780E46C406E40E1B2C04D9DF200C49BE -:10A2600080000AF0B6FE2246E91C30460AF014FDD2 -:10A27000204670BD4078C006C00E1B2801D80120C2 -:10A2800070470020704710B522220AF005FD10BD6E -:10A29000E09F0000430200007A0C0000FEB50F466C -:10A2A00004460146064620302546C031603640351A -:10A2B0000190032F04D0002F2DD0012F2BD04BE085 -:10A2C00000206080A080E08020816081A082E08505 -:10A2D000E0826874A074E074A076E076A073E07306 -:10A2E00020746074019B987401232B74A8822883C6 -:10A2F0000876E883B0706883A873E8732077607786 -:10A30000019988720199087430727072B072327457 -:10A31000B074A883FEBD0020A8822883012F52D0EC -:10A32000E08B0090608C0290C00000990AF02EFD36 -:10A33000401C80B2E8820099192241439202914266 -:10A3400001DD401EE8827D20000200990AF01EFD1A -:10A35000401C3080002F01D0022FDBD10198007A01 -:10A36000C1060198C90E01720020687322182421C9 -:10A370008B5C4032D9075B08DE07C90FF60F7118F6 -:10A380005B08DE07F60F71185B08DE07F60F711821 -:10A390005B08DE07F60F71185B08DE07F60F711811 -:10A3A0005B08DE07F60F76185908891911726A7B67 -:10A3B000401C5118C0B269730528D7D3002FA9D10A -:10A3C0000020A874FEBD4A7F2046E030022A12D049 -:10A3D000097F022913D050A173200AF0FAFD012051 -:10A3E00000900290E08BA98B484300990AF0DCFCB6 -:10A3F000A883029898E7818800910089F1E7018A93 -:10A400000091808AEDE770B504464034667B0546CE -:10A41000002E68D0252E66D8002964D03E20405DED -:10A42000A27B4843101825210AF0B0FC0846A1730E -:10A430004207C908520F3C4B691820319A5C0979D0 -:10A440008A4367D031460AF0A1FC491CCAB20020F9 -:10A4500006E0002804D029184031C979511ACAB23F -:10A46000291848235B5C93423AD320310979C943C8 -:10A47000CB07DB17D21A521E1206120E34D08B07EE -:10A48000DB17D21A521E1206120E2FD04B07DB1703 -:10A49000D21A521E1206120E2BD00B07DB17D21A3D -:10A4A000521E1206120E27D0CB06DB17D21A521EEE -:10A4B0001206120E23D08B06DB17D21A521E12067A -:10A4C000120E1FD04B06DB17D21A521E1206120EA6 -:10A4D0001BD00906C917511A491E0A06120E17D0B9 -:10A4E000401C0528B5DB70BDC00013E0C000401C57 -:10A4F00010E0C000801C0DE0C000C01C0AE0C000DD -:10A50000001D07E0C000401D04E0C000801D01E008 -:10A51000C000C01DE07370BD7372635C6C6C5F75CE -:10A5200074696C2E63000000EC51010010B5FF4807 -:10A530000021017041708170C17041718171C171E0 -:10A54000083009F073FB002804D0FF20F8A1843004 -:10A550000AF03FFD10BD10B5F44900204872081DF7 -:10A5600009F064FB002804D0FF20F1A1C3300AF0F9 -:10A5700030FDFFF7DBFFF148FFF782FC0021EF48D9 -:10A58000FFF7E4FC0121ED48FFF78CFC10BDE2E78A -:10A590001B207047E5494A7A002A01D00020704705 -:10A5A000488101204872704710B5E0494A7A002A74 -:10A5B00002D04989814201D0002010BDDB48001D36 -:10A5C00009F03CFB002804D0FF20D9A1B4300AF0E8 -:10A5D00000FDD648001D09F049FBFFF7A7FF012049 -:10A5E00010BD70B5D14C0025627A002A02D0628974 -:10A5F000824201D00D700DE0227863789A4203D335 -:10A6000022786378D21A04E062782378D21A102371 -:10A610009A1A0A70FFF7C8FF002801D0657201205E -:10A6200070BDC2494A7A002A04D04989814201D1C9 -:10A630000120704700207047BC490A784B78521CB3 -:10A640001207120F9A4207D0097822225143BC4ABE -:10A65000891801600120704700207047B3480178D5 -:10A660004278491C0907090F914206D00178491C1C -:10A670000907090F01700120704700207047AB499E -:10A680004A7A002A04D04989814201D101207047C9 -:10A6900000207047A5490A784B789A4207D049783C -:10A6A00022225143A64A89180160012070470020E8 -:10A6B000704710B59D4C20786178884216D060783C -:10A6C000401C0007000F6070201D09F0B7FA002839 -:10A6D00004D0E078401CE070012010BDA078401C40 -:10A6E000A0709248001D09F0C1FAF5E7002010BDE6 -:10A6F0008E4801784078814201D1012070470020C6 -:10A7000070478A4801784278914202D301784078B4 -:10A7100003E041780078081A1021081AC0B2704787 -:10A720000F20704770B5814C0D46617A002916D014 -:10A730006189814213D100262E70201D09F07EFA16 -:10A74000002805D1A0782870A670201D09F08EFA87 -:10A750002878E17840182870E670012070BD00204C -:10A7600070BD76490160704770494A7A002A04D06A -:10A770004989814201D101207047002070476B490F -:10A780004979002901D0002070476E4901600120FD -:10A79000704766484179002901D0002070470121A7 -:10A7A00041710846704761494A7A002A04D04989B4 -:10A7B000814201D101207047002070475B494979EF -:10A7C000012901D0002070475E49016001207047D7 -:10A7D00056484179012901D000207047002141717C -:10A7E0000120704751484079012801D0012070476D -:10A7F000002070474D494A7A002A04D04989814295 -:10A8000001D1012070470020704770B5474C0546C4 -:10A81000A0790721401C0AF0B9FAE079814208D0FA -:10A82000A07922214843474922314018286001205D -:10A8300070BD002070BD10B53C4C0721A079401CB4 -:10A840000AF0A4FAE079814207D0A0790721401CE0 -:10A850000AF09CFAA171012010BD002010BD334800 -:10A860008179C079814201D1012070470020704771 -:10A870002E494A7A002A04D04989814201D1012017 -:10A8800070470020704710B504462848083009F08A -:10A89000D5F9002815D125498879CA7990420CD07C -:10A8A000C8792221484327492231401820601F4897 -:10A8B000083009F0DBF9012010BD1C48083009F010 -:10A8C000D5F9002010BD10B504461848083009F02D -:10A8D000B5F9002815D115498879CA7990420CD06C -:10A8E000C8792221484317492231401820600F4877 -:10A8F000083009F0BBF9012010BD0C48083009F000 -:10A90000B5F9002010BD094810B5083009F096F9D6 -:10A91000002822D1054CA079E17988421AD0E0794B -:10A920000721401C0AF032FAE1710DE066000020B8 -:10A930007372635C646D5F712E630000B01700205A -:10A9400080140020A01600202046083009F08EF95F -:10A95000012010BD0C4809F089F9002010BD0A48FB -:10A9600008388179C079814201D1012070470020E7 -:10A970007047054808388179C079814201D10120AA -:10A9800070470020704700006E000020704770473D -:10A99000FF207047704770470020704700207047C5 -:10A9A000002070470020704700207047002070474B -:10A9B000002070470020704700207047012070473A -:10A9C000002070470020704700207047002070472B -:10A9D000F8B5FF4D0446A87F002600280CD00029BA -:10A9E00023D1667010202070E87FA07028462030A8 -:10A9F0000078E070AE7718E0287A012801D00020B6 -:10AA0000F8BD002911D16670F149687A01270A3131 -:10AA1000002801D0132000E0052020701422A01C83 -:10AA20000AF03AF9A7716E722E720120F8BDF8B5DE -:10AA3000E8480078002802D00C273846F8BD0027E7 -:10AA4000E34D3C46203DAF74EF746F75AF752F75C5 -:10AA500028466F732038DE4E47737771E87D0028F3 -:10AA600004D0FEF785FDFFF744F8EC75347274727C -:10AA7000B477D7482430FFF78DF8D5484C30FFF72E -:10AA800089F8DAE710B5D34C00232370D04C203C72 -:10AA9000E375CF4B01241C71603B583307C3FFF7AC -:10AAA000C6FF002804D0FF20CBA102300AF091FAA3 -:10AAB00010BDC7482038807C7047F8B5C44D0646A5 -:10AAC000407B203DE873C24837791346AF73B27BB1 -:10AAD00082710446603C217006221946601C0AF00F -:10AAE000DBF8B07960730622F11DE01D0AF0D4F89E -:10AAF000687B0126002800D0EE74B5484038407BC2 -:10AB0000002800D02E75002F09D0012F09D0022F68 -:10AB100024D0032F46D0FF20AFA14D3013E00021F9 -:10AB20001DE0AB4801212430FFF744F8A848E11D9F -:10AB30002430FFF773F8607B002807D0012807D086 -:10AB4000FF20A5A143300AF044FA0CE0002100E008 -:10AB500001219F482430FFF77CF804E006219C483F -:10AB60002430FFF727F800206875A8759848611C05 -:10AB70002430FFF745F8964821782430FFF75DF838 -:10AB8000934804214C30FFF715F89148611C4C3074 -:10AB9000FFF736F88E4821784C30FFF74EF8AE7448 -:10ABA0000020F8BD0221DAE770B5894C0125203C70 -:10ABB0000246A5758648007A002801D03A2070BD6B -:10ABC000834860380378934206D1002262750622DA -:10ABD000401C0AF061F86575002070BD70B5044630 -:10ABE0007B4D0020203D28752846224632380AF049 -:10ABF00053F82846203844730120287570BD7449E5 -:10AC00000871704710B5724C0022203CE2746073EA -:10AC10000246204612380AF03FF80120E07410BDC9 -:10AC2000F8B500F04CFB6A4C0025203CE07D002884 -:10AC300004D0FEF79DFCFEF75CFFE575654E3570B0 -:10AC4000FEF75AFCA07B012804D00021084601F041 -:10AC500082FAF8BD0021022001F07DFA5C4C207AD6 -:10AC60000127002809D0A07F0028F2D10520E07735 -:10AC7000204620300570A777F8BD70780028FBD0FB -:10AC8000534906226039487BE073C91D0846693084 -:10AC90000AF002F83C20A07227727570F8BD10B55A -:10ACA0004B4C203CE17B207CCA0701D0C2070BD073 -:10ACB0008A070FD582070DD42620FEF7EAFA207CFA -:10ACC00002210843207410BD2520FEF7E2FA207C03 -:10ACD0000121F6E74907F6D54007F4D42720FEF70F -:10ACE000D8FA207C0421ECE770B53A4D287800288A -:10ACF0007CD1374C203CA07C00287CD0FEF7F1FBB7 -:10AD00000026267466746E703046FEF7E7FB00205E -:10AD1000FEF7E5F93448FEF7B3FA2546403D296EC3 -:10AD20008857FEF779FA3048C01EFEF792FBFEF70F -:10AD300008FCFFF7B4FFFEF729FAFEF7CBFB012072 -:10AD4000FEF70DFB0F210520FEF744FA2978681C59 -:10AD5000FEF732FAA07B01280AD0E07C002807D059 -:10AD6000214612390846627B5630FEF790FFE674A2 -:10AD7000207D002808D0164840380146427B123911 -:10AD80008C30FEF7B6FF2675607D00280BD010488A -:10AD9000691C2430FEF734FF0D48691C4C30FEF767 -:10ADA0002FFF6675A675E86D0178002903D001783C -:10ADB000001DFEF713FAA86D0178002907D001786D -:10ADC000034A401C7732FEF774FE0120E0750EE066 -:10ADD00034180020740000207372635C6C6C5F6137 -:10ADE00064762E6300000000F751010003E0FEF7D7 -:10ADF00083FB002070BD0C2070BDFB49486070478C -:10AE000070B50546FEF79DFB002D06D00020FEF72D -:10AE10005CFAFEF7BBF9FFF742FFF44C607C0028B8 -:10AE200009D0A07B012803D1F149F2480AF0D1F8FA -:10AE3000FFF7F6FE70BD0126002D05D00220FEF7BB -:10AE40008EFAEA4820304671E8484430FEF759FB54 -:10AE5000012008F0A8FDFEF7A1F9A07B00280FD083 -:10AE600001280DD002280BD003280BD0E148E0497F -:10AE70001E300AF0AEF8E07B217C884306D009E062 -:10AE8000032000E00120FEF720FAF4E7A07B012870 -:10AE900003D06674D448067070BD00202074F9E7B2 -:10AEA00010B5FEF71EFBD048007800280ED1CF4821 -:10AEB000807C00280AD00020FFF7A2FFF6F781FA75 -:10AEC000CA4820300079012806D007E000F0F7F9E1 -:10AED000FEF712FB0C2010BDF8F79AF8002010BD09 -:10AEE000C14901204870704770B500F0DAFF0028B2 -:10AEF0001BD0FF202D30FEF7E5F9BB4E3078BB4C60 -:10AF00002034012814D0022801D003282ED0A520F7 -:10AF1000B74980000AF05DF83078002807D0F6F7CE -:10AF200050FA207901282BD02FE0FFF779FE70BD71 -:10AF3000AE4DA87B032819D0FEF7F4FAE87D00286F -:10AF400003D0FEF7C6FDFEF70CFBA8489430FEF7D1 -:10AF5000D8FA012008F028FDA87B01280BD0A179A0 -:10AF60006F20012906D0032904D004E00120FFF757 -:10AF700047FFD1E77F20FEF7A8F902203070CBE72A -:10AF80006079002801D1FEF7A1FB0020607170BD3F -:10AF900070B5964CE07D002803D0FEF7E9FAFEF785 -:10AFA000A8FD00F07EFF00281CD08F4D28780228D5 -:10AFB00003D08F4990480AF00CF8A07B012814D0E8 -:10AFC000FF202D30FEF77EF90120FFF719FF2878CA -:10AFD000002809D0F6F7F5F9844C203420790128AF -:10AFE00006D00AE0FFF71CFE70BD99208000E9E75B -:10AFF0006079002801D1FEF769FB0020607170BD07 -:10B00000F8B50446FEF738F90746FEF78DFD01282E -:10B0100027D0002674480078022804D07648744966 -:10B020003C3009F0D6FF714DE87D002803D0FEF7D3 -:10B030009FFAFEF75EFDFEF784FA6C489430FEF747 -:10B04000DBFD21006D4C009064D0FEF7BFF80028B6 -:10B0500060D0009803000AF0ADF8065D5D5D065D06 -:10B060001E5D0126D6E7A87B012853D0374304D1C3 -:10B07000A079002801D002284CD160484C30FEF75E -:10B0800040FA012008F08FFC0120FEF71EF9564817 -:10B090000321017045E059487430C178D438C27931 -:10B0A00091421DD10146D4310A79037A9A4217D1CF -:10B0B0004A79437A9A4213D18A79837A9A420FD194 -:10B0C000CA79C37A9A420BD10A7A037B9A4207D192 -:10B0D0000978407B4906C90F814201D1012100E076 -:10B0E0000021A87B012802D0002803D012E000290B -:10B0F00007D10FE0374304D1A079002801D00128FF -:10B1000008D13E487430FEF798FE002802D0A87D92 -:10B11000002810D0FF202D30FEF7D4F80120FFF7D3 -:10B120006FFE3148007800286AD0F6F74AF9207996 -:10B1300001286ED0C0E02C4F30497868042283315A -:10B14000343009F0A9FD2D484021743000784006C4 -:10B15000C20F78680A54294906227731413009F034 -:10B160009BFD2649786803228731383009F094FD29 -:10B1700022483B217430827D78680A541F4974311B -:10B180000A7ECB7D12021A4382878A7E4B7E120290 -:10B190001A43C2830A7FCB7E1102194301841749E7 -:10B1A00074318A7F4B7F1102194341841349052270 -:10B1B0009331243009F070FD10497F68943108798B -:10B1C000C20638462030D20E0090827709794909AC -:10B1D000C177207A00281DD0A07F00285BD1607A3B -:10B1E00000280ED013200DE0740000201418002059 -:10B1F000D8AD0000F9030000BF02000034180020A1 -:10B200005CE00520E0773449002008700120A07739 -:10B2100041E04CE03048E97D1038002924D000217D -:10B22000A172B989A1814021C95DE1733946062225 -:10B23000413109F031FDF88BE082388C2083788C25 -:10B2400060830098C07F2077607F400840003043D3 -:10B250006077FEF776FC617F4000C907C90F0143A4 -:10B2600061770120607215E00021A172B989A18186 -:10B270004021C95DE17339460622413109F00CFDD8 -:10B28000F88BE082388C2083788C60830098C07FB4 -:10B29000207701202072114D0020287000F00FF857 -:10B2A000FEF72AF90120696800F055FF39E7607957 -:10B2B000002801D1FEF70AFA00206071F8BD10B530 -:10B2C000FEF74AF9FEF73DF9FEF78BF80020FDF78F -:10B2D000FCFFFEF7CAF810BD5418002074000020CF -:10B2E0008107C90E002808DA0007000F0838800817 -:10B2F000FD4A80008018C06904E08008FB4A800095 -:10B3000080180068C8400006800F704710B500F034 -:10B310007BFF10BD70B5F64C0546A26800290DD024 -:10B32000002A04D0FF20F3A14C3009F052FEA560A2 -:10B33000F6F748F80220F6F73FF870BD002A04D16E -:10B34000FF20ECA1543009F044FE0020A060F6F785 -:10B350003AF80120F6F738F870BDE5481030C07EA5 -:10B36000002801D00020704701207047E0481030CD -:10B37000C07E7047DE483430C07E70470021C17601 -:10B38000817601600162DA481030C07E002807D162 -:10B39000D7483430C07E002802D1D549012008703A -:10B3A000704710B50B46C17E847EA14204D0114681 -:10B3B000184607F0B4FB10BDFFF7E0FF10BD38B52D -:10B3C000CB4C606801684978012924D00121684686 -:10B3D00006F05EF968460078CA49000209F0D6FC1A -:10B3E00060680268C0685268511807F0B5F9616872 -:10B3F000C860BF49606834310022884215D0018B93 -:10B40000002912D04272032101720271021D017FD4 -:10B41000FFF7C7FF38BD7D21C068C90007F09CF960 -:10B420006168C860B8480861E3E7018B491C018383 -:10B4300002214172E7E7FFB5AD4F02461037386A87 -:10B440003C68056889B060680790A948C1680291A6 -:10B450006B880B98C01A80B208900C98002804D012 -:10B46000264638362046483002E03E1D28466430E5 -:10B47000059003203071002A15D0012A7ED0022ABF -:10B4800052D0032A7BD09BA1A04809F0A2FD0C98C2 -:10B490000028307974D0032804D09C4895A1093045 -:10B4A00009F097FD40E1002904D1984891A169383D -:10B4B00009F08FFD9549A88FA839484340180A998B -:10B4C00000F0A8FEA0619149E88BA83948430A9989 -:10B4D00000F0A0FEE06186488C4AC068A98FA83AB7 -:10B4E000514384464118A069894A091A8A183B21A8 -:10B4F000A262864B495DA83B594341180818FF30AA -:10B500001630206260626046101AFF38ED2135382F -:10B51000C9008842BBD27F49884204D27B4875A1CA -:10B520005C3809F056FDBAE0784AA88FA83AE1687D -:10B53000504308180A9900F06DFEA0617349E88B2A -:10B54000A83948430A9900F065FEE0616848C06880 -:10B55000002804D16D4867A1543809F03AFD5820FD -:10B56000405B6D4A0028A88FE16822D0504308183C -:10B57000A169401AA0622169A06802E022E051E0BE -:10B58000CDE04843A169644A40183B21495D5143DD -:10B5900041180818FF3014302062E88BE1695043ED -:10B5A000411A0F208001081A60625148A16AC068E0 -:10B5B0006DE050430818A169401A3968D3384968CA -:10B5C0004018D7E7284640300290008B002801D071 -:10B5D000002904D14D4847A13C3809F0FAFCE88B1A -:10B5E0004D494843E169401AA062029A138B2269CF -:10B5F0009B1A9C46A3685343A2699A186346594311 -:10B6000051183B22525D444B5A438A185118FF315E -:10B61000143121620F218901411A61623449C968DC -:10B62000401A35E00C98002803D03420005D002833 -:10B6300074D1E88B38494843E169401A0899484376 -:10B64000A062284640300690008B0028079829D039 -:10B65000002804D02D4827A1163809F0BAFC069816 -:10B660002D4A018B08980818E16948434000FF30D3 -:10B6700014302062E88B5043411A0F208001081AD1 -:10B68000606200F0C1FD00281CD0A16A0298081A6F -:10B69000FF38ED212338C900884200D3F7E60220A5 -:10B6A0003071F4E6002802D00298002804D117482F -:10B6B00010A11D3809F08DFC0798A16AD33808182D -:10B6C000A062CCE706F0B1FD7A690146104607F0AA -:10B6D000D5FFA16A081AFF38ED211E38C90088423B -:10B6E000DCD201200DB0F0BD00ED00E000E400E090 -:10B6F000D01800207372635C6C6C5F6C6D2E7330BD -:10B700002E63000010270000B78913008A0500008F -:10B7100036040000A3020000E20400002AE003282F -:10B7200002D1FD4807210170A16A786907F014F879 -:10B73000B060616A206A884202D90598016001E020 -:10B74000059908600598F54900680818F060A9880F -:10B750000B98081A00B2002801DD022000E000204A -:10B7600070710C9830700C98002805D03420005D62 -:10B77000002801D00220B5E70C9801214840203470 -:10B780006075397F32463846FFF70BFE0020A9E787 -:10B7900010B5E14900284A68116A096807D01268A3 -:10B7A000C98BDF4BD2695943891A09F0EFFA10BDF2 -:10B7B000F8B5D94F35227868016A0C680168525C87 -:10B7C000002A0AD0498E6288914206D1407A002828 -:10B7D00003D1D449D44809F0FCFB06F026FD01460C -:10B7E0007868406907F04AFFFFF7D2FF79686588FB -:10B7F0000B682E185A8EB24202DB521C5A8602E0A7 -:10B80000401C2818588608683622125C002A05D188 -:10B81000428E23899A4201D1521C4286088B03280A -:10B8200002D2401C088302E00868408EA0802046B7 -:10B830004030C18A808A081A6188401E401885B24B -:10B84000203416E0096AE67F097976004B00B74993 -:10B85000007DCB5A895BC91889B20023FFF7EBFD45 -:10B86000002811D0012810D0AF48AE493A3009F075 -:10B87000B0FB79680868428EAB1A1BB2002BE1DA84 -:10B880000820E07400F00BFEF8BD78680068418E77 -:10B89000491C4186EDE770B51F209F4D002128709F -:10B8A000E960A868C27E130009F084FC04545403C4 -:10B8B0004654026A14680268117002685160006898 -:10B8C0002030407D002808D106F0AFFCA968096847 -:10B8D000096C07F0D3FE002815DCA86801684A8EC1 -:10B8E00061888A4204D12289511A6181628004E010 -:10B8F000511A61810168498E61800268C1681164D2 -:10B90000C16841610FE0A8680168098E6288891AE0 -:10B9100061810168098E618001680A6CC2600A6CED -:10B920004261886C6066204601F06DFC00280ED0F4 -:10B930007B487C49BD3808E0C1684161FFF7D4F914 -:10B94000002804D076487749B73809F042FBF5F76C -:10B9500038FD70BD72487349B038F6E710B56E4ACD -:10B960000B00526809F026FC0906090F1E0C2D2D4C -:10B97000082A2D00FFF78FFF10BD00F059FC10BD05 -:10B98000FDF7A9FE10BDD07E022805D0D07E032889 -:10B9900005D0644966480EE0FFF70AFF10BDFFF7C7 -:10B9A0000EFD10BDD07E0228F6D0D07E0328F6D042 -:10B9B0005F485C490B3009F00CFBF0E706F01BFC1C -:10B9C00010BD23205749000109F003FB10BDF3B55A -:10B9D00081B0514C029825460026012710350300FE -:10B9E00009F0E8FB0906313C3C3143433C3C430051 -:10B9F000494801211030FFF78DFC02990198FFF7AB -:10BA0000ADFFE87E022828D1A0680468006A0668B5 -:10BA100006F0EAFBF18B424A5143E269891AD339B5 -:10BA2000FF223232E162904202D24248081802E01C -:10BA3000081A41494018E0624048E16A814200D852 -:10BA40000846E06206E001460198FFF787FFE87EBE -:10BA5000022802D1286820300775FEBD01466560C6 -:10BA60000198FFF77BFF6660FEBDFF202D49C130C6 -:10BA700009F0AFFAFEBDF8B5064627480D4600248A -:10BA80003430254F0B0009F095FB09060C10100C03 -:10BA9000161610101600204801213430FFF73AFC2A -:10BAA00029463046FFF75AFFF8BD78603046FFF769 -:10BAB00055FF7C60F8BDFF201A49F53009F089FA7E -:10BAC000F8BDF0B5144C0020616885B003268E7671 -:10BAD000CA7E0746032A03D0C97E00293FD03FE033 -:10BAE000087F002804D112480E49D93009F071FAB4 -:10BAF0006068057F684606710221417106F095FB7A -:10BB00000290FF20F53003900121684601706946DC -:10BB1000284607F004F814E0D0180020EF160000C3 -:10BB2000E2040000F4B6000074060000FC510100BD -:10BB30001602000084F8FFFFB5F9FFFF161200009F -:10BB400020BF6068007F07F025FE0028F8D06068FD -:10BB5000007F06F050FB60680777FFF70FFC0120BD -:10BB600061688F7605B0BEE5FD494A68907600E0D1 -:10BB700020BF4A68D07E002803D0D07E937E9842B2 -:10BB8000F6D0D07E002803D00020002191767047A7 -:10BB90000120FAE770B5F24900241031CA7EF04D59 -:10BBA000032A03D02431CA7E032A17D169600028F2 -:10BBB00010D001280AD0EB49EB4809F00AFA00201E -:10BBC0006968002C0860686008D070BD0320FFF72A -:10BBD000CBFF01E0FFF775FF0446F0E70C2070BDD6 -:10BBE000F8B5DF4F04461F25E67E330009F0E2FA80 -:10BBF000042A20031B20DA481030844203D0D9499C -:10BC0000DA4809F0E6F902207C60FFF7ADFF002872 -:10BC100005D07968002008600862786012E00C2581 -:10BC2000002078600BE00120FFF7B4FF054604E038 -:10BC3000CE48CC490C3009F0CCF9002D02D0E07E82 -:10BC4000B042D1D1E07E002804D0C848C5491230A6 -:10BC500009F0BFF9F8BDC24810B51030FFF7C0FFBA -:10BC6000BF483430FFF7BCFFBD490020583108758C -:10BC7000BF494870BA49103148610A4624325061C0 -:10BC800088769076012210390A708860486010BD6D -:10BC900070B504460120FFF723FBC5B20B20FFF768 -:10BCA0001FFBC0B2854204D0B048AE49343809F019 -:10BCB00090F90120FFF714FBC5B21820FFF710FB25 -:10BCC000C0B2854204D0A948A649333809F081F9A9 -:10BCD0000420C043FFF704FBC5B21920FFF700FBA7 -:10BCE000C0B2854204D0A1489E49323809F071F9AA -:10BCF0009F489B490C38047000201031C876887624 -:10BD00000A462432D0769076994B0124083B1C7168 -:10BD100018600862106208601060FFF79CFF70BD39 -:10BD20008F48007870479249083908717047F3B519 -:10BD30000D468B4983B01031CA7E08462430884CAA -:10BD4000002A02D1C27E002A03D0C97E022903D074 -:10BD500005E08848616006E0C17E002901D00C2022 -:10BD600000E76060844806F0F2F96168087760686F -:10BD70007F490160007F002804D17B4879496238FF -:10BD800009F027F906F030FA7C49884200D20846CB -:10BD9000FF30C83086B260680321C1760027012DCC -:10BDA0002FD0724A0399121D5143026851600068F6 -:10BDB00001210170684605F06BFC68460078704907 -:10BDC000000208F0E3FF019106F02FFA01997118C3 -:10BDD00006F0C2FC6168032DC86021D06948086183 -:10BDE000606803210172022141720771021D017F07 -:10BDF000FFF7D7FA6068078307202070002067608C -:10BE0000B0E606F012FA314606F0A6FC6168C8609A -:10BE10005D48086108680770096801204870DFE71D -:10BE20005A48DCE77047F8B54D4E1036F17E0029D0 -:10BE300004D131462431C97E002901D00C20F8BD3F -:10BE40000221F176464C4A4F5834083F376234603D -:10BE5000002538602575397920304A004C49C07F6B -:10BE60008A5A4000085A2B46101881B22A462846A2 -:10BE7000FFF7E1FA002804D03B483A49323009F094 -:10BE8000A8F825610120A5602075658625863448BF -:10BE90007830857539684888401E48803583002091 -:10BEA000F8BD10B52E4901248868827E032A0CD083 -:10BEB00000684078002806D0C8683649884202D910 -:10BEC0000024FFF70DF8204610BD0024FBE72448AE -:10BED000826813681978491C1970C1681068C26AB1 -:10BEE000914204D8007D012801D001207047002034 -:10BEF000704700207047F8B51948194C1030606041 -:10BF0000016A00260D68006834212F460E54403720 -:10BF1000B97C002963D1007D032860D106F085F942 -:10BF200001466068406907F0A9FB002857DDFFF76C -:10BF30002FFC6988401C41186068026811860068FF -:10BF40002989028E91424AD9012120308175F88ACF -:10BF5000B98A401A6988401E401887B238E000004C -:10BF6000D0180020F4B600008D0300006D02000020 -:10BF700088000020CFB9000077BA0000F605000065 -:10BF800010270000CB120000B7891300B70800008B -:10BF9000FC5101002E841300096A09794A00CD4939 -:10BFA0008B5A028E007D94463F22525D5200895A80 -:10BFB000C91889B201236246FFF73DFA00280ED066 -:10BFC00001280ED002280AD0C349C44809F001F85C -:10BFD00061680868028EBA1A12B2002ADCDA66605A -:10BFE000F8BD60680068018E491C0186F0E7F8B56D -:10BFF000BB4D0026AA680128116A0C6810D00720E2 -:10C00000287006F05DF8B7480078F6F7AFFDA8682D -:10C010000683026861885186006820308675F8BD05 -:10C02000087913684100AB481F7D415A032F18D08F -:10C030001A7D022A22D01A7D012AE2D13F231B5DFC -:10C0400022895B00C05A0023401881B20120FFF70B -:10C05000F2F90028D5D0A1489F49B53008F0B9FFC2 -:10C06000CFE71E6112683F2396601B5D22895B004B -:10C07000C05A0023401881B20320E8E75822125B1F -:10C080001A613F231B5D22895B00C05A00234018C0 -:10C0900081B20220FFF7CFF9AA6801211268117559 -:10C0A000D7E738B58E4C0021A0680D46006842786D -:10C0B000002A01D045701FE00078002809D0012136 -:10C0C000684605F0E5FA684600788749000208F0FE -:10C0D0005DFEA0680268C0685268511806F03CFB1B -:10C0E0000146A068C160057102214172021D017FF5 -:10C0F000FFF757F9A068058305F0E2FF794800785B -:10C10000F6F734FD38BD10B50146754A0B0090684E -:10C1100009F050F8060D150408190C1C012100F057 -:10C12000A6F807E00021506800F0A1F810BD01203A -:10C13000FFF75DFF00210846FFF7ECF810BD00682F -:10C140000321017510BD00F0A5F810BD62496748D4 -:10C1500008F03FFF10BD70B5614C002809D00128E0 -:10C1600016D0022821D061485B49243008F031FF05 -:10C1700070BDFFF796FF00210846FFF7CBF8A068D7 -:10C18000807E002801D01F2000E00720207070BDB5 -:10C19000A068002501684D70FFF7F0F80320F6F75E -:10C1A00023FC05F08DFFA56070BDFFF77AFFA06846 -:10C1B000FFF7E4F800210846FFF7ACF80420F6F793 -:10C1C00013FC70BD46498968CA7E022A08D10A68F4 -:10C1D0001378002B04D150600968CA6A1018C8622D -:10C1E000704710B53E4A00290CD0012907D002291A -:10C1F00007D03E483849443008F0EBFE10BD401EE1 -:10C2000000E0401FD06010BD35488068002800D095 -:10C210000120704710B504460020002907D034489B -:10C2200008F0B4FD0146204608F0B0FD401C10BDEA -:10C2300010B52B488068C07E030008F0BBFF0414D3 -:10C2400014030A1401F0F2F800280BD022492948FF -:10C2500006E0FEF725FE002804D026481E49001DF2 -:10C2600008F0B7FE10BD23481B490B30F8E710B5A6 -:10C270000446002903D00020FFF7B9FE03E0194867 -:10C280000078F6F773FC2046FFF778F80020F6F701 -:10C29000ABFB10BD10B512488268106A11680068C7 -:10C2A000CB698B60134BC18B9B3359431368D960A7 -:10C2B0000146E0314B8883870C783B231C548B88E4 -:10C2C000C383CB88038409894184116802200875DF -:10C2D00010BD0000FC510100F4B600005A06000039 -:10C2E000D01800207C00002010270000B2070000BA -:10C2F00040420F0047040000F8B5FEF702FA064678 -:10C30000FEF770FAF94D07466879F94C002809D014 -:10C31000012823D0022826D003282ED0FF20F5A103 -:10C32000C63033E0F2481830FEF748FA002801D052 -:10C3300003200FE0EE481830FEF7ACF9002804D0D7 -:10C3400060696030007A002806D0E9481830FEF7AE -:10C3500008FA012068711BE00220FBE7E44818306E -:10C36000FEF7FFF914E0E2481830FEF793F90028D1 -:10C370000ED1FF20DFA1B83008E0DD481830FEF70D -:10C380001DFA002804D1FF20DAA1C03008F021FEF8 -:10C39000A169F722087810400870AA79D207120F15 -:10C3A0001043FB2210400870EA79D207520F104365 -:10C3B00008706B79EF22022B04D0012B07D0032BDE -:10C3C00007D00CE0012E06D8002F04D007E07F1E16 -:10C3D0003E43002E03D010401022104300E01040D6 -:10C3E0000870287C002811D0687901280ED0BF4839 -:10C3F0005438FDF786F8BD49606954397830A26930 -:10C40000FDF7E3FA0020FDF7EFFA04E00846FDF738 -:10C4100078F8FDF70CFBA0690078C00606D4E06947 -:10C420000078C00602D4E079002802D0A079002864 -:10C4300001D0012000E00320FCF747FF032020701B -:10C4400001202071F8BDAA4810B51C30FEF7DDF9B7 -:10C45000A74C002802D00020607004E0012060702A -:10C46000A2485438E061A148407C002802D060789E -:10C47000002805D0E069FDF744F8FDF7D8FA10BDB3 -:10C480009A485438FDF73DF8984A6069543AA0300C -:10C49000E169FDF79AFA0120FDF7A6FA10BD10B583 -:10C4A00093490022486932238276C27601221A54C7 -:10C4B0004030807C002803D00A700021022001E077 -:10C4C00000210320FFF71FFE10BD70B5884C607976 -:10C4D000C2062046416908464030002A01DA00229F -:10C4E00002E0028B4B89D2180B460283C0331A7EBE -:10C4F000002A03D0828B4D8952198283627A002AE6 -:10C5000003D03D2001F0C9F852E08A7E032A4FD0C3 -:10C51000227A002A13D0500701D4D00601D51E205C -:10C5200036E0100701D53D2032E0D00705D1900755 -:10C5300003D470A1734808F04CFD2A2028E0603134 -:10C540008A78002A05D0C28B551CC5830D88AA4263 -:10C550000FD25A7F062A02D01A7F062A05D1428BB3 -:10C56000531C438309888A4203D2828BC18A8A4240 -:10C5700001D322200CE0027C808A002A0FD00628FA -:10C580000FD35A48C07B012801D03E2000E008208C -:10C5900001F083F86069807E032809D001E08842B9 -:10C5A000F5D20120207000210846FFF7ACFD70BDD8 -:10C5B000FFF775FF70BD10B54C494D48CA7B002A86 -:10C5C0002BD0012A29D0022A27D0032A04D049A13E -:10C5D0004D4808F0FEFC10BD897B02290FD00729C9 -:10C5E0001BD0406901464031CA8A898A511A891E86 -:10C5F00089B2032900D30321028951180BE0406955 -:10C60000014640318A8A032A01D2018903E0428827 -:10C61000C98A5118491C818010BD4069F5E700B5F1 -:10C62000030008F0C7FD0604070B0F1212170029BC -:10C630000ED00FE0491E02290AD90BE0491F01293B -:10C6400006D907E0072903D004E00A390C2901D8EC -:10C65000012000BD002000BDFEB50546244818306D -:10C66000FEF78DF8002804D1274822A1CF3808F022 -:10C67000B0FC1F4CA069FDF703FC0321A069FDF786 -:10C680002DFCA069EF220178114001702946FDF7C9 -:10C6900069FC002601272B0008F08CFD0E5D5D086B -:10C6A0005D1D6161155D4D5D613D385D60697121A4 -:10C6B000095C002901D0062101E0C030417EA0695B -:10C6C000FDF71BFD4BE0E069FDF776FC0146A06934 -:10C6D000FDF784FD43E06169A069D031FDF747FDB6 -:10C6E0006169A0699531FDF750FD38E0C819002057 -:10C6F000900000207372635C6C6C5F736C61766594 -:10C700002E6300006B020000780800000621A0697B -:10C71000FDF760FD23E020690178A069FDF744FD85 -:10C7200020698188A069FDF741FD20694188A069E1 -:10C73000FDF740FD13E00096019660696030007CD3 -:10C74000002803D069460878384308706946A06914 -:10C75000FDF756FD03E0FE49FE4808F03AFCFEF7FF -:10C7600018F8002804D1FB48F949801D08F031FC75 -:10C770000C2D07D0072D04D060695E210E52603069 -:10C780008770FEBD606940304683FEBDF0B5F24C57 -:10C79000DC2061698DB0405C042809D0052834D1C3 -:10C7A0006031487A002829D001204874022026E010 -:10C7B0001022EA31684600F0A8FF61691022C831F2 -:10C7C00004A800F0A2FF684605F0BBF8616908AA5A -:10C7D0006CCA0F46CB6778378A670846FE608030A0 -:10C7E000BD60074620376CC7002303634363012005 -:10C7F000A0310876D9494874052000E00D20FFF7E4 -:10C800002BFF61690020C03108770DB0F0BDF8B58D -:10C81000D1481830FDF7B3FF002842D0CE4C207A23 -:10C8200000283ED160690025C030007ECB4E002834 -:10C830000BD0B17B0120FFF7F2FE002805D1B17BC0 -:10C840000420FFF7ECFE002806D060690127C03005 -:10C85000407F062807D00CE060695C210D526030F3 -:10C86000457402202FE0B17B0420FFF7D8FE00289A -:10C8700010D0B07B030008F09DFC173F3F3F3F1EE8 -:10C880003F3F3F3D3F203F3F3F292C3F3F3F3F3F02 -:10C890003F2F3F0060696A21095CC90702D0C030A0 -:10C8A0004577F8BD0C20FFF7D7FE60696030817ACC -:10C8B00039438172F8BD072005E0FDF7D0FF00285D -:10C8C000F8D075740B20FFF7C7FEF8BD00F02CFF01 -:10C8D000F8BDFFF75BFFF8BD606900218030816023 -:10C8E000C160057437740620FFF7B6FE60696030DA -:10C8F0008570F8BD0920E6E700F0D8FEF8BD70B5F8 -:10C90000964DA87B072834D1934CDE22606941887C -:10C91000125A491C91422CD1217A002929D1014671 -:10C92000E0318B88C28B934207D1CA88068CB24211 -:10C9300003D10A89468CB2420DD0884A8689303AA2 -:10C9400056819381CB88D3810989118201462E318A -:10C9500051600121117001221146FDF79FFC002159 -:10C960000420FFF7D0FB61690020C0314877A8732D -:10C97000E87370BD70B5794CA07B162803D074495C -:10C98000774808F026FB74480021426973486032FA -:10C99000117291703038067E0B250123002E06D0CF -:10C9A000027D002A12D14575817503750EE0567A15 -:10C9B000002E06D051722288828381760C22027664 -:10C9C00004E022888283817683770576A17370BD27 -:10C9D000F8B5614DA879800723D5287A002820D1A1 -:10C9E0005E4C0120A17BFFF71AFE002819D1A8692F -:10C9F0000127C0780026030008F0DCFB0E62620805 -:10CA0000622E3B4F0A62146220524562022021E0EE -:10CA1000A07B042804D052484D49333808F0D9FA95 -:10CA2000A673F8BDA07B082804D04D4848492D388E -:10CA300008F0CFFA686960308670F1E7A07B0A28B9 -:10CA400004D047484249263808F0C3FA6869603084 -:10CA500007720B20A073F8BDA07B0E2804D0AB207A -:10CA60003B49C00008F0B5FA6869603007720F20D2 -:10CA7000F0E7A07B0F2804D039483549183808F072 -:10CA8000A8FA1120E6E7A07B0F2804D034483049EB -:10CA9000123808F09EFA1320DCE7FFF76BFFF8BDB1 -:10CAA00069690846C0310A7F062A04D16030807A5D -:10CAB000800700D50E77487F0628F0D14E77F8BD65 -:10CAC000274823496E3008F084FAF8BD10B5234C8E -:10CAD0000020A17BFFF7A3FD002804D11E480122FE -:10CAE000017A114301720420A07310BD10B51A4CD5 -:10CAF00060690146C0314A7F002A06D0097F0629B5 -:10CB000003D0217A0122114321726030807A80079C -:10CB100015D4E069FDF752FB61696031C872E069C4 -:10CB2000FDF74EFB616960318881E069FDF74DFBDF -:10CB3000616902226031C881887A10438872606915 -:10CB400000220146C0310B7F062B00D10A7709E095 -:10CB5000F4C60000ED07000090000020C819002076 -:10CB6000770500006A231B5CDB0703D106234B77A4 -:10CB70004030428310BDF8B5FE48817B0020FFF7AE -:10CB80004EFDFD4C0126002807D160696030407AD7 -:10CB9000002802D1207A30432072616900255E208E -:10CBA000455262204654C831E069FDF7C8FA616910 -:10CBB000E0699131FDF7D2FA6169042208469131AA -:10CBC000B93008F069F8EB483038017E08270029B1 -:10CBD00006D0017D002912D14775857506750EE0D6 -:10CBE0006169054689894183E249E0691439FDF7A5 -:10CBF0008EFAE049E0690C39FDF796FA2F76DD48A8 -:10CC00000E218173F8BD70B5DA4D0020A97BFFF7C6 -:10CC100006FDD94C002803D1207A01210843207257 -:10CC2000E069FDF730FA00280ED0E069FDF726FA3A -:10CC30006169DE225052498800F0C1FD002806D00B -:10CC4000282000F02AFD70BDFFF740FF70BDE069AD -:10CC5000FDF70EFA6169E0310870E069FDF701FA4D -:10CC60006169E0314880E069FDF7E0F96169E03130 -:10CC70008880E069FDF7E3F96169E031C880E06927 -:10CC8000FDF7E6F96169E03108810720A87370BDFE -:10CC9000F8B5B94CA079C0076FD0207A00286CD1C4 -:10CCA000B44D0120A97BFFF7BAFC002853D1E069FD -:10CCB0000027C178022201260B0008F07BFA0D162E -:10CCC0001308354A4A384C474A1929444A00FDF7A7 -:10CCD00016FA6169DA225054AE735E204752603111 -:10CCE0008E7038E000F076FD35E0FFF78CFF32E023 -:10CCF000A97B0020FFF793FC002802D1207A304363 -:10CD0000207260695E210F52603086700A2018E040 -:10CD1000A87B0B2802D0207A104320722F74606900 -:10CD2000603046720C200CE0FFF725FF13E0A87B73 -:10CD3000112802D0207A1043207260696030877019 -:10CD40001620A87307E0FFF7D1FE04E000F00FFD06 -:10CD500001E0FFF7BBFEFDF76EFD002804D14F2078 -:10CD60008649000108F035F9606900238030016BC5 -:10CD7000426B491C5A4142630163F8BDF8B57D4FCF -:10CD8000012814D1787C002802D1387C002801D0F9 -:10CD9000FCF74DFEFCF7E0FBFCF7D3FB0020FCF7B3 -:10CDA00094FAFCF71EFBFCF760FBFCF7A5FBF87B95 -:10CDB00001260025704C00280FD16079C10705D0ED -:10CDC0000220F87360694030057402E0800717D5CF -:10CDD000FE7300210120FFF796F9F87B012802D0AD -:10CDE000022808D00CE06079C00709D00220F8734F -:10CDF0006069403005746079000701D50320F8733D -:10CE000000F018FDFFF703FD2079002801D03D81D7 -:10CE100002E03889401C38816079C007606904D01D -:10CE200072210D544030858203E04030818A491CD4 -:10CE30008182E079002806D061696031887C02280F -:10CE400006D8401C887460696030807C022804D950 -:10CE50003D817D81606960308574B97B0020FFF77A -:10CE6000DEFB002802D1B87B06284BD16069014661 -:10CE7000C0310A7F062A45D0497F062942D03D4964 -:10CE8000C97B03293ED16030807C00283AD1FDF770 -:10CE90002FFC002836D0FDF7A5FC002832D06169B0 -:10CEA000C88801282ED90A4640325674D08A978AFB -:10CEB000831E9F4201DB012002E0C01B401E80B2A6 -:10CEC0002C4B1F89A3899F4201D3012302E0DB1B66 -:10CED0005B1C9BB2984200D91846012800D15574BA -:10CEE0002A22525C002A11D0224A898D52898A4214 -:10CEF00001D3012102E0891A491C89B2884205D96F -:10CF0000084603E06169012040314D7461694A8837 -:10CF100010180881FFF74FFB6069122215490C3089 -:10CF200007F0BAFEFFF7D1FAFEF7E3FF00280AD0B8 -:10CF3000104810388179002905D161690246898934 -:10CF4000203A118586710C481C30FDF7BCFC002886 -:10CF50000FD0E06900788007800F012809D00228EF -:10CF600007D0FDF7D0FC002803D10449044808F09D -:10CF700030F807E0C819002090000020F4C6000037 -:10CF80007F030000606940308574F8BD70B5FE4CC9 -:10CF9000607900283CD0FD4D022810D1FDF789FBB7 -:10CFA000002803D1FA49FB4808F013F86A69002306 -:10CFB00080329068D168401C5941D1609060002651 -:10CFC00066712079012804D12671A87910210843BF -:10CFD000A871E078012816D1E670A87908210843E5 -:10CFE000A871FDF7F5FB002804D1EA48E84918309C -:10CFF00007F0EFFF6969002380318A68C868521C16 -:10D0000058418A60C860A079012802D00120A0712F -:10D0100070BDA67170BDF8B5DC4CDB4DE269002730 -:10D020001078042183079B0FE8790126012B11D08A -:10D03000022B0FD0032B01D0207A30E06178002939 -:10D0400005D1AE70A1793143A17123E0EF71F8BD34 -:10D05000EE71F8BD5278D3061CD060780028F8D164 -:10D06000D006C00E1B2818D8607908436071FDF700 -:10D07000E2FB002804D1C748C5494B3007F0A9FF9F -:10D08000606900238030026B416B521C594102637E -:10D090004163E8790128DBD1D8E7207A10210843E1 -:10D0A0002072F8BDF8B5B84D0446303D287D002704 -:10D0B00000280AD0002978D1677010202070687D80 -:10D0C000A070A87DE0702F756FE02878002814D03C -:10D0D00000296AD1072067702E462070083607E0C5 -:10D0E000686807802F700A223146A01C07F0D4FD23 -:10D0F00028780028F4D1A77057E0287EA24E143E6D -:10D10000002837D0002950D1297EA0480B0008F014 -:10D1100051F80D2C2C2C2C2C2C2C2C112C2C2008C8 -:10D120002C0067700C212170A97EA1704069808954 -:10D13000A08018E008216770217040690A46808944 -:10D14000914960801439201D07F0A6FD3089A08127 -:10D1500009E067700B212170A97EA1704069808968 -:10D16000A080A87FA0712F761FE089498A4807F028 -:10D1700030FF1AE0844810388279002A08D000294C -:10D1800013D1677011212170B189618087710CE022 -:10D19000827A002A0BD0002907D1677012212170F2 -:10D1A000318A6180718AA18087720120F8BD0020D8 -:10D1B000F8BD76480078012801D00C2070477249EC -:10D1C0000020303908700875087620318871704762 -:10D1D00070B56E4C064620780D46002804D093208A -:10D1E0006B49000107F0F5FE01202661E07225621F -:10D1F0002070FFF7DEFF002804D0674864494930FB -:10D2000007F0E7FE70BDF8B5604C2178012902D126 -:10D210002178012901D00C20F8BD01460546606146 -:10D2200012220C31584807F037FD01274035AF7402 -:10D23000554D2888FDF723FA002827D02888FDF7C8 -:10D24000D9FA002822D02888FDF78EFA00281DD0B0 -:10D250002888FDF7A8FA002818D0FCF742F9606981 -:10D260000026C088002825D048481830FDF787FAE6 -:10D2700000281FD06069C030007E00281AD0A97B2A -:10D280000120FFF7CCF9002802D013E01220F8BDEE -:10D29000A97B0420FFF7C3F900280BD16069014680 -:10D2A0004030868360314E740220FFF7D5F9606903 -:10D2B00040304674344830380078002806D1606920 -:10D2C000C18D008C814201D9A18102E06069008C8E -:10D2D000A08160694189491E8AB2298989182981FA -:10D2E000297B002902D06E812E7302E0698989189A -:10D2F0006981014640318B8A9B188B82C388012B40 -:10D3000001D85B1CC380002A01D060308674A87BE2 -:10D31000032816D0487C002815D02889A189884286 -:10D3200011D2FDF7E5F900280DD060692A21095CCA -:10D3300000290BD06989808D814207D3A670E770E0 -:10D340000CE0A7700AE0A670E67007E0688900218B -:10D35000401C6881A7700520FEF7D5FE6069512149 -:10D360000E54A97B052901D0062920D1DE2142884F -:10D37000095A511A09B2002919DB01460522E03188 -:10D380002430F3F721FF09E0C819002090000020A5 -:10D39000F4C6000039070000F10800000122022154 -:10D3A0006069FCF77BFF6069C0304677AE736069E7 -:10D3B0004189FDF728F8A07800282AD1606920303B -:10D3C000807A002800D06E810120FBF788FE60691A -:10D3D0003830FCF73EF860693430FBF751FF216AC2 -:10D3E00000200856FBF718FF0120FCF777F8FBF741 -:10D3F000D1FEFCF76FF80120FBF7B1FF6069406ECA -:10D40000FCF782F8FFF71FF860694030C07BFBF73C -:10D4100040FF6671E671A6712672A6726672267169 -:10D4200002202070FCF768F80020F8BD10B5F74C1A -:10D430002078022801D00C2010BDA078002803D04D -:10D440000020FFF79BFC17E0FCF74BF800F01DF9FC -:10D4500060692030007C012809D0FCF79FF8FBF7B9 -:10D460009EFEF3F7AEFFE07A012803D004E0FCF75C -:10D470009DF8F4E7F5F7CCFD002010BDE349C87234 -:10D48000704710B5E14C2078032803D0E049E1480B -:10D4900007F09FFDE04801218278002A06D0002293 -:10D4A00082700171A27904231A43A271A2691378D0 -:10D4B000DB439B0707D1C378002B04D1C170A0794F -:10D4C00002210843A0711078C00606D4E0690078F4 -:10D4D000C00602D4E07900280CD06078002809D179 -:10D4E000A079002806D1FEF7F2FC002802D0207AAD -:10D4F000002803D00120FFF741FC03E0FEF7A3FF63 -:10D5000000F0C3F82078012806D0F3F75AFFE07A3C -:10D51000012801D1FCF7DAF810BD38B5BB4C6069C1 -:10D520002030007C012820D1A07A00281DD1684637 -:10D53000FCF744F8002818D061693120405C0128CC -:10D5400010D1B54A0D236D460020D356285683428C -:10D5500008D050738989303A9185114620318873FB -:10D5600001208872A07A401CA07238BD70B5A74C0B -:10D5700006462078042804D0A648A549553007F06F -:10D5800028FD607910210843A34D6071002E47D01B -:10D59000FCF765FA61780126084300280ED1687C03 -:10D5A00000280BD0E0694178C90607D00078E979F6 -:10D5B0000007C00F884201D1667247E0E07800287A -:10D5C00009D0E0694178C90605D10078C00602D4C7 -:10D5D000FFF7A3FF3AE0FFF7A0FFE069A979007821 -:10D5E0004007C00F884205D0FFF7D0FC60790821C2 -:10D5F00008436071E069E97900780007C00F88424C -:10D6000001D1FFF708FD6079304360710020E071BF -:10D61000A079000702D5A87B022817D0207A13E052 -:10D62000022108436071E079401CC0B2E07101281A -:10D630000CD8687C00280DD0774854384078C10653 -:10D64000C90E052906D2C006002803D00120FFF725 -:10D6500095FB01E0FEF750FE2078012806D0F3F795 -:10D66000B0FEE07A012801D1FCF730F870BD10B5AA -:10D6700066480078042804D066486549B73007F04A -:10D68000A8FC0120FFF77AFB10BD10B50720FBF7BF -:10D690001CFE5E490420087010BD5C4933224969B4 -:10D6A00050545D4A032090738876704710B5574CEC -:10D6B0006069C030007F00281CD0062806D056487C -:10D6C000817B0020FEF7ABFF002813D06069014684 -:10D6D000C0310A7F130007F06DFD070D0D0D0D0D14 -:10D6E0000D050D006030807AC20704D0C04380076A -:10D6F00000D1087710BD0C20FEF7AEFF6069012253 -:10D700006030817A1143817210BD10B5002A0AD0B1 -:10D71000002306E0D41A6418203CE47FC4545B1C48 -:10D72000DBB29342F6D310BD10B503F0B0FF0C2866 -:10D730001CD3364C08216069D03003F0A9FF0028C3 -:10D7400006D060690421953003F0A2FF002803D1C0 -:10D750002F49324807F03DFC6169042208469531A3 -:10D76000BD3007F099FA0420FEF776FF10BD7CB5B6 -:10D77000294E0020B17BFEF752FF0125234C0028E3 -:10D7800002D1207A284320726946E069FCF73EFD09 -:10D79000684600780021C207D20F684602706069AF -:10D7A000002A02D06030057401E0603001746069C5 -:10D7B0005E221152603085700820B0737CBD401A23 -:10D7C000174900B2884201DC002801DC01207047C3 -:10D7D0000020704770B5104D0020A97BFEF71FFF99 -:10D7E0000A4C002803D1207A012108432072E06905 -:10D7F000FCF77EFC6169DE2250524988FFF7DFFFAB -:10D8000000280FD02820FFF748FF70BD90000020AF -:10D81000F4C60000330A0000C819002062060000A8 -:10D82000FE7F00006169E069E031FCF755FC0520EE -:10D83000A873EAE770B500F047F8384C384D6079C6 -:10D84000400709D5A97B0520FEF7E9FE002803D093 -:10D85000207A082108432072FFF71AFA00F012F824 -:10D86000FFF7B6F8A079C00609D5A87B030007F03A -:10D87000A1FC06060606060604060620A873FFF7A6 -:10D880003EF8C2E710B525488179490714D5017AD9 -:10D89000002911D12249897B0B0007F08BFC080D70 -:10D8A000050D0D0D0E0D100D4069002262210A5468 -:10D8B000C030807EFFF7F1FE10BD012100E00221A3 -:10D8C0004069C030417710BD10B51448817909070F -:10D8D0001DD5017A00291AD1114A947B230007F043 -:10D8E00069FC1416160B16161616161616161616AC -:10D8F0001616161616161716406960308170407C91 -:10D90000002801D0062000E01620FFF7C6FE10BD5B -:10D910004069603001728170917310BD90000020E9 -:10D92000C819002010B5031D03600020521E04E03A -:10D930005C181C60401C2346C0B29042F8DB0020FB -:10D94000186010BD01460A680020002A02D0104667 -:10D9500012680A60704702680A6001607047000040 -:10D9600000B51A2822D00ADC030007F023FC0D11B1 -:10D970001F131F1F191915171F1F1F1B1F002A28F0 -:10D9800014DD3A38030007F015FC030F11091100EC -:10D99000002000BD1E4800BD042000BD0D2000BDBC -:10D9A0000F2000BD082000BD112000BD032000BDD8 -:10D9B00010B50C46F4F784FF00281AD02046F4F77F -:10D9C00084F9002812D020780E280BD00F2809D017 -:10D9D000022807D0032805D00EA1772007F0F9FA16 -:10D9E000002010BDA078FFF7BBFF10BD09A17D206E -:10D9F000F4E708A18320F1E710B5F4F7EDF810BDC6 -:10DA000010B5F4F762F910BD10B5F4F744F910BD84 -:10DA1000023000007372635C686F73745F686369DF -:10DA20002E630000F0B597B00021032004F082F9C6 -:10DA30000025FE4E022775807574347C12E0F06874 -:10DA4000E1004018818800290CD0858069460F705C -:10DA50004D7001680291808869468880002168467F -:10DA6000F8F702FD2046641EE4B20028E7D117B0A3 -:10DA7000F0BDEE4BD86019741A80D3E7EB49EC4B3C -:10DA80004A8800201A4200D00120497C002901D098 -:10DA9000082108437047F7B504460E460078012177 -:10DAA000E34A8140521C114098B0E04A00915188ED -:10DAB000E04B994205D0009B002B05D0DC4B19426E -:10DAC00002D001201BB0F0BD009BD84A1943518001 -:10DAD0001A9D002D11D00020287022781A98002756 -:10DAE000401C130007F066FB10EF0D152137555D44 -:10DAF0006A39AFAB85B3EEEDECEF0B28EDD0042027 -:10DB0000E0E702212970A1880170090A4170032011 -:10DB100093E004212970A1880170090A4170E1880D -:10DB20008170090AC170052087E006212970A1884B -:10DB30000170090A4170E1888170090AC170218968 -:10DB40000171090A4171A289E81D216907F0A4F851 -:10DB5000A089C01D71E0082129702178082901D110 -:10DB600010212970A1880170090A4170E188817033 -:10DB7000090AC1700520308020466A1D01A90830BD -:10DB800003F0CFFB00287DD1694630880979401821 -:10DB900053E00A212970A1880170090A417003200D -:10DBA0000AE00C212970A1880170090A4170E188FE -:10DBB0008170090AC170052030809DE0A0888446EC -:10DBC0004000401C81B2308888425BD3052959D37C -:10DBD0000E202870002008E0A36842009B5A5219CA -:10DBE00053701B0A401C937080B26045F4D331809F -:10DBF000B6E08E49487C002873D0401E4874C8683F -:10DC000021790822C9004518A988286840180838D1 -:10DC1000A16807F041F802216846017100214171B5 -:10DC200028680390A98868460181002101A8F8F7B7 -:10DC30001BFC0020A880002E00D0308090E02978C6 -:10DC400080221143297029784022114329702978B4 -:10DC50008909890112312970A1880170090A41706E -:10DC6000E288E81CA16807F017F8E088C01C308043 -:10DC70002878410640D5C00972D00121684601715B -:10DC8000002100E02BE041713188ED1C091D01816C -:10DC90001A980390E08840190490001D634D059088 -:10DCA000297C68460176002101A8F8F7DDFB0746CC -:10DCB00030880C303080022F06D0002F50D060E02A -:10DCC0003CE032E01CE059E06946097EE868CA00A1 -:10DCD00080182A7C914202D28188002902D0042730 -:10DCE0004FE02EE0697C491C69741A990160318803 -:10DCF00081800020308044E04C48A188C1802FE022 -:10DD000029788909890116312970A1880170090AC9 -:10DD10004170E1888170090AC1702289681DE1683B -:10DD200006F0BAFF2089401D46E728788009800167 -:10DD3000183028702079687002207EE73B480A047A -:10DD400001D405271DE00289A3889A4201D0062745 -:10DD500017E01E222A70012249043280490C4180BA -:10DD6000009800280DD0314D0022288811468300EC -:10DD7000032003F03AFF2078287107E0002030806C -:10DD800003272A48009942888A434280384699E608 -:10DD9000F7B59AB002000C4606D0172A04D82348DB -:10DDA000244B4088984202D107201DB0F0BD237853 -:10DDB0005D0601D4DB0901D00820F6E700236D469B -:10DDC0002B706B701D462378611C9F06931E189361 -:10DDD000531E19939BB2169302AB1793134BBF0EAE -:10DDE000DE883B0007F0E6F9208511F15EF16BF16A -:10DDF000A3F1C6F1F2F1FBF1EEF1EDF1ECF1F1F18D -:10DE0000EBF1EAF1E9F1E8F185F1052A71D104229B -:10DE100069460A7005490A7969460A71E178A3786A -:10DE20000A021A436946CA80227905E0DC190020FB -:10DE3000FE710000FFFF00004A7061788906890EBC -:10DE40000C2923D009DC891E0B0007F0B3F9091354 -:10DE500052155219521B521D520012291CD004DCBB -:10DE60000E2915D01029D1D114E0162916D0182961 -:10DE7000CCD115E0800700E04007002839DA2AE11C -:10DE80000007FAE7C006F8E78006F6E74006F4E781 -:10DE90000006F2E7C005F0E7C004EEE78004ECE717 -:10DEA0004004EAE7800724D5032AAFD105206A465B -:10DEB0001070487809780002084390800BE1400711 -:10DEC000F1D5062A15D31898617880B2012902D0BD -:10DED00002299BD101E0022700E0102706226946B3 -:10DEE0000A7000228A8001AEA11C0236BA1C179269 -:10DEF00018E0B6E04A780B7812021A433280801E8E -:10DF0000891C1890B21C1691384603F0E4F9169952 -:10DF100018986B469A88C919C01BB61D521C9A8066 -:10DF2000179A80B28242E5D900289CD1D3E000073D -:10DF3000B9D51998694682B20720087000208880F8 -:10DF4000601C891D11E0437806781B0233430B8067 -:10DF5000C37886781B0233434B806E46121FB3880A -:10DF6000001D091D5B1C92B2B380042AEBD2002A6B -:10DF700077D1B0E0C00674D5022A72D31898082170 -:10DF800082B2684601700021C18063780371A01CD1 -:10DF900017990EE04678077836023E430E80861CBD -:10DFA0004E606F46D21AFE88C0180831761C92B2B5 -:10DFB000FE809342EED9DAE76FE076E065E051E06B -:10DFC00046E01EE014E00AE000E0A0E0800648D54C -:10DFD00009206A46107096801698D0800FE040069F -:10DFE0003FD50A22684602708680169AC28006E0F3 -:10DFF000000636D50B206A46107016989080029164 -:10E0000069E0C0052DD5022A7FD318980C2182B271 -:10E01000684601700021C18063780371A01C1799C4 -:10E0200013E04678077836023E430E80C67887783C -:10E0300036023E434E80061D4E606F46D21AFE8861 -:10E04000C0180831761C92B2FE809342E9D98EE75F -:10E05000C0045AD5012A58D10D2168460170868026 -:10E0600039E052E0800450D5052A4ED30E2368468D -:10E0700003708680C8788B78010219436846C18096 -:10E08000521F0281601D039025E040043DD5012A06 -:10E090003BD10F20694608701DE0030435D44B784E -:10E0A0000E781B023343244E3381032A2DD31B2FBA -:10E0B00027D011236E46337001261F4BF6033043E1 -:10E0C000588048780B780102194368468180D21E37 -:10E0D000C280E01C029020788006800E1B280AD0A7 -:10E0E0001D2808D00021032003F024FE1248418897 -:10E0F000C90BC903418068461C99F8F7B5F9284651 -:10E1000053E610206B461870DBE70725F7E7082574 -:10E11000F5E700B50022D243074997B04A800328AB -:10E1200007D1032268460270097901710021F8F7CE -:10E130009BF917B000BD0000DC190020FFB589B0C5 -:10E140000020019009981027FE4C1E46154608280D -:10E1500006D0E06901F05EF8002809D03770BEE013 -:10E16000288809213843108013980227017016E08F -:10E17000E169012088710521E269C9029180E169A4 -:10E180008872E169F0480881E16900208873288875 -:10E190002021084328801121139804270170139827 -:10E1A0000225801C0290307806900A203070E548E5 -:10E1B0001830049001F022FA0020059020462C30FF -:10E1C00003906DE00998102808D1022D06D001991E -:10E1D0000298A28D401A8270110AC170E08D0A99CE -:10E1E000884202D901F0CDF806E0884204D10698B1 -:10E1F000002801D030701CE00298E18D0170090AFE -:10E20000417012980088401BC01B82B2FF20C01BC7 -:10E21000904200D2024607A8009002980021C3193C -:10E22000E08D01F056FA3070002805D0C0B2832886 -:10E2300058D0E08D20833EE00598002804D0206C63 -:10E2400000790A282CD336E06846808BC119C9B200 -:10E250000191022D0DD01399019A4978914202D172 -:10E26000228F824208D00191206C0178032908D0C6 -:10E2700023E0084613994870206C0178042906D0E1 -:10E2800007E000790A2818D20120059008E0E18D06 -:10E29000818002990198081802900198281885B287 -:10E2A0000399049801F0ADF9002804D11298008870 -:10E2B000401BB84286DA022D0DD00998102806D1ED -:10E2C00002990198A28D081A8270110AC1701298E1 -:10E2D000058000203070206C0078032802D00020D8 -:10E2E0000DB0F0BD0220FBE7F8B5964A0026126D8E -:10E2F000002A2ED0401F934D84B24035E88A234631 -:10E300000833AF8AC318BB4222D88B784F781B02E0 -:10E3100010183B4303701B0A43700B79CF781A0225 -:10E320003A438270120AC2700471220A4271224674 -:10E33000491D801D06F0B0FCE88AA41D001980B2BA -:10E340008049E882096D002208180270427000E0DE -:10E3500009263046F8BD30B57A4B028840339B8A97 -:10E36000934213D9774B1C6DA3185C781D78240257 -:10E370002C430BD05C791D7924022C436404640C7B -:10E38000A41D1219028000200B6030BD822030BD18 -:10E39000F0B585B0074600266846068155E001982D -:10E3A000417802780D021543417902790802104341 -:10E3B00000044AD43D8003A80023012200905202A9 -:10E3C0001946284601F085F9040044D168460189C0 -:10E3D0000182019841790279090211434378027858 -:10E3E0001C021443AC421CD10A041AD44A04012171 -:10E3F000520C89030A430096C178807809020143D0 -:10E400000023204600F0C1FF040010D10199487993 -:10E410000A79000210430122D20310430871000A56 -:10E42000487101A904A8FFF796FF0400D1D0019913 -:10E4300000964878097800020843694600238A89D3 -:10E44000194600F0A2FF822C05D101A902A8FFF70E -:10E4500082FF0400A3D06846068109E0019948794B -:10E460000A79000210434004400C0871000A487108 -:10E4700001A902A8FFF76FFF0028EFD0822C02D07D -:10E48000204605B0F0BD0020FBE7F7B584B0144688 -:10E490000646002700F071FF2A480025006D00287D -:10E4A0002FD0059801282CD12046FFF771FF0700D7 -:10E4B00027D1002E29D06846058118E001994878B7 -:10E4C0000978000208432080019B0095587919794A -:10E4D0000202D8780A4301029F78587839431F789E -:10E4E00000029B1D384300F050FF002805D101A910 -:10E4F00002A8FFF730FF0028E0D0822800D10020DA -:10E500000746002E01D00F48056500F03AFF384657 -:10E5100007B0F0BDF0B597B00021042003F00AFC6D -:10E52000084F00243D467C8040356C73AC73287BDB -:10E53000B96CC00008380E18B08800280DD0012032 -:10E54000694603E0F01900200128000008703068D7 -:10E55000019000216846F9F78EFAB4803C65AC82E0 -:10E56000EC8217B0F0BDFE4B986418464030017342 -:10E570001A803838D861CDE7F949002049880A0760 -:10E5800000D501200A06120F01D002221043CA054D -:10E5900001D5042210438A0501D5102210434905F4 -:10E5A00001D520210843EE494031497B002901D0A3 -:10E5B000082108437047FFB5A7B004002898164605 -:10E5C0001B9022D00178E6484D06428822920246EE -:10E5D00040320092002D14DB8A06920E1E2A0ED0C5 -:10E5E000229A5205520E10D13288172A0DD3009A62 -:10E5F000927B002A09D1DB4D229AAA4205D0CA0992 -:10E6000006D08A06920E122A02D003202BB0F0BD4B -:10E61000D348826C0098007B2590C0000838101801 -:10E620001F9048060CD40098407B002808D0009921 -:10E6300088731F99289808601F9884800220E5E756 -:10E64000002718A90F7069460F72C54902AA0A640B -:10E65000309A4A6410A90F850F861B981D460078D2 -:10E6600020908106BE4B601F24901A462C322192C6 -:10E670002898DA691833890E1E93401C0B0006F0A7 -:10E6800099FD1FFDFD11FD1AFD90FDFCFDFBFDFA3E -:10E69000FDF9FDFCFDF8FDFDFDF7FDF6FDFDFDFDC1 -:10E6A000FDF5FD00032C7BD10320287017226A7032 -:10E6B0000022AA70E0E2052CF5D141780278090227 -:10E6C0001143A74B10AA19831185C27880781202D2 -:10E6D00002435A8300297DD091427BD800211846FD -:10E6E00081720181491E01841E9800F087FF052078 -:10E6F0002870A81C1D900220009021991E9800F0FF -:10E7000080FF002803D047E018A90870F0E2944881 -:10E710002030807C012803D002206870102002E0A5 -:10E7200001206870022022908D4830302390002212 -:10E7300020A9239802F0F5FD00282AD120A800780E -:10E740002299814225D132880099801C511A814238 -:10E750001FDB83481D99C08D0870000A48701D9802 -:10E7600020A9801C1D9000981D9A801C0090239861 -:10E7700002F0D7FD20A909781D9840181D90009837 -:10E78000401880B2009021991E9800F03AFF0028AE -:10E79000CDD0009802288DD10A2018A908706CE20B -:10E7A0006DE0072C6BD341780378090219436C4B59 -:10E7B0008446198310AB1985C37880781B021843EF -:10E7C000674B0029588305D0814203D801211846A0 -:10E7D000817200E0A4E061464B7909791B020B438A -:10E7E000038100218173104600F014FD00280FD131 -:10E7F0005B480121C26991710522C369D2029A80E6 -:10E80000C2699172C26958491181C069002181733E -:10E810005349E01F08841B98C01D48621E9800F0F1 -:10E82000EDFE07202870681C009001201D904C48C8 -:10E830000021C18530E01D98012815D04848C169E4 -:10E84000897901292FD000981038C17B807B09027B -:10E85000014300980170090A41700098801C0090E3 -:10E860001D98801C80B21D903D4809E013E2BEE176 -:10E870007AE1D8E00DE2A0E080E03BE01EE2B6E005 -:10E88000C18D00980170090A41700098801C0090A9 -:10E890001D98801C80B21D9021991E9800F0B1FE39 -:10E8A000002802D006E0818DD3E731881D98081A30 -:10E8B0000428C0DA1D98012800D16DE72848C169F5 -:10E8C0008979012903D0828D26498A4205D1818D1B -:10E8D00000980170090A417009E000981038C17B66 -:10E8E000827B0802009910430870000A48701D9846 -:10E8F000801CC1E1072C01D0152C78D14178037818 -:10E9000009021943164B198310AB1985C378807817 -:10E910001B02034312480029438301D0994201D9C5 -:10E920000120F1E60E4801218172002101818173ED -:10E93000052C07D024981B99C0B2491D02F0CBFCCE -:10E940000028BAD100200649C04308841B980096CD -:10E950000195007818AB8006800E1CAA002105E006 -:10E96000F0190020FFFF000001280000FFF7E6FB80 -:10E970000746FE4810A9008B08857EE1032CBCD118 -:10E98000402210A90A86417802780802F74910430C -:10E99000088310A9088520A9009131886B1C491EA5 -:10E9A0008AB2002100F095FE18A90870002830D125 -:10E9B0000B20287020A8008833E0052C9DD18021F1 -:10E9C00010AB1986014640780B780202E7481A43DB -:10E9D0000283CB7889781B021943E44B10461984D3 -:10E9E00010AB1A85E24A914202D307208CE697E0E9 -:10E9F0003F23DE4A9B021943118421AA00923288E8 -:10EA00006B1C521E92B200F064FE18A90870002818 -:10EA100003D08328B1D102272FE10D20287020A830 -:10EA20008088401C28E120990C22C9095143C91C47 -:10EA30001E91A14204D92098400671D500201BE107 -:10EA4000417800780902014310A801851B980078DD -:10EA500042062898C01C1D90002A62DA05206A46EA -:10EA600010721B980078C00944D0082268460272D0 -:10EA70008181A01A87B268468782289806901E98DE -:10EA8000201A81B26846C1811D980490401806F092 -:10EA900064F9079006982599C0190890491E08A89E -:10EAA000017102A83099F8F7E6FF07460021684691 -:10EAB0000172002F1BD0022F18D1009808A9007BEB -:10EAC0000979401E884210DDA848289A836CC90045 -:10EAD0005A50816C08A80079C000001D0C520098A3 -:10EAE0000099407B401C4873C7E00527EAE00620F8 -:10EAF00069460872002000901E980021201A20907C -:10EB000082B21B9B10A8DB1C008D00F03EFC01466E -:10EB100018A80170002268460272832903D003E01E -:10EB200093E00720E4E702271B98007840060ED503 -:10EB30008E484188C90506D510AA018B128D9142D5 -:10EB400001D100214162002018A9087094E0FF2142 -:10EB5000013110A80186018D844801832099018428 -:10EB60001D994162132085E0052C6ED3417803780E -:10EB70000A021A4310A90A859446092269460A72B4 -:10EB80000021009101222499D20311438AB2C17855 -:10EB9000807809021B9B01435B1D604600F0F5FB7A -:10EBA00018A90870002269460A720122520210A9AF -:10EBB0000A86832802D0002805D099E06B48098D89 -:10EBC000018302277EE06948006D002807D02046B7 -:10EBD0001B99FFF789FB18A9087000284DD12B4617 -:10EBE000324620461B9900F024FB074645E01B985F -:10EBF000022C4078009064D1002801D0012860D117 -:10EC00000A2168460172009901731AAA002000992E -:10EC1000FFF73BFC0146684641730021817302A85F -:10EC20003099F8F728FF0746002168460172012154 -:10EC3000890210A80186022F08D04C48006C807908 -:10EC4000002807D018A9087020E04BE04749009839 -:10EC5000088337E0002F03D0812018A9087031E025 -:10EC60001AAA01200099FFF710FC18A908700028C3 -:10EC700003D119202870012030806846007A0028CE -:10EC800004D002A83099F8F7F6FE0746002F2BD0E3 -:10EC900018E0062038E522993448090711D5012CDF -:10ECA0000FD10B2269460A72C08888810021042096 -:10ECB00003F040F8082010A90886BFE62098400617 -:10ECC00010D50327294810AA4188128E114341808C -:10ECD0005005400E04D01F99289808601F98848022 -:10ECE000384693E404200FE518A8007800280ED0D9 -:10ECF000012028701B980078687010A8008DA870FB -:10ED0000000AE87018A8007828710520308017489C -:10ED100010AA4188128E91434180E1E7FFB5064673 -:10ED20009FB000201B903178012088401149124A81 -:10ED3000084010A908860D494988914203D000284F -:10ED400004D0080702D5012023B0F0BD219D002783 -:10ED50002F7020983C46018810A8018418A80771DC -:10ED600000F00BFB6846077202A907E0F0190020CB -:10ED70000102000009F80000FFFF0000FA480164EA -:10ED800001464031826C1A91097BC9000839571835 -:10ED900022994164307801282AD0022809D003281A -:10EDA00079D12878800980011D302870EE48B1881B -:10EDB000C1803078022804D12878800980011B3076 -:10EDC000287001A8009010A8008CEB1CC01E82B215 -:10EDD000B088002100F07DFC0028E1D1B188697085 -:10EDE000090AA9706946888810A9C01C08842DE109 -:10EDF000717918A801713079012802D00228CFD189 -:10EE0000E6E0D9487F2340881B010246184010AB3A -:10EE10001886802840D006DC102810D020280ED07C -:10EE200040280AD120E0FF38013859D0FF38013896 -:10EE30006AD0FF38FF3802387ED0052491E0D00632 -:10EE400001D5082000E010201B90042069460872BC -:10EE50000020888118A800900195318919AB1CAA5F -:10EE60001B98FFF76BF977E0BF4B3289188B824212 -:10EE70004FD10A221B92002973D101A9009110A938 -:10EE8000098C6B1C491E8AB2002100F022FC18A9D3 -:10EE900008710B2017E0F6E0B34B3289188B8242E1 -:10EEA00037D10C221B9200295BD101A9009110A936 -:10EEB000098C491E8AB21946098C6B1C00F009FCAA -:10EEC00018A908710D2028706946888810A9401C6F -:10EED0000884042069460872A348008B888140E0BA -:10EEE000A14A3389108B834213D112231B9300292B -:10EEF00037D1536A002B05D00091128C00F045FAEF -:10EF000018A9087113205EE097483289038B9A4252 -:10EF100001D00424E7E016221B92026D002A09D1D9 -:10EF2000F268002A06D002651A98328A82821A9AFA -:10EF30000020D082002900E02FE012D1B888396883 -:10EF4000FFF7D2F918A9087100280AD1B8882B4612 -:10EF500018AA396800F06DF90446022818D0042C6C -:10EF600016D0B88800280FD06846007A002804D050 -:10EF700002A82299F8F77FFD04460120694608722D -:10EF8000386803900020B880002C5FD0052C7BD01F -:10EF90006846007A032873D0A5E018201B9000294A -:10EFA00005D071483189018300210165D9E76E4898 -:10EFB0000246017E18320120FFF767FA18A908718E -:10EFC0000028CED119202870012010A90884C8E794 -:10EFD0001A98407B002856D0307AC0001358001D84 -:10EFE0000193105A1D9000291AD100F0CAF9062089 -:10EFF00069460872002000901D980F3882B201986F -:10F000008178437808021843019B0021DB1C00F043 -:10F01000BCF918A90871002269460A72832830D009 -:10F02000002118A8017110A801840121684601720D -:10F03000019803901A981A99407B401E48731A98B9 -:10F04000807B002802D01A99401E887310A8008E79 -:10F050007F21090102468A431DD0434800220088CF -:10F0600011468300042002F0C0FD3F483178017151 -:10F0700010A94088098E08433B4948800FE003E00F -:10F080002BE002242FE00524374810AA4188128E75 -:10F090009143418027E034494A8882434A80684648 -:10F0A000007A002805D03048416C02A8F8F7E3FC4C -:10F0B000044618A80079002815D01B986870012014 -:10F0C00028702948008BA870000AE87018A80079F9 -:10F0D0002871052110A8018405E02348416C02A88D -:10F0E000F8F7C9FC044600F04CF91F484088400579 -:10F0F000400E20D11A98807B00281CD1B8880028A7 -:10F1000019D0209910AA0988118422990091396890 -:10F1100018AA219BFFF74FFA044602280BD00120C2 -:10F12000694608723868039002A82299F8F7A3FC90 -:10F1300004460020B88010A8018C20980180204649 -:10F1400002E600B50022D243074997B04A8004285E -:10F1500007D1022268460270097901710021F8F78F -:10F160008AFC17B000BD0000F019002010B5394C22 -:10F1700003780022216C012B02D0022B44D126E01F -:10F180000B78002B01D0042B03D10A71226C0321D0 -:10F190001170216C83880A79D200921D8B52216CE8 -:10F1A0000A79D20008328918C2880A80216C038942 -:10F1B0000A79D2000A328B524289206C0179C90047 -:10F1C0000C314252216C0879401C087120E00A740D -:10F1D000226C81889180216CC288CA80226C01894E -:10F1E0001181226C41895181216CC068C860616CB9 -:10F1F000206CF8F740FC0146022807D0206C007C08 -:10F20000002802D1002903D0812010BD832010BD29 -:10F21000002010BD8178012909D100880521C9028B -:10F22000884202D0491C884201D100207047052045 -:10F23000704710B51488844201D2052010BD1724F0 -:10F240001C701080421E491C581C05F025FD002032 -:10F2500010BD0000F019002010B58B78002B11D0E4 -:10F2600082789A4207D10B88002B0BD003E0091D4E -:10F270008B78002B08D08B789A42F8D103880C88C1 -:10F28000A342F4D1002010BD812010BD10B500298B -:10F2900002D001290DD102E00088000501E00088BC -:10F2A0008004800F07D001281CD0022809D0032831 -:10F2B00010D0812010BD002901D0032010BD0220F4 -:10F2C00010BDF5F7EEFD03280CD004280AD0002865 -:10F2D00006D009E0F5F7E5FD042803D0022803D0A5 -:10F2E000052010BD002010BD0F2010BDF3B5C81CB7 -:10F2F00080080E46800081B0B04201D08620FEBD5D -:10F30000FE4C354626600198A08000202081E080D8 -:10F3100014E0B807A978800D0843F94905F036FDD7 -:10F32000E088401CE080B80607D42089401880B2ED -:10F3300020810199081A8019A8600C352F88780758 -:10F34000E7D40020A072FEBDEC480C22C1880089E1 -:10F350005143081880B2704770B51346E74A451804 -:10F360009488AC4201D2842070BD126810180A46FD -:10F37000194605F091FC002070BDE049012088721B -:10F380007047DE49002088727047FFB589B0970446 -:10F390000E460546BF0C029200F034FA040021D05C -:10F3A000002069460873D548807A012812D00121CF -:10F3B0002046FFF76BFF002815D12078400609D5BD -:10F3C0000221684601730582218841828682C782B4 -:10F3D0000C9806900298000407D500273E460125A8 -:10F3E00001970CE001200DB0F0BD2078A1788007D6 -:10F3F000800D0843C249019005F0C8FC0D460298F3 -:10F4000040040AD50198A84207D12088E1788005F8 -:10F41000800F00020843B04201D3AE4201D9072059 -:10F42000E1E7B81980B20290A84201D90D20DAE7CD -:10F430006846007B002804D003A8F8F718FB0028D2 -:10F44000D1D10198A8420BD1208803210902884319 -:10F4500002998905890F0902084320800298E0700B -:10F460001298002800D007800C9800280CD0207833 -:10F47000000609D4A0683A4680190C9905F00CFCE6 -:10F4800020881021884320800020ACE7FFB59B4DE9 -:10F4900081B00E46E8882F680C21009048433C1844 -:10F4A0009749039805F072FC0A462889E11B8446B7 -:10F4B0000C314018318880B28B0601D5002300E062 -:10F4C00013461818AB8880B2834202D8842005B056 -:10F4D000F0BD0098894D401C80B2E88021800D99D4 -:10F4E000002900D00C600399A170E2702188039D6F -:10F4F0008908AD058900AD0F294303252D02A943D5 -:10F500009505AD0F2D0229430425294321800C992F -:10F51000002900D0088001998978A1710199098892 -:10F52000A1803178890601D50B9905E073496244C1 -:10F5300092B20A81991AC919A16000212173327807 -:10F54000920601D50020C2E700910B9B0A9A04990C -:10F55000FFF71BFFBBE7FEB5044600F053F90700B9 -:10F5600008D0664D641EE8880190A6B2286834462B -:10F57000009015E00120FEBD0C2000996043095A5F -:10F580008A060BD489078A0D0099801C085C5C49A7 -:10F59000104305F0FBFB2889401A2881641CA4B2A3 -:10F5A0000198A042E8D8EE8000203870FEBD002807 -:10F5B00003D0401E0880002070470120704710B51E -:10F5C0004E490288CB889A4201D3822010BD0B6835 -:10F5D0000C21514359180B88CC789B059B0F1B02BB -:10F5E000234341608C7904738C884481C38189688A -:10F5F000521C016102800281002010BD01210182A4 -:10F600007047FEB505460020C043088068680F4675 -:10F6100081786846817068680188684601800021A9 -:10F620008171288A2C88A04200D304462C8234E0C1 -:10F63000288A401C2882301D6968FFF70DFE0028CB -:10F6400029D139882F48814201D1601E38806888CD -:10F65000A04227D33088F1788005800F000208434C -:10F6600002906946301DFFF7F7FD002813D1298964 -:10F67000244881421AD000213046FFF707FE0028B7 -:10F6800009D12A890298824205D1E968B06805F05B -:10F69000D6FA00280AD0641CA4B2204600F0B2F8C2 -:10F6A0000600C5D1641E2C828220FEBD7C80B0790C -:10F6B000B871B088B8803088388130788007810D83 -:10F6C000B078014379810298B881B0683861002030 -:10F6D000FEBDFFB585B014460F46059800F092F8C0 -:10F6E000050037D00548BE05807AB60D01281CD02C -:10F6F00000212846FFF7CAFD002805E0481A00202F -:10F7000001020000FFFF000022D1287840060CD53E -:10F71000012168460170059981802988C180068190 -:10F720004481F8F7A4F9002812D12888AA78810723 -:10F73000890D11438005800FEA7800021043BE4214 -:10F740000AD0374A914207D3611E814204DD0B2063 -:10F7500009B0F0BD0120FBE7864201D90720F7E799 -:10F76000801B82B2A24200D922460E98002800D007 -:10F7700002800898002804D0A8688119089805F02C -:10F780008BFA0020E4E770B514460D4600F03AF815 -:10F7900000280DD001882980002C0DD001788078B8 -:10F7A0008907890D01431E48814203D2012002E0EE -:10F7B000012070BD00202070002070BD70B516467D -:10F7C0000D4600F01FF804000DD02D882580FF2E77 -:10F7D00016D0A807A178800D0843114905F0D6FA84 -:10F7E000002E06D101E0012070BDFF31FF31033151 -:10F7F00089B2A170A80880008905890F084320807C -:10F80000002070BD0749CA88824207D3002805D06E -:10F810000C22096850430C380818704700207047C4 -:10F8200001020000481A0020F0B585B00E460546DA -:10F830000020694608707078FE49C00003900C589B -:10F84000FD4F002D0ED0022D73D0002C72D02078E9 -:10F85000801E030005F0AEFC09837F7F7F83797FE4 -:10F8600077727F00002C03D1F4A16B2005F0B1FB6F -:10F870002078801E030005F09DFC09065E5E5E197F -:10F88000365E50545E003078062803D0EBA1762017 -:10F8900005F09FFBB8687168806C032205F0FCF9E5 -:10F8A000012069460870002835D1CEE730780C2851 -:10F8B00003D0E2A1812005F08CFBE06800780028ED -:10F8C00006D0B8687168806B102205F0E5F928E071 -:10F8D000B8681021006B05F03CFAB868816A006BCB -:10F8E0000A787168F1E730780D2803D0D3A194200D -:10F8F00005F06FFB04206946087071684878097844 -:10F9000000020843B9684A6A517812780902114323 -:10F91000484069468880084608E0C8A1AF2005F045 -:10F9200058FB6846007800288FD06846F5F7BEFA85 -:10F930008BE727E01CE0C1A1B420F0E7B86861695B -:10F94000006CFEF708F8A16900E0E168B868006C97 -:10F95000FEF701F803E0B9A1E32005F03AFBB8682F -:10F960002146006CFDF7F7FFB24A03990020505082 -:10F97000022D07D0002D05D0012D03D0AFA1EF201F -:10F9800005F027FB05B0F0BD10B501780124012971 -:10F9900002D0022910D112E04268A74800218260FB -:10F9A0000170A4486C38C166016741678167D289DC -:10F9B00002214C3001F0E1F90024204610BDFF2067 -:10F9C0009EA1163005F005FBF7E7F0B505469EA1B0 -:10F9D00003C997B014911390002008A908759549A0 -:10F9E0002A781031944C0491217805910126914F89 -:10F9F000A168130005F0DEFB0CEF07309AF0EDEC88 -:10FA0000EBEAE9E9E8EF20700124FF264F360546CE -:10FA100010A80570457001F0C1F90746012803D010 -:10FA200086A1304605F0D5FA10A93846FFF7FCFE4E -:10FA30002046641EE4B20028EAD10A206946087014 -:10FA40006846029501F088FA002803D0FF207BA1C8 -:10FA5000583068E0002646E3C86A0078C0072FD017 -:10FA6000012069460870684601F076FA002804D043 -:10FA7000FF2072A16B3005F0ACFAA068006CFDF7B6 -:10FA800061FF050004D1FF206CA16E3005F0A1FAE2 -:10FA900008984078C0003D5006202870A068016892 -:10FAA00069600069A8606448C01CE860284601F0ED -:10FAB00053FA022804D0FF2060A1783005F089FABB -:10FAC000A068C06A00784007C4D501206946087064 -:10FAD000684601F041FA002804D0FF2057A1803089 -:10FAE00005F077FAA068006CFDF72CFF050004D143 -:10FAF000FF2052A1833005F06CFA08984078C000CE -:10FB00003D5006202870A068016869600069A860FF -:10FB10004948401DE860284601F01EFA022899D0A5 -:10FB2000FF2046A18D3005F054FA93E7A96800291B -:10FB300033D0694608712979012932D0022904D0CD -:10FB4000FF203EA1A73005F044FA3A4810221030B9 -:10FB5000A96805F0A1F837481030364920314860CF -:10FB60002078C1062CD5EF2108402070032069467B -:10FB70000870304810300290684601F00FF90446D2 -:10FB8000022808D0002C06D0012C04D0FF202BA185 -:10FB9000B83005F01EFA69466FE101216A4611711D -:10FBA000DBE7244A04996C3AD06748608860C860F3 -:10FBB0000621A86803F0FCFE1E4910310860CAE760 -:10FBC00020210843207045E7A1E15AE119E1E6E070 -:10FBD00086E056E000E081E2886C407980090128E7 -:10FBE00004D0FF2015A1CC3005F0F3F9A068017A0C -:10FBF000002906D1416B406801F01FFAA16801207D -:10FC00000872012069460870684601F0A5F90028CD -:10FC100004D0FF2009A1D73005F0DBF9A068006C03 -:10FC2000FDF790FE050004D1FF2004A1DA3005F0B5 -:10FC3000D0F90DE0C01A0020B40000207372635C9C -:10FC4000736D2E630000000004411A8800A4800038 -:10FC500008984078C0003D5002202870A068416B91 -:10FC60006960806CC01CA860284601F075F904002A -:10FC700004D0FF20FD49E23005F0ABF929462831D8 -:10FC8000FBE0172268460272012202708078820827 -:10FC9000287992008007800F024368468270FB201B -:10FCA000024028794007C00F8000024368468270F6 -:10FCB000EA8882804A6C02A901F090F9002804D0F9 -:10FCC000FF20EA49F73005F084F9052108A80175FD -:10FCD0006846017A0187A0680026406C0F9006E212 -:10FCE000012069460870684601F036F9002803D003 -:10FCF000DE49DF4805F06DF9A068006CFDF722FED3 -:10FD0000060004D18320D949800005F062F9A0687B -:10FD1000006CFDF717FE1290002804D1D448D34997 -:10FD2000801D05F056F9D3488068006CFDF70AFE87 -:10FD3000040004D1CE48CD49093005F04AF90898AD -:10FD40004078C0003E500A203070287A30716868D0 -:10FD5000C84DB060A868406C3061172030731298AD -:10FD6000B4617061304601F0F7F80446022808D00B -:10FD7000002C06D0012C04D01120BC49400105F014 -:10FD800028F92046316AFFF74FFD28780521014008 -:10FD9000042900D05EE6FB21084028702AE005987F -:10FDA00040084000207082071CD5FD2210402070C2 -:10FDB0000F206A46107017201071486C0290684638 -:10FDC00000F0ECFF0546022808D0002D06D0012DDA -:10FDD00004D0A748A5493A3005F0FBF86946284603 -:10FDE000FFF722FD2078052101400429D2D1FB2113 -:10FDF00008402070072008A908759E48807808767A -:10FE000028E6012069460870684601F0A5F8002838 -:10FE100004D097489549543005F0DBF8A068006C91 -:10FE2000FDF790FD060004D113209049400105F034 -:10FE3000D0F890488068006CFDF784FD040004D180 -:10FE40008B488A495A3005F0C4F808984078C000B9 -:10FE50003E5007203070874880684068706068684E -:10FE6000F460B060304601F077F8040004D08048B8 -:10FE70007E49653005F0ADF8316A2046FFF7D4FCC5 -:10FE8000E8E5012069460870684601F065F8002839 -:10FE900004D0774875497A3005F09BF80898407887 -:10FEA0001190A068006CFDF74DFD060004D15120B3 -:10FEB0006E49C00005F08DF8A068006CFDF742FDAA -:10FEC000040004D16A486949823005F082F811982B -:10FED000C0003E50C019296941600920307068682F -:10FEE0007060A868B060A889B08163483061103044 -:10FEF000B4617061304601F02FF8022804D05C48EC -:10FF00005A49903005F065F811982875A2E55A4ACB -:10FF100000208C32107002206B46187001922879F4 -:10FF2000002801D0107098E0524803230C3040683C -:10FF3000FB2703708378504A9B089B003B408370EB -:10FF40004B7A00271B07DB0F43708C3257600B7B0B -:10FF5000C370CB7A1372537A0C7D5B08E4075B00A5 -:10FF6000E40F23430C461534D460FD242340CC7E9B -:10FF7000E407A40F234353720B461C3313614771EC -:10FF800007718B7A3B4A9C070C32A40F1268012C34 -:10FF900004D19478A407A40F012C1DD09B089B00CA -:10FFA0008B7293785B0702D48B7A5B0728D54B7AE8 -:10FFB00013AF5B075B0FDC005B00E3181478640091 -:10FFC0001B19DBB2DC083C5D5F077F0F0623DB1BE0 -:10FFD000DC40A3079B0F14E04C7A53796406640F4E -:10FFE00023404371147906273C400471E4001C430C -:10FFF000204B5C7083789B089B005B1C8370D0E770 -:020000040001F9 -:1000000000238478FB273C408F7A7F07FF0FBF00D7 -:100010003C4384704C7A6407640F04705078012864 -:1000200007D1487A000704D5032008A908750220E3 -:100030002DE0022B27D0012B2BD00F4B0020049A50 -:10004000D86750609060D06018467C30024610320D -:100050005060887AFB2210408872684600F09EFE4D -:10006000040035D0012C34D0004907E03CFC0000EE -:1000700009020000B4000020541A00206520C000CE -:1000800004F0A7FF25E0032008A9087501200876E1 -:10009000E3E77E4C0D21E01C04F05BFE20461030AF -:1000A0004460022008A908750E94A868002807D0AB -:1000B0000068206005997648202211430170CCE742 -:1000C00005980007C9D57349734804F082FFC4E757 -:1000D000002669462046FFF7A7FB04E06E486D49FD -:1000E000203004F076FF08A8007D002802D00DA87B -:1000F000F4F7DCFE304617B0F0BDF0B597B00C4613 -:10010000054600206946087061482F785F4E0178E7 -:10011000583E82683B0005F04DF80BAA8407263B49 -:100120004C6B79798F9CAA002B20694608730CA927 -:1001300003A8FDF73DFC002804D05748554941303D -:1001400004F047FF55490D9804F020FE4F48016028 -:100150004F4869680C300160AA684260019108202C -:10016000694608708CE08A0610D5DF2211400170C4 -:1001700003202070454810304168A1604068002885 -:1001800002D00020207177E00120FBE7102256E02A -:100190002B20694608733D4903A85C39FDF708FC2C -:1001A000002804D03C483B496A3004F012FF042088 -:1001B0001BE02A206946087303A8102202306968F0 -:1001C00004F06AFD07A810220230A96804F064FD5B -:1001D0002E4903A85C39FDF7EBFB002804D0392039 -:1001E0002C49000104F0F5FE05202070666043E014 -:1001F0002A79002A02D001221143017005206946A4 -:10020000087028798880A868029039E0D06A402375 -:10021000018819430180D06B6968102204F03CFD0D -:100220002AE0FB2211400170062069460870A96887 -:1002300068680291019023E0CB0703D002221143AA -:10024000017058E70F20207017202071506CA060BB -:1002500012E0937A9B0706D0D26A44781388FF3461 -:1002600001342343138004221143017004E00A483F -:100270000849BD3004F0ADFE684600780028E0D0A3 -:100280006846F4F713FE36E701207047D01A0020C5 -:10029000B40000203CFC00001503000040420F00A9 -:1002A00070B504780D460646230004F083FF0B1C4E -:1002B000181C1C1C1C07181C1C181C0000210520E5 -:1002C00001F038FDB068007805280CD0FA4800220B -:1002D000008811468300052001F087FC03E000211F -:1002E000052001F027FD002D0ED0002028702946A2 -:1002F0003046FFF702FFF1482978005D884201D1BE -:10030000032070BD022070BD00213046FFF7F5FECE -:10031000002070BD30B5E8494B68497A0A011146A2 -:100320000C315C5C032C0CD0044600252034257174 -:1003300025725C5CA500AA18641C5C5498500320CC -:1003400030BD062030BDF0B50446264620360D46A9 -:100350003279012008218FB0002A0CD0012A21D047 -:10036000022A2BD0032A04D12A78052A01D1297028 -:1003700000200FB0F0BD01203071606800280AD065 -:10038000A069017061684160216981606169C16033 -:10039000FFF7C0FFEDE707202870206968606069FB -:1003A000A86009E029780729E3D1022030710520EF -:1003B0002870C248203868600320DAE729780529C8 -:1003C000D7D1A08910280AD9103880B2A081A1689D -:1003D0001023091803A86A6800F054FE2DE01028C5 -:1003E00004D0C1B20BAA1020A76809E0102322692B -:1003F000A16817E0491EC9B2401EC0B27B5C13540D -:100400000029F7D100280AD0401EC0B28021115423 -:10041000002102E0401EC0B211540028FAD16269E6 -:1004200010230BA907A800F02DFE102307A903A88D -:100430006A6800F027FE032030716068019003A80D -:10044000029005206946087029466846FFF728FF94 -:100450008FE7F0B5044626460D4620363179012057 -:100460008DB000290BD0012938D0022905D1297877 -:10047000052902D10920287000200DB0F0BD217D92 -:100480006846CA07D20F02738807C10F6846017415 -:10049000012203A905A800F0EDFD04A9012205AF82 -:1004A000481D00F0E7FD0722B81CE16800F0E2FDFE -:1004B00007A807220130216900F0DCFD6068019087 -:1004C00009A80290102305AAA16800F0DBFD012015 -:1004D0003071052168460170294621E029780529F7 -:1004E000CBD1062203A8E16900F0C4FD04A80622CE -:1004F0000230A16900F0BEFD042106A800F0B2FDA3 -:100500006068019007A80290102303AA696800F0B0 -:10051000B9FD0220307105206946087029466846F9 -:10052000FFF7BEFEA9E7F0B5074685B00D460020EF -:10053000694608703E466248203632798179133820 -:1005400001240078130004F035FE180DFEFDFCFBBD -:10055000FAF9F8F7F6F5F4F3F2F1F0EFEEEDECEB73 -:10056000EAE9E8E7B968039100291BD0012269464E -:100570000A7003220A710A224A7139690291397993 -:1005800000297DD0039A1278002A7AD00C2A78D2DA -:10059000130004F00FFE0BEF09EF354D8498B0F116 -:1005A000EDECEF000020C8E30021062001F0C2FBC3 -:1005B0003879072866D1424C133C2078022802D0B3 -:1005C00000287FD101E00020207003980079C11F2E -:1005D0000A2901D30A2598E1607039480722C01F13 -:1005E000039900F047FD0120307120700220694618 -:1005F00008703348801F01903869401C029037E230 -:1006000011293DD12E4C133C0228DAD16068617863 -:10061000007A884201D9062577E1039926481022FD -:10062000491C303800F026FD03202070022045E1EF -:100630001129E6D1224C133C0428C2D10520207098 -:1006400003991D481022491C203800F013FD062094 -:100650003071786903210170626851684160164900 -:100660002039816021460C31C160C91D0161017DC5 -:10067000537A49084900DB07DB0F1943017502E093 -:1006800070E354E384E1D3688361FD231940537A16 -:100690009B07DB0F5B0019430175116976E10229A5 -:1006A000AFD1002867D005206946087103984078CB -:1006B00048713869029051E3241B00203452010034 -:1006C000DB00002082E011299BD1F74C06287DD168 -:1006D000A0680399806B1022491C00F0CBFC062116 -:1006E0006846017038690290002168460171FFF781 -:1006F000D7FD072057E00B299BD1EB4C07287ED173 -:10070000A0680399006B0222491C00F0B3FCA068AA -:100710000822406B039917E00EE116E3FDE2DDE2EB -:10072000C7E2BCE29EE267E248E241E21FE2F5E195 -:10073000DFE1C8E1BEE1B1E1A5E16AE147E128E11D -:10074000DAE0BEE0AFE075E0C91C00F093FC0621E2 -:100750006846017038690290002168460171FFF710 -:100760009FFD204613304179490849003EE041E0B1 -:100770001BE001E05CE0EFE2112991D1CA4C0828AE -:100780003DD1A0680399C06B1022491C00F072FC97 -:10079000062168460170386902900021684601719F -:1007A000FFF77EFD09202070C9E208298CD1BE49DF -:1007B000092824D1039842788868016C0A7003994B -:1007C000406C0622891C00F055FC00E017E0062171 -:1007D0006846017038690290002168460171FFF790 -:1007E0005FFDB14813304179FD221FE041715EE2A7 -:1007F0003071F2E11129C0D1AB490A2801D0082596 -:1008000083E088680399806C1022491C00F032FC58 -:10081000062168460170386902900021684601711E -:10082000FFF73EFDA04813304179FB221140DDE780 -:1008300007256AE0297802297ED19B490128FBD14E -:100840006A684A6015780846002D5CD106216A4620 -:1008500011703969029107211171029902240C70FB -:10086000CA785207520FCA704B795B075B0F4B7106 -:100870008B795B075B0F8B71D20701D18A714A714B -:1008800005460A794078824200D26A70864807227B -:10089000133000F0EFFB00202C70307101466846E9 -:1008A000FFF7FEFC4BE229780429C5D103286FD15C -:1008B00008227E48696800F0DDFB032030710420C7 -:1008C000F2E129780429B7D1774F0328B4D17748CA -:1008D00008220830696800F0CDFB04203071786888 -:1008E0004168002906D00321297000212971406840 -:1008F000A86072E10320D7E1287803289CD12879E9 -:1009000000281AD00546002D16D006216846017031 -:100910003869029002216846017102980521017030 -:10092000457000216846FFF7BBFC01216846017055 -:1009300004210171457115E293E15B49A86849689A -:100940000028486001D15A48486005203071786914 -:10095000032202704A684260544A8260524A0C3252 -:10096000C260D21D0261027D4B7A5208DB07520041 -:10097000DB0F1A430275CB688361FD231A404B7A63 -:100980009B07DB0F5B001A4302750969C16130E107 -:100990000DE12978092988D14349032885D104200C -:1009A00008700620694608703869029011200871A5 -:1009B000029803210170401C1022696800F05AFB64 -:1009C00000216846FFF76CFC00203071B7E1297800 -:1009D000092993D1052891D134496A68203910201A -:1009E000401EC0B20B5C145CA34203D0002004255F -:1009F00030718AE70028F3D107203071786904212B -:100A00000170294949684968416028498160103965 -:100A1000EEE028780A28BED10620694608703869B9 -:100A2000029011200871029804210170401C1022CC -:100A30001E4900F01FFB00216846FFF731FC1A48F1 -:100A4000102140786A68091AC9B2101800F00AFB30 -:100A50006868019014481330C178C9070BD08179B8 -:100A6000002902D14079002805D0082030711BE10F -:100A700029466846EFE0072069460870002168466D -:100A8000FFF70EFC5FE128780E2884D106486968DC -:100A900081608969407808700920A9E6C80701D0FB -:100AA0000A20FFE00F20A3E6C8000020141B00204E -:100AB0001452010028780F2879D1A8683861287964 -:100AC00038730B20FAE628780428F5D1FC4C6968C5 -:100AD000A0680822006A00F0CDFA0C203071786915 -:100AE0000722B9690270A268D3684360126A826003 -:100AF0007EE028780D28DFD1F14C6968A0680223D8 -:100B00000269C06900F0BEFA0D20307178690621D3 -:100B10000170A1688A684260096966E028780C283B -:100B2000CAD1E74C6968A0686278406A00F0A2FA0E -:100B30006078A2681021091A526AC9B2101800F030 -:100B400091FA0621684601703869029011226846C0 -:100B50000271029810220170A168401C496A00F0DD -:100B600089FA00216846FFF79BFB0E206EE028788B -:100B70000F2876D1062168460170386902900B2152 -:100B800068460171029C0720CD4D2070A8680222A2 -:100B9000C169601C00F06EFAA8680822016AE01CB6 -:100BA00000F068FA00216846FFF77AFB7AE7C8E0B0 -:100BB000880701D5102075E0132019E628780F2842 -:100BC0004FD1A86838612879387311203071BC483A -:100BD000816848690078002801D00324CAE0786958 -:100BE00006220270C9684160B6498160B549091D95 -:100BF000C160FFF78FFB30E0B14880684169097838 -:100C000000290CD129780C292BD1AD4C6968806A58 -:100C1000102200F02FFAA16801204969087006210E -:100C20006846017038690290112168460171029886 -:100C300008210170A249401C89681022896A00F0CD -:100C400019FA00216846FFF72BFB122030710921A9 -:100C5000684601702946FFF723FB044601287DD032 -:100C600088E06FE028780F286CD10620694608706C -:100C70003869029008200871029809210170904992 -:100C800089680A78D207D20F427049680622801C10 -:100C900000F0F0F900216846FFF702FB8CE74807F7 -:100CA00005D514203071092069460870E0E6162049 -:100CB0009EE528780F2851D1A868386128793873C3 -:100CC000152030717869062101707D4989688A682C -:100CD0004260096981607B49891D89E728780C2871 -:100CE00045D1774C6968A0681022C06A00F0C2F94B -:100CF0000620694608703869029011200871029830 -:100D00000A210170A168401CC96A102200F0B2F9E2 -:100D100000216846FFF7C4FAC9E7694813304079F3 -:100D2000002810D0C10703D065480621017006E0F5 -:100D3000800701D5082000E00A20614908700024DE -:100D400018E00BE013E0172052E55D49002805D0BC -:100D50000020307108700A206946087068460078E3 -:100D6000002804D000216846FFF79AFA002454486E -:100D700000210170204605B0F0BD10B5524BFF2494 -:100D80005C72586019721A80002204E0491EC9B2D0 -:100D90000B010C33C2540029F8D110BDF0B54A4EF6 -:100DA0000546717A01208DB0FF2971D00127727A32 -:100DB000736811015C180C31595C8900091F645873 -:100DC0006A7021780B0004F0F5F90B960709272CBF -:100DD00059888D4A4F5492002F707CE02146203173 -:100DE0000A9109790120002902D0012967D10EE07A -:100DF0006068019005A802900D21C01C00F032F936 -:100E0000032205A8A16800F035F90A984EE0297878 -:100E1000052974D106215DE029462046FFF719FB1C -:100E200069E021462031069109790120002902D08C -:100E3000012964D10EE06068019007A802900822A1 -:100E4000E16800F017F9082209A8A16800F012F97A -:100E500006982BE02978052951D10A213AE0294644 -:100E6000204600F01AF946E029462046FFF76BFAC3 -:100E700041E029462046FFF756FB3CE02146203161 -:100E8000059109790120002903D0012937D11DE0FE -:100E900056E06068019007A802900822A16800F05F -:100EA000E9F8082109A800F0DDF8059869460771FE -:100EB0000520087029466846FFF7F2F91BE00BE0B1 -:100EC000C80000200C520100241B002029780529AD -:100ED00015D10B212970002011E02946204600F091 -:100EE00023F908E02946204600F04EF903E02946A0 -:100EF0002046FFF7C9F9002801D001280CD125624E -:100F0000717A736809010C315A5C521E1206120E76 -:100F10005A5401D003204AE70328FCD0737A726840 -:100F200019011D010D312C46515C7172FF270D34E2 -:100F300017550C35545D002C02D0FF2903D1737274 -:100F40000DB0F0BD21460C010D34145DFF2CF9D11C -:100F500009010D315354F3E770B5AD4C0546607A85 -:100F6000214603464A6811E0010108460C30105C36 -:100F700008E0401EC0B286008E199659AE4201D1DB -:100F8000042070BD0028F4D10D31505CFF28EBD156 -:100F90009F480021007A01E0491CC9B2884204D967 -:100FA0000E010C36965D002EF6D1884201D8052040 -:100FB00070BD08010D30135461722846FFF7AAF97D -:100FC000032806D0617A626809010D31515C6172B3 -:100FD00070BD28462830FFF7E1FE70BD10B50478DB -:100FE0000123012C14D10C78022C11D30B23137084 -:100FF00083785B075B0F537002220A708088002899 -:1010000005D0830000221146062000F0EEFD0023EB -:10101000184610BD0EB50022012105280AD0062869 -:1010200007D1684601700221017142710021FFF76A -:1010300064F80EBD68460170F6E710B58EB00C4638 -:1010400006216A461170019072480290001D0390BB -:101050006846FFF781FF102220460B9900F00AF83E -:101060000EB010BD002202E0491EC9B24254002950 -:10107000FAD1704703E0521ED2B28B5C8354002A2F -:10108000F9D1704730B505E05B1EDBB2CC5CD55CB6 -:101090006C40C454002BF7D130BD3EB5044620301F -:1010A0000D4602790121002A02D0012A3AD10FE02F -:1010B00061680191574908310291012101710520B0 -:1010C0006946087029466846FFF7EAF8014629E0B4 -:1010D0002878052826D169681022A06800F087F8D2 -:1010E0006868C07B000606D54A4AA06810231832FB -:1010F0000146FFF7C7FF1022A168E06800F077F80B -:10110000A068C07B000606D5424AE068102318326A -:101110000146FFF7B7FF07202870A0686860E06805 -:101120000021A86008463EBDF0B5044626460F469D -:1011300020363179012089B0002909D0012905D153 -:101140003978052902D10C203870002009B0F0BD93 -:10115000606803AD01900295022203A8A168FFF721 -:1011600089FF0222A81CE168FFF784FF0C21281DDB -:10117000FFF778FF01203071052069460870394675 -:101180006846FFF78DF8E1E710B5034620331C7978 -:101190000122002C04D0012C10D0022C25D11EE0FD -:1011A00001211971C16806220A7040684860194817 -:1011B000801C8860801CC86008460CE00C780C2CF1 -:1011C00013D102221A71C268052313704968516055 -:1011D000806890601046FFF79DF8024605E00878A9 -:1011E0000B2802D10D2008700022104610BD10B54A -:1011F000002409E00B78521E5B0023430370401C5F -:101200000B78491CD2B2DC09002AF3D110BD0000D2 -:10121000241B00200C52010070B50D46040012D0B2 -:10122000002D10D02101284603F093FD10225449CF -:10123000284603F031FD52480121083801804480DE -:101240004560002070BD012070BD70B54C4E00247B -:101250000546083E11E0716820014018817BAA7B99 -:10126000914209D1C17BEA7B914205D10C222946EA -:1012700003F0E5FC002806D0641C30888442EADBD9 -:101280000020C04370BD204670BD70B50D460600FD -:101290000AD0002D08D03A4C083C20886188401CB8 -:1012A000884203D9042070BD102070BD3046FFF77E -:1012B000CCFF002801DB401C0AE0208861680001A7 -:1012C00040181022314603F0E7FC2088401C2080A3 -:1012D0002870002070BD70B514460D001FD0002C82 -:1012E0001DD00021A170022802D0102817D108E0DB -:1012F000687829780002084311D00121A17010807C -:101300000BE02846FFF7A1FF002808DB401CA07077 -:10131000687B297B000208432080002070BD0120EB -:1013200070BD70B5054614460E000AD0002030701E -:10133000A878012807D004D9114908390A889042B1 -:101340000BD9012070BD002C04D02878207028888B -:10135000000A50700220087010E0002C0CD0496880 -:101360000001411810391022204603F095FC28781E -:1013700020732888000A607310203070002070BD30 -:10138000EC00002073490968016000207047714932 -:1013900008600020704701216F4A704B002803D07D -:1013A000012805D06E48704791630020187001E055 -:1013B000D1631970002070476A49012008606848AD -:1013C000801C70470422684B6649002805D05A608B -:1013D000086901221043086108E0086940084000DC -:1013E00008619A605C490020C03188600020704725 -:1013F0005C490622002808D0012809D002280DD017 -:1014000003280FD05648401C70470869904302E0FB -:1014100008699043801C0861002070470869904368 -:10142000001DF8E708691043F5E74E494A6A024390 -:101430004A62002070474B494A6A82434A62002050 -:1014400070474849496A0160002070474549CA69A8 -:101450000243CA61002070474249CA698243CA6197 -:10146000002070473F49C96901600020704730B5CE -:101470000546002072B601463A4A384C4032002DEB -:1014800011D00123012D0CD0022D02D0072062B60D -:1014900030BDA3706478002C01D09363F7E79163AB -:1014A000F5E7A170F9E7A170F9E72F4904208860FA -:1014B00029490020C03188602849012008702B4943 -:1014C0000A688023120A12021A430A602849086037 -:1014D000704722480078704770B5EFF31080C50759 -:1014E000ED0F72B61D4C6078401C0006000E607057 -:1014F00003D120A1CC2003F06CFD6078012806D137 -:10150000A078002803D01749012040318863002DBE -:1015100000D162B670BD70B5EFF31080C507ED0F56 -:1015200072B60E4C6078002803D112A1DC2003F0C3 -:1015300050FD6078401E0006000E607006D1A07855 -:10154000002803D00749002040318863002D00D1D6 -:1015500062B670BD0004004040000040FC00002066 -:1015600004200000000500400003004000E400E00B -:1015700000E100E07372635C736F635F706F7765A7 -:10158000722E63008107C90E002808DA0007000FD9 -:1015900008388008B94A80008018C06904E08008D3 -:1015A000B74A800080180068C8400006800F704766 -:1015B000B44948788978884201D3401A02E0212250 -:1015C000511A0818C0B27047AE492331487889785B -:1015D000884201D3401A02E02122511A0818C0B2F1 -:1015E0007047A849463148788978884201D3401A23 -:1015F00002E02122511A0818C0B27047A04810B565 -:101600000C300168FF22120291430122D2031143E0 -:1016100001609C490020233148708870233948704C -:101620008870463148708870974802F0FFFA9648F3 -:10163000401C02F0FBFAF2F7A9F900F015F910BD11 -:1016400020207047B4E770B50C4605460026FFF72A -:10165000AFFF8C49A04214D30A46203A002320460B -:10166000641EE4B200280BD08878105C287088785B -:101670006D1C401CC0B288702128F0D18B70EEE741 -:10168000012600F0F1F8304670BD202070479BE73E -:1016900070B50C4605460026FFF796FF79492331C1 -:1016A000A04214D30A46203A00232046641EE4B226 -:1016B00000280BD08878105C287088786D1C401C3E -:1016C000C0B288702128F0D18B70EEE7012600F0BF -:1016D000CBF8304670BD202101700020704710B556 -:1016E0000446FFF77EFF2070002010BD70B50C4649 -:1016F0000546FFF776FF63494631A04215D30A46F7 -:10170000203A00232046641EE4B200280BD08878DB -:10171000105C287088786D1C401CC0B2887021282D -:10172000F0D18B70EEE7002400E0584C00F09CF8FC -:10173000204670BD70B50C460546212904D9FF200E -:1017400053A1473003F045FC4C484068103840B284 -:10175000FFF718FFC6B20D20FFF714FFC0B2864294 -:1017600007D2FF204AA14D3003F033FC01E0F2F72D -:101770004DF921462846FFF766FF0028F7D070BDD7 -:10178000F8B5404E07462336B1787078212200F034 -:1017900060F8354623353B4C00280ED0A1786078A0 -:1017A000212200F056F8002814D0A9786878212268 -:1017B00000F04FF800281AD025E032497078C91C93 -:1017C0000F547078401CC0B2707021281BD10020CB -:1017D000707018E02B49607820390F546078401CF5 -:1017E000C0B2607021280ED1002060700BE0254946 -:1017F000687826310F546878401CC0B26870212880 -:1018000001D100206870B1787078212200F021F8B1 -:1018100000281DD0A1786078212200F01AF8002855 -:1018200016D0A9786878212200F013F800280FD08C -:10183000F2F7CEF8144802F001FA01214903884278 -:1018400003D013A1C12003F0C4FB0F4802F00EFA2D -:10185000F8BD401C884205D0904201D1002901D03A -:10186000002070470120704710B5074802F0E6F9E4 -:10187000002801D1F2F79BF810BD000000ED00E058 -:1018800000E400E0501B0020FF00002007200000C3 -:101890007372635C736F635F72616E642E630000CA -:1018A00010B5284802F0C2F9002803D026A11D2057 -:1018B00003F08FFB2348401C02F0B8F9002803D046 -:1018C00021A1212003F085FB10BDF1B5224D6F68E9 -:1018D00001261C4802F0B2F91A4C002803D1002658 -:1018E000601C02F0C3F91D4A1D490120506000BF71 -:1018F00000BF00BF00BF00BF00230B604B60009B18 -:101900006B60106000BF00BF00BF00BF00BF086871 -:10191000002802D148680028F9D048680028E4D19E -:10192000002E04D06F60601C02F088F907E0601C94 -:1019300002F084F90028D3D1024802F097F9002080 -:10194000F8BDC2E7010100207372635C736F635FCF -:101950006563622E6300000000E5004000E0004087 -:1019600000E1004030B5EFF31081CC07E40F72B610 -:101970001D4A116910230D461D431561002C00D12D -:1019800062B61A4DC406E40E0120A0402C68044241 -:101990000DD0C8060AD4EFF31080C007C00F72B68E -:1019A000116999431161002800D162B630BD20BF92 -:1019B00040BF20BFEAE70E4908784A78401CC0B211 -:1019C000904200D008707047084A094820BF40BFC5 -:1019D00020BF4178037843701368002B02D103784D -:1019E0008B42F3D00020704700ED00E000E200E001 -:1019F00003010020FEB5F64C07466068FF213E015A -:101A000081552178FF2913D0090108314158324608 -:101A1000491E083209020192090A805800F0CEF9E5 -:101A2000002802D02478254615E061682078885582 -:101A30002770FEBDE64842680198115828010090C1 -:101A40000830105800F0BAF9002806D1E0482C46BA -:101A5000416800980D5CFF2DECD1DD482101406804 -:101A600085554754FEBD70B5D94A04460020157A05 -:101A700053680AE00201561C9E5DA64203D10C3257 -:101A80009A588A4204D0401CC0B28542F2D8FF2046 -:101A900070BDF8B5CE4F3E7801F01AFE0146FF2E1C -:101AA00071D03401254678680835405900F086F930 -:101AB00002280CD97868405901F0FDFD01F008FEBC -:101AC00001467868405900F079F902285BD8C0498E -:101AD0004868025D0A70A11C425C002A0CD0521EAC -:101AE000425441590122D20589180902090A41517B -:101AF0003046FFF77FFF30E0631CC25C0092221D7E -:101B000094468258002A10D001239B029A420FD992 -:101B10009205920D43595703DB191B021B0A4351CF -:101B20006346C3589A1A920A09E0FF21C1540AE099 -:101B3000435952039A181202120A42510022425487 -:101B40003046FFF757FFA2480C344168C26800983E -:101B5000095980001258009890479D4C2078FF2822 -:101B600011D0000161680830085801F0A4FD01F0AF -:101B7000AFFD01462078626800010830105800F07F -:101B80001DF9022886D3F8BDF8B51C4615460E4649 -:101B90000746FF2B03D38FA1D42003F01AFA8C48F9 -:101BA000FF21C76045600472067401700022427014 -:101BB000104604E00201521C401CA954C0B2A042CD -:101BC000F8D3F8BD70B5824C06466578207C854216 -:101BD00003D380A1E72003F0FCF9E068A900465098 -:101BE0006078401C6070284670BDFFB581B01D460E -:101BF000FF2401F06DFD764F064679780198814209 -:101C000003D874A1F52003F0E4F971480021037AA8 -:101C1000406810E00A019446521C825CFF2A25D0DD -:101C2000019FBA4205D162460C328758029A974208 -:101C30001ED0491CC9B28B42ECD8FF2C18D0210110 -:101C40004A1C019B83540B460C33029AC250039BDF -:101C50005F4F0022012B0ED00B1DC25001239B02AF -:101C60009D4216D9AA05920D08D008E00C46E0E77F -:101C7000FF2005B0F0BD0B1DC550EFE71A4653031A -:101C80009B190E461B0208361B0AAA1A8351920A98 -:101C900009E0002D00D101256B039B191D022D0ABF -:101CA0000B460833C550891C42543D463E782046B9 -:101CB000FFF7A0FE2878B04214D000016968083010 -:101CC000085801F0F8FC01F003FD29786A68090161 -:101CD000083152580146104600F070F8022801D22F -:101CE000FFF7D7FE0198C4E770B50C46054601F032 -:101CF000EFFC064621462846FFF7B5FEFF2817D021 -:101D0000334D04012046696808300858314600F018 -:101D100055F80121090340186968A41C095D400BAE -:101D2000002901D089020818002800D1012070BDC7 -:101D3000002070BDF3B581B00F460198FFF793FE08 -:101D4000FF282AD0224E3578726829460C4604E0D6 -:101D5000844205D025462301D45CFF2CF8D11CE039 -:101D6000FF2C1AD0A5421CD10801105C3070FF284E -:101D700015D000010830105801F09DFC01F0A8FCBE -:101D800001463078726800010830105800F016F8EB -:101D9000022806D2FFF77DFE03E00020FEBD01F021 -:101DA00092FC39460198FFF79FFF22017168FF23DB -:101DB000541C0B558A5C2B01CA54FEBD401A00020C -:101DC0000121000AC905884200D90020704700009F -:101DD0009C1B00207372635C736F635F74696D6535 -:101DE000722E6300F0B500241C4A01211C4B08032D -:101DF000546018601B4B1C601B4C20601B4804691E -:101E0000E443E406E6170469761C10252C430461BC -:101E1000174C6160174D296000E020BF1F68002F3C -:101E2000FBD0002E03D107691026B74307619068E5 -:101E30008005906801D5104A10436960A1600021B7 -:101E400019600121084A09031160F0BD10B504466C -:101E5000FFF7C8FF2060002010BD000000C5004053 -:101E600080E100E000C1004080E200E000ED00E021 -:101E700000C3004000C0004000FCFFFF70B51F49D8 -:101E80000A68002A17D000231D4601244A68521C04 -:101E90004A60092A00D34D600E792246B2400E688E -:101EA00016420AD072B60B6893430B6062B649685B -:101EB0000160002070BD052070BD5B1C092BE5D3BF -:101EC0000FA1362003F085F8F5E7012010498005C1 -:101ED00008607047EFF31081CA07D20F72B6012174 -:101EE00081400648036819430160002A00D162B6A8 -:101EF000EBE70248002101604160704708010020C3 -:101F00007372635C736F635F6576742E63000000A9 -:101F100000E200E00120810708607047012081078E -:101F2000486070471048C068C00700D00120704763 -:101F30000D488068C00700D0012070470A484069FA -:101F4000C00700D0012070470748C06970470649A4 -:101F50008A69D20306D589698907890F814201D12F -:101F6000012070470020704700040040F8B5FE4C87 -:101F7000207BE17A88421AD00126FC4D0027E07AC6 -:101F8000215C14200A4642435019037C052B0FD0D4 -:101F9000062B1BD0072B28D0437C012B33D0F4A178 -:101FA000F64803F016F8207BE17A8842E7D1F8BDC5 -:101FB0000674E07A0A2807D0E07A401CE072491CD7 -:101FC000C8B2AA5802210CE00020F7E70674E07AB4 -:101FD0000A2808D0E07A401CE072491CC8B2AA580E -:101FE00003219047DFE70020F6E70674E07A0A282D -:101FF00007D0E07A401CE072491CC8B2AA580821F8 -:10200000EFE70020F7E74774E07A0A2807D0E07A84 -:10201000401CE072491CC8B2AA580721E1E7002021 -:10202000F7E770B5D64D06206872D648002444778D -:10203000047738300473C472D34801F0F7FDD348F5 -:102040000475EC72D249601E88606C71AC70EC70E3 -:102050002C716C70CF48022104704470CE4804701B -:10206000047528300470491EFAD10120F1F750FDA3 -:102070000020F1F74DFD0120A871F0F741FDC748A0 -:10208000F0F750FDC64C2070C648F0F74BFD60706D -:10209000F1F7E2FC70BD10B5F1F709FDC04C2078F6 -:1020A000F0F75EFD6078F0F75BFDB54C207A002814 -:1020B00005D0FFF730FAF0F7E2FD0020207210BDE6 -:1020C00070B5AF4CA079002804D0A9A1B64802F0A1 -:1020D00080FF70BDE07A002804D11320A4A1400144 -:1020E00002F077FF0126A6710025E572607A0421CF -:1020F000142250439D4A80180174A5488168491CE8 -:1021000004D0691E81600120F1F702FD0020F1F783 -:10211000FFFCF1F7E3FC01F023FEF1F7E8FDA34833 -:10212000056005600120A249C0030860F0F74AFF7E -:1021300098480078022804D0032804D1E0780028C9 -:1021400001D0A67000E0A570F1F7BDFD70BD03469B -:1021500086490520142242435218203A127F002A51 -:1021600004D0401E0006000EF4D1704714224243F2 -:1021700051180A46403AD362012220390A77704743 -:10218000012805D0032805D1002903D1002070477C -:102190000029FBD010B47A4C002363707D4A0028DC -:1021A00090700CD002280AD007291AD20B007B4469 -:1021B0001B79DB189F441505070D0F111300D37011 -:1021C00003E01B2000E03A20D0700120607010BCBA -:1021D00070475820F8E77720F6E79620F4E7B52017 -:1021E000F2E710BC0020704710B56A484078F1F75C -:1021F00085FD80B210BD411E1422504310B55B4ACC -:102200008418203C042902D8207F002803D158A13B -:10221000684802F0DEFE207F012803D054A1664802 -:1022200002F0D7FE0020207710BD70B5554C607FBE -:10223000217F884201D1012500E00025F1F7F7FC5C -:10224000F1F75CFD617F227F914201D1012100E025 -:102250000021A942EBD170BDF7B50646481E844661 -:102260008EB0C0B2142204905043404A85182846CC -:102270000595007C2D1D07282AD13B4C0027E07ACC -:10228000227B824221D0235C049A934201D1012710 -:1022900001E0002F04D00A2811D0421CA25C225475 -:1022A0000A280ED0401C227BC0B28242EBD1002F04 -:1022B0000BD0207B002806D0207B401E04E00022AB -:1022C000ECE70020EFE70A202073059A0120107444 -:1022D00060462B4C04280FD814204143234808188B -:1022E0002038007F002807D00598007C012807D0FF -:1022F0001098807A012807D01DA1304802F069FEAD -:102300001098807A012871D10598184B007C02281A -:102310001AD0154C207B0A2874D0207BE17A401C0F -:10232000884204D1C92012A1800002F052FE059912 -:1023300001204874217B04986054207B0A2865D0D2 -:10234000207B401C20731CE1607A049A0146904275 -:1023500006D0014614277843C018807C9042F8D1FB -:10236000627A824235D12BE0A81C0020B81C0020E4 -:102370007372635C72656D2E63000000D50500000A -:102380003C1D0020701C0020481D0020901C0020D7 -:102390001C1D002012010020C81C0020931A0100FF -:1023A000100100206D1F01007F02000000F50040B9 -:1023B00080E200E0CD020000CE0200001703000022 -:1023C000617A14225143C918897C61720121A1727A -:1023D00007E014224243D21814277943927CC9188B -:1023E0008A74142206215043C01881741098007A10 -:1023F000062819D203007B441B79DB189F4408127E -:10240000100E0C0AE07A00288CD090E7002099E7A3 -:1024100000210FE0B4210DE073210BE0322109E02F -:102420000A2107E0062105E0FF20FE49E23002F024 -:10243000D0FD0021109802910068401A2860109980 -:10244000097A002912D00221401A0102090A2960E2 -:1024500010980268406810180002000A686010981E -:10246000807A0228109803D0007B74E00421EBE707 -:10247000007A002813D0022202981018844610987F -:102480004268604608301718E748029A4078904240 -:1024900002D9E278002A04D03846083005E0042248 -:1024A000EAE7029A801AC0190830627A062A1CD01C -:1024B000627A14235A43DD4BD2185268914214D0E9 -:1024C000DB4B0793617A14225143D84A89184A6832 -:1024D0008968921B891B12020902120A090A90429A -:1024E0003AD89A4238D8994236D83018C01B0002E0 -:1024F000000A286010996044CE4AC9680002000AA8 -:102500009446421A01239B0507929A4201D2104633 -:1025100014E00A1A09929A4201D207980EE0079A2B -:102520006346624503D9591A0818401C06E0099A07 -:10253000624506D9181A4018401C404200285FDC4A -:1025400003E0B849BC4802F044FD2868C019000205 -:10255000000A6860002028726868082708300002B6 -:10256000000A68601098407AA8721098007A687221 -:1025700003280ED200280CD0FFF7D4FC002803D08B -:1025800007E0002011B0F0BD02983A210F1A322066 -:102590000290A5480178012901D0032909D1417889 -:1025A0000298814205D9E078002802D10298081AE1 -:1025B000C71928689E4A801B844601026868090A78 -:1025C000801B03021B0A8F421AD81746914217D864 -:1025D000BB4215D8617A062916D0677A6146062271 -:1025E000039200923A4614235A43904BD2189368B0 -:1025F0009B1B8B4216D80397977C062FF2D177E06E -:10260000049801F059F9BCE7059802220499027474 -:10261000627A062A00D0627A827461720120A07206 -:1026200011B0F0BD062F63D0002239469446142223 -:102630007E4B4A43D21853689B1B834229D2917B1D -:10264000AB7A99421FD805980521049C7B4D0174F3 -:10265000287B0A2811D0287BE97A401C884203D1C4 -:102660007049774802F0B5FC287B2C54287B0A2857 -:1026700007D0287B401C287383E7E87A0028EFD036 -:10268000F2E70020F7E701218C46917C0629CED1A4 -:1026900002E0604600282AD03D46009114202A46D8 -:1026A000424362480621161831741038007B0A280C -:1026B000624816D0017BC07A491C814203D161A1D6 -:1026C000634802F086FC5D48017B4554017B0A2982 -:1026D0000BD0017B491C0173B57C0098A842DDD169 -:1026E00006E0C07A0028EAD0EDE70021F3E7009782 -:1026F0000599022008744D4D607AB84207D10599BA -:1027000000988874049860720120A07221E00398F8 -:10271000062F0FD0062803D14AA14E4802F059FCDB -:102720000398142250434019049981740599009824 -:1027300088740EE0062803D142A1474802F049FC04 -:102740000398142250434019049981740599062076 -:102750008874012011B0F0BD70B50D4606463F49A2 -:1027600000242046891BA04103D236A13C4802F038 -:1027700030FC3C490020491BA04103D231A13A481A -:1027800002F027FC394A70190021821A8C4101D3CA -:102790003749401870BDF8B5401EC0B214214843F7 -:1027A00022494518687B062813D203007B441B7915 -:1027B000DB189F44020C0A080604002066E0B420DF -:1027C00010E073200EE032200CE00A200AE0062020 -:1027D00008E0FF201BA1E23002F0FBFB697B002038 -:1027E000002953D0022140186968002440180C21A8 -:1027F00000026956000A00294ADBF1F77FFA174AFE -:1028000006460C27EF570021101AA14103D20DA153 -:10281000134802F0DEFB13490020C91BA0412CD253 -:1028200008A127E07023010012010020B81C00203D -:10283000FFFF3F00FFFFFF0014070000A81C00205F -:10284000090200007372635C72656D2E6300000004 -:10285000C7030000DF030000E5030000FF7F841EC4 -:10286000F50300000020A107F60300000080841E8D -:1028700000807BE1FB4802F0ACFBFB4AF019002131 -:10288000821A8C4101D3F9494018F8BD0421AAE706 -:10289000F1F734FA0C21695600224018F449091A5C -:1028A000A241F2D24042F8BDF0B5064683B0F148ED -:1028B0000190457A029534687068001B0702EE4863 -:1028C0003F0A001B0090062D2DD0142029464143BD -:1028D000EA480122081884464168E748920586467E -:1028E000081B904210D3631A93420DD302467046E0 -:1028F000724503D900984018401C05E073450ED975 -:10290000411A0819401C404200280CDA6046029522 -:10291000857C0198C0790028D5D003B0F0BDD84996 -:10292000D84802F056FB0298854226D0142148432D -:10293000D2490123401802908068CF499B058C46FC -:10294000011B8646994210D3221A9A420DD3634640 -:10295000614503D900997144491C06E01946624556 -:102960002DD9091A0819401C4142002905DD029899 -:10297000B17A807B814200D37446062D15D0BF49C1 -:102980001420454368184268121B1202120ABA4208 -:102990000BD2B27A837B9A4200D38468857C0198FB -:1029A000C0790028B9D1062DEAD13068A042B4D050 -:1029B000E0190002000A3460706003B0F0BDB04955 -:1029C000B04802F006FBD8E7F0B5AF4904464868C6 -:1029D00085B0C005C00D1CD0103840B200280CDAFC -:1029E0000207120F083A920892005118C96980072D -:1029F000C00EC1400806800F09E08108A34A890083 -:102A0000891809688007C00EC1400806800F002899 -:102A100008D000262078002806D0012804D0002005 -:102A200005B0F0BD0126F5E72079062813D2030092 -:102A30007B441B79DB189F44020C0A080604002023 -:102A400018E0B42010E073200EE032200CE00A20E1 -:102A50000AE0062008E0FF208949E23002F0B9FAD6 -:102A600021790020002905D002214718814D002E30 -:102A700002D003E00421F8E70020E87102AA6946C9 -:102A8000A068F1F745F9694608228A56E06801A96D -:102A90008018C01C01221F2801DA019209E003AA54 -:102AA000F1F736F96846007B002802D00198401CF7 -:102AB000019000990198401808300002000A019026 -:102AC000C81B0002000A009060796946887200986D -:102AD0000390F1F7ACF8009A019B121A181A6C498E -:102AE00012020002120A000A8A4216D8884214D83A -:102AF0006846FFF7D9FE00990398814205D0C819AE -:102B00000002000AF1F7FAF8A0600120E979002933 -:102B100086D0002EB0D005B0F0BD0020F6E7F3B5AA -:102B20008FB05C480C460B9001F088F85A4A0F9918 -:102B3000504E5518203D594F00280BD05848007D65 -:102B4000002803D057A15A4802F043FA2078012800 -:102B50007DD05FE1787F0A280CD0787F397F401CD8 -:102B6000884203D14FA1534802F033FA207801285C -:102B700004D00CE0387F0028F4D0F7E7E87F002885 -:102B800003D048A14C4802F024FA0120E877787F6E -:102B90000F991422494D504340190174207802289E -:102BA00023D0787F14214843451920792872607911 -:102BB00068722A460C322946A068F1F7A9F80C2061 -:102BC00028560F2804DD1F3828732868401C286009 -:102BD0000C22AA56281DE16802908818C01C1F28E4 -:102BE0003FDA029901200860FDE027494868C005E6 -:102BF000C00D20D0103840B200280CDA0207120FA6 -:102C0000083A920892005118C9698007C00EC14065 -:102C10000806800F09E081081C4A890089180968A4 -:102C20008007C00EC1400806800F002803D11DA1F7 -:102C3000234802F0CEF9787F14214843451900213A -:102C4000E0686A460591117303AA05A900E0D8E07F -:102C5000F1F75EF86A460C2010560F2832DD01208D -:102C600031E0B3E0F60300000080841E00807BE1C9 -:102C7000FF7F841E3C1D0020FFFFFF00B81C0020CA -:102C8000442801001407000000ED00E000E400E02B -:102C9000FFFF3F00481D002016010020701C00208F -:102CA000901C00207372635C72656D2E63000000DF -:102CB00017050000F5040000FA040000B01B002016 -:102CC0000605000000200599401808900220A8720F -:102CD0002079287260796872A068291DC01C039150 -:102CE0001F2801DA01200AE006AAF1F711F8684668 -:102CF000007E002804D0039803990068401C0860F7 -:102D0000287A062813D203007B441B79DB189F44E2 -:102D1000020C0A08060400200FE0B4200DE0732026 -:102D20000BE0322009E00A2007E0062005E0FF2042 -:102D3000FD49E23002F04DF900202179002943D00D -:102D400002214118069168680831401808990590D9 -:102D500008180699401A0C900020F071F0F767FFF0 -:102D600004462860089820180002000AE860707A7B -:102D7000062825D0707A14214843EC494018406851 -:102D80000090059940180002000A0190687A69468F -:102D900088726846FFF788FD0098019A001B121B95 -:102DA00000021202E24B000A120A0C99984207D85C -:102DB0008A4205D80099069808180002000A28607F -:102DC000F0790028C8D110E00421BAE704AA0299DA -:102DD000F0F79EFF6846007C002804D00298029914 -:102DE0000068401C08602078A872787F0A2806D006 -:102DF000787F401C78770B9800F038FF47E0002080 -:102E0000F8E7E87F002803D0CAA1CD4802F0E1F836 -:102E10000120E877CB490F9808742078022803D165 -:102E2000C4A1C94802F0D5F8C64D2079287260794E -:102E300068722A460C322946A068F0F769FF0C2018 -:102E400028560F2804DD1F3828732868401C286086 -:102E50000C22AA56281DE16802908818C01C1F2861 -:102E600003DA0299012008600CE003AA0299F0F746 -:102E70004FFF6846007B002804D002980299006842 -:102E8000401C08602078A872AE4901200875797F3F -:102E9000387F814223D0747A062C22D0F0F7C7FE07 -:102EA00014214C43A1496218117C042917D003292D -:102EB00015D0536892681B1A101A1B0200029C4915 -:102EC0001B0A000A082B0AD30A468B4207D89042F5 -:102ED00005D8787F397F884201D0F0F7F4FE11B031 -:102EE000F0BD787F397F8842F7D111B0F0BD10B5C1 -:102EF0000020F0F7FAFD10BD10B50120F0F7F5FD48 -:102F000010BDF1B5009802281FD0904C607A0628B9 -:102F100003D188A18E4802F05CF80026A671012535 -:102F2000E572607A03211422804F5043C019017466 -:102F3000F0F7CEFE009800280CD001282AD00328F4 -:102F40007CD0B5207BA1C00044E082480078EFF738 -:102F50000DFEF8BD8048007F002803D075A17F4892 -:102F600002F037F865717C4D00202E60F0F7D0FD3F -:102F7000A968481C04D0012300221846F0F7FEFD82 -:102F8000607A617A401CC0B2142251437A58012100 -:102F90009047F8BD0120F0F7BBFD607900280DD007 -:102FA0006D488068401C09D0607A617A401CC0B2CC -:102FB000142251437A5806219047F8BD6648007F95 -:102FC00001280AD0022812D0032824D0042836D0A1 -:102FD00058A1634801F0FDFFF8BD2079002803D017 -:102FE0002671F0F77AFEE5705B480677F8BD207A27 -:102FF000002804D1FEF770FAEFF718FE2572607A08 -:10300000617A401CC0B2142251437A580021904783 -:1030100051480677F8BD504F0123397B786800226C -:10302000411A1846F0F7AAFD2079002803D026712E -:10303000F0F753FEE57002203877F8BD1BE0464EEE -:10304000217870680123411A00221846F0F796FD96 -:10305000207A002804D1FEF73FFAEFF7E7FD25724A -:10306000607A617A401CC0B2142251437A58002120 -:1030700090473577F8BD607A617A401CC0B214225F -:1030800051437A5805219047F8BD10B52F4C607A0E -:10309000062803D127A1334801F09BFF607A617AAB -:1030A000401CC0B214225143204A52580421904778 -:1030B00010BDF0B583B006200290F0F7B8FD234CA8 -:1030C0000090617A28480190062920D0617A142066 -:1030D000414316480918097C042918D0617A142242 -:1030E00051430818007C03287BD00198009A03689C -:1030F00040689B1A801A1B0200020D491B0A000A35 -:10310000082B6ED30A468B426BD8904269D812487E -:103110008068401C03D007A1144801F05AFF00202A -:103120006071607A062823E0A42C0100B81C0020FE -:10313000FFFF3F007372635C72656D2E63000000D9 -:103140001E050000901C0020240500003C1D0020EE -:1031500055050000100100201C1D00206105000025 -:103160009C050000AF0500002C1D0020EB050000B1 -:1031700007D16078002804D0FE48C178417081787A -:103180000170607A062815D0607A1421FA4A484303 -:103190008018007C04280DD1607A0290617A0120A9 -:1031A0001423594389180874617A59438918897C12 -:1031B0006172A072F14D687F297FF14F884233D050 -:1031C000F04E287F142148438019007CC05D0128FF -:1031D000287F07D048438019007CC05D02282FD08B -:1031E00044E001E2142148438019807A01280AD082 -:1031F000287F0221142250438019007CC155287F6A -:103200000A2808D009E0297F002014225143891997 -:10321000097CC8552AE0002001E0287F401C28775F -:10322000687F297F8842CCD1D74D287D00284CD09B -:10323000287CC15D012928D0C05D022830D03AE049 -:10324000287F142148438019807A012803D0CFA118 -:10325000D14801F0BEFE297F002014225143891974 -:103260008872297F51438919097CC855287F142108 -:1032700048438219287F48438019017C0098FEF753 -:10328000EBFF287F0A28C8D1C5E7A97A012904D015 -:103290000221C155002028750DE00021C1550AE02A -:1032A000A87A012803D0B9A1BC4801F092FE002001 -:1032B000A872297CC855287D002806D0297CB24AEE -:1032C0000098FEF7C9FF00202875029806281ED036 -:1032D00014214843A8494018017C012917D107212E -:1032E000AF4D0174287B0A283CD0287BE97A401C2A -:1032F000884203D1A5A1AB4801F06BFE297B02985F -:103300006854287B0A2831D0287B401C2873607AB7 -:1033100006287DD0A07A00287BD00020A072617A98 -:10332000142041439448A04B0A18566891681D46E2 -:10333000D2687C35DE67AA6069609C4D697E002991 -:1033400016D00226617A14228B4851430818407B1C -:1033500006281BD203007B441B79DB189F440A1408 -:1033600012100E0CE87A0028C4D0C7E70020CDE781 -:103370000426E7E700200FE0B4200DE073200BE007 -:10338000322009E00A2007E0062005E0FF207FA1A7 -:10339000E23001F01EFE00202873697E022901D070 -:1033A000012910D12969009A09188A1A1202120AF1 -:1033B0003A2A08D90320687632390802000A2861BF -:1033C000322028730AE0322808D2207A00280ED151 -:1033D000FEF782F8EFF72AFC012007E0207A0028A8 -:1033E00005D0FEF798F8EFF74AFC002020726149FB -:1033F0000822487820700978012901D0032906D1D4 -:1034000001212171297B884201D9421A083201E049 -:1034100091E0A1E0A378002B00D0921C2179002933 -:1034200001D1002B5DD09446614A00990092019A27 -:10343000176852687F1A511A3F0209023F0A090AA7 -:10344000BC451BD85A4A974218D8009A914215D8C1 -:10345000297B884223D92B69421A9A1A1202120A2E -:10346000101880190002000A2A616860002914D02F -:10347000032028770006000E3ED14CE0002020718A -:10348000A070297B002925D02869401880190002E6 -:10349000000A6860022028772EE00120E9E78142D7 -:1034A0000BD92A69511889190902090A696000288B -:1034B00001D00420DDE70220DBE7002B03D133A19C -:1034C0003C4801F086FD286980190002000A686006 -:1034D000002004E0296989190902090A696028772E -:1034E00019E0287B00280FD02969081880190002EC -:1034F000000A6860022028772869012381190022C8 -:103500001846F0F73BFB09E0286980190002000A21 -:103510006860002028770120F0F7FAFA607A142119 -:10352000484315490C22401882560123002069683F -:10353000F0F724FB10E00120F0F7EAFA0020F0F7A2 -:10354000E7FAF0F7CBFA207A002805D0FDF7E3FF81 -:10355000EFF795FB00202072A078002804D0F0F748 -:10356000BCFB0020E070A0706078002827D00148E4 -:10357000C17821E012010020B81C0020701C00203E -:1035800015010020B01B0020901C00207372635CAA -:1035900072656D2E630000000D0600002906000014 -:1035A000A81C00203B060000B01C00201C1D0020B1 -:1035B000FFFF3F008D060000417081780170207987 -:1035C000002806D00020CE49E0700978002900D1FB -:1035D0002071CC48017BC07A814203D0CA48407830 -:1035E000EFF7C4FA0120E07103B0F0BDF0B5C74CAD -:1035F0000746607A83B0062804D16F20C4A1000179 -:1036000001F0E7FC607A1421C44E48438019007C25 -:10361000032803D0BEA1C24801F0DBFCC14DA8685D -:10362000401C03D0BAA1C04801F0D3FC607A142139 -:10363000484381190C20085600216A4600911171F7 -:10364000C01901AA6946F0F763FB6A4604201056C8 -:103650000F2801DD012000E0002000994018696872 -:1036600040180102090AA9606079002804D00123EA -:1036700000221846F0F782FA03B0F0BD70B5AC4CEA -:10368000AA4A0B1AA34214D3451AA54211D3934256 -:1036900003D9101A43185B1C0BE0954204D9511A48 -:1036A0000818401C434204E099A1A24801F091FC93 -:1036B0000023184670BD10B50146012300220220E8 -:1036C000F0F75CFA10BD10B50220F0F721FA10BD3A -:1036D00010B5F0F7ACFA10BDF0B58C4D0446E87AA1 -:1036E00083B0002803D18AA1934801F072FC642CB6 -:1036F0004DD3924A00210846121B884147D3904877 -:10370000417F007F814242D18E48007D00283ED11A -:10371000687A1421814F4843824EC519306801AA46 -:1037200000196946F0F7F4FA6946042008560028A3 -:1037300002DD0098401C0090A96800986B680A1888 -:10374000D21A1202804B120A9A4220D8AA7C062A68 -:1037500008D014235A43D2195268511A0902090A8F -:10376000814214D3B068401C05D00120F0F7D0F995 -:103770000020C043B060306800193060A86800992C -:1037800040180002000A7061012003B0F0BD002063 -:1037900003B0F0BDF8B50646401EC4B214205F4920 -:1037A00060434518287C002804D1772058A10001E7 -:1037B00001F00FFC6248017F407F81420CD0634AD8 -:1037C00014234B439B181B7CB3420CD00A290CD00A -:1037D000491CC9B28142F3D15A48017D002961D008 -:1037E000007CB0425ED10020F8BD0021F1E7052940 -:1037F00003D0062901D0072928D101212974C17AD3 -:103800000023027B8A4221D00246565CA64201D1A7 -:10381000012301E0002B04D00A2911D04E1C965D33 -:1038200056540A290ED0491C167BC9B28E42ECD1DF -:10383000002B0BD0117B002906D0117B491E04E020 -:103840000026ECE70021EFE70A211173697C0029CB -:103850002AD06F74C17A0023027B8A4224D0425C52 -:10386000A24201D1012301E0002B04D00A2912D089 -:103870004A1C825C42540A290FD0491C027BC9B2FF -:103880008A42ECD1002B0FD0027B0146002A06D0E1 -:103890000A7B521E04E00022EBE70021EEE70A2239 -:1038A0000A7301E017480027297C01299FD16A7C0F -:1038B000002A9CD10120F8BD70B505461420174A96 -:1038C0000521684380180F4C0174207B0A2811D011 -:1038D000207BE17A401C884203D10DA11C4801F0F5 -:1038E00078FB207B2554207B0A2807D0207B401CB6 -:1038F000207370BDE07A0028EFD0F2E70020F7E7F0 -:1039000012010020A81C0020100100203C1D0020F6 -:103910007372635C72656D2E63000000B81C00203A -:10392000F10600001C1D0020F2060000FF7F841E2F -:103930000020A1071407000033070000FF1FA107A4 -:10394000701C0020901C0020FFFF3F00B01B0020D7 -:103950000902000010B501462022094801F09CF937 -:1039600007490020C877084610BD06490120486174 -:103970000548064A0168914201D100210160704763 -:103980004C1D0020000500401C010020BEBAFECAEC -:10399000064A10705170704704481C22017841712A -:1039A00042700170704770477047704720010020D7 -:1039B00030B50346002002460DE09C5C2546303DB4 -:1039C0000A2D02D30020C04330BD0A256843303899 -:1039D0002018521CD2B28A42EFD330BD70B50D46CA -:1039E000144608E00A2101F0D1F92A193031203AB1 -:1039F000641ED177E4B2002CF4D170BD10B5002361 -:103A000010E0040A00020443A0B2CC5C444020064B -:103A1000000F60400407240C44402006C00C6040A6 -:103A20005B1C9BB29342ECD310BD10B520380C4602 -:103A3000030001F0BFFB33E0DBE41B1F23272C3125 -:103A4000373C41474D5054585C606D7165697478DE -:103A50007C8084888C9094989C9FA2A6AAAEB2B8D1 -:103A6000BCC0C5CACFE9F0F3D3D7F800206800F096 -:103A7000DDF8D6E0206800F0E1F8D2E0206800F040 -:103A8000F5F8CEE0207840B200F092FAC9E0207854 -:103A900040B200F0B0FAC4E02078616840B200F0B3 -:103AA000C3FABEE0207840B200F0D3FAB9E0207843 -:103AB00040B200F0DEFAB4E02078217940B200F0A4 -:103AC000E9FAAEE02078616840B200F013FBA8E0AC -:103AD00000F01FFBA5E0206800F023FBA1E02078A8 -:103AE00000F038FB9DE02068FDF7F5FD99E02068C7 -:103AF000FDF7F5FD95E021792068FDF7F7FD90E0F1 -:103B00002068FDF73FFC8CE02068FDF740FC88E072 -:103B10002078FDF740FC84E0FDF74EFC81E0207842 -:103B2000FDF750FC7DE02078FDF762FC79E020682D -:103B3000FDF77BFC75E02068FDF77DFC71E02068F7 -:103B4000FDF77FFC6DE02068FDF780FC69E02068F0 -:103B5000FDF782FC65E02068FDF784FC61E02068E9 -:103B6000FDF785FC5DE00846EDF7F0FA59E0EFF768 -:103B700070F856E0EFF79DF853E02068EFF7A5F8EE -:103B80004FE0206800F080F84BE0206800F082F8F9 -:103B900047E0206800F083F843E02078A26861687D -:103BA00000F082F83DE0207800F089F839E02078D4 -:103BB00000F091F835E02078616800F098F830E086 -:103BC0002078616800F09FF82BE02179207800F0E0 -:103BD000D5FB26E02068FDF778FE22E02068FEF79E -:103BE0004DF91EE02068FEF731F91AE0204607C8BB -:103BF00000F0B9FC15E0206800F00CFD11E06168F0 -:103C0000206800F037FD0CE0206800F029FF08E094 -:103C100009E003E0FFE700F03BFF02E0206800F06E -:103C200073FF206010BD0120086010BD00210170ED -:103C3000084670470146002008707047EFF3108176 -:103C4000C907C90F72B60278012A01D0012200E02B -:103C5000002201230370002900D162B6002A01D09E -:103C600000207047012040037047E7E7EFF3108121 -:103C7000C907C90F72B600220270002900D162B6CE -:103C800000207047F2E7000038490968C9B20160B6 -:103C9000002070473549C0B2486000207047334962 -:103CA000C0B2886000207047082801D330487047B0 -:103CB000C3002E4818180161426100207047022895 -:103CC00002D32B48401C70472A4A0121C0008018AB -:103CD000016000207047022802D32548401C70472D -:103CE000244A0121C000801841600020704702284A -:103CF00002D31F48401C70471F4A8000C9B2801879 -:103D0000016000207047022802D31948401C704708 -:103D1000194A800080180068C0B20860002070470F -:103D200010B5FF20114AC043906008200021C30055 -:103D30009B1819615961401C1028F8D300200E4AC5 -:103D400005E0022803D383009B18196004E0830078 -:103D50009B181C68E4B21C60401C0428F1D310BD01 -:103D6000FF200249C04388607047000000F5014011 -:103D70000820000000F0014000F8014010B572B6C4 -:103D800000F0DEF800280BD0EDF78AFAFEF783F991 -:103D900000F0BBFA6F490020C86288626E49086073 -:103DA00062B6002010BDF3B5002501200007C06AEF -:103DB00081B0C0430006000E04D168480068401C72 -:103DC00000D1012572B600F0BBF8002801D062B620 -:103DD00087E0EDF7D1F9EDF767FA614C614A002110 -:103DE0002368CB40DB071FD00346CB40DB0718D14D -:103DF0004BB2002B07DA1E07360F083EB608B60096 -:103E0000B618F66904E09E08574FB600F6193668F2 -:103E10009B07DB0EDE4033069B0F012B04D0032BE8 -:103E200002D062B65148FEBD491C2029D8D3019C5E -:103E300001204F49230001F0BDF914222424242439 -:103E4000242424240B0D1012142016181A1C1E2FC3 -:103E5000002400E00124C86314E00224FBE70324EB -:103E6000F9E70424F7E70824F5E70924F3E70A242F -:103E7000F1E70B24EFE70C24EDE70524EBE707243B -:103E800000E00624D06901210002000AC9070843A6 -:103E9000D061002D04D009E062B601200003FEBD10 -:103EA0002C4D3448E862EDF7FFF9A8622A49324800 -:103EB0000860324902980860EDF7F6F9214600F0F3 -:103EC0000BFAFEF7AEF800F00DFC00F087FA01984F -:103ED000EDF7B4F9040062B603D0FFF74FFF2046B8 -:103EE000FEBD0020FEBD10B5044600F029F80028F4 -:103EF00000D001202070002010BD21490860002062 -:103F0000704710B50C46102808D011280BD0122885 -:103F10000CD013280ED00120086010BD6168206805 -:103F2000FFF741FF0AE0FFF729FF07E02068FFF7EE -:103F3000DAFF03E01249206808600020206010BD0D -:103F400005480D490068884201D1012070470020D2 -:103F500070470000000500401C0100200010001008 -:103F600000E100E000ED00E000E400E001100000EE -:103F70004000004000200000BEBAFECA2801002018 -:103F8000040000208107C90E002808DA0007000F8E -:103F900008388008814A80008018C06904E08008E1 -:103FA0007F4A800080180068C8400006800F704774 -:103FB00010B5044600F0DBF8002813D02046FFF7C8 -:103FC000E1FFC0B200F0E1F800280DD07549E2062B -:103FD0000B78D20E01209040002B08D04A68104385 -:103FE000486006E0704810BD6F48401C10BD6F4926 -:103FF0000860002010BD10B5044600F0B8F8002895 -:104000000BD06849E2060B78D20E01209040002BBD -:1040100005D04A6882434A6004E0634810BD6349A2 -:1040200080310860002010BD70B50D46044600F0D8 -:104030009EF800280BD05E480068E206D20E0121EF -:104040009140084000D001202860002070BD5648F3 -:1040500070BD10B5044600F08AF8002807D0E106CC -:10406000C90E0120884052490860002010BD4E480A -:1040700010BD10B5044600F07AF8002808D0E1061B -:10408000C90E012088404A4980310860002010BDD7 -:10409000454810BD70B50D46044600F068F800288C -:1040A00019D0284600F071F8002816D0A007C20EDB -:1040B000FF209040A907090E9140002C10DA22073A -:1040C000120F083A9308354A9B009B18DA6982431D -:1040D0000A43DA610CE0344870BD3348401C70BDBF -:1040E000A3082F4A9B009B181A6882430A431A6050 -:1040F000002070BD70B50C46054600F038F8002869 -:1041000005D02846FFF73EFF2070002070BD2648EE -:1041100070BDBFF34F8F21492648C860BFF34F8F52 -:10412000FEE770B51F4C05462178012000290ED10D -:10413000207072B600F0F8F81C4E8036316881436A -:10414000616000F0F1F8C043306062B60020287072 -:10415000002070BD13490A78002A06D0002804D137 -:10416000124A48681060002008700020704710B59F -:104170000446202805DA00F0D7F80121A1400842C2 -:1041800001D0002010BD012010BD012803D003285C -:1041900001D00020704701207047000000ED00E0D2 -:1041A00000E400E02C0100200120000000E100E01C -:1041B00000E200E00400FA05F8B504468007002597 -:1041C0000126002804DA5A48C563C66302208443E6 -:1041D000E00404D55748C563C66380148443600077 -:1041E00003D55548456080058443E00504D5534810 -:1041F000C563C66380158443A00404D55048C563D5 -:10420000C6634014844360042704C00FF90F88423A -:1042100003D04CA1612000F0DCFEB80F0AD04E495B -:10422000CD634E48C563C563CE63C663C6630320D2 -:104230008003844320050AD5494FFD632F20ECF706 -:10424000B3FFFE632F20ECF7AFFFF8148443002C7C -:1042500003DAFFF765FD640064084248044203D0B6 -:1042600038A1902000F0B5FEF8BDF0B500210A4657 -:10427000FF230446CC40E4072AD04CB2E606F60EF3 -:104280000125B540384E3560384E3560002C11DAC6 -:1042900025072D0F083DAE08354DB6007619F56996 -:1042A000A407E70E1C46BC40A5431446BC4025436A -:1042B000F5610DE0A6082F4DB60076193568A40704 -:1042C000E70E1C46BC40A5431446BC402543356060 -:1042D000491C2029CDD3F0BD70B5274C0D46206078 -:1042E000FFF76AFF2068FFF7C0FF2846EEF77AFD68 -:1042F000FDF7D6FAFDF782F9FFF712FDFDF7D5F8C5 -:10430000EEF7FEFB00F06AF870BD10B51A4C20689D -:10431000FFF752FF2068FFF7A8FFFFF701FDEEF758 -:10432000E6FD0020206010BD1348006870470000C3 -:10433000C01F0040C0CF004000E50140C08F0040DA -:10434000C0DF00407372635C736F635F636F6E66A0 -:1043500069672E6300000000C0EF0040C0FF00400E -:10436000C0BF0040FEFF0FFC80E100E080E200E003 -:1043700000ED00E000E400E03401002070B500240E -:1043800002460D4620462146002A1ED0012A04D0AE -:10439000022A04D0032A1ED103E0012002E00220F9 -:1043A00013E003202B0000F005FF07160507090B9B -:1043B0000D0F1600012108E0022106E0032104E0B0 -:1043C000042102E0052100E00621FDF7D9FE0028C6 -:1043D00001D0204670BD0724FBE70000B148002152 -:1043E00001708170704770B5AF4D01236B60AF4BAA -:1043F0001C68002CFCD0002407E00E6806601E68D4 -:10440000002EFCD0001D091D641C9442F5D3002031 -:10441000686018680028FCD070BD70B5A14C0D46CE -:104420006178884203D0A2A16C2000F0D2FD2B005D -:1044300000F0C0FE094F0625254F4F4F4F464F0055 -:104440002078022803D09AA1702000F0C2FD03203A -:104450002070A078022802D0012804D008E0A068CB -:1044600000F0CEFB04E02269E168A068FFF7BBFF23 -:104470000020A070FDF724FE0420207070BDFDF721 -:10448000D4FE01466068FFF7F9F805462078022857 -:1044900003D087A1842000F09CFD894A89498A487D -:1044A000954206D8401BC86086496078FEF737FB06 -:1044B00070BD854202D802224A71F3E7032003E06F -:1044C000A0780028FAD10220FDF704FD00F0E0F802 -:1044D00070BD77A1AD2000F07CFD70BD70B50546C4 -:1044E000FDF7A3FE6F4C60602078012803D070A117 -:1044F000B42000F06EFD73490220087000220A719A -:104500008D6003224A71704ACA6020706078FEF79D -:1045100006FB70BD10B5634CA078002802D120784E -:10452000002801D0112010BD6848FDF710FE607012 -:104530006078002803D001202070002010BD0320E7 -:1045400010BD10B50124020B64040121604BA04290 -:1045500002D29140186802E0203A58689140084021 -:1045600000D0012010BDF8B50E46910005464F1948 -:1045700014463F1F009100F054FB009980028919F6 -:10458000091FB14201D2012200E00022002C03D019 -:10459000FF2101318C4201D90920F8BD4D498D42DE -:1045A00019D3AF4217D3854205D2874203D228469A -:1045B0003043800701D01020F8BD8E420BD3002A73 -:1045C00009D12846FFF7BDFF002804D13846FFF780 -:1045D000B8FF002801D00F20F8BD3F483F490068D0 -:1045E000884205D0224631462846FFF7FCFE0FE000 -:1045F000FFF790FF0028EFD12A480121C6608560AF -:10460000046181702046312148431430FFF766FF72 -:104610000020F8BD10B504462E48800A84420BD312 -:1046200000F0FFFAA04201D8102010BDA0020446FD -:10463000FFF787FF002801D00F2010BD264827492B -:104640000068884203D0204600F0DAFA0AE0FFF75B -:1046500061FF0028F1D11348022184608170204855 -:10466000FFF73CFF002010BD1A48010B01208840D5 -:10467000401E704700B50B460246FFF7F5FF10429B -:1046800001D00F2000BD124802604360002000BD31 -:1046900010B5044C6078FDF7AEFD00202070A070CE -:1046A00010BD00003801002000E5014000E4014099 -:1046B0007372635C736F635F666C6173682E630013 -:1046C000307500006C1D0020D0FB01001B44010070 -:1046D00000060040006001001C010020BEBAFECAB6 -:1046E00010540000F74805218170002101704170CD -:1046F000C1708160704710B5F3490A78022A07D06B -:10470000CA681018C860C8689638FEF76FFF10BDF9 -:104710008A68101888608868F6E70378EB49EC4AE5 -:10472000002B02D0012B10D014E00379002B01D014 -:10473000012B0FD14379002B01D0012B0AD18368C3 -:10474000643B8B4206D2C06810E00379002B03D093 -:10475000012B01D0002070474379002B01D0012BA1 -:10476000F8D1C368643B8B42F4D280689042F1D8A0 -:1047700001207047F8B504460226FEF7BDFB00682D -:10478000002803D0D3A1BE2000F023FC0127CD4D8B -:10479000002C08D02078002817D0012805D0022846 -:1047A00011D0032813D02F710DE06068C82808D3FA -:1047B000FEF792FF002804D06068FFF79CFF0126F7 -:1047C00003E0002601E000F0F9F93046F8BD287852 -:1047D0000028F8D16068FFF7A0FF0028E3D06068E8 -:1047E0000078002826D0A878042803D0B9A1F820A2 -:1047F00000F0EFFBB44F00203870606800790128AA -:1048000000D00020387160684079002837D003203C -:10481000787160688168E868FDF79EFFB86060683D -:10482000C0689630F8600320A870A749E878FEF7C2 -:1048300076F9C8E7A4480221017061680979012965 -:1048400019D00021017161684979002915D003212F -:10485000417161688968963181606168C968C16029 -:10486000C068984C14346060FDF7DFFC20606F7006 -:104870000220A870A7E70321E4E70221E8E702206D -:10488000C6E7F8B58F4C0D46E178884204D0FF208A -:1048900090A11A3000F09DFB28468A4F0025012682 -:1048A0001437030000F086FC090612375A7C8D97F6 -:1048B000C4A0C400A078032807D0A078022804D0A0 -:1048C000FF2084A11E3000F084FBF8BDA0780328EF -:1048D00007D0A078022804D0FF207EA1223000F06B -:1048E00078FB0420A07025712078002810D1FFF7F4 -:1048F00002FFE078FDF74FFFE0607D49886A7D4A5E -:10490000024022617B4AD24310408862002050E07E -:1049100000F054F9F8BDA078032807D0A078022849 -:1049200004D0FF206BA1453000F053FB2078002815 -:1049300002D000F04FF9F8BDA07803281FD1042061 -:104940002AE0091A6048C1600146E078FEF7E7F8FE -:10495000F8BD0420FDF7BEFAA570F8BDA0780328C5 -:1049600007D0A078022804D0FF205AA1663000F0BA -:1049700030FB20780028DCD1A07803280BD0FDF78D -:1049800054FC01463868FEF779FE0028E1DB7968BF -:104990008142DEDBD5E70520FDF79CFAA670F8BD65 -:1049A000A078042804D0FF204AA1873000F011FB32 -:1049B0000220A1688847FFF7DDFEFF260546C036C6 -:1049C00042E0A078042804D0FF2042A18C3000F0FF -:1049D00000FB0120EDE7A078042899D0FF203DA13D -:1049E000913000F0F6FA93E7A07804280AD06078B6 -:1049F000002802D0A078022804D0FF2035A19630EC -:104A000000F0E7FA2078002893D12079002804D01C -:104A10000620FDF75FFA2571C0E76078002805D011 -:104A20002949E078FEF77BF86570F8BD0720B3E709 -:104A3000FF2028A1B13046E7002D0AD0012D06D075 -:104A400024A1304600F0C5FA022DF5D1F8BD0420AE -:104A500000E00320A1688847FFF78CFE0546F3E7D6 -:104A600070B5050005D0174CA078052803D011209B -:104A700070BD102070BD2048FDF769FBE070E07844 -:104A8000002803D0A5600020A07070BD032070BD79 -:104A900010B50C480178002901D0112010BD817893 -:104AA00005292BD0817801292AD08178002927D0A7 -:104AB000012101708178012922D0807800281FD03F -:104AC00020E000004C0100207C1D00203D860100FC -:104AD000FF1FA1077372635C736F635F7261646928 -:104AE0006F5F74696D65736C6F742E6300000000F6 -:104AF0000005004002810080834801000F2010BDA6 -:104B000000F068F8002010BDF8B5394E0446B078C2 -:104B1000002801D001280DD1002C0DD02046FFF730 -:104B2000FCFD00280AD02078324D002808D0B0784B -:104B3000012823D00F20F8BD1020F8BD0720F8BDB4 -:104B400002272F702079012814D000202871607965 -:104B5000002811D003206871A0689630A860E06832 -:104B6000E860E868224C14346060FDF75EFB20606A -:104B7000B77019E00320E9E70220ECE70020287075 -:104B80002079012816D0002028716079002813D0E0 -:104B900003206871A168F068FDF7DEFDA860E06899 -:104BA0009630E8600320B0701249F078FDF7B7FF47 -:104BB0000020F8BD0320E7E70220EAE710B50E4821 -:104BC000816A0E4A11400A4A126911438162FDF757 -:104BD00077FA10BD10B5064CE078FDF70CFB082005 -:104BE000FDF778F90520A07000202070607010BDDE -:104BF0004C0100207C1D002000050040FD7EFF7F51 -:104C00000A4A022151600A490B68002BFCD09060CF -:104C100008680028FCD00020506008680028FCD0FC -:104C200070470120000740697047000000E501401F -:104C300000E4014070477047704770477047034673 -:104C400010B50B439B070FD1042A0DD308C810C918 -:104C5000121FA342F8D018BA21BA884201D9012004 -:104C600010BD0020C04310BD002A03D0D30703D0DD -:104C7000521C07E0002010BD03780C78401C491C32 -:104C80001B1B07D103780C78401C491C1B1B01D14E -:104C9000921EF1D1184610BDF8B5042A2CD3830713 -:104CA00012D00B78491C0370401C521E83070BD096 -:104CB0000B78491C0370401C521E830704D00B78EC -:104CC000491C0370401C521E8B079B0F05D0C91A4C -:104CD000DF002023DE1B08C90AE0ECF775FAF8BDF7 -:104CE0001D4608C9FD401C46B4402C4310C0121F8D -:104CF000042AF5D2F308C91A521EF0D40B78491CC5 -:104D00000370401C521EEAD40B78491C0370401CEF -:104D1000521EE4D409780170F8BD01E004C0091FF7 -:104D20000429FBD28B0701D50280801CC90700D063 -:104D30000270704700290BD0C30702D00270401CDC -:104D4000491E022904D3830702D50280801C891ED4 -:104D5000E3E70022EEE70022DFE70378C278194696 -:104D6000437812061B0219438378C0781B04194349 -:104D700011430902090A000608437047020A087035 -:104D80004A70020C8A70020ECA7070470022030932 -:104D90008B4273D3030A8B4258D3030B8B423CD311 -:104DA000030C8B4221D312E003460B437FD4002235 -:104DB00043088B4274D303098B425FD3030A8B42AF -:104DC00044D3030B8B4228D3030C8B420DD3FF2219 -:104DD000090212BA030C8B4202D31212090265D0E7 -:104DE000030B8B4219D300E0090AC30B8B4201D39A -:104DF000CB03C01A5241830B8B4201D38B03C01AE1 -:104E00005241430B8B4201D34B03C01A5241030B57 -:104E10008B4201D30B03C01A5241C30A8B4201D308 -:104E2000CB02C01A5241830A8B4201D38B02C01AB3 -:104E30005241430A8B4201D34B02C01A5241030A2A -:104E40008B4201D30B02C01A5241CDD2C3098B420F -:104E500001D3CB01C01A524183098B4201D38B018C -:104E6000C01A524143098B4201D34B01C01A52412F -:104E700003098B4201D30B01C01A5241C3088B4274 -:104E800001D3CB00C01A524183088B4201D38B005F -:104E9000C01A524143088B4201D34B00C01A524101 -:104EA000411A00D201465241104670475DE0CA0FD8 -:104EB00000D04942031000D34042534000229C4698 -:104EC00003098B422DD3030A8B4212D3FC228901A2 -:104ED00012BA030A8B420CD3890192118B4208D378 -:104EE000890192118B4204D389013AD0921100E0DA -:104EF0008909C3098B4201D3CB01C01A52418309EE -:104F00008B4201D38B01C01A524143098B4201D31A -:104F10004B01C01A524103098B4201D30B01C01A45 -:104F20005241C3088B4201D3CB00C01A52418308BF -:104F30008B4201D38B00C01A5241D9D243088B4215 -:104F400001D34B00C01A5241411A00D201466346B8 -:104F500052415B10104601D34042002B00D549421C -:104F6000704763465B1000D3404201B50020C04645 -:104F7000C04602BD704770477047704710B500F0DB -:104F800059F810BD30B58C180278401C13071B0F60 -:104F900001D10378401C120906D10278401C03E0BD -:104FA0000578401C0D70491C5B1EF9D101E00B70A7 -:104FB000491C521EFBD1A142E6D3002030BD0000A7 -:104FC00001231B68134B1860134B1960134B1A60B5 -:104FD0007047134A134B13607246053AF0E7114AC3 -:104FE0000F4B1B689A420ED10D4B002018600198A0 -:104FF0000D4B04B598470CBC9E460246029800999A -:105000000A4B1B68184706980599094B1B68DB6813 -:105010001847000070010020740100207801002072 -:1050200068010020EFBEADDE5539010028010020E7 -:10503000040000201D481E497047FFF7FBFFECF7F6 -:105040007DF800BD01200007C06AC0B2FF2804D16E -:10505000184819490968884202D01848184901605F -:10506000184819490968884203D1184A13605B68D7 -:10507000184700BD20BFFDE7124813490968884260 -:105080000ED1134B18680B498842F3D080F308887F -:105090001049884204DD1048026802210A43026078 -:1050A0000E4880470E4880470E480047901D00205C -:1050B000901D0020FFFFFFFF001000102C05004096 -:1050C0000800000000100000000000200400002084 -:1050D0000060010000200020240500406B39010021 -:1050E00045500100C14F01001348704502D1EFF354 -:1050F000098101E0EFF308818869023800781028FF -:1051000014DB202810DB23280BDB0C4A12680C4B25 -:105110009A4203D1602804DB0A4A10470220086043 -:105120007047094A10470000084A1047084A1268A9 -:105130002C32126810470000FDFFFFFF1C01002009 -:10514000BEBAFECAAD1200002B3A0100033F0100B7 -:10515000040000200D4B0E4908470E4B0C49084730 -:105160000D4B0B4908470D4B094908470C4B0849A3 -:1051700008470C4B064908470B4B054908470B4BA2 -:10518000034908470A4B024908470000052E000062 -:10519000E13D0000BD2F0000873C0000353C0000D1 -:1051A000E9390000B912000063170000493D000012 -:1051B000AB2B000030B47446641E2578641CAB42EF -:1051C00000D21D46635D5B00E31830BC1847000049 -:1051D00002490020C861203908727047E0030020AE -:1051E00000020207FFFFFFFF0000FFFF01020408AB -:1051F00010204080555555D6BE898E00F401FA0026 -:10520000960064004B0032001E00140001000300F1 -:10521000000001000000000000000000000000008D -:1052200000000000870000000000000000000000F7 -:105230000000000000000203040500000E0F000043 -:10524000705201000800002010000000041100004E -:10525000805201001800002064010000844F01000A -:10526000A45201007C010020141C00002011000049 -:105270000249022208681042FCD0704700E200E0B8 -:10528000E1078F56FF9900CD29022B01360100015D -:1052900000EC3720FB349B5F8074800010027001AB -:0452A000E4C54F0111 -:00000001FF
--- a/TARGET_HRM1017/TARGET_NORDIC/TARGET_NRF51822/PeripheralNames.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2013 Nordic Semiconductor - * - * 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 MBED_PERIPHERALNAMES_H -#define MBED_PERIPHERALNAMES_H - -#include "cmsis.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define STDIO_UART_TX TX_PIN_NUMBER -#define STDIO_UART_RX RX_PIN_NUMBER -#define STDIO_UART UART_0 - -typedef enum { - UART_0 = (int)NRF_UART0_BASE -} UARTName; - - -typedef enum { - SPI_0 = (int)NRF_SPI0_BASE, - SPI_1 = (int)NRF_SPI1_BASE, - SPIS = (int)NRF_SPIS1_BASE -} SPIName; - -typedef enum { - PWM_1 = 0, - PWM_2 -} PWMName; - -typedef enum { - I2C_0 = (int)NRF_TWI0_BASE, - I2C_1 = (int)NRF_TWI1_BASE -} I2CName; - -typedef enum { - ADC0_0 = (int)NRF_ADC_BASE -} ADCName; - -#ifdef __cplusplus -} -#endif - -#endif
--- a/TARGET_HRM1017/TARGET_NORDIC/TARGET_NRF51822/PortNames.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2013 Nordic Semiconductor - * - * 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 MBED_PORTNAMES_H -#define MBED_PORTNAMES_H - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - Port0 = 0 //GPIO pins 0-31 -} PortName; - -#ifdef __cplusplus -} -#endif -#endif
--- a/TARGET_HRM1017/TARGET_NORDIC/TARGET_NRF51822/TARGET_HRM1017/PinNames.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,153 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2013 Nordic Semiconductor - * - * 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 MBED_PINNAMES_H -#define MBED_PINNAMES_H - -#include "cmsis.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - PIN_INPUT, - PIN_OUTPUT -} PinDirection; - -#define PORT_SHIFT 3 - -typedef enum { - p0 = 0, - p1 = 1, - p2 = 2, - p3 = 3, - p4 = 4, - p5 = 5, - p6 = 6, - p7 = 7, - p8 = 8, - p9 = 9, - p10 = 10, - p11 = 11, - p12 = 12, - p13 = 13, - p14 = 14, - p15 = 15, - p16 = 16, - p17 = 17, - p18 = 18, - p19 = 19, - p20 = 20, - p21 = 21, - p22 = 22, - p23 = 23, - p24 = 24, - p25 = 25, - p26 = 26, - p27 = 27, - p28 = 28, - p29 = 29, - p30 = 30, -// p31=31, - - P0_0 = p0, - P0_1 = p1, - P0_2 = p2, - P0_3 = p3, - P0_4 = p4, - P0_5 = p5, - P0_6 = p6, - P0_7 = p7, - - P0_8 = p8, - P0_9 = p9, - P0_10 = p10, - P0_11 = p11, - P0_12 = p12, - P0_13 = p13, - P0_14 = p14, - P0_15 = p15, - - P0_16 = p16, - P0_17 = p17, - P0_18 = p18, - P0_19 = p19, - P0_20 = p20, - P0_21 = p21, - P0_22 = p22, - P0_23 = p23, - - P0_24 = p24, - P0_25 = p25, - P0_26 = p26, - P0_27 = p27, - P0_28 = p28, - P0_29 = p29, - P0_30 = p30, - - LED1 = p18, - LED2 = p19, - LED3 = p18, - LED4 = p19, - - BUTTON1 = p16, - BUTTON2 = p17, - - RX_PIN_NUMBER = p11, - TX_PIN_NUMBER = p9, - CTS_PIN_NUMBER = p10, - RTS_PIN_NUMBER = p8, - - // mBed interface Pins - USBTX = TX_PIN_NUMBER, - USBRX = RX_PIN_NUMBER, - - SPI_PSELMOSI0 = p20, - SPI_PSELMISO0 = p22, - SPI_PSELSS0 = p24, - SPI_PSELSCK0 = p25, - - SPI_PSELMOSI1 = p12, - SPI_PSELMISO1 = p13, - SPI_PSELSS1 = p14, - SPI_PSELSCK1 = p15, - - SPIS_PSELMOSI = p12, - SPIS_PSELMISO = p13, - SPIS_PSELSS = p14, - SPIS_PSELSCK = p15, - - I2C_SDA0 = p22, - I2C_SCL0 = p20, - - I2C_SDA1 = p13, - I2C_SCL1 = p15, - // Not connected - NC = (int)0xFFFFFFFF -} PinName; - -typedef enum { - PullNone = 0, - PullDown = 1, - PullUp = 3, - PullDefault = PullUp -} PinMode; - -#ifdef __cplusplus -} -#endif - -#endif
--- a/TARGET_HRM1017/TARGET_NORDIC/TARGET_NRF51822/TARGET_HRM1017/device.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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 MBED_DEVICE_H -#define MBED_DEVICE_H - -#define DEVICE_PORTIN 1 -#define DEVICE_PORTOUT 1 -#define DEVICE_PORTINOUT 1 - -#define DEVICE_INTERRUPTIN 1 - -#define DEVICE_ANALOGIN 1 -#define DEVICE_ANALOGOUT 0 - -#define DEVICE_SERIAL 1 - -#define DEVICE_I2C 1 -#define DEVICE_I2CSLAVE 0 - -#define DEVICE_SPI 1 -#define DEVICE_SPISLAVE 1 - -#define DEVICE_CAN 0 - -#define DEVICE_RTC 0 - -#define DEVICE_ETHERNET 0 - -#define DEVICE_PWMOUT 1 - -#define DEVICE_SEMIHOST 0 -#define DEVICE_LOCALFILESYSTEM 0 - -#define DEVICE_SLEEP 1 - -#define DEVICE_DEBUG_AWARENESS 0 - -#define DEVICE_STDIO_MESSAGES 0 - -#define DEVICE_ERROR_PATTERN 1 - -#include "objects.h" - -#endif
--- a/TARGET_HRM1017/TARGET_NORDIC/TARGET_NRF51822/gpio_object.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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 MBED_GPIO_OBJECT_H -#define MBED_GPIO_OBJECT_H - -#include "mbed_assert.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - PinName pin; - uint32_t mask; - - __IO uint32_t *reg_dir; - __IO uint32_t *reg_set; - __IO uint32_t *reg_clr; - __I uint32_t *reg_in; -} gpio_t; - -static inline void gpio_write(gpio_t *obj, int value) { - MBED_ASSERT(obj->pin != (PinName)NC); - if (value) - *obj->reg_set = obj->mask; - else - *obj->reg_clr = obj->mask; -} - -static inline int gpio_read(gpio_t *obj) { - MBED_ASSERT(obj->pin != (PinName)NC); - return ((*obj->reg_in & obj->mask) ? 1 : 0); -} - -#ifdef __cplusplus -} -#endif - -#endif
--- a/TARGET_HRM1017/TARGET_NORDIC/TARGET_NRF51822/objects.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,73 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2013 Nordic Semiconductor - * - * 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 MBED_OBJECTS_H -#define MBED_OBJECTS_H - -#include "cmsis.h" -#include "PortNames.h" -#include "PeripheralNames.h" -#include "PinNames.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct serial_s { - NRF_UART_Type *uart; - int index; -}; - -struct spi_s { - NRF_SPI_Type *spi; - NRF_SPIS_Type *spis; -}; - -struct port_s { - __IO uint32_t *reg_cnf; - __IO uint32_t *reg_out; - __I uint32_t *reg_in; - PortName port; - uint32_t mask; -}; - -struct pwmout_s { - PWMName pwm; - PinName pin; -}; - -struct i2c_s { - NRF_TWI_Type *i2c; - PinName sda; - PinName scl; - int freq; -}; - -struct analogin_s { - ADCName adc; - uint8_t adc_pin; -}; - -struct gpio_irq_s { - uint32_t ch; -}; - -#include "gpio_object.h" - -#ifdef __cplusplus -} -#endif - -#endif
Binary file TARGET_HRM1017/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_HRM1017/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_HRM1017/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_HRM1017/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_HRM1017/TOOLCHAIN_ARM_STD/startup_nRF51822.o has changed
Binary file TARGET_HRM1017/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_HRM1017/TOOLCHAIN_ARM_STD/system_nrf51822.o has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_HRM1017/TOOLCHAIN_GCC_ARM/NRF51822.ld Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,151 @@ +/* Linker script to configure memory regions. */ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00016000, LENGTH = 0x2A000 + RAM (rwx) : ORIGIN = 0x20002000, LENGTH = 0x2000 +} + +OUTPUT_FORMAT ("elf32-littlearm", "elf32-bigarm", "elf32-littlearm") + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + KEEP(*(.Vectors)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + *(.jcr) + . = ALIGN(4); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + end = __end__; + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +}
Binary file TARGET_HRM1017/TOOLCHAIN_GCC_ARM/board.o has changed
Binary file TARGET_HRM1017/TOOLCHAIN_GCC_ARM/cmsis_nvic.o has changed
Binary file TARGET_HRM1017/TOOLCHAIN_GCC_ARM/libmbed.a has changed
Binary file TARGET_HRM1017/TOOLCHAIN_GCC_ARM/retarget.o has changed
Binary file TARGET_HRM1017/TOOLCHAIN_GCC_ARM/startup_NRF51822.o has changed
Binary file TARGET_HRM1017/TOOLCHAIN_GCC_ARM/system_nrf51822.o has changed
Binary file TARGET_K20D50M/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_K20D50M/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_K20D50M/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_K20D50M/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_K20D50M/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_K20D50M/TOOLCHAIN_ARM_STD/system_MK20D5.o has changed
Binary file TARGET_K20D50M/TOOLCHAIN_GCC_ARM/libmbed.a has changed
Binary file TARGET_K20D50M/TOOLCHAIN_GCC_ARM/retarget.o has changed
--- a/TARGET_K64F/TARGET_Freescale/TARGET_KPSDK_MCUS/PeripheralNames.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,131 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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 MBED_PERIPHERALNAMES_H -#define MBED_PERIPHERALNAMES_H - -#include "cmsis.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - OSC32KCLK = 0, -} RTCName; - -typedef enum { - UART_0 = 0, - UART_1 = 1, - UART_2 = 2, - UART_3 = 3, - UART_4 = 4, -} UARTName; - -#define STDIO_UART_TX USBTX -#define STDIO_UART_RX USBRX -#define STDIO_UART UART_0 - -typedef enum { - I2C_0 = 0, - I2C_1 = 1, - I2C_2 = 2, -} I2CName; - -#define TPM_SHIFT 8 -typedef enum { - PWM_1 = (0 << TPM_SHIFT) | (0), // FTM0 CH0 - PWM_2 = (0 << TPM_SHIFT) | (1), // FTM0 CH1 - PWM_3 = (0 << TPM_SHIFT) | (2), // FTM0 CH2 - PWM_4 = (0 << TPM_SHIFT) | (3), // FTM0 CH3 - PWM_5 = (0 << TPM_SHIFT) | (4), // FTM0 CH4 - PWM_6 = (0 << TPM_SHIFT) | (5), // FTM0 CH5 - PWM_7 = (0 << TPM_SHIFT) | (6), // FTM0 CH6 - PWM_8 = (0 << TPM_SHIFT) | (7), // FTM0 CH7 - PWM_9 = (1 << TPM_SHIFT) | (0), // FTM1 CH0 - PWM_10 = (1 << TPM_SHIFT) | (1), // FTM1 CH1 - PWM_11 = (1 << TPM_SHIFT) | (2), // FTM1 CH2 - PWM_12 = (1 << TPM_SHIFT) | (3), // FTM1 CH3 - PWM_13 = (1 << TPM_SHIFT) | (4), // FTM1 CH4 - PWM_14 = (1 << TPM_SHIFT) | (5), // FTM1 CH5 - PWM_15 = (1 << TPM_SHIFT) | (6), // FTM1 CH6 - PWM_16 = (1 << TPM_SHIFT) | (7), // FTM1 CH7 - PWM_17 = (2 << TPM_SHIFT) | (0), // FTM2 CH0 - PWM_18 = (2 << TPM_SHIFT) | (1), // FTM2 CH1 - PWM_19 = (2 << TPM_SHIFT) | (2), // FTM2 CH2 - PWM_20 = (2 << TPM_SHIFT) | (3), // FTM2 CH3 - PWM_21 = (2 << TPM_SHIFT) | (4), // FTM2 CH4 - PWM_22 = (2 << TPM_SHIFT) | (5), // FTM2 CH5 - PWM_23 = (2 << TPM_SHIFT) | (6), // FTM2 CH6 - PWM_24 = (2 << TPM_SHIFT) | (7), // FTM2 CH7 - // could be 4 or could be 3... not sure what register - // this is for... too much abstraction - PWM_25 = (3 << TPM_SHIFT) | (0), // FTM3 CH0 - PWM_26 = (3 << TPM_SHIFT) | (1), // FTM3 CH1 - PWM_27 = (3 << TPM_SHIFT) | (2), // FTM3 CH2 - PWM_28 = (3 << TPM_SHIFT) | (3), // FTM3 CH3 - PWM_29 = (3 << TPM_SHIFT) | (4), // FTM3 CH4 - PWM_30 = (3 << TPM_SHIFT) | (5), // FTM3 CH5 - PWM_31 = (3 << TPM_SHIFT) | (6), // FTM3 CH6 - PWM_32 = (3 << TPM_SHIFT) | (7), // FTM3 CH7 -} PWMName; - -#define ADC_INSTANCE_SHIFT 8 -#define ADC_B_CHANNEL_SHIFT 5 -typedef enum { - ADC0_SE4b = (0 << ADC_INSTANCE_SHIFT) | (1 << ADC_B_CHANNEL_SHIFT) | 4, - ADC0_SE5b = (0 << ADC_INSTANCE_SHIFT) | (1 << ADC_B_CHANNEL_SHIFT) | 5, - ADC0_SE6b = (0 << ADC_INSTANCE_SHIFT) | (1 << ADC_B_CHANNEL_SHIFT) | 6, - ADC0_SE7b = (0 << ADC_INSTANCE_SHIFT) | (1 << ADC_B_CHANNEL_SHIFT) | 7, - ADC0_SE8 = (0 << ADC_INSTANCE_SHIFT) | 8, - ADC0_SE9 = (0 << ADC_INSTANCE_SHIFT) | 9, - ADC0_SE12 = (0 << ADC_INSTANCE_SHIFT) | 12, - ADC0_SE13 = (0 << ADC_INSTANCE_SHIFT) | 13, - ADC0_SE14 = (0 << ADC_INSTANCE_SHIFT) | 14, - ADC0_SE15 = (0 << ADC_INSTANCE_SHIFT) | 15, - ADC0_SE16 = (0 << ADC_INSTANCE_SHIFT) | 16, - ADC0_SE17 = (0 << ADC_INSTANCE_SHIFT) | 17, - ADC0_SE18 = (0 << ADC_INSTANCE_SHIFT) | 18, - ADC1_SE4b = (1 << ADC_INSTANCE_SHIFT) | 4, - ADC1_SE5b = (1 << ADC_INSTANCE_SHIFT) | 5, - ADC1_SE6b = (1 << ADC_INSTANCE_SHIFT) | 6, - ADC1_SE7b = (1 << ADC_INSTANCE_SHIFT) | 7, - ADC1_SE8 = (1 << ADC_INSTANCE_SHIFT) | 8, - ADC1_SE9 = (1 << ADC_INSTANCE_SHIFT) | 9, - ADC1_SE12 = (1 << ADC_INSTANCE_SHIFT) | 12, - ADC1_SE13 = (1 << ADC_INSTANCE_SHIFT) | 13, - ADC1_SE14 = (1 << ADC_INSTANCE_SHIFT) | 14, - ADC1_SE15 = (1 << ADC_INSTANCE_SHIFT) | 15, - ADC1_SE16 = (1 << ADC_INSTANCE_SHIFT) | 16, - ADC1_SE17 = (1 << ADC_INSTANCE_SHIFT) | 17, - ADC1_SE18 = (1 << ADC_INSTANCE_SHIFT) | 18, -} ADCName; - -typedef enum { - DAC_0 = 0 -} DACName; - - -typedef enum { - SPI_0 = 0, - SPI_1 = 1, - SPI_2 = 2, -} SPIName; - -#ifdef __cplusplus -} -#endif - -#endif
--- a/TARGET_K64F/TARGET_Freescale/TARGET_KPSDK_MCUS/PortNames.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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 MBED_PORTNAMES_H -#define MBED_PORTNAMES_H - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - PortA = 0, - PortB = 1, - PortC = 2, - PortD = 3, - PortE = 4 -} PortName; - -#ifdef __cplusplus -} -#endif - -#endif
--- a/TARGET_K64F/TARGET_Freescale/TARGET_KPSDK_MCUS/device.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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 MBED_DEVICE_H -#define MBED_DEVICE_H - -#define DEVICE_PORTIN 1 -#define DEVICE_PORTOUT 1 -#define DEVICE_PORTINOUT 1 - -#define DEVICE_INTERRUPTIN 1 - -#define DEVICE_ANALOGIN 1 -#define DEVICE_ANALOGOUT 1 - -#define DEVICE_SERIAL 1 - -#define DEVICE_I2C 1 -#define DEVICE_I2CSLAVE 1 - -#define DEVICE_SPI 1 -#define DEVICE_SPISLAVE 1 - -#define DEVICE_CAN 0 - -#define DEVICE_RTC 1 - -#define DEVICE_ETHERNET 0 - -#define DEVICE_PWMOUT 1 - -#define DEVICE_SEMIHOST 0 -#define DEVICE_LOCALFILESYSTEM 0 -#define DEVICE_ID_LENGTH 24 - -#define DEVICE_SLEEP 1 - -#define DEVICE_DEBUG_AWARENESS 0 - -#define DEVICE_STDIO_MESSAGES 1 - -#define DEVICE_ERROR_RED 1 - -#include "objects.h" - -#endif
--- a/TARGET_K64F/TARGET_Freescale/TARGET_KPSDK_MCUS/gpio_object.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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 MBED_GPIO_OBJECT_H -#define MBED_GPIO_OBJECT_H - -#include "mbed_assert.h" -#include "fsl_gpio_hal.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - PinName pinName; -} gpio_t; - -static inline void gpio_write(gpio_t *obj, int value) { - MBED_ASSERT(obj->pinName != (PinName)NC); - uint32_t port = obj->pinName >> GPIO_PORT_SHIFT; - uint32_t pin = obj->pinName & 0xFF; - - gpio_hal_write_pin_output(port, pin, value); -} - -static inline int gpio_read(gpio_t *obj) { - MBED_ASSERT(obj->pinName != (PinName)NC); - uint32_t port = obj->pinName >> GPIO_PORT_SHIFT; - uint32_t pin = obj->pinName & 0xFF; - - return (int)gpio_hal_read_pin_input(port, pin); -} - -#ifdef __cplusplus -} -#endif - -#endif
--- a/TARGET_K64F/TARGET_Freescale/TARGET_KPSDK_MCUS/objects.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,69 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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 MBED_OBJECTS_H -#define MBED_OBJECTS_H - -#include "cmsis.h" -#include "PortNames.h" -#include "PeripheralNames.h" -#include "PinNames.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct gpio_irq_s { - uint32_t port; - uint32_t pin; - uint32_t ch; -}; - -struct port_s { - PortName port; - uint32_t mask; -}; - -struct pwmout_s { - PWMName pwm_name; -}; - -struct serial_s { - int index; -}; - -struct analogin_s { - ADCName adc; -}; - -struct i2c_s { - uint32_t instance; -}; - -struct spi_s { - uint32_t instance; -}; - -struct dac_s { - DACName dac; -}; - -#include "gpio_object.h" - -#ifdef __cplusplus -} -#endif - -#endif
Binary file TARGET_K64F/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_K64F/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_K64F/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_K64F/TOOLCHAIN_ARM_STD/mbed_overrides.o has changed
Binary file TARGET_K64F/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_K64F/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_K64F/TOOLCHAIN_ARM_STD/system_MK64F12.o has changed
Binary file TARGET_K64F/TOOLCHAIN_GCC_ARM/board.o has changed
Binary file TARGET_K64F/TOOLCHAIN_GCC_ARM/libmbed.a has changed
Binary file TARGET_K64F/TOOLCHAIN_GCC_ARM/retarget.o has changed
Binary file TARGET_KL05Z/TOOLCHAIN_ARM_MICRO/board.o has changed
Binary file TARGET_KL05Z/TOOLCHAIN_ARM_MICRO/cmsis_nvic.o has changed
Binary file TARGET_KL05Z/TOOLCHAIN_ARM_MICRO/mbed.ar has changed
Binary file TARGET_KL05Z/TOOLCHAIN_ARM_MICRO/mbed_overrides.o has changed
Binary file TARGET_KL05Z/TOOLCHAIN_ARM_MICRO/retarget.o has changed
Binary file TARGET_KL05Z/TOOLCHAIN_ARM_MICRO/sys.o has changed
Binary file TARGET_KL05Z/TOOLCHAIN_ARM_MICRO/system_MKL05Z4.o has changed
Binary file TARGET_KL05Z/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_KL05Z/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_KL05Z/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_KL05Z/TOOLCHAIN_ARM_STD/mbed_overrides.o has changed
Binary file TARGET_KL05Z/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_KL05Z/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_KL05Z/TOOLCHAIN_ARM_STD/system_MKL05Z4.o has changed
Binary file TARGET_KL05Z/TOOLCHAIN_GCC_ARM/libmbed.a has changed
Binary file TARGET_KL05Z/TOOLCHAIN_GCC_ARM/retarget.o has changed
Binary file TARGET_KL25Z/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_KL25Z/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_KL25Z/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_KL25Z/TOOLCHAIN_ARM_STD/mbed_overrides.o has changed
Binary file TARGET_KL25Z/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_KL25Z/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_KL25Z/TOOLCHAIN_ARM_STD/system_MKL25Z4.o has changed
Binary file TARGET_KL25Z/TOOLCHAIN_GCC_ARM/libmbed.a has changed
Binary file TARGET_KL25Z/TOOLCHAIN_GCC_ARM/retarget.o has changed
Binary file TARGET_KL46Z/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_KL46Z/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_KL46Z/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_KL46Z/TOOLCHAIN_ARM_STD/mbed_overrides.o has changed
Binary file TARGET_KL46Z/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_KL46Z/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_KL46Z/TOOLCHAIN_ARM_STD/system_MKL46Z4.o has changed
Binary file TARGET_KL46Z/TOOLCHAIN_GCC_ARM/libmbed.a has changed
Binary file TARGET_KL46Z/TOOLCHAIN_GCC_ARM/retarget.o has changed
--- a/TARGET_LPC1114/TARGET_NXP/TARGET_LPC11XX_11CXX/TARGET_LPC11XX/device.h Fri Jul 25 09:46:51 2014 +0100 +++ b/TARGET_LPC1114/TARGET_NXP/TARGET_LPC11XX_11CXX/TARGET_LPC11XX/device.h Fri Aug 15 15:28:31 2014 +0100 @@ -41,8 +41,8 @@ #define DEVICE_PWMOUT 1 -#define DEVICE_SEMIHOST 1 -#define DEVICE_LOCALFILESYSTEM 1 +#define DEVICE_SEMIHOST 0 +#define DEVICE_LOCALFILESYSTEM 0 #define DEVICE_ID_LENGTH 32 #define DEVICE_MAC_OFFSET 20
Binary file TARGET_LPC1114/TOOLCHAIN_ARM_MICRO/board.o has changed
Binary file TARGET_LPC1114/TOOLCHAIN_ARM_MICRO/cmsis_nvic.o has changed
Binary file TARGET_LPC1114/TOOLCHAIN_ARM_MICRO/mbed.ar has changed
Binary file TARGET_LPC1114/TOOLCHAIN_ARM_MICRO/retarget.o has changed
Binary file TARGET_LPC1114/TOOLCHAIN_ARM_MICRO/sys.o has changed
Binary file TARGET_LPC1114/TOOLCHAIN_ARM_MICRO/system_LPC11xx.o has changed
Binary file TARGET_LPC1114/TOOLCHAIN_GCC_ARM/libmbed.a has changed
Binary file TARGET_LPC1114/TOOLCHAIN_GCC_ARM/retarget.o has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_LPC11U24/TARGET_NXP/TARGET_LPC11UXX/PeripheralPins.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,43 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * 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 MBED_PERIPHERALPINS_H +#define MBED_PERIPHERALPINS_H + +#include "pinmap.h" +#include "PeripheralNames.h" + +/************ADC***************/ +extern const PinMap PinMap_ADC[]; + +/************I2C***************/ +extern const PinMap PinMap_I2C_SDA[]; +extern const PinMap PinMap_I2C_SCL[]; + +/************UART***************/ +extern const PinMap PinMap_UART_TX[]; +extern const PinMap PinMap_UART_RX[]; + +/************SPI***************/ +extern const PinMap PinMap_SPI_SCLK[]; +extern const PinMap PinMap_SPI_MOSI[]; +extern const PinMap PinMap_SPI_MISO[]; +extern const PinMap PinMap_SPI_SSEL[]; + +/************PWM***************/ +extern const PinMap PinMap_PWM[]; + +#endif
Binary file TARGET_LPC11U24/TOOLCHAIN_ARM_MICRO/board.o has changed
Binary file TARGET_LPC11U24/TOOLCHAIN_ARM_MICRO/cmsis_nvic.o has changed
Binary file TARGET_LPC11U24/TOOLCHAIN_ARM_MICRO/mbed.ar has changed
Binary file TARGET_LPC11U24/TOOLCHAIN_ARM_MICRO/retarget.o has changed
Binary file TARGET_LPC11U24/TOOLCHAIN_ARM_MICRO/sys.o has changed
Binary file TARGET_LPC11U24/TOOLCHAIN_ARM_MICRO/system_LPC11Uxx.o has changed
Binary file TARGET_LPC11U24/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_LPC11U24/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_LPC11U24/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_LPC11U24/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_LPC11U24/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_LPC11U24/TOOLCHAIN_ARM_STD/system_LPC11Uxx.o has changed
Binary file TARGET_LPC11U24/TOOLCHAIN_GCC_ARM/libmbed.a has changed
Binary file TARGET_LPC11U24/TOOLCHAIN_GCC_ARM/retarget.o has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_LPC11U35_401/TARGET_NXP/TARGET_LPC11UXX/PeripheralPins.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,43 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * 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 MBED_PERIPHERALPINS_H +#define MBED_PERIPHERALPINS_H + +#include "pinmap.h" +#include "PeripheralNames.h" + +/************ADC***************/ +extern const PinMap PinMap_ADC[]; + +/************I2C***************/ +extern const PinMap PinMap_I2C_SDA[]; +extern const PinMap PinMap_I2C_SCL[]; + +/************UART***************/ +extern const PinMap PinMap_UART_TX[]; +extern const PinMap PinMap_UART_RX[]; + +/************SPI***************/ +extern const PinMap PinMap_SPI_SCLK[]; +extern const PinMap PinMap_SPI_MOSI[]; +extern const PinMap PinMap_SPI_MISO[]; +extern const PinMap PinMap_SPI_SSEL[]; + +/************PWM***************/ +extern const PinMap PinMap_PWM[]; + +#endif
Binary file TARGET_LPC11U35_401/TOOLCHAIN_ARM_MICRO/board.o has changed
Binary file TARGET_LPC11U35_401/TOOLCHAIN_ARM_MICRO/cmsis_nvic.o has changed
Binary file TARGET_LPC11U35_401/TOOLCHAIN_ARM_MICRO/mbed.ar has changed
Binary file TARGET_LPC11U35_401/TOOLCHAIN_ARM_MICRO/retarget.o has changed
Binary file TARGET_LPC11U35_401/TOOLCHAIN_ARM_MICRO/sys.o has changed
Binary file TARGET_LPC11U35_401/TOOLCHAIN_ARM_MICRO/system_LPC11Uxx.o has changed
Binary file TARGET_LPC11U35_401/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_LPC11U35_401/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_LPC11U35_401/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_LPC11U35_401/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_LPC11U35_401/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_LPC11U35_401/TOOLCHAIN_ARM_STD/system_LPC11Uxx.o has changed
Binary file TARGET_LPC11U35_401/TOOLCHAIN_GCC_ARM/libmbed.a has changed
Binary file TARGET_LPC11U35_401/TOOLCHAIN_GCC_ARM/retarget.o has changed
Binary file TARGET_LPC11U35_401/TOOLCHAIN_GCC_CR/libmbed.a has changed
Binary file TARGET_LPC11U35_401/TOOLCHAIN_GCC_CR/retarget.o has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_LPC11U35_501/TARGET_NXP/TARGET_LPC11UXX/PeripheralPins.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,43 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * 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 MBED_PERIPHERALPINS_H +#define MBED_PERIPHERALPINS_H + +#include "pinmap.h" +#include "PeripheralNames.h" + +/************ADC***************/ +extern const PinMap PinMap_ADC[]; + +/************I2C***************/ +extern const PinMap PinMap_I2C_SDA[]; +extern const PinMap PinMap_I2C_SCL[]; + +/************UART***************/ +extern const PinMap PinMap_UART_TX[]; +extern const PinMap PinMap_UART_RX[]; + +/************SPI***************/ +extern const PinMap PinMap_SPI_SCLK[]; +extern const PinMap PinMap_SPI_MOSI[]; +extern const PinMap PinMap_SPI_MISO[]; +extern const PinMap PinMap_SPI_SSEL[]; + +/************PWM***************/ +extern const PinMap PinMap_PWM[]; + +#endif
--- a/TARGET_LPC11U35_501/TARGET_NXP/TARGET_LPC11UXX/TARGET_LPC11U35_501/PeripheralNames.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,71 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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 MBED_PERIPHERALNAMES_H -#define MBED_PERIPHERALNAMES_H - -#include "cmsis.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - UART_0 = (int)LPC_USART_BASE -} UARTName; - -typedef enum { - I2C_0 = (int)LPC_I2C_BASE -} I2CName; - -typedef enum { - ADC0_0 = 0, - ADC0_1, - ADC0_2, - ADC0_3, - ADC0_4, - ADC0_5, - ADC0_6, - ADC0_7 -} ADCName; - -typedef enum { - SPI_0 = (int)LPC_SSP0_BASE, - SPI_1 = (int)LPC_SSP1_BASE -} SPIName; - -typedef enum { - PWM_1 = 0, - PWM_2, - PWM_3, - PWM_4, - PWM_5, - PWM_6, - PWM_7, - PWM_8, - PWM_9, - PWM_10, - PWM_11 -} PWMName; - -#define STDIO_UART_TX UART_TX -#define STDIO_UART_RX UART_RX -#define STDIO_UART UART_0 - -#ifdef __cplusplus -} -#endif - -#endif
--- a/TARGET_LPC11U35_501/TARGET_NXP/TARGET_LPC11UXX/TARGET_LPC11U35_501/PinNames.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,176 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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 MBED_PINNAMES_H -#define MBED_PINNAMES_H - -#include "cmsis.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - PIN_INPUT, - PIN_OUTPUT -} PinDirection; - -#define PORT_SHIFT 5 - -typedef enum { - // LPC11U Pin Names - P0_0 = 0, - P0_1 = 1, - P0_2 = 2, - P0_3 = 3, - P0_4 = 4, - P0_5 = 5, - P0_6 = 6, - P0_7 = 7, - P0_8 = 8, - P0_9 = 9, - P0_10 = 10, - P0_11 = 11, - P0_12 = 12, - P0_13 = 13, - P0_14 = 14, - P0_15 = 15, - P0_16 = 16, - P0_17 = 17, - P0_18 = 18, - P0_19 = 19, - P0_20 = 20, - P0_21 = 21, - P0_22 = 22, - P0_23 = 23, - P0_24 = 24, - P0_25 = 25, - P0_26 = 26, - P0_27 = 27, - - P1_0 = 32, - P1_1 = 33, - P1_2 = 34, - P1_3 = 35, - P1_4 = 36, - P1_5 = 37, - P1_6 = 38, - P1_7 = 39, - P1_8 = 40, - P1_9 = 41, - P1_10 = 42, - P1_11 = 43, - P1_12 = 44, - P1_13 = 45, - P1_14 = 46, - P1_15 = 47, - P1_16 = 48, - P1_17 = 49, - P1_18 = 50, - P1_19 = 51, - P1_20 = 52, - P1_21 = 53, - P1_22 = 54, - P1_23 = 55, - P1_24 = 56, - P1_25 = 57, - P1_26 = 58, - P1_27 = 59, - P1_28 = 60, - P1_29 = 61, - - P1_31 = 63, - - // mbed DIP Pin Names - // CN1-1 (GND) - // CN1-2 (EXTPOWER) - // CN1-3 (NC) - p4 = P0_0, // CN1-4 - p5 = P0_9, // CN1-5 - p6 = P0_8, // CN1-6 - p7 = P0_10, // CN1-7 - p8 = P0_7, // CN1-8 - p9 = P0_19, // CN1-9 - p10 = P0_18, // CN1-10 - p11 = P0_21, // CN1-11 - p12 = P0_22, // CN1-12 - p13 = P1_15, // CN1-13 - p14 = P0_6, // CN1-14 - p15 = P0_11, // CN1-15 - p16 = P0_12, // CN1-16 - p17 = P0_13, // CN1-17 - p18 = P0_14, // CN1-18 - p19 = P0_15, // CN1-19 - p20 = P0_16, // CN1-20 - - p21 = P0_14, // CN2-20 - p22 = P0_2, // CN2-19 - p23 = P0_23, // CN2-18 - p24 = P0_17, // CN2-17 - p25 = P0_20, // CN2-16 - p26 = P1_15, // CN2-15 - p27 = P0_4, // CN2-14 - p28 = P0_5, // CN2-13 - p29 = P1_19, // CN2-12 - p30 = P0_1, // CN2-11 - // CN2-10 (D+USB) - // CN2-9 (D-USB) - p33 = P0_3, // CN2-8 (USB-VBUS) - // CN2-7 (NC) - // CN2-6 (NC) - // CN2-5 (NC) - // CN2-4 (NC) - // CN2-3 (NC) - // CN2-2 (VDD) - // CN2-1 (VDD) - - // Other mbed Pin Names - LED1 = P0_20, - LED2 = P0_21, - LED3 = P0_20, - LED4 = P0_21, - - UART_TX = P0_19, - UART_RX = P0_18, - - // Not connected - NC = (int)0xFFFFFFFF, -} PinName; - -typedef enum { - CHANNEL0 = FLEX_INT0_IRQn, - CHANNEL1 = FLEX_INT1_IRQn, - CHANNEL2 = FLEX_INT2_IRQn, - CHANNEL3 = FLEX_INT3_IRQn, - CHANNEL4 = FLEX_INT4_IRQn, - CHANNEL5 = FLEX_INT5_IRQn, - CHANNEL6 = FLEX_INT6_IRQn, - CHANNEL7 = FLEX_INT7_IRQn -} Channel; - -typedef enum { - PullUp = 2, - PullDown = 1, - PullNone = 0, - Repeater = 3, - OpenDrain = 4, - PullDefault = PullDown -} PinMode; - -#ifdef __cplusplus -} -#endif - -#endif
--- a/TARGET_LPC11U35_501/TARGET_NXP/TARGET_LPC11UXX/TARGET_LPC11U35_501/device.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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 MBED_DEVICE_H -#define MBED_DEVICE_H - -#define DEVICE_PORTIN 1 -#define DEVICE_PORTOUT 1 -#define DEVICE_PORTINOUT 1 - -#define DEVICE_INTERRUPTIN 1 - -#define DEVICE_ANALOGIN 1 -#define DEVICE_ANALOGOUT 0 - -#define DEVICE_SERIAL 1 - -#define DEVICE_I2C 1 -#define DEVICE_I2CSLAVE 1 - -#define DEVICE_SPI 1 -#define DEVICE_SPISLAVE 1 - -#define DEVICE_CAN 0 - -#define DEVICE_RTC 0 - -#define DEVICE_ETHERNET 0 - -#define DEVICE_PWMOUT 1 - -#define DEVICE_SEMIHOST 0 -#define DEVICE_LOCALFILESYSTEM 0 -#define DEVICE_ID_LENGTH 32 -#define DEVICE_MAC_OFFSET 20 - -#define DEVICE_SLEEP 1 - -#define DEVICE_DEBUG_AWARENESS 0 - -#define DEVICE_STDIO_MESSAGES 0 - -#define DEVICE_ERROR_PATTERN 1 - -#include "objects.h" - -#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_LPC11U35_501/TARGET_NXP/TARGET_LPC11UXX/TARGET_MCU_LPC11U35_501/PeripheralNames.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,71 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * 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 MBED_PERIPHERALNAMES_H +#define MBED_PERIPHERALNAMES_H + +#include "cmsis.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + UART_0 = (int)LPC_USART_BASE +} UARTName; + +typedef enum { + I2C_0 = (int)LPC_I2C_BASE +} I2CName; + +typedef enum { + ADC0_0 = 0, + ADC0_1, + ADC0_2, + ADC0_3, + ADC0_4, + ADC0_5, + ADC0_6, + ADC0_7 +} ADCName; + +typedef enum { + SPI_0 = (int)LPC_SSP0_BASE, + SPI_1 = (int)LPC_SSP1_BASE +} SPIName; + +typedef enum { + PWM_1 = 0, + PWM_2, + PWM_3, + PWM_4, + PWM_5, + PWM_6, + PWM_7, + PWM_8, + PWM_9, + PWM_10, + PWM_11 +} PWMName; + +#define STDIO_UART_TX UART_TX +#define STDIO_UART_RX UART_RX +#define STDIO_UART UART_0 + +#ifdef __cplusplus +} +#endif + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_LPC11U35_501/TARGET_NXP/TARGET_LPC11UXX/TARGET_MCU_LPC11U35_501/TARGET_LPC11U35_501/PinNames.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,176 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * 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 MBED_PINNAMES_H +#define MBED_PINNAMES_H + +#include "cmsis.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + PIN_INPUT, + PIN_OUTPUT +} PinDirection; + +#define PORT_SHIFT 5 + +typedef enum { + // LPC11U Pin Names + P0_0 = 0, + P0_1 = 1, + P0_2 = 2, + P0_3 = 3, + P0_4 = 4, + P0_5 = 5, + P0_6 = 6, + P0_7 = 7, + P0_8 = 8, + P0_9 = 9, + P0_10 = 10, + P0_11 = 11, + P0_12 = 12, + P0_13 = 13, + P0_14 = 14, + P0_15 = 15, + P0_16 = 16, + P0_17 = 17, + P0_18 = 18, + P0_19 = 19, + P0_20 = 20, + P0_21 = 21, + P0_22 = 22, + P0_23 = 23, + P0_24 = 24, + P0_25 = 25, + P0_26 = 26, + P0_27 = 27, + + P1_0 = 32, + P1_1 = 33, + P1_2 = 34, + P1_3 = 35, + P1_4 = 36, + P1_5 = 37, + P1_6 = 38, + P1_7 = 39, + P1_8 = 40, + P1_9 = 41, + P1_10 = 42, + P1_11 = 43, + P1_12 = 44, + P1_13 = 45, + P1_14 = 46, + P1_15 = 47, + P1_16 = 48, + P1_17 = 49, + P1_18 = 50, + P1_19 = 51, + P1_20 = 52, + P1_21 = 53, + P1_22 = 54, + P1_23 = 55, + P1_24 = 56, + P1_25 = 57, + P1_26 = 58, + P1_27 = 59, + P1_28 = 60, + P1_29 = 61, + + P1_31 = 63, + + // mbed DIP Pin Names + // CN1-1 (GND) + // CN1-2 (EXTPOWER) + // CN1-3 (NC) + p4 = P0_0, // CN1-4 + p5 = P0_9, // CN1-5 + p6 = P0_8, // CN1-6 + p7 = P0_10, // CN1-7 + p8 = P0_7, // CN1-8 + p9 = P0_19, // CN1-9 + p10 = P0_18, // CN1-10 + p11 = P0_21, // CN1-11 + p12 = P0_22, // CN1-12 + p13 = P1_15, // CN1-13 + p14 = P0_6, // CN1-14 + p15 = P0_11, // CN1-15 + p16 = P0_12, // CN1-16 + p17 = P0_13, // CN1-17 + p18 = P0_14, // CN1-18 + p19 = P0_15, // CN1-19 + p20 = P0_16, // CN1-20 + + p21 = P0_14, // CN2-20 + p22 = P0_2, // CN2-19 + p23 = P0_23, // CN2-18 + p24 = P0_17, // CN2-17 + p25 = P0_20, // CN2-16 + p26 = P1_15, // CN2-15 + p27 = P0_4, // CN2-14 + p28 = P0_5, // CN2-13 + p29 = P1_19, // CN2-12 + p30 = P0_1, // CN2-11 + // CN2-10 (D+USB) + // CN2-9 (D-USB) + p33 = P0_3, // CN2-8 (USB-VBUS) + // CN2-7 (NC) + // CN2-6 (NC) + // CN2-5 (NC) + // CN2-4 (NC) + // CN2-3 (NC) + // CN2-2 (VDD) + // CN2-1 (VDD) + + // Other mbed Pin Names + LED1 = P0_20, + LED2 = P0_21, + LED3 = P0_20, + LED4 = P0_21, + + UART_TX = P0_19, + UART_RX = P0_18, + + // Not connected + NC = (int)0xFFFFFFFF, +} PinName; + +typedef enum { + CHANNEL0 = FLEX_INT0_IRQn, + CHANNEL1 = FLEX_INT1_IRQn, + CHANNEL2 = FLEX_INT2_IRQn, + CHANNEL3 = FLEX_INT3_IRQn, + CHANNEL4 = FLEX_INT4_IRQn, + CHANNEL5 = FLEX_INT5_IRQn, + CHANNEL6 = FLEX_INT6_IRQn, + CHANNEL7 = FLEX_INT7_IRQn +} Channel; + +typedef enum { + PullUp = 2, + PullDown = 1, + PullNone = 0, + Repeater = 3, + OpenDrain = 4, + PullDefault = PullDown +} PinMode; + +#ifdef __cplusplus +} +#endif + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_LPC11U35_501/TARGET_NXP/TARGET_LPC11UXX/TARGET_MCU_LPC11U35_501/TARGET_LPC11U35_501/device.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,59 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * 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 MBED_DEVICE_H +#define MBED_DEVICE_H + +#define DEVICE_PORTIN 1 +#define DEVICE_PORTOUT 1 +#define DEVICE_PORTINOUT 1 + +#define DEVICE_INTERRUPTIN 1 + +#define DEVICE_ANALOGIN 1 +#define DEVICE_ANALOGOUT 0 + +#define DEVICE_SERIAL 1 + +#define DEVICE_I2C 1 +#define DEVICE_I2CSLAVE 1 + +#define DEVICE_SPI 1 +#define DEVICE_SPISLAVE 1 + +#define DEVICE_CAN 0 + +#define DEVICE_RTC 0 + +#define DEVICE_ETHERNET 0 + +#define DEVICE_PWMOUT 1 + +#define DEVICE_SEMIHOST 0 +#define DEVICE_LOCALFILESYSTEM 0 +#define DEVICE_ID_LENGTH 32 +#define DEVICE_MAC_OFFSET 20 + +#define DEVICE_SLEEP 1 + +#define DEVICE_DEBUG_AWARENESS 0 + +#define DEVICE_STDIO_MESSAGES 0 + +#define DEVICE_ERROR_PATTERN 1 + +#include "objects.h" + +#endif
Binary file TARGET_LPC11U35_501/TOOLCHAIN_ARM_MICRO/board.o has changed
Binary file TARGET_LPC11U35_501/TOOLCHAIN_ARM_MICRO/cmsis_nvic.o has changed
Binary file TARGET_LPC11U35_501/TOOLCHAIN_ARM_MICRO/mbed.ar has changed
Binary file TARGET_LPC11U35_501/TOOLCHAIN_ARM_MICRO/retarget.o has changed
Binary file TARGET_LPC11U35_501/TOOLCHAIN_ARM_MICRO/startup_LPC11xx.o has changed
Binary file TARGET_LPC11U35_501/TOOLCHAIN_ARM_MICRO/sys.o has changed
Binary file TARGET_LPC11U35_501/TOOLCHAIN_ARM_MICRO/system_LPC11Uxx.o has changed
Binary file TARGET_LPC11U35_501/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_LPC11U35_501/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_LPC11U35_501/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_LPC11U35_501/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_LPC11U35_501/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_LPC11U35_501/TOOLCHAIN_ARM_STD/system_LPC11Uxx.o has changed
Binary file TARGET_LPC11U35_501/TOOLCHAIN_GCC_ARM/libmbed.a has changed
Binary file TARGET_LPC11U35_501/TOOLCHAIN_GCC_ARM/retarget.o has changed
Binary file TARGET_LPC11U35_501/TOOLCHAIN_GCC_CR/libmbed.a has changed
Binary file TARGET_LPC11U35_501/TOOLCHAIN_GCC_CR/retarget.o has changed
Binary file TARGET_LPC11U68/TOOLCHAIN_ARM_MICRO/board.o has changed
Binary file TARGET_LPC11U68/TOOLCHAIN_ARM_MICRO/cmsis_nvic.o has changed
Binary file TARGET_LPC11U68/TOOLCHAIN_ARM_MICRO/mbed.ar has changed
Binary file TARGET_LPC11U68/TOOLCHAIN_ARM_MICRO/retarget.o has changed
Binary file TARGET_LPC11U68/TOOLCHAIN_ARM_MICRO/sys.o has changed
Binary file TARGET_LPC11U68/TOOLCHAIN_ARM_MICRO/system_LPC11U6x.o has changed
Binary file TARGET_LPC11U68/TOOLCHAIN_GCC_ARM/libmbed.a has changed
Binary file TARGET_LPC11U68/TOOLCHAIN_GCC_ARM/retarget.o has changed
Binary file TARGET_LPC11U68/TOOLCHAIN_GCC_CR/libmbed.a has changed
Binary file TARGET_LPC11U68/TOOLCHAIN_GCC_CR/retarget.o has changed
Binary file TARGET_LPC1347/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_LPC1347/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_LPC1347/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_LPC1347/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_LPC1347/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_LPC1347/TOOLCHAIN_ARM_STD/system_LPC13Uxx.o has changed
Binary file TARGET_LPC1549/TOOLCHAIN_ARM_MICRO/board.o has changed
Binary file TARGET_LPC1549/TOOLCHAIN_ARM_MICRO/cmsis_nvic.o has changed
Binary file TARGET_LPC1549/TOOLCHAIN_ARM_MICRO/mbed.ar has changed
Binary file TARGET_LPC1549/TOOLCHAIN_ARM_MICRO/retarget.o has changed
Binary file TARGET_LPC1549/TOOLCHAIN_ARM_MICRO/sys.o has changed
Binary file TARGET_LPC1549/TOOLCHAIN_ARM_MICRO/system_LPC15xx.o has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_LPC1549/TOOLCHAIN_GCC_ARM/LPC1549.ld Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,154 @@ +/* Linker script for mbed LPC1549 */ + +/* Linker script to configure memory regions. */ +MEMORY +{ + /* Define each memory region */ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 256K + Ram0_16 (rwx) : ORIGIN = 0x2000000 + 0x100, LENGTH = (16K - 0x100) + Ram1_16 (rwx) : ORIGIN = 0x2004000, LENGTH = 16K + Ram2_4 (rwx) : ORIGIN = 0x2008000, LENGTH = 4K + +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + Image$$RW_IRAM1$$Base = .; + *(vtable) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE (__fini_array_end = .); + + . = ALIGN(4); + /* All data end */ + __data_end__ = .; + + } > Ram0_16 + + + .bss : + { + __bss_start__ = .; + *(.bss*) + *(COMMON) + __bss_end__ = .; + Image$$RW_IRAM1$$ZI$$Limit = . ; + } > Ram0_16 + + + .heap : + { + __end__ = .; + end = __end__; + *(.heap*) + __HeapLimit = .; + } > Ram0_16 + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy : + { + *(.stack) + } > Ram0_16 + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(Ram0_16) + LENGTH(Ram0_16); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +}
Binary file TARGET_LPC1549/TOOLCHAIN_GCC_ARM/board.o has changed
Binary file TARGET_LPC1549/TOOLCHAIN_GCC_ARM/cmsis_nvic.o has changed
Binary file TARGET_LPC1549/TOOLCHAIN_GCC_ARM/libmbed.a has changed
Binary file TARGET_LPC1549/TOOLCHAIN_GCC_ARM/retarget.o has changed
Binary file TARGET_LPC1549/TOOLCHAIN_GCC_ARM/startup_LPC15xx.o has changed
Binary file TARGET_LPC1549/TOOLCHAIN_GCC_ARM/system_LPC15xx.o has changed
Binary file TARGET_LPC1549/TOOLCHAIN_GCC_CR/libmbed.a has changed
Binary file TARGET_LPC1549/TOOLCHAIN_GCC_CR/retarget.o has changed
Binary file TARGET_LPC1768/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_LPC1768/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_LPC1768/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_LPC1768/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_LPC1768/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_LPC1768/TOOLCHAIN_ARM_STD/system_LPC17xx.o has changed
Binary file TARGET_LPC1768/TOOLCHAIN_GCC_ARM/libmbed.a has changed
Binary file TARGET_LPC1768/TOOLCHAIN_GCC_ARM/retarget.o has changed
Binary file TARGET_LPC1768/TOOLCHAIN_GCC_CR/libmbed.a has changed
Binary file TARGET_LPC1768/TOOLCHAIN_GCC_CR/retarget.o has changed
Binary file TARGET_LPC1768/TOOLCHAIN_GCC_CS/libmbed.a has changed
Binary file TARGET_LPC1768/TOOLCHAIN_GCC_CS/retarget.o has changed
Binary file TARGET_LPC1768/TOOLCHAIN_IAR/board.o has changed
Binary file TARGET_LPC1768/TOOLCHAIN_IAR/cmsis_nvic.o has changed
Binary file TARGET_LPC1768/TOOLCHAIN_IAR/mbed.a has changed
Binary file TARGET_LPC1768/TOOLCHAIN_IAR/retarget.o has changed
Binary file TARGET_LPC1768/TOOLCHAIN_IAR/startup_LPC17xx.o has changed
Binary file TARGET_LPC1768/TOOLCHAIN_IAR/system_LPC17xx.o has changed
Binary file TARGET_LPC2368/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_LPC2368/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_LPC2368/TOOLCHAIN_ARM_STD/core_arm7.o has changed
Binary file TARGET_LPC2368/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_LPC2368/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_LPC2368/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_LPC2368/TOOLCHAIN_ARM_STD/system_LPC23xx.o has changed
Binary file TARGET_LPC2368/TOOLCHAIN_ARM_STD/vector_realmonitor.o has changed
Binary file TARGET_LPC4088/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_LPC4088/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_LPC4088/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_LPC4088/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_LPC4088/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_LPC4088/TOOLCHAIN_ARM_STD/sys_helper.o has changed
Binary file TARGET_LPC4088/TOOLCHAIN_ARM_STD/system_LPC407x_8x_177x_8x.o has changed
Binary file TARGET_LPC4088/TOOLCHAIN_GCC_ARM/libmbed.a has changed
Binary file TARGET_LPC4088/TOOLCHAIN_GCC_ARM/retarget.o has changed
Binary file TARGET_LPC4088/TOOLCHAIN_GCC_CR/libmbed.a has changed
Binary file TARGET_LPC4088/TOOLCHAIN_GCC_CR/retarget.o has changed
Binary file TARGET_LPC812/TOOLCHAIN_ARM_MICRO/board.o has changed
Binary file TARGET_LPC812/TOOLCHAIN_ARM_MICRO/cmsis_nvic.o has changed
Binary file TARGET_LPC812/TOOLCHAIN_ARM_MICRO/mbed.ar has changed
Binary file TARGET_LPC812/TOOLCHAIN_ARM_MICRO/retarget.o has changed
Binary file TARGET_LPC812/TOOLCHAIN_ARM_MICRO/sys.o has changed
Binary file TARGET_LPC812/TOOLCHAIN_ARM_MICRO/system_LPC8xx.o has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,385 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_COMMON BLE SoftDevice Common + @{ + @defgroup ble_api Events, type definitions and API calls + @{ + + @brief Module independent events, type definitions and API calls for the S110 SoftDevice. + + */ + +#ifndef BLE_H__ +#define BLE_H__ + +#include "ble_ranges.h" +#include "ble_types.h" +#include "ble_gap.h" +#include "ble_l2cap.h" +#include "ble_gatt.h" +#include "ble_gattc.h" +#include "ble_gatts.h" + +/** @addtogroup BLE_COMMON_ENUMERATIONS Enumerations + * @{ */ + +/** + * @brief Common API SVC numbers. + */ +enum BLE_COMMON_SVCS +{ + SD_BLE_ENABLE = BLE_SVC_BASE, /**< Enable and initialize the BLE stack */ + SD_BLE_EVT_GET, /**< Get an event from the pending events queue. */ + SD_BLE_TX_BUFFER_COUNT_GET, /**< Get the total number of available application transmission buffers from the stack. */ + SD_BLE_UUID_VS_ADD, /**< Add a Vendor Specific UUID. */ + SD_BLE_UUID_DECODE, /**< Decode UUID bytes. */ + SD_BLE_UUID_ENCODE, /**< Encode UUID bytes. */ + SD_BLE_VERSION_GET, /**< Get the local version information (company id, Link Layer Version, Link Layer Subversion). */ + SD_BLE_USER_MEM_REPLY, /**< User Memory Reply. */ + SD_BLE_OPT_SET, /**< Set a BLE option. */ + SD_BLE_OPT_GET, /**< Get a BLE option. */ +}; + +/** @} */ + +/** @addtogroup BLE_COMMON_DEFINES Defines + * @{ */ + +/** @brief Required pointer alignment for BLE Events. +*/ +#define BLE_EVTS_PTR_ALIGNMENT 4 + +/** @defgroup BLE_USER_MEM_TYPES User Memory Types + * @{ */ +#define BLE_USER_MEM_TYPE_INVALID 0x00 /**< Invalid User Memory Types. */ +#define BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES 0x01 /**< User Memory for GATTS queued writes. */ +/** @} */ + +/** @brief Maximum number of Vendor Specific UUIDs. +*/ +#define BLE_UUID_VS_MAX_COUNT 10 + +/** @} */ + +/** @addtogroup BLE_COMMON_STRUCTURES Structures + * @{ */ + +/** + * @brief BLE Module Independent Event IDs. + */ +enum BLE_COMMON_EVTS +{ + BLE_EVT_TX_COMPLETE = BLE_EVT_BASE, /**< Transmission Complete. */ + BLE_EVT_USER_MEM_REQUEST, /**< User Memory request. */ + BLE_EVT_USER_MEM_RELEASE /**< User Memory release. */ +}; + +/**@brief User Memory Block. */ +typedef struct +{ + uint8_t* p_mem; /**< Pointer to the start of the user memory block. */ + uint16_t len; /**< Length in bytes of the user memory block. */ +} ble_user_mem_block_t; + +/** + * @brief TX complete event. + */ +typedef struct +{ + uint8_t count; /**< Number of packets transmitted. */ +} ble_evt_tx_complete_t; + +/**@brief Event structure for BLE_EVT_USER_MEM_REQUEST. */ +typedef struct +{ + uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ +} ble_evt_user_mem_request_t; + +/**@brief Event structure for BLE_EVT_USER_MEM_RELEASE. */ +typedef struct +{ + uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ + ble_user_mem_block_t mem_block; /**< User memory block */ +} ble_evt_user_mem_release_t; + + +/**@brief Event structure for events not associated with a specific function module. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which this event occured. */ + union + { + ble_evt_tx_complete_t tx_complete; /**< Transmission Complete. */ + ble_evt_user_mem_request_t user_mem_request; /**< User Memory Request Event Parameters. */ + ble_evt_user_mem_release_t user_mem_release; /**< User Memory Release Event Parameters. */ + } params; +} ble_common_evt_t; + +/**@brief BLE Event header. */ +typedef struct +{ + uint16_t evt_id; /**< Value from a BLE_<module>_EVT series. */ + uint16_t evt_len; /**< Length in octets excluding this header. */ +} ble_evt_hdr_t; + +/**@brief Common BLE Event type, wrapping the module specific event reports. */ +typedef struct +{ + ble_evt_hdr_t header; /**< Event header. */ + union + { + ble_common_evt_t common_evt; /**< Common Event, evt_id in BLE_EVT_* series. */ + ble_gap_evt_t gap_evt; /**< GAP originated event, evt_id in BLE_GAP_EVT_* series. */ + ble_l2cap_evt_t l2cap_evt; /**< L2CAP originated event, evt_id in BLE_L2CAP_EVT* series. */ + ble_gattc_evt_t gattc_evt; /**< GATT client originated event, evt_id in BLE_GATTC_EVT* series. */ + ble_gatts_evt_t gatts_evt; /**< GATT server originated event, evt_id in BLE_GATTS_EVT* series. */ + } evt; +} ble_evt_t; + + +/** + * @brief Version Information. + */ +typedef struct +{ + uint8_t version_number; /**< Link Layer Version number for BT 4.1 spec is 7 (https://www.bluetooth.org/en-us/specification/assigned-numbers/link-layer). */ + uint16_t company_id; /**< Company ID, Nordic Semiconductor's company ID is 89 (0x0059) (https://www.bluetooth.org/apps/content/Default.aspx?doc_id=49708). */ + uint16_t subversion_number; /**< Link Layer Sub Version number, corresponds to the SoftDevice Config ID or Firmware ID (FWID). */ +} ble_version_t; + +/**@brief Common BLE Option type, wrapping the module specific options. */ +typedef union +{ + ble_gap_opt_t gap; /**< GAP option, opt_id in BLE_GAP_OPT_* series. */ +} ble_opt_t; + +/** + * @brief BLE GATTS init options + */ +typedef struct +{ + ble_gatts_enable_params_t gatts_enable_params; /**< GATTS init options @ref ble_gatts_enable_params_t. */ +} ble_enable_params_t; + +/** @} */ + +/** @addtogroup BLE_COMMON_FUNCTIONS Functions + * @{ */ + +/**@brief Enable the bluetooth stack + * + * @param[in] p_ble_enable_params Pointer to ble_enable_params_t + * + * @details This call initializes the bluetooth stack, no other BLE related call can be called before this one has been executed. + * + * @return @ref NRF_SUCCESS BLE stack has been initialized successfully + * @return @ref NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. + */ +SVCALL(SD_BLE_ENABLE, uint32_t, sd_ble_enable(ble_enable_params_t * p_ble_enable_params)); + +/**@brief Get an event from the pending events queue. + * + * @param[in] p_dest Pointer to buffer to be filled in with an event, or NULL to retrieve the event length. This buffer <b>must be 4-byte aligned in memory</b>. + * @param[in, out] p_len Pointer the length of the buffer, on return it is filled with the event length. + * + * @details This call allows the application to pull a BLE event from the BLE stack. The application is signalled that an event is + * available from the BLE Stack by the triggering of the SD_EVT_IRQn interrupt (mapped to IRQ 22). + * The application is free to choose whether to call this function from thread mode (main context) or directly from the Interrupt Service Routine + * that maps to SD_EVT_IRQn. In any case however, and because the BLE stack runs at a higher priority than the application, this function should be called + * in a loop (until @ref NRF_ERROR_NOT_FOUND is returned) every time SD_EVT_IRQn is raised to ensure that all available events are pulled from the stack. + * Failure to do so could potentially leave events in the internal queue without the application being aware of this fact. + * Sizing the p_dest buffer is equally important, since the application needs to provide all the memory necessary for the event to be copied into + * application memory. If the buffer provided is not large enough to fit the entire contents of the event, @ref NRF_ERROR_DATA_SIZE will be returned + * and the application can then call again with a larger buffer size. + * Please note that because of the variable length nature of some events, sizeof(ble_evt_t) will not always be large enough to fit certain events, + * and so it is the application's responsability to provide an amount of memory large enough so that the relevant event is copied in full. + * The application may "peek" the event length by providing p_dest as a NULL pointer and inspecting the value of *p_len upon return. + * + * @note The pointer supplied must be aligned to the extend defined by @ref BLE_EVTS_PTR_ALIGNMENT + * + * @return @ref NRF_SUCCESS Event pulled and stored into the supplied buffer. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. + * @return @ref NRF_ERROR_NOT_FOUND No events ready to be pulled. + * @return @ref NRF_ERROR_DATA_SIZE Event ready but could not fit into the supplied buffer. + */ +SVCALL(SD_BLE_EVT_GET, uint32_t, sd_ble_evt_get(uint8_t* p_dest, uint16_t *p_len)); + + +/**@brief Get the total number of available application transmission buffers in the BLE stack. + * + * @details This call allows the application to obtain the total number of + * transmission buffers available for application data. Please note that + * this does not give the number of free buffers, but rather the total amount of them. + * The application has two options to handle its own application transmission buffers: + * - Use a simple arithmetic calculation: at boot time the application should use this function + * to find out the total amount of buffers available to it and store it in a variable. + * Every time a packet that consumes an application buffer is sent using any of the + * exposed functions in this BLE API, the application should decrement that variable. + * Conversely, whenever a @ref BLE_EVT_TX_COMPLETE event is received by the application + * it should retrieve the count field in such event and add that number to the same + * variable storing the number of available packets. + * This mechanism allows the application to be aware at any time of the number of + * application packets available in the BLE stack's internal buffers, and therefore + * it can know with certainty whether it is possible to send more data or it has to + * wait for a @ref BLE_EVT_TX_COMPLETE event before it proceeds. + * - Choose to simply not keep track of available buffers at all, and instead handle the + * @ref BLE_ERROR_NO_TX_BUFFERS error by queueing the packet to be transmitted and + * try again as soon as a @ref BLE_EVT_TX_COMPLETE event arrives. + * + * The API functions that <b>may</b> consume an application buffer depending on + * the parameters supplied to them can be found below: + * + * - @ref sd_ble_gattc_write (write witout response only) + * - @ref sd_ble_gatts_hvx (notifications only) + * - @ref sd_ble_l2cap_tx (all packets) + * + * @param[out] p_count Pointer to a uint8_t which will contain the number of application transmission buffers upon + * successful return. + * + * @return @ref NRF_SUCCESS Number of application transmission buffers retrieved successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_TX_BUFFER_COUNT_GET, uint32_t, sd_ble_tx_buffer_count_get(uint8_t* p_count)); + + +/**@brief Add a Vendor Specific UUID. + * + * @details This call enables the application to add a vendor specific UUID to the BLE stack's table, + * for later use all other modules and APIs. This then allows the application to use the shorter, + * 24-bit @ref ble_uuid_t format when dealing with both 16-bit and 128-bit UUIDs without having to + * check for lengths and having split code paths. The way that this is accomplished is by extending the + * grouping mechanism that the Bluetooth SIG standard base UUID uses for all other 128-bit UUIDs. The + * type field in the @ref ble_uuid_t structure is an index (relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN) + * to the table populated by multiple calls to this function, and the uuid field in the same structure + * contains the 2 bytes at indices 12 and 13. The number of possible 128-bit UUIDs available to the + * application is therefore the number of Vendor Specific UUIDs added with the help of this function times 65536, + * although restricted to modifying bytes 12 and 13 for each of the entries in the supplied array. + * + * @note Bytes 12 and 13 of the provided UUID will not be used internally, since those are always replaced by + * the 16-bit uuid field in @ref ble_uuid_t. + * + * + * @param[in] p_vs_uuid Pointer to a 16-octet (128-bit) little endian Vendor Specific UUID disregarding + * bytes 12 and 13. + * @param[out] p_uuid_type Pointer where the type field in @ref ble_uuid_t corresponding to this UUID will be stored. + * + * @return @ref NRF_SUCCESS Successfully added the Vendor Specific UUID. + * @return @ref NRF_ERROR_INVALID_ADDR If p_vs_uuid or p_uuid_type is NULL or invalid. + * @return @ref NRF_ERROR_NO_MEM If there are no more free slots for VS UUIDs. + * @return @ref NRF_ERROR_FORBIDDEN If p_vs_uuid has already been added to the VS UUID table. + */ +SVCALL(SD_BLE_UUID_VS_ADD, uint32_t, sd_ble_uuid_vs_add(ble_uuid128_t const * const p_vs_uuid, uint8_t * const p_uuid_type)); + + +/** @brief Decode little endian raw UUID bytes (16-bit or 128-bit) into a 24 bit @ref ble_uuid_t structure. + * + * @details The raw UUID bytes excluding bytes 12 and 13 (i.e. bytes 0-11 and 14-15) of p_uuid_le are compared + * to the corresponding ones in each entry of the table of vendor specific UUIDs pouplated with @ref sd_ble_uuid_vs_add + * to look for a match. If there is such a match, bytes 12 and 13 are returned as p_uuid->uuid and the index + * relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN as p_uuid->type. + * + * @note If the UUID length supplied is 2, then the type set by this call will always be @ref BLE_UUID_TYPE_BLE. + * + * @param[in] uuid_le_len Length in bytes of the buffer pointed to by p_uuid_le (must be 2 or 16 bytes). + * @param[in] p_uuid_le Pointer pointing to little endian raw UUID bytes. + * @param[in,out] p_uuid Pointer to a @ref ble_uuid_t structure to be filled in. + * + * @return @ref NRF_SUCCESS Successfully decoded into the @ref ble_uuid_t structure. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_LENGTH Invalid UUID length. + * @return @ref NRF_ERROR_NOT_FOUND For a 128-bit UUID, no match in the populated table of UUIDs. + */ +SVCALL(SD_BLE_UUID_DECODE, uint32_t, sd_ble_uuid_decode(uint8_t uuid_le_len, uint8_t const * const p_uuid_le, ble_uuid_t * const p_uuid)); + + +/** @brief Encode a @ref ble_uuid_t structure into little endian raw UUID bytes (16-bit or 128-bit). + * + * @note The pointer to the destination buffer p_uuid_le may be NULL, in which case only the validitiy and size of p_uuid is computed. + * + * @param[in] p_uuid Pointer to a @ref ble_uuid_t structure that will be encoded into bytes. + * @param[out] p_uuid_le_len Pointer to a uint8_t that will be filled with the encoded length (2 or 16 bytes). + * @param[out] p_uuid_le Pointer to a buffer where the little endian raw UUID bytes (2 or 16) will be stored. + * + * @return @ref NRF_SUCCESS Successfully encoded into the buffer. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid UUID type. + */ +SVCALL(SD_BLE_UUID_ENCODE, uint32_t, sd_ble_uuid_encode(ble_uuid_t const * const p_uuid, uint8_t * const p_uuid_le_len, uint8_t * const p_uuid_le)); + + +/**@brief Get Version Information. + * + * @details This call allows the application to get the BLE stack version information. + * + * @param[in] p_version Pointer to ble_version_t structure to be filled in. + * + * @return @ref NRF_SUCCESS Version information stored successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY The stack is busy (typically doing a locally-initiated disconnection procedure). + */ +SVCALL(SD_BLE_VERSION_GET, uint32_t, sd_ble_version_get(ble_version_t * p_version)); + + +/**@brief Provide a user memory block. + * + * @note This call can only be used as a response to a @ref BLE_EVT_USER_MEM_REQUEST event issued to the application. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_block Pointer to a user memory block structure. + * + * @return @ref NRF_SUCCESS Successfully queued a response to the peer. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_STATE No execute write request pending. + */ +SVCALL(SD_BLE_USER_MEM_REPLY, uint32_t, sd_ble_user_mem_reply(uint16_t conn_handle, ble_user_mem_block_t *p_block)); + + +/**@brief Set a BLE option. + * + * @details This call allows the application to set the value of an option. + * + * @param[in] opt_id Option ID. + * @param[in] p_opt Pointer to a ble_opt_t structure containing the option value. + * + * @retval ::NRF_SUCCESS Option set successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. + * @retval ::NRF_ERROR_INVALID_STATE Unable to set the parameter at this time. + * @retval ::NRF_ERROR_BUSY The stack is busy or the previous procedure has not completed. + */ +SVCALL(SD_BLE_OPT_SET, uint32_t, sd_ble_opt_set(uint32_t opt_id, ble_opt_t const *p_opt)); + + +/**@brief Get a BLE option. + * + * @details This call allows the application to retrieve the value of an option. + * + * @param[in] opt_id Option ID. + * @param[out] p_opt Pointer to a ble_opt_t structure to be filled in. + * + * @retval ::NRF_SUCCESS Option retrieved successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. + * @retval ::NRF_ERROR_INVALID_STATE Unable to retrieve the parameter at this time. + * @retval ::NRF_ERROR_BUSY The stack is busy or the previous procedure has not completed. + * @retval ::NRF_ERROR_NOT_SUPPORTED This option is not supported. + * + */ +SVCALL(SD_BLE_OPT_GET, uint32_t, sd_ble_opt_get(uint32_t opt_id, ble_opt_t *p_opt)); + +/** @} */ + +#endif /* BLE_H__ */ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_err.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + /** + @addtogroup BLE_COMMON + @{ + @addtogroup nrf_error + @{ + @ingroup BLE_COMMON + @} + + @defgroup ble_err General error codes + @{ + + @brief General error code definitions for the BLE API. + + @ingroup BLE_COMMON +*/ +#ifndef NRF_BLE_ERR_H__ +#define NRF_BLE_ERR_H__ + +#include "nrf_error.h" + +/* @defgroup BLE_ERRORS Error Codes + * @{ */ +#define BLE_ERROR_NOT_ENABLED (NRF_ERROR_STK_BASE_NUM+0x001) /**< @ref sd_ble_enable has not been called. */ +#define BLE_ERROR_INVALID_CONN_HANDLE (NRF_ERROR_STK_BASE_NUM+0x002) /**< Invalid connection handle. */ +#define BLE_ERROR_INVALID_ATTR_HANDLE (NRF_ERROR_STK_BASE_NUM+0x003) /**< Invalid attribute handle. */ +#define BLE_ERROR_NO_TX_BUFFERS (NRF_ERROR_STK_BASE_NUM+0x004) /**< Buffer capacity exceeded. */ +/** @} */ + + +/** @defgroup BLE_ERROR_SUBRANGES Module specific error code subranges + * @brief Assignment of subranges for module specific error codes. + * @note For specific error codes, see ble_<module>.h or ble_error_<module>.h. + * @{ */ +#define NRF_L2CAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x100) /**< L2CAP specific errors. */ +#define NRF_GAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x200) /**< GAP specific errors. */ +#define NRF_GATTC_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x300) /**< GATT client specific errors. */ +#define NRF_GATTS_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x400) /**< GATT server specific errors. */ +/** @} */ + +#endif + + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gap.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,1032 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_GAP Generic Access Profile (GAP) + @{ + @brief Definitions and prototypes for the GAP interface. + */ + +#ifndef BLE_GAP_H__ +#define BLE_GAP_H__ + +#include "ble_types.h" +#include "ble_ranges.h" +#include "nrf_svc.h" + + +/**@addtogroup BLE_GAP_ENUMERATIONS Enumerations + * @{ */ + +/**@brief GAP API SVC numbers. + */ +enum BLE_GAP_SVCS +{ + SD_BLE_GAP_ADDRESS_SET = BLE_GAP_SVC_BASE, /**< Set own Bluetooth Address. */ + SD_BLE_GAP_ADDRESS_GET, /**< Get own Bluetooth Address. */ + SD_BLE_GAP_ADV_DATA_SET, /**< Set Advertisement Data. */ + SD_BLE_GAP_ADV_START, /**< Start Advertising. */ + SD_BLE_GAP_ADV_STOP, /**< Stop Advertising. */ + SD_BLE_GAP_CONN_PARAM_UPDATE, /**< Connection Parameter Update. */ + SD_BLE_GAP_DISCONNECT, /**< Disconnect. */ + SD_BLE_GAP_TX_POWER_SET, /**< Set TX Power. */ + SD_BLE_GAP_APPEARANCE_SET, /**< Set Appearance. */ + SD_BLE_GAP_APPEARANCE_GET, /**< Get Appearance. */ + SD_BLE_GAP_PPCP_SET, /**< Set PPCP. */ + SD_BLE_GAP_PPCP_GET, /**< Get PPCP. */ + SD_BLE_GAP_DEVICE_NAME_SET, /**< Set Device Name. */ + SD_BLE_GAP_DEVICE_NAME_GET, /**< Get Device Name. */ + SD_BLE_GAP_AUTHENTICATE, /**< Initiate Pairing/Bonding. */ + SD_BLE_GAP_SEC_PARAMS_REPLY, /**< Reply with Security Parameters. */ + SD_BLE_GAP_AUTH_KEY_REPLY, /**< Reply with an authentication key. */ + SD_BLE_GAP_SEC_INFO_REPLY, /**< Reply with Security Information. */ + SD_BLE_GAP_CONN_SEC_GET, /**< Obtain connection security level. */ + SD_BLE_GAP_RSSI_START, /**< Start reporting of changes in RSSI. */ + SD_BLE_GAP_RSSI_STOP, /**< Stop reporting of changes in RSSI. */ +}; +/**@} */ + +/**@addtogroup BLE_GAP_DEFINES Defines + * @{ */ + +/**@defgroup BLE_ERRORS_GAP SVC return values specific to GAP + * @{ */ +#define BLE_ERROR_GAP_UUID_LIST_MISMATCH (NRF_GAP_ERR_BASE + 0x000) /**< UUID list does not contain an integral number of UUIDs. */ +#define BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST (NRF_GAP_ERR_BASE + 0x001) /**< Use of Whitelist not permitted with discoverable advertising. */ +#define BLE_ERROR_GAP_INVALID_BLE_ADDR (NRF_GAP_ERR_BASE + 0x002) /**< The upper two bits of the address do not correspond to the specified address type. */ +/**@} */ + + +/**@defgroup BLE_GAP_ROLES GAP Roles + * @note Not explicitly used in peripheral API, but will be relevant for central API. + * @{ */ +#define BLE_GAP_ROLE_INVALID 0x0 /**< Invalid Role. */ +#define BLE_GAP_ROLE_PERIPH 0x1 /**< Peripheral Role. */ +#define BLE_GAP_ROLE_CENTRAL 0x2 /**< Central Role. */ +/**@} */ + + +/**@defgroup BLE_GAP_TIMEOUT_SOURCES GAP Timeout sources + * @{ */ +#define BLE_GAP_TIMEOUT_SRC_ADVERTISEMENT 0x00 /**< Advertisement timeout. */ +#define BLE_GAP_TIMEOUT_SRC_SECURITY_REQUEST 0x01 /**< Security request timeout. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADDR_TYPES GAP Address types + * @{ */ +#define BLE_GAP_ADDR_TYPE_PUBLIC 0x00 /**< Public address. */ +#define BLE_GAP_ADDR_TYPE_RANDOM_STATIC 0x01 /**< Random Static address. */ +#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE 0x02 /**< Private Resolvable address. */ +#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE 0x03 /**< Private Non-Resolvable address. */ +/**@} */ + +/**@defgroup BLE_GAP_ADDR_CYCLE_MODES GAP Address cycle modes + * @{ */ +#define BLE_GAP_ADDR_CYCLE_MODE_NONE 0x00 /**< Set addresses directly, no automatic address cycling. */ +#define BLE_GAP_ADDR_CYCLE_MODE_AUTO 0x01 /**< Automatically generate and update private addresses. */ +/** @} */ + +/**@brief The default interval in seconds at which a private address is refreshed when address cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO. */ +#define BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S (60 * 15) + +/** @brief BLE address length. */ +#define BLE_GAP_ADDR_LEN 6 + + +/**@defgroup BLE_GAP_AD_TYPE_DEFINITIONS GAP Advertising and Scan Response Data format + * @note Found at https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm + * @{ */ +#define BLE_GAP_AD_TYPE_FLAGS 0x01 /**< Flags for discoverability. */ +#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE 0x02 /**< Partial list of 16 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE 0x03 /**< Complete list of 16 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE 0x04 /**< Partial list of 32 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE 0x05 /**< Complete list of 32 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE 0x06 /**< Partial list of 128 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE 0x07 /**< Complete list of 128 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME 0x08 /**< Short local device name. */ +#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME 0x09 /**< Complete local device name. */ +#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL 0x0A /**< Transmit power level. */ +#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE 0x0D /**< Class of device. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C 0x0E /**< Simple Pairing Hash C. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R 0x0F /**< Simple Pairing Randomizer R. */ +#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE 0x10 /**< Security Manager TK Value. */ +#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS 0x11 /**< Security Manager Out Of Band Flags. */ +#define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE 0x12 /**< Slave Connection Interval Range. */ +#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT 0x14 /**< List of 16-bit Service Solicitation UUIDs. */ +#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT 0x15 /**< List of 128-bit Service Solicitation UUIDs. */ +#define BLE_GAP_AD_TYPE_SERVICE_DATA 0x16 /**< Service Data - 16-bit UUID. */ +#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS 0x17 /**< Public Target Address. */ +#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS 0x18 /**< Random Target Address. */ +#define BLE_GAP_AD_TYPE_APPEARANCE 0x19 /**< Appearance. */ +#define BLE_GAP_AD_TYPE_ADVERTISING_INTERVAL 0x1A /**< Advertising Interval. */ +#define BLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS 0x1B /**< LE Bluetooth Device Address. */ +#define BLE_GAP_AD_TYPE_LE_ROLE 0x1C /**< LE Role. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C256 0x1D /**< Simple Pairing Hash C-256. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R256 0x1E /**< Simple Pairing Randomizer R-256. */ +#define BLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID 0x20 /**< Service Data - 32-bit UUID. */ +#define BLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID 0x21 /**< Service Data - 128-bit UUID. */ +#define BLE_GAP_AD_TYPE_3D_INFORMATION_DATA 0x3D /**< 3D Information Data. */ +#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA 0xFF /**< Manufacturer Specific Data. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADV_FLAGS GAP Advertisement Flags + * @{ */ +#define BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE (0x01) /**< LE Limited Discoverable Mode. */ +#define BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE (0x02) /**< LE General Discoverable Mode. */ +#define BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED (0x04) /**< BR/EDR not supported. */ +#define BLE_GAP_ADV_FLAG_LE_BR_EDR_CONTROLLER (0x08) /**< Simultaneous LE and BR/EDR, Controller. */ +#define BLE_GAP_ADV_FLAG_LE_BR_EDR_HOST (0x10) /**< Simultaneous LE and BR/EDR, Host. */ +#define BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE (BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE Limited Discoverable Mode, BR/EDR not supported. */ +#define BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE (BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE General Discoverable Mode, BR/EDR not supported. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADV_INTERVALS GAP Advertising interval max and min + * @{ */ +#define BLE_GAP_ADV_INTERVAL_MIN 0x0020 /**< Minimum Advertising interval in 625 us units, i.e. 20 ms. */ +#define BLE_GAP_ADV_NONCON_INTERVAL_MIN 0x00A0 /**< Minimum Advertising interval in 625 us units for non connectable mode, i.e. 100 ms. */ +#define BLE_GAP_ADV_INTERVAL_MAX 0x4000 /**< Maximum Advertising interval in 625 us units, i.e. 10.24 s. */ + /**@} */ + + +/**@brief Maximum size of advertising data in octets. */ +#define BLE_GAP_ADV_MAX_SIZE 31 + + +/**@defgroup BLE_GAP_ADV_TYPES GAP Advertising types + * @{ */ +#define BLE_GAP_ADV_TYPE_ADV_IND 0x00 /**< Connectable undirected. */ +#define BLE_GAP_ADV_TYPE_ADV_DIRECT_IND 0x01 /**< Connectable directed. */ +#define BLE_GAP_ADV_TYPE_ADV_SCAN_IND 0x02 /**< Scannable undirected. */ +#define BLE_GAP_ADV_TYPE_ADV_NONCONN_IND 0x03 /**< Non connectable undirected. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADV_FILTER_POLICIES GAP Advertising filter policies + * @{ */ +#define BLE_GAP_ADV_FP_ANY 0x00 /**< Allow scan requests and connect requests from any device. */ +#define BLE_GAP_ADV_FP_FILTER_SCANREQ 0x01 /**< Filter scan requests with whitelist. */ +#define BLE_GAP_ADV_FP_FILTER_CONNREQ 0x02 /**< Filter connect requests with whitelist. */ +#define BLE_GAP_ADV_FP_FILTER_BOTH 0x03 /**< Filter both scan and connect requests with whitelist. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADV_TIMEOUT_VALUES GAP Advertising timeout values + * @{ */ +#define BLE_GAP_ADV_TIMEOUT_LIMITED_MAX 180 /**< Maximum advertising time in limited discoverable mode (TGAP(lim_adv_timeout) = 180s in spec (Addendum 2)). */ +#define BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED 0 /**< Unlimited advertising in general discoverable mode. */ +/**@} */ + + +/**@defgroup BLE_GAP_DISC_MODES GAP Discovery modes + * @{ */ +#define BLE_GAP_DISC_MODE_NOT_DISCOVERABLE 0x00 /**< Not discoverable discovery Mode. */ +#define BLE_GAP_DISC_MODE_LIMITED 0x01 /**< Limited Discovery Mode. */ +#define BLE_GAP_DISC_MODE_GENERAL 0x02 /**< General Discovery Mode. */ +/**@} */ + +/**@defgroup BLE_GAP_IO_CAPS GAP IO Capabilities + * @{ */ +#define BLE_GAP_IO_CAPS_DISPLAY_ONLY 0x00 /**< Display Only. */ +#define BLE_GAP_IO_CAPS_DISPLAY_YESNO 0x01 /**< Display and Yes/No entry. */ +#define BLE_GAP_IO_CAPS_KEYBOARD_ONLY 0x02 /**< Keyboard Only. */ +#define BLE_GAP_IO_CAPS_NONE 0x03 /**< No I/O capabilities. */ +#define BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY 0x04 /**< Keyboard and Display. */ +/**@} */ + + +/**@defgroup BLE_GAP_AUTH_KEY_TYPES GAP Authentication Key Types + * @{ */ +#define BLE_GAP_AUTH_KEY_TYPE_NONE 0x00 /**< No key (may be used to reject). */ +#define BLE_GAP_AUTH_KEY_TYPE_PASSKEY 0x01 /**< 6-digit Passkey. */ +#define BLE_GAP_AUTH_KEY_TYPE_OOB 0x02 /**< Out Of Band data. */ +/**@} */ + +/**@defgroup BLE_GAP_SEC_STATUS GAP Security status + * @{ */ +#define BLE_GAP_SEC_STATUS_SUCCESS 0x00 /**< Successful parameters. */ +#define BLE_GAP_SEC_STATUS_TIMEOUT 0x01 /**< Procedure timed out. */ +#define BLE_GAP_SEC_STATUS_PDU_INVALID 0x02 /**< Invalid PDU received. */ +#define BLE_GAP_SEC_STATUS_PASSKEY_ENTRY_FAILED 0x81 /**< Passkey entry failed (user cancelled or other). */ +#define BLE_GAP_SEC_STATUS_OOB_NOT_AVAILABLE 0x82 /**< Out of Band Key not available. */ +#define BLE_GAP_SEC_STATUS_AUTH_REQ 0x83 /**< Authentication requirements not met. */ +#define BLE_GAP_SEC_STATUS_CONFIRM_VALUE 0x84 /**< Confirm value failed. */ +#define BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP 0x85 /**< Pairing not supported. */ +#define BLE_GAP_SEC_STATUS_ENC_KEY_SIZE 0x86 /**< Encryption key size. */ +#define BLE_GAP_SEC_STATUS_SMP_CMD_UNSUPPORTED 0x87 /**< Unsupported SMP command. */ +#define BLE_GAP_SEC_STATUS_UNSPECIFIED 0x88 /**< Unspecified reason. */ +#define BLE_GAP_SEC_STATUS_REPEATED_ATTEMPTS 0x89 /**< Too little time elapsed since last attempt. */ +#define BLE_GAP_SEC_STATUS_INVALID_PARAMS 0x8A /**< Invalid parameters. */ +/**@} */ + +/**@defgroup BLE_GAP_SEC_STATUS_SOURCES GAP Security status sources + * @{ */ +#define BLE_GAP_SEC_STATUS_SOURCE_LOCAL 0x00 /**< Local failure. */ +#define BLE_GAP_SEC_STATUS_SOURCE_REMOTE 0x01 /**< Remote failure. */ +/**@} */ + +/**@defgroup BLE_GAP_CP_LIMITS GAP Connection Parameters Limits + * @{ */ +#define BLE_GAP_CP_MIN_CONN_INTVL_NONE 0xFFFF /**< No new minimum connction interval specified in connect parameters. */ +#define BLE_GAP_CP_MIN_CONN_INTVL_MIN 0x0006 /**< Lowest mimimum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ +#define BLE_GAP_CP_MIN_CONN_INTVL_MAX 0x0C80 /**< Highest minimum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ +#define BLE_GAP_CP_MAX_CONN_INTVL_NONE 0xFFFF /**< No new maximum connction interval specified in connect parameters. */ +#define BLE_GAP_CP_MAX_CONN_INTVL_MIN 0x0006 /**< Lowest maximum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ +#define BLE_GAP_CP_MAX_CONN_INTVL_MAX 0x0C80 /**< Highest maximum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ +#define BLE_GAP_CP_SLAVE_LATENCY_MAX 0x03E8 /**< Highest slave latency permitted, in connection events. */ +#define BLE_GAP_CP_CONN_SUP_TIMEOUT_NONE 0xFFFF /**< No new supervision timeout specified in connect parameters. */ +#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MIN 0x000A /**< Lowest supervision timeout permitted, in units of 10 ms, i.e. 100 ms. */ +#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MAX 0x0C80 /**< Highest supervision timeout permitted, in units of 10 ms, i.e. 32 s. */ +/**@} */ + + +/**@brief GAP device name maximum length. */ +#define BLE_GAP_DEVNAME_MAX_LEN 31 + + +/**@defgroup BLE_GAP_CONN_SEC_MODE_SET_MACROS GAP attribute security requirement setters + * + * See @ref ble_gap_conn_sec_mode_t. + * @{ */ +/**@brief Set sec_mode pointed to by ptr to have no access rights.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(ptr) do {(ptr)->sm = 0; (ptr)->lv = 0;} while(0) +/**@brief Set sec_mode pointed to by ptr to require no protection, open link.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_OPEN(ptr) do {(ptr)->sm = 1; (ptr)->lv = 1;} while(0) +/**@brief Set sec_mode pointed to by ptr to require encryption, but no MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 2;} while(0) +/**@brief Set sec_mode pointed to by ptr to require encryption and MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 3;} while(0) +/**@brief Set sec_mode pointed to by ptr to require signing or encryption, no MITM protection needed.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_NO_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 1;} while(0) +/**@brief Set sec_mode pointed to by ptr to require signing or encryption with MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_WITH_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 2;} while(0) +/**@} */ + + +/**@brief GAP Security Key Length. */ +#define BLE_GAP_SEC_KEY_LEN 16 + +/**@brief GAP Passkey Length. */ +#define BLE_GAP_PASSKEY_LEN 6 + +/**@brief Maximum amount of addresses in a whitelist. */ +#define BLE_GAP_WHITELIST_ADDR_MAX_COUNT (8) + +/**@brief Maximum amount of IRKs in a whitelist. + * @note The number of IRKs is limited to 8, even if the hardware supports more. + */ +#define BLE_GAP_WHITELIST_IRK_MAX_COUNT (8) + +/**@defgroup GAP_SEC_MODES GAP Security Modes + * @{ */ +#define BLE_GAP_SEC_MODE 0x00 /**< No key (may be used to reject). */ +/**@} */ + +/**@} */ + +/**@addtogroup BLE_GAP_STRUCTURES Structures + * @{ */ + +/**@brief Bluetooth Low Energy address. */ +typedef struct +{ + uint8_t addr_type; /**< See @ref BLE_GAP_ADDR_TYPES. */ + uint8_t addr[BLE_GAP_ADDR_LEN]; /**< 48-bit address, LSB format. */ +} ble_gap_addr_t; + + +/**@brief GAP connection parameters. + * + * @note When ble_conn_params_t is received in an event, both min_conn_interval and + * max_conn_interval will be equal to the connection interval set by the central. + */ +typedef struct +{ + uint16_t min_conn_interval; /**< Minimum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ + uint16_t max_conn_interval; /**< Maximum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ + uint16_t slave_latency; /**< Slave Latency in number of connection events, see @ref BLE_GAP_CP_LIMITS.*/ + uint16_t conn_sup_timeout; /**< Connection Supervision Timeout in 10 ms units, see @ref BLE_GAP_CP_LIMITS.*/ +} ble_gap_conn_params_t; + + +/**@brief GAP link requirements. + * + * See Bluetooth Core specification, Volume 3 Part C 10.2 for details. + * + * Security Mode 0 Level 0: No access permissions at all (this level is not defined by the Bluetooth Core specification).\n + * Security Mode 1 Level 1: No security is needed (aka open link).\n + * Security Mode 1 Level 2: Encrypted link required, MITM protection not necessary.\n + * Security Mode 1 Level 3: MITM protected encrypted link required.\n + * Security Mode 2 Level 1: Signing or encryption required, MITM protection not necessary.\n + * Security Mode 2 Level 2: MITM protected signing required, unless link is MITM protected encrypted.\n + */ +typedef struct +{ + uint8_t sm : 4; /**< Security Mode (1 or 2), 0 for no permissions at all. */ + uint8_t lv : 4; /**< Level (1, 2 or 3), 0 for no permissions at all. */ + +} ble_gap_conn_sec_mode_t; + + +/**@brief GAP connection security status.*/ +typedef struct +{ + ble_gap_conn_sec_mode_t sec_mode; /**< Currently active security mode for this connection.*/ + uint8_t encr_key_size; /**< Length of currently active encryption key, 7 to 16 octets (only applicable for bonding procedures). */ +} ble_gap_conn_sec_t; + + +/**@brief Identity Resolving Key. */ +typedef struct +{ + uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Array containing IRK. */ +} ble_gap_irk_t; + + +/**@brief Whitelist structure. */ +typedef struct +{ + ble_gap_addr_t ** pp_addrs; /**< Pointer to array of device address pointers, pointing to addresses to be used in whitelist. NULL if none are given. */ + uint8_t addr_count; /**< Count of device addresses in array, up to @ref BLE_GAP_WHITELIST_ADDR_MAX_COUNT. */ + ble_gap_irk_t ** pp_irks; /**< Pointer to array of Identity Resolving Key (IRK) pointers, each pointing to an IRK in the whitelist. NULL if none are given. */ + uint8_t irk_count; /**< Count of IRKs in array, up to @ref BLE_GAP_WHITELIST_IRK_MAX_COUNT. */ +} ble_gap_whitelist_t; + + +/**@brief GAP advertising parameters.*/ +typedef struct +{ + uint8_t type; /**< See @ref BLE_GAP_ADV_TYPES. */ + ble_gap_addr_t* p_peer_addr; /**< For BLE_GAP_CONN_MODE_DIRECTED mode only, known peer address. */ + uint8_t fp; /**< Filter Policy, see @ref BLE_GAP_ADV_FILTER_POLICIES. */ + ble_gap_whitelist_t * p_whitelist; /**< Pointer to whitelist, NULL if none is given. */ + uint16_t interval; /**< Advertising interval between 0x0020 and 0x4000 in 0.625 ms units (20ms to 10.24s), see @ref BLE_GAP_ADV_INTERVALS. This parameter must be set to 0 if type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND. */ + uint16_t timeout; /**< Advertising timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. See also @ref BLE_GAP_ADV_TIMEOUT_VALUES. This parameter must be set to 0 if type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND. */ +} ble_gap_adv_params_t; + + +/**@brief GAP scanning parameters. */ +typedef struct +{ + uint8_t filter; /**< Filter based on discovery mode, see @ref BLE_GAP_DISC_MODES. */ + uint8_t active : 1; /**< If 1, perform active scanning (scan requests). */ + uint8_t selective : 1; /**< If 1, ignore unknown devices (non whitelisted). */ + uint16_t interval; /**< Scan interval between 0x0020 and 0x4000 in 0.625ms units (20ms to 10.24s). */ + uint16_t window; /**< Scan window between 0x0004 and 0x4000 in 0.625ms units (2.5ms to 10.24s). */ + uint16_t timeout; /**< Scan timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. */ +} ble_gap_scan_params_t; + + +/**@brief GAP security parameters. */ +typedef struct +{ + uint16_t timeout; /**< Timeout for SMP transactions or Security Request in seconds, see @ref sd_ble_gap_authenticate and @ref sd_ble_gap_sec_params_reply for more information. */ + uint8_t bond : 1; /**< Perform bonding. */ + uint8_t mitm : 1; /**< Man In The Middle protection required. */ + uint8_t io_caps : 3; /**< IO capabilities, see @ref BLE_GAP_IO_CAPS. */ + uint8_t oob : 1; /**< Out Of Band data available. */ + uint8_t min_key_size; /**< Minimum encryption key size in octets between 7 and 16. */ + uint8_t max_key_size; /**< Maximum encryption key size in octets between min_key_size and 16. */ +} ble_gap_sec_params_t; + + +/**@brief GAP Encryption Information. */ +typedef struct +{ + uint16_t div; /**< Encryption Diversifier. */ + uint8_t ltk[BLE_GAP_SEC_KEY_LEN]; /**< Long Term Key. */ + uint8_t auth : 1; /**< Authenticated Key. */ + uint8_t ltk_len : 7; /**< LTK length in octets. */ +} ble_gap_enc_info_t; + + +/**@brief GAP Master Identification. */ +typedef struct +{ + uint16_t ediv; /**< Encrypted Diversifier. */ + uint8_t rand[8]; /**< Random Number. */ +} ble_gap_master_id_t; + + +/**@brief GAP Identity Information. */ +typedef struct +{ + ble_gap_addr_t addr; /**< Bluetooth address to which this key applies. */ + uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Identity Resolution Key. */ +} ble_gap_id_info_t; + + +/**@brief GAP Signing Information. */ +typedef struct +{ + uint8_t csrk[BLE_GAP_SEC_KEY_LEN]; /* Connection Signature Resolving Key. */ +} ble_gap_sign_info_t; + + +/**@brief GAP Event IDs. + * Those IDs uniquely identify an event coming from the stack to the application. + */ +enum BLE_GAP_EVTS +{ + BLE_GAP_EVT_CONNECTED = BLE_GAP_EVT_BASE, /**< Connection established. */ + BLE_GAP_EVT_DISCONNECTED, /**< Disconnected from peer. */ + BLE_GAP_EVT_CONN_PARAM_UPDATE, /**< Connection Parameters updated. */ + BLE_GAP_EVT_SEC_PARAMS_REQUEST, /**< Request to provide security parameters. */ + BLE_GAP_EVT_SEC_INFO_REQUEST, /**< Request to provide security information. */ + BLE_GAP_EVT_PASSKEY_DISPLAY, /**< Request to display a passkey to the user. */ + BLE_GAP_EVT_AUTH_KEY_REQUEST, /**< Request to provide an authentication key. */ + BLE_GAP_EVT_AUTH_STATUS, /**< Authentication procedure completed with status. */ + BLE_GAP_EVT_CONN_SEC_UPDATE, /**< Connection security updated. */ + BLE_GAP_EVT_TIMEOUT, /**< Timeout expired. */ + BLE_GAP_EVT_RSSI_CHANGED, /**< Signal strength measurement report. */ +}; + + +/** + * @brief GAP Option IDs. + * IDs that uniquely identify a GAP option. + */ +enum BLE_GAP_OPTS +{ + BLE_GAP_OPT_LOCAL_CONN_LATENCY = BLE_GAP_OPT_BASE, /**< Local connection latency. */ + BLE_GAP_OPT_PASSKEY, /**< Set passkey to be used during pairing. This option can be used to make the SoftDevice use an application provided passkey instead of generating a random passkey.*/ + BLE_GAP_OPT_PRIVACY, /**< Set or get custom IRK or custom private address cycle interval. */ +}; +/**@} */ + + +/**@brief Event data for connected event. */ +typedef struct +{ + ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ + uint8_t irk_match :1; /**< If 1, peer device's address resolved using an IRK. */ + uint8_t irk_match_idx :7; /**< Index in IRK list where the address was matched. */ + ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ +} ble_gap_evt_connected_t; + + +/**@brief Event data for disconnected event. */ +typedef struct +{ + uint8_t reason; /**< HCI error code. */ +} ble_gap_evt_disconnected_t; + + +/**@brief Event data for connection parameter update event. */ +typedef struct +{ + ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ +} ble_gap_evt_conn_param_update_t; + + +/**@brief Event data for security parameters request event. */ +typedef struct +{ + ble_gap_sec_params_t peer_params; /**< Initiator Security Parameters. */ +} ble_gap_evt_sec_params_request_t; + + +/**@brief Event data for security info request event. */ +typedef struct +{ + ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ + uint16_t div; /**< Encryption diversifier for LTK lookup. */ + uint8_t enc_info : 1; /**< If 1, Encryption Information required. */ + uint8_t id_info : 1; /**< If 1, Identity Information required. */ + uint8_t sign_info : 1; /**< If 1, Signing Information required. */ +} ble_gap_evt_sec_info_request_t; + + +/**@brief Event data for passkey display event. */ +typedef struct +{ + uint8_t passkey[BLE_GAP_PASSKEY_LEN]; /**< 6-digit passkey in ASCII ('0'-'9' digits only). */ +} ble_gap_evt_passkey_display_t; + + +/**@brief Event data for authentication key request event. */ +typedef struct +{ + uint8_t key_type; /**< See @ref BLE_GAP_AUTH_KEY_TYPES. */ +} ble_gap_evt_auth_key_request_t; + + +/**@brief Security levels supported. + * @note See Bluetooth Specification Version 4.1 Volume 3, Part C, Chapter 10. +*/ +typedef struct +{ + uint8_t lv1 : 1; /**< If 1: Level 1 is supported. */ + uint8_t lv2 : 1; /**< If 1: Level 2 is supported. */ + uint8_t lv3 : 1; /**< If 1: Level 3 is supported. */ +} ble_gap_sec_levels_t; + + +/**@brief Keys that have been exchanged. */ +typedef struct +{ + uint8_t ltk : 1; /**< Long Term Key. */ + uint8_t ediv_rand : 1; /**< Encrypted Diversifier and Random value. */ + uint8_t irk : 1; /**< Identity Resolving Key. */ + uint8_t address : 1; /**< Public or static random address. */ + uint8_t csrk : 1; /**< Connection Signature Resolving Key. */ +} ble_gap_sec_keys_t; + + +/**@brief Event data for authentication status event. */ +typedef struct +{ + uint8_t auth_status; /**< Authentication status, see @ref BLE_GAP_SEC_STATUS. */ + uint8_t error_src; /**< On error, source that caused the failure, see @ref BLE_GAP_SEC_STATUS_SOURCES. */ + ble_gap_sec_levels_t sm1_levels; /**< Levels supported in Security Mode 1. */ + ble_gap_sec_levels_t sm2_levels; /**< Levels supported in Security Mode 2. */ + ble_gap_sec_keys_t periph_kex; /**< Bitmap stating which keys were exchanged (distributed) by the peripheral. */ + ble_gap_sec_keys_t central_kex; /**< Bitmap stating which keys were exchanged (distributed) by the central. */ + struct periph_keys_t + { + ble_gap_enc_info_t enc_info; /**< Peripheral's Encryption information. */ + } periph_keys; /**< Actual keys distributed from the Peripheral to the Central. */ + struct central_keys_t + { + ble_gap_irk_t irk; /**< Central's IRK. */ + ble_gap_addr_t id_info; /**< Central's Identity Info. */ + } central_keys; /**< Actual keys distributed from the Central to the Peripheral. */ +} ble_gap_evt_auth_status_t; + + +/**@brief Event data for connection security update event. */ +typedef struct +{ + ble_gap_conn_sec_t conn_sec; /**< Connection security level. */ +} ble_gap_evt_conn_sec_update_t; + + +/**@brief Event data for timeout event. */ +typedef struct +{ + uint8_t src; /**< Source of timeout event, see @ref BLE_GAP_TIMEOUT_SOURCES. */ +} ble_gap_evt_timeout_t; + + +/**@brief Event data for advertisement report event. */ +typedef struct +{ + int8_t rssi; /**< Received Signal Strength Indication in dBm. */ +} ble_gap_evt_rssi_changed_t; + + +/**@brief GAP event callback event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occured. */ + union /**< union alternative identified by evt_id in enclosing struct. */ + { + ble_gap_evt_connected_t connected; /**< Connected Event Parameters. */ + ble_gap_evt_disconnected_t disconnected; /**< Disconnected Event Parameters. */ + ble_gap_evt_conn_param_update_t conn_param_update; /**< Connection Parameter Update Parameters. */ + ble_gap_evt_sec_params_request_t sec_params_request; /**< Security Parameters Request Event Parameters. */ + ble_gap_evt_sec_info_request_t sec_info_request; /**< Security Information Request Event Parameters. */ + ble_gap_evt_passkey_display_t passkey_display; /**< Passkey Display Event Parameters. */ + ble_gap_evt_auth_key_request_t auth_key_request; /**< Authentication Key Request Event Parameters. */ + ble_gap_evt_auth_status_t auth_status; /**< Authentication Status Event Parameters. */ + ble_gap_evt_conn_sec_update_t conn_sec_update; /**< Connection Security Update Event Parameters. */ + ble_gap_evt_timeout_t timeout; /**< Timeout Event Parameters. */ + ble_gap_evt_rssi_changed_t rssi_changed; /**< RSSI Event parameters. */ + } params; + +} ble_gap_evt_t; + + +/**@brief Local connection latency option. + * + * Local connection latency is a feature which enables the slave to improve + * current consumption by ignoring the slave latency set by the peer. The + * local connection latency can only be set to a multiple of the slave latency, + * and cannot be longer than half of the supervision timeout. + * + * Used with @ref sd_ble_opt_set to set the local connection latency. The + * @ref sd_ble_opt_get is not supported for this option, but the actual + * local connection latency (unless set to NULL) is set as a return parameter + * when setting the option. + * + * @note The latency set will be truncated down to the closest slave latency event + * multiple, or the nearest multiple before half of the supervision timeout. + * + * @note The local connection latency is default off, and needs to be set for new + * connections and whenever the connection is updated. + * + * @retval ::NRF_SUCCESS Set successfully. + * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. + */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle */ + uint16_t requested_latency; /**< Requested local connection latency. */ + uint16_t * p_actual_latency; /**< Pointer to storage for the actual local connection latency (can be set to NULL to skip return value). */ +} ble_gap_opt_local_conn_latency_t; + + +/**@brief Passkey Option. + * + * Structure containing the passkey to be used during pairing. This can be used with @ref + * sd_ble_opt_set to make the SoftDevice use a pre-programmed passkey for authentication + * instead of generating a random one. + * + * @note @ref sd_ble_opt_get is not supported for this option. + * + */ +typedef struct +{ + uint8_t * p_passkey; /**< Pointer to 6-digit ASCII string (digit 0..9 only, no NULL termination) passkey to be used during pairing. If this is NULL, the SoftDevice will generate a random passkey if required.*/ +} ble_gap_opt_passkey_t; + + +/**@brief Custom Privacy Options. + * + * @note The specified address cycle interval is used when the address cycle mode is + * @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO. If 0 is given, the address will not be refreshed at any + * interval, and not at start of advertising. A new address can be generated manually by calling + * @ref sd_ble_gap_address_set with the same type again. The default interval is + * @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S. + * + * @note If cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO, the address will immediately be + * refreshed when this option is set. + */ +typedef struct +{ + ble_gap_irk_t * p_irk; /**< When input: Pointer to custom IRK, or NULL to use/reset to the device's default IRK. When output: Pointer to where the current IRK is to be stored, or NULL to not read out the IRK. */ + uint16_t interval_s; /**< When input: Custom private address cycle interval in seconds. When output: The current private address cycle interval. */ +} ble_gap_opt_privacy_t; + + +/**@brief Option structure for GAP options. */ +typedef union +{ + ble_gap_opt_local_conn_latency_t local_conn_latency; /**< Local connection latency. */ + ble_gap_opt_passkey_t passkey; /**< Passkey to be used for pairing.*/ + ble_gap_opt_privacy_t privacy; /**< Custom privacy options. */ +} ble_gap_opt_t; +/**@} */ + + +/**@addtogroup BLE_GAP_FUNCTIONS Functions + * @{ */ + +/**@brief Set local Bluetooth address. + * + * If the address cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO, the address type is required to + * be @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE or + * @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE. The given address is ignored and the + * SoftDevice will generate a new private address automatically every time advertising is + * (re)started, and every @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S seconds. If this API + * call is used again with the same parameters while advertising, the SoftDevice will immediately + * generate a new private address to replace the current address. + * + * If the application wishes to use a @ref BLE_GAP_ADDR_TYPE_PUBLIC or + * @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC address, the cycle mode must be + * @ref BLE_GAP_ADDR_CYCLE_MODE_NONE. + * + * If this API function is called while advertising, the softdevice will immediately update the + * advertising address without the need to stop advertising in the following cases: + * - If the previously set address is of type @ref BLE_GAP_ADDR_TYPE_PUBLIC and the new address + * is also of type @ref BLE_GAP_ADDR_TYPE_PUBLIC + * - If the previously set address is not @ref BLE_GAP_ADDR_TYPE_PUBLIC and the new address is + * also not @ref BLE_GAP_ADDR_TYPE_PUBLIC. + * + * If the address is changed from a @ref BLE_GAP_ADDR_TYPE_PUBLIC address to another type or from + * another type to a @ref BLE_GAP_ADDR_TYPE_PUBLIC address, the change will take effect the next + * time advertising is started. + * + * @note If the address cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_NONE and the application is + * using privacy, the application must take care to generate and set new private addresses + * periodically to comply with the Privacy specification in Bluetooth Core Spec. + * + * @param[in] addr_cycle_mode Address cycle mode, see @ref BLE_GAP_ADDR_CYCLE_MODES. + * @param[in] p_addr Pointer to address structure. + * + * @return @ref NRF_SUCCESS Address successfully set. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameters. + * @return @ref BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address. + * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. + */ +SVCALL(SD_BLE_GAP_ADDRESS_SET, uint32_t, sd_ble_gap_address_set(uint8_t addr_cycle_mode, ble_gap_addr_t const * const p_addr)); + + +/**@brief Get local Bluetooth address. + * + * @param[out] p_addr Pointer to address structure. + * + * @return @ref NRF_SUCCESS Address successfully retrieved. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_GAP_ADDRESS_GET, uint32_t, sd_ble_gap_address_get(ble_gap_addr_t * const p_addr)); + + +/**@brief Set, clear or update advertisement and scan response data. + * + * @note The format of the advertisement data will be checked by this call to ensure interoperability. + * Limitations imposed by this API call to the data provided include having a flags data type in the scan response data and + * duplicating the local name in the advertisement data and scan response data. + * + * @note: To clear the advertisement data and set it to a 0-length packet, simply provide a valid pointer (p_data/p_sr_data) with its corresponding + * length (dlen/srdlen) set to 0. + * + * @note: The call will fail if p_data and p_sr_data are both NULL since this would have no effect. + * + * @param[in] p_data Raw data to be placed in advertisement packet. If NULL, no changes are made to the current advertisement packet data. + * @param[in] dlen Data length for p_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_data is NULL, can be 0 if p_data is not NULL. + * @param[in] p_sr_data Raw data to be placed in scan response packet. If NULL, no changes are made to the current scan response packet data. + * @param[in] srdlen Data length for p_sr_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_sr_data is NULL, can be 0 if p_data is not NULL. + * + * @return @ref NRF_SUCCESS Advertisement data successfully updated or cleared. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_FLAGS Invalid combination of advertising flags supplied. + * @return @ref NRF_ERROR_INVALID_DATA Invalid data type(s) supplied, check the advertising data format specification. + * @return @ref NRF_ERROR_INVALID_LENGTH Invalid data length(s) supplied. + * @return @ref BLE_ERROR_GAP_UUID_LIST_MISMATCH Invalid UUID list supplied. + * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. + */ +SVCALL(SD_BLE_GAP_ADV_DATA_SET, uint32_t, sd_ble_gap_adv_data_set(uint8_t const * const p_data, uint8_t dlen, uint8_t const * const p_sr_data, uint8_t srdlen)); + + +/**@brief Start advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). + * + * @param[in] p_adv_params Pointer to advertising parameters structure. + * + * @return @ref NRF_SUCCESS The BLE stack has started advertising. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check the accepted ranges and limits. + * @return @ref BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Bluetooth address supplied. + * @return @ref BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST Discoverable mode and whitelist incompatible. + */ +SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start(ble_gap_adv_params_t const * const p_adv_params)); + + +/**@brief Stop advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). + * + * @return @ref NRF_SUCCESS The BLE stack has stopped advertising. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation (most probably not in advertising state). + */ +SVCALL(SD_BLE_GAP_ADV_STOP, uint32_t, sd_ble_gap_adv_stop(void)); + + +/**@brief Update connection parameters. + * + * @details In the central role this will initiate a Link Layer connection parameter update procedure, + * otherwise in the peripheral role, this will send the corresponding L2CAP request and wait for + * the central to perform the procedure. In both cases, and regardless of success or failure, the application + * will be informed of the result with a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE event. + * + * @note If both a connection supervision timeout and a maximum connection interval are specified, then the following constraint + * applies: (conn_sup_timeout * 8) >= (max_conn_interval * (slave_latency + 1)) + * + * @param[in] conn_handle Connection handle. + * @param[in] p_conn_params Pointer to desired connection parameters. If NULL is provided on a peripheral role, + * the parameters in the PPCP characteristic of the GAP service will be used instead. + * + * @return @ref NRF_SUCCESS The Connection Update procedure has been started successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. + * @return @ref NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, process pending events and retry. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_GAP_CONN_PARAM_UPDATE, uint32_t, sd_ble_gap_conn_param_update(uint16_t conn_handle, ble_gap_conn_params_t const * const p_conn_params)); + + +/**@brief Disconnect (GAP Link Termination). + * + * @details This call initiates the disconnection procedure, and its completion will be communicated to the application + * with a BLE_GAP_EVT_DISCONNECTED event. + * + * @param[in] conn_handle Connection handle. + * @param[in] hci_status_code HCI status code, see @ref BLE_HCI_STATUS_CODES (accepted values are BTLE_REMOTE_USER_TERMINATED_CONNECTION and BTLE_CONN_INTERVAL_UNACCEPTABLE). + * + * @return @ref NRF_SUCCESS The disconnection procedure has been started successfully. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation (disconnection is already in progress or not connected at all). + */ +SVCALL(SD_BLE_GAP_DISCONNECT, uint32_t, sd_ble_gap_disconnect(uint16_t conn_handle, uint8_t hci_status_code)); + + +/**@brief Set the radio's transmit power. + * + * @param[in] tx_power Radio transmit power in dBm (accepted values are -40, -30, -20, -16, -12, -8, -4, 0, and 4 dBm). + * + * @note -40 dBm will not actually give -40 dBm, but will instead be remapped to -30 dBm. + * + * @return @ref NRF_SUCCESS Successfully changed the transmit power. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. + */ +SVCALL(SD_BLE_GAP_TX_POWER_SET, uint32_t, sd_ble_gap_tx_power_set(int8_t tx_power)); + + +/**@brief Set GAP Appearance value. + * + * @param[in] appearance Appearance (16-bit), see @ref BLE_APPEARANCES. + * + * @return @ref NRF_SUCCESS Appearance value set successfully. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + */ +SVCALL(SD_BLE_GAP_APPEARANCE_SET, uint32_t, sd_ble_gap_appearance_set(uint16_t appearance)); + + +/**@brief Get GAP Appearance value. + * + * @param[out] p_appearance Appearance (16-bit), see @ref BLE_APPEARANCES. + * + * @return @ref NRF_SUCCESS Appearance value retrieved successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_GAP_APPEARANCE_GET, uint32_t, sd_ble_gap_appearance_get(uint16_t * const p_appearance)); + + +/**@brief Set GAP Peripheral Preferred Connection Parameters. + * + * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure with the desired parameters. + * + * @return @ref NRF_SUCCESS Peripheral Preferred Connection Parameters set successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + */ +SVCALL(SD_BLE_GAP_PPCP_SET, uint32_t, sd_ble_gap_ppcp_set(ble_gap_conn_params_t const * const p_conn_params)); + + +/**@brief Get GAP Peripheral Preferred Connection Parameters. + * + * @param[out] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the parameters will be stored. + * + * @return @ref NRF_SUCCESS Peripheral Preferred Connection Parameters retrieved successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_GAP_PPCP_GET, uint32_t, sd_ble_gap_ppcp_get(ble_gap_conn_params_t * const p_conn_params)); + + +/**@brief Set GAP device name. + * + * @param[in] p_write_perm Write permissions for the Device Name characteristic see @ref ble_gap_conn_sec_mode_t. + * @param[in] p_dev_name Pointer to a UTF-8 encoded, <b>non NULL-terminated</b> string. + * @param[in] len Length of the UTF-8, <b>non NULL-terminated</b> string pointed to by p_dev_name in octets (must be smaller or equal than @ref BLE_GAP_DEVNAME_MAX_LEN). + * + * @return @ref NRF_SUCCESS GAP device name and permissions set successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + */ +SVCALL(SD_BLE_GAP_DEVICE_NAME_SET, uint32_t, sd_ble_gap_device_name_set(ble_gap_conn_sec_mode_t const * const p_write_perm, uint8_t const * const p_dev_name, uint16_t len)); + + +/**@brief Get GAP device name. + * + * @param[in] p_dev_name Pointer to an empty buffer where the UTF-8 <b>non NULL-terminated</b> string will be placed. Set to NULL to obtain the complete device name length. + * @param[in,out] p_len Length of the buffer pointed by p_dev_name, complete device name length on output. + * + * @note If the device name is longer than the size of the supplied buffer, + * p_len will return the complete device name length, + * and not the number of bytes actually returned in p_dev_name. + * The application may use this information to allocate a suitable buffer size. + * + * @return @ref NRF_SUCCESS GAP device name retrieved successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + */ +SVCALL(SD_BLE_GAP_DEVICE_NAME_GET, uint32_t, sd_ble_gap_device_name_get(uint8_t * const p_dev_name, uint16_t * const p_len)); + + +/**@brief Initiate GAP Authentication procedure. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_sec_params Pointer to the @ref ble_gap_sec_params_t structure with the security parameters to be used during the pairing procedure. + * + * @details In the central role, this function will send an SMP Pairing Request, otherwise in the peripheral role, an SMP Security Request will be sent. + * In the peripheral role, only the timeout, bond and mitm fields of @ref ble_gap_sec_params_t are used. + * + * @note The GAP Authentication procedure may be triggered by the central without calling this function when accessing a secure service. + * @note Calling this function may result in the following events depending on the outcome and parameters: @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, + * @ref BLE_GAP_EVT_SEC_INFO_REQUEST, @ref BLE_GAP_EVT_AUTH_KEY_REQUEST, @ref BLE_GAP_EVT_AUTH_STATUS. + * @note The timeout parameter in @ref ble_gap_sec_params_t is interpreted here as the Security Request timeout + * + * + * @return @ref NRF_SUCCESS Successfully initiated authentication procedure. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_AUTHENTICATE, uint32_t, sd_ble_gap_authenticate(uint16_t conn_handle, ble_gap_sec_params_t const * const p_sec_params)); + + +/**@brief Reply with GAP security parameters. + * + * @param[in] conn_handle Connection handle. + * @param[in] sec_status Security status, see @ref BLE_GAP_SEC_STATUS. + * @param[in] p_sec_params Pointer to a @ref ble_gap_sec_params_t security parameters structure. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, calling it at other times will result in an NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * @note The timeout parameter in @ref ble_gap_sec_params_t is interpreted here as the SMP procedure timeout, and must be 30 seconds. The function will fail + * if the application supplies a different value. + * + * @return @ref NRF_SUCCESS Successfully accepted security parameter from the application. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_SEC_PARAMS_REPLY, uint32_t, sd_ble_gap_sec_params_reply(uint16_t conn_handle, uint8_t sec_status, ble_gap_sec_params_t const * const p_sec_params)); + + +/**@brief Reply with an authentication key. + * + * @param[in] conn_handle Connection handle. + * @param[in] key_type See @ref BLE_GAP_AUTH_KEY_TYPES. + * @param[in] key If key type is BLE_GAP_AUTH_KEY_TYPE_NONE, then NULL. + * If key type is BLE_GAP_AUTH_KEY_TYPE_PASSKEY, then a 6-byte ASCII string (digit 0..9 only, no NULL termination). + * If key type is BLE_GAP_AUTH_KEY_TYPE_OOB, then a 16-byte OOB key value in Little Endian format. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_AUTH_KEY_REQUEST, calling it at other times will result in an NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * + * @return @ref NRF_SUCCESS Authentication key successfully set. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_AUTH_KEY_REPLY, uint32_t, sd_ble_gap_auth_key_reply(uint16_t conn_handle, uint8_t key_type, uint8_t const * const key)); + + +/**@brief Reply with GAP security information. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. May be NULL to signal none is available. + * @param[in] p_sign_info Pointer to a @ref ble_gap_sign_info_t signing information structure. May be NULL to signal none is available. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_INFO_REQUEST, calling it at other times will result in NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * @note Data signing is not implemented yet. p_sign_info must therefore be NULL. + * + * @return @ref NRF_SUCCESS Successfully accepted security information. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. + */ +SVCALL(SD_BLE_GAP_SEC_INFO_REPLY, uint32_t, sd_ble_gap_sec_info_reply(uint16_t conn_handle, ble_gap_enc_info_t const * const p_enc_info, ble_gap_sign_info_t const * const p_sign_info)); + + +/**@brief Get the current connection security. + * + * @param[in] conn_handle Connection handle. + * @param[out] p_conn_sec Pointer to a @ref ble_gap_conn_sec_t structure to be filled in. + * + * @return @ref NRF_SUCCESS Current connection security successfully retrieved. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_CONN_SEC_GET, uint32_t, sd_ble_gap_conn_sec_get(uint16_t conn_handle, ble_gap_conn_sec_t * const p_conn_sec)); + + +/**@brief Start reporting the received signal strength to the application. + * + * A new event is reported whenever the RSSI value changes, until @ref sd_ble_gap_rssi_stop is called. + * + * @param[in] conn_handle Connection handle. + * + * @return @ref NRF_SUCCESS Successfully activated RSSI reporting. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_RSSI_START, uint32_t, sd_ble_gap_rssi_start(uint16_t conn_handle)); + + +/**@brief Stop reporting the received singnal strength. + * + * An RSSI change detected before the call but not yet received by the application + * may be reported after @ref sd_ble_gap_rssi_stop has been called. + * + * @param[in] conn_handle Connection handle. + * + * @return @ref NRF_SUCCESS Successfully deactivated RSSI reporting. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_RSSI_STOP, uint32_t, sd_ble_gap_rssi_stop(uint16_t conn_handle)); +/**@} */ + +#endif // BLE_GAP_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gatt.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,171 @@ +/* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + /** + @addtogroup BLE_GATT Generic Attribute Profile (GATT) Common + @{ + @brief Common definitions and prototypes for the GATT interfaces. + */ + +#ifndef BLE_GATT_H__ +#define BLE_GATT_H__ + +#include "ble_types.h" +#include "ble_ranges.h" + + +/** @addtogroup BLE_GATT_DEFINES Defines + * @{ */ + +/** @brief Default MTU size. */ +#define GATT_MTU_SIZE_DEFAULT 23 + +/** @brief Only the default MTU size of 23 is currently supported. */ +#define GATT_RX_MTU 23 + + +/**@brief Invalid Attribute Handle. */ +#define BLE_GATT_HANDLE_INVALID 0x0000 + +/** @defgroup BLE_GATT_TIMEOUT_SOURCES GATT Timeout sources + * @{ */ +#define BLE_GATT_TIMEOUT_SRC_PROTOCOL 0x00 /**< ATT Protocol timeout. */ +/** @} */ + +/** @defgroup BLE_GATT_WRITE_OPS GATT Write operations + * @{ */ +#define BLE_GATT_OP_INVALID 0x00 /**< Invalid Operation. */ +#define BLE_GATT_OP_WRITE_REQ 0x01 /**< Write Request. */ +#define BLE_GATT_OP_WRITE_CMD 0x02 /**< Write Command. */ +#define BLE_GATT_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ +#define BLE_GATT_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ +#define BLE_GATT_OP_EXEC_WRITE_REQ 0x05 /**< Execute Write Request. */ +/** @} */ + +/** @defgroup BLE_GATT_EXEC_WRITE_FLAGS GATT Execute Write flags + * @{ */ +#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_CANCEL 0x00 +#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE 0x01 +/** @} */ + +/** @defgroup BLE_GATT_HVX_TYPES GATT Handle Value operations + * @{ */ +#define BLE_GATT_HVX_INVALID 0x00 /**< Invalid Operation. */ +#define BLE_GATT_HVX_NOTIFICATION 0x01 /**< Handle Value Notification. */ +#define BLE_GATT_HVX_INDICATION 0x02 /**< Handle Value Indication. */ +/** @} */ + +/** @defgroup BLE_GATT_STATUS_CODES GATT Status Codes + * @{ */ +#define BLE_GATT_STATUS_SUCCESS 0x0000 /**< Success. */ +#define BLE_GATT_STATUS_UNKNOWN 0x0001 /**< Unknown or not applicable status. */ +#define BLE_GATT_STATUS_ATTERR_INVALID 0x0100 /**< ATT Error: Invalid Error Code. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_HANDLE 0x0101 /**< ATT Error: Invalid Attribute Handle. */ +#define BLE_GATT_STATUS_ATTERR_READ_NOT_PERMITTED 0x0102 /**< ATT Error: Read not permitted. */ +#define BLE_GATT_STATUS_ATTERR_WRITE_NOT_PERMITTED 0x0103 /**< ATT Error: Write not permitted. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_PDU 0x0104 /**< ATT Error: Used in ATT as Invalid PDU. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHENTICATION 0x0105 /**< ATT Error: Authenticated link required. */ +#define BLE_GATT_STATUS_ATTERR_REQUEST_NOT_SUPPORTED 0x0106 /**< ATT Error: Used in ATT as Request Not Supported. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_OFFSET 0x0107 /**< ATT Error: Offset specified was past the end of the attribute. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHORIZATION 0x0108 /**< ATT Error: Used in ATT as Insufficient Authorisation. */ +#define BLE_GATT_STATUS_ATTERR_PREPARE_QUEUE_FULL 0x0109 /**< ATT Error: Used in ATT as Prepare Queue Full. */ +#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND 0x010A /**< ATT Error: Used in ATT as Attribute not found. */ +#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_LONG 0x010B /**< ATT Error: Attribute cannot be read or written using read/write blob requests. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_ENC_KEY_SIZE 0x010C /**< ATT Error: Encryption key size used is insufficient. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_ATT_VAL_LENGTH 0x010D /**< ATT Error: Invalid value size. */ +#define BLE_GATT_STATUS_ATTERR_UNLIKELY_ERROR 0x010E /**< ATT Error: Very unlikely error. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_ENCRYPTION 0x010F /**< ATT Error: Encrypted link required. */ +#define BLE_GATT_STATUS_ATTERR_UNSUPPORTED_GROUP_TYPE 0x0110 /**< ATT Error: Attribute type is not a supported grouping attribute. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_RESOURCES 0x0111 /**< ATT Error: Encrypted link required. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_BEGIN 0x0112 /**< ATT Error: Reserved for Future Use range #1 begin. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_END 0x017F /**< ATT Error: Reserved for Future Use range #1 end. */ +#define BLE_GATT_STATUS_ATTERR_APP_BEGIN 0x0180 /**< ATT Error: Application range begin. */ +#define BLE_GATT_STATUS_ATTERR_APP_END 0x019F /**< ATT Error: Application range end. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_BEGIN 0x01A0 /**< ATT Error: Reserved for Future Use range #2 begin. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_END 0x01DF /**< ATT Error: Reserved for Future Use range #2 end. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_BEGIN 0x01E0 /**< ATT Error: Reserved for Future Use range #3 begin. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_END 0x01FC /**< ATT Error: Reserved for Future Use range #3 end. */ +#define BLE_GATT_STATUS_ATTERR_CPS_CCCD_CONFIG_ERROR 0x01FD /**< ATT Common Profile and Service Error: Client Characteristic Configuration Descriptor improperly configured. */ +#define BLE_GATT_STATUS_ATTERR_CPS_PROC_ALR_IN_PROG 0x01FE /**< ATT Common Profile and Service Error: Procedure Already in Progress. */ +#define BLE_GATT_STATUS_ATTERR_CPS_OUT_OF_RANGE 0x01FF /**< ATT Common Profile and Service Error: Out Of Range. */ +/** @} */ + + +/** @defgroup BLE_GATT_CPF_FORMATS Characteristic Presentation Formats + * @note Found at http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml + * @{ */ +#define BLE_GATT_CPF_FORMAT_RFU 0x00 /**< Reserved For Future Use. */ +#define BLE_GATT_CPF_FORMAT_BOOLEAN 0x01 /**< Boolean. */ +#define BLE_GATT_CPF_FORMAT_2BIT 0x02 /**< Unsigned 2-bit integer. */ +#define BLE_GATT_CPF_FORMAT_NIBBLE 0x03 /**< Unsigned 4-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT8 0x04 /**< Unsigned 8-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT12 0x05 /**< Unsigned 12-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT16 0x06 /**< Unsigned 16-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT24 0x07 /**< Unsigned 24-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT32 0x08 /**< Unsigned 32-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT48 0x09 /**< Unsigned 48-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT64 0x0A /**< Unsigned 64-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT128 0x0B /**< Unsigned 128-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT8 0x0C /**< Signed 2-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT12 0x0D /**< Signed 12-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT16 0x0E /**< Signed 16-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT24 0x0F /**< Signed 24-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT32 0x10 /**< Signed 32-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT48 0x11 /**< Signed 48-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT64 0x12 /**< Signed 64-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT128 0x13 /**< Signed 128-bit integer. */ +#define BLE_GATT_CPF_FORMAT_FLOAT32 0x14 /**< IEEE-754 32-bit floating point. */ +#define BLE_GATT_CPF_FORMAT_FLOAT64 0x15 /**< IEEE-754 64-bit floating point. */ +#define BLE_GATT_CPF_FORMAT_SFLOAT 0x16 /**< IEEE-11073 16-bit SFLOAT. */ +#define BLE_GATT_CPF_FORMAT_FLOAT 0x17 /**< IEEE-11073 32-bit FLOAT. */ +#define BLE_GATT_CPF_FORMAT_DUINT16 0x18 /**< IEEE-20601 format. */ +#define BLE_GATT_CPF_FORMAT_UTF8S 0x19 /**< UTF-8 string. */ +#define BLE_GATT_CPF_FORMAT_UTF16S 0x1A /**< UTF-16 string. */ +#define BLE_GATT_CPF_FORMAT_STRUCT 0x1B /**< Opaque Structure. */ +/** @} */ + +/** @defgroup BLE_GATT_CPF_NAMESPACES GATT Bluetooth Namespaces + * @{ + */ +#define BLE_GATT_CPF_NAMESPACE_BTSIG 0x01 +#define BLE_GATT_CPF_NAMESPACE_DESCRIPTION_UNKNOWN 0x0000 +/** @} */ + +/** @} */ + +/** @addtogroup BLE_GATT_STRUCTURES Structures + * @{ */ + +/**@brief GATT Characteristic Properties. */ +typedef struct +{ + /* Standard properties */ + uint8_t broadcast :1; /**< Broadcasting of value permitted. */ + uint8_t read :1; /**< Reading value permitted. */ + uint8_t write_wo_resp :1; /**< Writing value with Write Command permitted. */ + uint8_t write :1; /**< Writing value with Write Request permitted. */ + uint8_t notify :1; /**< Notications of value permitted. */ + uint8_t indicate :1; /**< Indications of value permitted. */ + uint8_t auth_signed_wr :1; /**< Writing value with Signed Write Command permitted. */ +} ble_gatt_char_props_t; + +/**@brief GATT Characteristic Extended Properties. */ +typedef struct +{ + /* Extended properties */ + uint8_t reliable_wr :1; /**< Writing value with Queued Write Request permitted. */ + uint8_t wr_aux :1; /**< Writing the Characteristic User Description permitted. */ +} ble_gatt_char_ext_props_t; + +#endif // BLE_GATT_H__ + +/** @} */ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gattc.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,406 @@ +/* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_GATTC Generic Attribute Profile (GATT) Client + @{ + @brief Definitions and prototypes for the GATT Client interface. + */ + +#ifndef BLE_GATTC_H__ +#define BLE_GATTC_H__ + +#include "ble_gatt.h" +#include "ble_types.h" +#include "ble_ranges.h" +#include "nrf_svc.h" + +/** @addtogroup BLE_GATTC_ENUMERATIONS Enumerations + * @{ */ + +/**@brief GATTC API SVC numbers. */ +enum BLE_GATTC_SVCS +{ + SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER = BLE_GATTC_SVC_BASE, /**< Primary Service Discovery. */ + SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, /**< Relationship Discovery. */ + SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, /**< Characteristic Discovery. */ + SD_BLE_GATTC_DESCRIPTORS_DISCOVER, /**< Characteristic Descriptor Discovery. */ + SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, /**< Read Characteristic Value by UUID. */ + SD_BLE_GATTC_READ, /**< Generic read. */ + SD_BLE_GATTC_CHAR_VALUES_READ, /**< Read multiple Characteristic Values. */ + SD_BLE_GATTC_WRITE, /**< Generic write. */ + SD_BLE_GATTC_HV_CONFIRM /**< Handle Value Confirmation. */ +}; + +/** @} */ + +/** @addtogroup BLE_GATTC_DEFINES Defines + * @{ */ + +/** @defgroup BLE_ERRORS_GATTC SVC return values specific to GATTC + * @{ */ +#define BLE_ERROR_GATTC_PROC_NOT_PERMITTED (NRF_GATTC_ERR_BASE + 0x000) +/** @} */ + +/**@brief Last Attribute Handle. */ +#define BLE_GATTC_HANDLE_END 0xFFFF + +/** @} */ + +/** @addtogroup BLE_GATTC_STRUCTURES Structures + * @{ */ + +/**@brief Operation Handle Range. */ +typedef struct +{ + uint16_t start_handle; /**< Start Handle. */ + uint16_t end_handle; /**< End Handle. */ +} ble_gattc_handle_range_t; + + +/**@brief GATT service. */ +typedef struct +{ + ble_uuid_t uuid; /**< Service UUID. */ + ble_gattc_handle_range_t handle_range; /**< Service Handle Range. */ +} ble_gattc_service_t; + + +/**@brief GATT include. */ +typedef struct +{ + uint16_t handle; /**< Include Handle. */ + ble_gattc_service_t included_srvc; /**< Handle of the included service. */ +} ble_gattc_include_t; + + +/**@brief GATT characteristic. */ +typedef struct +{ + ble_uuid_t uuid; /**< Characteristic UUID. */ + ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ + uint8_t char_ext_props : 1; /**< Extended properties present. */ + uint16_t handle_decl; /**< Handle of the Characteristic Declaration. */ + uint16_t handle_value; /**< Handle of the Characteristic Value. */ +} ble_gattc_char_t; + + +/**@brief GATT descriptor. */ +typedef struct +{ + uint16_t handle; /**< Descriptor Handle. */ + ble_uuid_t uuid; /**< Descriptor UUID. */ +} ble_gattc_desc_t; + + +/**@brief Write Parameters. */ +typedef struct +{ + uint8_t write_op; /**< Write Operation to be performed, see @ref BLE_GATT_WRITE_OPS. */ + uint16_t handle; /**< Handle to the attribute to be written. */ + uint16_t offset; /**< Offset in bytes. @note For WRITE_CMD and WRITE_REQ, offset must be 0. */ + uint16_t len; /**< Length of data in bytes. */ + uint8_t* p_value; /**< Pointer to the value data. */ + uint8_t flags; /**< Flags, see @ref BLE_GATT_EXEC_WRITE_FLAGS. */ +} ble_gattc_write_params_t; + + +/** + * @brief GATT Client Event IDs. + */ +enum BLE_GATTC_EVTS +{ + BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP = BLE_GATTC_EVT_BASE, /**< Primary Service Discovery Response event. */ + BLE_GATTC_EVT_REL_DISC_RSP, /**< Relationship Discovery Response event. */ + BLE_GATTC_EVT_CHAR_DISC_RSP, /**< Characteristic Discovery Response event. */ + BLE_GATTC_EVT_DESC_DISC_RSP, /**< Descriptor Discovery Response event. */ + BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP, /**< Read By UUID Response event. */ + BLE_GATTC_EVT_READ_RSP, /**< Read Response event. */ + BLE_GATTC_EVT_CHAR_VALS_READ_RSP, /**< Read multiple Response event. */ + BLE_GATTC_EVT_WRITE_RSP, /**< Write Response event. */ + BLE_GATTC_EVT_HVX, /**< Handle Value Notification or Indication event. */ + BLE_GATTC_EVT_TIMEOUT /**< Timeout event. */ +}; + +/**@brief Event structure for BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Service count. */ + ble_gattc_service_t services[1]; /**< Service data, variable length. */ +} ble_gattc_evt_prim_srvc_disc_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_REL_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Include count. */ + ble_gattc_include_t includes[1]; /**< Include data, variable length. */ +} ble_gattc_evt_rel_disc_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_CHAR_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Characteristic count. */ + ble_gattc_char_t chars[1]; /**< Characteristic data, variable length. */ +} ble_gattc_evt_char_disc_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_DESC_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Descriptor count. */ + ble_gattc_desc_t descs[1]; /**< Descriptor data, variable length. */ +} ble_gattc_evt_desc_disc_rsp_t; + +/**@brief GATT read by UUID handle value pair. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint8_t *p_value; /**< Pointer to value, variable length (length available as value_len in ble_gattc_evt_read_by_uuid_rsp_t). + Please note that this pointer is absolute to the memory provided by the user when retrieving the event, + so it will effectively point to a location inside the handle_value array. */ +} ble_gattc_handle_value_t; + +/**@brief Event structure for BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP. */ +typedef struct +{ + uint16_t count; /**< Handle-Value Pair Count. */ + uint16_t value_len; /**< Length of the value in Handle-Value(s) list. */ + ble_gattc_handle_value_t handle_value[1]; /**< Handle-Value(s) list, variable length. */ +} ble_gattc_evt_char_val_by_uuid_read_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_READ_RSP. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint16_t offset; /**< Offset of the attribute data. */ + uint16_t len; /**< Attribute data length. */ + uint8_t data[1]; /**< Attribute data, variable length. */ +} ble_gattc_evt_read_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_CHAR_VALS_READ_RSP. */ +typedef struct +{ + uint16_t len; /**< Concatenated Attribute values length. */ + uint8_t values[1]; /**< Attribute values, variable length. */ +} ble_gattc_evt_char_vals_read_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_WRITE_RSP. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint8_t write_op; /**< Type of write operation, see @ref BLE_GATT_WRITE_OPS. */ + uint16_t offset; /**< Data Offset. */ + uint16_t len; /**< Data length. */ + uint8_t data[1]; /**< Data, variable length. */ +} ble_gattc_evt_write_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_HVX. */ +typedef struct +{ + uint16_t handle; /**< Handle to which the HVx operation applies. */ + uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ + uint16_t len; /**< Attribute data length. */ + uint8_t data[1]; /**< Attribute data, variable length. */ +} ble_gattc_evt_hvx_t; + +/**@brief Event structure for BLE_GATTC_EVT_TIMEOUT. */ +typedef struct +{ + uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ +} ble_gattc_evt_timeout_t; + +/**@brief GATTC event type. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occured. */ + uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ + uint16_t error_handle; /**< In case of error: The handle causing the error. In all other cases BLE_GATT_HANDLE_INVALID. */ + union + { + ble_gattc_evt_prim_srvc_disc_rsp_t prim_srvc_disc_rsp; /**< Primary Service Discovery Response Event Parameters. */ + ble_gattc_evt_rel_disc_rsp_t rel_disc_rsp; /**< Relationship Discovery Response Event Parameters. */ + ble_gattc_evt_char_disc_rsp_t char_disc_rsp; /**< Characteristic Discovery Response Event Parameters. */ + ble_gattc_evt_desc_disc_rsp_t desc_disc_rsp; /**< Descriptor Discovery Response Event Parameters. */ + ble_gattc_evt_char_val_by_uuid_read_rsp_t char_val_by_uuid_read_rsp; /**< Characteristic Value Read by UUID Response Event Parameters. */ + ble_gattc_evt_read_rsp_t read_rsp; /**< Read Response Event Parameters. */ + ble_gattc_evt_char_vals_read_rsp_t char_vals_read_rsp; /**< Characteristic Values Read Response Event Parameters. */ + ble_gattc_evt_write_rsp_t write_rsp; /**< Write Response Event Parameters. */ + ble_gattc_evt_hvx_t hvx; /**< Handle Value Notification/Indication Event Parameters. */ + ble_gattc_evt_timeout_t timeout; /**< Timeout Event Parameters. */ + } params; /**< Event Parameters. @note Only valid if @ref gatt_status == BLE_GATT_STATUS_SUCCESS. */ +} ble_gattc_evt_t; +/** @} */ + +/** @addtogroup BLE_GATTC_FUNCTIONS Functions + * @{ */ + +/**@brief Initiate or continue a GATT Primary Service Discovery procedure. + * + * @details This function initiates a Primary Service discovery, starting from the supplied handle. + * If the last service has not been reached, this must be called again with an updated start handle value to continue the search. + * + * @note If any of the discovered services have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with + * type BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] start_handle Handle to start searching from. + * @param[in] p_srvc_uuid Pointer to the service UUID to be found. If it is NULL, all primary services will be returned. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Primary Service Discovery procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER, uint32_t, sd_ble_gattc_primary_services_discover(uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const * const p_srvc_uuid)); + + +/**@brief Initiate or continue a GATT Relationship Discovery procedure. + * + * @details This function initiates the Find Included Services sub-procedure. If the last included service has not been reached, + * this must be called again with an updated handle range to continue the search. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Relationship Discovery procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, uint32_t, sd_ble_gattc_relationships_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); + + +/**@brief Initiate or continue a GATT Characteristic Discovery procedure. + * + * @details This function initiates a Characteristic discovery procedure. If the last Characteristic has not been reached, + * this must be called again with an updated handle range to continue the discovery. + * + * @note If any of the discovered characteristics have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with + * type BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Characteristic Discovery procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, uint32_t, sd_ble_gattc_characteristics_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); + + +/**@brief Initiate or continue a GATT Characteristic Descriptor Discovery procedure. + * + * @details This function initiates the Characteristic Descriptor discovery procedure. If the last Descriptor has not been reached, + * this must be called again with an updated handle range to continue the discovery. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range A pointer to the range of handles of the Characteristic to perform this procedure on. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Descriptor Discovery procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_DESCRIPTORS_DISCOVER, uint32_t, sd_ble_gattc_descriptors_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); + + +/**@brief Initiate or continue a GATT Read using Characteristic UUID procedure. + * + * @details This function initiates the Read using Characteristic UUID procedure. If the last Characteristic has not been reached, + * this must be called again with an updated handle range to continue the discovery. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_uuid Pointer to a Characteristic value UUID to read. + * @param[in] p_handle_range A pointer to the range of handles to perform this procedure on. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Read using Characteristic UUID procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, uint32_t, sd_ble_gattc_char_value_by_uuid_read(uint16_t conn_handle, ble_uuid_t const * const p_uuid, ble_gattc_handle_range_t const * const p_handle_range)); + + +/**@brief Initiate or continue a GATT Read (Long) Characteristic or Descriptor procedure. + * + * @details This function initiates a GATT Read (Long) Characteristic or Descriptor procedure. If the Characteristic or Descriptor + * to be read is longer than GATT_MTU - 1, this function must be called multiple times with appropriate offset to read the + * complete value. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] handle The handle of the attribute to be read. + * @param[in] offset Offset into the attribute value to be read. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Read (Long) procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_READ, uint32_t, sd_ble_gattc_read(uint16_t conn_handle, uint16_t handle, uint16_t offset)); + + +/**@brief Initiate a GATT Read Multiple Characteristic Values procedure. + * + * @details This function initiates a GATT Read Multiple Characteristic Values procedure. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. + * @param[in] handle_count The number of handles in p_handles. + * + * @return @ref NRF_SUCCESS Successfully started the Read Multiple Characteristic Values procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_CHAR_VALUES_READ, uint32_t, sd_ble_gattc_char_values_read(uint16_t conn_handle, uint16_t const * const p_handles, uint16_t handle_count)); + + +/**@brief Perform a Write (Characteristic Value or Descriptor, with or without response, signed or not, long or reliable) procedure. + * + * @details This function can perform all write procedures described in GATT. + * + * @note It is important to note that a write without response will <b>consume an application buffer</b>, and will therefore + * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. A write on the other hand will use the + * standard client internal buffer and thus will only generate a @ref BLE_GATTC_EVT_WRITE_RSP event as soon as the write response + * has been received from the peer. Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_write_params A pointer to a write parameters structure. + * + * @return @ref NRF_SUCCESS Successfully started the Write procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + * @return @ref NRF_ERROR_BUSY Procedure already in progress. + * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers left. + */ +SVCALL(SD_BLE_GATTC_WRITE, uint32_t, sd_ble_gattc_write(uint16_t conn_handle, ble_gattc_write_params_t const * const p_write_params)); + + +/**@brief Send a Handle Value Confirmation to the GATT Server. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] handle The handle of the attribute in the indication. + * + * @return @ref NRF_SUCCESS Successfully queued the Handle Value Confirmation for transmission. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_STATE No Indication pending to be confirmed. + * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle. + * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers left. + */ +SVCALL(SD_BLE_GATTC_HV_CONFIRM, uint32_t, sd_ble_gattc_hv_confirm(uint16_t conn_handle, uint16_t handle)); + +/** @} */ + +#endif /* BLE_GATTC_H__ */ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gatts.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,566 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_GATTS Generic Attribute Profile (GATT) Server + @{ + @brief Definitions and prototypes for the GATTS interface. + */ + +#ifndef BLE_GATTS_H__ +#define BLE_GATTS_H__ + +#include "ble_types.h" +#include "ble_ranges.h" +#include "ble_l2cap.h" +#include "ble_gap.h" +#include "ble_gatt.h" +#include "nrf_svc.h" + +/** @addtogroup BLE_GATTS_ENUMERATIONS Enumerations + * @{ */ + +/** + * @brief GATTS API SVC numbers. + */ +enum BLE_GATTS_SVCS +{ + SD_BLE_GATTS_SERVICE_ADD = BLE_GATTS_SVC_BASE, /**< Add a service. */ + SD_BLE_GATTS_INCLUDE_ADD, /**< Add an included service. */ + SD_BLE_GATTS_CHARACTERISTIC_ADD, /**< Add a characteristic. */ + SD_BLE_GATTS_DESCRIPTOR_ADD, /**< Add a generic attribute. */ + SD_BLE_GATTS_VALUE_SET, /**< Set an attribute value. */ + SD_BLE_GATTS_VALUE_GET, /**< Get an attribute value. */ + SD_BLE_GATTS_HVX, /**< Handle Value Notification or Indication. */ + SD_BLE_GATTS_SERVICE_CHANGED, /**< Perform a Service Changed Indication to one or more peers. */ + SD_BLE_GATTS_RW_AUTHORIZE_REPLY, /**< Reply to an authorization request for a read or write operation on one or more attributes. */ + SD_BLE_GATTS_SYS_ATTR_SET, /**< Set the persistent system attributes for a connection. */ + SD_BLE_GATTS_SYS_ATTR_GET, /**< Get updated persistent system attributes after terminating a connection. */ +}; + +/** @} */ + +/** @addtogroup BLE_GATTS_DEFINES Defines + * @{ */ + +/** @brief Only the default MTU size of 23 is currently supported. */ +#define GATT_RX_MTU 23 + +/** @defgroup BLE_ERRORS_GATTS SVC return values specific to GATTS + * @{ */ +#define BLE_ERROR_GATTS_INVALID_ATTR_TYPE (NRF_GATTS_ERR_BASE + 0x000) /**< Invalid attribute type. */ +#define BLE_ERROR_GATTS_SYS_ATTR_MISSING (NRF_GATTS_ERR_BASE + 0x001) /**< System Attributes missing. */ +/** @} */ + +/** @defgroup BLE_GATTS_ATTR_LENS_MAX Maximum attribute lengths + * @{ */ +#define BLE_GATTS_FIX_ATTR_LEN_MAX (510) /**< Maximum length for fixed length Attribute Values. */ +#define BLE_GATTS_VAR_ATTR_LEN_MAX (512) /**< Maximum length for variable length Attribute Values. */ +/** @} */ + +/** @defgroup BLE_GATTS_SRVC_TYPES GATT Server Service Types + * @{ */ +#define BLE_GATTS_SRVC_TYPE_INVALID 0x00 /**< Invalid Service Type. */ +#define BLE_GATTS_SRVC_TYPE_PRIMARY 0x01 /**< Primary Service. */ +#define BLE_GATTS_SRVC_TYPE_SECONDARY 0x02 /**< Secondary Type. */ +/** @} */ + + +/** @defgroup BLE_GATTS_ATTR_TYPES GATT Server Attribute Types + * @{ */ +#define BLE_GATTS_ATTR_TYPE_INVALID 0x00 /**< Invalid Attribute Type. */ +#define BLE_GATTS_ATTR_TYPE_PRIM_SRVC_DECL 0x01 /**< Primary Service Declaration. */ +#define BLE_GATTS_ATTR_TYPE_SEC_SRVC_DECL 0x02 /**< Secondary Service Declaration. */ +#define BLE_GATTS_ATTR_TYPE_INC_DECL 0x03 /**< Include Declaration. */ +#define BLE_GATTS_ATTR_TYPE_CHAR_DECL 0x04 /**< Characteristic Declaration. */ +#define BLE_GATTS_ATTR_TYPE_CHAR_VAL 0x05 /**< Characteristic Value. */ +#define BLE_GATTS_ATTR_TYPE_DESC 0x06 /**< Descriptor. */ +#define BLE_GATTS_ATTR_TYPE_OTHER 0x07 /**< Other, non-GATT specific type. */ +/** @} */ + + +/** @defgroup BLE_GATTS_OPS GATT Server Operations + * @{ */ +#define BLE_GATTS_OP_INVALID 0x00 /**< Invalid Operation. */ +#define BLE_GATTS_OP_WRITE_REQ 0x01 /**< Write Request. */ +#define BLE_GATTS_OP_WRITE_CMD 0x02 /**< Write Command. */ +#define BLE_GATTS_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ +#define BLE_GATTS_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ +#define BLE_GATTS_OP_EXEC_WRITE_REQ_CANCEL 0x05 /**< Execute Write Request: Cancel all prepared writes. */ +#define BLE_GATTS_OP_EXEC_WRITE_REQ_NOW 0x06 /**< Execute Write Request: Immediately execute all prepared writes. */ +/** @} */ + +/** @defgroup BLE_GATTS_VLOCS GATT Value Locations + * @{ */ +#define BLE_GATTS_VLOC_INVALID 0x00 /**< Invalid Location. */ +#define BLE_GATTS_VLOC_STACK 0x01 /**< Attribute Value is located in stack memory, no user memory is required. */ +#define BLE_GATTS_VLOC_USER 0x02 /**< Attribute Value is located in user memory. This requires the user to maintain a valid buffer through the lifetime of the attribute, since the stack + will read and write directly to the memory using the pointer provided in the APIs. There are no alignment requirements for the buffer. */ +/** @} */ + +/** @defgroup BLE_GATTS_AUTHORIZE_TYPES GATT Server Authorization Types + * @{ */ +#define BLE_GATTS_AUTHORIZE_TYPE_INVALID 0x00 /**< Invalid Type. */ +#define BLE_GATTS_AUTHORIZE_TYPE_READ 0x01 /**< Authorize a Read Operation. */ +#define BLE_GATTS_AUTHORIZE_TYPE_WRITE 0x02 /**< Authorize a Write Request Operation. */ +/** @} */ + + +/** @} */ + +/** @addtogroup BLE_GATTS_STRUCTURES Structures + * @{ */ + +/** + * @brief BLE GATTS init options + */ +typedef struct +{ + uint8_t service_changed:1; /**< Include the Service Changed characteristic in the local attributes. */ +} ble_gatts_enable_params_t; + +/**@brief Attribute metadata. */ +typedef struct +{ + ble_gap_conn_sec_mode_t read_perm; /**< Read permissions. */ + ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ + uint8_t vlen :1; /**< Variable length attribute. */ + uint8_t vloc :2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ + uint8_t rd_auth :1; /**< Read Authorization and value will be requested from the application on every read operation. */ + uint8_t wr_auth :1; /**< Write Authorization will be requested from the application on every Write Request operation (but not Write Command). */ +} ble_gatts_attr_md_t; + + +/**@brief GATT Attribute. */ +typedef struct +{ + ble_uuid_t* p_uuid; /**< Pointer to the attribute UUID. */ + ble_gatts_attr_md_t* p_attr_md; /**< Pointer to the attribute metadata structure. */ + uint16_t init_len; /**< Initial attribute value length in bytes. */ + uint16_t init_offs; /**< Initial attribute value offset in bytes. If different from zero, the first init_offs bytes of the attribute value will be left uninitialized. */ + uint16_t max_len; /**< Maximum attribute value length in bytes, see @ref BLE_GATTS_ATTR_LENS_MAX for maximum values. */ + uint8_t* p_value; /**< Pointer to the attribute data. Please note that if the @ref BLE_GATTS_VLOC_USER value location is selected in the attribute metadata, this will have to point to a buffer + that remains valid through the lifetime of the attribute. This excludes usage of automatic variables that may go out of scope or any other temporary location. + The stack may access that memory directly without the application's knowledge. */ +} ble_gatts_attr_t; + + +/**@brief GATT Attribute Context. */ +typedef struct +{ + ble_uuid_t srvc_uuid; /**< Service UUID. */ + ble_uuid_t char_uuid; /**< Characteristic UUID if applicable (BLE_UUID_TYPE_UNKNOWN if N/A). */ + ble_uuid_t desc_uuid; /**< Descriptor UUID if applicable (BLE_UUID_TYPE_UNKNOWN if N/A). */ + uint16_t srvc_handle; /**< Service Handle. */ + uint16_t value_handle; /**< Characteristic Handle if applicable (BLE_GATT_HANDLE_INVALID if N/A). */ + uint8_t type; /**< Attribute Type, see @ref BLE_GATTS_ATTR_TYPES. */ +} ble_gatts_attr_context_t; + + +/**@brief GATT Characteristic Presentation Format. */ +typedef struct +{ + uint8_t format; /**< Format of the value, see @ref BLE_GATT_CPF_FORMATS. */ + int8_t exponent; /**< Exponent for integer data types. */ + uint16_t unit; /**< UUID from Bluetooth Assigned Numbers. */ + uint8_t name_space; /**< Namespace from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ + uint16_t desc; /**< Namespace description from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ +} ble_gatts_char_pf_t; + + +/**@brief GATT Characteristic metadata. */ +typedef struct +{ + ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ + ble_gatt_char_ext_props_t char_ext_props; /**< Characteristic Extended Properties. */ + uint8_t* p_char_user_desc; /**< Pointer to a UTF-8, NULL if the descriptor is not required. */ + uint16_t char_user_desc_max_size; /**< The maximum size in bytes of the user description descriptor. */ + uint16_t char_user_desc_size; /**< The size of the user description, must be smaller or equal to char_user_desc_max_size. */ + ble_gatts_char_pf_t* p_char_pf; /**< Pointer to a presentation format structure or NULL if the descriptor is not required. */ + ble_gatts_attr_md_t* p_user_desc_md; /**< Attribute metadata for the User Description descriptor, or NULL for default values. */ + ble_gatts_attr_md_t* p_cccd_md; /**< Attribute metadata for the Client Characteristic Configuration Descriptor, or NULL for default values. */ + ble_gatts_attr_md_t* p_sccd_md; /**< Attribute metadata for the Server Characteristic Configuration Descriptor, or NULL for default values. */ +} ble_gatts_char_md_t; + + +/**@brief GATT Characteristic Definition Handles. */ +typedef struct +{ + uint16_t value_handle; /**< Handle to the characteristic value. */ + uint16_t user_desc_handle; /**< Handle to the User Description descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ + uint16_t cccd_handle; /**< Handle to the Client Characteristic Configuration Descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ + uint16_t sccd_handle; /**< Handle to the Server Characteristic Configuration Descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ +} ble_gatts_char_handles_t; + + +/**@brief GATT HVx parameters. */ +typedef struct +{ + uint16_t handle; /**< Characteristic Value Handle. */ + uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ + uint16_t offset; /**< Offset within the attribute value. */ + uint16_t* p_len; /**< Length in bytes to be written, length in bytes written after successful return. */ + uint8_t* p_data; /**< Actual data content, use NULL to use the current attribute value. */ +} ble_gatts_hvx_params_t; + +/**@brief GATT Read Authorization parameters. */ +typedef struct +{ + uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ + uint8_t update : 1; /**< If set, data supplied in p_data will be used in the ATT response. */ + uint16_t offset; /**< Offset of the attribute value being updated. */ + uint16_t len; /**< Length in bytes of the value in p_data pointer, see @ref BLE_GATTS_ATTR_LENS_MAX. */ + uint8_t* p_data; /**< Pointer to new value used to update the attribute value. */ +} ble_gatts_read_authorize_params_t; + +/**@brief GATT Write Authorisation parameters. */ +typedef struct +{ + uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ +} ble_gatts_write_authorize_params_t; + +/**@brief GATT Read or Write Authorize Reply parameters. */ +typedef struct +{ + uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ + union { + ble_gatts_read_authorize_params_t read; /**< Read authorization parameters. */ + ble_gatts_write_authorize_params_t write; /**< Write authorization parameters. */ + } params; +} ble_gatts_rw_authorize_reply_params_t; + + +/** + * @brief GATT Server Event IDs. + */ +enum BLE_GATTS_EVTS +{ + BLE_GATTS_EVT_WRITE = BLE_GATTS_EVT_BASE, /**< Write operation performed. */ + BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST, /**< Read/Write Authorization request. */ + BLE_GATTS_EVT_SYS_ATTR_MISSING, /**< A persistent system attribute access is pending, awaiting a sd_ble_gatts_sys_attr_set(). */ + BLE_GATTS_EVT_HVC, /**< Handle Value Confirmation. */ + BLE_GATTS_EVT_SC_CONFIRM, /**< Service Changed Confirmation. */ + BLE_GATTS_EVT_TIMEOUT /**< Timeout. */ +}; + + +/**@brief Event structure for BLE_GATTS_EVT_WRITE. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint8_t op; /**< Type of write operation, see @ref BLE_GATTS_OPS. */ + ble_gatts_attr_context_t context; /**< Attribute Context. */ + uint16_t offset; /**< Offset for the write operation. */ + uint16_t len; /**< Length of the incoming data. */ + uint8_t data[1]; /**< Incoming data, variable length. */ +} ble_gatts_evt_write_t; + +/**@brief Event structure for authorize read request. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + ble_gatts_attr_context_t context; /**< Attribute Context. */ + uint16_t offset; /**< Offset for the read operation. */ +} ble_gatts_evt_read_t; + +/**@brief Event structure for BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST. */ +typedef struct +{ + uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ + union { + ble_gatts_evt_read_t read; /**< Attribute Read Parameters. */ + ble_gatts_evt_write_t write; /**< Attribute Write Parameters. */ + } request; +} ble_gatts_evt_rw_authorize_request_t; + +/**@brief Event structure for BLE_GATTS_EVT_SYS_ATTR_MISSING. */ +typedef struct +{ + uint8_t hint; +} ble_gatts_evt_sys_attr_missing_t; + + +/**@brief Event structure for BLE_GATTS_EVT_HVC. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ +} ble_gatts_evt_hvc_t; + +/**@brief Event structure for BLE_GATTS_EVT_TIMEOUT. */ +typedef struct +{ + uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ +} ble_gatts_evt_timeout_t; + + +/**@brief GATT Server event callback event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occurred. */ + union + { + ble_gatts_evt_write_t write; /**< Write Event Parameters. */ + ble_gatts_evt_rw_authorize_request_t authorize_request; /**< Read or Write Authorize Request Parameters. */ + ble_gatts_evt_sys_attr_missing_t sys_attr_missing; /**< System attributes missing. */ + ble_gatts_evt_hvc_t hvc; /**< Handle Value Confirmation Event Parameters. */ + ble_gatts_evt_timeout_t timeout; /**< Timeout Event. */ + } params; +} ble_gatts_evt_t; + +/** @} */ + +/** @addtogroup BLE_GATTS_FUNCTIONS Functions + * @{ */ + +/**@brief Add a service declaration to the local server ATT table. + * + * @param[in] type Toggles between primary and secondary services, see @ref BLE_GATTS_SRVC_TYPES. + * @param[in] p_uuid Pointer to service UUID. + * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. + * + * @note Secondary Services are only relevant in the context of the entity that references them, it is therefore forbidden to + * add a secondary service declaration that is not referenced by another service later in the ATT table. + * + * @return @ref NRF_SUCCESS Successfully added a service declaration. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, Vendor Specific UUIDs need to be present in the table. + * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_GATTS_SERVICE_ADD, uint32_t, sd_ble_gatts_service_add(uint8_t type, ble_uuid_t const*const p_uuid, uint16_t *const p_handle)); + + +/**@brief Add an include declaration to the local server ATT table. + * + * @note It is currently only possible to add an include declaration to the last added service (i.e. only sequential addition is supported at this time). + * + * @note The included service must already be present in the ATT table prior to this call. + * + * @param[in] service_handle Handle of the service where the included service is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. + * @param[in] inc_srvc_handle Handle of the included service. + * @param[out] p_include_handle Pointer to a 16-bit word where the assigned handle will be stored. + * + * @return @ref NRF_SUCCESS Successfully added an include declaration. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, handle values need to match previously added services. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, self inclusions are not allowed. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. + */ +SVCALL(SD_BLE_GATTS_INCLUDE_ADD, uint32_t, sd_ble_gatts_include_add(uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *const p_include_handle)); + + +/**@brief Add a characteristic declaration, a characteristic value declaration and optional characteristic descriptor declarations to the local server ATT table. + * + * @note It is currently only possible to add a characteristic to the last added service (i.e. only sequential addition is supported at this time). + * + * @note Several restrictions apply to the parameters, such as matching permissions between the user description descriptor and the writeable auxiliaries bits, + * readable (no security) and writeable (selectable) CCCDs and SCCDs and valid presentation format values. + * + * @note If no metadata is provided for the optional descriptors, their permissions will be derived from the characteristic permissions. + * + * @param[in] service_handle Handle of the service where the characteristic is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. + * @param[in] p_char_md Characteristic metadata. + * @param[in] p_attr_char_value Pointer to the attribute structure corresponding to the characteristic value. + * @param[out] p_handles Pointer to the structure where the assigned handles will be stored. + * + * @return @ref NRF_SUCCESS Successfully added a characteristic. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, service handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required. + * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. + */ +SVCALL(SD_BLE_GATTS_CHARACTERISTIC_ADD, uint32_t, sd_ble_gatts_characteristic_add(uint16_t service_handle, ble_gatts_char_md_t const*const p_char_md, ble_gatts_attr_t const*const p_attr_char_value, ble_gatts_char_handles_t *const p_handles)); + + +/**@brief Add a descriptor to the local server ATT table. + * + * @note It is currently only possible to add a descriptor to the last added characteristic (i.e. only sequential addition is supported at this time). + * + * @param[in] char_handle Handle of the characteristic where the descriptor is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. + * @param[in] p_attr Pointer to the attribute structure. + * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. + * + * @return @ref NRF_SUCCESS Successfully added a descriptor. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, characteristic handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, a characteristic context is required. + * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. + */ +SVCALL(SD_BLE_GATTS_DESCRIPTOR_ADD, uint32_t, sd_ble_gatts_descriptor_add(uint16_t char_handle, ble_gatts_attr_t const * const p_attr, uint16_t* const p_handle)); + +/**@brief Set the value of a given attribute. + * + * @param[in] handle Attribute handle. + * @param[in] offset Offset in bytes to write from. + * @param[in,out] p_len Length in bytes to be written, length in bytes written after successful return. + * @param[in] p_value Pointer to a buffer (at least len bytes long) containing the desired attribute value. If value is stored in user memory, only the attribute length is updated when p_value == NULL. + * + * @return @ref NRF_SUCCESS Successfully set the value of the attribute. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. + * @return @ref NRF_ERROR_FORBIDDEN Forbidden handle supplied, certain attributes are not modifiable by the application. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. + */ +SVCALL(SD_BLE_GATTS_VALUE_SET, uint32_t, sd_ble_gatts_value_set(uint16_t handle, uint16_t offset, uint16_t* const p_len, uint8_t const * const p_value)); + +/**@brief Get the value of a given attribute. + * + * @param[in] handle Attribute handle. + * @param[in] offset Offset in bytes to read from. + * @param[in,out] p_len Length in bytes to be read, total length of attribute value (in bytes, starting from offset) after successful return. + * @param[in,out] p_data Pointer to a buffer (at least len bytes long) where to store the attribute value. Set to NULL to obtain the complete length of attribute value. + * + * @note If the attribute value is longer than the size of the supplied buffer, + * p_len will return the total attribute value length (excluding offset), + * and not the number of bytes actually returned in p_data. + * The application may use this information to allocate a suitable buffer size. + * + * @return @ref NRF_SUCCESS Successfully retrieved the value of the attribute. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. + */ +SVCALL(SD_BLE_GATTS_VALUE_GET, uint32_t, sd_ble_gatts_value_get(uint16_t handle, uint16_t offset, uint16_t *const p_len, uint8_t* const p_data)); + +/**@brief Notify or Indicate an attribute value. + * + * @details This function checks for the relevant Client Characteristic Configuration descriptor value to verify that the relevant operation + * (notification or indication) has been enabled by the client. It is also able to update the attribute value before issuing the PDU, so that + * the application can atomically perform a value update and a server initiated transaction with a single API call. + * If the application chooses to indicate an attribute value, a @ref BLE_GATTS_EVT_HVC will be sent up as soon as the confirmation arrives from + * the peer. + * + * @note The local attribute value may be updated even if an outgoing packet is not sent to the peer due to an error during execution. + * When receiveing the error codes @ref NRF_ERROR_INVALID_STATE, @ref NRF_ERROR_BUSY, @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING and + * @ref BLE_ERROR_NO_TX_BUFFERS the ATT table has been updated. + * The caller can check whether the value has been updated by looking at the contents of *(p_hvx_params->p_len). + * + * @note It is important to note that a notification will <b>consume an application buffer</b>, and will therefore + * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. An indication on the other hand will use the + * standard server internal buffer and thus will only generate a @ref BLE_GATTS_EVT_HVC event as soon as the confirmation + * has been received from the peer. Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_hvx_params Pointer to an HVx parameters structure. If the p_data member contains a non-NULL pointer the attribute value will be updated with + * the contents pointed by it before sending the notification or indication. + * + * @return @ref NRF_SUCCESS Successfully queued a notification or indication for transmission, and optionally updated the attribute value. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied. Only attributes added directly by the application are available to notify and indicate. + * @return @ref BLE_ERROR_GATTS_INVALID_ATTR_TYPE Invalid attribute type(s) supplied, only characteristic values may be notified and indicated. + * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, notifications or indications must be enabled in the CCCD. + * @return @ref NRF_ERROR_BUSY Procedure already in progress. + * @return @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. + * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers to send the data, applies only to notifications. + */ +SVCALL(SD_BLE_GATTS_HVX, uint32_t, sd_ble_gatts_hvx(uint16_t conn_handle, ble_gatts_hvx_params_t const*const p_hvx_params)); + +/**@brief Indicate the Service Changed attribute value. + * + * @details This call will send a Handle Value Indication to one or more peers connected to inform them that the attribute + * table layout has changed. As soon as the peer has confirmed the indication, a @ref BLE_GATTS_EVT_SC_CONFIRM event will + * be issued. + * + * @note Some of the restrictions and limitations that apply to @ref sd_ble_gatts_hvx also apply here. + * + * @param[in] conn_handle Connection handle. + * @param[in] start_handle Start of affected attribute handle range. + * @param[in] end_handle End of affected attribute handle range. + * + * @return @ref NRF_SUCCESS Successfully queued the Service Changed indication for transmission. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied, handles must be in the range populated by the application. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, notifications or indications must be enabled in the CCCD. + * @return @ref NRF_ERROR_BUSY Procedure already in progress. + * @return @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. + */ +SVCALL(SD_BLE_GATTS_SERVICE_CHANGED, uint32_t, sd_ble_gatts_service_changed(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle)); + +/**@brief Respond to a Read/Write authorization request. + * + * @note This call should only be used as a response to a @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST event issued to the application. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_rw_authorize_reply_params Pointer to a structure with the attribute provided by the application. + * + * @return @ref NRF_SUCCESS Successfully queued a response to the peer, and in the case of a write operation, ATT table updated. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_STATE No authorization request pending. + * @return @ref NRF_ERROR_INVALID_PARAM Authorization op invalid, + * or for Read Authorization reply: requested handles not replied with, + * or for Write Authorization reply: handle supplied does not match requested handle. + */ +SVCALL(SD_BLE_GATTS_RW_AUTHORIZE_REPLY, uint32_t, sd_ble_gatts_rw_authorize_reply(uint16_t conn_handle, ble_gatts_rw_authorize_reply_params_t const*const p_rw_authorize_reply_params)); + + +/**@brief Update persistent system attribute information. + * + * @details Supply to the stack information about persistent system attributes. + * This call is legal in the connected state only, and is usually + * made immediately after a connection is established and the bond identified. + * usually as a response to a BLE_GATTS_EVT_SYS_ATTR_MISSING. + * + * p_sysattrs may point directly to the application's stored copy of the struct. + * If the pointer is NULL, the system attribute info is initialized, assuming that + * the application does not have any previously saved data for this bond. + * + * @note The state of persistent system attributes is reset upon connection and then remembered for its duration. + * + * @note If this call returns with an error code different from @ref NRF_SUCCESS, the storage of persistent system attributes may have been completed only partially. + * This means that the state of the attribute table is undefined, and the application should either provide a new set of attributes using this same call or + * reset the SoftDevice to return to a known state. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_sys_attr_data Pointer to a saved copy of system attributes supplied to the stack, or NULL. + * @param[in] len Size of data pointed by p_sys_attr_data, in octets. + * + * @return @ref NRF_SUCCESS Successfully set the system attribute information. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_DATA Invalid data supplied, the data should be exactly the same as retrieved with @ref sd_ble_gatts_sys_attr_get. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_GATTS_SYS_ATTR_SET, uint32_t, sd_ble_gatts_sys_attr_set(uint16_t conn_handle, uint8_t const*const p_sys_attr_data, uint16_t len)); + + +/**@brief Retrieve persistent system attribute information from the stack. + * + * @details This call is used to retrieve information about values to be stored perisistently by the application + * after a connection has been terminated. When a new connection is made to the same bond, the values + * should be restored using @ref sd_ble_gatts_sys_attr_set. + * The data should be read before any new advertising is started, or any new connection established. The connection handle for + * the previous now defunct connection will remain valid until a new one is created to allow this API call to refer to it. + * + * @param[in] conn_handle Connection handle of the recently terminated connection. + * @param[in] p_sys_attr_data Pointer to a buffer where updated information about system attributes will be filled in. NULL can be provided to + * obtain the length of the data + * @param[in,out] p_len Size of application buffer if p_sys_attr_data is not NULL. Unconditially updated to actual length of system attribute data. + * + * @return @ref NRF_SUCCESS Successfully retrieved the system attribute information. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_DATA_SIZE The system attribute information did not fit into the provided buffer. + */ +SVCALL(SD_BLE_GATTS_SYS_ATTR_GET, uint32_t, sd_ble_gatts_sys_attr_get(uint16_t conn_handle, uint8_t * const p_sys_attr_data, uint16_t* const p_len)); + +/** @} */ + +#endif // BLE_GATTS_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_hci.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,96 @@ +/* + Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + + The information contained herein is confidential property of Nordic Semiconductor. The use, + copying, transfer or disclosure of such information is prohibited except by express written + agreement with Nordic Semiconductor. + */ +/** + @addtogroup BLE_COMMON + @{ +*/ + + +#ifndef BLE_HCI_H__ +#define BLE_HCI_H__ + +/** @defgroup BLE_HCI_STATUS_CODES Bluetooth status codes + * @{ */ + +#define BLE_HCI_STATUS_CODE_SUCCESS 0x00 +#define BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND 0x01 +#define BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER 0x02 +/*0x03 Hardware Failure +0x04 Page Timeout +*/ +#define BLE_HCI_AUTHENTICATION_FAILURE 0x05 +#define BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING 0x06 +#define BLE_HCI_MEMORY_CAPACITY_EXCEEDED 0x07 +#define BLE_HCI_CONNECTION_TIMEOUT 0x08 +/*0x09 Connection Limit Exceeded +0x0A Synchronous Connection Limit To A Device Exceeded +0x0B ACL Connection Already Exists*/ +#define BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED 0x0C +/*0x0D Connection Rejected due to Limited Resources +0x0E Connection Rejected Due To Security Reasons +0x0F Connection Rejected due to Unacceptable BD_ADDR +0x10 Connection Accept Timeout Exceeded +0x11 Unsupported Feature or Parameter Value*/ +#define BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS 0x12 +#define BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION 0x13 +#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES 0x14 +#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF 0x15 +#define BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION 0x16 +/* +0x17 Repeated Attempts +0x18 Pairing Not Allowed +0x19 Unknown LMP PDU +*/ +#define BLE_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1A +/* +0x1B SCO Offset Rejected +0x1C SCO Interval Rejected +0x1D SCO Air Mode Rejected*/ +#define BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS 0x1E +#define BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR 0x1F +/*0x20 Unsupported LMP Parameter Value +0x21 Role Change Not Allowed +*/ +#define BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT 0x22 +/*0x23 LMP Error Transaction Collision*/ +#define BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED 0x24 +/*0x25 Encryption Mode Not Acceptable +0x26 Link Key Can Not be Changed +0x27 Requested QoS Not Supported +*/ +#define BLE_HCI_INSTANT_PASSED 0x28 +#define BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED 0x29 +#define BLE_HCI_DIFFERENT_TRANSACTION_COLLISION 0x2A +/* +0x2B Reserved +0x2C QoS Unacceptable Parameter +0x2D QoS Rejected +0x2E Channel Classification Not Supported +0x2F Insufficient Security +0x30 Parameter Out Of Mandatory Range +0x31 Reserved +0x32 Role Switch Pending +0x33 Reserved +0x34 Reserved Slot Violation +0x35 Role Switch Failed +0x36 Extended Inquiry Response Too Large +0x37 Secure Simple Pairing Not Supported By Host. +0x38 Host Busy - Pairing +0x39 Connection Rejected due to No Suitable Channel Found*/ +#define BLE_HCI_CONTROLLER_BUSY 0x3A +#define BLE_HCI_CONN_INTERVAL_UNACCEPTABLE 0x3B +#define BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT 0x3C +#define BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE 0x3D +#define BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED 0x3E + +/** @} */ + + +#endif // BLE_HCI_H__ + +/** @} */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_l2cap.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,144 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_L2CAP Logical Link Control and Adaptation Protocol (L2CAP) + @{ + @brief Definitions and prototypes for the L2CAP interface. + */ + +#ifndef BLE_L2CAP_H__ +#define BLE_L2CAP_H__ + +#include "ble_types.h" +#include "ble_ranges.h" +#include "ble_err.h" +#include "nrf_svc.h" + +/**@addtogroup BLE_L2CAP_ENUMERATIONS Enumerations + * @{ */ + +/**@brief L2CAP API SVC numbers. */ +enum BLE_L2CAP_SVCS +{ + SD_BLE_L2CAP_CID_REGISTER = BLE_L2CAP_SVC_BASE, /**< Register a CID. */ + SD_BLE_L2CAP_CID_UNREGISTER, /**< Unregister a CID. */ + SD_BLE_L2CAP_TX /**< Transmit a packet. */ +}; + +/** @} */ + +/**@addtogroup BLE_L2CAP_DEFINES Defines + * @{ */ + +/**@defgroup BLE_ERRORS_L2CAP SVC return values specific to L2CAP + * @{ */ +#define BLE_ERROR_L2CAP_CID_IN_USE (NRF_L2CAP_ERR_BASE + 0x000) /**< CID already in use. */ +/** @} */ + +/**@brief Default L2CAP MTU. */ +#define BLE_L2CAP_MTU_DEF (23) + +/**@brief Invalid Channel Identifier. */ +#define BLE_L2CAP_CID_INVALID (0x0000) + +/**@brief Dynamic Channel Identifier base. */ +#define BLE_L2CAP_CID_DYN_BASE (0x0040) + +/**@brief Maximum amount of dynamic CIDs. */ +#define BLE_L2CAP_CID_DYN_MAX (8) + +/** @} */ + +/**@addtogroup BLE_L2CAP_STRUCTURES Structures + * @{ */ + +/**@brief Packet header format for L2CAP transmission. */ +typedef struct +{ + uint16_t len; /**< Length of valid info in data member. */ + uint16_t cid; /**< Channel ID on which packet is transmitted. */ +} ble_l2cap_header_t; + +/**@brief L2CAP Event IDs. */ +enum BLE_L2CAP_EVTS +{ + BLE_L2CAP_EVT_RX = BLE_L2CAP_EVT_BASE /**< L2CAP packet received. */ +}; + + +/**@brief L2CAP Received packet event report. */ +typedef struct +{ + ble_l2cap_header_t header; /** L2CAP packet header. */ + uint8_t data[1]; /**< Packet data, variable length. */ +} ble_l2cap_evt_rx_t; + + +/**@brief L2CAP event callback event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occured. */ + union + { + ble_l2cap_evt_rx_t rx; /**< RX Event parameters. */ + } params; +} ble_l2cap_evt_t; + + +/**@brief Register a CID with L2CAP. + * + * @details This registers a higher protocol layer with the L2CAP multiplexer, and is requried prior to all operations on the CID. + * + * @param[in] cid L2CAP CID. + * + * @return @ref NRF_SUCCESS Successfully registered a CID with the L2CAP layer. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, CID must be above @ref BLE_L2CAP_CID_DYN_BASE. + * @return @ref BLE_ERROR_L2CAP_CID_IN_USE L2CAP CID already in use. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_L2CAP_CID_REGISTER, uint32_t, sd_ble_l2cap_cid_register(uint16_t cid)); + +/**@brief Unregister a CID with L2CAP. + * + * @details This unregisters a previously registerd higher protocol layer with the L2CAP multiplexer. + * + * @param[in] cid L2CAP CID. + * + * @return @ref NRF_SUCCESS Successfully unregistered the CID. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_NOT_FOUND CID not previously registered. + */ +SVCALL(SD_BLE_L2CAP_CID_UNREGISTER, uint32_t, sd_ble_l2cap_cid_unregister(uint16_t cid)); + +/**@brief Transmit an L2CAP packet. + * + * @note It is important to note that a call to this function will <b>consume an application buffer</b>, and will therefore + * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. + * Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. + * + * @param[in] conn_handle Connection Handle. + * @param[in] p_header Pointer to a packet header containing length and CID. + * @param[in] p_data Pointer to the data to be transmitted. + * + * @return @ref NRF_SUCCESS Successfully queued an L2CAP packet for transmission. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, CIDs must be registered beforehand with @ref sd_ble_l2cap_cid_register. + * @return @ref NRF_ERROR_NOT_FOUND CID not found. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @return @ref BLE_ERROR_NO_TX_BUFFERS Not enough application buffers available. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, see @ref BLE_L2CAP_MTU_DEF. + */ +SVCALL(SD_BLE_L2CAP_TX, uint32_t, sd_ble_l2cap_tx(uint16_t conn_handle, ble_l2cap_header_t const * const p_header, uint8_t const * const p_data)); + +/** @} */ + +#endif // BLE_L2CAP_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_ranges.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,89 @@ +/* + Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + + The information contained herein is confidential property of Nordic Semiconductor. The use, + copying, transfer or disclosure of such information is prohibited except by express written + agreement with Nordic Semiconductor. + */ +/** + @addtogroup BLE_COMMON + @{ + @defgroup ble_ranges Module specific SVC and event number subranges + @{ + + @brief Definition of SVC and event number subranges for each API module. + + @note + SVCs and event numbers are split into subranges for each API module. + Each module receives its entire allocated range of SVC calls, whether implemented or not, + but return BLE_ERROR_NOT_SUPPORTED for unimplemented or undefined calls in its range. + + Note that the symbols BLE_<module>_SVC_LAST is the end of the allocated SVC range, + rather than the last SVC function call actually defined and implemented. + + Specific SVC and event values are defined in each module's ble_<module>.h file, + which defines names of each individual SVC code based on the range start value. +*/ + +#ifndef BLE_RANGES_H__ +#define BLE_RANGES_H__ + +#define BLE_SVC_BASE 0x60 +#define BLE_SVC_LAST 0x6B /* Total: 12. */ + +#define BLE_RESERVED_SVC_BASE 0x6C +#define BLE_RESERVED_SVC_LAST 0x6F /* Total: 4. */ + +#define BLE_GAP_SVC_BASE 0x70 +#define BLE_GAP_SVC_LAST 0x8F /* Total: 32. */ + +#define BLE_GATTC_SVC_BASE 0x90 +#define BLE_GATTC_SVC_LAST 0x9F /* Total: 16. */ + +#define BLE_GATTS_SVC_BASE 0xA0 +#define BLE_GATTS_SVC_LAST 0xAF /* Total: 16. */ + +#define BLE_L2CAP_SVC_BASE 0xB0 +#define BLE_L2CAP_SVC_LAST 0xBF /* Total: 16. */ + + +#define BLE_EVT_INVALID 0x00 + +#define BLE_EVT_BASE 0x01 +#define BLE_EVT_LAST 0x0F /* Total: 15. */ + +#define BLE_GAP_EVT_BASE 0x10 +#define BLE_GAP_EVT_LAST 0x2F /* Total: 32. */ + +#define BLE_GATTC_EVT_BASE 0x30 +#define BLE_GATTC_EVT_LAST 0x4F /* Total: 32. */ + +#define BLE_GATTS_EVT_BASE 0x50 +#define BLE_GATTS_EVT_LAST 0x6F /* Total: 32. */ + +#define BLE_L2CAP_EVT_BASE 0x70 +#define BLE_L2CAP_EVT_LAST 0x8F /* Total: 32. */ + +#define BLE_OPT_INVALID 0x00 /**< Invalid BLE Option. */ + +#define BLE_OPT_BASE 0x01 /**< Common BLE Option base. */ +#define BLE_OPT_LAST 0x1F /**< Total: 31. */ + +#define BLE_GAP_OPT_BASE 0x20 /**< GAP BLE Option base. */ +#define BLE_GAP_OPT_LAST 0x3F /**< Total: 32. */ + +#define BLE_GATTC_OPT_BASE 0x40 /**< GATTC BLE Option base. */ +#define BLE_GATTC_OPT_LAST 0x5F /**< Total: 32. */ + +#define BLE_GATTS_OPT_BASE 0x60 /**< GATTS BLE Option base. */ +#define BLE_GATTS_OPT_LAST 0x7F /**< Total: 32. */ + +#define BLE_L2CAP_OPT_BASE 0x80 /**< L2CAP BLE Option base. */ +#define BLE_L2CAP_OPT_LAST 0x9F /**< Total: 32. */ + +#endif /* BLE_RANGES_H__ */ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_types.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,169 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_COMMON + @{ + @defgroup ble_types Common types and macro definitions + @{ + + @brief Common types and macro definitions for the S110 SoftDevice. + */ + +#ifndef BLE_TYPES_H__ +#define BLE_TYPES_H__ + +#include <stdint.h> + +/** @addtogroup BLE_COMMON_DEFINES Defines + * @{ */ + +/** @defgroup BLE_CONN_HANDLES BLE Connection Handles + * @{ */ +#define BLE_CONN_HANDLE_INVALID 0xFFFF /**< Invalid Connection Handle. */ +#define BLE_CONN_HANDLE_ALL 0xFFFE /**< Applies to all Connection Handles. */ +/** @} */ + + +/** @defgroup BLE_UUID_VALUES Assigned Values for BLE UUIDs + * @{ */ +/* Generic UUIDs, applicable to all services */ +#define BLE_UUID_UNKNOWN 0x0000 /**< Reserved UUID. */ +#define BLE_UUID_SERVICE_PRIMARY 0x2800 /**< Primary Service. */ +#define BLE_UUID_SERVICE_SECONDARY 0x2801 /**< Secondary Service. */ +#define BLE_UUID_SERVICE_INCLUDE 0x2802 /**< Include. */ +#define BLE_UUID_CHARACTERISTIC 0x2803 /**< Characteristic. */ +#define BLE_UUID_DESCRIPTOR_CHAR_EXT_PROP 0x2900 /**< Characteristic Extended Properties Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CHAR_USER_DESC 0x2901 /**< Characteristic User Description Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG 0x2902 /**< Client Characteristic Configuration Descriptor. */ +#define BLE_UUID_DESCRIPTOR_SERVER_CHAR_CONFIG 0x2903 /**< Server Characteristic Configuration Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT 0x2904 /**< Characteristic Presentation Format Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CHAR_AGGREGATE_FORMAT 0x2905 /**< Characteristic Aggregate Format Descriptor. */ +/* GATT specific UUIDs */ +#define BLE_UUID_GATT 0x1801 /**< Generic Attribute Profile. */ +#define BLE_UUID_GATT_CHARACTERISTIC_SERVICE_CHANGED 0x2A05 /**< Service Changed Characteristic. */ +/* GAP specific UUIDs */ +#define BLE_UUID_GAP 0x1800 /**< Generic Access Profile. */ +#define BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME 0x2A00 /**< Device Name Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE 0x2A01 /**< Appearance Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_PPF 0x2A02 /**< Peripheral Privacy Flag Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_RECONN_ADDR 0x2A03 /**< Reconnection Address Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_PPCP 0x2A04 /**< Peripheral Preferred Connection Parameters Characteristic. */ +/** @} */ + + +/** @defgroup BLE_UUID_TYPES Types of UUID + * @{ */ +#define BLE_UUID_TYPE_UNKNOWN 0x00 /**< Invalid UUID type. */ +#define BLE_UUID_TYPE_BLE 0x01 /**< Bluetooth SIG UUID (16-bit). */ +#define BLE_UUID_TYPE_VENDOR_BEGIN 0x02 /**< Vendor UUID types start at this index (128-bit). */ +/** @} */ + + +/** @defgroup BLE_APPEARANCES Bluetooth Appearance values + * @note Retrieved from http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml + * @{ */ +#define BLE_APPEARANCE_UNKNOWN 0 /**< Unknown. */ +#define BLE_APPEARANCE_GENERIC_PHONE 64 /**< Generic Phone. */ +#define BLE_APPEARANCE_GENERIC_COMPUTER 128 /**< Generic Computer. */ +#define BLE_APPEARANCE_GENERIC_WATCH 192 /**< Generic Watch. */ +#define BLE_APPEARANCE_WATCH_SPORTS_WATCH 193 /**< Watch: Sports Watch. */ +#define BLE_APPEARANCE_GENERIC_CLOCK 256 /**< Generic Clock. */ +#define BLE_APPEARANCE_GENERIC_DISPLAY 320 /**< Generic Display. */ +#define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL 384 /**< Generic Remote Control. */ +#define BLE_APPEARANCE_GENERIC_EYE_GLASSES 448 /**< Generic Eye-glasses. */ +#define BLE_APPEARANCE_GENERIC_TAG 512 /**< Generic Tag. */ +#define BLE_APPEARANCE_GENERIC_KEYRING 576 /**< Generic Keyring. */ +#define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 640 /**< Generic Media Player. */ +#define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 704 /**< Generic Barcode Scanner. */ +#define BLE_APPEARANCE_GENERIC_THERMOMETER 768 /**< Generic Thermometer. */ +#define BLE_APPEARANCE_THERMOMETER_EAR 769 /**< Thermometer: Ear. */ +#define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR 832 /**< Generic Heart rate Sensor. */ +#define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT 833 /**< Heart Rate Sensor: Heart Rate Belt. */ +#define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 896 /**< Generic Blood Pressure. */ +#define BLE_APPEARANCE_BLOOD_PRESSURE_ARM 897 /**< Blood Pressure: Arm. */ +#define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 898 /**< Blood Pressure: Wrist. */ +#define BLE_APPEARANCE_GENERIC_HID 960 /**< Human Interface Device (HID). */ +#define BLE_APPEARANCE_HID_KEYBOARD 961 /**< Keyboard (HID Subtype). */ +#define BLE_APPEARANCE_HID_MOUSE 962 /**< Mouse (HID Subtype). */ +#define BLE_APPEARANCE_HID_JOYSTICK 963 /**< Joystiq (HID Subtype). */ +#define BLE_APPEARANCE_HID_GAMEPAD 964 /**< Gamepad (HID Subtype). */ +#define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE 965 /**< Digitizer Tablet (HID Subtype). */ +#define BLE_APPEARANCE_HID_CARD_READER 966 /**< Card Reader (HID Subtype). */ +#define BLE_APPEARANCE_HID_DIGITAL_PEN 967 /**< Digital Pen (HID Subtype). */ +#define BLE_APPEARANCE_HID_BARCODE 968 /**< Barcode Scanner (HID Subtype). */ +#define BLE_APPEARANCE_GENERIC_GLUCOSE_METER 1024 /**< Generic Glucose Meter. */ +#define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR 1088 /**< Generic Running Walking Sensor. */ +#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE 1089 /**< Running Walking Sensor: In-Shoe. */ +#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE 1090 /**< Running Walking Sensor: On-Shoe. */ +#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP 1091 /**< Running Walking Sensor: On-Hip. */ +#define BLE_APPEARANCE_GENERIC_CYCLING 1152 /**< Generic Cycling. */ +#define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER 1153 /**< Cycling: Cycling Computer. */ +#define BLE_APPEARANCE_CYCLING_SPEED_SENSOR 1154 /**< Cycling: Speed Sensor. */ +#define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR 1155 /**< Cycling: Cadence Sensor. */ +#define BLE_APPEARANCE_CYCLING_POWER_SENSOR 1156 /**< Cycling: Power Sensor. */ +#define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR 1157 /**< Cycling: Speed and Cadence Sensor. */ +#define BLE_APPEARANCE_GENERIC_PULSE_OXIMETER 3136 /**< Generic Pulse Oximeter. */ +#define BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 3137 /**< Fingertip (Pulse Oximeter subtype). */ +#define BLE_APPEARANCE_PULSE_OXIMETER_WRIST_WORN 3138 /**< Wrist Worn(Pulse Oximeter subtype). */ +#define BLE_APPEARANCE_GENERIC_WEIGHT_SCALE 3200 /**< Generic Weight Scale. */ +#define BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS_ACT 5184 /**< Generic Outdoor Sports Activity. */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_DISP 5185 /**< Location Display Device (Outdoor Sports Activity subtype). */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_DISP 5186 /**< Location and Navigation Display Device (Outdoor Sports Activity subtype). */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_POD 5187 /**< Location Pod (Outdoor Sports Activity subtype). */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_POD 5188 /**< Location and Navigation Pod (Outdoor Sports Activity subtype). */ +/** @} */ + +/** @brief Set .type and .uuid fields of ble_uuid_struct to specified uuid value. */ +#define BLE_UUID_BLE_ASSIGN(instance, value) do {\ + instance.type = BLE_UUID_TYPE_BLE; \ + instance.uuid = value;} while(0) + +/** @brief Copy type and uuid members from src to dst ble_uuid_t pointer. Both pointers must be valid/non-null. */ +#define BLE_UUID_COPY_PTR(dst, src) do {\ + (dst)->type = (src)->type; \ + (dst)->uuid = (src)->uuid;} while(0) + +/** @brief Copy type and uuid members from src to dst ble_uuid_t struct. */ +#define BLE_UUID_COPY_INST(dst, src) do {\ + (dst).type = (src).type; \ + (dst).uuid = (src).uuid;} while(0) + +/** @brief Compare for equality both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ +#define BLE_UUID_EQ(p_uuid1, p_uuid2) \ + (((p_uuid1)->type == (p_uuid2)->type) && ((p_uuid1)->uuid == (p_uuid2)->uuid)) + +/** @brief Compare for difference both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ +#define BLE_UUID_NEQ(p_uuid1, p_uuid2) \ + (((p_uuid1)->type != (p_uuid2)->type) || ((p_uuid1)->uuid != (p_uuid2)->uuid)) + +/** @} */ + +/** @addtogroup BLE_TYPES_STRUCTURES Structures + * @{ */ + +/** @brief 128 bit UUID values. */ +typedef struct +{ + unsigned char uuid128[16]; +} ble_uuid128_t; + +/** @brief Bluetooth Low Energy UUID type, encapsulates both 16-bit and 128-bit UUIDs. */ +typedef struct +{ + uint16_t uuid; /**< 16-bit UUID value or octets 12-13 of 128-bit UUID. */ + uint8_t type; /**< UUID type, see @ref BLE_UUID_TYPES. If type is BLE_UUID_TYPE_UNKNOWN, the value of uuid is undefined. */ +} ble_uuid_t; + +/** @} */ + +#endif /* BLE_TYPES_H__ */ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_error.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + /** + @defgroup nrf_error SoftDevice Global Error Codes + @{ + + @brief Global Error definitions +*/ + +/* Header guard */ +#ifndef NRF_ERROR_H__ +#define NRF_ERROR_H__ + +/** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions + * @{ */ +#define NRF_ERROR_BASE_NUM (0x0) ///< Global error base +#define NRF_ERROR_SDM_BASE_NUM (0x1000) ///< SDM error base +#define NRF_ERROR_SOC_BASE_NUM (0x2000) ///< SoC error base +#define NRF_ERROR_STK_BASE_NUM (0x3000) ///< STK error base +/** @} */ + +#define NRF_SUCCESS (NRF_ERROR_BASE_NUM + 0) ///< Successful command +#define NRF_ERROR_SVC_HANDLER_MISSING (NRF_ERROR_BASE_NUM + 1) ///< SVC handler is missing +#define NRF_ERROR_SOFTDEVICE_NOT_ENABLED (NRF_ERROR_BASE_NUM + 2) ///< SoftDevice has not been enabled +#define NRF_ERROR_INTERNAL (NRF_ERROR_BASE_NUM + 3) ///< Internal Error +#define NRF_ERROR_NO_MEM (NRF_ERROR_BASE_NUM + 4) ///< No Memory for operation +#define NRF_ERROR_NOT_FOUND (NRF_ERROR_BASE_NUM + 5) ///< Not found +#define NRF_ERROR_NOT_SUPPORTED (NRF_ERROR_BASE_NUM + 6) ///< Not supported +#define NRF_ERROR_INVALID_PARAM (NRF_ERROR_BASE_NUM + 7) ///< Invalid Parameter +#define NRF_ERROR_INVALID_STATE (NRF_ERROR_BASE_NUM + 8) ///< Invalid state, operation disallowed in this state +#define NRF_ERROR_INVALID_LENGTH (NRF_ERROR_BASE_NUM + 9) ///< Invalid Length +#define NRF_ERROR_INVALID_FLAGS (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags +#define NRF_ERROR_INVALID_DATA (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data +#define NRF_ERROR_DATA_SIZE (NRF_ERROR_BASE_NUM + 12) ///< Data size exceeds limit +#define NRF_ERROR_TIMEOUT (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out +#define NRF_ERROR_NULL (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer +#define NRF_ERROR_FORBIDDEN (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation +#define NRF_ERROR_INVALID_ADDR (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address +#define NRF_ERROR_BUSY (NRF_ERROR_BASE_NUM + 17) ///< Busy + +#endif // NRF_ERROR_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_error_sdm.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + /** + @addtogroup nrf_sdm_api + @{ + @defgroup nrf_sdm_error SoftDevice Manager Error Codes + @{ + + @brief Error definitions for the SDM API +*/ + +/* Header guard */ +#ifndef NRF_ERROR_SDM_H__ +#define NRF_ERROR_SDM_H__ + +#include "nrf_error.h" + +#define NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN (NRF_ERROR_SDM_BASE_NUM + 0) ///< Unknown lfclk source +#define NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION (NRF_ERROR_SDM_BASE_NUM + 1) ///< Incorrect interrupt configuration (can be caused by using illegal priority levels, or having enabled SoftDevice interrupts) +#define NRF_ERROR_SDM_INCORRECT_CLENR0 (NRF_ERROR_SDM_BASE_NUM + 2) ///< Incorrect CLENR0 (can be caused by erronous SoftDevice flashing) + +#endif // NRF_ERROR_SDM_H__ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_error_soc.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + /** + @addtogroup nrf_soc_api + @{ + @defgroup nrf_soc_error SoC Library Error Codes + @{ + + @brief Error definitions for the SoC library + +*/ + +/* Header guard */ +#ifndef NRF_ERROR_SOC_H__ +#define NRF_ERROR_SOC_H__ + +#include "nrf_error.h" + +/* Mutex Errors */ +#define NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN (NRF_ERROR_SOC_BASE_NUM + 0) ///< Mutex already taken + +/* NVIC errors */ +#define NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE (NRF_ERROR_SOC_BASE_NUM + 1) ///< NVIC interrupt not available +#define NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED (NRF_ERROR_SOC_BASE_NUM + 2) ///< NVIC interrupt priority not allowed +#define NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 3) ///< NVIC should not return + +/* Power errors */ +#define NRF_ERROR_SOC_POWER_MODE_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 4) ///< Power mode unknown +#define NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 5) ///< Power POF threshold unknown +#define NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 6) ///< Power off should not return + +/* Rand errors */ +#define NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES (NRF_ERROR_SOC_BASE_NUM + 7) ///< RAND not enough values + +/* PPI errors */ +#define NRF_ERROR_SOC_PPI_INVALID_CHANNEL (NRF_ERROR_SOC_BASE_NUM + 8) ///< Invalid PPI Channel +#define NRF_ERROR_SOC_PPI_INVALID_GROUP (NRF_ERROR_SOC_BASE_NUM + 9) ///< Invalid PPI Group + +#endif // NRF_ERROR_SOC_H__ +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_mbr.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @defgroup nrf_mbr_api Master Boot Record API + @{ + + @brief APIs for updating SoftDevice and BootLoader + +*/ + +/* Header guard */ +#ifndef NRF_MBR_H__ +#define NRF_MBR_H__ + +#include "nrf_svc.h" +#include <stdint.h> + + +/** @addtogroup NRF_MBR_DEFINES Defines + * @{ */ + +/**@brief MBR SVC Base number. */ +#define MBR_SVC_BASE 0x18 +/** @} */ + +/** @addtogroup NRF_MBR_ENUMS Enumerations + * @{ */ + +/**@brief nRF Master Boot Record API SVC numbers. */ +enum NRF_MBR_SVCS +{ + SD_MBR_COMMAND = MBR_SVC_BASE, /**< ::sd_mbr_command */ +}; + +/**@brief Possible values for ::sd_mbr_command_t.command */ +enum NRF_MBR_COMMANDS +{ + SD_MBR_COMMAND_COPY_BL, /**< Copy a new a new BootLoader. @see sd_mbr_command_copy_bl_t */ + SD_MBR_COMMAND_COPY_SD, /**< Copy a new SoftDevice. @see ::sd_mbr_command_copy_sd_t*/ + SD_MBR_COMMAND_INIT_SD, /**< Init forwarding interrupts to SD, and run reset function in SD*/ + SD_MBR_COMMAND_COMPARE, /**< This command works like memcmp. @see ::sd_mbr_command_compare_t*/ + SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET, /**< Start forwarding all exception to this address @see ::sd_mbr_command_vector_table_base_set_t*/ +}; + +/** @} */ + +/** @addtogroup NRF_MBR_TYPES Types + * @{ */ + +/**@brief This command copies part of a new SoftDevice + * The destination area is erased before copying. + * If dst is in the middle of a flash page, that whole flash page will be erased. + * If (dst+len) is in the middle of a flash page, that whole flash page will be erased. + * + * The user of this function is responsible for setting the PROTENSET registers. + * + * @retval ::NRF_SUCCESS indicates that the contents of the memory blocks where copied correctly. + * @retval ::NRF_ERROR_INTERNAL indicates that the contents of the memory blocks where not verified correctly after copying. + */ +typedef struct +{ + uint32_t *src; /**< Pointer to the source of data to be copied.*/ + uint32_t *dst; /**< Pointer to the destination where the content is to be copied.*/ + uint32_t len; /**< Number of 32 bit words to copy. Must be a multiple of 256 words*/ +}sd_mbr_command_copy_sd_t; + + +/**@brief This command works like memcmp, but takes the length in words. + * + * @retval ::NRF_SUCCESS indicates that the contents of both memory blocks are equal. + * @retval ::NRF_ERROR_NULL indicates that the contents of the memory blocks are not equal. + */ +typedef struct +{ + uint32_t *ptr1; /**< Pointer to block of memory */ + uint32_t *ptr2; /**< Pointer to block of memory */ + uint32_t len; /**< Number of 32 bit words to compare*/ +}sd_mbr_command_compare_t; + + +/**@brief This command copies a new BootLoader. + * With this command, destination of BootLoader is always the address written in NRF_UICR->BOOTADDR. + * + * Destination is erased by this function. + * If (destination+bl_len) is in the middle of a flash page, that whole flash page will be erased. + * + * This function will use PROTENSET to protect the flash that is not intended to be written. + * + * On Success, this function will not return. It will start the new BootLoader from reset-vector as normal. + * + * @retval ::NRF_ERROR_INVALID_STATE indicates that something was wrong. + * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. + * @retval ::NRF_ERROR_FORBIDDEN if NRF_UICR->BOOTADDR is not set + * @retval ::NRF_ERROR_INVALID_LENGTH is invalid. + */ +typedef struct +{ + uint32_t *bl_src; /**< Pointer to the source of the Bootloader to be be copied.*/ + uint32_t bl_len; /**< Number of 32 bit words to copy for BootLoader */ +}sd_mbr_command_copy_bl_t; + +/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the MBR + * + * Once this function has been called, this address is where the MBR will start to forward interrupts to after a reset. + * + * To restore default forwarding thiss function should be called with @param address set to 0. + * The MBR will then start forwarding to interrupts to the adress in NFR_UICR->BOOTADDR or to the SoftDevice if the BOOTADDR is not set. + * + * @retval ::NRF_SUCCESS + */ +typedef struct +{ + uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ +}sd_mbr_command_vector_table_base_set_t; + +typedef struct +{ + uint32_t command; /**< type of command to be issued see @ref NRF_MBR_COMMANDS. */ + union + { + sd_mbr_command_copy_sd_t copy_sd; /**< Parameters for copy*/ + sd_mbr_command_copy_bl_t copy_bl; /**< Parameters for copy SoftDevice and BootLoader*/ + sd_mbr_command_compare_t compare; /**< Parameters for verify*/ + sd_mbr_command_vector_table_base_set_t base_set; /**< Parameters for vector table base set.*/ + } params; +}sd_mbr_command_t; + +/** @} */ + +/** @addtogroup NRF_MBR_FUNCTIONS Functions + * @{ */ + +/**@brief Issue Master Boot Record commands + * + * Commands used when updating a SoftDevice and bootloader + * + * @param[in] param Pointer to a struct describing the command + * + *@note for retvals see ::sd_mbr_command_copy_sd_t ::sd_mbr_command_copy_bl_t ::sd_mbr_command_compare_t + +*/ +SVCALL(SD_MBR_COMMAND, uint32_t, sd_mbr_command(sd_mbr_command_t* param)); + +/** @} */ +#endif // NRF_MBR_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_sdm.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,167 @@ +/* + * Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @defgroup nrf_sdm_api SoftDevice Manager API + @{ + + @brief APIs for SoftDevice management. + +*/ + +/* Header guard */ +#ifndef NRF_SDM_H__ +#define NRF_SDM_H__ + +#include "nrf_svc.h" +#include "nrf51.h" +#include "nrf_soc.h" +#include "nrf_error_sdm.h" + +/** @addtogroup NRF_SDM_DEFINES Defines + * @{ */ + +/**@brief SoftDevice Manager SVC Base number. */ +#define SDM_SVC_BASE (0x10) + +/** @} */ + +/** @addtogroup NRF_SDM_ENUMS Enumerations + * @{ */ + +/**@brief nRF SoftDevice Manager API SVC numbers. */ +enum NRF_SD_SVCS +{ + SD_SOFTDEVICE_ENABLE = SDM_SVC_BASE, /**< ::sd_softdevice_enable */ + SD_SOFTDEVICE_DISABLE, /**< ::sd_softdevice_disable */ + SD_SOFTDEVICE_IS_ENABLED, /**< ::sd_softdevice_is_enabled */ + SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, /**< ::sd_softdevice_vector_table_base_set */ + SVC_SDM_LAST /**< Placeholder for last SDM SVC */ +}; + +/**@brief Possible lfclk oscillator sources. */ +enum NRF_CLOCK_LFCLKSRCS +{ + NRF_CLOCK_LFCLKSRC_SYNTH_250_PPM, /**< LFCLK Synthesized from HFCLK. */ + NRF_CLOCK_LFCLKSRC_XTAL_500_PPM, /**< LFCLK crystal oscillator 500 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_250_PPM, /**< LFCLK crystal oscillator 250 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_150_PPM, /**< LFCLK crystal oscillator 150 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_100_PPM, /**< LFCLK crystal oscillator 100 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_75_PPM, /**< LFCLK crystal oscillator 75 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_50_PPM, /**< LFCLK crystal oscillator 50 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_30_PPM, /**< LFCLK crystal oscillator 30 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_20_PPM, /**< LFCLK crystal oscillator 20 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_250MS_CALIBRATION, /**< LFCLK RC oscillator, 250ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_500MS_CALIBRATION, /**< LFCLK RC oscillator, 500ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_1000MS_CALIBRATION, /**< LFCLK RC oscillator, 1000ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_2000MS_CALIBRATION, /**< LFCLK RC oscillator, 2000ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_4000MS_CALIBRATION, /**< LFCLK RC oscillator, 4000ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_8000MS_CALIBRATION, /**< LFCLK RC oscillator, 8000ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_1000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 1000ms, if changed above a threshold, a calibration is done.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_2000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 2000ms, if changed above a threshold, a calibration is done.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_4000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 4000ms, if changed above a threshold, a calibration is done.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_8000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 8000ms, if changed above a threshold, a calibration is done.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_16000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 16000ms, if changed above a threshold, a calibration is done.*/ +}; + +/** @} */ + +/** @addtogroup NRF_SDM_TYPES Types + * @{ */ + +/**@brief Type representing lfclk oscillator source. */ +typedef uint32_t nrf_clock_lfclksrc_t; + + +/**@brief SoftDevice Assertion Handler type. + * + * When an unexpected error occurs within the SoftDevice it will call the SoftDevice assertion handler callback. + * The protocol stack will be in an undefined state when this happens and the only way to recover will be to + * perform a reset, using e.g. CMSIS NVIC_SystemReset(). + * + * @note This callback is executed in HardFault context, thus SVC functions cannot be called from the SoftDevice assert callback. + * + * @param[in] pc The program counter of the failed assert. + * @param[in] line_number Line number where the assert failed. + * @param[in] file_name File name where the assert failed. + */ +typedef void (*softdevice_assertion_handler_t)(uint32_t pc, uint16_t line_number, const uint8_t * p_file_name); + +/** @} */ + +/** @addtogroup NRF_SDM_FUNCTIONS Functions + * @{ */ + +/**@brief Enables the SoftDevice and by extension the protocol stack. + * + * Idempotent function to enable the SoftDevice. + * + * @note Some care must be taken if a low frequency clock source is already running when calling this function: + * If the LF clock has a different source then the one currently running, it will be stopped. Then, the new + * clock source will be started. + * + * @note This function has no effect when returning with an error. + * + * @post If return code is ::NRF_SUCCESS + * - SoC library and protocol stack APIs are made available + * - A portion of RAM will be unavailable (see relevant SDS documentation) + * - Some peripherals will be unavailable or available only through the SoC API (see relevant SDS documentation) + * - Interrupts will not arrive from protected peripherals or interrupts + * - nrf_nvic_ functions must be used instead of CMSIS NVIC_ functions for reliable usage of the softdevice. + * - Interrupt latency may be affected by the SoftDevice (see relevant SDS documentation) + * - Chosen low frequency clock source will be running + * + * @param clock_source Low frequency clock source and accuracy. (Note: In the case of XTAL source, the PPM accuracy of the chosen clock source must be greater than or equal to the actual characteristics of your XTAL clock). + * @param assertion_handler Callback for SoftDevice assertions. + * + * @retval ::NRF_SUCCESS + * @retval ::NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION SoftDeviceinterrupt is already enabled, or an enabled interrupt has an illegal priority level + * @retval ::NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN Unknown low frequency clock source selected + */ +SVCALL(SD_SOFTDEVICE_ENABLE, uint32_t, sd_softdevice_enable(nrf_clock_lfclksrc_t clock_source, softdevice_assertion_handler_t assertion_handler)); + +/**@brief Disables the SoftDevice and by extension the protocol stack. + * + * Idempotent function to disable the SoftDevice. + * + * @post SoC library and protocol stack APIs are made unavailable. + * @post All interrupts that was protected by the SoftDevice will be disabled and initialized to priority 0 (highest). + * @post All peripherals used by the SoftDevice will be reset to default values. + * @post All of RAM become available. + * @post All interrupts are forwarded to the application. + * @post LFCLK source chosen in ::sd_softdevice_enable will be left running. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_SOFTDEVICE_DISABLE, uint32_t, sd_softdevice_disable(void)); + +/**@brief Check if the SoftDevice is enabled. + * + * @param[out] p_softdevice_enabled If the SoftDevice is enabled: 1 else 0. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_SOFTDEVICE_IS_ENABLED, uint32_t, sd_softdevice_is_enabled(uint8_t * p_softdevice_enabled)); + +/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the SoftDevice + * + * This function is only intended to be called when a bootloader is enabled. + * + * @param[in] address The base address of the interrupt vector table for forwarded interrupts. + + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, uint32_t, sd_softdevice_vector_table_base_set(uint32_t address)); + +/** @} */ + +#endif // NRF_SDM_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_soc.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,958 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + +/** + * @defgroup nrf_soc_api SoC Library API + * @{ + * + * @brief APIs for the SoC library. + * +*/ + +#ifndef NRF_SOC_H__ +#define NRF_SOC_H__ + +#include <stdint.h> +#include <stdbool.h> +#include "nrf_svc.h" +#include "nrf51.h" +#include "nrf51_bitfields.h" +#include "nrf_error_soc.h" + +/** @addtogroup NRF_SOC_DEFINES Defines + * @{ */ + +/**@brief The number of the lowest SVC number reserved for the SoC library. */ +#define SOC_SVC_BASE (0x20) +#define SOC_SVC_BASE_NOT_AVAILABLE (0x23) + +/**@brief Guranteed time for application to process radio inactive notification. */ +#define NRF_RADIO_NOTIFICATION_INACTIVE_GUARANTEED_TIME_US (62) + +/**@brief The minimum allowed timeslot extension time. */ +#define NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US (200) + +#define SOC_ECB_KEY_LENGTH (16) /**< ECB key length. */ +#define SOC_ECB_CLEARTEXT_LENGTH (16) /**< ECB cleartext length. */ +#define SOC_ECB_CIPHERTEXT_LENGTH (SOC_ECB_CLEARTEXT_LENGTH) /**< ECB ciphertext length. */ + +#define SD_EVT_IRQn (SWI2_IRQn) /**< SoftDevice Event IRQ number. Used for both protocol events and SoC events. */ +#define SD_EVT_IRQHandler (SWI2_IRQHandler) /**< SoftDevice Event IRQ handler. Used for both protocol events and SoC events. */ +#define RADIO_NOTIFICATION_IRQn (SWI1_IRQn) /**< The radio notification IRQ number. */ +#define RADIO_NOTIFICATION_IRQHandler (SWI1_IRQHandler) /**< The radio notification IRQ handler. */ + +#define NRF_RADIO_LENGTH_MIN_US (100) /**< The shortest allowed radio timeslot, in microseconds. */ +#define NRF_RADIO_LENGTH_MAX_US (100000) /**< The longest allowed radio timeslot, in microseconds. */ + +#define NRF_RADIO_DISTANCE_MAX_US (128000000UL - 1UL) /**< The longest timeslot distance, in microseconds, allowed for the distance parameter (see @ref nrf_radio_request_normal_t) in the request. */ + +#define NRF_RADIO_EARLIEST_TIMEOUT_MAX_US (128000000UL - 1UL) /**< The longest timeout, in microseconds, allowed when requesting the earliest possible timeslot. */ + +#define NRF_RADIO_START_JITTER_US (2) /**< The maximum jitter in NRF_RADIO_CALLBACK_SIGNAL_TYPE_START relative to the requested start time. */ + +/** @} */ + +/** @addtogroup NRF_SOC_TYPES Types + * @{ */ + +/**@brief The SVC numbers used by the SVC functions in the SoC library. */ +enum NRF_SOC_SVCS +{ + SD_FLASH_PAGE_ERASE = SOC_SVC_BASE, + SD_FLASH_WRITE, + SD_FLASH_PROTECT, + SD_MUTEX_NEW = SOC_SVC_BASE_NOT_AVAILABLE, + SD_MUTEX_ACQUIRE, + SD_MUTEX_RELEASE, + SD_NVIC_ENABLEIRQ, + SD_NVIC_DISABLEIRQ, + SD_NVIC_GETPENDINGIRQ, + SD_NVIC_SETPENDINGIRQ, + SD_NVIC_CLEARPENDINGIRQ, + SD_NVIC_SETPRIORITY, + SD_NVIC_GETPRIORITY, + SD_NVIC_SYSTEMRESET, + SD_NVIC_CRITICAL_REGION_ENTER, + SD_NVIC_CRITICAL_REGION_EXIT, + SD_RAND_APPLICATION_POOL_CAPACITY, + SD_RAND_APPLICATION_BYTES_AVAILABLE, + SD_RAND_APPLICATION_GET_VECTOR, + SD_POWER_MODE_SET, + SD_POWER_SYSTEM_OFF, + SD_POWER_RESET_REASON_GET, + SD_POWER_RESET_REASON_CLR, + SD_POWER_POF_ENABLE, + SD_POWER_POF_THRESHOLD_SET, + SD_POWER_RAMON_SET, + SD_POWER_RAMON_CLR, + SD_POWER_RAMON_GET, + SD_POWER_GPREGRET_SET, + SD_POWER_GPREGRET_CLR, + SD_POWER_GPREGRET_GET, + SD_POWER_DCDC_MODE_SET, + SD_APP_EVT_WAIT, + SD_CLOCK_HFCLK_REQUEST, + SD_CLOCK_HFCLK_RELEASE, + SD_CLOCK_HFCLK_IS_RUNNING, + SD_PPI_CHANNEL_ENABLE_GET, + SD_PPI_CHANNEL_ENABLE_SET, + SD_PPI_CHANNEL_ENABLE_CLR, + SD_PPI_CHANNEL_ASSIGN, + SD_PPI_GROUP_TASK_ENABLE, + SD_PPI_GROUP_TASK_DISABLE, + SD_PPI_GROUP_ASSIGN, + SD_PPI_GROUP_GET, + SD_RADIO_NOTIFICATION_CFG_SET, + SD_ECB_BLOCK_ENCRYPT, + SD_RADIO_SESSION_OPEN, + SD_RADIO_SESSION_CLOSE, + SD_RADIO_REQUEST, + SD_EVT_GET, + SD_TEMP_GET, + SVC_SOC_LAST +}; + +/**@brief Possible values of a ::nrf_mutex_t. */ +enum NRF_MUTEX_VALUES +{ + NRF_MUTEX_FREE, + NRF_MUTEX_TAKEN +}; + +/**@brief Possible values of ::nrf_app_irq_priority_t. */ +enum NRF_APP_PRIORITIES +{ + NRF_APP_PRIORITY_HIGH = 1, + NRF_APP_PRIORITY_LOW = 3 +}; + +/**@brief Possible values of ::nrf_power_mode_t. */ +enum NRF_POWER_MODES +{ + NRF_POWER_MODE_CONSTLAT, /**< Constant latency mode. See power management in the reference manual. */ + NRF_POWER_MODE_LOWPWR /**< Low power mode. See power management in the reference manual. */ +}; + + +/**@brief Possible values of ::nrf_power_failure_threshold_t */ +enum NRF_POWER_THRESHOLDS +{ + NRF_POWER_THRESHOLD_V21, /**< 2.1 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V23, /**< 2.3 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V25, /**< 2.5 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V27 /**< 2.7 Volts power failure threshold. */ +}; + + +/**@brief Possible values of ::nrf_power_dcdc_mode_t. */ +enum NRF_POWER_DCDC_MODES +{ + NRF_POWER_DCDC_MODE_OFF, /**< The DCDC is always off. */ + NRF_POWER_DCDC_MODE_ON, /**< The DCDC is always on. */ + NRF_POWER_DCDC_MODE_AUTOMATIC /**< The DCDC is automatically managed. */ +}; + +/**@brief Possible values of ::nrf_radio_notification_distance_t. */ +enum NRF_RADIO_NOTIFICATION_DISTANCES +{ + NRF_RADIO_NOTIFICATION_DISTANCE_NONE = 0, /**< The event does not have a notification. */ + NRF_RADIO_NOTIFICATION_DISTANCE_800US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_1740US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_2680US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_3620US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_4560US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_5500US /**< The distance from the active notification to start of radio activity. */ +}; + + +/**@brief Possible values of ::nrf_radio_notification_type_t. */ +enum NRF_RADIO_NOTIFICATION_TYPES +{ + NRF_RADIO_NOTIFICATION_TYPE_NONE = 0, /**< The event does not have a radio notification signal. */ + NRF_RADIO_NOTIFICATION_TYPE_INT_ON_ACTIVE, /**< Using interrupt for notification when the radio will be enabled. */ + NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE, /**< Using interrupt for notification when the radio has been disabled. */ + NRF_RADIO_NOTIFICATION_TYPE_INT_ON_BOTH, /**< Using interrupt for notification both when the radio will be enabled and disabled. */ +}; + +/**@brief SoC Events. */ +enum NRF_SOC_EVTS +{ + NRF_EVT_HFCLKSTARTED, /**< Event indicating that the HFCLK has started. */ + NRF_EVT_POWER_FAILURE_WARNING, /**< Event indicating that a power failure warning has occurred. */ + NRF_EVT_FLASH_OPERATION_SUCCESS, /**< Event indicating that the ongoing flash operation has completed successfully. */ + NRF_EVT_FLASH_OPERATION_ERROR, /**< Event indicating that the ongoing flash operation has timed out with an error. */ + NRF_EVT_RADIO_BLOCKED, /**< Event indicating that a radio timeslot was blocked. */ + NRF_EVT_RADIO_CANCELED, /**< Event indicating that a radio timeslot was canceled by SoftDevice. */ + NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN, /**< Event indicating that a radio signal callback handler return was invalid. */ + NRF_EVT_RADIO_SESSION_IDLE, /**< Event indicating that a radio session is idle. */ + NRF_EVT_RADIO_SESSION_CLOSED, /**< Event indicating that a radio session is closed. */ + NRF_EVT_NUMBER_OF_EVTS +}; + +/** @} */ + +/** @addtogroup NRF_SOC_TYPES Types + * @{ */ + +/**@brief Represents a mutex for use with the nrf_mutex functions. + * @note Accessing the value directly is not safe, use the mutex functions! + */ +typedef volatile uint8_t nrf_mutex_t; + +/**@brief The interrupt priorities available to the application while the softdevice is active. */ +typedef uint8_t nrf_app_irq_priority_t; + +/**@brief Represents a power mode, used in power mode functions */ +typedef uint8_t nrf_power_mode_t; + +/**@brief Represents a power failure threshold value. */ +typedef uint8_t nrf_power_failure_threshold_t; + +/**@brief Represents a DCDC mode value. */ +typedef uint32_t nrf_power_dcdc_mode_t; + +/**@brief Radio notification distances. */ +typedef uint8_t nrf_radio_notification_distance_t; + +/**@brief Radio notification types. */ +typedef uint8_t nrf_radio_notification_type_t; + +/** @brief The Radio signal callback types. */ +enum NRF_RADIO_CALLBACK_SIGNAL_TYPE +{ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_START, /**< This signal indicates the start of the radio timeslot. */ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0, /**< This signal indicates the NRF_TIMER0 interrupt. */ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO, /**< This signal indicates the NRF_RADIO interrupt. */ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_FAILED, /**< This signal indicates extend action failed. */ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_SUCCEEDED /**< This signal indicates extend action succeeded. */ +}; + +/** @brief The actions requested by the signal callback. + * + * This code gives the SOC instructions about what action to take when the signal callback has + * returned. + */ +enum NRF_RADIO_SIGNAL_CALLBACK_ACTION +{ + NRF_RADIO_SIGNAL_CALLBACK_ACTION_NONE, /**< Return without action. */ + NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND, /**< Request an extension of the current timeslot (maximum execution time for this action is when the extension succeeded). */ + NRF_RADIO_SIGNAL_CALLBACK_ACTION_END, /**< End the current radio timeslot. */ + NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END /**< Request a new radio timeslot and end the current timeslot. */ +}; + +/**@brief Radio timeslot high frequency clock source configuration. */ +enum NRF_RADIO_HFCLK_CFG +{ + NRF_RADIO_HFCLK_CFG_DEFAULT, /**< Use the currently selected oscillator as HF clock source during the timeslot (i.e. the source is not specified). */ + NRF_RADIO_HFCLK_CFG_FORCE_XTAL, /**< Force external crystal to be used as HF clock source during whole the timeslot. */ +}; + +/** @brief Radio timeslot priorities. */ +enum NRF_RADIO_PRIORITY +{ + NRF_RADIO_PRIORITY_HIGH, /**< High (equal priority as the normal connection priority of the SoftDevice stack(s)). */ + NRF_RADIO_PRIORITY_NORMAL, /**< Normal (equal priority as the priority of secondary activites of the SoftDevice stack(s)). */ +}; + +/** @brief Radio timeslot request type. */ +enum NRF_RADIO_REQUEST_TYPE +{ + NRF_RADIO_REQ_TYPE_EARLIEST, /**< Request timeslot as early as possible. This should always be used for the first request in a session. */ + NRF_RADIO_REQ_TYPE_NORMAL /**< Normal timeslot request. */ +}; + +/** @brief Parameters for a request for a timeslot as early as possible. */ +typedef struct +{ + uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ + uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ + uint32_t length_us; /**< The radio timeslot length (in the range 100 to 100,000] microseconds). */ + uint32_t timeout_us; /**< Longest acceptable delay until the start of the requested timeslot (up to @ref NRF_RADIO_EARLIEST_TIMEOUT_MAX_US microseconds). */ +} nrf_radio_request_earliest_t; + +/** @brief Parameters for a normal radio request. */ +typedef struct +{ + uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ + uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ + uint32_t distance_us; /**< Distance from the start of the previous radio timeslot (up to @ref NRF_RADIO_DISTANCE_MAX_US microseconds). */ + uint32_t length_us; /**< The radio timeslot length (in the range [100..100,000] microseconds). */ +} nrf_radio_request_normal_t; + +/** @brief Radio request parameters. */ +typedef struct +{ + uint8_t request_type; /**< Type of request, see @ref NRF_RADIO_REQUEST_TYPE. */ + union + { + nrf_radio_request_earliest_t earliest; /**< Parameters for a request for a timeslot as early as possible. */ + nrf_radio_request_normal_t normal; /**< Parameters for a normal radio request. */ + } params; +} nrf_radio_request_t; + +/**@brief Return parameters of the radio timeslot signal callback. */ +typedef struct +{ + uint8_t callback_action; /**< The action requested by the application when returning from the signal callback, see @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION. */ + union + { + struct + { + nrf_radio_request_t * p_next; /**< The request parameters for the next radio timeslot. */ + } request; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END. */ + struct + { + uint32_t length_us; /**< Requested extension of the timeslot duration (microseconds) (for minimum time see @ref NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US). */ + } extend; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND. */ + } params; +} nrf_radio_signal_callback_return_param_t; + +/**@brief The radio signal callback type. + * + * @note In case of invalid return parameters, the radio timeslot will automatically end + * immediately after returning from the signal callback and the + * @ref NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN event will be sent. + * @note The returned struct pointer must remain valid after the signal callback + * function returns. For instance, this means that it must not point to a stack variable. + * + * @param[in] signal_type Type of signal, see @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE. + * + * @return Pointer to structure containing action requested by the application. + */ +typedef nrf_radio_signal_callback_return_param_t * (*nrf_radio_signal_callback_t) (uint8_t signal_type); + +/**@brief AES ECB data structure */ +typedef struct +{ + uint8_t key[SOC_ECB_KEY_LENGTH]; /**< Encryption key. */ + uint8_t cleartext[SOC_ECB_CLEARTEXT_LENGTH]; /**< Clear Text data. */ + uint8_t ciphertext[SOC_ECB_CIPHERTEXT_LENGTH]; /**< Cipher Text data. */ +} nrf_ecb_hal_data_t; + +/** @} */ + +/** @addtogroup NRF_SOC_FUNCTIONS Functions + * @{ */ + +/**@brief Initialize a mutex. + * + * @param[in] p_mutex Pointer to the mutex to initialize. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_MUTEX_NEW, uint32_t, sd_mutex_new(nrf_mutex_t * p_mutex)); + +/**@brief Attempt to acquire a mutex. + * + * @param[in] p_mutex Pointer to the mutex to acquire. + * + * @retval ::NRF_SUCCESS The mutex was successfully acquired. + * @retval ::NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN The mutex could not be acquired. + */ +SVCALL(SD_MUTEX_ACQUIRE, uint32_t, sd_mutex_acquire(nrf_mutex_t * p_mutex)); + +/**@brief Release a mutex. + * + * @param[in] p_mutex Pointer to the mutex to release. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_MUTEX_RELEASE, uint32_t, sd_mutex_release(nrf_mutex_t * p_mutex)); + +/**@brief Enable External Interrupt. + * @note Corresponds to NVIC_EnableIRQ in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS. + * + * @retval ::NRF_SUCCESS The interrupt was enabled. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt has a priority not available for the application. + */ +SVCALL(SD_NVIC_ENABLEIRQ, uint32_t, sd_nvic_EnableIRQ(IRQn_Type IRQn)); + +/**@brief Disable External Interrupt. + * @note Corresponds to NVIC_DisableIRQ in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS + * + * @retval ::NRF_SUCCESS The interrupt was disabled. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. + */ +SVCALL(SD_NVIC_DISABLEIRQ, uint32_t, sd_nvic_DisableIRQ(IRQn_Type IRQn)); + +/**@brief Get Pending Interrupt. + * @note Corresponds to NVIC_GetPendingIRQ in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_GetPendingIRQ documentation in CMSIS. + * @param[out] p_pending_irq Return value from NVIC_GetPendingIRQ. + * + * @retval ::NRF_SUCCESS The interrupt is available for the application. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. + */ +SVCALL(SD_NVIC_GETPENDINGIRQ, uint32_t, sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq)); + +/**@brief Set Pending Interrupt. + * @note Corresponds to NVIC_SetPendingIRQ in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS. + * + * @retval ::NRF_SUCCESS The interrupt is set pending. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. + */ +SVCALL(SD_NVIC_SETPENDINGIRQ, uint32_t, sd_nvic_SetPendingIRQ(IRQn_Type IRQn)); + +/**@brief Clear Pending Interrupt. + * @note Corresponds to NVIC_ClearPendingIRQ in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS. + * + * @retval ::NRF_SUCCESS The interrupt pending flag is cleared. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. + */ +SVCALL(SD_NVIC_CLEARPENDINGIRQ, uint32_t, sd_nvic_ClearPendingIRQ(IRQn_Type IRQn)); + +/**@brief Set Interrupt Priority. + * @note Corresponds to NVIC_SetPriority in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * @pre{priority is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_SetPriority documentation in CMSIS. + * @param[in] priority A valid IRQ priority for use by the application. + * + * @retval ::NRF_SUCCESS The interrupt and priority level is available for the application. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt priority is not available for the application. + */ +SVCALL(SD_NVIC_SETPRIORITY, uint32_t, sd_nvic_SetPriority(IRQn_Type IRQn, nrf_app_irq_priority_t priority)); + +/**@brief Get Interrupt Priority. + * @note Corresponds to NVIC_GetPriority in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_GetPriority documentation in CMSIS. + * @param[out] p_priority Return value from NVIC_GetPriority. + * + * @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE - IRQn is not available for the application. + */ +SVCALL(SD_NVIC_GETPRIORITY, uint32_t, sd_nvic_GetPriority(IRQn_Type IRQn, nrf_app_irq_priority_t * p_priority)); + +/**@brief System Reset. + * @note Corresponds to NVIC_SystemReset in CMSIS. + * + * @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN + */ +SVCALL(SD_NVIC_SYSTEMRESET, uint32_t, sd_nvic_SystemReset(void)); + +/**@brief Enters critical region. + * + * @post Application interrupts will be disabled. + * @sa sd_nvic_critical_region_exit + * + * @param[out] p_is_nested_critical_region 1: If in a nested critical region. + * 0: Otherwise. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_NVIC_CRITICAL_REGION_ENTER, uint32_t, sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region)); + +/**@brief Exit critical region. + * + * @pre Application has entered a critical region using ::sd_nvic_critical_region_enter. + * @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called. + * + * @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_NVIC_CRITICAL_REGION_EXIT, uint32_t, sd_nvic_critical_region_exit(uint8_t is_nested_critical_region)); + +/**@brief Query the capacity of the application random pool. + * + * @param[out] p_pool_capacity The capacity of the pool. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_RAND_APPLICATION_POOL_CAPACITY, uint32_t, sd_rand_application_pool_capacity_get(uint8_t * p_pool_capacity)); + +/**@brief Get number of random bytes available to the application. + * + * @param[out] p_bytes_available The number of bytes currently available in the pool. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_RAND_APPLICATION_BYTES_AVAILABLE, uint32_t, sd_rand_application_bytes_available_get(uint8_t * p_bytes_available)); + +/**@brief Get random bytes from the application pool. + * + * @param[out] p_buff Pointer to unit8_t buffer for storing the bytes. + * @param[in] length Number of bytes to take from pool and place in p_buff. + * + * @retval ::NRF_SUCCESS The requested bytes were written to p_buff. + * @retval ::NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES No bytes were written to the buffer, because there were not enough bytes available. +*/ +SVCALL(SD_RAND_APPLICATION_GET_VECTOR, uint32_t, sd_rand_application_vector_get(uint8_t * p_buff, uint8_t length)); + +/**@brief Gets the reset reason register. + * + * @param[out] p_reset_reason Contents of the NRF_POWER->RESETREAS register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RESET_REASON_GET, uint32_t, sd_power_reset_reason_get(uint32_t * p_reset_reason)); + +/**@brief Clears the bits of the reset reason register. + * + * @param[in] reset_reason_clr_msk Contains the bits to clear from the reset reason register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RESET_REASON_CLR, uint32_t, sd_power_reset_reason_clr(uint32_t reset_reason_clr_msk)); + +/**@brief Sets the power mode when in CPU sleep. + * + * @param[in] power_mode The power mode to use when in CPU sleep. @sa sd_app_evt_wait + * + * @retval ::NRF_SUCCESS The power mode was set. + * @retval ::NRF_ERROR_SOC_POWER_MODE_UNKNOWN The power mode was unknown. + */ +SVCALL(SD_POWER_MODE_SET, uint32_t, sd_power_mode_set(nrf_power_mode_t power_mode)); + +/**@brief Puts the chip in System OFF mode. + * + * @retval ::NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN + */ +SVCALL(SD_POWER_SYSTEM_OFF, uint32_t, sd_power_system_off(void)); + +/**@brief Enables or disables the power-fail comparator. + * + * Enabling this will give a softdevice event (NRF_EVT_POWER_FAILURE_WARNING) when the power failure warning occurs. + * The event can be retrieved with sd_evt_get(); + * + * @param[in] pof_enable True if the power-fail comparator should be enabled, false if it should be disabled. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_POF_ENABLE, uint32_t, sd_power_pof_enable(uint8_t pof_enable)); + +/**@brief Sets the power-fail threshold value. + * + * @param[in] threshold The power-fail threshold value to use. + * + * @retval ::NRF_SUCCESS The power failure threshold was set. + * @retval ::NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN The power failure threshold is unknown. + */ +SVCALL(SD_POWER_POF_THRESHOLD_SET, uint32_t, sd_power_pof_threshold_set(nrf_power_failure_threshold_t threshold)); + +/**@brief Sets bits in the NRF_POWER->RAMON register. + * + * @param[in] ramon Contains the bits needed to be set in the NRF_POWER->RAMON register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RAMON_SET, uint32_t, sd_power_ramon_set(uint32_t ramon)); + +/** @brief Clears bits in the NRF_POWER->RAMON register. + * + * @param ramon Contains the bits needed to be cleared in the NRF_POWER->RAMON register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RAMON_CLR, uint32_t, sd_power_ramon_clr(uint32_t ramon)); + +/**@brief Get contents of NRF_POWER->RAMON register, indicates power status of ram blocks. + * + * @param[out] p_ramon Content of NRF_POWER->RAMON register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RAMON_GET, uint32_t, sd_power_ramon_get(uint32_t * p_ramon)); + +/**@brief Set bits in the NRF_POWER->GPREGRET register. + * + * @param[in] gpregret_msk Bits to be set in the GPREGRET register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_GPREGRET_SET, uint32_t, sd_power_gpregret_set(uint32_t gpregret_msk)); + +/**@brief Clear bits in the NRF_POWER->GPREGRET register. + * + * @param[in] gpregret_msk Bits to be clear in the GPREGRET register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_GPREGRET_CLR, uint32_t, sd_power_gpregret_clr(uint32_t gpregret_msk)); + +/**@brief Get contents of the NRF_POWER->GPREGRET register. + * + * @param[out] p_gpregret Contents of the GPREGRET register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_GPREGRET_GET, uint32_t, sd_power_gpregret_get(uint32_t *p_gpregret)); + +/**@brief Sets the DCDC mode. + * + * Depending on the internal state of the SoftDevice, the mode change may not happen immediately. + * The DCDC mode switch will be blocked when occurring in close proximity to radio transmissions. When + * the radio transmission is done, the last mode will be used. + * + * @param[in] dcdc_mode The mode of the DCDC. + * + * @retval ::NRF_SUCCESS + * @retval ::NRF_ERROR_INVALID_PARAM The DCDC mode is invalid. + */ +SVCALL(SD_POWER_DCDC_MODE_SET, uint32_t, sd_power_dcdc_mode_set(nrf_power_dcdc_mode_t dcdc_mode)); + +/**@brief Request the high frequency crystal oscillator. + * + * Will start the high frequency crystal oscillator, the startup time of the crystal varies + * and the ::sd_clock_hfclk_is_running function can be polled to check if it has started. + * + * @see sd_clock_hfclk_is_running + * @see sd_clock_hfclk_release + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_CLOCK_HFCLK_REQUEST, uint32_t, sd_clock_hfclk_request(void)); + +/**@brief Releases the high frequency crystal oscillator. + * + * Will stop the high frequency crystal oscillator, this happens immediately. + * + * @see sd_clock_hfclk_is_running + * @see sd_clock_hfclk_request + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_CLOCK_HFCLK_RELEASE, uint32_t, sd_clock_hfclk_release(void)); + +/**@brief Checks if the high frequency crystal oscillator is running. + * + * @see sd_clock_hfclk_request + * @see sd_clock_hfclk_release + * + * @param[out] p_is_running 1 if the external crystal oscillator is running, 0 if not. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_CLOCK_HFCLK_IS_RUNNING, uint32_t, sd_clock_hfclk_is_running(uint32_t * p_is_running)); + +/**@brief Waits for an application event. + * + * An application event is either an application interrupt or a pended interrupt when the + * interrupt is disabled. When the interrupt is enabled it will be taken immediately since + * this function will wait in thread mode, then the execution will return in the application's + * main thread. When an interrupt is disabled and gets pended it will return to the application's + * thread main. The application must ensure that the pended flag is cleared using + * ::sd_nvic_ClearPendingIRQ in order to sleep using this function. This is only necessary for + * disabled interrupts, as the interrupt handler will clear the pending flag automatically for + * enabled interrupts. + * + * In order to wake up from disabled interrupts, the SEVONPEND flag has to be set in the Cortex-M0 + * System Control Register (SCR). @sa CMSIS_SCB + * + * @note If an application interrupt has happened since the last time sd_app_evt_wait was + * called this function will return immediately and not go to sleep. This is to avoid race + * conditions that can occur when a flag is updated in the interrupt handler and processed + * in the main loop. + * + * @post An application interrupt has happened or a interrupt pending flag is set. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_APP_EVT_WAIT, uint32_t, sd_app_evt_wait(void)); + +/**@brief Get PPI channel enable register contents. + * + * @param[out] p_channel_enable The contents of the PPI CHEN register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_CHANNEL_ENABLE_GET, uint32_t, sd_ppi_channel_enable_get(uint32_t * p_channel_enable)); + +/**@brief Set PPI channel enable register. + * + * @param[in] channel_enable_set_msk Mask containing the bits to set in the PPI CHEN register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_CHANNEL_ENABLE_SET, uint32_t, sd_ppi_channel_enable_set(uint32_t channel_enable_set_msk)); + +/**@brief Clear PPI channel enable register. + * + * @param[in] channel_enable_clr_msk Mask containing the bits to clear in the PPI CHEN register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_CHANNEL_ENABLE_CLR, uint32_t, sd_ppi_channel_enable_clr(uint32_t channel_enable_clr_msk)); + +/**@brief Assign endpoints to a PPI channel. + * + * @param[in] channel_num Number of the PPI channel to assign. + * @param[in] evt_endpoint Event endpoint of the PPI channel. + * @param[in] task_endpoint Task endpoint of the PPI channel. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_CHANNEL The channel number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_CHANNEL_ASSIGN, uint32_t, sd_ppi_channel_assign(uint8_t channel_num, const volatile void * evt_endpoint, const volatile void * task_endpoint)); + +/**@brief Task to enable a channel group. + * + * @param[in] group_num Number of the channel group. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_GROUP_TASK_ENABLE, uint32_t, sd_ppi_group_task_enable(uint8_t group_num)); + +/**@brief Task to disable a channel group. + * + * @param[in] group_num Number of the PPI group. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_GROUP_TASK_DISABLE, uint32_t, sd_ppi_group_task_disable(uint8_t group_num)); + +/**@brief Assign PPI channels to a channel group. + * + * @param[in] group_num Number of the channel group. + * @param[in] channel_msk Mask of the channels to assign to the group. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_GROUP_ASSIGN, uint32_t, sd_ppi_group_assign(uint8_t group_num, uint32_t channel_msk)); + +/**@brief Gets the PPI channels of a channel group. + * + * @param[in] group_num Number of the channel group. + * @param[out] p_channel_msk Mask of the channels assigned to the group. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_GROUP_GET, uint32_t, sd_ppi_group_get(uint8_t group_num, uint32_t * p_channel_msk)); + +/**@brief Configures the Radio Notification signal. + * + * @note + * - The notification signal latency depends on the interrupt priority settings of SWI used + * for notification signal. + * - In the period between the ACTIVE signal and the start of the Radio Event, the SoftDevice + * will interrupt the application to do Radio Event preparation. + * - Using the Radio Notification feature may limit the bandwidth, as the SoftDevice may have + * to shorten the connection events to have time for the Radio Notification signals. + * + * @param[in] type Type of notification signal. + * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE shall be used to turn off radio + * notification. Using @ref NRF_RADIO_NOTIFICATION_DISTANCE_NONE is + * recommended (but not required) to be used with + * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE. + * + * @param[in] distance Distance between the notification signal and start of radio activity. + * This parameter is ignored when @ref NRF_RADIO_NOTIFICATION_TYPE_NONE or + * @ref NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE is used. + * + * @retval ::NRF_ERROR_INVALID_PARAM The group number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_RADIO_NOTIFICATION_CFG_SET, uint32_t, sd_radio_notification_cfg_set(nrf_radio_notification_type_t type, nrf_radio_notification_distance_t distance)); + +/**@brief Encrypts a block according to the specified parameters. + * + * 128-bit AES encryption. + * + * @param[in, out] p_ecb_data Pointer to the ECB parameters' struct (two input + * parameters and one output parameter). + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_ECB_BLOCK_ENCRYPT, uint32_t, sd_ecb_block_encrypt(nrf_ecb_hal_data_t * p_ecb_data)); + +/**@brief Gets any pending events generated by the SoC API. + * + * The application should keep calling this function to get events, until ::NRF_ERROR_NOT_FOUND is returned. + * + * @param[out] p_evt_id Set to one of the values in @ref NRF_SOC_EVTS, if any events are pending. + * + * @retval ::NRF_SUCCESS An event was pending. The event id is written in the p_evt_id parameter. + * @retval ::NRF_ERROR_NOT_FOUND No pending events. + */ +SVCALL(SD_EVT_GET, uint32_t, sd_evt_get(uint32_t * p_evt_id)); + +/**@brief Get the temperature measured on the chip + * + * This function will block until the temperature measurement is done. + * It takes around 50us from call to return. + * + * @note Pan #28 in PAN-028 v 1.6 "Negative measured values are not represented correctly" is corrected by this function. + * + * @param[out] p_temp Result of temperature measurement. Die temperature in 0.25 degrees celsius. + * + * @retval ::NRF_SUCCESS A temperature measurement was done, and the temperature was written to temp + */ +SVCALL(SD_TEMP_GET, uint32_t, sd_temp_get(int32_t * p_temp)); + +/**@brief Flash Write + * + * Commands to write a buffer to flash + * + * This call initiates the flash access command, and its completion will be communicated to the + * application with exactly one of the following events: + * - NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. + * - NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. + * + * @note + * - This call takes control over the radio and the CPU during flash erase and write to make sure that + * they will not interfere with the flash access. This means that all interrupts will be blocked + * for a predictable time (depending on the NVMC specification in nRF51 Series Reference Manual + * and the command parameters). + * + * + * @param[in] p_dst Pointer to start of flash location to be written. + * @param[in] p_src Pointer to buffer with data to be written + * @param[in] size Number of 32-bit words to write. Maximum size is 256 32bit words. + * + * @retval ::NRF_ERROR_INVALID_ADDR Tried to write to a non existing flash address, or p_dst or p_src was unaligned. + * @retval ::NRF_ERROR_BUSY The previous command has not yet completed. + * @retval ::NRF_ERROR_INVALID_LENGTH Size was 0, or more than 256 words. + * @retval ::NRF_ERROR_FORBIDDEN Tried to write to or read from protected location. + * @retval ::NRF_SUCCESS The command was accepted. + */ +SVCALL(SD_FLASH_WRITE, uint32_t, sd_flash_write(uint32_t * const p_dst, uint32_t const * const p_src, uint32_t size)); + + +/**@brief Flash Erase page + * + * Commands to erase a flash page + * + * This call initiates the flash access command, and its completion will be communicated to the + * application with exactly one of the following events: + * - NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. + * - NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. + * + * @note + * - This call takes control over the radio and the CPU during flash erase and write to make sure that + * they will not interfere with the flash access. This means that all interrupts will be blocked + * for a predictable time (depending on the NVMC specification in nRF51 Series Reference Manual + * and the command parameters). + * + * + * @param[in] page_number Pagenumber of the page to erase + * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. + * @retval ::NRF_ERROR_INVALID_ADDR Tried to erase to a non existing flash page. + * @retval ::NRF_ERROR_BUSY The previous command has not yet completed. + * @retval ::NRF_ERROR_FORBIDDEN Tried to erase a protected page. + * @retval ::NRF_SUCCESS The command was accepted. + */ +SVCALL(SD_FLASH_PAGE_ERASE, uint32_t, sd_flash_page_erase(uint32_t page_number)); + + +/**@brief Flash Protection set + * + * Commands to set the flash protection registers PROTENSETx + * + * @note To read the values in PROTENSETx you can read them directly. They are only write-protected. + * + * @param[in] protenset0 Value to be written to PROTENSET0 + * @param[in] protenset1 Value to be written to PROTENSET1 + * + * @retval ::NRF_ERROR_FORBIDDEN Tried to protect the SoftDevice + * @retval ::NRF_SUCCESS Values successfully written to PROTENSETx + */ +SVCALL(SD_FLASH_PROTECT, uint32_t, sd_flash_protect(uint32_t protenset0, uint32_t protenset1)); + +/**@brief Opens a session for radio requests. + * + * @note Only one session can be open at a time. + * @note p_radio_signal_callback(NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) will be called when the radio timeslot + * starts. From this point the NRF_RADIO and NRF_TIMER0 peripherals can be freely accessed + * by the application. + * @note p_radio_signal_callback(NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0) is called whenever the NRF_TIMER0 + * interrupt occurs. + * @note p_radio_signal_callback(NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO) is called whenever the NRF_RADIO + * interrupt occurs. + * @note p_radio_signal_callback() will be called at ARM interrupt priority level 0. This + * implies that none of the sd_* API calls can be used from p_radio_signal_callback(). + * + * @param[in] p_radio_signal_callback The signal callback. + * + * @retval ::NRF_ERROR_INVALID_ADDR p_radio_signal_callback is an invalid function pointer. + * @retval ::NRF_ERROR_BUSY If session cannot be opened. + * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. + * @retval ::NRF_SUCCESS Otherwise. + */ + SVCALL(SD_RADIO_SESSION_OPEN, uint32_t, sd_radio_session_open(nrf_radio_signal_callback_t p_radio_signal_callback)); + +/**@brief Closes a session for radio requests. + * + * @note Any current radio timeslot will be finished before the session is closed. + * @note If a radio timeslot is scheduled when the session is closed, it will be canceled. + * @note The application cannot consider the session closed until the NRF_EVT_RADIO_SESSION_CLOSED + * event is received. + * + * @retval ::NRF_ERROR_FORBIDDEN If session not opened. + * @retval ::NRF_ERROR_BUSY If session is currently being closed. + * @retval ::NRF_SUCCESS Otherwise. + */ + SVCALL(SD_RADIO_SESSION_CLOSE, uint32_t, sd_radio_session_close(void)); + + /**@brief Requests a radio timeslot. + * + * @note The timing of the radio timeslot is specified by p_request->distance_us. For the first + * request in a session, p_request->distance_us is required to be 0 by convention, and + * the timeslot is scheduled at the first possible opportunity. All following radio timeslots are + * requested with a distance of p_request->distance_us measured from the start of the + * previous radio timeslot. + * @note A too small p_request->distance_us will lead to a NRF_EVT_RADIO_BLOCKED event. + * @note Timeslots scheduled too close will lead to a NRF_EVT_RADIO_BLOCKED event. + * @note See the SoftDevice Specification for more on radio timeslot scheduling, distances and lengths. + * @note If an opportunity for the first radio timeslot is not found before 100ms after the call to this + * function, it is not scheduled, and instead a NRF_EVT_RADIO_BLOCKED event is sent. + * The application may then try to schedule the first radio timeslot again. + * @note Successful requests will result in nrf_radio_signal_callback_t(NRF_RADIO_CALLBACK_SIGNAL_TYPE_START). + * Unsuccessful requests will result in a NRF_EVT_RADIO_BLOCKED event, see @ref NRF_SOC_EVTS. + * @note The jitter in the start time of the radio timeslots is +/- NRF_RADIO_START_JITTER_US us. + * @note The nrf_radio_signal_callback_t(NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) call has a latency relative to the + * specified radio timeslot start, but this does not affect the actual start time of the timeslot. + * @note NRF_TIMER0 is reset at the start of the radio timeslot, and is clocked at 1MHz from the high frequency + * (16 MHz) clock source. If p_request->hfclk_force_xtal is true, the high frequency clock is + * guaranteed to be clocked from the external crystal. + * @note The SoftDevice will neither access the NRF_RADIO peripheral nor the NRF_TIMER0 peripheral + * during the radio timeslot. + * + * @param[in] p_request Pointer to the request parameters. + * + * @retval ::NRF_ERROR_FORBIDDEN If session not opened or the session is not IDLE. + * @retval ::NRF_ERROR_INVALID_ADDR If the p_request pointer is invalid. + * @retval ::NRF_ERROR_INVALID_PARAM If the parameters of p_request are not valid. + * @retval ::NRF_SUCCESS Otherwise. + */ + SVCALL(SD_RADIO_REQUEST, uint32_t, sd_radio_request(nrf_radio_request_t * p_request )); + +/** @} */ + +#endif // NRF_SOC_H__ + +/**@} */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_svc.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,33 @@ +#ifndef NRF_SVC__ +#define NRF_SVC__ + +#ifdef SVCALL_AS_NORMAL_FUNCTION +#define SVCALL(number, return_type, signature) return_type signature +#else + +#ifndef SVCALL +#if defined (__CC_ARM) +#define SVCALL(number, return_type, signature) return_type __svc(number) signature +#elif defined (__GNUC__) +#define SVCALL(number, return_type, signature) \ + _Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \ + _Pragma("GCC diagnostic ignored \"-Wunused-function\"") \ + __attribute__((naked)) static return_type signature \ + { \ + __asm( \ + "svc %0\n" \ + "bx r14" : : "I" (number) : "r0" \ + ); \ + } +#elif defined (__ICCARM__) +#define PRAGMA(x) _Pragma(#x) +#define SVCALL(number, return_type, signature) \ +PRAGMA(swi_number = number) \ + __swi return_type signature; +#else +#define SVCALL(number, return_type, signature) return_type signature +#endif +#endif // SVCALL + +#endif // SVCALL_AS_NORMAL_FUNCTION +#endif // NRF_SVC__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/softdevice_assert.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + +/** @brief Utilities for verifying program logic + */ + +#ifndef SOFTDEVICE_ASSERT_H_ +#define SOFTDEVICE_ASSERT_H_ + +#include <stdint.h> + +/** @brief This function handles assertions. + * + * + * @note + * This function is called when an assertion has triggered. + * + * + * @param line_num The line number where the assertion is called + * @param file_name Pointer to the file name + */ +void assert_softdevice_callback(uint16_t line_num, const uint8_t *file_name); + + +/*lint -emacro(506, ASSERT) */ /* Suppress "Constant value Boolean */ +/*lint -emacro(774, ASSERT) */ /* Suppress "Boolean within 'if' always evaluates to True" */ \ +/** @brief Check intended for production code + * + * Check passes if "expr" evaluates to true. */ +#define ASSERT(expr) \ +if (expr) \ +{ \ +} \ +else \ +{ \ + assert_softdevice_callback((uint16_t)__LINE__, (uint8_t *)__FILE__); \ + /*lint -unreachable */ \ +} + +#endif /* SOFTDEVICE_ASSERT_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_softdevice.hex Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,5290 @@ +:020000040000FA +:10000000C0070000D1060000D1000000B1060000CA +:1000100000000000000000000000000000000000E0 +:100020000000000000000000000000005107000078 +:100030000000000000000000DB000000E500000000 +:10004000EF000000F9000000030100000D010000B6 +:1000500017010000210100002B0100003501000004 +:100060003F01000049010000530100005D01000054 +:1000700067010000710100007B01000085010000A4 +:100080008F01000099010000A3010000AD010000F4 +:10009000B7010000C1010000CB010000D501000044 +:1000A000DF010000E9010000F3010000FD01000094 +:1000B00007020000110200001B02000025020000E0 +:1000C0001FB5C046C04600F0EFFA04B00FB41FBD24 +:1000D00008205A49096809580847382057490968CB +:1000E000095808473C2055490968095808474020E5 +:1000F0005249096809580847442050490968095875 +:10010000084748204D490968095808474C204B4981 +:10011000096809580847502048490968095808479C +:100120005420464909680958084758204349096836 +:10013000095808475C204149096809580847602068 +:100140003E4909680958084764203C49096809582C +:100150000847682039490968095808476C20374919 +:100160000968095808477020344909680958084740 +:100170007420324909680958084778202F490968CE +:10018000095808477C202D490968095808478020EC +:100190002A490968095808478420284909680958E4 +:1001A0000847882025490968095808478C202349B1 +:1001B00009680958084790202049096809580847E4 +:1001C00094201E4909680958084798201B49096866 +:1001D000095808479C201949096809580847A02070 +:1001E0001649096809580847A4201449096809589C +:1001F0000847A8201149096809580847AC200F4949 +:10020000096809580847B0200C4909680958084787 +:10021000B4200A49096809580847B82007490968FD +:1002200009580847BC2005490968095808470000D3 +:1002300003480449024A034B7047000000000020B5 +:10024000C0070000C00700000122D84B5A6000BF61 +:10025000D74A1268002AFBD0016000BFD44A126856 +:10026000002AFBD00022D14B5A6000BFD04A12684E +:10027000002AFBD07047F0B505460E46174600240D +:1002800006E0A200B158A2005019FFF7DDFF641C80 +:10029000BC42F6D30020F0BD0120C043C549086030 +:1002A000401048607047014601229204086890425D +:1002B00001D9102070470020FCE7F0B505460C4638 +:1002C0001646002706E028462168FFF7BDFF2D1DD2 +:1002D000241D7F1CB742F6D3F0BD70B505460C4611 +:1002E0002E460BE0304600F075F9FF2C01D80024B3 +:1002F00001E0FF3C013C012080023618002CF1D1C6 +:1003000070BD0146012292044868904201D909203B +:100310007047A9484069401C01D10F20F8E7002030 +:10032000F6E7FEB504462068030000F037FA05043E +:100330002B4249598B00201DFFF7E3FF0546002D96 +:1003400001D02846FEBDFFF7A7FF0120C00200F044 +:1003500041F9042221469948FFF78DFF002801D07A +:100360000320EFE708222146944800F06DF90028A9 +:1003700006D1002192480068FFF766FF00F00CF9F3 +:100380000320DFE7A768E6686068019031463846D9 +:10039000FFF7A3FF324638460199FFF78EFFB20000 +:1003A0003846019900F050F9002800D1CAE703202F +:1003B000C8E700F0E3F9834800688349086041E03A +:1003C00060680190E668A0680090B200009901980A +:1003D00000F03AF90746002F00D1B3E70E20B1E74D +:1003E000201DFFF760FF0546002D01D02846A9E734 +:1003F0006068002807D1FFF74FFF0320800200F05C +:10040000E9F800F0C9F8FFF747FF0120C00200F04B +:10041000E1F8042221466948FFF72DFF002801D0AA +:1004200003208FE708222146644800F00DF90028D8 +:1004300006D1002162480068FFF706FF00F0ACF823 +:1004400003207FE700BF00207CE770B505460C461F +:10045000182D04D12068FFF764FF206002E001201E +:10046000206000BF00BF70BDF0B589B05248406940 +:1004700003905248806881000398081802900398FE +:10048000000B01900121090302984018401E000B47 +:1004900000900124002520462946019A00F0C4F866 +:1004A0000022401E91410791069001260027304608 +:1004B0003946009A00F0B8F80022401E914105919B +:1004C0000490049BDB43059AD2430698184307998E +:1004D00011430791069037490698086007984860CD +:1004E00009B0F0BD70B53448446934488568466841 +:1004F000AA003146204600F0A7F8002801D00020CD +:1005000070BD0120FCE72D484068002801D0012083 +:1005100000E000200546FFF7E5FF002807D0FFF7C1 +:10052000BBFE0320800200F055F800F035F8FFF71D +:100530009BFF002D0ED020484669204884684768FC +:1005400021463046FFF7C9FE224639463046FFF7BE +:10055000B4FE00BF00F020F810B5184844681A48EF +:100560000460204600F0DCF810BD15480068006803 +:10057000401C01D100BFFEE710480068002802D0EF +:10058000042806D101E0FFF7BEFFFFF7E5FF00BF3B +:10059000FEE700BF00BFFEE7BFF34F8F0B480C49DB +:1005A000C860BFF34F8F00BFFEE7000000E50140C9 +:1005B00000E40140000600400010001000080000A8 +:1005C000B8070000BC070000000000200400FA0586 +:1005D00000ED00E010B50146104B1A6808460223F2 +:1005E0000F4C636000BF0F4B1B68002BFBD0531CEC +:1005F00004D0904202D20A4B186101E0084B986087 +:1006000000BF084B1B68002BFBD00023044C636029 +:1006100000BF044B1B68002BFBD010BD0010001066 +:1006200000E5014000E4014010B5202A04DB01464A +:10063000203A9140002010BD914020239C1A03468F +:10064000E3401943904010BD034610B50B439B0790 +:100650000FD1042A0DD308C810C9121FA342F8D025 +:1006600018BA21BA884201D9012010BD0020C04328 +:1006700010BD002A03D0D30703D0521C07E000208E +:1006800010BD03780C78401C491C1B1B07D1037854 +:100690000C78401C491C1B1B01D1921EF1D118463D +:1006A00010BD70477047704710B500F007F810BDD7 +:1006B000014B1B68DB6818470000002019481A49E5 +:1006C0007047FFF7FBFFFFF7FBFC00BD20BFFDE716 +:1006D0001649174C24688C420BD1164B1B68994263 +:1006E0000CD1154B154A1360186810498842EDD09B +:1006F0000AE0134880F30888124B18470F4A13602A +:1007000018680A498842E1D080F308880E49884277 +:1007100004DD0E48026802210A4302605B68184744 +:100720000346DFE7C0070000C0070000FFFFFFFF30 +:10073000000C000014100010001000000000002049 +:10074000000400206B05000000200020240500406C +:100750000D48704502D1EFF3098101E0EFF3088104 +:10076000886902380078182802D1C046074A104725 +:10077000074A12682C3212681047000000B5054B7A +:10078000054A9B58984700BDFDFFFFFF4B04000042 +:1007900000000020001000000400000030B4744687 +:1007A000641E2578641CAB4204D3635D5B00E318D0 +:1007B00030BC18471D46F8E7000C00000010000090 +:10100000901D002079500100ED3D0000DF4F0100F0 +:1010100000000000000000000000000000000000D0 +:10102000000000000000000000000000E950010086 +:101030000000000000000000ED3D0000ED3D00005C +:10104000555101005B510100ED3D0000ED3D0000F8 +:10105000ED3D0000ED3D0000ED3D0000ED3D0000E8 +:1010600061510100ED3D0000ED3D000067510100C0 +:10107000ED3D00006D5101007351010079510100F7 +:10108000ED3D0000ED3D0000ED3D0000ED3D0000B8 +:10109000ED3D0000ED3D0000ED3D0000ED3D0000A8 +:1010A0007F51010085510100ED3D0000ED3D000044 +:1010B000ED3D0000ED3D0000ED3D0000ED3D000088 +:1010C00000F002F813F0B9FF0CA030C8083824185B +:1010D0002D18A246671EAB4654465D46AC4201D170 +:1010E00013F0ABFF7E460F3E0FCCB64601263342CF +:1010F00000D0FB1AA246AB463343184744410100D7 +:1011000074410100103A02D378C878C1FAD8520766 +:1011100001D330C830C101D504680C6070470000AD +:101120000023002400250026103A01D378C1FBD803 +:10113000520700D330C100D50B6070471FB5C046C1 +:10114000C04613F01BFF04B00FB41FBD82690249F3 +:1011500081610248104470476111000001000000E5 +:1011600001B41EB400B510F02FFC01B401988646FE +:1011700001BC01B01EBD0000F0B4404649465246D5 +:101180005B460FB402A0013001B50648004700BF1E +:1011900001BC86460FBC8046894692469B46F0BC01 +:1011A00070470000C1100000401E00BF00BF00BF1C +:1011B00000BF00BF00BF00BF00BF00BF00BF00BF37 +:1011C00000BFF1D17047000070B505460C461646C9 +:1011D00002E00FCC0FC5103E102EFAD2082E02D31B +:1011E00003CC03C5083E042E07D301CC01C5361F2E +:1011F00003E021782970641C6D1C761EF9D270BD45 +:101200008307FF22DB0E9A408907090E99400028C8 +:101210000BDA0007000F0838830828489B001B18CA +:10122000D86990430843D8617047830824489B00DD +:101230001B181868904308431860704710B504469F +:1012400000210120FFF7DCFF00211820FFF7D8FF65 +:1012500000210B20FFF7D4FF02211920FFF7D0FF58 +:1012600002210D20FFF7CCFF02210E20FFF7C8FF5F +:1012700002210F20FFF7C4FF0221C81FFFF7C0FFA4 +:1012800003211620FFF7BCFF03211520FFF7B8FF4D +:10129000204600F019F8002010BD4F210180704752 +:1012A00010B500F03AF810BD0648704710B500F0D0 +:1012B00035F810BD704770477047000000ED00E042 +:1012C00000E400E003F900C330B50446374D95B0A3 +:1012D00007202870A81CFFF7E0FF5920A880344899 +:1012E00001F020FC0546072000F0DCF929462F48D4 +:1012F00000F08CFA641E072C0AD830216846017071 +:10130000847001F0DDFA002802D009A800F0DDFCAD +:10131000284601F083FE15B030BD7047F8B5234E66 +:101320000446B61E307801270D46002807D0204617 +:1013300060380B2808D8204601F096FB2BE0602C83 +:10134000F9D01C480860F8BD20466C38032803D843 +:10135000204601F0CBFB1EE0204670381F2803D842 +:10136000204600F037F816E0204690380F2803D8C2 +:10137000204600F0BBF80EE02046A0380F2803D826 +:10138000204600F023F906E02046B0380F2804D8A4 +:10139000204600F000F9286000E02F60602CD2D1D8 +:1013A00028680028CFD13770F8BD00001A0000204F +:1013B000C33300000130000070477047704770472A +:1013C000704770477047704710B5012801D100F091 +:1013D00042FA10BD10B57038030013F0EBFE150C87 +:1013E00012161E22252C33383D41454950555C6468 +:1013F0006C747B8085004A680878114603F081FF91 +:1014000010BD086803F0F9FF10BD0C790B7B8A68EA +:101410000868214604F005F810BD086804F07EF85D +:1014200010BD03F05BFC10BD08884A6880B211460D +:1014300004F043FA10BD0A790888114680B204F01E +:1014400091FA10BD087840B204F09CFA10BD0888EB +:1014500080B204F0B8FA10BD086804F0C7FA10BDF5 +:10146000086804F0DFFA10BD086804F00AFB10BD3C +:10147000088982B209C9194604F034FB10BD05C9B8 +:10148000114604F082FB10BD08884A6880B21146FC +:1014900004F0A0FB10BD0B7908888A6880B2194659 +:1014A00004F0FDFB10BD0B7908888A6880B21946EC +:1014B00004F0B3FC10BD08884B688A6880B21946F6 +:1014C00004F0F3FC10BD08884A6880B2114604F0AD +:1014D0003EFD10BD088880B204F056FD10BD08889E +:1014E00080B204F076FD10BD012010BD10B590381B +:1014F000030013F05FFE09060F161D242C363F462D +:101500004E0088888A6883B20888194680B205F040 +:1015100093F910BD08884A6880B2114605F0E9F9D0 +:1015200010BD08884A6880B2114605F02DFA10BD3A +:1015300008884A6880B2114605F063FA10BD088831 +:101540004B688A6880B2194605F094FA10BD088984 +:1015500082B2888883B20888194680B205F0C9FA39 +:1015600010BD08894B6882B20888194680B205F020 +:10157000FEFA10BD08884A6880B2114605F02EFBBD +:1015800010BD888882B20888114680B205F0C2FB7F +:1015900010BD012010BD10B5B02805D0B12808D06D +:1015A000B2280BD0012010BD088880B205F0A6FE3D +:1015B00010BD088880B205F0D1FE10BD08884B68C8 +:1015C0008A6880B2194605F0DAFE10BD10B5A03861 +:1015D000030013F0EFFD0B070E172028323C434D9C +:1015E000545D65004B6808788A68194607F017FA59 +:1015F00010BD88888A6883B20888194680B207F0CF +:1016000023FA10BD08884C68CB688A6880B22146EE +:1016100007F02AFA10BD08884B688A6880B219461C +:1016200007F044FA10BD8888CB6884B208888A68BD +:1016300080B2214607F064FA10BD8888CB6884B276 +:1016400008888A6880B2214607F089FA10BD0888A8 +:101650004A6880B2114607F0BDFA10BD088982B20F +:10166000888883B20888194680B207F0BDFA10BD99 +:1016700008884A6880B2114607F0DAFA10BD088976 +:101680004B6882B20888194680B207F057FB10BD3C +:1016900008884B688A6880B2194607F014FC10BDB0 +:1016A000012010BD10B507F0FAFC0FF0A7FF00F005 +:1016B00007F810F0F5F808F0F5F908F081F910BD19 +:1016C00001202B49C00308602A490020087003202C +:1016D0002949800288607047F8B5264D044628786D +:1016E000A04207D0002C05D0002803D023A14D2014 +:1016F00013F06FFC2878A04213D02C700325002330 +:101700002349AD021C48002C27D01B4A214E4032F1 +:10171000214F012C06D0022C13D018A16E2013F0FB +:1017200058FCF8BD0B6002230B604E6185601B49BD +:1017300011625762091D91621749091DD162456006 +:10174000F8BD0B6003230B604E610121C90281606B +:10175000134B9362D7624160F8BD0B600B608560EC +:10176000F8BD10B505A1772013F033FC10BD0000C3 +:1017700080E100E02000002000F501407372635C0E +:1017800068616C5F63636D5F6161722E630000006E +:1017900000F500407C01002000F0004000110040F6 +:1017A000488100401CB50446002069460870204668 +:1017B00009F0F6F86946204608F0B4FF002803D186 +:1017C000FBA1B62013F005FC01A9204608F009FF93 +:1017D000002803D1F6A1BB2013F0FBFB684600787C +:1017E0001CBD70B5F74D002428462C76203084713E +:1017F000C47113F0EDFC2846403804702030847327 +:10180000847484762C74AC7070BDEAE710B50C4615 +:10181000ED4982888A8042884A80007808700846AC +:101820000A38847008F0B3FEFFF7DBFF20460AF0A9 +:101830002FFAE44AE0321146383908461446813816 +:1018400009F020F92146E0480BF0C2FC09F09FF8AE +:1018500013F0BEFC10BD10B50120FFF7ADFD10BDAB +:10186000F8B509F083FDD84DD64C0A3D022802D0C8 +:10187000207C00287CD0207E0026102819D1A0785A +:10188000002803D0CAA1D14813F0A3FBCD48E83803 +:10189000817A89070DD50146267160398989E180F1 +:1018A000C17A217281896181C089A0810120A070E3 +:1018B0002676C44F203FB87C002859D1C4486946D9 +:1018C000808908F02FFF002805D0694668780978DC +:1018D0004018687004E0BD48B5A11D3013F079FBD5 +:1018E000207C002838D0BA488189FF300930406D0B +:1018F0008089814204D0B548ADA1223013F069FB44 +:10190000B348808908F0B4FF002804D1AF48A8A1EB +:10191000283013F05EFB09F022F800281CD0AC48F8 +:101920008089FFF73FFF697840186870A548403804 +:10193000416D20318A7C012A0DD1A54A3E779289DA +:10194000C287C87C20700120B876207E102801D084 +:10195000282800D1267626746978002908D09C486A +:101960008289FF300930C28601870120B8746E7009 +:1019700009F0CCFC002805D1207C002802D0A878F2 +:1019800001F0F4F8F8BDF8B50F460446FFF768FF1C +:101990008C4D403D28788B4E002813D0002F10D15D +:1019A000307E002804D0FF2081A1C63013F011FB47 +:1019B0002C22A91C204613F06FF90E202070002065 +:1019C00028708FE07F4D203DA87B002818D0002F85 +:1019D000F7D1307E102808D0282806D0002804D05F +:1019E000FF2073A1D23013F0F4FA0120E070E87BFD +:1019F000A070287C60700F2020700020A87371E018 +:101A00000121204608F0E4FF002807D0307C0028A0 +:101A100051D13946204608F0DBFFF8BDA97C694862 +:101A20000C38009068480A38002913D0017805293D +:101A300010D2002F56D1491C0170002666700D206F +:101A40002070012028750622A01C009913F024F9AB +:101A5000AE7447E05C4800210A380170B078002875 +:101A600014D0002F3ED1307E002803D050A1594819 +:101A700013F0AFFA002565700120524920700A2248 +:101A8000091DA01C13F008F9B5702BE0394620465B +:101A90000BF008FB002825D1A87C002805D0002FDA +:101AA00020D149480A380178C5E7A87E002802D02D +:101AB000307C002801D00020F8BD002F12D1307EEC +:101AC000002804D08F203AA1800013F082FA00266B +:101AD00066700A203B4920700622091FA01C13F0E3 +:101AE000DBF8AE760120F8BD10B53648017E00293E +:101AF00008D1007C012805D001210020FFF743FF19 +:101B0000002801D0072010BD012010BD10B5012410 +:101B10000AF006F90443FFF7E7FF044308F038FF33 +:101B200001462143084610BDF8B51D4614460E4631 +:101B300008F077FD002807D0684608F07DFD0028F2 +:101B400003D0002C07D101E00120F8BD9B2018A193 +:101B5000800013F03EFA08F01BFDA04204D21D489D +:101B600013A1583013F035FA009808F089F931467E +:101B7000009808F097F9E2B22946009808F04EFB69 +:101B800008F06CFD002804D19F2009A1800013F00B +:101B900020FA08F0FFFE0E4800244030417C002966 +:101BA00002D044740AF0A7F90948C480CCE70000C9 +:101BB0007372635C6C6C5F6374726C2E73302E6333 +:101BC00000000000200300202C00002082060000FE +:101BD000D80100201502000010B50179002908D0B5 +:101BE00001290BD0FF20FE49043013F0F2F9002048 +:101BF00010BD831D42880488022103E042880488C6 +:101C0000831D01212046FFF78FFF10BDF8B51F4649 +:101C100015460E46044609F0A9FB022803D0F148F8 +:101C2000007C00281FD0F0488089208008F020FE2A +:101C3000002803D1EA49ED4813F0CBF905246846A2 +:101C400008F021FE00280ED0009808F063F93070EB +:101C5000022809D0012807D008F055FE641E24068A +:101C6000240EECD10020F8BD3946009808F0EEFAB9 +:101C70002880002804D1AF20D949800013F0A9F9A9 +:101C800008F041FE002804D1D848D549193013F096 +:101C9000A0F90120F8BD38B50446831D821C6946B1 +:101CA000FFF7B4FF00280DD000206071684600786F +:101CB000012808D0022806D0FF20C949253013F09A +:101CC00088F9012038BD2071FBE700215BE670B583 +:101CD000C44C0546403C2078002803D1C148007E12 +:101CE000002804D0C120BE49C00013F072F9287842 +:101CF00008F085FF28780BF0C1FB0020207101203F +:101D000060713921E170207070BD70B5B54D044629 +:101D1000403D2878002803D1B248007E002804D036 +:101D20005F20AF49000113F054F9AF4E2188B0890C +:101D3000884203D109F01AFB022807D0022028713B +:101D4000012068713821E970287070BD7F2070769D +:101D5000A548E17820304174A17801740020EEE7B5 +:101D600010B5A04C403C207800280BD19D48007E47 +:101D7000002807D109F0FAFA032803D009F0FAFA8B +:101D8000032804D199489649653013F022F9954902 +:101D900000202031C8712071012060713A21E1706A +:101DA000207010BD70B58F4C0646403C207800284E +:101DB0000BD18C48007E002807D109F0D7FA032800 +:101DC00003D009F0D7FA032804D1884884497B302E +:101DD00013F0FFF8834D2035E87908280CD2E87914 +:101DE0001022000100196830314600F025FEE87924 +:101DF000401CE871002000E0072020710120607184 +:101E00003B21E170207070BDF8B5764D0446403D31 +:101E10002878002803D17348007E002803D0704939 +:101E2000734813F0D6F8704F2188B889884203D1DF +:101E300009F09CFA022801D0022022E03E8C64883E +:101E40007200788CF98B521C944217D3694A514323 +:101E50009200504312F09AFF401EFF2180B2F531EC +:101E6000884200D90846844200D22046711C401C9A +:101E700012F08CFF761C7043401E86B2FE85EE8009 +:101E800000202871012068713C21E9702870F8BD9C +:101E9000F8B5544C0546403C2078002803D1514801 +:101EA000007E002804D052484D492C3813F091F898 +:101EB000A878002801D0012804D1A888FF21F53195 +:101EC000884204D959204649000113F082F8464E51 +:101ED0002988B089884203D109F048FA022807D03E +:101EE00002202071012060713621E1702070F8BD60 +:101EF0003D48002720308772A988B18501213176BD +:101F0000A978012900D00021817237484030407CF7 +:101F1000002801D009F0EFFF2771E3E770B5314CDD +:101F20000546403C2078002807D12E48007E002836 +:101F300003D109F01BFA002804D02D482849533852 +:101F400013F047F8287809F0EEFE002020710120F8 +:101F500060713021E170207070BD70B5214C054674 +:101F6000403C2078002803D11E48007E002804D081 +:101F70001F481B495F3013F02CF8287800280BD03D +:101F8000012809D0022807D06878402804D31848CF +:101F90001349663013F01DF8284609F0DEF90028D1 +:101FA00001D0002000E00C2020710120607134215C +:101FB000E170207070BD70B50A4C0546403C207839 +:101FC000002807D10748007E002803D109F0CEF988 +:101FD000002804D057200249000112F0FAFF0BE05C +:101FE000B01B000020030020D8010020AA0200003E +:101FF000B6050000C40900002978002913D00A2979 +:1020000011D014290FD01E290DD028290BD0322928 +:1020100009D04B2907D0642905D0FF2903D0FE49F8 +:10202000FE4812F0D6FF284609F0FCFE0020207181 +:10203000012060713321E170207070BD70B5F84CE3 +:1020400006462078251D002804D120464030007E19 +:10205000002804D05520F049000112F0BAFF3146A3 +:10206000002008F0A1FD2870002804D10622314686 +:10207000EC4812F011FE012060713221E1702070F5 +:1020800070BD70B5E64C05462078002804D1204686 +:102090004030007E002804D0A720DF49C00012F0A5 +:1020A00098FF00216956042914D0002912D0081D78 +:1020B00010D0001D0ED0001D0CD0001D0AD0001D38 +:1020C00008D00A3006D0283104D0D448D249443848 +:1020D00012F07FFFD448297801700120607131210E +:1020E000E170207070BD10B5CD4C2078002804D16F +:1020F00020464030007E002803D0C749CB4812F06C +:1021000068FF08F045FAE08008F00AFB2072002022 +:102110002071012060710521E170207010BDF8B5BB +:10212000BF4C07462034A07B25462035002805D12A +:10213000287E002802D1A878002804D0B748B649E4 +:10214000703812F046FF09F011F91026022822D14A +:10215000B7483988808988421DD1B1494839084635 +:102160000A7F6038807A002A03D080070CD40C20C4 +:102170000CE0800708D406200877AD484030407C4A +:10218000002801D009F0B7FE2E760020E0732674F7 +:102190000120A073F8BD0220F8E710B5A04C20780C +:1021A000002804D120464030007E002804D09B48FF +:1021B0009949823812F00DFF002020710E20A07086 +:1021C0000F20E070FF20A0710020C04320819548BF +:1021D000C01D0178A1728188A1814088E081012021 +:1021E0006071207010BD10B58D4C2078002804D18E +:1021F00020464030007E002803D087498D4812F0E9 +:10220000E8FE0821A01D0FF095FA002020710120A2 +:1022100060712B21E170207010BD70B5804D0446B7 +:102220002878002804D128464030007E002804D0B9 +:102230007A487949B13012F0CCFE7D48102221460F +:10224000303800F0F9FB7A481022A118203800F04D +:10225000F3FB774830380FF074FB754910221039C2 +:102260002C46A81D00F0E8FB002020710E20A07075 +:102270002A20E07001206071207070BDF8B5684CB4 +:1022800005462034A07B26462036002802D1307E29 +:10229000002804D067486049E53012F09AFEA9781A +:1022A000052912D0132910D014290ED015290CD0CD +:1022B0001A290AD0292908D03D2906D03B2904D063 +:1022C0005C485549ED3012F084FE28885A4988420E +:1022D00004D958485049F63012F07BFE09F046F810 +:1022E0000C212827022809D151482A888089904248 +:1022F00015D14B484838027E002A01D0E17310E026 +:10230000A97841760121017637760020E0734848AC +:102310004030407C002804D009F0EDFD01E00220AF +:10232000E07327740120A073F8BDF8B53C4F064652 +:1023300038783D1D002804D138464030007E002802 +:1023400004D089203449C00012F043FE31460120F8 +:1023500008F02AFC01242870002807D13048062202 +:1023600060303146054612F097FCAC717C71172045 +:10237000F8703C70F8BDF0B52B4F85B0403F3D7A0A +:10238000064627480078002804D13846A038007E49 +:10239000002804D0D3202049800012F01AFE3078A3 +:1023A000002806D0012804D022481B492C3812F0FE +:1023B00010FE082D4CD21C4820380190C46930789A +:1023C00000283FD0012804D01A4813491E3812F0C3 +:1023D00000FE294608310120884004430120A8401E +:1023E00020430090B1790E4C0802727969000919F6 +:1023F0001043FF3101318881B01C12F0AEFC7178BE +:1024000000020843A9000919C031C862387A401C8B +:1024100038720199009811E0B01B00007E050000A1 +:10242000E00200202500002000040020E706000054 +:10243000D801002079030000FF0E0000C8610020D1 +:10244000207108E029460831012088408443C5E70F +:10245000FE48072101710121FC480B224171C27025 +:10246000017005B0F0BD10B5F84C2078002804D1FB +:1024700020464030007E002803D0F549F54812F090 +:10248000A8FD12F0A5FE00202071012060710A2134 +:10249000E170207010BD10B509F0DDFB002804D0FC +:1024A000EC48EB49583812F094FD08F06FFA08F048 +:1024B00052F80AF07EFE002804D0BD20E4498000D6 +:1024C00012F087FD08F0B3FA002804D05F20E0493D +:1024D000C00012F07EFD12F07BFEDF480024047085 +:1024E000FFF77FF9D9480121047141710222C270BE +:1024F000017010BD70B5D54D04462878002804D170 +:1025000028464030007E002804D0F320D0498000C7 +:1025100012F05FFD20781F2801D8601C04D1CD483F +:10252000CB498F3012F055FD002028712078611CB6 +:1025300008F054FB012068712021E970287070BDFB +:10254000F8B5C24C0646207825464035002802D111 +:10255000287E002804D0BF48BD499C3012F039FDC8 +:102560003078012806D0002804D0BA48B8499D30F8 +:1025700012F02FFD012060710C20207130780027AF +:10258000B64E012808D008F0F1FE032867D008F005 +:10259000F1FE032871D076E008F0E8FE002803D1B0 +:1025A00008F0E8FE002804D008F0E0FE02283DD044 +:1025B00069E008F07EFA002865D0287C002862D106 +:1025C000A64802210C300FF03EF8002806D00F215B +:1025D000B089090212F0DAFBB18100E0B781012273 +:1025E00003219E4807F05AFE9C4808F006FCB0897B +:1025F00007F0D0FF002804D196489549B83012F072 +:10260000E8FCB089002108F0C9F9002804D09148FD +:102610008F49BC3012F0DDFC297F688B09F087FB05 +:1026200000282FD08B488A49C03015E008F0A2FE60 +:10263000002828D1287F002825D0012823D008F0A1 +:1026400038FA00281FD0297F688B09F070FB00281A +:1026500018D080487E49D33012F0BBFC12E0002035 +:1026600009F098FA00280ED12771287C00280AD199 +:10267000B089FFF797F806E0FFE7002009F08AFA33 +:10268000002800D127711B20E07001202070F8BDC8 +:1026900070B56E4D04462878002804D12846403095 +:1026A000007E002804D06B486949803012F091FC0C +:1026B00020781F2801D8601C04D166486449813005 +:1026C00012F087FC002028712078611C08F09AFA2B +:1026D000012068711A21E970287070BDF8B55B4D52 +:1026E000044628780C272E46403600280AD1307E32 +:1026F000002807D108F03AFE032803D008F03AFE7C +:10270000032804D153485249473012F062FC6079E3 +:10271000002801D001282FD1A079002801D001285C +:102720002AD1A07B002805D0012803D0022801D09F +:10273000032821D1607B40071ED0618801208003DF +:10274000814202D82288824201D920790CE0207986 +:10275000002804D0022805D0032803D004E0202953 +:1027600004D209E0A02A01D2012805D1208888429C +:1027700007D92079012804D0364835495C3012F059 +:1027800028FC20887083207930776079002802D077 +:10279000012803D00CE0324A002105E02B4A6032C8 +:1027A0009079002804D00121204608F086F90746D8 +:1027B00001202F7168711821E9702870F8BD70B57B +:1027C000224C05462078002804D120464030007E67 +:1027D000002803D01E49234812F0FBFB08F0C6FD79 +:1027E0000C2102280ED11D482A8883899A4219D1CA +:1027F0000246C032137F002B04D1807E0E2803D006 +:102800000F2801D0217103E00520107700202071EE +:102810000E20A0702E20E0702888E08001206071DA +:10282000207070BD0220F2E770B5084C0546207894 +:10283000002804D120464030007E002804D00948FA +:1028400003492C3812F0C5FB0EE00000E002002026 +:10285000B01B00003E03000000040020D80100204F +:1028600025000020D104000008F080FD0C21022882 +:102870000ED178482A8883899A421FD10646C036ED +:10288000327F002A04D1807E0E2803D00F2801D089 +:10289000217109E06F481022A91CEA3012F0FCF9FE +:1028A00004203077002020710E20A0702D20E070D1 +:1028B0002888E08001206071207070BD0220F2E75E +:1028C00010B501780B0012F075FC3D8787388787BB +:1028D00058878787873B3E878787515487878787B5 +:1028E00087874228872C3087878787348787878721 +:1028F00087878746874A4E872024876B5B5F63679D +:10290000876F877E827B77738700801CFFF78CFF41 +:1029100060E0801CFFF753FF5CE0801CFFF7DEFEE9 +:1029200058E0801CFFF7B4FE54E0801CFFF708FE5F +:1029300050E0801CFFF7DEFD4CE0FFF7ACFD49E006 +:10294000FFF791FD46E0801CFFF715FD42E0801C7B +:10295000FFF7EBFC3EE0801CFFF790FC3AE0801CA8 +:10296000FFF75BFC36E0FFF73EFC33E0FFF715FCBA +:1029700030E0801CFFF7D3FB2CE0FFF7B4FB29E02D +:10298000801CFFF77EFB25E0801CFFF757FB21E052 +:10299000801CFFF710FB1DE0801CFFF7DEFA19E03A +:1029A000801CFFF7BBFA15E0801CFFF771FA11E0FD +:1029B000801CFFF729FA0DE0801CFFF7F3F909E00E +:1029C000FFF7CEF906E0801CFFF79FF902E0801CBC +:1029D000FFF77DF9012010BD002010BD10B51E4984 +:1029E0001E4812F0F6FA10BD70B51D4A01241146BA +:1029F000184D4031030012F0DDFB05191C1C0419B1 +:102A00001C0001220021134807F048FC1448002153 +:102A1000483801774177C03809F005FA002804D01A +:102A20000E480D49D33012F0D4FA70BD0C745565C0 +:102A300070BD09490B48F6E730B5134606E0CC18DF +:102A4000203CE47FD51A44555B1EDBB2002BF6D147 +:102A500030BD0000D8010020B01B0000410600007E +:102A6000E00200204707000010B56038030012F0B4 +:102A7000A1FB0A060A0F13181F262A31363B0868E5 +:102A800000F093FD10BD05C9114600F0ADFD10BD6D +:102A9000086800F04CFE10BD05C9114600F054FE58 +:102AA00010BD4B6808788A68194600F065FE10BDB5 +:102AB0004B688A680868194600F07FFE10BD0868F8 +:102AC00000F09AFE10BD08884A6880B2114600F0F6 +:102AD000EAFE10BD05C9114600F00AFF10BD05C988 +:102AE000114600F01DFF10BD012010BD10B56C286F +:102AF00001D0012010BD087800F0B8FE10BD000024 +:102B000001203F49400608603E4908603E490A6886 +:102B1000FF231B029A4383121A430A603849803903 +:102B20000860704710B502460420384904E0C3002D +:102B30005B181B79002B0AD00346401EC0B2002B45 +:102B4000F5D133A1432012F044FAFF2010BDC30099 +:102B5000CA50002259184A718A7101220A7110BDA7 +:102B60002A4A0021C00080180171704710B5044640 +:102B7000042803D326A1522012F02BFA2348E100A7 +:102B80000C182079012803D021A1532012F021FA3A +:102B90006079A179401CC0B2814200D060710120EF +:102BA000174940068031086010BD70B516480068AE +:102BB0000004800F022803D015A1692012F009FA41 +:102BC000124E194C03252078C10088190279012A78 +:102BD00007D1427983799A4203D042798271705841 +:102BE00080472078401CC0B22070042801D3002008 +:102BF000207028466D1EEDB20028E4D170BD0000A3 +:102C000080E100E080E200E018E400E02C12002007 +:102C10007372635C736F635F7369676E616C6C6919 +:102C20006E672E63000000003C00002010B5EFF33B +:102C30001080C407E40F72B6D6484178491C417031 +:102C40004078012801D10FF065F9002C00D162B65F +:102C500010BD70B5CF4CE07800280AD10125E57091 +:102C6000FFF7E4FF0FF05EF9002804D000200FF01A +:102C700031F9002070BDC84865714560F9E770B54D +:102C8000EFF31080C507ED0F72B6C24C60780028D4 +:102C900003D1C2A18F2012F09CF96078401E6070B1 +:102CA0006078002801D10FF039F9002D00D162B60B +:102CB00070BD10B5B748C178002904D0002141711A +:102CC000C170FFF7DCFF002010BD10B504460FF007 +:102CD00029F9B049C978084000D0012020600020BF +:102CE00010BDF8B50246AB4C0026A67108200421A1 +:102CF00001251027130012F05DFA0D080A0C0E10C2 +:102D00001214161E262123252800257122E00220F8 +:102D100001E021711EE020711CE027711AE02020E3 +:102D2000F9E7012616E0FFF781FF0FF0FBF8002816 +:102D3000FBD002260EE02171A5710BE02771FBE7A5 +:102D4000202000E040202071F6E7FF2093A17E3094 +:102D500012F03FF90FF0F2F8002809D00FF0F4F864 +:102D6000B04205D130460FF0F2F80028FAD024E046 +:102D700001208007C5608D4A002151608C4A966110 +:102D8000854B02225A6085608A4803690569DB43E6 +:102D9000DB06DB175B1C10273D430561834D00E01C +:102DA00020BF6F68002FFBD0002B03D107691023D1 +:102DB0009F430761784882606960A07900280CD041 +:102DC0000FF0B0F805460FF00DF87B4A002D02D049 +:102DD000A260E06001E0E260A060002E01D100F09E +:102DE000B1F8F8BD10B504460FF0A2F8002805D0E0 +:102DF00068490120C8704A78521C4A702046FFF783 +:102E000070FF10BDF8B5694FB8680025012802D1E0 +:102E1000BD600FF05FF87868012800D17D603868E8 +:102E200001265C4C012814D13D606079002803D054 +:102E300000200FF04FF865712078002809D00FF0BE +:102E400071F8002805D05948C0388663000606612D +:102E5000A670386901282CD13D6100F068F8012086 +:102E600080074661A079002815D00FF05BF800902C +:102E70000EF0B8FF0099002901D0E16800E0A168D8 +:102E8000411A022901DA8A1C13DC0099002901D0B9 +:102E9000E06000E0A060FFF7C9FE0FF043F80028F3 +:102EA00006D04248C038866300060661A67000E07E +:102EB0002670F868012819D100F039F800F037F8C9 +:102EC00000F035F8A078002804D1FF2033A10530A8 +:102ED00012F07FF8FD60A5702570FFF7D0FE0EF0B0 +:102EE000F8FA002802D03148C038C663F8BD10B5E2 +:102EF000284CE078002801D10FF010F8012081075C +:102F0000886100F014F8A07800280BD0274CE06806 +:102F1000002803D10FF01BF80028F8D10020E06052 +:102F200000F005F800201C49C043886010BD08B5BA +:102F30005020694608806A461088411E118000288A +:102F4000F9D108BDF8B51448192787601749002042 +:102F50000860C8600EF0E6FFBD0701240D4E002892 +:102F600005D01248C03884632C61B47000E034701E +:102F7000FFF75CFE084847600D4930798863FFF72A +:102F8000D6FFAC61FFF7D3FF0849002008616C61F0 +:102F9000F8BD000040000020000300407372635C35 +:102FA000736F635F636C6F636B2E6300000100409F +:102FB0000005004000ED00E0FFFFFF7F10B510F0BE +:102FC00064F810BD00200449C8630120012181403C +:102FD000024A116000BF7047C01F004080E200E05D +:102FE00010B504460BF095F820460CF0AAF810BD79 +:102FF0007047704770477047704770477047704719 +:1030000010FFFFFFDBE5B151006001004F00FFFF43 +:1030100003B40148019001BD09000020FE49487039 +:10302000704710B5030012F0C5F8080E050E080829 +:103030000B0B0E1104F07DF810BDFFF7D1FF10BD92 +:103040000DF0E8FF10BD01F095FE10BDFF20F3A1CB +:10305000713011F0BEFF10BD7FB5F44905464868D8 +:103060008968082301910090F14A1946F1480EF051 +:103070008BFD0024F0480EF0A5FD641CE4B2082C82 +:10308000F8D3EB490320803140020CF02FF90028DF +:1030900003D0E2A1962011F09CFF1E220221E748F6 +:1030A0000AF0E7FCE5481E22032110300BF05BFA22 +:1030B000E2480722342174300AF034FCDF484C2106 +:1030C000283011F048FEDD496A46743108464C3814 +:1030D0000164FF317B31416401211172039002F0E0 +:1030E000B4F802A80CF050FC002803D0CBA1AA2011 +:1030F00011F06FFFCF4802222421A8380AF012FCF9 +:10310000CC4802222C215C380AF00CFCCC490B2064 +:103110000EF082F8002803D0C0A1B72011F059FFAB +:1031200003F0F4FF03F0F8F904F05AFE6B460022B6 +:103130000821C4A001F070FF002803D0B7A1BE2071 +:1031400011F047FF284605F071F9002803D0B3A11C +:10315000C02011F03EFF8521C900BD4811F0FBFDE4 +:10316000BB49B24A0020135C0C18401CC0B2E3708B +:103170000428F8D3A849002048608870C8707FBD33 +:1031800070B5B44E0546706A94B00C46401C04D12C +:10319000B06AC0430004000C0BD0306AC007C00FF7 +:1031A0002870706A11F0EAFDB06A2071000A60713F +:1031B00013E02B206946087009A968460AF0F8FB5D +:1031C000002803D095A1E42011F003FF012028700E +:1031D00006220AA9204611F05FFD2878002803D0B6 +:1031E0006079C0210843607114B070BDF0B5994C8E +:1031F0000646206895B00D463746401C0837002823 +:1032000008D16068401C05D1A068401C02D1E0686C +:10321000401C11D02068314611F0B0FD6068311DAE +:1032200011F0ACFDA068394611F0A8FDE068314608 +:103230000C3111F0A3FD25E02B206946087009A987 +:1032400068460AF0B5FB002804D0FF2073A10E30B9 +:1032500011F0BFFE08220AA9304611F01DFD2B20F7 +:103260006946087009A968460AF0A2FB002804D044 +:10327000FF206AA1153011F0ACFE08220AA93846D9 +:1032800011F00AFD20692E46401C0836002808D19E +:103290006069401C05D1A069401C02D1E069401C56 +:1032A00012D02069294611F069FD6069291D11F0CD +:1032B00065FDA069314611F061FDE06929460C31D8 +:1032C00011F05CFD15B0F0BD2B246846047009A90F +:1032D0000AF06EFB002804D0FF2050A1333011F01B +:1032E00078FE082209AF0AA9284611F0D5FC6846E5 +:1032F000047009A90AF05CFB002804D0FF2047A154 +:103300003A3011F066FE0822391D304611F0C4FC37 +:10331000D8E710B5002108460EF00CFD0021012071 +:103320000EF008FD002102200EF004FD0021032014 +:103330000EF000FD002104200EF0FCFC0021052011 +:103340000EF0F8FC10BD10B5414CA0780B2804D34A +:10335000FF2032A18A3011F03CFE207860214843E2 +:1033600000190830002101704178E722C908C9001E +:10337000C91C11404170284A0121917010BD70B5DF +:10338000254CA07800280ED0314800250178491C32 +:10339000C9B201700B2900D105708178491C817078 +:1033A0000EF093FDA57070BD70B51B4C05466068AE +:1033B000002804D0FF2019A1B33011F00AFE656087 +:1033C00070BD70B5144E224DFFF7BDFF7168044605 +:1033D000002907D06022FDF7F7FEFFF7D0FF00209D +:1033E0007060F1E72879002876D012485C380AF03E +:1033F000A9FA6060002804D1FF2008A1D13011F0A3 +:10340000E8FD60680AF0FCFA002831D0204600F0A0 +:103410006FFF607801071FE0340000207372635C67 +:10342000686F73745F636F72652E6300E051010013 +:10343000040400200C12002023300000840A002025 +:10344000B41000206E524635313832320000000090 +:103450008C0C00208000001007D5C008C000401C64 +:1034600060702879401E287127E0F74861682AE0DB +:10347000F54861680AF06FFA687900282CD0F248A4 +:103480004C380AF05FFA6060002804D1FF20EF4951 +:10349000F43011F09EFD60680AF0B6FA002816D0EC +:1034A000204603F085FE6078010709D5C008C000FA +:1034B000801C60706879401E6871FFF760FF83E7C9 +:1034C000E14861684C380AF046FA7DE704E0DE48DE +:1034D00061684C380AF03FFA70BDF7B505460078D0 +:1034E000002700090C463E46062803D0D749D84895 +:1034F00011F06FFD287A00280ED0012814D0D4488E +:10350000D249213011F065FD0298002C068001D0CF +:10351000278066800020FEBD02270926002C0ED0E1 +:10352000A889A080A87B08E003271426002C06D0D9 +:103530002869E060A88A2082287B2072E4E702984C +:103540000680E7E770B50E4600211C461980154637 +:10355000030011F02FFE0723050B1711231D230075 +:1035600022462946304603F0EFFD70BD224629462B +:10357000304601F078F970BD22462946304604F005 +:103580002AFB70BD22462946304602F0F9FF70BD85 +:10359000224629463046FFF7A0FF70BD9720AB4971 +:1035A000800011F016FD032070BD10B5A94C2178E4 +:1035B000002901D0082010BDFFF74EFD012020702A +:1035C000002010BD0146A04810B54C380AF0C3F9E0 +:1035D000A1494879401CC0B24871012803D19D48D7 +:1035E0004078FFF7C3FA10BDF8B50546072040073D +:1035F0000F460A18012189038A4209D2002D02D000 +:103600002818884204D2E81C80088000A84201D013 +:103610001020F8BD90488178002911D03988009198 +:103620004178602251430C18083420783B4600074B +:10363000000F00222146FFF785FF060004D015E0A9 +:10364000002038800520F8BD002D13D0398800985F +:10365000814201D90C260DE020783B460007000F7F +:103660002A462146FFF76EFF060005D00C2E01D03A +:10367000002038803046F8BD774D6878401CC0B2D5 +:1036800068700B2801D100206870A878401EA870CF +:1036900061784807400F022810D00128EAD16A4813 +:1036A00061680AF058F92879401CC0B228710128D5 +:1036B000E0D168484078FFF759FADBE7C806D9D46B +:1036C0006068FFF77FFFD5E770B50446634816468C +:1036D0000D46814204D15E485C49C53011F079FC49 +:1036E000012E05D05A485949D53011F072FC70BDF1 +:1036F00058480121C1706620207000202072A581E9 +:10370000A17370BD70B516460D46040001D1FFF7D8 +:103710001AFE662101700121017229680161A988E0 +:1037200081820673002C01D1FFF729FE70BD0721AD +:103730004907012241189203914201D3102070479A +:103740000721017000207047454A10B590420ED302 +:1037500001239B04C21A434B9A4208D3424B98421E +:1037600005D2072252078A18DB139A4201D3102090 +:1037700010BD0DF08AFD10BD394B10B599420ED326 +:1037800001239B04374CCB1AA34208D3364B9942F2 +:1037900005D2E3020124D318A403A34201D31020CD +:1037A00010BD022803D0102801D0092010BD0DF053 +:1037B00092FD0028FAD0052010BD70B5284B984224 +:1037C00012D301239B04274CC31AA3420CD3264BCC +:1037D000984209D2E4020D19DB139D4204D2002A5B +:1037E00004D014199C4201D3102070BD0DF099FD36 +:1037F0000028FAD0072070BD10B504460720400706 +:1038000001212018890394B0884202D3102014B0FB +:1038100010BD01F06AFD002801D01120F7E70F204C +:1038200008A9087369460BA80AF0C2F80028EED16F +:103830006846007A207068464089608068468089C2 +:10384000A0800020E3E70000B01100201C3400003D +:1038500015020000340000208C0C0020FFFF000047 +:10386000006001000000FC1F0040002010B594B073 +:10387000044601F03AFD002801D01120C7E7002CD2 +:1038800001D00720C3E7392168460170002181700B +:1038900009A90AF08DF8002803D02B492B4811F014 +:1038A00098FB0020B3E770B5294C0846E178002961 +:1038B00013D000280FD007225207012385189B033D +:1038C0009D4203D20568AA189A4201D3102070BD08 +:1038D0008288002A03D0012903D0082070BD092066 +:1038E00070BD04F0E1FA0028FAD10021E17070BD4A +:1038F000184A10B5914208D301229204164B8A1A35 +:103900009A4202D3154A914201D3102010BD0246BB +:10391000203A1F2A02D801F01FFC10BD072010BD5D +:1039200007225207012310B58A189B039A4201D33C +:10393000102010BD0246203A1F2A02D801F068FC70 +:1039400010BD072010BD00001C34000079030000EA +:1039500034000020006001000000FC1F0040002037 +:103960008107C90E002808DA0007000F0838800810 +:103970002C4A80008018C06904E080082A4A800030 +:1039800080180068C8400006800F704710B50D20F1 +:10399000FFF7E6FFC4B20420C043FFF7E1FFC0B267 +:1039A000844203D021A11A2011F013FB10BD012184 +:1039B000234A48031060234B00221A60224A5160B8 +:1039C000224A1060224A11601D4980390860704700 +:1039D00001211B4A480310601D4A5160194A002109 +:1039E00011601A490860704710B516490868012827 +:1039F00004D00EA1562011F0ECFA10BD15488068D5 +:103A00000022C0B20A600DF0BBFE10BD10B50D481B +:103A100001680029FCD0FFF7E7FF01200B494003B4 +:103A2000086010BD00ED00E000E400E07372635C2C +:103A3000736F635F68616C5F726E672E6300000076 +:103A400080E100E000D1004000D3004080E200E0CF +:103A500000D0004000D5004030B40121BC48C9026C +:103A60000160CD1005604A030260BA4803681B027A +:103A70001B0A036004680023240A24020460B64879 +:103A80000468240A24020460B44801244460846069 +:103A9000B34C23606360A360B24B19601D601A6071 +:103AA000B14B19601A600121016030BC704710B43D +:103AB0000121A748CC0204600A0202600B060360E1 +:103AC000A64841608160A64900200860486088607F +:103AD000A44804600260036010BC70470121A14843 +:103AE000C9020160C91001607047002805D0012893 +:103AF00005D0022805D19D4870479D4870479D48D4 +:103B0000704710B59CA18B2011F063FA002010BD06 +:103B100070B500219F4CA04DA04A914B002808D0C1 +:103B200001281DD0022822D093A1B32011F051FA10 +:103B300070BD01200004A060A86011601960984B5E +:103B400042109A60974A9060814A0012106096482D +:103B5000016087480160954801609548017070BD1B +:103B600001204004A060A8605160596070BD012030 +:103B70008004A060A8609160996070BDF8B594461B +:103B8000844A854D00240127754E002808D001285D +:103B900036D0022844D078A1E82011F01AFAF8BDF6 +:103BA000891E0902090A01200004906034606860DF +:103BB0007A4A1160012B21D000217D4A7D4B517042 +:103BC00061463D31DC63DF637B4B5C6002249C60BB +:103BD00004241C61744B196074490F60614B891592 +:103BE0001960704B58606048016075487349C16046 +:103BF00086606B49600348601770F8BD0121DCE7FF +:103C000001205C4E40046F4F012B04D134605060A2 +:103C100068603960F8BD9060346068603960F8BDF4 +:103C20000120524E8004684F012BF4D1EEE7674823 +:103C30004068704770B54A4D28680026554C0128E9 +:103C400006D1A068C00303D501200004A0602E6047 +:103C50006868012809D1A068800306D501204004C6 +:103C6000A0606E6001200FF04CF9A868012809D10E +:103C7000A068400306D501208004A060AE60022049 +:103C80000FF03FF970BD10B549490878002818D0E9 +:103C90000120434AC0039060424A400090602C4A91 +:103CA00000121060404A00201060314A10603F4A04 +:103CB000106008704A78002A02D048700FF021F98D +:103CC00010BD0320FAE70120414900060860704753 +:103CD0000120244900060860704701203C49400546 +:103CE0000860704701201F4940050860704731494E +:103CF0000020C86388151B4908607047410A354A8F +:103D0000C005C00D5043801C5143400A081870473D +:103D100010B4314C430B63431B0C5C020C602D4C04 +:103D20006343C31A2D485C0258432A4B400D43435A +:103D3000E31A0124DB0324041B191B1613700A6801 +:103D40001018086010BC704710B50FF0B2F910BD24 +:103D500080E100E008E400E018E400E000B000408A +:103D600040B1004080E200E000E100E048B10040E6 +:103D70004081004044B100407372635C72656D5FC6 +:103D800068616C5F6576656E745F74696D65722ECF +:103D90006300000000B3004040B3004040B5004065 +:103DA00000F5014000830040408500400082004053 +:103DB00050000020C08F004000850040008000407F +:103DC00080F5014044B5004048B5004000B50040D2 +:103DD00000E200E0093D0000378600006F0C0100A2 +:103DE0000E4A12680C498A420AD118470B4A1268D7 +:103DF000094B9A4204D101B50DF0DDFD03BC8E469E +:103E0000074909680958084706480749054A064B03 +:103E10007047000000000000BEBAFECA1C0100206E +:103E200004000020901D0020901D002010B5FA4CC9 +:103E300094B02168087A002836D017206A4610709E +:103E400000A806220931023010F026FF09A96846B1 +:103E500009F0AEFD112825D02168C03189790629E5 +:103E600020D007291ED008291CD004291AD00929DE +:103E700018D00A2916D00B2914D0052912D00028F1 +:103E800003D0E6A1F32011F0A4F82168B82040582F +:103E900006221C30093110F0FFFE2068017A8030C4 +:103EA000806BC17614B010BD3220C7E770B5DA4D13 +:103EB000044629680300C03111F07CF90C077C0B23 +:103EC0001A212E3B48515C677080FF20D3A1093036 +:103ED0006EE0887901286DD009286BD0052869D05B +:103EE0000A2867D00B2865D0FF20CCA10E305FE0F8 +:103EF000887901285ED0FF20C8A1153058E0887964 +:103F0000062857D0072855D0082853D0052851D067 +:103F1000FF20C2A118304BE0887909284AD00A282E +:103F200048D00B2846D0042844D0FF20BBA11E3027 +:103F30003EE0887903283DD007283BD0082839D0B7 +:103F4000092837D0FF20B5A1243031E08879062830 +:103F500030D00A282ED0FF20B0A12A3028E088795E +:103F6000062827D0072825D00B2823D0FF20ABA177 +:103F70002E301DE0887906281CD00A281AD00B287C +:103F800018D0FF20A5A1333012E08879092811D07C +:103F90000A280FD0FF20A1A1383009E0887909282C +:103FA00008D00A2806D0082804D0FF209BA13C3066 +:103FB00011F00FF82868C030847170BDFF2097A100 +:103FC0004130F5E79449C9220968525CD206920F44 +:103FD00005D1A0318A8B824201D1887F70470020B1 +:103FE000704770B504461120207000218A4D617021 +:103FF0002968C031897A002908D003290ED0042904 +:1040000010D0FF2085A16A3010F0E3FF207800096E +:10401000012802D92868807D607070BD0007000FFC +:10402000203002E00007000F30302070EEE730B59E +:1040300003887E497E4C8B4202D09A1FA2421ED238 +:1040400042888A4202D0951FA54218D2934216D8C0 +:1040500083887D24E400A34211D8C088884205D01B +:10406000734D04460A3C2D1FAC4208D2884208D04A +:104070008A4206D05B1C5A43C000824201DD072001 +:1040800030BD002030BDFFB50022099B002802D0C2 +:10409000994205DC5CE0002902D1002004B0F0BDAB +:1040A0000920FBE7845C002C12D085186F780D2F57 +:1040B0004CD010DC3B0011F07DF80A421B2A2A305C +:1040C0003032323A3A42835C002B3FD1521CD2B29A +:1040D0008A42F8DBE1E7122F31D004DC0E2F35D015 +:1040E0000F2F2CD132E0142F11D0152F27D116E02D +:1040F000022CD5D1AB78039C072B237001D25B0730 +:1041000001D40A20CAE7029B01241B7814E0E34390 +:10411000DB0708E0012C08D011E00620BEE70F25E0 +:1041200023072D075B19002BF4D03046B6E7029B1E +:104130001B789C070AD402242343029C2370835CCF +:10414000521C9A18D2B28A4204DDA9E70B20A5E7D7 +:10415000192676028A42A5DB9FE705E00278401C1B +:10416000002A01D0002070470A46491E89B2002A61 +:10417000F4D10120704730B5274D0021286887B061 +:10418000C943A030818300248477214606200DF0A6 +:10419000D1FD002105200DF0CDFD002102200DF004 +:1041A000C9FD0120FFF782FE28686946C030C4714E +:1041B00004720120087068460BF007FC07B030BDA0 +:1041C00030B5154C95B02268C0329279042A0CD0D3 +:1041D000052A0AD028236A4613705080132906D076 +:1041E0003B2904D0072015B030BD0820FBE7117132 +:1041F000104609A909F0DCFB05000BD12068C0308E +:104200008179062916D0082914D0072912D0052053 +:10421000FFF74CFE2846E6E7540000207372635C0B +:104220006761705F636F72652E630000FFFF0000BF +:104230007B0C00000420EBE730B587B0040003D00E +:10424000002107200DF076FDFE4D012128686A4609 +:1042500001720421117003210C300DF06BFA2968F2 +:104260004022887B8006800E1043887368460BF0DE +:10427000ACFB00280DD12968098A00299ED0002CAA +:104280009CD08B000122002107200DF0AEFC0728F6 +:1042900001D0032092E7002090E770B50025064684 +:1042A000002803D0002107200DF044FDE54C01213A +:1042B00020680172062109300DF03CFA2068817BEC +:1042C0008906890E8173FFF7B1FD2068008A0028F6 +:1042D0000AD0002E08D083000122002107200DF013 +:1042E00084FC072802D00325284670BD0025FBE783 +:1042F000F0B59BB0040004D11920D349400110F05F +:1043000068FE72202070616800260A780825521F16 +:104310000127CC48130010F04DFF0F0976D9FD7628 +:1043200078FCFBB576767676FAF97600C5480068B3 +:10433000C0308079032803D0C349C44810F049FE37 +:10434000002108460DF0F6FC002107200DF0F2FCDC +:104350006078BC4A28436070106810250146C0315F +:104360004B7A2B434B7263689D783C2D48D00246B4 +:104370009D88A032977763688030DB890B80636803 +:104380001B8A4B8063685B8A8B8095836168826B34 +:10439000C97911756168806B08311530062210F0FB +:1043A0007BFC0620FFF782FDA648CA210068FB229D +:1043B0000E54017E11400176B82109588A7A92087C +:1043C00092008A724682284602F0ACFE002804D091 +:1043D0009E489D491A3010F0FCFD284602F0BCF8BA +:1043E000002804D0994898491D3010F0F2FD284665 +:1043F00003F008FD002806D069209349C0003EE183 +:104400000120FFF753FD1BB0F0BD064600688F8802 +:10441000C0308079062812D0072810D008280ED086 +:1044200004280CD009280AD00A2808D00B2806D066 +:10443000052804D0D5208449800010F0CAFD60789A +:10444000284360703068C030417A294341728079D6 +:10445000092811D00A280FD00B280DD005280BD021 +:10446000FFF789FE384602F062FE384602F07AF81D +:10447000384603F0FDFCC6E7FFF77DFE0220FFF79C +:1044800015FDEFE70068C0308079062812D00728B4 +:1044900010D008280ED004280CD009280AD00A28E9 +:1044A00008D00B2806D0052804D06F206649C0002C +:1044B00010F08FFD6068807902F0F1FE0028A2D034 +:1044C0006178294361706168C8809CE7074600688D +:1044D000C0308079062812D0072810D008280ED0C6 +:1044E00004280CD009280AD00A2808D00B2806D0A6 +:1044F000052804D055485449623010F06AFD6078B0 +:10450000284360706068C188386804E032E197E150 +:1045100084E084E00FE0C030018061680989418057 +:10452000616849898180002102200DF003FC386810 +:10453000C030C67167E706460068C030807906283B +:1045400019D0072817D0082815D0042893D0092897 +:1045500011D00A280FD00B280DD005288BD03B484E +:104560003949793010F035FD3068C0308079042841 +:10457000ABD00528A9D03068807C40063AD5606869 +:1045800002210C30FFF7E9FD002833D060680821D4 +:10459000001DFFF7E2FD00282CD03168B8204058FC +:1045A000807A800708D1CA20405C002808D1488A58 +:1045B000C20505D5C00703D14A8A402082434A82FA +:1045C0004A8A802082434A822D2268460270BC209B +:1045D000425A684642801022973101A810F05CFBD5 +:1045E00009A9684609F0E4F90028A3D0174816493C +:1045F000A03044E062683068AC2192890A52616858 +:104600000822091DAE3010F047FB10A80574306871 +:10461000AE30159014A80BF0D8F9F4E68F71064669 +:104620000068C030807906281FD007281DD00828D0 +:104630001BD00428F1D0092817D00A2815D00B2840 +:1046400013D005E0540000201C42000029030000A4 +:104650000528E2D0F949FA4810F0BBFC3068C030B8 +:1046600080790428D9D00528D7D0606881790029BD +:1046700002D08078002805D0F148F0496C3010F065 +:10468000A8FCC0E66078B8212843607030680958FB +:10469000897A8907890F012952D1817C09064FD473 +:1046A000017E490701D5042100E00321C030817259 +:1046B0002B206946087009A9684609F079F9002895 +:1046C00004D0DF48DD49213010F083FC69463068B2 +:1046D000098D81820E2210A90A74DA49B822159137 +:1046E000125808324A61024660324A6092790A7072 +:1046F000024614320A61521D8A601032CA60133AAF +:104700008A619632CA61921C0A62473A4A62103242 +:104710008A621032CA62473ACA63521E0A64921F02 +:1047200050304A64886414A80CF038FB022815D075 +:10473000002813D0C248C1494A3010F04AFC0DE0AD +:10474000817C4906017E490701D5042100E003214F +:10475000C0308172002106200DF0ECFA3068418AE9 +:104760000A0602D440229143418289B280229143B9 +:10477000418248E6B4480068C0308079032804D0FC +:10478000AF48AE49783010F024FC002108460DF007 +:10479000D1FA002107200DF0CDFA6078AA4A28430B +:1047A0006070106810250146C0314B7A2B434B7264 +:1047B00063689D783C2D00D122E602469D88A03298 +:1047C000977763688030DB890B8063681B8A4B8036 +:1047D00063685B8A8B8095836168826BC979117588 +:1047E0006168806B08311530062210F055FA0620FA +:1047F000FFF75CFB9448CA210068FB220E54017E3F +:10480000114001764682284602F08CFC002804D034 +:104810008B488A49923010F0DCFB284601F09CFE60 +:10482000002804D086488549953010F0D2FB2846F0 +:1048300003F0E8FA00289CD08148804997301EE7B1 +:10484000607828436070DEE500290BD088807E48C0 +:104850000068C0300288CA8002880A8142884A8182 +:10486000808888817047F7B5064600780C46002797 +:10487000010982B03D46012974D073480068009058 +:10488000C03002296FD0072904D00A296CD06B49A7 +:104890006E48E3E171680A78521F130010F08AFC39 +:1048A0000F09A551A5A52F585847A5A5A5A5656F22 +:1048B000A5008A783C2A1BD010271625002C7DD015 +:1048C0008888A0807068A21DC08920827068C08915 +:1048D000E0817068008A60827068408AA082716896 +:1048E00008460831C07901F09FFB0020607375E035 +:1048F00019270725002CE2D00021A17171E01127B2 +:104900000725002CDBD089880091A1807168F722EF +:104910008979A171417A11404172009802F008FC36 +:10492000009801F023FE009803F0B0FAC1E10127DE +:104930000925002CC3D08888A080706880792072F7 +:10494000B7E1888812270E252146FFF77DFFB0E1E9 +:1049500018270825002CB2D08888A080A01DFFF75A +:1049600040FBA6E145E0A1E15DE01A270725002C08 +:10497000A5D04888A08070680079A07199E18A78F4 +:104980003C2AB5D010271625002C98D08888A08006 +:104990007068C08920827068C089E0817068008A70 +:1049A00060827068408AA0827168607B497D40089F +:1049B0004000C907C90F0843607300E036E1716821 +:1049C000C007497DC00F49084900084360737168FA +:1049D000A21D08460831C07901F026FB1A4800687C +:1049E000C030417AEF22114046E1532013490001C3 +:1049F00034E1307A012803D014481049C5382DE13C +:104A000012270E2570892146FFF71EFF002C91D03A +:104A100070784007400F032888D10B480068C030E9 +:104A2000417AFB22DFE708490968A031002C01D058 +:104A30008A8BA280327A921E0AE000001C4200009B +:104A4000ED030000AC120020540000200C06000012 +:104A5000130010F0AFFB073D4853EDEE6F05ED007E +:104A600013270C25002C90D0009900224A82F1686F +:104A700089788907890F0129217A26D049084900B8 +:104A80002172FD231940F3689B785B07DB0F5B0005 +:104A900019432172E323E2801940F3681B785B0716 +:104AA000DB0E19432172DF231940F3685B78DB07C3 +:104AB0009B0E194321726272F1680122C978A172BA +:104AC000017A1143F7221140ADE001231943D7E7E2 +:104AD00015270C25002C9AD0F06806220068A11D2D +:104AE0000EF07CFFE5E016270725002C8FD0317BE8 +:104AF000A171017A08221BE00172DAE01427122565 +:104B0000002C84D00098A21D8030806B01461531A6 +:104B1000007D01F089FAB089E081207C0121084301 +:104B2000F92108402074FE480068C030017A022252 +:104B30001143E1E717273825002C77D03221A01D3B +:104B400010F007F90020A071207A03210843207299 +:104B5000FB210840F24909680A7E5207D20F9200F1 +:104B600010432072B8204058807A800757D0A07A2E +:104B70008A7C4008D2074000D20F1043FD2210402B +:104B8000A0728B7CFB229B07DB0F10409B0018431D +:104B9000A0728B7CF7269B07DB0F3040DB001843AD +:104BA000EF231840A072E07A10408A7CD206D20F20 +:104BB00092001043E0728A7C3040D206D20FD200BD +:104BC0001043E072888AA0812046102267310E309F +:104BD00010F062F8D249A07F0968C0078A7DC00F33 +:104BE00052001043A0770A7E400852074000D20FBF +:104BF0001043A077084640304DC820344DC4303CA7 +:104C00003F20405C22463032393101F00DFAC44871 +:104C100000688030806B817A890889008172C04881 +:104C20000068C030017AFB22114065E737E000E000 +:104C300038E0327B022A14D017273825002C2ED0DA +:104C4000017AFB2319400172012A17D0032A17D0D9 +:104C5000042A18D0052A16D0B249B34810F0B9F981 +:104C600027E019270725002C19D0898BA180012165 +:104C7000A171417A4908490041721AE0012000E01F +:104C80000220A07106E0707B0007000F8030A07149 +:104C9000052A02D00020E0710BE00120FBE7049818 +:104CA00005800CE0A0489F490A30D7E7317A0029F7 +:104CB00008D00498002C058001D027806580002052 +:104CC00005B0F0BD19270725002CE8D00021C94305 +:104CD000A1800021A171417AFD2284E610B5904C9B +:104CE00094B02068C0308079022809D0032807D00A +:104CF000052805D0092803D00A2801D00B2837D170 +:104D00001B2108A801730021817369460BA808F0D4 +:104D10004FFE002804D1684640781B2802D00320AB +:104D200014B010BD002108460DF004F80021072042 +:104D30000DF000F868468078002819D12068C0304E +:104D40008079801E030010F035FA0A060613081356 +:104D500013130D0F1113012000E00420FFF7A6F834 +:104D60000020DDE70620F9E70720F7E70820F5E750 +:104D70000820D5E770B50025694C002807D0022827 +:104D800017D0072828D033206649400146E0FFF7B6 +:104D9000A5FF00280CD1FEF7D6FA2221017005727A +:104DA000FEF7EDFA2068C030417A022211434172C9 +:104DB00070BDFEF7C8FA122101700121017221684D +:104DC000BC22525A4281C031CD71FEF7D8FA206818 +:104DD000C030417A0422E9E72168C620405C0228FD +:104DE00009D0032807D0092805D00A2803D00B28AA +:104DF00001D00528DCD1887B8109012911D08009E7 +:104E000004D0494847496E3010F0E3F80020FFF71E +:104E100044FA0028CCD044484249723010F0D9F806 +:104E200070BD0020FFF708FAF3E770B50D460400E7 +:104E300004D1CD203B49C00010F0CBF820780128E8 +:104E400005D0394837499D3010F0C3F870BDA188AE +:104E50003648334E814209D1E288824206D1306819 +:104E60001321A030808BFFF7ABF970BD814202D1D6 +:104E7000E08800280AD012202870687808210843AA +:104E8000687007CC083507C5002106E000227823AA +:104E9000114602200CF0A9FE02213068C030C17119 +:104EA00070BD1F480068C030807A704738B51C4C10 +:104EB00005460278206813000146C03110F07AF9E7 +:104EC00009A8060909A21945728AA800FEF7AEFFD3 +:104ED00038BD8879062806D0092804D0124811491F +:104EE000B53010F076F820680422017E1143017677 +:104EF00088E0A9880029EBD0A030808B0B4988423C +:104F0000E6D0A868002804D107480649C53010F04B +:104F100060F8A8680A38A8600090AB88206807E0AD +:104F2000540000201C420000E9050000FFFF0000C3 +:104F3000A030808B0622042102F028F80028C7D078 +:104F4000F849F94810F045F838BD287902288879E1 +:104F50000DD00428F8D00528F6D0284601F075F8C1 +:104F600020681321A030808BFFF72AF938BD07286D +:104F700006D00A2804D0EC48EA490A3010F029F893 +:104F8000284601F062F820680122C030417A1143BE +:104F900041728079072803D00920FEF787FF38BDCA +:104FA0000620FAE7887906280AD0042808D00928BC +:104FB00006D0052804D0DC48DA49313010F009F871 +:104FC0000ECDDA480361C2608160A2210170FEF754 +:104FD000EBF938BD8879062818D0072816D009289B +:104FE0000DD00A280BD0D048CE4944300FF0F1FF45 +:104FF0002068C0308079062808D0072806D00B200A +:10500000FEF754FF284601F020F838BD0820F7E7E6 +:10501000C548C449583095E7FFB593B001246846A8 +:1050200003218470C9021D4601800AF0A6F90022FE +:105030006946012003F0ABF906460AF0A2F9002EFA +:105040005CD16846152184704902018000271C212B +:1050500001A808970FF07FFE01200146103108A833 +:1050600001700020014608A841708178F9200140B4 +:10507000891C214308A881706846017902263143C2 +:10508000017114998185C7851F21018608A80A909E +:1050900013980D90684609900AF06FF90EAA09A9B5 +:1050A00001A802F036FF07460AF06BF9002F02D084 +:1050B000384617B0F0BD9E4F68463968008F48806B +:1050C000684684709B49018008A88078F9210840CF +:1050D000801C4108490008A88170684686850686BC +:1050E00015A80D900AF049F90EAA09A901A802F025 +:1050F00010FF06460AF045F9002E01D03046D8E7E9 +:1051000068463968008F88808A4968468470C91C5F +:105110000180298810A8018069884180A988818040 +:10512000E988C180082168468185018610A80D9014 +:105130000AF023F90EAA09A901A802F0EAFE044622 +:105140000AF01FF9002C01D02046B2E76846396802 +:10515000008FC8800020ACE7F0B5774D95B00C46C5 +:10516000A9423FD30126B604744FA11BB94239D3DB +:1051700073498C4236D2202806D0212827D02228F5 +:1051800042D0072015B0F0BD3C216846017021884F +:1051900041806188818009A908F00AFC0028F1D1CA +:1051A00008A98979002903D002290ED00320E9E754 +:1051B0006168A942E6D38A1BBA42E3D3604A9142AE +:1051C000E0D26A46128D0A80DCE75E48DAE72068A2 +:1051D000574C002813D00721490701224118920398 +:1051E000914201D31020CDE706210EF0E1FB2168AA +:1051F000A82250500120A03188750020C2E7206805 +:105200000021A0308175F8E7204600F02AFFB9E7B9 +:10521000494A10B5914208D301229204474B8A1A99 +:105220009A4202D3464A914201D3102010BD202851 +:1052300005D0212803D0222803D0072010BD062046 +:1052400010BD084600F051FF10BD70B50446374848 +:10525000CC21AC300FF07FFD3448354EAC3000210E +:105260003060C943A0308183002585770120FEF797 +:105270001DFE3068C7210D54E121C57389000182EC +:10528000B6210D54014609310830FDF779FF316828 +:10529000084629311930FDF7A9FF002C24D03068C9 +:1052A00080308463FEF7C2FD1E20E081607A8F218A +:1052B0000840303060723068014614312161983105 +:1052C0006162933921601031616025721339A162E6 +:1052D000091FE1628531E163303921631031616377 +:1052E00010310930A163A06470BD11480068C0305E +:1052F0008079042803D0052801D0002070470120C0 +:10530000704770B506460C480C46814208D3012010 +:1053100080040A49201A884202D30948844213D3E0 +:10532000102070BD1C420000B30600004C1200208B +:1053300054000020012A0000006001000000FC1F52 +:105340000040002002300000FFF7CFFF002801D00E +:105350001120E6E7FD48FE4D002E02D0012E46D179 +:105360002FE02278002A0AD00121012A09D0022A3E +:1053700014D0032AD5D1A2799209D2D112E000210A +:1053800003E0A2799209032ACBD128680622017290 +:1053900060308171611C0FF07FFC05E0A2799209F9 +:1053A000012ABED128680172002107200CF0C2FC3E +:1053B00028680622611C09300FF06EFCFEF736FDEE +:1053C00011E02178002912D0012910D0022910D033 +:1053D0000329A6D10120FEF760FF002803D0DD4994 +:1053E000DD480FF0F6FD2868C673002099E7072016 +:1053F00097E70120FEF720FFEFE707214907012289 +:1054000010B541189203914201D3102010BDD0492C +:10541000024609680B7A0931184600F005FE0020A3 +:1054200010BDFFB599B005460020694608710872A5 +:1054300008A9087408751E4614460121C748890446 +:10544000C74AC84B002D06D085420DD36F1A97422C +:105450000AD39D4208D2002C09D0844204D3601A9A +:10546000904201D39C4202D310201DB0F0BD2846CB +:10547000204318D01F270CAB01AA009728461A9981 +:10548000FEF701FE0028F0D10DAB02AA31462046FE +:105490000097FEF7F8FD0028E7D16846007AC107BB +:1054A00003D00A20E1E70720DFE7800705D568463B +:1054B0000079800701D50B20D7E7FFF716FF0028FA +:1054C00001D01120D1E703AF002D0FD01A2069467B +:1054D00008731A9888732946F81C1A9A0FF0DCFB97 +:1054E0000EA903A808F064FA0028BED1002C0ED043 +:1054F000202168460173867332462146F81C0FF05E +:10550000CBFB0EA903A808F053FA0028ADD19049AF +:1055100008A80968007C08700020A6E7F0B50446DA +:105520008E48002795B084426FD301208004211A51 +:105530008B488142F8D38B48844266D22378012B72 +:105540000BD1864960688842EED39904421A844997 +:105550008A42E9D383498842EFD27D490A681546D9 +:10556000C035A879022814D0032812D0052810D0FD +:1055700009280ED00A280CD00B280AD0012803D005 +:10558000002B06D0012B04D0687AC506AD0F06D1DA +:1055900001E00820F6E5850701D4400701D5112078 +:1055A000F0E5012B15D0208A6F4E0546203DB5420F +:1055B0007ED2022B01D0032B01D1A02878D3012B5E +:1055C00007D01078C00704D0608A002870D0B428B3 +:1055D0006ED8002B06D0012B08D0022B04D0032B51 +:1055E00066D110E0002512E0022510E06068012578 +:1055F000007800280BD0012808D0022806D0032804 +:1056000004D05248BEE5032501E066E00127D07BC7 +:1056100001281CD1108A002819D0907B810901290A +:1056200011D0800904D04C484A49E4300FF0D1FC35 +:105630000120FEF732FE00280BD047484549E830EC +:105640000FF0C7FC05E00120FEF7F6FDF3E7FEF7DB +:10565000EDFB207A002806D0012806D0022806D0CB +:10566000032825D105E0002604E0012602E00226F9 +:1056700000E00326002D01D0022D42D1002E40D0A3 +:10568000E068002814D00179002928D008290FD813 +:10569000027B9446082A0BD800290ED02F4A0168B5 +:1056A00091421AD3012292048B1A2D4A934200E0B0 +:1056B00084E012D32B4A91420FD26146002912D0C6 +:1056C00080682649884208D301218904421A244966 +:1056D0008A4202D32349884205D3102052E5027B37 +:1056E000002A6BD0D4E71A4800680078800702D0FF +:1056F0001648401E46E5022D03D1022E5ED0032E31 +:105700005CD0182168460170218A4180218A8180FD +:1057100085710F480068007A002801D0012870D1F7 +:105720006946C8716846077221780930012932D06C +:1057300006210FF00EFB07216846C173067409A904 +:1057400008F036F90028C9D10A210FE00232000022 +:10575000540000201C4200005F08000000600100AF +:105760000000FC1F00400020E13F0000684601707F +:1057700009A908F01DF90028B0D13A20694608703F +:1057800009A9684608F014F90028A7D1002D08D00F +:10579000022D06D04CE061680622491C0FF07CFA0D +:1057A000C9E7002E44D00026374623E00168B00048 +:1057B00009580978002903D0012904D00720E1E421 +:1057C00069468F7002E001216A469170E168062205 +:1057D0000968095800A8491C03300FF05DFA0B2036 +:1057E0006946087009A9684608F0E2F80028E6D181 +:1057F000761CF6B2E0680179B142D7D800266F4630 +:1058000012E050E08068B10041581022B81C0FF03F +:1058100043FA3B206946087009A9684608F0C8F8B1 +:105820000028CCD1761CF6B2E068017BB142E9D801 +:105830001B20694608700120887009A9684608F095 +:10584000B7F80028BBD108A840791B282BD1002D20 +:105850000AD0012D04D0022D08D0032D18D105E067 +:105860000320FEF723FB26E003200FE0FE4800683C +:10587000C030807903000FF09DFC0916061616183B +:1058800016081A1C1600022000E00920FEF70EFB85 +:10589000608A00280FD000228300114610460CF0C9 +:1058A000A4F9002807D003206CE40520EEE70A20C5 +:1058B000ECE70B20EAE7002064E470B586B00C004A +:1058C00006460BD0E94884424AD301208004E849C7 +:1058D000201A884244D3E748844241D2E24D2868E6 +:1058E000C030C179022902D0407A400702D5112088 +:1058F00006B016E5002C04D02046FEF798FB0028E1 +:10590000F6D13046FEF75EFB012803D0022823D0F3 +:10591000D948EDE721001BD1082069468882286814 +:1059200001ABC08805AA002103F019F90028DFD1D6 +:105930006846808A082801D00320D9E76846818814 +:105940008181C188C181018901824189418203A984 +:10595000304601F074FCCBE7002C01D00620C7E7ED +:105960001020C5E770B50C460546FEF72BFB012855 +:1059700003D0022801D0C048D3E421462846FEF7D0 +:105980001FFCCEE400B50146143095B0192801D2B1 +:10599000880707D008461E3004D00A3002D00720FE +:1059A00015B000BDFFF7A1FC002801D01120F7E7DA +:1059B000AD4831220068417068460270817009A9C3 +:1059C00007F0F6FFECE701B582B0022069460880D7 +:1059D000A54802AB00686A468088002102F02AFFD1 +:1059E00069460988022900D003200EBD38B502217E +:1059F0006A4611800721490701224118920391420A +:105A000001D3102038BD9849034609686A468C883E +:105A10000021204603F0A3F8694609880229F1D045 +:105A2000032038BD3EB504460820694608808F48EB +:105A3000844208D3012080048D49201A884202D371 +:105A40008C48844201D310203EBD2046FEF7EFFA79 +:105A50000028F9D12088694688806088C880A0889D +:105A60000881E0884881804801AB00686A46C088A8 +:105A7000002102F0DFFE694609880829E4D00320EE +:105A80003EBD1FB504460820694688817748844298 +:105A900008D3012080047649201A884202D3754831 +:105AA000844202D3102004B010BD6F486B460068DA +:105AB00003AAC088002103F052F80028F3D16946F8 +:105AC0008989082901D00320EDE7694609882180EA +:105AD00069464988618069468988A1806946C98884 +:105AE000E180E0E7FEB50546604817460E46814274 +:105AF00008D3012189045E4A731A934202D35D4B95 +:105B00009E4201D31020FEBD1F2F01D90C20FEBDE7 +:105B1000554C85422AD3681A904227D39D4225D2FC +:105B2000206801A9408802F037FE0028EFD12878CC +:105B300069464871206801A9408802F010FE0028DB +:105B4000E5D169460090087802210843694608704B +:105B50004979090703D0082108436946087020687D +:105B60006946408802F0A5FD0028D0D169460F8122 +:105B700020683346408802AA002102F05BFE694695 +:105B80000989B942C3D00320FEBD38B50C460721B0 +:105B9000012249079203002802D04318934202D2FF +:105BA0006118914201D3102038BD21886A461180C6 +:105BB000002801D000290BD02B49034609684D88E5 +:105BC0000021284602F0CBFF69460988218038BDB4 +:105BD0000C2038BD30B50C46244987B08C4208D320 +:105BE00001218904224A611A914202D321498C423F +:105BF00002D3102007B030BD1B4D2968C0310A7A8E +:105C0000520708D48979491F0B000FF0D3FA050415 +:105C10000604040604000820ECE7FEF7D3F9012887 +:105C200003D0022839D01448E4E720881E2801D286 +:105C30000720DFE72868C030807906282BD00A20AB +:105C4000FEF734F90520694608700879A1788008C4 +:105C5000C9078000C90F084369460871FB21084045 +:105C6000A1788907C90F09E05400002000600100F5 +:105C70000000FC1F004000200230000089000843A3 +:105C8000694608712088C880684609F09EFE002891 +:105C9000B0D00320AEE70720D2E70620AAE7F0B590 +:105CA00087B014460D46FEF78DF9012804D002286E +:105CB00002D0FE4807B0F0BDFD4B18680146C03168 +:105CC0000A7AD20707D08A79042A04D0052A02D09A +:105CD000002D02D052E00820ECE7F64A944208D3A7 +:105CE00001229204F44BA21A9A4202D3F34A94423C +:105CF00001D31020DEE7A278D206520F042A0CD876 +:105D0000E378072B09D3102B07D822799A4204D3C2 +:105D1000102A02D822881E2A01D00720CAE702468C +:105D20008032966BF727F372966B23793373966BF9 +:105D3000737A3B40A778BF06FF0FFF003B437372A7 +:105D4000966B2388F381966BA778B37AFF079B083D +:105D50009B00FF0F3B43B372FB273B40A778966B3A +:105D6000BF07FF0FBF003B43B372926BA478537A17 +:105D7000E406DB08DB00640F234353720B226B46FF +:105D80001A70852D22D008DC002D17D0812D17D058 +:105D9000822D17D0832D08D116E0862D18D0882D9E +:105DA00018D0892D18D08A2D18D00B221A71B6223E +:105DB000125CBF4C002A13D0A83012E00022F5E795 +:105DC0000122F3E70222F1E70322EFE70522EDE7E4 +:105DD0000622EBE70822E9E70922E7E70A22E5E7DE +:105DE00000200290887907280BD0082809D00920C4 +:105DF000FEF75CF8684609F0E8FD002803D00320B0 +:105E000058E70620F4E720680422C030017A4908E8 +:105E100049001143017200204CE770B5A44E0D46B5 +:105E2000316886B0C031097A1446090701D40820C8 +:105E30005EE5FEF7C7F8012803D0022801D09B4891 +:105E400056E5002D12D09B48844208D301208004DF +:105E50009949201A884202D39848844201D31020DD +:105E600046E5012D0BD0022D02D106E0002C01D019 +:105E700007203DE50020029005E0022000E001201F +:105E8000694608710294032069460870684609F063 +:105E90009CFD002801D003202AE53068F722C0309D +:105EA000017A11400172002022E570B594B01446C9 +:105EB0000E46FEF787F8012804D0022802D07B485E +:105EC00014B059E57A4D2868C030007A800701D4B3 +:105ED0000820F5E7002C01D00720F1E7FFF705FACD +:105EE000002801D01120EBE7002E1DD02D2168469F +:105EF00001702C68BC20015B684641801022B11CF7 +:105F000001A80EF0C9FE207EFB210840B17CC90724 +:105F1000490F08432076B07CFF214008A075608AB5 +:105F200082310843608207E02E21684601702868AC +:105F3000A030818B6846418009A9684607F038FD8A +:105F40002968FD23C0310A7A1A400A72B8E710B5F1 +:105F50000C46FEF737F8012803D0022801D0534839 +:105F600010BD5448844208D3012080045249201AAD +:105F7000884202D35148844201D3102010BD2046EC +:105F8000FEF72FF8002010BD10B594B00446FEF7C0 +:105F900019F8012804D0022802D0444814B010BDDA +:105FA00043480068C0308179042910D005290ED0FB +:105FB0003820694608704C8001200871487109A991 +:105FC000684607F0F5FC0028E8D00B20E6E7002043 +:105FD000E4E710B594B00446FDF7F4FF012803D0C0 +:105FE000022801D03148D9E731480068C0308179B2 +:105FF00004290DD005290BD03820694608704C8043 +:1060000000200871487109A9684607F0D1FCC5E76E +:106010000020C3E726480068C0308079062801D3F5 +:10602000012070470020704708B51346002806D0AD +:1060300023A00068009048796A468009105C1870B7 +:106040000622581C0EF028FE08BD10B50446FDF7C8 +:106050007AF9A22101700ECC08300EC0FDF78FF93D +:1060600010BD70B5124C054601682068002913D098 +:10607000104A914208D3012292040F4B8A1A9A4285 +:1060800002D30E4A914201D3102075E410227730DA +:106090000EF002FE206801218030806B01722068C2 +:1060A000A9880182C17B012919D10BE002300000CF +:1060B00054000020006001000000FC1F0040002090 +:1060C0000302FF01807B800901280AD00120FEF72E +:1060D000E4F8002803D01A491A480EF07AFF00208D +:1060E0004AE40120FEF7A8F8F3E770B5054600681A +:1060F000154C00281ED007214907401801218903AB +:10610000884201D3102037E42068B8210958097A61 +:10611000012909D00146773129300AF08EFF206825 +:1061200001218030806B017221681022286877314C +:106130000EF0B2FD2068008AA88000201CE4000058 +:106140001C420000FD02000054000020FFB581B099 +:1061500001980E46C078174610360E37022809D02F +:10616000032840D005287DD0F2A1F7480EF031FF7A +:1061700005B0F0BDCC890A2060430E301880312371 +:106180000A98002A0380F3D0486800889080002095 +:10619000D0801081097B9481891FCDB21AE03088AC +:1061A0007168388048780A7800021043F880C8780F +:1061B0008A78000210433881BA1C091D28460BF06A +:1061C0008AF8002D01D0002802D000203871788094 +:1061D00008360A372046641EA4B20028DFD1019990 +:1061E0000020C870C4E7CC890A2060430E301880B4 +:1061F00032230A98002A0380BAD048680025008814 +:106200009080D5801581087B401FC0B2009094819A +:1062100042E0716832880878FA803A79C3075208F8 +:106220005200DB0F1A43FD231A408307DB0F5B008C +:106230001A43FB231A404307DB0F9B001A43F72343 +:106240001A400307DB0FDB001A43EF231A40C30693 +:10625000DB0F1B011A43DF231A408306DB0F5B01B0 +:106260001A4300E020E0BF231A404306DB0F9B01E6 +:106270001A433A71C00978718A784B781002184332 +:1062800038813A46C91C00980BF025F8002801D047 +:10629000BD703D8008360A372046641EA4B200282F +:1062A000B7D10198C57063E7087BCC89801E85B2A1 +:1062B0002846083060431030188034230A98002A9A +:1062C00003808FD048681746008890800020D080D7 +:1062D000108194811037E000D581C0190CE030881E +:1062E0003880009878602A46716800980EF0D4FCD7 +:1062F000009808360837401900902046641EA4B262 +:106300000028ECD16BE7FFB50546C07881B00C469C +:106310000A9E03000EF04EFF0BA3071733414F6D8B +:106320008F9D9D9DA300207B1746082806D003283B +:1063300004D085487FA154300EF04BFE04990E2006 +:10634000088030200CE0207B1746042804D07E48CB +:1063500078A171300EF03DFE04990E2008803120A6 +:106360003080002F44D060680088B880607AFF30A9 +:106370000130F880E08938810020B88137E0207B47 +:106380001746042804D070486AA18D300EF021FE13 +:1063900004990E2008803220E2E7207B174602286D +:1063A00004D0694863A1A9300EF013FE04990E20B1 +:1063B00008803320D4E7207B1746042804D06248A5 +:1063C0005CA1C4300EF005FE049810210180342039 +:1063D0003080002F0CD060680088B880607AFF3071 +:1063E0000130F880E08938810020B881F881E870B8 +:1063F000BEE6207B1746052806D0062804D0524862 +:106400004CA1E1300EF0E5FD049812210180352009 +:106410003080002FECD060680088B880607AFF3050 +:106420000130F880E0893881E089B8810020388225 +:10643000A988F981DBE7207B1746072804D042486A +:106440003CA1F8300EF0C5FD04990E2008803620DE +:1064500086E700962846049B00F02DFD88E635A1CE +:106460003A480EF0B6FD83E670B5054600780C4656 +:10647000082603000EF09EFE124C3434241C380A09 +:106480000A0A0A0A0A0A0A0A0A0A0A4C687800284A +:1064900004D02E4827A12C300EF09BFD002C03D1F8 +:1064A0001F2024A1400108E060783043607020E0A4 +:1064B000002CF9D17D201FA1C0000EF08AFDF3E76A +:1064C000002904D03F201BA100010EF082FDFCF743 +:1064D0003AFF0446407830436070FCF750FF08E014 +:1064E0001A4814A1473002E0184812A14C300EF0AF +:1064F00070FD002C0AD06078000707D5932020702B +:106500002046582229460830FAF75EFE002070BD6A +:106510000E4808A15030EAE710B500200C4C0D4998 +:106520000346C2008C525218401C0006D370000E65 +:10653000F7D010BD7372635C67617474635F636FDF +:1065400072652E63000000005A020000B3030000D1 +:10655000FFFF000058000020FE49088001208870DD +:1065600000207047FB4900208870704710B500215B +:10657000F848C94301800021C17007F053FAD8E7F9 +:10658000F7B584B0054600276846078187806868AC +:106590000C46008800F0ECFB0646287A032805D05C +:1065A000002E03D1EC49ED480EF013FD297A204668 +:1065B000C91E123000900B000EF0FCFD0FF2F1F03E +:1065C0003D09AA465C6D34B3CDF38B8BF000F078B7 +:1065D000012803D0E049AD200EF0FBFCA8896946F4 +:1065E000C0000E30888030200881002C22D06868DE +:1065F0000188A180E7802781A989A18100200DE081 +:10660000C100B27909190A74B288CA81820052198C +:10661000D3894B82128A401C8A8280B2A18981422E +:10662000EED8D7E002A8009001AB224629463046BA +:1066300000F0CCFBF1E002A8009001AB2246294615 +:10664000304600F005FCE8E0F07806281AD0FF207C +:10665000C149223014E068680188A180E780278161 +:10666000A989A181B188E181E9892182EA89296921 +:1066700000982BE0F078062804D0FF20B6493C3083 +:106680000EF0A7FCE8896946123088803520088121 +:10669000002CE0D1C1E0F078072804D0FF20AE49FB +:1066A00056300EF096FCA88969460E308880362058 +:1066B0000881002CBED068680188A180E78027810E +:1066C000A989A1812046AA890E3029690EF0E4FA31 +:1066D00080E0E8896946123080B2382288800A81D9 +:1066E000002C79D068680188A180E7802781A9897A +:1066F000A181287A102809D00221A173E989218279 +:10670000EA89296900980EF0C7FA86E00121F4E7CA +:1067100002A8009001AB224629463046FFF716FD3D +:106720007BE0F078082803D08B498D480EF051FCAF +:1067300014206946888037200881002C6DD0686855 +:106740000188A180E7802781A989A18167822782AA +:106750000120A0733EE0F078092804D080487E49EB +:1067600018300EF036FC288A6946143088803720AD +:106770000881002C51D068680188A180E78004213D +:106780002781A173A989A181E9892182298A61824E +:1067900020462A8A1430696998E702E038E01CE054 +:1067A00024E0F0780A2804D06D486B4933300EF0AD +:1067B00010FC14206946888037200881002C2CD0DA +:1067C00068680188A180E78027810521A173A781DE +:1067D00027826782F77020E017E002A8009001ABE3 +:1067E000224629463046FFF78EFD16E00D20694609 +:1067F000392288800A81002C07D00120E08055488A +:106800000188A1802781277307E00699088010E09E +:106810008F205149C0000EF0DCFB68460699808845 +:106820000880002C05D06846008920806846808852 +:106830006080002007B0F0BDF7B594B015460F4654 +:10684000149800F0A0FA04000AD0032000F088FB9E +:10685000022802D2E078002804D0112017B0F0BD41 +:106860004048FBE71720694601260883002D0FD01A +:106870000321684601711021018210A8024605908B +:1068800004A928460AF04DFD00280DD00720E5E7B1 +:1068900008216846017100210781C9434181052112 +:1068A0008673C90281810CE0A878A0712888A08035 +:1068B000684605218673C902818100210781C94389 +:1068C000418109AA023206A901A807F0E4F80028CC +:1068D00002D000F06BFAC1E707A800906846038B6E +:1068E00004220321149800F051FB0028B6D1E67071 +:1068F000B4E770B592B00D0006460ED000F043FA32 +:1069000004000CD0032000F02BFB022802D2E07818 +:10691000002806D0112012B070BD1020FBE71148EE +:10692000F9E7172168468180042101722988818155 +:106930006988C181012181740B4901820AAA02324E +:1069400001A902A807F0A7F800280FD000F02EFA3E +:10695000E1E7000058000020346500003C0400001E +:1069600063020000023000000228000008A8009026 +:106970006846838804220321304600F007FB002884 +:10698000C9D10221E170C6E770B592B00D0006468C +:106990000DD000F0F8F904000BD0032000F0E0FA6D +:1069A000022802D2E078002805D01120B3E7102099 +:1069B000B1E7FA48AFE717216846818004210172E8 +:1069C000298881816988C18101218174F44901820A +:1069D0000AAA023201A902A807F05DF8002802D035 +:1069E00000F0E4F997E708A800906846838804223D +:1069F0000321304600F0CAFA00288CD10321E1704F +:106A000089E770B592B00D0006460DD000F0BBF9D5 +:106A100004000BD0032000F0A3FA022802D2E07891 +:106A2000002805D0112076E7102074E7DB4872E7D4 +:106A3000022168460172298881816988C1811721F4 +:106A400081800AAA023201A902A807F024F80028CE +:106A500002D000F0ABF95EE708A800906846838892 +:106A600004220321304600F091FA0028DBD10421F2 +:106A7000E17050E7F0B591B015000E4607460ED014 +:106A800000F081F904000CD0032000F069FA02281C +:106A900002D2E078002806D0112011B0F0BD1020FD +:106AA000FBE7BE48F9E7172168468180042101729F +:106AB000298881816988C181B17881743188018296 +:106AC0000AAA023201A902A806F0E5FF002802D0B6 +:106AD00000F06CF9E1E708A800906846838804227A +:106AE0000321384600F052FA0028D6D10521E17082 +:106AF000D3E7F7B592B015460E46129800F043F969 +:106B000004000AD0032000F02BFA022802D2E07819 +:106B1000002804D0112015B0F0BDA048FBE70627DF +:106B2000002D12D0684607728681C581A580172086 +:106B3000694688800AAA023201A902A806F0ABFFC2 +:106B4000002807D000F032F9E5E705216846017218 +:106B50008681EBE708A80090684683880422032119 +:106B6000129800F013FA0028D5D1E770D3E7F7B5F3 +:106B700092B016460D000ED0129800F004F90400F1 +:106B80000BD0032000F0ECF9022802D2E0780028B4 +:106B900005D01120BFE71020BDE78048BBE70727DD +:106BA0006846077286811721049581800AAA0232FD +:106BB00001A902A806F06FFF002802D000F0F6F845 +:106BC000A9E708A800906846838804220321129848 +:106BD00000F0DCF900289ED1E7709CE7F3B51720A0 +:106BE00091B00C46002915D021780B000EF0E2FA86 +:106BF000062B05051A041C2B1520C01EE28880B246 +:106C0000002A02D0A368002B04D0824204D90C20B1 +:106C100013B0F0BD1020FBE7042905D0A0880028A0 +:106C200011D101E00620F3E7119800F0ACF805005F +:106C30000BD02078092701281AD0022807D0042871 +:106C400024D0052835D00720E2E75448E0E768461D +:106C5000077161880181E1884181A068082603905D +:106C6000304600F07DF9072829D34C48801CCFE737 +:106C70000C216846017161880181E1884181A06829 +:106C800003900EE0E878002811D118E00D21684645 +:106C9000017161880181A1884181E1888181A068B9 +:106CA00004900326304600F05BF90228EAD3112055 +:106CB000AEE70E2168460171217B0172F1E71721D1 +:106CC0006846018309AA023206A901A806F0E3FE7C +:106CD000002802D000F06AF89AE707A800906846FA +:106CE000038B04223146119800F050F900288FD10F +:106CF0002178012907D002298AD0042905D0052945 +:106D000005D0032084E7082102E0EF7080E70A2124 +:106D1000E9707DE730B591B00C46054600F033F8D8 +:106D2000002808D0032000F01BF9022805D31B48D7 +:106D3000801C11B030BD1948FBE70F216846017176 +:106D400004811721018309AA023206A901A806F0CD +:106D5000A2FE002802D000F029F8EAE707A8009078 +:106D60006846038B04220321284600F00FF9E0E770 +:106D70000C49884205D00C490988814201D10A4852 +:106D800070470020704710B5FFF7F2FF002802D0CF +:106D90008178C90700D1002010BD0000023000003A +:106DA00003280000FFFF000058000020002806D044 +:106DB000012805D0052805D0062805D003207047F6 +:106DC00011207047082070475C487047FFB583B0BA +:106DD00003980C9EC0781D4614460F46012803D028 +:106DE0005749D2200EF0F5F8F889C0000E302880FF +:106DF00030203080387B001FC0B20190002C26D09C +:106E000078680088A0800020E0802081F889A08137 +:106E1000002616E0F0000519C01900902A464169C5 +:106E20000E3201980AF057FA002802D00020287488 +:106E3000E8810098761C008A68820098B6B2408A81 +:106E4000A882A089B042E5D803990020C870F1E477 +:106E5000F8B50646C0781F4614460D46042804D0EF +:106E6000FF20374903300EF0B4F8A88906214843C3 +:106E70000E30388033210698002C01801AD06868C3 +:106E80000088A0800020E0802081A989A18103469C +:106E90000CE01946062251434A190919D789CF81B6 +:106EA000977C8F74128A5B1C0A829BB2A1899942DB +:106EB000EFD8F070F8BD70B514460546142204985A +:106EC0001A8037220280002C18D0486800260088DB +:106ED000A080487AFF300130E080C8892081C889CD +:106EE000A0816682E878082809D0092811D00A28EC +:106EF00019D0134913480EF06CF8EE7070BD087B82 +:106F00000C2804D00F480E490C380EF062F801200E +:106F100012E0087B0D2804D00A48094908380EF011 +:106F200058F8042008E0087B0E2804D005480449DE +:106F3000001F0EF04EF80520A073DEE703300000BE +:106F4000346500008203000001460020FA4A02E096 +:106F5000401C082803D24300D35A8B42F8D1704713 +:106F600030B50446F44A0020163A117953790AE004 +:106F70005518AD79A54201D1401CC0B2491CC9B217 +:106F8000102900D100218B42F2D130BDFFB5EA4873 +:106F900081B0163841790A9C491CCDB21E46102D8D +:106FA00000D10025E44816380079A84202D1042017 +:106FB00005B0F0BD0820FFF7D3FF0746072804D926 +:106FC000FF20DEA1A5300EF004F80298082801D1B8 +:106FD000072F17D001982080301D6080002060713D +:106FE0002071E68003982081204606F005FD0028E8 +:106FF0000AD0D148029916384379821D99544571B7 +:107000000020D5E7D248D3E7FF20CCA1B7300DF060 +:10701000E0FF0320CCE7F0B58DB0044600256846BC +:10702000057116468C460620FFF79AFF00281CD1F2 +:1070300021780127C807002801D0132917D96846ED +:1070400087766178C17602218183C58304A8009088 +:1070500070680C23008805220621FFF797FF00289F +:1070600003D0B6A185200DF0B4FF0DB0F0BDB2483D +:1070700016380278002AF8D0427863789A42F4D120 +:10708000012918D0132919D16146062916D1057096 +:10709000002101200AF04EFE6846077170680188E1 +:1070A0006846C1800021C9430181607922790102CB +:1070B000114368461AE06146062908D068460079FF +:1070C0000028D2D0314601A8FDF7AFFECDE705700C +:1070D000002101200AF02EFE6846077160792279AE +:1070E00001021143684601810021C9434181E9E75A +:1070F000914810B50021163801704A1E4280417037 +:107100000171417101200AF015FE10BD10B5FFF7A5 +:10711000EFFF0020884902464300401CCA5208285D +:10712000FAD310BD84491639488000207047DFE744 +:1071300070470EB501216846017086498180C18083 +:107140000021FDF772FE0EBDF7B505460078002759 +:1071500000090C463E46012804D0FF2077A1683084 +:107160000DF037FF287A02280CD0FF2073A17E3063 +:107170000DF02FFF0298002C068001D0278066803A +:107180000020FEBDEA89702710460A3086B2002C26 +:107190000BD068680088A080A8892081E280204602 +:1071A0000A3029690DF078FDE4E702980680E7E7E8 +:1071B000F0B543680246D9799C79090221435C7A8B +:1071C0001E7A25025C88981D3543241F87B0A14292 +:1071D0001DD11B79022B1AD1042D1AD0052D2AD0CE +:1071E000062D1AD0402D12D3061D0F4614462846F0 +:1071F000FFF7AAFE08280AD0112020700220207272 +:10720000A581E7812661607808210843607007B096 +:10721000F0BD001D00F0E1F8F9E7041D0D46FEF792 +:10722000F9FE0028F3D0062168460170019405722A +:1072300008F0CBFBEBE7001DFFF7EDFEE7E710B52D +:107240003D4C8AB0163C2278012A26D012236A4689 +:10725000937363789B1CD373082313820B88538228 +:107260004B8893828B88D382C988118301A90091AE +:107270000C2305220721FFF789FE00280BD10022ED +:10728000F023114601200AF0B0FC01202070607844 +:10729000801C607000200AB010BD1120FBE7F0B523 +:1072A000254C0027163C87B00646A51D1FE06079D7 +:1072B0002179884204D1112020A140010DF089FEDE +:1072C0002079405D042804D0082808D17F1CFFB233 +:1072D00005E0072069460870684608F076FB2079CB +:1072E000401CC0B22071102801D10020207130460E +:1072F000761EF6B20028DAD1384688E710B5044683 +:10730000402801D2072010BDFFF71EFE082802D03A +:107310003120000210BD0021074802E0491C082965 +:1073200003D24A00825A002AF8D1082914D0490011 +:107330004452002010BD0000DA1300207372635C19 +:107340006C326361705F636F72652E6300000000D2 +:1073500004300000FFFF00000420EBE700B54028E8 +:1073600001D2072000BDFFF7EFFD082805D000215E +:107370003B4A40001152084600BD052000BDF0B553 +:107380008BB016460C00074607D0002E05D061884A +:10739000402904D207200BB0F0BD1020FBE7208865 +:1073A000002801D0172801D90C20F4E70846FFF780 +:1073B000CBFD08280FD0258803A82A463146023085 +:1073C0000DF06AFC01A8009062882B46082138461F +:1073D000FFF7DCFDDFE70520DDE7F0B50E460746E9 +:1073E00001468BB014460125304606F0D1FC082832 +:1073F0001DD10020694608850120FFF7B1FD002856 +:1074000002D117206946088503AB02330AAA394620 +:107410003046009407F0CFF800280AD0022819D08F +:10742000032804D0FF200F4902300DF0D2FD28467A +:10743000B1E76846038D002BF9D001A80090606881 +:10744000042200880121FFF7A1FD0028EFD00549A3 +:10745000EC20EAE760780025102108436070E6E739 +:10746000DA1300203C730000002803D08178012942 +:1074700039D101E0102070470188FA4A881A9142F8 +:1074800033D01BDCF84A881A91422ED00BDC00293D +:107490002BD00320C002081A27D0012825D00121B3 +:1074A0000903401A07E001281FD002281DD0FF2839 +:1074B0001BD0FF380138002815D116E0FF22013219 +:1074C000811A904211D008DC01280ED002280CD07D +:1074D000FE280AD0FF2806D107E0012905D002299D +:1074E00003D0032901D0002070470F20704700B55A +:1074F0000A2821D008DC03000DF05CFE0A1C2024C1 +:10750000241A24282224261A102819D008DC0B2833 +:1075100016D00C2814D00D281AD00F2808D111E04D +:1075200011280FD0822807D084280DD085280DD0AF +:10753000032000BD002000BD052000BDCB4800BDDC +:10754000072000BD0F2000BD042000BD062000BDA7 +:107550000C2000BD70B500290BD0CB1FFA3B812455 +:107560001E46CDB2112B1BD2012805D0022806D011 +:1075700009E0002010701DE0FF20043001E0FF2032 +:107580000330814218D033000DF014FE111613138E +:1075900016131616131616161313131316131600B6 +:1075A0000846FF3881381F2803D9FF39FE390229E0 +:1075B00002D81570002070BD1470072070BD00B592 +:1075C00003000DF0F7FD060406040C080A0C002069 +:1075D00000BD112000BD072000BD082000BD032014 +:1075E00000BD00780207120F04D0012A05D0022A3C +:1075F0000AD10EE0000907D108E00009012805D0F2 +:10760000022803D0032801D007207047087000200B +:10761000704706207047002807D0012807D00228AD +:1076200007D0032807D007207047002004E011206E +:1076300002E0212000E0312008700020704738B5BA +:107640000C4605004FD06946FFF7CBFF002822D13A +:107650002088032189028843694609788907090D32 +:10766000084320806946681CFFF7BBFF002812D141 +:107670002188032000038143684600788007800C3E +:1076800001432180A8784007820F2020012A03D0DF +:10769000022A03D0072038BD814300E00143218046 +:1076A00088B20105890F08D0012189038843A97890 +:1076B0000907C90F89030843208080B28104890F1C +:1076C0000AD0A9784004C906C90F400CC903084371 +:1076D00020808004800F02D12088400403D52088B8 +:1076E000402108432080002038BD70B504460020AA +:1076F000088015466068FFF7A2FF002815D1218990 +:10770000A089814210D86168594E8978C90707D08D +:10771000711E884208D831460DF038FB298009E0F7 +:10772000FF21FF31884201D90C2070BDFF30FF30AE +:107730000330288060688078C007A08903D0314674 +:107740000DF024FB03E0FF30FF30033081B22980CD +:1077500020688178474801732068464900882039AD +:107760004885002070BD10B5137804785B08E407E5 +:107770005B00E40F23431370FD2423400478A40727 +:10778000E40F640023431370FB2423400478640750 +:10779000E40FA40023431370F72423400478240744 +:1077A000E40FE40023431370EF2423400478E4063D +:1077B000E40F240123431370DF2423400478A4063C +:1077C000E40F6401234313700078BF244006C00F08 +:1077D0002340800103431370002906D00878C107B5 +:1077E00001D1800701D5012000E00020C001590629 +:1077F000490E0843107010BD30B50A8803239B0260 +:1078000004889A4323059D0F02D1A3049C0F01D045 +:107810009B0F00E001239B021A4303230A801B03F2 +:107820009A4303889804840F02D11805830F01D06E +:10783000800F00E00120000302430A8030BDF3B551 +:1078400091B00D0018D01198002818D012212846A8 +:107850000DF07FFA01A9012007F0A9FE00242646B9 +:10786000374677E0022900000128000003300000BD +:10787000010200000C140020102013B0F0BD0720FE +:10788000FBE76846007C01280BD16846C1890520CA +:10789000C002081A0AD001280AD002280CD00328F6 +:1078A0000CD0042C0ED0052C0FD10DE0012400E0EB +:1078B00002246846868908E0032406E0684604241A +:1078C000878902E0052400E0062468468189119832 +:1078D00081423FD12C74002E3AD00BA800900CAB03 +:1078E00010220021304607F0F4FE002820D168461F +:1078F000808D2A46C0B20CA909F0EDFC002817D1F2 +:10790000AE81002F24D00BA8009006AB13220021DB +:10791000384607F0DEFE00280AD16846808D06A9A9 +:10792000C01E0331C0B22A1D09F0D5FC002801D0C9 +:107930000320A2E76846817E427E08021043E88168 +:10794000062C05D16846007CA8726846C08928814B +:10795000002092E701A807F032FE002891D0FFF73F +:10796000C6FD8AE7002804D0012903D0022904D0EB +:1079700003207047F949C98D02E0F8494031C988B0 +:10798000814201D1002070470720704730B5F34C89 +:107990000025608B91B0C00B2ED1216900292BD01E +:1079A000207B800728D401226846027102720022DF +:1079B0004272228B8281A28A8282049117210183E2 +:1079C00009AA0023023206A901A807F0A7F9002896 +:1079D00003D0FFF7F4FD11B030BD207B0221084336 +:1079E000207307A8009069460B8B20880422012190 +:1079F000FFF7CCFA05460BE0FBF7A5FC84210170EC +:107A00000921017218341ECC0C301EC0FBF7B7FCE4 +:107A10002846E0E710B5D14C034621690020002933 +:107A200009D02146012210311846FBF76BFE0020D9 +:107A30002061A0820120217BF9221140217310BD19 +:107A400070B50C4605461C2120460DF082F9002039 +:107A50002080002D08D0012D04D0C1A1C5480DF013 +:107A6000B8FA70BD062000E00520A07070BD10B50A +:107A700007F07CFB10BDFEB50546007800260C46DD +:107A8000374603000DF096FB0C91070C1D962F4610 +:107A90002F46486C899168680A38FBF793FD89E0A6 +:107AA000002904D0B348AEA11B300DF092FAFBF7C9 +:107AB0004AFC04464078082108436070FBF75FFCED +:107AC00078E0002C04D1BB20A5A180000DF081FA44 +:107AD000284601F0B1FA00286CD0607808210843EC +:107AE0006070022666E0E888694608800190002CF4 +:107AF00004D1A0489AA12F300DF06BFA28780728FE +:107B00001CD10198C00B19D0944800218171A9881B +:107B1000818012E003264DE0002C04D1C52090A105 +:107B200080000DF056FA8D48017B89070BD500695E +:107B3000002802D0E888C00B3CD0022660780821DB +:107B40000843607036E0291D8EC918308EC0283871 +:107B50000188022601222046FBF7B6FD0127EDE74A +:107B6000002C04D183487EA164300DF032FA7B48AA +:107B70000821007B4007C00F460060780843607012 +:107B8000002E17D12879012802D16879002811D058 +:107B90002046FFF73FFF07460CE0002CCED10D201A +:107BA0006FA180010DF015FAC8E772486CA17A3018 +:107BB0000DF00FFA002C0CD06078000709D5002FCB +:107BC00007D1842020702046582229460830F9F732 +:107BD000FBFA3046FEBDF7B5027A88B00C46054682 +:107BE00020460C300490069216300027921E029018 +:107BF0003E460A31594813000DF0DCFA0ADF06E66A +:107C00002AE62AE66A98C6E64288002A02D0522767 +:107C10000726DDE051271E26002C7DD06A684F48DC +:107C20001288A2800122A2718079C0004019C08907 +:107C3000FFF705FE002877D148488179C900491926 +:107C4000C98921818079C0004019408AA083BFE0A2 +:107C5000688A00900698072817D1E889C00B14D0CD +:107C600000985127223086B2002C55D0A88904995B +:107C7000FFF7E5FD002857D168680088A080022042 +:107C8000A071A8892081012041E000985027203070 +:107C900086B2002C40D0A889FFF7D1FD002843D13F +:107CA00068680088A080A889E080287A07280AD020 +:107CB00002202072288AA0830098E0832046696908 +:107CC0002030009A01E00120F3E70CF0E5FF7FE0AF +:107CD000698A00910169002902D0E989C90B22D083 +:107CE0000099512722318EB200218171A9898180AA +:107CF000002C5FD00088A080A8890499FFF79FFD21 +:107D0000002811D10220A071A88920810420A0722E +:107D1000288AE083009801E04CE005E0208469694E +:107D2000009A0298D1E703200BB0F0BD007B40071A +:107D300002D55127222601E050272026002C39D0D9 +:107D40006868502F0088A08016D00220A0712146BC +:107D5000287B0831FFF774FE3AE00000EC130020A6 +:107D60007372635C67617474735F636F72652E63B3 +:107D700000000000CB020000287BA11DFFF760FE81 +:107D80000020FFF747FE23E0A9890089884207D138 +:107D900054270626002C0DD068680088A08017E0C4 +:107DA00053270826002C05D068680088A080A88981 +:107DB000E0800DE00A98068010E055270726002C89 +:107DC000F8D00020A07103E0FD49FE480DF001F954 +:107DD0000A98002C068001D0278066800020A3E747 +:107DE000F94800210172203801814181418081716F +:107DF0008180027BF923520852001A40027301610C +:107E00008182704770B5F04C86B0203C2080002005 +:107E10006080A071A0806946012007F0C8FB102691 +:107E200008E00199088802461207D20FB0431201F8 +:107E300010430880684607F0C2FB0500F1D02069B6 +:107E4000002804D0DF48DE4933300DF0C2F8207B33 +:107E5000800704D5DB48DA4934300DF0BAF8822DBA +:107E600004D02846FFF743FB06B070BD0020FBE7B7 +:107E7000D54810B52038017B012211430173002140 +:107E800041808171818006F045FB10BD10B5CE4C5C +:107E90000020C043203C20800020FFF7BBFD207B5A +:107EA00040084000207310BD70B5C74D0446203D0A +:107EB000287B800704D5C348C1494B300DF089F8B1 +:107EC000287BC00706D12888C049884202D028698B +:107ED000002801D0082070BD002C08D0A0881628EA +:107EE00001D2092070BD20682861A088A882FFF710 +:107EF0004DFD70BD10B50C4607F02DFB002804D0D9 +:107F0000C520AF49C0000DF064F82046FFF7EFFA36 +:107F100010BDF0B5AC4D0446203591B0002008905E +:107F200068820E462882E8812946E8804039088622 +:107F3000694608830885088688838882A2480E904F +:107F4000007A1746012808D0022806D0032804D05A +:107F5000042802D0082011B0F0BD9D48844269D3A6 +:107F600001239B049B49E21A8A4263D39A4A9442B2 +:107F700060D286425ED31001331A0846834259D339 +:107F80001046864256D26068002815D09049884233 +:107F900050D31101421A8F498A424BD38E498842ED +:107FA00048D260892189884203D801225202914235 +:107FB00001D90C20CFE7089010AA0CA93046FFF792 +:107FC00094FB0028C7D106A92069FFF738FB0028D9 +:107FD000C1D1206900280CD060788007002868464D +:107FE000008B03DA8004800F75D002E08004800FDC +:107FF00071D16846008B81061ED58004800F6068B1 +:1080000009D0002818D00721490740180121890309 +:1080100088420FD201E000280ED06D496068884286 +:1080200008D301218904421A6A498A4202D36A4963 +:10803000884201D310208EE705A96069FFF7FFFA97 +:10804000002888D16069002808D06846808A010528 +:10805000890F01293FD18004800F3CD007A9A06976 +:10806000FFF7EDFA0028A5D16846808A800632D451 +:108070006846808B81062ED4A169002906D00105AF +:10808000890F012927D18004800F24D0E0680028BF +:1080900004D0007800281ED01C281CD24A4A611C3B +:1080A000123220460992FFF75EFB0321002089026D +:1080B000884301218902411868460D9101850121FB +:1080C000817446490182404A0FA91532306809F08F +:1080D00028F9002801D007203DE708A8007F3A4989 +:1080E000C01CC2B26A7100201031FF3200900190B2 +:1080F000FF3203460291039003320AA904A807F055 +:10810000C5F9002827D130482038008E0B902E4822 +:108110003389383032690146123902910093019255 +:10812000039010A90A8873890CA9306807F0AEF98A +:1081300001007CD12448E98811308170090AC1709E +:108140000026009631386A79008E3146099B07F087 +:108150001CF9002802D0FFF7CAF9FCE60E98807CD3 +:10816000C00928D068460D99018501218174292113 +:1081700009020182AE81287B61784008C90740006E +:10818000C90F08432873FD2108406178022289073E +:10819000C90F4900084328730B4900922A31881CF3 +:1081A00002910190002303960D4A0AA904A807F042 +:1081B0006DF901003BD1606800283DD0206911E0D5 +:1081C000607D0000220400000C140020FFFF00006E +:1081D000006001000000FC1F004000200328000098 +:1081E0000302000000280DD106A90CA8FFF704FB2C +:1081F0006078800706D46946088B03210903884309 +:1082000069460883012069468874FD4808822089F0 +:10821000FC490CF0BBFD6268089BFB48019200938F +:1082200002900A460396002306A904A800E081E014 +:1082300007F02CF901007DD12078C10601D4800619 +:108240002ED568460684606900280DD105A90CA8C2 +:10825000FFF7D2FA6846818A032080028143012019 +:1082600080020918684681826946888A4821084345 +:108270006946888201208874E14808AA401C088267 +:10828000E1490192891C0220DE4A029100900023FC +:108290000396921C05A904A807F0F8F8010063D121 +:1082A0002078C0072ED068460684A06900280DD12A +:1082B00007A90CA8FFF7A0FA6846818B032080026B +:1082C0008143012080020918684681836846818BBA +:1082D000402001436846818301218174C84908AA6E +:1082E000891C0182C8480192001D0221C54A0091E3 +:1082F000029000230396921C07A904A807F0C6F871 +:10830000010031D1E068002832D068460D9901851E +:1083100001218174BA49C91C0182E16808A80A7860 +:10832000027049784170E068418868464184E0689D +:10833000017900E018E008A80171E0680722C1880F +:1083400008A84171090A8171AF4808A9801D0092EF +:1083500001910290412200230396D2000AA904A8A9 +:1083600007F094F8010003D00B98FFF7C3FDF2E586 +:1083700003210E98002F017207D0E8883880E88921 +:108380007880288AB880688AF8800020E3E5F0B514 +:1083900001248BB016460F46012802D002281BD1BB +:1083A00004E0684605218474C90202E068469749E2 +:1083B00084740182002F11D0032100208902884398 +:1083C0000121890241186846018506AA05A9384697 +:1083D00008F0A7FF002803D00720A5E41020A3E49D +:1083E000894DB8782E3D287338882F46203F7885F0 +:1083F0006A46127D0020294606AB00920E31019399 +:10840000FF32029103900346FF3203320AA904A807 +:1084100007F03CF8002802D0FFF769F884E4002E4A +:1084200001D0F88D30802C7200207DE470B592B0C0 +:108430000446012508A8857075496846018406F040 +:108440009CFF002208A90120FFF7A1FF064606F0C5 +:1084500098FF30003AD120780024C00700283FD090 +:108460001C2168460CF077FC684601782020014307 +:108470006846017008A885706649684601841194B1 +:108480000794817FF9200140891C6846817700208C +:10849000014668460177002001466846417704217D +:1084A0008185C485018607A80A9011A80D9008A8A7 +:1084B000099006F062FF0EAA09A96846FFF729FD98 +:1084C000054606F05EFF002D02D0284612B070BDB2 +:1084D0004D486946098F4E3801816946898F41812F +:1084E00049482E3804720020F0E7F7B5464E9CB09C +:1084F00000212E3E0091317A012904D0022902D0B8 +:1085000008201FB0F0BD40494E39CA8D824201D0CB +:108510000620F6E71D98824201D10720F1E73B488B +:10852000012110AA9176401C1083002003239B0296 +:1085300002469A438B02D31810AA93846A46918408 +:108540003549D18410AA9077908317AA0A926A4677 +:1085500091850C9009A807F051F80024254627467C +:1085600004A909A807F04DF8002810D082287BD173 +:10857000002C7CD0002D7AD010A8048145810024E5 +:10858000047518A8807812AD012872D07AE0684688 +:10859000807D002F1FD0012862D16846818A1B4848 +:1085A000401C814219D114A800906846408A0EAB45 +:1085B0001022002107F08DF8002877D110A8008A3A +:1085C000042801D006285BD16846018F1D9881429E +:1085D00046D10F2095E7012842D16846808A0521BF +:1085E000C902884202D0491C884239D106484E3817 +:1085F000C18D6846408A814210D101270FE00000FA +:1086000001290000010200003A14002001280000A6 +:1086100001180000052A0000FFFF00000027002CC1 +:1086200001D0002D0DD01D99884219D114A90091B7 +:1086300004460EAB1022002107F04BF8002835D17C +:1086400001E0009D0CE010A8008A022801D010284B +:1086500016D1C0B218AA0EA908F03DFE00280FD10D +:108660006846408A00907BE720E000E001E00520BA +:1086700047E72A1D15A918A808F053FE002801D0C5 +:1086800003203EE710A8007D0023001DC2B210A801 +:1086900002751E98029019A901950394009216A8DC +:1086A00006F0F4FE002801D102213172FEF71FFF0F +:1086B00027E73EB50B46401E84B201AA00211846AA +:1086C000FFF751F806F059FE02A8009001AB012215 +:1086D0000021204606F059FE044606F052FE684688 +:1086E0000089012803D0FE49FE480CF072FC2046A8 +:1086F000FEF7FDFE3EBDF0B5FB4E0446307A89B074 +:108700000F46032804D0042802D0082009B0F0BD89 +:1087100004AA06A92046FEF7E8FF0500F6D1F248B4 +:108720002389383022690146103902910093019261 +:10873000039069460A8A638906A9206806F0A6FEA6 +:10874000002802D0FEF7D3FEE0E7002F03D0E64872 +:10875000203000893880042030722846D6E738B5AA +:108760000C00054608D00022694607F00CF80028E6 +:1087700004D0FEF7BCFE38BD102038BD6946204647 +:10878000FEF75DFF0028F8D1A0786946C207D20F36 +:10879000284607F013F8ECE73EB50C0008D002AA13 +:1087A000694606F0F0FF002804D0FEF7A0FE3EBDAB +:1087B00010203EBD032120460CF0CBFA684600880D +:1087C00001A90005800FFEF726FF00280BD168469F +:1087D000007920706846008801A98004800FFEF7A8 +:1087E0001AFF002801D003203EBD68460079607062 +:1087F000A278EF20024068460088C10B09010A43B5 +:10880000F7210A404104C90FC9000A43A270F921A7 +:108810000A40800601D5012000E0022040006946A0 +:108820000243097A50084000C907C90F0843A070E5 +:1088300000203EBDFEB51D4614460E46074606F016 +:108840009CFD01A8009022882B463146384606F050 +:108850009CFD054668468088208006F092FD2846EB +:10886000FEF745FEFEBDF0B50C46002199B0074667 +:10887000684681850D46002C11D0E068002806D09E +:10888000A06800280BD002886B469A850180A078EA +:10889000012806D0022804D0072019B0F0BD10200E +:1088A000FBE72088002807D0401E80B201A906F00F +:1088B0007EFE002842D136E08C48EEE769468A8980 +:1088C00021888A420BD26846007C002501282CD1E1 +:1088D0006846C0898649884227D1012525E08A4219 +:1088E00003D1002D2FD06D1C01E0022D02D0032DED +:1088F0001BD31FE06946097C012916D169467C4BD0 +:10890000CA895B1ED11A9A421DD005DC7948101A1B +:1089100019D0012809D116E0012914D0FF390139F5 +:1089200003D1032506E00D26B60201A806F047FE96 +:108930000028C3D0822804D0002806D0FEF7D7FD37 +:10894000ABE7022DFAD13046A7E7E068002813D044 +:1089500006F013FD0BA800906A46A1882088928D2E +:10896000E36806F012FD054606F00BFD002D19D157 +:108970006846A168808D088002980078C00601D5FD +:108980005D488AE706F0F9FC0EA8009068468089E9 +:108990000CAB0222002106F09CFE054606F0F1FC1D +:1089A000002D01D02846C9E76846008F022801D073 +:1089B000032072E7A078012808A8007C03D0800774 +:1089C0000ED4082069E7C007FBD00820FEF7C8FADC +:1089D000072802D34548401C5FE70825022001E034 +:1089E000022503206946087621886846818317217D +:1089F000818611AA002302320DA906A806F08EF97D +:108A0000002802D0FEF7DBFD47E70FA8009068467C +:108A1000838E042229463846FEF7B8FA3DE770B542 +:108A2000064615460C460846FEF71EFD00280AD1EC +:108A300006F0A3FC2A4621463046FFF7A8FC044670 +:108A400006F09FFC204670BD70B514460D460646E4 +:108A500006F093FC224629463046FFF746FD0446C1 +:108A600006F08FFC204670BD70B51E4614460D0002 +:108A70001AD0002C18D06168002915D00121FEF70A +:108A800071FF00280FD12068FEF7EEFC00280AD104 +:108A900006F073FC324621462846FFF73AFA0446B0 +:108AA00006F06FFC204670BD102070BD70B51546F5 +:108AB0000C0023D00221FEF755FF00280ED12068BC +:108AC000FEF7D2FC002809D106F057FC29462046C3 +:108AD000FFF711FE044606F054FC204670BD00006E +:108AE000607D00003E0600000C14002003300000F2 +:108AF0000328000000280000013400001020EDE7EA +:108B0000FEB507460E4607201546400701211218FC +:108B100089031C468A4219D2002C02D020188842B0 +:108B200014D2384600F045FA00280AD1002C0FD1A3 +:108B300001AA6946384606F026FE002802D0FEF754 +:108B4000D6FCFEBD68460088800601D41020FEBD1C +:108B500023462A4631463846FFF76CFEFEBDFFB578 +:108B600085B01E4614000F4609D003AA02A9059835 +:108B700006F009FE002804D0FEF7B9FCC6E5102077 +:108B8000C4E568460089C00601D5FB48BEE506F08D +:108B9000F4FB01A800900023F84A3946059806F036 +:108BA00098FD054606F0EDFB002D11D1002E0CD0EE +:108BB00006F0E3FB002000902288334639460598F2 +:108BC00006F087FD054606F0DCFB684680882080BD +:108BD0002846D1E7002906D0E94B0A885B899A42EA +:108BE00001D8E84870473EE610B586B004236C46CD +:108BF000A382E34B1C89002C07D05B898B4201D2F6 +:108C0000914204D9DF4806B010BD0620FBE76B4651 +:108C100019825A820021009101911C8002219970D1 +:108C200005A9029104A903916946FFF71CFEEAE732 +:108C3000F0B591B00D4681206946087105F09CFCA5 +:108C40000646002D08D02878CD4C012806D00228F1 +:108C500028D0072011B0F0BD1020FBE7A98801AA99 +:108C6000FEF778FC0028F5D1B00734D568460079C6 +:108C7000002820D1A879C0071DD006F07EFB002077 +:108C800000906A892989A088EB6806F07EFB694616 +:108C9000087106F076FB6946087900280BD0FEF7CC +:108CA00026FCD7E7A98801AAFEF754FC0028D1D1F9 +:108CB000342006420FD00121684601720173017908 +:108CC0004173F00609D5A18868460182A18A018313 +:108CD0002069059004E00820BCE7A0886946088266 +:108CE000FAF731FB05461720694688830AAA2B4606 +:108CF000023207A902A806F011F8074668780007B3 +:108D000001D5FAF73CFB002F03D03846FEF757FC9D +:108D1000A0E7F00603D5207B062108432073B006A8 +:108D200002D50020FEF776FE08A8009069468B8BDE +:108D3000208804220121FEF729F98BE7F0B50026EF +:108D400095B014460D4600290FD0022C4FD3A71E14 +:108D5000BAB28A480AF052FE29191039CA7B8B7BB5 +:108D600011021943884242D1BCB201A9012006F088 +:108D70001EFC7AE0029F3888010776D5002D41D08D +:108D8000A9190691CA788B78361D1102B6B219431B +:108D90008919A1422BD869468A8906994B780978A6 +:108DA0001B020B439A4222D1C00623D506F0E5FAF6 +:108DB00007A800900698AB19C17880780A02069936 +:108DC00002434878097800020843002106F0DDFAE2 +:108DD000009006F0D6FA009800283ED10698C17897 +:108DE000827808026946898B1043884202D00B20A2 +:108DF00015B0F0BD0698C17882780802104380193A +:108E000086B22EE0C0062CD5002007AA01461154D8 +:108E1000401C80B21028FAD306F0AFFA06A80090E2 +:108E20006846002380891022194606F052FC009003 +:108E3000002803D006F0A5FA00980EE00BA86946BA +:108E4000009088890A8B07AB002106F09EFA0090FB +:108E500006F097FA0098002803D0FEF748FBC7E712 +:108E600003E0388810218843388001A806F0A7FB6A +:108E7000002800D17EE7424D6988002921D00122D7 +:108E800068460276027700244477018417218185A1 +:108E90000EAA234602320BA906A805F03FFF0028C0 +:108EA00002D0FEF78CFBA3E70CA8009069468B8DDF +:108EB000288804220121FEF769F8002898D16C80E7 +:108EC00096E7002094E7F0B5002487B015460E46DB +:108ED000002A04D002A9012006F069FB41E010201D +:108EE00007B0F0BD0398007800073AD506F045FAC0 +:108EF00001A8009068460023008A204A194606F01F +:108F0000E8FB074606F03DFA002F23D1002E23D0C0 +:108F100068468088298820183719001D814239D376 +:108F20006946098A3970090A797069468988B97071 +:108F3000090AF97006F021FA01A869460090088A2A +:108F40008A883B1D002106F0C4FB074606F019FA8B +:108F5000002F01D00320C3E7684680882018001D39 +:108F600084B202A806F02BFB0028BBD082280BD0CD +:108F7000FEF7BDFAB4E7000001340000FFFF000077 +:108F8000EC13002003300000002E0ED02988A01C16 +:108F9000814201D20C20A3E72246314639480AF02B +:108FA0002DFD31190870000A4870A41C2C80002087 +:108FB00096E700B585B06946FEF741FC00280AD166 +:108FC0006846007C03000CF0F5F808052F2F2F2FC2 +:108FD00008080531032005B000BD684680780128E7 +:108FE00007D1684600880321C902401A1CD0012815 +:108FF0001AD068468079012806D1684680881521F4 +:109000004902401A05280FD96846807A012811D1F3 +:109010006846018929200002081A05D0022803D0D9 +:10902000032801D0042805D10F20D4E7164917489A +:109030000BF0CFFF0020CEE738B5154A0021518054 +:1090400003791AE0CC002418A46800946C462488A4 +:10905000250707D5E50605D5D90008182038C08BA7 +:10906000508006E0640406D59171C9000818C088D4 +:109070009080012038BD491CC9B28B42E2D8002043 +:1090800038BD0000FFFF0000607D000033020000DB +:10909000EC1300200120F8494006C861704770B504 +:1090A000F54D0024AC7028466C7020304470047478 +:1090B0006C61AC72AC6209F01AFFA86128463430CA +:1090C0000AF0B4FD002804D0FF20ECA13A300BF0E8 +:1090D00080FFEE48C46301204006E86170BD70B5B2 +:1090E0000125EB4902260E60E849CD63E949C96ACA +:1090F00009070ED4E7494031CB6AE74A53620B6B4C +:1091000093624B6BD3628B6B1363C96BD3051943AB +:109110005163D949E14CC96900282BD001282DD0D1 +:10912000FF20D6A169300BF054FFDD48A063FF207B +:10913000043060632563DB49032008602061D74960 +:10914000962040314860D948D7494163D549FC3918 +:109150000163D549091FC163D249F03981630320F6 +:10916000D249000340394860D14910204860D148B5 +:10917000066070BDD0486061D04804E0CF48E03060 +:109180006061CE48801F0143A161CEE7BA4901204A +:1091900008707047B84900200870704770477047E2 +:1091A000BE4940310028086802D00122104301E086 +:1091B000400840000860704770B50C46AE4D01464F +:1091C0000622E81C0BF068FD6C7270BDAA482030C6 +:1091D00040787047A84A91705070704770B50D463E +:1091E0000446082904D9FF20A4A1C6300BF0F1FEE3 +:1091F0000022B34809E09100635809180B6053003E +:109200001B191B8C0B62521CD2B2AA42F3D3206BE7 +:10921000AB494031086070BD0B23DB4310B5C21A67 +:109220009E4998421FD008DC1C3222D00A2A20D046 +:10923000142A1CD0182A08D117E0083011D00428AD +:109240000DD0082809D00C2805D0FF208BA1F230C2 +:109250000BF0BFFE10BD04200CE000200AE0FC2053 +:1092600008E0F82006E0F42004E0F02002E0EC2022 +:1092700000E0D820C86010BD7F482030007B7047D8 +:1092800010B5864CC17861620BF067FD0002E061A9 +:1092900010BD252808D0262808D0272808D041004E +:1092A0000A2807D8091D06E0022105E01A2103E07B +:1092B000502101E0891DC9B2784A91607749403157 +:1092C000486170476C494861704770B56A4CA0723C +:1092D00000F01FFBA07AC00740D0724D28688007BD +:1092E00003D466A177480BF074FEA07A01061DD561 +:1092F000800707D5734861A1801C0BF06AFEA07A35 +:10930000000613D52078694E012816D0002804D015 +:109310006C485AA111300BF05CFE6B487061A0697B +:109320003061FF206149013040394860A07A8007F0 +:1093300014D52868C00708D102E06348001FEDE794 +:1093400060484EA11A300BF044FEA07A400728680E +:1093500001D5042100E008210843286070BD70B5E4 +:109360000124454D002807D0012818D002281AD022 +:10937000232042A100010BE000F0CBFA52482978EB +:10938000001F012907D0002907D04E483BA15738BC +:109390000BF01FFE70BD046070BD446070BD812085 +:1093A000FFF793FF70BD00F0B4FA6869002804D19C +:1093B000444832A14F380BF00CFE6969A86A401886 +:1093C0004249C86039484249403001603E490C3149 +:1093D00041600814354940394860274820300474FA +:1093E00070BDF8B50C2069460870314C6068C00645 +:1093F000C50F1026A66034480021FC300161324BB5 +:1094000001221B1F1A610BE000BF00BF00BF00BF9D +:1094100000BF00BF00BF00BF6B461A78521E1A7013 +:109420006A461278002A02D00269002AECD0016153 +:1094300068460078002804D1912010A180000BF02C +:10944000C8FD002D00D06660F8BD0B490020C86142 +:10945000704710B50BF081FC00021049000AC86388 +:1094600010BD0B49022008607047094902200860BE +:109470001049086070470000481400207372635C54 +:1094800068616C5F7263732E63000000C01F004050 +:1094900080E100E08000001000170040001500404F +:1094A0005B060000001200404480004040F501408F +:1094B0000013004080E200E00601020025000300E6 +:1094C0000016004075020000041000404085004076 +:1094D0004C810040F74902200860CBE7F64908704C +:1094E000C8E710B5F5480AF0A9FB002803D0F449F5 +:1094F000F4480BF06EFD10BD10B5F0480AF0B6FB55 +:1095000010BDF1494860B5E7EC4910B53439EF4B6F +:109510000022C8605A60896A0818ED49486000F066 +:10952000FFF910BDE54810B5C2213438C160E74AE3 +:1095300000215160806AE649C230486000F0F0F9CD +:1095400010BD0120E34940028860DC490020343925 +:10955000C860DF4948608DE7D84900203439886207 +:1095600088E7D648DA493438806AFE30886081E777 +:10957000D749002088607DE7D748016810229143D1 +:109580000160D6490120886174E7D5490020C8618F +:10959000D14801681022114301606BE700B5FFF765 +:1095A000EBFFC64900203439087400BD00B5FFF751 +:1095B000ECFFC24901203439087400BDC849CA69AA +:1095C000012A01D0002055E7BF4A40329268520676 +:1095D000520E524202700020C86101204AE7F8B5DD +:1095E000BF4C2069012806D00021B44834380078E7 +:1095F000012802D004E04021F7E7E268012A04D004 +:1096000000220A43012802D004E02022F9E7616821 +:10961000012905D000211143B24A002802D007E0F9 +:109620001021F8E71368012B02D1E368012B04D065 +:1096300000230B43002802D007E00823F9E7116854 +:10964000002902D1E168012905D000221A439F4E6A +:10965000002802D004E00422F8E77168012904D050 +:1096600000211143002802D004E00221F9E76068DC +:10967000012829D000259C480D4301680906090EE0 +:1096800002D06169012900D000218C4F143F397349 +:1096900000680006000E02D0A069012800D000205A +:1096A00078738B488068002803D000F03DFA0128C9 +:1096B00000D00020B8730021E16021616160616128 +:1096C000A16171602846F8BD0125D4E77B480121DE +:1096D0001438C173CEE6F8B5784E0127143E307CBD +:1096E0000025002825D07C4C206800902560FFF7DD +:1096F00078FE009820607A48C56005614560456144 +:1097000085617449001488603046203801787348B8 +:1097100001290AD000290AD0D920694980000BF01C +:1097200058FCF9F775FC3574F8BD0760F9E7476038 +:10973000F7E7FFF754FF04460020F07364484268DF +:109740005E4D343D6A620068A8622978002909D11B +:10975000A978002906D05C4B5B681B780B406978C0 +:10976000994309D000213170E10707D0104602F07B +:1097700029FD0121A86A08E03770F5E7A10601D5A7 +:10978000022102E0A10702D5002102F02AFD4E4F7E +:10979000796806220931E81C0BF051FA002807D13C +:1097A000687A79680978C909884201D1012000E006 +:1097B00000207070204600F0BDF83F48C2270078B6 +:1097C000002815D0012828D002283BD003285AD0E1 +:1097D0003B4946480BF0FDFB287C002804D0287844 +:1097E000002865D0FFF7C8FE2878002861D089E0FE +:1097F000A00701D501F0CCFB200703D50120EF60C5 +:1098000001F0FEFB600703D50020EF6001F0F8FBDC +:10981000A006E1D501F068FBDEE7A00701D503F063 +:1098200026FF200703D50120EF6003F09FFE6007AD +:1098300003D50020EF6003F099FEA006CCD503F01D +:1098400020FEC9E7A00703D5BF200440F9F7D2FBEB +:10985000200705D5BF2004400120EF60F9F7C9FBC0 +:10986000600705D5BF2004400020EF60F9F7C1FB79 +:10987000A00603D5BF200440F9F7BAFB6006ABD5BC +:10988000F9F7B9FBA8E7A00701D5F9F7B7FB20075F +:1098900003D50120EF60F9F7B0FB600703D5002086 +:1098A000EF60F9F7AAFBA00696D5F9F7A5FB93E7B9 +:1098B0001EE020E000E100E0600000207C140020B9 +:1098C0007C940000AB020000001500404081004085 +:1098D0004085004000F501400012004000100040AB +:1098E00000110040001400404016004094040000A5 +:1098F000FFF74BFE78E7E868002803D0A96A09184B +:1099000028484160F07B002800D10DE7F9F780FB83 +:10991000F8BD254903200860881524498860A9E519 +:10992000224823494030C161224981611F494015C5 +:1099300048609FE570B50546FFF7EBFF1E4CA17A26 +:10994000080701D568071CD41C4AC80605D5507BFA +:10995000002802D0907B002813D0880602D510780A +:1099600000280ED1480602D55078002809D00020E2 +:109970008A070026002A07DA4A0704D50122227046 +:1099800002E00120F4E72670CA0709D0AA0705D42F +:10999000890705D5002803D0A80601D4FFF721FDCB +:1099A000A67270BD408500400012004000F50140E5 +:1099B000101000404481004048140020681400202A +:1099C0002E48002101704170704770B5064614465C +:1099D0000D460120F7F780FE28490120284B08702A +:1099E0009E60DC601D6170BDF8B504460120F7F78C +:1099F00073FE22490120087021494C60214900264C +:109A00004E600321204D8902A960204F002C0AD00E +:109A1000012C03D01EA140200BF0DBFA3E60032096 +:109A200080026860F8BD386001208002F9E710B557 +:109A30001248017800290ED00321134A890291604F +:109A400010494A680021002A03D0154A1268427062 +:109A500000E0417001700020F7F73EFE10BD07489E +:109A60000178002907D007484068002802D00C4838 +:109A70000068C0B270474078704700006100002065 +:109A800000F5004000F1004000F5014000F2004008 +:109A90007372635C68616C5F63636D2E63000000CA +:109AA00000F400403648002101704170102181709F +:109AB000704770B5064614460D460220F7F70CFEB7 +:109AC00001202F492F4A0870E41E146196605560EA +:109AD00070BD10B50220F7F7FFFD2949012008707D +:109AE000294800210160416081602849C014486014 +:109AF00010BD10B5224C2078002811D00120234938 +:109B0000C002886000F02EF80021002804D0012057 +:109B100060701F48006801E061701020A070217023 +:109B20000020F7F7D9FD10BD10B5154801780029C0 +:109B300005D000F017F8002800D0012010BD4078B3 +:109B400010BD10B50E480178002909D000F00AF8C0 +:109B5000002803D00E480068C0B210BD102010BD10 +:109B6000807810BD08480168002905D041680029A7 +:109B700002D08068002801D0002070470120704783 +:109B80006300002000F5004000F1004000F50140B6 +:109B900000F4004010B528210BF0DBF810BD407830 +:109BA0008006800E704740788006800EC01C70478B +:109BB0002820704770B5054600780A0700090001A3 +:109BC000120F104328700B000BF0F4FA070507057D +:109BD000070509050B00062408E00C2406E02224F2 +:109BE00004E00024FEA158200BF0F3F96878800906 +:109BF00080012043687070BD00780007000F704737 +:109C000010B50622C01C0BF047F810BD0B4610B56E +:109C1000C11C062218460BF03FF810BD10B50622F5 +:109C200009300BF039F810BD0B46014610B506227D +:109C3000093118460BF030F810BD0278BF23C90770 +:109C40001A40490E0A430270704700784006C00F60 +:109C5000704702785206520EC9010A4302707047DB +:109C60000078C009704770B50C460546C11C2046F7 +:109C7000062209300BF010F820784006400E2070C4 +:109C800029784906C90FC9010843207070BD70B515 +:109C900015460E4604461F2A03D9D1A1A9200BF070 +:109CA00098F920462A46314609300AF0F5FF6078D7 +:109CB000AD1D80098001A906890E0843607070BD42 +:109CC00070B5054640780E468406A40E062C03D2D5 +:109CD000C3A1B9200BF07DF9A41FE4B21F2C00D959 +:109CE0001F2429462246093130460AF0D5FF204676 +:109CF00070BD70B515460E4604461F2A03D9B8A19B +:109D0000CD200BF066F920462A46314609300AF08C +:109D1000C3FF6078AD1D80098001A906890E084344 +:109D2000607070BD70B5044640780E468506AD0E75 +:109D3000062D03D2AAA1DE200BF04BF9AD1FEDB228 +:109D40001F2D03D9A6A1E2200BF043F921462A4694 +:109D5000093130460AF0A0FF284670BD10B5042234 +:109D60000F300AF099FF10BD0B46014610B50422D2 +:109D70000F3118460AF090FF10BD10B503221330C2 +:109D80000AF08AFF10BD0B46014610B503221331BD +:109D900018460AF081FF10BD4176090A81767047A6 +:109DA000817E427E080210437047C176090A01771E +:109DB0007047017FC27E0802104370474177090A4D +:109DC00081777047817F427F080210437047C175D9 +:109DD000090A01767047017EC27D08021043704770 +:109DE00081757047807D704720300279C90652091D +:109DF0005201C90E0A430271704720300079C00633 +:109E0000C00E704720300279D206D20E49010A43B3 +:109E100002717047203000794009704710B5052263 +:109E20001F300AF039FF10BD0B46014610B5052260 +:109E30001F3118460AF030FF10BD30B5411C837E3B +:109E40000A461902D37D447E927D1B0221431343AF +:109E5000674D827D8C1FAC4210D8002A0ED0082A94 +:109E60000CD88A420AD28B4208D8817F427F0802EE +:109E70001043A91D884201D8012030BD002030BD0B +:109E800000210A464254491C2229FBDB70474078D6 +:109E9000C006C00E70474078C006C00EC01C704798 +:109EA0002220704710B502788B07920892009B0F12 +:109EB0001A4302704278520952014270012908D0B7 +:109EC000022906D0032905D0FF2045A1A3300BF0BD +:109ED00080F810BD01210A43427010BD10B5027810 +:109EE0008B07920892009B0F1A4302704278520926 +:109EF00052014270012908D0022906D0032905D059 +:109F0000FF2037A1BD300BF064F810BD01210A43DA +:109F1000427010BD00788007800F70470278FB23E5 +:109F2000C9071A40490F0A4302707047007840077A +:109F3000C00F70470278F723C9071A40090F0A4378 +:109F40000270704700780007C00F70470278EF2357 +:109F5000C9071A40C90E0A43027070470078C0064C +:109F6000C00F704770B50546C1700B000BF022F9A9 +:109F70000E080A0C0E1012120C14141212160C18E1 +:109F80000C2413E0082411E002240FE017240DE054 +:109F90000D240BE0012409E0092407E0062405E074 +:109FA000452000240EA1C0000BF013F8687840098A +:109FB00040012043687070BDC078704770B504469A +:109FC00040780E46C506ED0E1B2D03D904A10948A5 +:109FD0000AF0FFFF6019C01C042231460CE00000AB +:109FE0007372635C756C5F7064752E6300000000B3 +:109FF0007A0C00003A0200000AF04EFE70BD70B507 +:10A00000044640780E46C506ED0E1B2D03D9A04927 +:10A01000A0480AF0DEFF6119C91C042230460AF08C +:10A020003BFE70BDC171090A01727047017AC279A5 +:10A030000802104370474172090A81727047817AA1 +:10A04000427A080210437047C172090A01737047CF +:10A05000017BC27A0802104370474171090A81717D +:10A060007047817942790802104370470171704747 +:10A07000007970474173090A81737047817B427B85 +:10A0800008021043704730B5411C037A0A46C47970 +:10A0900019022143537914791B0223437E4D007921 +:10A0A0008C1FAC4210D800280ED008280CD888424B +:10A0B0000AD28B4208D8D07A917A00020843A91DAF +:10A0C000884201D8012030BD002030BD10B50522E6 +:10A0D000001D0AF0E1FD10BD0B4610B5011D052263 +:10A0E00018460AF0D9FD10BD4172090A8172704705 +:10A0F000817A427A080210437047017170470079F3 +:10A10000704710B50822001D0AF0C6FD10BD0B46B1 +:10A1100010B5011D082218460AF0BEFD10BD0A78D0 +:10A120000273497841737047027B0A70407B487024 +:10A13000704710B508220E300AF0AEFD10BD0B4678 +:10A14000014610B508220E3118460AF0A5FD10BDD3 +:10A1500010B5042216300AF09FFD10BD0B460146D3 +:10A1600010B50422163118460AF096FD10BD10B540 +:10A170000822001D0AF090FD10BD0B4610B5011D10 +:10A18000082218460AF088FD10BD10B504220C30D4 +:10A190000AF082FD10BD0B46014610B504220C31B9 +:10A1A00018460AF079FD10BD017170474171090A26 +:10A1B00081717047C171090A017270470079704757 +:10A1C00081794279080210437047017AC279080206 +:10A1D00010437047017170470079704701717047F3 +:10A1E0000079704710B50822001D0AF055FD10BD1A +:10A1F0000B4610B5011D082218460AF04DFD10BD92 +:10A2000010B50822001D0AF047FD10BD0B4610B521 +:10A21000011D082218460AF03FFD10BD70B5154615 +:10A220000E4604461B2A04D93720194900010AF0BA +:10A23000D0FE2A463146E01C0AF02EFD6078E90681 +:10A2400040094001C90E0843607070BD70B50546F5 +:10A2500040780E46C406E40E1B2C04D9DF200C49BE +:10A2600080000AF0B6FE2246E91C30460AF014FDD2 +:10A27000204670BD4078C006C00E1B2801D80120C2 +:10A2800070470020704710B522220AF005FD10BD6E +:10A29000E09F0000430200007A0C0000FEB50F466C +:10A2A00004460146064620302546C031603640351A +:10A2B0000190032F04D0002F2DD0012F2BD04BE085 +:10A2C00000206080A080E08020816081A082E08505 +:10A2D000E0826874A074E074A076E076A073E07306 +:10A2E00020746074019B987401232B74A8822883C6 +:10A2F0000876E883B0706883A873E8732077607786 +:10A30000019988720199087430727072B072327457 +:10A31000B074A883FEBD0020A8822883012F52D0EC +:10A32000E08B0090608C0290C00000990AF02EFD36 +:10A33000401C80B2E8820099192241439202914266 +:10A3400001DD401EE8827D20000200990AF01EFD1A +:10A35000401C3080002F01D0022FDBD10198007A01 +:10A36000C1060198C90E01720020687322182421C9 +:10A370008B5C4032D9075B08DE07C90FF60F7118F6 +:10A380005B08DE07F60F71185B08DE07F60F711821 +:10A390005B08DE07F60F71185B08DE07F60F711811 +:10A3A0005B08DE07F60F76185908891911726A7B67 +:10A3B000401C5118C0B269730528D7D3002FA9D10A +:10A3C0000020A874FEBD4A7F2046E030022A12D049 +:10A3D000097F022913D050A173200AF0FAFD012051 +:10A3E00000900290E08BA98B484300990AF0DCFCB6 +:10A3F000A883029898E7818800910089F1E7018A93 +:10A400000091808AEDE770B504464034667B0546CE +:10A41000002E68D0252E66D8002964D03E20405DED +:10A42000A27B4843101825210AF0B0FC0846A1730E +:10A430004207C908520F3C4B691820319A5C0979D0 +:10A440008A4367D031460AF0A1FC491CCAB20020F9 +:10A4500006E0002804D029184031C979511ACAB23F +:10A46000291848235B5C93423AD320310979C943C8 +:10A47000CB07DB17D21A521E1206120E34D08B07EE +:10A48000DB17D21A521E1206120E2FD04B07DB1703 +:10A49000D21A521E1206120E2BD00B07DB17D21A3D +:10A4A000521E1206120E27D0CB06DB17D21A521EEE +:10A4B0001206120E23D08B06DB17D21A521E12067A +:10A4C000120E1FD04B06DB17D21A521E1206120EA6 +:10A4D0001BD00906C917511A491E0A06120E17D0B9 +:10A4E000401C0528B5DB70BDC00013E0C000401C57 +:10A4F00010E0C000801C0DE0C000C01C0AE0C000DD +:10A50000001D07E0C000401D04E0C000801D01E008 +:10A51000C000C01DE07370BD7372635C6C6C5F75CE +:10A5200074696C2E63000000EC51010010B5FF4807 +:10A530000021017041708170C17041718171C171E0 +:10A54000083009F073FB002804D0FF20F8A1843004 +:10A550000AF03FFD10BD10B5F44900204872081DF7 +:10A5600009F064FB002804D0FF20F1A1C3300AF0F9 +:10A5700030FDFFF7DBFFF148FFF782FC0021EF48D9 +:10A58000FFF7E4FC0121ED48FFF78CFC10BDE2E78A +:10A590001B207047E5494A7A002A01D00020704705 +:10A5A000488101204872704710B5E0494A7A002A74 +:10A5B00002D04989814201D0002010BDDB48001D36 +:10A5C00009F03CFB002804D0FF20D9A1B4300AF0E8 +:10A5D00000FDD648001D09F049FBFFF7A7FF012049 +:10A5E00010BD70B5D14C0025627A002A02D0628974 +:10A5F000824201D00D700DE0227863789A4203D335 +:10A6000022786378D21A04E062782378D21A102371 +:10A610009A1A0A70FFF7C8FF002801D0657201205E +:10A6200070BDC2494A7A002A04D04989814201D1C9 +:10A630000120704700207047BC490A784B78521CB3 +:10A640001207120F9A4207D0097822225143BC4ABE +:10A65000891801600120704700207047B3480178D5 +:10A660004278491C0907090F914206D00178491C1C +:10A670000907090F01700120704700207047AB499E +:10A680004A7A002A04D04989814201D101207047C9 +:10A6900000207047A5490A784B789A4207D049783C +:10A6A00022225143A64A89180160012070470020E8 +:10A6B000704710B59D4C20786178884216D060783C +:10A6C000401C0007000F6070201D09F0B7FA002839 +:10A6D00004D0E078401CE070012010BDA078401C40 +:10A6E000A0709248001D09F0C1FAF5E7002010BDE6 +:10A6F0008E4801784078814201D1012070470020C6 +:10A7000070478A4801784278914202D301784078B4 +:10A7100003E041780078081A1021081AC0B2704787 +:10A720000F20704770B5814C0D46617A002916D014 +:10A730006189814213D100262E70201D09F07EFA16 +:10A74000002805D1A0782870A670201D09F08EFA87 +:10A750002878E17840182870E670012070BD00204C +:10A7600070BD76490160704770494A7A002A04D06A +:10A770004989814201D101207047002070476B490F +:10A780004979002901D0002070476E4901600120FD +:10A79000704766484179002901D0002070470121A7 +:10A7A00041710846704761494A7A002A04D04989B4 +:10A7B000814201D101207047002070475B494979EF +:10A7C000012901D0002070475E49016001207047D7 +:10A7D00056484179012901D000207047002141717C +:10A7E0000120704751484079012801D0012070476D +:10A7F000002070474D494A7A002A04D04989814295 +:10A8000001D1012070470020704770B5474C0546C4 +:10A81000A0790721401C0AF0B9FAE079814208D0FA +:10A82000A07922214843474922314018286001205D +:10A8300070BD002070BD10B53C4C0721A079401CB4 +:10A840000AF0A4FAE079814207D0A0790721401CE0 +:10A850000AF09CFAA171012010BD002010BD334800 +:10A860008179C079814201D1012070470020704771 +:10A870002E494A7A002A04D04989814201D1012017 +:10A8800070470020704710B504462848083009F08A +:10A89000D5F9002815D125498879CA7990420CD07C +:10A8A000C8792221484327492231401820601F4897 +:10A8B000083009F0DBF9012010BD1C48083009F010 +:10A8C000D5F9002010BD10B504461848083009F02D +:10A8D000B5F9002815D115498879CA7990420CD06C +:10A8E000C8792221484317492231401820600F4877 +:10A8F000083009F0BBF9012010BD0C48083009F000 +:10A90000B5F9002010BD094810B5083009F096F9D6 +:10A91000002822D1054CA079E17988421AD0E0794B +:10A920000721401C0AF032FAE1710DE066000020B8 +:10A930007372635C646D5F712E630000B01700205A +:10A9400080140020A01600202046083009F08EF95F +:10A95000012010BD0C4809F089F9002010BD0A48FB +:10A9600008388179C079814201D1012070470020E7 +:10A970007047054808388179C079814201D10120AA +:10A9800070470020704700006E000020704770473D +:10A99000FF207047704770470020704700207047C5 +:10A9A000002070470020704700207047002070474B +:10A9B000002070470020704700207047012070473A +:10A9C000002070470020704700207047002070472B +:10A9D000F8B5FF4D0446A87F002600280CD00029BA +:10A9E00023D1667010202070E87FA07028462030A8 +:10A9F0000078E070AE7718E0287A012801D00020B6 +:10AA0000F8BD002911D16670F149687A01270A3131 +:10AA1000002801D0132000E0052020701422A01C83 +:10AA20000AF03AF9A7716E722E720120F8BDF8B5DE +:10AA3000E8480078002802D00C273846F8BD0027E7 +:10AA4000E34D3C46203DAF74EF746F75AF752F75C5 +:10AA500028466F732038DE4E47737771E87D0028F3 +:10AA600004D0FEF785FDFFF744F8EC75347274727C +:10AA7000B477D7482430FFF78DF8D5484C30FFF72E +:10AA800089F8DAE710B5D34C00232370D04C203C72 +:10AA9000E375CF4B01241C71603B583307C3FFF7AC +:10AAA000C6FF002804D0FF20CBA102300AF091FAA3 +:10AAB00010BDC7482038807C7047F8B5C44D0646A5 +:10AAC000407B203DE873C24837791346AF73B27BB1 +:10AAD00082710446603C217006221946601C0AF00F +:10AAE000DBF8B07960730622F11DE01D0AF0D4F89E +:10AAF000687B0126002800D0EE74B5484038407BC2 +:10AB0000002800D02E75002F09D0012F09D0022F68 +:10AB100024D0032F46D0FF20AFA14D3013E00021F9 +:10AB20001DE0AB4801212430FFF744F8A848E11D9F +:10AB30002430FFF773F8607B002807D0012807D086 +:10AB4000FF20A5A143300AF044FA0CE0002100E008 +:10AB500001219F482430FFF77CF804E006219C483F +:10AB60002430FFF727F800206875A8759848611C05 +:10AB70002430FFF745F8964821782430FFF75DF838 +:10AB8000934804214C30FFF715F89148611C4C3074 +:10AB9000FFF736F88E4821784C30FFF74EF8AE7448 +:10ABA0000020F8BD0221DAE770B5894C0125203C70 +:10ABB0000246A5758648007A002801D03A2070BD6B +:10ABC000834860380378934206D1002262750622DA +:10ABD000401C0AF061F86575002070BD70B5044630 +:10ABE0007B4D0020203D28752846224632380AF049 +:10ABF00053F82846203844730120287570BD7449E5 +:10AC00000871704710B5724C0022203CE2746073EA +:10AC10000246204612380AF03FF80120E07410BDC9 +:10AC2000F8B500F04CFB6A4C0025203CE07D002884 +:10AC300004D0FEF79DFCFEF75CFFE575654E3570B0 +:10AC4000FEF75AFCA07B012804D00021084601F041 +:10AC500082FAF8BD0021022001F07DFA5C4C207AD6 +:10AC60000127002809D0A07F0028F2D10520E07735 +:10AC7000204620300570A777F8BD70780028FBD0FB +:10AC8000534906226039487BE073C91D0846693084 +:10AC90000AF002F83C20A07227727570F8BD10B55A +:10ACA0004B4C203CE17B207CCA0701D0C2070BD073 +:10ACB0008A070FD582070DD42620FEF7EAFA207CFA +:10ACC00002210843207410BD2520FEF7E2FA207C03 +:10ACD0000121F6E74907F6D54007F4D42720FEF70F +:10ACE000D8FA207C0421ECE770B53A4D287800288A +:10ACF0007CD1374C203CA07C00287CD0FEF7F1FBB7 +:10AD00000026267466746E703046FEF7E7FB00205E +:10AD1000FEF7E5F93448FEF7B3FA2546403D296EC3 +:10AD20008857FEF779FA3048C01EFEF792FBFEF70F +:10AD300008FCFFF7B4FFFEF729FAFEF7CBFB012072 +:10AD4000FEF70DFB0F210520FEF744FA2978681C59 +:10AD5000FEF732FAA07B01280AD0E07C002807D059 +:10AD6000214612390846627B5630FEF790FFE674A2 +:10AD7000207D002808D0164840380146427B123911 +:10AD80008C30FEF7B6FF2675607D00280BD010488A +:10AD9000691C2430FEF734FF0D48691C4C30FEF767 +:10ADA0002FFF6675A675E86D0178002903D001783C +:10ADB000001DFEF713FAA86D0178002907D001786D +:10ADC000034A401C7732FEF774FE0120E0750EE066 +:10ADD00034180020740000207372635C6C6C5F6137 +:10ADE00064762E6300000000F751010003E0FEF7D7 +:10ADF00083FB002070BD0C2070BDFB49486070478C +:10AE000070B50546FEF79DFB002D06D00020FEF72D +:10AE10005CFAFEF7BBF9FFF742FFF44C607C0028B8 +:10AE200009D0A07B012803D1F149F2480AF0D1F8FA +:10AE3000FFF7F6FE70BD0126002D05D00220FEF7BB +:10AE40008EFAEA4820304671E8484430FEF759FB54 +:10AE5000012008F0A8FDFEF7A1F9A07B00280FD083 +:10AE600001280DD002280BD003280BD0E148E0497F +:10AE70001E300AF0AEF8E07B217C884306D009E062 +:10AE8000032000E00120FEF720FAF4E7A07B012870 +:10AE900003D06674D448067070BD00202074F9E7B2 +:10AEA00010B5FEF71EFBD048007800280ED1CF4821 +:10AEB000807C00280AD00020FFF7A2FFF6F781FA75 +:10AEC000CA4820300079012806D007E000F0F7F9E1 +:10AED000FEF712FB0C2010BDF8F79AF8002010BD09 +:10AEE000C14901204870704770B500F0DAFF0028B2 +:10AEF0001BD0FF202D30FEF7E5F9BB4E3078BB4C60 +:10AF00002034012814D0022801D003282ED0A520F7 +:10AF1000B74980000AF05DF83078002807D0F6F7CE +:10AF200050FA207901282BD02FE0FFF779FE70BD71 +:10AF3000AE4DA87B032819D0FEF7F4FAE87D00286F +:10AF400003D0FEF7C6FDFEF70CFBA8489430FEF7D1 +:10AF5000D8FA012008F028FDA87B01280BD0A179A0 +:10AF60006F20012906D0032904D004E00120FFF757 +:10AF700047FFD1E77F20FEF7A8F902203070CBE72A +:10AF80006079002801D1FEF7A1FB0020607170BD3F +:10AF900070B5964CE07D002803D0FEF7E9FAFEF785 +:10AFA000A8FD00F07EFF00281CD08F4D28780228D5 +:10AFB00003D08F4990480AF00CF8A07B012814D0E8 +:10AFC000FF202D30FEF77EF90120FFF719FF2878CA +:10AFD000002809D0F6F7F5F9844C203420790128AF +:10AFE00006D00AE0FFF71CFE70BD99208000E9E75B +:10AFF0006079002801D1FEF769FB0020607170BD07 +:10B00000F8B50446FEF738F90746FEF78DFD01282E +:10B0100027D0002674480078022804D07648744966 +:10B020003C3009F0D6FF714DE87D002803D0FEF7D3 +:10B030009FFAFEF75EFDFEF784FA6C489430FEF747 +:10B04000DBFD21006D4C009064D0FEF7BFF80028B6 +:10B0500060D0009803000AF0ADF8065D5D5D065D06 +:10B060001E5D0126D6E7A87B012853D0374304D1C3 +:10B07000A079002801D002284CD160484C30FEF75E +:10B0800040FA012008F08FFC0120FEF71EF9564817 +:10B090000321017045E059487430C178D438C27931 +:10B0A00091421DD10146D4310A79037A9A4217D1CF +:10B0B0004A79437A9A4213D18A79837A9A420FD194 +:10B0C000CA79C37A9A420BD10A7A037B9A4207D192 +:10B0D0000978407B4906C90F814201D1012100E076 +:10B0E0000021A87B012802D0002803D012E000290B +:10B0F00007D10FE0374304D1A079002801D00128FF +:10B1000008D13E487430FEF798FE002802D0A87D92 +:10B11000002810D0FF202D30FEF7D4F80120FFF7D3 +:10B120006FFE3148007800286AD0F6F74AF9207996 +:10B1300001286ED0C0E02C4F30497868042283315A +:10B14000343009F0A9FD2D484021743000784006C4 +:10B15000C20F78680A54294906227731413009F034 +:10B160009BFD2649786803228731383009F094FD29 +:10B1700022483B217430827D78680A541F4974311B +:10B180000A7ECB7D12021A4382878A7E4B7E120290 +:10B190001A43C2830A7FCB7E1102194301841749E7 +:10B1A00074318A7F4B7F1102194341841349052270 +:10B1B0009331243009F070FD10497F68943108798B +:10B1C000C20638462030D20E0090827709794909AC +:10B1D000C177207A00281DD0A07F00285BD1607A3B +:10B1E00000280ED013200DE0740000201418002059 +:10B1F000D8AD0000F9030000BF02000034180020A1 +:10B200005CE00520E0773449002008700120A07739 +:10B2100041E04CE03048E97D1038002924D000217D +:10B22000A172B989A1814021C95DE1733946062225 +:10B23000413109F031FDF88BE082388C2083788C25 +:10B2400060830098C07F2077607F400840003043D3 +:10B250006077FEF776FC617F4000C907C90F0143A4 +:10B2600061770120607215E00021A172B989A18186 +:10B270004021C95DE17339460622413109F00CFDD8 +:10B28000F88BE082388C2083788C60830098C07FB4 +:10B29000207701202072114D0020287000F00FF857 +:10B2A000FEF72AF90120696800F055FF39E7607957 +:10B2B000002801D1FEF70AFA00206071F8BD10B530 +:10B2C000FEF74AF9FEF73DF9FEF78BF80020FDF78F +:10B2D000FCFFFEF7CAF810BD5418002074000020CF +:10B2E0008107C90E002808DA0007000F0838800817 +:10B2F000FD4A80008018C06904E08008FB4A800095 +:10B3000080180068C8400006800F704710B500F034 +:10B310007BFF10BD70B5F64C0546A26800290DD024 +:10B32000002A04D0FF20F3A14C3009F052FEA560A2 +:10B33000F6F748F80220F6F73FF870BD002A04D16E +:10B34000FF20ECA1543009F044FE0020A060F6F785 +:10B350003AF80120F6F738F870BDE5481030C07EA5 +:10B36000002801D00020704701207047E0481030CD +:10B37000C07E7047DE483430C07E70470021C17601 +:10B38000817601600162DA481030C07E002807D162 +:10B39000D7483430C07E002802D1D549012008703A +:10B3A000704710B50B46C17E847EA14204D0114681 +:10B3B000184607F0B4FB10BDFFF7E0FF10BD38B52D +:10B3C000CB4C606801684978012924D00121684686 +:10B3D00006F05EF968460078CA49000209F0D6FC1A +:10B3E00060680268C0685268511807F0B5F9616872 +:10B3F000C860BF49606834310022884215D0018B93 +:10B40000002912D04272032101720271021D017FD4 +:10B41000FFF7C7FF38BD7D21C068C90007F09CF960 +:10B420006168C860B8480861E3E7018B491C018383 +:10B4300002214172E7E7FFB5AD4F02461037386A87 +:10B440003C68056889B060680790A948C1680291A6 +:10B450006B880B98C01A80B208900C98002804D012 +:10B46000264638362046483002E03E1D28466430E5 +:10B47000059003203071002A15D0012A7ED0022ABF +:10B4800052D0032A7BD09BA1A04809F0A2FD0C98C2 +:10B490000028307974D0032804D09C4895A1093045 +:10B4A00009F097FD40E1002904D1984891A169383D +:10B4B00009F08FFD9549A88FA839484340180A998B +:10B4C00000F0A8FEA0619149E88BA83948430A9989 +:10B4D00000F0A0FEE06186488C4AC068A98FA83AB7 +:10B4E000514384464118A069894A091A8A183B21A8 +:10B4F000A262864B495DA83B594341180818FF30AA +:10B500001630206260626046101AFF38ED2135382F +:10B51000C9008842BBD27F49884204D27B4875A1CA +:10B520005C3809F056FDBAE0784AA88FA83AE1687D +:10B53000504308180A9900F06DFEA0617349E88B2A +:10B54000A83948430A9900F065FEE0616848C06880 +:10B55000002804D16D4867A1543809F03AFD5820FD +:10B56000405B6D4A0028A88FE16822D0504308183C +:10B57000A169401AA0622169A06802E022E051E0BE +:10B58000CDE04843A169644A40183B21495D5143DD +:10B5900041180818FF3014302062E88BE1695043ED +:10B5A000411A0F208001081A60625148A16AC068E0 +:10B5B0006DE050430818A169401A3968D3384968CA +:10B5C0004018D7E7284640300290008B002801D071 +:10B5D000002904D14D4847A13C3809F0FAFCE88B1A +:10B5E0004D494843E169401AA062029A138B2269CF +:10B5F0009B1A9C46A3685343A2699A186346594311 +:10B6000051183B22525D444B5A438A185118FF315E +:10B61000143121620F218901411A61623449C968DC +:10B62000401A35E00C98002803D03420005D002833 +:10B6300074D1E88B38494843E169401A0899484376 +:10B64000A062284640300690008B0028079829D039 +:10B65000002804D02D4827A1163809F0BAFC069816 +:10B660002D4A018B08980818E16948434000FF30D3 +:10B6700014302062E88B5043411A0F208001081AD1 +:10B68000606200F0C1FD00281CD0A16A0298081A6F +:10B69000FF38ED212338C900884200D3F7E60220A5 +:10B6A0003071F4E6002802D00298002804D117482F +:10B6B00010A11D3809F08DFC0798A16AD33808182D +:10B6C000A062CCE706F0B1FD7A690146104607F0AA +:10B6D000D5FFA16A081AFF38ED211E38C90088423B +:10B6E000DCD201200DB0F0BD00ED00E000E400E090 +:10B6F000D01800207372635C6C6C5F6C6D2E7330BD +:10B700002E63000010270000B78913008A0500008F +:10B7100036040000A3020000E20400002AE003282F +:10B7200002D1FD4807210170A16A786907F014F879 +:10B73000B060616A206A884202D90598016001E020 +:10B74000059908600598F54900680818F060A9880F +:10B750000B98081A00B2002801DD022000E000204A +:10B7600070710C9830700C98002805D03420005D62 +:10B77000002801D00220B5E70C9801214840203470 +:10B780006075397F32463846FFF70BFE0020A9E787 +:10B7900010B5E14900284A68116A096807D01268A3 +:10B7A000C98BDF4BD2695943891A09F0EFFA10BDF2 +:10B7B000F8B5D94F35227868016A0C680168525C87 +:10B7C000002A0AD0498E6288914206D1407A002828 +:10B7D00003D1D449D44809F0FCFB06F026FD01460C +:10B7E0007868406907F04AFFFFF7D2FF79686588FB +:10B7F0000B682E185A8EB24202DB521C5A8602E0A7 +:10B80000401C2818588608683622125C002A05D188 +:10B81000428E23899A4201D1521C4286088B03280A +:10B8200002D2401C088302E00868408EA0802046B7 +:10B830004030C18A808A081A6188401E401885B24B +:10B84000203416E0096AE67F097976004B00B74993 +:10B85000007DCB5A895BC91889B20023FFF7EBFD45 +:10B86000002811D0012810D0AF48AE493A3009F075 +:10B87000B0FB79680868428EAB1A1BB2002BE1DA84 +:10B880000820E07400F00BFEF8BD78680068418E77 +:10B89000491C4186EDE770B51F209F4D002128709F +:10B8A000E960A868C27E130009F084FC04545403C4 +:10B8B0004654026A14680268117002685160006898 +:10B8C0002030407D002808D106F0AFFCA968096847 +:10B8D000096C07F0D3FE002815DCA86801684A8EC1 +:10B8E00061888A4204D12289511A6181628004E010 +:10B8F000511A61810168498E61800268C1681164D2 +:10B90000C16841610FE0A8680168098E6288891AE0 +:10B9100061810168098E618001680A6CC2600A6CED +:10B920004261886C6066204601F06DFC00280ED0F4 +:10B930007B487C49BD3808E0C1684161FFF7D4F914 +:10B94000002804D076487749B73809F042FBF5F76C +:10B9500038FD70BD72487349B038F6E710B56E4ACD +:10B960000B00526809F026FC0906090F1E0C2D2D4C +:10B97000082A2D00FFF78FFF10BD00F059FC10BD05 +:10B98000FDF7A9FE10BDD07E022805D0D07E032889 +:10B9900005D0644966480EE0FFF70AFF10BDFFF7C7 +:10B9A0000EFD10BDD07E0228F6D0D07E0328F6D042 +:10B9B0005F485C490B3009F00CFBF0E706F01BFC1C +:10B9C00010BD23205749000109F003FB10BDF3B55A +:10B9D00081B0514C029825460026012710350300FE +:10B9E00009F0E8FB0906313C3C3143433C3C430051 +:10B9F000494801211030FFF78DFC02990198FFF7AB +:10BA0000ADFFE87E022828D1A0680468006A0668B5 +:10BA100006F0EAFBF18B424A5143E269891AD339B5 +:10BA2000FF223232E162904202D24248081802E01C +:10BA3000081A41494018E0624048E16A814200D852 +:10BA40000846E06206E001460198FFF787FFE87EBE +:10BA5000022802D1286820300775FEBD01466560C6 +:10BA60000198FFF77BFF6660FEBDFF202D49C130C6 +:10BA700009F0AFFAFEBDF8B5064627480D4600248A +:10BA80003430254F0B0009F095FB09060C10100C03 +:10BA9000161610101600204801213430FFF73AFC2A +:10BAA00029463046FFF75AFFF8BD78603046FFF769 +:10BAB00055FF7C60F8BDFF201A49F53009F089FA7E +:10BAC000F8BDF0B5144C0020616885B003268E7671 +:10BAD000CA7E0746032A03D0C97E00293FD03FE033 +:10BAE000087F002804D112480E49D93009F071FAB4 +:10BAF0006068057F684606710221417106F095FB7A +:10BB00000290FF20F53003900121684601706946DC +:10BB1000284607F004F814E0D0180020EF160000C3 +:10BB2000E2040000F4B6000074060000FC510100BD +:10BB30001602000084F8FFFFB5F9FFFF161200009F +:10BB400020BF6068007F07F025FE0028F8D06068FD +:10BB5000007F06F050FB60680777FFF70FFC0120BD +:10BB600061688F7605B0BEE5FD494A68907600E0D1 +:10BB700020BF4A68D07E002803D0D07E937E9842B2 +:10BB8000F6D0D07E002803D00020002191767047A7 +:10BB90000120FAE770B5F24900241031CA7EF04D59 +:10BBA000032A03D02431CA7E032A17D169600028F2 +:10BBB00010D001280AD0EB49EB4809F00AFA00201E +:10BBC0006968002C0860686008D070BD0320FFF72A +:10BBD000CBFF01E0FFF775FF0446F0E70C2070BDD6 +:10BBE000F8B5DF4F04461F25E67E330009F0E2FA80 +:10BBF000042A20031B20DA481030844203D0D9499C +:10BC0000DA4809F0E6F902207C60FFF7ADFF002872 +:10BC100005D07968002008600862786012E00C2581 +:10BC2000002078600BE00120FFF7B4FF054604E038 +:10BC3000CE48CC490C3009F0CCF9002D02D0E07E82 +:10BC4000B042D1D1E07E002804D0C848C5491230A6 +:10BC500009F0BFF9F8BDC24810B51030FFF7C0FFBA +:10BC6000BF483430FFF7BCFFBD490020583108758C +:10BC7000BF494870BA49103148610A4624325061C0 +:10BC800088769076012210390A708860486010BD6D +:10BC900070B504460120FFF723FBC5B20B20FFF768 +:10BCA0001FFBC0B2854204D0B048AE49343809F019 +:10BCB00090F90120FFF714FBC5B21820FFF710FB25 +:10BCC000C0B2854204D0A948A649333809F081F9A9 +:10BCD0000420C043FFF704FBC5B21920FFF700FBA7 +:10BCE000C0B2854204D0A1489E49323809F071F9AA +:10BCF0009F489B490C38047000201031C876887624 +:10BD00000A462432D0769076994B0124083B1C7168 +:10BD100018600862106208601060FFF79CFF70BD39 +:10BD20008F48007870479249083908717047F3B519 +:10BD30000D468B4983B01031CA7E08462430884CAA +:10BD4000002A02D1C27E002A03D0C97E022903D074 +:10BD500005E08848616006E0C17E002901D00C2022 +:10BD600000E76060844806F0F2F96168087760686F +:10BD70007F490160007F002804D17B4879496238FF +:10BD800009F027F906F030FA7C49884200D20846CB +:10BD9000FF30C83086B260680321C1760027012DCC +:10BDA0002FD0724A0399121D5143026851600068F6 +:10BDB00001210170684605F06BFC68460078704907 +:10BDC000000208F0E3FF019106F02FFA01997118C3 +:10BDD00006F0C2FC6168032DC86021D06948086183 +:10BDE000606803210172022141720771021D017F07 +:10BDF000FFF7D7FA6068078307202070002067608C +:10BE0000B0E606F012FA314606F0A6FC6168C8609A +:10BE10005D48086108680770096801204870DFE71D +:10BE20005A48DCE77047F8B54D4E1036F17E0029D0 +:10BE300004D131462431C97E002901D00C20F8BD3F +:10BE40000221F176464C4A4F5834083F376234603D +:10BE5000002538602575397920304A004C49C07F6B +:10BE60008A5A4000085A2B46101881B22A462846A2 +:10BE7000FFF7E1FA002804D03B483A49323009F094 +:10BE8000A8F825610120A5602075658625863448BF +:10BE90007830857539684888401E48803583002091 +:10BEA000F8BD10B52E4901248868827E032A0CD083 +:10BEB00000684078002806D0C8683649884202D910 +:10BEC0000024FFF70DF8204610BD0024FBE72448AE +:10BED000826813681978491C1970C1681068C26AB1 +:10BEE000914204D8007D012801D001207047002034 +:10BEF000704700207047F8B51948194C1030606041 +:10BF0000016A00260D68006834212F460E54403720 +:10BF1000B97C002963D1007D032860D106F085F942 +:10BF200001466068406907F0A9FB002857DDFFF76C +:10BF30002FFC6988401C41186068026811860068FF +:10BF40002989028E91424AD9012120308175F88ACF +:10BF5000B98A401A6988401E401887B238E000004C +:10BF6000D0180020F4B600008D0300006D02000020 +:10BF700088000020CFB9000077BA0000F605000065 +:10BF800010270000CB120000B7891300B70800008B +:10BF9000FC5101002E841300096A09794A00CD4939 +:10BFA0008B5A028E007D94463F22525D5200895A80 +:10BFB000C91889B201236246FFF73DFA00280ED066 +:10BFC00001280ED002280AD0C349C44809F001F85C +:10BFD00061680868028EBA1A12B2002ADCDA66605A +:10BFE000F8BD60680068018E491C0186F0E7F8B56D +:10BFF000BB4D0026AA680128116A0C6810D00720E2 +:10C00000287006F05DF8B7480078F6F7AFFDA8682D +:10C010000683026861885186006820308675F8BD05 +:10C02000087913684100AB481F7D415A032F18D08F +:10C030001A7D022A22D01A7D012AE2D13F231B5DFC +:10C0400022895B00C05A0023401881B20120FFF70B +:10C05000F2F90028D5D0A1489F49B53008F0B9FFC2 +:10C06000CFE71E6112683F2396601B5D22895B004B +:10C07000C05A0023401881B20320E8E75822125B1F +:10C080001A613F231B5D22895B00C05A00234018C0 +:10C0900081B20220FFF7CFF9AA6801211268117559 +:10C0A000D7E738B58E4C0021A0680D46006842786D +:10C0B000002A01D045701FE00078002809D0012136 +:10C0C000684605F0E5FA684600788749000208F0FE +:10C0D0005DFEA0680268C0685268511806F03CFB1B +:10C0E0000146A068C160057102214172021D017FF5 +:10C0F000FFF757F9A068058305F0E2FF794800785B +:10C10000F6F734FD38BD10B50146754A0B0090684E +:10C1100009F050F8060D150408190C1C012100F057 +:10C12000A6F807E00021506800F0A1F810BD01203A +:10C13000FFF75DFF00210846FFF7ECF810BD00682F +:10C140000321017510BD00F0A5F810BD62496748D4 +:10C1500008F03FFF10BD70B5614C002809D00128E0 +:10C1600016D0022821D061485B49243008F031FF05 +:10C1700070BDFFF796FF00210846FFF7CBF8A068D7 +:10C18000807E002801D01F2000E00720207070BDB5 +:10C19000A068002501684D70FFF7F0F80320F6F75E +:10C1A00023FC05F08DFFA56070BDFFF77AFFA06846 +:10C1B000FFF7E4F800210846FFF7ACF80420F6F793 +:10C1C00013FC70BD46498968CA7E022A08D10A68F4 +:10C1D0001378002B04D150600968CA6A1018C8622D +:10C1E000704710B53E4A00290CD0012907D002291A +:10C1F00007D03E483849443008F0EBFE10BD401EE1 +:10C2000000E0401FD06010BD35488068002800D095 +:10C210000120704710B504460020002907D034489B +:10C2200008F0B4FD0146204608F0B0FD401C10BDEA +:10C2300010B52B488068C07E030008F0BBFF0414D3 +:10C2400014030A1401F0F2F800280BD022492948FF +:10C2500006E0FEF725FE002804D026481E49001DF2 +:10C2600008F0B7FE10BD23481B490B30F8E710B5A6 +:10C270000446002903D00020FFF7B9FE03E0194867 +:10C280000078F6F773FC2046FFF778F80020F6F701 +:10C29000ABFB10BD10B512488268106A11680068C7 +:10C2A000CB698B60134BC18B9B3359431368D960A7 +:10C2B0000146E0314B8883870C783B231C548B88E4 +:10C2C000C383CB88038409894184116802200875DF +:10C2D00010BD0000FC510100F4B600005A06000039 +:10C2E000D01800207C00002010270000B2070000BA +:10C2F00040420F0047040000F8B5FEF702FA064678 +:10C30000FEF770FAF94D07466879F94C002809D014 +:10C31000012823D0022826D003282ED0FF20F5A103 +:10C32000C63033E0F2481830FEF748FA002801D052 +:10C3300003200FE0EE481830FEF7ACF9002804D0D7 +:10C3400060696030007A002806D0E9481830FEF7AE +:10C3500008FA012068711BE00220FBE7E44818306E +:10C36000FEF7FFF914E0E2481830FEF793F90028D1 +:10C370000ED1FF20DFA1B83008E0DD481830FEF70D +:10C380001DFA002804D1FF20DAA1C03008F021FEF8 +:10C39000A169F722087810400870AA79D207120F15 +:10C3A0001043FB2210400870EA79D207520F104365 +:10C3B00008706B79EF22022B04D0012B07D0032BDE +:10C3C00007D00CE0012E06D8002F04D007E07F1E16 +:10C3D0003E43002E03D010401022104300E01040D6 +:10C3E0000870287C002811D0687901280ED0BF4839 +:10C3F0005438FDF786F8BD49606954397830A26930 +:10C40000FDF7E3FA0020FDF7EFFA04E00846FDF738 +:10C4100078F8FDF70CFBA0690078C00606D4E06947 +:10C420000078C00602D4E079002802D0A079002864 +:10C4300001D0012000E00320FCF747FF032020701B +:10C4400001202071F8BDAA4810B51C30FEF7DDF9B7 +:10C45000A74C002802D00020607004E0012060702A +:10C46000A2485438E061A148407C002802D060789E +:10C47000002805D0E069FDF744F8FDF7D8FA10BDB3 +:10C480009A485438FDF73DF8984A6069543AA0300C +:10C49000E169FDF79AFA0120FDF7A6FA10BD10B583 +:10C4A00093490022486932238276C27601221A54C7 +:10C4B0004030807C002803D00A700021022001E077 +:10C4C00000210320FFF71FFE10BD70B5884C607976 +:10C4D000C2062046416908464030002A01DA00229F +:10C4E00002E0028B4B89D2180B460283C0331A7EBE +:10C4F000002A03D0828B4D8952198283627A002AE6 +:10C5000003D03D2001F0C9F852E08A7E032A4FD0C3 +:10C51000227A002A13D0500701D4D00601D51E205C +:10C5200036E0100701D53D2032E0D00705D1900755 +:10C5300003D470A1734808F04CFD2A2028E0603134 +:10C540008A78002A05D0C28B551CC5830D88AA4263 +:10C550000FD25A7F062A02D01A7F062A05D1428BB3 +:10C56000531C438309888A4203D2828BC18A8A4240 +:10C5700001D322200CE0027C808A002A0FD00628FA +:10C580000FD35A48C07B012801D03E2000E008208C +:10C5900001F083F86069807E032809D001E08842B9 +:10C5A000F5D20120207000210846FFF7ACFD70BDD8 +:10C5B000FFF775FF70BD10B54C494D48CA7B002A86 +:10C5C0002BD0012A29D0022A27D0032A04D049A13E +:10C5D0004D4808F0FEFC10BD897B02290FD00729C9 +:10C5E0001BD0406901464031CA8A898A511A891E86 +:10C5F00089B2032900D30321028951180BE0406955 +:10C60000014640318A8A032A01D2018903E0428827 +:10C61000C98A5118491C818010BD4069F5E700B5F1 +:10C62000030008F0C7FD0604070B0F1212170029BC +:10C630000ED00FE0491E02290AD90BE0491F01293B +:10C6400006D907E0072903D004E00A390C2901D8EC +:10C65000012000BD002000BDFEB50546244818306D +:10C66000FEF78DF8002804D1274822A1CF3808F022 +:10C67000B0FC1F4CA069FDF703FC0321A069FDF786 +:10C680002DFCA069EF220178114001702946FDF7C9 +:10C6900069FC002601272B0008F08CFD0E5D5D086B +:10C6A0005D1D6161155D4D5D613D385D60697121A4 +:10C6B000095C002901D0062101E0C030417EA0695B +:10C6C000FDF71BFD4BE0E069FDF776FC0146A06934 +:10C6D000FDF784FD43E06169A069D031FDF747FDB6 +:10C6E0006169A0699531FDF750FD38E0C819002057 +:10C6F000900000207372635C6C6C5F736C61766594 +:10C700002E6300006B020000780800000621A0697B +:10C71000FDF760FD23E020690178A069FDF744FD85 +:10C7200020698188A069FDF741FD20694188A069E1 +:10C73000FDF740FD13E00096019660696030007CD3 +:10C74000002803D069460878384308706946A06914 +:10C75000FDF756FD03E0FE49FE4808F03AFCFEF7FF +:10C7600018F8002804D1FB48F949801D08F031FC75 +:10C770000C2D07D0072D04D060695E210E52603069 +:10C780008770FEBD606940304683FEBDF0B5F24C57 +:10C79000DC2061698DB0405C042809D0052834D1C3 +:10C7A0006031487A002829D001204874022026E010 +:10C7B0001022EA31684600F0A8FF61691022C831F2 +:10C7C00004A800F0A2FF684605F0BBF8616908AA5A +:10C7D0006CCA0F46CB6778378A670846FE608030A0 +:10C7E000BD60074620376CC7002303634363012005 +:10C7F000A0310876D9494874052000E00D20FFF7E4 +:10C800002BFF61690020C03108770DB0F0BDF8B58D +:10C81000D1481830FDF7B3FF002842D0CE4C207A23 +:10C8200000283ED160690025C030007ECB4E002834 +:10C830000BD0B17B0120FFF7F2FE002805D1B17BC0 +:10C840000420FFF7ECFE002806D060690127C03005 +:10C85000407F062807D00CE060695C210D526030F3 +:10C86000457402202FE0B17B0420FFF7D8FE00289A +:10C8700010D0B07B030008F09DFC173F3F3F3F1EE8 +:10C880003F3F3F3D3F203F3F3F292C3F3F3F3F3F02 +:10C890003F2F3F0060696A21095CC90702D0C030A0 +:10C8A0004577F8BD0C20FFF7D7FE60696030817ACC +:10C8B00039438172F8BD072005E0FDF7D0FF00285D +:10C8C000F8D075740B20FFF7C7FEF8BD00F02CFF01 +:10C8D000F8BDFFF75BFFF8BD606900218030816023 +:10C8E000C160057437740620FFF7B6FE60696030DA +:10C8F0008570F8BD0920E6E700F0D8FEF8BD70B5F8 +:10C90000964DA87B072834D1934CDE22606941887C +:10C91000125A491C91422CD1217A002929D1014671 +:10C92000E0318B88C28B934207D1CA88068CB24211 +:10C9300003D10A89468CB2420DD0884A8689303AA2 +:10C9400056819381CB88D3810989118201462E318A +:10C9500051600121117001221146FDF79FFC002159 +:10C960000420FFF7D0FB61690020C0314877A8732D +:10C97000E87370BD70B5794CA07B162803D074495C +:10C98000774808F026FB74480021426973486032FA +:10C99000117291703038067E0B250123002E06D0CF +:10C9A000027D002A12D14575817503750EE0567A15 +:10C9B000002E06D051722288828381760C22027664 +:10C9C00004E022888283817683770576A17370BD27 +:10C9D000F8B5614DA879800723D5287A002820D1A1 +:10C9E0005E4C0120A17BFFF71AFE002819D1A8692F +:10C9F0000127C0780026030008F0DCFB0E62620805 +:10CA0000622E3B4F0A62146220524562022021E0EE +:10CA1000A07B042804D052484D49333808F0D9FA95 +:10CA2000A673F8BDA07B082804D04D4848492D388E +:10CA300008F0CFFA686960308670F1E7A07B0A28B9 +:10CA400004D047484249263808F0C3FA6869603084 +:10CA500007720B20A073F8BDA07B0E2804D0AB207A +:10CA60003B49C00008F0B5FA6869603007720F20D2 +:10CA7000F0E7A07B0F2804D039483549183808F072 +:10CA8000A8FA1120E6E7A07B0F2804D034483049EB +:10CA9000123808F09EFA1320DCE7FFF76BFFF8BDB1 +:10CAA00069690846C0310A7F062A04D16030807A5D +:10CAB000800700D50E77487F0628F0D14E77F8BD65 +:10CAC000274823496E3008F084FAF8BD10B5234C8E +:10CAD0000020A17BFFF7A3FD002804D11E480122FE +:10CAE000017A114301720420A07310BD10B51A4CD5 +:10CAF00060690146C0314A7F002A06D0097F0629B5 +:10CB000003D0217A0122114321726030807A80079C +:10CB100015D4E069FDF752FB61696031C872E069C4 +:10CB2000FDF74EFB616960318881E069FDF74DFBDF +:10CB3000616902226031C881887A10438872606915 +:10CB400000220146C0310B7F062B00D10A7709E095 +:10CB5000F4C60000ED07000090000020C819002076 +:10CB6000770500006A231B5CDB0703D106234B77A4 +:10CB70004030428310BDF8B5FE48817B0020FFF7AE +:10CB80004EFDFD4C0126002807D160696030407AD7 +:10CB9000002802D1207A30432072616900255E208E +:10CBA000455262204654C831E069FDF7C8FA616910 +:10CBB000E0699131FDF7D2FA6169042208469131AA +:10CBC000B93008F069F8EB483038017E08270029B1 +:10CBD00006D0017D002912D14775857506750EE0D6 +:10CBE0006169054689894183E249E0691439FDF7A5 +:10CBF0008EFAE049E0690C39FDF796FA2F76DD48A8 +:10CC00000E218173F8BD70B5DA4D0020A97BFFF7C6 +:10CC100006FDD94C002803D1207A01210843207257 +:10CC2000E069FDF730FA00280ED0E069FDF726FA3A +:10CC30006169DE225052498800F0C1FD002806D00B +:10CC4000282000F02AFD70BDFFF740FF70BDE069AD +:10CC5000FDF70EFA6169E0310870E069FDF701FA4D +:10CC60006169E0314880E069FDF7E0F96169E03130 +:10CC70008880E069FDF7E3F96169E031C880E06927 +:10CC8000FDF7E6F96169E03108810720A87370BDFE +:10CC9000F8B5B94CA079C0076FD0207A00286CD1C4 +:10CCA000B44D0120A97BFFF7BAFC002853D1E069FD +:10CCB0000027C178022201260B0008F07BFA0D162E +:10CCC0001308354A4A384C474A1929444A00FDF7A7 +:10CCD00016FA6169DA225054AE735E204752603111 +:10CCE0008E7038E000F076FD35E0FFF78CFF32E023 +:10CCF000A97B0020FFF793FC002802D1207A304363 +:10CD0000207260695E210F52603086700A2018E040 +:10CD1000A87B0B2802D0207A104320722F74606900 +:10CD2000603046720C200CE0FFF725FF13E0A87B73 +:10CD3000112802D0207A1043207260696030877019 +:10CD40001620A87307E0FFF7D1FE04E000F00FFD06 +:10CD500001E0FFF7BBFEFDF76EFD002804D14F2078 +:10CD60008649000108F035F9606900238030016BC5 +:10CD7000426B491C5A4142630163F8BDF8B57D4FCF +:10CD8000012814D1787C002802D1387C002801D0F9 +:10CD9000FCF74DFEFCF7E0FBFCF7D3FB0020FCF7B3 +:10CDA00094FAFCF71EFBFCF760FBFCF7A5FBF87B95 +:10CDB00001260025704C00280FD16079C10705D0ED +:10CDC0000220F87360694030057402E0800717D5CF +:10CDD000FE7300210120FFF796F9F87B012802D0AD +:10CDE000022808D00CE06079C00709D00220F8734F +:10CDF0006069403005746079000701D50320F8733D +:10CE000000F018FDFFF703FD2079002801D03D81D7 +:10CE100002E03889401C38816079C007606904D01D +:10CE200072210D544030858203E04030818A491CD4 +:10CE30008182E079002806D061696031887C02280F +:10CE400006D8401C887460696030807C022804D950 +:10CE50003D817D81606960308574B97B0020FFF77A +:10CE6000DEFB002802D1B87B06284BD16069014661 +:10CE7000C0310A7F062A45D0497F062942D03D4964 +:10CE8000C97B03293ED16030807C00283AD1FDF770 +:10CE90002FFC002836D0FDF7A5FC002832D06169B0 +:10CEA000C88801282ED90A4640325674D08A978AFB +:10CEB000831E9F4201DB012002E0C01B401E80B2A6 +:10CEC0002C4B1F89A3899F4201D3012302E0DB1B66 +:10CED0005B1C9BB2984200D91846012800D15574BA +:10CEE0002A22525C002A11D0224A898D52898A4214 +:10CEF00001D3012102E0891A491C89B2884205D96F +:10CF0000084603E06169012040314D7461694A8837 +:10CF100010180881FFF74FFB6069122215490C3089 +:10CF200007F0BAFEFFF7D1FAFEF7E3FF00280AD0B8 +:10CF3000104810388179002905D161690246898934 +:10CF4000203A118586710C481C30FDF7BCFC002886 +:10CF50000FD0E06900788007800F012809D00228EF +:10CF600007D0FDF7D0FC002803D10449044808F09D +:10CF700030F807E0C819002090000020F4C6000037 +:10CF80007F030000606940308574F8BD70B5FE4CC9 +:10CF9000607900283CD0FD4D022810D1FDF789FBB7 +:10CFA000002803D1FA49FB4808F013F86A69002306 +:10CFB00080329068D168401C5941D1609060002651 +:10CFC00066712079012804D12671A87910210843BF +:10CFD000A871E078012816D1E670A87908210843E5 +:10CFE000A871FDF7F5FB002804D1EA48E84918309C +:10CFF00007F0EFFF6969002380318A68C868521C16 +:10D0000058418A60C860A079012802D00120A0712F +:10D0100070BDA67170BDF8B5DC4CDB4DE269002730 +:10D020001078042183079B0FE8790126012B11D08A +:10D03000022B0FD0032B01D0207A30E06178002939 +:10D0400005D1AE70A1793143A17123E0EF71F8BD34 +:10D05000EE71F8BD5278D3061CD060780028F8D164 +:10D06000D006C00E1B2818D8607908436071FDF700 +:10D07000E2FB002804D1C748C5494B3007F0A9FF9F +:10D08000606900238030026B416B521C594102637E +:10D090004163E8790128DBD1D8E7207A10210843E1 +:10D0A0002072F8BDF8B5B84D0446303D287D002704 +:10D0B00000280AD0002978D1677010202070687D80 +:10D0C000A070A87DE0702F756FE02878002814D03C +:10D0D00000296AD1072067702E462070083607E0C5 +:10D0E000686807802F700A223146A01C07F0D4FD23 +:10D0F00028780028F4D1A77057E0287EA24E143E6D +:10D10000002837D0002950D1297EA0480B0008F014 +:10D1100051F80D2C2C2C2C2C2C2C2C112C2C2008C8 +:10D120002C0067700C212170A97EA1704069808954 +:10D13000A08018E008216770217040690A46808944 +:10D14000914960801439201D07F0A6FD3089A08127 +:10D1500009E067700B212170A97EA1704069808968 +:10D16000A080A87FA0712F761FE089498A4807F028 +:10D1700030FF1AE0844810388279002A08D000294C +:10D1800013D1677011212170B189618087710CE022 +:10D19000827A002A0BD0002907D1677012212170F2 +:10D1A000318A6180718AA18087720120F8BD0020D8 +:10D1B000F8BD76480078012801D00C2070477249EC +:10D1C0000020303908700875087620318871704762 +:10D1D00070B56E4C064620780D46002804D093208A +:10D1E0006B49000107F0F5FE01202661E07225621F +:10D1F0002070FFF7DEFF002804D0674864494930FB +:10D2000007F0E7FE70BDF8B5604C2178012902D126 +:10D210002178012901D00C20F8BD01460546606146 +:10D2200012220C31584807F037FD01274035AF7402 +:10D23000554D2888FDF723FA002827D02888FDF7C8 +:10D24000D9FA002822D02888FDF78EFA00281DD0B0 +:10D250002888FDF7A8FA002818D0FCF742F9606981 +:10D260000026C088002825D048481830FDF787FAE6 +:10D2700000281FD06069C030007E00281AD0A97B2A +:10D280000120FFF7CCF9002802D013E01220F8BDEE +:10D29000A97B0420FFF7C3F900280BD16069014680 +:10D2A0004030868360314E740220FFF7D5F9606903 +:10D2B00040304674344830380078002806D1606920 +:10D2C000C18D008C814201D9A18102E06069008C8E +:10D2D000A08160694189491E8AB2298989182981FA +:10D2E000297B002902D06E812E7302E0698989189A +:10D2F0006981014640318B8A9B188B82C388012B40 +:10D3000001D85B1CC380002A01D060308674A87BE2 +:10D31000032816D0487C002815D02889A189884286 +:10D3200011D2FDF7E5F900280DD060692A21095CCA +:10D3300000290BD06989808D814207D3A670E770E0 +:10D340000CE0A7700AE0A670E67007E0688900218B +:10D35000401C6881A7700520FEF7D5FE6069512149 +:10D360000E54A97B052901D0062920D1DE2142884F +:10D37000095A511A09B2002919DB01460522E03188 +:10D380002430F3F721FF09E0C819002090000020A5 +:10D39000F4C6000039070000F10800000122022154 +:10D3A0006069FCF77BFF6069C0304677AE736069E7 +:10D3B0004189FDF728F8A07800282AD1606920303B +:10D3C000807A002800D06E810120FBF788FE60691A +:10D3D0003830FCF73EF860693430FBF751FF216AC2 +:10D3E00000200856FBF718FF0120FCF777F8FBF741 +:10D3F000D1FEFCF76FF80120FBF7B1FF6069406ECA +:10D40000FCF782F8FFF71FF860694030C07BFBF73C +:10D4100040FF6671E671A6712672A6726672267169 +:10D4200002202070FCF768F80020F8BD10B5F74C1A +:10D430002078022801D00C2010BDA078002803D04D +:10D440000020FFF79BFC17E0FCF74BF800F01DF9FC +:10D4500060692030007C012809D0FCF79FF8FBF7B9 +:10D460009EFEF3F7AEFFE07A012803D004E0FCF75C +:10D470009DF8F4E7F5F7CCFD002010BDE349C87234 +:10D48000704710B5E14C2078032803D0E049E1480B +:10D4900007F09FFDE04801218278002A06D0002293 +:10D4A00082700171A27904231A43A271A2691378D0 +:10D4B000DB439B0707D1C378002B04D1C170A0794F +:10D4C00002210843A0711078C00606D4E0690078F4 +:10D4D000C00602D4E07900280CD06078002809D179 +:10D4E000A079002806D1FEF7F2FC002802D0207AAD +:10D4F000002803D00120FFF741FC03E0FEF7A3FF63 +:10D5000000F0C3F82078012806D0F3F75AFFE07A3C +:10D51000012801D1FCF7DAF810BD38B5BB4C6069C1 +:10D520002030007C012820D1A07A00281DD1684637 +:10D53000FCF744F8002818D061693120405C0128CC +:10D5400010D1B54A0D236D460020D356285683428C +:10D5500008D050738989303A9185114620318873FB +:10D5600001208872A07A401CA07238BD70B5A74C0B +:10D5700006462078042804D0A648A549553007F06F +:10D5800028FD607910210843A34D6071002E47D01B +:10D59000FCF765FA61780126084300280ED1687C03 +:10D5A00000280BD0E0694178C90607D00078E979F6 +:10D5B0000007C00F884201D1667247E0E07800287A +:10D5C00009D0E0694178C90605D10078C00602D4C7 +:10D5D000FFF7A3FF3AE0FFF7A0FFE069A979007821 +:10D5E0004007C00F884205D0FFF7D0FC60790821C2 +:10D5F00008436071E069E97900780007C00F88424C +:10D6000001D1FFF708FD6079304360710020E071BF +:10D61000A079000702D5A87B022817D0207A13E052 +:10D62000022108436071E079401CC0B2E07101281A +:10D630000CD8687C00280DD0774854384078C10653 +:10D64000C90E052906D2C006002803D00120FFF725 +:10D6500095FB01E0FEF750FE2078012806D0F3F795 +:10D66000B0FEE07A012801D1FCF730F870BD10B5AA +:10D6700066480078042804D066486549B73007F04A +:10D68000A8FC0120FFF77AFB10BD10B50720FBF7BF +:10D690001CFE5E490420087010BD5C4933224969B4 +:10D6A00050545D4A032090738876704710B5574CEC +:10D6B0006069C030007F00281CD0062806D056487C +:10D6C000817B0020FEF7ABFF002813D06069014684 +:10D6D000C0310A7F130007F06DFD070D0D0D0D0D14 +:10D6E0000D050D006030807AC20704D0C04380076A +:10D6F00000D1087710BD0C20FEF7AEFF6069012253 +:10D700006030817A1143817210BD10B5002A0AD0B1 +:10D71000002306E0D41A6418203CE47FC4545B1C48 +:10D72000DBB29342F6D310BD10B503F0B0FF0C2866 +:10D730001CD3364C08216069D03003F0A9FF0028C3 +:10D7400006D060690421953003F0A2FF002803D1C0 +:10D750002F49324807F03DFC6169042208469531A3 +:10D76000BD3007F099FA0420FEF776FF10BD7CB5B6 +:10D77000294E0020B17BFEF752FF0125234C0028E3 +:10D7800002D1207A284320726946E069FCF73EFD09 +:10D79000684600780021C207D20F684602706069AF +:10D7A000002A02D06030057401E0603001746069C5 +:10D7B0005E221152603085700820B0737CBD401A23 +:10D7C000174900B2884201DC002801DC01207047C3 +:10D7D0000020704770B5104D0020A97BFEF71FFF99 +:10D7E0000A4C002803D1207A012108432072E06905 +:10D7F000FCF77EFC6169DE2250524988FFF7DFFFAB +:10D8000000280FD02820FFF748FF70BD90000020AF +:10D81000F4C60000330A0000C819002062060000A8 +:10D82000FE7F00006169E069E031FCF755FC0520EE +:10D83000A873EAE770B500F047F8384C384D6079C6 +:10D84000400709D5A97B0520FEF7E9FE002803D093 +:10D85000207A082108432072FFF71AFA00F012F824 +:10D86000FFF7B6F8A079C00609D5A87B030007F03A +:10D87000A1FC06060606060604060620A873FFF7A6 +:10D880003EF8C2E710B525488179490714D5017AD9 +:10D89000002911D12249897B0B0007F08BFC080D70 +:10D8A000050D0D0D0E0D100D4069002262210A5468 +:10D8B000C030807EFFF7F1FE10BD012100E00221A3 +:10D8C0004069C030417710BD10B51448817909070F +:10D8D0001DD5017A00291AD1114A947B230007F043 +:10D8E00069FC1416160B16161616161616161616AC +:10D8F0001616161616161716406960308170407C91 +:10D90000002801D0062000E01620FFF7C6FE10BD5B +:10D910004069603001728170917310BD90000020E9 +:10D92000C819002010B5031D03600020521E04E03A +:10D930005C181C60401C2346C0B29042F8DB0020FB +:10D94000186010BD01460A680020002A02D0104667 +:10D9500012680A60704702680A6001607047000040 +:10D9600000B51A2822D00ADC030007F023FC0D11B1 +:10D970001F131F1F191915171F1F1F1B1F002A28F0 +:10D9800014DD3A38030007F015FC030F11091100EC +:10D99000002000BD1E4800BD042000BD0D2000BDBC +:10D9A0000F2000BD082000BD112000BD032000BDD8 +:10D9B00010B50C46F4F784FF00281AD02046F4F77F +:10D9C00084F9002812D020780E280BD00F2809D017 +:10D9D000022807D0032805D00EA1772007F0F9FA16 +:10D9E000002010BDA078FFF7BBFF10BD09A17D206E +:10D9F000F4E708A18320F1E710B5F4F7EDF810BDC6 +:10DA000010B5F4F762F910BD10B5F4F744F910BD84 +:10DA1000023000007372635C686F73745F686369DF +:10DA20002E630000F0B597B00021032004F082F9C6 +:10DA30000025FE4E022775807574347C12E0F06874 +:10DA4000E1004018818800290CD0858069460F705C +:10DA50004D7001680291808869468880002168467F +:10DA6000F8F702FD2046641EE4B20028E7D117B0A3 +:10DA7000F0BDEE4BD86019741A80D3E7EB49EC4B3C +:10DA80004A8800201A4200D00120497C002901D098 +:10DA9000082108437047F7B504460E460078012177 +:10DAA000E34A8140521C114098B0E04A00915188ED +:10DAB000E04B994205D0009B002B05D0DC4B19426E +:10DAC00002D001201BB0F0BD009BD84A1943518001 +:10DAD0001A9D002D11D00020287022781A98002756 +:10DAE000401C130007F066FB10EF0D152137555D44 +:10DAF0006A39AFAB85B3EEEDECEF0B28EDD0042027 +:10DB0000E0E702212970A1880170090A4170032011 +:10DB100093E004212970A1880170090A4170E1880D +:10DB20008170090AC170052087E006212970A1884B +:10DB30000170090A4170E1888170090AC170218968 +:10DB40000171090A4171A289E81D216907F0A4F851 +:10DB5000A089C01D71E0082129702178082901D110 +:10DB600010212970A1880170090A4170E188817033 +:10DB7000090AC1700520308020466A1D01A90830BD +:10DB800003F0CFFB00287DD1694630880979401821 +:10DB900053E00A212970A1880170090A417003200D +:10DBA0000AE00C212970A1880170090A4170E188FE +:10DBB0008170090AC170052030809DE0A0888446EC +:10DBC0004000401C81B2308888425BD3052959D37C +:10DBD0000E202870002008E0A36842009B5A5219CA +:10DBE00053701B0A401C937080B26045F4D331809F +:10DBF000B6E08E49487C002873D0401E4874C8683F +:10DC000021790822C9004518A988286840180838D1 +:10DC1000A16807F041F802216846017100214171B5 +:10DC200028680390A98868460181002101A8F8F7B7 +:10DC30001BFC0020A880002E00D0308090E02978C6 +:10DC400080221143297029784022114329702978B4 +:10DC50008909890112312970A1880170090A41706E +:10DC6000E288E81CA16807F017F8E088C01C308043 +:10DC70002878410640D5C00972D00121684601715B +:10DC8000002100E02BE041713188ED1C091D01816C +:10DC90001A980390E08840190490001D634D059088 +:10DCA000297C68460176002101A8F8F7DDFB0746CC +:10DCB00030880C303080022F06D0002F50D060E02A +:10DCC0003CE032E01CE059E06946097EE868CA00A1 +:10DCD00080182A7C914202D28188002902D0042730 +:10DCE0004FE02EE0697C491C69741A990160318803 +:10DCF00081800020308044E04C48A188C1802FE022 +:10DD000029788909890116312970A1880170090AC9 +:10DD10004170E1888170090AC1702289681DE1683B +:10DD200006F0BAFF2089401D46E728788009800167 +:10DD3000183028702079687002207EE73B480A047A +:10DD400001D405271DE00289A3889A4201D0062745 +:10DD500017E01E222A70012249043280490C4180BA +:10DD6000009800280DD0314D0022288811468300EC +:10DD7000032003F03AFF2078287107E0002030806C +:10DD800003272A48009942888A434280384699E608 +:10DD9000F7B59AB002000C4606D0172A04D82348DB +:10DDA000244B4088984202D107201DB0F0BD237853 +:10DDB0005D0601D4DB0901D00820F6E700236D469B +:10DDC0002B706B701D462378611C9F06931E189361 +:10DDD000531E19939BB2169302AB1793134BBF0EAE +:10DDE000DE883B0007F0E6F9208511F15EF16BF16A +:10DDF000A3F1C6F1F2F1FBF1EEF1EDF1ECF1F1F18D +:10DE0000EBF1EAF1E9F1E8F185F1052A71D104229B +:10DE100069460A7005490A7969460A71E178A3786A +:10DE20000A021A436946CA80227905E0DC190020FB +:10DE3000FE710000FFFF00004A7061788906890EBC +:10DE40000C2923D009DC891E0B0007F0B3F9091354 +:10DE500052155219521B521D520012291CD004DCBB +:10DE60000E2915D01029D1D114E0162916D0182961 +:10DE7000CCD115E0800700E04007002839DA2AE11C +:10DE80000007FAE7C006F8E78006F6E74006F4E781 +:10DE90000006F2E7C005F0E7C004EEE78004ECE717 +:10DEA0004004EAE7800724D5032AAFD105206A465B +:10DEB0001070487809780002084390800BE1400711 +:10DEC000F1D5062A15D31898617880B2012902D0BD +:10DED00002299BD101E0022700E0102706226946B3 +:10DEE0000A7000228A8001AEA11C0236BA1C179269 +:10DEF00018E0B6E04A780B7812021A433280801E8E +:10DF0000891C1890B21C1691384603F0E4F9169952 +:10DF100018986B469A88C919C01BB61D521C9A8066 +:10DF2000179A80B28242E5D900289CD1D3E000073D +:10DF3000B9D51998694682B20720087000208880F8 +:10DF4000601C891D11E0437806781B0233430B8067 +:10DF5000C37886781B0233434B806E46121FB3880A +:10DF6000001D091D5B1C92B2B380042AEBD2002A6B +:10DF700077D1B0E0C00674D5022A72D31898082170 +:10DF800082B2684601700021C18063780371A01CD1 +:10DF900017990EE04678077836023E430E80861CBD +:10DFA0004E606F46D21AFE88C0180831761C92B2B5 +:10DFB000FE809342EED9DAE76FE076E065E051E06B +:10DFC00046E01EE014E00AE000E0A0E0800648D54C +:10DFD00009206A46107096801698D0800FE040069F +:10DFE0003FD50A22684602708680169AC28006E0F3 +:10DFF000000636D50B206A46107016989080029164 +:10E0000069E0C0052DD5022A7FD318980C2182B271 +:10E01000684601700021C18063780371A01C1799C4 +:10E0200013E04678077836023E430E80C67887783C +:10E0300036023E434E80061D4E606F46D21AFE8861 +:10E04000C0180831761C92B2FE809342E9D98EE75F +:10E05000C0045AD5012A58D10D2168460170868026 +:10E0600039E052E0800450D5052A4ED30E2368468D +:10E0700003708680C8788B78010219436846C18096 +:10E08000521F0281601D039025E040043DD5012A06 +:10E090003BD10F20694608701DE0030435D44B784E +:10E0A0000E781B023343244E3381032A2DD31B2FBA +:10E0B00027D011236E46337001261F4BF6033043E1 +:10E0C000588048780B780102194368468180D21E37 +:10E0D000C280E01C029020788006800E1B280AD0A7 +:10E0E0001D2808D00021032003F024FE1248418897 +:10E0F000C90BC903418068461C99F8F7B5F9284651 +:10E1000053E610206B461870DBE70725F7E7082574 +:10E11000F5E700B50022D243074997B04A800328AB +:10E1200007D1032268460270097901710021F8F7CE +:10E130009BF917B000BD0000DC190020FFB589B0C5 +:10E140000020019009981027FE4C1E46154608280D +:10E1500006D0E06901F05EF8002809D03770BEE013 +:10E16000288809213843108013980227017016E08F +:10E17000E169012088710521E269C9029180E169A4 +:10E180008872E169F0480881E16900208873288875 +:10E190002021084328801121139804270170139827 +:10E1A0000225801C0290307806900A203070E548E5 +:10E1B0001830049001F022FA0020059020462C30FF +:10E1C00003906DE00998102808D1022D06D001991E +:10E1D0000298A28D401A8270110AC170E08D0A99CE +:10E1E000884202D901F0CDF806E0884204D10698B1 +:10E1F000002801D030701CE00298E18D0170090AFE +:10E20000417012980088401BC01B82B2FF20C01BC7 +:10E21000904200D2024607A8009002980021C3193C +:10E22000E08D01F056FA3070002805D0C0B2832886 +:10E2300058D0E08D20833EE00598002804D0206C63 +:10E2400000790A282CD336E06846808BC119C9B200 +:10E250000191022D0DD01399019A4978914202D172 +:10E26000228F824208D00191206C0178032908D0C6 +:10E2700023E0084613994870206C0178042906D0E1 +:10E2800007E000790A2818D20120059008E0E18D06 +:10E29000818002990198081802900198281885B287 +:10E2A0000399049801F0ADF9002804D11298008870 +:10E2B000401BB84286DA022D0DD00998102806D1ED +:10E2C00002990198A28D081A8270110AC1701298E1 +:10E2D000058000203070206C0078032802D00020D8 +:10E2E0000DB0F0BD0220FBE7F8B5964A0026126D8E +:10E2F000002A2ED0401F934D84B24035E88A234631 +:10E300000833AF8AC318BB4222D88B784F781B02E0 +:10E3100010183B4303701B0A43700B79CF781A0225 +:10E320003A438270120AC2700471220A4271224674 +:10E33000491D801D06F0B0FCE88AA41D001980B2BA +:10E340008049E882096D002208180270427000E0DE +:10E3500009263046F8BD30B57A4B028840339B8A97 +:10E36000934213D9774B1C6DA3185C781D78240257 +:10E370002C430BD05C791D7924022C436404640C7B +:10E38000A41D1219028000200B6030BD822030BD18 +:10E39000F0B585B0074600266846068155E001982D +:10E3A000417802780D021543417902790802104341 +:10E3B00000044AD43D8003A80023012200905202A9 +:10E3C0001946284601F085F9040044D168460189C0 +:10E3D0000182019841790279090211434378027858 +:10E3E0001C021443AC421CD10A041AD44A04012171 +:10E3F000520C89030A430096C178807809020143D0 +:10E400000023204600F0C1FF040010D10199487993 +:10E410000A79000210430122D20310430871000A56 +:10E42000487101A904A8FFF796FF0400D1D0019913 +:10E4300000964878097800020843694600238A89D3 +:10E44000194600F0A2FF822C05D101A902A8FFF70E +:10E4500082FF0400A3D06846068109E0019948794B +:10E460000A79000210434004400C0871000A487108 +:10E4700001A902A8FFF76FFF0028EFD0822C02D07D +:10E48000204605B0F0BD0020FBE7F7B584B0144688 +:10E490000646002700F071FF2A480025006D00287D +:10E4A0002FD0059801282CD12046FFF771FF0700D7 +:10E4B00027D1002E29D06846058118E001994878B7 +:10E4C0000978000208432080019B0095587919794A +:10E4D0000202D8780A4301029F78587839431F789E +:10E4E00000029B1D384300F050FF002805D101A910 +:10E4F00002A8FFF730FF0028E0D0822800D10020DA +:10E500000746002E01D00F48056500F03AFF384657 +:10E5100007B0F0BDF0B597B00021042003F00AFC6D +:10E52000084F00243D467C8040356C73AC73287BDB +:10E53000B96CC00008380E18B08800280DD0012032 +:10E54000694603E0F01900200128000008703068D7 +:10E55000019000216846F9F78EFAB4803C65AC82E0 +:10E56000EC8217B0F0BDFE4B986418464030017342 +:10E570001A803838D861CDE7F949002049880A0760 +:10E5800000D501200A06120F01D002221043CA054D +:10E5900001D5042210438A0501D5102210434905F4 +:10E5A00001D520210843EE494031497B002901D0A3 +:10E5B000082108437047FFB5A7B004002898164605 +:10E5C0001B9022D00178E6484D06428822920246EE +:10E5D00040320092002D14DB8A06920E1E2A0ED0C5 +:10E5E000229A5205520E10D13288172A0DD3009A62 +:10E5F000927B002A09D1DB4D229AAA4205D0CA0992 +:10E6000006D08A06920E122A02D003202BB0F0BD4B +:10E61000D348826C0098007B2590C0000838101801 +:10E620001F9048060CD40098407B002808D0009921 +:10E6300088731F99289808601F9884800220E5E756 +:10E64000002718A90F7069460F72C54902AA0A640B +:10E65000309A4A6410A90F850F861B981D460078D2 +:10E6600020908106BE4B601F24901A462C322192C6 +:10E670002898DA691833890E1E93401C0B0006F0A7 +:10E6800099FD1FFDFD11FD1AFD90FDFCFDFBFDFA3E +:10E69000FDF9FDFCFDF8FDFDFDF7FDF6FDFDFDFDC1 +:10E6A000FDF5FD00032C7BD10320287017226A7032 +:10E6B0000022AA70E0E2052CF5D141780278090227 +:10E6C0001143A74B10AA19831185C27880781202D2 +:10E6D00002435A8300297DD091427BD800211846FD +:10E6E00081720181491E01841E9800F087FF052078 +:10E6F0002870A81C1D900220009021991E9800F0FF +:10E7000080FF002803D047E018A90870F0E2944881 +:10E710002030807C012803D002206870102002E0A5 +:10E7200001206870022022908D4830302390002212 +:10E7300020A9239802F0F5FD00282AD120A800780E +:10E740002299814225D132880099801C511A814238 +:10E750001FDB83481D99C08D0870000A48701D9802 +:10E7600020A9801C1D9000981D9A801C0090239861 +:10E7700002F0D7FD20A909781D9840181D90009837 +:10E78000401880B2009021991E9800F03AFF0028AE +:10E79000CDD0009802288DD10A2018A908706CE20B +:10E7A0006DE0072C6BD341780378090219436C4B59 +:10E7B0008446198310AB1985C37880781B021843EF +:10E7C000674B0029588305D0814203D801211846A0 +:10E7D000817200E0A4E061464B7909791B020B438A +:10E7E000038100218173104600F014FD00280FD131 +:10E7F0005B480121C26991710522C369D2029A80E6 +:10E80000C2699172C26958491181C069002181733E +:10E810005349E01F08841B98C01D48621E9800F0F1 +:10E82000EDFE07202870681C009001201D904C48C8 +:10E830000021C18530E01D98012815D04848C169E4 +:10E84000897901292FD000981038C17B807B09027B +:10E85000014300980170090A41700098801C0090E3 +:10E860001D98801C80B21D903D4809E013E2BEE176 +:10E870007AE1D8E00DE2A0E080E03BE01EE2B6E005 +:10E88000C18D00980170090A41700098801C0090A9 +:10E890001D98801C80B21D9021991E9800F0B1FE39 +:10E8A000002802D006E0818DD3E731881D98081A30 +:10E8B0000428C0DA1D98012800D16DE72848C169F5 +:10E8C0008979012903D0828D26498A4205D1818D1B +:10E8D00000980170090A417009E000981038C17B66 +:10E8E000827B0802009910430870000A48701D9846 +:10E8F000801CC1E1072C01D0152C78D14178037818 +:10E9000009021943164B198310AB1985C378807817 +:10E910001B02034312480029438301D0994201D9C5 +:10E920000120F1E60E4801218172002101818173ED +:10E93000052C07D024981B99C0B2491D02F0CBFCCE +:10E940000028BAD100200649C04308841B980096CD +:10E950000195007818AB8006800E1CAA002105E006 +:10E96000F0190020FFFF000001280000FFF7E6FB80 +:10E970000746FE4810A9008B08857EE1032CBCD118 +:10E98000402210A90A86417802780802F74910430C +:10E99000088310A9088520A9009131886B1C491EA5 +:10E9A0008AB2002100F095FE18A90870002830D125 +:10E9B0000B20287020A8008833E0052C9DD18021F1 +:10E9C00010AB1986014640780B780202E7481A43DB +:10E9D0000283CB7889781B021943E44B10461984D3 +:10E9E00010AB1A85E24A914202D307208CE697E0E9 +:10E9F0003F23DE4A9B021943118421AA00923288E8 +:10EA00006B1C521E92B200F064FE18A90870002818 +:10EA100003D08328B1D102272FE10D20287020A830 +:10EA20008088401C28E120990C22C9095143C91C47 +:10EA30001E91A14204D92098400671D500201BE107 +:10EA4000417800780902014310A801851B980078DD +:10EA500042062898C01C1D90002A62DA05206A46EA +:10EA600010721B980078C00944D0082268460272D0 +:10EA70008181A01A87B268468782289806901E98DE +:10EA8000201A81B26846C1811D980490401806F092 +:10EA900064F9079006982599C0190890491E08A89E +:10EAA000017102A83099F8F7E6FF07460021684691 +:10EAB0000172002F1BD0022F18D1009808A9007BEB +:10EAC0000979401E884210DDA848289A836CC90045 +:10EAD0005A50816C08A80079C000001D0C520098A3 +:10EAE0000099407B401C4873C7E00527EAE00620F8 +:10EAF00069460872002000901E980021201A20907C +:10EB000082B21B9B10A8DB1C008D00F03EFC01466E +:10EB100018A80170002268460272832903D003E01E +:10EB200093E00720E4E702271B98007840060ED503 +:10EB30008E484188C90506D510AA018B128D9142D5 +:10EB400001D100214162002018A9087094E0FF2142 +:10EB5000013110A80186018D844801832099018428 +:10EB60001D994162132085E0052C6ED3417803780E +:10EB70000A021A4310A90A859446092269460A72B4 +:10EB80000021009101222499D20311438AB2C17855 +:10EB9000807809021B9B01435B1D604600F0F5FB7A +:10EBA00018A90870002269460A720122520210A9AF +:10EBB0000A86832802D0002805D099E06B48098D89 +:10EBC000018302277EE06948006D002807D02046B7 +:10EBD0001B99FFF789FB18A9087000284DD12B4617 +:10EBE000324620461B9900F024FB074645E01B985F +:10EBF000022C4078009064D1002801D0012860D117 +:10EC00000A2168460172009901731AAA002000992E +:10EC1000FFF73BFC0146684641730021817302A85F +:10EC20003099F8F728FF0746002168460172012154 +:10EC3000890210A80186022F08D04C48006C807908 +:10EC4000002807D018A9087020E04BE04749009839 +:10EC5000088337E0002F03D0812018A9087031E025 +:10EC60001AAA01200099FFF710FC18A908700028C3 +:10EC700003D119202870012030806846007A0028CE +:10EC800004D002A83099F8F7F6FE0746002F2BD0E3 +:10EC900018E0062038E522993448090711D5012CDF +:10ECA0000FD10B2269460A72C08888810021042096 +:10ECB00003F040F8082010A90886BFE62098400617 +:10ECC00010D50327294810AA4188128E114341808C +:10ECD0005005400E04D01F99289808601F98848022 +:10ECE000384693E404200FE518A8007800280ED0D9 +:10ECF000012028701B980078687010A8008DA870FB +:10ED0000000AE87018A8007828710520308017489C +:10ED100010AA4188128E91434180E1E7FFB5064673 +:10ED20009FB000201B903178012088401149124A81 +:10ED3000084010A908860D494988914203D000284F +:10ED400004D0080702D5012023B0F0BD219D002783 +:10ED50002F7020983C46018810A8018418A80771DC +:10ED600000F00BFB6846077202A907E0F0190020CB +:10ED70000102000009F80000FFFF0000FA480164EA +:10ED800001464031826C1A91097BC9000839571835 +:10ED900022994164307801282AD0022809D003281A +:10EDA00079D12878800980011D302870EE48B1881B +:10EDB000C1803078022804D12878800980011B3076 +:10EDC000287001A8009010A8008CEB1CC01E82B215 +:10EDD000B088002100F07DFC0028E1D1B188697085 +:10EDE000090AA9706946888810A9C01C08842DE109 +:10EDF000717918A801713079012802D00228CFD189 +:10EE0000E6E0D9487F2340881B010246184010AB3A +:10EE10001886802840D006DC102810D020280ED07C +:10EE200040280AD120E0FF38013859D0FF38013896 +:10EE30006AD0FF38FF3802387ED0052491E0D00632 +:10EE400001D5082000E010201B90042069460872BC +:10EE50000020888118A800900195318919AB1CAA5F +:10EE60001B98FFF76BF977E0BF4B3289188B824212 +:10EE70004FD10A221B92002973D101A9009110A938 +:10EE8000098C6B1C491E8AB2002100F022FC18A9D3 +:10EE900008710B2017E0F6E0B34B3289188B8242E1 +:10EEA00037D10C221B9200295BD101A9009110A936 +:10EEB000098C491E8AB21946098C6B1C00F009FCAA +:10EEC00018A908710D2028706946888810A9401C6F +:10EED0000884042069460872A348008B888140E0BA +:10EEE000A14A3389108B834213D112231B9300292B +:10EEF00037D1536A002B05D00091128C00F045FAEF +:10EF000018A9087113205EE097483289038B9A4252 +:10EF100001D00424E7E016221B92026D002A09D1D9 +:10EF2000F268002A06D002651A98328A82821A9AFA +:10EF30000020D082002900E02FE012D1B888396883 +:10EF4000FFF7D2F918A9087100280AD1B8882B4612 +:10EF500018AA396800F06DF90446022818D0042C6C +:10EF600016D0B88800280FD06846007A002804D050 +:10EF700002A82299F8F77FFD04460120694608722D +:10EF8000386803900020B880002C5FD0052C7BD01F +:10EF90006846007A032873D0A5E018201B9000294A +:10EFA00005D071483189018300210165D9E76E4898 +:10EFB0000246017E18320120FFF767FA18A908718E +:10EFC0000028CED119202870012010A90884C8E794 +:10EFD0001A98407B002856D0307AC0001358001D84 +:10EFE0000193105A1D9000291AD100F0CAF9062089 +:10EFF00069460872002000901D980F3882B201986F +:10F000008178437808021843019B0021DB1C00F043 +:10F01000BCF918A90871002269460A72832830D009 +:10F02000002118A8017110A801840121684601720D +:10F03000019803901A981A99407B401E48731A98B9 +:10F04000807B002802D01A99401E887310A8008E79 +:10F050007F21090102468A431DD0434800220088CF +:10F0600011468300042002F0C0FD3F483178017151 +:10F0700010A94088098E08433B4948800FE003E00F +:10F080002BE002242FE00524374810AA4188128E75 +:10F090009143418027E034494A8882434A80684648 +:10F0A000007A002805D03048416C02A8F8F7E3FC4C +:10F0B000044618A80079002815D01B986870012014 +:10F0C00028702948008BA870000AE87018A80079F9 +:10F0D0002871052110A8018405E02348416C02A88D +:10F0E000F8F7C9FC044600F04CF91F484088400579 +:10F0F000400E20D11A98807B00281CD1B8880028A7 +:10F1000019D0209910AA0988118422990091396890 +:10F1100018AA219BFFF74FFA044602280BD00120C2 +:10F12000694608723868039002A82299F8F7A3FC90 +:10F1300004460020B88010A8018C20980180204649 +:10F1400002E600B50022D243074997B04A8004285E +:10F1500007D1022268460270097901710021F8F78F +:10F160008AFC17B000BD0000F019002010B5394C22 +:10F1700003780022216C012B02D0022B44D126E01F +:10F180000B78002B01D0042B03D10A71226C0321D0 +:10F190001170216C83880A79D200921D8B52216CE8 +:10F1A0000A79D20008328918C2880A80216C038942 +:10F1B0000A79D2000A328B524289206C0179C90047 +:10F1C0000C314252216C0879401C087120E00A740D +:10F1D000226C81889180216CC288CA80226C01894E +:10F1E0001181226C41895181216CC068C860616CB9 +:10F1F000206CF8F740FC0146022807D0206C007C08 +:10F20000002802D1002903D0812010BD832010BD29 +:10F21000002010BD8178012909D100880521C9028B +:10F22000884202D0491C884201D100207047052045 +:10F23000704710B51488844201D2052010BD1724F0 +:10F240001C701080421E491C581C05F025FD002032 +:10F2500010BD0000F019002010B58B78002B11D0E4 +:10F2600082789A4207D10B88002B0BD003E0091D4E +:10F270008B78002B08D08B789A42F8D103880C88C1 +:10F28000A342F4D1002010BD812010BD10B500298B +:10F2900002D001290DD102E00088000501E00088BC +:10F2A0008004800F07D001281CD0022809D0032831 +:10F2B00010D0812010BD002901D0032010BD0220F4 +:10F2C00010BDF5F7EEFD03280CD004280AD0002865 +:10F2D00006D009E0F5F7E5FD042803D0022803D0A5 +:10F2E000052010BD002010BD0F2010BDF3B5C81CB7 +:10F2F00080080E46800081B0B04201D08620FEBD5D +:10F30000FE4C354626600198A08000202081E080D8 +:10F3100014E0B807A978800D0843F94905F036FDD7 +:10F32000E088401CE080B80607D42089401880B2ED +:10F3300020810199081A8019A8600C352F88780758 +:10F34000E7D40020A072FEBDEC480C22C1880089E1 +:10F350005143081880B2704770B51346E74A451804 +:10F360009488AC4201D2842070BD126810180A46FD +:10F37000194605F091FC002070BDE049012088721B +:10F380007047DE49002088727047FFB589B0970446 +:10F390000E460546BF0C029200F034FA040021D05C +:10F3A000002069460873D548807A012812D00121CF +:10F3B0002046FFF76BFF002815D12078400609D5BD +:10F3C0000221684601730582218841828682C782B4 +:10F3D0000C9806900298000407D500273E460125A8 +:10F3E00001970CE001200DB0F0BD2078A1788007D6 +:10F3F000800D0843C249019005F0C8FC0D460298F3 +:10F4000040040AD50198A84207D12088E1788005F8 +:10F41000800F00020843B04201D3AE4201D9072059 +:10F42000E1E7B81980B20290A84201D90D20DAE7CD +:10F430006846007B002804D003A8F8F718FB0028D2 +:10F44000D1D10198A8420BD1208803210902884319 +:10F4500002998905890F0902084320800298E0700B +:10F460001298002800D007800C9800280CD0207833 +:10F47000000609D4A0683A4680190C9905F00CFCE6 +:10F4800020881021884320800020ACE7FFB59B4DE9 +:10F4900081B00E46E8882F680C21009048433C1844 +:10F4A0009749039805F072FC0A462889E11B8446B7 +:10F4B0000C314018318880B28B0601D5002300E062 +:10F4C00013461818AB8880B2834202D8842005B056 +:10F4D000F0BD0098894D401C80B2E88021800D99D4 +:10F4E000002900D00C600399A170E2702188039D6F +:10F4F0008908AD058900AD0F294303252D02A943D5 +:10F500009505AD0F2D0229430425294321800C992F +:10F51000002900D0088001998978A1710199098892 +:10F52000A1803178890601D50B9905E073496244C1 +:10F5300092B20A81991AC919A16000212173327807 +:10F54000920601D50020C2E700910B9B0A9A04990C +:10F55000FFF71BFFBBE7FEB5044600F053F90700B9 +:10F5600008D0664D641EE8880190A6B2286834462B +:10F57000009015E00120FEBD0C2000996043095A5F +:10F580008A060BD489078A0D0099801C085C5C49A7 +:10F59000104305F0FBFB2889401A2881641CA4B2A3 +:10F5A0000198A042E8D8EE8000203870FEBD002807 +:10F5B00003D0401E0880002070470120704710B51E +:10F5C0004E490288CB889A4201D3822010BD0B6835 +:10F5D0000C21514359180B88CC789B059B0F1B02BB +:10F5E000234341608C7904738C884481C38189688A +:10F5F000521C016102800281002010BD01210182A4 +:10F600007047FEB505460020C043088068680F4675 +:10F6100081786846817068680188684601800021A9 +:10F620008171288A2C88A04200D304462C8234E0C1 +:10F63000288A401C2882301D6968FFF70DFE0028CB +:10F6400029D139882F48814201D1601E38806888CD +:10F65000A04227D33088F1788005800F000208434C +:10F6600002906946301DFFF7F7FD002813D1298964 +:10F67000244881421AD000213046FFF707FE0028B7 +:10F6800009D12A890298824205D1E968B06805F05B +:10F69000D6FA00280AD0641CA4B2204600F0B2F8C2 +:10F6A0000600C5D1641E2C828220FEBD7C80B0790C +:10F6B000B871B088B8803088388130788007810D83 +:10F6C000B078014379810298B881B0683861002030 +:10F6D000FEBDFFB585B014460F46059800F092F8C0 +:10F6E000050037D00548BE05807AB60D01281CD02C +:10F6F00000212846FFF7CAFD002805E0481A00202F +:10F7000001020000FFFF000022D1287840060CD53E +:10F71000012168460170059981802988C180068190 +:10F720004481F8F7A4F9002812D12888AA78810723 +:10F73000890D11438005800FEA7800021043BE4214 +:10F740000AD0374A914207D3611E814204DD0B2063 +:10F7500009B0F0BD0120FBE7864201D90720F7E799 +:10F76000801B82B2A24200D922460E98002800D007 +:10F7700002800898002804D0A8688119089805F02C +:10F780008BFA0020E4E770B514460D4600F03AF815 +:10F7900000280DD001882980002C0DD001788078B8 +:10F7A0008907890D01431E48814203D2012002E0EE +:10F7B000012070BD00202070002070BD70B516467D +:10F7C0000D4600F01FF804000DD02D882580FF2E77 +:10F7D00016D0A807A178800D0843114905F0D6FA84 +:10F7E000002E06D101E0012070BDFF31FF31033151 +:10F7F00089B2A170A80880008905890F084320807C +:10F80000002070BD0749CA88824207D3002805D06E +:10F810000C22096850430C380818704700207047C4 +:10F8200001020000481A0020F0B585B00E460546DA +:10F830000020694608707078FE49C00003900C589B +:10F84000FD4F002D0ED0022D73D0002C72D02078E9 +:10F85000801E030005F0AEFC09837F7F7F83797FE4 +:10F8600077727F00002C03D1F4A16B2005F0B1FB6F +:10F870002078801E030005F09DFC09065E5E5E197F +:10F88000365E50545E003078062803D0EBA1762017 +:10F8900005F09FFBB8687168806C032205F0FCF9E5 +:10F8A000012069460870002835D1CEE730780C2851 +:10F8B00003D0E2A1812005F08CFBE06800780028ED +:10F8C00006D0B8687168806B102205F0E5F928E071 +:10F8D000B8681021006B05F03CFAB868816A006BCB +:10F8E0000A787168F1E730780D2803D0D3A194200D +:10F8F00005F06FFB04206946087071684878097844 +:10F9000000020843B9684A6A517812780902114323 +:10F91000484069468880084608E0C8A1AF2005F045 +:10F9200058FB6846007800288FD06846F5F7BEFA85 +:10F930008BE727E01CE0C1A1B420F0E7B86861695B +:10F94000006CFEF708F8A16900E0E168B868006C97 +:10F95000FEF701F803E0B9A1E32005F03AFBB8682F +:10F960002146006CFDF7F7FFB24A03990020505082 +:10F97000022D07D0002D05D0012D03D0AFA1EF201F +:10F9800005F027FB05B0F0BD10B501780124012971 +:10F9900002D0022910D112E04268A74800218260FB +:10F9A0000170A4486C38C166016741678167D289DC +:10F9B00002214C3001F0E1F90024204610BDFF2067 +:10F9C0009EA1163005F005FBF7E7F0B505469EA1B0 +:10F9D00003C997B014911390002008A908759549A0 +:10F9E0002A781031944C0491217805910126914F89 +:10F9F000A168130005F0DEFB0CEF07309AF0EDEC88 +:10FA0000EBEAE9E9E8EF20700124FF264F360546CE +:10FA100010A80570457001F0C1F90746012803D010 +:10FA200086A1304605F0D5FA10A93846FFF7FCFE4E +:10FA30002046641EE4B20028EAD10A206946087014 +:10FA40006846029501F088FA002803D0FF207BA1C8 +:10FA5000583068E0002646E3C86A0078C0072FD017 +:10FA6000012069460870684601F076FA002804D043 +:10FA7000FF2072A16B3005F0ACFAA068006CFDF7B6 +:10FA800061FF050004D1FF206CA16E3005F0A1FAE2 +:10FA900008984078C0003D5006202870A068016892 +:10FAA00069600069A8606448C01CE860284601F0ED +:10FAB00053FA022804D0FF2060A1783005F089FABB +:10FAC000A068C06A00784007C4D501206946087064 +:10FAD000684601F041FA002804D0FF2057A1803089 +:10FAE00005F077FAA068006CFDF72CFF050004D143 +:10FAF000FF2052A1833005F06CFA08984078C000CE +:10FB00003D5006202870A068016869600069A860FF +:10FB10004948401DE860284601F01EFA022899D0A5 +:10FB2000FF2046A18D3005F054FA93E7A96800291B +:10FB300033D0694608712979012932D0022904D0CD +:10FB4000FF203EA1A73005F044FA3A4810221030B9 +:10FB5000A96805F0A1F837481030364920314860CF +:10FB60002078C1062CD5EF2108402070032069467B +:10FB70000870304810300290684601F00FF90446D2 +:10FB8000022808D0002C06D0012C04D0FF202BA185 +:10FB9000B83005F01EFA69466FE101216A4611711D +:10FBA000DBE7244A04996C3AD06748608860C860F3 +:10FBB0000621A86803F0FCFE1E4910310860CAE760 +:10FBC00020210843207045E7A1E15AE119E1E6E070 +:10FBD00086E056E000E081E2886C407980090128E7 +:10FBE00004D0FF2015A1CC3005F0F3F9A068017A0C +:10FBF000002906D1416B406801F01FFAA16801207D +:10FC00000872012069460870684601F0A5F90028CD +:10FC100004D0FF2009A1D73005F0DBF9A068006C03 +:10FC2000FDF790FE050004D1FF2004A1DA3005F0B5 +:10FC3000D0F90DE0C01A0020B40000207372635C9C +:10FC4000736D2E630000000004411A8800A4800038 +:10FC500008984078C0003D5002202870A068416B91 +:10FC60006960806CC01CA860284601F075F904002A +:10FC700004D0FF20FD49E23005F0ABF929462831D8 +:10FC8000FBE0172268460272012202708078820827 +:10FC9000287992008007800F024368468270FB201B +:10FCA000024028794007C00F8000024368468270F6 +:10FCB000EA8882804A6C02A901F090F9002804D0F9 +:10FCC000FF20EA49F73005F084F9052108A80175FD +:10FCD0006846017A0187A0680026406C0F9006E212 +:10FCE000012069460870684601F036F9002803D003 +:10FCF000DE49DF4805F06DF9A068006CFDF722FED3 +:10FD0000060004D18320D949800005F062F9A0687B +:10FD1000006CFDF717FE1290002804D1D448D34997 +:10FD2000801D05F056F9D3488068006CFDF70AFE87 +:10FD3000040004D1CE48CD49093005F04AF90898AD +:10FD40004078C0003E500A203070287A30716868D0 +:10FD5000C84DB060A868406C3061172030731298AD +:10FD6000B4617061304601F0F7F80446022808D00B +:10FD7000002C06D0012C04D01120BC49400105F014 +:10FD800028F92046316AFFF74FFD28780521014008 +:10FD9000042900D05EE6FB21084028702AE005987F +:10FDA00040084000207082071CD5FD2210402070C2 +:10FDB0000F206A46107017201071486C0290684638 +:10FDC00000F0ECFF0546022808D0002D06D0012DDA +:10FDD00004D0A748A5493A3005F0FBF86946284603 +:10FDE000FFF722FD2078052101400429D2D1FB2113 +:10FDF00008402070072008A908759E48807808767A +:10FE000028E6012069460870684601F0A5F8002838 +:10FE100004D097489549543005F0DBF8A068006C91 +:10FE2000FDF790FD060004D113209049400105F034 +:10FE3000D0F890488068006CFDF784FD040004D180 +:10FE40008B488A495A3005F0C4F808984078C000B9 +:10FE50003E5007203070874880684068706068684E +:10FE6000F460B060304601F077F8040004D08048B8 +:10FE70007E49653005F0ADF8316A2046FFF7D4FCC5 +:10FE8000E8E5012069460870684601F065F8002839 +:10FE900004D0774875497A3005F09BF80898407887 +:10FEA0001190A068006CFDF74DFD060004D15120B3 +:10FEB0006E49C00005F08DF8A068006CFDF742FDAA +:10FEC000040004D16A486949823005F082F811982B +:10FED000C0003E50C019296941600920307068682F +:10FEE0007060A868B060A889B08163483061103044 +:10FEF000B4617061304601F02FF8022804D05C48EC +:10FF00005A49903005F065F811982875A2E55A4ACB +:10FF100000208C32107002206B46187001922879F4 +:10FF2000002801D0107098E0524803230C3040683C +:10FF3000FB2703708378504A9B089B003B408370EB +:10FF40004B7A00271B07DB0F43708C3257600B7B0B +:10FF5000C370CB7A1372537A0C7D5B08E4075B00A5 +:10FF6000E40F23430C461534D460FD242340CC7E9B +:10FF7000E407A40F234353720B461C3313614771EC +:10FF800007718B7A3B4A9C070C32A40F1268012C34 +:10FF900004D19478A407A40F012C1DD09B089B00CA +:10FFA0008B7293785B0702D48B7A5B0728D54B7AE8 +:10FFB00013AF5B075B0FDC005B00E3181478640091 +:10FFC0001B19DBB2DC083C5D5F077F0F0623DB1BE0 +:10FFD000DC40A3079B0F14E04C7A53796406640F4E +:10FFE00023404371147906273C400471E4001C430C +:10FFF000204B5C7083789B089B005B1C8370D0E770 +:020000040001F9 +:1000000000238478FB273C408F7A7F07FF0FBF00D7 +:100010003C4384704C7A6407640F04705078012864 +:1000200007D1487A000704D5032008A908750220E3 +:100030002DE0022B27D0012B2BD00F4B0020049A50 +:10004000D86750609060D06018467C30024610320D +:100050005060887AFB2210408872684600F09EFE4D +:10006000040035D0012C34D0004907E03CFC0000EE +:1000700009020000B4000020541A00206520C000CE +:1000800004F0A7FF25E0032008A9087501200876E1 +:10009000E3E77E4C0D21E01C04F05BFE20461030AF +:1000A0004460022008A908750E94A868002807D0AB +:1000B0000068206005997648202211430170CCE742 +:1000C00005980007C9D57349734804F082FFC4E757 +:1000D000002669462046FFF7A7FB04E06E486D49FD +:1000E000203004F076FF08A8007D002802D00DA87B +:1000F000F4F7DCFE304617B0F0BDF0B597B00C4613 +:10010000054600206946087061482F785F4E0178E7 +:10011000583E82683B0005F04DF80BAA8407263B49 +:100120004C6B79798F9CAA002B20694608730CA927 +:1001300003A8FDF73DFC002804D05748554941303D +:1001400004F047FF55490D9804F020FE4F48016028 +:100150004F4869680C300160AA684260019108202C +:10016000694608708CE08A0610D5DF2211400170C4 +:1001700003202070454810304168A1604068002885 +:1001800002D00020207177E00120FBE7102256E02A +:100190002B20694608733D4903A85C39FDF708FC2C +:1001A000002804D03C483B496A3004F012FF042088 +:1001B0001BE02A206946087303A8102202306968F0 +:1001C00004F06AFD07A810220230A96804F064FD5B +:1001D0002E4903A85C39FDF7EBFB002804D0392039 +:1001E0002C49000104F0F5FE05202070666043E014 +:1001F0002A79002A02D001221143017005206946A4 +:10020000087028798880A868029039E0D06A402375 +:10021000018819430180D06B6968102204F03CFD0D +:100220002AE0FB2211400170062069460870A96887 +:1002300068680291019023E0CB0703D002221143AA +:10024000017058E70F20207017202071506CA060BB +:1002500012E0937A9B0706D0D26A44781388FF3461 +:1002600001342343138004221143017004E00A483F +:100270000849BD3004F0ADFE684600780028E0D0A3 +:100280006846F4F713FE36E701207047D01A0020C5 +:10029000B40000203CFC00001503000040420F00A9 +:1002A00070B504780D460646230004F083FF0B1C4E +:1002B000181C1C1C1C07181C1C181C0000210520E5 +:1002C00001F038FDB068007805280CD0FA4800220B +:1002D000008811468300052001F087FC03E000211F +:1002E000052001F027FD002D0ED0002028702946A2 +:1002F0003046FFF702FFF1482978005D884201D1BE +:10030000032070BD022070BD00213046FFF7F5FECE +:10031000002070BD30B5E8494B68497A0A011146A2 +:100320000C315C5C032C0CD0044600252034257174 +:1003300025725C5CA500AA18641C5C5498500320CC +:1003400030BD062030BDF0B50446264620360D46A9 +:100350003279012008218FB0002A0CD0012A21D047 +:10036000022A2BD0032A04D12A78052A01D1297028 +:1003700000200FB0F0BD01203071606800280AD065 +:10038000A069017061684160216981606169C16033 +:10039000FFF7C0FFEDE707202870206968606069FB +:1003A000A86009E029780729E3D1022030710520EF +:1003B0002870C248203868600320DAE729780529C8 +:1003C000D7D1A08910280AD9103880B2A081A1689D +:1003D0001023091803A86A6800F054FE2DE01028C5 +:1003E00004D0C1B20BAA1020A76809E0102322692B +:1003F000A16817E0491EC9B2401EC0B27B5C13540D +:100400000029F7D100280AD0401EC0B28021115423 +:10041000002102E0401EC0B211540028FAD16269E6 +:1004200010230BA907A800F02DFE102307A903A88D +:100430006A6800F027FE032030716068019003A80D +:10044000029005206946087029466846FFF728FF94 +:100450008FE7F0B5044626460D4620363179012057 +:100460008DB000290BD0012938D0022905D1297877 +:10047000052902D10920287000200DB0F0BD217D92 +:100480006846CA07D20F02738807C10F6846017415 +:10049000012203A905A800F0EDFD04A9012205AF82 +:1004A000481D00F0E7FD0722B81CE16800F0E2FDFE +:1004B00007A807220130216900F0DCFD6068019087 +:1004C00009A80290102305AAA16800F0DBFD012015 +:1004D0003071052168460170294621E029780529F7 +:1004E000CBD1062203A8E16900F0C4FD04A80622CE +:1004F0000230A16900F0BEFD042106A800F0B2FDA3 +:100500006068019007A80290102303AA696800F0B0 +:10051000B9FD0220307105206946087029466846F9 +:10052000FFF7BEFEA9E7F0B5074685B00D460020EF +:10053000694608703E466248203632798179133820 +:1005400001240078130004F035FE180DFEFDFCFBBD +:10055000FAF9F8F7F6F5F4F3F2F1F0EFEEEDECEB73 +:10056000EAE9E8E7B968039100291BD0012269464E +:100570000A7003220A710A224A7139690291397993 +:1005800000297DD0039A1278002A7AD00C2A78D2DA +:10059000130004F00FFE0BEF09EF354D8498B0F116 +:1005A000EDECEF000020C8E30021062001F0C2FBC3 +:1005B0003879072866D1424C133C2078022802D0B3 +:1005C00000287FD101E00020207003980079C11F2E +:1005D0000A2901D30A2598E1607039480722C01F13 +:1005E000039900F047FD0120307120700220694618 +:1005F00008703348801F01903869401C029037E230 +:1006000011293DD12E4C133C0228DAD16068617863 +:10061000007A884201D9062577E1039926481022FD +:10062000491C303800F026FD03202070022045E1EF +:100630001129E6D1224C133C0428C2D10520207098 +:1006400003991D481022491C203800F013FD062094 +:100650003071786903210170626851684160164900 +:100660002039816021460C31C160C91D0161017DC5 +:10067000537A49084900DB07DB0F1943017502E093 +:1006800070E354E384E1D3688361FD231940537A16 +:100690009B07DB0F5B0019430175116976E10229A5 +:1006A000AFD1002867D005206946087103984078CB +:1006B00048713869029051E3241B00203452010034 +:1006C000DB00002082E011299BD1F74C06287DD168 +:1006D000A0680399806B1022491C00F0CBFC062116 +:1006E0006846017038690290002168460171FFF781 +:1006F000D7FD072057E00B299BD1EB4C07287ED173 +:10070000A0680399006B0222491C00F0B3FCA068AA +:100710000822406B039917E00EE116E3FDE2DDE2EB +:10072000C7E2BCE29EE267E248E241E21FE2F5E195 +:10073000DFE1C8E1BEE1B1E1A5E16AE147E128E11D +:10074000DAE0BEE0AFE075E0C91C00F093FC0621E2 +:100750006846017038690290002168460171FFF710 +:100760009FFD204613304179490849003EE041E0B1 +:100770001BE001E05CE0EFE2112991D1CA4C0828AE +:100780003DD1A0680399C06B1022491C00F072FC97 +:10079000062168460170386902900021684601719F +:1007A000FFF77EFD09202070C9E208298CD1BE49DF +:1007B000092824D1039842788868016C0A7003994B +:1007C000406C0622891C00F055FC00E017E0062171 +:1007D0006846017038690290002168460171FFF790 +:1007E0005FFDB14813304179FD221FE041715EE2A7 +:1007F0003071F2E11129C0D1AB490A2801D0082596 +:1008000083E088680399806C1022491C00F032FC58 +:10081000062168460170386902900021684601711E +:10082000FFF73EFDA04813304179FB221140DDE780 +:1008300007256AE0297802297ED19B490128FBD14E +:100840006A684A6015780846002D5CD106216A4620 +:1008500011703969029107211171029902240C70FB +:10086000CA785207520FCA704B795B075B0F4B7106 +:100870008B795B075B0F8B71D20701D18A714A714B +:1008800005460A794078824200D26A70864807227B +:10089000133000F0EFFB00202C70307101466846E9 +:1008A000FFF7FEFC4BE229780429C5D103286FD15C +:1008B00008227E48696800F0DDFB032030710420C7 +:1008C000F2E129780429B7D1774F0328B4D17748CA +:1008D00008220830696800F0CDFB04203071786888 +:1008E0004168002906D00321297000212971406840 +:1008F000A86072E10320D7E1287803289CD12879E9 +:1009000000281AD00546002D16D006216846017031 +:100910003869029002216846017102980521017030 +:10092000457000216846FFF7BBFC01216846017055 +:1009300004210171457115E293E15B49A86849689A +:100940000028486001D15A48486005203071786914 +:10095000032202704A684260544A8260524A0C3252 +:10096000C260D21D0261027D4B7A5208DB07520041 +:10097000DB0F1A430275CB688361FD231A404B7A63 +:100980009B07DB0F5B001A4302750969C16130E107 +:100990000DE12978092988D14349032885D104200C +:1009A00008700620694608703869029011200871A5 +:1009B000029803210170401C1022696800F05AFB64 +:1009C00000216846FFF76CFC00203071B7E1297800 +:1009D000092993D1052891D134496A68203910201A +:1009E000401EC0B20B5C145CA34203D0002004255F +:1009F00030718AE70028F3D107203071786904212B +:100A00000170294949684968416028498160103965 +:100A1000EEE028780A28BED10620694608703869B9 +:100A2000029011200871029804210170401C1022CC +:100A30001E4900F01FFB00216846FFF731FC1A48F1 +:100A4000102140786A68091AC9B2101800F00AFB30 +:100A50006868019014481330C178C9070BD08179B8 +:100A6000002902D14079002805D0082030711BE10F +:100A700029466846EFE0072069460870002168466D +:100A8000FFF70EFC5FE128780E2884D106486968DC +:100A900081608969407808700920A9E6C80701D0FB +:100AA0000A20FFE00F20A3E6C8000020141B00204E +:100AB0001452010028780F2879D1A8683861287964 +:100AC00038730B20FAE628780428F5D1FC4C6968C5 +:100AD000A0680822006A00F0CDFA0C203071786915 +:100AE0000722B9690270A268D3684360126A826003 +:100AF0007EE028780D28DFD1F14C6968A0680223D8 +:100B00000269C06900F0BEFA0D20307178690621D3 +:100B10000170A1688A684260096966E028780C283B +:100B2000CAD1E74C6968A0686278406A00F0A2FA0E +:100B30006078A2681021091A526AC9B2101800F030 +:100B400091FA0621684601703869029011226846C0 +:100B50000271029810220170A168401C496A00F0DD +:100B600089FA00216846FFF79BFB0E206EE028788B +:100B70000F2876D1062168460170386902900B2152 +:100B800068460171029C0720CD4D2070A8680222A2 +:100B9000C169601C00F06EFAA8680822016AE01CB6 +:100BA00000F068FA00216846FFF77AFB7AE7C8E0B0 +:100BB000880701D5102075E0132019E628780F2842 +:100BC0004FD1A86838612879387311203071BC483A +:100BD000816848690078002801D00324CAE0786958 +:100BE00006220270C9684160B6498160B549091D95 +:100BF000C160FFF78FFB30E0B14880684169097838 +:100C000000290CD129780C292BD1AD4C6968806A58 +:100C1000102200F02FFAA16801204969087006210E +:100C20006846017038690290112168460171029886 +:100C300008210170A249401C89681022896A00F0CD +:100C400019FA00216846FFF72BFB122030710921A9 +:100C5000684601702946FFF723FB044601287DD032 +:100C600088E06FE028780F286CD10620694608706C +:100C70003869029008200871029809210170904992 +:100C800089680A78D207D20F427049680622801C10 +:100C900000F0F0F900216846FFF702FB8CE74807F7 +:100CA00005D514203071092069460870E0E6162049 +:100CB0009EE528780F2851D1A868386128793873C3 +:100CC000152030717869062101707D4989688A682C +:100CD0004260096981607B49891D89E728780C2871 +:100CE00045D1774C6968A0681022C06A00F0C2F94B +:100CF0000620694608703869029011200871029830 +:100D00000A210170A168401CC96A102200F0B2F9E2 +:100D100000216846FFF7C4FAC9E7694813304079F3 +:100D2000002810D0C10703D065480621017006E0F5 +:100D3000800701D5082000E00A20614908700024DE +:100D400018E00BE013E0172052E55D49002805D0BC +:100D50000020307108700A206946087068460078E3 +:100D6000002804D000216846FFF79AFA002454486E +:100D700000210170204605B0F0BD10B5524BFF2494 +:100D80005C72586019721A80002204E0491EC9B2D0 +:100D90000B010C33C2540029F8D110BDF0B54A4EF6 +:100DA0000546717A01208DB0FF2971D00127727A32 +:100DB000736811015C180C31595C8900091F645873 +:100DC0006A7021780B0004F0F5F90B960709272CBF +:100DD00059888D4A4F5492002F707CE02146203173 +:100DE0000A9109790120002902D0012967D10EE07A +:100DF0006068019005A802900D21C01C00F032F936 +:100E0000032205A8A16800F035F90A984EE0297878 +:100E1000052974D106215DE029462046FFF719FB1C +:100E200069E021462031069109790120002902D08C +:100E3000012964D10EE06068019007A802900822A1 +:100E4000E16800F017F9082209A8A16800F012F97A +:100E500006982BE02978052951D10A213AE0294644 +:100E6000204600F01AF946E029462046FFF76BFAC3 +:100E700041E029462046FFF756FB3CE02146203161 +:100E8000059109790120002903D0012937D11DE0FE +:100E900056E06068019007A802900822A16800F05F +:100EA000E9F8082109A800F0DDF8059869460771FE +:100EB0000520087029466846FFF7F2F91BE00BE0B1 +:100EC000C80000200C520100241B002029780529AD +:100ED00015D10B212970002011E02946204600F091 +:100EE00023F908E02946204600F04EF903E02946A0 +:100EF0002046FFF7C9F9002801D001280CD125624E +:100F0000717A736809010C315A5C521E1206120E76 +:100F10005A5401D003204AE70328FCD0737A726840 +:100F200019011D010D312C46515C7172FF270D34E2 +:100F300017550C35545D002C02D0FF2903D1737274 +:100F40000DB0F0BD21460C010D34145DFF2CF9D11C +:100F500009010D315354F3E770B5AD4C0546607A85 +:100F6000214603464A6811E0010108460C30105C36 +:100F700008E0401EC0B286008E199659AE4201D1DB +:100F8000042070BD0028F4D10D31505CFF28EBD156 +:100F90009F480021007A01E0491CC9B2884204D967 +:100FA0000E010C36965D002EF6D1884201D8052040 +:100FB00070BD08010D30135461722846FFF7AAF97D +:100FC000032806D0617A626809010D31515C6172B3 +:100FD00070BD28462830FFF7E1FE70BD10B50478DB +:100FE0000123012C14D10C78022C11D30B23137084 +:100FF00083785B075B0F537002220A708088002899 +:1010000005D0830000221146062000F0EEFD0023EB +:10101000184610BD0EB50022012105280AD0062869 +:1010200007D1684601700221017142710021FFF76A +:1010300064F80EBD68460170F6E710B58EB00C4638 +:1010400006216A461170019072480290001D0390BB +:101050006846FFF781FF102220460B9900F00AF83E +:101060000EB010BD002202E0491EC9B24254002950 +:10107000FAD1704703E0521ED2B28B5C8354002A2F +:10108000F9D1704730B505E05B1EDBB2CC5CD55CB6 +:101090006C40C454002BF7D130BD3EB5044620301F +:1010A0000D4602790121002A02D0012A3AD10FE02F +:1010B00061680191574908310291012101710520B0 +:1010C0006946087029466846FFF7EAF8014629E0B4 +:1010D0002878052826D169681022A06800F087F8D2 +:1010E0006868C07B000606D54A4AA06810231832FB +:1010F0000146FFF7C7FF1022A168E06800F077F80B +:10110000A068C07B000606D5424AE068102318326A +:101110000146FFF7B7FF07202870A0686860E06805 +:101120000021A86008463EBDF0B5044626460F469D +:1011300020363179012089B0002909D0012905D153 +:101140003978052902D10C203870002009B0F0BD93 +:10115000606803AD01900295022203A8A168FFF721 +:1011600089FF0222A81CE168FFF784FF0C21281DDB +:10117000FFF778FF01203071052069460870394675 +:101180006846FFF78DF8E1E710B5034620331C7978 +:101190000122002C04D0012C10D0022C25D11EE0FD +:1011A00001211971C16806220A7040684860194817 +:1011B000801C8860801CC86008460CE00C780C2CF1 +:1011C00013D102221A71C268052313704968516055 +:1011D000806890601046FFF79DF8024605E00878A9 +:1011E0000B2802D10D2008700022104610BD10B54A +:1011F000002409E00B78521E5B0023430370401C5F +:101200000B78491CD2B2DC09002AF3D110BD0000D2 +:10121000241B00200C52010070B50D46040012D0B2 +:10122000002D10D02101284603F093FD10225449CF +:10123000284603F031FD52480121083801804480DE +:101240004560002070BD012070BD70B54C4E00247B +:101250000546083E11E0716820014018817BAA7B99 +:10126000914209D1C17BEA7B914205D10C222946EA +:1012700003F0E5FC002806D0641C30888442EADBD9 +:101280000020C04370BD204670BD70B50D460600FD +:101290000AD0002D08D03A4C083C20886188401CB8 +:1012A000884203D9042070BD102070BD3046FFF77E +:1012B000CCFF002801DB401C0AE0208861680001A7 +:1012C00040181022314603F0E7FC2088401C2080A3 +:1012D0002870002070BD70B514460D001FD0002C82 +:1012E0001DD00021A170022802D0102817D108E0DB +:1012F000687829780002084311D00121A17010807C +:101300000BE02846FFF7A1FF002808DB401CA07077 +:10131000687B297B000208432080002070BD0120EB +:1013200070BD70B5054614460E000AD0002030701E +:10133000A878012807D004D9114908390A889042B1 +:101340000BD9012070BD002C04D02878207028888B +:10135000000A50700220087010E0002C0CD0496880 +:101360000001411810391022204603F095FC28781E +:1013700020732888000A607310203070002070BD30 +:10138000EC00002073490968016000207047714932 +:1013900008600020704701216F4A704B002803D07D +:1013A000012805D06E48704791630020187001E055 +:1013B000D1631970002070476A49012008606848AD +:1013C000801C70470422684B6649002805D05A608B +:1013D000086901221043086108E0086940084000DC +:1013E00008619A605C490020C03188600020704725 +:1013F0005C490622002808D0012809D002280DD017 +:1014000003280FD05648401C70470869904302E0FB +:1014100008699043801C0861002070470869904368 +:10142000001DF8E708691043F5E74E494A6A024390 +:101430004A62002070474B494A6A82434A62002050 +:1014400070474849496A0160002070474549CA69A8 +:101450000243CA61002070474249CA698243CA6197 +:10146000002070473F49C96901600020704730B5CE +:101470000546002072B601463A4A384C4032002DEB +:1014800011D00123012D0CD0022D02D0072062B60D +:1014900030BDA3706478002C01D09363F7E79163AB +:1014A000F5E7A170F9E7A170F9E72F4904208860FA +:1014B00029490020C03188602849012008702B4943 +:1014C0000A688023120A12021A430A602849086037 +:1014D000704722480078704770B5EFF31080C50759 +:1014E000ED0F72B61D4C6078401C0006000E607057 +:1014F00003D120A1CC2003F06CFD6078012806D137 +:10150000A078002803D01749012040318863002DBE +:1015100000D162B670BD70B5EFF31080C507ED0F56 +:1015200072B60E4C6078002803D112A1DC2003F0C3 +:1015300050FD6078401E0006000E607006D1A07855 +:10154000002803D00749002040318863002D00D1D6 +:1015500062B670BD0004004040000040FC00002066 +:1015600004200000000500400003004000E400E00B +:1015700000E100E07372635C736F635F706F7765A7 +:10158000722E63008107C90E002808DA0007000FD9 +:1015900008388008B94A80008018C06904E08008D3 +:1015A000B74A800080180068C8400006800F704766 +:1015B000B44948788978884201D3401A02E0212250 +:1015C000511A0818C0B27047AE492331487889785B +:1015D000884201D3401A02E02122511A0818C0B2F1 +:1015E0007047A849463148788978884201D3401A23 +:1015F00002E02122511A0818C0B27047A04810B565 +:101600000C300168FF22120291430122D2031143E0 +:1016100001609C490020233148708870233948704C +:101620008870463148708870974802F0FFFA9648F3 +:10163000401C02F0FBFAF2F7A9F900F015F910BD11 +:1016400020207047B4E770B50C4605460026FFF72A +:10165000AFFF8C49A04214D30A46203A002320460B +:10166000641EE4B200280BD08878105C287088785B +:101670006D1C401CC0B288702128F0D18B70EEE741 +:10168000012600F0F1F8304670BD202070479BE73E +:1016900070B50C4605460026FFF796FF79492331C1 +:1016A000A04214D30A46203A00232046641EE4B226 +:1016B00000280BD08878105C287088786D1C401C3E +:1016C000C0B288702128F0D18B70EEE7012600F0BF +:1016D000CBF8304670BD202101700020704710B556 +:1016E0000446FFF77EFF2070002010BD70B50C4649 +:1016F0000546FFF776FF63494631A04215D30A46F7 +:10170000203A00232046641EE4B200280BD08878DB +:10171000105C287088786D1C401CC0B2887021282D +:10172000F0D18B70EEE7002400E0584C00F09CF8FC +:10173000204670BD70B50C460546212904D9FF200E +:1017400053A1473003F045FC4C484068103840B284 +:10175000FFF718FFC6B20D20FFF714FFC0B2864294 +:1017600007D2FF204AA14D3003F033FC01E0F2F72D +:101770004DF921462846FFF766FF0028F7D070BDD7 +:10178000F8B5404E07462336B1787078212200F034 +:1017900060F8354623353B4C00280ED0A1786078A0 +:1017A000212200F056F8002814D0A9786878212268 +:1017B00000F04FF800281AD025E032497078C91C93 +:1017C0000F547078401CC0B2707021281BD10020CB +:1017D000707018E02B49607820390F546078401CF5 +:1017E000C0B2607021280ED1002060700BE0254946 +:1017F000687826310F546878401CC0B26870212880 +:1018000001D100206870B1787078212200F021F8B1 +:1018100000281DD0A1786078212200F01AF8002855 +:1018200016D0A9786878212200F013F800280FD08C +:10183000F2F7CEF8144802F001FA01214903884278 +:1018400003D013A1C12003F0C4FB0F4802F00EFA2D +:10185000F8BD401C884205D0904201D1002901D03A +:10186000002070470120704710B5074802F0E6F9E4 +:10187000002801D1F2F79BF810BD000000ED00E058 +:1018800000E400E0501B0020FF00002007200000C3 +:101890007372635C736F635F72616E642E630000CA +:1018A00010B5284802F0C2F9002803D026A11D2057 +:1018B00003F08FFB2348401C02F0B8F9002803D046 +:1018C00021A1212003F085FB10BDF1B5224D6F68E9 +:1018D00001261C4802F0B2F91A4C002803D1002658 +:1018E000601C02F0C3F91D4A1D490120506000BF71 +:1018F00000BF00BF00BF00BF00230B604B60009B18 +:101900006B60106000BF00BF00BF00BF00BF086871 +:10191000002802D148680028F9D048680028E4D19E +:10192000002E04D06F60601C02F088F907E0601C94 +:1019300002F084F90028D3D1024802F097F9002080 +:10194000F8BDC2E7010100207372635C736F635FCF +:101950006563622E6300000000E5004000E0004087 +:1019600000E1004030B5EFF31081CC07E40F72B610 +:101970001D4A116910230D461D431561002C00D12D +:1019800062B61A4DC406E40E0120A0402C68044241 +:101990000DD0C8060AD4EFF31080C007C00F72B68E +:1019A000116999431161002800D162B630BD20BF92 +:1019B00040BF20BFEAE70E4908784A78401CC0B211 +:1019C000904200D008707047084A094820BF40BFC5 +:1019D00020BF4178037843701368002B02D103784D +:1019E0008B42F3D00020704700ED00E000E200E001 +:1019F00003010020FEB5F64C07466068FF213E015A +:101A000081552178FF2913D0090108314158324608 +:101A1000491E083209020192090A805800F0CEF9E5 +:101A2000002802D02478254615E061682078885582 +:101A30002770FEBDE64842680198115828010090C1 +:101A40000830105800F0BAF9002806D1E0482C46BA +:101A5000416800980D5CFF2DECD1DD482101406804 +:101A600085554754FEBD70B5D94A04460020157A05 +:101A700053680AE00201561C9E5DA64203D10C3257 +:101A80009A588A4204D0401CC0B28542F2D8FF2046 +:101A900070BDF8B5CE4F3E7801F01AFE0146FF2E1C +:101AA00071D03401254678680835405900F086F930 +:101AB00002280CD97868405901F0FDFD01F008FEBC +:101AC00001467868405900F079F902285BD8C0498E +:101AD0004868025D0A70A11C425C002A0CD0521EAC +:101AE000425441590122D20589180902090A41517B +:101AF0003046FFF77FFF30E0631CC25C0092221D7E +:101B000094468258002A10D001239B029A420FD992 +:101B10009205920D43595703DB191B021B0A4351CF +:101B20006346C3589A1A920A09E0FF21C1540AE099 +:101B3000435952039A181202120A42510022425487 +:101B40003046FFF757FFA2480C344168C26800983E +:101B5000095980001258009890479D4C2078FF2822 +:101B600011D0000161680830085801F0A4FD01F0AF +:101B7000AFFD01462078626800010830105800F07F +:101B80001DF9022886D3F8BDF8B51C4615460E4649 +:101B90000746FF2B03D38FA1D42003F01AFA8C48F9 +:101BA000FF21C76045600472067401700022427014 +:101BB000104604E00201521C401CA954C0B2A042CD +:101BC000F8D3F8BD70B5824C06466578207C854216 +:101BD00003D380A1E72003F0FCF9E068A900465098 +:101BE0006078401C6070284670BDFFB581B01D460E +:101BF000FF2401F06DFD764F064679780198814209 +:101C000003D874A1F52003F0E4F971480021037AA8 +:101C1000406810E00A019446521C825CFF2A25D0DD +:101C2000019FBA4205D162460C328758029A974208 +:101C30001ED0491CC9B28B42ECD8FF2C18D0210110 +:101C40004A1C019B83540B460C33029AC250039BDF +:101C50005F4F0022012B0ED00B1DC25001239B02AF +:101C60009D4216D9AA05920D08D008E00C46E0E77F +:101C7000FF2005B0F0BD0B1DC550EFE71A4653031A +:101C80009B190E461B0208361B0AAA1A8351920A98 +:101C900009E0002D00D101256B039B191D022D0ABF +:101CA0000B460833C550891C42543D463E782046B9 +:101CB000FFF7A0FE2878B04214D000016968083010 +:101CC000085801F0F8FC01F003FD29786A68090161 +:101CD000083152580146104600F070F8022801D22F +:101CE000FFF7D7FE0198C4E770B50C46054601F032 +:101CF000EFFC064621462846FFF7B5FEFF2817D021 +:101D0000334D04012046696808300858314600F018 +:101D100055F80121090340186968A41C095D400BAE +:101D2000002901D089020818002800D1012070BDC7 +:101D3000002070BDF3B581B00F460198FFF793FE08 +:101D4000FF282AD0224E3578726829460C4604E0D6 +:101D5000844205D025462301D45CFF2CF8D11CE039 +:101D6000FF2C1AD0A5421CD10801105C3070FF284E +:101D700015D000010830105801F09DFC01F0A8FCBE +:101D800001463078726800010830105800F016F8EB +:101D9000022806D2FFF77DFE03E00020FEBD01F021 +:101DA00092FC39460198FFF79FFF22017168FF23DB +:101DB000541C0B558A5C2B01CA54FEBD401A00020C +:101DC0000121000AC905884200D90020704700009F +:101DD0009C1B00207372635C736F635F74696D6535 +:101DE000722E6300F0B500241C4A01211C4B08032D +:101DF000546018601B4B1C601B4C20601B4804691E +:101E0000E443E406E6170469761C10252C430461BC +:101E1000174C6160174D296000E020BF1F68002F3C +:101E2000FBD0002E03D107691026B74307619068E5 +:101E30008005906801D5104A10436960A1600021B7 +:101E400019600121084A09031160F0BD10B504466C +:101E5000FFF7C8FF2060002010BD000000C5004053 +:101E600080E100E000C1004080E200E000ED00E021 +:101E700000C3004000C0004000FCFFFF70B51F49D8 +:101E80000A68002A17D000231D4601244A68521C04 +:101E90004A60092A00D34D600E792246B2400E688E +:101EA00016420AD072B60B6893430B6062B649685B +:101EB0000160002070BD052070BD5B1C092BE5D3BF +:101EC0000FA1362003F085F8F5E7012010498005C1 +:101ED00008607047EFF31081CA07D20F72B6012174 +:101EE00081400648036819430160002A00D162B6A8 +:101EF000EBE70248002101604160704708010020C3 +:101F00007372635C736F635F6576742E63000000A9 +:101F100000E200E00120810708607047012081078E +:101F2000486070471048C068C00700D00120704763 +:101F30000D488068C00700D0012070470A484069FA +:101F4000C00700D0012070470748C06970470649A4 +:101F50008A69D20306D589698907890F814201D12F +:101F6000012070470020704700040040F8B5FE4C87 +:101F7000207BE17A88421AD00126FC4D0027E07AC6 +:101F8000215C14200A4642435019037C052B0FD0D4 +:101F9000062B1BD0072B28D0437C012B33D0F4A178 +:101FA000F64803F016F8207BE17A8842E7D1F8BDC5 +:101FB0000674E07A0A2807D0E07A401CE072491CD7 +:101FC000C8B2AA5802210CE00020F7E70674E07AB4 +:101FD0000A2808D0E07A401CE072491CC8B2AA580E +:101FE00003219047DFE70020F6E70674E07A0A282D +:101FF00007D0E07A401CE072491CC8B2AA580821F8 +:10200000EFE70020F7E74774E07A0A2807D0E07A84 +:10201000401CE072491CC8B2AA580721E1E7002021 +:10202000F7E770B5D64D06206872D648002444778D +:10203000047738300473C472D34801F0F7FDD348F5 +:102040000475EC72D249601E88606C71AC70EC70E3 +:102050002C716C70CF48022104704470CE4804701B +:10206000047528300470491EFAD10120F1F750FDA3 +:102070000020F1F74DFD0120A871F0F741FDC748A0 +:10208000F0F750FDC64C2070C648F0F74BFD60706D +:10209000F1F7E2FC70BD10B5F1F709FDC04C2078F6 +:1020A000F0F75EFD6078F0F75BFDB54C207A002814 +:1020B00005D0FFF730FAF0F7E2FD0020207210BDE6 +:1020C00070B5AF4CA079002804D0A9A1B64802F0A1 +:1020D00080FF70BDE07A002804D11320A4A1400144 +:1020E00002F077FF0126A6710025E572607A0421CF +:1020F000142250439D4A80180174A5488168491CE8 +:1021000004D0691E81600120F1F702FD0020F1F783 +:10211000FFFCF1F7E3FC01F023FEF1F7E8FDA34833 +:10212000056005600120A249C0030860F0F74AFF7E +:1021300098480078022804D0032804D1E0780028C9 +:1021400001D0A67000E0A570F1F7BDFD70BD03469B +:1021500086490520142242435218203A127F002A51 +:1021600004D0401E0006000EF4D1704714224243F2 +:1021700051180A46403AD362012220390A77704743 +:10218000012805D0032805D1002903D1002070477C +:102190000029FBD010B47A4C002363707D4A0028DC +:1021A00090700CD002280AD007291AD20B007B4469 +:1021B0001B79DB189F441505070D0F111300D37011 +:1021C00003E01B2000E03A20D0700120607010BCBA +:1021D00070475820F8E77720F6E79620F4E7B52017 +:1021E000F2E710BC0020704710B56A484078F1F75C +:1021F00085FD80B210BD411E1422504310B55B4ACC +:102200008418203C042902D8207F002803D158A13B +:10221000684802F0DEFE207F012803D054A1664802 +:1022200002F0D7FE0020207710BD70B5554C607FBE +:10223000217F884201D1012500E00025F1F7F7FC5C +:10224000F1F75CFD617F227F914201D1012100E025 +:102250000021A942EBD170BDF7B50646481E844661 +:102260008EB0C0B2142204905043404A85182846CC +:102270000595007C2D1D07282AD13B4C0027E07ACC +:10228000227B824221D0235C049A934201D1012710 +:1022900001E0002F04D00A2811D0421CA25C225475 +:1022A0000A280ED0401C227BC0B28242EBD1002F04 +:1022B0000BD0207B002806D0207B401E04E00022AB +:1022C000ECE70020EFE70A202073059A0120107444 +:1022D00060462B4C04280FD814204143234808188B +:1022E0002038007F002807D00598007C012807D0FF +:1022F0001098807A012807D01DA1304802F069FEAD +:102300001098807A012871D10598184B007C02281A +:102310001AD0154C207B0A2874D0207BE17A401C0F +:10232000884204D1C92012A1800002F052FE059912 +:1023300001204874217B04986054207B0A2865D0D2 +:10234000207B401C20731CE1607A049A0146904275 +:1023500006D0014614277843C018807C9042F8D1FB +:10236000627A824235D12BE0A81C0020B81C0020E4 +:102370007372635C72656D2E63000000D50500000A +:102380003C1D0020701C0020481D0020901C0020D7 +:102390001C1D002012010020C81C0020931A0100FF +:1023A000100100206D1F01007F02000000F50040B9 +:1023B00080E200E0CD020000CE0200001703000022 +:1023C000617A14225143C918897C61720121A1727A +:1023D00007E014224243D21814277943927CC9188B +:1023E0008A74142206215043C01881741098007A10 +:1023F000062819D203007B441B79DB189F4408127E +:10240000100E0C0AE07A00288CD090E7002099E7A3 +:1024100000210FE0B4210DE073210BE0322109E02F +:102420000A2107E0062105E0FF20FE49E23002F024 +:10243000D0FD0021109802910068401A2860109980 +:10244000097A002912D00221401A0102090A2960E2 +:1024500010980268406810180002000A686010981E +:10246000807A0228109803D0007B74E00421EBE707 +:10247000007A002813D0022202981018844610987F +:102480004268604608301718E748029A4078904240 +:1024900002D9E278002A04D03846083005E0042248 +:1024A000EAE7029A801AC0190830627A062A1CD01C +:1024B000627A14235A43DD4BD2185268914214D0E9 +:1024C000DB4B0793617A14225143D84A89184A6832 +:1024D0008968921B891B12020902120A090A90429A +:1024E0003AD89A4238D8994236D83018C01B0002E0 +:1024F000000A286010996044CE4AC9680002000AA8 +:102500009446421A01239B0507929A4201D2104633 +:1025100014E00A1A09929A4201D207980EE0079A2B +:102520006346624503D9591A0818401C06E0099A07 +:10253000624506D9181A4018401C404200285FDC4A +:1025400003E0B849BC4802F044FD2868C019000205 +:10255000000A6860002028726868082708300002B6 +:10256000000A68601098407AA8721098007A687221 +:1025700003280ED200280CD0FFF7D4FC002803D08B +:1025800007E0002011B0F0BD02983A210F1A322066 +:102590000290A5480178012901D0032909D1417889 +:1025A0000298814205D9E078002802D10298081AE1 +:1025B000C71928689E4A801B844601026868090A78 +:1025C000801B03021B0A8F421AD81746914217D864 +:1025D000BB4215D8617A062916D0677A6146062271 +:1025E000039200923A4614235A43904BD2189368B0 +:1025F0009B1B8B4216D80397977C062FF2D177E06E +:10260000049801F059F9BCE7059802220499027474 +:10261000627A062A00D0627A827461720120A07206 +:1026200011B0F0BD062F63D0002239469446142223 +:102630007E4B4A43D21853689B1B834229D2917B1D +:10264000AB7A99421FD805980521049C7B4D0174F3 +:10265000287B0A2811D0287BE97A401C884203D1C4 +:102660007049774802F0B5FC287B2C54287B0A2857 +:1026700007D0287B401C287383E7E87A0028EFD036 +:10268000F2E70020F7E701218C46917C0629CED1A4 +:1026900002E0604600282AD03D46009114202A46D8 +:1026A000424362480621161831741038007B0A280C +:1026B000624816D0017BC07A491C814203D161A1D6 +:1026C000634802F086FC5D48017B4554017B0A2982 +:1026D0000BD0017B491C0173B57C0098A842DDD169 +:1026E00006E0C07A0028EAD0EDE70021F3E7009782 +:1026F0000599022008744D4D607AB84207D10599BA +:1027000000988874049860720120A07221E00398F8 +:10271000062F0FD0062803D14AA14E4802F059FCDB +:102720000398142250434019049981740599009824 +:1027300088740EE0062803D142A1474802F049FC04 +:102740000398142250434019049981740599062076 +:102750008874012011B0F0BD70B50D4606463F49A2 +:1027600000242046891BA04103D236A13C4802F038 +:1027700030FC3C490020491BA04103D231A13A481A +:1027800002F027FC394A70190021821A8C4101D3CA +:102790003749401870BDF8B5401EC0B214214843F7 +:1027A00022494518687B062813D203007B441B7915 +:1027B000DB189F44020C0A080604002066E0B420DF +:1027C00010E073200EE032200CE00A200AE0062020 +:1027D00008E0FF201BA1E23002F0FBFB697B002038 +:1027E000002953D0022140186968002440180C21A8 +:1027F00000026956000A00294ADBF1F77FFA174AFE +:1028000006460C27EF570021101AA14103D20DA153 +:10281000134802F0DEFB13490020C91BA0412CD253 +:1028200008A127E07023010012010020B81C00203D +:10283000FFFF3F00FFFFFF0014070000A81C00205F +:10284000090200007372635C72656D2E6300000004 +:10285000C7030000DF030000E5030000FF7F841EC4 +:10286000F50300000020A107F60300000080841E8D +:1028700000807BE1FB4802F0ACFBFB4AF019002131 +:10288000821A8C4101D3F9494018F8BD0421AAE706 +:10289000F1F734FA0C21695600224018F449091A5C +:1028A000A241F2D24042F8BDF0B5064683B0F148ED +:1028B0000190457A029534687068001B0702EE4863 +:1028C0003F0A001B0090062D2DD0142029464143BD +:1028D000EA480122081884464168E748920586467E +:1028E000081B904210D3631A93420DD302467046E0 +:1028F000724503D900984018401C05E073450ED975 +:10290000411A0819401C404200280CDA6046029522 +:10291000857C0198C0790028D5D003B0F0BDD84996 +:10292000D84802F056FB0298854226D0142148432D +:10293000D2490123401802908068CF499B058C46FC +:10294000011B8646994210D3221A9A420DD3634640 +:10295000614503D900997144491C06E01946624556 +:102960002DD9091A0819401C4142002905DD029899 +:10297000B17A807B814200D37446062D15D0BF49C1 +:102980001420454368184268121B1202120ABA4208 +:102990000BD2B27A837B9A4200D38468857C0198FB +:1029A000C0790028B9D1062DEAD13068A042B4D050 +:1029B000E0190002000A3460706003B0F0BDB04955 +:1029C000B04802F006FBD8E7F0B5AF4904464868C6 +:1029D00085B0C005C00D1CD0103840B200280CDAFC +:1029E0000207120F083A920892005118C96980072D +:1029F000C00EC1400806800F09E08108A34A890083 +:102A0000891809688007C00EC1400806800F002899 +:102A100008D000262078002806D0012804D0002005 +:102A200005B0F0BD0126F5E72079062813D2030092 +:102A30007B441B79DB189F44020C0A080604002023 +:102A400018E0B42010E073200EE032200CE00A20E1 +:102A50000AE0062008E0FF208949E23002F0B9FAD6 +:102A600021790020002905D002214718814D002E30 +:102A700002D003E00421F8E70020E87102AA6946C9 +:102A8000A068F1F745F9694608228A56E06801A96D +:102A90008018C01C01221F2801DA019209E003AA54 +:102AA000F1F736F96846007B002802D00198401CF7 +:102AB000019000990198401808300002000A019026 +:102AC000C81B0002000A009060796946887200986D +:102AD0000390F1F7ACF8009A019B121A181A6C498E +:102AE00012020002120A000A8A4216D8884214D83A +:102AF0006846FFF7D9FE00990398814205D0C819AE +:102B00000002000AF1F7FAF8A0600120E979002933 +:102B100086D0002EB0D005B0F0BD0020F6E7F3B5AA +:102B20008FB05C480C460B9001F088F85A4A0F9918 +:102B3000504E5518203D594F00280BD05848007D65 +:102B4000002803D057A15A4802F043FA2078012800 +:102B50007DD05FE1787F0A280CD0787F397F401CD8 +:102B6000884203D14FA1534802F033FA207801285C +:102B700004D00CE0387F0028F4D0F7E7E87F002885 +:102B800003D048A14C4802F024FA0120E877787F6E +:102B90000F991422494D504340190174207802289E +:102BA00023D0787F14214843451920792872607911 +:102BB00068722A460C322946A068F1F7A9F80C2061 +:102BC00028560F2804DD1F3828732868401C286009 +:102BD0000C22AA56281DE16802908818C01C1F28E4 +:102BE0003FDA029901200860FDE027494868C005E6 +:102BF000C00D20D0103840B200280CDA0207120FA6 +:102C0000083A920892005118C9698007C00EC14065 +:102C10000806800F09E081081C4A890089180968A4 +:102C20008007C00EC1400806800F002803D11DA1F7 +:102C3000234802F0CEF9787F14214843451900213A +:102C4000E0686A460591117303AA05A900E0D8E07F +:102C5000F1F75EF86A460C2010560F2832DD01208D +:102C600031E0B3E0F60300000080841E00807BE1C9 +:102C7000FF7F841E3C1D0020FFFFFF00B81C0020CA +:102C8000442801001407000000ED00E000E400E02B +:102C9000FFFF3F00481D002016010020701C00208F +:102CA000901C00207372635C72656D2E63000000DF +:102CB00017050000F5040000FA040000B01B002016 +:102CC0000605000000200599401808900220A8720F +:102CD0002079287260796872A068291DC01C039150 +:102CE0001F2801DA01200AE006AAF1F711F8684668 +:102CF000007E002804D0039803990068401C0860F7 +:102D0000287A062813D203007B441B79DB189F44E2 +:102D1000020C0A08060400200FE0B4200DE0732026 +:102D20000BE0322009E00A2007E0062005E0FF2042 +:102D3000FD49E23002F04DF900202179002943D00D +:102D400002214118069168680831401808990590D9 +:102D500008180699401A0C900020F071F0F767FFF0 +:102D600004462860089820180002000AE860707A7B +:102D7000062825D0707A14214843EC494018406851 +:102D80000090059940180002000A0190687A69468F +:102D900088726846FFF788FD0098019A001B121B95 +:102DA00000021202E24B000A120A0C99984207D85C +:102DB0008A4205D80099069808180002000A28607F +:102DC000F0790028C8D110E00421BAE704AA0299DA +:102DD000F0F79EFF6846007C002804D00298029914 +:102DE0000068401C08602078A872787F0A2806D006 +:102DF000787F401C78770B9800F038FF47E0002080 +:102E0000F8E7E87F002803D0CAA1CD4802F0E1F836 +:102E10000120E877CB490F9808742078022803D165 +:102E2000C4A1C94802F0D5F8C64D2079287260794E +:102E300068722A460C322946A068F0F769FF0C2018 +:102E400028560F2804DD1F3828732868401C286086 +:102E50000C22AA56281DE16802908818C01C1F2861 +:102E600003DA0299012008600CE003AA0299F0F746 +:102E70004FFF6846007B002804D002980299006842 +:102E8000401C08602078A872AE4901200875797F3F +:102E9000387F814223D0747A062C22D0F0F7C7FE07 +:102EA00014214C43A1496218117C042917D003292D +:102EB00015D0536892681B1A101A1B0200029C4915 +:102EC0001B0A000A082B0AD30A468B4207D89042F5 +:102ED00005D8787F397F884201D0F0F7F4FE11B031 +:102EE000F0BD787F397F8842F7D111B0F0BD10B5C1 +:102EF0000020F0F7FAFD10BD10B50120F0F7F5FD48 +:102F000010BDF1B5009802281FD0904C607A0628B9 +:102F100003D188A18E4802F05CF80026A671012535 +:102F2000E572607A03211422804F5043C019017466 +:102F3000F0F7CEFE009800280CD001282AD00328F4 +:102F40007CD0B5207BA1C00044E082480078EFF738 +:102F50000DFEF8BD8048007F002803D075A17F4892 +:102F600002F037F865717C4D00202E60F0F7D0FD3F +:102F7000A968481C04D0012300221846F0F7FEFD82 +:102F8000607A617A401CC0B2142251437A58012100 +:102F90009047F8BD0120F0F7BBFD607900280DD007 +:102FA0006D488068401C09D0607A617A401CC0B2CC +:102FB000142251437A5806219047F8BD6648007F95 +:102FC00001280AD0022812D0032824D0042836D0A1 +:102FD00058A1634801F0FDFFF8BD2079002803D017 +:102FE0002671F0F77AFEE5705B480677F8BD207A27 +:102FF000002804D1FEF770FAEFF718FE2572607A08 +:10300000617A401CC0B2142251437A580021904783 +:1030100051480677F8BD504F0123397B786800226C +:10302000411A1846F0F7AAFD2079002803D026712E +:10303000F0F753FEE57002203877F8BD1BE0464EEE +:10304000217870680123411A00221846F0F796FD96 +:10305000207A002804D1FEF73FFAEFF7E7FD25724A +:10306000607A617A401CC0B2142251437A58002120 +:1030700090473577F8BD607A617A401CC0B214225F +:1030800051437A5805219047F8BD10B52F4C607A0E +:10309000062803D127A1334801F09BFF607A617AAB +:1030A000401CC0B214225143204A52580421904778 +:1030B00010BDF0B583B006200290F0F7B8FD234CA8 +:1030C0000090617A28480190062920D0617A142066 +:1030D000414316480918097C042918D0617A142242 +:1030E00051430818007C03287BD00198009A03689C +:1030F00040689B1A801A1B0200020D491B0A000A35 +:10310000082B6ED30A468B426BD8904269D812487E +:103110008068401C03D007A1144801F05AFF00202A +:103120006071607A062823E0A42C0100B81C0020FE +:10313000FFFF3F007372635C72656D2E63000000D9 +:103140001E050000901C0020240500003C1D0020EE +:1031500055050000100100201C1D00206105000025 +:103160009C050000AF0500002C1D0020EB050000B1 +:1031700007D16078002804D0FE48C178417081787A +:103180000170607A062815D0607A1421FA4A484303 +:103190008018007C04280DD1607A0290617A0120A9 +:1031A0001423594389180874617A59438918897C12 +:1031B0006172A072F14D687F297FF14F884233D050 +:1031C000F04E287F142148438019007CC05D0128FF +:1031D000287F07D048438019007CC05D02282FD08B +:1031E00044E001E2142148438019807A01280AD082 +:1031F000287F0221142250438019007CC155287F6A +:103200000A2808D009E0297F002014225143891997 +:10321000097CC8552AE0002001E0287F401C28775F +:10322000687F297F8842CCD1D74D287D00284CD09B +:10323000287CC15D012928D0C05D022830D03AE049 +:10324000287F142148438019807A012803D0CFA118 +:10325000D14801F0BEFE297F002014225143891974 +:103260008872297F51438919097CC855287F142108 +:1032700048438219287F48438019017C0098FEF753 +:10328000EBFF287F0A28C8D1C5E7A97A012904D015 +:103290000221C155002028750DE00021C1550AE02A +:1032A000A87A012803D0B9A1BC4801F092FE002001 +:1032B000A872297CC855287D002806D0297CB24AEE +:1032C0000098FEF7C9FF00202875029806281ED036 +:1032D00014214843A8494018017C012917D107212E +:1032E000AF4D0174287B0A283CD0287BE97A401C2A +:1032F000884203D1A5A1AB4801F06BFE297B02985F +:103300006854287B0A2831D0287B401C2873607AB7 +:1033100006287DD0A07A00287BD00020A072617A98 +:10332000142041439448A04B0A18566891681D46E2 +:10333000D2687C35DE67AA6069609C4D697E002991 +:1033400016D00226617A14228B4851430818407B1C +:1033500006281BD203007B441B79DB189F440A1408 +:1033600012100E0CE87A0028C4D0C7E70020CDE781 +:103370000426E7E700200FE0B4200DE073200BE007 +:10338000322009E00A2007E0062005E0FF207FA1A7 +:10339000E23001F01EFE00202873697E022901D070 +:1033A000012910D12969009A09188A1A1202120AF1 +:1033B0003A2A08D90320687632390802000A2861BF +:1033C000322028730AE0322808D2207A00280ED151 +:1033D000FEF782F8EFF72AFC012007E0207A0028A8 +:1033E00005D0FEF798F8EFF74AFC002020726149FB +:1033F0000822487820700978012901D0032906D1D4 +:1034000001212171297B884201D9421A083201E049 +:1034100091E0A1E0A378002B00D0921C2179002933 +:1034200001D1002B5DD09446614A00990092019A27 +:10343000176852687F1A511A3F0209023F0A090AA7 +:10344000BC451BD85A4A974218D8009A914215D8C1 +:10345000297B884223D92B69421A9A1A1202120A2E +:10346000101880190002000A2A616860002914D02F +:10347000032028770006000E3ED14CE0002020718A +:10348000A070297B002925D02869401880190002E6 +:10349000000A6860022028772EE00120E9E78142D7 +:1034A0000BD92A69511889190902090A696000288B +:1034B00001D00420DDE70220DBE7002B03D133A19C +:1034C0003C4801F086FD286980190002000A686006 +:1034D000002004E0296989190902090A696028772E +:1034E00019E0287B00280FD02969081880190002EC +:1034F000000A6860022028772869012381190022C8 +:103500001846F0F73BFB09E0286980190002000A21 +:103510006860002028770120F0F7FAFA607A142119 +:10352000484315490C22401882560123002069683F +:10353000F0F724FB10E00120F0F7EAFA0020F0F7A2 +:10354000E7FAF0F7CBFA207A002805D0FDF7E3FF81 +:10355000EFF795FB00202072A078002804D0F0F748 +:10356000BCFB0020E070A0706078002827D00148E4 +:10357000C17821E012010020B81C0020701C00203E +:1035800015010020B01B0020901C00207372635CAA +:1035900072656D2E630000000D0600002906000014 +:1035A000A81C00203B060000B01C00201C1D0020B1 +:1035B000FFFF3F008D060000417081780170207987 +:1035C000002806D00020CE49E0700978002900D1FB +:1035D0002071CC48017BC07A814203D0CA48407830 +:1035E000EFF7C4FA0120E07103B0F0BDF0B5C74CAD +:1035F0000746607A83B0062804D16F20C4A1000179 +:1036000001F0E7FC607A1421C44E48438019007C25 +:10361000032803D0BEA1C24801F0DBFCC14DA8685D +:10362000401C03D0BAA1C04801F0D3FC607A142139 +:10363000484381190C20085600216A4600911171F7 +:10364000C01901AA6946F0F763FB6A4604201056C8 +:103650000F2801DD012000E0002000994018696872 +:1036600040180102090AA9606079002804D00123EA +:1036700000221846F0F782FA03B0F0BD70B5AC4CEA +:10368000AA4A0B1AA34214D3451AA54211D3934256 +:1036900003D9101A43185B1C0BE0954204D9511A48 +:1036A0000818401C434204E099A1A24801F091FC93 +:1036B0000023184670BD10B50146012300220220E8 +:1036C000F0F75CFA10BD10B50220F0F721FA10BD3A +:1036D00010B5F0F7ACFA10BDF0B58C4D0446E87AA1 +:1036E00083B0002803D18AA1934801F072FC642CB6 +:1036F0004DD3924A00210846121B884147D3904877 +:10370000417F007F814242D18E48007D00283ED11A +:10371000687A1421814F4843824EC519306801AA46 +:1037200000196946F0F7F4FA6946042008560028A3 +:1037300002DD0098401C0090A96800986B680A1888 +:10374000D21A1202804B120A9A4220D8AA7C062A68 +:1037500008D014235A43D2195268511A0902090A8F +:10376000814214D3B068401C05D00120F0F7D0F995 +:103770000020C043B060306800193060A86800992C +:1037800040180002000A7061012003B0F0BD002063 +:1037900003B0F0BDF8B50646401EC4B214205F4920 +:1037A00060434518287C002804D1772058A10001E7 +:1037B00001F00FFC6248017F407F81420CD0634AD8 +:1037C00014234B439B181B7CB3420CD00A290CD00A +:1037D000491CC9B28142F3D15A48017D002961D008 +:1037E000007CB0425ED10020F8BD0021F1E7052940 +:1037F00003D0062901D0072928D101212974C17AD3 +:103800000023027B8A4221D00246565CA64201D1A7 +:10381000012301E0002B04D00A2911D04E1C965D33 +:1038200056540A290ED0491C167BC9B28E42ECD1DF +:10383000002B0BD0117B002906D0117B491E04E020 +:103840000026ECE70021EFE70A211173697C0029CB +:103850002AD06F74C17A0023027B8A4224D0425C52 +:10386000A24201D1012301E0002B04D00A2912D089 +:103870004A1C825C42540A290FD0491C027BC9B2FF +:103880008A42ECD1002B0FD0027B0146002A06D0E1 +:103890000A7B521E04E00022EBE70021EEE70A2239 +:1038A0000A7301E017480027297C01299FD16A7C0F +:1038B000002A9CD10120F8BD70B505461420174A96 +:1038C0000521684380180F4C0174207B0A2811D011 +:1038D000207BE17A401C884203D10DA11C4801F0F5 +:1038E00078FB207B2554207B0A2807D0207B401CB6 +:1038F000207370BDE07A0028EFD0F2E70020F7E7F0 +:1039000012010020A81C0020100100203C1D0020F6 +:103910007372635C72656D2E63000000B81C00203A +:10392000F10600001C1D0020F2060000FF7F841E2F +:103930000020A1071407000033070000FF1FA107A4 +:10394000701C0020901C0020FFFF3F00B01B0020D7 +:103950000902000010B501462022094801F09CF937 +:1039600007490020C877084610BD06490120486174 +:103970000548064A0168914201D100210160704763 +:103980004C1D0020000500401C010020BEBAFECAEC +:10399000064A10705170704704481C22017841712A +:1039A00042700170704770477047704720010020D7 +:1039B00030B50346002002460DE09C5C2546303DB4 +:1039C0000A2D02D30020C04330BD0A256843303899 +:1039D0002018521CD2B28A42EFD330BD70B50D46CA +:1039E000144608E00A2101F0D1F92A193031203AB1 +:1039F000641ED177E4B2002CF4D170BD10B5002361 +:103A000010E0040A00020443A0B2CC5C444020064B +:103A1000000F60400407240C44402006C00C6040A6 +:103A20005B1C9BB29342ECD310BD10B520380C4602 +:103A3000030001F0BFFB33E0DBE41B1F23272C3125 +:103A4000373C41474D5054585C606D7165697478DE +:103A50007C8084888C9094989C9FA2A6AAAEB2B8D1 +:103A6000BCC0C5CACFE9F0F3D3D7F800206800F096 +:103A7000DDF8D6E0206800F0E1F8D2E0206800F040 +:103A8000F5F8CEE0207840B200F092FAC9E0207854 +:103A900040B200F0B0FAC4E02078616840B200F0B3 +:103AA000C3FABEE0207840B200F0D3FAB9E0207843 +:103AB00040B200F0DEFAB4E02078217940B200F0A4 +:103AC000E9FAAEE02078616840B200F013FBA8E0AC +:103AD00000F01FFBA5E0206800F023FBA1E02078A8 +:103AE00000F038FB9DE02068FDF7F5FD99E02068C7 +:103AF000FDF7F5FD95E021792068FDF7F7FD90E0F1 +:103B00002068FDF73FFC8CE02068FDF740FC88E072 +:103B10002078FDF740FC84E0FDF74EFC81E0207842 +:103B2000FDF750FC7DE02078FDF762FC79E020682D +:103B3000FDF77BFC75E02068FDF77DFC71E02068F7 +:103B4000FDF77FFC6DE02068FDF780FC69E02068F0 +:103B5000FDF782FC65E02068FDF784FC61E02068E9 +:103B6000FDF785FC5DE00846EDF7F0FA59E0EFF768 +:103B700070F856E0EFF79DF853E02068EFF7A5F8EE +:103B80004FE0206800F080F84BE0206800F082F8F9 +:103B900047E0206800F083F843E02078A26861687D +:103BA00000F082F83DE0207800F089F839E02078D4 +:103BB00000F091F835E02078616800F098F830E086 +:103BC0002078616800F09FF82BE02179207800F0E0 +:103BD000D5FB26E02068FDF778FE22E02068FEF79E +:103BE0004DF91EE02068FEF731F91AE0204607C8BB +:103BF00000F0B9FC15E0206800F00CFD11E06168F0 +:103C0000206800F037FD0CE0206800F029FF08E094 +:103C100009E003E0FFE700F03BFF02E0206800F06E +:103C200073FF206010BD0120086010BD00210170ED +:103C3000084670470146002008707047EFF3108176 +:103C4000C907C90F72B60278012A01D0012200E02B +:103C5000002201230370002900D162B6002A01D09E +:103C600000207047012040037047E7E7EFF3108121 +:103C7000C907C90F72B600220270002900D162B6CE +:103C800000207047F2E7000038490968C9B20160B6 +:103C9000002070473549C0B2486000207047334962 +:103CA000C0B2886000207047082801D330487047B0 +:103CB000C3002E4818180161426100207047022895 +:103CC00002D32B48401C70472A4A0121C0008018AB +:103CD000016000207047022802D32548401C70472D +:103CE000244A0121C000801841600020704702284A +:103CF00002D31F48401C70471F4A8000C9B2801879 +:103D0000016000207047022802D31948401C704708 +:103D1000194A800080180068C0B20860002070470F +:103D200010B5FF20114AC043906008200021C30055 +:103D30009B1819615961401C1028F8D300200E4AC5 +:103D400005E0022803D383009B18196004E0830078 +:103D50009B181C68E4B21C60401C0428F1D310BD01 +:103D6000FF200249C04388607047000000F5014011 +:103D70000820000000F0014000F8014010B572B6C4 +:103D800000F0DEF800280BD0EDF78AFAFEF783F991 +:103D900000F0BBFA6F490020C86288626E49086073 +:103DA00062B6002010BDF3B5002501200007C06AEF +:103DB00081B0C0430006000E04D168480068401C72 +:103DC00000D1012572B600F0BBF8002801D062B620 +:103DD00087E0EDF7D1F9EDF767FA614C614A002110 +:103DE0002368CB40DB071FD00346CB40DB0718D14D +:103DF0004BB2002B07DA1E07360F083EB608B60096 +:103E0000B618F66904E09E08574FB600F6193668F2 +:103E10009B07DB0EDE4033069B0F012B04D0032BE8 +:103E200002D062B65148FEBD491C2029D8D3019C5E +:103E300001204F49230001F0BDF914222424242439 +:103E4000242424240B0D1012142016181A1C1E2FC3 +:103E5000002400E00124C86314E00224FBE70324EB +:103E6000F9E70424F7E70824F5E70924F3E70A242F +:103E7000F1E70B24EFE70C24EDE70524EBE707243B +:103E800000E00624D06901210002000AC9070843A6 +:103E9000D061002D04D009E062B601200003FEBD10 +:103EA0002C4D3448E862EDF7FFF9A8622A49324800 +:103EB0000860324902980860EDF7F6F9214600F0F3 +:103EC0000BFAFEF7AEF800F00DFC00F087FA01984F +:103ED000EDF7B4F9040062B603D0FFF74FFF2046B8 +:103EE000FEBD0020FEBD10B5044600F029F80028F4 +:103EF00000D001202070002010BD21490860002062 +:103F0000704710B50C46102808D011280BD0122885 +:103F10000CD013280ED00120086010BD6168206805 +:103F2000FFF741FF0AE0FFF729FF07E02068FFF7EE +:103F3000DAFF03E01249206808600020206010BD0D +:103F400005480D490068884201D1012070470020D2 +:103F500070470000000500401C0100200010001008 +:103F600000E100E000ED00E000E400E001100000EE +:103F70004000004000200000BEBAFECA2801002018 +:103F8000040000208107C90E002808DA0007000F8E +:103F900008388008814A80008018C06904E08008E1 +:103FA0007F4A800080180068C8400006800F704774 +:103FB00010B5044600F0DBF8002813D02046FFF7C8 +:103FC000E1FFC0B200F0E1F800280DD07549E2062B +:103FD0000B78D20E01209040002B08D04A68104385 +:103FE000486006E0704810BD6F48401C10BD6F4926 +:103FF0000860002010BD10B5044600F0B8F8002895 +:104000000BD06849E2060B78D20E01209040002BBD +:1040100005D04A6882434A6004E0634810BD6349A2 +:1040200080310860002010BD70B50D46044600F0D8 +:104030009EF800280BD05E480068E206D20E0121EF +:104040009140084000D001202860002070BD5648F3 +:1040500070BD10B5044600F08AF8002807D0E106CC +:10406000C90E0120884052490860002010BD4E480A +:1040700010BD10B5044600F07AF8002808D0E1061B +:10408000C90E012088404A4980310860002010BDD7 +:10409000454810BD70B50D46044600F068F800288C +:1040A00019D0284600F071F8002816D0A007C20EDB +:1040B000FF209040A907090E9140002C10DA22073A +:1040C000120F083A9308354A9B009B18DA6982431D +:1040D0000A43DA610CE0344870BD3348401C70BDBF +:1040E000A3082F4A9B009B181A6882430A431A6050 +:1040F000002070BD70B50C46054600F038F8002869 +:1041000005D02846FFF73EFF2070002070BD2648EE +:1041100070BDBFF34F8F21492648C860BFF34F8F52 +:10412000FEE770B51F4C05462178012000290ED10D +:10413000207072B600F0F8F81C4E8036316881436A +:10414000616000F0F1F8C043306062B60020287072 +:10415000002070BD13490A78002A06D0002804D137 +:10416000124A48681060002008700020704710B59F +:104170000446202805DA00F0D7F80121A1400842C2 +:1041800001D0002010BD012010BD012803D003285C +:1041900001D00020704701207047000000ED00E0D2 +:1041A00000E400E02C0100200120000000E100E01C +:1041B00000E200E00400FA05F8B504468007002597 +:1041C0000126002804DA5A48C563C66302208443E6 +:1041D000E00404D55748C563C66380148443600077 +:1041E00003D55548456080058443E00504D5534810 +:1041F000C563C66380158443A00404D55048C563D5 +:10420000C6634014844360042704C00FF90F88423A +:1042100003D04CA1612000F0DCFEB80F0AD04E495B +:10422000CD634E48C563C563CE63C663C6630320D2 +:104230008003844320050AD5494FFD632F20ECF706 +:10424000B3FFFE632F20ECF7AFFFF8148443002C7C +:1042500003DAFFF765FD640064084248044203D0B6 +:1042600038A1902000F0B5FEF8BDF0B500210A4657 +:10427000FF230446CC40E4072AD04CB2E606F60EF3 +:104280000125B540384E3560384E3560002C11DAC6 +:1042900025072D0F083DAE08354DB6007619F56996 +:1042A000A407E70E1C46BC40A5431446BC4025436A +:1042B000F5610DE0A6082F4DB60076193568A40704 +:1042C000E70E1C46BC40A5431446BC402543356060 +:1042D000491C2029CDD3F0BD70B5274C0D46206078 +:1042E000FFF76AFF2068FFF7C0FF2846EEF77AFD68 +:1042F000FDF7D6FAFDF782F9FFF712FDFDF7D5F8C5 +:10430000EEF7FEFB00F06AF870BD10B51A4C20689D +:10431000FFF752FF2068FFF7A8FFFFF701FDEEF758 +:10432000E6FD0020206010BD1348006870470000C3 +:10433000C01F0040C0CF004000E50140C08F0040DA +:10434000C0DF00407372635C736F635F636F6E66A0 +:1043500069672E6300000000C0EF0040C0FF00400E +:10436000C0BF0040FEFF0FFC80E100E080E200E003 +:1043700000ED00E000E400E03401002070B500240E +:1043800002460D4620462146002A1ED0012A04D0AE +:10439000022A04D0032A1ED103E0012002E00220F9 +:1043A00013E003202B0000F005FF07160507090B9B +:1043B0000D0F1600012108E0022106E0032104E0B0 +:1043C000042102E0052100E00621FDF7D9FE0028C6 +:1043D00001D0204670BD0724FBE70000B148002152 +:1043E00001708170704770B5AF4D01236B60AF4BAA +:1043F0001C68002CFCD0002407E00E6806601E68D4 +:10440000002EFCD0001D091D641C9442F5D3002031 +:10441000686018680028FCD070BD70B5A14C0D46CE +:104420006178884203D0A2A16C2000F0D2FD2B005D +:1044300000F0C0FE094F0625254F4F4F4F464F0055 +:104440002078022803D09AA1702000F0C2FD03203A +:104450002070A078022802D0012804D008E0A068CB +:1044600000F0CEFB04E02269E168A068FFF7BBFF23 +:104470000020A070FDF724FE0420207070BDFDF721 +:10448000D4FE01466068FFF7F9F805462078022857 +:1044900003D087A1842000F09CFD894A89498A487D +:1044A000954206D8401BC86086496078FEF737FB06 +:1044B00070BD854202D802224A71F3E7032003E06F +:1044C000A0780028FAD10220FDF704FD00F0E0F802 +:1044D00070BD77A1AD2000F07CFD70BD70B50546C4 +:1044E000FDF7A3FE6F4C60602078012803D070A117 +:1044F000B42000F06EFD73490220087000220A719A +:104500008D6003224A71704ACA6020706078FEF79D +:1045100006FB70BD10B5634CA078002802D120784E +:10452000002801D0112010BD6848FDF710FE607012 +:104530006078002803D001202070002010BD0320E7 +:1045400010BD10B50124020B64040121604BA04290 +:1045500002D29140186802E0203A58689140084021 +:1045600000D0012010BDF8B50E46910005464F1948 +:1045700014463F1F009100F054FB009980028919F6 +:10458000091FB14201D2012200E00022002C03D019 +:10459000FF2101318C4201D90920F8BD4D498D42DE +:1045A00019D3AF4217D3854205D2874203D228469A +:1045B0003043800701D01020F8BD8E420BD3002A73 +:1045C00009D12846FFF7BDFF002804D13846FFF780 +:1045D000B8FF002801D00F20F8BD3F483F490068D0 +:1045E000884205D0224631462846FFF7FCFE0FE000 +:1045F000FFF790FF0028EFD12A480121C6608560AF +:10460000046181702046312148431430FFF766FF72 +:104610000020F8BD10B504462E48800A84420BD312 +:1046200000F0FFFAA04201D8102010BDA0020446FD +:10463000FFF787FF002801D00F2010BD264827492B +:104640000068884203D0204600F0DAFA0AE0FFF75B +:1046500061FF0028F1D11348022184608170204855 +:10466000FFF73CFF002010BD1A48010B01208840D5 +:10467000401E704700B50B460246FFF7F5FF10429B +:1046800001D00F2000BD124802604360002000BD31 +:1046900010B5044C6078FDF7AEFD00202070A070CE +:1046A00010BD00003801002000E5014000E4014099 +:1046B0007372635C736F635F666C6173682E630013 +:1046C000307500006C1D0020D0FB01001B44010070 +:1046D00000060040006001001C010020BEBAFECAB6 +:1046E00010540000F74805218170002101704170CD +:1046F000C1708160704710B5F3490A78022A07D06B +:10470000CA681018C860C8689638FEF76FFF10BDF9 +:104710008A68101888608868F6E70378EB49EC4AE5 +:10472000002B02D0012B10D014E00379002B01D014 +:10473000012B0FD14379002B01D0012B0AD18368C3 +:10474000643B8B4206D2C06810E00379002B03D093 +:10475000012B01D0002070474379002B01D0012BA1 +:10476000F8D1C368643B8B42F4D280689042F1D8A0 +:1047700001207047F8B504460226FEF7BDFB00682D +:10478000002803D0D3A1BE2000F023FC0127CD4D8B +:10479000002C08D02078002817D0012805D0022846 +:1047A00011D0032813D02F710DE06068C82808D3FA +:1047B000FEF792FF002804D06068FFF79CFF0126F7 +:1047C00003E0002601E000F0F9F93046F8BD287852 +:1047D0000028F8D16068FFF7A0FF0028E3D06068E8 +:1047E0000078002826D0A878042803D0B9A1F820A2 +:1047F00000F0EFFBB44F00203870606800790128AA +:1048000000D00020387160684079002837D003203C +:10481000787160688168E868FDF79EFFB86060683D +:10482000C0689630F8600320A870A749E878FEF7C2 +:1048300076F9C8E7A4480221017061680979012965 +:1048400019D00021017161684979002915D003212F +:10485000417161688968963181606168C968C16029 +:10486000C068984C14346060FDF7DFFC20606F7006 +:104870000220A870A7E70321E4E70221E8E702206D +:10488000C6E7F8B58F4C0D46E178884204D0FF208A +:1048900090A11A3000F09DFB28468A4F0025012682 +:1048A0001437030000F086FC090612375A7C8D97F6 +:1048B000C4A0C400A078032807D0A078022804D0A0 +:1048C000FF2084A11E3000F084FBF8BDA0780328EF +:1048D00007D0A078022804D0FF207EA1223000F06B +:1048E00078FB0420A07025712078002810D1FFF7F4 +:1048F00002FFE078FDF74FFFE0607D49886A7D4A5E +:10490000024022617B4AD24310408862002050E07E +:1049100000F054F9F8BDA078032807D0A078022849 +:1049200004D0FF206BA1453000F053FB2078002815 +:1049300002D000F04FF9F8BDA07803281FD1042061 +:104940002AE0091A6048C1600146E078FEF7E7F8FE +:10495000F8BD0420FDF7BEFAA570F8BDA0780328C5 +:1049600007D0A078022804D0FF205AA1663000F0BA +:1049700030FB20780028DCD1A07803280BD0FDF78D +:1049800054FC01463868FEF779FE0028E1DB7968BF +:104990008142DEDBD5E70520FDF79CFAA670F8BD65 +:1049A000A078042804D0FF204AA1873000F011FB32 +:1049B0000220A1688847FFF7DDFEFF260546C036C6 +:1049C00042E0A078042804D0FF2042A18C3000F0FF +:1049D00000FB0120EDE7A078042899D0FF203DA13D +:1049E000913000F0F6FA93E7A07804280AD06078B6 +:1049F000002802D0A078022804D0FF2035A19630EC +:104A000000F0E7FA2078002893D12079002804D01C +:104A10000620FDF75FFA2571C0E76078002805D011 +:104A20002949E078FEF77BF86570F8BD0720B3E709 +:104A3000FF2028A1B13046E7002D0AD0012D06D075 +:104A400024A1304600F0C5FA022DF5D1F8BD0420AE +:104A500000E00320A1688847FFF78CFE0546F3E7D6 +:104A600070B5050005D0174CA078052803D011209B +:104A700070BD102070BD2048FDF769FBE070E07844 +:104A8000002803D0A5600020A07070BD032070BD79 +:104A900010B50C480178002901D0112010BD817893 +:104AA00005292BD0817801292AD08178002927D0A7 +:104AB000012101708178012922D0807800281FD03F +:104AC00020E000004C0100207C1D00203D860100FC +:104AD000FF1FA1077372635C736F635F7261646928 +:104AE0006F5F74696D65736C6F742E6300000000F6 +:104AF0000005004002810080834801000F2010BDA6 +:104B000000F068F8002010BDF8B5394E0446B078C2 +:104B1000002801D001280DD1002C0DD02046FFF730 +:104B2000FCFD00280AD02078324D002808D0B0784B +:104B3000012823D00F20F8BD1020F8BD0720F8BDB4 +:104B400002272F702079012814D000202871607965 +:104B5000002811D003206871A0689630A860E06832 +:104B6000E860E868224C14346060FDF75EFB20606A +:104B7000B77019E00320E9E70220ECE70020287075 +:104B80002079012816D0002028716079002813D0E0 +:104B900003206871A168F068FDF7DEFDA860E06899 +:104BA0009630E8600320B0701249F078FDF7B7FF47 +:104BB0000020F8BD0320E7E70220EAE710B50E4821 +:104BC000816A0E4A11400A4A126911438162FDF757 +:104BD00077FA10BD10B5064CE078FDF70CFB082005 +:104BE000FDF778F90520A07000202070607010BDDE +:104BF0004C0100207C1D002000050040FD7EFF7F51 +:104C00000A4A022151600A490B68002BFCD09060CF +:104C100008680028FCD00020506008680028FCD0FC +:104C200070470120000740697047000000E501401F +:104C300000E4014070477047704770477047034673 +:104C400010B50B439B070FD1042A0DD308C810C918 +:104C5000121FA342F8D018BA21BA884201D9012004 +:104C600010BD0020C04310BD002A03D0D30703D0DD +:104C7000521C07E0002010BD03780C78401C491C32 +:104C80001B1B07D103780C78401C491C1B1B01D14E +:104C9000921EF1D1184610BDF8B5042A2CD3830713 +:104CA00012D00B78491C0370401C521E83070BD096 +:104CB0000B78491C0370401C521E830704D00B78EC +:104CC000491C0370401C521E8B079B0F05D0C91A4C +:104CD000DF002023DE1B08C90AE0ECF775FAF8BDF7 +:104CE0001D4608C9FD401C46B4402C4310C0121F8D +:104CF000042AF5D2F308C91A521EF0D40B78491CC5 +:104D00000370401C521EEAD40B78491C0370401CEF +:104D1000521EE4D409780170F8BD01E004C0091FF7 +:104D20000429FBD28B0701D50280801CC90700D063 +:104D30000270704700290BD0C30702D00270401CDC +:104D4000491E022904D3830702D50280801C891ED4 +:104D5000E3E70022EEE70022DFE70378C278194696 +:104D6000437812061B0219438378C0781B04194349 +:104D700011430902090A000608437047020A087035 +:104D80004A70020C8A70020ECA7070470022030932 +:104D90008B4273D3030A8B4258D3030B8B423CD311 +:104DA000030C8B4221D312E003460B437FD4002235 +:104DB00043088B4274D303098B425FD3030A8B42AF +:104DC00044D3030B8B4228D3030C8B420DD3FF2219 +:104DD000090212BA030C8B4202D31212090265D0E7 +:104DE000030B8B4219D300E0090AC30B8B4201D39A +:104DF000CB03C01A5241830B8B4201D38B03C01AE1 +:104E00005241430B8B4201D34B03C01A5241030B57 +:104E10008B4201D30B03C01A5241C30A8B4201D308 +:104E2000CB02C01A5241830A8B4201D38B02C01AB3 +:104E30005241430A8B4201D34B02C01A5241030A2A +:104E40008B4201D30B02C01A5241CDD2C3098B420F +:104E500001D3CB01C01A524183098B4201D38B018C +:104E6000C01A524143098B4201D34B01C01A52412F +:104E700003098B4201D30B01C01A5241C3088B4274 +:104E800001D3CB00C01A524183088B4201D38B005F +:104E9000C01A524143088B4201D34B00C01A524101 +:104EA000411A00D201465241104670475DE0CA0FD8 +:104EB00000D04942031000D34042534000229C4698 +:104EC00003098B422DD3030A8B4212D3FC228901A2 +:104ED00012BA030A8B420CD3890192118B4208D378 +:104EE000890192118B4204D389013AD0921100E0DA +:104EF0008909C3098B4201D3CB01C01A52418309EE +:104F00008B4201D38B01C01A524143098B4201D31A +:104F10004B01C01A524103098B4201D30B01C01A45 +:104F20005241C3088B4201D3CB00C01A52418308BF +:104F30008B4201D38B00C01A5241D9D243088B4215 +:104F400001D34B00C01A5241411A00D201466346B8 +:104F500052415B10104601D34042002B00D549421C +:104F6000704763465B1000D3404201B50020C04645 +:104F7000C04602BD704770477047704710B500F0DB +:104F800059F810BD30B58C180278401C13071B0F60 +:104F900001D10378401C120906D10278401C03E0BD +:104FA0000578401C0D70491C5B1EF9D101E00B70A7 +:104FB000491C521EFBD1A142E6D3002030BD0000A7 +:104FC00001231B68134B1860134B1960134B1A60B5 +:104FD0007047134A134B13607246053AF0E7114AC3 +:104FE0000F4B1B689A420ED10D4B002018600198A0 +:104FF0000D4B04B598470CBC9E460246029800999A +:105000000A4B1B68184706980599094B1B68DB6813 +:105010001847000070010020740100207801002072 +:1050200068010020EFBEADDE5539010028010020E7 +:10503000040000201D481E497047FFF7FBFFECF7F6 +:105040007DF800BD01200007C06AC0B2FF2804D16E +:10505000184819490968884202D01848184901605F +:10506000184819490968884203D1184A13605B68D7 +:10507000184700BD20BFFDE7124813490968884260 +:105080000ED1134B18680B498842F3D080F308887F +:105090001049884204DD1048026802210A43026078 +:1050A0000E4880470E4880470E480047901D00205C +:1050B000901D0020FFFFFFFF001000102C05004096 +:1050C0000800000000100000000000200400002084 +:1050D0000060010000200020240500406B39010021 +:1050E00045500100C14F01001348704502D1EFF354 +:1050F000098101E0EFF308818869023800781028FF +:1051000014DB202810DB23280BDB0C4A12680C4B25 +:105110009A4203D1602804DB0A4A10470220086043 +:105120007047094A10470000084A1047084A1268A9 +:105130002C32126810470000FDFFFFFF1C01002009 +:10514000BEBAFECAAD1200002B3A0100033F0100B7 +:10515000040000200D4B0E4908470E4B0C49084730 +:105160000D4B0B4908470D4B094908470C4B0849A3 +:1051700008470C4B064908470B4B054908470B4BA2 +:10518000034908470A4B024908470000052E000062 +:10519000E13D0000BD2F0000873C0000353C0000D1 +:1051A000E9390000B912000063170000493D000012 +:1051B000AB2B000030B47446641E2578641CAB42EF +:1051C00000D21D46635D5B00E31830BC1847000049 +:1051D00002490020C861203908727047E0030020AE +:1051E00000020207FFFFFFFF0000FFFF01020408AB +:1051F00010204080555555D6BE898E00F401FA0026 +:10520000960064004B0032001E00140001000300F1 +:10521000000001000000000000000000000000008D +:1052200000000000870000000000000000000000F7 +:105230000000000000000203040500000E0F000043 +:10524000705201000800002010000000041100004E +:10525000805201001800002064010000844F01000A +:10526000A45201007C010020141C00002011000049 +:105270000249022208681042FCD0704700E200E0B8 +:10528000E1078F56FF9900CD29022B01360100015D +:1052900000EC3720FB349B5F8074800010027001AB +:0452A000E4C54F0111 +:00000001FF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/PeripheralNames.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,58 @@ +/* mbed Microcontroller Library + * Copyright (c) 2013 Nordic Semiconductor + * + * 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 MBED_PERIPHERALNAMES_H +#define MBED_PERIPHERALNAMES_H + +#include "cmsis.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define STDIO_UART_TX TX_PIN_NUMBER +#define STDIO_UART_RX RX_PIN_NUMBER +#define STDIO_UART UART_0 + +typedef enum { + UART_0 = (int)NRF_UART0_BASE +} UARTName; + + +typedef enum { + SPI_0 = (int)NRF_SPI0_BASE, + SPI_1 = (int)NRF_SPI1_BASE, + SPIS = (int)NRF_SPIS1_BASE +} SPIName; + +typedef enum { + PWM_1 = 0, + PWM_2 +} PWMName; + +typedef enum { + I2C_0 = (int)NRF_TWI0_BASE, + I2C_1 = (int)NRF_TWI1_BASE +} I2CName; + +typedef enum { + ADC0_0 = (int)NRF_ADC_BASE +} ADCName; + +#ifdef __cplusplus +} +#endif + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/PortNames.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,30 @@ +/* mbed Microcontroller Library + * Copyright (c) 2013 Nordic Semiconductor + * + * 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 MBED_PORTNAMES_H +#define MBED_PORTNAMES_H + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + Port0 = 0 //GPIO pins 0-31 +} PortName; + +#ifdef __cplusplus +} +#endif +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/TARGET_NRF51822_MKIT/PinNames.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,153 @@ +/* mbed Microcontroller Library + * Copyright (c) 2013 Nordic Semiconductor + * + * 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 MBED_PINNAMES_H +#define MBED_PINNAMES_H + +#include "cmsis.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + PIN_INPUT, + PIN_OUTPUT +} PinDirection; + +#define PORT_SHIFT 3 + +typedef enum { + p0 = 0, + p1 = 1, + p2 = 2, + p3 = 3, + p4 = 4, + p5 = 5, + p6 = 6, + p7 = 7, + p8 = 8, + p9 = 9, + p10 = 10, + p11 = 11, + p12 = 12, + p13 = 13, + p14 = 14, + p15 = 15, + p16 = 16, + p17 = 17, + p18 = 18, + p19 = 19, + p20 = 20, + p21 = 21, + p22 = 22, + p23 = 23, + p24 = 24, + p25 = 25, + p26 = 26, + p27 = 27, + p28 = 28, + p29 = 29, + p30 = 30, +// p31=31, + + P0_0 = p0, + P0_1 = p1, + P0_2 = p2, + P0_3 = p3, + P0_4 = p4, + P0_5 = p5, + P0_6 = p6, + P0_7 = p7, + + P0_8 = p8, + P0_9 = p9, + P0_10 = p10, + P0_11 = p11, + P0_12 = p12, + P0_13 = p13, + P0_14 = p14, + P0_15 = p15, + + P0_16 = p16, + P0_17 = p17, + P0_18 = p18, + P0_19 = p19, + P0_20 = p20, + P0_21 = p21, + P0_22 = p22, + P0_23 = p23, + + P0_24 = p24, + P0_25 = p25, + P0_26 = p26, + P0_27 = p27, + P0_28 = p28, + P0_29 = p29, + P0_30 = p30, + + LED1 = p18, + LED2 = p19, + LED3 = p18, + LED4 = p19, + + BUTTON1 = p16, + BUTTON2 = p17, + + RX_PIN_NUMBER = p11, + TX_PIN_NUMBER = p9, + CTS_PIN_NUMBER = p10, + RTS_PIN_NUMBER = p8, + + // mBed interface Pins + USBTX = TX_PIN_NUMBER, + USBRX = RX_PIN_NUMBER, + + SPI_PSELMOSI0 = p20, + SPI_PSELMISO0 = p22, + SPI_PSELSS0 = p24, + SPI_PSELSCK0 = p25, + + SPI_PSELMOSI1 = p12, + SPI_PSELMISO1 = p13, + SPI_PSELSS1 = p14, + SPI_PSELSCK1 = p15, + + SPIS_PSELMOSI = p12, + SPIS_PSELMISO = p13, + SPIS_PSELSS = p14, + SPIS_PSELSCK = p15, + + I2C_SDA0 = p22, + I2C_SCL0 = p20, + + I2C_SDA1 = p13, + I2C_SCL1 = p15, + // Not connected + NC = (int)0xFFFFFFFF +} PinName; + +typedef enum { + PullNone = 0, + PullDown = 1, + PullUp = 3, + PullDefault = PullUp +} PinMode; + +#ifdef __cplusplus +} +#endif + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/TARGET_NRF51822_MKIT/device.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,57 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * 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 MBED_DEVICE_H +#define MBED_DEVICE_H + +#define DEVICE_PORTIN 1 +#define DEVICE_PORTOUT 1 +#define DEVICE_PORTINOUT 1 + +#define DEVICE_INTERRUPTIN 1 + +#define DEVICE_ANALOGIN 1 +#define DEVICE_ANALOGOUT 0 + +#define DEVICE_SERIAL 1 + +#define DEVICE_I2C 1 +#define DEVICE_I2CSLAVE 0 + +#define DEVICE_SPI 1 +#define DEVICE_SPISLAVE 1 + +#define DEVICE_CAN 0 + +#define DEVICE_RTC 0 + +#define DEVICE_ETHERNET 0 + +#define DEVICE_PWMOUT 1 + +#define DEVICE_SEMIHOST 0 +#define DEVICE_LOCALFILESYSTEM 0 + +#define DEVICE_SLEEP 1 + +#define DEVICE_DEBUG_AWARENESS 0 + +#define DEVICE_STDIO_MESSAGES 0 + +#define DEVICE_ERROR_PATTERN 1 + +#include "objects.h" + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/gpio_object.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,52 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * 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 MBED_GPIO_OBJECT_H +#define MBED_GPIO_OBJECT_H + +#include "mbed_assert.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + PinName pin; + uint32_t mask; + + __IO uint32_t *reg_dir; + __IO uint32_t *reg_set; + __IO uint32_t *reg_clr; + __I uint32_t *reg_in; +} gpio_t; + +static inline void gpio_write(gpio_t *obj, int value) { + MBED_ASSERT(obj->pin != (PinName)NC); + if (value) + *obj->reg_set = obj->mask; + else + *obj->reg_clr = obj->mask; +} + +static inline int gpio_read(gpio_t *obj) { + MBED_ASSERT(obj->pin != (PinName)NC); + return ((*obj->reg_in & obj->mask) ? 1 : 0); +} + +#ifdef __cplusplus +} +#endif + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/objects.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,73 @@ +/* mbed Microcontroller Library + * Copyright (c) 2013 Nordic Semiconductor + * + * 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 MBED_OBJECTS_H +#define MBED_OBJECTS_H + +#include "cmsis.h" +#include "PortNames.h" +#include "PeripheralNames.h" +#include "PinNames.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct serial_s { + NRF_UART_Type *uart; + int index; +}; + +struct spi_s { + NRF_SPI_Type *spi; + NRF_SPIS_Type *spis; +}; + +struct port_s { + __IO uint32_t *reg_cnf; + __IO uint32_t *reg_out; + __I uint32_t *reg_in; + PortName port; + uint32_t mask; +}; + +struct pwmout_s { + PWMName pwm; + PinName pin; +}; + +struct i2c_s { + NRF_TWI_Type *i2c; + PinName sda; + PinName scl; + int freq; +}; + +struct analogin_s { + ADCName adc; + uint8_t adc_pin; +}; + +struct gpio_irq_s { + uint32_t ch; +}; + +#include "gpio_object.h" + +#ifdef __cplusplus +} +#endif + +#endif
--- a/TARGET_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,385 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_COMMON BLE SoftDevice Common - @{ - @defgroup ble_api Events, type definitions and API calls - @{ - - @brief Module independent events, type definitions and API calls for the S110 SoftDevice. - - */ - -#ifndef BLE_H__ -#define BLE_H__ - -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_gap.h" -#include "ble_l2cap.h" -#include "ble_gatt.h" -#include "ble_gattc.h" -#include "ble_gatts.h" - -/** @addtogroup BLE_COMMON_ENUMERATIONS Enumerations - * @{ */ - -/** - * @brief Common API SVC numbers. - */ -enum BLE_COMMON_SVCS -{ - SD_BLE_ENABLE = BLE_SVC_BASE, /**< Enable and initialize the BLE stack */ - SD_BLE_EVT_GET, /**< Get an event from the pending events queue. */ - SD_BLE_TX_BUFFER_COUNT_GET, /**< Get the total number of available application transmission buffers from the stack. */ - SD_BLE_UUID_VS_ADD, /**< Add a Vendor Specific UUID. */ - SD_BLE_UUID_DECODE, /**< Decode UUID bytes. */ - SD_BLE_UUID_ENCODE, /**< Encode UUID bytes. */ - SD_BLE_VERSION_GET, /**< Get the local version information (company id, Link Layer Version, Link Layer Subversion). */ - SD_BLE_USER_MEM_REPLY, /**< User Memory Reply. */ - SD_BLE_OPT_SET, /**< Set a BLE option. */ - SD_BLE_OPT_GET, /**< Get a BLE option. */ -}; - -/** @} */ - -/** @addtogroup BLE_COMMON_DEFINES Defines - * @{ */ - -/** @brief Required pointer alignment for BLE Events. -*/ -#define BLE_EVTS_PTR_ALIGNMENT 4 - -/** @defgroup BLE_USER_MEM_TYPES User Memory Types - * @{ */ -#define BLE_USER_MEM_TYPE_INVALID 0x00 /**< Invalid User Memory Types. */ -#define BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES 0x01 /**< User Memory for GATTS queued writes. */ -/** @} */ - -/** @brief Maximum number of Vendor Specific UUIDs. -*/ -#define BLE_UUID_VS_MAX_COUNT 10 - -/** @} */ - -/** @addtogroup BLE_COMMON_STRUCTURES Structures - * @{ */ - -/** - * @brief BLE Module Independent Event IDs. - */ -enum BLE_COMMON_EVTS -{ - BLE_EVT_TX_COMPLETE = BLE_EVT_BASE, /**< Transmission Complete. */ - BLE_EVT_USER_MEM_REQUEST, /**< User Memory request. */ - BLE_EVT_USER_MEM_RELEASE /**< User Memory release. */ -}; - -/**@brief User Memory Block. */ -typedef struct -{ - uint8_t* p_mem; /**< Pointer to the start of the user memory block. */ - uint16_t len; /**< Length in bytes of the user memory block. */ -} ble_user_mem_block_t; - -/** - * @brief TX complete event. - */ -typedef struct -{ - uint8_t count; /**< Number of packets transmitted. */ -} ble_evt_tx_complete_t; - -/**@brief Event structure for BLE_EVT_USER_MEM_REQUEST. */ -typedef struct -{ - uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ -} ble_evt_user_mem_request_t; - -/**@brief Event structure for BLE_EVT_USER_MEM_RELEASE. */ -typedef struct -{ - uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ - ble_user_mem_block_t mem_block; /**< User memory block */ -} ble_evt_user_mem_release_t; - - -/**@brief Event structure for events not associated with a specific function module. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which this event occured. */ - union - { - ble_evt_tx_complete_t tx_complete; /**< Transmission Complete. */ - ble_evt_user_mem_request_t user_mem_request; /**< User Memory Request Event Parameters. */ - ble_evt_user_mem_release_t user_mem_release; /**< User Memory Release Event Parameters. */ - } params; -} ble_common_evt_t; - -/**@brief BLE Event header. */ -typedef struct -{ - uint16_t evt_id; /**< Value from a BLE_<module>_EVT series. */ - uint16_t evt_len; /**< Length in octets excluding this header. */ -} ble_evt_hdr_t; - -/**@brief Common BLE Event type, wrapping the module specific event reports. */ -typedef struct -{ - ble_evt_hdr_t header; /**< Event header. */ - union - { - ble_common_evt_t common_evt; /**< Common Event, evt_id in BLE_EVT_* series. */ - ble_gap_evt_t gap_evt; /**< GAP originated event, evt_id in BLE_GAP_EVT_* series. */ - ble_l2cap_evt_t l2cap_evt; /**< L2CAP originated event, evt_id in BLE_L2CAP_EVT* series. */ - ble_gattc_evt_t gattc_evt; /**< GATT client originated event, evt_id in BLE_GATTC_EVT* series. */ - ble_gatts_evt_t gatts_evt; /**< GATT server originated event, evt_id in BLE_GATTS_EVT* series. */ - } evt; -} ble_evt_t; - - -/** - * @brief Version Information. - */ -typedef struct -{ - uint8_t version_number; /**< Link Layer Version number for BT 4.1 spec is 7 (https://www.bluetooth.org/en-us/specification/assigned-numbers/link-layer). */ - uint16_t company_id; /**< Company ID, Nordic Semiconductor's company ID is 89 (0x0059) (https://www.bluetooth.org/apps/content/Default.aspx?doc_id=49708). */ - uint16_t subversion_number; /**< Link Layer Sub Version number, corresponds to the SoftDevice Config ID or Firmware ID (FWID). */ -} ble_version_t; - -/**@brief Common BLE Option type, wrapping the module specific options. */ -typedef union -{ - ble_gap_opt_t gap; /**< GAP option, opt_id in BLE_GAP_OPT_* series. */ -} ble_opt_t; - -/** - * @brief BLE GATTS init options - */ -typedef struct -{ - ble_gatts_enable_params_t gatts_enable_params; /**< GATTS init options @ref ble_gatts_enable_params_t. */ -} ble_enable_params_t; - -/** @} */ - -/** @addtogroup BLE_COMMON_FUNCTIONS Functions - * @{ */ - -/**@brief Enable the bluetooth stack - * - * @param[in] p_ble_enable_params Pointer to ble_enable_params_t - * - * @details This call initializes the bluetooth stack, no other BLE related call can be called before this one has been executed. - * - * @return @ref NRF_SUCCESS BLE stack has been initialized successfully - * @return @ref NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. - */ -SVCALL(SD_BLE_ENABLE, uint32_t, sd_ble_enable(ble_enable_params_t * p_ble_enable_params)); - -/**@brief Get an event from the pending events queue. - * - * @param[in] p_dest Pointer to buffer to be filled in with an event, or NULL to retrieve the event length. This buffer <b>must be 4-byte aligned in memory</b>. - * @param[in, out] p_len Pointer the length of the buffer, on return it is filled with the event length. - * - * @details This call allows the application to pull a BLE event from the BLE stack. The application is signalled that an event is - * available from the BLE Stack by the triggering of the SD_EVT_IRQn interrupt (mapped to IRQ 22). - * The application is free to choose whether to call this function from thread mode (main context) or directly from the Interrupt Service Routine - * that maps to SD_EVT_IRQn. In any case however, and because the BLE stack runs at a higher priority than the application, this function should be called - * in a loop (until @ref NRF_ERROR_NOT_FOUND is returned) every time SD_EVT_IRQn is raised to ensure that all available events are pulled from the stack. - * Failure to do so could potentially leave events in the internal queue without the application being aware of this fact. - * Sizing the p_dest buffer is equally important, since the application needs to provide all the memory necessary for the event to be copied into - * application memory. If the buffer provided is not large enough to fit the entire contents of the event, @ref NRF_ERROR_DATA_SIZE will be returned - * and the application can then call again with a larger buffer size. - * Please note that because of the variable length nature of some events, sizeof(ble_evt_t) will not always be large enough to fit certain events, - * and so it is the application's responsability to provide an amount of memory large enough so that the relevant event is copied in full. - * The application may "peek" the event length by providing p_dest as a NULL pointer and inspecting the value of *p_len upon return. - * - * @note The pointer supplied must be aligned to the extend defined by @ref BLE_EVTS_PTR_ALIGNMENT - * - * @return @ref NRF_SUCCESS Event pulled and stored into the supplied buffer. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. - * @return @ref NRF_ERROR_NOT_FOUND No events ready to be pulled. - * @return @ref NRF_ERROR_DATA_SIZE Event ready but could not fit into the supplied buffer. - */ -SVCALL(SD_BLE_EVT_GET, uint32_t, sd_ble_evt_get(uint8_t* p_dest, uint16_t *p_len)); - - -/**@brief Get the total number of available application transmission buffers in the BLE stack. - * - * @details This call allows the application to obtain the total number of - * transmission buffers available for application data. Please note that - * this does not give the number of free buffers, but rather the total amount of them. - * The application has two options to handle its own application transmission buffers: - * - Use a simple arithmetic calculation: at boot time the application should use this function - * to find out the total amount of buffers available to it and store it in a variable. - * Every time a packet that consumes an application buffer is sent using any of the - * exposed functions in this BLE API, the application should decrement that variable. - * Conversely, whenever a @ref BLE_EVT_TX_COMPLETE event is received by the application - * it should retrieve the count field in such event and add that number to the same - * variable storing the number of available packets. - * This mechanism allows the application to be aware at any time of the number of - * application packets available in the BLE stack's internal buffers, and therefore - * it can know with certainty whether it is possible to send more data or it has to - * wait for a @ref BLE_EVT_TX_COMPLETE event before it proceeds. - * - Choose to simply not keep track of available buffers at all, and instead handle the - * @ref BLE_ERROR_NO_TX_BUFFERS error by queueing the packet to be transmitted and - * try again as soon as a @ref BLE_EVT_TX_COMPLETE event arrives. - * - * The API functions that <b>may</b> consume an application buffer depending on - * the parameters supplied to them can be found below: - * - * - @ref sd_ble_gattc_write (write witout response only) - * - @ref sd_ble_gatts_hvx (notifications only) - * - @ref sd_ble_l2cap_tx (all packets) - * - * @param[out] p_count Pointer to a uint8_t which will contain the number of application transmission buffers upon - * successful return. - * - * @return @ref NRF_SUCCESS Number of application transmission buffers retrieved successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_TX_BUFFER_COUNT_GET, uint32_t, sd_ble_tx_buffer_count_get(uint8_t* p_count)); - - -/**@brief Add a Vendor Specific UUID. - * - * @details This call enables the application to add a vendor specific UUID to the BLE stack's table, - * for later use all other modules and APIs. This then allows the application to use the shorter, - * 24-bit @ref ble_uuid_t format when dealing with both 16-bit and 128-bit UUIDs without having to - * check for lengths and having split code paths. The way that this is accomplished is by extending the - * grouping mechanism that the Bluetooth SIG standard base UUID uses for all other 128-bit UUIDs. The - * type field in the @ref ble_uuid_t structure is an index (relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN) - * to the table populated by multiple calls to this function, and the uuid field in the same structure - * contains the 2 bytes at indices 12 and 13. The number of possible 128-bit UUIDs available to the - * application is therefore the number of Vendor Specific UUIDs added with the help of this function times 65536, - * although restricted to modifying bytes 12 and 13 for each of the entries in the supplied array. - * - * @note Bytes 12 and 13 of the provided UUID will not be used internally, since those are always replaced by - * the 16-bit uuid field in @ref ble_uuid_t. - * - * - * @param[in] p_vs_uuid Pointer to a 16-octet (128-bit) little endian Vendor Specific UUID disregarding - * bytes 12 and 13. - * @param[out] p_uuid_type Pointer where the type field in @ref ble_uuid_t corresponding to this UUID will be stored. - * - * @return @ref NRF_SUCCESS Successfully added the Vendor Specific UUID. - * @return @ref NRF_ERROR_INVALID_ADDR If p_vs_uuid or p_uuid_type is NULL or invalid. - * @return @ref NRF_ERROR_NO_MEM If there are no more free slots for VS UUIDs. - * @return @ref NRF_ERROR_FORBIDDEN If p_vs_uuid has already been added to the VS UUID table. - */ -SVCALL(SD_BLE_UUID_VS_ADD, uint32_t, sd_ble_uuid_vs_add(ble_uuid128_t const * const p_vs_uuid, uint8_t * const p_uuid_type)); - - -/** @brief Decode little endian raw UUID bytes (16-bit or 128-bit) into a 24 bit @ref ble_uuid_t structure. - * - * @details The raw UUID bytes excluding bytes 12 and 13 (i.e. bytes 0-11 and 14-15) of p_uuid_le are compared - * to the corresponding ones in each entry of the table of vendor specific UUIDs pouplated with @ref sd_ble_uuid_vs_add - * to look for a match. If there is such a match, bytes 12 and 13 are returned as p_uuid->uuid and the index - * relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN as p_uuid->type. - * - * @note If the UUID length supplied is 2, then the type set by this call will always be @ref BLE_UUID_TYPE_BLE. - * - * @param[in] uuid_le_len Length in bytes of the buffer pointed to by p_uuid_le (must be 2 or 16 bytes). - * @param[in] p_uuid_le Pointer pointing to little endian raw UUID bytes. - * @param[in,out] p_uuid Pointer to a @ref ble_uuid_t structure to be filled in. - * - * @return @ref NRF_SUCCESS Successfully decoded into the @ref ble_uuid_t structure. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_LENGTH Invalid UUID length. - * @return @ref NRF_ERROR_NOT_FOUND For a 128-bit UUID, no match in the populated table of UUIDs. - */ -SVCALL(SD_BLE_UUID_DECODE, uint32_t, sd_ble_uuid_decode(uint8_t uuid_le_len, uint8_t const * const p_uuid_le, ble_uuid_t * const p_uuid)); - - -/** @brief Encode a @ref ble_uuid_t structure into little endian raw UUID bytes (16-bit or 128-bit). - * - * @note The pointer to the destination buffer p_uuid_le may be NULL, in which case only the validitiy and size of p_uuid is computed. - * - * @param[in] p_uuid Pointer to a @ref ble_uuid_t structure that will be encoded into bytes. - * @param[out] p_uuid_le_len Pointer to a uint8_t that will be filled with the encoded length (2 or 16 bytes). - * @param[out] p_uuid_le Pointer to a buffer where the little endian raw UUID bytes (2 or 16) will be stored. - * - * @return @ref NRF_SUCCESS Successfully encoded into the buffer. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid UUID type. - */ -SVCALL(SD_BLE_UUID_ENCODE, uint32_t, sd_ble_uuid_encode(ble_uuid_t const * const p_uuid, uint8_t * const p_uuid_le_len, uint8_t * const p_uuid_le)); - - -/**@brief Get Version Information. - * - * @details This call allows the application to get the BLE stack version information. - * - * @param[in] p_version Pointer to ble_version_t structure to be filled in. - * - * @return @ref NRF_SUCCESS Version information stored successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY The stack is busy (typically doing a locally-initiated disconnection procedure). - */ -SVCALL(SD_BLE_VERSION_GET, uint32_t, sd_ble_version_get(ble_version_t * p_version)); - - -/**@brief Provide a user memory block. - * - * @note This call can only be used as a response to a @ref BLE_EVT_USER_MEM_REQUEST event issued to the application. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_block Pointer to a user memory block structure. - * - * @return @ref NRF_SUCCESS Successfully queued a response to the peer. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_STATE No execute write request pending. - */ -SVCALL(SD_BLE_USER_MEM_REPLY, uint32_t, sd_ble_user_mem_reply(uint16_t conn_handle, ble_user_mem_block_t *p_block)); - - -/**@brief Set a BLE option. - * - * @details This call allows the application to set the value of an option. - * - * @param[in] opt_id Option ID. - * @param[in] p_opt Pointer to a ble_opt_t structure containing the option value. - * - * @retval ::NRF_SUCCESS Option set successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. - * @retval ::NRF_ERROR_INVALID_STATE Unable to set the parameter at this time. - * @retval ::NRF_ERROR_BUSY The stack is busy or the previous procedure has not completed. - */ -SVCALL(SD_BLE_OPT_SET, uint32_t, sd_ble_opt_set(uint32_t opt_id, ble_opt_t const *p_opt)); - - -/**@brief Get a BLE option. - * - * @details This call allows the application to retrieve the value of an option. - * - * @param[in] opt_id Option ID. - * @param[out] p_opt Pointer to a ble_opt_t structure to be filled in. - * - * @retval ::NRF_SUCCESS Option retrieved successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. - * @retval ::NRF_ERROR_INVALID_STATE Unable to retrieve the parameter at this time. - * @retval ::NRF_ERROR_BUSY The stack is busy or the previous procedure has not completed. - * @retval ::NRF_ERROR_NOT_SUPPORTED This option is not supported. - * - */ -SVCALL(SD_BLE_OPT_GET, uint32_t, sd_ble_opt_get(uint32_t opt_id, ble_opt_t *p_opt)); - -/** @} */ - -#endif /* BLE_H__ */ - -/** - @} - @} -*/
--- a/TARGET_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_err.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - /** - @addtogroup BLE_COMMON - @{ - @addtogroup nrf_error - @{ - @ingroup BLE_COMMON - @} - - @defgroup ble_err General error codes - @{ - - @brief General error code definitions for the BLE API. - - @ingroup BLE_COMMON -*/ -#ifndef NRF_BLE_ERR_H__ -#define NRF_BLE_ERR_H__ - -#include "nrf_error.h" - -/* @defgroup BLE_ERRORS Error Codes - * @{ */ -#define BLE_ERROR_NOT_ENABLED (NRF_ERROR_STK_BASE_NUM+0x001) /**< @ref sd_ble_enable has not been called. */ -#define BLE_ERROR_INVALID_CONN_HANDLE (NRF_ERROR_STK_BASE_NUM+0x002) /**< Invalid connection handle. */ -#define BLE_ERROR_INVALID_ATTR_HANDLE (NRF_ERROR_STK_BASE_NUM+0x003) /**< Invalid attribute handle. */ -#define BLE_ERROR_NO_TX_BUFFERS (NRF_ERROR_STK_BASE_NUM+0x004) /**< Buffer capacity exceeded. */ -/** @} */ - - -/** @defgroup BLE_ERROR_SUBRANGES Module specific error code subranges - * @brief Assignment of subranges for module specific error codes. - * @note For specific error codes, see ble_<module>.h or ble_error_<module>.h. - * @{ */ -#define NRF_L2CAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x100) /**< L2CAP specific errors. */ -#define NRF_GAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x200) /**< GAP specific errors. */ -#define NRF_GATTC_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x300) /**< GATT client specific errors. */ -#define NRF_GATTS_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x400) /**< GATT server specific errors. */ -/** @} */ - -#endif - - -/** - @} - @} -*/
--- a/TARGET_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gap.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1032 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_GAP Generic Access Profile (GAP) - @{ - @brief Definitions and prototypes for the GAP interface. - */ - -#ifndef BLE_GAP_H__ -#define BLE_GAP_H__ - -#include "ble_types.h" -#include "ble_ranges.h" -#include "nrf_svc.h" - - -/**@addtogroup BLE_GAP_ENUMERATIONS Enumerations - * @{ */ - -/**@brief GAP API SVC numbers. - */ -enum BLE_GAP_SVCS -{ - SD_BLE_GAP_ADDRESS_SET = BLE_GAP_SVC_BASE, /**< Set own Bluetooth Address. */ - SD_BLE_GAP_ADDRESS_GET, /**< Get own Bluetooth Address. */ - SD_BLE_GAP_ADV_DATA_SET, /**< Set Advertisement Data. */ - SD_BLE_GAP_ADV_START, /**< Start Advertising. */ - SD_BLE_GAP_ADV_STOP, /**< Stop Advertising. */ - SD_BLE_GAP_CONN_PARAM_UPDATE, /**< Connection Parameter Update. */ - SD_BLE_GAP_DISCONNECT, /**< Disconnect. */ - SD_BLE_GAP_TX_POWER_SET, /**< Set TX Power. */ - SD_BLE_GAP_APPEARANCE_SET, /**< Set Appearance. */ - SD_BLE_GAP_APPEARANCE_GET, /**< Get Appearance. */ - SD_BLE_GAP_PPCP_SET, /**< Set PPCP. */ - SD_BLE_GAP_PPCP_GET, /**< Get PPCP. */ - SD_BLE_GAP_DEVICE_NAME_SET, /**< Set Device Name. */ - SD_BLE_GAP_DEVICE_NAME_GET, /**< Get Device Name. */ - SD_BLE_GAP_AUTHENTICATE, /**< Initiate Pairing/Bonding. */ - SD_BLE_GAP_SEC_PARAMS_REPLY, /**< Reply with Security Parameters. */ - SD_BLE_GAP_AUTH_KEY_REPLY, /**< Reply with an authentication key. */ - SD_BLE_GAP_SEC_INFO_REPLY, /**< Reply with Security Information. */ - SD_BLE_GAP_CONN_SEC_GET, /**< Obtain connection security level. */ - SD_BLE_GAP_RSSI_START, /**< Start reporting of changes in RSSI. */ - SD_BLE_GAP_RSSI_STOP, /**< Stop reporting of changes in RSSI. */ -}; -/**@} */ - -/**@addtogroup BLE_GAP_DEFINES Defines - * @{ */ - -/**@defgroup BLE_ERRORS_GAP SVC return values specific to GAP - * @{ */ -#define BLE_ERROR_GAP_UUID_LIST_MISMATCH (NRF_GAP_ERR_BASE + 0x000) /**< UUID list does not contain an integral number of UUIDs. */ -#define BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST (NRF_GAP_ERR_BASE + 0x001) /**< Use of Whitelist not permitted with discoverable advertising. */ -#define BLE_ERROR_GAP_INVALID_BLE_ADDR (NRF_GAP_ERR_BASE + 0x002) /**< The upper two bits of the address do not correspond to the specified address type. */ -/**@} */ - - -/**@defgroup BLE_GAP_ROLES GAP Roles - * @note Not explicitly used in peripheral API, but will be relevant for central API. - * @{ */ -#define BLE_GAP_ROLE_INVALID 0x0 /**< Invalid Role. */ -#define BLE_GAP_ROLE_PERIPH 0x1 /**< Peripheral Role. */ -#define BLE_GAP_ROLE_CENTRAL 0x2 /**< Central Role. */ -/**@} */ - - -/**@defgroup BLE_GAP_TIMEOUT_SOURCES GAP Timeout sources - * @{ */ -#define BLE_GAP_TIMEOUT_SRC_ADVERTISEMENT 0x00 /**< Advertisement timeout. */ -#define BLE_GAP_TIMEOUT_SRC_SECURITY_REQUEST 0x01 /**< Security request timeout. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADDR_TYPES GAP Address types - * @{ */ -#define BLE_GAP_ADDR_TYPE_PUBLIC 0x00 /**< Public address. */ -#define BLE_GAP_ADDR_TYPE_RANDOM_STATIC 0x01 /**< Random Static address. */ -#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE 0x02 /**< Private Resolvable address. */ -#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE 0x03 /**< Private Non-Resolvable address. */ -/**@} */ - -/**@defgroup BLE_GAP_ADDR_CYCLE_MODES GAP Address cycle modes - * @{ */ -#define BLE_GAP_ADDR_CYCLE_MODE_NONE 0x00 /**< Set addresses directly, no automatic address cycling. */ -#define BLE_GAP_ADDR_CYCLE_MODE_AUTO 0x01 /**< Automatically generate and update private addresses. */ -/** @} */ - -/**@brief The default interval in seconds at which a private address is refreshed when address cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO. */ -#define BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S (60 * 15) - -/** @brief BLE address length. */ -#define BLE_GAP_ADDR_LEN 6 - - -/**@defgroup BLE_GAP_AD_TYPE_DEFINITIONS GAP Advertising and Scan Response Data format - * @note Found at https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm - * @{ */ -#define BLE_GAP_AD_TYPE_FLAGS 0x01 /**< Flags for discoverability. */ -#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE 0x02 /**< Partial list of 16 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE 0x03 /**< Complete list of 16 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE 0x04 /**< Partial list of 32 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE 0x05 /**< Complete list of 32 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE 0x06 /**< Partial list of 128 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE 0x07 /**< Complete list of 128 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME 0x08 /**< Short local device name. */ -#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME 0x09 /**< Complete local device name. */ -#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL 0x0A /**< Transmit power level. */ -#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE 0x0D /**< Class of device. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C 0x0E /**< Simple Pairing Hash C. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R 0x0F /**< Simple Pairing Randomizer R. */ -#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE 0x10 /**< Security Manager TK Value. */ -#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS 0x11 /**< Security Manager Out Of Band Flags. */ -#define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE 0x12 /**< Slave Connection Interval Range. */ -#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT 0x14 /**< List of 16-bit Service Solicitation UUIDs. */ -#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT 0x15 /**< List of 128-bit Service Solicitation UUIDs. */ -#define BLE_GAP_AD_TYPE_SERVICE_DATA 0x16 /**< Service Data - 16-bit UUID. */ -#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS 0x17 /**< Public Target Address. */ -#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS 0x18 /**< Random Target Address. */ -#define BLE_GAP_AD_TYPE_APPEARANCE 0x19 /**< Appearance. */ -#define BLE_GAP_AD_TYPE_ADVERTISING_INTERVAL 0x1A /**< Advertising Interval. */ -#define BLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS 0x1B /**< LE Bluetooth Device Address. */ -#define BLE_GAP_AD_TYPE_LE_ROLE 0x1C /**< LE Role. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C256 0x1D /**< Simple Pairing Hash C-256. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R256 0x1E /**< Simple Pairing Randomizer R-256. */ -#define BLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID 0x20 /**< Service Data - 32-bit UUID. */ -#define BLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID 0x21 /**< Service Data - 128-bit UUID. */ -#define BLE_GAP_AD_TYPE_3D_INFORMATION_DATA 0x3D /**< 3D Information Data. */ -#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA 0xFF /**< Manufacturer Specific Data. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADV_FLAGS GAP Advertisement Flags - * @{ */ -#define BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE (0x01) /**< LE Limited Discoverable Mode. */ -#define BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE (0x02) /**< LE General Discoverable Mode. */ -#define BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED (0x04) /**< BR/EDR not supported. */ -#define BLE_GAP_ADV_FLAG_LE_BR_EDR_CONTROLLER (0x08) /**< Simultaneous LE and BR/EDR, Controller. */ -#define BLE_GAP_ADV_FLAG_LE_BR_EDR_HOST (0x10) /**< Simultaneous LE and BR/EDR, Host. */ -#define BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE (BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE Limited Discoverable Mode, BR/EDR not supported. */ -#define BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE (BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE General Discoverable Mode, BR/EDR not supported. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADV_INTERVALS GAP Advertising interval max and min - * @{ */ -#define BLE_GAP_ADV_INTERVAL_MIN 0x0020 /**< Minimum Advertising interval in 625 us units, i.e. 20 ms. */ -#define BLE_GAP_ADV_NONCON_INTERVAL_MIN 0x00A0 /**< Minimum Advertising interval in 625 us units for non connectable mode, i.e. 100 ms. */ -#define BLE_GAP_ADV_INTERVAL_MAX 0x4000 /**< Maximum Advertising interval in 625 us units, i.e. 10.24 s. */ - /**@} */ - - -/**@brief Maximum size of advertising data in octets. */ -#define BLE_GAP_ADV_MAX_SIZE 31 - - -/**@defgroup BLE_GAP_ADV_TYPES GAP Advertising types - * @{ */ -#define BLE_GAP_ADV_TYPE_ADV_IND 0x00 /**< Connectable undirected. */ -#define BLE_GAP_ADV_TYPE_ADV_DIRECT_IND 0x01 /**< Connectable directed. */ -#define BLE_GAP_ADV_TYPE_ADV_SCAN_IND 0x02 /**< Scannable undirected. */ -#define BLE_GAP_ADV_TYPE_ADV_NONCONN_IND 0x03 /**< Non connectable undirected. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADV_FILTER_POLICIES GAP Advertising filter policies - * @{ */ -#define BLE_GAP_ADV_FP_ANY 0x00 /**< Allow scan requests and connect requests from any device. */ -#define BLE_GAP_ADV_FP_FILTER_SCANREQ 0x01 /**< Filter scan requests with whitelist. */ -#define BLE_GAP_ADV_FP_FILTER_CONNREQ 0x02 /**< Filter connect requests with whitelist. */ -#define BLE_GAP_ADV_FP_FILTER_BOTH 0x03 /**< Filter both scan and connect requests with whitelist. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADV_TIMEOUT_VALUES GAP Advertising timeout values - * @{ */ -#define BLE_GAP_ADV_TIMEOUT_LIMITED_MAX 180 /**< Maximum advertising time in limited discoverable mode (TGAP(lim_adv_timeout) = 180s in spec (Addendum 2)). */ -#define BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED 0 /**< Unlimited advertising in general discoverable mode. */ -/**@} */ - - -/**@defgroup BLE_GAP_DISC_MODES GAP Discovery modes - * @{ */ -#define BLE_GAP_DISC_MODE_NOT_DISCOVERABLE 0x00 /**< Not discoverable discovery Mode. */ -#define BLE_GAP_DISC_MODE_LIMITED 0x01 /**< Limited Discovery Mode. */ -#define BLE_GAP_DISC_MODE_GENERAL 0x02 /**< General Discovery Mode. */ -/**@} */ - -/**@defgroup BLE_GAP_IO_CAPS GAP IO Capabilities - * @{ */ -#define BLE_GAP_IO_CAPS_DISPLAY_ONLY 0x00 /**< Display Only. */ -#define BLE_GAP_IO_CAPS_DISPLAY_YESNO 0x01 /**< Display and Yes/No entry. */ -#define BLE_GAP_IO_CAPS_KEYBOARD_ONLY 0x02 /**< Keyboard Only. */ -#define BLE_GAP_IO_CAPS_NONE 0x03 /**< No I/O capabilities. */ -#define BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY 0x04 /**< Keyboard and Display. */ -/**@} */ - - -/**@defgroup BLE_GAP_AUTH_KEY_TYPES GAP Authentication Key Types - * @{ */ -#define BLE_GAP_AUTH_KEY_TYPE_NONE 0x00 /**< No key (may be used to reject). */ -#define BLE_GAP_AUTH_KEY_TYPE_PASSKEY 0x01 /**< 6-digit Passkey. */ -#define BLE_GAP_AUTH_KEY_TYPE_OOB 0x02 /**< Out Of Band data. */ -/**@} */ - -/**@defgroup BLE_GAP_SEC_STATUS GAP Security status - * @{ */ -#define BLE_GAP_SEC_STATUS_SUCCESS 0x00 /**< Successful parameters. */ -#define BLE_GAP_SEC_STATUS_TIMEOUT 0x01 /**< Procedure timed out. */ -#define BLE_GAP_SEC_STATUS_PDU_INVALID 0x02 /**< Invalid PDU received. */ -#define BLE_GAP_SEC_STATUS_PASSKEY_ENTRY_FAILED 0x81 /**< Passkey entry failed (user cancelled or other). */ -#define BLE_GAP_SEC_STATUS_OOB_NOT_AVAILABLE 0x82 /**< Out of Band Key not available. */ -#define BLE_GAP_SEC_STATUS_AUTH_REQ 0x83 /**< Authentication requirements not met. */ -#define BLE_GAP_SEC_STATUS_CONFIRM_VALUE 0x84 /**< Confirm value failed. */ -#define BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP 0x85 /**< Pairing not supported. */ -#define BLE_GAP_SEC_STATUS_ENC_KEY_SIZE 0x86 /**< Encryption key size. */ -#define BLE_GAP_SEC_STATUS_SMP_CMD_UNSUPPORTED 0x87 /**< Unsupported SMP command. */ -#define BLE_GAP_SEC_STATUS_UNSPECIFIED 0x88 /**< Unspecified reason. */ -#define BLE_GAP_SEC_STATUS_REPEATED_ATTEMPTS 0x89 /**< Too little time elapsed since last attempt. */ -#define BLE_GAP_SEC_STATUS_INVALID_PARAMS 0x8A /**< Invalid parameters. */ -/**@} */ - -/**@defgroup BLE_GAP_SEC_STATUS_SOURCES GAP Security status sources - * @{ */ -#define BLE_GAP_SEC_STATUS_SOURCE_LOCAL 0x00 /**< Local failure. */ -#define BLE_GAP_SEC_STATUS_SOURCE_REMOTE 0x01 /**< Remote failure. */ -/**@} */ - -/**@defgroup BLE_GAP_CP_LIMITS GAP Connection Parameters Limits - * @{ */ -#define BLE_GAP_CP_MIN_CONN_INTVL_NONE 0xFFFF /**< No new minimum connction interval specified in connect parameters. */ -#define BLE_GAP_CP_MIN_CONN_INTVL_MIN 0x0006 /**< Lowest mimimum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ -#define BLE_GAP_CP_MIN_CONN_INTVL_MAX 0x0C80 /**< Highest minimum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_NONE 0xFFFF /**< No new maximum connction interval specified in connect parameters. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_MIN 0x0006 /**< Lowest maximum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_MAX 0x0C80 /**< Highest maximum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ -#define BLE_GAP_CP_SLAVE_LATENCY_MAX 0x03E8 /**< Highest slave latency permitted, in connection events. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_NONE 0xFFFF /**< No new supervision timeout specified in connect parameters. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MIN 0x000A /**< Lowest supervision timeout permitted, in units of 10 ms, i.e. 100 ms. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MAX 0x0C80 /**< Highest supervision timeout permitted, in units of 10 ms, i.e. 32 s. */ -/**@} */ - - -/**@brief GAP device name maximum length. */ -#define BLE_GAP_DEVNAME_MAX_LEN 31 - - -/**@defgroup BLE_GAP_CONN_SEC_MODE_SET_MACROS GAP attribute security requirement setters - * - * See @ref ble_gap_conn_sec_mode_t. - * @{ */ -/**@brief Set sec_mode pointed to by ptr to have no access rights.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(ptr) do {(ptr)->sm = 0; (ptr)->lv = 0;} while(0) -/**@brief Set sec_mode pointed to by ptr to require no protection, open link.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_OPEN(ptr) do {(ptr)->sm = 1; (ptr)->lv = 1;} while(0) -/**@brief Set sec_mode pointed to by ptr to require encryption, but no MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 2;} while(0) -/**@brief Set sec_mode pointed to by ptr to require encryption and MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 3;} while(0) -/**@brief Set sec_mode pointed to by ptr to require signing or encryption, no MITM protection needed.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_NO_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 1;} while(0) -/**@brief Set sec_mode pointed to by ptr to require signing or encryption with MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_WITH_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 2;} while(0) -/**@} */ - - -/**@brief GAP Security Key Length. */ -#define BLE_GAP_SEC_KEY_LEN 16 - -/**@brief GAP Passkey Length. */ -#define BLE_GAP_PASSKEY_LEN 6 - -/**@brief Maximum amount of addresses in a whitelist. */ -#define BLE_GAP_WHITELIST_ADDR_MAX_COUNT (8) - -/**@brief Maximum amount of IRKs in a whitelist. - * @note The number of IRKs is limited to 8, even if the hardware supports more. - */ -#define BLE_GAP_WHITELIST_IRK_MAX_COUNT (8) - -/**@defgroup GAP_SEC_MODES GAP Security Modes - * @{ */ -#define BLE_GAP_SEC_MODE 0x00 /**< No key (may be used to reject). */ -/**@} */ - -/**@} */ - -/**@addtogroup BLE_GAP_STRUCTURES Structures - * @{ */ - -/**@brief Bluetooth Low Energy address. */ -typedef struct -{ - uint8_t addr_type; /**< See @ref BLE_GAP_ADDR_TYPES. */ - uint8_t addr[BLE_GAP_ADDR_LEN]; /**< 48-bit address, LSB format. */ -} ble_gap_addr_t; - - -/**@brief GAP connection parameters. - * - * @note When ble_conn_params_t is received in an event, both min_conn_interval and - * max_conn_interval will be equal to the connection interval set by the central. - */ -typedef struct -{ - uint16_t min_conn_interval; /**< Minimum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t max_conn_interval; /**< Maximum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t slave_latency; /**< Slave Latency in number of connection events, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t conn_sup_timeout; /**< Connection Supervision Timeout in 10 ms units, see @ref BLE_GAP_CP_LIMITS.*/ -} ble_gap_conn_params_t; - - -/**@brief GAP link requirements. - * - * See Bluetooth Core specification, Volume 3 Part C 10.2 for details. - * - * Security Mode 0 Level 0: No access permissions at all (this level is not defined by the Bluetooth Core specification).\n - * Security Mode 1 Level 1: No security is needed (aka open link).\n - * Security Mode 1 Level 2: Encrypted link required, MITM protection not necessary.\n - * Security Mode 1 Level 3: MITM protected encrypted link required.\n - * Security Mode 2 Level 1: Signing or encryption required, MITM protection not necessary.\n - * Security Mode 2 Level 2: MITM protected signing required, unless link is MITM protected encrypted.\n - */ -typedef struct -{ - uint8_t sm : 4; /**< Security Mode (1 or 2), 0 for no permissions at all. */ - uint8_t lv : 4; /**< Level (1, 2 or 3), 0 for no permissions at all. */ - -} ble_gap_conn_sec_mode_t; - - -/**@brief GAP connection security status.*/ -typedef struct -{ - ble_gap_conn_sec_mode_t sec_mode; /**< Currently active security mode for this connection.*/ - uint8_t encr_key_size; /**< Length of currently active encryption key, 7 to 16 octets (only applicable for bonding procedures). */ -} ble_gap_conn_sec_t; - - -/**@brief Identity Resolving Key. */ -typedef struct -{ - uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Array containing IRK. */ -} ble_gap_irk_t; - - -/**@brief Whitelist structure. */ -typedef struct -{ - ble_gap_addr_t ** pp_addrs; /**< Pointer to array of device address pointers, pointing to addresses to be used in whitelist. NULL if none are given. */ - uint8_t addr_count; /**< Count of device addresses in array, up to @ref BLE_GAP_WHITELIST_ADDR_MAX_COUNT. */ - ble_gap_irk_t ** pp_irks; /**< Pointer to array of Identity Resolving Key (IRK) pointers, each pointing to an IRK in the whitelist. NULL if none are given. */ - uint8_t irk_count; /**< Count of IRKs in array, up to @ref BLE_GAP_WHITELIST_IRK_MAX_COUNT. */ -} ble_gap_whitelist_t; - - -/**@brief GAP advertising parameters.*/ -typedef struct -{ - uint8_t type; /**< See @ref BLE_GAP_ADV_TYPES. */ - ble_gap_addr_t* p_peer_addr; /**< For BLE_GAP_CONN_MODE_DIRECTED mode only, known peer address. */ - uint8_t fp; /**< Filter Policy, see @ref BLE_GAP_ADV_FILTER_POLICIES. */ - ble_gap_whitelist_t * p_whitelist; /**< Pointer to whitelist, NULL if none is given. */ - uint16_t interval; /**< Advertising interval between 0x0020 and 0x4000 in 0.625 ms units (20ms to 10.24s), see @ref BLE_GAP_ADV_INTERVALS. This parameter must be set to 0 if type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND. */ - uint16_t timeout; /**< Advertising timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. See also @ref BLE_GAP_ADV_TIMEOUT_VALUES. This parameter must be set to 0 if type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND. */ -} ble_gap_adv_params_t; - - -/**@brief GAP scanning parameters. */ -typedef struct -{ - uint8_t filter; /**< Filter based on discovery mode, see @ref BLE_GAP_DISC_MODES. */ - uint8_t active : 1; /**< If 1, perform active scanning (scan requests). */ - uint8_t selective : 1; /**< If 1, ignore unknown devices (non whitelisted). */ - uint16_t interval; /**< Scan interval between 0x0020 and 0x4000 in 0.625ms units (20ms to 10.24s). */ - uint16_t window; /**< Scan window between 0x0004 and 0x4000 in 0.625ms units (2.5ms to 10.24s). */ - uint16_t timeout; /**< Scan timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. */ -} ble_gap_scan_params_t; - - -/**@brief GAP security parameters. */ -typedef struct -{ - uint16_t timeout; /**< Timeout for SMP transactions or Security Request in seconds, see @ref sd_ble_gap_authenticate and @ref sd_ble_gap_sec_params_reply for more information. */ - uint8_t bond : 1; /**< Perform bonding. */ - uint8_t mitm : 1; /**< Man In The Middle protection required. */ - uint8_t io_caps : 3; /**< IO capabilities, see @ref BLE_GAP_IO_CAPS. */ - uint8_t oob : 1; /**< Out Of Band data available. */ - uint8_t min_key_size; /**< Minimum encryption key size in octets between 7 and 16. */ - uint8_t max_key_size; /**< Maximum encryption key size in octets between min_key_size and 16. */ -} ble_gap_sec_params_t; - - -/**@brief GAP Encryption Information. */ -typedef struct -{ - uint16_t div; /**< Encryption Diversifier. */ - uint8_t ltk[BLE_GAP_SEC_KEY_LEN]; /**< Long Term Key. */ - uint8_t auth : 1; /**< Authenticated Key. */ - uint8_t ltk_len : 7; /**< LTK length in octets. */ -} ble_gap_enc_info_t; - - -/**@brief GAP Master Identification. */ -typedef struct -{ - uint16_t ediv; /**< Encrypted Diversifier. */ - uint8_t rand[8]; /**< Random Number. */ -} ble_gap_master_id_t; - - -/**@brief GAP Identity Information. */ -typedef struct -{ - ble_gap_addr_t addr; /**< Bluetooth address to which this key applies. */ - uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Identity Resolution Key. */ -} ble_gap_id_info_t; - - -/**@brief GAP Signing Information. */ -typedef struct -{ - uint8_t csrk[BLE_GAP_SEC_KEY_LEN]; /* Connection Signature Resolving Key. */ -} ble_gap_sign_info_t; - - -/**@brief GAP Event IDs. - * Those IDs uniquely identify an event coming from the stack to the application. - */ -enum BLE_GAP_EVTS -{ - BLE_GAP_EVT_CONNECTED = BLE_GAP_EVT_BASE, /**< Connection established. */ - BLE_GAP_EVT_DISCONNECTED, /**< Disconnected from peer. */ - BLE_GAP_EVT_CONN_PARAM_UPDATE, /**< Connection Parameters updated. */ - BLE_GAP_EVT_SEC_PARAMS_REQUEST, /**< Request to provide security parameters. */ - BLE_GAP_EVT_SEC_INFO_REQUEST, /**< Request to provide security information. */ - BLE_GAP_EVT_PASSKEY_DISPLAY, /**< Request to display a passkey to the user. */ - BLE_GAP_EVT_AUTH_KEY_REQUEST, /**< Request to provide an authentication key. */ - BLE_GAP_EVT_AUTH_STATUS, /**< Authentication procedure completed with status. */ - BLE_GAP_EVT_CONN_SEC_UPDATE, /**< Connection security updated. */ - BLE_GAP_EVT_TIMEOUT, /**< Timeout expired. */ - BLE_GAP_EVT_RSSI_CHANGED, /**< Signal strength measurement report. */ -}; - - -/** - * @brief GAP Option IDs. - * IDs that uniquely identify a GAP option. - */ -enum BLE_GAP_OPTS -{ - BLE_GAP_OPT_LOCAL_CONN_LATENCY = BLE_GAP_OPT_BASE, /**< Local connection latency. */ - BLE_GAP_OPT_PASSKEY, /**< Set passkey to be used during pairing. This option can be used to make the SoftDevice use an application provided passkey instead of generating a random passkey.*/ - BLE_GAP_OPT_PRIVACY, /**< Set or get custom IRK or custom private address cycle interval. */ -}; -/**@} */ - - -/**@brief Event data for connected event. */ -typedef struct -{ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ - uint8_t irk_match :1; /**< If 1, peer device's address resolved using an IRK. */ - uint8_t irk_match_idx :7; /**< Index in IRK list where the address was matched. */ - ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ -} ble_gap_evt_connected_t; - - -/**@brief Event data for disconnected event. */ -typedef struct -{ - uint8_t reason; /**< HCI error code. */ -} ble_gap_evt_disconnected_t; - - -/**@brief Event data for connection parameter update event. */ -typedef struct -{ - ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ -} ble_gap_evt_conn_param_update_t; - - -/**@brief Event data for security parameters request event. */ -typedef struct -{ - ble_gap_sec_params_t peer_params; /**< Initiator Security Parameters. */ -} ble_gap_evt_sec_params_request_t; - - -/**@brief Event data for security info request event. */ -typedef struct -{ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ - uint16_t div; /**< Encryption diversifier for LTK lookup. */ - uint8_t enc_info : 1; /**< If 1, Encryption Information required. */ - uint8_t id_info : 1; /**< If 1, Identity Information required. */ - uint8_t sign_info : 1; /**< If 1, Signing Information required. */ -} ble_gap_evt_sec_info_request_t; - - -/**@brief Event data for passkey display event. */ -typedef struct -{ - uint8_t passkey[BLE_GAP_PASSKEY_LEN]; /**< 6-digit passkey in ASCII ('0'-'9' digits only). */ -} ble_gap_evt_passkey_display_t; - - -/**@brief Event data for authentication key request event. */ -typedef struct -{ - uint8_t key_type; /**< See @ref BLE_GAP_AUTH_KEY_TYPES. */ -} ble_gap_evt_auth_key_request_t; - - -/**@brief Security levels supported. - * @note See Bluetooth Specification Version 4.1 Volume 3, Part C, Chapter 10. -*/ -typedef struct -{ - uint8_t lv1 : 1; /**< If 1: Level 1 is supported. */ - uint8_t lv2 : 1; /**< If 1: Level 2 is supported. */ - uint8_t lv3 : 1; /**< If 1: Level 3 is supported. */ -} ble_gap_sec_levels_t; - - -/**@brief Keys that have been exchanged. */ -typedef struct -{ - uint8_t ltk : 1; /**< Long Term Key. */ - uint8_t ediv_rand : 1; /**< Encrypted Diversifier and Random value. */ - uint8_t irk : 1; /**< Identity Resolving Key. */ - uint8_t address : 1; /**< Public or static random address. */ - uint8_t csrk : 1; /**< Connection Signature Resolving Key. */ -} ble_gap_sec_keys_t; - - -/**@brief Event data for authentication status event. */ -typedef struct -{ - uint8_t auth_status; /**< Authentication status, see @ref BLE_GAP_SEC_STATUS. */ - uint8_t error_src; /**< On error, source that caused the failure, see @ref BLE_GAP_SEC_STATUS_SOURCES. */ - ble_gap_sec_levels_t sm1_levels; /**< Levels supported in Security Mode 1. */ - ble_gap_sec_levels_t sm2_levels; /**< Levels supported in Security Mode 2. */ - ble_gap_sec_keys_t periph_kex; /**< Bitmap stating which keys were exchanged (distributed) by the peripheral. */ - ble_gap_sec_keys_t central_kex; /**< Bitmap stating which keys were exchanged (distributed) by the central. */ - struct periph_keys_t - { - ble_gap_enc_info_t enc_info; /**< Peripheral's Encryption information. */ - } periph_keys; /**< Actual keys distributed from the Peripheral to the Central. */ - struct central_keys_t - { - ble_gap_irk_t irk; /**< Central's IRK. */ - ble_gap_addr_t id_info; /**< Central's Identity Info. */ - } central_keys; /**< Actual keys distributed from the Central to the Peripheral. */ -} ble_gap_evt_auth_status_t; - - -/**@brief Event data for connection security update event. */ -typedef struct -{ - ble_gap_conn_sec_t conn_sec; /**< Connection security level. */ -} ble_gap_evt_conn_sec_update_t; - - -/**@brief Event data for timeout event. */ -typedef struct -{ - uint8_t src; /**< Source of timeout event, see @ref BLE_GAP_TIMEOUT_SOURCES. */ -} ble_gap_evt_timeout_t; - - -/**@brief Event data for advertisement report event. */ -typedef struct -{ - int8_t rssi; /**< Received Signal Strength Indication in dBm. */ -} ble_gap_evt_rssi_changed_t; - - -/**@brief GAP event callback event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occured. */ - union /**< union alternative identified by evt_id in enclosing struct. */ - { - ble_gap_evt_connected_t connected; /**< Connected Event Parameters. */ - ble_gap_evt_disconnected_t disconnected; /**< Disconnected Event Parameters. */ - ble_gap_evt_conn_param_update_t conn_param_update; /**< Connection Parameter Update Parameters. */ - ble_gap_evt_sec_params_request_t sec_params_request; /**< Security Parameters Request Event Parameters. */ - ble_gap_evt_sec_info_request_t sec_info_request; /**< Security Information Request Event Parameters. */ - ble_gap_evt_passkey_display_t passkey_display; /**< Passkey Display Event Parameters. */ - ble_gap_evt_auth_key_request_t auth_key_request; /**< Authentication Key Request Event Parameters. */ - ble_gap_evt_auth_status_t auth_status; /**< Authentication Status Event Parameters. */ - ble_gap_evt_conn_sec_update_t conn_sec_update; /**< Connection Security Update Event Parameters. */ - ble_gap_evt_timeout_t timeout; /**< Timeout Event Parameters. */ - ble_gap_evt_rssi_changed_t rssi_changed; /**< RSSI Event parameters. */ - } params; - -} ble_gap_evt_t; - - -/**@brief Local connection latency option. - * - * Local connection latency is a feature which enables the slave to improve - * current consumption by ignoring the slave latency set by the peer. The - * local connection latency can only be set to a multiple of the slave latency, - * and cannot be longer than half of the supervision timeout. - * - * Used with @ref sd_ble_opt_set to set the local connection latency. The - * @ref sd_ble_opt_get is not supported for this option, but the actual - * local connection latency (unless set to NULL) is set as a return parameter - * when setting the option. - * - * @note The latency set will be truncated down to the closest slave latency event - * multiple, or the nearest multiple before half of the supervision timeout. - * - * @note The local connection latency is default off, and needs to be set for new - * connections and whenever the connection is updated. - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. - */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle */ - uint16_t requested_latency; /**< Requested local connection latency. */ - uint16_t * p_actual_latency; /**< Pointer to storage for the actual local connection latency (can be set to NULL to skip return value). */ -} ble_gap_opt_local_conn_latency_t; - - -/**@brief Passkey Option. - * - * Structure containing the passkey to be used during pairing. This can be used with @ref - * sd_ble_opt_set to make the SoftDevice use a pre-programmed passkey for authentication - * instead of generating a random one. - * - * @note @ref sd_ble_opt_get is not supported for this option. - * - */ -typedef struct -{ - uint8_t * p_passkey; /**< Pointer to 6-digit ASCII string (digit 0..9 only, no NULL termination) passkey to be used during pairing. If this is NULL, the SoftDevice will generate a random passkey if required.*/ -} ble_gap_opt_passkey_t; - - -/**@brief Custom Privacy Options. - * - * @note The specified address cycle interval is used when the address cycle mode is - * @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO. If 0 is given, the address will not be refreshed at any - * interval, and not at start of advertising. A new address can be generated manually by calling - * @ref sd_ble_gap_address_set with the same type again. The default interval is - * @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S. - * - * @note If cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO, the address will immediately be - * refreshed when this option is set. - */ -typedef struct -{ - ble_gap_irk_t * p_irk; /**< When input: Pointer to custom IRK, or NULL to use/reset to the device's default IRK. When output: Pointer to where the current IRK is to be stored, or NULL to not read out the IRK. */ - uint16_t interval_s; /**< When input: Custom private address cycle interval in seconds. When output: The current private address cycle interval. */ -} ble_gap_opt_privacy_t; - - -/**@brief Option structure for GAP options. */ -typedef union -{ - ble_gap_opt_local_conn_latency_t local_conn_latency; /**< Local connection latency. */ - ble_gap_opt_passkey_t passkey; /**< Passkey to be used for pairing.*/ - ble_gap_opt_privacy_t privacy; /**< Custom privacy options. */ -} ble_gap_opt_t; -/**@} */ - - -/**@addtogroup BLE_GAP_FUNCTIONS Functions - * @{ */ - -/**@brief Set local Bluetooth address. - * - * If the address cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO, the address type is required to - * be @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE or - * @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE. The given address is ignored and the - * SoftDevice will generate a new private address automatically every time advertising is - * (re)started, and every @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S seconds. If this API - * call is used again with the same parameters while advertising, the SoftDevice will immediately - * generate a new private address to replace the current address. - * - * If the application wishes to use a @ref BLE_GAP_ADDR_TYPE_PUBLIC or - * @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC address, the cycle mode must be - * @ref BLE_GAP_ADDR_CYCLE_MODE_NONE. - * - * If this API function is called while advertising, the softdevice will immediately update the - * advertising address without the need to stop advertising in the following cases: - * - If the previously set address is of type @ref BLE_GAP_ADDR_TYPE_PUBLIC and the new address - * is also of type @ref BLE_GAP_ADDR_TYPE_PUBLIC - * - If the previously set address is not @ref BLE_GAP_ADDR_TYPE_PUBLIC and the new address is - * also not @ref BLE_GAP_ADDR_TYPE_PUBLIC. - * - * If the address is changed from a @ref BLE_GAP_ADDR_TYPE_PUBLIC address to another type or from - * another type to a @ref BLE_GAP_ADDR_TYPE_PUBLIC address, the change will take effect the next - * time advertising is started. - * - * @note If the address cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_NONE and the application is - * using privacy, the application must take care to generate and set new private addresses - * periodically to comply with the Privacy specification in Bluetooth Core Spec. - * - * @param[in] addr_cycle_mode Address cycle mode, see @ref BLE_GAP_ADDR_CYCLE_MODES. - * @param[in] p_addr Pointer to address structure. - * - * @return @ref NRF_SUCCESS Address successfully set. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameters. - * @return @ref BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address. - * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. - */ -SVCALL(SD_BLE_GAP_ADDRESS_SET, uint32_t, sd_ble_gap_address_set(uint8_t addr_cycle_mode, ble_gap_addr_t const * const p_addr)); - - -/**@brief Get local Bluetooth address. - * - * @param[out] p_addr Pointer to address structure. - * - * @return @ref NRF_SUCCESS Address successfully retrieved. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GAP_ADDRESS_GET, uint32_t, sd_ble_gap_address_get(ble_gap_addr_t * const p_addr)); - - -/**@brief Set, clear or update advertisement and scan response data. - * - * @note The format of the advertisement data will be checked by this call to ensure interoperability. - * Limitations imposed by this API call to the data provided include having a flags data type in the scan response data and - * duplicating the local name in the advertisement data and scan response data. - * - * @note: To clear the advertisement data and set it to a 0-length packet, simply provide a valid pointer (p_data/p_sr_data) with its corresponding - * length (dlen/srdlen) set to 0. - * - * @note: The call will fail if p_data and p_sr_data are both NULL since this would have no effect. - * - * @param[in] p_data Raw data to be placed in advertisement packet. If NULL, no changes are made to the current advertisement packet data. - * @param[in] dlen Data length for p_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_data is NULL, can be 0 if p_data is not NULL. - * @param[in] p_sr_data Raw data to be placed in scan response packet. If NULL, no changes are made to the current scan response packet data. - * @param[in] srdlen Data length for p_sr_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_sr_data is NULL, can be 0 if p_data is not NULL. - * - * @return @ref NRF_SUCCESS Advertisement data successfully updated or cleared. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_FLAGS Invalid combination of advertising flags supplied. - * @return @ref NRF_ERROR_INVALID_DATA Invalid data type(s) supplied, check the advertising data format specification. - * @return @ref NRF_ERROR_INVALID_LENGTH Invalid data length(s) supplied. - * @return @ref BLE_ERROR_GAP_UUID_LIST_MISMATCH Invalid UUID list supplied. - * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. - */ -SVCALL(SD_BLE_GAP_ADV_DATA_SET, uint32_t, sd_ble_gap_adv_data_set(uint8_t const * const p_data, uint8_t dlen, uint8_t const * const p_sr_data, uint8_t srdlen)); - - -/**@brief Start advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). - * - * @param[in] p_adv_params Pointer to advertising parameters structure. - * - * @return @ref NRF_SUCCESS The BLE stack has started advertising. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check the accepted ranges and limits. - * @return @ref BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Bluetooth address supplied. - * @return @ref BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST Discoverable mode and whitelist incompatible. - */ -SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start(ble_gap_adv_params_t const * const p_adv_params)); - - -/**@brief Stop advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). - * - * @return @ref NRF_SUCCESS The BLE stack has stopped advertising. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation (most probably not in advertising state). - */ -SVCALL(SD_BLE_GAP_ADV_STOP, uint32_t, sd_ble_gap_adv_stop(void)); - - -/**@brief Update connection parameters. - * - * @details In the central role this will initiate a Link Layer connection parameter update procedure, - * otherwise in the peripheral role, this will send the corresponding L2CAP request and wait for - * the central to perform the procedure. In both cases, and regardless of success or failure, the application - * will be informed of the result with a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE event. - * - * @note If both a connection supervision timeout and a maximum connection interval are specified, then the following constraint - * applies: (conn_sup_timeout * 8) >= (max_conn_interval * (slave_latency + 1)) - * - * @param[in] conn_handle Connection handle. - * @param[in] p_conn_params Pointer to desired connection parameters. If NULL is provided on a peripheral role, - * the parameters in the PPCP characteristic of the GAP service will be used instead. - * - * @return @ref NRF_SUCCESS The Connection Update procedure has been started successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. - * @return @ref NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, process pending events and retry. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GAP_CONN_PARAM_UPDATE, uint32_t, sd_ble_gap_conn_param_update(uint16_t conn_handle, ble_gap_conn_params_t const * const p_conn_params)); - - -/**@brief Disconnect (GAP Link Termination). - * - * @details This call initiates the disconnection procedure, and its completion will be communicated to the application - * with a BLE_GAP_EVT_DISCONNECTED event. - * - * @param[in] conn_handle Connection handle. - * @param[in] hci_status_code HCI status code, see @ref BLE_HCI_STATUS_CODES (accepted values are BTLE_REMOTE_USER_TERMINATED_CONNECTION and BTLE_CONN_INTERVAL_UNACCEPTABLE). - * - * @return @ref NRF_SUCCESS The disconnection procedure has been started successfully. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation (disconnection is already in progress or not connected at all). - */ -SVCALL(SD_BLE_GAP_DISCONNECT, uint32_t, sd_ble_gap_disconnect(uint16_t conn_handle, uint8_t hci_status_code)); - - -/**@brief Set the radio's transmit power. - * - * @param[in] tx_power Radio transmit power in dBm (accepted values are -40, -30, -20, -16, -12, -8, -4, 0, and 4 dBm). - * - * @note -40 dBm will not actually give -40 dBm, but will instead be remapped to -30 dBm. - * - * @return @ref NRF_SUCCESS Successfully changed the transmit power. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. - */ -SVCALL(SD_BLE_GAP_TX_POWER_SET, uint32_t, sd_ble_gap_tx_power_set(int8_t tx_power)); - - -/**@brief Set GAP Appearance value. - * - * @param[in] appearance Appearance (16-bit), see @ref BLE_APPEARANCES. - * - * @return @ref NRF_SUCCESS Appearance value set successfully. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - */ -SVCALL(SD_BLE_GAP_APPEARANCE_SET, uint32_t, sd_ble_gap_appearance_set(uint16_t appearance)); - - -/**@brief Get GAP Appearance value. - * - * @param[out] p_appearance Appearance (16-bit), see @ref BLE_APPEARANCES. - * - * @return @ref NRF_SUCCESS Appearance value retrieved successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GAP_APPEARANCE_GET, uint32_t, sd_ble_gap_appearance_get(uint16_t * const p_appearance)); - - -/**@brief Set GAP Peripheral Preferred Connection Parameters. - * - * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure with the desired parameters. - * - * @return @ref NRF_SUCCESS Peripheral Preferred Connection Parameters set successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - */ -SVCALL(SD_BLE_GAP_PPCP_SET, uint32_t, sd_ble_gap_ppcp_set(ble_gap_conn_params_t const * const p_conn_params)); - - -/**@brief Get GAP Peripheral Preferred Connection Parameters. - * - * @param[out] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the parameters will be stored. - * - * @return @ref NRF_SUCCESS Peripheral Preferred Connection Parameters retrieved successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GAP_PPCP_GET, uint32_t, sd_ble_gap_ppcp_get(ble_gap_conn_params_t * const p_conn_params)); - - -/**@brief Set GAP device name. - * - * @param[in] p_write_perm Write permissions for the Device Name characteristic see @ref ble_gap_conn_sec_mode_t. - * @param[in] p_dev_name Pointer to a UTF-8 encoded, <b>non NULL-terminated</b> string. - * @param[in] len Length of the UTF-8, <b>non NULL-terminated</b> string pointed to by p_dev_name in octets (must be smaller or equal than @ref BLE_GAP_DEVNAME_MAX_LEN). - * - * @return @ref NRF_SUCCESS GAP device name and permissions set successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - */ -SVCALL(SD_BLE_GAP_DEVICE_NAME_SET, uint32_t, sd_ble_gap_device_name_set(ble_gap_conn_sec_mode_t const * const p_write_perm, uint8_t const * const p_dev_name, uint16_t len)); - - -/**@brief Get GAP device name. - * - * @param[in] p_dev_name Pointer to an empty buffer where the UTF-8 <b>non NULL-terminated</b> string will be placed. Set to NULL to obtain the complete device name length. - * @param[in,out] p_len Length of the buffer pointed by p_dev_name, complete device name length on output. - * - * @note If the device name is longer than the size of the supplied buffer, - * p_len will return the complete device name length, - * and not the number of bytes actually returned in p_dev_name. - * The application may use this information to allocate a suitable buffer size. - * - * @return @ref NRF_SUCCESS GAP device name retrieved successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - */ -SVCALL(SD_BLE_GAP_DEVICE_NAME_GET, uint32_t, sd_ble_gap_device_name_get(uint8_t * const p_dev_name, uint16_t * const p_len)); - - -/**@brief Initiate GAP Authentication procedure. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_sec_params Pointer to the @ref ble_gap_sec_params_t structure with the security parameters to be used during the pairing procedure. - * - * @details In the central role, this function will send an SMP Pairing Request, otherwise in the peripheral role, an SMP Security Request will be sent. - * In the peripheral role, only the timeout, bond and mitm fields of @ref ble_gap_sec_params_t are used. - * - * @note The GAP Authentication procedure may be triggered by the central without calling this function when accessing a secure service. - * @note Calling this function may result in the following events depending on the outcome and parameters: @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, - * @ref BLE_GAP_EVT_SEC_INFO_REQUEST, @ref BLE_GAP_EVT_AUTH_KEY_REQUEST, @ref BLE_GAP_EVT_AUTH_STATUS. - * @note The timeout parameter in @ref ble_gap_sec_params_t is interpreted here as the Security Request timeout - * - * - * @return @ref NRF_SUCCESS Successfully initiated authentication procedure. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_AUTHENTICATE, uint32_t, sd_ble_gap_authenticate(uint16_t conn_handle, ble_gap_sec_params_t const * const p_sec_params)); - - -/**@brief Reply with GAP security parameters. - * - * @param[in] conn_handle Connection handle. - * @param[in] sec_status Security status, see @ref BLE_GAP_SEC_STATUS. - * @param[in] p_sec_params Pointer to a @ref ble_gap_sec_params_t security parameters structure. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, calling it at other times will result in an NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * @note The timeout parameter in @ref ble_gap_sec_params_t is interpreted here as the SMP procedure timeout, and must be 30 seconds. The function will fail - * if the application supplies a different value. - * - * @return @ref NRF_SUCCESS Successfully accepted security parameter from the application. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_SEC_PARAMS_REPLY, uint32_t, sd_ble_gap_sec_params_reply(uint16_t conn_handle, uint8_t sec_status, ble_gap_sec_params_t const * const p_sec_params)); - - -/**@brief Reply with an authentication key. - * - * @param[in] conn_handle Connection handle. - * @param[in] key_type See @ref BLE_GAP_AUTH_KEY_TYPES. - * @param[in] key If key type is BLE_GAP_AUTH_KEY_TYPE_NONE, then NULL. - * If key type is BLE_GAP_AUTH_KEY_TYPE_PASSKEY, then a 6-byte ASCII string (digit 0..9 only, no NULL termination). - * If key type is BLE_GAP_AUTH_KEY_TYPE_OOB, then a 16-byte OOB key value in Little Endian format. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_AUTH_KEY_REQUEST, calling it at other times will result in an NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * - * @return @ref NRF_SUCCESS Authentication key successfully set. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_AUTH_KEY_REPLY, uint32_t, sd_ble_gap_auth_key_reply(uint16_t conn_handle, uint8_t key_type, uint8_t const * const key)); - - -/**@brief Reply with GAP security information. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. May be NULL to signal none is available. - * @param[in] p_sign_info Pointer to a @ref ble_gap_sign_info_t signing information structure. May be NULL to signal none is available. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_INFO_REQUEST, calling it at other times will result in NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * @note Data signing is not implemented yet. p_sign_info must therefore be NULL. - * - * @return @ref NRF_SUCCESS Successfully accepted security information. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. - */ -SVCALL(SD_BLE_GAP_SEC_INFO_REPLY, uint32_t, sd_ble_gap_sec_info_reply(uint16_t conn_handle, ble_gap_enc_info_t const * const p_enc_info, ble_gap_sign_info_t const * const p_sign_info)); - - -/**@brief Get the current connection security. - * - * @param[in] conn_handle Connection handle. - * @param[out] p_conn_sec Pointer to a @ref ble_gap_conn_sec_t structure to be filled in. - * - * @return @ref NRF_SUCCESS Current connection security successfully retrieved. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_CONN_SEC_GET, uint32_t, sd_ble_gap_conn_sec_get(uint16_t conn_handle, ble_gap_conn_sec_t * const p_conn_sec)); - - -/**@brief Start reporting the received signal strength to the application. - * - * A new event is reported whenever the RSSI value changes, until @ref sd_ble_gap_rssi_stop is called. - * - * @param[in] conn_handle Connection handle. - * - * @return @ref NRF_SUCCESS Successfully activated RSSI reporting. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_RSSI_START, uint32_t, sd_ble_gap_rssi_start(uint16_t conn_handle)); - - -/**@brief Stop reporting the received singnal strength. - * - * An RSSI change detected before the call but not yet received by the application - * may be reported after @ref sd_ble_gap_rssi_stop has been called. - * - * @param[in] conn_handle Connection handle. - * - * @return @ref NRF_SUCCESS Successfully deactivated RSSI reporting. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_RSSI_STOP, uint32_t, sd_ble_gap_rssi_stop(uint16_t conn_handle)); -/**@} */ - -#endif // BLE_GAP_H__ - -/** - @} -*/
--- a/TARGET_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gatt.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,171 +0,0 @@ -/* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - /** - @addtogroup BLE_GATT Generic Attribute Profile (GATT) Common - @{ - @brief Common definitions and prototypes for the GATT interfaces. - */ - -#ifndef BLE_GATT_H__ -#define BLE_GATT_H__ - -#include "ble_types.h" -#include "ble_ranges.h" - - -/** @addtogroup BLE_GATT_DEFINES Defines - * @{ */ - -/** @brief Default MTU size. */ -#define GATT_MTU_SIZE_DEFAULT 23 - -/** @brief Only the default MTU size of 23 is currently supported. */ -#define GATT_RX_MTU 23 - - -/**@brief Invalid Attribute Handle. */ -#define BLE_GATT_HANDLE_INVALID 0x0000 - -/** @defgroup BLE_GATT_TIMEOUT_SOURCES GATT Timeout sources - * @{ */ -#define BLE_GATT_TIMEOUT_SRC_PROTOCOL 0x00 /**< ATT Protocol timeout. */ -/** @} */ - -/** @defgroup BLE_GATT_WRITE_OPS GATT Write operations - * @{ */ -#define BLE_GATT_OP_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATT_OP_WRITE_REQ 0x01 /**< Write Request. */ -#define BLE_GATT_OP_WRITE_CMD 0x02 /**< Write Command. */ -#define BLE_GATT_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ -#define BLE_GATT_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ -#define BLE_GATT_OP_EXEC_WRITE_REQ 0x05 /**< Execute Write Request. */ -/** @} */ - -/** @defgroup BLE_GATT_EXEC_WRITE_FLAGS GATT Execute Write flags - * @{ */ -#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_CANCEL 0x00 -#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE 0x01 -/** @} */ - -/** @defgroup BLE_GATT_HVX_TYPES GATT Handle Value operations - * @{ */ -#define BLE_GATT_HVX_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATT_HVX_NOTIFICATION 0x01 /**< Handle Value Notification. */ -#define BLE_GATT_HVX_INDICATION 0x02 /**< Handle Value Indication. */ -/** @} */ - -/** @defgroup BLE_GATT_STATUS_CODES GATT Status Codes - * @{ */ -#define BLE_GATT_STATUS_SUCCESS 0x0000 /**< Success. */ -#define BLE_GATT_STATUS_UNKNOWN 0x0001 /**< Unknown or not applicable status. */ -#define BLE_GATT_STATUS_ATTERR_INVALID 0x0100 /**< ATT Error: Invalid Error Code. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_HANDLE 0x0101 /**< ATT Error: Invalid Attribute Handle. */ -#define BLE_GATT_STATUS_ATTERR_READ_NOT_PERMITTED 0x0102 /**< ATT Error: Read not permitted. */ -#define BLE_GATT_STATUS_ATTERR_WRITE_NOT_PERMITTED 0x0103 /**< ATT Error: Write not permitted. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_PDU 0x0104 /**< ATT Error: Used in ATT as Invalid PDU. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHENTICATION 0x0105 /**< ATT Error: Authenticated link required. */ -#define BLE_GATT_STATUS_ATTERR_REQUEST_NOT_SUPPORTED 0x0106 /**< ATT Error: Used in ATT as Request Not Supported. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_OFFSET 0x0107 /**< ATT Error: Offset specified was past the end of the attribute. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHORIZATION 0x0108 /**< ATT Error: Used in ATT as Insufficient Authorisation. */ -#define BLE_GATT_STATUS_ATTERR_PREPARE_QUEUE_FULL 0x0109 /**< ATT Error: Used in ATT as Prepare Queue Full. */ -#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND 0x010A /**< ATT Error: Used in ATT as Attribute not found. */ -#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_LONG 0x010B /**< ATT Error: Attribute cannot be read or written using read/write blob requests. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_ENC_KEY_SIZE 0x010C /**< ATT Error: Encryption key size used is insufficient. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_ATT_VAL_LENGTH 0x010D /**< ATT Error: Invalid value size. */ -#define BLE_GATT_STATUS_ATTERR_UNLIKELY_ERROR 0x010E /**< ATT Error: Very unlikely error. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_ENCRYPTION 0x010F /**< ATT Error: Encrypted link required. */ -#define BLE_GATT_STATUS_ATTERR_UNSUPPORTED_GROUP_TYPE 0x0110 /**< ATT Error: Attribute type is not a supported grouping attribute. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_RESOURCES 0x0111 /**< ATT Error: Encrypted link required. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_BEGIN 0x0112 /**< ATT Error: Reserved for Future Use range #1 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_END 0x017F /**< ATT Error: Reserved for Future Use range #1 end. */ -#define BLE_GATT_STATUS_ATTERR_APP_BEGIN 0x0180 /**< ATT Error: Application range begin. */ -#define BLE_GATT_STATUS_ATTERR_APP_END 0x019F /**< ATT Error: Application range end. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_BEGIN 0x01A0 /**< ATT Error: Reserved for Future Use range #2 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_END 0x01DF /**< ATT Error: Reserved for Future Use range #2 end. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_BEGIN 0x01E0 /**< ATT Error: Reserved for Future Use range #3 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_END 0x01FC /**< ATT Error: Reserved for Future Use range #3 end. */ -#define BLE_GATT_STATUS_ATTERR_CPS_CCCD_CONFIG_ERROR 0x01FD /**< ATT Common Profile and Service Error: Client Characteristic Configuration Descriptor improperly configured. */ -#define BLE_GATT_STATUS_ATTERR_CPS_PROC_ALR_IN_PROG 0x01FE /**< ATT Common Profile and Service Error: Procedure Already in Progress. */ -#define BLE_GATT_STATUS_ATTERR_CPS_OUT_OF_RANGE 0x01FF /**< ATT Common Profile and Service Error: Out Of Range. */ -/** @} */ - - -/** @defgroup BLE_GATT_CPF_FORMATS Characteristic Presentation Formats - * @note Found at http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml - * @{ */ -#define BLE_GATT_CPF_FORMAT_RFU 0x00 /**< Reserved For Future Use. */ -#define BLE_GATT_CPF_FORMAT_BOOLEAN 0x01 /**< Boolean. */ -#define BLE_GATT_CPF_FORMAT_2BIT 0x02 /**< Unsigned 2-bit integer. */ -#define BLE_GATT_CPF_FORMAT_NIBBLE 0x03 /**< Unsigned 4-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT8 0x04 /**< Unsigned 8-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT12 0x05 /**< Unsigned 12-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT16 0x06 /**< Unsigned 16-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT24 0x07 /**< Unsigned 24-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT32 0x08 /**< Unsigned 32-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT48 0x09 /**< Unsigned 48-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT64 0x0A /**< Unsigned 64-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT128 0x0B /**< Unsigned 128-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT8 0x0C /**< Signed 2-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT12 0x0D /**< Signed 12-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT16 0x0E /**< Signed 16-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT24 0x0F /**< Signed 24-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT32 0x10 /**< Signed 32-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT48 0x11 /**< Signed 48-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT64 0x12 /**< Signed 64-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT128 0x13 /**< Signed 128-bit integer. */ -#define BLE_GATT_CPF_FORMAT_FLOAT32 0x14 /**< IEEE-754 32-bit floating point. */ -#define BLE_GATT_CPF_FORMAT_FLOAT64 0x15 /**< IEEE-754 64-bit floating point. */ -#define BLE_GATT_CPF_FORMAT_SFLOAT 0x16 /**< IEEE-11073 16-bit SFLOAT. */ -#define BLE_GATT_CPF_FORMAT_FLOAT 0x17 /**< IEEE-11073 32-bit FLOAT. */ -#define BLE_GATT_CPF_FORMAT_DUINT16 0x18 /**< IEEE-20601 format. */ -#define BLE_GATT_CPF_FORMAT_UTF8S 0x19 /**< UTF-8 string. */ -#define BLE_GATT_CPF_FORMAT_UTF16S 0x1A /**< UTF-16 string. */ -#define BLE_GATT_CPF_FORMAT_STRUCT 0x1B /**< Opaque Structure. */ -/** @} */ - -/** @defgroup BLE_GATT_CPF_NAMESPACES GATT Bluetooth Namespaces - * @{ - */ -#define BLE_GATT_CPF_NAMESPACE_BTSIG 0x01 -#define BLE_GATT_CPF_NAMESPACE_DESCRIPTION_UNKNOWN 0x0000 -/** @} */ - -/** @} */ - -/** @addtogroup BLE_GATT_STRUCTURES Structures - * @{ */ - -/**@brief GATT Characteristic Properties. */ -typedef struct -{ - /* Standard properties */ - uint8_t broadcast :1; /**< Broadcasting of value permitted. */ - uint8_t read :1; /**< Reading value permitted. */ - uint8_t write_wo_resp :1; /**< Writing value with Write Command permitted. */ - uint8_t write :1; /**< Writing value with Write Request permitted. */ - uint8_t notify :1; /**< Notications of value permitted. */ - uint8_t indicate :1; /**< Indications of value permitted. */ - uint8_t auth_signed_wr :1; /**< Writing value with Signed Write Command permitted. */ -} ble_gatt_char_props_t; - -/**@brief GATT Characteristic Extended Properties. */ -typedef struct -{ - /* Extended properties */ - uint8_t reliable_wr :1; /**< Writing value with Queued Write Request permitted. */ - uint8_t wr_aux :1; /**< Writing the Characteristic User Description permitted. */ -} ble_gatt_char_ext_props_t; - -#endif // BLE_GATT_H__ - -/** @} */ - -/** - @} - @} -*/
--- a/TARGET_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gattc.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,406 +0,0 @@ -/* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_GATTC Generic Attribute Profile (GATT) Client - @{ - @brief Definitions and prototypes for the GATT Client interface. - */ - -#ifndef BLE_GATTC_H__ -#define BLE_GATTC_H__ - -#include "ble_gatt.h" -#include "ble_types.h" -#include "ble_ranges.h" -#include "nrf_svc.h" - -/** @addtogroup BLE_GATTC_ENUMERATIONS Enumerations - * @{ */ - -/**@brief GATTC API SVC numbers. */ -enum BLE_GATTC_SVCS -{ - SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER = BLE_GATTC_SVC_BASE, /**< Primary Service Discovery. */ - SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, /**< Relationship Discovery. */ - SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, /**< Characteristic Discovery. */ - SD_BLE_GATTC_DESCRIPTORS_DISCOVER, /**< Characteristic Descriptor Discovery. */ - SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, /**< Read Characteristic Value by UUID. */ - SD_BLE_GATTC_READ, /**< Generic read. */ - SD_BLE_GATTC_CHAR_VALUES_READ, /**< Read multiple Characteristic Values. */ - SD_BLE_GATTC_WRITE, /**< Generic write. */ - SD_BLE_GATTC_HV_CONFIRM /**< Handle Value Confirmation. */ -}; - -/** @} */ - -/** @addtogroup BLE_GATTC_DEFINES Defines - * @{ */ - -/** @defgroup BLE_ERRORS_GATTC SVC return values specific to GATTC - * @{ */ -#define BLE_ERROR_GATTC_PROC_NOT_PERMITTED (NRF_GATTC_ERR_BASE + 0x000) -/** @} */ - -/**@brief Last Attribute Handle. */ -#define BLE_GATTC_HANDLE_END 0xFFFF - -/** @} */ - -/** @addtogroup BLE_GATTC_STRUCTURES Structures - * @{ */ - -/**@brief Operation Handle Range. */ -typedef struct -{ - uint16_t start_handle; /**< Start Handle. */ - uint16_t end_handle; /**< End Handle. */ -} ble_gattc_handle_range_t; - - -/**@brief GATT service. */ -typedef struct -{ - ble_uuid_t uuid; /**< Service UUID. */ - ble_gattc_handle_range_t handle_range; /**< Service Handle Range. */ -} ble_gattc_service_t; - - -/**@brief GATT include. */ -typedef struct -{ - uint16_t handle; /**< Include Handle. */ - ble_gattc_service_t included_srvc; /**< Handle of the included service. */ -} ble_gattc_include_t; - - -/**@brief GATT characteristic. */ -typedef struct -{ - ble_uuid_t uuid; /**< Characteristic UUID. */ - ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ - uint8_t char_ext_props : 1; /**< Extended properties present. */ - uint16_t handle_decl; /**< Handle of the Characteristic Declaration. */ - uint16_t handle_value; /**< Handle of the Characteristic Value. */ -} ble_gattc_char_t; - - -/**@brief GATT descriptor. */ -typedef struct -{ - uint16_t handle; /**< Descriptor Handle. */ - ble_uuid_t uuid; /**< Descriptor UUID. */ -} ble_gattc_desc_t; - - -/**@brief Write Parameters. */ -typedef struct -{ - uint8_t write_op; /**< Write Operation to be performed, see @ref BLE_GATT_WRITE_OPS. */ - uint16_t handle; /**< Handle to the attribute to be written. */ - uint16_t offset; /**< Offset in bytes. @note For WRITE_CMD and WRITE_REQ, offset must be 0. */ - uint16_t len; /**< Length of data in bytes. */ - uint8_t* p_value; /**< Pointer to the value data. */ - uint8_t flags; /**< Flags, see @ref BLE_GATT_EXEC_WRITE_FLAGS. */ -} ble_gattc_write_params_t; - - -/** - * @brief GATT Client Event IDs. - */ -enum BLE_GATTC_EVTS -{ - BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP = BLE_GATTC_EVT_BASE, /**< Primary Service Discovery Response event. */ - BLE_GATTC_EVT_REL_DISC_RSP, /**< Relationship Discovery Response event. */ - BLE_GATTC_EVT_CHAR_DISC_RSP, /**< Characteristic Discovery Response event. */ - BLE_GATTC_EVT_DESC_DISC_RSP, /**< Descriptor Discovery Response event. */ - BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP, /**< Read By UUID Response event. */ - BLE_GATTC_EVT_READ_RSP, /**< Read Response event. */ - BLE_GATTC_EVT_CHAR_VALS_READ_RSP, /**< Read multiple Response event. */ - BLE_GATTC_EVT_WRITE_RSP, /**< Write Response event. */ - BLE_GATTC_EVT_HVX, /**< Handle Value Notification or Indication event. */ - BLE_GATTC_EVT_TIMEOUT /**< Timeout event. */ -}; - -/**@brief Event structure for BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Service count. */ - ble_gattc_service_t services[1]; /**< Service data, variable length. */ -} ble_gattc_evt_prim_srvc_disc_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_REL_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Include count. */ - ble_gattc_include_t includes[1]; /**< Include data, variable length. */ -} ble_gattc_evt_rel_disc_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_CHAR_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Characteristic count. */ - ble_gattc_char_t chars[1]; /**< Characteristic data, variable length. */ -} ble_gattc_evt_char_disc_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_DESC_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Descriptor count. */ - ble_gattc_desc_t descs[1]; /**< Descriptor data, variable length. */ -} ble_gattc_evt_desc_disc_rsp_t; - -/**@brief GATT read by UUID handle value pair. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint8_t *p_value; /**< Pointer to value, variable length (length available as value_len in ble_gattc_evt_read_by_uuid_rsp_t). - Please note that this pointer is absolute to the memory provided by the user when retrieving the event, - so it will effectively point to a location inside the handle_value array. */ -} ble_gattc_handle_value_t; - -/**@brief Event structure for BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP. */ -typedef struct -{ - uint16_t count; /**< Handle-Value Pair Count. */ - uint16_t value_len; /**< Length of the value in Handle-Value(s) list. */ - ble_gattc_handle_value_t handle_value[1]; /**< Handle-Value(s) list, variable length. */ -} ble_gattc_evt_char_val_by_uuid_read_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_READ_RSP. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint16_t offset; /**< Offset of the attribute data. */ - uint16_t len; /**< Attribute data length. */ - uint8_t data[1]; /**< Attribute data, variable length. */ -} ble_gattc_evt_read_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_CHAR_VALS_READ_RSP. */ -typedef struct -{ - uint16_t len; /**< Concatenated Attribute values length. */ - uint8_t values[1]; /**< Attribute values, variable length. */ -} ble_gattc_evt_char_vals_read_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_WRITE_RSP. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint8_t write_op; /**< Type of write operation, see @ref BLE_GATT_WRITE_OPS. */ - uint16_t offset; /**< Data Offset. */ - uint16_t len; /**< Data length. */ - uint8_t data[1]; /**< Data, variable length. */ -} ble_gattc_evt_write_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_HVX. */ -typedef struct -{ - uint16_t handle; /**< Handle to which the HVx operation applies. */ - uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ - uint16_t len; /**< Attribute data length. */ - uint8_t data[1]; /**< Attribute data, variable length. */ -} ble_gattc_evt_hvx_t; - -/**@brief Event structure for BLE_GATTC_EVT_TIMEOUT. */ -typedef struct -{ - uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ -} ble_gattc_evt_timeout_t; - -/**@brief GATTC event type. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occured. */ - uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ - uint16_t error_handle; /**< In case of error: The handle causing the error. In all other cases BLE_GATT_HANDLE_INVALID. */ - union - { - ble_gattc_evt_prim_srvc_disc_rsp_t prim_srvc_disc_rsp; /**< Primary Service Discovery Response Event Parameters. */ - ble_gattc_evt_rel_disc_rsp_t rel_disc_rsp; /**< Relationship Discovery Response Event Parameters. */ - ble_gattc_evt_char_disc_rsp_t char_disc_rsp; /**< Characteristic Discovery Response Event Parameters. */ - ble_gattc_evt_desc_disc_rsp_t desc_disc_rsp; /**< Descriptor Discovery Response Event Parameters. */ - ble_gattc_evt_char_val_by_uuid_read_rsp_t char_val_by_uuid_read_rsp; /**< Characteristic Value Read by UUID Response Event Parameters. */ - ble_gattc_evt_read_rsp_t read_rsp; /**< Read Response Event Parameters. */ - ble_gattc_evt_char_vals_read_rsp_t char_vals_read_rsp; /**< Characteristic Values Read Response Event Parameters. */ - ble_gattc_evt_write_rsp_t write_rsp; /**< Write Response Event Parameters. */ - ble_gattc_evt_hvx_t hvx; /**< Handle Value Notification/Indication Event Parameters. */ - ble_gattc_evt_timeout_t timeout; /**< Timeout Event Parameters. */ - } params; /**< Event Parameters. @note Only valid if @ref gatt_status == BLE_GATT_STATUS_SUCCESS. */ -} ble_gattc_evt_t; -/** @} */ - -/** @addtogroup BLE_GATTC_FUNCTIONS Functions - * @{ */ - -/**@brief Initiate or continue a GATT Primary Service Discovery procedure. - * - * @details This function initiates a Primary Service discovery, starting from the supplied handle. - * If the last service has not been reached, this must be called again with an updated start handle value to continue the search. - * - * @note If any of the discovered services have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with - * type BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] start_handle Handle to start searching from. - * @param[in] p_srvc_uuid Pointer to the service UUID to be found. If it is NULL, all primary services will be returned. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Primary Service Discovery procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER, uint32_t, sd_ble_gattc_primary_services_discover(uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const * const p_srvc_uuid)); - - -/**@brief Initiate or continue a GATT Relationship Discovery procedure. - * - * @details This function initiates the Find Included Services sub-procedure. If the last included service has not been reached, - * this must be called again with an updated handle range to continue the search. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Relationship Discovery procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, uint32_t, sd_ble_gattc_relationships_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); - - -/**@brief Initiate or continue a GATT Characteristic Discovery procedure. - * - * @details This function initiates a Characteristic discovery procedure. If the last Characteristic has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @note If any of the discovered characteristics have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with - * type BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Characteristic Discovery procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, uint32_t, sd_ble_gattc_characteristics_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); - - -/**@brief Initiate or continue a GATT Characteristic Descriptor Discovery procedure. - * - * @details This function initiates the Characteristic Descriptor discovery procedure. If the last Descriptor has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Characteristic to perform this procedure on. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Descriptor Discovery procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_DESCRIPTORS_DISCOVER, uint32_t, sd_ble_gattc_descriptors_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); - - -/**@brief Initiate or continue a GATT Read using Characteristic UUID procedure. - * - * @details This function initiates the Read using Characteristic UUID procedure. If the last Characteristic has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_uuid Pointer to a Characteristic value UUID to read. - * @param[in] p_handle_range A pointer to the range of handles to perform this procedure on. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Read using Characteristic UUID procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, uint32_t, sd_ble_gattc_char_value_by_uuid_read(uint16_t conn_handle, ble_uuid_t const * const p_uuid, ble_gattc_handle_range_t const * const p_handle_range)); - - -/**@brief Initiate or continue a GATT Read (Long) Characteristic or Descriptor procedure. - * - * @details This function initiates a GATT Read (Long) Characteristic or Descriptor procedure. If the Characteristic or Descriptor - * to be read is longer than GATT_MTU - 1, this function must be called multiple times with appropriate offset to read the - * complete value. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] handle The handle of the attribute to be read. - * @param[in] offset Offset into the attribute value to be read. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Read (Long) procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_READ, uint32_t, sd_ble_gattc_read(uint16_t conn_handle, uint16_t handle, uint16_t offset)); - - -/**@brief Initiate a GATT Read Multiple Characteristic Values procedure. - * - * @details This function initiates a GATT Read Multiple Characteristic Values procedure. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. - * @param[in] handle_count The number of handles in p_handles. - * - * @return @ref NRF_SUCCESS Successfully started the Read Multiple Characteristic Values procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_CHAR_VALUES_READ, uint32_t, sd_ble_gattc_char_values_read(uint16_t conn_handle, uint16_t const * const p_handles, uint16_t handle_count)); - - -/**@brief Perform a Write (Characteristic Value or Descriptor, with or without response, signed or not, long or reliable) procedure. - * - * @details This function can perform all write procedures described in GATT. - * - * @note It is important to note that a write without response will <b>consume an application buffer</b>, and will therefore - * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. A write on the other hand will use the - * standard client internal buffer and thus will only generate a @ref BLE_GATTC_EVT_WRITE_RSP event as soon as the write response - * has been received from the peer. Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_write_params A pointer to a write parameters structure. - * - * @return @ref NRF_SUCCESS Successfully started the Write procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - * @return @ref NRF_ERROR_BUSY Procedure already in progress. - * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers left. - */ -SVCALL(SD_BLE_GATTC_WRITE, uint32_t, sd_ble_gattc_write(uint16_t conn_handle, ble_gattc_write_params_t const * const p_write_params)); - - -/**@brief Send a Handle Value Confirmation to the GATT Server. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] handle The handle of the attribute in the indication. - * - * @return @ref NRF_SUCCESS Successfully queued the Handle Value Confirmation for transmission. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_STATE No Indication pending to be confirmed. - * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle. - * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers left. - */ -SVCALL(SD_BLE_GATTC_HV_CONFIRM, uint32_t, sd_ble_gattc_hv_confirm(uint16_t conn_handle, uint16_t handle)); - -/** @} */ - -#endif /* BLE_GATTC_H__ */ - -/** - @} - @} -*/
--- a/TARGET_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gatts.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,566 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_GATTS Generic Attribute Profile (GATT) Server - @{ - @brief Definitions and prototypes for the GATTS interface. - */ - -#ifndef BLE_GATTS_H__ -#define BLE_GATTS_H__ - -#include "ble_types.h" -#include "ble_ranges.h" -#include "ble_l2cap.h" -#include "ble_gap.h" -#include "ble_gatt.h" -#include "nrf_svc.h" - -/** @addtogroup BLE_GATTS_ENUMERATIONS Enumerations - * @{ */ - -/** - * @brief GATTS API SVC numbers. - */ -enum BLE_GATTS_SVCS -{ - SD_BLE_GATTS_SERVICE_ADD = BLE_GATTS_SVC_BASE, /**< Add a service. */ - SD_BLE_GATTS_INCLUDE_ADD, /**< Add an included service. */ - SD_BLE_GATTS_CHARACTERISTIC_ADD, /**< Add a characteristic. */ - SD_BLE_GATTS_DESCRIPTOR_ADD, /**< Add a generic attribute. */ - SD_BLE_GATTS_VALUE_SET, /**< Set an attribute value. */ - SD_BLE_GATTS_VALUE_GET, /**< Get an attribute value. */ - SD_BLE_GATTS_HVX, /**< Handle Value Notification or Indication. */ - SD_BLE_GATTS_SERVICE_CHANGED, /**< Perform a Service Changed Indication to one or more peers. */ - SD_BLE_GATTS_RW_AUTHORIZE_REPLY, /**< Reply to an authorization request for a read or write operation on one or more attributes. */ - SD_BLE_GATTS_SYS_ATTR_SET, /**< Set the persistent system attributes for a connection. */ - SD_BLE_GATTS_SYS_ATTR_GET, /**< Get updated persistent system attributes after terminating a connection. */ -}; - -/** @} */ - -/** @addtogroup BLE_GATTS_DEFINES Defines - * @{ */ - -/** @brief Only the default MTU size of 23 is currently supported. */ -#define GATT_RX_MTU 23 - -/** @defgroup BLE_ERRORS_GATTS SVC return values specific to GATTS - * @{ */ -#define BLE_ERROR_GATTS_INVALID_ATTR_TYPE (NRF_GATTS_ERR_BASE + 0x000) /**< Invalid attribute type. */ -#define BLE_ERROR_GATTS_SYS_ATTR_MISSING (NRF_GATTS_ERR_BASE + 0x001) /**< System Attributes missing. */ -/** @} */ - -/** @defgroup BLE_GATTS_ATTR_LENS_MAX Maximum attribute lengths - * @{ */ -#define BLE_GATTS_FIX_ATTR_LEN_MAX (510) /**< Maximum length for fixed length Attribute Values. */ -#define BLE_GATTS_VAR_ATTR_LEN_MAX (512) /**< Maximum length for variable length Attribute Values. */ -/** @} */ - -/** @defgroup BLE_GATTS_SRVC_TYPES GATT Server Service Types - * @{ */ -#define BLE_GATTS_SRVC_TYPE_INVALID 0x00 /**< Invalid Service Type. */ -#define BLE_GATTS_SRVC_TYPE_PRIMARY 0x01 /**< Primary Service. */ -#define BLE_GATTS_SRVC_TYPE_SECONDARY 0x02 /**< Secondary Type. */ -/** @} */ - - -/** @defgroup BLE_GATTS_ATTR_TYPES GATT Server Attribute Types - * @{ */ -#define BLE_GATTS_ATTR_TYPE_INVALID 0x00 /**< Invalid Attribute Type. */ -#define BLE_GATTS_ATTR_TYPE_PRIM_SRVC_DECL 0x01 /**< Primary Service Declaration. */ -#define BLE_GATTS_ATTR_TYPE_SEC_SRVC_DECL 0x02 /**< Secondary Service Declaration. */ -#define BLE_GATTS_ATTR_TYPE_INC_DECL 0x03 /**< Include Declaration. */ -#define BLE_GATTS_ATTR_TYPE_CHAR_DECL 0x04 /**< Characteristic Declaration. */ -#define BLE_GATTS_ATTR_TYPE_CHAR_VAL 0x05 /**< Characteristic Value. */ -#define BLE_GATTS_ATTR_TYPE_DESC 0x06 /**< Descriptor. */ -#define BLE_GATTS_ATTR_TYPE_OTHER 0x07 /**< Other, non-GATT specific type. */ -/** @} */ - - -/** @defgroup BLE_GATTS_OPS GATT Server Operations - * @{ */ -#define BLE_GATTS_OP_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATTS_OP_WRITE_REQ 0x01 /**< Write Request. */ -#define BLE_GATTS_OP_WRITE_CMD 0x02 /**< Write Command. */ -#define BLE_GATTS_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ -#define BLE_GATTS_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ -#define BLE_GATTS_OP_EXEC_WRITE_REQ_CANCEL 0x05 /**< Execute Write Request: Cancel all prepared writes. */ -#define BLE_GATTS_OP_EXEC_WRITE_REQ_NOW 0x06 /**< Execute Write Request: Immediately execute all prepared writes. */ -/** @} */ - -/** @defgroup BLE_GATTS_VLOCS GATT Value Locations - * @{ */ -#define BLE_GATTS_VLOC_INVALID 0x00 /**< Invalid Location. */ -#define BLE_GATTS_VLOC_STACK 0x01 /**< Attribute Value is located in stack memory, no user memory is required. */ -#define BLE_GATTS_VLOC_USER 0x02 /**< Attribute Value is located in user memory. This requires the user to maintain a valid buffer through the lifetime of the attribute, since the stack - will read and write directly to the memory using the pointer provided in the APIs. There are no alignment requirements for the buffer. */ -/** @} */ - -/** @defgroup BLE_GATTS_AUTHORIZE_TYPES GATT Server Authorization Types - * @{ */ -#define BLE_GATTS_AUTHORIZE_TYPE_INVALID 0x00 /**< Invalid Type. */ -#define BLE_GATTS_AUTHORIZE_TYPE_READ 0x01 /**< Authorize a Read Operation. */ -#define BLE_GATTS_AUTHORIZE_TYPE_WRITE 0x02 /**< Authorize a Write Request Operation. */ -/** @} */ - - -/** @} */ - -/** @addtogroup BLE_GATTS_STRUCTURES Structures - * @{ */ - -/** - * @brief BLE GATTS init options - */ -typedef struct -{ - uint8_t service_changed:1; /**< Include the Service Changed characteristic in the local attributes. */ -} ble_gatts_enable_params_t; - -/**@brief Attribute metadata. */ -typedef struct -{ - ble_gap_conn_sec_mode_t read_perm; /**< Read permissions. */ - ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ - uint8_t vlen :1; /**< Variable length attribute. */ - uint8_t vloc :2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ - uint8_t rd_auth :1; /**< Read Authorization and value will be requested from the application on every read operation. */ - uint8_t wr_auth :1; /**< Write Authorization will be requested from the application on every Write Request operation (but not Write Command). */ -} ble_gatts_attr_md_t; - - -/**@brief GATT Attribute. */ -typedef struct -{ - ble_uuid_t* p_uuid; /**< Pointer to the attribute UUID. */ - ble_gatts_attr_md_t* p_attr_md; /**< Pointer to the attribute metadata structure. */ - uint16_t init_len; /**< Initial attribute value length in bytes. */ - uint16_t init_offs; /**< Initial attribute value offset in bytes. If different from zero, the first init_offs bytes of the attribute value will be left uninitialized. */ - uint16_t max_len; /**< Maximum attribute value length in bytes, see @ref BLE_GATTS_ATTR_LENS_MAX for maximum values. */ - uint8_t* p_value; /**< Pointer to the attribute data. Please note that if the @ref BLE_GATTS_VLOC_USER value location is selected in the attribute metadata, this will have to point to a buffer - that remains valid through the lifetime of the attribute. This excludes usage of automatic variables that may go out of scope or any other temporary location. - The stack may access that memory directly without the application's knowledge. */ -} ble_gatts_attr_t; - - -/**@brief GATT Attribute Context. */ -typedef struct -{ - ble_uuid_t srvc_uuid; /**< Service UUID. */ - ble_uuid_t char_uuid; /**< Characteristic UUID if applicable (BLE_UUID_TYPE_UNKNOWN if N/A). */ - ble_uuid_t desc_uuid; /**< Descriptor UUID if applicable (BLE_UUID_TYPE_UNKNOWN if N/A). */ - uint16_t srvc_handle; /**< Service Handle. */ - uint16_t value_handle; /**< Characteristic Handle if applicable (BLE_GATT_HANDLE_INVALID if N/A). */ - uint8_t type; /**< Attribute Type, see @ref BLE_GATTS_ATTR_TYPES. */ -} ble_gatts_attr_context_t; - - -/**@brief GATT Characteristic Presentation Format. */ -typedef struct -{ - uint8_t format; /**< Format of the value, see @ref BLE_GATT_CPF_FORMATS. */ - int8_t exponent; /**< Exponent for integer data types. */ - uint16_t unit; /**< UUID from Bluetooth Assigned Numbers. */ - uint8_t name_space; /**< Namespace from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ - uint16_t desc; /**< Namespace description from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ -} ble_gatts_char_pf_t; - - -/**@brief GATT Characteristic metadata. */ -typedef struct -{ - ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ - ble_gatt_char_ext_props_t char_ext_props; /**< Characteristic Extended Properties. */ - uint8_t* p_char_user_desc; /**< Pointer to a UTF-8, NULL if the descriptor is not required. */ - uint16_t char_user_desc_max_size; /**< The maximum size in bytes of the user description descriptor. */ - uint16_t char_user_desc_size; /**< The size of the user description, must be smaller or equal to char_user_desc_max_size. */ - ble_gatts_char_pf_t* p_char_pf; /**< Pointer to a presentation format structure or NULL if the descriptor is not required. */ - ble_gatts_attr_md_t* p_user_desc_md; /**< Attribute metadata for the User Description descriptor, or NULL for default values. */ - ble_gatts_attr_md_t* p_cccd_md; /**< Attribute metadata for the Client Characteristic Configuration Descriptor, or NULL for default values. */ - ble_gatts_attr_md_t* p_sccd_md; /**< Attribute metadata for the Server Characteristic Configuration Descriptor, or NULL for default values. */ -} ble_gatts_char_md_t; - - -/**@brief GATT Characteristic Definition Handles. */ -typedef struct -{ - uint16_t value_handle; /**< Handle to the characteristic value. */ - uint16_t user_desc_handle; /**< Handle to the User Description descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ - uint16_t cccd_handle; /**< Handle to the Client Characteristic Configuration Descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ - uint16_t sccd_handle; /**< Handle to the Server Characteristic Configuration Descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ -} ble_gatts_char_handles_t; - - -/**@brief GATT HVx parameters. */ -typedef struct -{ - uint16_t handle; /**< Characteristic Value Handle. */ - uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ - uint16_t offset; /**< Offset within the attribute value. */ - uint16_t* p_len; /**< Length in bytes to be written, length in bytes written after successful return. */ - uint8_t* p_data; /**< Actual data content, use NULL to use the current attribute value. */ -} ble_gatts_hvx_params_t; - -/**@brief GATT Read Authorization parameters. */ -typedef struct -{ - uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ - uint8_t update : 1; /**< If set, data supplied in p_data will be used in the ATT response. */ - uint16_t offset; /**< Offset of the attribute value being updated. */ - uint16_t len; /**< Length in bytes of the value in p_data pointer, see @ref BLE_GATTS_ATTR_LENS_MAX. */ - uint8_t* p_data; /**< Pointer to new value used to update the attribute value. */ -} ble_gatts_read_authorize_params_t; - -/**@brief GATT Write Authorisation parameters. */ -typedef struct -{ - uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ -} ble_gatts_write_authorize_params_t; - -/**@brief GATT Read or Write Authorize Reply parameters. */ -typedef struct -{ - uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ - union { - ble_gatts_read_authorize_params_t read; /**< Read authorization parameters. */ - ble_gatts_write_authorize_params_t write; /**< Write authorization parameters. */ - } params; -} ble_gatts_rw_authorize_reply_params_t; - - -/** - * @brief GATT Server Event IDs. - */ -enum BLE_GATTS_EVTS -{ - BLE_GATTS_EVT_WRITE = BLE_GATTS_EVT_BASE, /**< Write operation performed. */ - BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST, /**< Read/Write Authorization request. */ - BLE_GATTS_EVT_SYS_ATTR_MISSING, /**< A persistent system attribute access is pending, awaiting a sd_ble_gatts_sys_attr_set(). */ - BLE_GATTS_EVT_HVC, /**< Handle Value Confirmation. */ - BLE_GATTS_EVT_SC_CONFIRM, /**< Service Changed Confirmation. */ - BLE_GATTS_EVT_TIMEOUT /**< Timeout. */ -}; - - -/**@brief Event structure for BLE_GATTS_EVT_WRITE. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint8_t op; /**< Type of write operation, see @ref BLE_GATTS_OPS. */ - ble_gatts_attr_context_t context; /**< Attribute Context. */ - uint16_t offset; /**< Offset for the write operation. */ - uint16_t len; /**< Length of the incoming data. */ - uint8_t data[1]; /**< Incoming data, variable length. */ -} ble_gatts_evt_write_t; - -/**@brief Event structure for authorize read request. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - ble_gatts_attr_context_t context; /**< Attribute Context. */ - uint16_t offset; /**< Offset for the read operation. */ -} ble_gatts_evt_read_t; - -/**@brief Event structure for BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST. */ -typedef struct -{ - uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ - union { - ble_gatts_evt_read_t read; /**< Attribute Read Parameters. */ - ble_gatts_evt_write_t write; /**< Attribute Write Parameters. */ - } request; -} ble_gatts_evt_rw_authorize_request_t; - -/**@brief Event structure for BLE_GATTS_EVT_SYS_ATTR_MISSING. */ -typedef struct -{ - uint8_t hint; -} ble_gatts_evt_sys_attr_missing_t; - - -/**@brief Event structure for BLE_GATTS_EVT_HVC. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ -} ble_gatts_evt_hvc_t; - -/**@brief Event structure for BLE_GATTS_EVT_TIMEOUT. */ -typedef struct -{ - uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ -} ble_gatts_evt_timeout_t; - - -/**@brief GATT Server event callback event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occurred. */ - union - { - ble_gatts_evt_write_t write; /**< Write Event Parameters. */ - ble_gatts_evt_rw_authorize_request_t authorize_request; /**< Read or Write Authorize Request Parameters. */ - ble_gatts_evt_sys_attr_missing_t sys_attr_missing; /**< System attributes missing. */ - ble_gatts_evt_hvc_t hvc; /**< Handle Value Confirmation Event Parameters. */ - ble_gatts_evt_timeout_t timeout; /**< Timeout Event. */ - } params; -} ble_gatts_evt_t; - -/** @} */ - -/** @addtogroup BLE_GATTS_FUNCTIONS Functions - * @{ */ - -/**@brief Add a service declaration to the local server ATT table. - * - * @param[in] type Toggles between primary and secondary services, see @ref BLE_GATTS_SRVC_TYPES. - * @param[in] p_uuid Pointer to service UUID. - * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @note Secondary Services are only relevant in the context of the entity that references them, it is therefore forbidden to - * add a secondary service declaration that is not referenced by another service later in the ATT table. - * - * @return @ref NRF_SUCCESS Successfully added a service declaration. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, Vendor Specific UUIDs need to be present in the table. - * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GATTS_SERVICE_ADD, uint32_t, sd_ble_gatts_service_add(uint8_t type, ble_uuid_t const*const p_uuid, uint16_t *const p_handle)); - - -/**@brief Add an include declaration to the local server ATT table. - * - * @note It is currently only possible to add an include declaration to the last added service (i.e. only sequential addition is supported at this time). - * - * @note The included service must already be present in the ATT table prior to this call. - * - * @param[in] service_handle Handle of the service where the included service is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] inc_srvc_handle Handle of the included service. - * @param[out] p_include_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @return @ref NRF_SUCCESS Successfully added an include declaration. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, handle values need to match previously added services. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, self inclusions are not allowed. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. - */ -SVCALL(SD_BLE_GATTS_INCLUDE_ADD, uint32_t, sd_ble_gatts_include_add(uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *const p_include_handle)); - - -/**@brief Add a characteristic declaration, a characteristic value declaration and optional characteristic descriptor declarations to the local server ATT table. - * - * @note It is currently only possible to add a characteristic to the last added service (i.e. only sequential addition is supported at this time). - * - * @note Several restrictions apply to the parameters, such as matching permissions between the user description descriptor and the writeable auxiliaries bits, - * readable (no security) and writeable (selectable) CCCDs and SCCDs and valid presentation format values. - * - * @note If no metadata is provided for the optional descriptors, their permissions will be derived from the characteristic permissions. - * - * @param[in] service_handle Handle of the service where the characteristic is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] p_char_md Characteristic metadata. - * @param[in] p_attr_char_value Pointer to the attribute structure corresponding to the characteristic value. - * @param[out] p_handles Pointer to the structure where the assigned handles will be stored. - * - * @return @ref NRF_SUCCESS Successfully added a characteristic. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, service handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required. - * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - */ -SVCALL(SD_BLE_GATTS_CHARACTERISTIC_ADD, uint32_t, sd_ble_gatts_characteristic_add(uint16_t service_handle, ble_gatts_char_md_t const*const p_char_md, ble_gatts_attr_t const*const p_attr_char_value, ble_gatts_char_handles_t *const p_handles)); - - -/**@brief Add a descriptor to the local server ATT table. - * - * @note It is currently only possible to add a descriptor to the last added characteristic (i.e. only sequential addition is supported at this time). - * - * @param[in] char_handle Handle of the characteristic where the descriptor is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] p_attr Pointer to the attribute structure. - * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @return @ref NRF_SUCCESS Successfully added a descriptor. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, characteristic handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, a characteristic context is required. - * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - */ -SVCALL(SD_BLE_GATTS_DESCRIPTOR_ADD, uint32_t, sd_ble_gatts_descriptor_add(uint16_t char_handle, ble_gatts_attr_t const * const p_attr, uint16_t* const p_handle)); - -/**@brief Set the value of a given attribute. - * - * @param[in] handle Attribute handle. - * @param[in] offset Offset in bytes to write from. - * @param[in,out] p_len Length in bytes to be written, length in bytes written after successful return. - * @param[in] p_value Pointer to a buffer (at least len bytes long) containing the desired attribute value. If value is stored in user memory, only the attribute length is updated when p_value == NULL. - * - * @return @ref NRF_SUCCESS Successfully set the value of the attribute. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. - * @return @ref NRF_ERROR_FORBIDDEN Forbidden handle supplied, certain attributes are not modifiable by the application. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - */ -SVCALL(SD_BLE_GATTS_VALUE_SET, uint32_t, sd_ble_gatts_value_set(uint16_t handle, uint16_t offset, uint16_t* const p_len, uint8_t const * const p_value)); - -/**@brief Get the value of a given attribute. - * - * @param[in] handle Attribute handle. - * @param[in] offset Offset in bytes to read from. - * @param[in,out] p_len Length in bytes to be read, total length of attribute value (in bytes, starting from offset) after successful return. - * @param[in,out] p_data Pointer to a buffer (at least len bytes long) where to store the attribute value. Set to NULL to obtain the complete length of attribute value. - * - * @note If the attribute value is longer than the size of the supplied buffer, - * p_len will return the total attribute value length (excluding offset), - * and not the number of bytes actually returned in p_data. - * The application may use this information to allocate a suitable buffer size. - * - * @return @ref NRF_SUCCESS Successfully retrieved the value of the attribute. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. - */ -SVCALL(SD_BLE_GATTS_VALUE_GET, uint32_t, sd_ble_gatts_value_get(uint16_t handle, uint16_t offset, uint16_t *const p_len, uint8_t* const p_data)); - -/**@brief Notify or Indicate an attribute value. - * - * @details This function checks for the relevant Client Characteristic Configuration descriptor value to verify that the relevant operation - * (notification or indication) has been enabled by the client. It is also able to update the attribute value before issuing the PDU, so that - * the application can atomically perform a value update and a server initiated transaction with a single API call. - * If the application chooses to indicate an attribute value, a @ref BLE_GATTS_EVT_HVC will be sent up as soon as the confirmation arrives from - * the peer. - * - * @note The local attribute value may be updated even if an outgoing packet is not sent to the peer due to an error during execution. - * When receiveing the error codes @ref NRF_ERROR_INVALID_STATE, @ref NRF_ERROR_BUSY, @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING and - * @ref BLE_ERROR_NO_TX_BUFFERS the ATT table has been updated. - * The caller can check whether the value has been updated by looking at the contents of *(p_hvx_params->p_len). - * - * @note It is important to note that a notification will <b>consume an application buffer</b>, and will therefore - * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. An indication on the other hand will use the - * standard server internal buffer and thus will only generate a @ref BLE_GATTS_EVT_HVC event as soon as the confirmation - * has been received from the peer. Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_hvx_params Pointer to an HVx parameters structure. If the p_data member contains a non-NULL pointer the attribute value will be updated with - * the contents pointed by it before sending the notification or indication. - * - * @return @ref NRF_SUCCESS Successfully queued a notification or indication for transmission, and optionally updated the attribute value. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied. Only attributes added directly by the application are available to notify and indicate. - * @return @ref BLE_ERROR_GATTS_INVALID_ATTR_TYPE Invalid attribute type(s) supplied, only characteristic values may be notified and indicated. - * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, notifications or indications must be enabled in the CCCD. - * @return @ref NRF_ERROR_BUSY Procedure already in progress. - * @return @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. - * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers to send the data, applies only to notifications. - */ -SVCALL(SD_BLE_GATTS_HVX, uint32_t, sd_ble_gatts_hvx(uint16_t conn_handle, ble_gatts_hvx_params_t const*const p_hvx_params)); - -/**@brief Indicate the Service Changed attribute value. - * - * @details This call will send a Handle Value Indication to one or more peers connected to inform them that the attribute - * table layout has changed. As soon as the peer has confirmed the indication, a @ref BLE_GATTS_EVT_SC_CONFIRM event will - * be issued. - * - * @note Some of the restrictions and limitations that apply to @ref sd_ble_gatts_hvx also apply here. - * - * @param[in] conn_handle Connection handle. - * @param[in] start_handle Start of affected attribute handle range. - * @param[in] end_handle End of affected attribute handle range. - * - * @return @ref NRF_SUCCESS Successfully queued the Service Changed indication for transmission. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied, handles must be in the range populated by the application. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, notifications or indications must be enabled in the CCCD. - * @return @ref NRF_ERROR_BUSY Procedure already in progress. - * @return @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. - */ -SVCALL(SD_BLE_GATTS_SERVICE_CHANGED, uint32_t, sd_ble_gatts_service_changed(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle)); - -/**@brief Respond to a Read/Write authorization request. - * - * @note This call should only be used as a response to a @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST event issued to the application. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_rw_authorize_reply_params Pointer to a structure with the attribute provided by the application. - * - * @return @ref NRF_SUCCESS Successfully queued a response to the peer, and in the case of a write operation, ATT table updated. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_STATE No authorization request pending. - * @return @ref NRF_ERROR_INVALID_PARAM Authorization op invalid, - * or for Read Authorization reply: requested handles not replied with, - * or for Write Authorization reply: handle supplied does not match requested handle. - */ -SVCALL(SD_BLE_GATTS_RW_AUTHORIZE_REPLY, uint32_t, sd_ble_gatts_rw_authorize_reply(uint16_t conn_handle, ble_gatts_rw_authorize_reply_params_t const*const p_rw_authorize_reply_params)); - - -/**@brief Update persistent system attribute information. - * - * @details Supply to the stack information about persistent system attributes. - * This call is legal in the connected state only, and is usually - * made immediately after a connection is established and the bond identified. - * usually as a response to a BLE_GATTS_EVT_SYS_ATTR_MISSING. - * - * p_sysattrs may point directly to the application's stored copy of the struct. - * If the pointer is NULL, the system attribute info is initialized, assuming that - * the application does not have any previously saved data for this bond. - * - * @note The state of persistent system attributes is reset upon connection and then remembered for its duration. - * - * @note If this call returns with an error code different from @ref NRF_SUCCESS, the storage of persistent system attributes may have been completed only partially. - * This means that the state of the attribute table is undefined, and the application should either provide a new set of attributes using this same call or - * reset the SoftDevice to return to a known state. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_sys_attr_data Pointer to a saved copy of system attributes supplied to the stack, or NULL. - * @param[in] len Size of data pointed by p_sys_attr_data, in octets. - * - * @return @ref NRF_SUCCESS Successfully set the system attribute information. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_DATA Invalid data supplied, the data should be exactly the same as retrieved with @ref sd_ble_gatts_sys_attr_get. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GATTS_SYS_ATTR_SET, uint32_t, sd_ble_gatts_sys_attr_set(uint16_t conn_handle, uint8_t const*const p_sys_attr_data, uint16_t len)); - - -/**@brief Retrieve persistent system attribute information from the stack. - * - * @details This call is used to retrieve information about values to be stored perisistently by the application - * after a connection has been terminated. When a new connection is made to the same bond, the values - * should be restored using @ref sd_ble_gatts_sys_attr_set. - * The data should be read before any new advertising is started, or any new connection established. The connection handle for - * the previous now defunct connection will remain valid until a new one is created to allow this API call to refer to it. - * - * @param[in] conn_handle Connection handle of the recently terminated connection. - * @param[in] p_sys_attr_data Pointer to a buffer where updated information about system attributes will be filled in. NULL can be provided to - * obtain the length of the data - * @param[in,out] p_len Size of application buffer if p_sys_attr_data is not NULL. Unconditially updated to actual length of system attribute data. - * - * @return @ref NRF_SUCCESS Successfully retrieved the system attribute information. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_DATA_SIZE The system attribute information did not fit into the provided buffer. - */ -SVCALL(SD_BLE_GATTS_SYS_ATTR_GET, uint32_t, sd_ble_gatts_sys_attr_get(uint16_t conn_handle, uint8_t * const p_sys_attr_data, uint16_t* const p_len)); - -/** @} */ - -#endif // BLE_GATTS_H__ - -/** - @} -*/
--- a/TARGET_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_hci.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,96 +0,0 @@ -/* - Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - - The information contained herein is confidential property of Nordic Semiconductor. The use, - copying, transfer or disclosure of such information is prohibited except by express written - agreement with Nordic Semiconductor. - */ -/** - @addtogroup BLE_COMMON - @{ -*/ - - -#ifndef BLE_HCI_H__ -#define BLE_HCI_H__ - -/** @defgroup BLE_HCI_STATUS_CODES Bluetooth status codes - * @{ */ - -#define BLE_HCI_STATUS_CODE_SUCCESS 0x00 -#define BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND 0x01 -#define BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER 0x02 -/*0x03 Hardware Failure -0x04 Page Timeout -*/ -#define BLE_HCI_AUTHENTICATION_FAILURE 0x05 -#define BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING 0x06 -#define BLE_HCI_MEMORY_CAPACITY_EXCEEDED 0x07 -#define BLE_HCI_CONNECTION_TIMEOUT 0x08 -/*0x09 Connection Limit Exceeded -0x0A Synchronous Connection Limit To A Device Exceeded -0x0B ACL Connection Already Exists*/ -#define BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED 0x0C -/*0x0D Connection Rejected due to Limited Resources -0x0E Connection Rejected Due To Security Reasons -0x0F Connection Rejected due to Unacceptable BD_ADDR -0x10 Connection Accept Timeout Exceeded -0x11 Unsupported Feature or Parameter Value*/ -#define BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS 0x12 -#define BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION 0x13 -#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES 0x14 -#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF 0x15 -#define BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION 0x16 -/* -0x17 Repeated Attempts -0x18 Pairing Not Allowed -0x19 Unknown LMP PDU -*/ -#define BLE_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1A -/* -0x1B SCO Offset Rejected -0x1C SCO Interval Rejected -0x1D SCO Air Mode Rejected*/ -#define BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS 0x1E -#define BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR 0x1F -/*0x20 Unsupported LMP Parameter Value -0x21 Role Change Not Allowed -*/ -#define BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT 0x22 -/*0x23 LMP Error Transaction Collision*/ -#define BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED 0x24 -/*0x25 Encryption Mode Not Acceptable -0x26 Link Key Can Not be Changed -0x27 Requested QoS Not Supported -*/ -#define BLE_HCI_INSTANT_PASSED 0x28 -#define BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED 0x29 -#define BLE_HCI_DIFFERENT_TRANSACTION_COLLISION 0x2A -/* -0x2B Reserved -0x2C QoS Unacceptable Parameter -0x2D QoS Rejected -0x2E Channel Classification Not Supported -0x2F Insufficient Security -0x30 Parameter Out Of Mandatory Range -0x31 Reserved -0x32 Role Switch Pending -0x33 Reserved -0x34 Reserved Slot Violation -0x35 Role Switch Failed -0x36 Extended Inquiry Response Too Large -0x37 Secure Simple Pairing Not Supported By Host. -0x38 Host Busy - Pairing -0x39 Connection Rejected due to No Suitable Channel Found*/ -#define BLE_HCI_CONTROLLER_BUSY 0x3A -#define BLE_HCI_CONN_INTERVAL_UNACCEPTABLE 0x3B -#define BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT 0x3C -#define BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE 0x3D -#define BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED 0x3E - -/** @} */ - - -#endif // BLE_HCI_H__ - -/** @} */
--- a/TARGET_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_l2cap.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,144 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_L2CAP Logical Link Control and Adaptation Protocol (L2CAP) - @{ - @brief Definitions and prototypes for the L2CAP interface. - */ - -#ifndef BLE_L2CAP_H__ -#define BLE_L2CAP_H__ - -#include "ble_types.h" -#include "ble_ranges.h" -#include "ble_err.h" -#include "nrf_svc.h" - -/**@addtogroup BLE_L2CAP_ENUMERATIONS Enumerations - * @{ */ - -/**@brief L2CAP API SVC numbers. */ -enum BLE_L2CAP_SVCS -{ - SD_BLE_L2CAP_CID_REGISTER = BLE_L2CAP_SVC_BASE, /**< Register a CID. */ - SD_BLE_L2CAP_CID_UNREGISTER, /**< Unregister a CID. */ - SD_BLE_L2CAP_TX /**< Transmit a packet. */ -}; - -/** @} */ - -/**@addtogroup BLE_L2CAP_DEFINES Defines - * @{ */ - -/**@defgroup BLE_ERRORS_L2CAP SVC return values specific to L2CAP - * @{ */ -#define BLE_ERROR_L2CAP_CID_IN_USE (NRF_L2CAP_ERR_BASE + 0x000) /**< CID already in use. */ -/** @} */ - -/**@brief Default L2CAP MTU. */ -#define BLE_L2CAP_MTU_DEF (23) - -/**@brief Invalid Channel Identifier. */ -#define BLE_L2CAP_CID_INVALID (0x0000) - -/**@brief Dynamic Channel Identifier base. */ -#define BLE_L2CAP_CID_DYN_BASE (0x0040) - -/**@brief Maximum amount of dynamic CIDs. */ -#define BLE_L2CAP_CID_DYN_MAX (8) - -/** @} */ - -/**@addtogroup BLE_L2CAP_STRUCTURES Structures - * @{ */ - -/**@brief Packet header format for L2CAP transmission. */ -typedef struct -{ - uint16_t len; /**< Length of valid info in data member. */ - uint16_t cid; /**< Channel ID on which packet is transmitted. */ -} ble_l2cap_header_t; - -/**@brief L2CAP Event IDs. */ -enum BLE_L2CAP_EVTS -{ - BLE_L2CAP_EVT_RX = BLE_L2CAP_EVT_BASE /**< L2CAP packet received. */ -}; - - -/**@brief L2CAP Received packet event report. */ -typedef struct -{ - ble_l2cap_header_t header; /** L2CAP packet header. */ - uint8_t data[1]; /**< Packet data, variable length. */ -} ble_l2cap_evt_rx_t; - - -/**@brief L2CAP event callback event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occured. */ - union - { - ble_l2cap_evt_rx_t rx; /**< RX Event parameters. */ - } params; -} ble_l2cap_evt_t; - - -/**@brief Register a CID with L2CAP. - * - * @details This registers a higher protocol layer with the L2CAP multiplexer, and is requried prior to all operations on the CID. - * - * @param[in] cid L2CAP CID. - * - * @return @ref NRF_SUCCESS Successfully registered a CID with the L2CAP layer. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, CID must be above @ref BLE_L2CAP_CID_DYN_BASE. - * @return @ref BLE_ERROR_L2CAP_CID_IN_USE L2CAP CID already in use. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_L2CAP_CID_REGISTER, uint32_t, sd_ble_l2cap_cid_register(uint16_t cid)); - -/**@brief Unregister a CID with L2CAP. - * - * @details This unregisters a previously registerd higher protocol layer with the L2CAP multiplexer. - * - * @param[in] cid L2CAP CID. - * - * @return @ref NRF_SUCCESS Successfully unregistered the CID. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_NOT_FOUND CID not previously registered. - */ -SVCALL(SD_BLE_L2CAP_CID_UNREGISTER, uint32_t, sd_ble_l2cap_cid_unregister(uint16_t cid)); - -/**@brief Transmit an L2CAP packet. - * - * @note It is important to note that a call to this function will <b>consume an application buffer</b>, and will therefore - * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. - * Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. - * - * @param[in] conn_handle Connection Handle. - * @param[in] p_header Pointer to a packet header containing length and CID. - * @param[in] p_data Pointer to the data to be transmitted. - * - * @return @ref NRF_SUCCESS Successfully queued an L2CAP packet for transmission. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, CIDs must be registered beforehand with @ref sd_ble_l2cap_cid_register. - * @return @ref NRF_ERROR_NOT_FOUND CID not found. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @return @ref BLE_ERROR_NO_TX_BUFFERS Not enough application buffers available. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, see @ref BLE_L2CAP_MTU_DEF. - */ -SVCALL(SD_BLE_L2CAP_TX, uint32_t, sd_ble_l2cap_tx(uint16_t conn_handle, ble_l2cap_header_t const * const p_header, uint8_t const * const p_data)); - -/** @} */ - -#endif // BLE_L2CAP_H__ - -/** - @} -*/
--- a/TARGET_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_ranges.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,89 +0,0 @@ -/* - Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - - The information contained herein is confidential property of Nordic Semiconductor. The use, - copying, transfer or disclosure of such information is prohibited except by express written - agreement with Nordic Semiconductor. - */ -/** - @addtogroup BLE_COMMON - @{ - @defgroup ble_ranges Module specific SVC and event number subranges - @{ - - @brief Definition of SVC and event number subranges for each API module. - - @note - SVCs and event numbers are split into subranges for each API module. - Each module receives its entire allocated range of SVC calls, whether implemented or not, - but return BLE_ERROR_NOT_SUPPORTED for unimplemented or undefined calls in its range. - - Note that the symbols BLE_<module>_SVC_LAST is the end of the allocated SVC range, - rather than the last SVC function call actually defined and implemented. - - Specific SVC and event values are defined in each module's ble_<module>.h file, - which defines names of each individual SVC code based on the range start value. -*/ - -#ifndef BLE_RANGES_H__ -#define BLE_RANGES_H__ - -#define BLE_SVC_BASE 0x60 -#define BLE_SVC_LAST 0x6B /* Total: 12. */ - -#define BLE_RESERVED_SVC_BASE 0x6C -#define BLE_RESERVED_SVC_LAST 0x6F /* Total: 4. */ - -#define BLE_GAP_SVC_BASE 0x70 -#define BLE_GAP_SVC_LAST 0x8F /* Total: 32. */ - -#define BLE_GATTC_SVC_BASE 0x90 -#define BLE_GATTC_SVC_LAST 0x9F /* Total: 16. */ - -#define BLE_GATTS_SVC_BASE 0xA0 -#define BLE_GATTS_SVC_LAST 0xAF /* Total: 16. */ - -#define BLE_L2CAP_SVC_BASE 0xB0 -#define BLE_L2CAP_SVC_LAST 0xBF /* Total: 16. */ - - -#define BLE_EVT_INVALID 0x00 - -#define BLE_EVT_BASE 0x01 -#define BLE_EVT_LAST 0x0F /* Total: 15. */ - -#define BLE_GAP_EVT_BASE 0x10 -#define BLE_GAP_EVT_LAST 0x2F /* Total: 32. */ - -#define BLE_GATTC_EVT_BASE 0x30 -#define BLE_GATTC_EVT_LAST 0x4F /* Total: 32. */ - -#define BLE_GATTS_EVT_BASE 0x50 -#define BLE_GATTS_EVT_LAST 0x6F /* Total: 32. */ - -#define BLE_L2CAP_EVT_BASE 0x70 -#define BLE_L2CAP_EVT_LAST 0x8F /* Total: 32. */ - -#define BLE_OPT_INVALID 0x00 /**< Invalid BLE Option. */ - -#define BLE_OPT_BASE 0x01 /**< Common BLE Option base. */ -#define BLE_OPT_LAST 0x1F /**< Total: 31. */ - -#define BLE_GAP_OPT_BASE 0x20 /**< GAP BLE Option base. */ -#define BLE_GAP_OPT_LAST 0x3F /**< Total: 32. */ - -#define BLE_GATTC_OPT_BASE 0x40 /**< GATTC BLE Option base. */ -#define BLE_GATTC_OPT_LAST 0x5F /**< Total: 32. */ - -#define BLE_GATTS_OPT_BASE 0x60 /**< GATTS BLE Option base. */ -#define BLE_GATTS_OPT_LAST 0x7F /**< Total: 32. */ - -#define BLE_L2CAP_OPT_BASE 0x80 /**< L2CAP BLE Option base. */ -#define BLE_L2CAP_OPT_LAST 0x9F /**< Total: 32. */ - -#endif /* BLE_RANGES_H__ */ - -/** - @} - @} -*/
--- a/TARGET_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_types.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,169 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_COMMON - @{ - @defgroup ble_types Common types and macro definitions - @{ - - @brief Common types and macro definitions for the S110 SoftDevice. - */ - -#ifndef BLE_TYPES_H__ -#define BLE_TYPES_H__ - -#include <stdint.h> - -/** @addtogroup BLE_COMMON_DEFINES Defines - * @{ */ - -/** @defgroup BLE_CONN_HANDLES BLE Connection Handles - * @{ */ -#define BLE_CONN_HANDLE_INVALID 0xFFFF /**< Invalid Connection Handle. */ -#define BLE_CONN_HANDLE_ALL 0xFFFE /**< Applies to all Connection Handles. */ -/** @} */ - - -/** @defgroup BLE_UUID_VALUES Assigned Values for BLE UUIDs - * @{ */ -/* Generic UUIDs, applicable to all services */ -#define BLE_UUID_UNKNOWN 0x0000 /**< Reserved UUID. */ -#define BLE_UUID_SERVICE_PRIMARY 0x2800 /**< Primary Service. */ -#define BLE_UUID_SERVICE_SECONDARY 0x2801 /**< Secondary Service. */ -#define BLE_UUID_SERVICE_INCLUDE 0x2802 /**< Include. */ -#define BLE_UUID_CHARACTERISTIC 0x2803 /**< Characteristic. */ -#define BLE_UUID_DESCRIPTOR_CHAR_EXT_PROP 0x2900 /**< Characteristic Extended Properties Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_USER_DESC 0x2901 /**< Characteristic User Description Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG 0x2902 /**< Client Characteristic Configuration Descriptor. */ -#define BLE_UUID_DESCRIPTOR_SERVER_CHAR_CONFIG 0x2903 /**< Server Characteristic Configuration Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT 0x2904 /**< Characteristic Presentation Format Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_AGGREGATE_FORMAT 0x2905 /**< Characteristic Aggregate Format Descriptor. */ -/* GATT specific UUIDs */ -#define BLE_UUID_GATT 0x1801 /**< Generic Attribute Profile. */ -#define BLE_UUID_GATT_CHARACTERISTIC_SERVICE_CHANGED 0x2A05 /**< Service Changed Characteristic. */ -/* GAP specific UUIDs */ -#define BLE_UUID_GAP 0x1800 /**< Generic Access Profile. */ -#define BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME 0x2A00 /**< Device Name Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE 0x2A01 /**< Appearance Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_PPF 0x2A02 /**< Peripheral Privacy Flag Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_RECONN_ADDR 0x2A03 /**< Reconnection Address Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_PPCP 0x2A04 /**< Peripheral Preferred Connection Parameters Characteristic. */ -/** @} */ - - -/** @defgroup BLE_UUID_TYPES Types of UUID - * @{ */ -#define BLE_UUID_TYPE_UNKNOWN 0x00 /**< Invalid UUID type. */ -#define BLE_UUID_TYPE_BLE 0x01 /**< Bluetooth SIG UUID (16-bit). */ -#define BLE_UUID_TYPE_VENDOR_BEGIN 0x02 /**< Vendor UUID types start at this index (128-bit). */ -/** @} */ - - -/** @defgroup BLE_APPEARANCES Bluetooth Appearance values - * @note Retrieved from http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml - * @{ */ -#define BLE_APPEARANCE_UNKNOWN 0 /**< Unknown. */ -#define BLE_APPEARANCE_GENERIC_PHONE 64 /**< Generic Phone. */ -#define BLE_APPEARANCE_GENERIC_COMPUTER 128 /**< Generic Computer. */ -#define BLE_APPEARANCE_GENERIC_WATCH 192 /**< Generic Watch. */ -#define BLE_APPEARANCE_WATCH_SPORTS_WATCH 193 /**< Watch: Sports Watch. */ -#define BLE_APPEARANCE_GENERIC_CLOCK 256 /**< Generic Clock. */ -#define BLE_APPEARANCE_GENERIC_DISPLAY 320 /**< Generic Display. */ -#define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL 384 /**< Generic Remote Control. */ -#define BLE_APPEARANCE_GENERIC_EYE_GLASSES 448 /**< Generic Eye-glasses. */ -#define BLE_APPEARANCE_GENERIC_TAG 512 /**< Generic Tag. */ -#define BLE_APPEARANCE_GENERIC_KEYRING 576 /**< Generic Keyring. */ -#define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 640 /**< Generic Media Player. */ -#define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 704 /**< Generic Barcode Scanner. */ -#define BLE_APPEARANCE_GENERIC_THERMOMETER 768 /**< Generic Thermometer. */ -#define BLE_APPEARANCE_THERMOMETER_EAR 769 /**< Thermometer: Ear. */ -#define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR 832 /**< Generic Heart rate Sensor. */ -#define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT 833 /**< Heart Rate Sensor: Heart Rate Belt. */ -#define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 896 /**< Generic Blood Pressure. */ -#define BLE_APPEARANCE_BLOOD_PRESSURE_ARM 897 /**< Blood Pressure: Arm. */ -#define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 898 /**< Blood Pressure: Wrist. */ -#define BLE_APPEARANCE_GENERIC_HID 960 /**< Human Interface Device (HID). */ -#define BLE_APPEARANCE_HID_KEYBOARD 961 /**< Keyboard (HID Subtype). */ -#define BLE_APPEARANCE_HID_MOUSE 962 /**< Mouse (HID Subtype). */ -#define BLE_APPEARANCE_HID_JOYSTICK 963 /**< Joystiq (HID Subtype). */ -#define BLE_APPEARANCE_HID_GAMEPAD 964 /**< Gamepad (HID Subtype). */ -#define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE 965 /**< Digitizer Tablet (HID Subtype). */ -#define BLE_APPEARANCE_HID_CARD_READER 966 /**< Card Reader (HID Subtype). */ -#define BLE_APPEARANCE_HID_DIGITAL_PEN 967 /**< Digital Pen (HID Subtype). */ -#define BLE_APPEARANCE_HID_BARCODE 968 /**< Barcode Scanner (HID Subtype). */ -#define BLE_APPEARANCE_GENERIC_GLUCOSE_METER 1024 /**< Generic Glucose Meter. */ -#define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR 1088 /**< Generic Running Walking Sensor. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE 1089 /**< Running Walking Sensor: In-Shoe. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE 1090 /**< Running Walking Sensor: On-Shoe. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP 1091 /**< Running Walking Sensor: On-Hip. */ -#define BLE_APPEARANCE_GENERIC_CYCLING 1152 /**< Generic Cycling. */ -#define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER 1153 /**< Cycling: Cycling Computer. */ -#define BLE_APPEARANCE_CYCLING_SPEED_SENSOR 1154 /**< Cycling: Speed Sensor. */ -#define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR 1155 /**< Cycling: Cadence Sensor. */ -#define BLE_APPEARANCE_CYCLING_POWER_SENSOR 1156 /**< Cycling: Power Sensor. */ -#define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR 1157 /**< Cycling: Speed and Cadence Sensor. */ -#define BLE_APPEARANCE_GENERIC_PULSE_OXIMETER 3136 /**< Generic Pulse Oximeter. */ -#define BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 3137 /**< Fingertip (Pulse Oximeter subtype). */ -#define BLE_APPEARANCE_PULSE_OXIMETER_WRIST_WORN 3138 /**< Wrist Worn(Pulse Oximeter subtype). */ -#define BLE_APPEARANCE_GENERIC_WEIGHT_SCALE 3200 /**< Generic Weight Scale. */ -#define BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS_ACT 5184 /**< Generic Outdoor Sports Activity. */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_DISP 5185 /**< Location Display Device (Outdoor Sports Activity subtype). */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_DISP 5186 /**< Location and Navigation Display Device (Outdoor Sports Activity subtype). */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_POD 5187 /**< Location Pod (Outdoor Sports Activity subtype). */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_POD 5188 /**< Location and Navigation Pod (Outdoor Sports Activity subtype). */ -/** @} */ - -/** @brief Set .type and .uuid fields of ble_uuid_struct to specified uuid value. */ -#define BLE_UUID_BLE_ASSIGN(instance, value) do {\ - instance.type = BLE_UUID_TYPE_BLE; \ - instance.uuid = value;} while(0) - -/** @brief Copy type and uuid members from src to dst ble_uuid_t pointer. Both pointers must be valid/non-null. */ -#define BLE_UUID_COPY_PTR(dst, src) do {\ - (dst)->type = (src)->type; \ - (dst)->uuid = (src)->uuid;} while(0) - -/** @brief Copy type and uuid members from src to dst ble_uuid_t struct. */ -#define BLE_UUID_COPY_INST(dst, src) do {\ - (dst).type = (src).type; \ - (dst).uuid = (src).uuid;} while(0) - -/** @brief Compare for equality both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ -#define BLE_UUID_EQ(p_uuid1, p_uuid2) \ - (((p_uuid1)->type == (p_uuid2)->type) && ((p_uuid1)->uuid == (p_uuid2)->uuid)) - -/** @brief Compare for difference both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ -#define BLE_UUID_NEQ(p_uuid1, p_uuid2) \ - (((p_uuid1)->type != (p_uuid2)->type) || ((p_uuid1)->uuid != (p_uuid2)->uuid)) - -/** @} */ - -/** @addtogroup BLE_TYPES_STRUCTURES Structures - * @{ */ - -/** @brief 128 bit UUID values. */ -typedef struct -{ - unsigned char uuid128[16]; -} ble_uuid128_t; - -/** @brief Bluetooth Low Energy UUID type, encapsulates both 16-bit and 128-bit UUIDs. */ -typedef struct -{ - uint16_t uuid; /**< 16-bit UUID value or octets 12-13 of 128-bit UUID. */ - uint8_t type; /**< UUID type, see @ref BLE_UUID_TYPES. If type is BLE_UUID_TYPE_UNKNOWN, the value of uuid is undefined. */ -} ble_uuid_t; - -/** @} */ - -#endif /* BLE_TYPES_H__ */ - -/** - @} - @} -*/
--- a/TARGET_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_error.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - /** - @defgroup nrf_error SoftDevice Global Error Codes - @{ - - @brief Global Error definitions -*/ - -/* Header guard */ -#ifndef NRF_ERROR_H__ -#define NRF_ERROR_H__ - -/** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions - * @{ */ -#define NRF_ERROR_BASE_NUM (0x0) ///< Global error base -#define NRF_ERROR_SDM_BASE_NUM (0x1000) ///< SDM error base -#define NRF_ERROR_SOC_BASE_NUM (0x2000) ///< SoC error base -#define NRF_ERROR_STK_BASE_NUM (0x3000) ///< STK error base -/** @} */ - -#define NRF_SUCCESS (NRF_ERROR_BASE_NUM + 0) ///< Successful command -#define NRF_ERROR_SVC_HANDLER_MISSING (NRF_ERROR_BASE_NUM + 1) ///< SVC handler is missing -#define NRF_ERROR_SOFTDEVICE_NOT_ENABLED (NRF_ERROR_BASE_NUM + 2) ///< SoftDevice has not been enabled -#define NRF_ERROR_INTERNAL (NRF_ERROR_BASE_NUM + 3) ///< Internal Error -#define NRF_ERROR_NO_MEM (NRF_ERROR_BASE_NUM + 4) ///< No Memory for operation -#define NRF_ERROR_NOT_FOUND (NRF_ERROR_BASE_NUM + 5) ///< Not found -#define NRF_ERROR_NOT_SUPPORTED (NRF_ERROR_BASE_NUM + 6) ///< Not supported -#define NRF_ERROR_INVALID_PARAM (NRF_ERROR_BASE_NUM + 7) ///< Invalid Parameter -#define NRF_ERROR_INVALID_STATE (NRF_ERROR_BASE_NUM + 8) ///< Invalid state, operation disallowed in this state -#define NRF_ERROR_INVALID_LENGTH (NRF_ERROR_BASE_NUM + 9) ///< Invalid Length -#define NRF_ERROR_INVALID_FLAGS (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags -#define NRF_ERROR_INVALID_DATA (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data -#define NRF_ERROR_DATA_SIZE (NRF_ERROR_BASE_NUM + 12) ///< Data size exceeds limit -#define NRF_ERROR_TIMEOUT (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out -#define NRF_ERROR_NULL (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer -#define NRF_ERROR_FORBIDDEN (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation -#define NRF_ERROR_INVALID_ADDR (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address -#define NRF_ERROR_BUSY (NRF_ERROR_BASE_NUM + 17) ///< Busy - -#endif // NRF_ERROR_H__ - -/** - @} -*/
--- a/TARGET_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_error_sdm.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - /** - @addtogroup nrf_sdm_api - @{ - @defgroup nrf_sdm_error SoftDevice Manager Error Codes - @{ - - @brief Error definitions for the SDM API -*/ - -/* Header guard */ -#ifndef NRF_ERROR_SDM_H__ -#define NRF_ERROR_SDM_H__ - -#include "nrf_error.h" - -#define NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN (NRF_ERROR_SDM_BASE_NUM + 0) ///< Unknown lfclk source -#define NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION (NRF_ERROR_SDM_BASE_NUM + 1) ///< Incorrect interrupt configuration (can be caused by using illegal priority levels, or having enabled SoftDevice interrupts) -#define NRF_ERROR_SDM_INCORRECT_CLENR0 (NRF_ERROR_SDM_BASE_NUM + 2) ///< Incorrect CLENR0 (can be caused by erronous SoftDevice flashing) - -#endif // NRF_ERROR_SDM_H__ - -/** - @} - @} -*/
--- a/TARGET_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_error_soc.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - /** - @addtogroup nrf_soc_api - @{ - @defgroup nrf_soc_error SoC Library Error Codes - @{ - - @brief Error definitions for the SoC library - -*/ - -/* Header guard */ -#ifndef NRF_ERROR_SOC_H__ -#define NRF_ERROR_SOC_H__ - -#include "nrf_error.h" - -/* Mutex Errors */ -#define NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN (NRF_ERROR_SOC_BASE_NUM + 0) ///< Mutex already taken - -/* NVIC errors */ -#define NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE (NRF_ERROR_SOC_BASE_NUM + 1) ///< NVIC interrupt not available -#define NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED (NRF_ERROR_SOC_BASE_NUM + 2) ///< NVIC interrupt priority not allowed -#define NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 3) ///< NVIC should not return - -/* Power errors */ -#define NRF_ERROR_SOC_POWER_MODE_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 4) ///< Power mode unknown -#define NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 5) ///< Power POF threshold unknown -#define NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 6) ///< Power off should not return - -/* Rand errors */ -#define NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES (NRF_ERROR_SOC_BASE_NUM + 7) ///< RAND not enough values - -/* PPI errors */ -#define NRF_ERROR_SOC_PPI_INVALID_CHANNEL (NRF_ERROR_SOC_BASE_NUM + 8) ///< Invalid PPI Channel -#define NRF_ERROR_SOC_PPI_INVALID_GROUP (NRF_ERROR_SOC_BASE_NUM + 9) ///< Invalid PPI Group - -#endif // NRF_ERROR_SOC_H__ -/** - @} - @} -*/
--- a/TARGET_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_mbr.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,155 +0,0 @@ -/* - * Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @defgroup nrf_mbr_api Master Boot Record API - @{ - - @brief APIs for updating SoftDevice and BootLoader - -*/ - -/* Header guard */ -#ifndef NRF_MBR_H__ -#define NRF_MBR_H__ - -#include "nrf_svc.h" -#include <stdint.h> - - -/** @addtogroup NRF_MBR_DEFINES Defines - * @{ */ - -/**@brief MBR SVC Base number. */ -#define MBR_SVC_BASE 0x18 -/** @} */ - -/** @addtogroup NRF_MBR_ENUMS Enumerations - * @{ */ - -/**@brief nRF Master Boot Record API SVC numbers. */ -enum NRF_MBR_SVCS -{ - SD_MBR_COMMAND = MBR_SVC_BASE, /**< ::sd_mbr_command */ -}; - -/**@brief Possible values for ::sd_mbr_command_t.command */ -enum NRF_MBR_COMMANDS -{ - SD_MBR_COMMAND_COPY_BL, /**< Copy a new a new BootLoader. @see sd_mbr_command_copy_bl_t */ - SD_MBR_COMMAND_COPY_SD, /**< Copy a new SoftDevice. @see ::sd_mbr_command_copy_sd_t*/ - SD_MBR_COMMAND_INIT_SD, /**< Init forwarding interrupts to SD, and run reset function in SD*/ - SD_MBR_COMMAND_COMPARE, /**< This command works like memcmp. @see ::sd_mbr_command_compare_t*/ - SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET, /**< Start forwarding all exception to this address @see ::sd_mbr_command_vector_table_base_set_t*/ -}; - -/** @} */ - -/** @addtogroup NRF_MBR_TYPES Types - * @{ */ - -/**@brief This command copies part of a new SoftDevice - * The destination area is erased before copying. - * If dst is in the middle of a flash page, that whole flash page will be erased. - * If (dst+len) is in the middle of a flash page, that whole flash page will be erased. - * - * The user of this function is responsible for setting the PROTENSET registers. - * - * @retval ::NRF_SUCCESS indicates that the contents of the memory blocks where copied correctly. - * @retval ::NRF_ERROR_INTERNAL indicates that the contents of the memory blocks where not verified correctly after copying. - */ -typedef struct -{ - uint32_t *src; /**< Pointer to the source of data to be copied.*/ - uint32_t *dst; /**< Pointer to the destination where the content is to be copied.*/ - uint32_t len; /**< Number of 32 bit words to copy. Must be a multiple of 256 words*/ -}sd_mbr_command_copy_sd_t; - - -/**@brief This command works like memcmp, but takes the length in words. - * - * @retval ::NRF_SUCCESS indicates that the contents of both memory blocks are equal. - * @retval ::NRF_ERROR_NULL indicates that the contents of the memory blocks are not equal. - */ -typedef struct -{ - uint32_t *ptr1; /**< Pointer to block of memory */ - uint32_t *ptr2; /**< Pointer to block of memory */ - uint32_t len; /**< Number of 32 bit words to compare*/ -}sd_mbr_command_compare_t; - - -/**@brief This command copies a new BootLoader. - * With this command, destination of BootLoader is always the address written in NRF_UICR->BOOTADDR. - * - * Destination is erased by this function. - * If (destination+bl_len) is in the middle of a flash page, that whole flash page will be erased. - * - * This function will use PROTENSET to protect the flash that is not intended to be written. - * - * On Success, this function will not return. It will start the new BootLoader from reset-vector as normal. - * - * @retval ::NRF_ERROR_INVALID_STATE indicates that something was wrong. - * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. - * @retval ::NRF_ERROR_FORBIDDEN if NRF_UICR->BOOTADDR is not set - * @retval ::NRF_ERROR_INVALID_LENGTH is invalid. - */ -typedef struct -{ - uint32_t *bl_src; /**< Pointer to the source of the Bootloader to be be copied.*/ - uint32_t bl_len; /**< Number of 32 bit words to copy for BootLoader */ -}sd_mbr_command_copy_bl_t; - -/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the MBR - * - * Once this function has been called, this address is where the MBR will start to forward interrupts to after a reset. - * - * To restore default forwarding thiss function should be called with @param address set to 0. - * The MBR will then start forwarding to interrupts to the adress in NFR_UICR->BOOTADDR or to the SoftDevice if the BOOTADDR is not set. - * - * @retval ::NRF_SUCCESS - */ -typedef struct -{ - uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ -}sd_mbr_command_vector_table_base_set_t; - -typedef struct -{ - uint32_t command; /**< type of command to be issued see @ref NRF_MBR_COMMANDS. */ - union - { - sd_mbr_command_copy_sd_t copy_sd; /**< Parameters for copy*/ - sd_mbr_command_copy_bl_t copy_bl; /**< Parameters for copy SoftDevice and BootLoader*/ - sd_mbr_command_compare_t compare; /**< Parameters for verify*/ - sd_mbr_command_vector_table_base_set_t base_set; /**< Parameters for vector table base set.*/ - } params; -}sd_mbr_command_t; - -/** @} */ - -/** @addtogroup NRF_MBR_FUNCTIONS Functions - * @{ */ - -/**@brief Issue Master Boot Record commands - * - * Commands used when updating a SoftDevice and bootloader - * - * @param[in] param Pointer to a struct describing the command - * - *@note for retvals see ::sd_mbr_command_copy_sd_t ::sd_mbr_command_copy_bl_t ::sd_mbr_command_compare_t - -*/ -SVCALL(SD_MBR_COMMAND, uint32_t, sd_mbr_command(sd_mbr_command_t* param)); - -/** @} */ -#endif // NRF_MBR_H__ - -/** - @} -*/
--- a/TARGET_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_sdm.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,167 +0,0 @@ -/* - * Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @defgroup nrf_sdm_api SoftDevice Manager API - @{ - - @brief APIs for SoftDevice management. - -*/ - -/* Header guard */ -#ifndef NRF_SDM_H__ -#define NRF_SDM_H__ - -#include "nrf_svc.h" -#include "nrf51.h" -#include "nrf_soc.h" -#include "nrf_error_sdm.h" - -/** @addtogroup NRF_SDM_DEFINES Defines - * @{ */ - -/**@brief SoftDevice Manager SVC Base number. */ -#define SDM_SVC_BASE (0x10) - -/** @} */ - -/** @addtogroup NRF_SDM_ENUMS Enumerations - * @{ */ - -/**@brief nRF SoftDevice Manager API SVC numbers. */ -enum NRF_SD_SVCS -{ - SD_SOFTDEVICE_ENABLE = SDM_SVC_BASE, /**< ::sd_softdevice_enable */ - SD_SOFTDEVICE_DISABLE, /**< ::sd_softdevice_disable */ - SD_SOFTDEVICE_IS_ENABLED, /**< ::sd_softdevice_is_enabled */ - SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, /**< ::sd_softdevice_vector_table_base_set */ - SVC_SDM_LAST /**< Placeholder for last SDM SVC */ -}; - -/**@brief Possible lfclk oscillator sources. */ -enum NRF_CLOCK_LFCLKSRCS -{ - NRF_CLOCK_LFCLKSRC_SYNTH_250_PPM, /**< LFCLK Synthesized from HFCLK. */ - NRF_CLOCK_LFCLKSRC_XTAL_500_PPM, /**< LFCLK crystal oscillator 500 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_250_PPM, /**< LFCLK crystal oscillator 250 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_150_PPM, /**< LFCLK crystal oscillator 150 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_100_PPM, /**< LFCLK crystal oscillator 100 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_75_PPM, /**< LFCLK crystal oscillator 75 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_50_PPM, /**< LFCLK crystal oscillator 50 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_30_PPM, /**< LFCLK crystal oscillator 30 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_20_PPM, /**< LFCLK crystal oscillator 20 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_250MS_CALIBRATION, /**< LFCLK RC oscillator, 250ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_500MS_CALIBRATION, /**< LFCLK RC oscillator, 500ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_1000MS_CALIBRATION, /**< LFCLK RC oscillator, 1000ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_2000MS_CALIBRATION, /**< LFCLK RC oscillator, 2000ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_4000MS_CALIBRATION, /**< LFCLK RC oscillator, 4000ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_8000MS_CALIBRATION, /**< LFCLK RC oscillator, 8000ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_1000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 1000ms, if changed above a threshold, a calibration is done.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_2000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 2000ms, if changed above a threshold, a calibration is done.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_4000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 4000ms, if changed above a threshold, a calibration is done.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_8000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 8000ms, if changed above a threshold, a calibration is done.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_16000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 16000ms, if changed above a threshold, a calibration is done.*/ -}; - -/** @} */ - -/** @addtogroup NRF_SDM_TYPES Types - * @{ */ - -/**@brief Type representing lfclk oscillator source. */ -typedef uint32_t nrf_clock_lfclksrc_t; - - -/**@brief SoftDevice Assertion Handler type. - * - * When an unexpected error occurs within the SoftDevice it will call the SoftDevice assertion handler callback. - * The protocol stack will be in an undefined state when this happens and the only way to recover will be to - * perform a reset, using e.g. CMSIS NVIC_SystemReset(). - * - * @note This callback is executed in HardFault context, thus SVC functions cannot be called from the SoftDevice assert callback. - * - * @param[in] pc The program counter of the failed assert. - * @param[in] line_number Line number where the assert failed. - * @param[in] file_name File name where the assert failed. - */ -typedef void (*softdevice_assertion_handler_t)(uint32_t pc, uint16_t line_number, const uint8_t * p_file_name); - -/** @} */ - -/** @addtogroup NRF_SDM_FUNCTIONS Functions - * @{ */ - -/**@brief Enables the SoftDevice and by extension the protocol stack. - * - * Idempotent function to enable the SoftDevice. - * - * @note Some care must be taken if a low frequency clock source is already running when calling this function: - * If the LF clock has a different source then the one currently running, it will be stopped. Then, the new - * clock source will be started. - * - * @note This function has no effect when returning with an error. - * - * @post If return code is ::NRF_SUCCESS - * - SoC library and protocol stack APIs are made available - * - A portion of RAM will be unavailable (see relevant SDS documentation) - * - Some peripherals will be unavailable or available only through the SoC API (see relevant SDS documentation) - * - Interrupts will not arrive from protected peripherals or interrupts - * - nrf_nvic_ functions must be used instead of CMSIS NVIC_ functions for reliable usage of the softdevice. - * - Interrupt latency may be affected by the SoftDevice (see relevant SDS documentation) - * - Chosen low frequency clock source will be running - * - * @param clock_source Low frequency clock source and accuracy. (Note: In the case of XTAL source, the PPM accuracy of the chosen clock source must be greater than or equal to the actual characteristics of your XTAL clock). - * @param assertion_handler Callback for SoftDevice assertions. - * - * @retval ::NRF_SUCCESS - * @retval ::NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION SoftDeviceinterrupt is already enabled, or an enabled interrupt has an illegal priority level - * @retval ::NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN Unknown low frequency clock source selected - */ -SVCALL(SD_SOFTDEVICE_ENABLE, uint32_t, sd_softdevice_enable(nrf_clock_lfclksrc_t clock_source, softdevice_assertion_handler_t assertion_handler)); - -/**@brief Disables the SoftDevice and by extension the protocol stack. - * - * Idempotent function to disable the SoftDevice. - * - * @post SoC library and protocol stack APIs are made unavailable. - * @post All interrupts that was protected by the SoftDevice will be disabled and initialized to priority 0 (highest). - * @post All peripherals used by the SoftDevice will be reset to default values. - * @post All of RAM become available. - * @post All interrupts are forwarded to the application. - * @post LFCLK source chosen in ::sd_softdevice_enable will be left running. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_DISABLE, uint32_t, sd_softdevice_disable(void)); - -/**@brief Check if the SoftDevice is enabled. - * - * @param[out] p_softdevice_enabled If the SoftDevice is enabled: 1 else 0. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_IS_ENABLED, uint32_t, sd_softdevice_is_enabled(uint8_t * p_softdevice_enabled)); - -/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the SoftDevice - * - * This function is only intended to be called when a bootloader is enabled. - * - * @param[in] address The base address of the interrupt vector table for forwarded interrupts. - - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, uint32_t, sd_softdevice_vector_table_base_set(uint32_t address)); - -/** @} */ - -#endif // NRF_SDM_H__ - -/** - @} -*/
--- a/TARGET_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_soc.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,958 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - -/** - * @defgroup nrf_soc_api SoC Library API - * @{ - * - * @brief APIs for the SoC library. - * -*/ - -#ifndef NRF_SOC_H__ -#define NRF_SOC_H__ - -#include <stdint.h> -#include <stdbool.h> -#include "nrf_svc.h" -#include "nrf51.h" -#include "nrf51_bitfields.h" -#include "nrf_error_soc.h" - -/** @addtogroup NRF_SOC_DEFINES Defines - * @{ */ - -/**@brief The number of the lowest SVC number reserved for the SoC library. */ -#define SOC_SVC_BASE (0x20) -#define SOC_SVC_BASE_NOT_AVAILABLE (0x23) - -/**@brief Guranteed time for application to process radio inactive notification. */ -#define NRF_RADIO_NOTIFICATION_INACTIVE_GUARANTEED_TIME_US (62) - -/**@brief The minimum allowed timeslot extension time. */ -#define NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US (200) - -#define SOC_ECB_KEY_LENGTH (16) /**< ECB key length. */ -#define SOC_ECB_CLEARTEXT_LENGTH (16) /**< ECB cleartext length. */ -#define SOC_ECB_CIPHERTEXT_LENGTH (SOC_ECB_CLEARTEXT_LENGTH) /**< ECB ciphertext length. */ - -#define SD_EVT_IRQn (SWI2_IRQn) /**< SoftDevice Event IRQ number. Used for both protocol events and SoC events. */ -#define SD_EVT_IRQHandler (SWI2_IRQHandler) /**< SoftDevice Event IRQ handler. Used for both protocol events and SoC events. */ -#define RADIO_NOTIFICATION_IRQn (SWI1_IRQn) /**< The radio notification IRQ number. */ -#define RADIO_NOTIFICATION_IRQHandler (SWI1_IRQHandler) /**< The radio notification IRQ handler. */ - -#define NRF_RADIO_LENGTH_MIN_US (100) /**< The shortest allowed radio timeslot, in microseconds. */ -#define NRF_RADIO_LENGTH_MAX_US (100000) /**< The longest allowed radio timeslot, in microseconds. */ - -#define NRF_RADIO_DISTANCE_MAX_US (128000000UL - 1UL) /**< The longest timeslot distance, in microseconds, allowed for the distance parameter (see @ref nrf_radio_request_normal_t) in the request. */ - -#define NRF_RADIO_EARLIEST_TIMEOUT_MAX_US (128000000UL - 1UL) /**< The longest timeout, in microseconds, allowed when requesting the earliest possible timeslot. */ - -#define NRF_RADIO_START_JITTER_US (2) /**< The maximum jitter in NRF_RADIO_CALLBACK_SIGNAL_TYPE_START relative to the requested start time. */ - -/** @} */ - -/** @addtogroup NRF_SOC_TYPES Types - * @{ */ - -/**@brief The SVC numbers used by the SVC functions in the SoC library. */ -enum NRF_SOC_SVCS -{ - SD_FLASH_PAGE_ERASE = SOC_SVC_BASE, - SD_FLASH_WRITE, - SD_FLASH_PROTECT, - SD_MUTEX_NEW = SOC_SVC_BASE_NOT_AVAILABLE, - SD_MUTEX_ACQUIRE, - SD_MUTEX_RELEASE, - SD_NVIC_ENABLEIRQ, - SD_NVIC_DISABLEIRQ, - SD_NVIC_GETPENDINGIRQ, - SD_NVIC_SETPENDINGIRQ, - SD_NVIC_CLEARPENDINGIRQ, - SD_NVIC_SETPRIORITY, - SD_NVIC_GETPRIORITY, - SD_NVIC_SYSTEMRESET, - SD_NVIC_CRITICAL_REGION_ENTER, - SD_NVIC_CRITICAL_REGION_EXIT, - SD_RAND_APPLICATION_POOL_CAPACITY, - SD_RAND_APPLICATION_BYTES_AVAILABLE, - SD_RAND_APPLICATION_GET_VECTOR, - SD_POWER_MODE_SET, - SD_POWER_SYSTEM_OFF, - SD_POWER_RESET_REASON_GET, - SD_POWER_RESET_REASON_CLR, - SD_POWER_POF_ENABLE, - SD_POWER_POF_THRESHOLD_SET, - SD_POWER_RAMON_SET, - SD_POWER_RAMON_CLR, - SD_POWER_RAMON_GET, - SD_POWER_GPREGRET_SET, - SD_POWER_GPREGRET_CLR, - SD_POWER_GPREGRET_GET, - SD_POWER_DCDC_MODE_SET, - SD_APP_EVT_WAIT, - SD_CLOCK_HFCLK_REQUEST, - SD_CLOCK_HFCLK_RELEASE, - SD_CLOCK_HFCLK_IS_RUNNING, - SD_PPI_CHANNEL_ENABLE_GET, - SD_PPI_CHANNEL_ENABLE_SET, - SD_PPI_CHANNEL_ENABLE_CLR, - SD_PPI_CHANNEL_ASSIGN, - SD_PPI_GROUP_TASK_ENABLE, - SD_PPI_GROUP_TASK_DISABLE, - SD_PPI_GROUP_ASSIGN, - SD_PPI_GROUP_GET, - SD_RADIO_NOTIFICATION_CFG_SET, - SD_ECB_BLOCK_ENCRYPT, - SD_RADIO_SESSION_OPEN, - SD_RADIO_SESSION_CLOSE, - SD_RADIO_REQUEST, - SD_EVT_GET, - SD_TEMP_GET, - SVC_SOC_LAST -}; - -/**@brief Possible values of a ::nrf_mutex_t. */ -enum NRF_MUTEX_VALUES -{ - NRF_MUTEX_FREE, - NRF_MUTEX_TAKEN -}; - -/**@brief Possible values of ::nrf_app_irq_priority_t. */ -enum NRF_APP_PRIORITIES -{ - NRF_APP_PRIORITY_HIGH = 1, - NRF_APP_PRIORITY_LOW = 3 -}; - -/**@brief Possible values of ::nrf_power_mode_t. */ -enum NRF_POWER_MODES -{ - NRF_POWER_MODE_CONSTLAT, /**< Constant latency mode. See power management in the reference manual. */ - NRF_POWER_MODE_LOWPWR /**< Low power mode. See power management in the reference manual. */ -}; - - -/**@brief Possible values of ::nrf_power_failure_threshold_t */ -enum NRF_POWER_THRESHOLDS -{ - NRF_POWER_THRESHOLD_V21, /**< 2.1 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V23, /**< 2.3 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V25, /**< 2.5 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V27 /**< 2.7 Volts power failure threshold. */ -}; - - -/**@brief Possible values of ::nrf_power_dcdc_mode_t. */ -enum NRF_POWER_DCDC_MODES -{ - NRF_POWER_DCDC_MODE_OFF, /**< The DCDC is always off. */ - NRF_POWER_DCDC_MODE_ON, /**< The DCDC is always on. */ - NRF_POWER_DCDC_MODE_AUTOMATIC /**< The DCDC is automatically managed. */ -}; - -/**@brief Possible values of ::nrf_radio_notification_distance_t. */ -enum NRF_RADIO_NOTIFICATION_DISTANCES -{ - NRF_RADIO_NOTIFICATION_DISTANCE_NONE = 0, /**< The event does not have a notification. */ - NRF_RADIO_NOTIFICATION_DISTANCE_800US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_1740US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_2680US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_3620US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_4560US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_5500US /**< The distance from the active notification to start of radio activity. */ -}; - - -/**@brief Possible values of ::nrf_radio_notification_type_t. */ -enum NRF_RADIO_NOTIFICATION_TYPES -{ - NRF_RADIO_NOTIFICATION_TYPE_NONE = 0, /**< The event does not have a radio notification signal. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_ACTIVE, /**< Using interrupt for notification when the radio will be enabled. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE, /**< Using interrupt for notification when the radio has been disabled. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_BOTH, /**< Using interrupt for notification both when the radio will be enabled and disabled. */ -}; - -/**@brief SoC Events. */ -enum NRF_SOC_EVTS -{ - NRF_EVT_HFCLKSTARTED, /**< Event indicating that the HFCLK has started. */ - NRF_EVT_POWER_FAILURE_WARNING, /**< Event indicating that a power failure warning has occurred. */ - NRF_EVT_FLASH_OPERATION_SUCCESS, /**< Event indicating that the ongoing flash operation has completed successfully. */ - NRF_EVT_FLASH_OPERATION_ERROR, /**< Event indicating that the ongoing flash operation has timed out with an error. */ - NRF_EVT_RADIO_BLOCKED, /**< Event indicating that a radio timeslot was blocked. */ - NRF_EVT_RADIO_CANCELED, /**< Event indicating that a radio timeslot was canceled by SoftDevice. */ - NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN, /**< Event indicating that a radio signal callback handler return was invalid. */ - NRF_EVT_RADIO_SESSION_IDLE, /**< Event indicating that a radio session is idle. */ - NRF_EVT_RADIO_SESSION_CLOSED, /**< Event indicating that a radio session is closed. */ - NRF_EVT_NUMBER_OF_EVTS -}; - -/** @} */ - -/** @addtogroup NRF_SOC_TYPES Types - * @{ */ - -/**@brief Represents a mutex for use with the nrf_mutex functions. - * @note Accessing the value directly is not safe, use the mutex functions! - */ -typedef volatile uint8_t nrf_mutex_t; - -/**@brief The interrupt priorities available to the application while the softdevice is active. */ -typedef uint8_t nrf_app_irq_priority_t; - -/**@brief Represents a power mode, used in power mode functions */ -typedef uint8_t nrf_power_mode_t; - -/**@brief Represents a power failure threshold value. */ -typedef uint8_t nrf_power_failure_threshold_t; - -/**@brief Represents a DCDC mode value. */ -typedef uint32_t nrf_power_dcdc_mode_t; - -/**@brief Radio notification distances. */ -typedef uint8_t nrf_radio_notification_distance_t; - -/**@brief Radio notification types. */ -typedef uint8_t nrf_radio_notification_type_t; - -/** @brief The Radio signal callback types. */ -enum NRF_RADIO_CALLBACK_SIGNAL_TYPE -{ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_START, /**< This signal indicates the start of the radio timeslot. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0, /**< This signal indicates the NRF_TIMER0 interrupt. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO, /**< This signal indicates the NRF_RADIO interrupt. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_FAILED, /**< This signal indicates extend action failed. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_SUCCEEDED /**< This signal indicates extend action succeeded. */ -}; - -/** @brief The actions requested by the signal callback. - * - * This code gives the SOC instructions about what action to take when the signal callback has - * returned. - */ -enum NRF_RADIO_SIGNAL_CALLBACK_ACTION -{ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_NONE, /**< Return without action. */ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND, /**< Request an extension of the current timeslot (maximum execution time for this action is when the extension succeeded). */ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_END, /**< End the current radio timeslot. */ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END /**< Request a new radio timeslot and end the current timeslot. */ -}; - -/**@brief Radio timeslot high frequency clock source configuration. */ -enum NRF_RADIO_HFCLK_CFG -{ - NRF_RADIO_HFCLK_CFG_DEFAULT, /**< Use the currently selected oscillator as HF clock source during the timeslot (i.e. the source is not specified). */ - NRF_RADIO_HFCLK_CFG_FORCE_XTAL, /**< Force external crystal to be used as HF clock source during whole the timeslot. */ -}; - -/** @brief Radio timeslot priorities. */ -enum NRF_RADIO_PRIORITY -{ - NRF_RADIO_PRIORITY_HIGH, /**< High (equal priority as the normal connection priority of the SoftDevice stack(s)). */ - NRF_RADIO_PRIORITY_NORMAL, /**< Normal (equal priority as the priority of secondary activites of the SoftDevice stack(s)). */ -}; - -/** @brief Radio timeslot request type. */ -enum NRF_RADIO_REQUEST_TYPE -{ - NRF_RADIO_REQ_TYPE_EARLIEST, /**< Request timeslot as early as possible. This should always be used for the first request in a session. */ - NRF_RADIO_REQ_TYPE_NORMAL /**< Normal timeslot request. */ -}; - -/** @brief Parameters for a request for a timeslot as early as possible. */ -typedef struct -{ - uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ - uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ - uint32_t length_us; /**< The radio timeslot length (in the range 100 to 100,000] microseconds). */ - uint32_t timeout_us; /**< Longest acceptable delay until the start of the requested timeslot (up to @ref NRF_RADIO_EARLIEST_TIMEOUT_MAX_US microseconds). */ -} nrf_radio_request_earliest_t; - -/** @brief Parameters for a normal radio request. */ -typedef struct -{ - uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ - uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ - uint32_t distance_us; /**< Distance from the start of the previous radio timeslot (up to @ref NRF_RADIO_DISTANCE_MAX_US microseconds). */ - uint32_t length_us; /**< The radio timeslot length (in the range [100..100,000] microseconds). */ -} nrf_radio_request_normal_t; - -/** @brief Radio request parameters. */ -typedef struct -{ - uint8_t request_type; /**< Type of request, see @ref NRF_RADIO_REQUEST_TYPE. */ - union - { - nrf_radio_request_earliest_t earliest; /**< Parameters for a request for a timeslot as early as possible. */ - nrf_radio_request_normal_t normal; /**< Parameters for a normal radio request. */ - } params; -} nrf_radio_request_t; - -/**@brief Return parameters of the radio timeslot signal callback. */ -typedef struct -{ - uint8_t callback_action; /**< The action requested by the application when returning from the signal callback, see @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION. */ - union - { - struct - { - nrf_radio_request_t * p_next; /**< The request parameters for the next radio timeslot. */ - } request; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END. */ - struct - { - uint32_t length_us; /**< Requested extension of the timeslot duration (microseconds) (for minimum time see @ref NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US). */ - } extend; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND. */ - } params; -} nrf_radio_signal_callback_return_param_t; - -/**@brief The radio signal callback type. - * - * @note In case of invalid return parameters, the radio timeslot will automatically end - * immediately after returning from the signal callback and the - * @ref NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN event will be sent. - * @note The returned struct pointer must remain valid after the signal callback - * function returns. For instance, this means that it must not point to a stack variable. - * - * @param[in] signal_type Type of signal, see @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE. - * - * @return Pointer to structure containing action requested by the application. - */ -typedef nrf_radio_signal_callback_return_param_t * (*nrf_radio_signal_callback_t) (uint8_t signal_type); - -/**@brief AES ECB data structure */ -typedef struct -{ - uint8_t key[SOC_ECB_KEY_LENGTH]; /**< Encryption key. */ - uint8_t cleartext[SOC_ECB_CLEARTEXT_LENGTH]; /**< Clear Text data. */ - uint8_t ciphertext[SOC_ECB_CIPHERTEXT_LENGTH]; /**< Cipher Text data. */ -} nrf_ecb_hal_data_t; - -/** @} */ - -/** @addtogroup NRF_SOC_FUNCTIONS Functions - * @{ */ - -/**@brief Initialize a mutex. - * - * @param[in] p_mutex Pointer to the mutex to initialize. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_MUTEX_NEW, uint32_t, sd_mutex_new(nrf_mutex_t * p_mutex)); - -/**@brief Attempt to acquire a mutex. - * - * @param[in] p_mutex Pointer to the mutex to acquire. - * - * @retval ::NRF_SUCCESS The mutex was successfully acquired. - * @retval ::NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN The mutex could not be acquired. - */ -SVCALL(SD_MUTEX_ACQUIRE, uint32_t, sd_mutex_acquire(nrf_mutex_t * p_mutex)); - -/**@brief Release a mutex. - * - * @param[in] p_mutex Pointer to the mutex to release. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_MUTEX_RELEASE, uint32_t, sd_mutex_release(nrf_mutex_t * p_mutex)); - -/**@brief Enable External Interrupt. - * @note Corresponds to NVIC_EnableIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt was enabled. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt has a priority not available for the application. - */ -SVCALL(SD_NVIC_ENABLEIRQ, uint32_t, sd_nvic_EnableIRQ(IRQn_Type IRQn)); - -/**@brief Disable External Interrupt. - * @note Corresponds to NVIC_DisableIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS - * - * @retval ::NRF_SUCCESS The interrupt was disabled. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. - */ -SVCALL(SD_NVIC_DISABLEIRQ, uint32_t, sd_nvic_DisableIRQ(IRQn_Type IRQn)); - -/**@brief Get Pending Interrupt. - * @note Corresponds to NVIC_GetPendingIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_GetPendingIRQ documentation in CMSIS. - * @param[out] p_pending_irq Return value from NVIC_GetPendingIRQ. - * - * @retval ::NRF_SUCCESS The interrupt is available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -SVCALL(SD_NVIC_GETPENDINGIRQ, uint32_t, sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq)); - -/**@brief Set Pending Interrupt. - * @note Corresponds to NVIC_SetPendingIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt is set pending. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -SVCALL(SD_NVIC_SETPENDINGIRQ, uint32_t, sd_nvic_SetPendingIRQ(IRQn_Type IRQn)); - -/**@brief Clear Pending Interrupt. - * @note Corresponds to NVIC_ClearPendingIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt pending flag is cleared. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -SVCALL(SD_NVIC_CLEARPENDINGIRQ, uint32_t, sd_nvic_ClearPendingIRQ(IRQn_Type IRQn)); - -/**@brief Set Interrupt Priority. - * @note Corresponds to NVIC_SetPriority in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * @pre{priority is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_SetPriority documentation in CMSIS. - * @param[in] priority A valid IRQ priority for use by the application. - * - * @retval ::NRF_SUCCESS The interrupt and priority level is available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt priority is not available for the application. - */ -SVCALL(SD_NVIC_SETPRIORITY, uint32_t, sd_nvic_SetPriority(IRQn_Type IRQn, nrf_app_irq_priority_t priority)); - -/**@brief Get Interrupt Priority. - * @note Corresponds to NVIC_GetPriority in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_GetPriority documentation in CMSIS. - * @param[out] p_priority Return value from NVIC_GetPriority. - * - * @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE - IRQn is not available for the application. - */ -SVCALL(SD_NVIC_GETPRIORITY, uint32_t, sd_nvic_GetPriority(IRQn_Type IRQn, nrf_app_irq_priority_t * p_priority)); - -/**@brief System Reset. - * @note Corresponds to NVIC_SystemReset in CMSIS. - * - * @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN - */ -SVCALL(SD_NVIC_SYSTEMRESET, uint32_t, sd_nvic_SystemReset(void)); - -/**@brief Enters critical region. - * - * @post Application interrupts will be disabled. - * @sa sd_nvic_critical_region_exit - * - * @param[out] p_is_nested_critical_region 1: If in a nested critical region. - * 0: Otherwise. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_NVIC_CRITICAL_REGION_ENTER, uint32_t, sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region)); - -/**@brief Exit critical region. - * - * @pre Application has entered a critical region using ::sd_nvic_critical_region_enter. - * @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called. - * - * @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_NVIC_CRITICAL_REGION_EXIT, uint32_t, sd_nvic_critical_region_exit(uint8_t is_nested_critical_region)); - -/**@brief Query the capacity of the application random pool. - * - * @param[out] p_pool_capacity The capacity of the pool. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RAND_APPLICATION_POOL_CAPACITY, uint32_t, sd_rand_application_pool_capacity_get(uint8_t * p_pool_capacity)); - -/**@brief Get number of random bytes available to the application. - * - * @param[out] p_bytes_available The number of bytes currently available in the pool. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RAND_APPLICATION_BYTES_AVAILABLE, uint32_t, sd_rand_application_bytes_available_get(uint8_t * p_bytes_available)); - -/**@brief Get random bytes from the application pool. - * - * @param[out] p_buff Pointer to unit8_t buffer for storing the bytes. - * @param[in] length Number of bytes to take from pool and place in p_buff. - * - * @retval ::NRF_SUCCESS The requested bytes were written to p_buff. - * @retval ::NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES No bytes were written to the buffer, because there were not enough bytes available. -*/ -SVCALL(SD_RAND_APPLICATION_GET_VECTOR, uint32_t, sd_rand_application_vector_get(uint8_t * p_buff, uint8_t length)); - -/**@brief Gets the reset reason register. - * - * @param[out] p_reset_reason Contents of the NRF_POWER->RESETREAS register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RESET_REASON_GET, uint32_t, sd_power_reset_reason_get(uint32_t * p_reset_reason)); - -/**@brief Clears the bits of the reset reason register. - * - * @param[in] reset_reason_clr_msk Contains the bits to clear from the reset reason register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RESET_REASON_CLR, uint32_t, sd_power_reset_reason_clr(uint32_t reset_reason_clr_msk)); - -/**@brief Sets the power mode when in CPU sleep. - * - * @param[in] power_mode The power mode to use when in CPU sleep. @sa sd_app_evt_wait - * - * @retval ::NRF_SUCCESS The power mode was set. - * @retval ::NRF_ERROR_SOC_POWER_MODE_UNKNOWN The power mode was unknown. - */ -SVCALL(SD_POWER_MODE_SET, uint32_t, sd_power_mode_set(nrf_power_mode_t power_mode)); - -/**@brief Puts the chip in System OFF mode. - * - * @retval ::NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN - */ -SVCALL(SD_POWER_SYSTEM_OFF, uint32_t, sd_power_system_off(void)); - -/**@brief Enables or disables the power-fail comparator. - * - * Enabling this will give a softdevice event (NRF_EVT_POWER_FAILURE_WARNING) when the power failure warning occurs. - * The event can be retrieved with sd_evt_get(); - * - * @param[in] pof_enable True if the power-fail comparator should be enabled, false if it should be disabled. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_POF_ENABLE, uint32_t, sd_power_pof_enable(uint8_t pof_enable)); - -/**@brief Sets the power-fail threshold value. - * - * @param[in] threshold The power-fail threshold value to use. - * - * @retval ::NRF_SUCCESS The power failure threshold was set. - * @retval ::NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN The power failure threshold is unknown. - */ -SVCALL(SD_POWER_POF_THRESHOLD_SET, uint32_t, sd_power_pof_threshold_set(nrf_power_failure_threshold_t threshold)); - -/**@brief Sets bits in the NRF_POWER->RAMON register. - * - * @param[in] ramon Contains the bits needed to be set in the NRF_POWER->RAMON register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAMON_SET, uint32_t, sd_power_ramon_set(uint32_t ramon)); - -/** @brief Clears bits in the NRF_POWER->RAMON register. - * - * @param ramon Contains the bits needed to be cleared in the NRF_POWER->RAMON register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAMON_CLR, uint32_t, sd_power_ramon_clr(uint32_t ramon)); - -/**@brief Get contents of NRF_POWER->RAMON register, indicates power status of ram blocks. - * - * @param[out] p_ramon Content of NRF_POWER->RAMON register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAMON_GET, uint32_t, sd_power_ramon_get(uint32_t * p_ramon)); - -/**@brief Set bits in the NRF_POWER->GPREGRET register. - * - * @param[in] gpregret_msk Bits to be set in the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_SET, uint32_t, sd_power_gpregret_set(uint32_t gpregret_msk)); - -/**@brief Clear bits in the NRF_POWER->GPREGRET register. - * - * @param[in] gpregret_msk Bits to be clear in the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_CLR, uint32_t, sd_power_gpregret_clr(uint32_t gpregret_msk)); - -/**@brief Get contents of the NRF_POWER->GPREGRET register. - * - * @param[out] p_gpregret Contents of the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_GET, uint32_t, sd_power_gpregret_get(uint32_t *p_gpregret)); - -/**@brief Sets the DCDC mode. - * - * Depending on the internal state of the SoftDevice, the mode change may not happen immediately. - * The DCDC mode switch will be blocked when occurring in close proximity to radio transmissions. When - * the radio transmission is done, the last mode will be used. - * - * @param[in] dcdc_mode The mode of the DCDC. - * - * @retval ::NRF_SUCCESS - * @retval ::NRF_ERROR_INVALID_PARAM The DCDC mode is invalid. - */ -SVCALL(SD_POWER_DCDC_MODE_SET, uint32_t, sd_power_dcdc_mode_set(nrf_power_dcdc_mode_t dcdc_mode)); - -/**@brief Request the high frequency crystal oscillator. - * - * Will start the high frequency crystal oscillator, the startup time of the crystal varies - * and the ::sd_clock_hfclk_is_running function can be polled to check if it has started. - * - * @see sd_clock_hfclk_is_running - * @see sd_clock_hfclk_release - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_REQUEST, uint32_t, sd_clock_hfclk_request(void)); - -/**@brief Releases the high frequency crystal oscillator. - * - * Will stop the high frequency crystal oscillator, this happens immediately. - * - * @see sd_clock_hfclk_is_running - * @see sd_clock_hfclk_request - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_RELEASE, uint32_t, sd_clock_hfclk_release(void)); - -/**@brief Checks if the high frequency crystal oscillator is running. - * - * @see sd_clock_hfclk_request - * @see sd_clock_hfclk_release - * - * @param[out] p_is_running 1 if the external crystal oscillator is running, 0 if not. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_IS_RUNNING, uint32_t, sd_clock_hfclk_is_running(uint32_t * p_is_running)); - -/**@brief Waits for an application event. - * - * An application event is either an application interrupt or a pended interrupt when the - * interrupt is disabled. When the interrupt is enabled it will be taken immediately since - * this function will wait in thread mode, then the execution will return in the application's - * main thread. When an interrupt is disabled and gets pended it will return to the application's - * thread main. The application must ensure that the pended flag is cleared using - * ::sd_nvic_ClearPendingIRQ in order to sleep using this function. This is only necessary for - * disabled interrupts, as the interrupt handler will clear the pending flag automatically for - * enabled interrupts. - * - * In order to wake up from disabled interrupts, the SEVONPEND flag has to be set in the Cortex-M0 - * System Control Register (SCR). @sa CMSIS_SCB - * - * @note If an application interrupt has happened since the last time sd_app_evt_wait was - * called this function will return immediately and not go to sleep. This is to avoid race - * conditions that can occur when a flag is updated in the interrupt handler and processed - * in the main loop. - * - * @post An application interrupt has happened or a interrupt pending flag is set. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_APP_EVT_WAIT, uint32_t, sd_app_evt_wait(void)); - -/**@brief Get PPI channel enable register contents. - * - * @param[out] p_channel_enable The contents of the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_GET, uint32_t, sd_ppi_channel_enable_get(uint32_t * p_channel_enable)); - -/**@brief Set PPI channel enable register. - * - * @param[in] channel_enable_set_msk Mask containing the bits to set in the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_SET, uint32_t, sd_ppi_channel_enable_set(uint32_t channel_enable_set_msk)); - -/**@brief Clear PPI channel enable register. - * - * @param[in] channel_enable_clr_msk Mask containing the bits to clear in the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_CLR, uint32_t, sd_ppi_channel_enable_clr(uint32_t channel_enable_clr_msk)); - -/**@brief Assign endpoints to a PPI channel. - * - * @param[in] channel_num Number of the PPI channel to assign. - * @param[in] evt_endpoint Event endpoint of the PPI channel. - * @param[in] task_endpoint Task endpoint of the PPI channel. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_CHANNEL The channel number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ASSIGN, uint32_t, sd_ppi_channel_assign(uint8_t channel_num, const volatile void * evt_endpoint, const volatile void * task_endpoint)); - -/**@brief Task to enable a channel group. - * - * @param[in] group_num Number of the channel group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_TASK_ENABLE, uint32_t, sd_ppi_group_task_enable(uint8_t group_num)); - -/**@brief Task to disable a channel group. - * - * @param[in] group_num Number of the PPI group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_TASK_DISABLE, uint32_t, sd_ppi_group_task_disable(uint8_t group_num)); - -/**@brief Assign PPI channels to a channel group. - * - * @param[in] group_num Number of the channel group. - * @param[in] channel_msk Mask of the channels to assign to the group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_ASSIGN, uint32_t, sd_ppi_group_assign(uint8_t group_num, uint32_t channel_msk)); - -/**@brief Gets the PPI channels of a channel group. - * - * @param[in] group_num Number of the channel group. - * @param[out] p_channel_msk Mask of the channels assigned to the group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_GET, uint32_t, sd_ppi_group_get(uint8_t group_num, uint32_t * p_channel_msk)); - -/**@brief Configures the Radio Notification signal. - * - * @note - * - The notification signal latency depends on the interrupt priority settings of SWI used - * for notification signal. - * - In the period between the ACTIVE signal and the start of the Radio Event, the SoftDevice - * will interrupt the application to do Radio Event preparation. - * - Using the Radio Notification feature may limit the bandwidth, as the SoftDevice may have - * to shorten the connection events to have time for the Radio Notification signals. - * - * @param[in] type Type of notification signal. - * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE shall be used to turn off radio - * notification. Using @ref NRF_RADIO_NOTIFICATION_DISTANCE_NONE is - * recommended (but not required) to be used with - * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE. - * - * @param[in] distance Distance between the notification signal and start of radio activity. - * This parameter is ignored when @ref NRF_RADIO_NOTIFICATION_TYPE_NONE or - * @ref NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE is used. - * - * @retval ::NRF_ERROR_INVALID_PARAM The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RADIO_NOTIFICATION_CFG_SET, uint32_t, sd_radio_notification_cfg_set(nrf_radio_notification_type_t type, nrf_radio_notification_distance_t distance)); - -/**@brief Encrypts a block according to the specified parameters. - * - * 128-bit AES encryption. - * - * @param[in, out] p_ecb_data Pointer to the ECB parameters' struct (two input - * parameters and one output parameter). - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_ECB_BLOCK_ENCRYPT, uint32_t, sd_ecb_block_encrypt(nrf_ecb_hal_data_t * p_ecb_data)); - -/**@brief Gets any pending events generated by the SoC API. - * - * The application should keep calling this function to get events, until ::NRF_ERROR_NOT_FOUND is returned. - * - * @param[out] p_evt_id Set to one of the values in @ref NRF_SOC_EVTS, if any events are pending. - * - * @retval ::NRF_SUCCESS An event was pending. The event id is written in the p_evt_id parameter. - * @retval ::NRF_ERROR_NOT_FOUND No pending events. - */ -SVCALL(SD_EVT_GET, uint32_t, sd_evt_get(uint32_t * p_evt_id)); - -/**@brief Get the temperature measured on the chip - * - * This function will block until the temperature measurement is done. - * It takes around 50us from call to return. - * - * @note Pan #28 in PAN-028 v 1.6 "Negative measured values are not represented correctly" is corrected by this function. - * - * @param[out] p_temp Result of temperature measurement. Die temperature in 0.25 degrees celsius. - * - * @retval ::NRF_SUCCESS A temperature measurement was done, and the temperature was written to temp - */ -SVCALL(SD_TEMP_GET, uint32_t, sd_temp_get(int32_t * p_temp)); - -/**@brief Flash Write - * - * Commands to write a buffer to flash - * - * This call initiates the flash access command, and its completion will be communicated to the - * application with exactly one of the following events: - * - NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. - * - NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. - * - * @note - * - This call takes control over the radio and the CPU during flash erase and write to make sure that - * they will not interfere with the flash access. This means that all interrupts will be blocked - * for a predictable time (depending on the NVMC specification in nRF51 Series Reference Manual - * and the command parameters). - * - * - * @param[in] p_dst Pointer to start of flash location to be written. - * @param[in] p_src Pointer to buffer with data to be written - * @param[in] size Number of 32-bit words to write. Maximum size is 256 32bit words. - * - * @retval ::NRF_ERROR_INVALID_ADDR Tried to write to a non existing flash address, or p_dst or p_src was unaligned. - * @retval ::NRF_ERROR_BUSY The previous command has not yet completed. - * @retval ::NRF_ERROR_INVALID_LENGTH Size was 0, or more than 256 words. - * @retval ::NRF_ERROR_FORBIDDEN Tried to write to or read from protected location. - * @retval ::NRF_SUCCESS The command was accepted. - */ -SVCALL(SD_FLASH_WRITE, uint32_t, sd_flash_write(uint32_t * const p_dst, uint32_t const * const p_src, uint32_t size)); - - -/**@brief Flash Erase page - * - * Commands to erase a flash page - * - * This call initiates the flash access command, and its completion will be communicated to the - * application with exactly one of the following events: - * - NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. - * - NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. - * - * @note - * - This call takes control over the radio and the CPU during flash erase and write to make sure that - * they will not interfere with the flash access. This means that all interrupts will be blocked - * for a predictable time (depending on the NVMC specification in nRF51 Series Reference Manual - * and the command parameters). - * - * - * @param[in] page_number Pagenumber of the page to erase - * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. - * @retval ::NRF_ERROR_INVALID_ADDR Tried to erase to a non existing flash page. - * @retval ::NRF_ERROR_BUSY The previous command has not yet completed. - * @retval ::NRF_ERROR_FORBIDDEN Tried to erase a protected page. - * @retval ::NRF_SUCCESS The command was accepted. - */ -SVCALL(SD_FLASH_PAGE_ERASE, uint32_t, sd_flash_page_erase(uint32_t page_number)); - - -/**@brief Flash Protection set - * - * Commands to set the flash protection registers PROTENSETx - * - * @note To read the values in PROTENSETx you can read them directly. They are only write-protected. - * - * @param[in] protenset0 Value to be written to PROTENSET0 - * @param[in] protenset1 Value to be written to PROTENSET1 - * - * @retval ::NRF_ERROR_FORBIDDEN Tried to protect the SoftDevice - * @retval ::NRF_SUCCESS Values successfully written to PROTENSETx - */ -SVCALL(SD_FLASH_PROTECT, uint32_t, sd_flash_protect(uint32_t protenset0, uint32_t protenset1)); - -/**@brief Opens a session for radio requests. - * - * @note Only one session can be open at a time. - * @note p_radio_signal_callback(NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) will be called when the radio timeslot - * starts. From this point the NRF_RADIO and NRF_TIMER0 peripherals can be freely accessed - * by the application. - * @note p_radio_signal_callback(NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0) is called whenever the NRF_TIMER0 - * interrupt occurs. - * @note p_radio_signal_callback(NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO) is called whenever the NRF_RADIO - * interrupt occurs. - * @note p_radio_signal_callback() will be called at ARM interrupt priority level 0. This - * implies that none of the sd_* API calls can be used from p_radio_signal_callback(). - * - * @param[in] p_radio_signal_callback The signal callback. - * - * @retval ::NRF_ERROR_INVALID_ADDR p_radio_signal_callback is an invalid function pointer. - * @retval ::NRF_ERROR_BUSY If session cannot be opened. - * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. - * @retval ::NRF_SUCCESS Otherwise. - */ - SVCALL(SD_RADIO_SESSION_OPEN, uint32_t, sd_radio_session_open(nrf_radio_signal_callback_t p_radio_signal_callback)); - -/**@brief Closes a session for radio requests. - * - * @note Any current radio timeslot will be finished before the session is closed. - * @note If a radio timeslot is scheduled when the session is closed, it will be canceled. - * @note The application cannot consider the session closed until the NRF_EVT_RADIO_SESSION_CLOSED - * event is received. - * - * @retval ::NRF_ERROR_FORBIDDEN If session not opened. - * @retval ::NRF_ERROR_BUSY If session is currently being closed. - * @retval ::NRF_SUCCESS Otherwise. - */ - SVCALL(SD_RADIO_SESSION_CLOSE, uint32_t, sd_radio_session_close(void)); - - /**@brief Requests a radio timeslot. - * - * @note The timing of the radio timeslot is specified by p_request->distance_us. For the first - * request in a session, p_request->distance_us is required to be 0 by convention, and - * the timeslot is scheduled at the first possible opportunity. All following radio timeslots are - * requested with a distance of p_request->distance_us measured from the start of the - * previous radio timeslot. - * @note A too small p_request->distance_us will lead to a NRF_EVT_RADIO_BLOCKED event. - * @note Timeslots scheduled too close will lead to a NRF_EVT_RADIO_BLOCKED event. - * @note See the SoftDevice Specification for more on radio timeslot scheduling, distances and lengths. - * @note If an opportunity for the first radio timeslot is not found before 100ms after the call to this - * function, it is not scheduled, and instead a NRF_EVT_RADIO_BLOCKED event is sent. - * The application may then try to schedule the first radio timeslot again. - * @note Successful requests will result in nrf_radio_signal_callback_t(NRF_RADIO_CALLBACK_SIGNAL_TYPE_START). - * Unsuccessful requests will result in a NRF_EVT_RADIO_BLOCKED event, see @ref NRF_SOC_EVTS. - * @note The jitter in the start time of the radio timeslots is +/- NRF_RADIO_START_JITTER_US us. - * @note The nrf_radio_signal_callback_t(NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) call has a latency relative to the - * specified radio timeslot start, but this does not affect the actual start time of the timeslot. - * @note NRF_TIMER0 is reset at the start of the radio timeslot, and is clocked at 1MHz from the high frequency - * (16 MHz) clock source. If p_request->hfclk_force_xtal is true, the high frequency clock is - * guaranteed to be clocked from the external crystal. - * @note The SoftDevice will neither access the NRF_RADIO peripheral nor the NRF_TIMER0 peripheral - * during the radio timeslot. - * - * @param[in] p_request Pointer to the request parameters. - * - * @retval ::NRF_ERROR_FORBIDDEN If session not opened or the session is not IDLE. - * @retval ::NRF_ERROR_INVALID_ADDR If the p_request pointer is invalid. - * @retval ::NRF_ERROR_INVALID_PARAM If the parameters of p_request are not valid. - * @retval ::NRF_SUCCESS Otherwise. - */ - SVCALL(SD_RADIO_REQUEST, uint32_t, sd_radio_request(nrf_radio_request_t * p_request )); - -/** @} */ - -#endif // NRF_SOC_H__ - -/**@} */
--- a/TARGET_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_svc.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -#ifndef NRF_SVC__ -#define NRF_SVC__ - -#ifdef SVCALL_AS_NORMAL_FUNCTION -#define SVCALL(number, return_type, signature) return_type signature -#else - -#ifndef SVCALL -#if defined (__CC_ARM) -#define SVCALL(number, return_type, signature) return_type __svc(number) signature -#elif defined (__GNUC__) -#define SVCALL(number, return_type, signature) \ - _Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \ - _Pragma("GCC diagnostic ignored \"-Wunused-function\"") \ - __attribute__((naked)) static return_type signature \ - { \ - __asm( \ - "svc %0\n" \ - "bx r14" : : "I" (number) : "r0" \ - ); \ - } -#elif defined (__ICCARM__) -#define PRAGMA(x) _Pragma(#x) -#define SVCALL(number, return_type, signature) \ -PRAGMA(swi_number = number) \ - __swi return_type signature; -#else -#define SVCALL(number, return_type, signature) return_type signature -#endif -#endif // SVCALL - -#endif // SVCALL_AS_NORMAL_FUNCTION -#endif // NRF_SVC__
--- a/TARGET_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/softdevice_assert.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - -/** @brief Utilities for verifying program logic - */ - -#ifndef SOFTDEVICE_ASSERT_H_ -#define SOFTDEVICE_ASSERT_H_ - -#include <stdint.h> - -/** @brief This function handles assertions. - * - * - * @note - * This function is called when an assertion has triggered. - * - * - * @param line_num The line number where the assertion is called - * @param file_name Pointer to the file name - */ -void assert_softdevice_callback(uint16_t line_num, const uint8_t *file_name); - - -/*lint -emacro(506, ASSERT) */ /* Suppress "Constant value Boolean */ -/*lint -emacro(774, ASSERT) */ /* Suppress "Boolean within 'if' always evaluates to True" */ \ -/** @brief Check intended for production code - * - * Check passes if "expr" evaluates to true. */ -#define ASSERT(expr) \ -if (expr) \ -{ \ -} \ -else \ -{ \ - assert_softdevice_callback((uint16_t)__LINE__, (uint8_t *)__FILE__); \ - /*lint -unreachable */ \ -} - -#endif /* SOFTDEVICE_ASSERT_H_ */
--- a/TARGET_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_softdevice.hex Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5290 +0,0 @@ -:020000040000FA -:10000000C0070000D1060000D1000000B1060000CA -:1000100000000000000000000000000000000000E0 -:100020000000000000000000000000005107000078 -:100030000000000000000000DB000000E500000000 -:10004000EF000000F9000000030100000D010000B6 -:1000500017010000210100002B0100003501000004 -:100060003F01000049010000530100005D01000054 -:1000700067010000710100007B01000085010000A4 -:100080008F01000099010000A3010000AD010000F4 -:10009000B7010000C1010000CB010000D501000044 -:1000A000DF010000E9010000F3010000FD01000094 -:1000B00007020000110200001B02000025020000E0 -:1000C0001FB5C046C04600F0EFFA04B00FB41FBD24 -:1000D00008205A49096809580847382057490968CB -:1000E000095808473C2055490968095808474020E5 -:1000F0005249096809580847442050490968095875 -:10010000084748204D490968095808474C204B4981 -:10011000096809580847502048490968095808479C -:100120005420464909680958084758204349096836 -:10013000095808475C204149096809580847602068 -:100140003E4909680958084764203C49096809582C -:100150000847682039490968095808476C20374919 -:100160000968095808477020344909680958084740 -:100170007420324909680958084778202F490968CE -:10018000095808477C202D490968095808478020EC -:100190002A490968095808478420284909680958E4 -:1001A0000847882025490968095808478C202349B1 -:1001B00009680958084790202049096809580847E4 -:1001C00094201E4909680958084798201B49096866 -:1001D000095808479C201949096809580847A02070 -:1001E0001649096809580847A4201449096809589C -:1001F0000847A8201149096809580847AC200F4949 -:10020000096809580847B0200C4909680958084787 -:10021000B4200A49096809580847B82007490968FD -:1002200009580847BC2005490968095808470000D3 -:1002300003480449024A034B7047000000000020B5 -:10024000C0070000C00700000122D84B5A6000BF61 -:10025000D74A1268002AFBD0016000BFD44A126856 -:10026000002AFBD00022D14B5A6000BFD04A12684E -:10027000002AFBD07047F0B505460E46174600240D -:1002800006E0A200B158A2005019FFF7DDFF641C80 -:10029000BC42F6D30020F0BD0120C043C549086030 -:1002A000401048607047014601229204086890425D -:1002B00001D9102070470020FCE7F0B505460C4638 -:1002C0001646002706E028462168FFF7BDFF2D1DD2 -:1002D000241D7F1CB742F6D3F0BD70B505460C4611 -:1002E0002E460BE0304600F075F9FF2C01D80024B3 -:1002F00001E0FF3C013C012080023618002CF1D1C6 -:1003000070BD0146012292044868904201D909203B -:100310007047A9484069401C01D10F20F8E7002030 -:10032000F6E7FEB504462068030000F037FA05043E -:100330002B4249598B00201DFFF7E3FF0546002D96 -:1003400001D02846FEBDFFF7A7FF0120C00200F044 -:1003500041F9042221469948FFF78DFF002801D07A -:100360000320EFE708222146944800F06DF90028A9 -:1003700006D1002192480068FFF766FF00F00CF9F3 -:100380000320DFE7A768E6686068019031463846D9 -:10039000FFF7A3FF324638460199FFF78EFFB20000 -:1003A0003846019900F050F9002800D1CAE703202F -:1003B000C8E700F0E3F9834800688349086041E03A -:1003C00060680190E668A0680090B200009901980A -:1003D00000F03AF90746002F00D1B3E70E20B1E74D -:1003E000201DFFF760FF0546002D01D02846A9E734 -:1003F0006068002807D1FFF74FFF0320800200F05C -:10040000E9F800F0C9F8FFF747FF0120C00200F04B -:10041000E1F8042221466948FFF72DFF002801D0AA -:1004200003208FE708222146644800F00DF90028D8 -:1004300006D1002162480068FFF706FF00F0ACF823 -:1004400003207FE700BF00207CE770B505460C461F -:10045000182D04D12068FFF764FF206002E001201E -:10046000206000BF00BF70BDF0B589B05248406940 -:1004700003905248806881000398081802900398FE -:10048000000B01900121090302984018401E000B47 -:1004900000900124002520462946019A00F0C4F866 -:1004A0000022401E91410791069001260027304608 -:1004B0003946009A00F0B8F80022401E914105919B -:1004C0000490049BDB43059AD2430698184307998E -:1004D00011430791069037490698086007984860CD -:1004E00009B0F0BD70B53448446934488568466841 -:1004F000AA003146204600F0A7F8002801D00020CD -:1005000070BD0120FCE72D484068002801D0012083 -:1005100000E000200546FFF7E5FF002807D0FFF7C1 -:10052000BBFE0320800200F055F800F035F8FFF71D -:100530009BFF002D0ED020484669204884684768FC -:1005400021463046FFF7C9FE224639463046FFF7BE -:10055000B4FE00BF00F020F810B5184844681A48EF -:100560000460204600F0DCF810BD15480068006803 -:10057000401C01D100BFFEE710480068002802D0EF -:10058000042806D101E0FFF7BEFFFFF7E5FF00BF3B -:10059000FEE700BF00BFFEE7BFF34F8F0B480C49DB -:1005A000C860BFF34F8F00BFFEE7000000E50140C9 -:1005B00000E40140000600400010001000080000A8 -:1005C000B8070000BC070000000000200400FA0586 -:1005D00000ED00E010B50146104B1A6808460223F2 -:1005E0000F4C636000BF0F4B1B68002BFBD0531CEC -:1005F00004D0904202D20A4B186101E0084B986087 -:1006000000BF084B1B68002BFBD00023044C636029 -:1006100000BF044B1B68002BFBD010BD0010001066 -:1006200000E5014000E4014010B5202A04DB01464A -:10063000203A9140002010BD914020239C1A03468F -:10064000E3401943904010BD034610B50B439B0790 -:100650000FD1042A0DD308C810C9121FA342F8D025 -:1006600018BA21BA884201D9012010BD0020C04328 -:1006700010BD002A03D0D30703D0521C07E000208E -:1006800010BD03780C78401C491C1B1B07D1037854 -:100690000C78401C491C1B1B01D1921EF1D118463D -:1006A00010BD70477047704710B500F007F810BDD7 -:1006B000014B1B68DB6818470000002019481A49E5 -:1006C0007047FFF7FBFFFFF7FBFC00BD20BFFDE716 -:1006D0001649174C24688C420BD1164B1B68994263 -:1006E0000CD1154B154A1360186810498842EDD09B -:1006F0000AE0134880F30888124B18470F4A13602A -:1007000018680A498842E1D080F308880E49884277 -:1007100004DD0E48026802210A4302605B68184744 -:100720000346DFE7C0070000C0070000FFFFFFFF30 -:10073000000C000014100010001000000000002049 -:10074000000400206B05000000200020240500406C -:100750000D48704502D1EFF3098101E0EFF3088104 -:10076000886902380078182802D1C046074A104725 -:10077000074A12682C3212681047000000B5054B7A -:10078000054A9B58984700BDFDFFFFFF4B04000042 -:1007900000000020001000000400000030B4744687 -:1007A000641E2578641CAB4204D3635D5B00E318D0 -:1007B00030BC18471D46F8E7000C00000010000090 -:10100000901D002079500100ED3D0000DF4F0100F0 -:1010100000000000000000000000000000000000D0 -:10102000000000000000000000000000E950010086 -:101030000000000000000000ED3D0000ED3D00005C -:10104000555101005B510100ED3D0000ED3D0000F8 -:10105000ED3D0000ED3D0000ED3D0000ED3D0000E8 -:1010600061510100ED3D0000ED3D000067510100C0 -:10107000ED3D00006D5101007351010079510100F7 -:10108000ED3D0000ED3D0000ED3D0000ED3D0000B8 -:10109000ED3D0000ED3D0000ED3D0000ED3D0000A8 -:1010A0007F51010085510100ED3D0000ED3D000044 -:1010B000ED3D0000ED3D0000ED3D0000ED3D000088 -:1010C00000F002F813F0B9FF0CA030C8083824185B -:1010D0002D18A246671EAB4654465D46AC4201D170 -:1010E00013F0ABFF7E460F3E0FCCB64601263342CF -:1010F00000D0FB1AA246AB463343184744410100D7 -:1011000074410100103A02D378C878C1FAD8520766 -:1011100001D330C830C101D504680C6070470000AD -:101120000023002400250026103A01D378C1FBD803 -:10113000520700D330C100D50B6070471FB5C046C1 -:10114000C04613F01BFF04B00FB41FBD82690249F3 -:1011500081610248104470476111000001000000E5 -:1011600001B41EB400B510F02FFC01B401988646FE -:1011700001BC01B01EBD0000F0B4404649465246D5 -:101180005B460FB402A0013001B50648004700BF1E -:1011900001BC86460FBC8046894692469B46F0BC01 -:1011A00070470000C1100000401E00BF00BF00BF1C -:1011B00000BF00BF00BF00BF00BF00BF00BF00BF37 -:1011C00000BFF1D17047000070B505460C461646C9 -:1011D00002E00FCC0FC5103E102EFAD2082E02D31B -:1011E00003CC03C5083E042E07D301CC01C5361F2E -:1011F00003E021782970641C6D1C761EF9D270BD45 -:101200008307FF22DB0E9A408907090E99400028C8 -:101210000BDA0007000F0838830828489B001B18CA -:10122000D86990430843D8617047830824489B00DD -:101230001B181868904308431860704710B504469F -:1012400000210120FFF7DCFF00211820FFF7D8FF65 -:1012500000210B20FFF7D4FF02211920FFF7D0FF58 -:1012600002210D20FFF7CCFF02210E20FFF7C8FF5F -:1012700002210F20FFF7C4FF0221C81FFFF7C0FFA4 -:1012800003211620FFF7BCFF03211520FFF7B8FF4D -:10129000204600F019F8002010BD4F210180704752 -:1012A00010B500F03AF810BD0648704710B500F0D0 -:1012B00035F810BD704770477047000000ED00E042 -:1012C00000E400E003F900C330B50446374D95B0A3 -:1012D00007202870A81CFFF7E0FF5920A880344899 -:1012E00001F020FC0546072000F0DCF929462F48D4 -:1012F00000F08CFA641E072C0AD830216846017071 -:10130000847001F0DDFA002802D009A800F0DDFCAD -:10131000284601F083FE15B030BD7047F8B5234E66 -:101320000446B61E307801270D46002807D0204617 -:1013300060380B2808D8204601F096FB2BE0602C83 -:10134000F9D01C480860F8BD20466C38032803D843 -:10135000204601F0CBFB1EE0204670381F2803D842 -:10136000204600F037F816E0204690380F2803D8C2 -:10137000204600F0BBF80EE02046A0380F2803D826 -:10138000204600F023F906E02046B0380F2804D8A4 -:10139000204600F000F9286000E02F60602CD2D1D8 -:1013A00028680028CFD13770F8BD00001A0000204F -:1013B000C33300000130000070477047704770472A -:1013C000704770477047704710B5012801D100F091 -:1013D00042FA10BD10B57038030013F0EBFE150C87 -:1013E00012161E22252C33383D41454950555C6468 -:1013F0006C747B8085004A680878114603F081FF91 -:1014000010BD086803F0F9FF10BD0C790B7B8A68EA -:101410000868214604F005F810BD086804F07EF85D -:1014200010BD03F05BFC10BD08884A6880B211460D -:1014300004F043FA10BD0A790888114680B204F01E -:1014400091FA10BD087840B204F09CFA10BD0888EB -:1014500080B204F0B8FA10BD086804F0C7FA10BDF5 -:10146000086804F0DFFA10BD086804F00AFB10BD3C -:10147000088982B209C9194604F034FB10BD05C9B8 -:10148000114604F082FB10BD08884A6880B21146FC -:1014900004F0A0FB10BD0B7908888A6880B2194659 -:1014A00004F0FDFB10BD0B7908888A6880B21946EC -:1014B00004F0B3FC10BD08884B688A6880B21946F6 -:1014C00004F0F3FC10BD08884A6880B2114604F0AD -:1014D0003EFD10BD088880B204F056FD10BD08889E -:1014E00080B204F076FD10BD012010BD10B590381B -:1014F000030013F05FFE09060F161D242C363F462D -:101500004E0088888A6883B20888194680B205F040 -:1015100093F910BD08884A6880B2114605F0E9F9D0 -:1015200010BD08884A6880B2114605F02DFA10BD3A -:1015300008884A6880B2114605F063FA10BD088831 -:101540004B688A6880B2194605F094FA10BD088984 -:1015500082B2888883B20888194680B205F0C9FA39 -:1015600010BD08894B6882B20888194680B205F020 -:10157000FEFA10BD08884A6880B2114605F02EFBBD -:1015800010BD888882B20888114680B205F0C2FB7F -:1015900010BD012010BD10B5B02805D0B12808D06D -:1015A000B2280BD0012010BD088880B205F0A6FE3D -:1015B00010BD088880B205F0D1FE10BD08884B68C8 -:1015C0008A6880B2194605F0DAFE10BD10B5A03861 -:1015D000030013F0EFFD0B070E172028323C434D9C -:1015E000545D65004B6808788A68194607F017FA59 -:1015F00010BD88888A6883B20888194680B207F0CF -:1016000023FA10BD08884C68CB688A6880B22146EE -:1016100007F02AFA10BD08884B688A6880B219461C -:1016200007F044FA10BD8888CB6884B208888A68BD -:1016300080B2214607F064FA10BD8888CB6884B276 -:1016400008888A6880B2214607F089FA10BD0888A8 -:101650004A6880B2114607F0BDFA10BD088982B20F -:10166000888883B20888194680B207F0BDFA10BD99 -:1016700008884A6880B2114607F0DAFA10BD088976 -:101680004B6882B20888194680B207F057FB10BD3C -:1016900008884B688A6880B2194607F014FC10BDB0 -:1016A000012010BD10B507F0FAFC0FF0A7FF00F005 -:1016B00007F810F0F5F808F0F5F908F081F910BD19 -:1016C00001202B49C00308602A490020087003202C -:1016D0002949800288607047F8B5264D044628786D -:1016E000A04207D0002C05D0002803D023A14D2014 -:1016F00013F06FFC2878A04213D02C700325002330 -:101700002349AD021C48002C27D01B4A214E4032F1 -:10171000214F012C06D0022C13D018A16E2013F0FB -:1017200058FCF8BD0B6002230B604E6185601B49BD -:1017300011625762091D91621749091DD162456006 -:10174000F8BD0B6003230B604E610121C90281606B -:10175000134B9362D7624160F8BD0B600B608560EC -:10176000F8BD10B505A1772013F033FC10BD0000C3 -:1017700080E100E02000002000F501407372635C0E -:1017800068616C5F63636D5F6161722E630000006E -:1017900000F500407C01002000F0004000110040F6 -:1017A000488100401CB50446002069460870204668 -:1017B00009F0F6F86946204608F0B4FF002803D186 -:1017C000FBA1B62013F005FC01A9204608F009FF93 -:1017D000002803D1F6A1BB2013F0FBFB684600787C -:1017E0001CBD70B5F74D002428462C76203084713E -:1017F000C47113F0EDFC2846403804702030847327 -:10180000847484762C74AC7070BDEAE710B50C4615 -:10181000ED4982888A8042884A80007808700846AC -:101820000A38847008F0B3FEFFF7DBFF20460AF0A9 -:101830002FFAE44AE0321146383908461446813816 -:1018400009F020F92146E0480BF0C2FC09F09FF8AE -:1018500013F0BEFC10BD10B50120FFF7ADFD10BDAB -:10186000F8B509F083FDD84DD64C0A3D022802D0C8 -:10187000207C00287CD0207E0026102819D1A0785A -:10188000002803D0CAA1D14813F0A3FBCD48E83803 -:10189000817A89070DD50146267160398989E180F1 -:1018A000C17A217281896181C089A0810120A070E3 -:1018B0002676C44F203FB87C002859D1C4486946D9 -:1018C000808908F02FFF002805D0694668780978DC -:1018D0004018687004E0BD48B5A11D3013F079FBD5 -:1018E000207C002838D0BA488189FF300930406D0B -:1018F0008089814204D0B548ADA1223013F069FB44 -:10190000B348808908F0B4FF002804D1AF48A8A1EB -:10191000283013F05EFB09F022F800281CD0AC48F8 -:101920008089FFF73FFF697840186870A548403804 -:10193000416D20318A7C012A0DD1A54A3E779289DA -:10194000C287C87C20700120B876207E102801D084 -:10195000282800D1267626746978002908D09C486A -:101960008289FF300930C28601870120B8746E7009 -:1019700009F0CCFC002805D1207C002802D0A878F2 -:1019800001F0F4F8F8BDF8B50F460446FFF768FF1C -:101990008C4D403D28788B4E002813D0002F10D15D -:1019A000307E002804D0FF2081A1C63013F011FB47 -:1019B0002C22A91C204613F06FF90E202070002065 -:1019C00028708FE07F4D203DA87B002818D0002F85 -:1019D000F7D1307E102808D0282806D0002804D05F -:1019E000FF2073A1D23013F0F4FA0120E070E87BFD -:1019F000A070287C60700F2020700020A87371E018 -:101A00000121204608F0E4FF002807D0307C0028A0 -:101A100051D13946204608F0DBFFF8BDA97C694862 -:101A20000C38009068480A38002913D0017805293D -:101A300010D2002F56D1491C0170002666700D206F -:101A40002070012028750622A01C009913F024F9AB -:101A5000AE7447E05C4800210A380170B078002875 -:101A600014D0002F3ED1307E002803D050A1594819 -:101A700013F0AFFA002565700120524920700A2248 -:101A8000091DA01C13F008F9B5702BE0394620465B -:101A90000BF008FB002825D1A87C002805D0002FDA -:101AA00020D149480A380178C5E7A87E002802D02D -:101AB000307C002801D00020F8BD002F12D1307EEC -:101AC000002804D08F203AA1800013F082FA00266B -:101AD00066700A203B4920700622091FA01C13F0E3 -:101AE000DBF8AE760120F8BD10B53648017E00293E -:101AF00008D1007C012805D001210020FFF743FF19 -:101B0000002801D0072010BD012010BD10B5012410 -:101B10000AF006F90443FFF7E7FF044308F038FF33 -:101B200001462143084610BDF8B51D4614460E4631 -:101B300008F077FD002807D0684608F07DFD0028F2 -:101B400003D0002C07D101E00120F8BD9B2018A193 -:101B5000800013F03EFA08F01BFDA04204D21D489D -:101B600013A1583013F035FA009808F089F931467E -:101B7000009808F097F9E2B22946009808F04EFB69 -:101B800008F06CFD002804D19F2009A1800013F00B -:101B900020FA08F0FFFE0E4800244030417C002966 -:101BA00002D044740AF0A7F90948C480CCE70000C9 -:101BB0007372635C6C6C5F6374726C2E73302E6333 -:101BC00000000000200300202C00002082060000FE -:101BD000D80100201502000010B50179002908D0B5 -:101BE00001290BD0FF20FE49043013F0F2F9002048 -:101BF00010BD831D42880488022103E042880488C6 -:101C0000831D01212046FFF78FFF10BDF8B51F4649 -:101C100015460E46044609F0A9FB022803D0F148F8 -:101C2000007C00281FD0F0488089208008F020FE2A -:101C3000002803D1EA49ED4813F0CBF905246846A2 -:101C400008F021FE00280ED0009808F063F93070EB -:101C5000022809D0012807D008F055FE641E24068A -:101C6000240EECD10020F8BD3946009808F0EEFAB9 -:101C70002880002804D1AF20D949800013F0A9F9A9 -:101C800008F041FE002804D1D848D549193013F096 -:101C9000A0F90120F8BD38B50446831D821C6946B1 -:101CA000FFF7B4FF00280DD000206071684600786F -:101CB000012808D0022806D0FF20C949253013F09A -:101CC00088F9012038BD2071FBE700215BE670B583 -:101CD000C44C0546403C2078002803D1C148007E12 -:101CE000002804D0C120BE49C00013F072F9287842 -:101CF00008F085FF28780BF0C1FB0020207101203F -:101D000060713921E170207070BD70B5B54D044629 -:101D1000403D2878002803D1B248007E002804D036 -:101D20005F20AF49000113F054F9AF4E2188B0890C -:101D3000884203D109F01AFB022807D0022028713B -:101D4000012068713821E970287070BD7F2070769D -:101D5000A548E17820304174A17801740020EEE7B5 -:101D600010B5A04C403C207800280BD19D48007E47 -:101D7000002807D109F0FAFA032803D009F0FAFA8B -:101D8000032804D199489649653013F022F9954902 -:101D900000202031C8712071012060713A21E1706A -:101DA000207010BD70B58F4C0646403C207800284E -:101DB0000BD18C48007E002807D109F0D7FA032800 -:101DC00003D009F0D7FA032804D1884884497B302E -:101DD00013F0FFF8834D2035E87908280CD2E87914 -:101DE0001022000100196830314600F025FEE87924 -:101DF000401CE871002000E0072020710120607184 -:101E00003B21E170207070BDF8B5764D0446403D31 -:101E10002878002803D17348007E002803D0704939 -:101E2000734813F0D6F8704F2188B889884203D1DF -:101E300009F09CFA022801D0022022E03E8C64883E -:101E40007200788CF98B521C944217D3694A514323 -:101E50009200504312F09AFF401EFF2180B2F531EC -:101E6000884200D90846844200D22046711C401C9A -:101E700012F08CFF761C7043401E86B2FE85EE8009 -:101E800000202871012068713C21E9702870F8BD9C -:101E9000F8B5544C0546403C2078002803D1514801 -:101EA000007E002804D052484D492C3813F091F898 -:101EB000A878002801D0012804D1A888FF21F53195 -:101EC000884204D959204649000113F082F8464E51 -:101ED0002988B089884203D109F048FA022807D03E -:101EE00002202071012060713621E1702070F8BD60 -:101EF0003D48002720308772A988B18501213176BD -:101F0000A978012900D00021817237484030407CF7 -:101F1000002801D009F0EFFF2771E3E770B5314CDD -:101F20000546403C2078002807D12E48007E002836 -:101F300003D109F01BFA002804D02D482849533852 -:101F400013F047F8287809F0EEFE002020710120F8 -:101F500060713021E170207070BD70B5214C054674 -:101F6000403C2078002803D11E48007E002804D081 -:101F70001F481B495F3013F02CF8287800280BD03D -:101F8000012809D0022807D06878402804D31848CF -:101F90001349663013F01DF8284609F0DEF90028D1 -:101FA00001D0002000E00C2020710120607134215C -:101FB000E170207070BD70B50A4C0546403C207839 -:101FC000002807D10748007E002803D109F0CEF988 -:101FD000002804D057200249000112F0FAFF0BE05C -:101FE000B01B000020030020D8010020AA0200003E -:101FF000B6050000C40900002978002913D00A2979 -:1020000011D014290FD01E290DD028290BD0322928 -:1020100009D04B2907D0642905D0FF2903D0FE49F8 -:10202000FE4812F0D6FF284609F0FCFE0020207181 -:10203000012060713321E170207070BD70B5F84CE3 -:1020400006462078251D002804D120464030007E19 -:10205000002804D05520F049000112F0BAFF3146A3 -:10206000002008F0A1FD2870002804D10622314686 -:10207000EC4812F011FE012060713221E1702070F5 -:1020800070BD70B5E64C05462078002804D1204686 -:102090004030007E002804D0A720DF49C00012F0A5 -:1020A00098FF00216956042914D0002912D0081D78 -:1020B00010D0001D0ED0001D0CD0001D0AD0001D38 -:1020C00008D00A3006D0283104D0D448D249443848 -:1020D00012F07FFFD448297801700120607131210E -:1020E000E170207070BD10B5CD4C2078002804D16F -:1020F00020464030007E002803D0C749CB4812F06C -:1021000068FF08F045FAE08008F00AFB2072002022 -:102110002071012060710521E170207010BDF8B5BB -:10212000BF4C07462034A07B25462035002805D12A -:10213000287E002802D1A878002804D0B748B649E4 -:10214000703812F046FF09F011F91026022822D14A -:10215000B7483988808988421DD1B1494839084635 -:102160000A7F6038807A002A03D080070CD40C20C4 -:102170000CE0800708D406200877AD484030407C4A -:10218000002801D009F0B7FE2E760020E0732674F7 -:102190000120A073F8BD0220F8E710B5A04C20780C -:1021A000002804D120464030007E002804D09B48FF -:1021B0009949823812F00DFF002020710E20A07086 -:1021C0000F20E070FF20A0710020C04320819548BF -:1021D000C01D0178A1728188A1814088E081012021 -:1021E0006071207010BD10B58D4C2078002804D18E -:1021F00020464030007E002803D087498D4812F0E9 -:10220000E8FE0821A01D0FF095FA002020710120A2 -:1022100060712B21E170207010BD70B5804D0446B7 -:102220002878002804D128464030007E002804D0B9 -:102230007A487949B13012F0CCFE7D48102221460F -:10224000303800F0F9FB7A481022A118203800F04D -:10225000F3FB774830380FF074FB754910221039C2 -:102260002C46A81D00F0E8FB002020710E20A07075 -:102270002A20E07001206071207070BDF8B5684CB4 -:1022800005462034A07B26462036002802D1307E29 -:10229000002804D067486049E53012F09AFEA9781A -:1022A000052912D0132910D014290ED015290CD0CD -:1022B0001A290AD0292908D03D2906D03B2904D063 -:1022C0005C485549ED3012F084FE28885A4988420E -:1022D00004D958485049F63012F07BFE09F046F810 -:1022E0000C212827022809D151482A888089904248 -:1022F00015D14B484838027E002A01D0E17310E026 -:10230000A97841760121017637760020E0734848AC -:102310004030407C002804D009F0EDFD01E00220AF -:10232000E07327740120A073F8BDF8B53C4F064652 -:1023300038783D1D002804D138464030007E002802 -:1023400004D089203449C00012F043FE31460120F8 -:1023500008F02AFC01242870002807D13048062202 -:1023600060303146054612F097FCAC717C71172045 -:10237000F8703C70F8BDF0B52B4F85B0403F3D7A0A -:10238000064627480078002804D13846A038007E49 -:10239000002804D0D3202049800012F01AFE3078A3 -:1023A000002806D0012804D022481B492C3812F0FE -:1023B00010FE082D4CD21C4820380190C46930789A -:1023C00000283FD0012804D01A4813491E3812F0C3 -:1023D00000FE294608310120884004430120A8401E -:1023E00020430090B1790E4C0802727969000919F6 -:1023F0001043FF3101318881B01C12F0AEFC7178BE -:1024000000020843A9000919C031C862387A401C8B -:1024100038720199009811E0B01B00007E050000A1 -:10242000E00200202500002000040020E706000054 -:10243000D801002079030000FF0E0000C8610020D1 -:10244000207108E029460831012088408443C5E70F -:10245000FE48072101710121FC480B224171C27025 -:10246000017005B0F0BD10B5F84C2078002804D1FB -:1024700020464030007E002803D0F549F54812F090 -:10248000A8FD12F0A5FE00202071012060710A2134 -:10249000E170207010BD10B509F0DDFB002804D0FC -:1024A000EC48EB49583812F094FD08F06FFA08F048 -:1024B00052F80AF07EFE002804D0BD20E4498000D6 -:1024C00012F087FD08F0B3FA002804D05F20E0493D -:1024D000C00012F07EFD12F07BFEDF480024047085 -:1024E000FFF77FF9D9480121047141710222C270BE -:1024F000017010BD70B5D54D04462878002804D170 -:1025000028464030007E002804D0F320D0498000C7 -:1025100012F05FFD20781F2801D8601C04D1CD483F -:10252000CB498F3012F055FD002028712078611CB6 -:1025300008F054FB012068712021E970287070BDFB -:10254000F8B5C24C0646207825464035002802D111 -:10255000287E002804D0BF48BD499C3012F039FDC8 -:102560003078012806D0002804D0BA48B8499D30F8 -:1025700012F02FFD012060710C20207130780027AF -:10258000B64E012808D008F0F1FE032867D008F005 -:10259000F1FE032871D076E008F0E8FE002803D1B0 -:1025A00008F0E8FE002804D008F0E0FE02283DD044 -:1025B00069E008F07EFA002865D0287C002862D106 -:1025C000A64802210C300FF03EF8002806D00F215B -:1025D000B089090212F0DAFBB18100E0B781012273 -:1025E00003219E4807F05AFE9C4808F006FCB0897B -:1025F00007F0D0FF002804D196489549B83012F072 -:10260000E8FCB089002108F0C9F9002804D09148FD -:102610008F49BC3012F0DDFC297F688B09F087FB05 -:1026200000282FD08B488A49C03015E008F0A2FE60 -:10263000002828D1287F002825D0012823D008F0A1 -:1026400038FA00281FD0297F688B09F070FB00281A -:1026500018D080487E49D33012F0BBFC12E0002035 -:1026600009F098FA00280ED12771287C00280AD199 -:10267000B089FFF797F806E0FFE7002009F08AFA33 -:10268000002800D127711B20E07001202070F8BDC8 -:1026900070B56E4D04462878002804D12846403095 -:1026A000007E002804D06B486949803012F091FC0C -:1026B00020781F2801D8601C04D166486449813005 -:1026C00012F087FC002028712078611C08F09AFA2B -:1026D000012068711A21E970287070BDF8B55B4D52 -:1026E000044628780C272E46403600280AD1307E32 -:1026F000002807D108F03AFE032803D008F03AFE7C -:10270000032804D153485249473012F062FC6079E3 -:10271000002801D001282FD1A079002801D001285C -:102720002AD1A07B002805D0012803D0022801D09F -:10273000032821D1607B40071ED0618801208003DF -:10274000814202D82288824201D920790CE0207986 -:10275000002804D0022805D0032803D004E0202953 -:1027600004D209E0A02A01D2012805D1208888429C -:1027700007D92079012804D0364835495C3012F059 -:1027800028FC20887083207930776079002802D077 -:10279000012803D00CE0324A002105E02B4A6032C8 -:1027A0009079002804D00121204608F086F90746D8 -:1027B00001202F7168711821E9702870F8BD70B57B -:1027C000224C05462078002804D120464030007E67 -:1027D000002803D01E49234812F0FBFB08F0C6FD79 -:1027E0000C2102280ED11D482A8883899A4219D1CA -:1027F0000246C032137F002B04D1807E0E2803D006 -:102800000F2801D0217103E00520107700202071EE -:102810000E20A0702E20E0702888E08001206071DA -:10282000207070BD0220F2E770B5084C0546207894 -:10283000002804D120464030007E002804D00948FA -:1028400003492C3812F0C5FB0EE00000E002002026 -:10285000B01B00003E03000000040020D80100204F -:1028600025000020D104000008F080FD0C21022882 -:102870000ED178482A8883899A421FD10646C036ED -:10288000327F002A04D1807E0E2803D00F2801D089 -:10289000217109E06F481022A91CEA3012F0FCF9FE -:1028A00004203077002020710E20A0702D20E070D1 -:1028B0002888E08001206071207070BD0220F2E75E -:1028C00010B501780B0012F075FC3D8787388787BB -:1028D00058878787873B3E878787515487878787B5 -:1028E00087874228872C3087878787348787878721 -:1028F00087878746874A4E872024876B5B5F63679D -:10290000876F877E827B77738700801CFFF78CFF41 -:1029100060E0801CFFF753FF5CE0801CFFF7DEFEE9 -:1029200058E0801CFFF7B4FE54E0801CFFF708FE5F -:1029300050E0801CFFF7DEFD4CE0FFF7ACFD49E006 -:10294000FFF791FD46E0801CFFF715FD42E0801C7B -:10295000FFF7EBFC3EE0801CFFF790FC3AE0801CA8 -:10296000FFF75BFC36E0FFF73EFC33E0FFF715FCBA -:1029700030E0801CFFF7D3FB2CE0FFF7B4FB29E02D -:10298000801CFFF77EFB25E0801CFFF757FB21E052 -:10299000801CFFF710FB1DE0801CFFF7DEFA19E03A -:1029A000801CFFF7BBFA15E0801CFFF771FA11E0FD -:1029B000801CFFF729FA0DE0801CFFF7F3F909E00E -:1029C000FFF7CEF906E0801CFFF79FF902E0801CBC -:1029D000FFF77DF9012010BD002010BD10B51E4984 -:1029E0001E4812F0F6FA10BD70B51D4A01241146BA -:1029F000184D4031030012F0DDFB05191C1C0419B1 -:102A00001C0001220021134807F048FC1448002153 -:102A1000483801774177C03809F005FA002804D01A -:102A20000E480D49D33012F0D4FA70BD0C745565C0 -:102A300070BD09490B48F6E730B5134606E0CC18DF -:102A4000203CE47FD51A44555B1EDBB2002BF6D147 -:102A500030BD0000D8010020B01B0000410600007E -:102A6000E00200204707000010B56038030012F0B4 -:102A7000A1FB0A060A0F13181F262A31363B0868E5 -:102A800000F093FD10BD05C9114600F0ADFD10BD6D -:102A9000086800F04CFE10BD05C9114600F054FE58 -:102AA00010BD4B6808788A68194600F065FE10BDB5 -:102AB0004B688A680868194600F07FFE10BD0868F8 -:102AC00000F09AFE10BD08884A6880B2114600F0F6 -:102AD000EAFE10BD05C9114600F00AFF10BD05C988 -:102AE000114600F01DFF10BD012010BD10B56C286F -:102AF00001D0012010BD087800F0B8FE10BD000024 -:102B000001203F49400608603E4908603E490A6886 -:102B1000FF231B029A4383121A430A603849803903 -:102B20000860704710B502460420384904E0C3002D -:102B30005B181B79002B0AD00346401EC0B2002B45 -:102B4000F5D133A1432012F044FAFF2010BDC30099 -:102B5000CA50002259184A718A7101220A7110BDA7 -:102B60002A4A0021C00080180171704710B5044640 -:102B7000042803D326A1522012F02BFA2348E100A7 -:102B80000C182079012803D021A1532012F021FA3A -:102B90006079A179401CC0B2814200D060710120EF -:102BA000174940068031086010BD70B516480068AE -:102BB0000004800F022803D015A1692012F009FA41 -:102BC000124E194C03252078C10088190279012A78 -:102BD00007D1427983799A4203D042798271705841 -:102BE00080472078401CC0B22070042801D3002008 -:102BF000207028466D1EEDB20028E4D170BD0000A3 -:102C000080E100E080E200E018E400E02C12002007 -:102C10007372635C736F635F7369676E616C6C6919 -:102C20006E672E63000000003C00002010B5EFF33B -:102C30001080C407E40F72B6D6484178491C417031 -:102C40004078012801D10FF065F9002C00D162B65F -:102C500010BD70B5CF4CE07800280AD10125E57091 -:102C6000FFF7E4FF0FF05EF9002804D000200FF01A -:102C700031F9002070BDC84865714560F9E770B54D -:102C8000EFF31080C507ED0F72B6C24C60780028D4 -:102C900003D1C2A18F2012F09CF96078401E6070B1 -:102CA0006078002801D10FF039F9002D00D162B60B -:102CB00070BD10B5B748C178002904D0002141711A -:102CC000C170FFF7DCFF002010BD10B504460FF007 -:102CD00029F9B049C978084000D0012020600020BF -:102CE00010BDF8B50246AB4C0026A67108200421A1 -:102CF00001251027130012F05DFA0D080A0C0E10C2 -:102D00001214161E262123252800257122E00220F8 -:102D100001E021711EE020711CE027711AE02020E3 -:102D2000F9E7012616E0FFF781FF0FF0FBF8002816 -:102D3000FBD002260EE02171A5710BE02771FBE7A5 -:102D4000202000E040202071F6E7FF2093A17E3094 -:102D500012F03FF90FF0F2F8002809D00FF0F4F864 -:102D6000B04205D130460FF0F2F80028FAD024E046 -:102D700001208007C5608D4A002151608C4A966110 -:102D8000854B02225A6085608A4803690569DB43E6 -:102D9000DB06DB175B1C10273D430561834D00E01C -:102DA00020BF6F68002FFBD0002B03D107691023D1 -:102DB0009F430761784882606960A07900280CD041 -:102DC0000FF0B0F805460FF00DF87B4A002D02D049 -:102DD000A260E06001E0E260A060002E01D100F09E -:102DE000B1F8F8BD10B504460FF0A2F8002805D0E0 -:102DF00068490120C8704A78521C4A702046FFF783 -:102E000070FF10BDF8B5694FB8680025012802D1E0 -:102E1000BD600FF05FF87868012800D17D603868E8 -:102E200001265C4C012814D13D606079002803D054 -:102E300000200FF04FF865712078002809D00FF0BE -:102E400071F8002805D05948C0388663000606612D -:102E5000A670386901282CD13D6100F068F8012086 -:102E600080074661A079002815D00FF05BF800902C -:102E70000EF0B8FF0099002901D0E16800E0A168D8 -:102E8000411A022901DA8A1C13DC0099002901D0B9 -:102E9000E06000E0A060FFF7C9FE0FF043F80028F3 -:102EA00006D04248C038866300060661A67000E07E -:102EB0002670F868012819D100F039F800F037F8C9 -:102EC00000F035F8A078002804D1FF2033A10530A8 -:102ED00012F07FF8FD60A5702570FFF7D0FE0EF0B0 -:102EE000F8FA002802D03148C038C663F8BD10B5E2 -:102EF000284CE078002801D10FF010F8012081075C -:102F0000886100F014F8A07800280BD0274CE06806 -:102F1000002803D10FF01BF80028F8D10020E06052 -:102F200000F005F800201C49C043886010BD08B5BA -:102F30005020694608806A461088411E118000288A -:102F4000F9D108BDF8B51448192787601749002042 -:102F50000860C8600EF0E6FFBD0701240D4E002892 -:102F600005D01248C03884632C61B47000E034701E -:102F7000FFF75CFE084847600D4930798863FFF72A -:102F8000D6FFAC61FFF7D3FF0849002008616C61F0 -:102F9000F8BD000040000020000300407372635C35 -:102FA000736F635F636C6F636B2E6300000100409F -:102FB0000005004000ED00E0FFFFFF7F10B510F0BE -:102FC00064F810BD00200449C8630120012181403C -:102FD000024A116000BF7047C01F004080E200E05D -:102FE00010B504460BF095F820460CF0AAF810BD79 -:102FF0007047704770477047704770477047704719 -:1030000010FFFFFFDBE5B151006001004F00FFFF43 -:1030100003B40148019001BD09000020FE49487039 -:10302000704710B5030012F0C5F8080E050E080829 -:103030000B0B0E1104F07DF810BDFFF7D1FF10BD92 -:103040000DF0E8FF10BD01F095FE10BDFF20F3A1CB -:10305000713011F0BEFF10BD7FB5F44905464868D8 -:103060008968082301910090F14A1946F1480EF051 -:103070008BFD0024F0480EF0A5FD641CE4B2082C82 -:10308000F8D3EB490320803140020CF02FF90028DF -:1030900003D0E2A1962011F09CFF1E220221E748F6 -:1030A0000AF0E7FCE5481E22032110300BF05BFA22 -:1030B000E2480722342174300AF034FCDF484C2106 -:1030C000283011F048FEDD496A46743108464C3814 -:1030D0000164FF317B31416401211172039002F0E0 -:1030E000B4F802A80CF050FC002803D0CBA1AA2011 -:1030F00011F06FFFCF4802222421A8380AF012FCF9 -:10310000CC4802222C215C380AF00CFCCC490B2064 -:103110000EF082F8002803D0C0A1B72011F059FFAB -:1031200003F0F4FF03F0F8F904F05AFE6B460022B6 -:103130000821C4A001F070FF002803D0B7A1BE2071 -:1031400011F047FF284605F071F9002803D0B3A11C -:10315000C02011F03EFF8521C900BD4811F0FBFDE4 -:10316000BB49B24A0020135C0C18401CC0B2E3708B -:103170000428F8D3A849002048608870C8707FBD33 -:1031800070B5B44E0546706A94B00C46401C04D12C -:10319000B06AC0430004000C0BD0306AC007C00FF7 -:1031A0002870706A11F0EAFDB06A2071000A60713F -:1031B00013E02B206946087009A968460AF0F8FB5D -:1031C000002803D095A1E42011F003FF012028700E -:1031D00006220AA9204611F05FFD2878002803D0B6 -:1031E0006079C0210843607114B070BDF0B5994C8E -:1031F0000646206895B00D463746401C0837002823 -:1032000008D16068401C05D1A068401C02D1E0686C -:10321000401C11D02068314611F0B0FD6068311DAE -:1032200011F0ACFDA068394611F0A8FDE068314608 -:103230000C3111F0A3FD25E02B206946087009A987 -:1032400068460AF0B5FB002804D0FF2073A10E30B9 -:1032500011F0BFFE08220AA9304611F01DFD2B20F7 -:103260006946087009A968460AF0A2FB002804D044 -:10327000FF206AA1153011F0ACFE08220AA93846D9 -:1032800011F00AFD20692E46401C0836002808D19E -:103290006069401C05D1A069401C02D1E069401C56 -:1032A00012D02069294611F069FD6069291D11F0CD -:1032B00065FDA069314611F061FDE06929460C31D8 -:1032C00011F05CFD15B0F0BD2B246846047009A90F -:1032D0000AF06EFB002804D0FF2050A1333011F01B -:1032E00078FE082209AF0AA9284611F0D5FC6846E5 -:1032F000047009A90AF05CFB002804D0FF2047A154 -:103300003A3011F066FE0822391D304611F0C4FC37 -:10331000D8E710B5002108460EF00CFD0021012071 -:103320000EF008FD002102200EF004FD0021032014 -:103330000EF000FD002104200EF0FCFC0021052011 -:103340000EF0F8FC10BD10B5414CA0780B2804D34A -:10335000FF2032A18A3011F03CFE207860214843E2 -:1033600000190830002101704178E722C908C9001E -:10337000C91C11404170284A0121917010BD70B5DF -:10338000254CA07800280ED0314800250178491C32 -:10339000C9B201700B2900D105708178491C817078 -:1033A0000EF093FDA57070BD70B51B4C05466068AE -:1033B000002804D0FF2019A1B33011F00AFE656087 -:1033C00070BD70B5144E224DFFF7BDFF7168044605 -:1033D000002907D06022FDF7F7FEFFF7D0FF00209D -:1033E0007060F1E72879002876D012485C380AF03E -:1033F000A9FA6060002804D1FF2008A1D13011F0A3 -:10340000E8FD60680AF0FCFA002831D0204600F0A0 -:103410006FFF607801071FE0340000207372635C67 -:10342000686F73745F636F72652E6300E051010013 -:10343000040400200C12002023300000840A002025 -:10344000B41000206E524635313832320000000090 -:103450008C0C00208000001007D5C008C000401C64 -:1034600060702879401E287127E0F74861682AE0DB -:10347000F54861680AF06FFA687900282CD0F248A4 -:103480004C380AF05FFA6060002804D1FF20EF4951 -:10349000F43011F09EFD60680AF0B6FA002816D0EC -:1034A000204603F085FE6078010709D5C008C000FA -:1034B000801C60706879401E6871FFF760FF83E7C9 -:1034C000E14861684C380AF046FA7DE704E0DE48DE -:1034D00061684C380AF03FFA70BDF7B505460078D0 -:1034E000002700090C463E46062803D0D749D84895 -:1034F00011F06FFD287A00280ED0012814D0D4488E -:10350000D249213011F065FD0298002C068001D0CF -:10351000278066800020FEBD02270926002C0ED0E1 -:10352000A889A080A87B08E003271426002C06D0D9 -:103530002869E060A88A2082287B2072E4E702984C -:103540000680E7E770B50E4600211C461980154637 -:10355000030011F02FFE0723050B1711231D230075 -:1035600022462946304603F0EFFD70BD224629462B -:10357000304601F078F970BD22462946304604F005 -:103580002AFB70BD22462946304602F0F9FF70BD85 -:10359000224629463046FFF7A0FF70BD9720AB4971 -:1035A000800011F016FD032070BD10B5A94C2178E4 -:1035B000002901D0082010BDFFF74EFD012020702A -:1035C000002010BD0146A04810B54C380AF0C3F9E0 -:1035D000A1494879401CC0B24871012803D19D48D7 -:1035E0004078FFF7C3FA10BDF8B50546072040073D -:1035F0000F460A18012189038A4209D2002D02D000 -:103600002818884204D2E81C80088000A84201D013 -:103610001020F8BD90488178002911D03988009198 -:103620004178602251430C18083420783B4600074B -:10363000000F00222146FFF785FF060004D015E0A9 -:10364000002038800520F8BD002D13D0398800985F -:10365000814201D90C260DE020783B460007000F7F -:103660002A462146FFF76EFF060005D00C2E01D03A -:10367000002038803046F8BD774D6878401CC0B2D5 -:1036800068700B2801D100206870A878401EA870CF -:1036900061784807400F022810D00128EAD16A4813 -:1036A00061680AF058F92879401CC0B228710128D5 -:1036B000E0D168484078FFF759FADBE7C806D9D46B -:1036C0006068FFF77FFFD5E770B50446634816468C -:1036D0000D46814204D15E485C49C53011F079FC49 -:1036E000012E05D05A485949D53011F072FC70BDF1 -:1036F00058480121C1706620207000202072A581E9 -:10370000A17370BD70B516460D46040001D1FFF7D8 -:103710001AFE662101700121017229680161A988E0 -:1037200081820673002C01D1FFF729FE70BD0721AD -:103730004907012241189203914201D3102070479A -:103740000721017000207047454A10B590420ED302 -:1037500001239B04C21A434B9A4208D3424B98421E -:1037600005D2072252078A18DB139A4201D3102090 -:1037700010BD0DF08AFD10BD394B10B599420ED326 -:1037800001239B04374CCB1AA34208D3364B9942F2 -:1037900005D2E3020124D318A403A34201D31020CD -:1037A00010BD022803D0102801D0092010BD0DF053 -:1037B00092FD0028FAD0052010BD70B5284B984224 -:1037C00012D301239B04274CC31AA3420CD3264BCC -:1037D000984209D2E4020D19DB139D4204D2002A5B -:1037E00004D014199C4201D3102070BD0DF099FD36 -:1037F0000028FAD0072070BD10B504460720400706 -:1038000001212018890394B0884202D3102014B0FB -:1038100010BD01F06AFD002801D01120F7E70F204C -:1038200008A9087369460BA80AF0C2F80028EED16F -:103830006846007A207068464089608068468089C2 -:10384000A0800020E3E70000B01100201C3400003D -:1038500015020000340000208C0C0020FFFF000047 -:10386000006001000000FC1F0040002010B594B073 -:10387000044601F03AFD002801D01120C7E7002CD2 -:1038800001D00720C3E7392168460170002181700B -:1038900009A90AF08DF8002803D02B492B4811F014 -:1038A00098FB0020B3E770B5294C0846E178002961 -:1038B00013D000280FD007225207012385189B033D -:1038C0009D4203D20568AA189A4201D3102070BD08 -:1038D0008288002A03D0012903D0082070BD092066 -:1038E00070BD04F0E1FA0028FAD10021E17070BD4A -:1038F000184A10B5914208D301229204164B8A1A35 -:103900009A4202D3154A914201D3102010BD0246BB -:10391000203A1F2A02D801F01FFC10BD072010BD5D -:1039200007225207012310B58A189B039A4201D33C -:10393000102010BD0246203A1F2A02D801F068FC70 -:1039400010BD072010BD00001C34000079030000EA -:1039500034000020006001000000FC1F0040002037 -:103960008107C90E002808DA0007000F0838800810 -:103970002C4A80008018C06904E080082A4A800030 -:1039800080180068C8400006800F704710B50D20F1 -:10399000FFF7E6FFC4B20420C043FFF7E1FFC0B267 -:1039A000844203D021A11A2011F013FB10BD012184 -:1039B000234A48031060234B00221A60224A5160B8 -:1039C000224A1060224A11601D4980390860704700 -:1039D00001211B4A480310601D4A5160194A002109 -:1039E00011601A490860704710B516490868012827 -:1039F00004D00EA1562011F0ECFA10BD15488068D5 -:103A00000022C0B20A600DF0BBFE10BD10B50D481B -:103A100001680029FCD0FFF7E7FF01200B494003B4 -:103A2000086010BD00ED00E000E400E07372635C2C -:103A3000736F635F68616C5F726E672E6300000076 -:103A400080E100E000D1004000D3004080E200E0CF -:103A500000D0004000D5004030B40121BC48C9026C -:103A60000160CD1005604A030260BA4803681B027A -:103A70001B0A036004680023240A24020460B64879 -:103A80000468240A24020460B44801244460846069 -:103A9000B34C23606360A360B24B19601D601A6071 -:103AA000B14B19601A600121016030BC704710B43D -:103AB0000121A748CC0204600A0202600B060360E1 -:103AC000A64841608160A64900200860486088607F -:103AD000A44804600260036010BC70470121A14843 -:103AE000C9020160C91001607047002805D0012893 -:103AF00005D0022805D19D4870479D4870479D48D4 -:103B0000704710B59CA18B2011F063FA002010BD06 -:103B100070B500219F4CA04DA04A914B002808D0C1 -:103B200001281DD0022822D093A1B32011F051FA10 -:103B300070BD01200004A060A86011601960984B5E -:103B400042109A60974A9060814A0012106096482D -:103B5000016087480160954801609548017070BD1B -:103B600001204004A060A8605160596070BD012030 -:103B70008004A060A8609160996070BDF8B594461B -:103B8000844A854D00240127754E002808D001285D -:103B900036D0022844D078A1E82011F01AFAF8BDF6 -:103BA000891E0902090A01200004906034606860DF -:103BB0007A4A1160012B21D000217D4A7D4B517042 -:103BC00061463D31DC63DF637B4B5C6002249C60BB -:103BD00004241C61744B196074490F60614B891592 -:103BE0001960704B58606048016075487349C16046 -:103BF00086606B49600348601770F8BD0121DCE7FF -:103C000001205C4E40046F4F012B04D134605060A2 -:103C100068603960F8BD9060346068603960F8BDF4 -:103C20000120524E8004684F012BF4D1EEE7674823 -:103C30004068704770B54A4D28680026554C0128E9 -:103C400006D1A068C00303D501200004A0602E6047 -:103C50006868012809D1A068800306D501204004C6 -:103C6000A0606E6001200FF04CF9A868012809D10E -:103C7000A068400306D501208004A060AE60022049 -:103C80000FF03FF970BD10B549490878002818D0E9 -:103C90000120434AC0039060424A400090602C4A91 -:103CA00000121060404A00201060314A10603F4A04 -:103CB000106008704A78002A02D048700FF021F98D -:103CC00010BD0320FAE70120414900060860704753 -:103CD0000120244900060860704701203C49400546 -:103CE0000860704701201F4940050860704731494E -:103CF0000020C86388151B4908607047410A354A8F -:103D0000C005C00D5043801C5143400A081870473D -:103D100010B4314C430B63431B0C5C020C602D4C04 -:103D20006343C31A2D485C0258432A4B400D43435A -:103D3000E31A0124DB0324041B191B1613700A6801 -:103D40001018086010BC704710B50FF0B2F910BD24 -:103D500080E100E008E400E018E400E000B000408A -:103D600040B1004080E200E000E100E048B10040E6 -:103D70004081004044B100407372635C72656D5FC6 -:103D800068616C5F6576656E745F74696D65722ECF -:103D90006300000000B3004040B3004040B5004065 -:103DA00000F5014000830040408500400082004053 -:103DB00050000020C08F004000850040008000407F -:103DC00080F5014044B5004048B5004000B50040D2 -:103DD00000E200E0093D0000378600006F0C0100A2 -:103DE0000E4A12680C498A420AD118470B4A1268D7 -:103DF000094B9A4204D101B50DF0DDFD03BC8E469E -:103E0000074909680958084706480749054A064B03 -:103E10007047000000000000BEBAFECA1C0100206E -:103E200004000020901D0020901D002010B5FA4CC9 -:103E300094B02168087A002836D017206A4610709E -:103E400000A806220931023010F026FF09A96846B1 -:103E500009F0AEFD112825D02168C03189790629E5 -:103E600020D007291ED008291CD004291AD00929DE -:103E700018D00A2916D00B2914D0052912D00028F1 -:103E800003D0E6A1F32011F0A4F82168B82040582F -:103E900006221C30093110F0FFFE2068017A8030C4 -:103EA000806BC17614B010BD3220C7E770B5DA4D13 -:103EB000044629680300C03111F07CF90C077C0B23 -:103EC0001A212E3B48515C677080FF20D3A1093036 -:103ED0006EE0887901286DD009286BD0052869D05B -:103EE0000A2867D00B2865D0FF20CCA10E305FE0F8 -:103EF000887901285ED0FF20C8A1153058E0887964 -:103F0000062857D0072855D0082853D0052851D067 -:103F1000FF20C2A118304BE0887909284AD00A282E -:103F200048D00B2846D0042844D0FF20BBA11E3027 -:103F30003EE0887903283DD007283BD0082839D0B7 -:103F4000092837D0FF20B5A1243031E08879062830 -:103F500030D00A282ED0FF20B0A12A3028E088795E -:103F6000062827D0072825D00B2823D0FF20ABA177 -:103F70002E301DE0887906281CD00A281AD00B287C -:103F800018D0FF20A5A1333012E08879092811D07C -:103F90000A280FD0FF20A1A1383009E0887909282C -:103FA00008D00A2806D0082804D0FF209BA13C3066 -:103FB00011F00FF82868C030847170BDFF2097A100 -:103FC0004130F5E79449C9220968525CD206920F44 -:103FD00005D1A0318A8B824201D1887F70470020B1 -:103FE000704770B504461120207000218A4D617021 -:103FF0002968C031897A002908D003290ED0042904 -:1040000010D0FF2085A16A3010F0E3FF207800096E -:10401000012802D92868807D607070BD0007000FFC -:10402000203002E00007000F30302070EEE730B59E -:1040300003887E497E4C8B4202D09A1FA2421ED238 -:1040400042888A4202D0951FA54218D2934216D8C0 -:1040500083887D24E400A34211D8C088884205D01B -:10406000734D04460A3C2D1FAC4208D2884208D04A -:104070008A4206D05B1C5A43C000824201DD072001 -:1040800030BD002030BDFFB50022099B002802D0C2 -:10409000994205DC5CE0002902D1002004B0F0BDAB -:1040A0000920FBE7845C002C12D085186F780D2F57 -:1040B0004CD010DC3B0011F07DF80A421B2A2A305C -:1040C0003032323A3A42835C002B3FD1521CD2B29A -:1040D0008A42F8DBE1E7122F31D004DC0E2F35D015 -:1040E0000F2F2CD132E0142F11D0152F27D116E02D -:1040F000022CD5D1AB78039C072B237001D25B0730 -:1041000001D40A20CAE7029B01241B7814E0E34390 -:10411000DB0708E0012C08D011E00620BEE70F25E0 -:1041200023072D075B19002BF4D03046B6E7029B1E -:104130001B789C070AD402242343029C2370835CCF -:10414000521C9A18D2B28A4204DDA9E70B20A5E7D7 -:10415000192676028A42A5DB9FE705E00278401C1B -:10416000002A01D0002070470A46491E89B2002A61 -:10417000F4D10120704730B5274D0021286887B061 -:10418000C943A030818300248477214606200DF0A6 -:10419000D1FD002105200DF0CDFD002102200DF004 -:1041A000C9FD0120FFF782FE28686946C030C4714E -:1041B00004720120087068460BF007FC07B030BDA0 -:1041C00030B5154C95B02268C0329279042A0CD0D3 -:1041D000052A0AD028236A4613705080132906D076 -:1041E0003B2904D0072015B030BD0820FBE7117132 -:1041F000104609A909F0DCFB05000BD12068C0308E -:104200008179062916D0082914D0072912D0052053 -:10421000FFF74CFE2846E6E7540000207372635C0B -:104220006761705F636F72652E630000FFFF0000BF -:104230007B0C00000420EBE730B587B0040003D00E -:10424000002107200DF076FDFE4D012128686A4609 -:1042500001720421117003210C300DF06BFA2968F2 -:104260004022887B8006800E1043887368460BF0DE -:10427000ACFB00280DD12968098A00299ED0002CAA -:104280009CD08B000122002107200DF0AEFC0728F6 -:1042900001D0032092E7002090E770B50025064684 -:1042A000002803D0002107200DF044FDE54C01213A -:1042B00020680172062109300DF03CFA2068817BEC -:1042C0008906890E8173FFF7B1FD2068008A0028F6 -:1042D0000AD0002E08D083000122002107200DF013 -:1042E00084FC072802D00325284670BD0025FBE783 -:1042F000F0B59BB0040004D11920D349400110F05F -:1043000068FE72202070616800260A780825521F16 -:104310000127CC48130010F04DFF0F0976D9FD7628 -:1043200078FCFBB576767676FAF97600C5480068B3 -:10433000C0308079032803D0C349C44810F049FE37 -:10434000002108460DF0F6FC002107200DF0F2FCDC -:104350006078BC4A28436070106810250146C0315F -:104360004B7A2B434B7263689D783C2D48D00246B4 -:104370009D88A032977763688030DB890B80636803 -:104380001B8A4B8063685B8A8B8095836168826B34 -:10439000C97911756168806B08311530062210F0FB -:1043A0007BFC0620FFF782FDA648CA210068FB229D -:1043B0000E54017E11400176B82109588A7A92087C -:1043C00092008A724682284602F0ACFE002804D091 -:1043D0009E489D491A3010F0FCFD284602F0BCF8BA -:1043E000002804D0994898491D3010F0F2FD284665 -:1043F00003F008FD002806D069209349C0003EE183 -:104400000120FFF753FD1BB0F0BD064600688F8802 -:10441000C0308079062812D0072810D008280ED086 -:1044200004280CD009280AD00A2808D00B2806D066 -:10443000052804D0D5208449800010F0CAFD60789A -:10444000284360703068C030417A294341728079D6 -:10445000092811D00A280FD00B280DD005280BD021 -:10446000FFF789FE384602F062FE384602F07AF81D -:10447000384603F0FDFCC6E7FFF77DFE0220FFF79C -:1044800015FDEFE70068C0308079062812D00728B4 -:1044900010D008280ED004280CD009280AD00A28E9 -:1044A00008D00B2806D0052804D06F206649C0002C -:1044B00010F08FFD6068807902F0F1FE0028A2D034 -:1044C0006178294361706168C8809CE7074600688D -:1044D000C0308079062812D0072810D008280ED0C6 -:1044E00004280CD009280AD00A2808D00B2806D0A6 -:1044F000052804D055485449623010F06AFD6078B0 -:10450000284360706068C188386804E032E197E150 -:1045100084E084E00FE0C030018061680989418057 -:10452000616849898180002102200DF003FC386810 -:10453000C030C67167E706460068C030807906283B -:1045400019D0072817D0082815D0042893D0092897 -:1045500011D00A280FD00B280DD005288BD03B484E -:104560003949793010F035FD3068C0308079042841 -:10457000ABD00528A9D03068807C40063AD5606869 -:1045800002210C30FFF7E9FD002833D060680821D4 -:10459000001DFFF7E2FD00282CD03168B8204058FC -:1045A000807A800708D1CA20405C002808D1488A58 -:1045B000C20505D5C00703D14A8A402082434A82FA -:1045C0004A8A802082434A822D2268460270BC209B -:1045D000425A684642801022973101A810F05CFBD5 -:1045E00009A9684609F0E4F90028A3D0174816493C -:1045F000A03044E062683068AC2192890A52616858 -:104600000822091DAE3010F047FB10A80574306871 -:10461000AE30159014A80BF0D8F9F4E68F71064669 -:104620000068C030807906281FD007281DD00828D0 -:104630001BD00428F1D0092817D00A2815D00B2840 -:1046400013D005E0540000201C42000029030000A4 -:104650000528E2D0F949FA4810F0BBFC3068C030B8 -:1046600080790428D9D00528D7D0606881790029BD -:1046700002D08078002805D0F148F0496C3010F065 -:10468000A8FCC0E66078B8212843607030680958FB -:10469000897A8907890F012952D1817C09064FD473 -:1046A000017E490701D5042100E00321C030817259 -:1046B0002B206946087009A9684609F079F9002895 -:1046C00004D0DF48DD49213010F083FC69463068B2 -:1046D000098D81820E2210A90A74DA49B822159137 -:1046E000125808324A61024660324A6092790A7072 -:1046F000024614320A61521D8A601032CA60133AAF -:104700008A619632CA61921C0A62473A4A62103242 -:104710008A621032CA62473ACA63521E0A64921F02 -:1047200050304A64886414A80CF038FB022815D075 -:10473000002813D0C248C1494A3010F04AFC0DE0AD -:10474000817C4906017E490701D5042100E003214F -:10475000C0308172002106200DF0ECFA3068418AE9 -:104760000A0602D440229143418289B280229143B9 -:10477000418248E6B4480068C0308079032804D0FC -:10478000AF48AE49783010F024FC002108460DF007 -:10479000D1FA002107200DF0CDFA6078AA4A28430B -:1047A0006070106810250146C0314B7A2B434B7264 -:1047B00063689D783C2D00D122E602469D88A03298 -:1047C000977763688030DB890B8063681B8A4B8036 -:1047D00063685B8A8B8095836168826BC979117588 -:1047E0006168806B08311530062210F055FA0620FA -:1047F000FFF75CFB9448CA210068FB220E54017E3F -:10480000114001764682284602F08CFC002804D034 -:104810008B488A49923010F0DCFB284601F09CFE60 -:10482000002804D086488549953010F0D2FB2846F0 -:1048300003F0E8FA00289CD08148804997301EE7B1 -:10484000607828436070DEE500290BD088807E48C0 -:104850000068C0300288CA8002880A8142884A8182 -:10486000808888817047F7B5064600780C46002797 -:10487000010982B03D46012974D073480068009058 -:10488000C03002296FD0072904D00A296CD06B49A7 -:104890006E48E3E171680A78521F130010F08AFC39 -:1048A0000F09A551A5A52F585847A5A5A5A5656F22 -:1048B000A5008A783C2A1BD010271625002C7DD015 -:1048C0008888A0807068A21DC08920827068C08915 -:1048D000E0817068008A60827068408AA082716896 -:1048E00008460831C07901F09FFB0020607375E035 -:1048F00019270725002CE2D00021A17171E01127B2 -:104900000725002CDBD089880091A1807168F722EF -:104910008979A171417A11404172009802F008FC36 -:10492000009801F023FE009803F0B0FAC1E10127DE -:104930000925002CC3D08888A080706880792072F7 -:10494000B7E1888812270E252146FFF77DFFB0E1E9 -:1049500018270825002CB2D08888A080A01DFFF75A -:1049600040FBA6E145E0A1E15DE01A270725002C08 -:10497000A5D04888A08070680079A07199E18A78F4 -:104980003C2AB5D010271625002C98D08888A08006 -:104990007068C08920827068C089E0817068008A70 -:1049A00060827068408AA0827168607B497D40089F -:1049B0004000C907C90F0843607300E036E1716821 -:1049C000C007497DC00F49084900084360737168FA -:1049D000A21D08460831C07901F026FB1A4800687C -:1049E000C030417AEF22114046E1532013490001C3 -:1049F00034E1307A012803D014481049C5382DE13C -:104A000012270E2570892146FFF71EFF002C91D03A -:104A100070784007400F032888D10B480068C030E9 -:104A2000417AFB22DFE708490968A031002C01D058 -:104A30008A8BA280327A921E0AE000001C4200009B -:104A4000ED030000AC120020540000200C06000012 -:104A5000130010F0AFFB073D4853EDEE6F05ED007E -:104A600013270C25002C90D0009900224A82F1686F -:104A700089788907890F0129217A26D049084900B8 -:104A80002172FD231940F3689B785B07DB0F5B0005 -:104A900019432172E323E2801940F3681B785B0716 -:104AA000DB0E19432172DF231940F3685B78DB07C3 -:104AB0009B0E194321726272F1680122C978A172BA -:104AC000017A1143F7221140ADE001231943D7E7E2 -:104AD00015270C25002C9AD0F06806220068A11D2D -:104AE0000EF07CFFE5E016270725002C8FD0317BE8 -:104AF000A171017A08221BE00172DAE01427122565 -:104B0000002C84D00098A21D8030806B01461531A6 -:104B1000007D01F089FAB089E081207C0121084301 -:104B2000F92108402074FE480068C030017A022252 -:104B30001143E1E717273825002C77D03221A01D3B -:104B400010F007F90020A071207A03210843207299 -:104B5000FB210840F24909680A7E5207D20F9200F1 -:104B600010432072B8204058807A800757D0A07A2E -:104B70008A7C4008D2074000D20F1043FD2210402B -:104B8000A0728B7CFB229B07DB0F10409B0018431D -:104B9000A0728B7CF7269B07DB0F3040DB001843AD -:104BA000EF231840A072E07A10408A7CD206D20F20 -:104BB00092001043E0728A7C3040D206D20FD200BD -:104BC0001043E072888AA0812046102267310E309F -:104BD00010F062F8D249A07F0968C0078A7DC00F33 -:104BE00052001043A0770A7E400852074000D20FBF -:104BF0001043A077084640304DC820344DC4303CA7 -:104C00003F20405C22463032393101F00DFAC44871 -:104C100000688030806B817A890889008172C04881 -:104C20000068C030017AFB22114065E737E000E000 -:104C300038E0327B022A14D017273825002C2ED0DA -:104C4000017AFB2319400172012A17D0032A17D0D9 -:104C5000042A18D0052A16D0B249B34810F0B9F981 -:104C600027E019270725002C19D0898BA180012165 -:104C7000A171417A4908490041721AE0012000E01F -:104C80000220A07106E0707B0007000F8030A07149 -:104C9000052A02D00020E0710BE00120FBE7049818 -:104CA00005800CE0A0489F490A30D7E7317A0029F7 -:104CB00008D00498002C058001D027806580002052 -:104CC00005B0F0BD19270725002CE8D00021C94305 -:104CD000A1800021A171417AFD2284E610B5904C9B -:104CE00094B02068C0308079022809D0032807D00A -:104CF000052805D0092803D00A2801D00B2837D170 -:104D00001B2108A801730021817369460BA808F0D4 -:104D10004FFE002804D1684640781B2802D00320AB -:104D200014B010BD002108460DF004F80021072042 -:104D30000DF000F868468078002819D12068C0304E -:104D40008079801E030010F035FA0A060613081356 -:104D500013130D0F1113012000E00420FFF7A6F834 -:104D60000020DDE70620F9E70720F7E70820F5E750 -:104D70000820D5E770B50025694C002807D0022827 -:104D800017D0072828D033206649400146E0FFF7B6 -:104D9000A5FF00280CD1FEF7D6FA2221017005727A -:104DA000FEF7EDFA2068C030417A022211434172C9 -:104DB00070BDFEF7C8FA122101700121017221684D -:104DC000BC22525A4281C031CD71FEF7D8FA206818 -:104DD000C030417A0422E9E72168C620405C0228FD -:104DE00009D0032807D0092805D00A2803D00B28AA -:104DF00001D00528DCD1887B8109012911D08009E7 -:104E000004D0494847496E3010F0E3F80020FFF71E -:104E100044FA0028CCD044484249723010F0D9F806 -:104E200070BD0020FFF708FAF3E770B50D460400E7 -:104E300004D1CD203B49C00010F0CBF820780128E8 -:104E400005D0394837499D3010F0C3F870BDA188AE -:104E50003648334E814209D1E288824206D1306819 -:104E60001321A030808BFFF7ABF970BD814202D1D6 -:104E7000E08800280AD012202870687808210843AA -:104E8000687007CC083507C5002106E000227823AA -:104E9000114602200CF0A9FE02213068C030C17119 -:104EA00070BD1F480068C030807A704738B51C4C10 -:104EB00005460278206813000146C03110F07AF9E7 -:104EC00009A8060909A21945728AA800FEF7AEFFD3 -:104ED00038BD8879062806D0092804D0124811491F -:104EE000B53010F076F820680422017E1143017677 -:104EF00088E0A9880029EBD0A030808B0B4988423C -:104F0000E6D0A868002804D107480649C53010F04B -:104F100060F8A8680A38A8600090AB88206807E0AD -:104F2000540000201C420000E9050000FFFF0000C3 -:104F3000A030808B0622042102F028F80028C7D078 -:104F4000F849F94810F045F838BD287902288879E1 -:104F50000DD00428F8D00528F6D0284601F075F8C1 -:104F600020681321A030808BFFF72AF938BD07286D -:104F700006D00A2804D0EC48EA490A3010F029F893 -:104F8000284601F062F820680122C030417A1143BE -:104F900041728079072803D00920FEF787FF38BDCA -:104FA0000620FAE7887906280AD0042808D00928BC -:104FB00006D0052804D0DC48DA49313010F009F871 -:104FC0000ECDDA480361C2608160A2210170FEF754 -:104FD000EBF938BD8879062818D0072816D009289B -:104FE0000DD00A280BD0D048CE4944300FF0F1FF45 -:104FF0002068C0308079062808D0072806D00B200A -:10500000FEF754FF284601F020F838BD0820F7E7E6 -:10501000C548C449583095E7FFB593B001246846A8 -:1050200003218470C9021D4601800AF0A6F90022FE -:105030006946012003F0ABF906460AF0A2F9002EFA -:105040005CD16846152184704902018000271C212B -:1050500001A808970FF07FFE01200146103108A833 -:1050600001700020014608A841708178F9200140B4 -:10507000891C214308A881706846017902263143C2 -:10508000017114998185C7851F21018608A80A909E -:1050900013980D90684609900AF06FF90EAA09A9B5 -:1050A00001A802F036FF07460AF06BF9002F02D084 -:1050B000384617B0F0BD9E4F68463968008F48806B -:1050C000684684709B49018008A88078F9210840CF -:1050D000801C4108490008A88170684686850686BC -:1050E00015A80D900AF049F90EAA09A901A802F025 -:1050F00010FF06460AF045F9002E01D03046D8E7E9 -:1051000068463968008F88808A4968468470C91C5F -:105110000180298810A8018069884180A988818040 -:10512000E988C180082168468185018610A80D9014 -:105130000AF023F90EAA09A901A802F0EAFE044622 -:105140000AF01FF9002C01D02046B2E76846396802 -:10515000008FC8800020ACE7F0B5774D95B00C46C5 -:10516000A9423FD30126B604744FA11BB94239D3DB -:1051700073498C4236D2202806D0212827D02228F5 -:1051800042D0072015B0F0BD3C216846017021884F -:1051900041806188818009A908F00AFC0028F1D1CA -:1051A00008A98979002903D002290ED00320E9E754 -:1051B0006168A942E6D38A1BBA42E3D3604A9142AE -:1051C000E0D26A46128D0A80DCE75E48DAE72068A2 -:1051D000574C002813D00721490701224118920398 -:1051E000914201D31020CDE706210EF0E1FB2168AA -:1051F000A82250500120A03188750020C2E7206805 -:105200000021A0308175F8E7204600F02AFFB9E7B9 -:10521000494A10B5914208D301229204474B8A1A99 -:105220009A4202D3464A914201D3102010BD202851 -:1052300005D0212803D0222803D0072010BD062046 -:1052400010BD084600F051FF10BD70B50446374848 -:10525000CC21AC300FF07FFD3448354EAC3000210E -:105260003060C943A0308183002585770120FEF797 -:105270001DFE3068C7210D54E121C57389000182EC -:10528000B6210D54014609310830FDF779FF316828 -:10529000084629311930FDF7A9FF002C24D03068C9 -:1052A00080308463FEF7C2FD1E20E081607A8F218A -:1052B0000840303060723068014614312161983105 -:1052C0006162933921601031616025721339A162E6 -:1052D000091FE1628531E163303921631031616377 -:1052E00010310930A163A06470BD11480068C0305E -:1052F0008079042803D0052801D0002070470120C0 -:10530000704770B506460C480C46814208D3012010 -:1053100080040A49201A884202D30948844213D3E0 -:10532000102070BD1C420000B30600004C1200208B -:1053300054000020012A0000006001000000FC1F52 -:105340000040002002300000FFF7CFFF002801D00E -:105350001120E6E7FD48FE4D002E02D0012E46D179 -:105360002FE02278002A0AD00121012A09D0022A3E -:1053700014D0032AD5D1A2799209D2D112E000210A -:1053800003E0A2799209032ACBD128680622017290 -:1053900060308171611C0FF07FFC05E0A2799209F9 -:1053A000012ABED128680172002107200CF0C2FC3E -:1053B00028680622611C09300FF06EFCFEF736FDEE -:1053C00011E02178002912D0012910D0022910D033 -:1053D0000329A6D10120FEF760FF002803D0DD4994 -:1053E000DD480FF0F6FD2868C673002099E7072016 -:1053F00097E70120FEF720FFEFE707214907012289 -:1054000010B541189203914201D3102010BDD0492C -:10541000024609680B7A0931184600F005FE0020A3 -:1054200010BDFFB599B005460020694608710872A5 -:1054300008A9087408751E4614460121C748890446 -:10544000C74AC84B002D06D085420DD36F1A97422C -:105450000AD39D4208D2002C09D0844204D3601A9A -:10546000904201D39C4202D310201DB0F0BD2846CB -:10547000204318D01F270CAB01AA009728461A9981 -:10548000FEF701FE0028F0D10DAB02AA31462046FE -:105490000097FEF7F8FD0028E7D16846007AC107BB -:1054A00003D00A20E1E70720DFE7800705D568463B -:1054B0000079800701D50B20D7E7FFF716FF0028FA -:1054C00001D01120D1E703AF002D0FD01A2069467B -:1054D00008731A9888732946F81C1A9A0FF0DCFB97 -:1054E0000EA903A808F064FA0028BED1002C0ED043 -:1054F000202168460173867332462146F81C0FF05E -:10550000CBFB0EA903A808F053FA0028ADD19049AF -:1055100008A80968007C08700020A6E7F0B50446DA -:105520008E48002795B084426FD301208004211A51 -:105530008B488142F8D38B48844266D22378012B72 -:105540000BD1864960688842EED39904421A844997 -:105550008A42E9D383498842EFD27D490A681546D9 -:10556000C035A879022814D0032812D0052810D0FD -:1055700009280ED00A280CD00B280AD0012803D005 -:10558000002B06D0012B04D0687AC506AD0F06D1DA -:1055900001E00820F6E5850701D4400701D5112078 -:1055A000F0E5012B15D0208A6F4E0546203DB5420F -:1055B0007ED2022B01D0032B01D1A02878D3012B5E -:1055C00007D01078C00704D0608A002870D0B428B3 -:1055D0006ED8002B06D0012B08D0022B04D0032B51 -:1055E00066D110E0002512E0022510E06068012578 -:1055F000007800280BD0012808D0022806D0032804 -:1056000004D05248BEE5032501E066E00127D07BC7 -:1056100001281CD1108A002819D0907B810901290A -:1056200011D0800904D04C484A49E4300FF0D1FC35 -:105630000120FEF732FE00280BD047484549E830EC -:105640000FF0C7FC05E00120FEF7F6FDF3E7FEF7DB -:10565000EDFB207A002806D0012806D0022806D0CB -:10566000032825D105E0002604E0012602E00226F9 -:1056700000E00326002D01D0022D42D1002E40D0A3 -:10568000E068002814D00179002928D008290FD813 -:10569000027B9446082A0BD800290ED02F4A0168B5 -:1056A00091421AD3012292048B1A2D4A934200E0B0 -:1056B00084E012D32B4A91420FD26146002912D0C6 -:1056C00080682649884208D301218904421A244966 -:1056D0008A4202D32349884205D3102052E5027B37 -:1056E000002A6BD0D4E71A4800680078800702D0FF -:1056F0001648401E46E5022D03D1022E5ED0032E31 -:105700005CD0182168460170218A4180218A8180FD -:1057100085710F480068007A002801D0012870D1F7 -:105720006946C8716846077221780930012932D06C -:1057300006210FF00EFB07216846C173067409A904 -:1057400008F036F90028C9D10A210FE00232000022 -:10575000540000201C4200005F08000000600100AF -:105760000000FC1F00400020E13F0000684601707F -:1057700009A908F01DF90028B0D13A20694608703F -:1057800009A9684608F014F90028A7D1002D08D00F -:10579000022D06D04CE061680622491C0FF07CFA0D -:1057A000C9E7002E44D00026374623E00168B00048 -:1057B00009580978002903D0012904D00720E1E421 -:1057C00069468F7002E001216A469170E168062205 -:1057D0000968095800A8491C03300FF05DFA0B2036 -:1057E0006946087009A9684608F0E2F80028E6D181 -:1057F000761CF6B2E0680179B142D7D800266F4630 -:1058000012E050E08068B10041581022B81C0FF03F -:1058100043FA3B206946087009A9684608F0C8F8B1 -:105820000028CCD1761CF6B2E068017BB142E9D801 -:105830001B20694608700120887009A9684608F095 -:10584000B7F80028BBD108A840791B282BD1002D20 -:105850000AD0012D04D0022D08D0032D18D105E067 -:105860000320FEF723FB26E003200FE0FE4800683C -:10587000C030807903000FF09DFC0916061616183B -:1058800016081A1C1600022000E00920FEF70EFB85 -:10589000608A00280FD000228300114610460CF0C9 -:1058A000A4F9002807D003206CE40520EEE70A20C5 -:1058B000ECE70B20EAE7002064E470B586B00C004A -:1058C00006460BD0E94884424AD301208004E849C7 -:1058D000201A884244D3E748844241D2E24D2868E6 -:1058E000C030C179022902D0407A400702D5112088 -:1058F00006B016E5002C04D02046FEF798FB0028E1 -:10590000F6D13046FEF75EFB012803D0022823D0F3 -:10591000D948EDE721001BD1082069468882286814 -:1059200001ABC08805AA002103F019F90028DFD1D6 -:105930006846808A082801D00320D9E76846818814 -:105940008181C188C181018901824189418203A984 -:10595000304601F074FCCBE7002C01D00620C7E7ED -:105960001020C5E770B50C460546FEF72BFB012855 -:1059700003D0022801D0C048D3E421462846FEF7D0 -:105980001FFCCEE400B50146143095B0192801D2B1 -:10599000880707D008461E3004D00A3002D00720FE -:1059A00015B000BDFFF7A1FC002801D01120F7E7DA -:1059B000AD4831220068417068460270817009A9C3 -:1059C00007F0F6FFECE701B582B0022069460880D7 -:1059D000A54802AB00686A468088002102F02AFFD1 -:1059E00069460988022900D003200EBD38B502217E -:1059F0006A4611800721490701224118920391420A -:105A000001D3102038BD9849034609686A468C883E -:105A10000021204603F0A3F8694609880229F1D045 -:105A2000032038BD3EB504460820694608808F48EB -:105A3000844208D3012080048D49201A884202D371 -:105A40008C48844201D310203EBD2046FEF7EFFA79 -:105A50000028F9D12088694688806088C880A0889D -:105A60000881E0884881804801AB00686A46C088A8 -:105A7000002102F0DFFE694609880829E4D00320EE -:105A80003EBD1FB504460820694688817748844298 -:105A900008D3012080047649201A884202D3754831 -:105AA000844202D3102004B010BD6F486B460068DA -:105AB00003AAC088002103F052F80028F3D16946F8 -:105AC0008989082901D00320EDE7694609882180EA -:105AD00069464988618069468988A1806946C98884 -:105AE000E180E0E7FEB50546604817460E46814274 -:105AF00008D3012189045E4A731A934202D35D4B95 -:105B00009E4201D31020FEBD1F2F01D90C20FEBDE7 -:105B1000554C85422AD3681A904227D39D4225D2FC -:105B2000206801A9408802F037FE0028EFD12878CC -:105B300069464871206801A9408802F010FE0028DB -:105B4000E5D169460090087802210843694608704B -:105B50004979090703D0082108436946087020687D -:105B60006946408802F0A5FD0028D0D169460F8122 -:105B700020683346408802AA002102F05BFE694695 -:105B80000989B942C3D00320FEBD38B50C460721B0 -:105B9000012249079203002802D04318934202D2FF -:105BA0006118914201D3102038BD21886A461180C6 -:105BB000002801D000290BD02B49034609684D88E5 -:105BC0000021284602F0CBFF69460988218038BDB4 -:105BD0000C2038BD30B50C46244987B08C4208D320 -:105BE00001218904224A611A914202D321498C423F -:105BF00002D3102007B030BD1B4D2968C0310A7A8E -:105C0000520708D48979491F0B000FF0D3FA050415 -:105C10000604040604000820ECE7FEF7D3F9012887 -:105C200003D0022839D01448E4E720881E2801D286 -:105C30000720DFE72868C030807906282BD00A20AB -:105C4000FEF734F90520694608700879A1788008C4 -:105C5000C9078000C90F084369460871FB21084045 -:105C6000A1788907C90F09E05400002000600100F5 -:105C70000000FC1F004000200230000089000843A3 -:105C8000694608712088C880684609F09EFE002891 -:105C9000B0D00320AEE70720D2E70620AAE7F0B590 -:105CA00087B014460D46FEF78DF9012804D002286E -:105CB00002D0FE4807B0F0BDFD4B18680146C03168 -:105CC0000A7AD20707D08A79042A04D0052A02D09A -:105CD000002D02D052E00820ECE7F64A944208D3A7 -:105CE00001229204F44BA21A9A4202D3F34A94423C -:105CF00001D31020DEE7A278D206520F042A0CD876 -:105D0000E378072B09D3102B07D822799A4204D3C2 -:105D1000102A02D822881E2A01D00720CAE702468C -:105D20008032966BF727F372966B23793373966BF9 -:105D3000737A3B40A778BF06FF0FFF003B437372A7 -:105D4000966B2388F381966BA778B37AFF079B083D -:105D50009B00FF0F3B43B372FB273B40A778966B3A -:105D6000BF07FF0FBF003B43B372926BA478537A17 -:105D7000E406DB08DB00640F234353720B226B46FF -:105D80001A70852D22D008DC002D17D0812D17D058 -:105D9000822D17D0832D08D116E0862D18D0882D9E -:105DA00018D0892D18D08A2D18D00B221A71B6223E -:105DB000125CBF4C002A13D0A83012E00022F5E795 -:105DC0000122F3E70222F1E70322EFE70522EDE7E4 -:105DD0000622EBE70822E9E70922E7E70A22E5E7DE -:105DE00000200290887907280BD0082809D00920C4 -:105DF000FEF75CF8684609F0E8FD002803D00320B0 -:105E000058E70620F4E720680422C030017A4908E8 -:105E100049001143017200204CE770B5A44E0D46B5 -:105E2000316886B0C031097A1446090701D40820C8 -:105E30005EE5FEF7C7F8012803D0022801D09B4891 -:105E400056E5002D12D09B48844208D301208004DF -:105E50009949201A884202D39848844201D31020DD -:105E600046E5012D0BD0022D02D106E0002C01D019 -:105E700007203DE50020029005E0022000E001201F -:105E8000694608710294032069460870684609F063 -:105E90009CFD002801D003202AE53068F722C0309D -:105EA000017A11400172002022E570B594B01446C9 -:105EB0000E46FEF787F8012804D0022802D07B485E -:105EC00014B059E57A4D2868C030007A800701D4B3 -:105ED0000820F5E7002C01D00720F1E7FFF705FACD -:105EE000002801D01120EBE7002E1DD02D2168469F -:105EF00001702C68BC20015B684641801022B11CF7 -:105F000001A80EF0C9FE207EFB210840B17CC90724 -:105F1000490F08432076B07CFF214008A075608AB5 -:105F200082310843608207E02E21684601702868AC -:105F3000A030818B6846418009A9684607F038FD8A -:105F40002968FD23C0310A7A1A400A72B8E710B5F1 -:105F50000C46FEF737F8012803D0022801D0534839 -:105F600010BD5448844208D3012080045249201AAD -:105F7000884202D35148844201D3102010BD2046EC -:105F8000FEF72FF8002010BD10B594B00446FEF7C0 -:105F900019F8012804D0022802D0444814B010BDDA -:105FA00043480068C0308179042910D005290ED0FB -:105FB0003820694608704C8001200871487109A991 -:105FC000684607F0F5FC0028E8D00B20E6E7002043 -:105FD000E4E710B594B00446FDF7F4FF012803D0C0 -:105FE000022801D03148D9E731480068C0308179B2 -:105FF00004290DD005290BD03820694608704C8043 -:1060000000200871487109A9684607F0D1FCC5E76E -:106010000020C3E726480068C0308079062801D3F5 -:10602000012070470020704708B51346002806D0AD -:1060300023A00068009048796A468009105C1870B7 -:106040000622581C0EF028FE08BD10B50446FDF7C8 -:106050007AF9A22101700ECC08300EC0FDF78FF93D -:1060600010BD70B5124C054601682068002913D098 -:10607000104A914208D3012292040F4B8A1A9A4285 -:1060800002D30E4A914201D3102075E410227730DA -:106090000EF002FE206801218030806B01722068C2 -:1060A000A9880182C17B012919D10BE002300000CF -:1060B00054000020006001000000FC1F0040002090 -:1060C0000302FF01807B800901280AD00120FEF72E -:1060D000E4F8002803D01A491A480EF07AFF00208D -:1060E0004AE40120FEF7A8F8F3E770B5054600681A -:1060F000154C00281ED007214907401801218903AB -:10610000884201D3102037E42068B8210958097A61 -:10611000012909D00146773129300AF08EFF206825 -:1061200001218030806B017221681022286877314C -:106130000EF0B2FD2068008AA88000201CE4000058 -:106140001C420000FD02000054000020FFB581B099 -:1061500001980E46C078174610360E37022809D02F -:10616000032840D005287DD0F2A1F7480EF031FF7A -:1061700005B0F0BDCC890A2060430E301880312371 -:106180000A98002A0380F3D0486800889080002095 -:10619000D0801081097B9481891FCDB21AE03088AC -:1061A0007168388048780A7800021043F880C8780F -:1061B0008A78000210433881BA1C091D28460BF06A -:1061C0008AF8002D01D0002802D000203871788094 -:1061D00008360A372046641EA4B20028DFD1019990 -:1061E0000020C870C4E7CC890A2060430E301880B4 -:1061F00032230A98002A0380BAD048680025008814 -:106200009080D5801581087B401FC0B2009094819A -:1062100042E0716832880878FA803A79C3075208F8 -:106220005200DB0F1A43FD231A408307DB0F5B008C -:106230001A43FB231A404307DB0F9B001A43F72343 -:106240001A400307DB0FDB001A43EF231A40C30693 -:10625000DB0F1B011A43DF231A408306DB0F5B01B0 -:106260001A4300E020E0BF231A404306DB0F9B01E6 -:106270001A433A71C00978718A784B781002184332 -:1062800038813A46C91C00980BF025F8002801D047 -:10629000BD703D8008360A372046641EA4B200282F -:1062A000B7D10198C57063E7087BCC89801E85B2A1 -:1062B0002846083060431030188034230A98002A9A -:1062C00003808FD048681746008890800020D080D7 -:1062D000108194811037E000D581C0190CE030881E -:1062E0003880009878602A46716800980EF0D4FCD7 -:1062F000009808360837401900902046641EA4B262 -:106300000028ECD16BE7FFB50546C07881B00C469C -:106310000A9E03000EF04EFF0BA3071733414F6D8B -:106320008F9D9D9DA300207B1746082806D003283B -:1063300004D085487FA154300EF04BFE04990E2006 -:10634000088030200CE0207B1746042804D07E48CB -:1063500078A171300EF03DFE04990E2008803120A6 -:106360003080002F44D060680088B880607AFF30A9 -:106370000130F880E08938810020B88137E0207B47 -:106380001746042804D070486AA18D300EF021FE13 -:1063900004990E2008803220E2E7207B174602286D -:1063A00004D0694863A1A9300EF013FE04990E20B1 -:1063B00008803320D4E7207B1746042804D06248A5 -:1063C0005CA1C4300EF005FE049810210180342039 -:1063D0003080002F0CD060680088B880607AFF3071 -:1063E0000130F880E08938810020B881F881E870B8 -:1063F000BEE6207B1746052806D0062804D0524862 -:106400004CA1E1300EF0E5FD049812210180352009 -:106410003080002FECD060680088B880607AFF3050 -:106420000130F880E0893881E089B8810020388225 -:10643000A988F981DBE7207B1746072804D042486A -:106440003CA1F8300EF0C5FD04990E2008803620DE -:1064500086E700962846049B00F02DFD88E635A1CE -:106460003A480EF0B6FD83E670B5054600780C4656 -:10647000082603000EF09EFE124C3434241C380A09 -:106480000A0A0A0A0A0A0A0A0A0A0A4C687800284A -:1064900004D02E4827A12C300EF09BFD002C03D1F8 -:1064A0001F2024A1400108E060783043607020E0A4 -:1064B000002CF9D17D201FA1C0000EF08AFDF3E76A -:1064C000002904D03F201BA100010EF082FDFCF743 -:1064D0003AFF0446407830436070FCF750FF08E014 -:1064E0001A4814A1473002E0184812A14C300EF0AF -:1064F00070FD002C0AD06078000707D5932020702B -:106500002046582229460830FAF75EFE002070BD6A -:106510000E4808A15030EAE710B500200C4C0D4998 -:106520000346C2008C525218401C0006D370000E65 -:10653000F7D010BD7372635C67617474635F636FDF -:1065400072652E63000000005A020000B3030000D1 -:10655000FFFF000058000020FE49088001208870DD -:1065600000207047FB4900208870704710B500215B -:10657000F848C94301800021C17007F053FAD8E7F9 -:10658000F7B584B0054600276846078187806868AC -:106590000C46008800F0ECFB0646287A032805D05C -:1065A000002E03D1EC49ED480EF013FD297A204668 -:1065B000C91E123000900B000EF0FCFD0FF2F1F03E -:1065C0003D09AA465C6D34B3CDF38B8BF000F078B7 -:1065D000012803D0E049AD200EF0FBFCA8896946F4 -:1065E000C0000E30888030200881002C22D06868DE -:1065F0000188A180E7802781A989A18100200DE081 -:10660000C100B27909190A74B288CA81820052198C -:10661000D3894B82128A401C8A8280B2A18981422E -:10662000EED8D7E002A8009001AB224629463046BA -:1066300000F0CCFBF1E002A8009001AB2246294615 -:10664000304600F005FCE8E0F07806281AD0FF207C -:10665000C149223014E068680188A180E780278161 -:10666000A989A181B188E181E9892182EA89296921 -:1066700000982BE0F078062804D0FF20B6493C3083 -:106680000EF0A7FCE8896946123088803520088121 -:10669000002CE0D1C1E0F078072804D0FF20AE49FB -:1066A00056300EF096FCA88969460E308880362058 -:1066B0000881002CBED068680188A180E78027810E -:1066C000A989A1812046AA890E3029690EF0E4FA31 -:1066D00080E0E8896946123080B2382288800A81D9 -:1066E000002C79D068680188A180E7802781A9897A -:1066F000A181287A102809D00221A173E989218279 -:10670000EA89296900980EF0C7FA86E00121F4E7CA -:1067100002A8009001AB224629463046FFF716FD3D -:106720007BE0F078082803D08B498D480EF051FCAF -:1067300014206946888037200881002C6DD0686855 -:106740000188A180E7802781A989A18167822782AA -:106750000120A0733EE0F078092804D080487E49EB -:1067600018300EF036FC288A6946143088803720AD -:106770000881002C51D068680188A180E78004213D -:106780002781A173A989A181E9892182298A61824E -:1067900020462A8A1430696998E702E038E01CE054 -:1067A00024E0F0780A2804D06D486B4933300EF0AD -:1067B00010FC14206946888037200881002C2CD0DA -:1067C00068680188A180E78027810521A173A781DE -:1067D00027826782F77020E017E002A8009001ABE3 -:1067E000224629463046FFF78EFD16E00D20694609 -:1067F000392288800A81002C07D00120E08055488A -:106800000188A1802781277307E00699088010E09E -:106810008F205149C0000EF0DCFB68460699808845 -:106820000880002C05D06846008920806846808852 -:106830006080002007B0F0BDF7B594B015460F4654 -:10684000149800F0A0FA04000AD0032000F088FB9E -:10685000022802D2E078002804D0112017B0F0BD41 -:106860004048FBE71720694601260883002D0FD01A -:106870000321684601711021018210A8024605908B -:1068800004A928460AF04DFD00280DD00720E5E7B1 -:1068900008216846017100210781C9434181052112 -:1068A0008673C90281810CE0A878A0712888A08035 -:1068B000684605218673C902818100210781C94389 -:1068C000418109AA023206A901A807F0E4F80028CC -:1068D00002D000F06BFAC1E707A800906846038B6E -:1068E00004220321149800F051FB0028B6D1E67071 -:1068F000B4E770B592B00D0006460ED000F043FA32 -:1069000004000CD0032000F02BFB022802D2E07818 -:10691000002806D0112012B070BD1020FBE71148EE -:10692000F9E7172168468180042101722988818155 -:106930006988C181012181740B4901820AAA02324E -:1069400001A902A807F0A7F800280FD000F02EFA3E -:10695000E1E7000058000020346500003C0400001E -:1069600063020000023000000228000008A8009026 -:106970006846838804220321304600F007FB002884 -:10698000C9D10221E170C6E770B592B00D0006468C -:106990000DD000F0F8F904000BD0032000F0E0FA6D -:1069A000022802D2E078002805D01120B3E7102099 -:1069B000B1E7FA48AFE717216846818004210172E8 -:1069C000298881816988C18101218174F44901820A -:1069D0000AAA023201A902A807F05DF8002802D035 -:1069E00000F0E4F997E708A800906846838804223D -:1069F0000321304600F0CAFA00288CD10321E1704F -:106A000089E770B592B00D0006460DD000F0BBF9D5 -:106A100004000BD0032000F0A3FA022802D2E07891 -:106A2000002805D0112076E7102074E7DB4872E7D4 -:106A3000022168460172298881816988C1811721F4 -:106A400081800AAA023201A902A807F024F80028CE -:106A500002D000F0ABF95EE708A800906846838892 -:106A600004220321304600F091FA0028DBD10421F2 -:106A7000E17050E7F0B591B015000E4607460ED014 -:106A800000F081F904000CD0032000F069FA02281C -:106A900002D2E078002806D0112011B0F0BD1020FD -:106AA000FBE7BE48F9E7172168468180042101729F -:106AB000298881816988C181B17881743188018296 -:106AC0000AAA023201A902A806F0E5FF002802D0B6 -:106AD00000F06CF9E1E708A800906846838804227A -:106AE0000321384600F052FA0028D6D10521E17082 -:106AF000D3E7F7B592B015460E46129800F043F969 -:106B000004000AD0032000F02BFA022802D2E07819 -:106B1000002804D0112015B0F0BDA048FBE70627DF -:106B2000002D12D0684607728681C581A580172086 -:106B3000694688800AAA023201A902A806F0ABFFC2 -:106B4000002807D000F032F9E5E705216846017218 -:106B50008681EBE708A80090684683880422032119 -:106B6000129800F013FA0028D5D1E770D3E7F7B5F3 -:106B700092B016460D000ED0129800F004F90400F1 -:106B80000BD0032000F0ECF9022802D2E0780028B4 -:106B900005D01120BFE71020BDE78048BBE70727DD -:106BA0006846077286811721049581800AAA0232FD -:106BB00001A902A806F06FFF002802D000F0F6F845 -:106BC000A9E708A800906846838804220321129848 -:106BD00000F0DCF900289ED1E7709CE7F3B51720A0 -:106BE00091B00C46002915D021780B000EF0E2FA86 -:106BF000062B05051A041C2B1520C01EE28880B246 -:106C0000002A02D0A368002B04D0824204D90C20B1 -:106C100013B0F0BD1020FBE7042905D0A0880028A0 -:106C200011D101E00620F3E7119800F0ACF805005F -:106C30000BD02078092701281AD0022807D0042871 -:106C400024D0052835D00720E2E75448E0E768461D -:106C5000077161880181E1884181A068082603905D -:106C6000304600F07DF9072829D34C48801CCFE737 -:106C70000C216846017161880181E1884181A06829 -:106C800003900EE0E878002811D118E00D21684645 -:106C9000017161880181A1884181E1888181A068B9 -:106CA00004900326304600F05BF90228EAD3112055 -:106CB000AEE70E2168460171217B0172F1E71721D1 -:106CC0006846018309AA023206A901A806F0E3FE7C -:106CD000002802D000F06AF89AE707A800906846FA -:106CE000038B04223146119800F050F900288FD10F -:106CF0002178012907D002298AD0042905D0052945 -:106D000005D0032084E7082102E0EF7080E70A2124 -:106D1000E9707DE730B591B00C46054600F033F8D8 -:106D2000002808D0032000F01BF9022805D31B48D7 -:106D3000801C11B030BD1948FBE70F216846017176 -:106D400004811721018309AA023206A901A806F0CD -:106D5000A2FE002802D000F029F8EAE707A8009078 -:106D60006846038B04220321284600F00FF9E0E770 -:106D70000C49884205D00C490988814201D10A4852 -:106D800070470020704710B5FFF7F2FF002802D0CF -:106D90008178C90700D1002010BD0000023000003A -:106DA00003280000FFFF000058000020002806D044 -:106DB000012805D0052805D0062805D003207047F6 -:106DC00011207047082070475C487047FFB583B0BA -:106DD00003980C9EC0781D4614460F46012803D028 -:106DE0005749D2200EF0F5F8F889C0000E302880FF -:106DF00030203080387B001FC0B20190002C26D09C -:106E000078680088A0800020E0802081F889A08137 -:106E1000002616E0F0000519C01900902A464169C5 -:106E20000E3201980AF057FA002802D00020287488 -:106E3000E8810098761C008A68820098B6B2408A81 -:106E4000A882A089B042E5D803990020C870F1E477 -:106E5000F8B50646C0781F4614460D46042804D0EF -:106E6000FF20374903300EF0B4F8A88906214843C3 -:106E70000E30388033210698002C01801AD06868C3 -:106E80000088A0800020E0802081A989A18103469C -:106E90000CE01946062251434A190919D789CF81B6 -:106EA000977C8F74128A5B1C0A829BB2A1899942DB -:106EB000EFD8F070F8BD70B514460546142204985A -:106EC0001A8037220280002C18D0486800260088DB -:106ED000A080487AFF300130E080C8892081C889CD -:106EE000A0816682E878082809D0092811D00A28EC -:106EF00019D0134913480EF06CF8EE7070BD087B82 -:106F00000C2804D00F480E490C380EF062F801200E -:106F100012E0087B0D2804D00A48094908380EF011 -:106F200058F8042008E0087B0E2804D005480449DE -:106F3000001F0EF04EF80520A073DEE703300000BE -:106F4000346500008203000001460020FA4A02E096 -:106F5000401C082803D24300D35A8B42F8D1704713 -:106F600030B50446F44A0020163A117953790AE004 -:106F70005518AD79A54201D1401CC0B2491CC9B217 -:106F8000102900D100218B42F2D130BDFFB5EA4873 -:106F900081B0163841790A9C491CCDB21E46102D8D -:106FA00000D10025E44816380079A84202D1042017 -:106FB00005B0F0BD0820FFF7D3FF0746072804D926 -:106FC000FF20DEA1A5300EF004F80298082801D1B8 -:106FD000072F17D001982080301D6080002060713D -:106FE0002071E68003982081204606F005FD0028E8 -:106FF0000AD0D148029916384379821D99544571B7 -:107000000020D5E7D248D3E7FF20CCA1B7300DF060 -:10701000E0FF0320CCE7F0B58DB0044600256846BC -:10702000057116468C460620FFF79AFF00281CD1F2 -:1070300021780127C807002801D0132917D96846ED -:1070400087766178C17602218183C58304A8009088 -:1070500070680C23008805220621FFF797FF00289F -:1070600003D0B6A185200DF0B4FF0DB0F0BDB2483D -:1070700016380278002AF8D0427863789A42F4D120 -:10708000012918D0132919D16146062916D1057096 -:10709000002101200AF04EFE6846077170680188E1 -:1070A0006846C1800021C9430181607922790102CB -:1070B000114368461AE06146062908D068460079FF -:1070C0000028D2D0314601A8FDF7AFFECDE705700C -:1070D000002101200AF02EFE6846077160792279AE -:1070E00001021143684601810021C9434181E9E75A -:1070F000914810B50021163801704A1E4280417037 -:107100000171417101200AF015FE10BD10B5FFF7A5 -:10711000EFFF0020884902464300401CCA5208285D -:10712000FAD310BD84491639488000207047DFE744 -:1071300070470EB501216846017086498180C18083 -:107140000021FDF772FE0EBDF7B505460078002759 -:1071500000090C463E46012804D0FF2077A1683084 -:107160000DF037FF287A02280CD0FF2073A17E3063 -:107170000DF02FFF0298002C068001D0278066803A -:107180000020FEBDEA89702710460A3086B2002C26 -:107190000BD068680088A080A8892081E280204602 -:1071A0000A3029690DF078FDE4E702980680E7E7E8 -:1071B000F0B543680246D9799C79090221435C7A8B -:1071C0001E7A25025C88981D3543241F87B0A14292 -:1071D0001DD11B79022B1AD1042D1AD0052D2AD0CE -:1071E000062D1AD0402D12D3061D0F4614462846F0 -:1071F000FFF7AAFE08280AD0112020700220207272 -:10720000A581E7812661607808210843607007B096 -:10721000F0BD001D00F0E1F8F9E7041D0D46FEF792 -:10722000F9FE0028F3D0062168460170019405722A -:1072300008F0CBFBEBE7001DFFF7EDFEE7E710B52D -:107240003D4C8AB0163C2278012A26D012236A4689 -:10725000937363789B1CD373082313820B88538228 -:107260004B8893828B88D382C988118301A90091AE -:107270000C2305220721FFF789FE00280BD10022ED -:10728000F023114601200AF0B0FC01202070607844 -:10729000801C607000200AB010BD1120FBE7F0B523 -:1072A000254C0027163C87B00646A51D1FE06079D7 -:1072B0002179884204D1112020A140010DF089FEDE -:1072C0002079405D042804D0082808D17F1CFFB233 -:1072D00005E0072069460870684608F076FB2079CB -:1072E000401CC0B22071102801D10020207130460E -:1072F000761EF6B20028DAD1384688E710B5044683 -:10730000402801D2072010BDFFF71EFE082802D03A -:107310003120000210BD0021074802E0491C082965 -:1073200003D24A00825A002AF8D1082914D0490011 -:107330004452002010BD0000DA1300207372635C19 -:107340006C326361705F636F72652E6300000000D2 -:1073500004300000FFFF00000420EBE700B54028E8 -:1073600001D2072000BDFFF7EFFD082805D000215E -:107370003B4A40001152084600BD052000BDF0B553 -:107380008BB016460C00074607D0002E05D061884A -:10739000402904D207200BB0F0BD1020FBE7208865 -:1073A000002801D0172801D90C20F4E70846FFF780 -:1073B000CBFD08280FD0258803A82A463146023085 -:1073C0000DF06AFC01A8009062882B46082138461F -:1073D000FFF7DCFDDFE70520DDE7F0B50E460746E9 -:1073E00001468BB014460125304606F0D1FC082832 -:1073F0001DD10020694608850120FFF7B1FD002856 -:1074000002D117206946088503AB02330AAA394620 -:107410003046009407F0CFF800280AD0022819D08F -:10742000032804D0FF200F4902300DF0D2FD28467A -:10743000B1E76846038D002BF9D001A80090606881 -:10744000042200880121FFF7A1FD0028EFD00549A3 -:10745000EC20EAE760780025102108436070E6E739 -:10746000DA1300203C730000002803D08178012942 -:1074700039D101E0102070470188FA4A881A9142F8 -:1074800033D01BDCF84A881A91422ED00BDC00293D -:107490002BD00320C002081A27D0012825D00121B3 -:1074A0000903401A07E001281FD002281DD0FF2839 -:1074B0001BD0FF380138002815D116E0FF22013219 -:1074C000811A904211D008DC01280ED002280CD07D -:1074D000FE280AD0FF2806D107E0012905D002299D -:1074E00003D0032901D0002070470F20704700B55A -:1074F0000A2821D008DC03000DF05CFE0A1C2024C1 -:10750000241A24282224261A102819D008DC0B2833 -:1075100016D00C2814D00D281AD00F2808D111E04D -:1075200011280FD0822807D084280DD085280DD0AF -:10753000032000BD002000BD052000BDCB4800BDDC -:10754000072000BD0F2000BD042000BD062000BDA7 -:107550000C2000BD70B500290BD0CB1FFA3B812455 -:107560001E46CDB2112B1BD2012805D0022806D011 -:1075700009E0002010701DE0FF20043001E0FF2032 -:107580000330814218D033000DF014FE111613138E -:1075900016131616131616161313131316131600B6 -:1075A0000846FF3881381F2803D9FF39FE390229E0 -:1075B00002D81570002070BD1470072070BD00B592 -:1075C00003000DF0F7FD060406040C080A0C002069 -:1075D00000BD112000BD072000BD082000BD032014 -:1075E00000BD00780207120F04D0012A05D0022A3C -:1075F0000AD10EE0000907D108E00009012805D0F2 -:10760000022803D0032801D007207047087000200B -:10761000704706207047002807D0012807D00228AD -:1076200007D0032807D007207047002004E011206E -:1076300002E0212000E0312008700020704738B5BA -:107640000C4605004FD06946FFF7CBFF002822D13A -:107650002088032189028843694609788907090D32 -:10766000084320806946681CFFF7BBFF002812D141 -:107670002188032000038143684600788007800C3E -:1076800001432180A8784007820F2020012A03D0DF -:10769000022A03D0072038BD814300E00143218046 -:1076A00088B20105890F08D0012189038843A97890 -:1076B0000907C90F89030843208080B28104890F1C -:1076C0000AD0A9784004C906C90F400CC903084371 -:1076D00020808004800F02D12088400403D52088B8 -:1076E000402108432080002038BD70B504460020AA -:1076F000088015466068FFF7A2FF002815D1218990 -:10770000A089814210D86168594E8978C90707D08D -:10771000711E884208D831460DF038FB298009E0F7 -:10772000FF21FF31884201D90C2070BDFF30FF30AE -:107730000330288060688078C007A08903D0314674 -:107740000DF024FB03E0FF30FF30033081B22980CD -:1077500020688178474801732068464900882039AD -:107760004885002070BD10B5137804785B08E407E5 -:107770005B00E40F23431370FD2423400478A40727 -:10778000E40F640023431370FB2423400478640750 -:10779000E40FA40023431370F72423400478240744 -:1077A000E40FE40023431370EF2423400478E4063D -:1077B000E40F240123431370DF2423400478A4063C -:1077C000E40F6401234313700078BF244006C00F08 -:1077D0002340800103431370002906D00878C107B5 -:1077E00001D1800701D5012000E00020C001590629 -:1077F000490E0843107010BD30B50A8803239B0260 -:1078000004889A4323059D0F02D1A3049C0F01D045 -:107810009B0F00E001239B021A4303230A801B03F2 -:107820009A4303889804840F02D11805830F01D06E -:10783000800F00E00120000302430A8030BDF3B551 -:1078400091B00D0018D01198002818D012212846A8 -:107850000DF07FFA01A9012007F0A9FE00242646B9 -:10786000374677E0022900000128000003300000BD -:10787000010200000C140020102013B0F0BD0720FE -:10788000FBE76846007C01280BD16846C1890520CA -:10789000C002081A0AD001280AD002280CD00328F6 -:1078A0000CD0042C0ED0052C0FD10DE0012400E0EB -:1078B00002246846868908E0032406E0684604241A -:1078C000878902E0052400E0062468468189119832 -:1078D00081423FD12C74002E3AD00BA800900CAB03 -:1078E00010220021304607F0F4FE002820D168461F -:1078F000808D2A46C0B20CA909F0EDFC002817D1F2 -:10790000AE81002F24D00BA8009006AB13220021DB -:10791000384607F0DEFE00280AD16846808D06A9A9 -:10792000C01E0331C0B22A1D09F0D5FC002801D0C9 -:107930000320A2E76846817E427E08021043E88168 -:10794000062C05D16846007CA8726846C08928814B -:10795000002092E701A807F032FE002891D0FFF73F -:10796000C6FD8AE7002804D0012903D0022904D0EB -:1079700003207047F949C98D02E0F8494031C988B0 -:10798000814201D1002070470720704730B5F34C89 -:107990000025608B91B0C00B2ED1216900292BD01E -:1079A000207B800728D401226846027102720022DF -:1079B0004272228B8281A28A8282049117210183E2 -:1079C00009AA0023023206A901A807F0A7F9002896 -:1079D00003D0FFF7F4FD11B030BD207B0221084336 -:1079E000207307A8009069460B8B20880422012190 -:1079F000FFF7CCFA05460BE0FBF7A5FC84210170EC -:107A00000921017218341ECC0C301EC0FBF7B7FCE4 -:107A10002846E0E710B5D14C034621690020002933 -:107A200009D02146012210311846FBF76BFE0020D9 -:107A30002061A0820120217BF9221140217310BD19 -:107A400070B50C4605461C2120460DF082F9002039 -:107A50002080002D08D0012D04D0C1A1C5480DF013 -:107A6000B8FA70BD062000E00520A07070BD10B50A -:107A700007F07CFB10BDFEB50546007800260C46DD -:107A8000374603000DF096FB0C91070C1D962F4610 -:107A90002F46486C899168680A38FBF793FD89E0A6 -:107AA000002904D0B348AEA11B300DF092FAFBF7C9 -:107AB0004AFC04464078082108436070FBF75FFCED -:107AC00078E0002C04D1BB20A5A180000DF081FA44 -:107AD000284601F0B1FA00286CD0607808210843EC -:107AE0006070022666E0E888694608800190002CF4 -:107AF00004D1A0489AA12F300DF06BFA28780728FE -:107B00001CD10198C00B19D0944800218171A9881B -:107B1000818012E003264DE0002C04D1C52090A105 -:107B200080000DF056FA8D48017B89070BD500695E -:107B3000002802D0E888C00B3CD0022660780821DB -:107B40000843607036E0291D8EC918308EC0283871 -:107B50000188022601222046FBF7B6FD0127EDE74A -:107B6000002C04D183487EA164300DF032FA7B48AA -:107B70000821007B4007C00F460060780843607012 -:107B8000002E17D12879012802D16879002811D058 -:107B90002046FFF73FFF07460CE0002CCED10D201A -:107BA0006FA180010DF015FAC8E772486CA17A3018 -:107BB0000DF00FFA002C0CD06078000709D5002FCB -:107BC00007D1842020702046582229460830F9F732 -:107BD000FBFA3046FEBDF7B5027A88B00C46054682 -:107BE00020460C300490069216300027921E029018 -:107BF0003E460A31594813000DF0DCFA0ADF06E66A -:107C00002AE62AE66A98C6E64288002A02D0522767 -:107C10000726DDE051271E26002C7DD06A684F48DC -:107C20001288A2800122A2718079C0004019C08907 -:107C3000FFF705FE002877D148488179C900491926 -:107C4000C98921818079C0004019408AA083BFE0A2 -:107C5000688A00900698072817D1E889C00B14D0CD -:107C600000985127223086B2002C55D0A88904995B -:107C7000FFF7E5FD002857D168680088A080022042 -:107C8000A071A8892081012041E000985027203070 -:107C900086B2002C40D0A889FFF7D1FD002843D13F -:107CA00068680088A080A889E080287A07280AD020 -:107CB00002202072288AA0830098E0832046696908 -:107CC0002030009A01E00120F3E70CF0E5FF7FE0AF -:107CD000698A00910169002902D0E989C90B22D083 -:107CE0000099512722318EB200218171A9898180AA -:107CF000002C5FD00088A080A8890499FFF79FFD21 -:107D0000002811D10220A071A88920810420A0722E -:107D1000288AE083009801E04CE005E0208469694E -:107D2000009A0298D1E703200BB0F0BD007B40071A -:107D300002D55127222601E050272026002C39D0D9 -:107D40006868502F0088A08016D00220A0712146BC -:107D5000287B0831FFF774FE3AE00000EC130020A6 -:107D60007372635C67617474735F636F72652E63B3 -:107D700000000000CB020000287BA11DFFF760FE81 -:107D80000020FFF747FE23E0A9890089884207D138 -:107D900054270626002C0DD068680088A08017E0C4 -:107DA00053270826002C05D068680088A080A88981 -:107DB000E0800DE00A98068010E055270726002C89 -:107DC000F8D00020A07103E0FD49FE480DF001F954 -:107DD0000A98002C068001D0278066800020A3E747 -:107DE000F94800210172203801814181418081716F -:107DF0008180027BF923520852001A40027301610C -:107E00008182704770B5F04C86B0203C2080002005 -:107E10006080A071A0806946012007F0C8FB102691 -:107E200008E00199088802461207D20FB0431201F8 -:107E300010430880684607F0C2FB0500F1D02069B6 -:107E4000002804D0DF48DE4933300DF0C2F8207B33 -:107E5000800704D5DB48DA4934300DF0BAF8822DBA -:107E600004D02846FFF743FB06B070BD0020FBE7B7 -:107E7000D54810B52038017B012211430173002140 -:107E800041808171818006F045FB10BD10B5CE4C5C -:107E90000020C043203C20800020FFF7BBFD207B5A -:107EA00040084000207310BD70B5C74D0446203D0A -:107EB000287B800704D5C348C1494B300DF089F8B1 -:107EC000287BC00706D12888C049884202D028698B -:107ED000002801D0082070BD002C08D0A0881628EA -:107EE00001D2092070BD20682861A088A882FFF710 -:107EF0004DFD70BD10B50C4607F02DFB002804D0D9 -:107F0000C520AF49C0000DF064F82046FFF7EFFA36 -:107F100010BDF0B5AC4D0446203591B0002008905E -:107F200068820E462882E8812946E8804039088622 -:107F3000694608830885088688838882A2480E904F -:107F4000007A1746012808D0022806D0032804D05A -:107F5000042802D0082011B0F0BD9D48844269D3A6 -:107F600001239B049B49E21A8A4263D39A4A9442B2 -:107F700060D286425ED31001331A0846834259D339 -:107F80001046864256D26068002815D09049884233 -:107F900050D31101421A8F498A424BD38E498842ED -:107FA00048D260892189884203D801225202914235 -:107FB00001D90C20CFE7089010AA0CA93046FFF792 -:107FC00094FB0028C7D106A92069FFF738FB0028D9 -:107FD000C1D1206900280CD060788007002868464D -:107FE000008B03DA8004800F75D002E08004800FDC -:107FF00071D16846008B81061ED58004800F6068B1 -:1080000009D0002818D00721490740180121890309 -:1080100088420FD201E000280ED06D496068884286 -:1080200008D301218904421A6A498A4202D36A4963 -:10803000884201D310208EE705A96069FFF7FFFA97 -:10804000002888D16069002808D06846808A010528 -:10805000890F01293FD18004800F3CD007A9A06976 -:10806000FFF7EDFA0028A5D16846808A800632D451 -:108070006846808B81062ED4A169002906D00105AF -:10808000890F012927D18004800F24D0E0680028BF -:1080900004D0007800281ED01C281CD24A4A611C3B -:1080A000123220460992FFF75EFB0321002089026D -:1080B000884301218902411868460D9101850121FB -:1080C000817446490182404A0FA91532306809F08F -:1080D00028F9002801D007203DE708A8007F3A4989 -:1080E000C01CC2B26A7100201031FF3200900190B2 -:1080F000FF3203460291039003320AA904A807F055 -:10810000C5F9002827D130482038008E0B902E4822 -:108110003389383032690146123902910093019255 -:10812000039010A90A8873890CA9306807F0AEF98A -:1081300001007CD12448E98811308170090AC1709E -:108140000026009631386A79008E3146099B07F087 -:108150001CF9002802D0FFF7CAF9FCE60E98807CD3 -:10816000C00928D068460D99018501218174292113 -:1081700009020182AE81287B61784008C90740006E -:10818000C90F08432873FD2108406178022289073E -:10819000C90F4900084328730B4900922A31881CF3 -:1081A00002910190002303960D4A0AA904A807F042 -:1081B0006DF901003BD1606800283DD0206911E0D5 -:1081C000607D0000220400000C140020FFFF00006E -:1081D000006001000000FC1F004000200328000098 -:1081E0000302000000280DD106A90CA8FFF704FB2C -:1081F0006078800706D46946088B03210903884309 -:1082000069460883012069468874FD4808822089F0 -:10821000FC490CF0BBFD6268089BFB48019200938F -:1082200002900A460396002306A904A800E081E014 -:1082300007F02CF901007DD12078C10601D4800619 -:108240002ED568460684606900280DD105A90CA8C2 -:10825000FFF7D2FA6846818A032080028143012019 -:1082600080020918684681826946888A4821084345 -:108270006946888201208874E14808AA401C088267 -:10828000E1490192891C0220DE4A029100900023FC -:108290000396921C05A904A807F0F8F8010063D121 -:1082A0002078C0072ED068460684A06900280DD12A -:1082B00007A90CA8FFF7A0FA6846818B032080026B -:1082C0008143012080020918684681836846818BBA -:1082D000402001436846818301218174C84908AA6E -:1082E000891C0182C8480192001D0221C54A0091E3 -:1082F000029000230396921C07A904A807F0C6F871 -:10830000010031D1E068002832D068460D9901851E -:1083100001218174BA49C91C0182E16808A80A7860 -:10832000027049784170E068418868464184E0689D -:10833000017900E018E008A80171E0680722C1880F -:1083400008A84171090A8171AF4808A9801D0092EF -:1083500001910290412200230396D2000AA904A8A9 -:1083600007F094F8010003D00B98FFF7C3FDF2E586 -:1083700003210E98002F017207D0E8883880E88921 -:108380007880288AB880688AF8800020E3E5F0B514 -:1083900001248BB016460F46012802D002281BD1BB -:1083A00004E0684605218474C90202E068469749E2 -:1083B00084740182002F11D0032100208902884398 -:1083C0000121890241186846018506AA05A9384697 -:1083D00008F0A7FF002803D00720A5E41020A3E49D -:1083E000894DB8782E3D287338882F46203F7885F0 -:1083F0006A46127D0020294606AB00920E31019399 -:10840000FF32029103900346FF3203320AA904A807 -:1084100007F03CF8002802D0FFF769F884E4002E4A -:1084200001D0F88D30802C7200207DE470B592B0C0 -:108430000446012508A8857075496846018406F040 -:108440009CFF002208A90120FFF7A1FF064606F0C5 -:1084500098FF30003AD120780024C00700283FD090 -:108460001C2168460CF077FC684601782020014307 -:108470006846017008A885706649684601841194B1 -:108480000794817FF9200140891C6846817700208C -:10849000014668460177002001466846417704217D -:1084A0008185C485018607A80A9011A80D9008A8A7 -:1084B000099006F062FF0EAA09A96846FFF729FD98 -:1084C000054606F05EFF002D02D0284612B070BDB2 -:1084D0004D486946098F4E3801816946898F41812F -:1084E00049482E3804720020F0E7F7B5464E9CB09C -:1084F00000212E3E0091317A012904D0022902D0B8 -:1085000008201FB0F0BD40494E39CA8D824201D0CB -:108510000620F6E71D98824201D10720F1E73B488B -:10852000012110AA9176401C1083002003239B0296 -:1085300002469A438B02D31810AA93846A46918408 -:108540003549D18410AA9077908317AA0A926A4677 -:1085500091850C9009A807F051F80024254627467C -:1085600004A909A807F04DF8002810D082287BD173 -:10857000002C7CD0002D7AD010A8048145810024E5 -:10858000047518A8807812AD012872D07AE0684688 -:10859000807D002F1FD0012862D16846818A1B4848 -:1085A000401C814219D114A800906846408A0EAB45 -:1085B0001022002107F08DF8002877D110A8008A3A -:1085C000042801D006285BD16846018F1D9881429E -:1085D00046D10F2095E7012842D16846808A0521BF -:1085E000C902884202D0491C884239D106484E3817 -:1085F000C18D6846408A814210D101270FE00000FA -:1086000001290000010200003A14002001280000A6 -:1086100001180000052A0000FFFF00000027002CC1 -:1086200001D0002D0DD01D99884219D114A90091B7 -:1086300004460EAB1022002107F04BF8002835D17C -:1086400001E0009D0CE010A8008A022801D010284B -:1086500016D1C0B218AA0EA908F03DFE00280FD10D -:108660006846408A00907BE720E000E001E00520BA -:1086700047E72A1D15A918A808F053FE002801D0C5 -:1086800003203EE710A8007D0023001DC2B210A801 -:1086900002751E98029019A901950394009216A8DC -:1086A00006F0F4FE002801D102213172FEF71FFF0F -:1086B00027E73EB50B46401E84B201AA00211846AA -:1086C000FFF751F806F059FE02A8009001AB012215 -:1086D0000021204606F059FE044606F052FE684688 -:1086E0000089012803D0FE49FE480CF072FC2046A8 -:1086F000FEF7FDFE3EBDF0B5FB4E0446307A89B074 -:108700000F46032804D0042802D0082009B0F0BD89 -:1087100004AA06A92046FEF7E8FF0500F6D1F248B4 -:108720002389383022690146103902910093019261 -:10873000039069460A8A638906A9206806F0A6FEA6 -:10874000002802D0FEF7D3FEE0E7002F03D0E64872 -:10875000203000893880042030722846D6E738B5AA -:108760000C00054608D00022694607F00CF80028E6 -:1087700004D0FEF7BCFE38BD102038BD6946204647 -:10878000FEF75DFF0028F8D1A0786946C207D20F36 -:10879000284607F013F8ECE73EB50C0008D002AA13 -:1087A000694606F0F0FF002804D0FEF7A0FE3EBDAB -:1087B00010203EBD032120460CF0CBFA684600880D -:1087C00001A90005800FFEF726FF00280BD168469F -:1087D000007920706846008801A98004800FFEF7A8 -:1087E0001AFF002801D003203EBD68460079607062 -:1087F000A278EF20024068460088C10B09010A43B5 -:10880000F7210A404104C90FC9000A43A270F921A7 -:108810000A40800601D5012000E0022040006946A0 -:108820000243097A50084000C907C90F0843A070E5 -:1088300000203EBDFEB51D4614460E46074606F016 -:108840009CFD01A8009022882B463146384606F050 -:108850009CFD054668468088208006F092FD2846EB -:10886000FEF745FEFEBDF0B50C46002199B0074667 -:10887000684681850D46002C11D0E068002806D09E -:10888000A06800280BD002886B469A850180A078EA -:10889000012806D0022804D0072019B0F0BD10200E -:1088A000FBE72088002807D0401E80B201A906F00F -:1088B0007EFE002842D136E08C48EEE769468A8980 -:1088C00021888A420BD26846007C002501282CD1E1 -:1088D0006846C0898649884227D1012525E08A4219 -:1088E00003D1002D2FD06D1C01E0022D02D0032DED -:1088F0001BD31FE06946097C012916D169467C4BD0 -:10890000CA895B1ED11A9A421DD005DC7948101A1B -:1089100019D0012809D116E0012914D0FF390139F5 -:1089200003D1032506E00D26B60201A806F047FE96 -:108930000028C3D0822804D0002806D0FEF7D7FD37 -:10894000ABE7022DFAD13046A7E7E068002813D044 -:1089500006F013FD0BA800906A46A1882088928D2E -:10896000E36806F012FD054606F00BFD002D19D157 -:108970006846A168808D088002980078C00601D5FD -:108980005D488AE706F0F9FC0EA8009068468089E9 -:108990000CAB0222002106F09CFE054606F0F1FC1D -:1089A000002D01D02846C9E76846008F022801D073 -:1089B000032072E7A078012808A8007C03D0800774 -:1089C0000ED4082069E7C007FBD00820FEF7C8FADC -:1089D000072802D34548401C5FE70825022001E034 -:1089E000022503206946087621886846818317217D -:1089F000818611AA002302320DA906A806F08EF97D -:108A0000002802D0FEF7DBFD47E70FA8009068467C -:108A1000838E042229463846FEF7B8FA3DE770B542 -:108A2000064615460C460846FEF71EFD00280AD1EC -:108A300006F0A3FC2A4621463046FFF7A8FC044670 -:108A400006F09FFC204670BD70B514460D460646E4 -:108A500006F093FC224629463046FFF746FD0446C1 -:108A600006F08FFC204670BD70B51E4614460D0002 -:108A70001AD0002C18D06168002915D00121FEF70A -:108A800071FF00280FD12068FEF7EEFC00280AD104 -:108A900006F073FC324621462846FFF73AFA0446B0 -:108AA00006F06FFC204670BD102070BD70B51546F5 -:108AB0000C0023D00221FEF755FF00280ED12068BC -:108AC000FEF7D2FC002809D106F057FC29462046C3 -:108AD000FFF711FE044606F054FC204670BD00006E -:108AE000607D00003E0600000C14002003300000F2 -:108AF0000328000000280000013400001020EDE7EA -:108B0000FEB507460E4607201546400701211218FC -:108B100089031C468A4219D2002C02D020188842B0 -:108B200014D2384600F045FA00280AD1002C0FD1A3 -:108B300001AA6946384606F026FE002802D0FEF754 -:108B4000D6FCFEBD68460088800601D41020FEBD1C -:108B500023462A4631463846FFF76CFEFEBDFFB578 -:108B600085B01E4614000F4609D003AA02A9059835 -:108B700006F009FE002804D0FEF7B9FCC6E5102077 -:108B8000C4E568460089C00601D5FB48BEE506F08D -:108B9000F4FB01A800900023F84A3946059806F036 -:108BA00098FD054606F0EDFB002D11D1002E0CD0EE -:108BB00006F0E3FB002000902288334639460598F2 -:108BC00006F087FD054606F0DCFB684680882080BD -:108BD0002846D1E7002906D0E94B0A885B899A42EA -:108BE00001D8E84870473EE610B586B004236C46CD -:108BF000A382E34B1C89002C07D05B898B4201D2F6 -:108C0000914204D9DF4806B010BD0620FBE76B4651 -:108C100019825A820021009101911C8002219970D1 -:108C200005A9029104A903916946FFF71CFEEAE732 -:108C3000F0B591B00D4681206946087105F09CFCA5 -:108C40000646002D08D02878CD4C012806D00228F1 -:108C500028D0072011B0F0BD1020FBE7A98801AA99 -:108C6000FEF778FC0028F5D1B00734D568460079C6 -:108C7000002820D1A879C0071DD006F07EFB002077 -:108C800000906A892989A088EB6806F07EFB694616 -:108C9000087106F076FB6946087900280BD0FEF7CC -:108CA00026FCD7E7A98801AAFEF754FC0028D1D1F9 -:108CB000342006420FD00121684601720173017908 -:108CC0004173F00609D5A18868460182A18A018313 -:108CD0002069059004E00820BCE7A0886946088266 -:108CE000FAF731FB05461720694688830AAA2B4606 -:108CF000023207A902A806F011F8074668780007B3 -:108D000001D5FAF73CFB002F03D03846FEF757FC9D -:108D1000A0E7F00603D5207B062108432073B006A8 -:108D200002D50020FEF776FE08A8009069468B8BDE -:108D3000208804220121FEF729F98BE7F0B50026EF -:108D400095B014460D4600290FD0022C4FD3A71E14 -:108D5000BAB28A480AF052FE29191039CA7B8B7BB5 -:108D600011021943884242D1BCB201A9012006F088 -:108D70001EFC7AE0029F3888010776D5002D41D08D -:108D8000A9190691CA788B78361D1102B6B219431B -:108D90008919A1422BD869468A8906994B780978A6 -:108DA0001B020B439A4222D1C00623D506F0E5FAF6 -:108DB00007A800900698AB19C17880780A02069936 -:108DC00002434878097800020843002106F0DDFAE2 -:108DD000009006F0D6FA009800283ED10698C17897 -:108DE000827808026946898B1043884202D00B20A2 -:108DF00015B0F0BD0698C17882780802104380193A -:108E000086B22EE0C0062CD5002007AA01461154D8 -:108E1000401C80B21028FAD306F0AFFA06A80090E2 -:108E20006846002380891022194606F052FC009003 -:108E3000002803D006F0A5FA00980EE00BA86946BA -:108E4000009088890A8B07AB002106F09EFA0090FB -:108E500006F097FA0098002803D0FEF748FBC7E712 -:108E600003E0388810218843388001A806F0A7FB6A -:108E7000002800D17EE7424D6988002921D00122D7 -:108E800068460276027700244477018417218185A1 -:108E90000EAA234602320BA906A805F03FFF0028C0 -:108EA00002D0FEF78CFBA3E70CA8009069468B8DDF -:108EB000288804220121FEF769F8002898D16C80E7 -:108EC00096E7002094E7F0B5002487B015460E46DB -:108ED000002A04D002A9012006F069FB41E010201D -:108EE00007B0F0BD0398007800073AD506F045FAC0 -:108EF00001A8009068460023008A204A194606F01F -:108F0000E8FB074606F03DFA002F23D1002E23D0C0 -:108F100068468088298820183719001D814239D376 -:108F20006946098A3970090A797069468988B97071 -:108F3000090AF97006F021FA01A869460090088A2A -:108F40008A883B1D002106F0C4FB074606F019FA8B -:108F5000002F01D00320C3E7684680882018001D39 -:108F600084B202A806F02BFB0028BBD082280BD0CD -:108F7000FEF7BDFAB4E7000001340000FFFF000077 -:108F8000EC13002003300000002E0ED02988A01C16 -:108F9000814201D20C20A3E72246314639480AF02B -:108FA0002DFD31190870000A4870A41C2C80002087 -:108FB00096E700B585B06946FEF741FC00280AD166 -:108FC0006846007C03000CF0F5F808052F2F2F2FC2 -:108FD00008080531032005B000BD684680780128E7 -:108FE00007D1684600880321C902401A1CD0012815 -:108FF0001AD068468079012806D1684680881521F4 -:109000004902401A05280FD96846807A012811D1F3 -:109010006846018929200002081A05D0022803D0D9 -:10902000032801D0042805D10F20D4E7164917489A -:109030000BF0CFFF0020CEE738B5154A0021518054 -:1090400003791AE0CC002418A46800946C462488A4 -:10905000250707D5E50605D5D90008182038C08BA7 -:10906000508006E0640406D59171C9000818C088D4 -:109070009080012038BD491CC9B28B42E2D8002043 -:1090800038BD0000FFFF0000607D000033020000DB -:10909000EC1300200120F8494006C861704770B504 -:1090A000F54D0024AC7028466C7020304470047478 -:1090B0006C61AC72AC6209F01AFFA86128463430CA -:1090C0000AF0B4FD002804D0FF20ECA13A300BF0E8 -:1090D00080FFEE48C46301204006E86170BD70B5B2 -:1090E0000125EB4902260E60E849CD63E949C96ACA -:1090F00009070ED4E7494031CB6AE74A53620B6B4C -:1091000093624B6BD3628B6B1363C96BD3051943AB -:109110005163D949E14CC96900282BD001282DD0D1 -:10912000FF20D6A169300BF054FFDD48A063FF207B -:10913000043060632563DB49032008602061D74960 -:10914000962040314860D948D7494163D549FC3918 -:109150000163D549091FC163D249F03981630320F6 -:10916000D249000340394860D14910204860D148B5 -:10917000066070BDD0486061D04804E0CF48E03060 -:109180006061CE48801F0143A161CEE7BA4901204A -:1091900008707047B84900200870704770477047E2 -:1091A000BE4940310028086802D00122104301E086 -:1091B000400840000860704770B50C46AE4D01464F -:1091C0000622E81C0BF068FD6C7270BDAA482030C6 -:1091D00040787047A84A91705070704770B50D463E -:1091E0000446082904D9FF20A4A1C6300BF0F1FEE3 -:1091F0000022B34809E09100635809180B6053003E -:109200001B191B8C0B62521CD2B2AA42F3D3206BE7 -:10921000AB494031086070BD0B23DB4310B5C21A67 -:109220009E4998421FD008DC1C3222D00A2A20D046 -:10923000142A1CD0182A08D117E0083011D00428AD -:109240000DD0082809D00C2805D0FF208BA1F230C2 -:109250000BF0BFFE10BD04200CE000200AE0FC2053 -:1092600008E0F82006E0F42004E0F02002E0EC2022 -:1092700000E0D820C86010BD7F482030007B7047D8 -:1092800010B5864CC17861620BF067FD0002E061A9 -:1092900010BD252808D0262808D0272808D041004E -:1092A0000A2807D8091D06E0022105E01A2103E07B -:1092B000502101E0891DC9B2784A91607749403157 -:1092C000486170476C494861704770B56A4CA0723C -:1092D00000F01FFBA07AC00740D0724D28688007BD -:1092E00003D466A177480BF074FEA07A01061DD561 -:1092F000800707D5734861A1801C0BF06AFEA07A35 -:10930000000613D52078694E012816D0002804D015 -:109310006C485AA111300BF05CFE6B487061A0697B -:109320003061FF206149013040394860A07A8007F0 -:1093300014D52868C00708D102E06348001FEDE794 -:1093400060484EA11A300BF044FEA07A400728680E -:1093500001D5042100E008210843286070BD70B5E4 -:109360000124454D002807D0012818D002281AD022 -:10937000232042A100010BE000F0CBFA52482978EB -:10938000001F012907D0002907D04E483BA15738BC -:109390000BF01FFE70BD046070BD446070BD812085 -:1093A000FFF793FF70BD00F0B4FA6869002804D19C -:1093B000444832A14F380BF00CFE6969A86A401886 -:1093C0004249C86039484249403001603E490C3149 -:1093D00041600814354940394860274820300474FA -:1093E00070BDF8B50C2069460870314C6068C00645 -:1093F000C50F1026A66034480021FC300161324BB5 -:1094000001221B1F1A610BE000BF00BF00BF00BF9D -:1094100000BF00BF00BF00BF6B461A78521E1A7013 -:109420006A461278002A02D00269002AECD0016153 -:1094300068460078002804D1912010A180000BF02C -:10944000C8FD002D00D06660F8BD0B490020C86142 -:10945000704710B50BF081FC00021049000AC86388 -:1094600010BD0B49022008607047094902200860BE -:109470001049086070470000481400207372635C54 -:1094800068616C5F7263732E63000000C01F004050 -:1094900080E100E08000001000170040001500404F -:1094A0005B060000001200404480004040F501408F -:1094B0000013004080E200E00601020025000300E6 -:1094C0000016004075020000041000404085004076 -:1094D0004C810040F74902200860CBE7F64908704C -:1094E000C8E710B5F5480AF0A9FB002803D0F449F5 -:1094F000F4480BF06EFD10BD10B5F0480AF0B6FB55 -:1095000010BDF1494860B5E7EC4910B53439EF4B6F -:109510000022C8605A60896A0818ED49486000F066 -:10952000FFF910BDE54810B5C2213438C160E74AE3 -:1095300000215160806AE649C230486000F0F0F9CD -:1095400010BD0120E34940028860DC490020343925 -:10955000C860DF4948608DE7D84900203439886207 -:1095600088E7D648DA493438806AFE30886081E777 -:10957000D749002088607DE7D748016810229143D1 -:109580000160D6490120886174E7D5490020C8618F -:10959000D14801681022114301606BE700B5FFF765 -:1095A000EBFFC64900203439087400BD00B5FFF751 -:1095B000ECFFC24901203439087400BDC849CA69AA -:1095C000012A01D0002055E7BF4A40329268520676 -:1095D000520E524202700020C86101204AE7F8B5DD -:1095E000BF4C2069012806D00021B44834380078E7 -:1095F000012802D004E04021F7E7E268012A04D004 -:1096000000220A43012802D004E02022F9E7616821 -:10961000012905D000211143B24A002802D007E0F9 -:109620001021F8E71368012B02D1E368012B04D065 -:1096300000230B43002802D007E00823F9E7116854 -:10964000002902D1E168012905D000221A439F4E6A -:10965000002802D004E00422F8E77168012904D050 -:1096600000211143002802D004E00221F9E76068DC -:10967000012829D000259C480D4301680906090EE0 -:1096800002D06169012900D000218C4F143F397349 -:1096900000680006000E02D0A069012800D000205A -:1096A00078738B488068002803D000F03DFA0128C9 -:1096B00000D00020B8730021E16021616160616128 -:1096C000A16171602846F8BD0125D4E77B480121DE -:1096D0001438C173CEE6F8B5784E0127143E307CBD -:1096E0000025002825D07C4C206800902560FFF7DD -:1096F00078FE009820607A48C56005614560456144 -:1097000085617449001488603046203801787348B8 -:1097100001290AD000290AD0D920694980000BF01C -:1097200058FCF9F775FC3574F8BD0760F9E7476038 -:10973000F7E7FFF754FF04460020F07364484268DF -:109740005E4D343D6A620068A8622978002909D11B -:10975000A978002906D05C4B5B681B780B406978C0 -:10976000994309D000213170E10707D0104602F07B -:1097700029FD0121A86A08E03770F5E7A10601D5A7 -:10978000022102E0A10702D5002102F02AFD4E4F7E -:10979000796806220931E81C0BF051FA002807D13C -:1097A000687A79680978C909884201D1012000E006 -:1097B00000207070204600F0BDF83F48C2270078B6 -:1097C000002815D0012828D002283BD003285AD0E1 -:1097D0003B4946480BF0FDFB287C002804D0287844 -:1097E000002865D0FFF7C8FE2878002861D089E0FE -:1097F000A00701D501F0CCFB200703D50120EF60C5 -:1098000001F0FEFB600703D50020EF6001F0F8FBDC -:10981000A006E1D501F068FBDEE7A00701D503F063 -:1098200026FF200703D50120EF6003F09FFE6007AD -:1098300003D50020EF6003F099FEA006CCD503F01D -:1098400020FEC9E7A00703D5BF200440F9F7D2FBEB -:10985000200705D5BF2004400120EF60F9F7C9FBC0 -:10986000600705D5BF2004400020EF60F9F7C1FB79 -:10987000A00603D5BF200440F9F7BAFB6006ABD5BC -:10988000F9F7B9FBA8E7A00701D5F9F7B7FB20075F -:1098900003D50120EF60F9F7B0FB600703D5002086 -:1098A000EF60F9F7AAFBA00696D5F9F7A5FB93E7B9 -:1098B0001EE020E000E100E0600000207C140020B9 -:1098C0007C940000AB020000001500404081004085 -:1098D0004085004000F501400012004000100040AB -:1098E00000110040001400404016004094040000A5 -:1098F000FFF74BFE78E7E868002803D0A96A09184B -:1099000028484160F07B002800D10DE7F9F780FB83 -:10991000F8BD254903200860881524498860A9E519 -:10992000224823494030C161224981611F494015C5 -:1099300048609FE570B50546FFF7EBFF1E4CA17A26 -:10994000080701D568071CD41C4AC80605D5507BFA -:10995000002802D0907B002813D0880602D510780A -:1099600000280ED1480602D55078002809D00020E2 -:109970008A070026002A07DA4A0704D50122227046 -:1099800002E00120F4E72670CA0709D0AA0705D42F -:10999000890705D5002803D0A80601D4FFF721FDCB -:1099A000A67270BD408500400012004000F50140E5 -:1099B000101000404481004048140020681400202A -:1099C0002E48002101704170704770B5064614465C -:1099D0000D460120F7F780FE28490120284B08702A -:1099E0009E60DC601D6170BDF8B504460120F7F78C -:1099F00073FE22490120087021494C60214900264C -:109A00004E600321204D8902A960204F002C0AD00E -:109A1000012C03D01EA140200BF0DBFA3E60032096 -:109A200080026860F8BD386001208002F9E710B557 -:109A30001248017800290ED00321134A890291604F -:109A400010494A680021002A03D0154A1268427062 -:109A500000E0417001700020F7F73EFE10BD07489E -:109A60000178002907D007484068002802D00C4838 -:109A70000068C0B270474078704700006100002065 -:109A800000F5004000F1004000F5014000F2004008 -:109A90007372635C68616C5F63636D2E63000000CA -:109AA00000F400403648002101704170102181709F -:109AB000704770B5064614460D460220F7F70CFEB7 -:109AC00001202F492F4A0870E41E146196605560EA -:109AD00070BD10B50220F7F7FFFD2949012008707D -:109AE000294800210160416081602849C014486014 -:109AF00010BD10B5224C2078002811D00120234938 -:109B0000C002886000F02EF80021002804D0012057 -:109B100060701F48006801E061701020A070217023 -:109B20000020F7F7D9FD10BD10B5154801780029C0 -:109B300005D000F017F8002800D0012010BD4078B3 -:109B400010BD10B50E480178002909D000F00AF8C0 -:109B5000002803D00E480068C0B210BD102010BD10 -:109B6000807810BD08480168002905D041680029A7 -:109B700002D08068002801D0002070470120704783 -:109B80006300002000F5004000F1004000F50140B6 -:109B900000F4004010B528210BF0DBF810BD407830 -:109BA0008006800E704740788006800EC01C70478B -:109BB0002820704770B5054600780A0700090001A3 -:109BC000120F104328700B000BF0F4FA070507057D -:109BD000070509050B00062408E00C2406E02224F2 -:109BE00004E00024FEA158200BF0F3F96878800906 -:109BF00080012043687070BD00780007000F704737 -:109C000010B50622C01C0BF047F810BD0B4610B56E -:109C1000C11C062218460BF03FF810BD10B50622F5 -:109C200009300BF039F810BD0B46014610B506227D -:109C3000093118460BF030F810BD0278BF23C90770 -:109C40001A40490E0A430270704700784006C00F60 -:109C5000704702785206520EC9010A4302707047DB -:109C60000078C009704770B50C460546C11C2046F7 -:109C7000062209300BF010F820784006400E2070C4 -:109C800029784906C90FC9010843207070BD70B515 -:109C900015460E4604461F2A03D9D1A1A9200BF070 -:109CA00098F920462A46314609300AF0F5FF6078D7 -:109CB000AD1D80098001A906890E0843607070BD42 -:109CC00070B5054640780E468406A40E062C03D2D5 -:109CD000C3A1B9200BF07DF9A41FE4B21F2C00D959 -:109CE0001F2429462246093130460AF0D5FF204676 -:109CF00070BD70B515460E4604461F2A03D9B8A19B -:109D0000CD200BF066F920462A46314609300AF08C -:109D1000C3FF6078AD1D80098001A906890E084344 -:109D2000607070BD70B5044640780E468506AD0E75 -:109D3000062D03D2AAA1DE200BF04BF9AD1FEDB228 -:109D40001F2D03D9A6A1E2200BF043F921462A4694 -:109D5000093130460AF0A0FF284670BD10B5042234 -:109D60000F300AF099FF10BD0B46014610B50422D2 -:109D70000F3118460AF090FF10BD10B503221330C2 -:109D80000AF08AFF10BD0B46014610B503221331BD -:109D900018460AF081FF10BD4176090A81767047A6 -:109DA000817E427E080210437047C176090A01771E -:109DB0007047017FC27E0802104370474177090A4D -:109DC00081777047817F427F080210437047C175D9 -:109DD000090A01767047017EC27D08021043704770 -:109DE00081757047807D704720300279C90652091D -:109DF0005201C90E0A430271704720300079C00633 -:109E0000C00E704720300279D206D20E49010A43B3 -:109E100002717047203000794009704710B5052263 -:109E20001F300AF039FF10BD0B46014610B5052260 -:109E30001F3118460AF030FF10BD30B5411C837E3B -:109E40000A461902D37D447E927D1B0221431343AF -:109E5000674D827D8C1FAC4210D8002A0ED0082A94 -:109E60000CD88A420AD28B4208D8817F427F0802EE -:109E70001043A91D884201D8012030BD002030BD0B -:109E800000210A464254491C2229FBDB70474078D6 -:109E9000C006C00E70474078C006C00EC01C704798 -:109EA0002220704710B502788B07920892009B0F12 -:109EB0001A4302704278520952014270012908D0B7 -:109EC000022906D0032905D0FF2045A1A3300BF0BD -:109ED00080F810BD01210A43427010BD10B5027810 -:109EE0008B07920892009B0F1A4302704278520926 -:109EF00052014270012908D0022906D0032905D059 -:109F0000FF2037A1BD300BF064F810BD01210A43DA -:109F1000427010BD00788007800F70470278FB23E5 -:109F2000C9071A40490F0A4302707047007840077A -:109F3000C00F70470278F723C9071A40090F0A4378 -:109F40000270704700780007C00F70470278EF2357 -:109F5000C9071A40C90E0A43027070470078C0064C -:109F6000C00F704770B50546C1700B000BF022F9A9 -:109F70000E080A0C0E1012120C14141212160C18E1 -:109F80000C2413E0082411E002240FE017240DE054 -:109F90000D240BE0012409E0092407E0062405E074 -:109FA000452000240EA1C0000BF013F8687840098A -:109FB00040012043687070BDC078704770B504469A -:109FC00040780E46C506ED0E1B2D03D904A10948A5 -:109FD0000AF0FFFF6019C01C042231460CE00000AB -:109FE0007372635C756C5F7064752E6300000000B3 -:109FF0007A0C00003A0200000AF04EFE70BD70B507 -:10A00000044640780E46C506ED0E1B2D03D9A04927 -:10A01000A0480AF0DEFF6119C91C042230460AF08C -:10A020003BFE70BDC171090A01727047017AC279A5 -:10A030000802104370474172090A81727047817AA1 -:10A04000427A080210437047C172090A01737047CF -:10A05000017BC27A0802104370474171090A81717D -:10A060007047817942790802104370470171704747 -:10A07000007970474173090A81737047817B427B85 -:10A0800008021043704730B5411C037A0A46C47970 -:10A0900019022143537914791B0223437E4D007921 -:10A0A0008C1FAC4210D800280ED008280CD888424B -:10A0B0000AD28B4208D8D07A917A00020843A91DAF -:10A0C000884201D8012030BD002030BD10B50522E6 -:10A0D000001D0AF0E1FD10BD0B4610B5011D052263 -:10A0E00018460AF0D9FD10BD4172090A8172704705 -:10A0F000817A427A080210437047017170470079F3 -:10A10000704710B50822001D0AF0C6FD10BD0B46B1 -:10A1100010B5011D082218460AF0BEFD10BD0A78D0 -:10A120000273497841737047027B0A70407B487024 -:10A13000704710B508220E300AF0AEFD10BD0B4678 -:10A14000014610B508220E3118460AF0A5FD10BDD3 -:10A1500010B5042216300AF09FFD10BD0B460146D3 -:10A1600010B50422163118460AF096FD10BD10B540 -:10A170000822001D0AF090FD10BD0B4610B5011D10 -:10A18000082218460AF088FD10BD10B504220C30D4 -:10A190000AF082FD10BD0B46014610B504220C31B9 -:10A1A00018460AF079FD10BD017170474171090A26 -:10A1B00081717047C171090A017270470079704757 -:10A1C00081794279080210437047017AC279080206 -:10A1D00010437047017170470079704701717047F3 -:10A1E0000079704710B50822001D0AF055FD10BD1A -:10A1F0000B4610B5011D082218460AF04DFD10BD92 -:10A2000010B50822001D0AF047FD10BD0B4610B521 -:10A21000011D082218460AF03FFD10BD70B5154615 -:10A220000E4604461B2A04D93720194900010AF0BA -:10A23000D0FE2A463146E01C0AF02EFD6078E90681 -:10A2400040094001C90E0843607070BD70B50546F5 -:10A2500040780E46C406E40E1B2C04D9DF200C49BE -:10A2600080000AF0B6FE2246E91C30460AF014FDD2 -:10A27000204670BD4078C006C00E1B2801D80120C2 -:10A2800070470020704710B522220AF005FD10BD6E -:10A29000E09F0000430200007A0C0000FEB50F466C -:10A2A00004460146064620302546C031603640351A -:10A2B0000190032F04D0002F2DD0012F2BD04BE085 -:10A2C00000206080A080E08020816081A082E08505 -:10A2D000E0826874A074E074A076E076A073E07306 -:10A2E00020746074019B987401232B74A8822883C6 -:10A2F0000876E883B0706883A873E8732077607786 -:10A30000019988720199087430727072B072327457 -:10A31000B074A883FEBD0020A8822883012F52D0EC -:10A32000E08B0090608C0290C00000990AF02EFD36 -:10A33000401C80B2E8820099192241439202914266 -:10A3400001DD401EE8827D20000200990AF01EFD1A -:10A35000401C3080002F01D0022FDBD10198007A01 -:10A36000C1060198C90E01720020687322182421C9 -:10A370008B5C4032D9075B08DE07C90FF60F7118F6 -:10A380005B08DE07F60F71185B08DE07F60F711821 -:10A390005B08DE07F60F71185B08DE07F60F711811 -:10A3A0005B08DE07F60F76185908891911726A7B67 -:10A3B000401C5118C0B269730528D7D3002FA9D10A -:10A3C0000020A874FEBD4A7F2046E030022A12D049 -:10A3D000097F022913D050A173200AF0FAFD012051 -:10A3E00000900290E08BA98B484300990AF0DCFCB6 -:10A3F000A883029898E7818800910089F1E7018A93 -:10A400000091808AEDE770B504464034667B0546CE -:10A41000002E68D0252E66D8002964D03E20405DED -:10A42000A27B4843101825210AF0B0FC0846A1730E -:10A430004207C908520F3C4B691820319A5C0979D0 -:10A440008A4367D031460AF0A1FC491CCAB20020F9 -:10A4500006E0002804D029184031C979511ACAB23F -:10A46000291848235B5C93423AD320310979C943C8 -:10A47000CB07DB17D21A521E1206120E34D08B07EE -:10A48000DB17D21A521E1206120E2FD04B07DB1703 -:10A49000D21A521E1206120E2BD00B07DB17D21A3D -:10A4A000521E1206120E27D0CB06DB17D21A521EEE -:10A4B0001206120E23D08B06DB17D21A521E12067A -:10A4C000120E1FD04B06DB17D21A521E1206120EA6 -:10A4D0001BD00906C917511A491E0A06120E17D0B9 -:10A4E000401C0528B5DB70BDC00013E0C000401C57 -:10A4F00010E0C000801C0DE0C000C01C0AE0C000DD -:10A50000001D07E0C000401D04E0C000801D01E008 -:10A51000C000C01DE07370BD7372635C6C6C5F75CE -:10A5200074696C2E63000000EC51010010B5FF4807 -:10A530000021017041708170C17041718171C171E0 -:10A54000083009F073FB002804D0FF20F8A1843004 -:10A550000AF03FFD10BD10B5F44900204872081DF7 -:10A5600009F064FB002804D0FF20F1A1C3300AF0F9 -:10A5700030FDFFF7DBFFF148FFF782FC0021EF48D9 -:10A58000FFF7E4FC0121ED48FFF78CFC10BDE2E78A -:10A590001B207047E5494A7A002A01D00020704705 -:10A5A000488101204872704710B5E0494A7A002A74 -:10A5B00002D04989814201D0002010BDDB48001D36 -:10A5C00009F03CFB002804D0FF20D9A1B4300AF0E8 -:10A5D00000FDD648001D09F049FBFFF7A7FF012049 -:10A5E00010BD70B5D14C0025627A002A02D0628974 -:10A5F000824201D00D700DE0227863789A4203D335 -:10A6000022786378D21A04E062782378D21A102371 -:10A610009A1A0A70FFF7C8FF002801D0657201205E -:10A6200070BDC2494A7A002A04D04989814201D1C9 -:10A630000120704700207047BC490A784B78521CB3 -:10A640001207120F9A4207D0097822225143BC4ABE -:10A65000891801600120704700207047B3480178D5 -:10A660004278491C0907090F914206D00178491C1C -:10A670000907090F01700120704700207047AB499E -:10A680004A7A002A04D04989814201D101207047C9 -:10A6900000207047A5490A784B789A4207D049783C -:10A6A00022225143A64A89180160012070470020E8 -:10A6B000704710B59D4C20786178884216D060783C -:10A6C000401C0007000F6070201D09F0B7FA002839 -:10A6D00004D0E078401CE070012010BDA078401C40 -:10A6E000A0709248001D09F0C1FAF5E7002010BDE6 -:10A6F0008E4801784078814201D1012070470020C6 -:10A7000070478A4801784278914202D301784078B4 -:10A7100003E041780078081A1021081AC0B2704787 -:10A720000F20704770B5814C0D46617A002916D014 -:10A730006189814213D100262E70201D09F07EFA16 -:10A74000002805D1A0782870A670201D09F08EFA87 -:10A750002878E17840182870E670012070BD00204C -:10A7600070BD76490160704770494A7A002A04D06A -:10A770004989814201D101207047002070476B490F -:10A780004979002901D0002070476E4901600120FD -:10A79000704766484179002901D0002070470121A7 -:10A7A00041710846704761494A7A002A04D04989B4 -:10A7B000814201D101207047002070475B494979EF -:10A7C000012901D0002070475E49016001207047D7 -:10A7D00056484179012901D000207047002141717C -:10A7E0000120704751484079012801D0012070476D -:10A7F000002070474D494A7A002A04D04989814295 -:10A8000001D1012070470020704770B5474C0546C4 -:10A81000A0790721401C0AF0B9FAE079814208D0FA -:10A82000A07922214843474922314018286001205D -:10A8300070BD002070BD10B53C4C0721A079401CB4 -:10A840000AF0A4FAE079814207D0A0790721401CE0 -:10A850000AF09CFAA171012010BD002010BD334800 -:10A860008179C079814201D1012070470020704771 -:10A870002E494A7A002A04D04989814201D1012017 -:10A8800070470020704710B504462848083009F08A -:10A89000D5F9002815D125498879CA7990420CD07C -:10A8A000C8792221484327492231401820601F4897 -:10A8B000083009F0DBF9012010BD1C48083009F010 -:10A8C000D5F9002010BD10B504461848083009F02D -:10A8D000B5F9002815D115498879CA7990420CD06C -:10A8E000C8792221484317492231401820600F4877 -:10A8F000083009F0BBF9012010BD0C48083009F000 -:10A90000B5F9002010BD094810B5083009F096F9D6 -:10A91000002822D1054CA079E17988421AD0E0794B -:10A920000721401C0AF032FAE1710DE066000020B8 -:10A930007372635C646D5F712E630000B01700205A -:10A9400080140020A01600202046083009F08EF95F -:10A95000012010BD0C4809F089F9002010BD0A48FB -:10A9600008388179C079814201D1012070470020E7 -:10A970007047054808388179C079814201D10120AA -:10A9800070470020704700006E000020704770473D -:10A99000FF207047704770470020704700207047C5 -:10A9A000002070470020704700207047002070474B -:10A9B000002070470020704700207047012070473A -:10A9C000002070470020704700207047002070472B -:10A9D000F8B5FF4D0446A87F002600280CD00029BA -:10A9E00023D1667010202070E87FA07028462030A8 -:10A9F0000078E070AE7718E0287A012801D00020B6 -:10AA0000F8BD002911D16670F149687A01270A3131 -:10AA1000002801D0132000E0052020701422A01C83 -:10AA20000AF03AF9A7716E722E720120F8BDF8B5DE -:10AA3000E8480078002802D00C273846F8BD0027E7 -:10AA4000E34D3C46203DAF74EF746F75AF752F75C5 -:10AA500028466F732038DE4E47737771E87D0028F3 -:10AA600004D0FEF785FDFFF744F8EC75347274727C -:10AA7000B477D7482430FFF78DF8D5484C30FFF72E -:10AA800089F8DAE710B5D34C00232370D04C203C72 -:10AA9000E375CF4B01241C71603B583307C3FFF7AC -:10AAA000C6FF002804D0FF20CBA102300AF091FAA3 -:10AAB00010BDC7482038807C7047F8B5C44D0646A5 -:10AAC000407B203DE873C24837791346AF73B27BB1 -:10AAD00082710446603C217006221946601C0AF00F -:10AAE000DBF8B07960730622F11DE01D0AF0D4F89E -:10AAF000687B0126002800D0EE74B5484038407BC2 -:10AB0000002800D02E75002F09D0012F09D0022F68 -:10AB100024D0032F46D0FF20AFA14D3013E00021F9 -:10AB20001DE0AB4801212430FFF744F8A848E11D9F -:10AB30002430FFF773F8607B002807D0012807D086 -:10AB4000FF20A5A143300AF044FA0CE0002100E008 -:10AB500001219F482430FFF77CF804E006219C483F -:10AB60002430FFF727F800206875A8759848611C05 -:10AB70002430FFF745F8964821782430FFF75DF838 -:10AB8000934804214C30FFF715F89148611C4C3074 -:10AB9000FFF736F88E4821784C30FFF74EF8AE7448 -:10ABA0000020F8BD0221DAE770B5894C0125203C70 -:10ABB0000246A5758648007A002801D03A2070BD6B -:10ABC000834860380378934206D1002262750622DA -:10ABD000401C0AF061F86575002070BD70B5044630 -:10ABE0007B4D0020203D28752846224632380AF049 -:10ABF00053F82846203844730120287570BD7449E5 -:10AC00000871704710B5724C0022203CE2746073EA -:10AC10000246204612380AF03FF80120E07410BDC9 -:10AC2000F8B500F04CFB6A4C0025203CE07D002884 -:10AC300004D0FEF79DFCFEF75CFFE575654E3570B0 -:10AC4000FEF75AFCA07B012804D00021084601F041 -:10AC500082FAF8BD0021022001F07DFA5C4C207AD6 -:10AC60000127002809D0A07F0028F2D10520E07735 -:10AC7000204620300570A777F8BD70780028FBD0FB -:10AC8000534906226039487BE073C91D0846693084 -:10AC90000AF002F83C20A07227727570F8BD10B55A -:10ACA0004B4C203CE17B207CCA0701D0C2070BD073 -:10ACB0008A070FD582070DD42620FEF7EAFA207CFA -:10ACC00002210843207410BD2520FEF7E2FA207C03 -:10ACD0000121F6E74907F6D54007F4D42720FEF70F -:10ACE000D8FA207C0421ECE770B53A4D287800288A -:10ACF0007CD1374C203CA07C00287CD0FEF7F1FBB7 -:10AD00000026267466746E703046FEF7E7FB00205E -:10AD1000FEF7E5F93448FEF7B3FA2546403D296EC3 -:10AD20008857FEF779FA3048C01EFEF792FBFEF70F -:10AD300008FCFFF7B4FFFEF729FAFEF7CBFB012072 -:10AD4000FEF70DFB0F210520FEF744FA2978681C59 -:10AD5000FEF732FAA07B01280AD0E07C002807D059 -:10AD6000214612390846627B5630FEF790FFE674A2 -:10AD7000207D002808D0164840380146427B123911 -:10AD80008C30FEF7B6FF2675607D00280BD010488A -:10AD9000691C2430FEF734FF0D48691C4C30FEF767 -:10ADA0002FFF6675A675E86D0178002903D001783C -:10ADB000001DFEF713FAA86D0178002907D001786D -:10ADC000034A401C7732FEF774FE0120E0750EE066 -:10ADD00034180020740000207372635C6C6C5F6137 -:10ADE00064762E6300000000F751010003E0FEF7D7 -:10ADF00083FB002070BD0C2070BDFB49486070478C -:10AE000070B50546FEF79DFB002D06D00020FEF72D -:10AE10005CFAFEF7BBF9FFF742FFF44C607C0028B8 -:10AE200009D0A07B012803D1F149F2480AF0D1F8FA -:10AE3000FFF7F6FE70BD0126002D05D00220FEF7BB -:10AE40008EFAEA4820304671E8484430FEF759FB54 -:10AE5000012008F0A8FDFEF7A1F9A07B00280FD083 -:10AE600001280DD002280BD003280BD0E148E0497F -:10AE70001E300AF0AEF8E07B217C884306D009E062 -:10AE8000032000E00120FEF720FAF4E7A07B012870 -:10AE900003D06674D448067070BD00202074F9E7B2 -:10AEA00010B5FEF71EFBD048007800280ED1CF4821 -:10AEB000807C00280AD00020FFF7A2FFF6F781FA75 -:10AEC000CA4820300079012806D007E000F0F7F9E1 -:10AED000FEF712FB0C2010BDF8F79AF8002010BD09 -:10AEE000C14901204870704770B500F0DAFF0028B2 -:10AEF0001BD0FF202D30FEF7E5F9BB4E3078BB4C60 -:10AF00002034012814D0022801D003282ED0A520F7 -:10AF1000B74980000AF05DF83078002807D0F6F7CE -:10AF200050FA207901282BD02FE0FFF779FE70BD71 -:10AF3000AE4DA87B032819D0FEF7F4FAE87D00286F -:10AF400003D0FEF7C6FDFEF70CFBA8489430FEF7D1 -:10AF5000D8FA012008F028FDA87B01280BD0A179A0 -:10AF60006F20012906D0032904D004E00120FFF757 -:10AF700047FFD1E77F20FEF7A8F902203070CBE72A -:10AF80006079002801D1FEF7A1FB0020607170BD3F -:10AF900070B5964CE07D002803D0FEF7E9FAFEF785 -:10AFA000A8FD00F07EFF00281CD08F4D28780228D5 -:10AFB00003D08F4990480AF00CF8A07B012814D0E8 -:10AFC000FF202D30FEF77EF90120FFF719FF2878CA -:10AFD000002809D0F6F7F5F9844C203420790128AF -:10AFE00006D00AE0FFF71CFE70BD99208000E9E75B -:10AFF0006079002801D1FEF769FB0020607170BD07 -:10B00000F8B50446FEF738F90746FEF78DFD01282E -:10B0100027D0002674480078022804D07648744966 -:10B020003C3009F0D6FF714DE87D002803D0FEF7D3 -:10B030009FFAFEF75EFDFEF784FA6C489430FEF747 -:10B04000DBFD21006D4C009064D0FEF7BFF80028B6 -:10B0500060D0009803000AF0ADF8065D5D5D065D06 -:10B060001E5D0126D6E7A87B012853D0374304D1C3 -:10B07000A079002801D002284CD160484C30FEF75E -:10B0800040FA012008F08FFC0120FEF71EF9564817 -:10B090000321017045E059487430C178D438C27931 -:10B0A00091421DD10146D4310A79037A9A4217D1CF -:10B0B0004A79437A9A4213D18A79837A9A420FD194 -:10B0C000CA79C37A9A420BD10A7A037B9A4207D192 -:10B0D0000978407B4906C90F814201D1012100E076 -:10B0E0000021A87B012802D0002803D012E000290B -:10B0F00007D10FE0374304D1A079002801D00128FF -:10B1000008D13E487430FEF798FE002802D0A87D92 -:10B11000002810D0FF202D30FEF7D4F80120FFF7D3 -:10B120006FFE3148007800286AD0F6F74AF9207996 -:10B1300001286ED0C0E02C4F30497868042283315A -:10B14000343009F0A9FD2D484021743000784006C4 -:10B15000C20F78680A54294906227731413009F034 -:10B160009BFD2649786803228731383009F094FD29 -:10B1700022483B217430827D78680A541F4974311B -:10B180000A7ECB7D12021A4382878A7E4B7E120290 -:10B190001A43C2830A7FCB7E1102194301841749E7 -:10B1A00074318A7F4B7F1102194341841349052270 -:10B1B0009331243009F070FD10497F68943108798B -:10B1C000C20638462030D20E0090827709794909AC -:10B1D000C177207A00281DD0A07F00285BD1607A3B -:10B1E00000280ED013200DE0740000201418002059 -:10B1F000D8AD0000F9030000BF02000034180020A1 -:10B200005CE00520E0773449002008700120A07739 -:10B2100041E04CE03048E97D1038002924D000217D -:10B22000A172B989A1814021C95DE1733946062225 -:10B23000413109F031FDF88BE082388C2083788C25 -:10B2400060830098C07F2077607F400840003043D3 -:10B250006077FEF776FC617F4000C907C90F0143A4 -:10B2600061770120607215E00021A172B989A18186 -:10B270004021C95DE17339460622413109F00CFDD8 -:10B28000F88BE082388C2083788C60830098C07FB4 -:10B29000207701202072114D0020287000F00FF857 -:10B2A000FEF72AF90120696800F055FF39E7607957 -:10B2B000002801D1FEF70AFA00206071F8BD10B530 -:10B2C000FEF74AF9FEF73DF9FEF78BF80020FDF78F -:10B2D000FCFFFEF7CAF810BD5418002074000020CF -:10B2E0008107C90E002808DA0007000F0838800817 -:10B2F000FD4A80008018C06904E08008FB4A800095 -:10B3000080180068C8400006800F704710B500F034 -:10B310007BFF10BD70B5F64C0546A26800290DD024 -:10B32000002A04D0FF20F3A14C3009F052FEA560A2 -:10B33000F6F748F80220F6F73FF870BD002A04D16E -:10B34000FF20ECA1543009F044FE0020A060F6F785 -:10B350003AF80120F6F738F870BDE5481030C07EA5 -:10B36000002801D00020704701207047E0481030CD -:10B37000C07E7047DE483430C07E70470021C17601 -:10B38000817601600162DA481030C07E002807D162 -:10B39000D7483430C07E002802D1D549012008703A -:10B3A000704710B50B46C17E847EA14204D0114681 -:10B3B000184607F0B4FB10BDFFF7E0FF10BD38B52D -:10B3C000CB4C606801684978012924D00121684686 -:10B3D00006F05EF968460078CA49000209F0D6FC1A -:10B3E00060680268C0685268511807F0B5F9616872 -:10B3F000C860BF49606834310022884215D0018B93 -:10B40000002912D04272032101720271021D017FD4 -:10B41000FFF7C7FF38BD7D21C068C90007F09CF960 -:10B420006168C860B8480861E3E7018B491C018383 -:10B4300002214172E7E7FFB5AD4F02461037386A87 -:10B440003C68056889B060680790A948C1680291A6 -:10B450006B880B98C01A80B208900C98002804D012 -:10B46000264638362046483002E03E1D28466430E5 -:10B47000059003203071002A15D0012A7ED0022ABF -:10B4800052D0032A7BD09BA1A04809F0A2FD0C98C2 -:10B490000028307974D0032804D09C4895A1093045 -:10B4A00009F097FD40E1002904D1984891A169383D -:10B4B00009F08FFD9549A88FA839484340180A998B -:10B4C00000F0A8FEA0619149E88BA83948430A9989 -:10B4D00000F0A0FEE06186488C4AC068A98FA83AB7 -:10B4E000514384464118A069894A091A8A183B21A8 -:10B4F000A262864B495DA83B594341180818FF30AA -:10B500001630206260626046101AFF38ED2135382F -:10B51000C9008842BBD27F49884204D27B4875A1CA -:10B520005C3809F056FDBAE0784AA88FA83AE1687D -:10B53000504308180A9900F06DFEA0617349E88B2A -:10B54000A83948430A9900F065FEE0616848C06880 -:10B55000002804D16D4867A1543809F03AFD5820FD -:10B56000405B6D4A0028A88FE16822D0504308183C -:10B57000A169401AA0622169A06802E022E051E0BE -:10B58000CDE04843A169644A40183B21495D5143DD -:10B5900041180818FF3014302062E88BE1695043ED -:10B5A000411A0F208001081A60625148A16AC068E0 -:10B5B0006DE050430818A169401A3968D3384968CA -:10B5C0004018D7E7284640300290008B002801D071 -:10B5D000002904D14D4847A13C3809F0FAFCE88B1A -:10B5E0004D494843E169401AA062029A138B2269CF -:10B5F0009B1A9C46A3685343A2699A186346594311 -:10B6000051183B22525D444B5A438A185118FF315E -:10B61000143121620F218901411A61623449C968DC -:10B62000401A35E00C98002803D03420005D002833 -:10B6300074D1E88B38494843E169401A0899484376 -:10B64000A062284640300690008B0028079829D039 -:10B65000002804D02D4827A1163809F0BAFC069816 -:10B660002D4A018B08980818E16948434000FF30D3 -:10B6700014302062E88B5043411A0F208001081AD1 -:10B68000606200F0C1FD00281CD0A16A0298081A6F -:10B69000FF38ED212338C900884200D3F7E60220A5 -:10B6A0003071F4E6002802D00298002804D117482F -:10B6B00010A11D3809F08DFC0798A16AD33808182D -:10B6C000A062CCE706F0B1FD7A690146104607F0AA -:10B6D000D5FFA16A081AFF38ED211E38C90088423B -:10B6E000DCD201200DB0F0BD00ED00E000E400E090 -:10B6F000D01800207372635C6C6C5F6C6D2E7330BD -:10B700002E63000010270000B78913008A0500008F -:10B7100036040000A3020000E20400002AE003282F -:10B7200002D1FD4807210170A16A786907F014F879 -:10B73000B060616A206A884202D90598016001E020 -:10B74000059908600598F54900680818F060A9880F -:10B750000B98081A00B2002801DD022000E000204A -:10B7600070710C9830700C98002805D03420005D62 -:10B77000002801D00220B5E70C9801214840203470 -:10B780006075397F32463846FFF70BFE0020A9E787 -:10B7900010B5E14900284A68116A096807D01268A3 -:10B7A000C98BDF4BD2695943891A09F0EFFA10BDF2 -:10B7B000F8B5D94F35227868016A0C680168525C87 -:10B7C000002A0AD0498E6288914206D1407A002828 -:10B7D00003D1D449D44809F0FCFB06F026FD01460C -:10B7E0007868406907F04AFFFFF7D2FF79686588FB -:10B7F0000B682E185A8EB24202DB521C5A8602E0A7 -:10B80000401C2818588608683622125C002A05D188 -:10B81000428E23899A4201D1521C4286088B03280A -:10B8200002D2401C088302E00868408EA0802046B7 -:10B830004030C18A808A081A6188401E401885B24B -:10B84000203416E0096AE67F097976004B00B74993 -:10B85000007DCB5A895BC91889B20023FFF7EBFD45 -:10B86000002811D0012810D0AF48AE493A3009F075 -:10B87000B0FB79680868428EAB1A1BB2002BE1DA84 -:10B880000820E07400F00BFEF8BD78680068418E77 -:10B89000491C4186EDE770B51F209F4D002128709F -:10B8A000E960A868C27E130009F084FC04545403C4 -:10B8B0004654026A14680268117002685160006898 -:10B8C0002030407D002808D106F0AFFCA968096847 -:10B8D000096C07F0D3FE002815DCA86801684A8EC1 -:10B8E00061888A4204D12289511A6181628004E010 -:10B8F000511A61810168498E61800268C1681164D2 -:10B90000C16841610FE0A8680168098E6288891AE0 -:10B9100061810168098E618001680A6CC2600A6CED -:10B920004261886C6066204601F06DFC00280ED0F4 -:10B930007B487C49BD3808E0C1684161FFF7D4F914 -:10B94000002804D076487749B73809F042FBF5F76C -:10B9500038FD70BD72487349B038F6E710B56E4ACD -:10B960000B00526809F026FC0906090F1E0C2D2D4C -:10B97000082A2D00FFF78FFF10BD00F059FC10BD05 -:10B98000FDF7A9FE10BDD07E022805D0D07E032889 -:10B9900005D0644966480EE0FFF70AFF10BDFFF7C7 -:10B9A0000EFD10BDD07E0228F6D0D07E0328F6D042 -:10B9B0005F485C490B3009F00CFBF0E706F01BFC1C -:10B9C00010BD23205749000109F003FB10BDF3B55A -:10B9D00081B0514C029825460026012710350300FE -:10B9E00009F0E8FB0906313C3C3143433C3C430051 -:10B9F000494801211030FFF78DFC02990198FFF7AB -:10BA0000ADFFE87E022828D1A0680468006A0668B5 -:10BA100006F0EAFBF18B424A5143E269891AD339B5 -:10BA2000FF223232E162904202D24248081802E01C -:10BA3000081A41494018E0624048E16A814200D852 -:10BA40000846E06206E001460198FFF787FFE87EBE -:10BA5000022802D1286820300775FEBD01466560C6 -:10BA60000198FFF77BFF6660FEBDFF202D49C130C6 -:10BA700009F0AFFAFEBDF8B5064627480D4600248A -:10BA80003430254F0B0009F095FB09060C10100C03 -:10BA9000161610101600204801213430FFF73AFC2A -:10BAA00029463046FFF75AFFF8BD78603046FFF769 -:10BAB00055FF7C60F8BDFF201A49F53009F089FA7E -:10BAC000F8BDF0B5144C0020616885B003268E7671 -:10BAD000CA7E0746032A03D0C97E00293FD03FE033 -:10BAE000087F002804D112480E49D93009F071FAB4 -:10BAF0006068057F684606710221417106F095FB7A -:10BB00000290FF20F53003900121684601706946DC -:10BB1000284607F004F814E0D0180020EF160000C3 -:10BB2000E2040000F4B6000074060000FC510100BD -:10BB30001602000084F8FFFFB5F9FFFF161200009F -:10BB400020BF6068007F07F025FE0028F8D06068FD -:10BB5000007F06F050FB60680777FFF70FFC0120BD -:10BB600061688F7605B0BEE5FD494A68907600E0D1 -:10BB700020BF4A68D07E002803D0D07E937E9842B2 -:10BB8000F6D0D07E002803D00020002191767047A7 -:10BB90000120FAE770B5F24900241031CA7EF04D59 -:10BBA000032A03D02431CA7E032A17D169600028F2 -:10BBB00010D001280AD0EB49EB4809F00AFA00201E -:10BBC0006968002C0860686008D070BD0320FFF72A -:10BBD000CBFF01E0FFF775FF0446F0E70C2070BDD6 -:10BBE000F8B5DF4F04461F25E67E330009F0E2FA80 -:10BBF000042A20031B20DA481030844203D0D9499C -:10BC0000DA4809F0E6F902207C60FFF7ADFF002872 -:10BC100005D07968002008600862786012E00C2581 -:10BC2000002078600BE00120FFF7B4FF054604E038 -:10BC3000CE48CC490C3009F0CCF9002D02D0E07E82 -:10BC4000B042D1D1E07E002804D0C848C5491230A6 -:10BC500009F0BFF9F8BDC24810B51030FFF7C0FFBA -:10BC6000BF483430FFF7BCFFBD490020583108758C -:10BC7000BF494870BA49103148610A4624325061C0 -:10BC800088769076012210390A708860486010BD6D -:10BC900070B504460120FFF723FBC5B20B20FFF768 -:10BCA0001FFBC0B2854204D0B048AE49343809F019 -:10BCB00090F90120FFF714FBC5B21820FFF710FB25 -:10BCC000C0B2854204D0A948A649333809F081F9A9 -:10BCD0000420C043FFF704FBC5B21920FFF700FBA7 -:10BCE000C0B2854204D0A1489E49323809F071F9AA -:10BCF0009F489B490C38047000201031C876887624 -:10BD00000A462432D0769076994B0124083B1C7168 -:10BD100018600862106208601060FFF79CFF70BD39 -:10BD20008F48007870479249083908717047F3B519 -:10BD30000D468B4983B01031CA7E08462430884CAA -:10BD4000002A02D1C27E002A03D0C97E022903D074 -:10BD500005E08848616006E0C17E002901D00C2022 -:10BD600000E76060844806F0F2F96168087760686F -:10BD70007F490160007F002804D17B4879496238FF -:10BD800009F027F906F030FA7C49884200D20846CB -:10BD9000FF30C83086B260680321C1760027012DCC -:10BDA0002FD0724A0399121D5143026851600068F6 -:10BDB00001210170684605F06BFC68460078704907 -:10BDC000000208F0E3FF019106F02FFA01997118C3 -:10BDD00006F0C2FC6168032DC86021D06948086183 -:10BDE000606803210172022141720771021D017F07 -:10BDF000FFF7D7FA6068078307202070002067608C -:10BE0000B0E606F012FA314606F0A6FC6168C8609A -:10BE10005D48086108680770096801204870DFE71D -:10BE20005A48DCE77047F8B54D4E1036F17E0029D0 -:10BE300004D131462431C97E002901D00C20F8BD3F -:10BE40000221F176464C4A4F5834083F376234603D -:10BE5000002538602575397920304A004C49C07F6B -:10BE60008A5A4000085A2B46101881B22A462846A2 -:10BE7000FFF7E1FA002804D03B483A49323009F094 -:10BE8000A8F825610120A5602075658625863448BF -:10BE90007830857539684888401E48803583002091 -:10BEA000F8BD10B52E4901248868827E032A0CD083 -:10BEB00000684078002806D0C8683649884202D910 -:10BEC0000024FFF70DF8204610BD0024FBE72448AE -:10BED000826813681978491C1970C1681068C26AB1 -:10BEE000914204D8007D012801D001207047002034 -:10BEF000704700207047F8B51948194C1030606041 -:10BF0000016A00260D68006834212F460E54403720 -:10BF1000B97C002963D1007D032860D106F085F942 -:10BF200001466068406907F0A9FB002857DDFFF76C -:10BF30002FFC6988401C41186068026811860068FF -:10BF40002989028E91424AD9012120308175F88ACF -:10BF5000B98A401A6988401E401887B238E000004C -:10BF6000D0180020F4B600008D0300006D02000020 -:10BF700088000020CFB9000077BA0000F605000065 -:10BF800010270000CB120000B7891300B70800008B -:10BF9000FC5101002E841300096A09794A00CD4939 -:10BFA0008B5A028E007D94463F22525D5200895A80 -:10BFB000C91889B201236246FFF73DFA00280ED066 -:10BFC00001280ED002280AD0C349C44809F001F85C -:10BFD00061680868028EBA1A12B2002ADCDA66605A -:10BFE000F8BD60680068018E491C0186F0E7F8B56D -:10BFF000BB4D0026AA680128116A0C6810D00720E2 -:10C00000287006F05DF8B7480078F6F7AFFDA8682D -:10C010000683026861885186006820308675F8BD05 -:10C02000087913684100AB481F7D415A032F18D08F -:10C030001A7D022A22D01A7D012AE2D13F231B5DFC -:10C0400022895B00C05A0023401881B20120FFF70B -:10C05000F2F90028D5D0A1489F49B53008F0B9FFC2 -:10C06000CFE71E6112683F2396601B5D22895B004B -:10C07000C05A0023401881B20320E8E75822125B1F -:10C080001A613F231B5D22895B00C05A00234018C0 -:10C0900081B20220FFF7CFF9AA6801211268117559 -:10C0A000D7E738B58E4C0021A0680D46006842786D -:10C0B000002A01D045701FE00078002809D0012136 -:10C0C000684605F0E5FA684600788749000208F0FE -:10C0D0005DFEA0680268C0685268511806F03CFB1B -:10C0E0000146A068C160057102214172021D017FF5 -:10C0F000FFF757F9A068058305F0E2FF794800785B -:10C10000F6F734FD38BD10B50146754A0B0090684E -:10C1100009F050F8060D150408190C1C012100F057 -:10C12000A6F807E00021506800F0A1F810BD01203A -:10C13000FFF75DFF00210846FFF7ECF810BD00682F -:10C140000321017510BD00F0A5F810BD62496748D4 -:10C1500008F03FFF10BD70B5614C002809D00128E0 -:10C1600016D0022821D061485B49243008F031FF05 -:10C1700070BDFFF796FF00210846FFF7CBF8A068D7 -:10C18000807E002801D01F2000E00720207070BDB5 -:10C19000A068002501684D70FFF7F0F80320F6F75E -:10C1A00023FC05F08DFFA56070BDFFF77AFFA06846 -:10C1B000FFF7E4F800210846FFF7ACF80420F6F793 -:10C1C00013FC70BD46498968CA7E022A08D10A68F4 -:10C1D0001378002B04D150600968CA6A1018C8622D -:10C1E000704710B53E4A00290CD0012907D002291A -:10C1F00007D03E483849443008F0EBFE10BD401EE1 -:10C2000000E0401FD06010BD35488068002800D095 -:10C210000120704710B504460020002907D034489B -:10C2200008F0B4FD0146204608F0B0FD401C10BDEA -:10C2300010B52B488068C07E030008F0BBFF0414D3 -:10C2400014030A1401F0F2F800280BD022492948FF -:10C2500006E0FEF725FE002804D026481E49001DF2 -:10C2600008F0B7FE10BD23481B490B30F8E710B5A6 -:10C270000446002903D00020FFF7B9FE03E0194867 -:10C280000078F6F773FC2046FFF778F80020F6F701 -:10C29000ABFB10BD10B512488268106A11680068C7 -:10C2A000CB698B60134BC18B9B3359431368D960A7 -:10C2B0000146E0314B8883870C783B231C548B88E4 -:10C2C000C383CB88038409894184116802200875DF -:10C2D00010BD0000FC510100F4B600005A06000039 -:10C2E000D01800207C00002010270000B2070000BA -:10C2F00040420F0047040000F8B5FEF702FA064678 -:10C30000FEF770FAF94D07466879F94C002809D014 -:10C31000012823D0022826D003282ED0FF20F5A103 -:10C32000C63033E0F2481830FEF748FA002801D052 -:10C3300003200FE0EE481830FEF7ACF9002804D0D7 -:10C3400060696030007A002806D0E9481830FEF7AE -:10C3500008FA012068711BE00220FBE7E44818306E -:10C36000FEF7FFF914E0E2481830FEF793F90028D1 -:10C370000ED1FF20DFA1B83008E0DD481830FEF70D -:10C380001DFA002804D1FF20DAA1C03008F021FEF8 -:10C39000A169F722087810400870AA79D207120F15 -:10C3A0001043FB2210400870EA79D207520F104365 -:10C3B00008706B79EF22022B04D0012B07D0032BDE -:10C3C00007D00CE0012E06D8002F04D007E07F1E16 -:10C3D0003E43002E03D010401022104300E01040D6 -:10C3E0000870287C002811D0687901280ED0BF4839 -:10C3F0005438FDF786F8BD49606954397830A26930 -:10C40000FDF7E3FA0020FDF7EFFA04E00846FDF738 -:10C4100078F8FDF70CFBA0690078C00606D4E06947 -:10C420000078C00602D4E079002802D0A079002864 -:10C4300001D0012000E00320FCF747FF032020701B -:10C4400001202071F8BDAA4810B51C30FEF7DDF9B7 -:10C45000A74C002802D00020607004E0012060702A -:10C46000A2485438E061A148407C002802D060789E -:10C47000002805D0E069FDF744F8FDF7D8FA10BDB3 -:10C480009A485438FDF73DF8984A6069543AA0300C -:10C49000E169FDF79AFA0120FDF7A6FA10BD10B583 -:10C4A00093490022486932238276C27601221A54C7 -:10C4B0004030807C002803D00A700021022001E077 -:10C4C00000210320FFF71FFE10BD70B5884C607976 -:10C4D000C2062046416908464030002A01DA00229F -:10C4E00002E0028B4B89D2180B460283C0331A7EBE -:10C4F000002A03D0828B4D8952198283627A002AE6 -:10C5000003D03D2001F0C9F852E08A7E032A4FD0C3 -:10C51000227A002A13D0500701D4D00601D51E205C -:10C5200036E0100701D53D2032E0D00705D1900755 -:10C5300003D470A1734808F04CFD2A2028E0603134 -:10C540008A78002A05D0C28B551CC5830D88AA4263 -:10C550000FD25A7F062A02D01A7F062A05D1428BB3 -:10C56000531C438309888A4203D2828BC18A8A4240 -:10C5700001D322200CE0027C808A002A0FD00628FA -:10C580000FD35A48C07B012801D03E2000E008208C -:10C5900001F083F86069807E032809D001E08842B9 -:10C5A000F5D20120207000210846FFF7ACFD70BDD8 -:10C5B000FFF775FF70BD10B54C494D48CA7B002A86 -:10C5C0002BD0012A29D0022A27D0032A04D049A13E -:10C5D0004D4808F0FEFC10BD897B02290FD00729C9 -:10C5E0001BD0406901464031CA8A898A511A891E86 -:10C5F00089B2032900D30321028951180BE0406955 -:10C60000014640318A8A032A01D2018903E0428827 -:10C61000C98A5118491C818010BD4069F5E700B5F1 -:10C62000030008F0C7FD0604070B0F1212170029BC -:10C630000ED00FE0491E02290AD90BE0491F01293B -:10C6400006D907E0072903D004E00A390C2901D8EC -:10C65000012000BD002000BDFEB50546244818306D -:10C66000FEF78DF8002804D1274822A1CF3808F022 -:10C67000B0FC1F4CA069FDF703FC0321A069FDF786 -:10C680002DFCA069EF220178114001702946FDF7C9 -:10C6900069FC002601272B0008F08CFD0E5D5D086B -:10C6A0005D1D6161155D4D5D613D385D60697121A4 -:10C6B000095C002901D0062101E0C030417EA0695B -:10C6C000FDF71BFD4BE0E069FDF776FC0146A06934 -:10C6D000FDF784FD43E06169A069D031FDF747FDB6 -:10C6E0006169A0699531FDF750FD38E0C819002057 -:10C6F000900000207372635C6C6C5F736C61766594 -:10C700002E6300006B020000780800000621A0697B -:10C71000FDF760FD23E020690178A069FDF744FD85 -:10C7200020698188A069FDF741FD20694188A069E1 -:10C73000FDF740FD13E00096019660696030007CD3 -:10C74000002803D069460878384308706946A06914 -:10C75000FDF756FD03E0FE49FE4808F03AFCFEF7FF -:10C7600018F8002804D1FB48F949801D08F031FC75 -:10C770000C2D07D0072D04D060695E210E52603069 -:10C780008770FEBD606940304683FEBDF0B5F24C57 -:10C79000DC2061698DB0405C042809D0052834D1C3 -:10C7A0006031487A002829D001204874022026E010 -:10C7B0001022EA31684600F0A8FF61691022C831F2 -:10C7C00004A800F0A2FF684605F0BBF8616908AA5A -:10C7D0006CCA0F46CB6778378A670846FE608030A0 -:10C7E000BD60074620376CC7002303634363012005 -:10C7F000A0310876D9494874052000E00D20FFF7E4 -:10C800002BFF61690020C03108770DB0F0BDF8B58D -:10C81000D1481830FDF7B3FF002842D0CE4C207A23 -:10C8200000283ED160690025C030007ECB4E002834 -:10C830000BD0B17B0120FFF7F2FE002805D1B17BC0 -:10C840000420FFF7ECFE002806D060690127C03005 -:10C85000407F062807D00CE060695C210D526030F3 -:10C86000457402202FE0B17B0420FFF7D8FE00289A -:10C8700010D0B07B030008F09DFC173F3F3F3F1EE8 -:10C880003F3F3F3D3F203F3F3F292C3F3F3F3F3F02 -:10C890003F2F3F0060696A21095CC90702D0C030A0 -:10C8A0004577F8BD0C20FFF7D7FE60696030817ACC -:10C8B00039438172F8BD072005E0FDF7D0FF00285D -:10C8C000F8D075740B20FFF7C7FEF8BD00F02CFF01 -:10C8D000F8BDFFF75BFFF8BD606900218030816023 -:10C8E000C160057437740620FFF7B6FE60696030DA -:10C8F0008570F8BD0920E6E700F0D8FEF8BD70B5F8 -:10C90000964DA87B072834D1934CDE22606941887C -:10C91000125A491C91422CD1217A002929D1014671 -:10C92000E0318B88C28B934207D1CA88068CB24211 -:10C9300003D10A89468CB2420DD0884A8689303AA2 -:10C9400056819381CB88D3810989118201462E318A -:10C9500051600121117001221146FDF79FFC002159 -:10C960000420FFF7D0FB61690020C0314877A8732D -:10C97000E87370BD70B5794CA07B162803D074495C -:10C98000774808F026FB74480021426973486032FA -:10C99000117291703038067E0B250123002E06D0CF -:10C9A000027D002A12D14575817503750EE0567A15 -:10C9B000002E06D051722288828381760C22027664 -:10C9C00004E022888283817683770576A17370BD27 -:10C9D000F8B5614DA879800723D5287A002820D1A1 -:10C9E0005E4C0120A17BFFF71AFE002819D1A8692F -:10C9F0000127C0780026030008F0DCFB0E62620805 -:10CA0000622E3B4F0A62146220524562022021E0EE -:10CA1000A07B042804D052484D49333808F0D9FA95 -:10CA2000A673F8BDA07B082804D04D4848492D388E -:10CA300008F0CFFA686960308670F1E7A07B0A28B9 -:10CA400004D047484249263808F0C3FA6869603084 -:10CA500007720B20A073F8BDA07B0E2804D0AB207A -:10CA60003B49C00008F0B5FA6869603007720F20D2 -:10CA7000F0E7A07B0F2804D039483549183808F072 -:10CA8000A8FA1120E6E7A07B0F2804D034483049EB -:10CA9000123808F09EFA1320DCE7FFF76BFFF8BDB1 -:10CAA00069690846C0310A7F062A04D16030807A5D -:10CAB000800700D50E77487F0628F0D14E77F8BD65 -:10CAC000274823496E3008F084FAF8BD10B5234C8E -:10CAD0000020A17BFFF7A3FD002804D11E480122FE -:10CAE000017A114301720420A07310BD10B51A4CD5 -:10CAF00060690146C0314A7F002A06D0097F0629B5 -:10CB000003D0217A0122114321726030807A80079C -:10CB100015D4E069FDF752FB61696031C872E069C4 -:10CB2000FDF74EFB616960318881E069FDF74DFBDF -:10CB3000616902226031C881887A10438872606915 -:10CB400000220146C0310B7F062B00D10A7709E095 -:10CB5000F4C60000ED07000090000020C819002076 -:10CB6000770500006A231B5CDB0703D106234B77A4 -:10CB70004030428310BDF8B5FE48817B0020FFF7AE -:10CB80004EFDFD4C0126002807D160696030407AD7 -:10CB9000002802D1207A30432072616900255E208E -:10CBA000455262204654C831E069FDF7C8FA616910 -:10CBB000E0699131FDF7D2FA6169042208469131AA -:10CBC000B93008F069F8EB483038017E08270029B1 -:10CBD00006D0017D002912D14775857506750EE0D6 -:10CBE0006169054689894183E249E0691439FDF7A5 -:10CBF0008EFAE049E0690C39FDF796FA2F76DD48A8 -:10CC00000E218173F8BD70B5DA4D0020A97BFFF7C6 -:10CC100006FDD94C002803D1207A01210843207257 -:10CC2000E069FDF730FA00280ED0E069FDF726FA3A -:10CC30006169DE225052498800F0C1FD002806D00B -:10CC4000282000F02AFD70BDFFF740FF70BDE069AD -:10CC5000FDF70EFA6169E0310870E069FDF701FA4D -:10CC60006169E0314880E069FDF7E0F96169E03130 -:10CC70008880E069FDF7E3F96169E031C880E06927 -:10CC8000FDF7E6F96169E03108810720A87370BDFE -:10CC9000F8B5B94CA079C0076FD0207A00286CD1C4 -:10CCA000B44D0120A97BFFF7BAFC002853D1E069FD -:10CCB0000027C178022201260B0008F07BFA0D162E -:10CCC0001308354A4A384C474A1929444A00FDF7A7 -:10CCD00016FA6169DA225054AE735E204752603111 -:10CCE0008E7038E000F076FD35E0FFF78CFF32E023 -:10CCF000A97B0020FFF793FC002802D1207A304363 -:10CD0000207260695E210F52603086700A2018E040 -:10CD1000A87B0B2802D0207A104320722F74606900 -:10CD2000603046720C200CE0FFF725FF13E0A87B73 -:10CD3000112802D0207A1043207260696030877019 -:10CD40001620A87307E0FFF7D1FE04E000F00FFD06 -:10CD500001E0FFF7BBFEFDF76EFD002804D14F2078 -:10CD60008649000108F035F9606900238030016BC5 -:10CD7000426B491C5A4142630163F8BDF8B57D4FCF -:10CD8000012814D1787C002802D1387C002801D0F9 -:10CD9000FCF74DFEFCF7E0FBFCF7D3FB0020FCF7B3 -:10CDA00094FAFCF71EFBFCF760FBFCF7A5FBF87B95 -:10CDB00001260025704C00280FD16079C10705D0ED -:10CDC0000220F87360694030057402E0800717D5CF -:10CDD000FE7300210120FFF796F9F87B012802D0AD -:10CDE000022808D00CE06079C00709D00220F8734F -:10CDF0006069403005746079000701D50320F8733D -:10CE000000F018FDFFF703FD2079002801D03D81D7 -:10CE100002E03889401C38816079C007606904D01D -:10CE200072210D544030858203E04030818A491CD4 -:10CE30008182E079002806D061696031887C02280F -:10CE400006D8401C887460696030807C022804D950 -:10CE50003D817D81606960308574B97B0020FFF77A -:10CE6000DEFB002802D1B87B06284BD16069014661 -:10CE7000C0310A7F062A45D0497F062942D03D4964 -:10CE8000C97B03293ED16030807C00283AD1FDF770 -:10CE90002FFC002836D0FDF7A5FC002832D06169B0 -:10CEA000C88801282ED90A4640325674D08A978AFB -:10CEB000831E9F4201DB012002E0C01B401E80B2A6 -:10CEC0002C4B1F89A3899F4201D3012302E0DB1B66 -:10CED0005B1C9BB2984200D91846012800D15574BA -:10CEE0002A22525C002A11D0224A898D52898A4214 -:10CEF00001D3012102E0891A491C89B2884205D96F -:10CF0000084603E06169012040314D7461694A8837 -:10CF100010180881FFF74FFB6069122215490C3089 -:10CF200007F0BAFEFFF7D1FAFEF7E3FF00280AD0B8 -:10CF3000104810388179002905D161690246898934 -:10CF4000203A118586710C481C30FDF7BCFC002886 -:10CF50000FD0E06900788007800F012809D00228EF -:10CF600007D0FDF7D0FC002803D10449044808F09D -:10CF700030F807E0C819002090000020F4C6000037 -:10CF80007F030000606940308574F8BD70B5FE4CC9 -:10CF9000607900283CD0FD4D022810D1FDF789FBB7 -:10CFA000002803D1FA49FB4808F013F86A69002306 -:10CFB00080329068D168401C5941D1609060002651 -:10CFC00066712079012804D12671A87910210843BF -:10CFD000A871E078012816D1E670A87908210843E5 -:10CFE000A871FDF7F5FB002804D1EA48E84918309C -:10CFF00007F0EFFF6969002380318A68C868521C16 -:10D0000058418A60C860A079012802D00120A0712F -:10D0100070BDA67170BDF8B5DC4CDB4DE269002730 -:10D020001078042183079B0FE8790126012B11D08A -:10D03000022B0FD0032B01D0207A30E06178002939 -:10D0400005D1AE70A1793143A17123E0EF71F8BD34 -:10D05000EE71F8BD5278D3061CD060780028F8D164 -:10D06000D006C00E1B2818D8607908436071FDF700 -:10D07000E2FB002804D1C748C5494B3007F0A9FF9F -:10D08000606900238030026B416B521C594102637E -:10D090004163E8790128DBD1D8E7207A10210843E1 -:10D0A0002072F8BDF8B5B84D0446303D287D002704 -:10D0B00000280AD0002978D1677010202070687D80 -:10D0C000A070A87DE0702F756FE02878002814D03C -:10D0D00000296AD1072067702E462070083607E0C5 -:10D0E000686807802F700A223146A01C07F0D4FD23 -:10D0F00028780028F4D1A77057E0287EA24E143E6D -:10D10000002837D0002950D1297EA0480B0008F014 -:10D1100051F80D2C2C2C2C2C2C2C2C112C2C2008C8 -:10D120002C0067700C212170A97EA1704069808954 -:10D13000A08018E008216770217040690A46808944 -:10D14000914960801439201D07F0A6FD3089A08127 -:10D1500009E067700B212170A97EA1704069808968 -:10D16000A080A87FA0712F761FE089498A4807F028 -:10D1700030FF1AE0844810388279002A08D000294C -:10D1800013D1677011212170B189618087710CE022 -:10D19000827A002A0BD0002907D1677012212170F2 -:10D1A000318A6180718AA18087720120F8BD0020D8 -:10D1B000F8BD76480078012801D00C2070477249EC -:10D1C0000020303908700875087620318871704762 -:10D1D00070B56E4C064620780D46002804D093208A -:10D1E0006B49000107F0F5FE01202661E07225621F -:10D1F0002070FFF7DEFF002804D0674864494930FB -:10D2000007F0E7FE70BDF8B5604C2178012902D126 -:10D210002178012901D00C20F8BD01460546606146 -:10D2200012220C31584807F037FD01274035AF7402 -:10D23000554D2888FDF723FA002827D02888FDF7C8 -:10D24000D9FA002822D02888FDF78EFA00281DD0B0 -:10D250002888FDF7A8FA002818D0FCF742F9606981 -:10D260000026C088002825D048481830FDF787FAE6 -:10D2700000281FD06069C030007E00281AD0A97B2A -:10D280000120FFF7CCF9002802D013E01220F8BDEE -:10D29000A97B0420FFF7C3F900280BD16069014680 -:10D2A0004030868360314E740220FFF7D5F9606903 -:10D2B00040304674344830380078002806D1606920 -:10D2C000C18D008C814201D9A18102E06069008C8E -:10D2D000A08160694189491E8AB2298989182981FA -:10D2E000297B002902D06E812E7302E0698989189A -:10D2F0006981014640318B8A9B188B82C388012B40 -:10D3000001D85B1CC380002A01D060308674A87BE2 -:10D31000032816D0487C002815D02889A189884286 -:10D3200011D2FDF7E5F900280DD060692A21095CCA -:10D3300000290BD06989808D814207D3A670E770E0 -:10D340000CE0A7700AE0A670E67007E0688900218B -:10D35000401C6881A7700520FEF7D5FE6069512149 -:10D360000E54A97B052901D0062920D1DE2142884F -:10D37000095A511A09B2002919DB01460522E03188 -:10D380002430F3F721FF09E0C819002090000020A5 -:10D39000F4C6000039070000F10800000122022154 -:10D3A0006069FCF77BFF6069C0304677AE736069E7 -:10D3B0004189FDF728F8A07800282AD1606920303B -:10D3C000807A002800D06E810120FBF788FE60691A -:10D3D0003830FCF73EF860693430FBF751FF216AC2 -:10D3E00000200856FBF718FF0120FCF777F8FBF741 -:10D3F000D1FEFCF76FF80120FBF7B1FF6069406ECA -:10D40000FCF782F8FFF71FF860694030C07BFBF73C -:10D4100040FF6671E671A6712672A6726672267169 -:10D4200002202070FCF768F80020F8BD10B5F74C1A -:10D430002078022801D00C2010BDA078002803D04D -:10D440000020FFF79BFC17E0FCF74BF800F01DF9FC -:10D4500060692030007C012809D0FCF79FF8FBF7B9 -:10D460009EFEF3F7AEFFE07A012803D004E0FCF75C -:10D470009DF8F4E7F5F7CCFD002010BDE349C87234 -:10D48000704710B5E14C2078032803D0E049E1480B -:10D4900007F09FFDE04801218278002A06D0002293 -:10D4A00082700171A27904231A43A271A2691378D0 -:10D4B000DB439B0707D1C378002B04D1C170A0794F -:10D4C00002210843A0711078C00606D4E0690078F4 -:10D4D000C00602D4E07900280CD06078002809D179 -:10D4E000A079002806D1FEF7F2FC002802D0207AAD -:10D4F000002803D00120FFF741FC03E0FEF7A3FF63 -:10D5000000F0C3F82078012806D0F3F75AFFE07A3C -:10D51000012801D1FCF7DAF810BD38B5BB4C6069C1 -:10D520002030007C012820D1A07A00281DD1684637 -:10D53000FCF744F8002818D061693120405C0128CC -:10D5400010D1B54A0D236D460020D356285683428C -:10D5500008D050738989303A9185114620318873FB -:10D5600001208872A07A401CA07238BD70B5A74C0B -:10D5700006462078042804D0A648A549553007F06F -:10D5800028FD607910210843A34D6071002E47D01B -:10D59000FCF765FA61780126084300280ED1687C03 -:10D5A00000280BD0E0694178C90607D00078E979F6 -:10D5B0000007C00F884201D1667247E0E07800287A -:10D5C00009D0E0694178C90605D10078C00602D4C7 -:10D5D000FFF7A3FF3AE0FFF7A0FFE069A979007821 -:10D5E0004007C00F884205D0FFF7D0FC60790821C2 -:10D5F00008436071E069E97900780007C00F88424C -:10D6000001D1FFF708FD6079304360710020E071BF -:10D61000A079000702D5A87B022817D0207A13E052 -:10D62000022108436071E079401CC0B2E07101281A -:10D630000CD8687C00280DD0774854384078C10653 -:10D64000C90E052906D2C006002803D00120FFF725 -:10D6500095FB01E0FEF750FE2078012806D0F3F795 -:10D66000B0FEE07A012801D1FCF730F870BD10B5AA -:10D6700066480078042804D066486549B73007F04A -:10D68000A8FC0120FFF77AFB10BD10B50720FBF7BF -:10D690001CFE5E490420087010BD5C4933224969B4 -:10D6A00050545D4A032090738876704710B5574CEC -:10D6B0006069C030007F00281CD0062806D056487C -:10D6C000817B0020FEF7ABFF002813D06069014684 -:10D6D000C0310A7F130007F06DFD070D0D0D0D0D14 -:10D6E0000D050D006030807AC20704D0C04380076A -:10D6F00000D1087710BD0C20FEF7AEFF6069012253 -:10D700006030817A1143817210BD10B5002A0AD0B1 -:10D71000002306E0D41A6418203CE47FC4545B1C48 -:10D72000DBB29342F6D310BD10B503F0B0FF0C2866 -:10D730001CD3364C08216069D03003F0A9FF0028C3 -:10D7400006D060690421953003F0A2FF002803D1C0 -:10D750002F49324807F03DFC6169042208469531A3 -:10D76000BD3007F099FA0420FEF776FF10BD7CB5B6 -:10D77000294E0020B17BFEF752FF0125234C0028E3 -:10D7800002D1207A284320726946E069FCF73EFD09 -:10D79000684600780021C207D20F684602706069AF -:10D7A000002A02D06030057401E0603001746069C5 -:10D7B0005E221152603085700820B0737CBD401A23 -:10D7C000174900B2884201DC002801DC01207047C3 -:10D7D0000020704770B5104D0020A97BFEF71FFF99 -:10D7E0000A4C002803D1207A012108432072E06905 -:10D7F000FCF77EFC6169DE2250524988FFF7DFFFAB -:10D8000000280FD02820FFF748FF70BD90000020AF -:10D81000F4C60000330A0000C819002062060000A8 -:10D82000FE7F00006169E069E031FCF755FC0520EE -:10D83000A873EAE770B500F047F8384C384D6079C6 -:10D84000400709D5A97B0520FEF7E9FE002803D093 -:10D85000207A082108432072FFF71AFA00F012F824 -:10D86000FFF7B6F8A079C00609D5A87B030007F03A -:10D87000A1FC06060606060604060620A873FFF7A6 -:10D880003EF8C2E710B525488179490714D5017AD9 -:10D89000002911D12249897B0B0007F08BFC080D70 -:10D8A000050D0D0D0E0D100D4069002262210A5468 -:10D8B000C030807EFFF7F1FE10BD012100E00221A3 -:10D8C0004069C030417710BD10B51448817909070F -:10D8D0001DD5017A00291AD1114A947B230007F043 -:10D8E00069FC1416160B16161616161616161616AC -:10D8F0001616161616161716406960308170407C91 -:10D90000002801D0062000E01620FFF7C6FE10BD5B -:10D910004069603001728170917310BD90000020E9 -:10D92000C819002010B5031D03600020521E04E03A -:10D930005C181C60401C2346C0B29042F8DB0020FB -:10D94000186010BD01460A680020002A02D0104667 -:10D9500012680A60704702680A6001607047000040 -:10D9600000B51A2822D00ADC030007F023FC0D11B1 -:10D970001F131F1F191915171F1F1F1B1F002A28F0 -:10D9800014DD3A38030007F015FC030F11091100EC -:10D99000002000BD1E4800BD042000BD0D2000BDBC -:10D9A0000F2000BD082000BD112000BD032000BDD8 -:10D9B00010B50C46F4F784FF00281AD02046F4F77F -:10D9C00084F9002812D020780E280BD00F2809D017 -:10D9D000022807D0032805D00EA1772007F0F9FA16 -:10D9E000002010BDA078FFF7BBFF10BD09A17D206E -:10D9F000F4E708A18320F1E710B5F4F7EDF810BDC6 -:10DA000010B5F4F762F910BD10B5F4F744F910BD84 -:10DA1000023000007372635C686F73745F686369DF -:10DA20002E630000F0B597B00021032004F082F9C6 -:10DA30000025FE4E022775807574347C12E0F06874 -:10DA4000E1004018818800290CD0858069460F705C -:10DA50004D7001680291808869468880002168467F -:10DA6000F8F702FD2046641EE4B20028E7D117B0A3 -:10DA7000F0BDEE4BD86019741A80D3E7EB49EC4B3C -:10DA80004A8800201A4200D00120497C002901D098 -:10DA9000082108437047F7B504460E460078012177 -:10DAA000E34A8140521C114098B0E04A00915188ED -:10DAB000E04B994205D0009B002B05D0DC4B19426E -:10DAC00002D001201BB0F0BD009BD84A1943518001 -:10DAD0001A9D002D11D00020287022781A98002756 -:10DAE000401C130007F066FB10EF0D152137555D44 -:10DAF0006A39AFAB85B3EEEDECEF0B28EDD0042027 -:10DB0000E0E702212970A1880170090A4170032011 -:10DB100093E004212970A1880170090A4170E1880D -:10DB20008170090AC170052087E006212970A1884B -:10DB30000170090A4170E1888170090AC170218968 -:10DB40000171090A4171A289E81D216907F0A4F851 -:10DB5000A089C01D71E0082129702178082901D110 -:10DB600010212970A1880170090A4170E188817033 -:10DB7000090AC1700520308020466A1D01A90830BD -:10DB800003F0CFFB00287DD1694630880979401821 -:10DB900053E00A212970A1880170090A417003200D -:10DBA0000AE00C212970A1880170090A4170E188FE -:10DBB0008170090AC170052030809DE0A0888446EC -:10DBC0004000401C81B2308888425BD3052959D37C -:10DBD0000E202870002008E0A36842009B5A5219CA -:10DBE00053701B0A401C937080B26045F4D331809F -:10DBF000B6E08E49487C002873D0401E4874C8683F -:10DC000021790822C9004518A988286840180838D1 -:10DC1000A16807F041F802216846017100214171B5 -:10DC200028680390A98868460181002101A8F8F7B7 -:10DC30001BFC0020A880002E00D0308090E02978C6 -:10DC400080221143297029784022114329702978B4 -:10DC50008909890112312970A1880170090A41706E -:10DC6000E288E81CA16807F017F8E088C01C308043 -:10DC70002878410640D5C00972D00121684601715B -:10DC8000002100E02BE041713188ED1C091D01816C -:10DC90001A980390E08840190490001D634D059088 -:10DCA000297C68460176002101A8F8F7DDFB0746CC -:10DCB00030880C303080022F06D0002F50D060E02A -:10DCC0003CE032E01CE059E06946097EE868CA00A1 -:10DCD00080182A7C914202D28188002902D0042730 -:10DCE0004FE02EE0697C491C69741A990160318803 -:10DCF00081800020308044E04C48A188C1802FE022 -:10DD000029788909890116312970A1880170090AC9 -:10DD10004170E1888170090AC1702289681DE1683B -:10DD200006F0BAFF2089401D46E728788009800167 -:10DD3000183028702079687002207EE73B480A047A -:10DD400001D405271DE00289A3889A4201D0062745 -:10DD500017E01E222A70012249043280490C4180BA -:10DD6000009800280DD0314D0022288811468300EC -:10DD7000032003F03AFF2078287107E0002030806C -:10DD800003272A48009942888A434280384699E608 -:10DD9000F7B59AB002000C4606D0172A04D82348DB -:10DDA000244B4088984202D107201DB0F0BD237853 -:10DDB0005D0601D4DB0901D00820F6E700236D469B -:10DDC0002B706B701D462378611C9F06931E189361 -:10DDD000531E19939BB2169302AB1793134BBF0EAE -:10DDE000DE883B0007F0E6F9208511F15EF16BF16A -:10DDF000A3F1C6F1F2F1FBF1EEF1EDF1ECF1F1F18D -:10DE0000EBF1EAF1E9F1E8F185F1052A71D104229B -:10DE100069460A7005490A7969460A71E178A3786A -:10DE20000A021A436946CA80227905E0DC190020FB -:10DE3000FE710000FFFF00004A7061788906890EBC -:10DE40000C2923D009DC891E0B0007F0B3F9091354 -:10DE500052155219521B521D520012291CD004DCBB -:10DE60000E2915D01029D1D114E0162916D0182961 -:10DE7000CCD115E0800700E04007002839DA2AE11C -:10DE80000007FAE7C006F8E78006F6E74006F4E781 -:10DE90000006F2E7C005F0E7C004EEE78004ECE717 -:10DEA0004004EAE7800724D5032AAFD105206A465B -:10DEB0001070487809780002084390800BE1400711 -:10DEC000F1D5062A15D31898617880B2012902D0BD -:10DED00002299BD101E0022700E0102706226946B3 -:10DEE0000A7000228A8001AEA11C0236BA1C179269 -:10DEF00018E0B6E04A780B7812021A433280801E8E -:10DF0000891C1890B21C1691384603F0E4F9169952 -:10DF100018986B469A88C919C01BB61D521C9A8066 -:10DF2000179A80B28242E5D900289CD1D3E000073D -:10DF3000B9D51998694682B20720087000208880F8 -:10DF4000601C891D11E0437806781B0233430B8067 -:10DF5000C37886781B0233434B806E46121FB3880A -:10DF6000001D091D5B1C92B2B380042AEBD2002A6B -:10DF700077D1B0E0C00674D5022A72D31898082170 -:10DF800082B2684601700021C18063780371A01CD1 -:10DF900017990EE04678077836023E430E80861CBD -:10DFA0004E606F46D21AFE88C0180831761C92B2B5 -:10DFB000FE809342EED9DAE76FE076E065E051E06B -:10DFC00046E01EE014E00AE000E0A0E0800648D54C -:10DFD00009206A46107096801698D0800FE040069F -:10DFE0003FD50A22684602708680169AC28006E0F3 -:10DFF000000636D50B206A46107016989080029164 -:10E0000069E0C0052DD5022A7FD318980C2182B271 -:10E01000684601700021C18063780371A01C1799C4 -:10E0200013E04678077836023E430E80C67887783C -:10E0300036023E434E80061D4E606F46D21AFE8861 -:10E04000C0180831761C92B2FE809342E9D98EE75F -:10E05000C0045AD5012A58D10D2168460170868026 -:10E0600039E052E0800450D5052A4ED30E2368468D -:10E0700003708680C8788B78010219436846C18096 -:10E08000521F0281601D039025E040043DD5012A06 -:10E090003BD10F20694608701DE0030435D44B784E -:10E0A0000E781B023343244E3381032A2DD31B2FBA -:10E0B00027D011236E46337001261F4BF6033043E1 -:10E0C000588048780B780102194368468180D21E37 -:10E0D000C280E01C029020788006800E1B280AD0A7 -:10E0E0001D2808D00021032003F024FE1248418897 -:10E0F000C90BC903418068461C99F8F7B5F9284651 -:10E1000053E610206B461870DBE70725F7E7082574 -:10E11000F5E700B50022D243074997B04A800328AB -:10E1200007D1032268460270097901710021F8F7CE -:10E130009BF917B000BD0000DC190020FFB589B0C5 -:10E140000020019009981027FE4C1E46154608280D -:10E1500006D0E06901F05EF8002809D03770BEE013 -:10E16000288809213843108013980227017016E08F -:10E17000E169012088710521E269C9029180E169A4 -:10E180008872E169F0480881E16900208873288875 -:10E190002021084328801121139804270170139827 -:10E1A0000225801C0290307806900A203070E548E5 -:10E1B0001830049001F022FA0020059020462C30FF -:10E1C00003906DE00998102808D1022D06D001991E -:10E1D0000298A28D401A8270110AC170E08D0A99CE -:10E1E000884202D901F0CDF806E0884204D10698B1 -:10E1F000002801D030701CE00298E18D0170090AFE -:10E20000417012980088401BC01B82B2FF20C01BC7 -:10E21000904200D2024607A8009002980021C3193C -:10E22000E08D01F056FA3070002805D0C0B2832886 -:10E2300058D0E08D20833EE00598002804D0206C63 -:10E2400000790A282CD336E06846808BC119C9B200 -:10E250000191022D0DD01399019A4978914202D172 -:10E26000228F824208D00191206C0178032908D0C6 -:10E2700023E0084613994870206C0178042906D0E1 -:10E2800007E000790A2818D20120059008E0E18D06 -:10E29000818002990198081802900198281885B287 -:10E2A0000399049801F0ADF9002804D11298008870 -:10E2B000401BB84286DA022D0DD00998102806D1ED -:10E2C00002990198A28D081A8270110AC1701298E1 -:10E2D000058000203070206C0078032802D00020D8 -:10E2E0000DB0F0BD0220FBE7F8B5964A0026126D8E -:10E2F000002A2ED0401F934D84B24035E88A234631 -:10E300000833AF8AC318BB4222D88B784F781B02E0 -:10E3100010183B4303701B0A43700B79CF781A0225 -:10E320003A438270120AC2700471220A4271224674 -:10E33000491D801D06F0B0FCE88AA41D001980B2BA -:10E340008049E882096D002208180270427000E0DE -:10E3500009263046F8BD30B57A4B028840339B8A97 -:10E36000934213D9774B1C6DA3185C781D78240257 -:10E370002C430BD05C791D7924022C436404640C7B -:10E38000A41D1219028000200B6030BD822030BD18 -:10E39000F0B585B0074600266846068155E001982D -:10E3A000417802780D021543417902790802104341 -:10E3B00000044AD43D8003A80023012200905202A9 -:10E3C0001946284601F085F9040044D168460189C0 -:10E3D0000182019841790279090211434378027858 -:10E3E0001C021443AC421CD10A041AD44A04012171 -:10E3F000520C89030A430096C178807809020143D0 -:10E400000023204600F0C1FF040010D10199487993 -:10E410000A79000210430122D20310430871000A56 -:10E42000487101A904A8FFF796FF0400D1D0019913 -:10E4300000964878097800020843694600238A89D3 -:10E44000194600F0A2FF822C05D101A902A8FFF70E -:10E4500082FF0400A3D06846068109E0019948794B -:10E460000A79000210434004400C0871000A487108 -:10E4700001A902A8FFF76FFF0028EFD0822C02D07D -:10E48000204605B0F0BD0020FBE7F7B584B0144688 -:10E490000646002700F071FF2A480025006D00287D -:10E4A0002FD0059801282CD12046FFF771FF0700D7 -:10E4B00027D1002E29D06846058118E001994878B7 -:10E4C0000978000208432080019B0095587919794A -:10E4D0000202D8780A4301029F78587839431F789E -:10E4E00000029B1D384300F050FF002805D101A910 -:10E4F00002A8FFF730FF0028E0D0822800D10020DA -:10E500000746002E01D00F48056500F03AFF384657 -:10E5100007B0F0BDF0B597B00021042003F00AFC6D -:10E52000084F00243D467C8040356C73AC73287BDB -:10E53000B96CC00008380E18B08800280DD0012032 -:10E54000694603E0F01900200128000008703068D7 -:10E55000019000216846F9F78EFAB4803C65AC82E0 -:10E56000EC8217B0F0BDFE4B986418464030017342 -:10E570001A803838D861CDE7F949002049880A0760 -:10E5800000D501200A06120F01D002221043CA054D -:10E5900001D5042210438A0501D5102210434905F4 -:10E5A00001D520210843EE494031497B002901D0A3 -:10E5B000082108437047FFB5A7B004002898164605 -:10E5C0001B9022D00178E6484D06428822920246EE -:10E5D00040320092002D14DB8A06920E1E2A0ED0C5 -:10E5E000229A5205520E10D13288172A0DD3009A62 -:10E5F000927B002A09D1DB4D229AAA4205D0CA0992 -:10E6000006D08A06920E122A02D003202BB0F0BD4B -:10E61000D348826C0098007B2590C0000838101801 -:10E620001F9048060CD40098407B002808D0009921 -:10E6300088731F99289808601F9884800220E5E756 -:10E64000002718A90F7069460F72C54902AA0A640B -:10E65000309A4A6410A90F850F861B981D460078D2 -:10E6600020908106BE4B601F24901A462C322192C6 -:10E670002898DA691833890E1E93401C0B0006F0A7 -:10E6800099FD1FFDFD11FD1AFD90FDFCFDFBFDFA3E -:10E69000FDF9FDFCFDF8FDFDFDF7FDF6FDFDFDFDC1 -:10E6A000FDF5FD00032C7BD10320287017226A7032 -:10E6B0000022AA70E0E2052CF5D141780278090227 -:10E6C0001143A74B10AA19831185C27880781202D2 -:10E6D00002435A8300297DD091427BD800211846FD -:10E6E00081720181491E01841E9800F087FF052078 -:10E6F0002870A81C1D900220009021991E9800F0FF -:10E7000080FF002803D047E018A90870F0E2944881 -:10E710002030807C012803D002206870102002E0A5 -:10E7200001206870022022908D4830302390002212 -:10E7300020A9239802F0F5FD00282AD120A800780E -:10E740002299814225D132880099801C511A814238 -:10E750001FDB83481D99C08D0870000A48701D9802 -:10E7600020A9801C1D9000981D9A801C0090239861 -:10E7700002F0D7FD20A909781D9840181D90009837 -:10E78000401880B2009021991E9800F03AFF0028AE -:10E79000CDD0009802288DD10A2018A908706CE20B -:10E7A0006DE0072C6BD341780378090219436C4B59 -:10E7B0008446198310AB1985C37880781B021843EF -:10E7C000674B0029588305D0814203D801211846A0 -:10E7D000817200E0A4E061464B7909791B020B438A -:10E7E000038100218173104600F014FD00280FD131 -:10E7F0005B480121C26991710522C369D2029A80E6 -:10E80000C2699172C26958491181C069002181733E -:10E810005349E01F08841B98C01D48621E9800F0F1 -:10E82000EDFE07202870681C009001201D904C48C8 -:10E830000021C18530E01D98012815D04848C169E4 -:10E84000897901292FD000981038C17B807B09027B -:10E85000014300980170090A41700098801C0090E3 -:10E860001D98801C80B21D903D4809E013E2BEE176 -:10E870007AE1D8E00DE2A0E080E03BE01EE2B6E005 -:10E88000C18D00980170090A41700098801C0090A9 -:10E890001D98801C80B21D9021991E9800F0B1FE39 -:10E8A000002802D006E0818DD3E731881D98081A30 -:10E8B0000428C0DA1D98012800D16DE72848C169F5 -:10E8C0008979012903D0828D26498A4205D1818D1B -:10E8D00000980170090A417009E000981038C17B66 -:10E8E000827B0802009910430870000A48701D9846 -:10E8F000801CC1E1072C01D0152C78D14178037818 -:10E9000009021943164B198310AB1985C378807817 -:10E910001B02034312480029438301D0994201D9C5 -:10E920000120F1E60E4801218172002101818173ED -:10E93000052C07D024981B99C0B2491D02F0CBFCCE -:10E940000028BAD100200649C04308841B980096CD -:10E950000195007818AB8006800E1CAA002105E006 -:10E96000F0190020FFFF000001280000FFF7E6FB80 -:10E970000746FE4810A9008B08857EE1032CBCD118 -:10E98000402210A90A86417802780802F74910430C -:10E99000088310A9088520A9009131886B1C491EA5 -:10E9A0008AB2002100F095FE18A90870002830D125 -:10E9B0000B20287020A8008833E0052C9DD18021F1 -:10E9C00010AB1986014640780B780202E7481A43DB -:10E9D0000283CB7889781B021943E44B10461984D3 -:10E9E00010AB1A85E24A914202D307208CE697E0E9 -:10E9F0003F23DE4A9B021943118421AA00923288E8 -:10EA00006B1C521E92B200F064FE18A90870002818 -:10EA100003D08328B1D102272FE10D20287020A830 -:10EA20008088401C28E120990C22C9095143C91C47 -:10EA30001E91A14204D92098400671D500201BE107 -:10EA4000417800780902014310A801851B980078DD -:10EA500042062898C01C1D90002A62DA05206A46EA -:10EA600010721B980078C00944D0082268460272D0 -:10EA70008181A01A87B268468782289806901E98DE -:10EA8000201A81B26846C1811D980490401806F092 -:10EA900064F9079006982599C0190890491E08A89E -:10EAA000017102A83099F8F7E6FF07460021684691 -:10EAB0000172002F1BD0022F18D1009808A9007BEB -:10EAC0000979401E884210DDA848289A836CC90045 -:10EAD0005A50816C08A80079C000001D0C520098A3 -:10EAE0000099407B401C4873C7E00527EAE00620F8 -:10EAF00069460872002000901E980021201A20907C -:10EB000082B21B9B10A8DB1C008D00F03EFC01466E -:10EB100018A80170002268460272832903D003E01E -:10EB200093E00720E4E702271B98007840060ED503 -:10EB30008E484188C90506D510AA018B128D9142D5 -:10EB400001D100214162002018A9087094E0FF2142 -:10EB5000013110A80186018D844801832099018428 -:10EB60001D994162132085E0052C6ED3417803780E -:10EB70000A021A4310A90A859446092269460A72B4 -:10EB80000021009101222499D20311438AB2C17855 -:10EB9000807809021B9B01435B1D604600F0F5FB7A -:10EBA00018A90870002269460A720122520210A9AF -:10EBB0000A86832802D0002805D099E06B48098D89 -:10EBC000018302277EE06948006D002807D02046B7 -:10EBD0001B99FFF789FB18A9087000284DD12B4617 -:10EBE000324620461B9900F024FB074645E01B985F -:10EBF000022C4078009064D1002801D0012860D117 -:10EC00000A2168460172009901731AAA002000992E -:10EC1000FFF73BFC0146684641730021817302A85F -:10EC20003099F8F728FF0746002168460172012154 -:10EC3000890210A80186022F08D04C48006C807908 -:10EC4000002807D018A9087020E04BE04749009839 -:10EC5000088337E0002F03D0812018A9087031E025 -:10EC60001AAA01200099FFF710FC18A908700028C3 -:10EC700003D119202870012030806846007A0028CE -:10EC800004D002A83099F8F7F6FE0746002F2BD0E3 -:10EC900018E0062038E522993448090711D5012CDF -:10ECA0000FD10B2269460A72C08888810021042096 -:10ECB00003F040F8082010A90886BFE62098400617 -:10ECC00010D50327294810AA4188128E114341808C -:10ECD0005005400E04D01F99289808601F98848022 -:10ECE000384693E404200FE518A8007800280ED0D9 -:10ECF000012028701B980078687010A8008DA870FB -:10ED0000000AE87018A8007828710520308017489C -:10ED100010AA4188128E91434180E1E7FFB5064673 -:10ED20009FB000201B903178012088401149124A81 -:10ED3000084010A908860D494988914203D000284F -:10ED400004D0080702D5012023B0F0BD219D002783 -:10ED50002F7020983C46018810A8018418A80771DC -:10ED600000F00BFB6846077202A907E0F0190020CB -:10ED70000102000009F80000FFFF0000FA480164EA -:10ED800001464031826C1A91097BC9000839571835 -:10ED900022994164307801282AD0022809D003281A -:10EDA00079D12878800980011D302870EE48B1881B -:10EDB000C1803078022804D12878800980011B3076 -:10EDC000287001A8009010A8008CEB1CC01E82B215 -:10EDD000B088002100F07DFC0028E1D1B188697085 -:10EDE000090AA9706946888810A9C01C08842DE109 -:10EDF000717918A801713079012802D00228CFD189 -:10EE0000E6E0D9487F2340881B010246184010AB3A -:10EE10001886802840D006DC102810D020280ED07C -:10EE200040280AD120E0FF38013859D0FF38013896 -:10EE30006AD0FF38FF3802387ED0052491E0D00632 -:10EE400001D5082000E010201B90042069460872BC -:10EE50000020888118A800900195318919AB1CAA5F -:10EE60001B98FFF76BF977E0BF4B3289188B824212 -:10EE70004FD10A221B92002973D101A9009110A938 -:10EE8000098C6B1C491E8AB2002100F022FC18A9D3 -:10EE900008710B2017E0F6E0B34B3289188B8242E1 -:10EEA00037D10C221B9200295BD101A9009110A936 -:10EEB000098C491E8AB21946098C6B1C00F009FCAA -:10EEC00018A908710D2028706946888810A9401C6F -:10EED0000884042069460872A348008B888140E0BA -:10EEE000A14A3389108B834213D112231B9300292B -:10EEF00037D1536A002B05D00091128C00F045FAEF -:10EF000018A9087113205EE097483289038B9A4252 -:10EF100001D00424E7E016221B92026D002A09D1D9 -:10EF2000F268002A06D002651A98328A82821A9AFA -:10EF30000020D082002900E02FE012D1B888396883 -:10EF4000FFF7D2F918A9087100280AD1B8882B4612 -:10EF500018AA396800F06DF90446022818D0042C6C -:10EF600016D0B88800280FD06846007A002804D050 -:10EF700002A82299F8F77FFD04460120694608722D -:10EF8000386803900020B880002C5FD0052C7BD01F -:10EF90006846007A032873D0A5E018201B9000294A -:10EFA00005D071483189018300210165D9E76E4898 -:10EFB0000246017E18320120FFF767FA18A908718E -:10EFC0000028CED119202870012010A90884C8E794 -:10EFD0001A98407B002856D0307AC0001358001D84 -:10EFE0000193105A1D9000291AD100F0CAF9062089 -:10EFF00069460872002000901D980F3882B201986F -:10F000008178437808021843019B0021DB1C00F043 -:10F01000BCF918A90871002269460A72832830D009 -:10F02000002118A8017110A801840121684601720D -:10F03000019803901A981A99407B401E48731A98B9 -:10F04000807B002802D01A99401E887310A8008E79 -:10F050007F21090102468A431DD0434800220088CF -:10F0600011468300042002F0C0FD3F483178017151 -:10F0700010A94088098E08433B4948800FE003E00F -:10F080002BE002242FE00524374810AA4188128E75 -:10F090009143418027E034494A8882434A80684648 -:10F0A000007A002805D03048416C02A8F8F7E3FC4C -:10F0B000044618A80079002815D01B986870012014 -:10F0C00028702948008BA870000AE87018A80079F9 -:10F0D0002871052110A8018405E02348416C02A88D -:10F0E000F8F7C9FC044600F04CF91F484088400579 -:10F0F000400E20D11A98807B00281CD1B8880028A7 -:10F1000019D0209910AA0988118422990091396890 -:10F1100018AA219BFFF74FFA044602280BD00120C2 -:10F12000694608723868039002A82299F8F7A3FC90 -:10F1300004460020B88010A8018C20980180204649 -:10F1400002E600B50022D243074997B04A8004285E -:10F1500007D1022268460270097901710021F8F78F -:10F160008AFC17B000BD0000F019002010B5394C22 -:10F1700003780022216C012B02D0022B44D126E01F -:10F180000B78002B01D0042B03D10A71226C0321D0 -:10F190001170216C83880A79D200921D8B52216CE8 -:10F1A0000A79D20008328918C2880A80216C038942 -:10F1B0000A79D2000A328B524289206C0179C90047 -:10F1C0000C314252216C0879401C087120E00A740D -:10F1D000226C81889180216CC288CA80226C01894E -:10F1E0001181226C41895181216CC068C860616CB9 -:10F1F000206CF8F740FC0146022807D0206C007C08 -:10F20000002802D1002903D0812010BD832010BD29 -:10F21000002010BD8178012909D100880521C9028B -:10F22000884202D0491C884201D100207047052045 -:10F23000704710B51488844201D2052010BD1724F0 -:10F240001C701080421E491C581C05F025FD002032 -:10F2500010BD0000F019002010B58B78002B11D0E4 -:10F2600082789A4207D10B88002B0BD003E0091D4E -:10F270008B78002B08D08B789A42F8D103880C88C1 -:10F28000A342F4D1002010BD812010BD10B500298B -:10F2900002D001290DD102E00088000501E00088BC -:10F2A0008004800F07D001281CD0022809D0032831 -:10F2B00010D0812010BD002901D0032010BD0220F4 -:10F2C00010BDF5F7EEFD03280CD004280AD0002865 -:10F2D00006D009E0F5F7E5FD042803D0022803D0A5 -:10F2E000052010BD002010BD0F2010BDF3B5C81CB7 -:10F2F00080080E46800081B0B04201D08620FEBD5D -:10F30000FE4C354626600198A08000202081E080D8 -:10F3100014E0B807A978800D0843F94905F036FDD7 -:10F32000E088401CE080B80607D42089401880B2ED -:10F3300020810199081A8019A8600C352F88780758 -:10F34000E7D40020A072FEBDEC480C22C1880089E1 -:10F350005143081880B2704770B51346E74A451804 -:10F360009488AC4201D2842070BD126810180A46FD -:10F37000194605F091FC002070BDE049012088721B -:10F380007047DE49002088727047FFB589B0970446 -:10F390000E460546BF0C029200F034FA040021D05C -:10F3A000002069460873D548807A012812D00121CF -:10F3B0002046FFF76BFF002815D12078400609D5BD -:10F3C0000221684601730582218841828682C782B4 -:10F3D0000C9806900298000407D500273E460125A8 -:10F3E00001970CE001200DB0F0BD2078A1788007D6 -:10F3F000800D0843C249019005F0C8FC0D460298F3 -:10F4000040040AD50198A84207D12088E1788005F8 -:10F41000800F00020843B04201D3AE4201D9072059 -:10F42000E1E7B81980B20290A84201D90D20DAE7CD -:10F430006846007B002804D003A8F8F718FB0028D2 -:10F44000D1D10198A8420BD1208803210902884319 -:10F4500002998905890F0902084320800298E0700B -:10F460001298002800D007800C9800280CD0207833 -:10F47000000609D4A0683A4680190C9905F00CFCE6 -:10F4800020881021884320800020ACE7FFB59B4DE9 -:10F4900081B00E46E8882F680C21009048433C1844 -:10F4A0009749039805F072FC0A462889E11B8446B7 -:10F4B0000C314018318880B28B0601D5002300E062 -:10F4C00013461818AB8880B2834202D8842005B056 -:10F4D000F0BD0098894D401C80B2E88021800D99D4 -:10F4E000002900D00C600399A170E2702188039D6F -:10F4F0008908AD058900AD0F294303252D02A943D5 -:10F500009505AD0F2D0229430425294321800C992F -:10F51000002900D0088001998978A1710199098892 -:10F52000A1803178890601D50B9905E073496244C1 -:10F5300092B20A81991AC919A16000212173327807 -:10F54000920601D50020C2E700910B9B0A9A04990C -:10F55000FFF71BFFBBE7FEB5044600F053F90700B9 -:10F5600008D0664D641EE8880190A6B2286834462B -:10F57000009015E00120FEBD0C2000996043095A5F -:10F580008A060BD489078A0D0099801C085C5C49A7 -:10F59000104305F0FBFB2889401A2881641CA4B2A3 -:10F5A0000198A042E8D8EE8000203870FEBD002807 -:10F5B00003D0401E0880002070470120704710B51E -:10F5C0004E490288CB889A4201D3822010BD0B6835 -:10F5D0000C21514359180B88CC789B059B0F1B02BB -:10F5E000234341608C7904738C884481C38189688A -:10F5F000521C016102800281002010BD01210182A4 -:10F600007047FEB505460020C043088068680F4675 -:10F6100081786846817068680188684601800021A9 -:10F620008171288A2C88A04200D304462C8234E0C1 -:10F63000288A401C2882301D6968FFF70DFE0028CB -:10F6400029D139882F48814201D1601E38806888CD -:10F65000A04227D33088F1788005800F000208434C -:10F6600002906946301DFFF7F7FD002813D1298964 -:10F67000244881421AD000213046FFF707FE0028B7 -:10F6800009D12A890298824205D1E968B06805F05B -:10F69000D6FA00280AD0641CA4B2204600F0B2F8C2 -:10F6A0000600C5D1641E2C828220FEBD7C80B0790C -:10F6B000B871B088B8803088388130788007810D83 -:10F6C000B078014379810298B881B0683861002030 -:10F6D000FEBDFFB585B014460F46059800F092F8C0 -:10F6E000050037D00548BE05807AB60D01281CD02C -:10F6F00000212846FFF7CAFD002805E0481A00202F -:10F7000001020000FFFF000022D1287840060CD53E -:10F71000012168460170059981802988C180068190 -:10F720004481F8F7A4F9002812D12888AA78810723 -:10F73000890D11438005800FEA7800021043BE4214 -:10F740000AD0374A914207D3611E814204DD0B2063 -:10F7500009B0F0BD0120FBE7864201D90720F7E799 -:10F76000801B82B2A24200D922460E98002800D007 -:10F7700002800898002804D0A8688119089805F02C -:10F780008BFA0020E4E770B514460D4600F03AF815 -:10F7900000280DD001882980002C0DD001788078B8 -:10F7A0008907890D01431E48814203D2012002E0EE -:10F7B000012070BD00202070002070BD70B516467D -:10F7C0000D4600F01FF804000DD02D882580FF2E77 -:10F7D00016D0A807A178800D0843114905F0D6FA84 -:10F7E000002E06D101E0012070BDFF31FF31033151 -:10F7F00089B2A170A80880008905890F084320807C -:10F80000002070BD0749CA88824207D3002805D06E -:10F810000C22096850430C380818704700207047C4 -:10F8200001020000481A0020F0B585B00E460546DA -:10F830000020694608707078FE49C00003900C589B -:10F84000FD4F002D0ED0022D73D0002C72D02078E9 -:10F85000801E030005F0AEFC09837F7F7F83797FE4 -:10F8600077727F00002C03D1F4A16B2005F0B1FB6F -:10F870002078801E030005F09DFC09065E5E5E197F -:10F88000365E50545E003078062803D0EBA1762017 -:10F8900005F09FFBB8687168806C032205F0FCF9E5 -:10F8A000012069460870002835D1CEE730780C2851 -:10F8B00003D0E2A1812005F08CFBE06800780028ED -:10F8C00006D0B8687168806B102205F0E5F928E071 -:10F8D000B8681021006B05F03CFAB868816A006BCB -:10F8E0000A787168F1E730780D2803D0D3A194200D -:10F8F00005F06FFB04206946087071684878097844 -:10F9000000020843B9684A6A517812780902114323 -:10F91000484069468880084608E0C8A1AF2005F045 -:10F9200058FB6846007800288FD06846F5F7BEFA85 -:10F930008BE727E01CE0C1A1B420F0E7B86861695B -:10F94000006CFEF708F8A16900E0E168B868006C97 -:10F95000FEF701F803E0B9A1E32005F03AFBB8682F -:10F960002146006CFDF7F7FFB24A03990020505082 -:10F97000022D07D0002D05D0012D03D0AFA1EF201F -:10F9800005F027FB05B0F0BD10B501780124012971 -:10F9900002D0022910D112E04268A74800218260FB -:10F9A0000170A4486C38C166016741678167D289DC -:10F9B00002214C3001F0E1F90024204610BDFF2067 -:10F9C0009EA1163005F005FBF7E7F0B505469EA1B0 -:10F9D00003C997B014911390002008A908759549A0 -:10F9E0002A781031944C0491217805910126914F89 -:10F9F000A168130005F0DEFB0CEF07309AF0EDEC88 -:10FA0000EBEAE9E9E8EF20700124FF264F360546CE -:10FA100010A80570457001F0C1F90746012803D010 -:10FA200086A1304605F0D5FA10A93846FFF7FCFE4E -:10FA30002046641EE4B20028EAD10A206946087014 -:10FA40006846029501F088FA002803D0FF207BA1C8 -:10FA5000583068E0002646E3C86A0078C0072FD017 -:10FA6000012069460870684601F076FA002804D043 -:10FA7000FF2072A16B3005F0ACFAA068006CFDF7B6 -:10FA800061FF050004D1FF206CA16E3005F0A1FAE2 -:10FA900008984078C0003D5006202870A068016892 -:10FAA00069600069A8606448C01CE860284601F0ED -:10FAB00053FA022804D0FF2060A1783005F089FABB -:10FAC000A068C06A00784007C4D501206946087064 -:10FAD000684601F041FA002804D0FF2057A1803089 -:10FAE00005F077FAA068006CFDF72CFF050004D143 -:10FAF000FF2052A1833005F06CFA08984078C000CE -:10FB00003D5006202870A068016869600069A860FF -:10FB10004948401DE860284601F01EFA022899D0A5 -:10FB2000FF2046A18D3005F054FA93E7A96800291B -:10FB300033D0694608712979012932D0022904D0CD -:10FB4000FF203EA1A73005F044FA3A4810221030B9 -:10FB5000A96805F0A1F837481030364920314860CF -:10FB60002078C1062CD5EF2108402070032069467B -:10FB70000870304810300290684601F00FF90446D2 -:10FB8000022808D0002C06D0012C04D0FF202BA185 -:10FB9000B83005F01EFA69466FE101216A4611711D -:10FBA000DBE7244A04996C3AD06748608860C860F3 -:10FBB0000621A86803F0FCFE1E4910310860CAE760 -:10FBC00020210843207045E7A1E15AE119E1E6E070 -:10FBD00086E056E000E081E2886C407980090128E7 -:10FBE00004D0FF2015A1CC3005F0F3F9A068017A0C -:10FBF000002906D1416B406801F01FFAA16801207D -:10FC00000872012069460870684601F0A5F90028CD -:10FC100004D0FF2009A1D73005F0DBF9A068006C03 -:10FC2000FDF790FE050004D1FF2004A1DA3005F0B5 -:10FC3000D0F90DE0C01A0020B40000207372635C9C -:10FC4000736D2E630000000004411A8800A4800038 -:10FC500008984078C0003D5002202870A068416B91 -:10FC60006960806CC01CA860284601F075F904002A -:10FC700004D0FF20FD49E23005F0ABF929462831D8 -:10FC8000FBE0172268460272012202708078820827 -:10FC9000287992008007800F024368468270FB201B -:10FCA000024028794007C00F8000024368468270F6 -:10FCB000EA8882804A6C02A901F090F9002804D0F9 -:10FCC000FF20EA49F73005F084F9052108A80175FD -:10FCD0006846017A0187A0680026406C0F9006E212 -:10FCE000012069460870684601F036F9002803D003 -:10FCF000DE49DF4805F06DF9A068006CFDF722FED3 -:10FD0000060004D18320D949800005F062F9A0687B -:10FD1000006CFDF717FE1290002804D1D448D34997 -:10FD2000801D05F056F9D3488068006CFDF70AFE87 -:10FD3000040004D1CE48CD49093005F04AF90898AD -:10FD40004078C0003E500A203070287A30716868D0 -:10FD5000C84DB060A868406C3061172030731298AD -:10FD6000B4617061304601F0F7F80446022808D00B -:10FD7000002C06D0012C04D01120BC49400105F014 -:10FD800028F92046316AFFF74FFD28780521014008 -:10FD9000042900D05EE6FB21084028702AE005987F -:10FDA00040084000207082071CD5FD2210402070C2 -:10FDB0000F206A46107017201071486C0290684638 -:10FDC00000F0ECFF0546022808D0002D06D0012DDA -:10FDD00004D0A748A5493A3005F0FBF86946284603 -:10FDE000FFF722FD2078052101400429D2D1FB2113 -:10FDF00008402070072008A908759E48807808767A -:10FE000028E6012069460870684601F0A5F8002838 -:10FE100004D097489549543005F0DBF8A068006C91 -:10FE2000FDF790FD060004D113209049400105F034 -:10FE3000D0F890488068006CFDF784FD040004D180 -:10FE40008B488A495A3005F0C4F808984078C000B9 -:10FE50003E5007203070874880684068706068684E -:10FE6000F460B060304601F077F8040004D08048B8 -:10FE70007E49653005F0ADF8316A2046FFF7D4FCC5 -:10FE8000E8E5012069460870684601F065F8002839 -:10FE900004D0774875497A3005F09BF80898407887 -:10FEA0001190A068006CFDF74DFD060004D15120B3 -:10FEB0006E49C00005F08DF8A068006CFDF742FDAA -:10FEC000040004D16A486949823005F082F811982B -:10FED000C0003E50C019296941600920307068682F -:10FEE0007060A868B060A889B08163483061103044 -:10FEF000B4617061304601F02FF8022804D05C48EC -:10FF00005A49903005F065F811982875A2E55A4ACB -:10FF100000208C32107002206B46187001922879F4 -:10FF2000002801D0107098E0524803230C3040683C -:10FF3000FB2703708378504A9B089B003B408370EB -:10FF40004B7A00271B07DB0F43708C3257600B7B0B -:10FF5000C370CB7A1372537A0C7D5B08E4075B00A5 -:10FF6000E40F23430C461534D460FD242340CC7E9B -:10FF7000E407A40F234353720B461C3313614771EC -:10FF800007718B7A3B4A9C070C32A40F1268012C34 -:10FF900004D19478A407A40F012C1DD09B089B00CA -:10FFA0008B7293785B0702D48B7A5B0728D54B7AE8 -:10FFB00013AF5B075B0FDC005B00E3181478640091 -:10FFC0001B19DBB2DC083C5D5F077F0F0623DB1BE0 -:10FFD000DC40A3079B0F14E04C7A53796406640F4E -:10FFE00023404371147906273C400471E4001C430C -:10FFF000204B5C7083789B089B005B1C8370D0E770 -:020000040001F9 -:1000000000238478FB273C408F7A7F07FF0FBF00D7 -:100010003C4384704C7A6407640F04705078012864 -:1000200007D1487A000704D5032008A908750220E3 -:100030002DE0022B27D0012B2BD00F4B0020049A50 -:10004000D86750609060D06018467C30024610320D -:100050005060887AFB2210408872684600F09EFE4D -:10006000040035D0012C34D0004907E03CFC0000EE -:1000700009020000B4000020541A00206520C000CE -:1000800004F0A7FF25E0032008A9087501200876E1 -:10009000E3E77E4C0D21E01C04F05BFE20461030AF -:1000A0004460022008A908750E94A868002807D0AB -:1000B0000068206005997648202211430170CCE742 -:1000C00005980007C9D57349734804F082FFC4E757 -:1000D000002669462046FFF7A7FB04E06E486D49FD -:1000E000203004F076FF08A8007D002802D00DA87B -:1000F000F4F7DCFE304617B0F0BDF0B597B00C4613 -:10010000054600206946087061482F785F4E0178E7 -:10011000583E82683B0005F04DF80BAA8407263B49 -:100120004C6B79798F9CAA002B20694608730CA927 -:1001300003A8FDF73DFC002804D05748554941303D -:1001400004F047FF55490D9804F020FE4F48016028 -:100150004F4869680C300160AA684260019108202C -:10016000694608708CE08A0610D5DF2211400170C4 -:1001700003202070454810304168A1604068002885 -:1001800002D00020207177E00120FBE7102256E02A -:100190002B20694608733D4903A85C39FDF708FC2C -:1001A000002804D03C483B496A3004F012FF042088 -:1001B0001BE02A206946087303A8102202306968F0 -:1001C00004F06AFD07A810220230A96804F064FD5B -:1001D0002E4903A85C39FDF7EBFB002804D0392039 -:1001E0002C49000104F0F5FE05202070666043E014 -:1001F0002A79002A02D001221143017005206946A4 -:10020000087028798880A868029039E0D06A402375 -:10021000018819430180D06B6968102204F03CFD0D -:100220002AE0FB2211400170062069460870A96887 -:1002300068680291019023E0CB0703D002221143AA -:10024000017058E70F20207017202071506CA060BB -:1002500012E0937A9B0706D0D26A44781388FF3461 -:1002600001342343138004221143017004E00A483F -:100270000849BD3004F0ADFE684600780028E0D0A3 -:100280006846F4F713FE36E701207047D01A0020C5 -:10029000B40000203CFC00001503000040420F00A9 -:1002A00070B504780D460646230004F083FF0B1C4E -:1002B000181C1C1C1C07181C1C181C0000210520E5 -:1002C00001F038FDB068007805280CD0FA4800220B -:1002D000008811468300052001F087FC03E000211F -:1002E000052001F027FD002D0ED0002028702946A2 -:1002F0003046FFF702FFF1482978005D884201D1BE -:10030000032070BD022070BD00213046FFF7F5FECE -:10031000002070BD30B5E8494B68497A0A011146A2 -:100320000C315C5C032C0CD0044600252034257174 -:1003300025725C5CA500AA18641C5C5498500320CC -:1003400030BD062030BDF0B50446264620360D46A9 -:100350003279012008218FB0002A0CD0012A21D047 -:10036000022A2BD0032A04D12A78052A01D1297028 -:1003700000200FB0F0BD01203071606800280AD065 -:10038000A069017061684160216981606169C16033 -:10039000FFF7C0FFEDE707202870206968606069FB -:1003A000A86009E029780729E3D1022030710520EF -:1003B0002870C248203868600320DAE729780529C8 -:1003C000D7D1A08910280AD9103880B2A081A1689D -:1003D0001023091803A86A6800F054FE2DE01028C5 -:1003E00004D0C1B20BAA1020A76809E0102322692B -:1003F000A16817E0491EC9B2401EC0B27B5C13540D -:100400000029F7D100280AD0401EC0B28021115423 -:10041000002102E0401EC0B211540028FAD16269E6 -:1004200010230BA907A800F02DFE102307A903A88D -:100430006A6800F027FE032030716068019003A80D -:10044000029005206946087029466846FFF728FF94 -:100450008FE7F0B5044626460D4620363179012057 -:100460008DB000290BD0012938D0022905D1297877 -:10047000052902D10920287000200DB0F0BD217D92 -:100480006846CA07D20F02738807C10F6846017415 -:10049000012203A905A800F0EDFD04A9012205AF82 -:1004A000481D00F0E7FD0722B81CE16800F0E2FDFE -:1004B00007A807220130216900F0DCFD6068019087 -:1004C00009A80290102305AAA16800F0DBFD012015 -:1004D0003071052168460170294621E029780529F7 -:1004E000CBD1062203A8E16900F0C4FD04A80622CE -:1004F0000230A16900F0BEFD042106A800F0B2FDA3 -:100500006068019007A80290102303AA696800F0B0 -:10051000B9FD0220307105206946087029466846F9 -:10052000FFF7BEFEA9E7F0B5074685B00D460020EF -:10053000694608703E466248203632798179133820 -:1005400001240078130004F035FE180DFEFDFCFBBD -:10055000FAF9F8F7F6F5F4F3F2F1F0EFEEEDECEB73 -:10056000EAE9E8E7B968039100291BD0012269464E -:100570000A7003220A710A224A7139690291397993 -:1005800000297DD0039A1278002A7AD00C2A78D2DA -:10059000130004F00FFE0BEF09EF354D8498B0F116 -:1005A000EDECEF000020C8E30021062001F0C2FBC3 -:1005B0003879072866D1424C133C2078022802D0B3 -:1005C00000287FD101E00020207003980079C11F2E -:1005D0000A2901D30A2598E1607039480722C01F13 -:1005E000039900F047FD0120307120700220694618 -:1005F00008703348801F01903869401C029037E230 -:1006000011293DD12E4C133C0228DAD16068617863 -:10061000007A884201D9062577E1039926481022FD -:10062000491C303800F026FD03202070022045E1EF -:100630001129E6D1224C133C0428C2D10520207098 -:1006400003991D481022491C203800F013FD062094 -:100650003071786903210170626851684160164900 -:100660002039816021460C31C160C91D0161017DC5 -:10067000537A49084900DB07DB0F1943017502E093 -:1006800070E354E384E1D3688361FD231940537A16 -:100690009B07DB0F5B0019430175116976E10229A5 -:1006A000AFD1002867D005206946087103984078CB -:1006B00048713869029051E3241B00203452010034 -:1006C000DB00002082E011299BD1F74C06287DD168 -:1006D000A0680399806B1022491C00F0CBFC062116 -:1006E0006846017038690290002168460171FFF781 -:1006F000D7FD072057E00B299BD1EB4C07287ED173 -:10070000A0680399006B0222491C00F0B3FCA068AA -:100710000822406B039917E00EE116E3FDE2DDE2EB -:10072000C7E2BCE29EE267E248E241E21FE2F5E195 -:10073000DFE1C8E1BEE1B1E1A5E16AE147E128E11D -:10074000DAE0BEE0AFE075E0C91C00F093FC0621E2 -:100750006846017038690290002168460171FFF710 -:100760009FFD204613304179490849003EE041E0B1 -:100770001BE001E05CE0EFE2112991D1CA4C0828AE -:100780003DD1A0680399C06B1022491C00F072FC97 -:10079000062168460170386902900021684601719F -:1007A000FFF77EFD09202070C9E208298CD1BE49DF -:1007B000092824D1039842788868016C0A7003994B -:1007C000406C0622891C00F055FC00E017E0062171 -:1007D0006846017038690290002168460171FFF790 -:1007E0005FFDB14813304179FD221FE041715EE2A7 -:1007F0003071F2E11129C0D1AB490A2801D0082596 -:1008000083E088680399806C1022491C00F032FC58 -:10081000062168460170386902900021684601711E -:10082000FFF73EFDA04813304179FB221140DDE780 -:1008300007256AE0297802297ED19B490128FBD14E -:100840006A684A6015780846002D5CD106216A4620 -:1008500011703969029107211171029902240C70FB -:10086000CA785207520FCA704B795B075B0F4B7106 -:100870008B795B075B0F8B71D20701D18A714A714B -:1008800005460A794078824200D26A70864807227B -:10089000133000F0EFFB00202C70307101466846E9 -:1008A000FFF7FEFC4BE229780429C5D103286FD15C -:1008B00008227E48696800F0DDFB032030710420C7 -:1008C000F2E129780429B7D1774F0328B4D17748CA -:1008D00008220830696800F0CDFB04203071786888 -:1008E0004168002906D00321297000212971406840 -:1008F000A86072E10320D7E1287803289CD12879E9 -:1009000000281AD00546002D16D006216846017031 -:100910003869029002216846017102980521017030 -:10092000457000216846FFF7BBFC01216846017055 -:1009300004210171457115E293E15B49A86849689A -:100940000028486001D15A48486005203071786914 -:10095000032202704A684260544A8260524A0C3252 -:10096000C260D21D0261027D4B7A5208DB07520041 -:10097000DB0F1A430275CB688361FD231A404B7A63 -:100980009B07DB0F5B001A4302750969C16130E107 -:100990000DE12978092988D14349032885D104200C -:1009A00008700620694608703869029011200871A5 -:1009B000029803210170401C1022696800F05AFB64 -:1009C00000216846FFF76CFC00203071B7E1297800 -:1009D000092993D1052891D134496A68203910201A -:1009E000401EC0B20B5C145CA34203D0002004255F -:1009F00030718AE70028F3D107203071786904212B -:100A00000170294949684968416028498160103965 -:100A1000EEE028780A28BED10620694608703869B9 -:100A2000029011200871029804210170401C1022CC -:100A30001E4900F01FFB00216846FFF731FC1A48F1 -:100A4000102140786A68091AC9B2101800F00AFB30 -:100A50006868019014481330C178C9070BD08179B8 -:100A6000002902D14079002805D0082030711BE10F -:100A700029466846EFE0072069460870002168466D -:100A8000FFF70EFC5FE128780E2884D106486968DC -:100A900081608969407808700920A9E6C80701D0FB -:100AA0000A20FFE00F20A3E6C8000020141B00204E -:100AB0001452010028780F2879D1A8683861287964 -:100AC00038730B20FAE628780428F5D1FC4C6968C5 -:100AD000A0680822006A00F0CDFA0C203071786915 -:100AE0000722B9690270A268D3684360126A826003 -:100AF0007EE028780D28DFD1F14C6968A0680223D8 -:100B00000269C06900F0BEFA0D20307178690621D3 -:100B10000170A1688A684260096966E028780C283B -:100B2000CAD1E74C6968A0686278406A00F0A2FA0E -:100B30006078A2681021091A526AC9B2101800F030 -:100B400091FA0621684601703869029011226846C0 -:100B50000271029810220170A168401C496A00F0DD -:100B600089FA00216846FFF79BFB0E206EE028788B -:100B70000F2876D1062168460170386902900B2152 -:100B800068460171029C0720CD4D2070A8680222A2 -:100B9000C169601C00F06EFAA8680822016AE01CB6 -:100BA00000F068FA00216846FFF77AFB7AE7C8E0B0 -:100BB000880701D5102075E0132019E628780F2842 -:100BC0004FD1A86838612879387311203071BC483A -:100BD000816848690078002801D00324CAE0786958 -:100BE00006220270C9684160B6498160B549091D95 -:100BF000C160FFF78FFB30E0B14880684169097838 -:100C000000290CD129780C292BD1AD4C6968806A58 -:100C1000102200F02FFAA16801204969087006210E -:100C20006846017038690290112168460171029886 -:100C300008210170A249401C89681022896A00F0CD -:100C400019FA00216846FFF72BFB122030710921A9 -:100C5000684601702946FFF723FB044601287DD032 -:100C600088E06FE028780F286CD10620694608706C -:100C70003869029008200871029809210170904992 -:100C800089680A78D207D20F427049680622801C10 -:100C900000F0F0F900216846FFF702FB8CE74807F7 -:100CA00005D514203071092069460870E0E6162049 -:100CB0009EE528780F2851D1A868386128793873C3 -:100CC000152030717869062101707D4989688A682C -:100CD0004260096981607B49891D89E728780C2871 -:100CE00045D1774C6968A0681022C06A00F0C2F94B -:100CF0000620694608703869029011200871029830 -:100D00000A210170A168401CC96A102200F0B2F9E2 -:100D100000216846FFF7C4FAC9E7694813304079F3 -:100D2000002810D0C10703D065480621017006E0F5 -:100D3000800701D5082000E00A20614908700024DE -:100D400018E00BE013E0172052E55D49002805D0BC -:100D50000020307108700A206946087068460078E3 -:100D6000002804D000216846FFF79AFA002454486E -:100D700000210170204605B0F0BD10B5524BFF2494 -:100D80005C72586019721A80002204E0491EC9B2D0 -:100D90000B010C33C2540029F8D110BDF0B54A4EF6 -:100DA0000546717A01208DB0FF2971D00127727A32 -:100DB000736811015C180C31595C8900091F645873 -:100DC0006A7021780B0004F0F5F90B960709272CBF -:100DD00059888D4A4F5492002F707CE02146203173 -:100DE0000A9109790120002902D0012967D10EE07A -:100DF0006068019005A802900D21C01C00F032F936 -:100E0000032205A8A16800F035F90A984EE0297878 -:100E1000052974D106215DE029462046FFF719FB1C -:100E200069E021462031069109790120002902D08C -:100E3000012964D10EE06068019007A802900822A1 -:100E4000E16800F017F9082209A8A16800F012F97A -:100E500006982BE02978052951D10A213AE0294644 -:100E6000204600F01AF946E029462046FFF76BFAC3 -:100E700041E029462046FFF756FB3CE02146203161 -:100E8000059109790120002903D0012937D11DE0FE -:100E900056E06068019007A802900822A16800F05F -:100EA000E9F8082109A800F0DDF8059869460771FE -:100EB0000520087029466846FFF7F2F91BE00BE0B1 -:100EC000C80000200C520100241B002029780529AD -:100ED00015D10B212970002011E02946204600F091 -:100EE00023F908E02946204600F04EF903E02946A0 -:100EF0002046FFF7C9F9002801D001280CD125624E -:100F0000717A736809010C315A5C521E1206120E76 -:100F10005A5401D003204AE70328FCD0737A726840 -:100F200019011D010D312C46515C7172FF270D34E2 -:100F300017550C35545D002C02D0FF2903D1737274 -:100F40000DB0F0BD21460C010D34145DFF2CF9D11C -:100F500009010D315354F3E770B5AD4C0546607A85 -:100F6000214603464A6811E0010108460C30105C36 -:100F700008E0401EC0B286008E199659AE4201D1DB -:100F8000042070BD0028F4D10D31505CFF28EBD156 -:100F90009F480021007A01E0491CC9B2884204D967 -:100FA0000E010C36965D002EF6D1884201D8052040 -:100FB00070BD08010D30135461722846FFF7AAF97D -:100FC000032806D0617A626809010D31515C6172B3 -:100FD00070BD28462830FFF7E1FE70BD10B50478DB -:100FE0000123012C14D10C78022C11D30B23137084 -:100FF00083785B075B0F537002220A708088002899 -:1010000005D0830000221146062000F0EEFD0023EB -:10101000184610BD0EB50022012105280AD0062869 -:1010200007D1684601700221017142710021FFF76A -:1010300064F80EBD68460170F6E710B58EB00C4638 -:1010400006216A461170019072480290001D0390BB -:101050006846FFF781FF102220460B9900F00AF83E -:101060000EB010BD002202E0491EC9B24254002950 -:10107000FAD1704703E0521ED2B28B5C8354002A2F -:10108000F9D1704730B505E05B1EDBB2CC5CD55CB6 -:101090006C40C454002BF7D130BD3EB5044620301F -:1010A0000D4602790121002A02D0012A3AD10FE02F -:1010B00061680191574908310291012101710520B0 -:1010C0006946087029466846FFF7EAF8014629E0B4 -:1010D0002878052826D169681022A06800F087F8D2 -:1010E0006868C07B000606D54A4AA06810231832FB -:1010F0000146FFF7C7FF1022A168E06800F077F80B -:10110000A068C07B000606D5424AE068102318326A -:101110000146FFF7B7FF07202870A0686860E06805 -:101120000021A86008463EBDF0B5044626460F469D -:1011300020363179012089B0002909D0012905D153 -:101140003978052902D10C203870002009B0F0BD93 -:10115000606803AD01900295022203A8A168FFF721 -:1011600089FF0222A81CE168FFF784FF0C21281DDB -:10117000FFF778FF01203071052069460870394675 -:101180006846FFF78DF8E1E710B5034620331C7978 -:101190000122002C04D0012C10D0022C25D11EE0FD -:1011A00001211971C16806220A7040684860194817 -:1011B000801C8860801CC86008460CE00C780C2CF1 -:1011C00013D102221A71C268052313704968516055 -:1011D000806890601046FFF79DF8024605E00878A9 -:1011E0000B2802D10D2008700022104610BD10B54A -:1011F000002409E00B78521E5B0023430370401C5F -:101200000B78491CD2B2DC09002AF3D110BD0000D2 -:10121000241B00200C52010070B50D46040012D0B2 -:10122000002D10D02101284603F093FD10225449CF -:10123000284603F031FD52480121083801804480DE -:101240004560002070BD012070BD70B54C4E00247B -:101250000546083E11E0716820014018817BAA7B99 -:10126000914209D1C17BEA7B914205D10C222946EA -:1012700003F0E5FC002806D0641C30888442EADBD9 -:101280000020C04370BD204670BD70B50D460600FD -:101290000AD0002D08D03A4C083C20886188401CB8 -:1012A000884203D9042070BD102070BD3046FFF77E -:1012B000CCFF002801DB401C0AE0208861680001A7 -:1012C00040181022314603F0E7FC2088401C2080A3 -:1012D0002870002070BD70B514460D001FD0002C82 -:1012E0001DD00021A170022802D0102817D108E0DB -:1012F000687829780002084311D00121A17010807C -:101300000BE02846FFF7A1FF002808DB401CA07077 -:10131000687B297B000208432080002070BD0120EB -:1013200070BD70B5054614460E000AD0002030701E -:10133000A878012807D004D9114908390A889042B1 -:101340000BD9012070BD002C04D02878207028888B -:10135000000A50700220087010E0002C0CD0496880 -:101360000001411810391022204603F095FC28781E -:1013700020732888000A607310203070002070BD30 -:10138000EC00002073490968016000207047714932 -:1013900008600020704701216F4A704B002803D07D -:1013A000012805D06E48704791630020187001E055 -:1013B000D1631970002070476A49012008606848AD -:1013C000801C70470422684B6649002805D05A608B -:1013D000086901221043086108E0086940084000DC -:1013E00008619A605C490020C03188600020704725 -:1013F0005C490622002808D0012809D002280DD017 -:1014000003280FD05648401C70470869904302E0FB -:1014100008699043801C0861002070470869904368 -:10142000001DF8E708691043F5E74E494A6A024390 -:101430004A62002070474B494A6A82434A62002050 -:1014400070474849496A0160002070474549CA69A8 -:101450000243CA61002070474249CA698243CA6197 -:10146000002070473F49C96901600020704730B5CE -:101470000546002072B601463A4A384C4032002DEB -:1014800011D00123012D0CD0022D02D0072062B60D -:1014900030BDA3706478002C01D09363F7E79163AB -:1014A000F5E7A170F9E7A170F9E72F4904208860FA -:1014B00029490020C03188602849012008702B4943 -:1014C0000A688023120A12021A430A602849086037 -:1014D000704722480078704770B5EFF31080C50759 -:1014E000ED0F72B61D4C6078401C0006000E607057 -:1014F00003D120A1CC2003F06CFD6078012806D137 -:10150000A078002803D01749012040318863002DBE -:1015100000D162B670BD70B5EFF31080C507ED0F56 -:1015200072B60E4C6078002803D112A1DC2003F0C3 -:1015300050FD6078401E0006000E607006D1A07855 -:10154000002803D00749002040318863002D00D1D6 -:1015500062B670BD0004004040000040FC00002066 -:1015600004200000000500400003004000E400E00B -:1015700000E100E07372635C736F635F706F7765A7 -:10158000722E63008107C90E002808DA0007000FD9 -:1015900008388008B94A80008018C06904E08008D3 -:1015A000B74A800080180068C8400006800F704766 -:1015B000B44948788978884201D3401A02E0212250 -:1015C000511A0818C0B27047AE492331487889785B -:1015D000884201D3401A02E02122511A0818C0B2F1 -:1015E0007047A849463148788978884201D3401A23 -:1015F00002E02122511A0818C0B27047A04810B565 -:101600000C300168FF22120291430122D2031143E0 -:1016100001609C490020233148708870233948704C -:101620008870463148708870974802F0FFFA9648F3 -:10163000401C02F0FBFAF2F7A9F900F015F910BD11 -:1016400020207047B4E770B50C4605460026FFF72A -:10165000AFFF8C49A04214D30A46203A002320460B -:10166000641EE4B200280BD08878105C287088785B -:101670006D1C401CC0B288702128F0D18B70EEE741 -:10168000012600F0F1F8304670BD202070479BE73E -:1016900070B50C4605460026FFF796FF79492331C1 -:1016A000A04214D30A46203A00232046641EE4B226 -:1016B00000280BD08878105C287088786D1C401C3E -:1016C000C0B288702128F0D18B70EEE7012600F0BF -:1016D000CBF8304670BD202101700020704710B556 -:1016E0000446FFF77EFF2070002010BD70B50C4649 -:1016F0000546FFF776FF63494631A04215D30A46F7 -:10170000203A00232046641EE4B200280BD08878DB -:10171000105C287088786D1C401CC0B2887021282D -:10172000F0D18B70EEE7002400E0584C00F09CF8FC -:10173000204670BD70B50C460546212904D9FF200E -:1017400053A1473003F045FC4C484068103840B284 -:10175000FFF718FFC6B20D20FFF714FFC0B2864294 -:1017600007D2FF204AA14D3003F033FC01E0F2F72D -:101770004DF921462846FFF766FF0028F7D070BDD7 -:10178000F8B5404E07462336B1787078212200F034 -:1017900060F8354623353B4C00280ED0A1786078A0 -:1017A000212200F056F8002814D0A9786878212268 -:1017B00000F04FF800281AD025E032497078C91C93 -:1017C0000F547078401CC0B2707021281BD10020CB -:1017D000707018E02B49607820390F546078401CF5 -:1017E000C0B2607021280ED1002060700BE0254946 -:1017F000687826310F546878401CC0B26870212880 -:1018000001D100206870B1787078212200F021F8B1 -:1018100000281DD0A1786078212200F01AF8002855 -:1018200016D0A9786878212200F013F800280FD08C -:10183000F2F7CEF8144802F001FA01214903884278 -:1018400003D013A1C12003F0C4FB0F4802F00EFA2D -:10185000F8BD401C884205D0904201D1002901D03A -:10186000002070470120704710B5074802F0E6F9E4 -:10187000002801D1F2F79BF810BD000000ED00E058 -:1018800000E400E0501B0020FF00002007200000C3 -:101890007372635C736F635F72616E642E630000CA -:1018A00010B5284802F0C2F9002803D026A11D2057 -:1018B00003F08FFB2348401C02F0B8F9002803D046 -:1018C00021A1212003F085FB10BDF1B5224D6F68E9 -:1018D00001261C4802F0B2F91A4C002803D1002658 -:1018E000601C02F0C3F91D4A1D490120506000BF71 -:1018F00000BF00BF00BF00BF00230B604B60009B18 -:101900006B60106000BF00BF00BF00BF00BF086871 -:10191000002802D148680028F9D048680028E4D19E -:10192000002E04D06F60601C02F088F907E0601C94 -:1019300002F084F90028D3D1024802F097F9002080 -:10194000F8BDC2E7010100207372635C736F635FCF -:101950006563622E6300000000E5004000E0004087 -:1019600000E1004030B5EFF31081CC07E40F72B610 -:101970001D4A116910230D461D431561002C00D12D -:1019800062B61A4DC406E40E0120A0402C68044241 -:101990000DD0C8060AD4EFF31080C007C00F72B68E -:1019A000116999431161002800D162B630BD20BF92 -:1019B00040BF20BFEAE70E4908784A78401CC0B211 -:1019C000904200D008707047084A094820BF40BFC5 -:1019D00020BF4178037843701368002B02D103784D -:1019E0008B42F3D00020704700ED00E000E200E001 -:1019F00003010020FEB5F64C07466068FF213E015A -:101A000081552178FF2913D0090108314158324608 -:101A1000491E083209020192090A805800F0CEF9E5 -:101A2000002802D02478254615E061682078885582 -:101A30002770FEBDE64842680198115828010090C1 -:101A40000830105800F0BAF9002806D1E0482C46BA -:101A5000416800980D5CFF2DECD1DD482101406804 -:101A600085554754FEBD70B5D94A04460020157A05 -:101A700053680AE00201561C9E5DA64203D10C3257 -:101A80009A588A4204D0401CC0B28542F2D8FF2046 -:101A900070BDF8B5CE4F3E7801F01AFE0146FF2E1C -:101AA00071D03401254678680835405900F086F930 -:101AB00002280CD97868405901F0FDFD01F008FEBC -:101AC00001467868405900F079F902285BD8C0498E -:101AD0004868025D0A70A11C425C002A0CD0521EAC -:101AE000425441590122D20589180902090A41517B -:101AF0003046FFF77FFF30E0631CC25C0092221D7E -:101B000094468258002A10D001239B029A420FD992 -:101B10009205920D43595703DB191B021B0A4351CF -:101B20006346C3589A1A920A09E0FF21C1540AE099 -:101B3000435952039A181202120A42510022425487 -:101B40003046FFF757FFA2480C344168C26800983E -:101B5000095980001258009890479D4C2078FF2822 -:101B600011D0000161680830085801F0A4FD01F0AF -:101B7000AFFD01462078626800010830105800F07F -:101B80001DF9022886D3F8BDF8B51C4615460E4649 -:101B90000746FF2B03D38FA1D42003F01AFA8C48F9 -:101BA000FF21C76045600472067401700022427014 -:101BB000104604E00201521C401CA954C0B2A042CD -:101BC000F8D3F8BD70B5824C06466578207C854216 -:101BD00003D380A1E72003F0FCF9E068A900465098 -:101BE0006078401C6070284670BDFFB581B01D460E -:101BF000FF2401F06DFD764F064679780198814209 -:101C000003D874A1F52003F0E4F971480021037AA8 -:101C1000406810E00A019446521C825CFF2A25D0DD -:101C2000019FBA4205D162460C328758029A974208 -:101C30001ED0491CC9B28B42ECD8FF2C18D0210110 -:101C40004A1C019B83540B460C33029AC250039BDF -:101C50005F4F0022012B0ED00B1DC25001239B02AF -:101C60009D4216D9AA05920D08D008E00C46E0E77F -:101C7000FF2005B0F0BD0B1DC550EFE71A4653031A -:101C80009B190E461B0208361B0AAA1A8351920A98 -:101C900009E0002D00D101256B039B191D022D0ABF -:101CA0000B460833C550891C42543D463E782046B9 -:101CB000FFF7A0FE2878B04214D000016968083010 -:101CC000085801F0F8FC01F003FD29786A68090161 -:101CD000083152580146104600F070F8022801D22F -:101CE000FFF7D7FE0198C4E770B50C46054601F032 -:101CF000EFFC064621462846FFF7B5FEFF2817D021 -:101D0000334D04012046696808300858314600F018 -:101D100055F80121090340186968A41C095D400BAE -:101D2000002901D089020818002800D1012070BDC7 -:101D3000002070BDF3B581B00F460198FFF793FE08 -:101D4000FF282AD0224E3578726829460C4604E0D6 -:101D5000844205D025462301D45CFF2CF8D11CE039 -:101D6000FF2C1AD0A5421CD10801105C3070FF284E -:101D700015D000010830105801F09DFC01F0A8FCBE -:101D800001463078726800010830105800F016F8EB -:101D9000022806D2FFF77DFE03E00020FEBD01F021 -:101DA00092FC39460198FFF79FFF22017168FF23DB -:101DB000541C0B558A5C2B01CA54FEBD401A00020C -:101DC0000121000AC905884200D90020704700009F -:101DD0009C1B00207372635C736F635F74696D6535 -:101DE000722E6300F0B500241C4A01211C4B08032D -:101DF000546018601B4B1C601B4C20601B4804691E -:101E0000E443E406E6170469761C10252C430461BC -:101E1000174C6160174D296000E020BF1F68002F3C -:101E2000FBD0002E03D107691026B74307619068E5 -:101E30008005906801D5104A10436960A1600021B7 -:101E400019600121084A09031160F0BD10B504466C -:101E5000FFF7C8FF2060002010BD000000C5004053 -:101E600080E100E000C1004080E200E000ED00E021 -:101E700000C3004000C0004000FCFFFF70B51F49D8 -:101E80000A68002A17D000231D4601244A68521C04 -:101E90004A60092A00D34D600E792246B2400E688E -:101EA00016420AD072B60B6893430B6062B649685B -:101EB0000160002070BD052070BD5B1C092BE5D3BF -:101EC0000FA1362003F085F8F5E7012010498005C1 -:101ED00008607047EFF31081CA07D20F72B6012174 -:101EE00081400648036819430160002A00D162B6A8 -:101EF000EBE70248002101604160704708010020C3 -:101F00007372635C736F635F6576742E63000000A9 -:101F100000E200E00120810708607047012081078E -:101F2000486070471048C068C00700D00120704763 -:101F30000D488068C00700D0012070470A484069FA -:101F4000C00700D0012070470748C06970470649A4 -:101F50008A69D20306D589698907890F814201D12F -:101F6000012070470020704700040040F8B5FE4C87 -:101F7000207BE17A88421AD00126FC4D0027E07AC6 -:101F8000215C14200A4642435019037C052B0FD0D4 -:101F9000062B1BD0072B28D0437C012B33D0F4A178 -:101FA000F64803F016F8207BE17A8842E7D1F8BDC5 -:101FB0000674E07A0A2807D0E07A401CE072491CD7 -:101FC000C8B2AA5802210CE00020F7E70674E07AB4 -:101FD0000A2808D0E07A401CE072491CC8B2AA580E -:101FE00003219047DFE70020F6E70674E07A0A282D -:101FF00007D0E07A401CE072491CC8B2AA580821F8 -:10200000EFE70020F7E74774E07A0A2807D0E07A84 -:10201000401CE072491CC8B2AA580721E1E7002021 -:10202000F7E770B5D64D06206872D648002444778D -:10203000047738300473C472D34801F0F7FDD348F5 -:102040000475EC72D249601E88606C71AC70EC70E3 -:102050002C716C70CF48022104704470CE4804701B -:10206000047528300470491EFAD10120F1F750FDA3 -:102070000020F1F74DFD0120A871F0F741FDC748A0 -:10208000F0F750FDC64C2070C648F0F74BFD60706D -:10209000F1F7E2FC70BD10B5F1F709FDC04C2078F6 -:1020A000F0F75EFD6078F0F75BFDB54C207A002814 -:1020B00005D0FFF730FAF0F7E2FD0020207210BDE6 -:1020C00070B5AF4CA079002804D0A9A1B64802F0A1 -:1020D00080FF70BDE07A002804D11320A4A1400144 -:1020E00002F077FF0126A6710025E572607A0421CF -:1020F000142250439D4A80180174A5488168491CE8 -:1021000004D0691E81600120F1F702FD0020F1F783 -:10211000FFFCF1F7E3FC01F023FEF1F7E8FDA34833 -:10212000056005600120A249C0030860F0F74AFF7E -:1021300098480078022804D0032804D1E0780028C9 -:1021400001D0A67000E0A570F1F7BDFD70BD03469B -:1021500086490520142242435218203A127F002A51 -:1021600004D0401E0006000EF4D1704714224243F2 -:1021700051180A46403AD362012220390A77704743 -:10218000012805D0032805D1002903D1002070477C -:102190000029FBD010B47A4C002363707D4A0028DC -:1021A00090700CD002280AD007291AD20B007B4469 -:1021B0001B79DB189F441505070D0F111300D37011 -:1021C00003E01B2000E03A20D0700120607010BCBA -:1021D00070475820F8E77720F6E79620F4E7B52017 -:1021E000F2E710BC0020704710B56A484078F1F75C -:1021F00085FD80B210BD411E1422504310B55B4ACC -:102200008418203C042902D8207F002803D158A13B -:10221000684802F0DEFE207F012803D054A1664802 -:1022200002F0D7FE0020207710BD70B5554C607FBE -:10223000217F884201D1012500E00025F1F7F7FC5C -:10224000F1F75CFD617F227F914201D1012100E025 -:102250000021A942EBD170BDF7B50646481E844661 -:102260008EB0C0B2142204905043404A85182846CC -:102270000595007C2D1D07282AD13B4C0027E07ACC -:10228000227B824221D0235C049A934201D1012710 -:1022900001E0002F04D00A2811D0421CA25C225475 -:1022A0000A280ED0401C227BC0B28242EBD1002F04 -:1022B0000BD0207B002806D0207B401E04E00022AB -:1022C000ECE70020EFE70A202073059A0120107444 -:1022D00060462B4C04280FD814204143234808188B -:1022E0002038007F002807D00598007C012807D0FF -:1022F0001098807A012807D01DA1304802F069FEAD -:102300001098807A012871D10598184B007C02281A -:102310001AD0154C207B0A2874D0207BE17A401C0F -:10232000884204D1C92012A1800002F052FE059912 -:1023300001204874217B04986054207B0A2865D0D2 -:10234000207B401C20731CE1607A049A0146904275 -:1023500006D0014614277843C018807C9042F8D1FB -:10236000627A824235D12BE0A81C0020B81C0020E4 -:102370007372635C72656D2E63000000D50500000A -:102380003C1D0020701C0020481D0020901C0020D7 -:102390001C1D002012010020C81C0020931A0100FF -:1023A000100100206D1F01007F02000000F50040B9 -:1023B00080E200E0CD020000CE0200001703000022 -:1023C000617A14225143C918897C61720121A1727A -:1023D00007E014224243D21814277943927CC9188B -:1023E0008A74142206215043C01881741098007A10 -:1023F000062819D203007B441B79DB189F4408127E -:10240000100E0C0AE07A00288CD090E7002099E7A3 -:1024100000210FE0B4210DE073210BE0322109E02F -:102420000A2107E0062105E0FF20FE49E23002F024 -:10243000D0FD0021109802910068401A2860109980 -:10244000097A002912D00221401A0102090A2960E2 -:1024500010980268406810180002000A686010981E -:10246000807A0228109803D0007B74E00421EBE707 -:10247000007A002813D0022202981018844610987F -:102480004268604608301718E748029A4078904240 -:1024900002D9E278002A04D03846083005E0042248 -:1024A000EAE7029A801AC0190830627A062A1CD01C -:1024B000627A14235A43DD4BD2185268914214D0E9 -:1024C000DB4B0793617A14225143D84A89184A6832 -:1024D0008968921B891B12020902120A090A90429A -:1024E0003AD89A4238D8994236D83018C01B0002E0 -:1024F000000A286010996044CE4AC9680002000AA8 -:102500009446421A01239B0507929A4201D2104633 -:1025100014E00A1A09929A4201D207980EE0079A2B -:102520006346624503D9591A0818401C06E0099A07 -:10253000624506D9181A4018401C404200285FDC4A -:1025400003E0B849BC4802F044FD2868C019000205 -:10255000000A6860002028726868082708300002B6 -:10256000000A68601098407AA8721098007A687221 -:1025700003280ED200280CD0FFF7D4FC002803D08B -:1025800007E0002011B0F0BD02983A210F1A322066 -:102590000290A5480178012901D0032909D1417889 -:1025A0000298814205D9E078002802D10298081AE1 -:1025B000C71928689E4A801B844601026868090A78 -:1025C000801B03021B0A8F421AD81746914217D864 -:1025D000BB4215D8617A062916D0677A6146062271 -:1025E000039200923A4614235A43904BD2189368B0 -:1025F0009B1B8B4216D80397977C062FF2D177E06E -:10260000049801F059F9BCE7059802220499027474 -:10261000627A062A00D0627A827461720120A07206 -:1026200011B0F0BD062F63D0002239469446142223 -:102630007E4B4A43D21853689B1B834229D2917B1D -:10264000AB7A99421FD805980521049C7B4D0174F3 -:10265000287B0A2811D0287BE97A401C884203D1C4 -:102660007049774802F0B5FC287B2C54287B0A2857 -:1026700007D0287B401C287383E7E87A0028EFD036 -:10268000F2E70020F7E701218C46917C0629CED1A4 -:1026900002E0604600282AD03D46009114202A46D8 -:1026A000424362480621161831741038007B0A280C -:1026B000624816D0017BC07A491C814203D161A1D6 -:1026C000634802F086FC5D48017B4554017B0A2982 -:1026D0000BD0017B491C0173B57C0098A842DDD169 -:1026E00006E0C07A0028EAD0EDE70021F3E7009782 -:1026F0000599022008744D4D607AB84207D10599BA -:1027000000988874049860720120A07221E00398F8 -:10271000062F0FD0062803D14AA14E4802F059FCDB -:102720000398142250434019049981740599009824 -:1027300088740EE0062803D142A1474802F049FC04 -:102740000398142250434019049981740599062076 -:102750008874012011B0F0BD70B50D4606463F49A2 -:1027600000242046891BA04103D236A13C4802F038 -:1027700030FC3C490020491BA04103D231A13A481A -:1027800002F027FC394A70190021821A8C4101D3CA -:102790003749401870BDF8B5401EC0B214214843F7 -:1027A00022494518687B062813D203007B441B7915 -:1027B000DB189F44020C0A080604002066E0B420DF -:1027C00010E073200EE032200CE00A200AE0062020 -:1027D00008E0FF201BA1E23002F0FBFB697B002038 -:1027E000002953D0022140186968002440180C21A8 -:1027F00000026956000A00294ADBF1F77FFA174AFE -:1028000006460C27EF570021101AA14103D20DA153 -:10281000134802F0DEFB13490020C91BA0412CD253 -:1028200008A127E07023010012010020B81C00203D -:10283000FFFF3F00FFFFFF0014070000A81C00205F -:10284000090200007372635C72656D2E6300000004 -:10285000C7030000DF030000E5030000FF7F841EC4 -:10286000F50300000020A107F60300000080841E8D -:1028700000807BE1FB4802F0ACFBFB4AF019002131 -:10288000821A8C4101D3F9494018F8BD0421AAE706 -:10289000F1F734FA0C21695600224018F449091A5C -:1028A000A241F2D24042F8BDF0B5064683B0F148ED -:1028B0000190457A029534687068001B0702EE4863 -:1028C0003F0A001B0090062D2DD0142029464143BD -:1028D000EA480122081884464168E748920586467E -:1028E000081B904210D3631A93420DD302467046E0 -:1028F000724503D900984018401C05E073450ED975 -:10290000411A0819401C404200280CDA6046029522 -:10291000857C0198C0790028D5D003B0F0BDD84996 -:10292000D84802F056FB0298854226D0142148432D -:10293000D2490123401802908068CF499B058C46FC -:10294000011B8646994210D3221A9A420DD3634640 -:10295000614503D900997144491C06E01946624556 -:102960002DD9091A0819401C4142002905DD029899 -:10297000B17A807B814200D37446062D15D0BF49C1 -:102980001420454368184268121B1202120ABA4208 -:102990000BD2B27A837B9A4200D38468857C0198FB -:1029A000C0790028B9D1062DEAD13068A042B4D050 -:1029B000E0190002000A3460706003B0F0BDB04955 -:1029C000B04802F006FBD8E7F0B5AF4904464868C6 -:1029D00085B0C005C00D1CD0103840B200280CDAFC -:1029E0000207120F083A920892005118C96980072D -:1029F000C00EC1400806800F09E08108A34A890083 -:102A0000891809688007C00EC1400806800F002899 -:102A100008D000262078002806D0012804D0002005 -:102A200005B0F0BD0126F5E72079062813D2030092 -:102A30007B441B79DB189F44020C0A080604002023 -:102A400018E0B42010E073200EE032200CE00A20E1 -:102A50000AE0062008E0FF208949E23002F0B9FAD6 -:102A600021790020002905D002214718814D002E30 -:102A700002D003E00421F8E70020E87102AA6946C9 -:102A8000A068F1F745F9694608228A56E06801A96D -:102A90008018C01C01221F2801DA019209E003AA54 -:102AA000F1F736F96846007B002802D00198401CF7 -:102AB000019000990198401808300002000A019026 -:102AC000C81B0002000A009060796946887200986D -:102AD0000390F1F7ACF8009A019B121A181A6C498E -:102AE00012020002120A000A8A4216D8884214D83A -:102AF0006846FFF7D9FE00990398814205D0C819AE -:102B00000002000AF1F7FAF8A0600120E979002933 -:102B100086D0002EB0D005B0F0BD0020F6E7F3B5AA -:102B20008FB05C480C460B9001F088F85A4A0F9918 -:102B3000504E5518203D594F00280BD05848007D65 -:102B4000002803D057A15A4802F043FA2078012800 -:102B50007DD05FE1787F0A280CD0787F397F401CD8 -:102B6000884203D14FA1534802F033FA207801285C -:102B700004D00CE0387F0028F4D0F7E7E87F002885 -:102B800003D048A14C4802F024FA0120E877787F6E -:102B90000F991422494D504340190174207802289E -:102BA00023D0787F14214843451920792872607911 -:102BB00068722A460C322946A068F1F7A9F80C2061 -:102BC00028560F2804DD1F3828732868401C286009 -:102BD0000C22AA56281DE16802908818C01C1F28E4 -:102BE0003FDA029901200860FDE027494868C005E6 -:102BF000C00D20D0103840B200280CDA0207120FA6 -:102C0000083A920892005118C9698007C00EC14065 -:102C10000806800F09E081081C4A890089180968A4 -:102C20008007C00EC1400806800F002803D11DA1F7 -:102C3000234802F0CEF9787F14214843451900213A -:102C4000E0686A460591117303AA05A900E0D8E07F -:102C5000F1F75EF86A460C2010560F2832DD01208D -:102C600031E0B3E0F60300000080841E00807BE1C9 -:102C7000FF7F841E3C1D0020FFFFFF00B81C0020CA -:102C8000442801001407000000ED00E000E400E02B -:102C9000FFFF3F00481D002016010020701C00208F -:102CA000901C00207372635C72656D2E63000000DF -:102CB00017050000F5040000FA040000B01B002016 -:102CC0000605000000200599401808900220A8720F -:102CD0002079287260796872A068291DC01C039150 -:102CE0001F2801DA01200AE006AAF1F711F8684668 -:102CF000007E002804D0039803990068401C0860F7 -:102D0000287A062813D203007B441B79DB189F44E2 -:102D1000020C0A08060400200FE0B4200DE0732026 -:102D20000BE0322009E00A2007E0062005E0FF2042 -:102D3000FD49E23002F04DF900202179002943D00D -:102D400002214118069168680831401808990590D9 -:102D500008180699401A0C900020F071F0F767FFF0 -:102D600004462860089820180002000AE860707A7B -:102D7000062825D0707A14214843EC494018406851 -:102D80000090059940180002000A0190687A69468F -:102D900088726846FFF788FD0098019A001B121B95 -:102DA00000021202E24B000A120A0C99984207D85C -:102DB0008A4205D80099069808180002000A28607F -:102DC000F0790028C8D110E00421BAE704AA0299DA -:102DD000F0F79EFF6846007C002804D00298029914 -:102DE0000068401C08602078A872787F0A2806D006 -:102DF000787F401C78770B9800F038FF47E0002080 -:102E0000F8E7E87F002803D0CAA1CD4802F0E1F836 -:102E10000120E877CB490F9808742078022803D165 -:102E2000C4A1C94802F0D5F8C64D2079287260794E -:102E300068722A460C322946A068F0F769FF0C2018 -:102E400028560F2804DD1F3828732868401C286086 -:102E50000C22AA56281DE16802908818C01C1F2861 -:102E600003DA0299012008600CE003AA0299F0F746 -:102E70004FFF6846007B002804D002980299006842 -:102E8000401C08602078A872AE4901200875797F3F -:102E9000387F814223D0747A062C22D0F0F7C7FE07 -:102EA00014214C43A1496218117C042917D003292D -:102EB00015D0536892681B1A101A1B0200029C4915 -:102EC0001B0A000A082B0AD30A468B4207D89042F5 -:102ED00005D8787F397F884201D0F0F7F4FE11B031 -:102EE000F0BD787F397F8842F7D111B0F0BD10B5C1 -:102EF0000020F0F7FAFD10BD10B50120F0F7F5FD48 -:102F000010BDF1B5009802281FD0904C607A0628B9 -:102F100003D188A18E4802F05CF80026A671012535 -:102F2000E572607A03211422804F5043C019017466 -:102F3000F0F7CEFE009800280CD001282AD00328F4 -:102F40007CD0B5207BA1C00044E082480078EFF738 -:102F50000DFEF8BD8048007F002803D075A17F4892 -:102F600002F037F865717C4D00202E60F0F7D0FD3F -:102F7000A968481C04D0012300221846F0F7FEFD82 -:102F8000607A617A401CC0B2142251437A58012100 -:102F90009047F8BD0120F0F7BBFD607900280DD007 -:102FA0006D488068401C09D0607A617A401CC0B2CC -:102FB000142251437A5806219047F8BD6648007F95 -:102FC00001280AD0022812D0032824D0042836D0A1 -:102FD00058A1634801F0FDFFF8BD2079002803D017 -:102FE0002671F0F77AFEE5705B480677F8BD207A27 -:102FF000002804D1FEF770FAEFF718FE2572607A08 -:10300000617A401CC0B2142251437A580021904783 -:1030100051480677F8BD504F0123397B786800226C -:10302000411A1846F0F7AAFD2079002803D026712E -:10303000F0F753FEE57002203877F8BD1BE0464EEE -:10304000217870680123411A00221846F0F796FD96 -:10305000207A002804D1FEF73FFAEFF7E7FD25724A -:10306000607A617A401CC0B2142251437A58002120 -:1030700090473577F8BD607A617A401CC0B214225F -:1030800051437A5805219047F8BD10B52F4C607A0E -:10309000062803D127A1334801F09BFF607A617AAB -:1030A000401CC0B214225143204A52580421904778 -:1030B00010BDF0B583B006200290F0F7B8FD234CA8 -:1030C0000090617A28480190062920D0617A142066 -:1030D000414316480918097C042918D0617A142242 -:1030E00051430818007C03287BD00198009A03689C -:1030F00040689B1A801A1B0200020D491B0A000A35 -:10310000082B6ED30A468B426BD8904269D812487E -:103110008068401C03D007A1144801F05AFF00202A -:103120006071607A062823E0A42C0100B81C0020FE -:10313000FFFF3F007372635C72656D2E63000000D9 -:103140001E050000901C0020240500003C1D0020EE -:1031500055050000100100201C1D00206105000025 -:103160009C050000AF0500002C1D0020EB050000B1 -:1031700007D16078002804D0FE48C178417081787A -:103180000170607A062815D0607A1421FA4A484303 -:103190008018007C04280DD1607A0290617A0120A9 -:1031A0001423594389180874617A59438918897C12 -:1031B0006172A072F14D687F297FF14F884233D050 -:1031C000F04E287F142148438019007CC05D0128FF -:1031D000287F07D048438019007CC05D02282FD08B -:1031E00044E001E2142148438019807A01280AD082 -:1031F000287F0221142250438019007CC155287F6A -:103200000A2808D009E0297F002014225143891997 -:10321000097CC8552AE0002001E0287F401C28775F -:10322000687F297F8842CCD1D74D287D00284CD09B -:10323000287CC15D012928D0C05D022830D03AE049 -:10324000287F142148438019807A012803D0CFA118 -:10325000D14801F0BEFE297F002014225143891974 -:103260008872297F51438919097CC855287F142108 -:1032700048438219287F48438019017C0098FEF753 -:10328000EBFF287F0A28C8D1C5E7A97A012904D015 -:103290000221C155002028750DE00021C1550AE02A -:1032A000A87A012803D0B9A1BC4801F092FE002001 -:1032B000A872297CC855287D002806D0297CB24AEE -:1032C0000098FEF7C9FF00202875029806281ED036 -:1032D00014214843A8494018017C012917D107212E -:1032E000AF4D0174287B0A283CD0287BE97A401C2A -:1032F000884203D1A5A1AB4801F06BFE297B02985F -:103300006854287B0A2831D0287B401C2873607AB7 -:1033100006287DD0A07A00287BD00020A072617A98 -:10332000142041439448A04B0A18566891681D46E2 -:10333000D2687C35DE67AA6069609C4D697E002991 -:1033400016D00226617A14228B4851430818407B1C -:1033500006281BD203007B441B79DB189F440A1408 -:1033600012100E0CE87A0028C4D0C7E70020CDE781 -:103370000426E7E700200FE0B4200DE073200BE007 -:10338000322009E00A2007E0062005E0FF207FA1A7 -:10339000E23001F01EFE00202873697E022901D070 -:1033A000012910D12969009A09188A1A1202120AF1 -:1033B0003A2A08D90320687632390802000A2861BF -:1033C000322028730AE0322808D2207A00280ED151 -:1033D000FEF782F8EFF72AFC012007E0207A0028A8 -:1033E00005D0FEF798F8EFF74AFC002020726149FB -:1033F0000822487820700978012901D0032906D1D4 -:1034000001212171297B884201D9421A083201E049 -:1034100091E0A1E0A378002B00D0921C2179002933 -:1034200001D1002B5DD09446614A00990092019A27 -:10343000176852687F1A511A3F0209023F0A090AA7 -:10344000BC451BD85A4A974218D8009A914215D8C1 -:10345000297B884223D92B69421A9A1A1202120A2E -:10346000101880190002000A2A616860002914D02F -:10347000032028770006000E3ED14CE0002020718A -:10348000A070297B002925D02869401880190002E6 -:10349000000A6860022028772EE00120E9E78142D7 -:1034A0000BD92A69511889190902090A696000288B -:1034B00001D00420DDE70220DBE7002B03D133A19C -:1034C0003C4801F086FD286980190002000A686006 -:1034D000002004E0296989190902090A696028772E -:1034E00019E0287B00280FD02969081880190002EC -:1034F000000A6860022028772869012381190022C8 -:103500001846F0F73BFB09E0286980190002000A21 -:103510006860002028770120F0F7FAFA607A142119 -:10352000484315490C22401882560123002069683F -:10353000F0F724FB10E00120F0F7EAFA0020F0F7A2 -:10354000E7FAF0F7CBFA207A002805D0FDF7E3FF81 -:10355000EFF795FB00202072A078002804D0F0F748 -:10356000BCFB0020E070A0706078002827D00148E4 -:10357000C17821E012010020B81C0020701C00203E -:1035800015010020B01B0020901C00207372635CAA -:1035900072656D2E630000000D0600002906000014 -:1035A000A81C00203B060000B01C00201C1D0020B1 -:1035B000FFFF3F008D060000417081780170207987 -:1035C000002806D00020CE49E0700978002900D1FB -:1035D0002071CC48017BC07A814203D0CA48407830 -:1035E000EFF7C4FA0120E07103B0F0BDF0B5C74CAD -:1035F0000746607A83B0062804D16F20C4A1000179 -:1036000001F0E7FC607A1421C44E48438019007C25 -:10361000032803D0BEA1C24801F0DBFCC14DA8685D -:10362000401C03D0BAA1C04801F0D3FC607A142139 -:10363000484381190C20085600216A4600911171F7 -:10364000C01901AA6946F0F763FB6A4604201056C8 -:103650000F2801DD012000E0002000994018696872 -:1036600040180102090AA9606079002804D00123EA -:1036700000221846F0F782FA03B0F0BD70B5AC4CEA -:10368000AA4A0B1AA34214D3451AA54211D3934256 -:1036900003D9101A43185B1C0BE0954204D9511A48 -:1036A0000818401C434204E099A1A24801F091FC93 -:1036B0000023184670BD10B50146012300220220E8 -:1036C000F0F75CFA10BD10B50220F0F721FA10BD3A -:1036D00010B5F0F7ACFA10BDF0B58C4D0446E87AA1 -:1036E00083B0002803D18AA1934801F072FC642CB6 -:1036F0004DD3924A00210846121B884147D3904877 -:10370000417F007F814242D18E48007D00283ED11A -:10371000687A1421814F4843824EC519306801AA46 -:1037200000196946F0F7F4FA6946042008560028A3 -:1037300002DD0098401C0090A96800986B680A1888 -:10374000D21A1202804B120A9A4220D8AA7C062A68 -:1037500008D014235A43D2195268511A0902090A8F -:10376000814214D3B068401C05D00120F0F7D0F995 -:103770000020C043B060306800193060A86800992C -:1037800040180002000A7061012003B0F0BD002063 -:1037900003B0F0BDF8B50646401EC4B214205F4920 -:1037A00060434518287C002804D1772058A10001E7 -:1037B00001F00FFC6248017F407F81420CD0634AD8 -:1037C00014234B439B181B7CB3420CD00A290CD00A -:1037D000491CC9B28142F3D15A48017D002961D008 -:1037E000007CB0425ED10020F8BD0021F1E7052940 -:1037F00003D0062901D0072928D101212974C17AD3 -:103800000023027B8A4221D00246565CA64201D1A7 -:10381000012301E0002B04D00A2911D04E1C965D33 -:1038200056540A290ED0491C167BC9B28E42ECD1DF -:10383000002B0BD0117B002906D0117B491E04E020 -:103840000026ECE70021EFE70A211173697C0029CB -:103850002AD06F74C17A0023027B8A4224D0425C52 -:10386000A24201D1012301E0002B04D00A2912D089 -:103870004A1C825C42540A290FD0491C027BC9B2FF -:103880008A42ECD1002B0FD0027B0146002A06D0E1 -:103890000A7B521E04E00022EBE70021EEE70A2239 -:1038A0000A7301E017480027297C01299FD16A7C0F -:1038B000002A9CD10120F8BD70B505461420174A96 -:1038C0000521684380180F4C0174207B0A2811D011 -:1038D000207BE17A401C884203D10DA11C4801F0F5 -:1038E00078FB207B2554207B0A2807D0207B401CB6 -:1038F000207370BDE07A0028EFD0F2E70020F7E7F0 -:1039000012010020A81C0020100100203C1D0020F6 -:103910007372635C72656D2E63000000B81C00203A -:10392000F10600001C1D0020F2060000FF7F841E2F -:103930000020A1071407000033070000FF1FA107A4 -:10394000701C0020901C0020FFFF3F00B01B0020D7 -:103950000902000010B501462022094801F09CF937 -:1039600007490020C877084610BD06490120486174 -:103970000548064A0168914201D100210160704763 -:103980004C1D0020000500401C010020BEBAFECAEC -:10399000064A10705170704704481C22017841712A -:1039A00042700170704770477047704720010020D7 -:1039B00030B50346002002460DE09C5C2546303DB4 -:1039C0000A2D02D30020C04330BD0A256843303899 -:1039D0002018521CD2B28A42EFD330BD70B50D46CA -:1039E000144608E00A2101F0D1F92A193031203AB1 -:1039F000641ED177E4B2002CF4D170BD10B5002361 -:103A000010E0040A00020443A0B2CC5C444020064B -:103A1000000F60400407240C44402006C00C6040A6 -:103A20005B1C9BB29342ECD310BD10B520380C4602 -:103A3000030001F0BFFB33E0DBE41B1F23272C3125 -:103A4000373C41474D5054585C606D7165697478DE -:103A50007C8084888C9094989C9FA2A6AAAEB2B8D1 -:103A6000BCC0C5CACFE9F0F3D3D7F800206800F096 -:103A7000DDF8D6E0206800F0E1F8D2E0206800F040 -:103A8000F5F8CEE0207840B200F092FAC9E0207854 -:103A900040B200F0B0FAC4E02078616840B200F0B3 -:103AA000C3FABEE0207840B200F0D3FAB9E0207843 -:103AB00040B200F0DEFAB4E02078217940B200F0A4 -:103AC000E9FAAEE02078616840B200F013FBA8E0AC -:103AD00000F01FFBA5E0206800F023FBA1E02078A8 -:103AE00000F038FB9DE02068FDF7F5FD99E02068C7 -:103AF000FDF7F5FD95E021792068FDF7F7FD90E0F1 -:103B00002068FDF73FFC8CE02068FDF740FC88E072 -:103B10002078FDF740FC84E0FDF74EFC81E0207842 -:103B2000FDF750FC7DE02078FDF762FC79E020682D -:103B3000FDF77BFC75E02068FDF77DFC71E02068F7 -:103B4000FDF77FFC6DE02068FDF780FC69E02068F0 -:103B5000FDF782FC65E02068FDF784FC61E02068E9 -:103B6000FDF785FC5DE00846EDF7F0FA59E0EFF768 -:103B700070F856E0EFF79DF853E02068EFF7A5F8EE -:103B80004FE0206800F080F84BE0206800F082F8F9 -:103B900047E0206800F083F843E02078A26861687D -:103BA00000F082F83DE0207800F089F839E02078D4 -:103BB00000F091F835E02078616800F098F830E086 -:103BC0002078616800F09FF82BE02179207800F0E0 -:103BD000D5FB26E02068FDF778FE22E02068FEF79E -:103BE0004DF91EE02068FEF731F91AE0204607C8BB -:103BF00000F0B9FC15E0206800F00CFD11E06168F0 -:103C0000206800F037FD0CE0206800F029FF08E094 -:103C100009E003E0FFE700F03BFF02E0206800F06E -:103C200073FF206010BD0120086010BD00210170ED -:103C3000084670470146002008707047EFF3108176 -:103C4000C907C90F72B60278012A01D0012200E02B -:103C5000002201230370002900D162B6002A01D09E -:103C600000207047012040037047E7E7EFF3108121 -:103C7000C907C90F72B600220270002900D162B6CE -:103C800000207047F2E7000038490968C9B20160B6 -:103C9000002070473549C0B2486000207047334962 -:103CA000C0B2886000207047082801D330487047B0 -:103CB000C3002E4818180161426100207047022895 -:103CC00002D32B48401C70472A4A0121C0008018AB -:103CD000016000207047022802D32548401C70472D -:103CE000244A0121C000801841600020704702284A -:103CF00002D31F48401C70471F4A8000C9B2801879 -:103D0000016000207047022802D31948401C704708 -:103D1000194A800080180068C0B20860002070470F -:103D200010B5FF20114AC043906008200021C30055 -:103D30009B1819615961401C1028F8D300200E4AC5 -:103D400005E0022803D383009B18196004E0830078 -:103D50009B181C68E4B21C60401C0428F1D310BD01 -:103D6000FF200249C04388607047000000F5014011 -:103D70000820000000F0014000F8014010B572B6C4 -:103D800000F0DEF800280BD0EDF78AFAFEF783F991 -:103D900000F0BBFA6F490020C86288626E49086073 -:103DA00062B6002010BDF3B5002501200007C06AEF -:103DB00081B0C0430006000E04D168480068401C72 -:103DC00000D1012572B600F0BBF8002801D062B620 -:103DD00087E0EDF7D1F9EDF767FA614C614A002110 -:103DE0002368CB40DB071FD00346CB40DB0718D14D -:103DF0004BB2002B07DA1E07360F083EB608B60096 -:103E0000B618F66904E09E08574FB600F6193668F2 -:103E10009B07DB0EDE4033069B0F012B04D0032BE8 -:103E200002D062B65148FEBD491C2029D8D3019C5E -:103E300001204F49230001F0BDF914222424242439 -:103E4000242424240B0D1012142016181A1C1E2FC3 -:103E5000002400E00124C86314E00224FBE70324EB -:103E6000F9E70424F7E70824F5E70924F3E70A242F -:103E7000F1E70B24EFE70C24EDE70524EBE707243B -:103E800000E00624D06901210002000AC9070843A6 -:103E9000D061002D04D009E062B601200003FEBD10 -:103EA0002C4D3448E862EDF7FFF9A8622A49324800 -:103EB0000860324902980860EDF7F6F9214600F0F3 -:103EC0000BFAFEF7AEF800F00DFC00F087FA01984F -:103ED000EDF7B4F9040062B603D0FFF74FFF2046B8 -:103EE000FEBD0020FEBD10B5044600F029F80028F4 -:103EF00000D001202070002010BD21490860002062 -:103F0000704710B50C46102808D011280BD0122885 -:103F10000CD013280ED00120086010BD6168206805 -:103F2000FFF741FF0AE0FFF729FF07E02068FFF7EE -:103F3000DAFF03E01249206808600020206010BD0D -:103F400005480D490068884201D1012070470020D2 -:103F500070470000000500401C0100200010001008 -:103F600000E100E000ED00E000E400E001100000EE -:103F70004000004000200000BEBAFECA2801002018 -:103F8000040000208107C90E002808DA0007000F8E -:103F900008388008814A80008018C06904E08008E1 -:103FA0007F4A800080180068C8400006800F704774 -:103FB00010B5044600F0DBF8002813D02046FFF7C8 -:103FC000E1FFC0B200F0E1F800280DD07549E2062B -:103FD0000B78D20E01209040002B08D04A68104385 -:103FE000486006E0704810BD6F48401C10BD6F4926 -:103FF0000860002010BD10B5044600F0B8F8002895 -:104000000BD06849E2060B78D20E01209040002BBD -:1040100005D04A6882434A6004E0634810BD6349A2 -:1040200080310860002010BD70B50D46044600F0D8 -:104030009EF800280BD05E480068E206D20E0121EF -:104040009140084000D001202860002070BD5648F3 -:1040500070BD10B5044600F08AF8002807D0E106CC -:10406000C90E0120884052490860002010BD4E480A -:1040700010BD10B5044600F07AF8002808D0E1061B -:10408000C90E012088404A4980310860002010BDD7 -:10409000454810BD70B50D46044600F068F800288C -:1040A00019D0284600F071F8002816D0A007C20EDB -:1040B000FF209040A907090E9140002C10DA22073A -:1040C000120F083A9308354A9B009B18DA6982431D -:1040D0000A43DA610CE0344870BD3348401C70BDBF -:1040E000A3082F4A9B009B181A6882430A431A6050 -:1040F000002070BD70B50C46054600F038F8002869 -:1041000005D02846FFF73EFF2070002070BD2648EE -:1041100070BDBFF34F8F21492648C860BFF34F8F52 -:10412000FEE770B51F4C05462178012000290ED10D -:10413000207072B600F0F8F81C4E8036316881436A -:10414000616000F0F1F8C043306062B60020287072 -:10415000002070BD13490A78002A06D0002804D137 -:10416000124A48681060002008700020704710B59F -:104170000446202805DA00F0D7F80121A1400842C2 -:1041800001D0002010BD012010BD012803D003285C -:1041900001D00020704701207047000000ED00E0D2 -:1041A00000E400E02C0100200120000000E100E01C -:1041B00000E200E00400FA05F8B504468007002597 -:1041C0000126002804DA5A48C563C66302208443E6 -:1041D000E00404D55748C563C66380148443600077 -:1041E00003D55548456080058443E00504D5534810 -:1041F000C563C66380158443A00404D55048C563D5 -:10420000C6634014844360042704C00FF90F88423A -:1042100003D04CA1612000F0DCFEB80F0AD04E495B -:10422000CD634E48C563C563CE63C663C6630320D2 -:104230008003844320050AD5494FFD632F20ECF706 -:10424000B3FFFE632F20ECF7AFFFF8148443002C7C -:1042500003DAFFF765FD640064084248044203D0B6 -:1042600038A1902000F0B5FEF8BDF0B500210A4657 -:10427000FF230446CC40E4072AD04CB2E606F60EF3 -:104280000125B540384E3560384E3560002C11DAC6 -:1042900025072D0F083DAE08354DB6007619F56996 -:1042A000A407E70E1C46BC40A5431446BC4025436A -:1042B000F5610DE0A6082F4DB60076193568A40704 -:1042C000E70E1C46BC40A5431446BC402543356060 -:1042D000491C2029CDD3F0BD70B5274C0D46206078 -:1042E000FFF76AFF2068FFF7C0FF2846EEF77AFD68 -:1042F000FDF7D6FAFDF782F9FFF712FDFDF7D5F8C5 -:10430000EEF7FEFB00F06AF870BD10B51A4C20689D -:10431000FFF752FF2068FFF7A8FFFFF701FDEEF758 -:10432000E6FD0020206010BD1348006870470000C3 -:10433000C01F0040C0CF004000E50140C08F0040DA -:10434000C0DF00407372635C736F635F636F6E66A0 -:1043500069672E6300000000C0EF0040C0FF00400E -:10436000C0BF0040FEFF0FFC80E100E080E200E003 -:1043700000ED00E000E400E03401002070B500240E -:1043800002460D4620462146002A1ED0012A04D0AE -:10439000022A04D0032A1ED103E0012002E00220F9 -:1043A00013E003202B0000F005FF07160507090B9B -:1043B0000D0F1600012108E0022106E0032104E0B0 -:1043C000042102E0052100E00621FDF7D9FE0028C6 -:1043D00001D0204670BD0724FBE70000B148002152 -:1043E00001708170704770B5AF4D01236B60AF4BAA -:1043F0001C68002CFCD0002407E00E6806601E68D4 -:10440000002EFCD0001D091D641C9442F5D3002031 -:10441000686018680028FCD070BD70B5A14C0D46CE -:104420006178884203D0A2A16C2000F0D2FD2B005D -:1044300000F0C0FE094F0625254F4F4F4F464F0055 -:104440002078022803D09AA1702000F0C2FD03203A -:104450002070A078022802D0012804D008E0A068CB -:1044600000F0CEFB04E02269E168A068FFF7BBFF23 -:104470000020A070FDF724FE0420207070BDFDF721 -:10448000D4FE01466068FFF7F9F805462078022857 -:1044900003D087A1842000F09CFD894A89498A487D -:1044A000954206D8401BC86086496078FEF737FB06 -:1044B00070BD854202D802224A71F3E7032003E06F -:1044C000A0780028FAD10220FDF704FD00F0E0F802 -:1044D00070BD77A1AD2000F07CFD70BD70B50546C4 -:1044E000FDF7A3FE6F4C60602078012803D070A117 -:1044F000B42000F06EFD73490220087000220A719A -:104500008D6003224A71704ACA6020706078FEF79D -:1045100006FB70BD10B5634CA078002802D120784E -:10452000002801D0112010BD6848FDF710FE607012 -:104530006078002803D001202070002010BD0320E7 -:1045400010BD10B50124020B64040121604BA04290 -:1045500002D29140186802E0203A58689140084021 -:1045600000D0012010BDF8B50E46910005464F1948 -:1045700014463F1F009100F054FB009980028919F6 -:10458000091FB14201D2012200E00022002C03D019 -:10459000FF2101318C4201D90920F8BD4D498D42DE -:1045A00019D3AF4217D3854205D2874203D228469A -:1045B0003043800701D01020F8BD8E420BD3002A73 -:1045C00009D12846FFF7BDFF002804D13846FFF780 -:1045D000B8FF002801D00F20F8BD3F483F490068D0 -:1045E000884205D0224631462846FFF7FCFE0FE000 -:1045F000FFF790FF0028EFD12A480121C6608560AF -:10460000046181702046312148431430FFF766FF72 -:104610000020F8BD10B504462E48800A84420BD312 -:1046200000F0FFFAA04201D8102010BDA0020446FD -:10463000FFF787FF002801D00F2010BD264827492B -:104640000068884203D0204600F0DAFA0AE0FFF75B -:1046500061FF0028F1D11348022184608170204855 -:10466000FFF73CFF002010BD1A48010B01208840D5 -:10467000401E704700B50B460246FFF7F5FF10429B -:1046800001D00F2000BD124802604360002000BD31 -:1046900010B5044C6078FDF7AEFD00202070A070CE -:1046A00010BD00003801002000E5014000E4014099 -:1046B0007372635C736F635F666C6173682E630013 -:1046C000307500006C1D0020D0FB01001B44010070 -:1046D00000060040006001001C010020BEBAFECAB6 -:1046E00010540000F74805218170002101704170CD -:1046F000C1708160704710B5F3490A78022A07D06B -:10470000CA681018C860C8689638FEF76FFF10BDF9 -:104710008A68101888608868F6E70378EB49EC4AE5 -:10472000002B02D0012B10D014E00379002B01D014 -:10473000012B0FD14379002B01D0012B0AD18368C3 -:10474000643B8B4206D2C06810E00379002B03D093 -:10475000012B01D0002070474379002B01D0012BA1 -:10476000F8D1C368643B8B42F4D280689042F1D8A0 -:1047700001207047F8B504460226FEF7BDFB00682D -:10478000002803D0D3A1BE2000F023FC0127CD4D8B -:10479000002C08D02078002817D0012805D0022846 -:1047A00011D0032813D02F710DE06068C82808D3FA -:1047B000FEF792FF002804D06068FFF79CFF0126F7 -:1047C00003E0002601E000F0F9F93046F8BD287852 -:1047D0000028F8D16068FFF7A0FF0028E3D06068E8 -:1047E0000078002826D0A878042803D0B9A1F820A2 -:1047F00000F0EFFBB44F00203870606800790128AA -:1048000000D00020387160684079002837D003203C -:10481000787160688168E868FDF79EFFB86060683D -:10482000C0689630F8600320A870A749E878FEF7C2 -:1048300076F9C8E7A4480221017061680979012965 -:1048400019D00021017161684979002915D003212F -:10485000417161688968963181606168C968C16029 -:10486000C068984C14346060FDF7DFFC20606F7006 -:104870000220A870A7E70321E4E70221E8E702206D -:10488000C6E7F8B58F4C0D46E178884204D0FF208A -:1048900090A11A3000F09DFB28468A4F0025012682 -:1048A0001437030000F086FC090612375A7C8D97F6 -:1048B000C4A0C400A078032807D0A078022804D0A0 -:1048C000FF2084A11E3000F084FBF8BDA0780328EF -:1048D00007D0A078022804D0FF207EA1223000F06B -:1048E00078FB0420A07025712078002810D1FFF7F4 -:1048F00002FFE078FDF74FFFE0607D49886A7D4A5E -:10490000024022617B4AD24310408862002050E07E -:1049100000F054F9F8BDA078032807D0A078022849 -:1049200004D0FF206BA1453000F053FB2078002815 -:1049300002D000F04FF9F8BDA07803281FD1042061 -:104940002AE0091A6048C1600146E078FEF7E7F8FE -:10495000F8BD0420FDF7BEFAA570F8BDA0780328C5 -:1049600007D0A078022804D0FF205AA1663000F0BA -:1049700030FB20780028DCD1A07803280BD0FDF78D -:1049800054FC01463868FEF779FE0028E1DB7968BF -:104990008142DEDBD5E70520FDF79CFAA670F8BD65 -:1049A000A078042804D0FF204AA1873000F011FB32 -:1049B0000220A1688847FFF7DDFEFF260546C036C6 -:1049C00042E0A078042804D0FF2042A18C3000F0FF -:1049D00000FB0120EDE7A078042899D0FF203DA13D -:1049E000913000F0F6FA93E7A07804280AD06078B6 -:1049F000002802D0A078022804D0FF2035A19630EC -:104A000000F0E7FA2078002893D12079002804D01C -:104A10000620FDF75FFA2571C0E76078002805D011 -:104A20002949E078FEF77BF86570F8BD0720B3E709 -:104A3000FF2028A1B13046E7002D0AD0012D06D075 -:104A400024A1304600F0C5FA022DF5D1F8BD0420AE -:104A500000E00320A1688847FFF78CFE0546F3E7D6 -:104A600070B5050005D0174CA078052803D011209B -:104A700070BD102070BD2048FDF769FBE070E07844 -:104A8000002803D0A5600020A07070BD032070BD79 -:104A900010B50C480178002901D0112010BD817893 -:104AA00005292BD0817801292AD08178002927D0A7 -:104AB000012101708178012922D0807800281FD03F -:104AC00020E000004C0100207C1D00203D860100FC -:104AD000FF1FA1077372635C736F635F7261646928 -:104AE0006F5F74696D65736C6F742E6300000000F6 -:104AF0000005004002810080834801000F2010BDA6 -:104B000000F068F8002010BDF8B5394E0446B078C2 -:104B1000002801D001280DD1002C0DD02046FFF730 -:104B2000FCFD00280AD02078324D002808D0B0784B -:104B3000012823D00F20F8BD1020F8BD0720F8BDB4 -:104B400002272F702079012814D000202871607965 -:104B5000002811D003206871A0689630A860E06832 -:104B6000E860E868224C14346060FDF75EFB20606A -:104B7000B77019E00320E9E70220ECE70020287075 -:104B80002079012816D0002028716079002813D0E0 -:104B900003206871A168F068FDF7DEFDA860E06899 -:104BA0009630E8600320B0701249F078FDF7B7FF47 -:104BB0000020F8BD0320E7E70220EAE710B50E4821 -:104BC000816A0E4A11400A4A126911438162FDF757 -:104BD00077FA10BD10B5064CE078FDF70CFB082005 -:104BE000FDF778F90520A07000202070607010BDDE -:104BF0004C0100207C1D002000050040FD7EFF7F51 -:104C00000A4A022151600A490B68002BFCD09060CF -:104C100008680028FCD00020506008680028FCD0FC -:104C200070470120000740697047000000E501401F -:104C300000E4014070477047704770477047034673 -:104C400010B50B439B070FD1042A0DD308C810C918 -:104C5000121FA342F8D018BA21BA884201D9012004 -:104C600010BD0020C04310BD002A03D0D30703D0DD -:104C7000521C07E0002010BD03780C78401C491C32 -:104C80001B1B07D103780C78401C491C1B1B01D14E -:104C9000921EF1D1184610BDF8B5042A2CD3830713 -:104CA00012D00B78491C0370401C521E83070BD096 -:104CB0000B78491C0370401C521E830704D00B78EC -:104CC000491C0370401C521E8B079B0F05D0C91A4C -:104CD000DF002023DE1B08C90AE0ECF775FAF8BDF7 -:104CE0001D4608C9FD401C46B4402C4310C0121F8D -:104CF000042AF5D2F308C91A521EF0D40B78491CC5 -:104D00000370401C521EEAD40B78491C0370401CEF -:104D1000521EE4D409780170F8BD01E004C0091FF7 -:104D20000429FBD28B0701D50280801CC90700D063 -:104D30000270704700290BD0C30702D00270401CDC -:104D4000491E022904D3830702D50280801C891ED4 -:104D5000E3E70022EEE70022DFE70378C278194696 -:104D6000437812061B0219438378C0781B04194349 -:104D700011430902090A000608437047020A087035 -:104D80004A70020C8A70020ECA7070470022030932 -:104D90008B4273D3030A8B4258D3030B8B423CD311 -:104DA000030C8B4221D312E003460B437FD4002235 -:104DB00043088B4274D303098B425FD3030A8B42AF -:104DC00044D3030B8B4228D3030C8B420DD3FF2219 -:104DD000090212BA030C8B4202D31212090265D0E7 -:104DE000030B8B4219D300E0090AC30B8B4201D39A -:104DF000CB03C01A5241830B8B4201D38B03C01AE1 -:104E00005241430B8B4201D34B03C01A5241030B57 -:104E10008B4201D30B03C01A5241C30A8B4201D308 -:104E2000CB02C01A5241830A8B4201D38B02C01AB3 -:104E30005241430A8B4201D34B02C01A5241030A2A -:104E40008B4201D30B02C01A5241CDD2C3098B420F -:104E500001D3CB01C01A524183098B4201D38B018C -:104E6000C01A524143098B4201D34B01C01A52412F -:104E700003098B4201D30B01C01A5241C3088B4274 -:104E800001D3CB00C01A524183088B4201D38B005F -:104E9000C01A524143088B4201D34B00C01A524101 -:104EA000411A00D201465241104670475DE0CA0FD8 -:104EB00000D04942031000D34042534000229C4698 -:104EC00003098B422DD3030A8B4212D3FC228901A2 -:104ED00012BA030A8B420CD3890192118B4208D378 -:104EE000890192118B4204D389013AD0921100E0DA -:104EF0008909C3098B4201D3CB01C01A52418309EE -:104F00008B4201D38B01C01A524143098B4201D31A -:104F10004B01C01A524103098B4201D30B01C01A45 -:104F20005241C3088B4201D3CB00C01A52418308BF -:104F30008B4201D38B00C01A5241D9D243088B4215 -:104F400001D34B00C01A5241411A00D201466346B8 -:104F500052415B10104601D34042002B00D549421C -:104F6000704763465B1000D3404201B50020C04645 -:104F7000C04602BD704770477047704710B500F0DB -:104F800059F810BD30B58C180278401C13071B0F60 -:104F900001D10378401C120906D10278401C03E0BD -:104FA0000578401C0D70491C5B1EF9D101E00B70A7 -:104FB000491C521EFBD1A142E6D3002030BD0000A7 -:104FC00001231B68134B1860134B1960134B1A60B5 -:104FD0007047134A134B13607246053AF0E7114AC3 -:104FE0000F4B1B689A420ED10D4B002018600198A0 -:104FF0000D4B04B598470CBC9E460246029800999A -:105000000A4B1B68184706980599094B1B68DB6813 -:105010001847000070010020740100207801002072 -:1050200068010020EFBEADDE5539010028010020E7 -:10503000040000201D481E497047FFF7FBFFECF7F6 -:105040007DF800BD01200007C06AC0B2FF2804D16E -:10505000184819490968884202D01848184901605F -:10506000184819490968884203D1184A13605B68D7 -:10507000184700BD20BFFDE7124813490968884260 -:105080000ED1134B18680B498842F3D080F308887F -:105090001049884204DD1048026802210A43026078 -:1050A0000E4880470E4880470E480047901D00205C -:1050B000901D0020FFFFFFFF001000102C05004096 -:1050C0000800000000100000000000200400002084 -:1050D0000060010000200020240500406B39010021 -:1050E00045500100C14F01001348704502D1EFF354 -:1050F000098101E0EFF308818869023800781028FF -:1051000014DB202810DB23280BDB0C4A12680C4B25 -:105110009A4203D1602804DB0A4A10470220086043 -:105120007047094A10470000084A1047084A1268A9 -:105130002C32126810470000FDFFFFFF1C01002009 -:10514000BEBAFECAAD1200002B3A0100033F0100B7 -:10515000040000200D4B0E4908470E4B0C49084730 -:105160000D4B0B4908470D4B094908470C4B0849A3 -:1051700008470C4B064908470B4B054908470B4BA2 -:10518000034908470A4B024908470000052E000062 -:10519000E13D0000BD2F0000873C0000353C0000D1 -:1051A000E9390000B912000063170000493D000012 -:1051B000AB2B000030B47446641E2578641CAB42EF -:1051C00000D21D46635D5B00E31830BC1847000049 -:1051D00002490020C861203908727047E0030020AE -:1051E00000020207FFFFFFFF0000FFFF01020408AB -:1051F00010204080555555D6BE898E00F401FA0026 -:10520000960064004B0032001E00140001000300F1 -:10521000000001000000000000000000000000008D -:1052200000000000870000000000000000000000F7 -:105230000000000000000203040500000E0F000043 -:10524000705201000800002010000000041100004E -:10525000805201001800002064010000844F01000A -:10526000A45201007C010020141C00002011000049 -:105270000249022208681042FCD0704700E200E0B8 -:10528000E1078F56FF9900CD29022B01360100015D -:1052900000EC3720FB349B5F8074800010027001AB -:0452A000E4C54F0111 -:00000001FF
--- a/TARGET_NRF51822/TARGET_NORDIC/TARGET_NRF51822/PeripheralNames.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2013 Nordic Semiconductor - * - * 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 MBED_PERIPHERALNAMES_H -#define MBED_PERIPHERALNAMES_H - -#include "cmsis.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define STDIO_UART_TX TX_PIN_NUMBER -#define STDIO_UART_RX RX_PIN_NUMBER -#define STDIO_UART UART_0 - -typedef enum { - UART_0 = (int)NRF_UART0_BASE -} UARTName; - - -typedef enum { - SPI_0 = (int)NRF_SPI0_BASE, - SPI_1 = (int)NRF_SPI1_BASE, - SPIS = (int)NRF_SPIS1_BASE -} SPIName; - -typedef enum { - PWM_1 = 0, - PWM_2 -} PWMName; - -typedef enum { - I2C_0 = (int)NRF_TWI0_BASE, - I2C_1 = (int)NRF_TWI1_BASE -} I2CName; - -typedef enum { - ADC0_0 = (int)NRF_ADC_BASE -} ADCName; - -#ifdef __cplusplus -} -#endif - -#endif
--- a/TARGET_NRF51822/TARGET_NORDIC/TARGET_NRF51822/PortNames.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2013 Nordic Semiconductor - * - * 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 MBED_PORTNAMES_H -#define MBED_PORTNAMES_H - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - Port0 = 0 //GPIO pins 0-31 -} PortName; - -#ifdef __cplusplus -} -#endif -#endif
--- a/TARGET_NRF51822/TARGET_NORDIC/TARGET_NRF51822/TARGET_NRF51822_MKIT/PinNames.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,153 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2013 Nordic Semiconductor - * - * 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 MBED_PINNAMES_H -#define MBED_PINNAMES_H - -#include "cmsis.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - PIN_INPUT, - PIN_OUTPUT -} PinDirection; - -#define PORT_SHIFT 3 - -typedef enum { - p0 = 0, - p1 = 1, - p2 = 2, - p3 = 3, - p4 = 4, - p5 = 5, - p6 = 6, - p7 = 7, - p8 = 8, - p9 = 9, - p10 = 10, - p11 = 11, - p12 = 12, - p13 = 13, - p14 = 14, - p15 = 15, - p16 = 16, - p17 = 17, - p18 = 18, - p19 = 19, - p20 = 20, - p21 = 21, - p22 = 22, - p23 = 23, - p24 = 24, - p25 = 25, - p26 = 26, - p27 = 27, - p28 = 28, - p29 = 29, - p30 = 30, -// p31=31, - - P0_0 = p0, - P0_1 = p1, - P0_2 = p2, - P0_3 = p3, - P0_4 = p4, - P0_5 = p5, - P0_6 = p6, - P0_7 = p7, - - P0_8 = p8, - P0_9 = p9, - P0_10 = p10, - P0_11 = p11, - P0_12 = p12, - P0_13 = p13, - P0_14 = p14, - P0_15 = p15, - - P0_16 = p16, - P0_17 = p17, - P0_18 = p18, - P0_19 = p19, - P0_20 = p20, - P0_21 = p21, - P0_22 = p22, - P0_23 = p23, - - P0_24 = p24, - P0_25 = p25, - P0_26 = p26, - P0_27 = p27, - P0_28 = p28, - P0_29 = p29, - P0_30 = p30, - - LED1 = p18, - LED2 = p19, - LED3 = p18, - LED4 = p19, - - BUTTON1 = p16, - BUTTON2 = p17, - - RX_PIN_NUMBER = p11, - TX_PIN_NUMBER = p9, - CTS_PIN_NUMBER = p10, - RTS_PIN_NUMBER = p8, - - // mBed interface Pins - USBTX = TX_PIN_NUMBER, - USBRX = RX_PIN_NUMBER, - - SPI_PSELMOSI0 = p20, - SPI_PSELMISO0 = p22, - SPI_PSELSS0 = p24, - SPI_PSELSCK0 = p25, - - SPI_PSELMOSI1 = p12, - SPI_PSELMISO1 = p13, - SPI_PSELSS1 = p14, - SPI_PSELSCK1 = p15, - - SPIS_PSELMOSI = p12, - SPIS_PSELMISO = p13, - SPIS_PSELSS = p14, - SPIS_PSELSCK = p15, - - I2C_SDA0 = p22, - I2C_SCL0 = p20, - - I2C_SDA1 = p13, - I2C_SCL1 = p15, - // Not connected - NC = (int)0xFFFFFFFF -} PinName; - -typedef enum { - PullNone = 0, - PullDown = 1, - PullUp = 3, - PullDefault = PullUp -} PinMode; - -#ifdef __cplusplus -} -#endif - -#endif
--- a/TARGET_NRF51822/TARGET_NORDIC/TARGET_NRF51822/TARGET_NRF51822_MKIT/device.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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 MBED_DEVICE_H -#define MBED_DEVICE_H - -#define DEVICE_PORTIN 1 -#define DEVICE_PORTOUT 1 -#define DEVICE_PORTINOUT 1 - -#define DEVICE_INTERRUPTIN 1 - -#define DEVICE_ANALOGIN 1 -#define DEVICE_ANALOGOUT 0 - -#define DEVICE_SERIAL 1 - -#define DEVICE_I2C 1 -#define DEVICE_I2CSLAVE 0 - -#define DEVICE_SPI 1 -#define DEVICE_SPISLAVE 1 - -#define DEVICE_CAN 0 - -#define DEVICE_RTC 0 - -#define DEVICE_ETHERNET 0 - -#define DEVICE_PWMOUT 1 - -#define DEVICE_SEMIHOST 0 -#define DEVICE_LOCALFILESYSTEM 0 - -#define DEVICE_SLEEP 1 - -#define DEVICE_DEBUG_AWARENESS 0 - -#define DEVICE_STDIO_MESSAGES 0 - -#define DEVICE_ERROR_PATTERN 1 - -#include "objects.h" - -#endif
--- a/TARGET_NRF51822/TARGET_NORDIC/TARGET_NRF51822/gpio_object.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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 MBED_GPIO_OBJECT_H -#define MBED_GPIO_OBJECT_H - -#include "mbed_assert.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - PinName pin; - uint32_t mask; - - __IO uint32_t *reg_dir; - __IO uint32_t *reg_set; - __IO uint32_t *reg_clr; - __I uint32_t *reg_in; -} gpio_t; - -static inline void gpio_write(gpio_t *obj, int value) { - MBED_ASSERT(obj->pin != (PinName)NC); - if (value) - *obj->reg_set = obj->mask; - else - *obj->reg_clr = obj->mask; -} - -static inline int gpio_read(gpio_t *obj) { - MBED_ASSERT(obj->pin != (PinName)NC); - return ((*obj->reg_in & obj->mask) ? 1 : 0); -} - -#ifdef __cplusplus -} -#endif - -#endif
--- a/TARGET_NRF51822/TARGET_NORDIC/TARGET_NRF51822/objects.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,73 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2013 Nordic Semiconductor - * - * 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 MBED_OBJECTS_H -#define MBED_OBJECTS_H - -#include "cmsis.h" -#include "PortNames.h" -#include "PeripheralNames.h" -#include "PinNames.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct serial_s { - NRF_UART_Type *uart; - int index; -}; - -struct spi_s { - NRF_SPI_Type *spi; - NRF_SPIS_Type *spis; -}; - -struct port_s { - __IO uint32_t *reg_cnf; - __IO uint32_t *reg_out; - __I uint32_t *reg_in; - PortName port; - uint32_t mask; -}; - -struct pwmout_s { - PWMName pwm; - PinName pin; -}; - -struct i2c_s { - NRF_TWI_Type *i2c; - PinName sda; - PinName scl; - int freq; -}; - -struct analogin_s { - ADCName adc; - uint8_t adc_pin; -}; - -struct gpio_irq_s { - uint32_t ch; -}; - -#include "gpio_object.h" - -#ifdef __cplusplus -} -#endif - -#endif
Binary file TARGET_NRF51822/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_NRF51822/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_NRF51822/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_NRF51822/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_NRF51822/TOOLCHAIN_ARM_STD/startup_nRF51822.o has changed
Binary file TARGET_NRF51822/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_NRF51822/TOOLCHAIN_ARM_STD/system_nrf51822.o has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_NRF51822/TOOLCHAIN_GCC_ARM/NRF51822.ld Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,151 @@ +/* Linker script to configure memory regions. */ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00016000, LENGTH = 0x2A000 + RAM (rwx) : ORIGIN = 0x20002000, LENGTH = 0x2000 +} + +OUTPUT_FORMAT ("elf32-littlearm", "elf32-bigarm", "elf32-littlearm") + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + KEEP(*(.Vectors)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + *(.jcr) + . = ALIGN(4); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + end = __end__; + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +}
Binary file TARGET_NRF51822/TOOLCHAIN_GCC_ARM/board.o has changed
Binary file TARGET_NRF51822/TOOLCHAIN_GCC_ARM/cmsis_nvic.o has changed
Binary file TARGET_NRF51822/TOOLCHAIN_GCC_ARM/libmbed.a has changed
Binary file TARGET_NRF51822/TOOLCHAIN_GCC_ARM/retarget.o has changed
Binary file TARGET_NRF51822/TOOLCHAIN_GCC_ARM/startup_NRF51822.o has changed
Binary file TARGET_NRF51822/TOOLCHAIN_GCC_ARM/system_nrf51822.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/board.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/cmsis_nvic.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/mbed.ar has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/mbed_overrides.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/retarget.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/stm32f0xx_adc.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/stm32f0xx_can.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/stm32f0xx_cec.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/stm32f0xx_comp.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/stm32f0xx_crc.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/stm32f0xx_crs.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/stm32f0xx_dac.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/stm32f0xx_dbgmcu.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/stm32f0xx_dma.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/stm32f0xx_exti.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/stm32f0xx_flash.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/stm32f0xx_gpio.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/stm32f0xx_i2c.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/stm32f0xx_iwdg.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/stm32f0xx_misc.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/stm32f0xx_pwr.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/stm32f0xx_rcc.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/stm32f0xx_rtc.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/stm32f0xx_spi.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/stm32f0xx_syscfg.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/stm32f0xx_tim.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/stm32f0xx_usart.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/stm32f0xx_wwdg.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/sys.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_MICRO/system_stm32f0xx.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/mbed_overrides.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/stm32f0xx_adc.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/stm32f0xx_can.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/stm32f0xx_cec.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/stm32f0xx_comp.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/stm32f0xx_crc.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/stm32f0xx_crs.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/stm32f0xx_dac.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/stm32f0xx_dbgmcu.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/stm32f0xx_dma.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/stm32f0xx_exti.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/stm32f0xx_flash.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/stm32f0xx_gpio.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/stm32f0xx_i2c.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/stm32f0xx_iwdg.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/stm32f0xx_misc.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/stm32f0xx_pwr.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/stm32f0xx_rcc.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/stm32f0xx_rtc.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/stm32f0xx_spi.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/stm32f0xx_syscfg.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/stm32f0xx_tim.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/stm32f0xx_usart.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/stm32f0xx_wwdg.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_NUCLEO_F030R8/TOOLCHAIN_ARM_STD/system_stm32f0xx.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/board.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/cmsis_nvic.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/mbed.ar has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/mbed_overrides.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/retarget.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_adc.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_adc_ex.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_can.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_cec.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_comp.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_cortex.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_crc.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_crc_ex.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_dac.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_dac_ex.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_dma.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_flash.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_flash_ex.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_gpio.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_i2c.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_i2c_ex.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_i2s.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_irda.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_iwdg.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_pcd.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_pcd_ex.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_pwr.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_pwr_ex.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_rcc.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_rcc_ex.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_rtc.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_rtc_ex.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_smartcard.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_smartcard_ex.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_smbus.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_spi.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_tim.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_tim_ex.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_tsc.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_uart.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_uart_ex.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_usart.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/stm32f0xx_hal_wwdg.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/sys.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_MICRO/system_stm32f0xx.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/mbed_overrides.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_adc.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_adc_ex.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_can.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_cec.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_comp.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_cortex.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_crc.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_crc_ex.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_dac.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_dac_ex.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_dma.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_flash.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_flash_ex.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_gpio.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_i2c.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_i2c_ex.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_i2s.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_irda.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_iwdg.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_pcd.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_pcd_ex.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_pwr.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_pwr_ex.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_rcc.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_rcc_ex.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_rtc.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_rtc_ex.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_smartcard.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_smartcard_ex.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_smbus.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_spi.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_tim.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_tim_ex.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_tsc.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_uart.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_uart_ex.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_usart.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/stm32f0xx_hal_wwdg.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_NUCLEO_F072RB/TOOLCHAIN_ARM_STD/system_stm32f0xx.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/board.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/cmsis_nvic.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/mbed.ar has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/mbed_overrides.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/misc.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/retarget.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/stm32f10x_adc.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/stm32f10x_bkp.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/stm32f10x_can.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/stm32f10x_cec.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/stm32f10x_crc.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/stm32f10x_dac.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/stm32f10x_dbgmcu.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/stm32f10x_dma.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/stm32f10x_exti.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/stm32f10x_flash.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/stm32f10x_fsmc.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/stm32f10x_gpio.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/stm32f10x_i2c.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/stm32f10x_iwdg.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/stm32f10x_pwr.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/stm32f10x_rcc.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/stm32f10x_rtc.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/stm32f10x_sdio.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/stm32f10x_spi.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/stm32f10x_tim.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/stm32f10x_usart.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/stm32f10x_wwdg.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/sys.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_MICRO/system_stm32f10x.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/mbed_overrides.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/misc.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/stm32f10x_adc.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/stm32f10x_bkp.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/stm32f10x_can.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/stm32f10x_cec.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/stm32f10x_crc.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/stm32f10x_dac.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/stm32f10x_dbgmcu.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/stm32f10x_dma.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/stm32f10x_exti.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/stm32f10x_flash.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/stm32f10x_fsmc.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/stm32f10x_gpio.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/stm32f10x_i2c.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/stm32f10x_iwdg.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/stm32f10x_pwr.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/stm32f10x_rcc.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/stm32f10x_rtc.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/stm32f10x_sdio.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/stm32f10x_spi.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/stm32f10x_tim.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/stm32f10x_usart.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/stm32f10x_wwdg.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_NUCLEO_F103RB/TOOLCHAIN_ARM_STD/system_stm32f10x.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/board.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/cmsis_nvic.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/mbed.ar has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/mbed_overrides.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/retarget.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/stm32f30x_adc.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/stm32f30x_can.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/stm32f30x_comp.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/stm32f30x_crc.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/stm32f30x_dac.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/stm32f30x_dbgmcu.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/stm32f30x_dma.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/stm32f30x_exti.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/stm32f30x_flash.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/stm32f30x_gpio.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/stm32f30x_hrtim.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/stm32f30x_i2c.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/stm32f30x_iwdg.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/stm32f30x_misc.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/stm32f30x_opamp.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/stm32f30x_pwr.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/stm32f30x_rcc.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/stm32f30x_rtc.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/stm32f30x_spi.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/stm32f30x_syscfg.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/stm32f30x_tim.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/stm32f30x_usart.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/stm32f30x_wwdg.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/sys.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_MICRO/system_stm32f30x.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/mbed_overrides.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/stm32f30x_adc.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/stm32f30x_can.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/stm32f30x_comp.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/stm32f30x_crc.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/stm32f30x_dac.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/stm32f30x_dbgmcu.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/stm32f30x_dma.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/stm32f30x_exti.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/stm32f30x_flash.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/stm32f30x_gpio.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/stm32f30x_hrtim.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/stm32f30x_i2c.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/stm32f30x_iwdg.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/stm32f30x_misc.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/stm32f30x_opamp.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/stm32f30x_pwr.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/stm32f30x_rcc.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/stm32f30x_rtc.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/stm32f30x_spi.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/stm32f30x_syscfg.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/stm32f30x_tim.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/stm32f30x_usart.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/stm32f30x_wwdg.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_NUCLEO_F302R8/TOOLCHAIN_ARM_STD/system_stm32f30x.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/board.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/cmsis_nvic.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/mbed.ar has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/mbed_overrides.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/retarget.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_adc.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_adc_ex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_can.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_cec.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_comp.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_cortex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_crc.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_crc_ex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_dac.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_dac_ex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_dma.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_flash.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_flash_ex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_gpio.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_hrtim.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_i2c.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_i2c_ex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_i2s.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_i2s_ex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_irda.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_iwdg.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_opamp.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_opamp_ex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_pcd.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_pcd_ex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_pwr.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_pwr_ex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_rcc.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_rcc_ex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_rtc.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_rtc_ex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_sdadc.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_smartcard.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_smartcard_ex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_smbus.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_spi.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_tim.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_tim_ex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_tsc.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_uart.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_uart_ex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_usart.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/stm32f3xx_hal_wwdg.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/sys.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_MICRO/system_stm32f3xx.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/mbed_overrides.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_adc.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_adc_ex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_can.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_cec.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_comp.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_cortex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_crc.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_crc_ex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_dac.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_dac_ex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_dma.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_flash.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_flash_ex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_gpio.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_hrtim.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_i2c.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_i2c_ex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_i2s.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_i2s_ex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_irda.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_iwdg.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_opamp.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_opamp_ex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_pcd.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_pcd_ex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_pwr.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_pwr_ex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_rcc.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_rcc_ex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_rtc.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_rtc_ex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_sdadc.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_smartcard.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_smartcard_ex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_smbus.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_spi.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_tim.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_tim_ex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_tsc.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_uart.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_uart_ex.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_usart.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/stm32f3xx_hal_wwdg.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_NUCLEO_F334R8/TOOLCHAIN_ARM_STD/system_stm32f3xx.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/board.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/cmsis_nvic.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/hal_tick.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/mbed.ar has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/mbed_overrides.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/retarget.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_adc.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_adc_ex.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_can.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_cortex.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_crc.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_cryp.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_cryp_ex.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_dac.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_dac_ex.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_dcmi.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_dma.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_dma2d.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_dma_ex.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_eth.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_flash.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_flash_ex.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_gpio.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_hash.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_hash_ex.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_hcd.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_i2c.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_i2c_ex.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_i2s.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_i2s_ex.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_irda.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_iwdg.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_ltdc.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_nand.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_nor.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_pccard.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_pcd.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_pwr.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_pwr_ex.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_rcc.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_rcc_ex.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_rng.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_rtc.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_rtc_ex.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_sai.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_sd.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_sdram.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_smartcard.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_spi.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_sram.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_tim.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_tim_ex.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_uart.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_usart.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_wwdg.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_ll_fmc.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_ll_fsmc.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_ll_sdmmc.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_ll_usb.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/sys.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_MICRO/system_stm32f4xx.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/hal_tick.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/mbed_overrides.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_adc.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_adc_ex.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_can.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_cortex.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_crc.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_cryp.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_cryp_ex.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_dac.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_dac_ex.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_dcmi.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_dma.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_dma2d.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_dma_ex.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_eth.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_flash.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_flash_ex.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_gpio.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_hash.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_hash_ex.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_hcd.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_i2c.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_i2c_ex.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_i2s.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_i2s_ex.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_irda.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_iwdg.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_ltdc.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_nand.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_nor.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_pccard.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_pcd.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_pwr.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_pwr_ex.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_rcc.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_rcc_ex.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_rng.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_rtc.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_rtc_ex.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_sai.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_sd.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_sdram.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_smartcard.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_spi.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_sram.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_tim.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_tim_ex.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_uart.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_usart.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_wwdg.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_ll_fmc.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_ll_fsmc.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_ll_sdmmc.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f4xx_ll_usb.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/system_stm32f4xx.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/board.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/cmsis_nvic.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/hal_tick.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/mbed.ar has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/mbed_overrides.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/retarget.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_adc.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_adc_ex.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_can.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_cortex.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_crc.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_cryp.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_cryp_ex.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_dac.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_dac_ex.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_dcmi.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_dma.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_dma2d.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_dma_ex.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_eth.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_flash.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_flash_ex.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_flash_ramfunc.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_gpio.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_hash.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_hash_ex.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_hcd.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_i2c.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_i2c_ex.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_i2s.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_i2s_ex.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_irda.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_iwdg.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_ltdc.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_nand.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_nor.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_pccard.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_pcd.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_pcd_ex.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_pwr.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_pwr_ex.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_rcc.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_rcc_ex.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_rng.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_rtc.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_rtc_ex.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_sai.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_sd.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_sdram.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_smartcard.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_spi.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_sram.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_tim.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_tim_ex.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_uart.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_usart.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_hal_wwdg.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_ll_fmc.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_ll_fsmc.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_ll_sdmmc.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/stm32f4xx_ll_usb.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/sys.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_MICRO/system_stm32f4xx.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/hal_tick.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/mbed_overrides.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_adc.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_adc_ex.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_can.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_cortex.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_crc.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_cryp.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_cryp_ex.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_dac.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_dac_ex.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_dcmi.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_dma.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_dma2d.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_dma_ex.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_eth.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_flash.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_flash_ex.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_flash_ramfunc.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_gpio.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_hash.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_hash_ex.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_hcd.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_i2c.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_i2c_ex.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_i2s.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_i2s_ex.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_irda.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_iwdg.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_ltdc.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_nand.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_nor.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_pccard.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_pcd.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_pcd_ex.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_pwr.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_pwr_ex.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_rcc.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_rcc_ex.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_rng.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_rtc.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_rtc_ex.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_sai.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_sd.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_sdram.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_smartcard.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_spi.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_sram.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_tim.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_tim_ex.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_uart.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_usart.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_hal_wwdg.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_ll_fmc.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_ll_fsmc.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_ll_sdmmc.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/stm32f4xx_ll_usb.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_NUCLEO_F411RE/TOOLCHAIN_ARM_STD/system_stm32f4xx.o has changed
--- a/TARGET_NUCLEO_F411RE/stm32f411xe.h Fri Jul 25 09:46:51 2014 +0100 +++ b/TARGET_NUCLEO_F411RE/stm32f411xe.h Fri Aug 15 15:28:31 2014 +0100 @@ -9,7 +9,7 @@ * This file contains: * - Data structures and the address mapping for all peripherals * - Peripheral's registers declarations and bits definition - * - Macros to access peripherals registers hardware + * - Macros to access peripheralâs registers hardware * ****************************************************************************** * @attention @@ -45,12 +45,12 @@ * @{ */ -/** @addtogroup stm32f401xe +/** @addtogroup stm32f411xe * @{ */ -#ifndef __STM32F401xE_H -#define __STM32F401xE_H +#ifndef __STM32F411xE_H +#define __STM32F411xE_H #ifdef __cplusplus extern "C" {
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/board.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/cmsis_nvic.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/mbed.ar has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/mbed_overrides.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/retarget.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_adc.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_adc_ex.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_comp.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_cortex.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_crc.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_crc_ex.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_cryp.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_dac.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_dac_ex.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_dma.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_flash.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_flash_ex.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_flash_ramfunc.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_gpio.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_i2c.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_i2c_ex.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_i2s.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_irda.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_iwdg.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_lcd.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_lptim.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_pcd.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_pcd_ex.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_pwr.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_pwr_ex.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_rcc.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_rcc_ex.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_rng.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_rtc.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_rtc_ex.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_smartcard.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_smartcard_ex.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_smbus.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_spi.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_tim.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_tim_ex.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_tsc.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_uart.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_uart_ex.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_usart.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/stm32l0xx_hal_wwdg.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/sys.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_MICRO/system_stm32l0xx.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/mbed_overrides.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_adc.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_adc_ex.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_comp.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_cortex.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_crc.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_crc_ex.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_cryp.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_dac.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_dac_ex.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_dma.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_flash.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_flash_ex.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_flash_ramfunc.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_gpio.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_i2c.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_i2c_ex.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_i2s.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_irda.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_iwdg.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_lcd.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_lptim.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_pcd.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_pcd_ex.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_pwr.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_pwr_ex.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_rcc.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_rcc_ex.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_rng.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_rtc.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_rtc_ex.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_smartcard.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_smartcard_ex.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_smbus.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_spi.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_tim.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_tim_ex.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_tsc.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_uart.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_uart_ex.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_usart.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/stm32l0xx_hal_wwdg.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_NUCLEO_L053R8/TOOLCHAIN_ARM_STD/system_stm32l0xx.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/board.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/cmsis_nvic.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/mbed.ar has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/mbed_overrides.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/misc.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/retarget.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/stm32l1xx_adc.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/stm32l1xx_aes.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/stm32l1xx_aes_util.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/stm32l1xx_comp.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/stm32l1xx_crc.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/stm32l1xx_dac.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/stm32l1xx_dbgmcu.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/stm32l1xx_dma.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/stm32l1xx_exti.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/stm32l1xx_flash.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/stm32l1xx_flash_ramfunc.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/stm32l1xx_fsmc.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/stm32l1xx_gpio.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/stm32l1xx_i2c.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/stm32l1xx_iwdg.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/stm32l1xx_lcd.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/stm32l1xx_opamp.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/stm32l1xx_pwr.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/stm32l1xx_rcc.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/stm32l1xx_rtc.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/stm32l1xx_sdio.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/stm32l1xx_spi.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/stm32l1xx_syscfg.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/stm32l1xx_tim.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/stm32l1xx_usart.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/stm32l1xx_wwdg.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/sys.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_MICRO/system_stm32l1xx.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/mbed_overrides.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/misc.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/stm32l1xx_adc.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/stm32l1xx_aes.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/stm32l1xx_aes_util.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/stm32l1xx_comp.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/stm32l1xx_crc.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/stm32l1xx_dac.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/stm32l1xx_dbgmcu.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/stm32l1xx_dma.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/stm32l1xx_exti.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/stm32l1xx_flash.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/stm32l1xx_flash_ramfunc.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/stm32l1xx_fsmc.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/stm32l1xx_gpio.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/stm32l1xx_i2c.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/stm32l1xx_iwdg.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/stm32l1xx_lcd.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/stm32l1xx_opamp.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/stm32l1xx_pwr.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/stm32l1xx_rcc.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/stm32l1xx_rtc.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/stm32l1xx_sdio.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/stm32l1xx_spi.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/stm32l1xx_syscfg.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/stm32l1xx_tim.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/stm32l1xx_usart.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/stm32l1xx_wwdg.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_NUCLEO_L152RE/TOOLCHAIN_ARM_STD/system_stm32l1xx.o has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,385 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_COMMON BLE SoftDevice Common + @{ + @defgroup ble_api Events, type definitions and API calls + @{ + + @brief Module independent events, type definitions and API calls for the S110 SoftDevice. + + */ + +#ifndef BLE_H__ +#define BLE_H__ + +#include "ble_ranges.h" +#include "ble_types.h" +#include "ble_gap.h" +#include "ble_l2cap.h" +#include "ble_gatt.h" +#include "ble_gattc.h" +#include "ble_gatts.h" + +/** @addtogroup BLE_COMMON_ENUMERATIONS Enumerations + * @{ */ + +/** + * @brief Common API SVC numbers. + */ +enum BLE_COMMON_SVCS +{ + SD_BLE_ENABLE = BLE_SVC_BASE, /**< Enable and initialize the BLE stack */ + SD_BLE_EVT_GET, /**< Get an event from the pending events queue. */ + SD_BLE_TX_BUFFER_COUNT_GET, /**< Get the total number of available application transmission buffers from the stack. */ + SD_BLE_UUID_VS_ADD, /**< Add a Vendor Specific UUID. */ + SD_BLE_UUID_DECODE, /**< Decode UUID bytes. */ + SD_BLE_UUID_ENCODE, /**< Encode UUID bytes. */ + SD_BLE_VERSION_GET, /**< Get the local version information (company id, Link Layer Version, Link Layer Subversion). */ + SD_BLE_USER_MEM_REPLY, /**< User Memory Reply. */ + SD_BLE_OPT_SET, /**< Set a BLE option. */ + SD_BLE_OPT_GET, /**< Get a BLE option. */ +}; + +/** @} */ + +/** @addtogroup BLE_COMMON_DEFINES Defines + * @{ */ + +/** @brief Required pointer alignment for BLE Events. +*/ +#define BLE_EVTS_PTR_ALIGNMENT 4 + +/** @defgroup BLE_USER_MEM_TYPES User Memory Types + * @{ */ +#define BLE_USER_MEM_TYPE_INVALID 0x00 /**< Invalid User Memory Types. */ +#define BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES 0x01 /**< User Memory for GATTS queued writes. */ +/** @} */ + +/** @brief Maximum number of Vendor Specific UUIDs. +*/ +#define BLE_UUID_VS_MAX_COUNT 10 + +/** @} */ + +/** @addtogroup BLE_COMMON_STRUCTURES Structures + * @{ */ + +/** + * @brief BLE Module Independent Event IDs. + */ +enum BLE_COMMON_EVTS +{ + BLE_EVT_TX_COMPLETE = BLE_EVT_BASE, /**< Transmission Complete. */ + BLE_EVT_USER_MEM_REQUEST, /**< User Memory request. */ + BLE_EVT_USER_MEM_RELEASE /**< User Memory release. */ +}; + +/**@brief User Memory Block. */ +typedef struct +{ + uint8_t* p_mem; /**< Pointer to the start of the user memory block. */ + uint16_t len; /**< Length in bytes of the user memory block. */ +} ble_user_mem_block_t; + +/** + * @brief TX complete event. + */ +typedef struct +{ + uint8_t count; /**< Number of packets transmitted. */ +} ble_evt_tx_complete_t; + +/**@brief Event structure for BLE_EVT_USER_MEM_REQUEST. */ +typedef struct +{ + uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ +} ble_evt_user_mem_request_t; + +/**@brief Event structure for BLE_EVT_USER_MEM_RELEASE. */ +typedef struct +{ + uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ + ble_user_mem_block_t mem_block; /**< User memory block */ +} ble_evt_user_mem_release_t; + + +/**@brief Event structure for events not associated with a specific function module. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which this event occured. */ + union + { + ble_evt_tx_complete_t tx_complete; /**< Transmission Complete. */ + ble_evt_user_mem_request_t user_mem_request; /**< User Memory Request Event Parameters. */ + ble_evt_user_mem_release_t user_mem_release; /**< User Memory Release Event Parameters. */ + } params; +} ble_common_evt_t; + +/**@brief BLE Event header. */ +typedef struct +{ + uint16_t evt_id; /**< Value from a BLE_<module>_EVT series. */ + uint16_t evt_len; /**< Length in octets excluding this header. */ +} ble_evt_hdr_t; + +/**@brief Common BLE Event type, wrapping the module specific event reports. */ +typedef struct +{ + ble_evt_hdr_t header; /**< Event header. */ + union + { + ble_common_evt_t common_evt; /**< Common Event, evt_id in BLE_EVT_* series. */ + ble_gap_evt_t gap_evt; /**< GAP originated event, evt_id in BLE_GAP_EVT_* series. */ + ble_l2cap_evt_t l2cap_evt; /**< L2CAP originated event, evt_id in BLE_L2CAP_EVT* series. */ + ble_gattc_evt_t gattc_evt; /**< GATT client originated event, evt_id in BLE_GATTC_EVT* series. */ + ble_gatts_evt_t gatts_evt; /**< GATT server originated event, evt_id in BLE_GATTS_EVT* series. */ + } evt; +} ble_evt_t; + + +/** + * @brief Version Information. + */ +typedef struct +{ + uint8_t version_number; /**< Link Layer Version number for BT 4.1 spec is 7 (https://www.bluetooth.org/en-us/specification/assigned-numbers/link-layer). */ + uint16_t company_id; /**< Company ID, Nordic Semiconductor's company ID is 89 (0x0059) (https://www.bluetooth.org/apps/content/Default.aspx?doc_id=49708). */ + uint16_t subversion_number; /**< Link Layer Sub Version number, corresponds to the SoftDevice Config ID or Firmware ID (FWID). */ +} ble_version_t; + +/**@brief Common BLE Option type, wrapping the module specific options. */ +typedef union +{ + ble_gap_opt_t gap; /**< GAP option, opt_id in BLE_GAP_OPT_* series. */ +} ble_opt_t; + +/** + * @brief BLE GATTS init options + */ +typedef struct +{ + ble_gatts_enable_params_t gatts_enable_params; /**< GATTS init options @ref ble_gatts_enable_params_t. */ +} ble_enable_params_t; + +/** @} */ + +/** @addtogroup BLE_COMMON_FUNCTIONS Functions + * @{ */ + +/**@brief Enable the bluetooth stack + * + * @param[in] p_ble_enable_params Pointer to ble_enable_params_t + * + * @details This call initializes the bluetooth stack, no other BLE related call can be called before this one has been executed. + * + * @return @ref NRF_SUCCESS BLE stack has been initialized successfully + * @return @ref NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. + */ +SVCALL(SD_BLE_ENABLE, uint32_t, sd_ble_enable(ble_enable_params_t * p_ble_enable_params)); + +/**@brief Get an event from the pending events queue. + * + * @param[in] p_dest Pointer to buffer to be filled in with an event, or NULL to retrieve the event length. This buffer <b>must be 4-byte aligned in memory</b>. + * @param[in, out] p_len Pointer the length of the buffer, on return it is filled with the event length. + * + * @details This call allows the application to pull a BLE event from the BLE stack. The application is signalled that an event is + * available from the BLE Stack by the triggering of the SD_EVT_IRQn interrupt (mapped to IRQ 22). + * The application is free to choose whether to call this function from thread mode (main context) or directly from the Interrupt Service Routine + * that maps to SD_EVT_IRQn. In any case however, and because the BLE stack runs at a higher priority than the application, this function should be called + * in a loop (until @ref NRF_ERROR_NOT_FOUND is returned) every time SD_EVT_IRQn is raised to ensure that all available events are pulled from the stack. + * Failure to do so could potentially leave events in the internal queue without the application being aware of this fact. + * Sizing the p_dest buffer is equally important, since the application needs to provide all the memory necessary for the event to be copied into + * application memory. If the buffer provided is not large enough to fit the entire contents of the event, @ref NRF_ERROR_DATA_SIZE will be returned + * and the application can then call again with a larger buffer size. + * Please note that because of the variable length nature of some events, sizeof(ble_evt_t) will not always be large enough to fit certain events, + * and so it is the application's responsability to provide an amount of memory large enough so that the relevant event is copied in full. + * The application may "peek" the event length by providing p_dest as a NULL pointer and inspecting the value of *p_len upon return. + * + * @note The pointer supplied must be aligned to the extend defined by @ref BLE_EVTS_PTR_ALIGNMENT + * + * @return @ref NRF_SUCCESS Event pulled and stored into the supplied buffer. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. + * @return @ref NRF_ERROR_NOT_FOUND No events ready to be pulled. + * @return @ref NRF_ERROR_DATA_SIZE Event ready but could not fit into the supplied buffer. + */ +SVCALL(SD_BLE_EVT_GET, uint32_t, sd_ble_evt_get(uint8_t* p_dest, uint16_t *p_len)); + + +/**@brief Get the total number of available application transmission buffers in the BLE stack. + * + * @details This call allows the application to obtain the total number of + * transmission buffers available for application data. Please note that + * this does not give the number of free buffers, but rather the total amount of them. + * The application has two options to handle its own application transmission buffers: + * - Use a simple arithmetic calculation: at boot time the application should use this function + * to find out the total amount of buffers available to it and store it in a variable. + * Every time a packet that consumes an application buffer is sent using any of the + * exposed functions in this BLE API, the application should decrement that variable. + * Conversely, whenever a @ref BLE_EVT_TX_COMPLETE event is received by the application + * it should retrieve the count field in such event and add that number to the same + * variable storing the number of available packets. + * This mechanism allows the application to be aware at any time of the number of + * application packets available in the BLE stack's internal buffers, and therefore + * it can know with certainty whether it is possible to send more data or it has to + * wait for a @ref BLE_EVT_TX_COMPLETE event before it proceeds. + * - Choose to simply not keep track of available buffers at all, and instead handle the + * @ref BLE_ERROR_NO_TX_BUFFERS error by queueing the packet to be transmitted and + * try again as soon as a @ref BLE_EVT_TX_COMPLETE event arrives. + * + * The API functions that <b>may</b> consume an application buffer depending on + * the parameters supplied to them can be found below: + * + * - @ref sd_ble_gattc_write (write witout response only) + * - @ref sd_ble_gatts_hvx (notifications only) + * - @ref sd_ble_l2cap_tx (all packets) + * + * @param[out] p_count Pointer to a uint8_t which will contain the number of application transmission buffers upon + * successful return. + * + * @return @ref NRF_SUCCESS Number of application transmission buffers retrieved successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_TX_BUFFER_COUNT_GET, uint32_t, sd_ble_tx_buffer_count_get(uint8_t* p_count)); + + +/**@brief Add a Vendor Specific UUID. + * + * @details This call enables the application to add a vendor specific UUID to the BLE stack's table, + * for later use all other modules and APIs. This then allows the application to use the shorter, + * 24-bit @ref ble_uuid_t format when dealing with both 16-bit and 128-bit UUIDs without having to + * check for lengths and having split code paths. The way that this is accomplished is by extending the + * grouping mechanism that the Bluetooth SIG standard base UUID uses for all other 128-bit UUIDs. The + * type field in the @ref ble_uuid_t structure is an index (relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN) + * to the table populated by multiple calls to this function, and the uuid field in the same structure + * contains the 2 bytes at indices 12 and 13. The number of possible 128-bit UUIDs available to the + * application is therefore the number of Vendor Specific UUIDs added with the help of this function times 65536, + * although restricted to modifying bytes 12 and 13 for each of the entries in the supplied array. + * + * @note Bytes 12 and 13 of the provided UUID will not be used internally, since those are always replaced by + * the 16-bit uuid field in @ref ble_uuid_t. + * + * + * @param[in] p_vs_uuid Pointer to a 16-octet (128-bit) little endian Vendor Specific UUID disregarding + * bytes 12 and 13. + * @param[out] p_uuid_type Pointer where the type field in @ref ble_uuid_t corresponding to this UUID will be stored. + * + * @return @ref NRF_SUCCESS Successfully added the Vendor Specific UUID. + * @return @ref NRF_ERROR_INVALID_ADDR If p_vs_uuid or p_uuid_type is NULL or invalid. + * @return @ref NRF_ERROR_NO_MEM If there are no more free slots for VS UUIDs. + * @return @ref NRF_ERROR_FORBIDDEN If p_vs_uuid has already been added to the VS UUID table. + */ +SVCALL(SD_BLE_UUID_VS_ADD, uint32_t, sd_ble_uuid_vs_add(ble_uuid128_t const * const p_vs_uuid, uint8_t * const p_uuid_type)); + + +/** @brief Decode little endian raw UUID bytes (16-bit or 128-bit) into a 24 bit @ref ble_uuid_t structure. + * + * @details The raw UUID bytes excluding bytes 12 and 13 (i.e. bytes 0-11 and 14-15) of p_uuid_le are compared + * to the corresponding ones in each entry of the table of vendor specific UUIDs pouplated with @ref sd_ble_uuid_vs_add + * to look for a match. If there is such a match, bytes 12 and 13 are returned as p_uuid->uuid and the index + * relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN as p_uuid->type. + * + * @note If the UUID length supplied is 2, then the type set by this call will always be @ref BLE_UUID_TYPE_BLE. + * + * @param[in] uuid_le_len Length in bytes of the buffer pointed to by p_uuid_le (must be 2 or 16 bytes). + * @param[in] p_uuid_le Pointer pointing to little endian raw UUID bytes. + * @param[in,out] p_uuid Pointer to a @ref ble_uuid_t structure to be filled in. + * + * @return @ref NRF_SUCCESS Successfully decoded into the @ref ble_uuid_t structure. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_LENGTH Invalid UUID length. + * @return @ref NRF_ERROR_NOT_FOUND For a 128-bit UUID, no match in the populated table of UUIDs. + */ +SVCALL(SD_BLE_UUID_DECODE, uint32_t, sd_ble_uuid_decode(uint8_t uuid_le_len, uint8_t const * const p_uuid_le, ble_uuid_t * const p_uuid)); + + +/** @brief Encode a @ref ble_uuid_t structure into little endian raw UUID bytes (16-bit or 128-bit). + * + * @note The pointer to the destination buffer p_uuid_le may be NULL, in which case only the validitiy and size of p_uuid is computed. + * + * @param[in] p_uuid Pointer to a @ref ble_uuid_t structure that will be encoded into bytes. + * @param[out] p_uuid_le_len Pointer to a uint8_t that will be filled with the encoded length (2 or 16 bytes). + * @param[out] p_uuid_le Pointer to a buffer where the little endian raw UUID bytes (2 or 16) will be stored. + * + * @return @ref NRF_SUCCESS Successfully encoded into the buffer. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid UUID type. + */ +SVCALL(SD_BLE_UUID_ENCODE, uint32_t, sd_ble_uuid_encode(ble_uuid_t const * const p_uuid, uint8_t * const p_uuid_le_len, uint8_t * const p_uuid_le)); + + +/**@brief Get Version Information. + * + * @details This call allows the application to get the BLE stack version information. + * + * @param[in] p_version Pointer to ble_version_t structure to be filled in. + * + * @return @ref NRF_SUCCESS Version information stored successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY The stack is busy (typically doing a locally-initiated disconnection procedure). + */ +SVCALL(SD_BLE_VERSION_GET, uint32_t, sd_ble_version_get(ble_version_t * p_version)); + + +/**@brief Provide a user memory block. + * + * @note This call can only be used as a response to a @ref BLE_EVT_USER_MEM_REQUEST event issued to the application. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_block Pointer to a user memory block structure. + * + * @return @ref NRF_SUCCESS Successfully queued a response to the peer. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_STATE No execute write request pending. + */ +SVCALL(SD_BLE_USER_MEM_REPLY, uint32_t, sd_ble_user_mem_reply(uint16_t conn_handle, ble_user_mem_block_t *p_block)); + + +/**@brief Set a BLE option. + * + * @details This call allows the application to set the value of an option. + * + * @param[in] opt_id Option ID. + * @param[in] p_opt Pointer to a ble_opt_t structure containing the option value. + * + * @retval ::NRF_SUCCESS Option set successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. + * @retval ::NRF_ERROR_INVALID_STATE Unable to set the parameter at this time. + * @retval ::NRF_ERROR_BUSY The stack is busy or the previous procedure has not completed. + */ +SVCALL(SD_BLE_OPT_SET, uint32_t, sd_ble_opt_set(uint32_t opt_id, ble_opt_t const *p_opt)); + + +/**@brief Get a BLE option. + * + * @details This call allows the application to retrieve the value of an option. + * + * @param[in] opt_id Option ID. + * @param[out] p_opt Pointer to a ble_opt_t structure to be filled in. + * + * @retval ::NRF_SUCCESS Option retrieved successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. + * @retval ::NRF_ERROR_INVALID_STATE Unable to retrieve the parameter at this time. + * @retval ::NRF_ERROR_BUSY The stack is busy or the previous procedure has not completed. + * @retval ::NRF_ERROR_NOT_SUPPORTED This option is not supported. + * + */ +SVCALL(SD_BLE_OPT_GET, uint32_t, sd_ble_opt_get(uint32_t opt_id, ble_opt_t *p_opt)); + +/** @} */ + +#endif /* BLE_H__ */ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_err.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + /** + @addtogroup BLE_COMMON + @{ + @addtogroup nrf_error + @{ + @ingroup BLE_COMMON + @} + + @defgroup ble_err General error codes + @{ + + @brief General error code definitions for the BLE API. + + @ingroup BLE_COMMON +*/ +#ifndef NRF_BLE_ERR_H__ +#define NRF_BLE_ERR_H__ + +#include "nrf_error.h" + +/* @defgroup BLE_ERRORS Error Codes + * @{ */ +#define BLE_ERROR_NOT_ENABLED (NRF_ERROR_STK_BASE_NUM+0x001) /**< @ref sd_ble_enable has not been called. */ +#define BLE_ERROR_INVALID_CONN_HANDLE (NRF_ERROR_STK_BASE_NUM+0x002) /**< Invalid connection handle. */ +#define BLE_ERROR_INVALID_ATTR_HANDLE (NRF_ERROR_STK_BASE_NUM+0x003) /**< Invalid attribute handle. */ +#define BLE_ERROR_NO_TX_BUFFERS (NRF_ERROR_STK_BASE_NUM+0x004) /**< Buffer capacity exceeded. */ +/** @} */ + + +/** @defgroup BLE_ERROR_SUBRANGES Module specific error code subranges + * @brief Assignment of subranges for module specific error codes. + * @note For specific error codes, see ble_<module>.h or ble_error_<module>.h. + * @{ */ +#define NRF_L2CAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x100) /**< L2CAP specific errors. */ +#define NRF_GAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x200) /**< GAP specific errors. */ +#define NRF_GATTC_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x300) /**< GATT client specific errors. */ +#define NRF_GATTS_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x400) /**< GATT server specific errors. */ +/** @} */ + +#endif + + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gap.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,1032 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_GAP Generic Access Profile (GAP) + @{ + @brief Definitions and prototypes for the GAP interface. + */ + +#ifndef BLE_GAP_H__ +#define BLE_GAP_H__ + +#include "ble_types.h" +#include "ble_ranges.h" +#include "nrf_svc.h" + + +/**@addtogroup BLE_GAP_ENUMERATIONS Enumerations + * @{ */ + +/**@brief GAP API SVC numbers. + */ +enum BLE_GAP_SVCS +{ + SD_BLE_GAP_ADDRESS_SET = BLE_GAP_SVC_BASE, /**< Set own Bluetooth Address. */ + SD_BLE_GAP_ADDRESS_GET, /**< Get own Bluetooth Address. */ + SD_BLE_GAP_ADV_DATA_SET, /**< Set Advertisement Data. */ + SD_BLE_GAP_ADV_START, /**< Start Advertising. */ + SD_BLE_GAP_ADV_STOP, /**< Stop Advertising. */ + SD_BLE_GAP_CONN_PARAM_UPDATE, /**< Connection Parameter Update. */ + SD_BLE_GAP_DISCONNECT, /**< Disconnect. */ + SD_BLE_GAP_TX_POWER_SET, /**< Set TX Power. */ + SD_BLE_GAP_APPEARANCE_SET, /**< Set Appearance. */ + SD_BLE_GAP_APPEARANCE_GET, /**< Get Appearance. */ + SD_BLE_GAP_PPCP_SET, /**< Set PPCP. */ + SD_BLE_GAP_PPCP_GET, /**< Get PPCP. */ + SD_BLE_GAP_DEVICE_NAME_SET, /**< Set Device Name. */ + SD_BLE_GAP_DEVICE_NAME_GET, /**< Get Device Name. */ + SD_BLE_GAP_AUTHENTICATE, /**< Initiate Pairing/Bonding. */ + SD_BLE_GAP_SEC_PARAMS_REPLY, /**< Reply with Security Parameters. */ + SD_BLE_GAP_AUTH_KEY_REPLY, /**< Reply with an authentication key. */ + SD_BLE_GAP_SEC_INFO_REPLY, /**< Reply with Security Information. */ + SD_BLE_GAP_CONN_SEC_GET, /**< Obtain connection security level. */ + SD_BLE_GAP_RSSI_START, /**< Start reporting of changes in RSSI. */ + SD_BLE_GAP_RSSI_STOP, /**< Stop reporting of changes in RSSI. */ +}; +/**@} */ + +/**@addtogroup BLE_GAP_DEFINES Defines + * @{ */ + +/**@defgroup BLE_ERRORS_GAP SVC return values specific to GAP + * @{ */ +#define BLE_ERROR_GAP_UUID_LIST_MISMATCH (NRF_GAP_ERR_BASE + 0x000) /**< UUID list does not contain an integral number of UUIDs. */ +#define BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST (NRF_GAP_ERR_BASE + 0x001) /**< Use of Whitelist not permitted with discoverable advertising. */ +#define BLE_ERROR_GAP_INVALID_BLE_ADDR (NRF_GAP_ERR_BASE + 0x002) /**< The upper two bits of the address do not correspond to the specified address type. */ +/**@} */ + + +/**@defgroup BLE_GAP_ROLES GAP Roles + * @note Not explicitly used in peripheral API, but will be relevant for central API. + * @{ */ +#define BLE_GAP_ROLE_INVALID 0x0 /**< Invalid Role. */ +#define BLE_GAP_ROLE_PERIPH 0x1 /**< Peripheral Role. */ +#define BLE_GAP_ROLE_CENTRAL 0x2 /**< Central Role. */ +/**@} */ + + +/**@defgroup BLE_GAP_TIMEOUT_SOURCES GAP Timeout sources + * @{ */ +#define BLE_GAP_TIMEOUT_SRC_ADVERTISEMENT 0x00 /**< Advertisement timeout. */ +#define BLE_GAP_TIMEOUT_SRC_SECURITY_REQUEST 0x01 /**< Security request timeout. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADDR_TYPES GAP Address types + * @{ */ +#define BLE_GAP_ADDR_TYPE_PUBLIC 0x00 /**< Public address. */ +#define BLE_GAP_ADDR_TYPE_RANDOM_STATIC 0x01 /**< Random Static address. */ +#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE 0x02 /**< Private Resolvable address. */ +#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE 0x03 /**< Private Non-Resolvable address. */ +/**@} */ + +/**@defgroup BLE_GAP_ADDR_CYCLE_MODES GAP Address cycle modes + * @{ */ +#define BLE_GAP_ADDR_CYCLE_MODE_NONE 0x00 /**< Set addresses directly, no automatic address cycling. */ +#define BLE_GAP_ADDR_CYCLE_MODE_AUTO 0x01 /**< Automatically generate and update private addresses. */ +/** @} */ + +/**@brief The default interval in seconds at which a private address is refreshed when address cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO. */ +#define BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S (60 * 15) + +/** @brief BLE address length. */ +#define BLE_GAP_ADDR_LEN 6 + + +/**@defgroup BLE_GAP_AD_TYPE_DEFINITIONS GAP Advertising and Scan Response Data format + * @note Found at https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm + * @{ */ +#define BLE_GAP_AD_TYPE_FLAGS 0x01 /**< Flags for discoverability. */ +#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE 0x02 /**< Partial list of 16 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE 0x03 /**< Complete list of 16 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE 0x04 /**< Partial list of 32 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE 0x05 /**< Complete list of 32 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE 0x06 /**< Partial list of 128 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE 0x07 /**< Complete list of 128 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME 0x08 /**< Short local device name. */ +#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME 0x09 /**< Complete local device name. */ +#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL 0x0A /**< Transmit power level. */ +#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE 0x0D /**< Class of device. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C 0x0E /**< Simple Pairing Hash C. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R 0x0F /**< Simple Pairing Randomizer R. */ +#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE 0x10 /**< Security Manager TK Value. */ +#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS 0x11 /**< Security Manager Out Of Band Flags. */ +#define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE 0x12 /**< Slave Connection Interval Range. */ +#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT 0x14 /**< List of 16-bit Service Solicitation UUIDs. */ +#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT 0x15 /**< List of 128-bit Service Solicitation UUIDs. */ +#define BLE_GAP_AD_TYPE_SERVICE_DATA 0x16 /**< Service Data - 16-bit UUID. */ +#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS 0x17 /**< Public Target Address. */ +#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS 0x18 /**< Random Target Address. */ +#define BLE_GAP_AD_TYPE_APPEARANCE 0x19 /**< Appearance. */ +#define BLE_GAP_AD_TYPE_ADVERTISING_INTERVAL 0x1A /**< Advertising Interval. */ +#define BLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS 0x1B /**< LE Bluetooth Device Address. */ +#define BLE_GAP_AD_TYPE_LE_ROLE 0x1C /**< LE Role. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C256 0x1D /**< Simple Pairing Hash C-256. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R256 0x1E /**< Simple Pairing Randomizer R-256. */ +#define BLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID 0x20 /**< Service Data - 32-bit UUID. */ +#define BLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID 0x21 /**< Service Data - 128-bit UUID. */ +#define BLE_GAP_AD_TYPE_3D_INFORMATION_DATA 0x3D /**< 3D Information Data. */ +#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA 0xFF /**< Manufacturer Specific Data. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADV_FLAGS GAP Advertisement Flags + * @{ */ +#define BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE (0x01) /**< LE Limited Discoverable Mode. */ +#define BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE (0x02) /**< LE General Discoverable Mode. */ +#define BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED (0x04) /**< BR/EDR not supported. */ +#define BLE_GAP_ADV_FLAG_LE_BR_EDR_CONTROLLER (0x08) /**< Simultaneous LE and BR/EDR, Controller. */ +#define BLE_GAP_ADV_FLAG_LE_BR_EDR_HOST (0x10) /**< Simultaneous LE and BR/EDR, Host. */ +#define BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE (BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE Limited Discoverable Mode, BR/EDR not supported. */ +#define BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE (BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE General Discoverable Mode, BR/EDR not supported. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADV_INTERVALS GAP Advertising interval max and min + * @{ */ +#define BLE_GAP_ADV_INTERVAL_MIN 0x0020 /**< Minimum Advertising interval in 625 us units, i.e. 20 ms. */ +#define BLE_GAP_ADV_NONCON_INTERVAL_MIN 0x00A0 /**< Minimum Advertising interval in 625 us units for non connectable mode, i.e. 100 ms. */ +#define BLE_GAP_ADV_INTERVAL_MAX 0x4000 /**< Maximum Advertising interval in 625 us units, i.e. 10.24 s. */ + /**@} */ + + +/**@brief Maximum size of advertising data in octets. */ +#define BLE_GAP_ADV_MAX_SIZE 31 + + +/**@defgroup BLE_GAP_ADV_TYPES GAP Advertising types + * @{ */ +#define BLE_GAP_ADV_TYPE_ADV_IND 0x00 /**< Connectable undirected. */ +#define BLE_GAP_ADV_TYPE_ADV_DIRECT_IND 0x01 /**< Connectable directed. */ +#define BLE_GAP_ADV_TYPE_ADV_SCAN_IND 0x02 /**< Scannable undirected. */ +#define BLE_GAP_ADV_TYPE_ADV_NONCONN_IND 0x03 /**< Non connectable undirected. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADV_FILTER_POLICIES GAP Advertising filter policies + * @{ */ +#define BLE_GAP_ADV_FP_ANY 0x00 /**< Allow scan requests and connect requests from any device. */ +#define BLE_GAP_ADV_FP_FILTER_SCANREQ 0x01 /**< Filter scan requests with whitelist. */ +#define BLE_GAP_ADV_FP_FILTER_CONNREQ 0x02 /**< Filter connect requests with whitelist. */ +#define BLE_GAP_ADV_FP_FILTER_BOTH 0x03 /**< Filter both scan and connect requests with whitelist. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADV_TIMEOUT_VALUES GAP Advertising timeout values + * @{ */ +#define BLE_GAP_ADV_TIMEOUT_LIMITED_MAX 180 /**< Maximum advertising time in limited discoverable mode (TGAP(lim_adv_timeout) = 180s in spec (Addendum 2)). */ +#define BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED 0 /**< Unlimited advertising in general discoverable mode. */ +/**@} */ + + +/**@defgroup BLE_GAP_DISC_MODES GAP Discovery modes + * @{ */ +#define BLE_GAP_DISC_MODE_NOT_DISCOVERABLE 0x00 /**< Not discoverable discovery Mode. */ +#define BLE_GAP_DISC_MODE_LIMITED 0x01 /**< Limited Discovery Mode. */ +#define BLE_GAP_DISC_MODE_GENERAL 0x02 /**< General Discovery Mode. */ +/**@} */ + +/**@defgroup BLE_GAP_IO_CAPS GAP IO Capabilities + * @{ */ +#define BLE_GAP_IO_CAPS_DISPLAY_ONLY 0x00 /**< Display Only. */ +#define BLE_GAP_IO_CAPS_DISPLAY_YESNO 0x01 /**< Display and Yes/No entry. */ +#define BLE_GAP_IO_CAPS_KEYBOARD_ONLY 0x02 /**< Keyboard Only. */ +#define BLE_GAP_IO_CAPS_NONE 0x03 /**< No I/O capabilities. */ +#define BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY 0x04 /**< Keyboard and Display. */ +/**@} */ + + +/**@defgroup BLE_GAP_AUTH_KEY_TYPES GAP Authentication Key Types + * @{ */ +#define BLE_GAP_AUTH_KEY_TYPE_NONE 0x00 /**< No key (may be used to reject). */ +#define BLE_GAP_AUTH_KEY_TYPE_PASSKEY 0x01 /**< 6-digit Passkey. */ +#define BLE_GAP_AUTH_KEY_TYPE_OOB 0x02 /**< Out Of Band data. */ +/**@} */ + +/**@defgroup BLE_GAP_SEC_STATUS GAP Security status + * @{ */ +#define BLE_GAP_SEC_STATUS_SUCCESS 0x00 /**< Successful parameters. */ +#define BLE_GAP_SEC_STATUS_TIMEOUT 0x01 /**< Procedure timed out. */ +#define BLE_GAP_SEC_STATUS_PDU_INVALID 0x02 /**< Invalid PDU received. */ +#define BLE_GAP_SEC_STATUS_PASSKEY_ENTRY_FAILED 0x81 /**< Passkey entry failed (user cancelled or other). */ +#define BLE_GAP_SEC_STATUS_OOB_NOT_AVAILABLE 0x82 /**< Out of Band Key not available. */ +#define BLE_GAP_SEC_STATUS_AUTH_REQ 0x83 /**< Authentication requirements not met. */ +#define BLE_GAP_SEC_STATUS_CONFIRM_VALUE 0x84 /**< Confirm value failed. */ +#define BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP 0x85 /**< Pairing not supported. */ +#define BLE_GAP_SEC_STATUS_ENC_KEY_SIZE 0x86 /**< Encryption key size. */ +#define BLE_GAP_SEC_STATUS_SMP_CMD_UNSUPPORTED 0x87 /**< Unsupported SMP command. */ +#define BLE_GAP_SEC_STATUS_UNSPECIFIED 0x88 /**< Unspecified reason. */ +#define BLE_GAP_SEC_STATUS_REPEATED_ATTEMPTS 0x89 /**< Too little time elapsed since last attempt. */ +#define BLE_GAP_SEC_STATUS_INVALID_PARAMS 0x8A /**< Invalid parameters. */ +/**@} */ + +/**@defgroup BLE_GAP_SEC_STATUS_SOURCES GAP Security status sources + * @{ */ +#define BLE_GAP_SEC_STATUS_SOURCE_LOCAL 0x00 /**< Local failure. */ +#define BLE_GAP_SEC_STATUS_SOURCE_REMOTE 0x01 /**< Remote failure. */ +/**@} */ + +/**@defgroup BLE_GAP_CP_LIMITS GAP Connection Parameters Limits + * @{ */ +#define BLE_GAP_CP_MIN_CONN_INTVL_NONE 0xFFFF /**< No new minimum connction interval specified in connect parameters. */ +#define BLE_GAP_CP_MIN_CONN_INTVL_MIN 0x0006 /**< Lowest mimimum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ +#define BLE_GAP_CP_MIN_CONN_INTVL_MAX 0x0C80 /**< Highest minimum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ +#define BLE_GAP_CP_MAX_CONN_INTVL_NONE 0xFFFF /**< No new maximum connction interval specified in connect parameters. */ +#define BLE_GAP_CP_MAX_CONN_INTVL_MIN 0x0006 /**< Lowest maximum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ +#define BLE_GAP_CP_MAX_CONN_INTVL_MAX 0x0C80 /**< Highest maximum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ +#define BLE_GAP_CP_SLAVE_LATENCY_MAX 0x03E8 /**< Highest slave latency permitted, in connection events. */ +#define BLE_GAP_CP_CONN_SUP_TIMEOUT_NONE 0xFFFF /**< No new supervision timeout specified in connect parameters. */ +#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MIN 0x000A /**< Lowest supervision timeout permitted, in units of 10 ms, i.e. 100 ms. */ +#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MAX 0x0C80 /**< Highest supervision timeout permitted, in units of 10 ms, i.e. 32 s. */ +/**@} */ + + +/**@brief GAP device name maximum length. */ +#define BLE_GAP_DEVNAME_MAX_LEN 31 + + +/**@defgroup BLE_GAP_CONN_SEC_MODE_SET_MACROS GAP attribute security requirement setters + * + * See @ref ble_gap_conn_sec_mode_t. + * @{ */ +/**@brief Set sec_mode pointed to by ptr to have no access rights.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(ptr) do {(ptr)->sm = 0; (ptr)->lv = 0;} while(0) +/**@brief Set sec_mode pointed to by ptr to require no protection, open link.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_OPEN(ptr) do {(ptr)->sm = 1; (ptr)->lv = 1;} while(0) +/**@brief Set sec_mode pointed to by ptr to require encryption, but no MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 2;} while(0) +/**@brief Set sec_mode pointed to by ptr to require encryption and MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 3;} while(0) +/**@brief Set sec_mode pointed to by ptr to require signing or encryption, no MITM protection needed.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_NO_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 1;} while(0) +/**@brief Set sec_mode pointed to by ptr to require signing or encryption with MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_WITH_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 2;} while(0) +/**@} */ + + +/**@brief GAP Security Key Length. */ +#define BLE_GAP_SEC_KEY_LEN 16 + +/**@brief GAP Passkey Length. */ +#define BLE_GAP_PASSKEY_LEN 6 + +/**@brief Maximum amount of addresses in a whitelist. */ +#define BLE_GAP_WHITELIST_ADDR_MAX_COUNT (8) + +/**@brief Maximum amount of IRKs in a whitelist. + * @note The number of IRKs is limited to 8, even if the hardware supports more. + */ +#define BLE_GAP_WHITELIST_IRK_MAX_COUNT (8) + +/**@defgroup GAP_SEC_MODES GAP Security Modes + * @{ */ +#define BLE_GAP_SEC_MODE 0x00 /**< No key (may be used to reject). */ +/**@} */ + +/**@} */ + +/**@addtogroup BLE_GAP_STRUCTURES Structures + * @{ */ + +/**@brief Bluetooth Low Energy address. */ +typedef struct +{ + uint8_t addr_type; /**< See @ref BLE_GAP_ADDR_TYPES. */ + uint8_t addr[BLE_GAP_ADDR_LEN]; /**< 48-bit address, LSB format. */ +} ble_gap_addr_t; + + +/**@brief GAP connection parameters. + * + * @note When ble_conn_params_t is received in an event, both min_conn_interval and + * max_conn_interval will be equal to the connection interval set by the central. + */ +typedef struct +{ + uint16_t min_conn_interval; /**< Minimum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ + uint16_t max_conn_interval; /**< Maximum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ + uint16_t slave_latency; /**< Slave Latency in number of connection events, see @ref BLE_GAP_CP_LIMITS.*/ + uint16_t conn_sup_timeout; /**< Connection Supervision Timeout in 10 ms units, see @ref BLE_GAP_CP_LIMITS.*/ +} ble_gap_conn_params_t; + + +/**@brief GAP link requirements. + * + * See Bluetooth Core specification, Volume 3 Part C 10.2 for details. + * + * Security Mode 0 Level 0: No access permissions at all (this level is not defined by the Bluetooth Core specification).\n + * Security Mode 1 Level 1: No security is needed (aka open link).\n + * Security Mode 1 Level 2: Encrypted link required, MITM protection not necessary.\n + * Security Mode 1 Level 3: MITM protected encrypted link required.\n + * Security Mode 2 Level 1: Signing or encryption required, MITM protection not necessary.\n + * Security Mode 2 Level 2: MITM protected signing required, unless link is MITM protected encrypted.\n + */ +typedef struct +{ + uint8_t sm : 4; /**< Security Mode (1 or 2), 0 for no permissions at all. */ + uint8_t lv : 4; /**< Level (1, 2 or 3), 0 for no permissions at all. */ + +} ble_gap_conn_sec_mode_t; + + +/**@brief GAP connection security status.*/ +typedef struct +{ + ble_gap_conn_sec_mode_t sec_mode; /**< Currently active security mode for this connection.*/ + uint8_t encr_key_size; /**< Length of currently active encryption key, 7 to 16 octets (only applicable for bonding procedures). */ +} ble_gap_conn_sec_t; + + +/**@brief Identity Resolving Key. */ +typedef struct +{ + uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Array containing IRK. */ +} ble_gap_irk_t; + + +/**@brief Whitelist structure. */ +typedef struct +{ + ble_gap_addr_t ** pp_addrs; /**< Pointer to array of device address pointers, pointing to addresses to be used in whitelist. NULL if none are given. */ + uint8_t addr_count; /**< Count of device addresses in array, up to @ref BLE_GAP_WHITELIST_ADDR_MAX_COUNT. */ + ble_gap_irk_t ** pp_irks; /**< Pointer to array of Identity Resolving Key (IRK) pointers, each pointing to an IRK in the whitelist. NULL if none are given. */ + uint8_t irk_count; /**< Count of IRKs in array, up to @ref BLE_GAP_WHITELIST_IRK_MAX_COUNT. */ +} ble_gap_whitelist_t; + + +/**@brief GAP advertising parameters.*/ +typedef struct +{ + uint8_t type; /**< See @ref BLE_GAP_ADV_TYPES. */ + ble_gap_addr_t* p_peer_addr; /**< For BLE_GAP_CONN_MODE_DIRECTED mode only, known peer address. */ + uint8_t fp; /**< Filter Policy, see @ref BLE_GAP_ADV_FILTER_POLICIES. */ + ble_gap_whitelist_t * p_whitelist; /**< Pointer to whitelist, NULL if none is given. */ + uint16_t interval; /**< Advertising interval between 0x0020 and 0x4000 in 0.625 ms units (20ms to 10.24s), see @ref BLE_GAP_ADV_INTERVALS. This parameter must be set to 0 if type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND. */ + uint16_t timeout; /**< Advertising timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. See also @ref BLE_GAP_ADV_TIMEOUT_VALUES. This parameter must be set to 0 if type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND. */ +} ble_gap_adv_params_t; + + +/**@brief GAP scanning parameters. */ +typedef struct +{ + uint8_t filter; /**< Filter based on discovery mode, see @ref BLE_GAP_DISC_MODES. */ + uint8_t active : 1; /**< If 1, perform active scanning (scan requests). */ + uint8_t selective : 1; /**< If 1, ignore unknown devices (non whitelisted). */ + uint16_t interval; /**< Scan interval between 0x0020 and 0x4000 in 0.625ms units (20ms to 10.24s). */ + uint16_t window; /**< Scan window between 0x0004 and 0x4000 in 0.625ms units (2.5ms to 10.24s). */ + uint16_t timeout; /**< Scan timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. */ +} ble_gap_scan_params_t; + + +/**@brief GAP security parameters. */ +typedef struct +{ + uint16_t timeout; /**< Timeout for SMP transactions or Security Request in seconds, see @ref sd_ble_gap_authenticate and @ref sd_ble_gap_sec_params_reply for more information. */ + uint8_t bond : 1; /**< Perform bonding. */ + uint8_t mitm : 1; /**< Man In The Middle protection required. */ + uint8_t io_caps : 3; /**< IO capabilities, see @ref BLE_GAP_IO_CAPS. */ + uint8_t oob : 1; /**< Out Of Band data available. */ + uint8_t min_key_size; /**< Minimum encryption key size in octets between 7 and 16. */ + uint8_t max_key_size; /**< Maximum encryption key size in octets between min_key_size and 16. */ +} ble_gap_sec_params_t; + + +/**@brief GAP Encryption Information. */ +typedef struct +{ + uint16_t div; /**< Encryption Diversifier. */ + uint8_t ltk[BLE_GAP_SEC_KEY_LEN]; /**< Long Term Key. */ + uint8_t auth : 1; /**< Authenticated Key. */ + uint8_t ltk_len : 7; /**< LTK length in octets. */ +} ble_gap_enc_info_t; + + +/**@brief GAP Master Identification. */ +typedef struct +{ + uint16_t ediv; /**< Encrypted Diversifier. */ + uint8_t rand[8]; /**< Random Number. */ +} ble_gap_master_id_t; + + +/**@brief GAP Identity Information. */ +typedef struct +{ + ble_gap_addr_t addr; /**< Bluetooth address to which this key applies. */ + uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Identity Resolution Key. */ +} ble_gap_id_info_t; + + +/**@brief GAP Signing Information. */ +typedef struct +{ + uint8_t csrk[BLE_GAP_SEC_KEY_LEN]; /* Connection Signature Resolving Key. */ +} ble_gap_sign_info_t; + + +/**@brief GAP Event IDs. + * Those IDs uniquely identify an event coming from the stack to the application. + */ +enum BLE_GAP_EVTS +{ + BLE_GAP_EVT_CONNECTED = BLE_GAP_EVT_BASE, /**< Connection established. */ + BLE_GAP_EVT_DISCONNECTED, /**< Disconnected from peer. */ + BLE_GAP_EVT_CONN_PARAM_UPDATE, /**< Connection Parameters updated. */ + BLE_GAP_EVT_SEC_PARAMS_REQUEST, /**< Request to provide security parameters. */ + BLE_GAP_EVT_SEC_INFO_REQUEST, /**< Request to provide security information. */ + BLE_GAP_EVT_PASSKEY_DISPLAY, /**< Request to display a passkey to the user. */ + BLE_GAP_EVT_AUTH_KEY_REQUEST, /**< Request to provide an authentication key. */ + BLE_GAP_EVT_AUTH_STATUS, /**< Authentication procedure completed with status. */ + BLE_GAP_EVT_CONN_SEC_UPDATE, /**< Connection security updated. */ + BLE_GAP_EVT_TIMEOUT, /**< Timeout expired. */ + BLE_GAP_EVT_RSSI_CHANGED, /**< Signal strength measurement report. */ +}; + + +/** + * @brief GAP Option IDs. + * IDs that uniquely identify a GAP option. + */ +enum BLE_GAP_OPTS +{ + BLE_GAP_OPT_LOCAL_CONN_LATENCY = BLE_GAP_OPT_BASE, /**< Local connection latency. */ + BLE_GAP_OPT_PASSKEY, /**< Set passkey to be used during pairing. This option can be used to make the SoftDevice use an application provided passkey instead of generating a random passkey.*/ + BLE_GAP_OPT_PRIVACY, /**< Set or get custom IRK or custom private address cycle interval. */ +}; +/**@} */ + + +/**@brief Event data for connected event. */ +typedef struct +{ + ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ + uint8_t irk_match :1; /**< If 1, peer device's address resolved using an IRK. */ + uint8_t irk_match_idx :7; /**< Index in IRK list where the address was matched. */ + ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ +} ble_gap_evt_connected_t; + + +/**@brief Event data for disconnected event. */ +typedef struct +{ + uint8_t reason; /**< HCI error code. */ +} ble_gap_evt_disconnected_t; + + +/**@brief Event data for connection parameter update event. */ +typedef struct +{ + ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ +} ble_gap_evt_conn_param_update_t; + + +/**@brief Event data for security parameters request event. */ +typedef struct +{ + ble_gap_sec_params_t peer_params; /**< Initiator Security Parameters. */ +} ble_gap_evt_sec_params_request_t; + + +/**@brief Event data for security info request event. */ +typedef struct +{ + ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ + uint16_t div; /**< Encryption diversifier for LTK lookup. */ + uint8_t enc_info : 1; /**< If 1, Encryption Information required. */ + uint8_t id_info : 1; /**< If 1, Identity Information required. */ + uint8_t sign_info : 1; /**< If 1, Signing Information required. */ +} ble_gap_evt_sec_info_request_t; + + +/**@brief Event data for passkey display event. */ +typedef struct +{ + uint8_t passkey[BLE_GAP_PASSKEY_LEN]; /**< 6-digit passkey in ASCII ('0'-'9' digits only). */ +} ble_gap_evt_passkey_display_t; + + +/**@brief Event data for authentication key request event. */ +typedef struct +{ + uint8_t key_type; /**< See @ref BLE_GAP_AUTH_KEY_TYPES. */ +} ble_gap_evt_auth_key_request_t; + + +/**@brief Security levels supported. + * @note See Bluetooth Specification Version 4.1 Volume 3, Part C, Chapter 10. +*/ +typedef struct +{ + uint8_t lv1 : 1; /**< If 1: Level 1 is supported. */ + uint8_t lv2 : 1; /**< If 1: Level 2 is supported. */ + uint8_t lv3 : 1; /**< If 1: Level 3 is supported. */ +} ble_gap_sec_levels_t; + + +/**@brief Keys that have been exchanged. */ +typedef struct +{ + uint8_t ltk : 1; /**< Long Term Key. */ + uint8_t ediv_rand : 1; /**< Encrypted Diversifier and Random value. */ + uint8_t irk : 1; /**< Identity Resolving Key. */ + uint8_t address : 1; /**< Public or static random address. */ + uint8_t csrk : 1; /**< Connection Signature Resolving Key. */ +} ble_gap_sec_keys_t; + + +/**@brief Event data for authentication status event. */ +typedef struct +{ + uint8_t auth_status; /**< Authentication status, see @ref BLE_GAP_SEC_STATUS. */ + uint8_t error_src; /**< On error, source that caused the failure, see @ref BLE_GAP_SEC_STATUS_SOURCES. */ + ble_gap_sec_levels_t sm1_levels; /**< Levels supported in Security Mode 1. */ + ble_gap_sec_levels_t sm2_levels; /**< Levels supported in Security Mode 2. */ + ble_gap_sec_keys_t periph_kex; /**< Bitmap stating which keys were exchanged (distributed) by the peripheral. */ + ble_gap_sec_keys_t central_kex; /**< Bitmap stating which keys were exchanged (distributed) by the central. */ + struct periph_keys_t + { + ble_gap_enc_info_t enc_info; /**< Peripheral's Encryption information. */ + } periph_keys; /**< Actual keys distributed from the Peripheral to the Central. */ + struct central_keys_t + { + ble_gap_irk_t irk; /**< Central's IRK. */ + ble_gap_addr_t id_info; /**< Central's Identity Info. */ + } central_keys; /**< Actual keys distributed from the Central to the Peripheral. */ +} ble_gap_evt_auth_status_t; + + +/**@brief Event data for connection security update event. */ +typedef struct +{ + ble_gap_conn_sec_t conn_sec; /**< Connection security level. */ +} ble_gap_evt_conn_sec_update_t; + + +/**@brief Event data for timeout event. */ +typedef struct +{ + uint8_t src; /**< Source of timeout event, see @ref BLE_GAP_TIMEOUT_SOURCES. */ +} ble_gap_evt_timeout_t; + + +/**@brief Event data for advertisement report event. */ +typedef struct +{ + int8_t rssi; /**< Received Signal Strength Indication in dBm. */ +} ble_gap_evt_rssi_changed_t; + + +/**@brief GAP event callback event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occured. */ + union /**< union alternative identified by evt_id in enclosing struct. */ + { + ble_gap_evt_connected_t connected; /**< Connected Event Parameters. */ + ble_gap_evt_disconnected_t disconnected; /**< Disconnected Event Parameters. */ + ble_gap_evt_conn_param_update_t conn_param_update; /**< Connection Parameter Update Parameters. */ + ble_gap_evt_sec_params_request_t sec_params_request; /**< Security Parameters Request Event Parameters. */ + ble_gap_evt_sec_info_request_t sec_info_request; /**< Security Information Request Event Parameters. */ + ble_gap_evt_passkey_display_t passkey_display; /**< Passkey Display Event Parameters. */ + ble_gap_evt_auth_key_request_t auth_key_request; /**< Authentication Key Request Event Parameters. */ + ble_gap_evt_auth_status_t auth_status; /**< Authentication Status Event Parameters. */ + ble_gap_evt_conn_sec_update_t conn_sec_update; /**< Connection Security Update Event Parameters. */ + ble_gap_evt_timeout_t timeout; /**< Timeout Event Parameters. */ + ble_gap_evt_rssi_changed_t rssi_changed; /**< RSSI Event parameters. */ + } params; + +} ble_gap_evt_t; + + +/**@brief Local connection latency option. + * + * Local connection latency is a feature which enables the slave to improve + * current consumption by ignoring the slave latency set by the peer. The + * local connection latency can only be set to a multiple of the slave latency, + * and cannot be longer than half of the supervision timeout. + * + * Used with @ref sd_ble_opt_set to set the local connection latency. The + * @ref sd_ble_opt_get is not supported for this option, but the actual + * local connection latency (unless set to NULL) is set as a return parameter + * when setting the option. + * + * @note The latency set will be truncated down to the closest slave latency event + * multiple, or the nearest multiple before half of the supervision timeout. + * + * @note The local connection latency is default off, and needs to be set for new + * connections and whenever the connection is updated. + * + * @retval ::NRF_SUCCESS Set successfully. + * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. + */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle */ + uint16_t requested_latency; /**< Requested local connection latency. */ + uint16_t * p_actual_latency; /**< Pointer to storage for the actual local connection latency (can be set to NULL to skip return value). */ +} ble_gap_opt_local_conn_latency_t; + + +/**@brief Passkey Option. + * + * Structure containing the passkey to be used during pairing. This can be used with @ref + * sd_ble_opt_set to make the SoftDevice use a pre-programmed passkey for authentication + * instead of generating a random one. + * + * @note @ref sd_ble_opt_get is not supported for this option. + * + */ +typedef struct +{ + uint8_t * p_passkey; /**< Pointer to 6-digit ASCII string (digit 0..9 only, no NULL termination) passkey to be used during pairing. If this is NULL, the SoftDevice will generate a random passkey if required.*/ +} ble_gap_opt_passkey_t; + + +/**@brief Custom Privacy Options. + * + * @note The specified address cycle interval is used when the address cycle mode is + * @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO. If 0 is given, the address will not be refreshed at any + * interval, and not at start of advertising. A new address can be generated manually by calling + * @ref sd_ble_gap_address_set with the same type again. The default interval is + * @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S. + * + * @note If cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO, the address will immediately be + * refreshed when this option is set. + */ +typedef struct +{ + ble_gap_irk_t * p_irk; /**< When input: Pointer to custom IRK, or NULL to use/reset to the device's default IRK. When output: Pointer to where the current IRK is to be stored, or NULL to not read out the IRK. */ + uint16_t interval_s; /**< When input: Custom private address cycle interval in seconds. When output: The current private address cycle interval. */ +} ble_gap_opt_privacy_t; + + +/**@brief Option structure for GAP options. */ +typedef union +{ + ble_gap_opt_local_conn_latency_t local_conn_latency; /**< Local connection latency. */ + ble_gap_opt_passkey_t passkey; /**< Passkey to be used for pairing.*/ + ble_gap_opt_privacy_t privacy; /**< Custom privacy options. */ +} ble_gap_opt_t; +/**@} */ + + +/**@addtogroup BLE_GAP_FUNCTIONS Functions + * @{ */ + +/**@brief Set local Bluetooth address. + * + * If the address cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO, the address type is required to + * be @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE or + * @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE. The given address is ignored and the + * SoftDevice will generate a new private address automatically every time advertising is + * (re)started, and every @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S seconds. If this API + * call is used again with the same parameters while advertising, the SoftDevice will immediately + * generate a new private address to replace the current address. + * + * If the application wishes to use a @ref BLE_GAP_ADDR_TYPE_PUBLIC or + * @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC address, the cycle mode must be + * @ref BLE_GAP_ADDR_CYCLE_MODE_NONE. + * + * If this API function is called while advertising, the softdevice will immediately update the + * advertising address without the need to stop advertising in the following cases: + * - If the previously set address is of type @ref BLE_GAP_ADDR_TYPE_PUBLIC and the new address + * is also of type @ref BLE_GAP_ADDR_TYPE_PUBLIC + * - If the previously set address is not @ref BLE_GAP_ADDR_TYPE_PUBLIC and the new address is + * also not @ref BLE_GAP_ADDR_TYPE_PUBLIC. + * + * If the address is changed from a @ref BLE_GAP_ADDR_TYPE_PUBLIC address to another type or from + * another type to a @ref BLE_GAP_ADDR_TYPE_PUBLIC address, the change will take effect the next + * time advertising is started. + * + * @note If the address cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_NONE and the application is + * using privacy, the application must take care to generate and set new private addresses + * periodically to comply with the Privacy specification in Bluetooth Core Spec. + * + * @param[in] addr_cycle_mode Address cycle mode, see @ref BLE_GAP_ADDR_CYCLE_MODES. + * @param[in] p_addr Pointer to address structure. + * + * @return @ref NRF_SUCCESS Address successfully set. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameters. + * @return @ref BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address. + * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. + */ +SVCALL(SD_BLE_GAP_ADDRESS_SET, uint32_t, sd_ble_gap_address_set(uint8_t addr_cycle_mode, ble_gap_addr_t const * const p_addr)); + + +/**@brief Get local Bluetooth address. + * + * @param[out] p_addr Pointer to address structure. + * + * @return @ref NRF_SUCCESS Address successfully retrieved. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_GAP_ADDRESS_GET, uint32_t, sd_ble_gap_address_get(ble_gap_addr_t * const p_addr)); + + +/**@brief Set, clear or update advertisement and scan response data. + * + * @note The format of the advertisement data will be checked by this call to ensure interoperability. + * Limitations imposed by this API call to the data provided include having a flags data type in the scan response data and + * duplicating the local name in the advertisement data and scan response data. + * + * @note: To clear the advertisement data and set it to a 0-length packet, simply provide a valid pointer (p_data/p_sr_data) with its corresponding + * length (dlen/srdlen) set to 0. + * + * @note: The call will fail if p_data and p_sr_data are both NULL since this would have no effect. + * + * @param[in] p_data Raw data to be placed in advertisement packet. If NULL, no changes are made to the current advertisement packet data. + * @param[in] dlen Data length for p_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_data is NULL, can be 0 if p_data is not NULL. + * @param[in] p_sr_data Raw data to be placed in scan response packet. If NULL, no changes are made to the current scan response packet data. + * @param[in] srdlen Data length for p_sr_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_sr_data is NULL, can be 0 if p_data is not NULL. + * + * @return @ref NRF_SUCCESS Advertisement data successfully updated or cleared. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_FLAGS Invalid combination of advertising flags supplied. + * @return @ref NRF_ERROR_INVALID_DATA Invalid data type(s) supplied, check the advertising data format specification. + * @return @ref NRF_ERROR_INVALID_LENGTH Invalid data length(s) supplied. + * @return @ref BLE_ERROR_GAP_UUID_LIST_MISMATCH Invalid UUID list supplied. + * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. + */ +SVCALL(SD_BLE_GAP_ADV_DATA_SET, uint32_t, sd_ble_gap_adv_data_set(uint8_t const * const p_data, uint8_t dlen, uint8_t const * const p_sr_data, uint8_t srdlen)); + + +/**@brief Start advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). + * + * @param[in] p_adv_params Pointer to advertising parameters structure. + * + * @return @ref NRF_SUCCESS The BLE stack has started advertising. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check the accepted ranges and limits. + * @return @ref BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Bluetooth address supplied. + * @return @ref BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST Discoverable mode and whitelist incompatible. + */ +SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start(ble_gap_adv_params_t const * const p_adv_params)); + + +/**@brief Stop advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). + * + * @return @ref NRF_SUCCESS The BLE stack has stopped advertising. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation (most probably not in advertising state). + */ +SVCALL(SD_BLE_GAP_ADV_STOP, uint32_t, sd_ble_gap_adv_stop(void)); + + +/**@brief Update connection parameters. + * + * @details In the central role this will initiate a Link Layer connection parameter update procedure, + * otherwise in the peripheral role, this will send the corresponding L2CAP request and wait for + * the central to perform the procedure. In both cases, and regardless of success or failure, the application + * will be informed of the result with a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE event. + * + * @note If both a connection supervision timeout and a maximum connection interval are specified, then the following constraint + * applies: (conn_sup_timeout * 8) >= (max_conn_interval * (slave_latency + 1)) + * + * @param[in] conn_handle Connection handle. + * @param[in] p_conn_params Pointer to desired connection parameters. If NULL is provided on a peripheral role, + * the parameters in the PPCP characteristic of the GAP service will be used instead. + * + * @return @ref NRF_SUCCESS The Connection Update procedure has been started successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. + * @return @ref NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, process pending events and retry. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_GAP_CONN_PARAM_UPDATE, uint32_t, sd_ble_gap_conn_param_update(uint16_t conn_handle, ble_gap_conn_params_t const * const p_conn_params)); + + +/**@brief Disconnect (GAP Link Termination). + * + * @details This call initiates the disconnection procedure, and its completion will be communicated to the application + * with a BLE_GAP_EVT_DISCONNECTED event. + * + * @param[in] conn_handle Connection handle. + * @param[in] hci_status_code HCI status code, see @ref BLE_HCI_STATUS_CODES (accepted values are BTLE_REMOTE_USER_TERMINATED_CONNECTION and BTLE_CONN_INTERVAL_UNACCEPTABLE). + * + * @return @ref NRF_SUCCESS The disconnection procedure has been started successfully. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation (disconnection is already in progress or not connected at all). + */ +SVCALL(SD_BLE_GAP_DISCONNECT, uint32_t, sd_ble_gap_disconnect(uint16_t conn_handle, uint8_t hci_status_code)); + + +/**@brief Set the radio's transmit power. + * + * @param[in] tx_power Radio transmit power in dBm (accepted values are -40, -30, -20, -16, -12, -8, -4, 0, and 4 dBm). + * + * @note -40 dBm will not actually give -40 dBm, but will instead be remapped to -30 dBm. + * + * @return @ref NRF_SUCCESS Successfully changed the transmit power. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. + */ +SVCALL(SD_BLE_GAP_TX_POWER_SET, uint32_t, sd_ble_gap_tx_power_set(int8_t tx_power)); + + +/**@brief Set GAP Appearance value. + * + * @param[in] appearance Appearance (16-bit), see @ref BLE_APPEARANCES. + * + * @return @ref NRF_SUCCESS Appearance value set successfully. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + */ +SVCALL(SD_BLE_GAP_APPEARANCE_SET, uint32_t, sd_ble_gap_appearance_set(uint16_t appearance)); + + +/**@brief Get GAP Appearance value. + * + * @param[out] p_appearance Appearance (16-bit), see @ref BLE_APPEARANCES. + * + * @return @ref NRF_SUCCESS Appearance value retrieved successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_GAP_APPEARANCE_GET, uint32_t, sd_ble_gap_appearance_get(uint16_t * const p_appearance)); + + +/**@brief Set GAP Peripheral Preferred Connection Parameters. + * + * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure with the desired parameters. + * + * @return @ref NRF_SUCCESS Peripheral Preferred Connection Parameters set successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + */ +SVCALL(SD_BLE_GAP_PPCP_SET, uint32_t, sd_ble_gap_ppcp_set(ble_gap_conn_params_t const * const p_conn_params)); + + +/**@brief Get GAP Peripheral Preferred Connection Parameters. + * + * @param[out] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the parameters will be stored. + * + * @return @ref NRF_SUCCESS Peripheral Preferred Connection Parameters retrieved successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_GAP_PPCP_GET, uint32_t, sd_ble_gap_ppcp_get(ble_gap_conn_params_t * const p_conn_params)); + + +/**@brief Set GAP device name. + * + * @param[in] p_write_perm Write permissions for the Device Name characteristic see @ref ble_gap_conn_sec_mode_t. + * @param[in] p_dev_name Pointer to a UTF-8 encoded, <b>non NULL-terminated</b> string. + * @param[in] len Length of the UTF-8, <b>non NULL-terminated</b> string pointed to by p_dev_name in octets (must be smaller or equal than @ref BLE_GAP_DEVNAME_MAX_LEN). + * + * @return @ref NRF_SUCCESS GAP device name and permissions set successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + */ +SVCALL(SD_BLE_GAP_DEVICE_NAME_SET, uint32_t, sd_ble_gap_device_name_set(ble_gap_conn_sec_mode_t const * const p_write_perm, uint8_t const * const p_dev_name, uint16_t len)); + + +/**@brief Get GAP device name. + * + * @param[in] p_dev_name Pointer to an empty buffer where the UTF-8 <b>non NULL-terminated</b> string will be placed. Set to NULL to obtain the complete device name length. + * @param[in,out] p_len Length of the buffer pointed by p_dev_name, complete device name length on output. + * + * @note If the device name is longer than the size of the supplied buffer, + * p_len will return the complete device name length, + * and not the number of bytes actually returned in p_dev_name. + * The application may use this information to allocate a suitable buffer size. + * + * @return @ref NRF_SUCCESS GAP device name retrieved successfully. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + */ +SVCALL(SD_BLE_GAP_DEVICE_NAME_GET, uint32_t, sd_ble_gap_device_name_get(uint8_t * const p_dev_name, uint16_t * const p_len)); + + +/**@brief Initiate GAP Authentication procedure. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_sec_params Pointer to the @ref ble_gap_sec_params_t structure with the security parameters to be used during the pairing procedure. + * + * @details In the central role, this function will send an SMP Pairing Request, otherwise in the peripheral role, an SMP Security Request will be sent. + * In the peripheral role, only the timeout, bond and mitm fields of @ref ble_gap_sec_params_t are used. + * + * @note The GAP Authentication procedure may be triggered by the central without calling this function when accessing a secure service. + * @note Calling this function may result in the following events depending on the outcome and parameters: @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, + * @ref BLE_GAP_EVT_SEC_INFO_REQUEST, @ref BLE_GAP_EVT_AUTH_KEY_REQUEST, @ref BLE_GAP_EVT_AUTH_STATUS. + * @note The timeout parameter in @ref ble_gap_sec_params_t is interpreted here as the Security Request timeout + * + * + * @return @ref NRF_SUCCESS Successfully initiated authentication procedure. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_AUTHENTICATE, uint32_t, sd_ble_gap_authenticate(uint16_t conn_handle, ble_gap_sec_params_t const * const p_sec_params)); + + +/**@brief Reply with GAP security parameters. + * + * @param[in] conn_handle Connection handle. + * @param[in] sec_status Security status, see @ref BLE_GAP_SEC_STATUS. + * @param[in] p_sec_params Pointer to a @ref ble_gap_sec_params_t security parameters structure. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, calling it at other times will result in an NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * @note The timeout parameter in @ref ble_gap_sec_params_t is interpreted here as the SMP procedure timeout, and must be 30 seconds. The function will fail + * if the application supplies a different value. + * + * @return @ref NRF_SUCCESS Successfully accepted security parameter from the application. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_SEC_PARAMS_REPLY, uint32_t, sd_ble_gap_sec_params_reply(uint16_t conn_handle, uint8_t sec_status, ble_gap_sec_params_t const * const p_sec_params)); + + +/**@brief Reply with an authentication key. + * + * @param[in] conn_handle Connection handle. + * @param[in] key_type See @ref BLE_GAP_AUTH_KEY_TYPES. + * @param[in] key If key type is BLE_GAP_AUTH_KEY_TYPE_NONE, then NULL. + * If key type is BLE_GAP_AUTH_KEY_TYPE_PASSKEY, then a 6-byte ASCII string (digit 0..9 only, no NULL termination). + * If key type is BLE_GAP_AUTH_KEY_TYPE_OOB, then a 16-byte OOB key value in Little Endian format. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_AUTH_KEY_REQUEST, calling it at other times will result in an NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * + * @return @ref NRF_SUCCESS Authentication key successfully set. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_AUTH_KEY_REPLY, uint32_t, sd_ble_gap_auth_key_reply(uint16_t conn_handle, uint8_t key_type, uint8_t const * const key)); + + +/**@brief Reply with GAP security information. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. May be NULL to signal none is available. + * @param[in] p_sign_info Pointer to a @ref ble_gap_sign_info_t signing information structure. May be NULL to signal none is available. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_INFO_REQUEST, calling it at other times will result in NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * @note Data signing is not implemented yet. p_sign_info must therefore be NULL. + * + * @return @ref NRF_SUCCESS Successfully accepted security information. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. + */ +SVCALL(SD_BLE_GAP_SEC_INFO_REPLY, uint32_t, sd_ble_gap_sec_info_reply(uint16_t conn_handle, ble_gap_enc_info_t const * const p_enc_info, ble_gap_sign_info_t const * const p_sign_info)); + + +/**@brief Get the current connection security. + * + * @param[in] conn_handle Connection handle. + * @param[out] p_conn_sec Pointer to a @ref ble_gap_conn_sec_t structure to be filled in. + * + * @return @ref NRF_SUCCESS Current connection security successfully retrieved. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_CONN_SEC_GET, uint32_t, sd_ble_gap_conn_sec_get(uint16_t conn_handle, ble_gap_conn_sec_t * const p_conn_sec)); + + +/**@brief Start reporting the received signal strength to the application. + * + * A new event is reported whenever the RSSI value changes, until @ref sd_ble_gap_rssi_stop is called. + * + * @param[in] conn_handle Connection handle. + * + * @return @ref NRF_SUCCESS Successfully activated RSSI reporting. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_RSSI_START, uint32_t, sd_ble_gap_rssi_start(uint16_t conn_handle)); + + +/**@brief Stop reporting the received singnal strength. + * + * An RSSI change detected before the call but not yet received by the application + * may be reported after @ref sd_ble_gap_rssi_stop has been called. + * + * @param[in] conn_handle Connection handle. + * + * @return @ref NRF_SUCCESS Successfully deactivated RSSI reporting. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_RSSI_STOP, uint32_t, sd_ble_gap_rssi_stop(uint16_t conn_handle)); +/**@} */ + +#endif // BLE_GAP_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gatt.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,171 @@ +/* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + /** + @addtogroup BLE_GATT Generic Attribute Profile (GATT) Common + @{ + @brief Common definitions and prototypes for the GATT interfaces. + */ + +#ifndef BLE_GATT_H__ +#define BLE_GATT_H__ + +#include "ble_types.h" +#include "ble_ranges.h" + + +/** @addtogroup BLE_GATT_DEFINES Defines + * @{ */ + +/** @brief Default MTU size. */ +#define GATT_MTU_SIZE_DEFAULT 23 + +/** @brief Only the default MTU size of 23 is currently supported. */ +#define GATT_RX_MTU 23 + + +/**@brief Invalid Attribute Handle. */ +#define BLE_GATT_HANDLE_INVALID 0x0000 + +/** @defgroup BLE_GATT_TIMEOUT_SOURCES GATT Timeout sources + * @{ */ +#define BLE_GATT_TIMEOUT_SRC_PROTOCOL 0x00 /**< ATT Protocol timeout. */ +/** @} */ + +/** @defgroup BLE_GATT_WRITE_OPS GATT Write operations + * @{ */ +#define BLE_GATT_OP_INVALID 0x00 /**< Invalid Operation. */ +#define BLE_GATT_OP_WRITE_REQ 0x01 /**< Write Request. */ +#define BLE_GATT_OP_WRITE_CMD 0x02 /**< Write Command. */ +#define BLE_GATT_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ +#define BLE_GATT_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ +#define BLE_GATT_OP_EXEC_WRITE_REQ 0x05 /**< Execute Write Request. */ +/** @} */ + +/** @defgroup BLE_GATT_EXEC_WRITE_FLAGS GATT Execute Write flags + * @{ */ +#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_CANCEL 0x00 +#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE 0x01 +/** @} */ + +/** @defgroup BLE_GATT_HVX_TYPES GATT Handle Value operations + * @{ */ +#define BLE_GATT_HVX_INVALID 0x00 /**< Invalid Operation. */ +#define BLE_GATT_HVX_NOTIFICATION 0x01 /**< Handle Value Notification. */ +#define BLE_GATT_HVX_INDICATION 0x02 /**< Handle Value Indication. */ +/** @} */ + +/** @defgroup BLE_GATT_STATUS_CODES GATT Status Codes + * @{ */ +#define BLE_GATT_STATUS_SUCCESS 0x0000 /**< Success. */ +#define BLE_GATT_STATUS_UNKNOWN 0x0001 /**< Unknown or not applicable status. */ +#define BLE_GATT_STATUS_ATTERR_INVALID 0x0100 /**< ATT Error: Invalid Error Code. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_HANDLE 0x0101 /**< ATT Error: Invalid Attribute Handle. */ +#define BLE_GATT_STATUS_ATTERR_READ_NOT_PERMITTED 0x0102 /**< ATT Error: Read not permitted. */ +#define BLE_GATT_STATUS_ATTERR_WRITE_NOT_PERMITTED 0x0103 /**< ATT Error: Write not permitted. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_PDU 0x0104 /**< ATT Error: Used in ATT as Invalid PDU. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHENTICATION 0x0105 /**< ATT Error: Authenticated link required. */ +#define BLE_GATT_STATUS_ATTERR_REQUEST_NOT_SUPPORTED 0x0106 /**< ATT Error: Used in ATT as Request Not Supported. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_OFFSET 0x0107 /**< ATT Error: Offset specified was past the end of the attribute. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHORIZATION 0x0108 /**< ATT Error: Used in ATT as Insufficient Authorisation. */ +#define BLE_GATT_STATUS_ATTERR_PREPARE_QUEUE_FULL 0x0109 /**< ATT Error: Used in ATT as Prepare Queue Full. */ +#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND 0x010A /**< ATT Error: Used in ATT as Attribute not found. */ +#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_LONG 0x010B /**< ATT Error: Attribute cannot be read or written using read/write blob requests. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_ENC_KEY_SIZE 0x010C /**< ATT Error: Encryption key size used is insufficient. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_ATT_VAL_LENGTH 0x010D /**< ATT Error: Invalid value size. */ +#define BLE_GATT_STATUS_ATTERR_UNLIKELY_ERROR 0x010E /**< ATT Error: Very unlikely error. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_ENCRYPTION 0x010F /**< ATT Error: Encrypted link required. */ +#define BLE_GATT_STATUS_ATTERR_UNSUPPORTED_GROUP_TYPE 0x0110 /**< ATT Error: Attribute type is not a supported grouping attribute. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_RESOURCES 0x0111 /**< ATT Error: Encrypted link required. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_BEGIN 0x0112 /**< ATT Error: Reserved for Future Use range #1 begin. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_END 0x017F /**< ATT Error: Reserved for Future Use range #1 end. */ +#define BLE_GATT_STATUS_ATTERR_APP_BEGIN 0x0180 /**< ATT Error: Application range begin. */ +#define BLE_GATT_STATUS_ATTERR_APP_END 0x019F /**< ATT Error: Application range end. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_BEGIN 0x01A0 /**< ATT Error: Reserved for Future Use range #2 begin. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_END 0x01DF /**< ATT Error: Reserved for Future Use range #2 end. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_BEGIN 0x01E0 /**< ATT Error: Reserved for Future Use range #3 begin. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_END 0x01FC /**< ATT Error: Reserved for Future Use range #3 end. */ +#define BLE_GATT_STATUS_ATTERR_CPS_CCCD_CONFIG_ERROR 0x01FD /**< ATT Common Profile and Service Error: Client Characteristic Configuration Descriptor improperly configured. */ +#define BLE_GATT_STATUS_ATTERR_CPS_PROC_ALR_IN_PROG 0x01FE /**< ATT Common Profile and Service Error: Procedure Already in Progress. */ +#define BLE_GATT_STATUS_ATTERR_CPS_OUT_OF_RANGE 0x01FF /**< ATT Common Profile and Service Error: Out Of Range. */ +/** @} */ + + +/** @defgroup BLE_GATT_CPF_FORMATS Characteristic Presentation Formats + * @note Found at http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml + * @{ */ +#define BLE_GATT_CPF_FORMAT_RFU 0x00 /**< Reserved For Future Use. */ +#define BLE_GATT_CPF_FORMAT_BOOLEAN 0x01 /**< Boolean. */ +#define BLE_GATT_CPF_FORMAT_2BIT 0x02 /**< Unsigned 2-bit integer. */ +#define BLE_GATT_CPF_FORMAT_NIBBLE 0x03 /**< Unsigned 4-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT8 0x04 /**< Unsigned 8-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT12 0x05 /**< Unsigned 12-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT16 0x06 /**< Unsigned 16-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT24 0x07 /**< Unsigned 24-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT32 0x08 /**< Unsigned 32-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT48 0x09 /**< Unsigned 48-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT64 0x0A /**< Unsigned 64-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT128 0x0B /**< Unsigned 128-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT8 0x0C /**< Signed 2-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT12 0x0D /**< Signed 12-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT16 0x0E /**< Signed 16-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT24 0x0F /**< Signed 24-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT32 0x10 /**< Signed 32-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT48 0x11 /**< Signed 48-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT64 0x12 /**< Signed 64-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT128 0x13 /**< Signed 128-bit integer. */ +#define BLE_GATT_CPF_FORMAT_FLOAT32 0x14 /**< IEEE-754 32-bit floating point. */ +#define BLE_GATT_CPF_FORMAT_FLOAT64 0x15 /**< IEEE-754 64-bit floating point. */ +#define BLE_GATT_CPF_FORMAT_SFLOAT 0x16 /**< IEEE-11073 16-bit SFLOAT. */ +#define BLE_GATT_CPF_FORMAT_FLOAT 0x17 /**< IEEE-11073 32-bit FLOAT. */ +#define BLE_GATT_CPF_FORMAT_DUINT16 0x18 /**< IEEE-20601 format. */ +#define BLE_GATT_CPF_FORMAT_UTF8S 0x19 /**< UTF-8 string. */ +#define BLE_GATT_CPF_FORMAT_UTF16S 0x1A /**< UTF-16 string. */ +#define BLE_GATT_CPF_FORMAT_STRUCT 0x1B /**< Opaque Structure. */ +/** @} */ + +/** @defgroup BLE_GATT_CPF_NAMESPACES GATT Bluetooth Namespaces + * @{ + */ +#define BLE_GATT_CPF_NAMESPACE_BTSIG 0x01 +#define BLE_GATT_CPF_NAMESPACE_DESCRIPTION_UNKNOWN 0x0000 +/** @} */ + +/** @} */ + +/** @addtogroup BLE_GATT_STRUCTURES Structures + * @{ */ + +/**@brief GATT Characteristic Properties. */ +typedef struct +{ + /* Standard properties */ + uint8_t broadcast :1; /**< Broadcasting of value permitted. */ + uint8_t read :1; /**< Reading value permitted. */ + uint8_t write_wo_resp :1; /**< Writing value with Write Command permitted. */ + uint8_t write :1; /**< Writing value with Write Request permitted. */ + uint8_t notify :1; /**< Notications of value permitted. */ + uint8_t indicate :1; /**< Indications of value permitted. */ + uint8_t auth_signed_wr :1; /**< Writing value with Signed Write Command permitted. */ +} ble_gatt_char_props_t; + +/**@brief GATT Characteristic Extended Properties. */ +typedef struct +{ + /* Extended properties */ + uint8_t reliable_wr :1; /**< Writing value with Queued Write Request permitted. */ + uint8_t wr_aux :1; /**< Writing the Characteristic User Description permitted. */ +} ble_gatt_char_ext_props_t; + +#endif // BLE_GATT_H__ + +/** @} */ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gattc.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,406 @@ +/* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_GATTC Generic Attribute Profile (GATT) Client + @{ + @brief Definitions and prototypes for the GATT Client interface. + */ + +#ifndef BLE_GATTC_H__ +#define BLE_GATTC_H__ + +#include "ble_gatt.h" +#include "ble_types.h" +#include "ble_ranges.h" +#include "nrf_svc.h" + +/** @addtogroup BLE_GATTC_ENUMERATIONS Enumerations + * @{ */ + +/**@brief GATTC API SVC numbers. */ +enum BLE_GATTC_SVCS +{ + SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER = BLE_GATTC_SVC_BASE, /**< Primary Service Discovery. */ + SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, /**< Relationship Discovery. */ + SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, /**< Characteristic Discovery. */ + SD_BLE_GATTC_DESCRIPTORS_DISCOVER, /**< Characteristic Descriptor Discovery. */ + SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, /**< Read Characteristic Value by UUID. */ + SD_BLE_GATTC_READ, /**< Generic read. */ + SD_BLE_GATTC_CHAR_VALUES_READ, /**< Read multiple Characteristic Values. */ + SD_BLE_GATTC_WRITE, /**< Generic write. */ + SD_BLE_GATTC_HV_CONFIRM /**< Handle Value Confirmation. */ +}; + +/** @} */ + +/** @addtogroup BLE_GATTC_DEFINES Defines + * @{ */ + +/** @defgroup BLE_ERRORS_GATTC SVC return values specific to GATTC + * @{ */ +#define BLE_ERROR_GATTC_PROC_NOT_PERMITTED (NRF_GATTC_ERR_BASE + 0x000) +/** @} */ + +/**@brief Last Attribute Handle. */ +#define BLE_GATTC_HANDLE_END 0xFFFF + +/** @} */ + +/** @addtogroup BLE_GATTC_STRUCTURES Structures + * @{ */ + +/**@brief Operation Handle Range. */ +typedef struct +{ + uint16_t start_handle; /**< Start Handle. */ + uint16_t end_handle; /**< End Handle. */ +} ble_gattc_handle_range_t; + + +/**@brief GATT service. */ +typedef struct +{ + ble_uuid_t uuid; /**< Service UUID. */ + ble_gattc_handle_range_t handle_range; /**< Service Handle Range. */ +} ble_gattc_service_t; + + +/**@brief GATT include. */ +typedef struct +{ + uint16_t handle; /**< Include Handle. */ + ble_gattc_service_t included_srvc; /**< Handle of the included service. */ +} ble_gattc_include_t; + + +/**@brief GATT characteristic. */ +typedef struct +{ + ble_uuid_t uuid; /**< Characteristic UUID. */ + ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ + uint8_t char_ext_props : 1; /**< Extended properties present. */ + uint16_t handle_decl; /**< Handle of the Characteristic Declaration. */ + uint16_t handle_value; /**< Handle of the Characteristic Value. */ +} ble_gattc_char_t; + + +/**@brief GATT descriptor. */ +typedef struct +{ + uint16_t handle; /**< Descriptor Handle. */ + ble_uuid_t uuid; /**< Descriptor UUID. */ +} ble_gattc_desc_t; + + +/**@brief Write Parameters. */ +typedef struct +{ + uint8_t write_op; /**< Write Operation to be performed, see @ref BLE_GATT_WRITE_OPS. */ + uint16_t handle; /**< Handle to the attribute to be written. */ + uint16_t offset; /**< Offset in bytes. @note For WRITE_CMD and WRITE_REQ, offset must be 0. */ + uint16_t len; /**< Length of data in bytes. */ + uint8_t* p_value; /**< Pointer to the value data. */ + uint8_t flags; /**< Flags, see @ref BLE_GATT_EXEC_WRITE_FLAGS. */ +} ble_gattc_write_params_t; + + +/** + * @brief GATT Client Event IDs. + */ +enum BLE_GATTC_EVTS +{ + BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP = BLE_GATTC_EVT_BASE, /**< Primary Service Discovery Response event. */ + BLE_GATTC_EVT_REL_DISC_RSP, /**< Relationship Discovery Response event. */ + BLE_GATTC_EVT_CHAR_DISC_RSP, /**< Characteristic Discovery Response event. */ + BLE_GATTC_EVT_DESC_DISC_RSP, /**< Descriptor Discovery Response event. */ + BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP, /**< Read By UUID Response event. */ + BLE_GATTC_EVT_READ_RSP, /**< Read Response event. */ + BLE_GATTC_EVT_CHAR_VALS_READ_RSP, /**< Read multiple Response event. */ + BLE_GATTC_EVT_WRITE_RSP, /**< Write Response event. */ + BLE_GATTC_EVT_HVX, /**< Handle Value Notification or Indication event. */ + BLE_GATTC_EVT_TIMEOUT /**< Timeout event. */ +}; + +/**@brief Event structure for BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Service count. */ + ble_gattc_service_t services[1]; /**< Service data, variable length. */ +} ble_gattc_evt_prim_srvc_disc_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_REL_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Include count. */ + ble_gattc_include_t includes[1]; /**< Include data, variable length. */ +} ble_gattc_evt_rel_disc_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_CHAR_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Characteristic count. */ + ble_gattc_char_t chars[1]; /**< Characteristic data, variable length. */ +} ble_gattc_evt_char_disc_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_DESC_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Descriptor count. */ + ble_gattc_desc_t descs[1]; /**< Descriptor data, variable length. */ +} ble_gattc_evt_desc_disc_rsp_t; + +/**@brief GATT read by UUID handle value pair. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint8_t *p_value; /**< Pointer to value, variable length (length available as value_len in ble_gattc_evt_read_by_uuid_rsp_t). + Please note that this pointer is absolute to the memory provided by the user when retrieving the event, + so it will effectively point to a location inside the handle_value array. */ +} ble_gattc_handle_value_t; + +/**@brief Event structure for BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP. */ +typedef struct +{ + uint16_t count; /**< Handle-Value Pair Count. */ + uint16_t value_len; /**< Length of the value in Handle-Value(s) list. */ + ble_gattc_handle_value_t handle_value[1]; /**< Handle-Value(s) list, variable length. */ +} ble_gattc_evt_char_val_by_uuid_read_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_READ_RSP. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint16_t offset; /**< Offset of the attribute data. */ + uint16_t len; /**< Attribute data length. */ + uint8_t data[1]; /**< Attribute data, variable length. */ +} ble_gattc_evt_read_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_CHAR_VALS_READ_RSP. */ +typedef struct +{ + uint16_t len; /**< Concatenated Attribute values length. */ + uint8_t values[1]; /**< Attribute values, variable length. */ +} ble_gattc_evt_char_vals_read_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_WRITE_RSP. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint8_t write_op; /**< Type of write operation, see @ref BLE_GATT_WRITE_OPS. */ + uint16_t offset; /**< Data Offset. */ + uint16_t len; /**< Data length. */ + uint8_t data[1]; /**< Data, variable length. */ +} ble_gattc_evt_write_rsp_t; + +/**@brief Event structure for BLE_GATTC_EVT_HVX. */ +typedef struct +{ + uint16_t handle; /**< Handle to which the HVx operation applies. */ + uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ + uint16_t len; /**< Attribute data length. */ + uint8_t data[1]; /**< Attribute data, variable length. */ +} ble_gattc_evt_hvx_t; + +/**@brief Event structure for BLE_GATTC_EVT_TIMEOUT. */ +typedef struct +{ + uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ +} ble_gattc_evt_timeout_t; + +/**@brief GATTC event type. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occured. */ + uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ + uint16_t error_handle; /**< In case of error: The handle causing the error. In all other cases BLE_GATT_HANDLE_INVALID. */ + union + { + ble_gattc_evt_prim_srvc_disc_rsp_t prim_srvc_disc_rsp; /**< Primary Service Discovery Response Event Parameters. */ + ble_gattc_evt_rel_disc_rsp_t rel_disc_rsp; /**< Relationship Discovery Response Event Parameters. */ + ble_gattc_evt_char_disc_rsp_t char_disc_rsp; /**< Characteristic Discovery Response Event Parameters. */ + ble_gattc_evt_desc_disc_rsp_t desc_disc_rsp; /**< Descriptor Discovery Response Event Parameters. */ + ble_gattc_evt_char_val_by_uuid_read_rsp_t char_val_by_uuid_read_rsp; /**< Characteristic Value Read by UUID Response Event Parameters. */ + ble_gattc_evt_read_rsp_t read_rsp; /**< Read Response Event Parameters. */ + ble_gattc_evt_char_vals_read_rsp_t char_vals_read_rsp; /**< Characteristic Values Read Response Event Parameters. */ + ble_gattc_evt_write_rsp_t write_rsp; /**< Write Response Event Parameters. */ + ble_gattc_evt_hvx_t hvx; /**< Handle Value Notification/Indication Event Parameters. */ + ble_gattc_evt_timeout_t timeout; /**< Timeout Event Parameters. */ + } params; /**< Event Parameters. @note Only valid if @ref gatt_status == BLE_GATT_STATUS_SUCCESS. */ +} ble_gattc_evt_t; +/** @} */ + +/** @addtogroup BLE_GATTC_FUNCTIONS Functions + * @{ */ + +/**@brief Initiate or continue a GATT Primary Service Discovery procedure. + * + * @details This function initiates a Primary Service discovery, starting from the supplied handle. + * If the last service has not been reached, this must be called again with an updated start handle value to continue the search. + * + * @note If any of the discovered services have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with + * type BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] start_handle Handle to start searching from. + * @param[in] p_srvc_uuid Pointer to the service UUID to be found. If it is NULL, all primary services will be returned. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Primary Service Discovery procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER, uint32_t, sd_ble_gattc_primary_services_discover(uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const * const p_srvc_uuid)); + + +/**@brief Initiate or continue a GATT Relationship Discovery procedure. + * + * @details This function initiates the Find Included Services sub-procedure. If the last included service has not been reached, + * this must be called again with an updated handle range to continue the search. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Relationship Discovery procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, uint32_t, sd_ble_gattc_relationships_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); + + +/**@brief Initiate or continue a GATT Characteristic Discovery procedure. + * + * @details This function initiates a Characteristic discovery procedure. If the last Characteristic has not been reached, + * this must be called again with an updated handle range to continue the discovery. + * + * @note If any of the discovered characteristics have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with + * type BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Characteristic Discovery procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, uint32_t, sd_ble_gattc_characteristics_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); + + +/**@brief Initiate or continue a GATT Characteristic Descriptor Discovery procedure. + * + * @details This function initiates the Characteristic Descriptor discovery procedure. If the last Descriptor has not been reached, + * this must be called again with an updated handle range to continue the discovery. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range A pointer to the range of handles of the Characteristic to perform this procedure on. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Descriptor Discovery procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_DESCRIPTORS_DISCOVER, uint32_t, sd_ble_gattc_descriptors_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); + + +/**@brief Initiate or continue a GATT Read using Characteristic UUID procedure. + * + * @details This function initiates the Read using Characteristic UUID procedure. If the last Characteristic has not been reached, + * this must be called again with an updated handle range to continue the discovery. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_uuid Pointer to a Characteristic value UUID to read. + * @param[in] p_handle_range A pointer to the range of handles to perform this procedure on. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Read using Characteristic UUID procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, uint32_t, sd_ble_gattc_char_value_by_uuid_read(uint16_t conn_handle, ble_uuid_t const * const p_uuid, ble_gattc_handle_range_t const * const p_handle_range)); + + +/**@brief Initiate or continue a GATT Read (Long) Characteristic or Descriptor procedure. + * + * @details This function initiates a GATT Read (Long) Characteristic or Descriptor procedure. If the Characteristic or Descriptor + * to be read is longer than GATT_MTU - 1, this function must be called multiple times with appropriate offset to read the + * complete value. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] handle The handle of the attribute to be read. + * @param[in] offset Offset into the attribute value to be read. + * + * @return @ref NRF_SUCCESS Successfully started or resumed the Read (Long) procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_READ, uint32_t, sd_ble_gattc_read(uint16_t conn_handle, uint16_t handle, uint16_t offset)); + + +/**@brief Initiate a GATT Read Multiple Characteristic Values procedure. + * + * @details This function initiates a GATT Read Multiple Characteristic Values procedure. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. + * @param[in] handle_count The number of handles in p_handles. + * + * @return @ref NRF_SUCCESS Successfully started the Read Multiple Characteristic Values procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_CHAR_VALUES_READ, uint32_t, sd_ble_gattc_char_values_read(uint16_t conn_handle, uint16_t const * const p_handles, uint16_t handle_count)); + + +/**@brief Perform a Write (Characteristic Value or Descriptor, with or without response, signed or not, long or reliable) procedure. + * + * @details This function can perform all write procedures described in GATT. + * + * @note It is important to note that a write without response will <b>consume an application buffer</b>, and will therefore + * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. A write on the other hand will use the + * standard client internal buffer and thus will only generate a @ref BLE_GATTC_EVT_WRITE_RSP event as soon as the write response + * has been received from the peer. Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_write_params A pointer to a write parameters structure. + * + * @return @ref NRF_SUCCESS Successfully started the Write procedure. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + * @return @ref NRF_ERROR_BUSY Procedure already in progress. + * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers left. + */ +SVCALL(SD_BLE_GATTC_WRITE, uint32_t, sd_ble_gattc_write(uint16_t conn_handle, ble_gattc_write_params_t const * const p_write_params)); + + +/**@brief Send a Handle Value Confirmation to the GATT Server. + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] handle The handle of the attribute in the indication. + * + * @return @ref NRF_SUCCESS Successfully queued the Handle Value Confirmation for transmission. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_STATE No Indication pending to be confirmed. + * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle. + * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers left. + */ +SVCALL(SD_BLE_GATTC_HV_CONFIRM, uint32_t, sd_ble_gattc_hv_confirm(uint16_t conn_handle, uint16_t handle)); + +/** @} */ + +#endif /* BLE_GATTC_H__ */ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gatts.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,566 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_GATTS Generic Attribute Profile (GATT) Server + @{ + @brief Definitions and prototypes for the GATTS interface. + */ + +#ifndef BLE_GATTS_H__ +#define BLE_GATTS_H__ + +#include "ble_types.h" +#include "ble_ranges.h" +#include "ble_l2cap.h" +#include "ble_gap.h" +#include "ble_gatt.h" +#include "nrf_svc.h" + +/** @addtogroup BLE_GATTS_ENUMERATIONS Enumerations + * @{ */ + +/** + * @brief GATTS API SVC numbers. + */ +enum BLE_GATTS_SVCS +{ + SD_BLE_GATTS_SERVICE_ADD = BLE_GATTS_SVC_BASE, /**< Add a service. */ + SD_BLE_GATTS_INCLUDE_ADD, /**< Add an included service. */ + SD_BLE_GATTS_CHARACTERISTIC_ADD, /**< Add a characteristic. */ + SD_BLE_GATTS_DESCRIPTOR_ADD, /**< Add a generic attribute. */ + SD_BLE_GATTS_VALUE_SET, /**< Set an attribute value. */ + SD_BLE_GATTS_VALUE_GET, /**< Get an attribute value. */ + SD_BLE_GATTS_HVX, /**< Handle Value Notification or Indication. */ + SD_BLE_GATTS_SERVICE_CHANGED, /**< Perform a Service Changed Indication to one or more peers. */ + SD_BLE_GATTS_RW_AUTHORIZE_REPLY, /**< Reply to an authorization request for a read or write operation on one or more attributes. */ + SD_BLE_GATTS_SYS_ATTR_SET, /**< Set the persistent system attributes for a connection. */ + SD_BLE_GATTS_SYS_ATTR_GET, /**< Get updated persistent system attributes after terminating a connection. */ +}; + +/** @} */ + +/** @addtogroup BLE_GATTS_DEFINES Defines + * @{ */ + +/** @brief Only the default MTU size of 23 is currently supported. */ +#define GATT_RX_MTU 23 + +/** @defgroup BLE_ERRORS_GATTS SVC return values specific to GATTS + * @{ */ +#define BLE_ERROR_GATTS_INVALID_ATTR_TYPE (NRF_GATTS_ERR_BASE + 0x000) /**< Invalid attribute type. */ +#define BLE_ERROR_GATTS_SYS_ATTR_MISSING (NRF_GATTS_ERR_BASE + 0x001) /**< System Attributes missing. */ +/** @} */ + +/** @defgroup BLE_GATTS_ATTR_LENS_MAX Maximum attribute lengths + * @{ */ +#define BLE_GATTS_FIX_ATTR_LEN_MAX (510) /**< Maximum length for fixed length Attribute Values. */ +#define BLE_GATTS_VAR_ATTR_LEN_MAX (512) /**< Maximum length for variable length Attribute Values. */ +/** @} */ + +/** @defgroup BLE_GATTS_SRVC_TYPES GATT Server Service Types + * @{ */ +#define BLE_GATTS_SRVC_TYPE_INVALID 0x00 /**< Invalid Service Type. */ +#define BLE_GATTS_SRVC_TYPE_PRIMARY 0x01 /**< Primary Service. */ +#define BLE_GATTS_SRVC_TYPE_SECONDARY 0x02 /**< Secondary Type. */ +/** @} */ + + +/** @defgroup BLE_GATTS_ATTR_TYPES GATT Server Attribute Types + * @{ */ +#define BLE_GATTS_ATTR_TYPE_INVALID 0x00 /**< Invalid Attribute Type. */ +#define BLE_GATTS_ATTR_TYPE_PRIM_SRVC_DECL 0x01 /**< Primary Service Declaration. */ +#define BLE_GATTS_ATTR_TYPE_SEC_SRVC_DECL 0x02 /**< Secondary Service Declaration. */ +#define BLE_GATTS_ATTR_TYPE_INC_DECL 0x03 /**< Include Declaration. */ +#define BLE_GATTS_ATTR_TYPE_CHAR_DECL 0x04 /**< Characteristic Declaration. */ +#define BLE_GATTS_ATTR_TYPE_CHAR_VAL 0x05 /**< Characteristic Value. */ +#define BLE_GATTS_ATTR_TYPE_DESC 0x06 /**< Descriptor. */ +#define BLE_GATTS_ATTR_TYPE_OTHER 0x07 /**< Other, non-GATT specific type. */ +/** @} */ + + +/** @defgroup BLE_GATTS_OPS GATT Server Operations + * @{ */ +#define BLE_GATTS_OP_INVALID 0x00 /**< Invalid Operation. */ +#define BLE_GATTS_OP_WRITE_REQ 0x01 /**< Write Request. */ +#define BLE_GATTS_OP_WRITE_CMD 0x02 /**< Write Command. */ +#define BLE_GATTS_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ +#define BLE_GATTS_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ +#define BLE_GATTS_OP_EXEC_WRITE_REQ_CANCEL 0x05 /**< Execute Write Request: Cancel all prepared writes. */ +#define BLE_GATTS_OP_EXEC_WRITE_REQ_NOW 0x06 /**< Execute Write Request: Immediately execute all prepared writes. */ +/** @} */ + +/** @defgroup BLE_GATTS_VLOCS GATT Value Locations + * @{ */ +#define BLE_GATTS_VLOC_INVALID 0x00 /**< Invalid Location. */ +#define BLE_GATTS_VLOC_STACK 0x01 /**< Attribute Value is located in stack memory, no user memory is required. */ +#define BLE_GATTS_VLOC_USER 0x02 /**< Attribute Value is located in user memory. This requires the user to maintain a valid buffer through the lifetime of the attribute, since the stack + will read and write directly to the memory using the pointer provided in the APIs. There are no alignment requirements for the buffer. */ +/** @} */ + +/** @defgroup BLE_GATTS_AUTHORIZE_TYPES GATT Server Authorization Types + * @{ */ +#define BLE_GATTS_AUTHORIZE_TYPE_INVALID 0x00 /**< Invalid Type. */ +#define BLE_GATTS_AUTHORIZE_TYPE_READ 0x01 /**< Authorize a Read Operation. */ +#define BLE_GATTS_AUTHORIZE_TYPE_WRITE 0x02 /**< Authorize a Write Request Operation. */ +/** @} */ + + +/** @} */ + +/** @addtogroup BLE_GATTS_STRUCTURES Structures + * @{ */ + +/** + * @brief BLE GATTS init options + */ +typedef struct +{ + uint8_t service_changed:1; /**< Include the Service Changed characteristic in the local attributes. */ +} ble_gatts_enable_params_t; + +/**@brief Attribute metadata. */ +typedef struct +{ + ble_gap_conn_sec_mode_t read_perm; /**< Read permissions. */ + ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ + uint8_t vlen :1; /**< Variable length attribute. */ + uint8_t vloc :2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ + uint8_t rd_auth :1; /**< Read Authorization and value will be requested from the application on every read operation. */ + uint8_t wr_auth :1; /**< Write Authorization will be requested from the application on every Write Request operation (but not Write Command). */ +} ble_gatts_attr_md_t; + + +/**@brief GATT Attribute. */ +typedef struct +{ + ble_uuid_t* p_uuid; /**< Pointer to the attribute UUID. */ + ble_gatts_attr_md_t* p_attr_md; /**< Pointer to the attribute metadata structure. */ + uint16_t init_len; /**< Initial attribute value length in bytes. */ + uint16_t init_offs; /**< Initial attribute value offset in bytes. If different from zero, the first init_offs bytes of the attribute value will be left uninitialized. */ + uint16_t max_len; /**< Maximum attribute value length in bytes, see @ref BLE_GATTS_ATTR_LENS_MAX for maximum values. */ + uint8_t* p_value; /**< Pointer to the attribute data. Please note that if the @ref BLE_GATTS_VLOC_USER value location is selected in the attribute metadata, this will have to point to a buffer + that remains valid through the lifetime of the attribute. This excludes usage of automatic variables that may go out of scope or any other temporary location. + The stack may access that memory directly without the application's knowledge. */ +} ble_gatts_attr_t; + + +/**@brief GATT Attribute Context. */ +typedef struct +{ + ble_uuid_t srvc_uuid; /**< Service UUID. */ + ble_uuid_t char_uuid; /**< Characteristic UUID if applicable (BLE_UUID_TYPE_UNKNOWN if N/A). */ + ble_uuid_t desc_uuid; /**< Descriptor UUID if applicable (BLE_UUID_TYPE_UNKNOWN if N/A). */ + uint16_t srvc_handle; /**< Service Handle. */ + uint16_t value_handle; /**< Characteristic Handle if applicable (BLE_GATT_HANDLE_INVALID if N/A). */ + uint8_t type; /**< Attribute Type, see @ref BLE_GATTS_ATTR_TYPES. */ +} ble_gatts_attr_context_t; + + +/**@brief GATT Characteristic Presentation Format. */ +typedef struct +{ + uint8_t format; /**< Format of the value, see @ref BLE_GATT_CPF_FORMATS. */ + int8_t exponent; /**< Exponent for integer data types. */ + uint16_t unit; /**< UUID from Bluetooth Assigned Numbers. */ + uint8_t name_space; /**< Namespace from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ + uint16_t desc; /**< Namespace description from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ +} ble_gatts_char_pf_t; + + +/**@brief GATT Characteristic metadata. */ +typedef struct +{ + ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ + ble_gatt_char_ext_props_t char_ext_props; /**< Characteristic Extended Properties. */ + uint8_t* p_char_user_desc; /**< Pointer to a UTF-8, NULL if the descriptor is not required. */ + uint16_t char_user_desc_max_size; /**< The maximum size in bytes of the user description descriptor. */ + uint16_t char_user_desc_size; /**< The size of the user description, must be smaller or equal to char_user_desc_max_size. */ + ble_gatts_char_pf_t* p_char_pf; /**< Pointer to a presentation format structure or NULL if the descriptor is not required. */ + ble_gatts_attr_md_t* p_user_desc_md; /**< Attribute metadata for the User Description descriptor, or NULL for default values. */ + ble_gatts_attr_md_t* p_cccd_md; /**< Attribute metadata for the Client Characteristic Configuration Descriptor, or NULL for default values. */ + ble_gatts_attr_md_t* p_sccd_md; /**< Attribute metadata for the Server Characteristic Configuration Descriptor, or NULL for default values. */ +} ble_gatts_char_md_t; + + +/**@brief GATT Characteristic Definition Handles. */ +typedef struct +{ + uint16_t value_handle; /**< Handle to the characteristic value. */ + uint16_t user_desc_handle; /**< Handle to the User Description descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ + uint16_t cccd_handle; /**< Handle to the Client Characteristic Configuration Descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ + uint16_t sccd_handle; /**< Handle to the Server Characteristic Configuration Descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ +} ble_gatts_char_handles_t; + + +/**@brief GATT HVx parameters. */ +typedef struct +{ + uint16_t handle; /**< Characteristic Value Handle. */ + uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ + uint16_t offset; /**< Offset within the attribute value. */ + uint16_t* p_len; /**< Length in bytes to be written, length in bytes written after successful return. */ + uint8_t* p_data; /**< Actual data content, use NULL to use the current attribute value. */ +} ble_gatts_hvx_params_t; + +/**@brief GATT Read Authorization parameters. */ +typedef struct +{ + uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ + uint8_t update : 1; /**< If set, data supplied in p_data will be used in the ATT response. */ + uint16_t offset; /**< Offset of the attribute value being updated. */ + uint16_t len; /**< Length in bytes of the value in p_data pointer, see @ref BLE_GATTS_ATTR_LENS_MAX. */ + uint8_t* p_data; /**< Pointer to new value used to update the attribute value. */ +} ble_gatts_read_authorize_params_t; + +/**@brief GATT Write Authorisation parameters. */ +typedef struct +{ + uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ +} ble_gatts_write_authorize_params_t; + +/**@brief GATT Read or Write Authorize Reply parameters. */ +typedef struct +{ + uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ + union { + ble_gatts_read_authorize_params_t read; /**< Read authorization parameters. */ + ble_gatts_write_authorize_params_t write; /**< Write authorization parameters. */ + } params; +} ble_gatts_rw_authorize_reply_params_t; + + +/** + * @brief GATT Server Event IDs. + */ +enum BLE_GATTS_EVTS +{ + BLE_GATTS_EVT_WRITE = BLE_GATTS_EVT_BASE, /**< Write operation performed. */ + BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST, /**< Read/Write Authorization request. */ + BLE_GATTS_EVT_SYS_ATTR_MISSING, /**< A persistent system attribute access is pending, awaiting a sd_ble_gatts_sys_attr_set(). */ + BLE_GATTS_EVT_HVC, /**< Handle Value Confirmation. */ + BLE_GATTS_EVT_SC_CONFIRM, /**< Service Changed Confirmation. */ + BLE_GATTS_EVT_TIMEOUT /**< Timeout. */ +}; + + +/**@brief Event structure for BLE_GATTS_EVT_WRITE. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint8_t op; /**< Type of write operation, see @ref BLE_GATTS_OPS. */ + ble_gatts_attr_context_t context; /**< Attribute Context. */ + uint16_t offset; /**< Offset for the write operation. */ + uint16_t len; /**< Length of the incoming data. */ + uint8_t data[1]; /**< Incoming data, variable length. */ +} ble_gatts_evt_write_t; + +/**@brief Event structure for authorize read request. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + ble_gatts_attr_context_t context; /**< Attribute Context. */ + uint16_t offset; /**< Offset for the read operation. */ +} ble_gatts_evt_read_t; + +/**@brief Event structure for BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST. */ +typedef struct +{ + uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ + union { + ble_gatts_evt_read_t read; /**< Attribute Read Parameters. */ + ble_gatts_evt_write_t write; /**< Attribute Write Parameters. */ + } request; +} ble_gatts_evt_rw_authorize_request_t; + +/**@brief Event structure for BLE_GATTS_EVT_SYS_ATTR_MISSING. */ +typedef struct +{ + uint8_t hint; +} ble_gatts_evt_sys_attr_missing_t; + + +/**@brief Event structure for BLE_GATTS_EVT_HVC. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ +} ble_gatts_evt_hvc_t; + +/**@brief Event structure for BLE_GATTS_EVT_TIMEOUT. */ +typedef struct +{ + uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ +} ble_gatts_evt_timeout_t; + + +/**@brief GATT Server event callback event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occurred. */ + union + { + ble_gatts_evt_write_t write; /**< Write Event Parameters. */ + ble_gatts_evt_rw_authorize_request_t authorize_request; /**< Read or Write Authorize Request Parameters. */ + ble_gatts_evt_sys_attr_missing_t sys_attr_missing; /**< System attributes missing. */ + ble_gatts_evt_hvc_t hvc; /**< Handle Value Confirmation Event Parameters. */ + ble_gatts_evt_timeout_t timeout; /**< Timeout Event. */ + } params; +} ble_gatts_evt_t; + +/** @} */ + +/** @addtogroup BLE_GATTS_FUNCTIONS Functions + * @{ */ + +/**@brief Add a service declaration to the local server ATT table. + * + * @param[in] type Toggles between primary and secondary services, see @ref BLE_GATTS_SRVC_TYPES. + * @param[in] p_uuid Pointer to service UUID. + * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. + * + * @note Secondary Services are only relevant in the context of the entity that references them, it is therefore forbidden to + * add a secondary service declaration that is not referenced by another service later in the ATT table. + * + * @return @ref NRF_SUCCESS Successfully added a service declaration. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, Vendor Specific UUIDs need to be present in the table. + * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_GATTS_SERVICE_ADD, uint32_t, sd_ble_gatts_service_add(uint8_t type, ble_uuid_t const*const p_uuid, uint16_t *const p_handle)); + + +/**@brief Add an include declaration to the local server ATT table. + * + * @note It is currently only possible to add an include declaration to the last added service (i.e. only sequential addition is supported at this time). + * + * @note The included service must already be present in the ATT table prior to this call. + * + * @param[in] service_handle Handle of the service where the included service is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. + * @param[in] inc_srvc_handle Handle of the included service. + * @param[out] p_include_handle Pointer to a 16-bit word where the assigned handle will be stored. + * + * @return @ref NRF_SUCCESS Successfully added an include declaration. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, handle values need to match previously added services. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, self inclusions are not allowed. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. + */ +SVCALL(SD_BLE_GATTS_INCLUDE_ADD, uint32_t, sd_ble_gatts_include_add(uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *const p_include_handle)); + + +/**@brief Add a characteristic declaration, a characteristic value declaration and optional characteristic descriptor declarations to the local server ATT table. + * + * @note It is currently only possible to add a characteristic to the last added service (i.e. only sequential addition is supported at this time). + * + * @note Several restrictions apply to the parameters, such as matching permissions between the user description descriptor and the writeable auxiliaries bits, + * readable (no security) and writeable (selectable) CCCDs and SCCDs and valid presentation format values. + * + * @note If no metadata is provided for the optional descriptors, their permissions will be derived from the characteristic permissions. + * + * @param[in] service_handle Handle of the service where the characteristic is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. + * @param[in] p_char_md Characteristic metadata. + * @param[in] p_attr_char_value Pointer to the attribute structure corresponding to the characteristic value. + * @param[out] p_handles Pointer to the structure where the assigned handles will be stored. + * + * @return @ref NRF_SUCCESS Successfully added a characteristic. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, service handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required. + * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. + */ +SVCALL(SD_BLE_GATTS_CHARACTERISTIC_ADD, uint32_t, sd_ble_gatts_characteristic_add(uint16_t service_handle, ble_gatts_char_md_t const*const p_char_md, ble_gatts_attr_t const*const p_attr_char_value, ble_gatts_char_handles_t *const p_handles)); + + +/**@brief Add a descriptor to the local server ATT table. + * + * @note It is currently only possible to add a descriptor to the last added characteristic (i.e. only sequential addition is supported at this time). + * + * @param[in] char_handle Handle of the characteristic where the descriptor is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. + * @param[in] p_attr Pointer to the attribute structure. + * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. + * + * @return @ref NRF_SUCCESS Successfully added a descriptor. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, characteristic handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, a characteristic context is required. + * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. + */ +SVCALL(SD_BLE_GATTS_DESCRIPTOR_ADD, uint32_t, sd_ble_gatts_descriptor_add(uint16_t char_handle, ble_gatts_attr_t const * const p_attr, uint16_t* const p_handle)); + +/**@brief Set the value of a given attribute. + * + * @param[in] handle Attribute handle. + * @param[in] offset Offset in bytes to write from. + * @param[in,out] p_len Length in bytes to be written, length in bytes written after successful return. + * @param[in] p_value Pointer to a buffer (at least len bytes long) containing the desired attribute value. If value is stored in user memory, only the attribute length is updated when p_value == NULL. + * + * @return @ref NRF_SUCCESS Successfully set the value of the attribute. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. + * @return @ref NRF_ERROR_FORBIDDEN Forbidden handle supplied, certain attributes are not modifiable by the application. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. + */ +SVCALL(SD_BLE_GATTS_VALUE_SET, uint32_t, sd_ble_gatts_value_set(uint16_t handle, uint16_t offset, uint16_t* const p_len, uint8_t const * const p_value)); + +/**@brief Get the value of a given attribute. + * + * @param[in] handle Attribute handle. + * @param[in] offset Offset in bytes to read from. + * @param[in,out] p_len Length in bytes to be read, total length of attribute value (in bytes, starting from offset) after successful return. + * @param[in,out] p_data Pointer to a buffer (at least len bytes long) where to store the attribute value. Set to NULL to obtain the complete length of attribute value. + * + * @note If the attribute value is longer than the size of the supplied buffer, + * p_len will return the total attribute value length (excluding offset), + * and not the number of bytes actually returned in p_data. + * The application may use this information to allocate a suitable buffer size. + * + * @return @ref NRF_SUCCESS Successfully retrieved the value of the attribute. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. + */ +SVCALL(SD_BLE_GATTS_VALUE_GET, uint32_t, sd_ble_gatts_value_get(uint16_t handle, uint16_t offset, uint16_t *const p_len, uint8_t* const p_data)); + +/**@brief Notify or Indicate an attribute value. + * + * @details This function checks for the relevant Client Characteristic Configuration descriptor value to verify that the relevant operation + * (notification or indication) has been enabled by the client. It is also able to update the attribute value before issuing the PDU, so that + * the application can atomically perform a value update and a server initiated transaction with a single API call. + * If the application chooses to indicate an attribute value, a @ref BLE_GATTS_EVT_HVC will be sent up as soon as the confirmation arrives from + * the peer. + * + * @note The local attribute value may be updated even if an outgoing packet is not sent to the peer due to an error during execution. + * When receiveing the error codes @ref NRF_ERROR_INVALID_STATE, @ref NRF_ERROR_BUSY, @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING and + * @ref BLE_ERROR_NO_TX_BUFFERS the ATT table has been updated. + * The caller can check whether the value has been updated by looking at the contents of *(p_hvx_params->p_len). + * + * @note It is important to note that a notification will <b>consume an application buffer</b>, and will therefore + * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. An indication on the other hand will use the + * standard server internal buffer and thus will only generate a @ref BLE_GATTS_EVT_HVC event as soon as the confirmation + * has been received from the peer. Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_hvx_params Pointer to an HVx parameters structure. If the p_data member contains a non-NULL pointer the attribute value will be updated with + * the contents pointed by it before sending the notification or indication. + * + * @return @ref NRF_SUCCESS Successfully queued a notification or indication for transmission, and optionally updated the attribute value. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied. Only attributes added directly by the application are available to notify and indicate. + * @return @ref BLE_ERROR_GATTS_INVALID_ATTR_TYPE Invalid attribute type(s) supplied, only characteristic values may be notified and indicated. + * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, notifications or indications must be enabled in the CCCD. + * @return @ref NRF_ERROR_BUSY Procedure already in progress. + * @return @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. + * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers to send the data, applies only to notifications. + */ +SVCALL(SD_BLE_GATTS_HVX, uint32_t, sd_ble_gatts_hvx(uint16_t conn_handle, ble_gatts_hvx_params_t const*const p_hvx_params)); + +/**@brief Indicate the Service Changed attribute value. + * + * @details This call will send a Handle Value Indication to one or more peers connected to inform them that the attribute + * table layout has changed. As soon as the peer has confirmed the indication, a @ref BLE_GATTS_EVT_SC_CONFIRM event will + * be issued. + * + * @note Some of the restrictions and limitations that apply to @ref sd_ble_gatts_hvx also apply here. + * + * @param[in] conn_handle Connection handle. + * @param[in] start_handle Start of affected attribute handle range. + * @param[in] end_handle End of affected attribute handle range. + * + * @return @ref NRF_SUCCESS Successfully queued the Service Changed indication for transmission. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied, handles must be in the range populated by the application. + * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, notifications or indications must be enabled in the CCCD. + * @return @ref NRF_ERROR_BUSY Procedure already in progress. + * @return @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. + */ +SVCALL(SD_BLE_GATTS_SERVICE_CHANGED, uint32_t, sd_ble_gatts_service_changed(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle)); + +/**@brief Respond to a Read/Write authorization request. + * + * @note This call should only be used as a response to a @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST event issued to the application. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_rw_authorize_reply_params Pointer to a structure with the attribute provided by the application. + * + * @return @ref NRF_SUCCESS Successfully queued a response to the peer, and in the case of a write operation, ATT table updated. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_STATE No authorization request pending. + * @return @ref NRF_ERROR_INVALID_PARAM Authorization op invalid, + * or for Read Authorization reply: requested handles not replied with, + * or for Write Authorization reply: handle supplied does not match requested handle. + */ +SVCALL(SD_BLE_GATTS_RW_AUTHORIZE_REPLY, uint32_t, sd_ble_gatts_rw_authorize_reply(uint16_t conn_handle, ble_gatts_rw_authorize_reply_params_t const*const p_rw_authorize_reply_params)); + + +/**@brief Update persistent system attribute information. + * + * @details Supply to the stack information about persistent system attributes. + * This call is legal in the connected state only, and is usually + * made immediately after a connection is established and the bond identified. + * usually as a response to a BLE_GATTS_EVT_SYS_ATTR_MISSING. + * + * p_sysattrs may point directly to the application's stored copy of the struct. + * If the pointer is NULL, the system attribute info is initialized, assuming that + * the application does not have any previously saved data for this bond. + * + * @note The state of persistent system attributes is reset upon connection and then remembered for its duration. + * + * @note If this call returns with an error code different from @ref NRF_SUCCESS, the storage of persistent system attributes may have been completed only partially. + * This means that the state of the attribute table is undefined, and the application should either provide a new set of attributes using this same call or + * reset the SoftDevice to return to a known state. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_sys_attr_data Pointer to a saved copy of system attributes supplied to the stack, or NULL. + * @param[in] len Size of data pointed by p_sys_attr_data, in octets. + * + * @return @ref NRF_SUCCESS Successfully set the system attribute information. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_DATA Invalid data supplied, the data should be exactly the same as retrieved with @ref sd_ble_gatts_sys_attr_get. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_GATTS_SYS_ATTR_SET, uint32_t, sd_ble_gatts_sys_attr_set(uint16_t conn_handle, uint8_t const*const p_sys_attr_data, uint16_t len)); + + +/**@brief Retrieve persistent system attribute information from the stack. + * + * @details This call is used to retrieve information about values to be stored perisistently by the application + * after a connection has been terminated. When a new connection is made to the same bond, the values + * should be restored using @ref sd_ble_gatts_sys_attr_set. + * The data should be read before any new advertising is started, or any new connection established. The connection handle for + * the previous now defunct connection will remain valid until a new one is created to allow this API call to refer to it. + * + * @param[in] conn_handle Connection handle of the recently terminated connection. + * @param[in] p_sys_attr_data Pointer to a buffer where updated information about system attributes will be filled in. NULL can be provided to + * obtain the length of the data + * @param[in,out] p_len Size of application buffer if p_sys_attr_data is not NULL. Unconditially updated to actual length of system attribute data. + * + * @return @ref NRF_SUCCESS Successfully retrieved the system attribute information. + * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_DATA_SIZE The system attribute information did not fit into the provided buffer. + */ +SVCALL(SD_BLE_GATTS_SYS_ATTR_GET, uint32_t, sd_ble_gatts_sys_attr_get(uint16_t conn_handle, uint8_t * const p_sys_attr_data, uint16_t* const p_len)); + +/** @} */ + +#endif // BLE_GATTS_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_hci.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,96 @@ +/* + Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + + The information contained herein is confidential property of Nordic Semiconductor. The use, + copying, transfer or disclosure of such information is prohibited except by express written + agreement with Nordic Semiconductor. + */ +/** + @addtogroup BLE_COMMON + @{ +*/ + + +#ifndef BLE_HCI_H__ +#define BLE_HCI_H__ + +/** @defgroup BLE_HCI_STATUS_CODES Bluetooth status codes + * @{ */ + +#define BLE_HCI_STATUS_CODE_SUCCESS 0x00 +#define BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND 0x01 +#define BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER 0x02 +/*0x03 Hardware Failure +0x04 Page Timeout +*/ +#define BLE_HCI_AUTHENTICATION_FAILURE 0x05 +#define BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING 0x06 +#define BLE_HCI_MEMORY_CAPACITY_EXCEEDED 0x07 +#define BLE_HCI_CONNECTION_TIMEOUT 0x08 +/*0x09 Connection Limit Exceeded +0x0A Synchronous Connection Limit To A Device Exceeded +0x0B ACL Connection Already Exists*/ +#define BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED 0x0C +/*0x0D Connection Rejected due to Limited Resources +0x0E Connection Rejected Due To Security Reasons +0x0F Connection Rejected due to Unacceptable BD_ADDR +0x10 Connection Accept Timeout Exceeded +0x11 Unsupported Feature or Parameter Value*/ +#define BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS 0x12 +#define BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION 0x13 +#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES 0x14 +#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF 0x15 +#define BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION 0x16 +/* +0x17 Repeated Attempts +0x18 Pairing Not Allowed +0x19 Unknown LMP PDU +*/ +#define BLE_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1A +/* +0x1B SCO Offset Rejected +0x1C SCO Interval Rejected +0x1D SCO Air Mode Rejected*/ +#define BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS 0x1E +#define BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR 0x1F +/*0x20 Unsupported LMP Parameter Value +0x21 Role Change Not Allowed +*/ +#define BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT 0x22 +/*0x23 LMP Error Transaction Collision*/ +#define BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED 0x24 +/*0x25 Encryption Mode Not Acceptable +0x26 Link Key Can Not be Changed +0x27 Requested QoS Not Supported +*/ +#define BLE_HCI_INSTANT_PASSED 0x28 +#define BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED 0x29 +#define BLE_HCI_DIFFERENT_TRANSACTION_COLLISION 0x2A +/* +0x2B Reserved +0x2C QoS Unacceptable Parameter +0x2D QoS Rejected +0x2E Channel Classification Not Supported +0x2F Insufficient Security +0x30 Parameter Out Of Mandatory Range +0x31 Reserved +0x32 Role Switch Pending +0x33 Reserved +0x34 Reserved Slot Violation +0x35 Role Switch Failed +0x36 Extended Inquiry Response Too Large +0x37 Secure Simple Pairing Not Supported By Host. +0x38 Host Busy - Pairing +0x39 Connection Rejected due to No Suitable Channel Found*/ +#define BLE_HCI_CONTROLLER_BUSY 0x3A +#define BLE_HCI_CONN_INTERVAL_UNACCEPTABLE 0x3B +#define BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT 0x3C +#define BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE 0x3D +#define BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED 0x3E + +/** @} */ + + +#endif // BLE_HCI_H__ + +/** @} */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_l2cap.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,144 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_L2CAP Logical Link Control and Adaptation Protocol (L2CAP) + @{ + @brief Definitions and prototypes for the L2CAP interface. + */ + +#ifndef BLE_L2CAP_H__ +#define BLE_L2CAP_H__ + +#include "ble_types.h" +#include "ble_ranges.h" +#include "ble_err.h" +#include "nrf_svc.h" + +/**@addtogroup BLE_L2CAP_ENUMERATIONS Enumerations + * @{ */ + +/**@brief L2CAP API SVC numbers. */ +enum BLE_L2CAP_SVCS +{ + SD_BLE_L2CAP_CID_REGISTER = BLE_L2CAP_SVC_BASE, /**< Register a CID. */ + SD_BLE_L2CAP_CID_UNREGISTER, /**< Unregister a CID. */ + SD_BLE_L2CAP_TX /**< Transmit a packet. */ +}; + +/** @} */ + +/**@addtogroup BLE_L2CAP_DEFINES Defines + * @{ */ + +/**@defgroup BLE_ERRORS_L2CAP SVC return values specific to L2CAP + * @{ */ +#define BLE_ERROR_L2CAP_CID_IN_USE (NRF_L2CAP_ERR_BASE + 0x000) /**< CID already in use. */ +/** @} */ + +/**@brief Default L2CAP MTU. */ +#define BLE_L2CAP_MTU_DEF (23) + +/**@brief Invalid Channel Identifier. */ +#define BLE_L2CAP_CID_INVALID (0x0000) + +/**@brief Dynamic Channel Identifier base. */ +#define BLE_L2CAP_CID_DYN_BASE (0x0040) + +/**@brief Maximum amount of dynamic CIDs. */ +#define BLE_L2CAP_CID_DYN_MAX (8) + +/** @} */ + +/**@addtogroup BLE_L2CAP_STRUCTURES Structures + * @{ */ + +/**@brief Packet header format for L2CAP transmission. */ +typedef struct +{ + uint16_t len; /**< Length of valid info in data member. */ + uint16_t cid; /**< Channel ID on which packet is transmitted. */ +} ble_l2cap_header_t; + +/**@brief L2CAP Event IDs. */ +enum BLE_L2CAP_EVTS +{ + BLE_L2CAP_EVT_RX = BLE_L2CAP_EVT_BASE /**< L2CAP packet received. */ +}; + + +/**@brief L2CAP Received packet event report. */ +typedef struct +{ + ble_l2cap_header_t header; /** L2CAP packet header. */ + uint8_t data[1]; /**< Packet data, variable length. */ +} ble_l2cap_evt_rx_t; + + +/**@brief L2CAP event callback event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occured. */ + union + { + ble_l2cap_evt_rx_t rx; /**< RX Event parameters. */ + } params; +} ble_l2cap_evt_t; + + +/**@brief Register a CID with L2CAP. + * + * @details This registers a higher protocol layer with the L2CAP multiplexer, and is requried prior to all operations on the CID. + * + * @param[in] cid L2CAP CID. + * + * @return @ref NRF_SUCCESS Successfully registered a CID with the L2CAP layer. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, CID must be above @ref BLE_L2CAP_CID_DYN_BASE. + * @return @ref BLE_ERROR_L2CAP_CID_IN_USE L2CAP CID already in use. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_L2CAP_CID_REGISTER, uint32_t, sd_ble_l2cap_cid_register(uint16_t cid)); + +/**@brief Unregister a CID with L2CAP. + * + * @details This unregisters a previously registerd higher protocol layer with the L2CAP multiplexer. + * + * @param[in] cid L2CAP CID. + * + * @return @ref NRF_SUCCESS Successfully unregistered the CID. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @return @ref NRF_ERROR_NOT_FOUND CID not previously registered. + */ +SVCALL(SD_BLE_L2CAP_CID_UNREGISTER, uint32_t, sd_ble_l2cap_cid_unregister(uint16_t cid)); + +/**@brief Transmit an L2CAP packet. + * + * @note It is important to note that a call to this function will <b>consume an application buffer</b>, and will therefore + * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. + * Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. + * + * @param[in] conn_handle Connection Handle. + * @param[in] p_header Pointer to a packet header containing length and CID. + * @param[in] p_data Pointer to the data to be transmitted. + * + * @return @ref NRF_SUCCESS Successfully queued an L2CAP packet for transmission. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, CIDs must be registered beforehand with @ref sd_ble_l2cap_cid_register. + * @return @ref NRF_ERROR_NOT_FOUND CID not found. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @return @ref BLE_ERROR_NO_TX_BUFFERS Not enough application buffers available. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, see @ref BLE_L2CAP_MTU_DEF. + */ +SVCALL(SD_BLE_L2CAP_TX, uint32_t, sd_ble_l2cap_tx(uint16_t conn_handle, ble_l2cap_header_t const * const p_header, uint8_t const * const p_data)); + +/** @} */ + +#endif // BLE_L2CAP_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_ranges.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,89 @@ +/* + Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + + The information contained herein is confidential property of Nordic Semiconductor. The use, + copying, transfer or disclosure of such information is prohibited except by express written + agreement with Nordic Semiconductor. + */ +/** + @addtogroup BLE_COMMON + @{ + @defgroup ble_ranges Module specific SVC and event number subranges + @{ + + @brief Definition of SVC and event number subranges for each API module. + + @note + SVCs and event numbers are split into subranges for each API module. + Each module receives its entire allocated range of SVC calls, whether implemented or not, + but return BLE_ERROR_NOT_SUPPORTED for unimplemented or undefined calls in its range. + + Note that the symbols BLE_<module>_SVC_LAST is the end of the allocated SVC range, + rather than the last SVC function call actually defined and implemented. + + Specific SVC and event values are defined in each module's ble_<module>.h file, + which defines names of each individual SVC code based on the range start value. +*/ + +#ifndef BLE_RANGES_H__ +#define BLE_RANGES_H__ + +#define BLE_SVC_BASE 0x60 +#define BLE_SVC_LAST 0x6B /* Total: 12. */ + +#define BLE_RESERVED_SVC_BASE 0x6C +#define BLE_RESERVED_SVC_LAST 0x6F /* Total: 4. */ + +#define BLE_GAP_SVC_BASE 0x70 +#define BLE_GAP_SVC_LAST 0x8F /* Total: 32. */ + +#define BLE_GATTC_SVC_BASE 0x90 +#define BLE_GATTC_SVC_LAST 0x9F /* Total: 16. */ + +#define BLE_GATTS_SVC_BASE 0xA0 +#define BLE_GATTS_SVC_LAST 0xAF /* Total: 16. */ + +#define BLE_L2CAP_SVC_BASE 0xB0 +#define BLE_L2CAP_SVC_LAST 0xBF /* Total: 16. */ + + +#define BLE_EVT_INVALID 0x00 + +#define BLE_EVT_BASE 0x01 +#define BLE_EVT_LAST 0x0F /* Total: 15. */ + +#define BLE_GAP_EVT_BASE 0x10 +#define BLE_GAP_EVT_LAST 0x2F /* Total: 32. */ + +#define BLE_GATTC_EVT_BASE 0x30 +#define BLE_GATTC_EVT_LAST 0x4F /* Total: 32. */ + +#define BLE_GATTS_EVT_BASE 0x50 +#define BLE_GATTS_EVT_LAST 0x6F /* Total: 32. */ + +#define BLE_L2CAP_EVT_BASE 0x70 +#define BLE_L2CAP_EVT_LAST 0x8F /* Total: 32. */ + +#define BLE_OPT_INVALID 0x00 /**< Invalid BLE Option. */ + +#define BLE_OPT_BASE 0x01 /**< Common BLE Option base. */ +#define BLE_OPT_LAST 0x1F /**< Total: 31. */ + +#define BLE_GAP_OPT_BASE 0x20 /**< GAP BLE Option base. */ +#define BLE_GAP_OPT_LAST 0x3F /**< Total: 32. */ + +#define BLE_GATTC_OPT_BASE 0x40 /**< GATTC BLE Option base. */ +#define BLE_GATTC_OPT_LAST 0x5F /**< Total: 32. */ + +#define BLE_GATTS_OPT_BASE 0x60 /**< GATTS BLE Option base. */ +#define BLE_GATTS_OPT_LAST 0x7F /**< Total: 32. */ + +#define BLE_L2CAP_OPT_BASE 0x80 /**< L2CAP BLE Option base. */ +#define BLE_L2CAP_OPT_LAST 0x9F /**< Total: 32. */ + +#endif /* BLE_RANGES_H__ */ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_types.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,169 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @addtogroup BLE_COMMON + @{ + @defgroup ble_types Common types and macro definitions + @{ + + @brief Common types and macro definitions for the S110 SoftDevice. + */ + +#ifndef BLE_TYPES_H__ +#define BLE_TYPES_H__ + +#include <stdint.h> + +/** @addtogroup BLE_COMMON_DEFINES Defines + * @{ */ + +/** @defgroup BLE_CONN_HANDLES BLE Connection Handles + * @{ */ +#define BLE_CONN_HANDLE_INVALID 0xFFFF /**< Invalid Connection Handle. */ +#define BLE_CONN_HANDLE_ALL 0xFFFE /**< Applies to all Connection Handles. */ +/** @} */ + + +/** @defgroup BLE_UUID_VALUES Assigned Values for BLE UUIDs + * @{ */ +/* Generic UUIDs, applicable to all services */ +#define BLE_UUID_UNKNOWN 0x0000 /**< Reserved UUID. */ +#define BLE_UUID_SERVICE_PRIMARY 0x2800 /**< Primary Service. */ +#define BLE_UUID_SERVICE_SECONDARY 0x2801 /**< Secondary Service. */ +#define BLE_UUID_SERVICE_INCLUDE 0x2802 /**< Include. */ +#define BLE_UUID_CHARACTERISTIC 0x2803 /**< Characteristic. */ +#define BLE_UUID_DESCRIPTOR_CHAR_EXT_PROP 0x2900 /**< Characteristic Extended Properties Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CHAR_USER_DESC 0x2901 /**< Characteristic User Description Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG 0x2902 /**< Client Characteristic Configuration Descriptor. */ +#define BLE_UUID_DESCRIPTOR_SERVER_CHAR_CONFIG 0x2903 /**< Server Characteristic Configuration Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT 0x2904 /**< Characteristic Presentation Format Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CHAR_AGGREGATE_FORMAT 0x2905 /**< Characteristic Aggregate Format Descriptor. */ +/* GATT specific UUIDs */ +#define BLE_UUID_GATT 0x1801 /**< Generic Attribute Profile. */ +#define BLE_UUID_GATT_CHARACTERISTIC_SERVICE_CHANGED 0x2A05 /**< Service Changed Characteristic. */ +/* GAP specific UUIDs */ +#define BLE_UUID_GAP 0x1800 /**< Generic Access Profile. */ +#define BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME 0x2A00 /**< Device Name Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE 0x2A01 /**< Appearance Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_PPF 0x2A02 /**< Peripheral Privacy Flag Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_RECONN_ADDR 0x2A03 /**< Reconnection Address Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_PPCP 0x2A04 /**< Peripheral Preferred Connection Parameters Characteristic. */ +/** @} */ + + +/** @defgroup BLE_UUID_TYPES Types of UUID + * @{ */ +#define BLE_UUID_TYPE_UNKNOWN 0x00 /**< Invalid UUID type. */ +#define BLE_UUID_TYPE_BLE 0x01 /**< Bluetooth SIG UUID (16-bit). */ +#define BLE_UUID_TYPE_VENDOR_BEGIN 0x02 /**< Vendor UUID types start at this index (128-bit). */ +/** @} */ + + +/** @defgroup BLE_APPEARANCES Bluetooth Appearance values + * @note Retrieved from http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml + * @{ */ +#define BLE_APPEARANCE_UNKNOWN 0 /**< Unknown. */ +#define BLE_APPEARANCE_GENERIC_PHONE 64 /**< Generic Phone. */ +#define BLE_APPEARANCE_GENERIC_COMPUTER 128 /**< Generic Computer. */ +#define BLE_APPEARANCE_GENERIC_WATCH 192 /**< Generic Watch. */ +#define BLE_APPEARANCE_WATCH_SPORTS_WATCH 193 /**< Watch: Sports Watch. */ +#define BLE_APPEARANCE_GENERIC_CLOCK 256 /**< Generic Clock. */ +#define BLE_APPEARANCE_GENERIC_DISPLAY 320 /**< Generic Display. */ +#define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL 384 /**< Generic Remote Control. */ +#define BLE_APPEARANCE_GENERIC_EYE_GLASSES 448 /**< Generic Eye-glasses. */ +#define BLE_APPEARANCE_GENERIC_TAG 512 /**< Generic Tag. */ +#define BLE_APPEARANCE_GENERIC_KEYRING 576 /**< Generic Keyring. */ +#define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 640 /**< Generic Media Player. */ +#define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 704 /**< Generic Barcode Scanner. */ +#define BLE_APPEARANCE_GENERIC_THERMOMETER 768 /**< Generic Thermometer. */ +#define BLE_APPEARANCE_THERMOMETER_EAR 769 /**< Thermometer: Ear. */ +#define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR 832 /**< Generic Heart rate Sensor. */ +#define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT 833 /**< Heart Rate Sensor: Heart Rate Belt. */ +#define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 896 /**< Generic Blood Pressure. */ +#define BLE_APPEARANCE_BLOOD_PRESSURE_ARM 897 /**< Blood Pressure: Arm. */ +#define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 898 /**< Blood Pressure: Wrist. */ +#define BLE_APPEARANCE_GENERIC_HID 960 /**< Human Interface Device (HID). */ +#define BLE_APPEARANCE_HID_KEYBOARD 961 /**< Keyboard (HID Subtype). */ +#define BLE_APPEARANCE_HID_MOUSE 962 /**< Mouse (HID Subtype). */ +#define BLE_APPEARANCE_HID_JOYSTICK 963 /**< Joystiq (HID Subtype). */ +#define BLE_APPEARANCE_HID_GAMEPAD 964 /**< Gamepad (HID Subtype). */ +#define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE 965 /**< Digitizer Tablet (HID Subtype). */ +#define BLE_APPEARANCE_HID_CARD_READER 966 /**< Card Reader (HID Subtype). */ +#define BLE_APPEARANCE_HID_DIGITAL_PEN 967 /**< Digital Pen (HID Subtype). */ +#define BLE_APPEARANCE_HID_BARCODE 968 /**< Barcode Scanner (HID Subtype). */ +#define BLE_APPEARANCE_GENERIC_GLUCOSE_METER 1024 /**< Generic Glucose Meter. */ +#define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR 1088 /**< Generic Running Walking Sensor. */ +#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE 1089 /**< Running Walking Sensor: In-Shoe. */ +#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE 1090 /**< Running Walking Sensor: On-Shoe. */ +#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP 1091 /**< Running Walking Sensor: On-Hip. */ +#define BLE_APPEARANCE_GENERIC_CYCLING 1152 /**< Generic Cycling. */ +#define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER 1153 /**< Cycling: Cycling Computer. */ +#define BLE_APPEARANCE_CYCLING_SPEED_SENSOR 1154 /**< Cycling: Speed Sensor. */ +#define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR 1155 /**< Cycling: Cadence Sensor. */ +#define BLE_APPEARANCE_CYCLING_POWER_SENSOR 1156 /**< Cycling: Power Sensor. */ +#define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR 1157 /**< Cycling: Speed and Cadence Sensor. */ +#define BLE_APPEARANCE_GENERIC_PULSE_OXIMETER 3136 /**< Generic Pulse Oximeter. */ +#define BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 3137 /**< Fingertip (Pulse Oximeter subtype). */ +#define BLE_APPEARANCE_PULSE_OXIMETER_WRIST_WORN 3138 /**< Wrist Worn(Pulse Oximeter subtype). */ +#define BLE_APPEARANCE_GENERIC_WEIGHT_SCALE 3200 /**< Generic Weight Scale. */ +#define BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS_ACT 5184 /**< Generic Outdoor Sports Activity. */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_DISP 5185 /**< Location Display Device (Outdoor Sports Activity subtype). */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_DISP 5186 /**< Location and Navigation Display Device (Outdoor Sports Activity subtype). */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_POD 5187 /**< Location Pod (Outdoor Sports Activity subtype). */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_POD 5188 /**< Location and Navigation Pod (Outdoor Sports Activity subtype). */ +/** @} */ + +/** @brief Set .type and .uuid fields of ble_uuid_struct to specified uuid value. */ +#define BLE_UUID_BLE_ASSIGN(instance, value) do {\ + instance.type = BLE_UUID_TYPE_BLE; \ + instance.uuid = value;} while(0) + +/** @brief Copy type and uuid members from src to dst ble_uuid_t pointer. Both pointers must be valid/non-null. */ +#define BLE_UUID_COPY_PTR(dst, src) do {\ + (dst)->type = (src)->type; \ + (dst)->uuid = (src)->uuid;} while(0) + +/** @brief Copy type and uuid members from src to dst ble_uuid_t struct. */ +#define BLE_UUID_COPY_INST(dst, src) do {\ + (dst).type = (src).type; \ + (dst).uuid = (src).uuid;} while(0) + +/** @brief Compare for equality both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ +#define BLE_UUID_EQ(p_uuid1, p_uuid2) \ + (((p_uuid1)->type == (p_uuid2)->type) && ((p_uuid1)->uuid == (p_uuid2)->uuid)) + +/** @brief Compare for difference both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ +#define BLE_UUID_NEQ(p_uuid1, p_uuid2) \ + (((p_uuid1)->type != (p_uuid2)->type) || ((p_uuid1)->uuid != (p_uuid2)->uuid)) + +/** @} */ + +/** @addtogroup BLE_TYPES_STRUCTURES Structures + * @{ */ + +/** @brief 128 bit UUID values. */ +typedef struct +{ + unsigned char uuid128[16]; +} ble_uuid128_t; + +/** @brief Bluetooth Low Energy UUID type, encapsulates both 16-bit and 128-bit UUIDs. */ +typedef struct +{ + uint16_t uuid; /**< 16-bit UUID value or octets 12-13 of 128-bit UUID. */ + uint8_t type; /**< UUID type, see @ref BLE_UUID_TYPES. If type is BLE_UUID_TYPE_UNKNOWN, the value of uuid is undefined. */ +} ble_uuid_t; + +/** @} */ + +#endif /* BLE_TYPES_H__ */ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_error.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + /** + @defgroup nrf_error SoftDevice Global Error Codes + @{ + + @brief Global Error definitions +*/ + +/* Header guard */ +#ifndef NRF_ERROR_H__ +#define NRF_ERROR_H__ + +/** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions + * @{ */ +#define NRF_ERROR_BASE_NUM (0x0) ///< Global error base +#define NRF_ERROR_SDM_BASE_NUM (0x1000) ///< SDM error base +#define NRF_ERROR_SOC_BASE_NUM (0x2000) ///< SoC error base +#define NRF_ERROR_STK_BASE_NUM (0x3000) ///< STK error base +/** @} */ + +#define NRF_SUCCESS (NRF_ERROR_BASE_NUM + 0) ///< Successful command +#define NRF_ERROR_SVC_HANDLER_MISSING (NRF_ERROR_BASE_NUM + 1) ///< SVC handler is missing +#define NRF_ERROR_SOFTDEVICE_NOT_ENABLED (NRF_ERROR_BASE_NUM + 2) ///< SoftDevice has not been enabled +#define NRF_ERROR_INTERNAL (NRF_ERROR_BASE_NUM + 3) ///< Internal Error +#define NRF_ERROR_NO_MEM (NRF_ERROR_BASE_NUM + 4) ///< No Memory for operation +#define NRF_ERROR_NOT_FOUND (NRF_ERROR_BASE_NUM + 5) ///< Not found +#define NRF_ERROR_NOT_SUPPORTED (NRF_ERROR_BASE_NUM + 6) ///< Not supported +#define NRF_ERROR_INVALID_PARAM (NRF_ERROR_BASE_NUM + 7) ///< Invalid Parameter +#define NRF_ERROR_INVALID_STATE (NRF_ERROR_BASE_NUM + 8) ///< Invalid state, operation disallowed in this state +#define NRF_ERROR_INVALID_LENGTH (NRF_ERROR_BASE_NUM + 9) ///< Invalid Length +#define NRF_ERROR_INVALID_FLAGS (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags +#define NRF_ERROR_INVALID_DATA (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data +#define NRF_ERROR_DATA_SIZE (NRF_ERROR_BASE_NUM + 12) ///< Data size exceeds limit +#define NRF_ERROR_TIMEOUT (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out +#define NRF_ERROR_NULL (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer +#define NRF_ERROR_FORBIDDEN (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation +#define NRF_ERROR_INVALID_ADDR (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address +#define NRF_ERROR_BUSY (NRF_ERROR_BASE_NUM + 17) ///< Busy + +#endif // NRF_ERROR_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_error_sdm.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + /** + @addtogroup nrf_sdm_api + @{ + @defgroup nrf_sdm_error SoftDevice Manager Error Codes + @{ + + @brief Error definitions for the SDM API +*/ + +/* Header guard */ +#ifndef NRF_ERROR_SDM_H__ +#define NRF_ERROR_SDM_H__ + +#include "nrf_error.h" + +#define NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN (NRF_ERROR_SDM_BASE_NUM + 0) ///< Unknown lfclk source +#define NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION (NRF_ERROR_SDM_BASE_NUM + 1) ///< Incorrect interrupt configuration (can be caused by using illegal priority levels, or having enabled SoftDevice interrupts) +#define NRF_ERROR_SDM_INCORRECT_CLENR0 (NRF_ERROR_SDM_BASE_NUM + 2) ///< Incorrect CLENR0 (can be caused by erronous SoftDevice flashing) + +#endif // NRF_ERROR_SDM_H__ + +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_error_soc.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + /** + @addtogroup nrf_soc_api + @{ + @defgroup nrf_soc_error SoC Library Error Codes + @{ + + @brief Error definitions for the SoC library + +*/ + +/* Header guard */ +#ifndef NRF_ERROR_SOC_H__ +#define NRF_ERROR_SOC_H__ + +#include "nrf_error.h" + +/* Mutex Errors */ +#define NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN (NRF_ERROR_SOC_BASE_NUM + 0) ///< Mutex already taken + +/* NVIC errors */ +#define NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE (NRF_ERROR_SOC_BASE_NUM + 1) ///< NVIC interrupt not available +#define NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED (NRF_ERROR_SOC_BASE_NUM + 2) ///< NVIC interrupt priority not allowed +#define NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 3) ///< NVIC should not return + +/* Power errors */ +#define NRF_ERROR_SOC_POWER_MODE_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 4) ///< Power mode unknown +#define NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 5) ///< Power POF threshold unknown +#define NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 6) ///< Power off should not return + +/* Rand errors */ +#define NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES (NRF_ERROR_SOC_BASE_NUM + 7) ///< RAND not enough values + +/* PPI errors */ +#define NRF_ERROR_SOC_PPI_INVALID_CHANNEL (NRF_ERROR_SOC_BASE_NUM + 8) ///< Invalid PPI Channel +#define NRF_ERROR_SOC_PPI_INVALID_GROUP (NRF_ERROR_SOC_BASE_NUM + 9) ///< Invalid PPI Group + +#endif // NRF_ERROR_SOC_H__ +/** + @} + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_mbr.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @defgroup nrf_mbr_api Master Boot Record API + @{ + + @brief APIs for updating SoftDevice and BootLoader + +*/ + +/* Header guard */ +#ifndef NRF_MBR_H__ +#define NRF_MBR_H__ + +#include "nrf_svc.h" +#include <stdint.h> + + +/** @addtogroup NRF_MBR_DEFINES Defines + * @{ */ + +/**@brief MBR SVC Base number. */ +#define MBR_SVC_BASE 0x18 +/** @} */ + +/** @addtogroup NRF_MBR_ENUMS Enumerations + * @{ */ + +/**@brief nRF Master Boot Record API SVC numbers. */ +enum NRF_MBR_SVCS +{ + SD_MBR_COMMAND = MBR_SVC_BASE, /**< ::sd_mbr_command */ +}; + +/**@brief Possible values for ::sd_mbr_command_t.command */ +enum NRF_MBR_COMMANDS +{ + SD_MBR_COMMAND_COPY_BL, /**< Copy a new a new BootLoader. @see sd_mbr_command_copy_bl_t */ + SD_MBR_COMMAND_COPY_SD, /**< Copy a new SoftDevice. @see ::sd_mbr_command_copy_sd_t*/ + SD_MBR_COMMAND_INIT_SD, /**< Init forwarding interrupts to SD, and run reset function in SD*/ + SD_MBR_COMMAND_COMPARE, /**< This command works like memcmp. @see ::sd_mbr_command_compare_t*/ + SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET, /**< Start forwarding all exception to this address @see ::sd_mbr_command_vector_table_base_set_t*/ +}; + +/** @} */ + +/** @addtogroup NRF_MBR_TYPES Types + * @{ */ + +/**@brief This command copies part of a new SoftDevice + * The destination area is erased before copying. + * If dst is in the middle of a flash page, that whole flash page will be erased. + * If (dst+len) is in the middle of a flash page, that whole flash page will be erased. + * + * The user of this function is responsible for setting the PROTENSET registers. + * + * @retval ::NRF_SUCCESS indicates that the contents of the memory blocks where copied correctly. + * @retval ::NRF_ERROR_INTERNAL indicates that the contents of the memory blocks where not verified correctly after copying. + */ +typedef struct +{ + uint32_t *src; /**< Pointer to the source of data to be copied.*/ + uint32_t *dst; /**< Pointer to the destination where the content is to be copied.*/ + uint32_t len; /**< Number of 32 bit words to copy. Must be a multiple of 256 words*/ +}sd_mbr_command_copy_sd_t; + + +/**@brief This command works like memcmp, but takes the length in words. + * + * @retval ::NRF_SUCCESS indicates that the contents of both memory blocks are equal. + * @retval ::NRF_ERROR_NULL indicates that the contents of the memory blocks are not equal. + */ +typedef struct +{ + uint32_t *ptr1; /**< Pointer to block of memory */ + uint32_t *ptr2; /**< Pointer to block of memory */ + uint32_t len; /**< Number of 32 bit words to compare*/ +}sd_mbr_command_compare_t; + + +/**@brief This command copies a new BootLoader. + * With this command, destination of BootLoader is always the address written in NRF_UICR->BOOTADDR. + * + * Destination is erased by this function. + * If (destination+bl_len) is in the middle of a flash page, that whole flash page will be erased. + * + * This function will use PROTENSET to protect the flash that is not intended to be written. + * + * On Success, this function will not return. It will start the new BootLoader from reset-vector as normal. + * + * @retval ::NRF_ERROR_INVALID_STATE indicates that something was wrong. + * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. + * @retval ::NRF_ERROR_FORBIDDEN if NRF_UICR->BOOTADDR is not set + * @retval ::NRF_ERROR_INVALID_LENGTH is invalid. + */ +typedef struct +{ + uint32_t *bl_src; /**< Pointer to the source of the Bootloader to be be copied.*/ + uint32_t bl_len; /**< Number of 32 bit words to copy for BootLoader */ +}sd_mbr_command_copy_bl_t; + +/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the MBR + * + * Once this function has been called, this address is where the MBR will start to forward interrupts to after a reset. + * + * To restore default forwarding thiss function should be called with @param address set to 0. + * The MBR will then start forwarding to interrupts to the adress in NFR_UICR->BOOTADDR or to the SoftDevice if the BOOTADDR is not set. + * + * @retval ::NRF_SUCCESS + */ +typedef struct +{ + uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ +}sd_mbr_command_vector_table_base_set_t; + +typedef struct +{ + uint32_t command; /**< type of command to be issued see @ref NRF_MBR_COMMANDS. */ + union + { + sd_mbr_command_copy_sd_t copy_sd; /**< Parameters for copy*/ + sd_mbr_command_copy_bl_t copy_bl; /**< Parameters for copy SoftDevice and BootLoader*/ + sd_mbr_command_compare_t compare; /**< Parameters for verify*/ + sd_mbr_command_vector_table_base_set_t base_set; /**< Parameters for vector table base set.*/ + } params; +}sd_mbr_command_t; + +/** @} */ + +/** @addtogroup NRF_MBR_FUNCTIONS Functions + * @{ */ + +/**@brief Issue Master Boot Record commands + * + * Commands used when updating a SoftDevice and bootloader + * + * @param[in] param Pointer to a struct describing the command + * + *@note for retvals see ::sd_mbr_command_copy_sd_t ::sd_mbr_command_copy_bl_t ::sd_mbr_command_compare_t + +*/ +SVCALL(SD_MBR_COMMAND, uint32_t, sd_mbr_command(sd_mbr_command_t* param)); + +/** @} */ +#endif // NRF_MBR_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_sdm.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,167 @@ +/* + * Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ +/** + @defgroup nrf_sdm_api SoftDevice Manager API + @{ + + @brief APIs for SoftDevice management. + +*/ + +/* Header guard */ +#ifndef NRF_SDM_H__ +#define NRF_SDM_H__ + +#include "nrf_svc.h" +#include "nrf51.h" +#include "nrf_soc.h" +#include "nrf_error_sdm.h" + +/** @addtogroup NRF_SDM_DEFINES Defines + * @{ */ + +/**@brief SoftDevice Manager SVC Base number. */ +#define SDM_SVC_BASE (0x10) + +/** @} */ + +/** @addtogroup NRF_SDM_ENUMS Enumerations + * @{ */ + +/**@brief nRF SoftDevice Manager API SVC numbers. */ +enum NRF_SD_SVCS +{ + SD_SOFTDEVICE_ENABLE = SDM_SVC_BASE, /**< ::sd_softdevice_enable */ + SD_SOFTDEVICE_DISABLE, /**< ::sd_softdevice_disable */ + SD_SOFTDEVICE_IS_ENABLED, /**< ::sd_softdevice_is_enabled */ + SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, /**< ::sd_softdevice_vector_table_base_set */ + SVC_SDM_LAST /**< Placeholder for last SDM SVC */ +}; + +/**@brief Possible lfclk oscillator sources. */ +enum NRF_CLOCK_LFCLKSRCS +{ + NRF_CLOCK_LFCLKSRC_SYNTH_250_PPM, /**< LFCLK Synthesized from HFCLK. */ + NRF_CLOCK_LFCLKSRC_XTAL_500_PPM, /**< LFCLK crystal oscillator 500 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_250_PPM, /**< LFCLK crystal oscillator 250 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_150_PPM, /**< LFCLK crystal oscillator 150 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_100_PPM, /**< LFCLK crystal oscillator 100 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_75_PPM, /**< LFCLK crystal oscillator 75 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_50_PPM, /**< LFCLK crystal oscillator 50 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_30_PPM, /**< LFCLK crystal oscillator 30 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_XTAL_20_PPM, /**< LFCLK crystal oscillator 20 PPM accuracy. */ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_250MS_CALIBRATION, /**< LFCLK RC oscillator, 250ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_500MS_CALIBRATION, /**< LFCLK RC oscillator, 500ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_1000MS_CALIBRATION, /**< LFCLK RC oscillator, 1000ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_2000MS_CALIBRATION, /**< LFCLK RC oscillator, 2000ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_4000MS_CALIBRATION, /**< LFCLK RC oscillator, 4000ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_8000MS_CALIBRATION, /**< LFCLK RC oscillator, 8000ms calibration interval.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_1000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 1000ms, if changed above a threshold, a calibration is done.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_2000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 2000ms, if changed above a threshold, a calibration is done.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_4000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 4000ms, if changed above a threshold, a calibration is done.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_8000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 8000ms, if changed above a threshold, a calibration is done.*/ + NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_16000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 16000ms, if changed above a threshold, a calibration is done.*/ +}; + +/** @} */ + +/** @addtogroup NRF_SDM_TYPES Types + * @{ */ + +/**@brief Type representing lfclk oscillator source. */ +typedef uint32_t nrf_clock_lfclksrc_t; + + +/**@brief SoftDevice Assertion Handler type. + * + * When an unexpected error occurs within the SoftDevice it will call the SoftDevice assertion handler callback. + * The protocol stack will be in an undefined state when this happens and the only way to recover will be to + * perform a reset, using e.g. CMSIS NVIC_SystemReset(). + * + * @note This callback is executed in HardFault context, thus SVC functions cannot be called from the SoftDevice assert callback. + * + * @param[in] pc The program counter of the failed assert. + * @param[in] line_number Line number where the assert failed. + * @param[in] file_name File name where the assert failed. + */ +typedef void (*softdevice_assertion_handler_t)(uint32_t pc, uint16_t line_number, const uint8_t * p_file_name); + +/** @} */ + +/** @addtogroup NRF_SDM_FUNCTIONS Functions + * @{ */ + +/**@brief Enables the SoftDevice and by extension the protocol stack. + * + * Idempotent function to enable the SoftDevice. + * + * @note Some care must be taken if a low frequency clock source is already running when calling this function: + * If the LF clock has a different source then the one currently running, it will be stopped. Then, the new + * clock source will be started. + * + * @note This function has no effect when returning with an error. + * + * @post If return code is ::NRF_SUCCESS + * - SoC library and protocol stack APIs are made available + * - A portion of RAM will be unavailable (see relevant SDS documentation) + * - Some peripherals will be unavailable or available only through the SoC API (see relevant SDS documentation) + * - Interrupts will not arrive from protected peripherals or interrupts + * - nrf_nvic_ functions must be used instead of CMSIS NVIC_ functions for reliable usage of the softdevice. + * - Interrupt latency may be affected by the SoftDevice (see relevant SDS documentation) + * - Chosen low frequency clock source will be running + * + * @param clock_source Low frequency clock source and accuracy. (Note: In the case of XTAL source, the PPM accuracy of the chosen clock source must be greater than or equal to the actual characteristics of your XTAL clock). + * @param assertion_handler Callback for SoftDevice assertions. + * + * @retval ::NRF_SUCCESS + * @retval ::NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION SoftDeviceinterrupt is already enabled, or an enabled interrupt has an illegal priority level + * @retval ::NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN Unknown low frequency clock source selected + */ +SVCALL(SD_SOFTDEVICE_ENABLE, uint32_t, sd_softdevice_enable(nrf_clock_lfclksrc_t clock_source, softdevice_assertion_handler_t assertion_handler)); + +/**@brief Disables the SoftDevice and by extension the protocol stack. + * + * Idempotent function to disable the SoftDevice. + * + * @post SoC library and protocol stack APIs are made unavailable. + * @post All interrupts that was protected by the SoftDevice will be disabled and initialized to priority 0 (highest). + * @post All peripherals used by the SoftDevice will be reset to default values. + * @post All of RAM become available. + * @post All interrupts are forwarded to the application. + * @post LFCLK source chosen in ::sd_softdevice_enable will be left running. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_SOFTDEVICE_DISABLE, uint32_t, sd_softdevice_disable(void)); + +/**@brief Check if the SoftDevice is enabled. + * + * @param[out] p_softdevice_enabled If the SoftDevice is enabled: 1 else 0. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_SOFTDEVICE_IS_ENABLED, uint32_t, sd_softdevice_is_enabled(uint8_t * p_softdevice_enabled)); + +/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the SoftDevice + * + * This function is only intended to be called when a bootloader is enabled. + * + * @param[in] address The base address of the interrupt vector table for forwarded interrupts. + + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, uint32_t, sd_softdevice_vector_table_base_set(uint32_t address)); + +/** @} */ + +#endif // NRF_SDM_H__ + +/** + @} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_soc.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,958 @@ +/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + +/** + * @defgroup nrf_soc_api SoC Library API + * @{ + * + * @brief APIs for the SoC library. + * +*/ + +#ifndef NRF_SOC_H__ +#define NRF_SOC_H__ + +#include <stdint.h> +#include <stdbool.h> +#include "nrf_svc.h" +#include "nrf51.h" +#include "nrf51_bitfields.h" +#include "nrf_error_soc.h" + +/** @addtogroup NRF_SOC_DEFINES Defines + * @{ */ + +/**@brief The number of the lowest SVC number reserved for the SoC library. */ +#define SOC_SVC_BASE (0x20) +#define SOC_SVC_BASE_NOT_AVAILABLE (0x23) + +/**@brief Guranteed time for application to process radio inactive notification. */ +#define NRF_RADIO_NOTIFICATION_INACTIVE_GUARANTEED_TIME_US (62) + +/**@brief The minimum allowed timeslot extension time. */ +#define NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US (200) + +#define SOC_ECB_KEY_LENGTH (16) /**< ECB key length. */ +#define SOC_ECB_CLEARTEXT_LENGTH (16) /**< ECB cleartext length. */ +#define SOC_ECB_CIPHERTEXT_LENGTH (SOC_ECB_CLEARTEXT_LENGTH) /**< ECB ciphertext length. */ + +#define SD_EVT_IRQn (SWI2_IRQn) /**< SoftDevice Event IRQ number. Used for both protocol events and SoC events. */ +#define SD_EVT_IRQHandler (SWI2_IRQHandler) /**< SoftDevice Event IRQ handler. Used for both protocol events and SoC events. */ +#define RADIO_NOTIFICATION_IRQn (SWI1_IRQn) /**< The radio notification IRQ number. */ +#define RADIO_NOTIFICATION_IRQHandler (SWI1_IRQHandler) /**< The radio notification IRQ handler. */ + +#define NRF_RADIO_LENGTH_MIN_US (100) /**< The shortest allowed radio timeslot, in microseconds. */ +#define NRF_RADIO_LENGTH_MAX_US (100000) /**< The longest allowed radio timeslot, in microseconds. */ + +#define NRF_RADIO_DISTANCE_MAX_US (128000000UL - 1UL) /**< The longest timeslot distance, in microseconds, allowed for the distance parameter (see @ref nrf_radio_request_normal_t) in the request. */ + +#define NRF_RADIO_EARLIEST_TIMEOUT_MAX_US (128000000UL - 1UL) /**< The longest timeout, in microseconds, allowed when requesting the earliest possible timeslot. */ + +#define NRF_RADIO_START_JITTER_US (2) /**< The maximum jitter in NRF_RADIO_CALLBACK_SIGNAL_TYPE_START relative to the requested start time. */ + +/** @} */ + +/** @addtogroup NRF_SOC_TYPES Types + * @{ */ + +/**@brief The SVC numbers used by the SVC functions in the SoC library. */ +enum NRF_SOC_SVCS +{ + SD_FLASH_PAGE_ERASE = SOC_SVC_BASE, + SD_FLASH_WRITE, + SD_FLASH_PROTECT, + SD_MUTEX_NEW = SOC_SVC_BASE_NOT_AVAILABLE, + SD_MUTEX_ACQUIRE, + SD_MUTEX_RELEASE, + SD_NVIC_ENABLEIRQ, + SD_NVIC_DISABLEIRQ, + SD_NVIC_GETPENDINGIRQ, + SD_NVIC_SETPENDINGIRQ, + SD_NVIC_CLEARPENDINGIRQ, + SD_NVIC_SETPRIORITY, + SD_NVIC_GETPRIORITY, + SD_NVIC_SYSTEMRESET, + SD_NVIC_CRITICAL_REGION_ENTER, + SD_NVIC_CRITICAL_REGION_EXIT, + SD_RAND_APPLICATION_POOL_CAPACITY, + SD_RAND_APPLICATION_BYTES_AVAILABLE, + SD_RAND_APPLICATION_GET_VECTOR, + SD_POWER_MODE_SET, + SD_POWER_SYSTEM_OFF, + SD_POWER_RESET_REASON_GET, + SD_POWER_RESET_REASON_CLR, + SD_POWER_POF_ENABLE, + SD_POWER_POF_THRESHOLD_SET, + SD_POWER_RAMON_SET, + SD_POWER_RAMON_CLR, + SD_POWER_RAMON_GET, + SD_POWER_GPREGRET_SET, + SD_POWER_GPREGRET_CLR, + SD_POWER_GPREGRET_GET, + SD_POWER_DCDC_MODE_SET, + SD_APP_EVT_WAIT, + SD_CLOCK_HFCLK_REQUEST, + SD_CLOCK_HFCLK_RELEASE, + SD_CLOCK_HFCLK_IS_RUNNING, + SD_PPI_CHANNEL_ENABLE_GET, + SD_PPI_CHANNEL_ENABLE_SET, + SD_PPI_CHANNEL_ENABLE_CLR, + SD_PPI_CHANNEL_ASSIGN, + SD_PPI_GROUP_TASK_ENABLE, + SD_PPI_GROUP_TASK_DISABLE, + SD_PPI_GROUP_ASSIGN, + SD_PPI_GROUP_GET, + SD_RADIO_NOTIFICATION_CFG_SET, + SD_ECB_BLOCK_ENCRYPT, + SD_RADIO_SESSION_OPEN, + SD_RADIO_SESSION_CLOSE, + SD_RADIO_REQUEST, + SD_EVT_GET, + SD_TEMP_GET, + SVC_SOC_LAST +}; + +/**@brief Possible values of a ::nrf_mutex_t. */ +enum NRF_MUTEX_VALUES +{ + NRF_MUTEX_FREE, + NRF_MUTEX_TAKEN +}; + +/**@brief Possible values of ::nrf_app_irq_priority_t. */ +enum NRF_APP_PRIORITIES +{ + NRF_APP_PRIORITY_HIGH = 1, + NRF_APP_PRIORITY_LOW = 3 +}; + +/**@brief Possible values of ::nrf_power_mode_t. */ +enum NRF_POWER_MODES +{ + NRF_POWER_MODE_CONSTLAT, /**< Constant latency mode. See power management in the reference manual. */ + NRF_POWER_MODE_LOWPWR /**< Low power mode. See power management in the reference manual. */ +}; + + +/**@brief Possible values of ::nrf_power_failure_threshold_t */ +enum NRF_POWER_THRESHOLDS +{ + NRF_POWER_THRESHOLD_V21, /**< 2.1 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V23, /**< 2.3 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V25, /**< 2.5 Volts power failure threshold. */ + NRF_POWER_THRESHOLD_V27 /**< 2.7 Volts power failure threshold. */ +}; + + +/**@brief Possible values of ::nrf_power_dcdc_mode_t. */ +enum NRF_POWER_DCDC_MODES +{ + NRF_POWER_DCDC_MODE_OFF, /**< The DCDC is always off. */ + NRF_POWER_DCDC_MODE_ON, /**< The DCDC is always on. */ + NRF_POWER_DCDC_MODE_AUTOMATIC /**< The DCDC is automatically managed. */ +}; + +/**@brief Possible values of ::nrf_radio_notification_distance_t. */ +enum NRF_RADIO_NOTIFICATION_DISTANCES +{ + NRF_RADIO_NOTIFICATION_DISTANCE_NONE = 0, /**< The event does not have a notification. */ + NRF_RADIO_NOTIFICATION_DISTANCE_800US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_1740US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_2680US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_3620US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_4560US, /**< The distance from the active notification to start of radio activity. */ + NRF_RADIO_NOTIFICATION_DISTANCE_5500US /**< The distance from the active notification to start of radio activity. */ +}; + + +/**@brief Possible values of ::nrf_radio_notification_type_t. */ +enum NRF_RADIO_NOTIFICATION_TYPES +{ + NRF_RADIO_NOTIFICATION_TYPE_NONE = 0, /**< The event does not have a radio notification signal. */ + NRF_RADIO_NOTIFICATION_TYPE_INT_ON_ACTIVE, /**< Using interrupt for notification when the radio will be enabled. */ + NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE, /**< Using interrupt for notification when the radio has been disabled. */ + NRF_RADIO_NOTIFICATION_TYPE_INT_ON_BOTH, /**< Using interrupt for notification both when the radio will be enabled and disabled. */ +}; + +/**@brief SoC Events. */ +enum NRF_SOC_EVTS +{ + NRF_EVT_HFCLKSTARTED, /**< Event indicating that the HFCLK has started. */ + NRF_EVT_POWER_FAILURE_WARNING, /**< Event indicating that a power failure warning has occurred. */ + NRF_EVT_FLASH_OPERATION_SUCCESS, /**< Event indicating that the ongoing flash operation has completed successfully. */ + NRF_EVT_FLASH_OPERATION_ERROR, /**< Event indicating that the ongoing flash operation has timed out with an error. */ + NRF_EVT_RADIO_BLOCKED, /**< Event indicating that a radio timeslot was blocked. */ + NRF_EVT_RADIO_CANCELED, /**< Event indicating that a radio timeslot was canceled by SoftDevice. */ + NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN, /**< Event indicating that a radio signal callback handler return was invalid. */ + NRF_EVT_RADIO_SESSION_IDLE, /**< Event indicating that a radio session is idle. */ + NRF_EVT_RADIO_SESSION_CLOSED, /**< Event indicating that a radio session is closed. */ + NRF_EVT_NUMBER_OF_EVTS +}; + +/** @} */ + +/** @addtogroup NRF_SOC_TYPES Types + * @{ */ + +/**@brief Represents a mutex for use with the nrf_mutex functions. + * @note Accessing the value directly is not safe, use the mutex functions! + */ +typedef volatile uint8_t nrf_mutex_t; + +/**@brief The interrupt priorities available to the application while the softdevice is active. */ +typedef uint8_t nrf_app_irq_priority_t; + +/**@brief Represents a power mode, used in power mode functions */ +typedef uint8_t nrf_power_mode_t; + +/**@brief Represents a power failure threshold value. */ +typedef uint8_t nrf_power_failure_threshold_t; + +/**@brief Represents a DCDC mode value. */ +typedef uint32_t nrf_power_dcdc_mode_t; + +/**@brief Radio notification distances. */ +typedef uint8_t nrf_radio_notification_distance_t; + +/**@brief Radio notification types. */ +typedef uint8_t nrf_radio_notification_type_t; + +/** @brief The Radio signal callback types. */ +enum NRF_RADIO_CALLBACK_SIGNAL_TYPE +{ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_START, /**< This signal indicates the start of the radio timeslot. */ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0, /**< This signal indicates the NRF_TIMER0 interrupt. */ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO, /**< This signal indicates the NRF_RADIO interrupt. */ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_FAILED, /**< This signal indicates extend action failed. */ + NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_SUCCEEDED /**< This signal indicates extend action succeeded. */ +}; + +/** @brief The actions requested by the signal callback. + * + * This code gives the SOC instructions about what action to take when the signal callback has + * returned. + */ +enum NRF_RADIO_SIGNAL_CALLBACK_ACTION +{ + NRF_RADIO_SIGNAL_CALLBACK_ACTION_NONE, /**< Return without action. */ + NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND, /**< Request an extension of the current timeslot (maximum execution time for this action is when the extension succeeded). */ + NRF_RADIO_SIGNAL_CALLBACK_ACTION_END, /**< End the current radio timeslot. */ + NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END /**< Request a new radio timeslot and end the current timeslot. */ +}; + +/**@brief Radio timeslot high frequency clock source configuration. */ +enum NRF_RADIO_HFCLK_CFG +{ + NRF_RADIO_HFCLK_CFG_DEFAULT, /**< Use the currently selected oscillator as HF clock source during the timeslot (i.e. the source is not specified). */ + NRF_RADIO_HFCLK_CFG_FORCE_XTAL, /**< Force external crystal to be used as HF clock source during whole the timeslot. */ +}; + +/** @brief Radio timeslot priorities. */ +enum NRF_RADIO_PRIORITY +{ + NRF_RADIO_PRIORITY_HIGH, /**< High (equal priority as the normal connection priority of the SoftDevice stack(s)). */ + NRF_RADIO_PRIORITY_NORMAL, /**< Normal (equal priority as the priority of secondary activites of the SoftDevice stack(s)). */ +}; + +/** @brief Radio timeslot request type. */ +enum NRF_RADIO_REQUEST_TYPE +{ + NRF_RADIO_REQ_TYPE_EARLIEST, /**< Request timeslot as early as possible. This should always be used for the first request in a session. */ + NRF_RADIO_REQ_TYPE_NORMAL /**< Normal timeslot request. */ +}; + +/** @brief Parameters for a request for a timeslot as early as possible. */ +typedef struct +{ + uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ + uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ + uint32_t length_us; /**< The radio timeslot length (in the range 100 to 100,000] microseconds). */ + uint32_t timeout_us; /**< Longest acceptable delay until the start of the requested timeslot (up to @ref NRF_RADIO_EARLIEST_TIMEOUT_MAX_US microseconds). */ +} nrf_radio_request_earliest_t; + +/** @brief Parameters for a normal radio request. */ +typedef struct +{ + uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ + uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ + uint32_t distance_us; /**< Distance from the start of the previous radio timeslot (up to @ref NRF_RADIO_DISTANCE_MAX_US microseconds). */ + uint32_t length_us; /**< The radio timeslot length (in the range [100..100,000] microseconds). */ +} nrf_radio_request_normal_t; + +/** @brief Radio request parameters. */ +typedef struct +{ + uint8_t request_type; /**< Type of request, see @ref NRF_RADIO_REQUEST_TYPE. */ + union + { + nrf_radio_request_earliest_t earliest; /**< Parameters for a request for a timeslot as early as possible. */ + nrf_radio_request_normal_t normal; /**< Parameters for a normal radio request. */ + } params; +} nrf_radio_request_t; + +/**@brief Return parameters of the radio timeslot signal callback. */ +typedef struct +{ + uint8_t callback_action; /**< The action requested by the application when returning from the signal callback, see @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION. */ + union + { + struct + { + nrf_radio_request_t * p_next; /**< The request parameters for the next radio timeslot. */ + } request; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END. */ + struct + { + uint32_t length_us; /**< Requested extension of the timeslot duration (microseconds) (for minimum time see @ref NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US). */ + } extend; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND. */ + } params; +} nrf_radio_signal_callback_return_param_t; + +/**@brief The radio signal callback type. + * + * @note In case of invalid return parameters, the radio timeslot will automatically end + * immediately after returning from the signal callback and the + * @ref NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN event will be sent. + * @note The returned struct pointer must remain valid after the signal callback + * function returns. For instance, this means that it must not point to a stack variable. + * + * @param[in] signal_type Type of signal, see @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE. + * + * @return Pointer to structure containing action requested by the application. + */ +typedef nrf_radio_signal_callback_return_param_t * (*nrf_radio_signal_callback_t) (uint8_t signal_type); + +/**@brief AES ECB data structure */ +typedef struct +{ + uint8_t key[SOC_ECB_KEY_LENGTH]; /**< Encryption key. */ + uint8_t cleartext[SOC_ECB_CLEARTEXT_LENGTH]; /**< Clear Text data. */ + uint8_t ciphertext[SOC_ECB_CIPHERTEXT_LENGTH]; /**< Cipher Text data. */ +} nrf_ecb_hal_data_t; + +/** @} */ + +/** @addtogroup NRF_SOC_FUNCTIONS Functions + * @{ */ + +/**@brief Initialize a mutex. + * + * @param[in] p_mutex Pointer to the mutex to initialize. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_MUTEX_NEW, uint32_t, sd_mutex_new(nrf_mutex_t * p_mutex)); + +/**@brief Attempt to acquire a mutex. + * + * @param[in] p_mutex Pointer to the mutex to acquire. + * + * @retval ::NRF_SUCCESS The mutex was successfully acquired. + * @retval ::NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN The mutex could not be acquired. + */ +SVCALL(SD_MUTEX_ACQUIRE, uint32_t, sd_mutex_acquire(nrf_mutex_t * p_mutex)); + +/**@brief Release a mutex. + * + * @param[in] p_mutex Pointer to the mutex to release. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_MUTEX_RELEASE, uint32_t, sd_mutex_release(nrf_mutex_t * p_mutex)); + +/**@brief Enable External Interrupt. + * @note Corresponds to NVIC_EnableIRQ in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS. + * + * @retval ::NRF_SUCCESS The interrupt was enabled. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt has a priority not available for the application. + */ +SVCALL(SD_NVIC_ENABLEIRQ, uint32_t, sd_nvic_EnableIRQ(IRQn_Type IRQn)); + +/**@brief Disable External Interrupt. + * @note Corresponds to NVIC_DisableIRQ in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS + * + * @retval ::NRF_SUCCESS The interrupt was disabled. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. + */ +SVCALL(SD_NVIC_DISABLEIRQ, uint32_t, sd_nvic_DisableIRQ(IRQn_Type IRQn)); + +/**@brief Get Pending Interrupt. + * @note Corresponds to NVIC_GetPendingIRQ in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_GetPendingIRQ documentation in CMSIS. + * @param[out] p_pending_irq Return value from NVIC_GetPendingIRQ. + * + * @retval ::NRF_SUCCESS The interrupt is available for the application. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. + */ +SVCALL(SD_NVIC_GETPENDINGIRQ, uint32_t, sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq)); + +/**@brief Set Pending Interrupt. + * @note Corresponds to NVIC_SetPendingIRQ in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS. + * + * @retval ::NRF_SUCCESS The interrupt is set pending. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. + */ +SVCALL(SD_NVIC_SETPENDINGIRQ, uint32_t, sd_nvic_SetPendingIRQ(IRQn_Type IRQn)); + +/**@brief Clear Pending Interrupt. + * @note Corresponds to NVIC_ClearPendingIRQ in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS. + * + * @retval ::NRF_SUCCESS The interrupt pending flag is cleared. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. + */ +SVCALL(SD_NVIC_CLEARPENDINGIRQ, uint32_t, sd_nvic_ClearPendingIRQ(IRQn_Type IRQn)); + +/**@brief Set Interrupt Priority. + * @note Corresponds to NVIC_SetPriority in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * @pre{priority is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_SetPriority documentation in CMSIS. + * @param[in] priority A valid IRQ priority for use by the application. + * + * @retval ::NRF_SUCCESS The interrupt and priority level is available for the application. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt priority is not available for the application. + */ +SVCALL(SD_NVIC_SETPRIORITY, uint32_t, sd_nvic_SetPriority(IRQn_Type IRQn, nrf_app_irq_priority_t priority)); + +/**@brief Get Interrupt Priority. + * @note Corresponds to NVIC_GetPriority in CMSIS. + * + * @pre{IRQn is valid and not reserved by the stack} + * + * @param[in] IRQn See the NVIC_GetPriority documentation in CMSIS. + * @param[out] p_priority Return value from NVIC_GetPriority. + * + * @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority. + * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE - IRQn is not available for the application. + */ +SVCALL(SD_NVIC_GETPRIORITY, uint32_t, sd_nvic_GetPriority(IRQn_Type IRQn, nrf_app_irq_priority_t * p_priority)); + +/**@brief System Reset. + * @note Corresponds to NVIC_SystemReset in CMSIS. + * + * @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN + */ +SVCALL(SD_NVIC_SYSTEMRESET, uint32_t, sd_nvic_SystemReset(void)); + +/**@brief Enters critical region. + * + * @post Application interrupts will be disabled. + * @sa sd_nvic_critical_region_exit + * + * @param[out] p_is_nested_critical_region 1: If in a nested critical region. + * 0: Otherwise. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_NVIC_CRITICAL_REGION_ENTER, uint32_t, sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region)); + +/**@brief Exit critical region. + * + * @pre Application has entered a critical region using ::sd_nvic_critical_region_enter. + * @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called. + * + * @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_NVIC_CRITICAL_REGION_EXIT, uint32_t, sd_nvic_critical_region_exit(uint8_t is_nested_critical_region)); + +/**@brief Query the capacity of the application random pool. + * + * @param[out] p_pool_capacity The capacity of the pool. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_RAND_APPLICATION_POOL_CAPACITY, uint32_t, sd_rand_application_pool_capacity_get(uint8_t * p_pool_capacity)); + +/**@brief Get number of random bytes available to the application. + * + * @param[out] p_bytes_available The number of bytes currently available in the pool. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_RAND_APPLICATION_BYTES_AVAILABLE, uint32_t, sd_rand_application_bytes_available_get(uint8_t * p_bytes_available)); + +/**@brief Get random bytes from the application pool. + * + * @param[out] p_buff Pointer to unit8_t buffer for storing the bytes. + * @param[in] length Number of bytes to take from pool and place in p_buff. + * + * @retval ::NRF_SUCCESS The requested bytes were written to p_buff. + * @retval ::NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES No bytes were written to the buffer, because there were not enough bytes available. +*/ +SVCALL(SD_RAND_APPLICATION_GET_VECTOR, uint32_t, sd_rand_application_vector_get(uint8_t * p_buff, uint8_t length)); + +/**@brief Gets the reset reason register. + * + * @param[out] p_reset_reason Contents of the NRF_POWER->RESETREAS register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RESET_REASON_GET, uint32_t, sd_power_reset_reason_get(uint32_t * p_reset_reason)); + +/**@brief Clears the bits of the reset reason register. + * + * @param[in] reset_reason_clr_msk Contains the bits to clear from the reset reason register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RESET_REASON_CLR, uint32_t, sd_power_reset_reason_clr(uint32_t reset_reason_clr_msk)); + +/**@brief Sets the power mode when in CPU sleep. + * + * @param[in] power_mode The power mode to use when in CPU sleep. @sa sd_app_evt_wait + * + * @retval ::NRF_SUCCESS The power mode was set. + * @retval ::NRF_ERROR_SOC_POWER_MODE_UNKNOWN The power mode was unknown. + */ +SVCALL(SD_POWER_MODE_SET, uint32_t, sd_power_mode_set(nrf_power_mode_t power_mode)); + +/**@brief Puts the chip in System OFF mode. + * + * @retval ::NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN + */ +SVCALL(SD_POWER_SYSTEM_OFF, uint32_t, sd_power_system_off(void)); + +/**@brief Enables or disables the power-fail comparator. + * + * Enabling this will give a softdevice event (NRF_EVT_POWER_FAILURE_WARNING) when the power failure warning occurs. + * The event can be retrieved with sd_evt_get(); + * + * @param[in] pof_enable True if the power-fail comparator should be enabled, false if it should be disabled. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_POF_ENABLE, uint32_t, sd_power_pof_enable(uint8_t pof_enable)); + +/**@brief Sets the power-fail threshold value. + * + * @param[in] threshold The power-fail threshold value to use. + * + * @retval ::NRF_SUCCESS The power failure threshold was set. + * @retval ::NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN The power failure threshold is unknown. + */ +SVCALL(SD_POWER_POF_THRESHOLD_SET, uint32_t, sd_power_pof_threshold_set(nrf_power_failure_threshold_t threshold)); + +/**@brief Sets bits in the NRF_POWER->RAMON register. + * + * @param[in] ramon Contains the bits needed to be set in the NRF_POWER->RAMON register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RAMON_SET, uint32_t, sd_power_ramon_set(uint32_t ramon)); + +/** @brief Clears bits in the NRF_POWER->RAMON register. + * + * @param ramon Contains the bits needed to be cleared in the NRF_POWER->RAMON register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RAMON_CLR, uint32_t, sd_power_ramon_clr(uint32_t ramon)); + +/**@brief Get contents of NRF_POWER->RAMON register, indicates power status of ram blocks. + * + * @param[out] p_ramon Content of NRF_POWER->RAMON register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_RAMON_GET, uint32_t, sd_power_ramon_get(uint32_t * p_ramon)); + +/**@brief Set bits in the NRF_POWER->GPREGRET register. + * + * @param[in] gpregret_msk Bits to be set in the GPREGRET register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_GPREGRET_SET, uint32_t, sd_power_gpregret_set(uint32_t gpregret_msk)); + +/**@brief Clear bits in the NRF_POWER->GPREGRET register. + * + * @param[in] gpregret_msk Bits to be clear in the GPREGRET register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_GPREGRET_CLR, uint32_t, sd_power_gpregret_clr(uint32_t gpregret_msk)); + +/**@brief Get contents of the NRF_POWER->GPREGRET register. + * + * @param[out] p_gpregret Contents of the GPREGRET register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_POWER_GPREGRET_GET, uint32_t, sd_power_gpregret_get(uint32_t *p_gpregret)); + +/**@brief Sets the DCDC mode. + * + * Depending on the internal state of the SoftDevice, the mode change may not happen immediately. + * The DCDC mode switch will be blocked when occurring in close proximity to radio transmissions. When + * the radio transmission is done, the last mode will be used. + * + * @param[in] dcdc_mode The mode of the DCDC. + * + * @retval ::NRF_SUCCESS + * @retval ::NRF_ERROR_INVALID_PARAM The DCDC mode is invalid. + */ +SVCALL(SD_POWER_DCDC_MODE_SET, uint32_t, sd_power_dcdc_mode_set(nrf_power_dcdc_mode_t dcdc_mode)); + +/**@brief Request the high frequency crystal oscillator. + * + * Will start the high frequency crystal oscillator, the startup time of the crystal varies + * and the ::sd_clock_hfclk_is_running function can be polled to check if it has started. + * + * @see sd_clock_hfclk_is_running + * @see sd_clock_hfclk_release + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_CLOCK_HFCLK_REQUEST, uint32_t, sd_clock_hfclk_request(void)); + +/**@brief Releases the high frequency crystal oscillator. + * + * Will stop the high frequency crystal oscillator, this happens immediately. + * + * @see sd_clock_hfclk_is_running + * @see sd_clock_hfclk_request + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_CLOCK_HFCLK_RELEASE, uint32_t, sd_clock_hfclk_release(void)); + +/**@brief Checks if the high frequency crystal oscillator is running. + * + * @see sd_clock_hfclk_request + * @see sd_clock_hfclk_release + * + * @param[out] p_is_running 1 if the external crystal oscillator is running, 0 if not. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_CLOCK_HFCLK_IS_RUNNING, uint32_t, sd_clock_hfclk_is_running(uint32_t * p_is_running)); + +/**@brief Waits for an application event. + * + * An application event is either an application interrupt or a pended interrupt when the + * interrupt is disabled. When the interrupt is enabled it will be taken immediately since + * this function will wait in thread mode, then the execution will return in the application's + * main thread. When an interrupt is disabled and gets pended it will return to the application's + * thread main. The application must ensure that the pended flag is cleared using + * ::sd_nvic_ClearPendingIRQ in order to sleep using this function. This is only necessary for + * disabled interrupts, as the interrupt handler will clear the pending flag automatically for + * enabled interrupts. + * + * In order to wake up from disabled interrupts, the SEVONPEND flag has to be set in the Cortex-M0 + * System Control Register (SCR). @sa CMSIS_SCB + * + * @note If an application interrupt has happened since the last time sd_app_evt_wait was + * called this function will return immediately and not go to sleep. This is to avoid race + * conditions that can occur when a flag is updated in the interrupt handler and processed + * in the main loop. + * + * @post An application interrupt has happened or a interrupt pending flag is set. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_APP_EVT_WAIT, uint32_t, sd_app_evt_wait(void)); + +/**@brief Get PPI channel enable register contents. + * + * @param[out] p_channel_enable The contents of the PPI CHEN register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_CHANNEL_ENABLE_GET, uint32_t, sd_ppi_channel_enable_get(uint32_t * p_channel_enable)); + +/**@brief Set PPI channel enable register. + * + * @param[in] channel_enable_set_msk Mask containing the bits to set in the PPI CHEN register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_CHANNEL_ENABLE_SET, uint32_t, sd_ppi_channel_enable_set(uint32_t channel_enable_set_msk)); + +/**@brief Clear PPI channel enable register. + * + * @param[in] channel_enable_clr_msk Mask containing the bits to clear in the PPI CHEN register. + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_CHANNEL_ENABLE_CLR, uint32_t, sd_ppi_channel_enable_clr(uint32_t channel_enable_clr_msk)); + +/**@brief Assign endpoints to a PPI channel. + * + * @param[in] channel_num Number of the PPI channel to assign. + * @param[in] evt_endpoint Event endpoint of the PPI channel. + * @param[in] task_endpoint Task endpoint of the PPI channel. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_CHANNEL The channel number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_CHANNEL_ASSIGN, uint32_t, sd_ppi_channel_assign(uint8_t channel_num, const volatile void * evt_endpoint, const volatile void * task_endpoint)); + +/**@brief Task to enable a channel group. + * + * @param[in] group_num Number of the channel group. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_GROUP_TASK_ENABLE, uint32_t, sd_ppi_group_task_enable(uint8_t group_num)); + +/**@brief Task to disable a channel group. + * + * @param[in] group_num Number of the PPI group. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_GROUP_TASK_DISABLE, uint32_t, sd_ppi_group_task_disable(uint8_t group_num)); + +/**@brief Assign PPI channels to a channel group. + * + * @param[in] group_num Number of the channel group. + * @param[in] channel_msk Mask of the channels to assign to the group. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_GROUP_ASSIGN, uint32_t, sd_ppi_group_assign(uint8_t group_num, uint32_t channel_msk)); + +/**@brief Gets the PPI channels of a channel group. + * + * @param[in] group_num Number of the channel group. + * @param[out] p_channel_msk Mask of the channels assigned to the group. + * + * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_PPI_GROUP_GET, uint32_t, sd_ppi_group_get(uint8_t group_num, uint32_t * p_channel_msk)); + +/**@brief Configures the Radio Notification signal. + * + * @note + * - The notification signal latency depends on the interrupt priority settings of SWI used + * for notification signal. + * - In the period between the ACTIVE signal and the start of the Radio Event, the SoftDevice + * will interrupt the application to do Radio Event preparation. + * - Using the Radio Notification feature may limit the bandwidth, as the SoftDevice may have + * to shorten the connection events to have time for the Radio Notification signals. + * + * @param[in] type Type of notification signal. + * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE shall be used to turn off radio + * notification. Using @ref NRF_RADIO_NOTIFICATION_DISTANCE_NONE is + * recommended (but not required) to be used with + * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE. + * + * @param[in] distance Distance between the notification signal and start of radio activity. + * This parameter is ignored when @ref NRF_RADIO_NOTIFICATION_TYPE_NONE or + * @ref NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE is used. + * + * @retval ::NRF_ERROR_INVALID_PARAM The group number is invalid. + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_RADIO_NOTIFICATION_CFG_SET, uint32_t, sd_radio_notification_cfg_set(nrf_radio_notification_type_t type, nrf_radio_notification_distance_t distance)); + +/**@brief Encrypts a block according to the specified parameters. + * + * 128-bit AES encryption. + * + * @param[in, out] p_ecb_data Pointer to the ECB parameters' struct (two input + * parameters and one output parameter). + * + * @retval ::NRF_SUCCESS + */ +SVCALL(SD_ECB_BLOCK_ENCRYPT, uint32_t, sd_ecb_block_encrypt(nrf_ecb_hal_data_t * p_ecb_data)); + +/**@brief Gets any pending events generated by the SoC API. + * + * The application should keep calling this function to get events, until ::NRF_ERROR_NOT_FOUND is returned. + * + * @param[out] p_evt_id Set to one of the values in @ref NRF_SOC_EVTS, if any events are pending. + * + * @retval ::NRF_SUCCESS An event was pending. The event id is written in the p_evt_id parameter. + * @retval ::NRF_ERROR_NOT_FOUND No pending events. + */ +SVCALL(SD_EVT_GET, uint32_t, sd_evt_get(uint32_t * p_evt_id)); + +/**@brief Get the temperature measured on the chip + * + * This function will block until the temperature measurement is done. + * It takes around 50us from call to return. + * + * @note Pan #28 in PAN-028 v 1.6 "Negative measured values are not represented correctly" is corrected by this function. + * + * @param[out] p_temp Result of temperature measurement. Die temperature in 0.25 degrees celsius. + * + * @retval ::NRF_SUCCESS A temperature measurement was done, and the temperature was written to temp + */ +SVCALL(SD_TEMP_GET, uint32_t, sd_temp_get(int32_t * p_temp)); + +/**@brief Flash Write + * + * Commands to write a buffer to flash + * + * This call initiates the flash access command, and its completion will be communicated to the + * application with exactly one of the following events: + * - NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. + * - NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. + * + * @note + * - This call takes control over the radio and the CPU during flash erase and write to make sure that + * they will not interfere with the flash access. This means that all interrupts will be blocked + * for a predictable time (depending on the NVMC specification in nRF51 Series Reference Manual + * and the command parameters). + * + * + * @param[in] p_dst Pointer to start of flash location to be written. + * @param[in] p_src Pointer to buffer with data to be written + * @param[in] size Number of 32-bit words to write. Maximum size is 256 32bit words. + * + * @retval ::NRF_ERROR_INVALID_ADDR Tried to write to a non existing flash address, or p_dst or p_src was unaligned. + * @retval ::NRF_ERROR_BUSY The previous command has not yet completed. + * @retval ::NRF_ERROR_INVALID_LENGTH Size was 0, or more than 256 words. + * @retval ::NRF_ERROR_FORBIDDEN Tried to write to or read from protected location. + * @retval ::NRF_SUCCESS The command was accepted. + */ +SVCALL(SD_FLASH_WRITE, uint32_t, sd_flash_write(uint32_t * const p_dst, uint32_t const * const p_src, uint32_t size)); + + +/**@brief Flash Erase page + * + * Commands to erase a flash page + * + * This call initiates the flash access command, and its completion will be communicated to the + * application with exactly one of the following events: + * - NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. + * - NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. + * + * @note + * - This call takes control over the radio and the CPU during flash erase and write to make sure that + * they will not interfere with the flash access. This means that all interrupts will be blocked + * for a predictable time (depending on the NVMC specification in nRF51 Series Reference Manual + * and the command parameters). + * + * + * @param[in] page_number Pagenumber of the page to erase + * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. + * @retval ::NRF_ERROR_INVALID_ADDR Tried to erase to a non existing flash page. + * @retval ::NRF_ERROR_BUSY The previous command has not yet completed. + * @retval ::NRF_ERROR_FORBIDDEN Tried to erase a protected page. + * @retval ::NRF_SUCCESS The command was accepted. + */ +SVCALL(SD_FLASH_PAGE_ERASE, uint32_t, sd_flash_page_erase(uint32_t page_number)); + + +/**@brief Flash Protection set + * + * Commands to set the flash protection registers PROTENSETx + * + * @note To read the values in PROTENSETx you can read them directly. They are only write-protected. + * + * @param[in] protenset0 Value to be written to PROTENSET0 + * @param[in] protenset1 Value to be written to PROTENSET1 + * + * @retval ::NRF_ERROR_FORBIDDEN Tried to protect the SoftDevice + * @retval ::NRF_SUCCESS Values successfully written to PROTENSETx + */ +SVCALL(SD_FLASH_PROTECT, uint32_t, sd_flash_protect(uint32_t protenset0, uint32_t protenset1)); + +/**@brief Opens a session for radio requests. + * + * @note Only one session can be open at a time. + * @note p_radio_signal_callback(NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) will be called when the radio timeslot + * starts. From this point the NRF_RADIO and NRF_TIMER0 peripherals can be freely accessed + * by the application. + * @note p_radio_signal_callback(NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0) is called whenever the NRF_TIMER0 + * interrupt occurs. + * @note p_radio_signal_callback(NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO) is called whenever the NRF_RADIO + * interrupt occurs. + * @note p_radio_signal_callback() will be called at ARM interrupt priority level 0. This + * implies that none of the sd_* API calls can be used from p_radio_signal_callback(). + * + * @param[in] p_radio_signal_callback The signal callback. + * + * @retval ::NRF_ERROR_INVALID_ADDR p_radio_signal_callback is an invalid function pointer. + * @retval ::NRF_ERROR_BUSY If session cannot be opened. + * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. + * @retval ::NRF_SUCCESS Otherwise. + */ + SVCALL(SD_RADIO_SESSION_OPEN, uint32_t, sd_radio_session_open(nrf_radio_signal_callback_t p_radio_signal_callback)); + +/**@brief Closes a session for radio requests. + * + * @note Any current radio timeslot will be finished before the session is closed. + * @note If a radio timeslot is scheduled when the session is closed, it will be canceled. + * @note The application cannot consider the session closed until the NRF_EVT_RADIO_SESSION_CLOSED + * event is received. + * + * @retval ::NRF_ERROR_FORBIDDEN If session not opened. + * @retval ::NRF_ERROR_BUSY If session is currently being closed. + * @retval ::NRF_SUCCESS Otherwise. + */ + SVCALL(SD_RADIO_SESSION_CLOSE, uint32_t, sd_radio_session_close(void)); + + /**@brief Requests a radio timeslot. + * + * @note The timing of the radio timeslot is specified by p_request->distance_us. For the first + * request in a session, p_request->distance_us is required to be 0 by convention, and + * the timeslot is scheduled at the first possible opportunity. All following radio timeslots are + * requested with a distance of p_request->distance_us measured from the start of the + * previous radio timeslot. + * @note A too small p_request->distance_us will lead to a NRF_EVT_RADIO_BLOCKED event. + * @note Timeslots scheduled too close will lead to a NRF_EVT_RADIO_BLOCKED event. + * @note See the SoftDevice Specification for more on radio timeslot scheduling, distances and lengths. + * @note If an opportunity for the first radio timeslot is not found before 100ms after the call to this + * function, it is not scheduled, and instead a NRF_EVT_RADIO_BLOCKED event is sent. + * The application may then try to schedule the first radio timeslot again. + * @note Successful requests will result in nrf_radio_signal_callback_t(NRF_RADIO_CALLBACK_SIGNAL_TYPE_START). + * Unsuccessful requests will result in a NRF_EVT_RADIO_BLOCKED event, see @ref NRF_SOC_EVTS. + * @note The jitter in the start time of the radio timeslots is +/- NRF_RADIO_START_JITTER_US us. + * @note The nrf_radio_signal_callback_t(NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) call has a latency relative to the + * specified radio timeslot start, but this does not affect the actual start time of the timeslot. + * @note NRF_TIMER0 is reset at the start of the radio timeslot, and is clocked at 1MHz from the high frequency + * (16 MHz) clock source. If p_request->hfclk_force_xtal is true, the high frequency clock is + * guaranteed to be clocked from the external crystal. + * @note The SoftDevice will neither access the NRF_RADIO peripheral nor the NRF_TIMER0 peripheral + * during the radio timeslot. + * + * @param[in] p_request Pointer to the request parameters. + * + * @retval ::NRF_ERROR_FORBIDDEN If session not opened or the session is not IDLE. + * @retval ::NRF_ERROR_INVALID_ADDR If the p_request pointer is invalid. + * @retval ::NRF_ERROR_INVALID_PARAM If the parameters of p_request are not valid. + * @retval ::NRF_SUCCESS Otherwise. + */ + SVCALL(SD_RADIO_REQUEST, uint32_t, sd_radio_request(nrf_radio_request_t * p_request )); + +/** @} */ + +#endif // NRF_SOC_H__ + +/**@} */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_svc.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,33 @@ +#ifndef NRF_SVC__ +#define NRF_SVC__ + +#ifdef SVCALL_AS_NORMAL_FUNCTION +#define SVCALL(number, return_type, signature) return_type signature +#else + +#ifndef SVCALL +#if defined (__CC_ARM) +#define SVCALL(number, return_type, signature) return_type __svc(number) signature +#elif defined (__GNUC__) +#define SVCALL(number, return_type, signature) \ + _Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \ + _Pragma("GCC diagnostic ignored \"-Wunused-function\"") \ + __attribute__((naked)) static return_type signature \ + { \ + __asm( \ + "svc %0\n" \ + "bx r14" : : "I" (number) : "r0" \ + ); \ + } +#elif defined (__ICCARM__) +#define PRAGMA(x) _Pragma(#x) +#define SVCALL(number, return_type, signature) \ +PRAGMA(swi_number = number) \ + __swi return_type signature; +#else +#define SVCALL(number, return_type, signature) return_type signature +#endif +#endif // SVCALL + +#endif // SVCALL_AS_NORMAL_FUNCTION +#endif // NRF_SVC__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/softdevice_assert.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + +/** @brief Utilities for verifying program logic + */ + +#ifndef SOFTDEVICE_ASSERT_H_ +#define SOFTDEVICE_ASSERT_H_ + +#include <stdint.h> + +/** @brief This function handles assertions. + * + * + * @note + * This function is called when an assertion has triggered. + * + * + * @param line_num The line number where the assertion is called + * @param file_name Pointer to the file name + */ +void assert_softdevice_callback(uint16_t line_num, const uint8_t *file_name); + + +/*lint -emacro(506, ASSERT) */ /* Suppress "Constant value Boolean */ +/*lint -emacro(774, ASSERT) */ /* Suppress "Boolean within 'if' always evaluates to True" */ \ +/** @brief Check intended for production code + * + * Check passes if "expr" evaluates to true. */ +#define ASSERT(expr) \ +if (expr) \ +{ \ +} \ +else \ +{ \ + assert_softdevice_callback((uint16_t)__LINE__, (uint8_t *)__FILE__); \ + /*lint -unreachable */ \ +} + +#endif /* SOFTDEVICE_ASSERT_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_softdevice.hex Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,5290 @@ +:020000040000FA +:10000000C0070000D1060000D1000000B1060000CA +:1000100000000000000000000000000000000000E0 +:100020000000000000000000000000005107000078 +:100030000000000000000000DB000000E500000000 +:10004000EF000000F9000000030100000D010000B6 +:1000500017010000210100002B0100003501000004 +:100060003F01000049010000530100005D01000054 +:1000700067010000710100007B01000085010000A4 +:100080008F01000099010000A3010000AD010000F4 +:10009000B7010000C1010000CB010000D501000044 +:1000A000DF010000E9010000F3010000FD01000094 +:1000B00007020000110200001B02000025020000E0 +:1000C0001FB5C046C04600F0EFFA04B00FB41FBD24 +:1000D00008205A49096809580847382057490968CB +:1000E000095808473C2055490968095808474020E5 +:1000F0005249096809580847442050490968095875 +:10010000084748204D490968095808474C204B4981 +:10011000096809580847502048490968095808479C +:100120005420464909680958084758204349096836 +:10013000095808475C204149096809580847602068 +:100140003E4909680958084764203C49096809582C +:100150000847682039490968095808476C20374919 +:100160000968095808477020344909680958084740 +:100170007420324909680958084778202F490968CE +:10018000095808477C202D490968095808478020EC +:100190002A490968095808478420284909680958E4 +:1001A0000847882025490968095808478C202349B1 +:1001B00009680958084790202049096809580847E4 +:1001C00094201E4909680958084798201B49096866 +:1001D000095808479C201949096809580847A02070 +:1001E0001649096809580847A4201449096809589C +:1001F0000847A8201149096809580847AC200F4949 +:10020000096809580847B0200C4909680958084787 +:10021000B4200A49096809580847B82007490968FD +:1002200009580847BC2005490968095808470000D3 +:1002300003480449024A034B7047000000000020B5 +:10024000C0070000C00700000122D84B5A6000BF61 +:10025000D74A1268002AFBD0016000BFD44A126856 +:10026000002AFBD00022D14B5A6000BFD04A12684E +:10027000002AFBD07047F0B505460E46174600240D +:1002800006E0A200B158A2005019FFF7DDFF641C80 +:10029000BC42F6D30020F0BD0120C043C549086030 +:1002A000401048607047014601229204086890425D +:1002B00001D9102070470020FCE7F0B505460C4638 +:1002C0001646002706E028462168FFF7BDFF2D1DD2 +:1002D000241D7F1CB742F6D3F0BD70B505460C4611 +:1002E0002E460BE0304600F075F9FF2C01D80024B3 +:1002F00001E0FF3C013C012080023618002CF1D1C6 +:1003000070BD0146012292044868904201D909203B +:100310007047A9484069401C01D10F20F8E7002030 +:10032000F6E7FEB504462068030000F037FA05043E +:100330002B4249598B00201DFFF7E3FF0546002D96 +:1003400001D02846FEBDFFF7A7FF0120C00200F044 +:1003500041F9042221469948FFF78DFF002801D07A +:100360000320EFE708222146944800F06DF90028A9 +:1003700006D1002192480068FFF766FF00F00CF9F3 +:100380000320DFE7A768E6686068019031463846D9 +:10039000FFF7A3FF324638460199FFF78EFFB20000 +:1003A0003846019900F050F9002800D1CAE703202F +:1003B000C8E700F0E3F9834800688349086041E03A +:1003C00060680190E668A0680090B200009901980A +:1003D00000F03AF90746002F00D1B3E70E20B1E74D +:1003E000201DFFF760FF0546002D01D02846A9E734 +:1003F0006068002807D1FFF74FFF0320800200F05C +:10040000E9F800F0C9F8FFF747FF0120C00200F04B +:10041000E1F8042221466948FFF72DFF002801D0AA +:1004200003208FE708222146644800F00DF90028D8 +:1004300006D1002162480068FFF706FF00F0ACF823 +:1004400003207FE700BF00207CE770B505460C461F +:10045000182D04D12068FFF764FF206002E001201E +:10046000206000BF00BF70BDF0B589B05248406940 +:1004700003905248806881000398081802900398FE +:10048000000B01900121090302984018401E000B47 +:1004900000900124002520462946019A00F0C4F866 +:1004A0000022401E91410791069001260027304608 +:1004B0003946009A00F0B8F80022401E914105919B +:1004C0000490049BDB43059AD2430698184307998E +:1004D00011430791069037490698086007984860CD +:1004E00009B0F0BD70B53448446934488568466841 +:1004F000AA003146204600F0A7F8002801D00020CD +:1005000070BD0120FCE72D484068002801D0012083 +:1005100000E000200546FFF7E5FF002807D0FFF7C1 +:10052000BBFE0320800200F055F800F035F8FFF71D +:100530009BFF002D0ED020484669204884684768FC +:1005400021463046FFF7C9FE224639463046FFF7BE +:10055000B4FE00BF00F020F810B5184844681A48EF +:100560000460204600F0DCF810BD15480068006803 +:10057000401C01D100BFFEE710480068002802D0EF +:10058000042806D101E0FFF7BEFFFFF7E5FF00BF3B +:10059000FEE700BF00BFFEE7BFF34F8F0B480C49DB +:1005A000C860BFF34F8F00BFFEE7000000E50140C9 +:1005B00000E40140000600400010001000080000A8 +:1005C000B8070000BC070000000000200400FA0586 +:1005D00000ED00E010B50146104B1A6808460223F2 +:1005E0000F4C636000BF0F4B1B68002BFBD0531CEC +:1005F00004D0904202D20A4B186101E0084B986087 +:1006000000BF084B1B68002BFBD00023044C636029 +:1006100000BF044B1B68002BFBD010BD0010001066 +:1006200000E5014000E4014010B5202A04DB01464A +:10063000203A9140002010BD914020239C1A03468F +:10064000E3401943904010BD034610B50B439B0790 +:100650000FD1042A0DD308C810C9121FA342F8D025 +:1006600018BA21BA884201D9012010BD0020C04328 +:1006700010BD002A03D0D30703D0521C07E000208E +:1006800010BD03780C78401C491C1B1B07D1037854 +:100690000C78401C491C1B1B01D1921EF1D118463D +:1006A00010BD70477047704710B500F007F810BDD7 +:1006B000014B1B68DB6818470000002019481A49E5 +:1006C0007047FFF7FBFFFFF7FBFC00BD20BFFDE716 +:1006D0001649174C24688C420BD1164B1B68994263 +:1006E0000CD1154B154A1360186810498842EDD09B +:1006F0000AE0134880F30888124B18470F4A13602A +:1007000018680A498842E1D080F308880E49884277 +:1007100004DD0E48026802210A4302605B68184744 +:100720000346DFE7C0070000C0070000FFFFFFFF30 +:10073000000C000014100010001000000000002049 +:10074000000400206B05000000200020240500406C +:100750000D48704502D1EFF3098101E0EFF3088104 +:10076000886902380078182802D1C046074A104725 +:10077000074A12682C3212681047000000B5054B7A +:10078000054A9B58984700BDFDFFFFFF4B04000042 +:1007900000000020001000000400000030B4744687 +:1007A000641E2578641CAB4204D3635D5B00E318D0 +:1007B00030BC18471D46F8E7000C00000010000090 +:10100000901D002079500100ED3D0000DF4F0100F0 +:1010100000000000000000000000000000000000D0 +:10102000000000000000000000000000E950010086 +:101030000000000000000000ED3D0000ED3D00005C +:10104000555101005B510100ED3D0000ED3D0000F8 +:10105000ED3D0000ED3D0000ED3D0000ED3D0000E8 +:1010600061510100ED3D0000ED3D000067510100C0 +:10107000ED3D00006D5101007351010079510100F7 +:10108000ED3D0000ED3D0000ED3D0000ED3D0000B8 +:10109000ED3D0000ED3D0000ED3D0000ED3D0000A8 +:1010A0007F51010085510100ED3D0000ED3D000044 +:1010B000ED3D0000ED3D0000ED3D0000ED3D000088 +:1010C00000F002F813F0B9FF0CA030C8083824185B +:1010D0002D18A246671EAB4654465D46AC4201D170 +:1010E00013F0ABFF7E460F3E0FCCB64601263342CF +:1010F00000D0FB1AA246AB463343184744410100D7 +:1011000074410100103A02D378C878C1FAD8520766 +:1011100001D330C830C101D504680C6070470000AD +:101120000023002400250026103A01D378C1FBD803 +:10113000520700D330C100D50B6070471FB5C046C1 +:10114000C04613F01BFF04B00FB41FBD82690249F3 +:1011500081610248104470476111000001000000E5 +:1011600001B41EB400B510F02FFC01B401988646FE +:1011700001BC01B01EBD0000F0B4404649465246D5 +:101180005B460FB402A0013001B50648004700BF1E +:1011900001BC86460FBC8046894692469B46F0BC01 +:1011A00070470000C1100000401E00BF00BF00BF1C +:1011B00000BF00BF00BF00BF00BF00BF00BF00BF37 +:1011C00000BFF1D17047000070B505460C461646C9 +:1011D00002E00FCC0FC5103E102EFAD2082E02D31B +:1011E00003CC03C5083E042E07D301CC01C5361F2E +:1011F00003E021782970641C6D1C761EF9D270BD45 +:101200008307FF22DB0E9A408907090E99400028C8 +:101210000BDA0007000F0838830828489B001B18CA +:10122000D86990430843D8617047830824489B00DD +:101230001B181868904308431860704710B504469F +:1012400000210120FFF7DCFF00211820FFF7D8FF65 +:1012500000210B20FFF7D4FF02211920FFF7D0FF58 +:1012600002210D20FFF7CCFF02210E20FFF7C8FF5F +:1012700002210F20FFF7C4FF0221C81FFFF7C0FFA4 +:1012800003211620FFF7BCFF03211520FFF7B8FF4D +:10129000204600F019F8002010BD4F210180704752 +:1012A00010B500F03AF810BD0648704710B500F0D0 +:1012B00035F810BD704770477047000000ED00E042 +:1012C00000E400E003F900C330B50446374D95B0A3 +:1012D00007202870A81CFFF7E0FF5920A880344899 +:1012E00001F020FC0546072000F0DCF929462F48D4 +:1012F00000F08CFA641E072C0AD830216846017071 +:10130000847001F0DDFA002802D009A800F0DDFCAD +:10131000284601F083FE15B030BD7047F8B5234E66 +:101320000446B61E307801270D46002807D0204617 +:1013300060380B2808D8204601F096FB2BE0602C83 +:10134000F9D01C480860F8BD20466C38032803D843 +:10135000204601F0CBFB1EE0204670381F2803D842 +:10136000204600F037F816E0204690380F2803D8C2 +:10137000204600F0BBF80EE02046A0380F2803D826 +:10138000204600F023F906E02046B0380F2804D8A4 +:10139000204600F000F9286000E02F60602CD2D1D8 +:1013A00028680028CFD13770F8BD00001A0000204F +:1013B000C33300000130000070477047704770472A +:1013C000704770477047704710B5012801D100F091 +:1013D00042FA10BD10B57038030013F0EBFE150C87 +:1013E00012161E22252C33383D41454950555C6468 +:1013F0006C747B8085004A680878114603F081FF91 +:1014000010BD086803F0F9FF10BD0C790B7B8A68EA +:101410000868214604F005F810BD086804F07EF85D +:1014200010BD03F05BFC10BD08884A6880B211460D +:1014300004F043FA10BD0A790888114680B204F01E +:1014400091FA10BD087840B204F09CFA10BD0888EB +:1014500080B204F0B8FA10BD086804F0C7FA10BDF5 +:10146000086804F0DFFA10BD086804F00AFB10BD3C +:10147000088982B209C9194604F034FB10BD05C9B8 +:10148000114604F082FB10BD08884A6880B21146FC +:1014900004F0A0FB10BD0B7908888A6880B2194659 +:1014A00004F0FDFB10BD0B7908888A6880B21946EC +:1014B00004F0B3FC10BD08884B688A6880B21946F6 +:1014C00004F0F3FC10BD08884A6880B2114604F0AD +:1014D0003EFD10BD088880B204F056FD10BD08889E +:1014E00080B204F076FD10BD012010BD10B590381B +:1014F000030013F05FFE09060F161D242C363F462D +:101500004E0088888A6883B20888194680B205F040 +:1015100093F910BD08884A6880B2114605F0E9F9D0 +:1015200010BD08884A6880B2114605F02DFA10BD3A +:1015300008884A6880B2114605F063FA10BD088831 +:101540004B688A6880B2194605F094FA10BD088984 +:1015500082B2888883B20888194680B205F0C9FA39 +:1015600010BD08894B6882B20888194680B205F020 +:10157000FEFA10BD08884A6880B2114605F02EFBBD +:1015800010BD888882B20888114680B205F0C2FB7F +:1015900010BD012010BD10B5B02805D0B12808D06D +:1015A000B2280BD0012010BD088880B205F0A6FE3D +:1015B00010BD088880B205F0D1FE10BD08884B68C8 +:1015C0008A6880B2194605F0DAFE10BD10B5A03861 +:1015D000030013F0EFFD0B070E172028323C434D9C +:1015E000545D65004B6808788A68194607F017FA59 +:1015F00010BD88888A6883B20888194680B207F0CF +:1016000023FA10BD08884C68CB688A6880B22146EE +:1016100007F02AFA10BD08884B688A6880B219461C +:1016200007F044FA10BD8888CB6884B208888A68BD +:1016300080B2214607F064FA10BD8888CB6884B276 +:1016400008888A6880B2214607F089FA10BD0888A8 +:101650004A6880B2114607F0BDFA10BD088982B20F +:10166000888883B20888194680B207F0BDFA10BD99 +:1016700008884A6880B2114607F0DAFA10BD088976 +:101680004B6882B20888194680B207F057FB10BD3C +:1016900008884B688A6880B2194607F014FC10BDB0 +:1016A000012010BD10B507F0FAFC0FF0A7FF00F005 +:1016B00007F810F0F5F808F0F5F908F081F910BD19 +:1016C00001202B49C00308602A490020087003202C +:1016D0002949800288607047F8B5264D044628786D +:1016E000A04207D0002C05D0002803D023A14D2014 +:1016F00013F06FFC2878A04213D02C700325002330 +:101700002349AD021C48002C27D01B4A214E4032F1 +:10171000214F012C06D0022C13D018A16E2013F0FB +:1017200058FCF8BD0B6002230B604E6185601B49BD +:1017300011625762091D91621749091DD162456006 +:10174000F8BD0B6003230B604E610121C90281606B +:10175000134B9362D7624160F8BD0B600B608560EC +:10176000F8BD10B505A1772013F033FC10BD0000C3 +:1017700080E100E02000002000F501407372635C0E +:1017800068616C5F63636D5F6161722E630000006E +:1017900000F500407C01002000F0004000110040F6 +:1017A000488100401CB50446002069460870204668 +:1017B00009F0F6F86946204608F0B4FF002803D186 +:1017C000FBA1B62013F005FC01A9204608F009FF93 +:1017D000002803D1F6A1BB2013F0FBFB684600787C +:1017E0001CBD70B5F74D002428462C76203084713E +:1017F000C47113F0EDFC2846403804702030847327 +:10180000847484762C74AC7070BDEAE710B50C4615 +:10181000ED4982888A8042884A80007808700846AC +:101820000A38847008F0B3FEFFF7DBFF20460AF0A9 +:101830002FFAE44AE0321146383908461446813816 +:1018400009F020F92146E0480BF0C2FC09F09FF8AE +:1018500013F0BEFC10BD10B50120FFF7ADFD10BDAB +:10186000F8B509F083FDD84DD64C0A3D022802D0C8 +:10187000207C00287CD0207E0026102819D1A0785A +:10188000002803D0CAA1D14813F0A3FBCD48E83803 +:10189000817A89070DD50146267160398989E180F1 +:1018A000C17A217281896181C089A0810120A070E3 +:1018B0002676C44F203FB87C002859D1C4486946D9 +:1018C000808908F02FFF002805D0694668780978DC +:1018D0004018687004E0BD48B5A11D3013F079FBD5 +:1018E000207C002838D0BA488189FF300930406D0B +:1018F0008089814204D0B548ADA1223013F069FB44 +:10190000B348808908F0B4FF002804D1AF48A8A1EB +:10191000283013F05EFB09F022F800281CD0AC48F8 +:101920008089FFF73FFF697840186870A548403804 +:10193000416D20318A7C012A0DD1A54A3E779289DA +:10194000C287C87C20700120B876207E102801D084 +:10195000282800D1267626746978002908D09C486A +:101960008289FF300930C28601870120B8746E7009 +:1019700009F0CCFC002805D1207C002802D0A878F2 +:1019800001F0F4F8F8BDF8B50F460446FFF768FF1C +:101990008C4D403D28788B4E002813D0002F10D15D +:1019A000307E002804D0FF2081A1C63013F011FB47 +:1019B0002C22A91C204613F06FF90E202070002065 +:1019C00028708FE07F4D203DA87B002818D0002F85 +:1019D000F7D1307E102808D0282806D0002804D05F +:1019E000FF2073A1D23013F0F4FA0120E070E87BFD +:1019F000A070287C60700F2020700020A87371E018 +:101A00000121204608F0E4FF002807D0307C0028A0 +:101A100051D13946204608F0DBFFF8BDA97C694862 +:101A20000C38009068480A38002913D0017805293D +:101A300010D2002F56D1491C0170002666700D206F +:101A40002070012028750622A01C009913F024F9AB +:101A5000AE7447E05C4800210A380170B078002875 +:101A600014D0002F3ED1307E002803D050A1594819 +:101A700013F0AFFA002565700120524920700A2248 +:101A8000091DA01C13F008F9B5702BE0394620465B +:101A90000BF008FB002825D1A87C002805D0002FDA +:101AA00020D149480A380178C5E7A87E002802D02D +:101AB000307C002801D00020F8BD002F12D1307EEC +:101AC000002804D08F203AA1800013F082FA00266B +:101AD00066700A203B4920700622091FA01C13F0E3 +:101AE000DBF8AE760120F8BD10B53648017E00293E +:101AF00008D1007C012805D001210020FFF743FF19 +:101B0000002801D0072010BD012010BD10B5012410 +:101B10000AF006F90443FFF7E7FF044308F038FF33 +:101B200001462143084610BDF8B51D4614460E4631 +:101B300008F077FD002807D0684608F07DFD0028F2 +:101B400003D0002C07D101E00120F8BD9B2018A193 +:101B5000800013F03EFA08F01BFDA04204D21D489D +:101B600013A1583013F035FA009808F089F931467E +:101B7000009808F097F9E2B22946009808F04EFB69 +:101B800008F06CFD002804D19F2009A1800013F00B +:101B900020FA08F0FFFE0E4800244030417C002966 +:101BA00002D044740AF0A7F90948C480CCE70000C9 +:101BB0007372635C6C6C5F6374726C2E73302E6333 +:101BC00000000000200300202C00002082060000FE +:101BD000D80100201502000010B50179002908D0B5 +:101BE00001290BD0FF20FE49043013F0F2F9002048 +:101BF00010BD831D42880488022103E042880488C6 +:101C0000831D01212046FFF78FFF10BDF8B51F4649 +:101C100015460E46044609F0A9FB022803D0F148F8 +:101C2000007C00281FD0F0488089208008F020FE2A +:101C3000002803D1EA49ED4813F0CBF905246846A2 +:101C400008F021FE00280ED0009808F063F93070EB +:101C5000022809D0012807D008F055FE641E24068A +:101C6000240EECD10020F8BD3946009808F0EEFAB9 +:101C70002880002804D1AF20D949800013F0A9F9A9 +:101C800008F041FE002804D1D848D549193013F096 +:101C9000A0F90120F8BD38B50446831D821C6946B1 +:101CA000FFF7B4FF00280DD000206071684600786F +:101CB000012808D0022806D0FF20C949253013F09A +:101CC00088F9012038BD2071FBE700215BE670B583 +:101CD000C44C0546403C2078002803D1C148007E12 +:101CE000002804D0C120BE49C00013F072F9287842 +:101CF00008F085FF28780BF0C1FB0020207101203F +:101D000060713921E170207070BD70B5B54D044629 +:101D1000403D2878002803D1B248007E002804D036 +:101D20005F20AF49000113F054F9AF4E2188B0890C +:101D3000884203D109F01AFB022807D0022028713B +:101D4000012068713821E970287070BD7F2070769D +:101D5000A548E17820304174A17801740020EEE7B5 +:101D600010B5A04C403C207800280BD19D48007E47 +:101D7000002807D109F0FAFA032803D009F0FAFA8B +:101D8000032804D199489649653013F022F9954902 +:101D900000202031C8712071012060713A21E1706A +:101DA000207010BD70B58F4C0646403C207800284E +:101DB0000BD18C48007E002807D109F0D7FA032800 +:101DC00003D009F0D7FA032804D1884884497B302E +:101DD00013F0FFF8834D2035E87908280CD2E87914 +:101DE0001022000100196830314600F025FEE87924 +:101DF000401CE871002000E0072020710120607184 +:101E00003B21E170207070BDF8B5764D0446403D31 +:101E10002878002803D17348007E002803D0704939 +:101E2000734813F0D6F8704F2188B889884203D1DF +:101E300009F09CFA022801D0022022E03E8C64883E +:101E40007200788CF98B521C944217D3694A514323 +:101E50009200504312F09AFF401EFF2180B2F531EC +:101E6000884200D90846844200D22046711C401C9A +:101E700012F08CFF761C7043401E86B2FE85EE8009 +:101E800000202871012068713C21E9702870F8BD9C +:101E9000F8B5544C0546403C2078002803D1514801 +:101EA000007E002804D052484D492C3813F091F898 +:101EB000A878002801D0012804D1A888FF21F53195 +:101EC000884204D959204649000113F082F8464E51 +:101ED0002988B089884203D109F048FA022807D03E +:101EE00002202071012060713621E1702070F8BD60 +:101EF0003D48002720308772A988B18501213176BD +:101F0000A978012900D00021817237484030407CF7 +:101F1000002801D009F0EFFF2771E3E770B5314CDD +:101F20000546403C2078002807D12E48007E002836 +:101F300003D109F01BFA002804D02D482849533852 +:101F400013F047F8287809F0EEFE002020710120F8 +:101F500060713021E170207070BD70B5214C054674 +:101F6000403C2078002803D11E48007E002804D081 +:101F70001F481B495F3013F02CF8287800280BD03D +:101F8000012809D0022807D06878402804D31848CF +:101F90001349663013F01DF8284609F0DEF90028D1 +:101FA00001D0002000E00C2020710120607134215C +:101FB000E170207070BD70B50A4C0546403C207839 +:101FC000002807D10748007E002803D109F0CEF988 +:101FD000002804D057200249000112F0FAFF0BE05C +:101FE000B01B000020030020D8010020AA0200003E +:101FF000B6050000C40900002978002913D00A2979 +:1020000011D014290FD01E290DD028290BD0322928 +:1020100009D04B2907D0642905D0FF2903D0FE49F8 +:10202000FE4812F0D6FF284609F0FCFE0020207181 +:10203000012060713321E170207070BD70B5F84CE3 +:1020400006462078251D002804D120464030007E19 +:10205000002804D05520F049000112F0BAFF3146A3 +:10206000002008F0A1FD2870002804D10622314686 +:10207000EC4812F011FE012060713221E1702070F5 +:1020800070BD70B5E64C05462078002804D1204686 +:102090004030007E002804D0A720DF49C00012F0A5 +:1020A00098FF00216956042914D0002912D0081D78 +:1020B00010D0001D0ED0001D0CD0001D0AD0001D38 +:1020C00008D00A3006D0283104D0D448D249443848 +:1020D00012F07FFFD448297801700120607131210E +:1020E000E170207070BD10B5CD4C2078002804D16F +:1020F00020464030007E002803D0C749CB4812F06C +:1021000068FF08F045FAE08008F00AFB2072002022 +:102110002071012060710521E170207010BDF8B5BB +:10212000BF4C07462034A07B25462035002805D12A +:10213000287E002802D1A878002804D0B748B649E4 +:10214000703812F046FF09F011F91026022822D14A +:10215000B7483988808988421DD1B1494839084635 +:102160000A7F6038807A002A03D080070CD40C20C4 +:102170000CE0800708D406200877AD484030407C4A +:10218000002801D009F0B7FE2E760020E0732674F7 +:102190000120A073F8BD0220F8E710B5A04C20780C +:1021A000002804D120464030007E002804D09B48FF +:1021B0009949823812F00DFF002020710E20A07086 +:1021C0000F20E070FF20A0710020C04320819548BF +:1021D000C01D0178A1728188A1814088E081012021 +:1021E0006071207010BD10B58D4C2078002804D18E +:1021F00020464030007E002803D087498D4812F0E9 +:10220000E8FE0821A01D0FF095FA002020710120A2 +:1022100060712B21E170207010BD70B5804D0446B7 +:102220002878002804D128464030007E002804D0B9 +:102230007A487949B13012F0CCFE7D48102221460F +:10224000303800F0F9FB7A481022A118203800F04D +:10225000F3FB774830380FF074FB754910221039C2 +:102260002C46A81D00F0E8FB002020710E20A07075 +:102270002A20E07001206071207070BDF8B5684CB4 +:1022800005462034A07B26462036002802D1307E29 +:10229000002804D067486049E53012F09AFEA9781A +:1022A000052912D0132910D014290ED015290CD0CD +:1022B0001A290AD0292908D03D2906D03B2904D063 +:1022C0005C485549ED3012F084FE28885A4988420E +:1022D00004D958485049F63012F07BFE09F046F810 +:1022E0000C212827022809D151482A888089904248 +:1022F00015D14B484838027E002A01D0E17310E026 +:10230000A97841760121017637760020E0734848AC +:102310004030407C002804D009F0EDFD01E00220AF +:10232000E07327740120A073F8BDF8B53C4F064652 +:1023300038783D1D002804D138464030007E002802 +:1023400004D089203449C00012F043FE31460120F8 +:1023500008F02AFC01242870002807D13048062202 +:1023600060303146054612F097FCAC717C71172045 +:10237000F8703C70F8BDF0B52B4F85B0403F3D7A0A +:10238000064627480078002804D13846A038007E49 +:10239000002804D0D3202049800012F01AFE3078A3 +:1023A000002806D0012804D022481B492C3812F0FE +:1023B00010FE082D4CD21C4820380190C46930789A +:1023C00000283FD0012804D01A4813491E3812F0C3 +:1023D00000FE294608310120884004430120A8401E +:1023E00020430090B1790E4C0802727969000919F6 +:1023F0001043FF3101318881B01C12F0AEFC7178BE +:1024000000020843A9000919C031C862387A401C8B +:1024100038720199009811E0B01B00007E050000A1 +:10242000E00200202500002000040020E706000054 +:10243000D801002079030000FF0E0000C8610020D1 +:10244000207108E029460831012088408443C5E70F +:10245000FE48072101710121FC480B224171C27025 +:10246000017005B0F0BD10B5F84C2078002804D1FB +:1024700020464030007E002803D0F549F54812F090 +:10248000A8FD12F0A5FE00202071012060710A2134 +:10249000E170207010BD10B509F0DDFB002804D0FC +:1024A000EC48EB49583812F094FD08F06FFA08F048 +:1024B00052F80AF07EFE002804D0BD20E4498000D6 +:1024C00012F087FD08F0B3FA002804D05F20E0493D +:1024D000C00012F07EFD12F07BFEDF480024047085 +:1024E000FFF77FF9D9480121047141710222C270BE +:1024F000017010BD70B5D54D04462878002804D170 +:1025000028464030007E002804D0F320D0498000C7 +:1025100012F05FFD20781F2801D8601C04D1CD483F +:10252000CB498F3012F055FD002028712078611CB6 +:1025300008F054FB012068712021E970287070BDFB +:10254000F8B5C24C0646207825464035002802D111 +:10255000287E002804D0BF48BD499C3012F039FDC8 +:102560003078012806D0002804D0BA48B8499D30F8 +:1025700012F02FFD012060710C20207130780027AF +:10258000B64E012808D008F0F1FE032867D008F005 +:10259000F1FE032871D076E008F0E8FE002803D1B0 +:1025A00008F0E8FE002804D008F0E0FE02283DD044 +:1025B00069E008F07EFA002865D0287C002862D106 +:1025C000A64802210C300FF03EF8002806D00F215B +:1025D000B089090212F0DAFBB18100E0B781012273 +:1025E00003219E4807F05AFE9C4808F006FCB0897B +:1025F00007F0D0FF002804D196489549B83012F072 +:10260000E8FCB089002108F0C9F9002804D09148FD +:102610008F49BC3012F0DDFC297F688B09F087FB05 +:1026200000282FD08B488A49C03015E008F0A2FE60 +:10263000002828D1287F002825D0012823D008F0A1 +:1026400038FA00281FD0297F688B09F070FB00281A +:1026500018D080487E49D33012F0BBFC12E0002035 +:1026600009F098FA00280ED12771287C00280AD199 +:10267000B089FFF797F806E0FFE7002009F08AFA33 +:10268000002800D127711B20E07001202070F8BDC8 +:1026900070B56E4D04462878002804D12846403095 +:1026A000007E002804D06B486949803012F091FC0C +:1026B00020781F2801D8601C04D166486449813005 +:1026C00012F087FC002028712078611C08F09AFA2B +:1026D000012068711A21E970287070BDF8B55B4D52 +:1026E000044628780C272E46403600280AD1307E32 +:1026F000002807D108F03AFE032803D008F03AFE7C +:10270000032804D153485249473012F062FC6079E3 +:10271000002801D001282FD1A079002801D001285C +:102720002AD1A07B002805D0012803D0022801D09F +:10273000032821D1607B40071ED0618801208003DF +:10274000814202D82288824201D920790CE0207986 +:10275000002804D0022805D0032803D004E0202953 +:1027600004D209E0A02A01D2012805D1208888429C +:1027700007D92079012804D0364835495C3012F059 +:1027800028FC20887083207930776079002802D077 +:10279000012803D00CE0324A002105E02B4A6032C8 +:1027A0009079002804D00121204608F086F90746D8 +:1027B00001202F7168711821E9702870F8BD70B57B +:1027C000224C05462078002804D120464030007E67 +:1027D000002803D01E49234812F0FBFB08F0C6FD79 +:1027E0000C2102280ED11D482A8883899A4219D1CA +:1027F0000246C032137F002B04D1807E0E2803D006 +:102800000F2801D0217103E00520107700202071EE +:102810000E20A0702E20E0702888E08001206071DA +:10282000207070BD0220F2E770B5084C0546207894 +:10283000002804D120464030007E002804D00948FA +:1028400003492C3812F0C5FB0EE00000E002002026 +:10285000B01B00003E03000000040020D80100204F +:1028600025000020D104000008F080FD0C21022882 +:102870000ED178482A8883899A421FD10646C036ED +:10288000327F002A04D1807E0E2803D00F2801D089 +:10289000217109E06F481022A91CEA3012F0FCF9FE +:1028A00004203077002020710E20A0702D20E070D1 +:1028B0002888E08001206071207070BD0220F2E75E +:1028C00010B501780B0012F075FC3D8787388787BB +:1028D00058878787873B3E878787515487878787B5 +:1028E00087874228872C3087878787348787878721 +:1028F00087878746874A4E872024876B5B5F63679D +:10290000876F877E827B77738700801CFFF78CFF41 +:1029100060E0801CFFF753FF5CE0801CFFF7DEFEE9 +:1029200058E0801CFFF7B4FE54E0801CFFF708FE5F +:1029300050E0801CFFF7DEFD4CE0FFF7ACFD49E006 +:10294000FFF791FD46E0801CFFF715FD42E0801C7B +:10295000FFF7EBFC3EE0801CFFF790FC3AE0801CA8 +:10296000FFF75BFC36E0FFF73EFC33E0FFF715FCBA +:1029700030E0801CFFF7D3FB2CE0FFF7B4FB29E02D +:10298000801CFFF77EFB25E0801CFFF757FB21E052 +:10299000801CFFF710FB1DE0801CFFF7DEFA19E03A +:1029A000801CFFF7BBFA15E0801CFFF771FA11E0FD +:1029B000801CFFF729FA0DE0801CFFF7F3F909E00E +:1029C000FFF7CEF906E0801CFFF79FF902E0801CBC +:1029D000FFF77DF9012010BD002010BD10B51E4984 +:1029E0001E4812F0F6FA10BD70B51D4A01241146BA +:1029F000184D4031030012F0DDFB05191C1C0419B1 +:102A00001C0001220021134807F048FC1448002153 +:102A1000483801774177C03809F005FA002804D01A +:102A20000E480D49D33012F0D4FA70BD0C745565C0 +:102A300070BD09490B48F6E730B5134606E0CC18DF +:102A4000203CE47FD51A44555B1EDBB2002BF6D147 +:102A500030BD0000D8010020B01B0000410600007E +:102A6000E00200204707000010B56038030012F0B4 +:102A7000A1FB0A060A0F13181F262A31363B0868E5 +:102A800000F093FD10BD05C9114600F0ADFD10BD6D +:102A9000086800F04CFE10BD05C9114600F054FE58 +:102AA00010BD4B6808788A68194600F065FE10BDB5 +:102AB0004B688A680868194600F07FFE10BD0868F8 +:102AC00000F09AFE10BD08884A6880B2114600F0F6 +:102AD000EAFE10BD05C9114600F00AFF10BD05C988 +:102AE000114600F01DFF10BD012010BD10B56C286F +:102AF00001D0012010BD087800F0B8FE10BD000024 +:102B000001203F49400608603E4908603E490A6886 +:102B1000FF231B029A4383121A430A603849803903 +:102B20000860704710B502460420384904E0C3002D +:102B30005B181B79002B0AD00346401EC0B2002B45 +:102B4000F5D133A1432012F044FAFF2010BDC30099 +:102B5000CA50002259184A718A7101220A7110BDA7 +:102B60002A4A0021C00080180171704710B5044640 +:102B7000042803D326A1522012F02BFA2348E100A7 +:102B80000C182079012803D021A1532012F021FA3A +:102B90006079A179401CC0B2814200D060710120EF +:102BA000174940068031086010BD70B516480068AE +:102BB0000004800F022803D015A1692012F009FA41 +:102BC000124E194C03252078C10088190279012A78 +:102BD00007D1427983799A4203D042798271705841 +:102BE00080472078401CC0B22070042801D3002008 +:102BF000207028466D1EEDB20028E4D170BD0000A3 +:102C000080E100E080E200E018E400E02C12002007 +:102C10007372635C736F635F7369676E616C6C6919 +:102C20006E672E63000000003C00002010B5EFF33B +:102C30001080C407E40F72B6D6484178491C417031 +:102C40004078012801D10FF065F9002C00D162B65F +:102C500010BD70B5CF4CE07800280AD10125E57091 +:102C6000FFF7E4FF0FF05EF9002804D000200FF01A +:102C700031F9002070BDC84865714560F9E770B54D +:102C8000EFF31080C507ED0F72B6C24C60780028D4 +:102C900003D1C2A18F2012F09CF96078401E6070B1 +:102CA0006078002801D10FF039F9002D00D162B60B +:102CB00070BD10B5B748C178002904D0002141711A +:102CC000C170FFF7DCFF002010BD10B504460FF007 +:102CD00029F9B049C978084000D0012020600020BF +:102CE00010BDF8B50246AB4C0026A67108200421A1 +:102CF00001251027130012F05DFA0D080A0C0E10C2 +:102D00001214161E262123252800257122E00220F8 +:102D100001E021711EE020711CE027711AE02020E3 +:102D2000F9E7012616E0FFF781FF0FF0FBF8002816 +:102D3000FBD002260EE02171A5710BE02771FBE7A5 +:102D4000202000E040202071F6E7FF2093A17E3094 +:102D500012F03FF90FF0F2F8002809D00FF0F4F864 +:102D6000B04205D130460FF0F2F80028FAD024E046 +:102D700001208007C5608D4A002151608C4A966110 +:102D8000854B02225A6085608A4803690569DB43E6 +:102D9000DB06DB175B1C10273D430561834D00E01C +:102DA00020BF6F68002FFBD0002B03D107691023D1 +:102DB0009F430761784882606960A07900280CD041 +:102DC0000FF0B0F805460FF00DF87B4A002D02D049 +:102DD000A260E06001E0E260A060002E01D100F09E +:102DE000B1F8F8BD10B504460FF0A2F8002805D0E0 +:102DF00068490120C8704A78521C4A702046FFF783 +:102E000070FF10BDF8B5694FB8680025012802D1E0 +:102E1000BD600FF05FF87868012800D17D603868E8 +:102E200001265C4C012814D13D606079002803D054 +:102E300000200FF04FF865712078002809D00FF0BE +:102E400071F8002805D05948C0388663000606612D +:102E5000A670386901282CD13D6100F068F8012086 +:102E600080074661A079002815D00FF05BF800902C +:102E70000EF0B8FF0099002901D0E16800E0A168D8 +:102E8000411A022901DA8A1C13DC0099002901D0B9 +:102E9000E06000E0A060FFF7C9FE0FF043F80028F3 +:102EA00006D04248C038866300060661A67000E07E +:102EB0002670F868012819D100F039F800F037F8C9 +:102EC00000F035F8A078002804D1FF2033A10530A8 +:102ED00012F07FF8FD60A5702570FFF7D0FE0EF0B0 +:102EE000F8FA002802D03148C038C663F8BD10B5E2 +:102EF000284CE078002801D10FF010F8012081075C +:102F0000886100F014F8A07800280BD0274CE06806 +:102F1000002803D10FF01BF80028F8D10020E06052 +:102F200000F005F800201C49C043886010BD08B5BA +:102F30005020694608806A461088411E118000288A +:102F4000F9D108BDF8B51448192787601749002042 +:102F50000860C8600EF0E6FFBD0701240D4E002892 +:102F600005D01248C03884632C61B47000E034701E +:102F7000FFF75CFE084847600D4930798863FFF72A +:102F8000D6FFAC61FFF7D3FF0849002008616C61F0 +:102F9000F8BD000040000020000300407372635C35 +:102FA000736F635F636C6F636B2E6300000100409F +:102FB0000005004000ED00E0FFFFFF7F10B510F0BE +:102FC00064F810BD00200449C8630120012181403C +:102FD000024A116000BF7047C01F004080E200E05D +:102FE00010B504460BF095F820460CF0AAF810BD79 +:102FF0007047704770477047704770477047704719 +:1030000010FFFFFFDBE5B151006001004F00FFFF43 +:1030100003B40148019001BD09000020FE49487039 +:10302000704710B5030012F0C5F8080E050E080829 +:103030000B0B0E1104F07DF810BDFFF7D1FF10BD92 +:103040000DF0E8FF10BD01F095FE10BDFF20F3A1CB +:10305000713011F0BEFF10BD7FB5F44905464868D8 +:103060008968082301910090F14A1946F1480EF051 +:103070008BFD0024F0480EF0A5FD641CE4B2082C82 +:10308000F8D3EB490320803140020CF02FF90028DF +:1030900003D0E2A1962011F09CFF1E220221E748F6 +:1030A0000AF0E7FCE5481E22032110300BF05BFA22 +:1030B000E2480722342174300AF034FCDF484C2106 +:1030C000283011F048FEDD496A46743108464C3814 +:1030D0000164FF317B31416401211172039002F0E0 +:1030E000B4F802A80CF050FC002803D0CBA1AA2011 +:1030F00011F06FFFCF4802222421A8380AF012FCF9 +:10310000CC4802222C215C380AF00CFCCC490B2064 +:103110000EF082F8002803D0C0A1B72011F059FFAB +:1031200003F0F4FF03F0F8F904F05AFE6B460022B6 +:103130000821C4A001F070FF002803D0B7A1BE2071 +:1031400011F047FF284605F071F9002803D0B3A11C +:10315000C02011F03EFF8521C900BD4811F0FBFDE4 +:10316000BB49B24A0020135C0C18401CC0B2E3708B +:103170000428F8D3A849002048608870C8707FBD33 +:1031800070B5B44E0546706A94B00C46401C04D12C +:10319000B06AC0430004000C0BD0306AC007C00FF7 +:1031A0002870706A11F0EAFDB06A2071000A60713F +:1031B00013E02B206946087009A968460AF0F8FB5D +:1031C000002803D095A1E42011F003FF012028700E +:1031D00006220AA9204611F05FFD2878002803D0B6 +:1031E0006079C0210843607114B070BDF0B5994C8E +:1031F0000646206895B00D463746401C0837002823 +:1032000008D16068401C05D1A068401C02D1E0686C +:10321000401C11D02068314611F0B0FD6068311DAE +:1032200011F0ACFDA068394611F0A8FDE068314608 +:103230000C3111F0A3FD25E02B206946087009A987 +:1032400068460AF0B5FB002804D0FF2073A10E30B9 +:1032500011F0BFFE08220AA9304611F01DFD2B20F7 +:103260006946087009A968460AF0A2FB002804D044 +:10327000FF206AA1153011F0ACFE08220AA93846D9 +:1032800011F00AFD20692E46401C0836002808D19E +:103290006069401C05D1A069401C02D1E069401C56 +:1032A00012D02069294611F069FD6069291D11F0CD +:1032B00065FDA069314611F061FDE06929460C31D8 +:1032C00011F05CFD15B0F0BD2B246846047009A90F +:1032D0000AF06EFB002804D0FF2050A1333011F01B +:1032E00078FE082209AF0AA9284611F0D5FC6846E5 +:1032F000047009A90AF05CFB002804D0FF2047A154 +:103300003A3011F066FE0822391D304611F0C4FC37 +:10331000D8E710B5002108460EF00CFD0021012071 +:103320000EF008FD002102200EF004FD0021032014 +:103330000EF000FD002104200EF0FCFC0021052011 +:103340000EF0F8FC10BD10B5414CA0780B2804D34A +:10335000FF2032A18A3011F03CFE207860214843E2 +:1033600000190830002101704178E722C908C9001E +:10337000C91C11404170284A0121917010BD70B5DF +:10338000254CA07800280ED0314800250178491C32 +:10339000C9B201700B2900D105708178491C817078 +:1033A0000EF093FDA57070BD70B51B4C05466068AE +:1033B000002804D0FF2019A1B33011F00AFE656087 +:1033C00070BD70B5144E224DFFF7BDFF7168044605 +:1033D000002907D06022FDF7F7FEFFF7D0FF00209D +:1033E0007060F1E72879002876D012485C380AF03E +:1033F000A9FA6060002804D1FF2008A1D13011F0A3 +:10340000E8FD60680AF0FCFA002831D0204600F0A0 +:103410006FFF607801071FE0340000207372635C67 +:10342000686F73745F636F72652E6300E051010013 +:10343000040400200C12002023300000840A002025 +:10344000B41000206E524635313832320000000090 +:103450008C0C00208000001007D5C008C000401C64 +:1034600060702879401E287127E0F74861682AE0DB +:10347000F54861680AF06FFA687900282CD0F248A4 +:103480004C380AF05FFA6060002804D1FF20EF4951 +:10349000F43011F09EFD60680AF0B6FA002816D0EC +:1034A000204603F085FE6078010709D5C008C000FA +:1034B000801C60706879401E6871FFF760FF83E7C9 +:1034C000E14861684C380AF046FA7DE704E0DE48DE +:1034D00061684C380AF03FFA70BDF7B505460078D0 +:1034E000002700090C463E46062803D0D749D84895 +:1034F00011F06FFD287A00280ED0012814D0D4488E +:10350000D249213011F065FD0298002C068001D0CF +:10351000278066800020FEBD02270926002C0ED0E1 +:10352000A889A080A87B08E003271426002C06D0D9 +:103530002869E060A88A2082287B2072E4E702984C +:103540000680E7E770B50E4600211C461980154637 +:10355000030011F02FFE0723050B1711231D230075 +:1035600022462946304603F0EFFD70BD224629462B +:10357000304601F078F970BD22462946304604F005 +:103580002AFB70BD22462946304602F0F9FF70BD85 +:10359000224629463046FFF7A0FF70BD9720AB4971 +:1035A000800011F016FD032070BD10B5A94C2178E4 +:1035B000002901D0082010BDFFF74EFD012020702A +:1035C000002010BD0146A04810B54C380AF0C3F9E0 +:1035D000A1494879401CC0B24871012803D19D48D7 +:1035E0004078FFF7C3FA10BDF8B50546072040073D +:1035F0000F460A18012189038A4209D2002D02D000 +:103600002818884204D2E81C80088000A84201D013 +:103610001020F8BD90488178002911D03988009198 +:103620004178602251430C18083420783B4600074B +:10363000000F00222146FFF785FF060004D015E0A9 +:10364000002038800520F8BD002D13D0398800985F +:10365000814201D90C260DE020783B460007000F7F +:103660002A462146FFF76EFF060005D00C2E01D03A +:10367000002038803046F8BD774D6878401CC0B2D5 +:1036800068700B2801D100206870A878401EA870CF +:1036900061784807400F022810D00128EAD16A4813 +:1036A00061680AF058F92879401CC0B228710128D5 +:1036B000E0D168484078FFF759FADBE7C806D9D46B +:1036C0006068FFF77FFFD5E770B50446634816468C +:1036D0000D46814204D15E485C49C53011F079FC49 +:1036E000012E05D05A485949D53011F072FC70BDF1 +:1036F00058480121C1706620207000202072A581E9 +:10370000A17370BD70B516460D46040001D1FFF7D8 +:103710001AFE662101700121017229680161A988E0 +:1037200081820673002C01D1FFF729FE70BD0721AD +:103730004907012241189203914201D3102070479A +:103740000721017000207047454A10B590420ED302 +:1037500001239B04C21A434B9A4208D3424B98421E +:1037600005D2072252078A18DB139A4201D3102090 +:1037700010BD0DF08AFD10BD394B10B599420ED326 +:1037800001239B04374CCB1AA34208D3364B9942F2 +:1037900005D2E3020124D318A403A34201D31020CD +:1037A00010BD022803D0102801D0092010BD0DF053 +:1037B00092FD0028FAD0052010BD70B5284B984224 +:1037C00012D301239B04274CC31AA3420CD3264BCC +:1037D000984209D2E4020D19DB139D4204D2002A5B +:1037E00004D014199C4201D3102070BD0DF099FD36 +:1037F0000028FAD0072070BD10B504460720400706 +:1038000001212018890394B0884202D3102014B0FB +:1038100010BD01F06AFD002801D01120F7E70F204C +:1038200008A9087369460BA80AF0C2F80028EED16F +:103830006846007A207068464089608068468089C2 +:10384000A0800020E3E70000B01100201C3400003D +:1038500015020000340000208C0C0020FFFF000047 +:10386000006001000000FC1F0040002010B594B073 +:10387000044601F03AFD002801D01120C7E7002CD2 +:1038800001D00720C3E7392168460170002181700B +:1038900009A90AF08DF8002803D02B492B4811F014 +:1038A00098FB0020B3E770B5294C0846E178002961 +:1038B00013D000280FD007225207012385189B033D +:1038C0009D4203D20568AA189A4201D3102070BD08 +:1038D0008288002A03D0012903D0082070BD092066 +:1038E00070BD04F0E1FA0028FAD10021E17070BD4A +:1038F000184A10B5914208D301229204164B8A1A35 +:103900009A4202D3154A914201D3102010BD0246BB +:10391000203A1F2A02D801F01FFC10BD072010BD5D +:1039200007225207012310B58A189B039A4201D33C +:10393000102010BD0246203A1F2A02D801F068FC70 +:1039400010BD072010BD00001C34000079030000EA +:1039500034000020006001000000FC1F0040002037 +:103960008107C90E002808DA0007000F0838800810 +:103970002C4A80008018C06904E080082A4A800030 +:1039800080180068C8400006800F704710B50D20F1 +:10399000FFF7E6FFC4B20420C043FFF7E1FFC0B267 +:1039A000844203D021A11A2011F013FB10BD012184 +:1039B000234A48031060234B00221A60224A5160B8 +:1039C000224A1060224A11601D4980390860704700 +:1039D00001211B4A480310601D4A5160194A002109 +:1039E00011601A490860704710B516490868012827 +:1039F00004D00EA1562011F0ECFA10BD15488068D5 +:103A00000022C0B20A600DF0BBFE10BD10B50D481B +:103A100001680029FCD0FFF7E7FF01200B494003B4 +:103A2000086010BD00ED00E000E400E07372635C2C +:103A3000736F635F68616C5F726E672E6300000076 +:103A400080E100E000D1004000D3004080E200E0CF +:103A500000D0004000D5004030B40121BC48C9026C +:103A60000160CD1005604A030260BA4803681B027A +:103A70001B0A036004680023240A24020460B64879 +:103A80000468240A24020460B44801244460846069 +:103A9000B34C23606360A360B24B19601D601A6071 +:103AA000B14B19601A600121016030BC704710B43D +:103AB0000121A748CC0204600A0202600B060360E1 +:103AC000A64841608160A64900200860486088607F +:103AD000A44804600260036010BC70470121A14843 +:103AE000C9020160C91001607047002805D0012893 +:103AF00005D0022805D19D4870479D4870479D48D4 +:103B0000704710B59CA18B2011F063FA002010BD06 +:103B100070B500219F4CA04DA04A914B002808D0C1 +:103B200001281DD0022822D093A1B32011F051FA10 +:103B300070BD01200004A060A86011601960984B5E +:103B400042109A60974A9060814A0012106096482D +:103B5000016087480160954801609548017070BD1B +:103B600001204004A060A8605160596070BD012030 +:103B70008004A060A8609160996070BDF8B594461B +:103B8000844A854D00240127754E002808D001285D +:103B900036D0022844D078A1E82011F01AFAF8BDF6 +:103BA000891E0902090A01200004906034606860DF +:103BB0007A4A1160012B21D000217D4A7D4B517042 +:103BC00061463D31DC63DF637B4B5C6002249C60BB +:103BD00004241C61744B196074490F60614B891592 +:103BE0001960704B58606048016075487349C16046 +:103BF00086606B49600348601770F8BD0121DCE7FF +:103C000001205C4E40046F4F012B04D134605060A2 +:103C100068603960F8BD9060346068603960F8BDF4 +:103C20000120524E8004684F012BF4D1EEE7674823 +:103C30004068704770B54A4D28680026554C0128E9 +:103C400006D1A068C00303D501200004A0602E6047 +:103C50006868012809D1A068800306D501204004C6 +:103C6000A0606E6001200FF04CF9A868012809D10E +:103C7000A068400306D501208004A060AE60022049 +:103C80000FF03FF970BD10B549490878002818D0E9 +:103C90000120434AC0039060424A400090602C4A91 +:103CA00000121060404A00201060314A10603F4A04 +:103CB000106008704A78002A02D048700FF021F98D +:103CC00010BD0320FAE70120414900060860704753 +:103CD0000120244900060860704701203C49400546 +:103CE0000860704701201F4940050860704731494E +:103CF0000020C86388151B4908607047410A354A8F +:103D0000C005C00D5043801C5143400A081870473D +:103D100010B4314C430B63431B0C5C020C602D4C04 +:103D20006343C31A2D485C0258432A4B400D43435A +:103D3000E31A0124DB0324041B191B1613700A6801 +:103D40001018086010BC704710B50FF0B2F910BD24 +:103D500080E100E008E400E018E400E000B000408A +:103D600040B1004080E200E000E100E048B10040E6 +:103D70004081004044B100407372635C72656D5FC6 +:103D800068616C5F6576656E745F74696D65722ECF +:103D90006300000000B3004040B3004040B5004065 +:103DA00000F5014000830040408500400082004053 +:103DB00050000020C08F004000850040008000407F +:103DC00080F5014044B5004048B5004000B50040D2 +:103DD00000E200E0093D0000378600006F0C0100A2 +:103DE0000E4A12680C498A420AD118470B4A1268D7 +:103DF000094B9A4204D101B50DF0DDFD03BC8E469E +:103E0000074909680958084706480749054A064B03 +:103E10007047000000000000BEBAFECA1C0100206E +:103E200004000020901D0020901D002010B5FA4CC9 +:103E300094B02168087A002836D017206A4610709E +:103E400000A806220931023010F026FF09A96846B1 +:103E500009F0AEFD112825D02168C03189790629E5 +:103E600020D007291ED008291CD004291AD00929DE +:103E700018D00A2916D00B2914D0052912D00028F1 +:103E800003D0E6A1F32011F0A4F82168B82040582F +:103E900006221C30093110F0FFFE2068017A8030C4 +:103EA000806BC17614B010BD3220C7E770B5DA4D13 +:103EB000044629680300C03111F07CF90C077C0B23 +:103EC0001A212E3B48515C677080FF20D3A1093036 +:103ED0006EE0887901286DD009286BD0052869D05B +:103EE0000A2867D00B2865D0FF20CCA10E305FE0F8 +:103EF000887901285ED0FF20C8A1153058E0887964 +:103F0000062857D0072855D0082853D0052851D067 +:103F1000FF20C2A118304BE0887909284AD00A282E +:103F200048D00B2846D0042844D0FF20BBA11E3027 +:103F30003EE0887903283DD007283BD0082839D0B7 +:103F4000092837D0FF20B5A1243031E08879062830 +:103F500030D00A282ED0FF20B0A12A3028E088795E +:103F6000062827D0072825D00B2823D0FF20ABA177 +:103F70002E301DE0887906281CD00A281AD00B287C +:103F800018D0FF20A5A1333012E08879092811D07C +:103F90000A280FD0FF20A1A1383009E0887909282C +:103FA00008D00A2806D0082804D0FF209BA13C3066 +:103FB00011F00FF82868C030847170BDFF2097A100 +:103FC0004130F5E79449C9220968525CD206920F44 +:103FD00005D1A0318A8B824201D1887F70470020B1 +:103FE000704770B504461120207000218A4D617021 +:103FF0002968C031897A002908D003290ED0042904 +:1040000010D0FF2085A16A3010F0E3FF207800096E +:10401000012802D92868807D607070BD0007000FFC +:10402000203002E00007000F30302070EEE730B59E +:1040300003887E497E4C8B4202D09A1FA2421ED238 +:1040400042888A4202D0951FA54218D2934216D8C0 +:1040500083887D24E400A34211D8C088884205D01B +:10406000734D04460A3C2D1FAC4208D2884208D04A +:104070008A4206D05B1C5A43C000824201DD072001 +:1040800030BD002030BDFFB50022099B002802D0C2 +:10409000994205DC5CE0002902D1002004B0F0BDAB +:1040A0000920FBE7845C002C12D085186F780D2F57 +:1040B0004CD010DC3B0011F07DF80A421B2A2A305C +:1040C0003032323A3A42835C002B3FD1521CD2B29A +:1040D0008A42F8DBE1E7122F31D004DC0E2F35D015 +:1040E0000F2F2CD132E0142F11D0152F27D116E02D +:1040F000022CD5D1AB78039C072B237001D25B0730 +:1041000001D40A20CAE7029B01241B7814E0E34390 +:10411000DB0708E0012C08D011E00620BEE70F25E0 +:1041200023072D075B19002BF4D03046B6E7029B1E +:104130001B789C070AD402242343029C2370835CCF +:10414000521C9A18D2B28A4204DDA9E70B20A5E7D7 +:10415000192676028A42A5DB9FE705E00278401C1B +:10416000002A01D0002070470A46491E89B2002A61 +:10417000F4D10120704730B5274D0021286887B061 +:10418000C943A030818300248477214606200DF0A6 +:10419000D1FD002105200DF0CDFD002102200DF004 +:1041A000C9FD0120FFF782FE28686946C030C4714E +:1041B00004720120087068460BF007FC07B030BDA0 +:1041C00030B5154C95B02268C0329279042A0CD0D3 +:1041D000052A0AD028236A4613705080132906D076 +:1041E0003B2904D0072015B030BD0820FBE7117132 +:1041F000104609A909F0DCFB05000BD12068C0308E +:104200008179062916D0082914D0072912D0052053 +:10421000FFF74CFE2846E6E7540000207372635C0B +:104220006761705F636F72652E630000FFFF0000BF +:104230007B0C00000420EBE730B587B0040003D00E +:10424000002107200DF076FDFE4D012128686A4609 +:1042500001720421117003210C300DF06BFA2968F2 +:104260004022887B8006800E1043887368460BF0DE +:10427000ACFB00280DD12968098A00299ED0002CAA +:104280009CD08B000122002107200DF0AEFC0728F6 +:1042900001D0032092E7002090E770B50025064684 +:1042A000002803D0002107200DF044FDE54C01213A +:1042B00020680172062109300DF03CFA2068817BEC +:1042C0008906890E8173FFF7B1FD2068008A0028F6 +:1042D0000AD0002E08D083000122002107200DF013 +:1042E00084FC072802D00325284670BD0025FBE783 +:1042F000F0B59BB0040004D11920D349400110F05F +:1043000068FE72202070616800260A780825521F16 +:104310000127CC48130010F04DFF0F0976D9FD7628 +:1043200078FCFBB576767676FAF97600C5480068B3 +:10433000C0308079032803D0C349C44810F049FE37 +:10434000002108460DF0F6FC002107200DF0F2FCDC +:104350006078BC4A28436070106810250146C0315F +:104360004B7A2B434B7263689D783C2D48D00246B4 +:104370009D88A032977763688030DB890B80636803 +:104380001B8A4B8063685B8A8B8095836168826B34 +:10439000C97911756168806B08311530062210F0FB +:1043A0007BFC0620FFF782FDA648CA210068FB229D +:1043B0000E54017E11400176B82109588A7A92087C +:1043C00092008A724682284602F0ACFE002804D091 +:1043D0009E489D491A3010F0FCFD284602F0BCF8BA +:1043E000002804D0994898491D3010F0F2FD284665 +:1043F00003F008FD002806D069209349C0003EE183 +:104400000120FFF753FD1BB0F0BD064600688F8802 +:10441000C0308079062812D0072810D008280ED086 +:1044200004280CD009280AD00A2808D00B2806D066 +:10443000052804D0D5208449800010F0CAFD60789A +:10444000284360703068C030417A294341728079D6 +:10445000092811D00A280FD00B280DD005280BD021 +:10446000FFF789FE384602F062FE384602F07AF81D +:10447000384603F0FDFCC6E7FFF77DFE0220FFF79C +:1044800015FDEFE70068C0308079062812D00728B4 +:1044900010D008280ED004280CD009280AD00A28E9 +:1044A00008D00B2806D0052804D06F206649C0002C +:1044B00010F08FFD6068807902F0F1FE0028A2D034 +:1044C0006178294361706168C8809CE7074600688D +:1044D000C0308079062812D0072810D008280ED0C6 +:1044E00004280CD009280AD00A2808D00B2806D0A6 +:1044F000052804D055485449623010F06AFD6078B0 +:10450000284360706068C188386804E032E197E150 +:1045100084E084E00FE0C030018061680989418057 +:10452000616849898180002102200DF003FC386810 +:10453000C030C67167E706460068C030807906283B +:1045400019D0072817D0082815D0042893D0092897 +:1045500011D00A280FD00B280DD005288BD03B484E +:104560003949793010F035FD3068C0308079042841 +:10457000ABD00528A9D03068807C40063AD5606869 +:1045800002210C30FFF7E9FD002833D060680821D4 +:10459000001DFFF7E2FD00282CD03168B8204058FC +:1045A000807A800708D1CA20405C002808D1488A58 +:1045B000C20505D5C00703D14A8A402082434A82FA +:1045C0004A8A802082434A822D2268460270BC209B +:1045D000425A684642801022973101A810F05CFBD5 +:1045E00009A9684609F0E4F90028A3D0174816493C +:1045F000A03044E062683068AC2192890A52616858 +:104600000822091DAE3010F047FB10A80574306871 +:10461000AE30159014A80BF0D8F9F4E68F71064669 +:104620000068C030807906281FD007281DD00828D0 +:104630001BD00428F1D0092817D00A2815D00B2840 +:1046400013D005E0540000201C42000029030000A4 +:104650000528E2D0F949FA4810F0BBFC3068C030B8 +:1046600080790428D9D00528D7D0606881790029BD +:1046700002D08078002805D0F148F0496C3010F065 +:10468000A8FCC0E66078B8212843607030680958FB +:10469000897A8907890F012952D1817C09064FD473 +:1046A000017E490701D5042100E00321C030817259 +:1046B0002B206946087009A9684609F079F9002895 +:1046C00004D0DF48DD49213010F083FC69463068B2 +:1046D000098D81820E2210A90A74DA49B822159137 +:1046E000125808324A61024660324A6092790A7072 +:1046F000024614320A61521D8A601032CA60133AAF +:104700008A619632CA61921C0A62473A4A62103242 +:104710008A621032CA62473ACA63521E0A64921F02 +:1047200050304A64886414A80CF038FB022815D075 +:10473000002813D0C248C1494A3010F04AFC0DE0AD +:10474000817C4906017E490701D5042100E003214F +:10475000C0308172002106200DF0ECFA3068418AE9 +:104760000A0602D440229143418289B280229143B9 +:10477000418248E6B4480068C0308079032804D0FC +:10478000AF48AE49783010F024FC002108460DF007 +:10479000D1FA002107200DF0CDFA6078AA4A28430B +:1047A0006070106810250146C0314B7A2B434B7264 +:1047B00063689D783C2D00D122E602469D88A03298 +:1047C000977763688030DB890B8063681B8A4B8036 +:1047D00063685B8A8B8095836168826BC979117588 +:1047E0006168806B08311530062210F055FA0620FA +:1047F000FFF75CFB9448CA210068FB220E54017E3F +:10480000114001764682284602F08CFC002804D034 +:104810008B488A49923010F0DCFB284601F09CFE60 +:10482000002804D086488549953010F0D2FB2846F0 +:1048300003F0E8FA00289CD08148804997301EE7B1 +:10484000607828436070DEE500290BD088807E48C0 +:104850000068C0300288CA8002880A8142884A8182 +:10486000808888817047F7B5064600780C46002797 +:10487000010982B03D46012974D073480068009058 +:10488000C03002296FD0072904D00A296CD06B49A7 +:104890006E48E3E171680A78521F130010F08AFC39 +:1048A0000F09A551A5A52F585847A5A5A5A5656F22 +:1048B000A5008A783C2A1BD010271625002C7DD015 +:1048C0008888A0807068A21DC08920827068C08915 +:1048D000E0817068008A60827068408AA082716896 +:1048E00008460831C07901F09FFB0020607375E035 +:1048F00019270725002CE2D00021A17171E01127B2 +:104900000725002CDBD089880091A1807168F722EF +:104910008979A171417A11404172009802F008FC36 +:10492000009801F023FE009803F0B0FAC1E10127DE +:104930000925002CC3D08888A080706880792072F7 +:10494000B7E1888812270E252146FFF77DFFB0E1E9 +:1049500018270825002CB2D08888A080A01DFFF75A +:1049600040FBA6E145E0A1E15DE01A270725002C08 +:10497000A5D04888A08070680079A07199E18A78F4 +:104980003C2AB5D010271625002C98D08888A08006 +:104990007068C08920827068C089E0817068008A70 +:1049A00060827068408AA0827168607B497D40089F +:1049B0004000C907C90F0843607300E036E1716821 +:1049C000C007497DC00F49084900084360737168FA +:1049D000A21D08460831C07901F026FB1A4800687C +:1049E000C030417AEF22114046E1532013490001C3 +:1049F00034E1307A012803D014481049C5382DE13C +:104A000012270E2570892146FFF71EFF002C91D03A +:104A100070784007400F032888D10B480068C030E9 +:104A2000417AFB22DFE708490968A031002C01D058 +:104A30008A8BA280327A921E0AE000001C4200009B +:104A4000ED030000AC120020540000200C06000012 +:104A5000130010F0AFFB073D4853EDEE6F05ED007E +:104A600013270C25002C90D0009900224A82F1686F +:104A700089788907890F0129217A26D049084900B8 +:104A80002172FD231940F3689B785B07DB0F5B0005 +:104A900019432172E323E2801940F3681B785B0716 +:104AA000DB0E19432172DF231940F3685B78DB07C3 +:104AB0009B0E194321726272F1680122C978A172BA +:104AC000017A1143F7221140ADE001231943D7E7E2 +:104AD00015270C25002C9AD0F06806220068A11D2D +:104AE0000EF07CFFE5E016270725002C8FD0317BE8 +:104AF000A171017A08221BE00172DAE01427122565 +:104B0000002C84D00098A21D8030806B01461531A6 +:104B1000007D01F089FAB089E081207C0121084301 +:104B2000F92108402074FE480068C030017A022252 +:104B30001143E1E717273825002C77D03221A01D3B +:104B400010F007F90020A071207A03210843207299 +:104B5000FB210840F24909680A7E5207D20F9200F1 +:104B600010432072B8204058807A800757D0A07A2E +:104B70008A7C4008D2074000D20F1043FD2210402B +:104B8000A0728B7CFB229B07DB0F10409B0018431D +:104B9000A0728B7CF7269B07DB0F3040DB001843AD +:104BA000EF231840A072E07A10408A7CD206D20F20 +:104BB00092001043E0728A7C3040D206D20FD200BD +:104BC0001043E072888AA0812046102267310E309F +:104BD00010F062F8D249A07F0968C0078A7DC00F33 +:104BE00052001043A0770A7E400852074000D20FBF +:104BF0001043A077084640304DC820344DC4303CA7 +:104C00003F20405C22463032393101F00DFAC44871 +:104C100000688030806B817A890889008172C04881 +:104C20000068C030017AFB22114065E737E000E000 +:104C300038E0327B022A14D017273825002C2ED0DA +:104C4000017AFB2319400172012A17D0032A17D0D9 +:104C5000042A18D0052A16D0B249B34810F0B9F981 +:104C600027E019270725002C19D0898BA180012165 +:104C7000A171417A4908490041721AE0012000E01F +:104C80000220A07106E0707B0007000F8030A07149 +:104C9000052A02D00020E0710BE00120FBE7049818 +:104CA00005800CE0A0489F490A30D7E7317A0029F7 +:104CB00008D00498002C058001D027806580002052 +:104CC00005B0F0BD19270725002CE8D00021C94305 +:104CD000A1800021A171417AFD2284E610B5904C9B +:104CE00094B02068C0308079022809D0032807D00A +:104CF000052805D0092803D00A2801D00B2837D170 +:104D00001B2108A801730021817369460BA808F0D4 +:104D10004FFE002804D1684640781B2802D00320AB +:104D200014B010BD002108460DF004F80021072042 +:104D30000DF000F868468078002819D12068C0304E +:104D40008079801E030010F035FA0A060613081356 +:104D500013130D0F1113012000E00420FFF7A6F834 +:104D60000020DDE70620F9E70720F7E70820F5E750 +:104D70000820D5E770B50025694C002807D0022827 +:104D800017D0072828D033206649400146E0FFF7B6 +:104D9000A5FF00280CD1FEF7D6FA2221017005727A +:104DA000FEF7EDFA2068C030417A022211434172C9 +:104DB00070BDFEF7C8FA122101700121017221684D +:104DC000BC22525A4281C031CD71FEF7D8FA206818 +:104DD000C030417A0422E9E72168C620405C0228FD +:104DE00009D0032807D0092805D00A2803D00B28AA +:104DF00001D00528DCD1887B8109012911D08009E7 +:104E000004D0494847496E3010F0E3F80020FFF71E +:104E100044FA0028CCD044484249723010F0D9F806 +:104E200070BD0020FFF708FAF3E770B50D460400E7 +:104E300004D1CD203B49C00010F0CBF820780128E8 +:104E400005D0394837499D3010F0C3F870BDA188AE +:104E50003648334E814209D1E288824206D1306819 +:104E60001321A030808BFFF7ABF970BD814202D1D6 +:104E7000E08800280AD012202870687808210843AA +:104E8000687007CC083507C5002106E000227823AA +:104E9000114602200CF0A9FE02213068C030C17119 +:104EA00070BD1F480068C030807A704738B51C4C10 +:104EB00005460278206813000146C03110F07AF9E7 +:104EC00009A8060909A21945728AA800FEF7AEFFD3 +:104ED00038BD8879062806D0092804D0124811491F +:104EE000B53010F076F820680422017E1143017677 +:104EF00088E0A9880029EBD0A030808B0B4988423C +:104F0000E6D0A868002804D107480649C53010F04B +:104F100060F8A8680A38A8600090AB88206807E0AD +:104F2000540000201C420000E9050000FFFF0000C3 +:104F3000A030808B0622042102F028F80028C7D078 +:104F4000F849F94810F045F838BD287902288879E1 +:104F50000DD00428F8D00528F6D0284601F075F8C1 +:104F600020681321A030808BFFF72AF938BD07286D +:104F700006D00A2804D0EC48EA490A3010F029F893 +:104F8000284601F062F820680122C030417A1143BE +:104F900041728079072803D00920FEF787FF38BDCA +:104FA0000620FAE7887906280AD0042808D00928BC +:104FB00006D0052804D0DC48DA49313010F009F871 +:104FC0000ECDDA480361C2608160A2210170FEF754 +:104FD000EBF938BD8879062818D0072816D009289B +:104FE0000DD00A280BD0D048CE4944300FF0F1FF45 +:104FF0002068C0308079062808D0072806D00B200A +:10500000FEF754FF284601F020F838BD0820F7E7E6 +:10501000C548C449583095E7FFB593B001246846A8 +:1050200003218470C9021D4601800AF0A6F90022FE +:105030006946012003F0ABF906460AF0A2F9002EFA +:105040005CD16846152184704902018000271C212B +:1050500001A808970FF07FFE01200146103108A833 +:1050600001700020014608A841708178F9200140B4 +:10507000891C214308A881706846017902263143C2 +:10508000017114998185C7851F21018608A80A909E +:1050900013980D90684609900AF06FF90EAA09A9B5 +:1050A00001A802F036FF07460AF06BF9002F02D084 +:1050B000384617B0F0BD9E4F68463968008F48806B +:1050C000684684709B49018008A88078F9210840CF +:1050D000801C4108490008A88170684686850686BC +:1050E00015A80D900AF049F90EAA09A901A802F025 +:1050F00010FF06460AF045F9002E01D03046D8E7E9 +:1051000068463968008F88808A4968468470C91C5F +:105110000180298810A8018069884180A988818040 +:10512000E988C180082168468185018610A80D9014 +:105130000AF023F90EAA09A901A802F0EAFE044622 +:105140000AF01FF9002C01D02046B2E76846396802 +:10515000008FC8800020ACE7F0B5774D95B00C46C5 +:10516000A9423FD30126B604744FA11BB94239D3DB +:1051700073498C4236D2202806D0212827D02228F5 +:1051800042D0072015B0F0BD3C216846017021884F +:1051900041806188818009A908F00AFC0028F1D1CA +:1051A00008A98979002903D002290ED00320E9E754 +:1051B0006168A942E6D38A1BBA42E3D3604A9142AE +:1051C000E0D26A46128D0A80DCE75E48DAE72068A2 +:1051D000574C002813D00721490701224118920398 +:1051E000914201D31020CDE706210EF0E1FB2168AA +:1051F000A82250500120A03188750020C2E7206805 +:105200000021A0308175F8E7204600F02AFFB9E7B9 +:10521000494A10B5914208D301229204474B8A1A99 +:105220009A4202D3464A914201D3102010BD202851 +:1052300005D0212803D0222803D0072010BD062046 +:1052400010BD084600F051FF10BD70B50446374848 +:10525000CC21AC300FF07FFD3448354EAC3000210E +:105260003060C943A0308183002585770120FEF797 +:105270001DFE3068C7210D54E121C57389000182EC +:10528000B6210D54014609310830FDF779FF316828 +:10529000084629311930FDF7A9FF002C24D03068C9 +:1052A00080308463FEF7C2FD1E20E081607A8F218A +:1052B0000840303060723068014614312161983105 +:1052C0006162933921601031616025721339A162E6 +:1052D000091FE1628531E163303921631031616377 +:1052E00010310930A163A06470BD11480068C0305E +:1052F0008079042803D0052801D0002070470120C0 +:10530000704770B506460C480C46814208D3012010 +:1053100080040A49201A884202D30948844213D3E0 +:10532000102070BD1C420000B30600004C1200208B +:1053300054000020012A0000006001000000FC1F52 +:105340000040002002300000FFF7CFFF002801D00E +:105350001120E6E7FD48FE4D002E02D0012E46D179 +:105360002FE02278002A0AD00121012A09D0022A3E +:1053700014D0032AD5D1A2799209D2D112E000210A +:1053800003E0A2799209032ACBD128680622017290 +:1053900060308171611C0FF07FFC05E0A2799209F9 +:1053A000012ABED128680172002107200CF0C2FC3E +:1053B00028680622611C09300FF06EFCFEF736FDEE +:1053C00011E02178002912D0012910D0022910D033 +:1053D0000329A6D10120FEF760FF002803D0DD4994 +:1053E000DD480FF0F6FD2868C673002099E7072016 +:1053F00097E70120FEF720FFEFE707214907012289 +:1054000010B541189203914201D3102010BDD0492C +:10541000024609680B7A0931184600F005FE0020A3 +:1054200010BDFFB599B005460020694608710872A5 +:1054300008A9087408751E4614460121C748890446 +:10544000C74AC84B002D06D085420DD36F1A97422C +:105450000AD39D4208D2002C09D0844204D3601A9A +:10546000904201D39C4202D310201DB0F0BD2846CB +:10547000204318D01F270CAB01AA009728461A9981 +:10548000FEF701FE0028F0D10DAB02AA31462046FE +:105490000097FEF7F8FD0028E7D16846007AC107BB +:1054A00003D00A20E1E70720DFE7800705D568463B +:1054B0000079800701D50B20D7E7FFF716FF0028FA +:1054C00001D01120D1E703AF002D0FD01A2069467B +:1054D00008731A9888732946F81C1A9A0FF0DCFB97 +:1054E0000EA903A808F064FA0028BED1002C0ED043 +:1054F000202168460173867332462146F81C0FF05E +:10550000CBFB0EA903A808F053FA0028ADD19049AF +:1055100008A80968007C08700020A6E7F0B50446DA +:105520008E48002795B084426FD301208004211A51 +:105530008B488142F8D38B48844266D22378012B72 +:105540000BD1864960688842EED39904421A844997 +:105550008A42E9D383498842EFD27D490A681546D9 +:10556000C035A879022814D0032812D0052810D0FD +:1055700009280ED00A280CD00B280AD0012803D005 +:10558000002B06D0012B04D0687AC506AD0F06D1DA +:1055900001E00820F6E5850701D4400701D5112078 +:1055A000F0E5012B15D0208A6F4E0546203DB5420F +:1055B0007ED2022B01D0032B01D1A02878D3012B5E +:1055C00007D01078C00704D0608A002870D0B428B3 +:1055D0006ED8002B06D0012B08D0022B04D0032B51 +:1055E00066D110E0002512E0022510E06068012578 +:1055F000007800280BD0012808D0022806D0032804 +:1056000004D05248BEE5032501E066E00127D07BC7 +:1056100001281CD1108A002819D0907B810901290A +:1056200011D0800904D04C484A49E4300FF0D1FC35 +:105630000120FEF732FE00280BD047484549E830EC +:105640000FF0C7FC05E00120FEF7F6FDF3E7FEF7DB +:10565000EDFB207A002806D0012806D0022806D0CB +:10566000032825D105E0002604E0012602E00226F9 +:1056700000E00326002D01D0022D42D1002E40D0A3 +:10568000E068002814D00179002928D008290FD813 +:10569000027B9446082A0BD800290ED02F4A0168B5 +:1056A00091421AD3012292048B1A2D4A934200E0B0 +:1056B00084E012D32B4A91420FD26146002912D0C6 +:1056C00080682649884208D301218904421A244966 +:1056D0008A4202D32349884205D3102052E5027B37 +:1056E000002A6BD0D4E71A4800680078800702D0FF +:1056F0001648401E46E5022D03D1022E5ED0032E31 +:105700005CD0182168460170218A4180218A8180FD +:1057100085710F480068007A002801D0012870D1F7 +:105720006946C8716846077221780930012932D06C +:1057300006210FF00EFB07216846C173067409A904 +:1057400008F036F90028C9D10A210FE00232000022 +:10575000540000201C4200005F08000000600100AF +:105760000000FC1F00400020E13F0000684601707F +:1057700009A908F01DF90028B0D13A20694608703F +:1057800009A9684608F014F90028A7D1002D08D00F +:10579000022D06D04CE061680622491C0FF07CFA0D +:1057A000C9E7002E44D00026374623E00168B00048 +:1057B00009580978002903D0012904D00720E1E421 +:1057C00069468F7002E001216A469170E168062205 +:1057D0000968095800A8491C03300FF05DFA0B2036 +:1057E0006946087009A9684608F0E2F80028E6D181 +:1057F000761CF6B2E0680179B142D7D800266F4630 +:1058000012E050E08068B10041581022B81C0FF03F +:1058100043FA3B206946087009A9684608F0C8F8B1 +:105820000028CCD1761CF6B2E068017BB142E9D801 +:105830001B20694608700120887009A9684608F095 +:10584000B7F80028BBD108A840791B282BD1002D20 +:105850000AD0012D04D0022D08D0032D18D105E067 +:105860000320FEF723FB26E003200FE0FE4800683C +:10587000C030807903000FF09DFC0916061616183B +:1058800016081A1C1600022000E00920FEF70EFB85 +:10589000608A00280FD000228300114610460CF0C9 +:1058A000A4F9002807D003206CE40520EEE70A20C5 +:1058B000ECE70B20EAE7002064E470B586B00C004A +:1058C00006460BD0E94884424AD301208004E849C7 +:1058D000201A884244D3E748844241D2E24D2868E6 +:1058E000C030C179022902D0407A400702D5112088 +:1058F00006B016E5002C04D02046FEF798FB0028E1 +:10590000F6D13046FEF75EFB012803D0022823D0F3 +:10591000D948EDE721001BD1082069468882286814 +:1059200001ABC08805AA002103F019F90028DFD1D6 +:105930006846808A082801D00320D9E76846818814 +:105940008181C188C181018901824189418203A984 +:10595000304601F074FCCBE7002C01D00620C7E7ED +:105960001020C5E770B50C460546FEF72BFB012855 +:1059700003D0022801D0C048D3E421462846FEF7D0 +:105980001FFCCEE400B50146143095B0192801D2B1 +:10599000880707D008461E3004D00A3002D00720FE +:1059A00015B000BDFFF7A1FC002801D01120F7E7DA +:1059B000AD4831220068417068460270817009A9C3 +:1059C00007F0F6FFECE701B582B0022069460880D7 +:1059D000A54802AB00686A468088002102F02AFFD1 +:1059E00069460988022900D003200EBD38B502217E +:1059F0006A4611800721490701224118920391420A +:105A000001D3102038BD9849034609686A468C883E +:105A10000021204603F0A3F8694609880229F1D045 +:105A2000032038BD3EB504460820694608808F48EB +:105A3000844208D3012080048D49201A884202D371 +:105A40008C48844201D310203EBD2046FEF7EFFA79 +:105A50000028F9D12088694688806088C880A0889D +:105A60000881E0884881804801AB00686A46C088A8 +:105A7000002102F0DFFE694609880829E4D00320EE +:105A80003EBD1FB504460820694688817748844298 +:105A900008D3012080047649201A884202D3754831 +:105AA000844202D3102004B010BD6F486B460068DA +:105AB00003AAC088002103F052F80028F3D16946F8 +:105AC0008989082901D00320EDE7694609882180EA +:105AD00069464988618069468988A1806946C98884 +:105AE000E180E0E7FEB50546604817460E46814274 +:105AF00008D3012189045E4A731A934202D35D4B95 +:105B00009E4201D31020FEBD1F2F01D90C20FEBDE7 +:105B1000554C85422AD3681A904227D39D4225D2FC +:105B2000206801A9408802F037FE0028EFD12878CC +:105B300069464871206801A9408802F010FE0028DB +:105B4000E5D169460090087802210843694608704B +:105B50004979090703D0082108436946087020687D +:105B60006946408802F0A5FD0028D0D169460F8122 +:105B700020683346408802AA002102F05BFE694695 +:105B80000989B942C3D00320FEBD38B50C460721B0 +:105B9000012249079203002802D04318934202D2FF +:105BA0006118914201D3102038BD21886A461180C6 +:105BB000002801D000290BD02B49034609684D88E5 +:105BC0000021284602F0CBFF69460988218038BDB4 +:105BD0000C2038BD30B50C46244987B08C4208D320 +:105BE00001218904224A611A914202D321498C423F +:105BF00002D3102007B030BD1B4D2968C0310A7A8E +:105C0000520708D48979491F0B000FF0D3FA050415 +:105C10000604040604000820ECE7FEF7D3F9012887 +:105C200003D0022839D01448E4E720881E2801D286 +:105C30000720DFE72868C030807906282BD00A20AB +:105C4000FEF734F90520694608700879A1788008C4 +:105C5000C9078000C90F084369460871FB21084045 +:105C6000A1788907C90F09E05400002000600100F5 +:105C70000000FC1F004000200230000089000843A3 +:105C8000694608712088C880684609F09EFE002891 +:105C9000B0D00320AEE70720D2E70620AAE7F0B590 +:105CA00087B014460D46FEF78DF9012804D002286E +:105CB00002D0FE4807B0F0BDFD4B18680146C03168 +:105CC0000A7AD20707D08A79042A04D0052A02D09A +:105CD000002D02D052E00820ECE7F64A944208D3A7 +:105CE00001229204F44BA21A9A4202D3F34A94423C +:105CF00001D31020DEE7A278D206520F042A0CD876 +:105D0000E378072B09D3102B07D822799A4204D3C2 +:105D1000102A02D822881E2A01D00720CAE702468C +:105D20008032966BF727F372966B23793373966BF9 +:105D3000737A3B40A778BF06FF0FFF003B437372A7 +:105D4000966B2388F381966BA778B37AFF079B083D +:105D50009B00FF0F3B43B372FB273B40A778966B3A +:105D6000BF07FF0FBF003B43B372926BA478537A17 +:105D7000E406DB08DB00640F234353720B226B46FF +:105D80001A70852D22D008DC002D17D0812D17D058 +:105D9000822D17D0832D08D116E0862D18D0882D9E +:105DA00018D0892D18D08A2D18D00B221A71B6223E +:105DB000125CBF4C002A13D0A83012E00022F5E795 +:105DC0000122F3E70222F1E70322EFE70522EDE7E4 +:105DD0000622EBE70822E9E70922E7E70A22E5E7DE +:105DE00000200290887907280BD0082809D00920C4 +:105DF000FEF75CF8684609F0E8FD002803D00320B0 +:105E000058E70620F4E720680422C030017A4908E8 +:105E100049001143017200204CE770B5A44E0D46B5 +:105E2000316886B0C031097A1446090701D40820C8 +:105E30005EE5FEF7C7F8012803D0022801D09B4891 +:105E400056E5002D12D09B48844208D301208004DF +:105E50009949201A884202D39848844201D31020DD +:105E600046E5012D0BD0022D02D106E0002C01D019 +:105E700007203DE50020029005E0022000E001201F +:105E8000694608710294032069460870684609F063 +:105E90009CFD002801D003202AE53068F722C0309D +:105EA000017A11400172002022E570B594B01446C9 +:105EB0000E46FEF787F8012804D0022802D07B485E +:105EC00014B059E57A4D2868C030007A800701D4B3 +:105ED0000820F5E7002C01D00720F1E7FFF705FACD +:105EE000002801D01120EBE7002E1DD02D2168469F +:105EF00001702C68BC20015B684641801022B11CF7 +:105F000001A80EF0C9FE207EFB210840B17CC90724 +:105F1000490F08432076B07CFF214008A075608AB5 +:105F200082310843608207E02E21684601702868AC +:105F3000A030818B6846418009A9684607F038FD8A +:105F40002968FD23C0310A7A1A400A72B8E710B5F1 +:105F50000C46FEF737F8012803D0022801D0534839 +:105F600010BD5448844208D3012080045249201AAD +:105F7000884202D35148844201D3102010BD2046EC +:105F8000FEF72FF8002010BD10B594B00446FEF7C0 +:105F900019F8012804D0022802D0444814B010BDDA +:105FA00043480068C0308179042910D005290ED0FB +:105FB0003820694608704C8001200871487109A991 +:105FC000684607F0F5FC0028E8D00B20E6E7002043 +:105FD000E4E710B594B00446FDF7F4FF012803D0C0 +:105FE000022801D03148D9E731480068C0308179B2 +:105FF00004290DD005290BD03820694608704C8043 +:1060000000200871487109A9684607F0D1FCC5E76E +:106010000020C3E726480068C0308079062801D3F5 +:10602000012070470020704708B51346002806D0AD +:1060300023A00068009048796A468009105C1870B7 +:106040000622581C0EF028FE08BD10B50446FDF7C8 +:106050007AF9A22101700ECC08300EC0FDF78FF93D +:1060600010BD70B5124C054601682068002913D098 +:10607000104A914208D3012292040F4B8A1A9A4285 +:1060800002D30E4A914201D3102075E410227730DA +:106090000EF002FE206801218030806B01722068C2 +:1060A000A9880182C17B012919D10BE002300000CF +:1060B00054000020006001000000FC1F0040002090 +:1060C0000302FF01807B800901280AD00120FEF72E +:1060D000E4F8002803D01A491A480EF07AFF00208D +:1060E0004AE40120FEF7A8F8F3E770B5054600681A +:1060F000154C00281ED007214907401801218903AB +:10610000884201D3102037E42068B8210958097A61 +:10611000012909D00146773129300AF08EFF206825 +:1061200001218030806B017221681022286877314C +:106130000EF0B2FD2068008AA88000201CE4000058 +:106140001C420000FD02000054000020FFB581B099 +:1061500001980E46C078174610360E37022809D02F +:10616000032840D005287DD0F2A1F7480EF031FF7A +:1061700005B0F0BDCC890A2060430E301880312371 +:106180000A98002A0380F3D0486800889080002095 +:10619000D0801081097B9481891FCDB21AE03088AC +:1061A0007168388048780A7800021043F880C8780F +:1061B0008A78000210433881BA1C091D28460BF06A +:1061C0008AF8002D01D0002802D000203871788094 +:1061D00008360A372046641EA4B20028DFD1019990 +:1061E0000020C870C4E7CC890A2060430E301880B4 +:1061F00032230A98002A0380BAD048680025008814 +:106200009080D5801581087B401FC0B2009094819A +:1062100042E0716832880878FA803A79C3075208F8 +:106220005200DB0F1A43FD231A408307DB0F5B008C +:106230001A43FB231A404307DB0F9B001A43F72343 +:106240001A400307DB0FDB001A43EF231A40C30693 +:10625000DB0F1B011A43DF231A408306DB0F5B01B0 +:106260001A4300E020E0BF231A404306DB0F9B01E6 +:106270001A433A71C00978718A784B781002184332 +:1062800038813A46C91C00980BF025F8002801D047 +:10629000BD703D8008360A372046641EA4B200282F +:1062A000B7D10198C57063E7087BCC89801E85B2A1 +:1062B0002846083060431030188034230A98002A9A +:1062C00003808FD048681746008890800020D080D7 +:1062D000108194811037E000D581C0190CE030881E +:1062E0003880009878602A46716800980EF0D4FCD7 +:1062F000009808360837401900902046641EA4B262 +:106300000028ECD16BE7FFB50546C07881B00C469C +:106310000A9E03000EF04EFF0BA3071733414F6D8B +:106320008F9D9D9DA300207B1746082806D003283B +:1063300004D085487FA154300EF04BFE04990E2006 +:10634000088030200CE0207B1746042804D07E48CB +:1063500078A171300EF03DFE04990E2008803120A6 +:106360003080002F44D060680088B880607AFF30A9 +:106370000130F880E08938810020B88137E0207B47 +:106380001746042804D070486AA18D300EF021FE13 +:1063900004990E2008803220E2E7207B174602286D +:1063A00004D0694863A1A9300EF013FE04990E20B1 +:1063B00008803320D4E7207B1746042804D06248A5 +:1063C0005CA1C4300EF005FE049810210180342039 +:1063D0003080002F0CD060680088B880607AFF3071 +:1063E0000130F880E08938810020B881F881E870B8 +:1063F000BEE6207B1746052806D0062804D0524862 +:106400004CA1E1300EF0E5FD049812210180352009 +:106410003080002FECD060680088B880607AFF3050 +:106420000130F880E0893881E089B8810020388225 +:10643000A988F981DBE7207B1746072804D042486A +:106440003CA1F8300EF0C5FD04990E2008803620DE +:1064500086E700962846049B00F02DFD88E635A1CE +:106460003A480EF0B6FD83E670B5054600780C4656 +:10647000082603000EF09EFE124C3434241C380A09 +:106480000A0A0A0A0A0A0A0A0A0A0A4C687800284A +:1064900004D02E4827A12C300EF09BFD002C03D1F8 +:1064A0001F2024A1400108E060783043607020E0A4 +:1064B000002CF9D17D201FA1C0000EF08AFDF3E76A +:1064C000002904D03F201BA100010EF082FDFCF743 +:1064D0003AFF0446407830436070FCF750FF08E014 +:1064E0001A4814A1473002E0184812A14C300EF0AF +:1064F00070FD002C0AD06078000707D5932020702B +:106500002046582229460830FAF75EFE002070BD6A +:106510000E4808A15030EAE710B500200C4C0D4998 +:106520000346C2008C525218401C0006D370000E65 +:10653000F7D010BD7372635C67617474635F636FDF +:1065400072652E63000000005A020000B3030000D1 +:10655000FFFF000058000020FE49088001208870DD +:1065600000207047FB4900208870704710B500215B +:10657000F848C94301800021C17007F053FAD8E7F9 +:10658000F7B584B0054600276846078187806868AC +:106590000C46008800F0ECFB0646287A032805D05C +:1065A000002E03D1EC49ED480EF013FD297A204668 +:1065B000C91E123000900B000EF0FCFD0FF2F1F03E +:1065C0003D09AA465C6D34B3CDF38B8BF000F078B7 +:1065D000012803D0E049AD200EF0FBFCA8896946F4 +:1065E000C0000E30888030200881002C22D06868DE +:1065F0000188A180E7802781A989A18100200DE081 +:10660000C100B27909190A74B288CA81820052198C +:10661000D3894B82128A401C8A8280B2A18981422E +:10662000EED8D7E002A8009001AB224629463046BA +:1066300000F0CCFBF1E002A8009001AB2246294615 +:10664000304600F005FCE8E0F07806281AD0FF207C +:10665000C149223014E068680188A180E780278161 +:10666000A989A181B188E181E9892182EA89296921 +:1066700000982BE0F078062804D0FF20B6493C3083 +:106680000EF0A7FCE8896946123088803520088121 +:10669000002CE0D1C1E0F078072804D0FF20AE49FB +:1066A00056300EF096FCA88969460E308880362058 +:1066B0000881002CBED068680188A180E78027810E +:1066C000A989A1812046AA890E3029690EF0E4FA31 +:1066D00080E0E8896946123080B2382288800A81D9 +:1066E000002C79D068680188A180E7802781A9897A +:1066F000A181287A102809D00221A173E989218279 +:10670000EA89296900980EF0C7FA86E00121F4E7CA +:1067100002A8009001AB224629463046FFF716FD3D +:106720007BE0F078082803D08B498D480EF051FCAF +:1067300014206946888037200881002C6DD0686855 +:106740000188A180E7802781A989A18167822782AA +:106750000120A0733EE0F078092804D080487E49EB +:1067600018300EF036FC288A6946143088803720AD +:106770000881002C51D068680188A180E78004213D +:106780002781A173A989A181E9892182298A61824E +:1067900020462A8A1430696998E702E038E01CE054 +:1067A00024E0F0780A2804D06D486B4933300EF0AD +:1067B00010FC14206946888037200881002C2CD0DA +:1067C00068680188A180E78027810521A173A781DE +:1067D00027826782F77020E017E002A8009001ABE3 +:1067E000224629463046FFF78EFD16E00D20694609 +:1067F000392288800A81002C07D00120E08055488A +:106800000188A1802781277307E00699088010E09E +:106810008F205149C0000EF0DCFB68460699808845 +:106820000880002C05D06846008920806846808852 +:106830006080002007B0F0BDF7B594B015460F4654 +:10684000149800F0A0FA04000AD0032000F088FB9E +:10685000022802D2E078002804D0112017B0F0BD41 +:106860004048FBE71720694601260883002D0FD01A +:106870000321684601711021018210A8024605908B +:1068800004A928460AF04DFD00280DD00720E5E7B1 +:1068900008216846017100210781C9434181052112 +:1068A0008673C90281810CE0A878A0712888A08035 +:1068B000684605218673C902818100210781C94389 +:1068C000418109AA023206A901A807F0E4F80028CC +:1068D00002D000F06BFAC1E707A800906846038B6E +:1068E00004220321149800F051FB0028B6D1E67071 +:1068F000B4E770B592B00D0006460ED000F043FA32 +:1069000004000CD0032000F02BFB022802D2E07818 +:10691000002806D0112012B070BD1020FBE71148EE +:10692000F9E7172168468180042101722988818155 +:106930006988C181012181740B4901820AAA02324E +:1069400001A902A807F0A7F800280FD000F02EFA3E +:10695000E1E7000058000020346500003C0400001E +:1069600063020000023000000228000008A8009026 +:106970006846838804220321304600F007FB002884 +:10698000C9D10221E170C6E770B592B00D0006468C +:106990000DD000F0F8F904000BD0032000F0E0FA6D +:1069A000022802D2E078002805D01120B3E7102099 +:1069B000B1E7FA48AFE717216846818004210172E8 +:1069C000298881816988C18101218174F44901820A +:1069D0000AAA023201A902A807F05DF8002802D035 +:1069E00000F0E4F997E708A800906846838804223D +:1069F0000321304600F0CAFA00288CD10321E1704F +:106A000089E770B592B00D0006460DD000F0BBF9D5 +:106A100004000BD0032000F0A3FA022802D2E07891 +:106A2000002805D0112076E7102074E7DB4872E7D4 +:106A3000022168460172298881816988C1811721F4 +:106A400081800AAA023201A902A807F024F80028CE +:106A500002D000F0ABF95EE708A800906846838892 +:106A600004220321304600F091FA0028DBD10421F2 +:106A7000E17050E7F0B591B015000E4607460ED014 +:106A800000F081F904000CD0032000F069FA02281C +:106A900002D2E078002806D0112011B0F0BD1020FD +:106AA000FBE7BE48F9E7172168468180042101729F +:106AB000298881816988C181B17881743188018296 +:106AC0000AAA023201A902A806F0E5FF002802D0B6 +:106AD00000F06CF9E1E708A800906846838804227A +:106AE0000321384600F052FA0028D6D10521E17082 +:106AF000D3E7F7B592B015460E46129800F043F969 +:106B000004000AD0032000F02BFA022802D2E07819 +:106B1000002804D0112015B0F0BDA048FBE70627DF +:106B2000002D12D0684607728681C581A580172086 +:106B3000694688800AAA023201A902A806F0ABFFC2 +:106B4000002807D000F032F9E5E705216846017218 +:106B50008681EBE708A80090684683880422032119 +:106B6000129800F013FA0028D5D1E770D3E7F7B5F3 +:106B700092B016460D000ED0129800F004F90400F1 +:106B80000BD0032000F0ECF9022802D2E0780028B4 +:106B900005D01120BFE71020BDE78048BBE70727DD +:106BA0006846077286811721049581800AAA0232FD +:106BB00001A902A806F06FFF002802D000F0F6F845 +:106BC000A9E708A800906846838804220321129848 +:106BD00000F0DCF900289ED1E7709CE7F3B51720A0 +:106BE00091B00C46002915D021780B000EF0E2FA86 +:106BF000062B05051A041C2B1520C01EE28880B246 +:106C0000002A02D0A368002B04D0824204D90C20B1 +:106C100013B0F0BD1020FBE7042905D0A0880028A0 +:106C200011D101E00620F3E7119800F0ACF805005F +:106C30000BD02078092701281AD0022807D0042871 +:106C400024D0052835D00720E2E75448E0E768461D +:106C5000077161880181E1884181A068082603905D +:106C6000304600F07DF9072829D34C48801CCFE737 +:106C70000C216846017161880181E1884181A06829 +:106C800003900EE0E878002811D118E00D21684645 +:106C9000017161880181A1884181E1888181A068B9 +:106CA00004900326304600F05BF90228EAD3112055 +:106CB000AEE70E2168460171217B0172F1E71721D1 +:106CC0006846018309AA023206A901A806F0E3FE7C +:106CD000002802D000F06AF89AE707A800906846FA +:106CE000038B04223146119800F050F900288FD10F +:106CF0002178012907D002298AD0042905D0052945 +:106D000005D0032084E7082102E0EF7080E70A2124 +:106D1000E9707DE730B591B00C46054600F033F8D8 +:106D2000002808D0032000F01BF9022805D31B48D7 +:106D3000801C11B030BD1948FBE70F216846017176 +:106D400004811721018309AA023206A901A806F0CD +:106D5000A2FE002802D000F029F8EAE707A8009078 +:106D60006846038B04220321284600F00FF9E0E770 +:106D70000C49884205D00C490988814201D10A4852 +:106D800070470020704710B5FFF7F2FF002802D0CF +:106D90008178C90700D1002010BD0000023000003A +:106DA00003280000FFFF000058000020002806D044 +:106DB000012805D0052805D0062805D003207047F6 +:106DC00011207047082070475C487047FFB583B0BA +:106DD00003980C9EC0781D4614460F46012803D028 +:106DE0005749D2200EF0F5F8F889C0000E302880FF +:106DF00030203080387B001FC0B20190002C26D09C +:106E000078680088A0800020E0802081F889A08137 +:106E1000002616E0F0000519C01900902A464169C5 +:106E20000E3201980AF057FA002802D00020287488 +:106E3000E8810098761C008A68820098B6B2408A81 +:106E4000A882A089B042E5D803990020C870F1E477 +:106E5000F8B50646C0781F4614460D46042804D0EF +:106E6000FF20374903300EF0B4F8A88906214843C3 +:106E70000E30388033210698002C01801AD06868C3 +:106E80000088A0800020E0802081A989A18103469C +:106E90000CE01946062251434A190919D789CF81B6 +:106EA000977C8F74128A5B1C0A829BB2A1899942DB +:106EB000EFD8F070F8BD70B514460546142204985A +:106EC0001A8037220280002C18D0486800260088DB +:106ED000A080487AFF300130E080C8892081C889CD +:106EE000A0816682E878082809D0092811D00A28EC +:106EF00019D0134913480EF06CF8EE7070BD087B82 +:106F00000C2804D00F480E490C380EF062F801200E +:106F100012E0087B0D2804D00A48094908380EF011 +:106F200058F8042008E0087B0E2804D005480449DE +:106F3000001F0EF04EF80520A073DEE703300000BE +:106F4000346500008203000001460020FA4A02E096 +:106F5000401C082803D24300D35A8B42F8D1704713 +:106F600030B50446F44A0020163A117953790AE004 +:106F70005518AD79A54201D1401CC0B2491CC9B217 +:106F8000102900D100218B42F2D130BDFFB5EA4873 +:106F900081B0163841790A9C491CCDB21E46102D8D +:106FA00000D10025E44816380079A84202D1042017 +:106FB00005B0F0BD0820FFF7D3FF0746072804D926 +:106FC000FF20DEA1A5300EF004F80298082801D1B8 +:106FD000072F17D001982080301D6080002060713D +:106FE0002071E68003982081204606F005FD0028E8 +:106FF0000AD0D148029916384379821D99544571B7 +:107000000020D5E7D248D3E7FF20CCA1B7300DF060 +:10701000E0FF0320CCE7F0B58DB0044600256846BC +:10702000057116468C460620FFF79AFF00281CD1F2 +:1070300021780127C807002801D0132917D96846ED +:1070400087766178C17602218183C58304A8009088 +:1070500070680C23008805220621FFF797FF00289F +:1070600003D0B6A185200DF0B4FF0DB0F0BDB2483D +:1070700016380278002AF8D0427863789A42F4D120 +:10708000012918D0132919D16146062916D1057096 +:10709000002101200AF04EFE6846077170680188E1 +:1070A0006846C1800021C9430181607922790102CB +:1070B000114368461AE06146062908D068460079FF +:1070C0000028D2D0314601A8FDF7AFFECDE705700C +:1070D000002101200AF02EFE6846077160792279AE +:1070E00001021143684601810021C9434181E9E75A +:1070F000914810B50021163801704A1E4280417037 +:107100000171417101200AF015FE10BD10B5FFF7A5 +:10711000EFFF0020884902464300401CCA5208285D +:10712000FAD310BD84491639488000207047DFE744 +:1071300070470EB501216846017086498180C18083 +:107140000021FDF772FE0EBDF7B505460078002759 +:1071500000090C463E46012804D0FF2077A1683084 +:107160000DF037FF287A02280CD0FF2073A17E3063 +:107170000DF02FFF0298002C068001D0278066803A +:107180000020FEBDEA89702710460A3086B2002C26 +:107190000BD068680088A080A8892081E280204602 +:1071A0000A3029690DF078FDE4E702980680E7E7E8 +:1071B000F0B543680246D9799C79090221435C7A8B +:1071C0001E7A25025C88981D3543241F87B0A14292 +:1071D0001DD11B79022B1AD1042D1AD0052D2AD0CE +:1071E000062D1AD0402D12D3061D0F4614462846F0 +:1071F000FFF7AAFE08280AD0112020700220207272 +:10720000A581E7812661607808210843607007B096 +:10721000F0BD001D00F0E1F8F9E7041D0D46FEF792 +:10722000F9FE0028F3D0062168460170019405722A +:1072300008F0CBFBEBE7001DFFF7EDFEE7E710B52D +:107240003D4C8AB0163C2278012A26D012236A4689 +:10725000937363789B1CD373082313820B88538228 +:107260004B8893828B88D382C988118301A90091AE +:107270000C2305220721FFF789FE00280BD10022ED +:10728000F023114601200AF0B0FC01202070607844 +:10729000801C607000200AB010BD1120FBE7F0B523 +:1072A000254C0027163C87B00646A51D1FE06079D7 +:1072B0002179884204D1112020A140010DF089FEDE +:1072C0002079405D042804D0082808D17F1CFFB233 +:1072D00005E0072069460870684608F076FB2079CB +:1072E000401CC0B22071102801D10020207130460E +:1072F000761EF6B20028DAD1384688E710B5044683 +:10730000402801D2072010BDFFF71EFE082802D03A +:107310003120000210BD0021074802E0491C082965 +:1073200003D24A00825A002AF8D1082914D0490011 +:107330004452002010BD0000DA1300207372635C19 +:107340006C326361705F636F72652E6300000000D2 +:1073500004300000FFFF00000420EBE700B54028E8 +:1073600001D2072000BDFFF7EFFD082805D000215E +:107370003B4A40001152084600BD052000BDF0B553 +:107380008BB016460C00074607D0002E05D061884A +:10739000402904D207200BB0F0BD1020FBE7208865 +:1073A000002801D0172801D90C20F4E70846FFF780 +:1073B000CBFD08280FD0258803A82A463146023085 +:1073C0000DF06AFC01A8009062882B46082138461F +:1073D000FFF7DCFDDFE70520DDE7F0B50E460746E9 +:1073E00001468BB014460125304606F0D1FC082832 +:1073F0001DD10020694608850120FFF7B1FD002856 +:1074000002D117206946088503AB02330AAA394620 +:107410003046009407F0CFF800280AD0022819D08F +:10742000032804D0FF200F4902300DF0D2FD28467A +:10743000B1E76846038D002BF9D001A80090606881 +:10744000042200880121FFF7A1FD0028EFD00549A3 +:10745000EC20EAE760780025102108436070E6E739 +:10746000DA1300203C730000002803D08178012942 +:1074700039D101E0102070470188FA4A881A9142F8 +:1074800033D01BDCF84A881A91422ED00BDC00293D +:107490002BD00320C002081A27D0012825D00121B3 +:1074A0000903401A07E001281FD002281DD0FF2839 +:1074B0001BD0FF380138002815D116E0FF22013219 +:1074C000811A904211D008DC01280ED002280CD07D +:1074D000FE280AD0FF2806D107E0012905D002299D +:1074E00003D0032901D0002070470F20704700B55A +:1074F0000A2821D008DC03000DF05CFE0A1C2024C1 +:10750000241A24282224261A102819D008DC0B2833 +:1075100016D00C2814D00D281AD00F2808D111E04D +:1075200011280FD0822807D084280DD085280DD0AF +:10753000032000BD002000BD052000BDCB4800BDDC +:10754000072000BD0F2000BD042000BD062000BDA7 +:107550000C2000BD70B500290BD0CB1FFA3B812455 +:107560001E46CDB2112B1BD2012805D0022806D011 +:1075700009E0002010701DE0FF20043001E0FF2032 +:107580000330814218D033000DF014FE111613138E +:1075900016131616131616161313131316131600B6 +:1075A0000846FF3881381F2803D9FF39FE390229E0 +:1075B00002D81570002070BD1470072070BD00B592 +:1075C00003000DF0F7FD060406040C080A0C002069 +:1075D00000BD112000BD072000BD082000BD032014 +:1075E00000BD00780207120F04D0012A05D0022A3C +:1075F0000AD10EE0000907D108E00009012805D0F2 +:10760000022803D0032801D007207047087000200B +:10761000704706207047002807D0012807D00228AD +:1076200007D0032807D007207047002004E011206E +:1076300002E0212000E0312008700020704738B5BA +:107640000C4605004FD06946FFF7CBFF002822D13A +:107650002088032189028843694609788907090D32 +:10766000084320806946681CFFF7BBFF002812D141 +:107670002188032000038143684600788007800C3E +:1076800001432180A8784007820F2020012A03D0DF +:10769000022A03D0072038BD814300E00143218046 +:1076A00088B20105890F08D0012189038843A97890 +:1076B0000907C90F89030843208080B28104890F1C +:1076C0000AD0A9784004C906C90F400CC903084371 +:1076D00020808004800F02D12088400403D52088B8 +:1076E000402108432080002038BD70B504460020AA +:1076F000088015466068FFF7A2FF002815D1218990 +:10770000A089814210D86168594E8978C90707D08D +:10771000711E884208D831460DF038FB298009E0F7 +:10772000FF21FF31884201D90C2070BDFF30FF30AE +:107730000330288060688078C007A08903D0314674 +:107740000DF024FB03E0FF30FF30033081B22980CD +:1077500020688178474801732068464900882039AD +:107760004885002070BD10B5137804785B08E407E5 +:107770005B00E40F23431370FD2423400478A40727 +:10778000E40F640023431370FB2423400478640750 +:10779000E40FA40023431370F72423400478240744 +:1077A000E40FE40023431370EF2423400478E4063D +:1077B000E40F240123431370DF2423400478A4063C +:1077C000E40F6401234313700078BF244006C00F08 +:1077D0002340800103431370002906D00878C107B5 +:1077E00001D1800701D5012000E00020C001590629 +:1077F000490E0843107010BD30B50A8803239B0260 +:1078000004889A4323059D0F02D1A3049C0F01D045 +:107810009B0F00E001239B021A4303230A801B03F2 +:107820009A4303889804840F02D11805830F01D06E +:10783000800F00E00120000302430A8030BDF3B551 +:1078400091B00D0018D01198002818D012212846A8 +:107850000DF07FFA01A9012007F0A9FE00242646B9 +:10786000374677E0022900000128000003300000BD +:10787000010200000C140020102013B0F0BD0720FE +:10788000FBE76846007C01280BD16846C1890520CA +:10789000C002081A0AD001280AD002280CD00328F6 +:1078A0000CD0042C0ED0052C0FD10DE0012400E0EB +:1078B00002246846868908E0032406E0684604241A +:1078C000878902E0052400E0062468468189119832 +:1078D00081423FD12C74002E3AD00BA800900CAB03 +:1078E00010220021304607F0F4FE002820D168461F +:1078F000808D2A46C0B20CA909F0EDFC002817D1F2 +:10790000AE81002F24D00BA8009006AB13220021DB +:10791000384607F0DEFE00280AD16846808D06A9A9 +:10792000C01E0331C0B22A1D09F0D5FC002801D0C9 +:107930000320A2E76846817E427E08021043E88168 +:10794000062C05D16846007CA8726846C08928814B +:10795000002092E701A807F032FE002891D0FFF73F +:10796000C6FD8AE7002804D0012903D0022904D0EB +:1079700003207047F949C98D02E0F8494031C988B0 +:10798000814201D1002070470720704730B5F34C89 +:107990000025608B91B0C00B2ED1216900292BD01E +:1079A000207B800728D401226846027102720022DF +:1079B0004272228B8281A28A8282049117210183E2 +:1079C00009AA0023023206A901A807F0A7F9002896 +:1079D00003D0FFF7F4FD11B030BD207B0221084336 +:1079E000207307A8009069460B8B20880422012190 +:1079F000FFF7CCFA05460BE0FBF7A5FC84210170EC +:107A00000921017218341ECC0C301EC0FBF7B7FCE4 +:107A10002846E0E710B5D14C034621690020002933 +:107A200009D02146012210311846FBF76BFE0020D9 +:107A30002061A0820120217BF9221140217310BD19 +:107A400070B50C4605461C2120460DF082F9002039 +:107A50002080002D08D0012D04D0C1A1C5480DF013 +:107A6000B8FA70BD062000E00520A07070BD10B50A +:107A700007F07CFB10BDFEB50546007800260C46DD +:107A8000374603000DF096FB0C91070C1D962F4610 +:107A90002F46486C899168680A38FBF793FD89E0A6 +:107AA000002904D0B348AEA11B300DF092FAFBF7C9 +:107AB0004AFC04464078082108436070FBF75FFCED +:107AC00078E0002C04D1BB20A5A180000DF081FA44 +:107AD000284601F0B1FA00286CD0607808210843EC +:107AE0006070022666E0E888694608800190002CF4 +:107AF00004D1A0489AA12F300DF06BFA28780728FE +:107B00001CD10198C00B19D0944800218171A9881B +:107B1000818012E003264DE0002C04D1C52090A105 +:107B200080000DF056FA8D48017B89070BD500695E +:107B3000002802D0E888C00B3CD0022660780821DB +:107B40000843607036E0291D8EC918308EC0283871 +:107B50000188022601222046FBF7B6FD0127EDE74A +:107B6000002C04D183487EA164300DF032FA7B48AA +:107B70000821007B4007C00F460060780843607012 +:107B8000002E17D12879012802D16879002811D058 +:107B90002046FFF73FFF07460CE0002CCED10D201A +:107BA0006FA180010DF015FAC8E772486CA17A3018 +:107BB0000DF00FFA002C0CD06078000709D5002FCB +:107BC00007D1842020702046582229460830F9F732 +:107BD000FBFA3046FEBDF7B5027A88B00C46054682 +:107BE00020460C300490069216300027921E029018 +:107BF0003E460A31594813000DF0DCFA0ADF06E66A +:107C00002AE62AE66A98C6E64288002A02D0522767 +:107C10000726DDE051271E26002C7DD06A684F48DC +:107C20001288A2800122A2718079C0004019C08907 +:107C3000FFF705FE002877D148488179C900491926 +:107C4000C98921818079C0004019408AA083BFE0A2 +:107C5000688A00900698072817D1E889C00B14D0CD +:107C600000985127223086B2002C55D0A88904995B +:107C7000FFF7E5FD002857D168680088A080022042 +:107C8000A071A8892081012041E000985027203070 +:107C900086B2002C40D0A889FFF7D1FD002843D13F +:107CA00068680088A080A889E080287A07280AD020 +:107CB00002202072288AA0830098E0832046696908 +:107CC0002030009A01E00120F3E70CF0E5FF7FE0AF +:107CD000698A00910169002902D0E989C90B22D083 +:107CE0000099512722318EB200218171A9898180AA +:107CF000002C5FD00088A080A8890499FFF79FFD21 +:107D0000002811D10220A071A88920810420A0722E +:107D1000288AE083009801E04CE005E0208469694E +:107D2000009A0298D1E703200BB0F0BD007B40071A +:107D300002D55127222601E050272026002C39D0D9 +:107D40006868502F0088A08016D00220A0712146BC +:107D5000287B0831FFF774FE3AE00000EC130020A6 +:107D60007372635C67617474735F636F72652E63B3 +:107D700000000000CB020000287BA11DFFF760FE81 +:107D80000020FFF747FE23E0A9890089884207D138 +:107D900054270626002C0DD068680088A08017E0C4 +:107DA00053270826002C05D068680088A080A88981 +:107DB000E0800DE00A98068010E055270726002C89 +:107DC000F8D00020A07103E0FD49FE480DF001F954 +:107DD0000A98002C068001D0278066800020A3E747 +:107DE000F94800210172203801814181418081716F +:107DF0008180027BF923520852001A40027301610C +:107E00008182704770B5F04C86B0203C2080002005 +:107E10006080A071A0806946012007F0C8FB102691 +:107E200008E00199088802461207D20FB0431201F8 +:107E300010430880684607F0C2FB0500F1D02069B6 +:107E4000002804D0DF48DE4933300DF0C2F8207B33 +:107E5000800704D5DB48DA4934300DF0BAF8822DBA +:107E600004D02846FFF743FB06B070BD0020FBE7B7 +:107E7000D54810B52038017B012211430173002140 +:107E800041808171818006F045FB10BD10B5CE4C5C +:107E90000020C043203C20800020FFF7BBFD207B5A +:107EA00040084000207310BD70B5C74D0446203D0A +:107EB000287B800704D5C348C1494B300DF089F8B1 +:107EC000287BC00706D12888C049884202D028698B +:107ED000002801D0082070BD002C08D0A0881628EA +:107EE00001D2092070BD20682861A088A882FFF710 +:107EF0004DFD70BD10B50C4607F02DFB002804D0D9 +:107F0000C520AF49C0000DF064F82046FFF7EFFA36 +:107F100010BDF0B5AC4D0446203591B0002008905E +:107F200068820E462882E8812946E8804039088622 +:107F3000694608830885088688838882A2480E904F +:107F4000007A1746012808D0022806D0032804D05A +:107F5000042802D0082011B0F0BD9D48844269D3A6 +:107F600001239B049B49E21A8A4263D39A4A9442B2 +:107F700060D286425ED31001331A0846834259D339 +:107F80001046864256D26068002815D09049884233 +:107F900050D31101421A8F498A424BD38E498842ED +:107FA00048D260892189884203D801225202914235 +:107FB00001D90C20CFE7089010AA0CA93046FFF792 +:107FC00094FB0028C7D106A92069FFF738FB0028D9 +:107FD000C1D1206900280CD060788007002868464D +:107FE000008B03DA8004800F75D002E08004800FDC +:107FF00071D16846008B81061ED58004800F6068B1 +:1080000009D0002818D00721490740180121890309 +:1080100088420FD201E000280ED06D496068884286 +:1080200008D301218904421A6A498A4202D36A4963 +:10803000884201D310208EE705A96069FFF7FFFA97 +:10804000002888D16069002808D06846808A010528 +:10805000890F01293FD18004800F3CD007A9A06976 +:10806000FFF7EDFA0028A5D16846808A800632D451 +:108070006846808B81062ED4A169002906D00105AF +:10808000890F012927D18004800F24D0E0680028BF +:1080900004D0007800281ED01C281CD24A4A611C3B +:1080A000123220460992FFF75EFB0321002089026D +:1080B000884301218902411868460D9101850121FB +:1080C000817446490182404A0FA91532306809F08F +:1080D00028F9002801D007203DE708A8007F3A4989 +:1080E000C01CC2B26A7100201031FF3200900190B2 +:1080F000FF3203460291039003320AA904A807F055 +:10810000C5F9002827D130482038008E0B902E4822 +:108110003389383032690146123902910093019255 +:10812000039010A90A8873890CA9306807F0AEF98A +:1081300001007CD12448E98811308170090AC1709E +:108140000026009631386A79008E3146099B07F087 +:108150001CF9002802D0FFF7CAF9FCE60E98807CD3 +:10816000C00928D068460D99018501218174292113 +:1081700009020182AE81287B61784008C90740006E +:10818000C90F08432873FD2108406178022289073E +:10819000C90F4900084328730B4900922A31881CF3 +:1081A00002910190002303960D4A0AA904A807F042 +:1081B0006DF901003BD1606800283DD0206911E0D5 +:1081C000607D0000220400000C140020FFFF00006E +:1081D000006001000000FC1F004000200328000098 +:1081E0000302000000280DD106A90CA8FFF704FB2C +:1081F0006078800706D46946088B03210903884309 +:1082000069460883012069468874FD4808822089F0 +:10821000FC490CF0BBFD6268089BFB48019200938F +:1082200002900A460396002306A904A800E081E014 +:1082300007F02CF901007DD12078C10601D4800619 +:108240002ED568460684606900280DD105A90CA8C2 +:10825000FFF7D2FA6846818A032080028143012019 +:1082600080020918684681826946888A4821084345 +:108270006946888201208874E14808AA401C088267 +:10828000E1490192891C0220DE4A029100900023FC +:108290000396921C05A904A807F0F8F8010063D121 +:1082A0002078C0072ED068460684A06900280DD12A +:1082B00007A90CA8FFF7A0FA6846818B032080026B +:1082C0008143012080020918684681836846818BBA +:1082D000402001436846818301218174C84908AA6E +:1082E000891C0182C8480192001D0221C54A0091E3 +:1082F000029000230396921C07A904A807F0C6F871 +:10830000010031D1E068002832D068460D9901851E +:1083100001218174BA49C91C0182E16808A80A7860 +:10832000027049784170E068418868464184E0689D +:10833000017900E018E008A80171E0680722C1880F +:1083400008A84171090A8171AF4808A9801D0092EF +:1083500001910290412200230396D2000AA904A8A9 +:1083600007F094F8010003D00B98FFF7C3FDF2E586 +:1083700003210E98002F017207D0E8883880E88921 +:108380007880288AB880688AF8800020E3E5F0B514 +:1083900001248BB016460F46012802D002281BD1BB +:1083A00004E0684605218474C90202E068469749E2 +:1083B00084740182002F11D0032100208902884398 +:1083C0000121890241186846018506AA05A9384697 +:1083D00008F0A7FF002803D00720A5E41020A3E49D +:1083E000894DB8782E3D287338882F46203F7885F0 +:1083F0006A46127D0020294606AB00920E31019399 +:10840000FF32029103900346FF3203320AA904A807 +:1084100007F03CF8002802D0FFF769F884E4002E4A +:1084200001D0F88D30802C7200207DE470B592B0C0 +:108430000446012508A8857075496846018406F040 +:108440009CFF002208A90120FFF7A1FF064606F0C5 +:1084500098FF30003AD120780024C00700283FD090 +:108460001C2168460CF077FC684601782020014307 +:108470006846017008A885706649684601841194B1 +:108480000794817FF9200140891C6846817700208C +:10849000014668460177002001466846417704217D +:1084A0008185C485018607A80A9011A80D9008A8A7 +:1084B000099006F062FF0EAA09A96846FFF729FD98 +:1084C000054606F05EFF002D02D0284612B070BDB2 +:1084D0004D486946098F4E3801816946898F41812F +:1084E00049482E3804720020F0E7F7B5464E9CB09C +:1084F00000212E3E0091317A012904D0022902D0B8 +:1085000008201FB0F0BD40494E39CA8D824201D0CB +:108510000620F6E71D98824201D10720F1E73B488B +:10852000012110AA9176401C1083002003239B0296 +:1085300002469A438B02D31810AA93846A46918408 +:108540003549D18410AA9077908317AA0A926A4677 +:1085500091850C9009A807F051F80024254627467C +:1085600004A909A807F04DF8002810D082287BD173 +:10857000002C7CD0002D7AD010A8048145810024E5 +:10858000047518A8807812AD012872D07AE0684688 +:10859000807D002F1FD0012862D16846818A1B4848 +:1085A000401C814219D114A800906846408A0EAB45 +:1085B0001022002107F08DF8002877D110A8008A3A +:1085C000042801D006285BD16846018F1D9881429E +:1085D00046D10F2095E7012842D16846808A0521BF +:1085E000C902884202D0491C884239D106484E3817 +:1085F000C18D6846408A814210D101270FE00000FA +:1086000001290000010200003A14002001280000A6 +:1086100001180000052A0000FFFF00000027002CC1 +:1086200001D0002D0DD01D99884219D114A90091B7 +:1086300004460EAB1022002107F04BF8002835D17C +:1086400001E0009D0CE010A8008A022801D010284B +:1086500016D1C0B218AA0EA908F03DFE00280FD10D +:108660006846408A00907BE720E000E001E00520BA +:1086700047E72A1D15A918A808F053FE002801D0C5 +:1086800003203EE710A8007D0023001DC2B210A801 +:1086900002751E98029019A901950394009216A8DC +:1086A00006F0F4FE002801D102213172FEF71FFF0F +:1086B00027E73EB50B46401E84B201AA00211846AA +:1086C000FFF751F806F059FE02A8009001AB012215 +:1086D0000021204606F059FE044606F052FE684688 +:1086E0000089012803D0FE49FE480CF072FC2046A8 +:1086F000FEF7FDFE3EBDF0B5FB4E0446307A89B074 +:108700000F46032804D0042802D0082009B0F0BD89 +:1087100004AA06A92046FEF7E8FF0500F6D1F248B4 +:108720002389383022690146103902910093019261 +:10873000039069460A8A638906A9206806F0A6FEA6 +:10874000002802D0FEF7D3FEE0E7002F03D0E64872 +:10875000203000893880042030722846D6E738B5AA +:108760000C00054608D00022694607F00CF80028E6 +:1087700004D0FEF7BCFE38BD102038BD6946204647 +:10878000FEF75DFF0028F8D1A0786946C207D20F36 +:10879000284607F013F8ECE73EB50C0008D002AA13 +:1087A000694606F0F0FF002804D0FEF7A0FE3EBDAB +:1087B00010203EBD032120460CF0CBFA684600880D +:1087C00001A90005800FFEF726FF00280BD168469F +:1087D000007920706846008801A98004800FFEF7A8 +:1087E0001AFF002801D003203EBD68460079607062 +:1087F000A278EF20024068460088C10B09010A43B5 +:10880000F7210A404104C90FC9000A43A270F921A7 +:108810000A40800601D5012000E0022040006946A0 +:108820000243097A50084000C907C90F0843A070E5 +:1088300000203EBDFEB51D4614460E46074606F016 +:108840009CFD01A8009022882B463146384606F050 +:108850009CFD054668468088208006F092FD2846EB +:10886000FEF745FEFEBDF0B50C46002199B0074667 +:10887000684681850D46002C11D0E068002806D09E +:10888000A06800280BD002886B469A850180A078EA +:10889000012806D0022804D0072019B0F0BD10200E +:1088A000FBE72088002807D0401E80B201A906F00F +:1088B0007EFE002842D136E08C48EEE769468A8980 +:1088C00021888A420BD26846007C002501282CD1E1 +:1088D0006846C0898649884227D1012525E08A4219 +:1088E00003D1002D2FD06D1C01E0022D02D0032DED +:1088F0001BD31FE06946097C012916D169467C4BD0 +:10890000CA895B1ED11A9A421DD005DC7948101A1B +:1089100019D0012809D116E0012914D0FF390139F5 +:1089200003D1032506E00D26B60201A806F047FE96 +:108930000028C3D0822804D0002806D0FEF7D7FD37 +:10894000ABE7022DFAD13046A7E7E068002813D044 +:1089500006F013FD0BA800906A46A1882088928D2E +:10896000E36806F012FD054606F00BFD002D19D157 +:108970006846A168808D088002980078C00601D5FD +:108980005D488AE706F0F9FC0EA8009068468089E9 +:108990000CAB0222002106F09CFE054606F0F1FC1D +:1089A000002D01D02846C9E76846008F022801D073 +:1089B000032072E7A078012808A8007C03D0800774 +:1089C0000ED4082069E7C007FBD00820FEF7C8FADC +:1089D000072802D34548401C5FE70825022001E034 +:1089E000022503206946087621886846818317217D +:1089F000818611AA002302320DA906A806F08EF97D +:108A0000002802D0FEF7DBFD47E70FA8009068467C +:108A1000838E042229463846FEF7B8FA3DE770B542 +:108A2000064615460C460846FEF71EFD00280AD1EC +:108A300006F0A3FC2A4621463046FFF7A8FC044670 +:108A400006F09FFC204670BD70B514460D460646E4 +:108A500006F093FC224629463046FFF746FD0446C1 +:108A600006F08FFC204670BD70B51E4614460D0002 +:108A70001AD0002C18D06168002915D00121FEF70A +:108A800071FF00280FD12068FEF7EEFC00280AD104 +:108A900006F073FC324621462846FFF73AFA0446B0 +:108AA00006F06FFC204670BD102070BD70B51546F5 +:108AB0000C0023D00221FEF755FF00280ED12068BC +:108AC000FEF7D2FC002809D106F057FC29462046C3 +:108AD000FFF711FE044606F054FC204670BD00006E +:108AE000607D00003E0600000C14002003300000F2 +:108AF0000328000000280000013400001020EDE7EA +:108B0000FEB507460E4607201546400701211218FC +:108B100089031C468A4219D2002C02D020188842B0 +:108B200014D2384600F045FA00280AD1002C0FD1A3 +:108B300001AA6946384606F026FE002802D0FEF754 +:108B4000D6FCFEBD68460088800601D41020FEBD1C +:108B500023462A4631463846FFF76CFEFEBDFFB578 +:108B600085B01E4614000F4609D003AA02A9059835 +:108B700006F009FE002804D0FEF7B9FCC6E5102077 +:108B8000C4E568460089C00601D5FB48BEE506F08D +:108B9000F4FB01A800900023F84A3946059806F036 +:108BA00098FD054606F0EDFB002D11D1002E0CD0EE +:108BB00006F0E3FB002000902288334639460598F2 +:108BC00006F087FD054606F0DCFB684680882080BD +:108BD0002846D1E7002906D0E94B0A885B899A42EA +:108BE00001D8E84870473EE610B586B004236C46CD +:108BF000A382E34B1C89002C07D05B898B4201D2F6 +:108C0000914204D9DF4806B010BD0620FBE76B4651 +:108C100019825A820021009101911C8002219970D1 +:108C200005A9029104A903916946FFF71CFEEAE732 +:108C3000F0B591B00D4681206946087105F09CFCA5 +:108C40000646002D08D02878CD4C012806D00228F1 +:108C500028D0072011B0F0BD1020FBE7A98801AA99 +:108C6000FEF778FC0028F5D1B00734D568460079C6 +:108C7000002820D1A879C0071DD006F07EFB002077 +:108C800000906A892989A088EB6806F07EFB694616 +:108C9000087106F076FB6946087900280BD0FEF7CC +:108CA00026FCD7E7A98801AAFEF754FC0028D1D1F9 +:108CB000342006420FD00121684601720173017908 +:108CC0004173F00609D5A18868460182A18A018313 +:108CD0002069059004E00820BCE7A0886946088266 +:108CE000FAF731FB05461720694688830AAA2B4606 +:108CF000023207A902A806F011F8074668780007B3 +:108D000001D5FAF73CFB002F03D03846FEF757FC9D +:108D1000A0E7F00603D5207B062108432073B006A8 +:108D200002D50020FEF776FE08A8009069468B8BDE +:108D3000208804220121FEF729F98BE7F0B50026EF +:108D400095B014460D4600290FD0022C4FD3A71E14 +:108D5000BAB28A480AF052FE29191039CA7B8B7BB5 +:108D600011021943884242D1BCB201A9012006F088 +:108D70001EFC7AE0029F3888010776D5002D41D08D +:108D8000A9190691CA788B78361D1102B6B219431B +:108D90008919A1422BD869468A8906994B780978A6 +:108DA0001B020B439A4222D1C00623D506F0E5FAF6 +:108DB00007A800900698AB19C17880780A02069936 +:108DC00002434878097800020843002106F0DDFAE2 +:108DD000009006F0D6FA009800283ED10698C17897 +:108DE000827808026946898B1043884202D00B20A2 +:108DF00015B0F0BD0698C17882780802104380193A +:108E000086B22EE0C0062CD5002007AA01461154D8 +:108E1000401C80B21028FAD306F0AFFA06A80090E2 +:108E20006846002380891022194606F052FC009003 +:108E3000002803D006F0A5FA00980EE00BA86946BA +:108E4000009088890A8B07AB002106F09EFA0090FB +:108E500006F097FA0098002803D0FEF748FBC7E712 +:108E600003E0388810218843388001A806F0A7FB6A +:108E7000002800D17EE7424D6988002921D00122D7 +:108E800068460276027700244477018417218185A1 +:108E90000EAA234602320BA906A805F03FFF0028C0 +:108EA00002D0FEF78CFBA3E70CA8009069468B8DDF +:108EB000288804220121FEF769F8002898D16C80E7 +:108EC00096E7002094E7F0B5002487B015460E46DB +:108ED000002A04D002A9012006F069FB41E010201D +:108EE00007B0F0BD0398007800073AD506F045FAC0 +:108EF00001A8009068460023008A204A194606F01F +:108F0000E8FB074606F03DFA002F23D1002E23D0C0 +:108F100068468088298820183719001D814239D376 +:108F20006946098A3970090A797069468988B97071 +:108F3000090AF97006F021FA01A869460090088A2A +:108F40008A883B1D002106F0C4FB074606F019FA8B +:108F5000002F01D00320C3E7684680882018001D39 +:108F600084B202A806F02BFB0028BBD082280BD0CD +:108F7000FEF7BDFAB4E7000001340000FFFF000077 +:108F8000EC13002003300000002E0ED02988A01C16 +:108F9000814201D20C20A3E72246314639480AF02B +:108FA0002DFD31190870000A4870A41C2C80002087 +:108FB00096E700B585B06946FEF741FC00280AD166 +:108FC0006846007C03000CF0F5F808052F2F2F2FC2 +:108FD00008080531032005B000BD684680780128E7 +:108FE00007D1684600880321C902401A1CD0012815 +:108FF0001AD068468079012806D1684680881521F4 +:109000004902401A05280FD96846807A012811D1F3 +:109010006846018929200002081A05D0022803D0D9 +:10902000032801D0042805D10F20D4E7164917489A +:109030000BF0CFFF0020CEE738B5154A0021518054 +:1090400003791AE0CC002418A46800946C462488A4 +:10905000250707D5E50605D5D90008182038C08BA7 +:10906000508006E0640406D59171C9000818C088D4 +:109070009080012038BD491CC9B28B42E2D8002043 +:1090800038BD0000FFFF0000607D000033020000DB +:10909000EC1300200120F8494006C861704770B504 +:1090A000F54D0024AC7028466C7020304470047478 +:1090B0006C61AC72AC6209F01AFFA86128463430CA +:1090C0000AF0B4FD002804D0FF20ECA13A300BF0E8 +:1090D00080FFEE48C46301204006E86170BD70B5B2 +:1090E0000125EB4902260E60E849CD63E949C96ACA +:1090F00009070ED4E7494031CB6AE74A53620B6B4C +:1091000093624B6BD3628B6B1363C96BD3051943AB +:109110005163D949E14CC96900282BD001282DD0D1 +:10912000FF20D6A169300BF054FFDD48A063FF207B +:10913000043060632563DB49032008602061D74960 +:10914000962040314860D948D7494163D549FC3918 +:109150000163D549091FC163D249F03981630320F6 +:10916000D249000340394860D14910204860D148B5 +:10917000066070BDD0486061D04804E0CF48E03060 +:109180006061CE48801F0143A161CEE7BA4901204A +:1091900008707047B84900200870704770477047E2 +:1091A000BE4940310028086802D00122104301E086 +:1091B000400840000860704770B50C46AE4D01464F +:1091C0000622E81C0BF068FD6C7270BDAA482030C6 +:1091D00040787047A84A91705070704770B50D463E +:1091E0000446082904D9FF20A4A1C6300BF0F1FEE3 +:1091F0000022B34809E09100635809180B6053003E +:109200001B191B8C0B62521CD2B2AA42F3D3206BE7 +:10921000AB494031086070BD0B23DB4310B5C21A67 +:109220009E4998421FD008DC1C3222D00A2A20D046 +:10923000142A1CD0182A08D117E0083011D00428AD +:109240000DD0082809D00C2805D0FF208BA1F230C2 +:109250000BF0BFFE10BD04200CE000200AE0FC2053 +:1092600008E0F82006E0F42004E0F02002E0EC2022 +:1092700000E0D820C86010BD7F482030007B7047D8 +:1092800010B5864CC17861620BF067FD0002E061A9 +:1092900010BD252808D0262808D0272808D041004E +:1092A0000A2807D8091D06E0022105E01A2103E07B +:1092B000502101E0891DC9B2784A91607749403157 +:1092C000486170476C494861704770B56A4CA0723C +:1092D00000F01FFBA07AC00740D0724D28688007BD +:1092E00003D466A177480BF074FEA07A01061DD561 +:1092F000800707D5734861A1801C0BF06AFEA07A35 +:10930000000613D52078694E012816D0002804D015 +:109310006C485AA111300BF05CFE6B487061A0697B +:109320003061FF206149013040394860A07A8007F0 +:1093300014D52868C00708D102E06348001FEDE794 +:1093400060484EA11A300BF044FEA07A400728680E +:1093500001D5042100E008210843286070BD70B5E4 +:109360000124454D002807D0012818D002281AD022 +:10937000232042A100010BE000F0CBFA52482978EB +:10938000001F012907D0002907D04E483BA15738BC +:109390000BF01FFE70BD046070BD446070BD812085 +:1093A000FFF793FF70BD00F0B4FA6869002804D19C +:1093B000444832A14F380BF00CFE6969A86A401886 +:1093C0004249C86039484249403001603E490C3149 +:1093D00041600814354940394860274820300474FA +:1093E00070BDF8B50C2069460870314C6068C00645 +:1093F000C50F1026A66034480021FC300161324BB5 +:1094000001221B1F1A610BE000BF00BF00BF00BF9D +:1094100000BF00BF00BF00BF6B461A78521E1A7013 +:109420006A461278002A02D00269002AECD0016153 +:1094300068460078002804D1912010A180000BF02C +:10944000C8FD002D00D06660F8BD0B490020C86142 +:10945000704710B50BF081FC00021049000AC86388 +:1094600010BD0B49022008607047094902200860BE +:109470001049086070470000481400207372635C54 +:1094800068616C5F7263732E63000000C01F004050 +:1094900080E100E08000001000170040001500404F +:1094A0005B060000001200404480004040F501408F +:1094B0000013004080E200E00601020025000300E6 +:1094C0000016004075020000041000404085004076 +:1094D0004C810040F74902200860CBE7F64908704C +:1094E000C8E710B5F5480AF0A9FB002803D0F449F5 +:1094F000F4480BF06EFD10BD10B5F0480AF0B6FB55 +:1095000010BDF1494860B5E7EC4910B53439EF4B6F +:109510000022C8605A60896A0818ED49486000F066 +:10952000FFF910BDE54810B5C2213438C160E74AE3 +:1095300000215160806AE649C230486000F0F0F9CD +:1095400010BD0120E34940028860DC490020343925 +:10955000C860DF4948608DE7D84900203439886207 +:1095600088E7D648DA493438806AFE30886081E777 +:10957000D749002088607DE7D748016810229143D1 +:109580000160D6490120886174E7D5490020C8618F +:10959000D14801681022114301606BE700B5FFF765 +:1095A000EBFFC64900203439087400BD00B5FFF751 +:1095B000ECFFC24901203439087400BDC849CA69AA +:1095C000012A01D0002055E7BF4A40329268520676 +:1095D000520E524202700020C86101204AE7F8B5DD +:1095E000BF4C2069012806D00021B44834380078E7 +:1095F000012802D004E04021F7E7E268012A04D004 +:1096000000220A43012802D004E02022F9E7616821 +:10961000012905D000211143B24A002802D007E0F9 +:109620001021F8E71368012B02D1E368012B04D065 +:1096300000230B43002802D007E00823F9E7116854 +:10964000002902D1E168012905D000221A439F4E6A +:10965000002802D004E00422F8E77168012904D050 +:1096600000211143002802D004E00221F9E76068DC +:10967000012829D000259C480D4301680906090EE0 +:1096800002D06169012900D000218C4F143F397349 +:1096900000680006000E02D0A069012800D000205A +:1096A00078738B488068002803D000F03DFA0128C9 +:1096B00000D00020B8730021E16021616160616128 +:1096C000A16171602846F8BD0125D4E77B480121DE +:1096D0001438C173CEE6F8B5784E0127143E307CBD +:1096E0000025002825D07C4C206800902560FFF7DD +:1096F00078FE009820607A48C56005614560456144 +:1097000085617449001488603046203801787348B8 +:1097100001290AD000290AD0D920694980000BF01C +:1097200058FCF9F775FC3574F8BD0760F9E7476038 +:10973000F7E7FFF754FF04460020F07364484268DF +:109740005E4D343D6A620068A8622978002909D11B +:10975000A978002906D05C4B5B681B780B406978C0 +:10976000994309D000213170E10707D0104602F07B +:1097700029FD0121A86A08E03770F5E7A10601D5A7 +:10978000022102E0A10702D5002102F02AFD4E4F7E +:10979000796806220931E81C0BF051FA002807D13C +:1097A000687A79680978C909884201D1012000E006 +:1097B00000207070204600F0BDF83F48C2270078B6 +:1097C000002815D0012828D002283BD003285AD0E1 +:1097D0003B4946480BF0FDFB287C002804D0287844 +:1097E000002865D0FFF7C8FE2878002861D089E0FE +:1097F000A00701D501F0CCFB200703D50120EF60C5 +:1098000001F0FEFB600703D50020EF6001F0F8FBDC +:10981000A006E1D501F068FBDEE7A00701D503F063 +:1098200026FF200703D50120EF6003F09FFE6007AD +:1098300003D50020EF6003F099FEA006CCD503F01D +:1098400020FEC9E7A00703D5BF200440F9F7D2FBEB +:10985000200705D5BF2004400120EF60F9F7C9FBC0 +:10986000600705D5BF2004400020EF60F9F7C1FB79 +:10987000A00603D5BF200440F9F7BAFB6006ABD5BC +:10988000F9F7B9FBA8E7A00701D5F9F7B7FB20075F +:1098900003D50120EF60F9F7B0FB600703D5002086 +:1098A000EF60F9F7AAFBA00696D5F9F7A5FB93E7B9 +:1098B0001EE020E000E100E0600000207C140020B9 +:1098C0007C940000AB020000001500404081004085 +:1098D0004085004000F501400012004000100040AB +:1098E00000110040001400404016004094040000A5 +:1098F000FFF74BFE78E7E868002803D0A96A09184B +:1099000028484160F07B002800D10DE7F9F780FB83 +:10991000F8BD254903200860881524498860A9E519 +:10992000224823494030C161224981611F494015C5 +:1099300048609FE570B50546FFF7EBFF1E4CA17A26 +:10994000080701D568071CD41C4AC80605D5507BFA +:10995000002802D0907B002813D0880602D510780A +:1099600000280ED1480602D55078002809D00020E2 +:109970008A070026002A07DA4A0704D50122227046 +:1099800002E00120F4E72670CA0709D0AA0705D42F +:10999000890705D5002803D0A80601D4FFF721FDCB +:1099A000A67270BD408500400012004000F50140E5 +:1099B000101000404481004048140020681400202A +:1099C0002E48002101704170704770B5064614465C +:1099D0000D460120F7F780FE28490120284B08702A +:1099E0009E60DC601D6170BDF8B504460120F7F78C +:1099F00073FE22490120087021494C60214900264C +:109A00004E600321204D8902A960204F002C0AD00E +:109A1000012C03D01EA140200BF0DBFA3E60032096 +:109A200080026860F8BD386001208002F9E710B557 +:109A30001248017800290ED00321134A890291604F +:109A400010494A680021002A03D0154A1268427062 +:109A500000E0417001700020F7F73EFE10BD07489E +:109A60000178002907D007484068002802D00C4838 +:109A70000068C0B270474078704700006100002065 +:109A800000F5004000F1004000F5014000F2004008 +:109A90007372635C68616C5F63636D2E63000000CA +:109AA00000F400403648002101704170102181709F +:109AB000704770B5064614460D460220F7F70CFEB7 +:109AC00001202F492F4A0870E41E146196605560EA +:109AD00070BD10B50220F7F7FFFD2949012008707D +:109AE000294800210160416081602849C014486014 +:109AF00010BD10B5224C2078002811D00120234938 +:109B0000C002886000F02EF80021002804D0012057 +:109B100060701F48006801E061701020A070217023 +:109B20000020F7F7D9FD10BD10B5154801780029C0 +:109B300005D000F017F8002800D0012010BD4078B3 +:109B400010BD10B50E480178002909D000F00AF8C0 +:109B5000002803D00E480068C0B210BD102010BD10 +:109B6000807810BD08480168002905D041680029A7 +:109B700002D08068002801D0002070470120704783 +:109B80006300002000F5004000F1004000F50140B6 +:109B900000F4004010B528210BF0DBF810BD407830 +:109BA0008006800E704740788006800EC01C70478B +:109BB0002820704770B5054600780A0700090001A3 +:109BC000120F104328700B000BF0F4FA070507057D +:109BD000070509050B00062408E00C2406E02224F2 +:109BE00004E00024FEA158200BF0F3F96878800906 +:109BF00080012043687070BD00780007000F704737 +:109C000010B50622C01C0BF047F810BD0B4610B56E +:109C1000C11C062218460BF03FF810BD10B50622F5 +:109C200009300BF039F810BD0B46014610B506227D +:109C3000093118460BF030F810BD0278BF23C90770 +:109C40001A40490E0A430270704700784006C00F60 +:109C5000704702785206520EC9010A4302707047DB +:109C60000078C009704770B50C460546C11C2046F7 +:109C7000062209300BF010F820784006400E2070C4 +:109C800029784906C90FC9010843207070BD70B515 +:109C900015460E4604461F2A03D9D1A1A9200BF070 +:109CA00098F920462A46314609300AF0F5FF6078D7 +:109CB000AD1D80098001A906890E0843607070BD42 +:109CC00070B5054640780E468406A40E062C03D2D5 +:109CD000C3A1B9200BF07DF9A41FE4B21F2C00D959 +:109CE0001F2429462246093130460AF0D5FF204676 +:109CF00070BD70B515460E4604461F2A03D9B8A19B +:109D0000CD200BF066F920462A46314609300AF08C +:109D1000C3FF6078AD1D80098001A906890E084344 +:109D2000607070BD70B5044640780E468506AD0E75 +:109D3000062D03D2AAA1DE200BF04BF9AD1FEDB228 +:109D40001F2D03D9A6A1E2200BF043F921462A4694 +:109D5000093130460AF0A0FF284670BD10B5042234 +:109D60000F300AF099FF10BD0B46014610B50422D2 +:109D70000F3118460AF090FF10BD10B503221330C2 +:109D80000AF08AFF10BD0B46014610B503221331BD +:109D900018460AF081FF10BD4176090A81767047A6 +:109DA000817E427E080210437047C176090A01771E +:109DB0007047017FC27E0802104370474177090A4D +:109DC00081777047817F427F080210437047C175D9 +:109DD000090A01767047017EC27D08021043704770 +:109DE00081757047807D704720300279C90652091D +:109DF0005201C90E0A430271704720300079C00633 +:109E0000C00E704720300279D206D20E49010A43B3 +:109E100002717047203000794009704710B5052263 +:109E20001F300AF039FF10BD0B46014610B5052260 +:109E30001F3118460AF030FF10BD30B5411C837E3B +:109E40000A461902D37D447E927D1B0221431343AF +:109E5000674D827D8C1FAC4210D8002A0ED0082A94 +:109E60000CD88A420AD28B4208D8817F427F0802EE +:109E70001043A91D884201D8012030BD002030BD0B +:109E800000210A464254491C2229FBDB70474078D6 +:109E9000C006C00E70474078C006C00EC01C704798 +:109EA0002220704710B502788B07920892009B0F12 +:109EB0001A4302704278520952014270012908D0B7 +:109EC000022906D0032905D0FF2045A1A3300BF0BD +:109ED00080F810BD01210A43427010BD10B5027810 +:109EE0008B07920892009B0F1A4302704278520926 +:109EF00052014270012908D0022906D0032905D059 +:109F0000FF2037A1BD300BF064F810BD01210A43DA +:109F1000427010BD00788007800F70470278FB23E5 +:109F2000C9071A40490F0A4302707047007840077A +:109F3000C00F70470278F723C9071A40090F0A4378 +:109F40000270704700780007C00F70470278EF2357 +:109F5000C9071A40C90E0A43027070470078C0064C +:109F6000C00F704770B50546C1700B000BF022F9A9 +:109F70000E080A0C0E1012120C14141212160C18E1 +:109F80000C2413E0082411E002240FE017240DE054 +:109F90000D240BE0012409E0092407E0062405E074 +:109FA000452000240EA1C0000BF013F8687840098A +:109FB00040012043687070BDC078704770B504469A +:109FC00040780E46C506ED0E1B2D03D904A10948A5 +:109FD0000AF0FFFF6019C01C042231460CE00000AB +:109FE0007372635C756C5F7064752E6300000000B3 +:109FF0007A0C00003A0200000AF04EFE70BD70B507 +:10A00000044640780E46C506ED0E1B2D03D9A04927 +:10A01000A0480AF0DEFF6119C91C042230460AF08C +:10A020003BFE70BDC171090A01727047017AC279A5 +:10A030000802104370474172090A81727047817AA1 +:10A04000427A080210437047C172090A01737047CF +:10A05000017BC27A0802104370474171090A81717D +:10A060007047817942790802104370470171704747 +:10A07000007970474173090A81737047817B427B85 +:10A0800008021043704730B5411C037A0A46C47970 +:10A0900019022143537914791B0223437E4D007921 +:10A0A0008C1FAC4210D800280ED008280CD888424B +:10A0B0000AD28B4208D8D07A917A00020843A91DAF +:10A0C000884201D8012030BD002030BD10B50522E6 +:10A0D000001D0AF0E1FD10BD0B4610B5011D052263 +:10A0E00018460AF0D9FD10BD4172090A8172704705 +:10A0F000817A427A080210437047017170470079F3 +:10A10000704710B50822001D0AF0C6FD10BD0B46B1 +:10A1100010B5011D082218460AF0BEFD10BD0A78D0 +:10A120000273497841737047027B0A70407B487024 +:10A13000704710B508220E300AF0AEFD10BD0B4678 +:10A14000014610B508220E3118460AF0A5FD10BDD3 +:10A1500010B5042216300AF09FFD10BD0B460146D3 +:10A1600010B50422163118460AF096FD10BD10B540 +:10A170000822001D0AF090FD10BD0B4610B5011D10 +:10A18000082218460AF088FD10BD10B504220C30D4 +:10A190000AF082FD10BD0B46014610B504220C31B9 +:10A1A00018460AF079FD10BD017170474171090A26 +:10A1B00081717047C171090A017270470079704757 +:10A1C00081794279080210437047017AC279080206 +:10A1D00010437047017170470079704701717047F3 +:10A1E0000079704710B50822001D0AF055FD10BD1A +:10A1F0000B4610B5011D082218460AF04DFD10BD92 +:10A2000010B50822001D0AF047FD10BD0B4610B521 +:10A21000011D082218460AF03FFD10BD70B5154615 +:10A220000E4604461B2A04D93720194900010AF0BA +:10A23000D0FE2A463146E01C0AF02EFD6078E90681 +:10A2400040094001C90E0843607070BD70B50546F5 +:10A2500040780E46C406E40E1B2C04D9DF200C49BE +:10A2600080000AF0B6FE2246E91C30460AF014FDD2 +:10A27000204670BD4078C006C00E1B2801D80120C2 +:10A2800070470020704710B522220AF005FD10BD6E +:10A29000E09F0000430200007A0C0000FEB50F466C +:10A2A00004460146064620302546C031603640351A +:10A2B0000190032F04D0002F2DD0012F2BD04BE085 +:10A2C00000206080A080E08020816081A082E08505 +:10A2D000E0826874A074E074A076E076A073E07306 +:10A2E00020746074019B987401232B74A8822883C6 +:10A2F0000876E883B0706883A873E8732077607786 +:10A30000019988720199087430727072B072327457 +:10A31000B074A883FEBD0020A8822883012F52D0EC +:10A32000E08B0090608C0290C00000990AF02EFD36 +:10A33000401C80B2E8820099192241439202914266 +:10A3400001DD401EE8827D20000200990AF01EFD1A +:10A35000401C3080002F01D0022FDBD10198007A01 +:10A36000C1060198C90E01720020687322182421C9 +:10A370008B5C4032D9075B08DE07C90FF60F7118F6 +:10A380005B08DE07F60F71185B08DE07F60F711821 +:10A390005B08DE07F60F71185B08DE07F60F711811 +:10A3A0005B08DE07F60F76185908891911726A7B67 +:10A3B000401C5118C0B269730528D7D3002FA9D10A +:10A3C0000020A874FEBD4A7F2046E030022A12D049 +:10A3D000097F022913D050A173200AF0FAFD012051 +:10A3E00000900290E08BA98B484300990AF0DCFCB6 +:10A3F000A883029898E7818800910089F1E7018A93 +:10A400000091808AEDE770B504464034667B0546CE +:10A41000002E68D0252E66D8002964D03E20405DED +:10A42000A27B4843101825210AF0B0FC0846A1730E +:10A430004207C908520F3C4B691820319A5C0979D0 +:10A440008A4367D031460AF0A1FC491CCAB20020F9 +:10A4500006E0002804D029184031C979511ACAB23F +:10A46000291848235B5C93423AD320310979C943C8 +:10A47000CB07DB17D21A521E1206120E34D08B07EE +:10A48000DB17D21A521E1206120E2FD04B07DB1703 +:10A49000D21A521E1206120E2BD00B07DB17D21A3D +:10A4A000521E1206120E27D0CB06DB17D21A521EEE +:10A4B0001206120E23D08B06DB17D21A521E12067A +:10A4C000120E1FD04B06DB17D21A521E1206120EA6 +:10A4D0001BD00906C917511A491E0A06120E17D0B9 +:10A4E000401C0528B5DB70BDC00013E0C000401C57 +:10A4F00010E0C000801C0DE0C000C01C0AE0C000DD +:10A50000001D07E0C000401D04E0C000801D01E008 +:10A51000C000C01DE07370BD7372635C6C6C5F75CE +:10A5200074696C2E63000000EC51010010B5FF4807 +:10A530000021017041708170C17041718171C171E0 +:10A54000083009F073FB002804D0FF20F8A1843004 +:10A550000AF03FFD10BD10B5F44900204872081DF7 +:10A5600009F064FB002804D0FF20F1A1C3300AF0F9 +:10A5700030FDFFF7DBFFF148FFF782FC0021EF48D9 +:10A58000FFF7E4FC0121ED48FFF78CFC10BDE2E78A +:10A590001B207047E5494A7A002A01D00020704705 +:10A5A000488101204872704710B5E0494A7A002A74 +:10A5B00002D04989814201D0002010BDDB48001D36 +:10A5C00009F03CFB002804D0FF20D9A1B4300AF0E8 +:10A5D00000FDD648001D09F049FBFFF7A7FF012049 +:10A5E00010BD70B5D14C0025627A002A02D0628974 +:10A5F000824201D00D700DE0227863789A4203D335 +:10A6000022786378D21A04E062782378D21A102371 +:10A610009A1A0A70FFF7C8FF002801D0657201205E +:10A6200070BDC2494A7A002A04D04989814201D1C9 +:10A630000120704700207047BC490A784B78521CB3 +:10A640001207120F9A4207D0097822225143BC4ABE +:10A65000891801600120704700207047B3480178D5 +:10A660004278491C0907090F914206D00178491C1C +:10A670000907090F01700120704700207047AB499E +:10A680004A7A002A04D04989814201D101207047C9 +:10A6900000207047A5490A784B789A4207D049783C +:10A6A00022225143A64A89180160012070470020E8 +:10A6B000704710B59D4C20786178884216D060783C +:10A6C000401C0007000F6070201D09F0B7FA002839 +:10A6D00004D0E078401CE070012010BDA078401C40 +:10A6E000A0709248001D09F0C1FAF5E7002010BDE6 +:10A6F0008E4801784078814201D1012070470020C6 +:10A7000070478A4801784278914202D301784078B4 +:10A7100003E041780078081A1021081AC0B2704787 +:10A720000F20704770B5814C0D46617A002916D014 +:10A730006189814213D100262E70201D09F07EFA16 +:10A74000002805D1A0782870A670201D09F08EFA87 +:10A750002878E17840182870E670012070BD00204C +:10A7600070BD76490160704770494A7A002A04D06A +:10A770004989814201D101207047002070476B490F +:10A780004979002901D0002070476E4901600120FD +:10A79000704766484179002901D0002070470121A7 +:10A7A00041710846704761494A7A002A04D04989B4 +:10A7B000814201D101207047002070475B494979EF +:10A7C000012901D0002070475E49016001207047D7 +:10A7D00056484179012901D000207047002141717C +:10A7E0000120704751484079012801D0012070476D +:10A7F000002070474D494A7A002A04D04989814295 +:10A8000001D1012070470020704770B5474C0546C4 +:10A81000A0790721401C0AF0B9FAE079814208D0FA +:10A82000A07922214843474922314018286001205D +:10A8300070BD002070BD10B53C4C0721A079401CB4 +:10A840000AF0A4FAE079814207D0A0790721401CE0 +:10A850000AF09CFAA171012010BD002010BD334800 +:10A860008179C079814201D1012070470020704771 +:10A870002E494A7A002A04D04989814201D1012017 +:10A8800070470020704710B504462848083009F08A +:10A89000D5F9002815D125498879CA7990420CD07C +:10A8A000C8792221484327492231401820601F4897 +:10A8B000083009F0DBF9012010BD1C48083009F010 +:10A8C000D5F9002010BD10B504461848083009F02D +:10A8D000B5F9002815D115498879CA7990420CD06C +:10A8E000C8792221484317492231401820600F4877 +:10A8F000083009F0BBF9012010BD0C48083009F000 +:10A90000B5F9002010BD094810B5083009F096F9D6 +:10A91000002822D1054CA079E17988421AD0E0794B +:10A920000721401C0AF032FAE1710DE066000020B8 +:10A930007372635C646D5F712E630000B01700205A +:10A9400080140020A01600202046083009F08EF95F +:10A95000012010BD0C4809F089F9002010BD0A48FB +:10A9600008388179C079814201D1012070470020E7 +:10A970007047054808388179C079814201D10120AA +:10A9800070470020704700006E000020704770473D +:10A99000FF207047704770470020704700207047C5 +:10A9A000002070470020704700207047002070474B +:10A9B000002070470020704700207047012070473A +:10A9C000002070470020704700207047002070472B +:10A9D000F8B5FF4D0446A87F002600280CD00029BA +:10A9E00023D1667010202070E87FA07028462030A8 +:10A9F0000078E070AE7718E0287A012801D00020B6 +:10AA0000F8BD002911D16670F149687A01270A3131 +:10AA1000002801D0132000E0052020701422A01C83 +:10AA20000AF03AF9A7716E722E720120F8BDF8B5DE +:10AA3000E8480078002802D00C273846F8BD0027E7 +:10AA4000E34D3C46203DAF74EF746F75AF752F75C5 +:10AA500028466F732038DE4E47737771E87D0028F3 +:10AA600004D0FEF785FDFFF744F8EC75347274727C +:10AA7000B477D7482430FFF78DF8D5484C30FFF72E +:10AA800089F8DAE710B5D34C00232370D04C203C72 +:10AA9000E375CF4B01241C71603B583307C3FFF7AC +:10AAA000C6FF002804D0FF20CBA102300AF091FAA3 +:10AAB00010BDC7482038807C7047F8B5C44D0646A5 +:10AAC000407B203DE873C24837791346AF73B27BB1 +:10AAD00082710446603C217006221946601C0AF00F +:10AAE000DBF8B07960730622F11DE01D0AF0D4F89E +:10AAF000687B0126002800D0EE74B5484038407BC2 +:10AB0000002800D02E75002F09D0012F09D0022F68 +:10AB100024D0032F46D0FF20AFA14D3013E00021F9 +:10AB20001DE0AB4801212430FFF744F8A848E11D9F +:10AB30002430FFF773F8607B002807D0012807D086 +:10AB4000FF20A5A143300AF044FA0CE0002100E008 +:10AB500001219F482430FFF77CF804E006219C483F +:10AB60002430FFF727F800206875A8759848611C05 +:10AB70002430FFF745F8964821782430FFF75DF838 +:10AB8000934804214C30FFF715F89148611C4C3074 +:10AB9000FFF736F88E4821784C30FFF74EF8AE7448 +:10ABA0000020F8BD0221DAE770B5894C0125203C70 +:10ABB0000246A5758648007A002801D03A2070BD6B +:10ABC000834860380378934206D1002262750622DA +:10ABD000401C0AF061F86575002070BD70B5044630 +:10ABE0007B4D0020203D28752846224632380AF049 +:10ABF00053F82846203844730120287570BD7449E5 +:10AC00000871704710B5724C0022203CE2746073EA +:10AC10000246204612380AF03FF80120E07410BDC9 +:10AC2000F8B500F04CFB6A4C0025203CE07D002884 +:10AC300004D0FEF79DFCFEF75CFFE575654E3570B0 +:10AC4000FEF75AFCA07B012804D00021084601F041 +:10AC500082FAF8BD0021022001F07DFA5C4C207AD6 +:10AC60000127002809D0A07F0028F2D10520E07735 +:10AC7000204620300570A777F8BD70780028FBD0FB +:10AC8000534906226039487BE073C91D0846693084 +:10AC90000AF002F83C20A07227727570F8BD10B55A +:10ACA0004B4C203CE17B207CCA0701D0C2070BD073 +:10ACB0008A070FD582070DD42620FEF7EAFA207CFA +:10ACC00002210843207410BD2520FEF7E2FA207C03 +:10ACD0000121F6E74907F6D54007F4D42720FEF70F +:10ACE000D8FA207C0421ECE770B53A4D287800288A +:10ACF0007CD1374C203CA07C00287CD0FEF7F1FBB7 +:10AD00000026267466746E703046FEF7E7FB00205E +:10AD1000FEF7E5F93448FEF7B3FA2546403D296EC3 +:10AD20008857FEF779FA3048C01EFEF792FBFEF70F +:10AD300008FCFFF7B4FFFEF729FAFEF7CBFB012072 +:10AD4000FEF70DFB0F210520FEF744FA2978681C59 +:10AD5000FEF732FAA07B01280AD0E07C002807D059 +:10AD6000214612390846627B5630FEF790FFE674A2 +:10AD7000207D002808D0164840380146427B123911 +:10AD80008C30FEF7B6FF2675607D00280BD010488A +:10AD9000691C2430FEF734FF0D48691C4C30FEF767 +:10ADA0002FFF6675A675E86D0178002903D001783C +:10ADB000001DFEF713FAA86D0178002907D001786D +:10ADC000034A401C7732FEF774FE0120E0750EE066 +:10ADD00034180020740000207372635C6C6C5F6137 +:10ADE00064762E6300000000F751010003E0FEF7D7 +:10ADF00083FB002070BD0C2070BDFB49486070478C +:10AE000070B50546FEF79DFB002D06D00020FEF72D +:10AE10005CFAFEF7BBF9FFF742FFF44C607C0028B8 +:10AE200009D0A07B012803D1F149F2480AF0D1F8FA +:10AE3000FFF7F6FE70BD0126002D05D00220FEF7BB +:10AE40008EFAEA4820304671E8484430FEF759FB54 +:10AE5000012008F0A8FDFEF7A1F9A07B00280FD083 +:10AE600001280DD002280BD003280BD0E148E0497F +:10AE70001E300AF0AEF8E07B217C884306D009E062 +:10AE8000032000E00120FEF720FAF4E7A07B012870 +:10AE900003D06674D448067070BD00202074F9E7B2 +:10AEA00010B5FEF71EFBD048007800280ED1CF4821 +:10AEB000807C00280AD00020FFF7A2FFF6F781FA75 +:10AEC000CA4820300079012806D007E000F0F7F9E1 +:10AED000FEF712FB0C2010BDF8F79AF8002010BD09 +:10AEE000C14901204870704770B500F0DAFF0028B2 +:10AEF0001BD0FF202D30FEF7E5F9BB4E3078BB4C60 +:10AF00002034012814D0022801D003282ED0A520F7 +:10AF1000B74980000AF05DF83078002807D0F6F7CE +:10AF200050FA207901282BD02FE0FFF779FE70BD71 +:10AF3000AE4DA87B032819D0FEF7F4FAE87D00286F +:10AF400003D0FEF7C6FDFEF70CFBA8489430FEF7D1 +:10AF5000D8FA012008F028FDA87B01280BD0A179A0 +:10AF60006F20012906D0032904D004E00120FFF757 +:10AF700047FFD1E77F20FEF7A8F902203070CBE72A +:10AF80006079002801D1FEF7A1FB0020607170BD3F +:10AF900070B5964CE07D002803D0FEF7E9FAFEF785 +:10AFA000A8FD00F07EFF00281CD08F4D28780228D5 +:10AFB00003D08F4990480AF00CF8A07B012814D0E8 +:10AFC000FF202D30FEF77EF90120FFF719FF2878CA +:10AFD000002809D0F6F7F5F9844C203420790128AF +:10AFE00006D00AE0FFF71CFE70BD99208000E9E75B +:10AFF0006079002801D1FEF769FB0020607170BD07 +:10B00000F8B50446FEF738F90746FEF78DFD01282E +:10B0100027D0002674480078022804D07648744966 +:10B020003C3009F0D6FF714DE87D002803D0FEF7D3 +:10B030009FFAFEF75EFDFEF784FA6C489430FEF747 +:10B04000DBFD21006D4C009064D0FEF7BFF80028B6 +:10B0500060D0009803000AF0ADF8065D5D5D065D06 +:10B060001E5D0126D6E7A87B012853D0374304D1C3 +:10B07000A079002801D002284CD160484C30FEF75E +:10B0800040FA012008F08FFC0120FEF71EF9564817 +:10B090000321017045E059487430C178D438C27931 +:10B0A00091421DD10146D4310A79037A9A4217D1CF +:10B0B0004A79437A9A4213D18A79837A9A420FD194 +:10B0C000CA79C37A9A420BD10A7A037B9A4207D192 +:10B0D0000978407B4906C90F814201D1012100E076 +:10B0E0000021A87B012802D0002803D012E000290B +:10B0F00007D10FE0374304D1A079002801D00128FF +:10B1000008D13E487430FEF798FE002802D0A87D92 +:10B11000002810D0FF202D30FEF7D4F80120FFF7D3 +:10B120006FFE3148007800286AD0F6F74AF9207996 +:10B1300001286ED0C0E02C4F30497868042283315A +:10B14000343009F0A9FD2D484021743000784006C4 +:10B15000C20F78680A54294906227731413009F034 +:10B160009BFD2649786803228731383009F094FD29 +:10B1700022483B217430827D78680A541F4974311B +:10B180000A7ECB7D12021A4382878A7E4B7E120290 +:10B190001A43C2830A7FCB7E1102194301841749E7 +:10B1A00074318A7F4B7F1102194341841349052270 +:10B1B0009331243009F070FD10497F68943108798B +:10B1C000C20638462030D20E0090827709794909AC +:10B1D000C177207A00281DD0A07F00285BD1607A3B +:10B1E00000280ED013200DE0740000201418002059 +:10B1F000D8AD0000F9030000BF02000034180020A1 +:10B200005CE00520E0773449002008700120A07739 +:10B2100041E04CE03048E97D1038002924D000217D +:10B22000A172B989A1814021C95DE1733946062225 +:10B23000413109F031FDF88BE082388C2083788C25 +:10B2400060830098C07F2077607F400840003043D3 +:10B250006077FEF776FC617F4000C907C90F0143A4 +:10B2600061770120607215E00021A172B989A18186 +:10B270004021C95DE17339460622413109F00CFDD8 +:10B28000F88BE082388C2083788C60830098C07FB4 +:10B29000207701202072114D0020287000F00FF857 +:10B2A000FEF72AF90120696800F055FF39E7607957 +:10B2B000002801D1FEF70AFA00206071F8BD10B530 +:10B2C000FEF74AF9FEF73DF9FEF78BF80020FDF78F +:10B2D000FCFFFEF7CAF810BD5418002074000020CF +:10B2E0008107C90E002808DA0007000F0838800817 +:10B2F000FD4A80008018C06904E08008FB4A800095 +:10B3000080180068C8400006800F704710B500F034 +:10B310007BFF10BD70B5F64C0546A26800290DD024 +:10B32000002A04D0FF20F3A14C3009F052FEA560A2 +:10B33000F6F748F80220F6F73FF870BD002A04D16E +:10B34000FF20ECA1543009F044FE0020A060F6F785 +:10B350003AF80120F6F738F870BDE5481030C07EA5 +:10B36000002801D00020704701207047E0481030CD +:10B37000C07E7047DE483430C07E70470021C17601 +:10B38000817601600162DA481030C07E002807D162 +:10B39000D7483430C07E002802D1D549012008703A +:10B3A000704710B50B46C17E847EA14204D0114681 +:10B3B000184607F0B4FB10BDFFF7E0FF10BD38B52D +:10B3C000CB4C606801684978012924D00121684686 +:10B3D00006F05EF968460078CA49000209F0D6FC1A +:10B3E00060680268C0685268511807F0B5F9616872 +:10B3F000C860BF49606834310022884215D0018B93 +:10B40000002912D04272032101720271021D017FD4 +:10B41000FFF7C7FF38BD7D21C068C90007F09CF960 +:10B420006168C860B8480861E3E7018B491C018383 +:10B4300002214172E7E7FFB5AD4F02461037386A87 +:10B440003C68056889B060680790A948C1680291A6 +:10B450006B880B98C01A80B208900C98002804D012 +:10B46000264638362046483002E03E1D28466430E5 +:10B47000059003203071002A15D0012A7ED0022ABF +:10B4800052D0032A7BD09BA1A04809F0A2FD0C98C2 +:10B490000028307974D0032804D09C4895A1093045 +:10B4A00009F097FD40E1002904D1984891A169383D +:10B4B00009F08FFD9549A88FA839484340180A998B +:10B4C00000F0A8FEA0619149E88BA83948430A9989 +:10B4D00000F0A0FEE06186488C4AC068A98FA83AB7 +:10B4E000514384464118A069894A091A8A183B21A8 +:10B4F000A262864B495DA83B594341180818FF30AA +:10B500001630206260626046101AFF38ED2135382F +:10B51000C9008842BBD27F49884204D27B4875A1CA +:10B520005C3809F056FDBAE0784AA88FA83AE1687D +:10B53000504308180A9900F06DFEA0617349E88B2A +:10B54000A83948430A9900F065FEE0616848C06880 +:10B55000002804D16D4867A1543809F03AFD5820FD +:10B56000405B6D4A0028A88FE16822D0504308183C +:10B57000A169401AA0622169A06802E022E051E0BE +:10B58000CDE04843A169644A40183B21495D5143DD +:10B5900041180818FF3014302062E88BE1695043ED +:10B5A000411A0F208001081A60625148A16AC068E0 +:10B5B0006DE050430818A169401A3968D3384968CA +:10B5C0004018D7E7284640300290008B002801D071 +:10B5D000002904D14D4847A13C3809F0FAFCE88B1A +:10B5E0004D494843E169401AA062029A138B2269CF +:10B5F0009B1A9C46A3685343A2699A186346594311 +:10B6000051183B22525D444B5A438A185118FF315E +:10B61000143121620F218901411A61623449C968DC +:10B62000401A35E00C98002803D03420005D002833 +:10B6300074D1E88B38494843E169401A0899484376 +:10B64000A062284640300690008B0028079829D039 +:10B65000002804D02D4827A1163809F0BAFC069816 +:10B660002D4A018B08980818E16948434000FF30D3 +:10B6700014302062E88B5043411A0F208001081AD1 +:10B68000606200F0C1FD00281CD0A16A0298081A6F +:10B69000FF38ED212338C900884200D3F7E60220A5 +:10B6A0003071F4E6002802D00298002804D117482F +:10B6B00010A11D3809F08DFC0798A16AD33808182D +:10B6C000A062CCE706F0B1FD7A690146104607F0AA +:10B6D000D5FFA16A081AFF38ED211E38C90088423B +:10B6E000DCD201200DB0F0BD00ED00E000E400E090 +:10B6F000D01800207372635C6C6C5F6C6D2E7330BD +:10B700002E63000010270000B78913008A0500008F +:10B7100036040000A3020000E20400002AE003282F +:10B7200002D1FD4807210170A16A786907F014F879 +:10B73000B060616A206A884202D90598016001E020 +:10B74000059908600598F54900680818F060A9880F +:10B750000B98081A00B2002801DD022000E000204A +:10B7600070710C9830700C98002805D03420005D62 +:10B77000002801D00220B5E70C9801214840203470 +:10B780006075397F32463846FFF70BFE0020A9E787 +:10B7900010B5E14900284A68116A096807D01268A3 +:10B7A000C98BDF4BD2695943891A09F0EFFA10BDF2 +:10B7B000F8B5D94F35227868016A0C680168525C87 +:10B7C000002A0AD0498E6288914206D1407A002828 +:10B7D00003D1D449D44809F0FCFB06F026FD01460C +:10B7E0007868406907F04AFFFFF7D2FF79686588FB +:10B7F0000B682E185A8EB24202DB521C5A8602E0A7 +:10B80000401C2818588608683622125C002A05D188 +:10B81000428E23899A4201D1521C4286088B03280A +:10B8200002D2401C088302E00868408EA0802046B7 +:10B830004030C18A808A081A6188401E401885B24B +:10B84000203416E0096AE67F097976004B00B74993 +:10B85000007DCB5A895BC91889B20023FFF7EBFD45 +:10B86000002811D0012810D0AF48AE493A3009F075 +:10B87000B0FB79680868428EAB1A1BB2002BE1DA84 +:10B880000820E07400F00BFEF8BD78680068418E77 +:10B89000491C4186EDE770B51F209F4D002128709F +:10B8A000E960A868C27E130009F084FC04545403C4 +:10B8B0004654026A14680268117002685160006898 +:10B8C0002030407D002808D106F0AFFCA968096847 +:10B8D000096C07F0D3FE002815DCA86801684A8EC1 +:10B8E00061888A4204D12289511A6181628004E010 +:10B8F000511A61810168498E61800268C1681164D2 +:10B90000C16841610FE0A8680168098E6288891AE0 +:10B9100061810168098E618001680A6CC2600A6CED +:10B920004261886C6066204601F06DFC00280ED0F4 +:10B930007B487C49BD3808E0C1684161FFF7D4F914 +:10B94000002804D076487749B73809F042FBF5F76C +:10B9500038FD70BD72487349B038F6E710B56E4ACD +:10B960000B00526809F026FC0906090F1E0C2D2D4C +:10B97000082A2D00FFF78FFF10BD00F059FC10BD05 +:10B98000FDF7A9FE10BDD07E022805D0D07E032889 +:10B9900005D0644966480EE0FFF70AFF10BDFFF7C7 +:10B9A0000EFD10BDD07E0228F6D0D07E0328F6D042 +:10B9B0005F485C490B3009F00CFBF0E706F01BFC1C +:10B9C00010BD23205749000109F003FB10BDF3B55A +:10B9D00081B0514C029825460026012710350300FE +:10B9E00009F0E8FB0906313C3C3143433C3C430051 +:10B9F000494801211030FFF78DFC02990198FFF7AB +:10BA0000ADFFE87E022828D1A0680468006A0668B5 +:10BA100006F0EAFBF18B424A5143E269891AD339B5 +:10BA2000FF223232E162904202D24248081802E01C +:10BA3000081A41494018E0624048E16A814200D852 +:10BA40000846E06206E001460198FFF787FFE87EBE +:10BA5000022802D1286820300775FEBD01466560C6 +:10BA60000198FFF77BFF6660FEBDFF202D49C130C6 +:10BA700009F0AFFAFEBDF8B5064627480D4600248A +:10BA80003430254F0B0009F095FB09060C10100C03 +:10BA9000161610101600204801213430FFF73AFC2A +:10BAA00029463046FFF75AFFF8BD78603046FFF769 +:10BAB00055FF7C60F8BDFF201A49F53009F089FA7E +:10BAC000F8BDF0B5144C0020616885B003268E7671 +:10BAD000CA7E0746032A03D0C97E00293FD03FE033 +:10BAE000087F002804D112480E49D93009F071FAB4 +:10BAF0006068057F684606710221417106F095FB7A +:10BB00000290FF20F53003900121684601706946DC +:10BB1000284607F004F814E0D0180020EF160000C3 +:10BB2000E2040000F4B6000074060000FC510100BD +:10BB30001602000084F8FFFFB5F9FFFF161200009F +:10BB400020BF6068007F07F025FE0028F8D06068FD +:10BB5000007F06F050FB60680777FFF70FFC0120BD +:10BB600061688F7605B0BEE5FD494A68907600E0D1 +:10BB700020BF4A68D07E002803D0D07E937E9842B2 +:10BB8000F6D0D07E002803D00020002191767047A7 +:10BB90000120FAE770B5F24900241031CA7EF04D59 +:10BBA000032A03D02431CA7E032A17D169600028F2 +:10BBB00010D001280AD0EB49EB4809F00AFA00201E +:10BBC0006968002C0860686008D070BD0320FFF72A +:10BBD000CBFF01E0FFF775FF0446F0E70C2070BDD6 +:10BBE000F8B5DF4F04461F25E67E330009F0E2FA80 +:10BBF000042A20031B20DA481030844203D0D9499C +:10BC0000DA4809F0E6F902207C60FFF7ADFF002872 +:10BC100005D07968002008600862786012E00C2581 +:10BC2000002078600BE00120FFF7B4FF054604E038 +:10BC3000CE48CC490C3009F0CCF9002D02D0E07E82 +:10BC4000B042D1D1E07E002804D0C848C5491230A6 +:10BC500009F0BFF9F8BDC24810B51030FFF7C0FFBA +:10BC6000BF483430FFF7BCFFBD490020583108758C +:10BC7000BF494870BA49103148610A4624325061C0 +:10BC800088769076012210390A708860486010BD6D +:10BC900070B504460120FFF723FBC5B20B20FFF768 +:10BCA0001FFBC0B2854204D0B048AE49343809F019 +:10BCB00090F90120FFF714FBC5B21820FFF710FB25 +:10BCC000C0B2854204D0A948A649333809F081F9A9 +:10BCD0000420C043FFF704FBC5B21920FFF700FBA7 +:10BCE000C0B2854204D0A1489E49323809F071F9AA +:10BCF0009F489B490C38047000201031C876887624 +:10BD00000A462432D0769076994B0124083B1C7168 +:10BD100018600862106208601060FFF79CFF70BD39 +:10BD20008F48007870479249083908717047F3B519 +:10BD30000D468B4983B01031CA7E08462430884CAA +:10BD4000002A02D1C27E002A03D0C97E022903D074 +:10BD500005E08848616006E0C17E002901D00C2022 +:10BD600000E76060844806F0F2F96168087760686F +:10BD70007F490160007F002804D17B4879496238FF +:10BD800009F027F906F030FA7C49884200D20846CB +:10BD9000FF30C83086B260680321C1760027012DCC +:10BDA0002FD0724A0399121D5143026851600068F6 +:10BDB00001210170684605F06BFC68460078704907 +:10BDC000000208F0E3FF019106F02FFA01997118C3 +:10BDD00006F0C2FC6168032DC86021D06948086183 +:10BDE000606803210172022141720771021D017F07 +:10BDF000FFF7D7FA6068078307202070002067608C +:10BE0000B0E606F012FA314606F0A6FC6168C8609A +:10BE10005D48086108680770096801204870DFE71D +:10BE20005A48DCE77047F8B54D4E1036F17E0029D0 +:10BE300004D131462431C97E002901D00C20F8BD3F +:10BE40000221F176464C4A4F5834083F376234603D +:10BE5000002538602575397920304A004C49C07F6B +:10BE60008A5A4000085A2B46101881B22A462846A2 +:10BE7000FFF7E1FA002804D03B483A49323009F094 +:10BE8000A8F825610120A5602075658625863448BF +:10BE90007830857539684888401E48803583002091 +:10BEA000F8BD10B52E4901248868827E032A0CD083 +:10BEB00000684078002806D0C8683649884202D910 +:10BEC0000024FFF70DF8204610BD0024FBE72448AE +:10BED000826813681978491C1970C1681068C26AB1 +:10BEE000914204D8007D012801D001207047002034 +:10BEF000704700207047F8B51948194C1030606041 +:10BF0000016A00260D68006834212F460E54403720 +:10BF1000B97C002963D1007D032860D106F085F942 +:10BF200001466068406907F0A9FB002857DDFFF76C +:10BF30002FFC6988401C41186068026811860068FF +:10BF40002989028E91424AD9012120308175F88ACF +:10BF5000B98A401A6988401E401887B238E000004C +:10BF6000D0180020F4B600008D0300006D02000020 +:10BF700088000020CFB9000077BA0000F605000065 +:10BF800010270000CB120000B7891300B70800008B +:10BF9000FC5101002E841300096A09794A00CD4939 +:10BFA0008B5A028E007D94463F22525D5200895A80 +:10BFB000C91889B201236246FFF73DFA00280ED066 +:10BFC00001280ED002280AD0C349C44809F001F85C +:10BFD00061680868028EBA1A12B2002ADCDA66605A +:10BFE000F8BD60680068018E491C0186F0E7F8B56D +:10BFF000BB4D0026AA680128116A0C6810D00720E2 +:10C00000287006F05DF8B7480078F6F7AFFDA8682D +:10C010000683026861885186006820308675F8BD05 +:10C02000087913684100AB481F7D415A032F18D08F +:10C030001A7D022A22D01A7D012AE2D13F231B5DFC +:10C0400022895B00C05A0023401881B20120FFF70B +:10C05000F2F90028D5D0A1489F49B53008F0B9FFC2 +:10C06000CFE71E6112683F2396601B5D22895B004B +:10C07000C05A0023401881B20320E8E75822125B1F +:10C080001A613F231B5D22895B00C05A00234018C0 +:10C0900081B20220FFF7CFF9AA6801211268117559 +:10C0A000D7E738B58E4C0021A0680D46006842786D +:10C0B000002A01D045701FE00078002809D0012136 +:10C0C000684605F0E5FA684600788749000208F0FE +:10C0D0005DFEA0680268C0685268511806F03CFB1B +:10C0E0000146A068C160057102214172021D017FF5 +:10C0F000FFF757F9A068058305F0E2FF794800785B +:10C10000F6F734FD38BD10B50146754A0B0090684E +:10C1100009F050F8060D150408190C1C012100F057 +:10C12000A6F807E00021506800F0A1F810BD01203A +:10C13000FFF75DFF00210846FFF7ECF810BD00682F +:10C140000321017510BD00F0A5F810BD62496748D4 +:10C1500008F03FFF10BD70B5614C002809D00128E0 +:10C1600016D0022821D061485B49243008F031FF05 +:10C1700070BDFFF796FF00210846FFF7CBF8A068D7 +:10C18000807E002801D01F2000E00720207070BDB5 +:10C19000A068002501684D70FFF7F0F80320F6F75E +:10C1A00023FC05F08DFFA56070BDFFF77AFFA06846 +:10C1B000FFF7E4F800210846FFF7ACF80420F6F793 +:10C1C00013FC70BD46498968CA7E022A08D10A68F4 +:10C1D0001378002B04D150600968CA6A1018C8622D +:10C1E000704710B53E4A00290CD0012907D002291A +:10C1F00007D03E483849443008F0EBFE10BD401EE1 +:10C2000000E0401FD06010BD35488068002800D095 +:10C210000120704710B504460020002907D034489B +:10C2200008F0B4FD0146204608F0B0FD401C10BDEA +:10C2300010B52B488068C07E030008F0BBFF0414D3 +:10C2400014030A1401F0F2F800280BD022492948FF +:10C2500006E0FEF725FE002804D026481E49001DF2 +:10C2600008F0B7FE10BD23481B490B30F8E710B5A6 +:10C270000446002903D00020FFF7B9FE03E0194867 +:10C280000078F6F773FC2046FFF778F80020F6F701 +:10C29000ABFB10BD10B512488268106A11680068C7 +:10C2A000CB698B60134BC18B9B3359431368D960A7 +:10C2B0000146E0314B8883870C783B231C548B88E4 +:10C2C000C383CB88038409894184116802200875DF +:10C2D00010BD0000FC510100F4B600005A06000039 +:10C2E000D01800207C00002010270000B2070000BA +:10C2F00040420F0047040000F8B5FEF702FA064678 +:10C30000FEF770FAF94D07466879F94C002809D014 +:10C31000012823D0022826D003282ED0FF20F5A103 +:10C32000C63033E0F2481830FEF748FA002801D052 +:10C3300003200FE0EE481830FEF7ACF9002804D0D7 +:10C3400060696030007A002806D0E9481830FEF7AE +:10C3500008FA012068711BE00220FBE7E44818306E +:10C36000FEF7FFF914E0E2481830FEF793F90028D1 +:10C370000ED1FF20DFA1B83008E0DD481830FEF70D +:10C380001DFA002804D1FF20DAA1C03008F021FEF8 +:10C39000A169F722087810400870AA79D207120F15 +:10C3A0001043FB2210400870EA79D207520F104365 +:10C3B00008706B79EF22022B04D0012B07D0032BDE +:10C3C00007D00CE0012E06D8002F04D007E07F1E16 +:10C3D0003E43002E03D010401022104300E01040D6 +:10C3E0000870287C002811D0687901280ED0BF4839 +:10C3F0005438FDF786F8BD49606954397830A26930 +:10C40000FDF7E3FA0020FDF7EFFA04E00846FDF738 +:10C4100078F8FDF70CFBA0690078C00606D4E06947 +:10C420000078C00602D4E079002802D0A079002864 +:10C4300001D0012000E00320FCF747FF032020701B +:10C4400001202071F8BDAA4810B51C30FEF7DDF9B7 +:10C45000A74C002802D00020607004E0012060702A +:10C46000A2485438E061A148407C002802D060789E +:10C47000002805D0E069FDF744F8FDF7D8FA10BDB3 +:10C480009A485438FDF73DF8984A6069543AA0300C +:10C49000E169FDF79AFA0120FDF7A6FA10BD10B583 +:10C4A00093490022486932238276C27601221A54C7 +:10C4B0004030807C002803D00A700021022001E077 +:10C4C00000210320FFF71FFE10BD70B5884C607976 +:10C4D000C2062046416908464030002A01DA00229F +:10C4E00002E0028B4B89D2180B460283C0331A7EBE +:10C4F000002A03D0828B4D8952198283627A002AE6 +:10C5000003D03D2001F0C9F852E08A7E032A4FD0C3 +:10C51000227A002A13D0500701D4D00601D51E205C +:10C5200036E0100701D53D2032E0D00705D1900755 +:10C5300003D470A1734808F04CFD2A2028E0603134 +:10C540008A78002A05D0C28B551CC5830D88AA4263 +:10C550000FD25A7F062A02D01A7F062A05D1428BB3 +:10C56000531C438309888A4203D2828BC18A8A4240 +:10C5700001D322200CE0027C808A002A0FD00628FA +:10C580000FD35A48C07B012801D03E2000E008208C +:10C5900001F083F86069807E032809D001E08842B9 +:10C5A000F5D20120207000210846FFF7ACFD70BDD8 +:10C5B000FFF775FF70BD10B54C494D48CA7B002A86 +:10C5C0002BD0012A29D0022A27D0032A04D049A13E +:10C5D0004D4808F0FEFC10BD897B02290FD00729C9 +:10C5E0001BD0406901464031CA8A898A511A891E86 +:10C5F00089B2032900D30321028951180BE0406955 +:10C60000014640318A8A032A01D2018903E0428827 +:10C61000C98A5118491C818010BD4069F5E700B5F1 +:10C62000030008F0C7FD0604070B0F1212170029BC +:10C630000ED00FE0491E02290AD90BE0491F01293B +:10C6400006D907E0072903D004E00A390C2901D8EC +:10C65000012000BD002000BDFEB50546244818306D +:10C66000FEF78DF8002804D1274822A1CF3808F022 +:10C67000B0FC1F4CA069FDF703FC0321A069FDF786 +:10C680002DFCA069EF220178114001702946FDF7C9 +:10C6900069FC002601272B0008F08CFD0E5D5D086B +:10C6A0005D1D6161155D4D5D613D385D60697121A4 +:10C6B000095C002901D0062101E0C030417EA0695B +:10C6C000FDF71BFD4BE0E069FDF776FC0146A06934 +:10C6D000FDF784FD43E06169A069D031FDF747FDB6 +:10C6E0006169A0699531FDF750FD38E0C819002057 +:10C6F000900000207372635C6C6C5F736C61766594 +:10C700002E6300006B020000780800000621A0697B +:10C71000FDF760FD23E020690178A069FDF744FD85 +:10C7200020698188A069FDF741FD20694188A069E1 +:10C73000FDF740FD13E00096019660696030007CD3 +:10C74000002803D069460878384308706946A06914 +:10C75000FDF756FD03E0FE49FE4808F03AFCFEF7FF +:10C7600018F8002804D1FB48F949801D08F031FC75 +:10C770000C2D07D0072D04D060695E210E52603069 +:10C780008770FEBD606940304683FEBDF0B5F24C57 +:10C79000DC2061698DB0405C042809D0052834D1C3 +:10C7A0006031487A002829D001204874022026E010 +:10C7B0001022EA31684600F0A8FF61691022C831F2 +:10C7C00004A800F0A2FF684605F0BBF8616908AA5A +:10C7D0006CCA0F46CB6778378A670846FE608030A0 +:10C7E000BD60074620376CC7002303634363012005 +:10C7F000A0310876D9494874052000E00D20FFF7E4 +:10C800002BFF61690020C03108770DB0F0BDF8B58D +:10C81000D1481830FDF7B3FF002842D0CE4C207A23 +:10C8200000283ED160690025C030007ECB4E002834 +:10C830000BD0B17B0120FFF7F2FE002805D1B17BC0 +:10C840000420FFF7ECFE002806D060690127C03005 +:10C85000407F062807D00CE060695C210D526030F3 +:10C86000457402202FE0B17B0420FFF7D8FE00289A +:10C8700010D0B07B030008F09DFC173F3F3F3F1EE8 +:10C880003F3F3F3D3F203F3F3F292C3F3F3F3F3F02 +:10C890003F2F3F0060696A21095CC90702D0C030A0 +:10C8A0004577F8BD0C20FFF7D7FE60696030817ACC +:10C8B00039438172F8BD072005E0FDF7D0FF00285D +:10C8C000F8D075740B20FFF7C7FEF8BD00F02CFF01 +:10C8D000F8BDFFF75BFFF8BD606900218030816023 +:10C8E000C160057437740620FFF7B6FE60696030DA +:10C8F0008570F8BD0920E6E700F0D8FEF8BD70B5F8 +:10C90000964DA87B072834D1934CDE22606941887C +:10C91000125A491C91422CD1217A002929D1014671 +:10C92000E0318B88C28B934207D1CA88068CB24211 +:10C9300003D10A89468CB2420DD0884A8689303AA2 +:10C9400056819381CB88D3810989118201462E318A +:10C9500051600121117001221146FDF79FFC002159 +:10C960000420FFF7D0FB61690020C0314877A8732D +:10C97000E87370BD70B5794CA07B162803D074495C +:10C98000774808F026FB74480021426973486032FA +:10C99000117291703038067E0B250123002E06D0CF +:10C9A000027D002A12D14575817503750EE0567A15 +:10C9B000002E06D051722288828381760C22027664 +:10C9C00004E022888283817683770576A17370BD27 +:10C9D000F8B5614DA879800723D5287A002820D1A1 +:10C9E0005E4C0120A17BFFF71AFE002819D1A8692F +:10C9F0000127C0780026030008F0DCFB0E62620805 +:10CA0000622E3B4F0A62146220524562022021E0EE +:10CA1000A07B042804D052484D49333808F0D9FA95 +:10CA2000A673F8BDA07B082804D04D4848492D388E +:10CA300008F0CFFA686960308670F1E7A07B0A28B9 +:10CA400004D047484249263808F0C3FA6869603084 +:10CA500007720B20A073F8BDA07B0E2804D0AB207A +:10CA60003B49C00008F0B5FA6869603007720F20D2 +:10CA7000F0E7A07B0F2804D039483549183808F072 +:10CA8000A8FA1120E6E7A07B0F2804D034483049EB +:10CA9000123808F09EFA1320DCE7FFF76BFFF8BDB1 +:10CAA00069690846C0310A7F062A04D16030807A5D +:10CAB000800700D50E77487F0628F0D14E77F8BD65 +:10CAC000274823496E3008F084FAF8BD10B5234C8E +:10CAD0000020A17BFFF7A3FD002804D11E480122FE +:10CAE000017A114301720420A07310BD10B51A4CD5 +:10CAF00060690146C0314A7F002A06D0097F0629B5 +:10CB000003D0217A0122114321726030807A80079C +:10CB100015D4E069FDF752FB61696031C872E069C4 +:10CB2000FDF74EFB616960318881E069FDF74DFBDF +:10CB3000616902226031C881887A10438872606915 +:10CB400000220146C0310B7F062B00D10A7709E095 +:10CB5000F4C60000ED07000090000020C819002076 +:10CB6000770500006A231B5CDB0703D106234B77A4 +:10CB70004030428310BDF8B5FE48817B0020FFF7AE +:10CB80004EFDFD4C0126002807D160696030407AD7 +:10CB9000002802D1207A30432072616900255E208E +:10CBA000455262204654C831E069FDF7C8FA616910 +:10CBB000E0699131FDF7D2FA6169042208469131AA +:10CBC000B93008F069F8EB483038017E08270029B1 +:10CBD00006D0017D002912D14775857506750EE0D6 +:10CBE0006169054689894183E249E0691439FDF7A5 +:10CBF0008EFAE049E0690C39FDF796FA2F76DD48A8 +:10CC00000E218173F8BD70B5DA4D0020A97BFFF7C6 +:10CC100006FDD94C002803D1207A01210843207257 +:10CC2000E069FDF730FA00280ED0E069FDF726FA3A +:10CC30006169DE225052498800F0C1FD002806D00B +:10CC4000282000F02AFD70BDFFF740FF70BDE069AD +:10CC5000FDF70EFA6169E0310870E069FDF701FA4D +:10CC60006169E0314880E069FDF7E0F96169E03130 +:10CC70008880E069FDF7E3F96169E031C880E06927 +:10CC8000FDF7E6F96169E03108810720A87370BDFE +:10CC9000F8B5B94CA079C0076FD0207A00286CD1C4 +:10CCA000B44D0120A97BFFF7BAFC002853D1E069FD +:10CCB0000027C178022201260B0008F07BFA0D162E +:10CCC0001308354A4A384C474A1929444A00FDF7A7 +:10CCD00016FA6169DA225054AE735E204752603111 +:10CCE0008E7038E000F076FD35E0FFF78CFF32E023 +:10CCF000A97B0020FFF793FC002802D1207A304363 +:10CD0000207260695E210F52603086700A2018E040 +:10CD1000A87B0B2802D0207A104320722F74606900 +:10CD2000603046720C200CE0FFF725FF13E0A87B73 +:10CD3000112802D0207A1043207260696030877019 +:10CD40001620A87307E0FFF7D1FE04E000F00FFD06 +:10CD500001E0FFF7BBFEFDF76EFD002804D14F2078 +:10CD60008649000108F035F9606900238030016BC5 +:10CD7000426B491C5A4142630163F8BDF8B57D4FCF +:10CD8000012814D1787C002802D1387C002801D0F9 +:10CD9000FCF74DFEFCF7E0FBFCF7D3FB0020FCF7B3 +:10CDA00094FAFCF71EFBFCF760FBFCF7A5FBF87B95 +:10CDB00001260025704C00280FD16079C10705D0ED +:10CDC0000220F87360694030057402E0800717D5CF +:10CDD000FE7300210120FFF796F9F87B012802D0AD +:10CDE000022808D00CE06079C00709D00220F8734F +:10CDF0006069403005746079000701D50320F8733D +:10CE000000F018FDFFF703FD2079002801D03D81D7 +:10CE100002E03889401C38816079C007606904D01D +:10CE200072210D544030858203E04030818A491CD4 +:10CE30008182E079002806D061696031887C02280F +:10CE400006D8401C887460696030807C022804D950 +:10CE50003D817D81606960308574B97B0020FFF77A +:10CE6000DEFB002802D1B87B06284BD16069014661 +:10CE7000C0310A7F062A45D0497F062942D03D4964 +:10CE8000C97B03293ED16030807C00283AD1FDF770 +:10CE90002FFC002836D0FDF7A5FC002832D06169B0 +:10CEA000C88801282ED90A4640325674D08A978AFB +:10CEB000831E9F4201DB012002E0C01B401E80B2A6 +:10CEC0002C4B1F89A3899F4201D3012302E0DB1B66 +:10CED0005B1C9BB2984200D91846012800D15574BA +:10CEE0002A22525C002A11D0224A898D52898A4214 +:10CEF00001D3012102E0891A491C89B2884205D96F +:10CF0000084603E06169012040314D7461694A8837 +:10CF100010180881FFF74FFB6069122215490C3089 +:10CF200007F0BAFEFFF7D1FAFEF7E3FF00280AD0B8 +:10CF3000104810388179002905D161690246898934 +:10CF4000203A118586710C481C30FDF7BCFC002886 +:10CF50000FD0E06900788007800F012809D00228EF +:10CF600007D0FDF7D0FC002803D10449044808F09D +:10CF700030F807E0C819002090000020F4C6000037 +:10CF80007F030000606940308574F8BD70B5FE4CC9 +:10CF9000607900283CD0FD4D022810D1FDF789FBB7 +:10CFA000002803D1FA49FB4808F013F86A69002306 +:10CFB00080329068D168401C5941D1609060002651 +:10CFC00066712079012804D12671A87910210843BF +:10CFD000A871E078012816D1E670A87908210843E5 +:10CFE000A871FDF7F5FB002804D1EA48E84918309C +:10CFF00007F0EFFF6969002380318A68C868521C16 +:10D0000058418A60C860A079012802D00120A0712F +:10D0100070BDA67170BDF8B5DC4CDB4DE269002730 +:10D020001078042183079B0FE8790126012B11D08A +:10D03000022B0FD0032B01D0207A30E06178002939 +:10D0400005D1AE70A1793143A17123E0EF71F8BD34 +:10D05000EE71F8BD5278D3061CD060780028F8D164 +:10D06000D006C00E1B2818D8607908436071FDF700 +:10D07000E2FB002804D1C748C5494B3007F0A9FF9F +:10D08000606900238030026B416B521C594102637E +:10D090004163E8790128DBD1D8E7207A10210843E1 +:10D0A0002072F8BDF8B5B84D0446303D287D002704 +:10D0B00000280AD0002978D1677010202070687D80 +:10D0C000A070A87DE0702F756FE02878002814D03C +:10D0D00000296AD1072067702E462070083607E0C5 +:10D0E000686807802F700A223146A01C07F0D4FD23 +:10D0F00028780028F4D1A77057E0287EA24E143E6D +:10D10000002837D0002950D1297EA0480B0008F014 +:10D1100051F80D2C2C2C2C2C2C2C2C112C2C2008C8 +:10D120002C0067700C212170A97EA1704069808954 +:10D13000A08018E008216770217040690A46808944 +:10D14000914960801439201D07F0A6FD3089A08127 +:10D1500009E067700B212170A97EA1704069808968 +:10D16000A080A87FA0712F761FE089498A4807F028 +:10D1700030FF1AE0844810388279002A08D000294C +:10D1800013D1677011212170B189618087710CE022 +:10D19000827A002A0BD0002907D1677012212170F2 +:10D1A000318A6180718AA18087720120F8BD0020D8 +:10D1B000F8BD76480078012801D00C2070477249EC +:10D1C0000020303908700875087620318871704762 +:10D1D00070B56E4C064620780D46002804D093208A +:10D1E0006B49000107F0F5FE01202661E07225621F +:10D1F0002070FFF7DEFF002804D0674864494930FB +:10D2000007F0E7FE70BDF8B5604C2178012902D126 +:10D210002178012901D00C20F8BD01460546606146 +:10D2200012220C31584807F037FD01274035AF7402 +:10D23000554D2888FDF723FA002827D02888FDF7C8 +:10D24000D9FA002822D02888FDF78EFA00281DD0B0 +:10D250002888FDF7A8FA002818D0FCF742F9606981 +:10D260000026C088002825D048481830FDF787FAE6 +:10D2700000281FD06069C030007E00281AD0A97B2A +:10D280000120FFF7CCF9002802D013E01220F8BDEE +:10D29000A97B0420FFF7C3F900280BD16069014680 +:10D2A0004030868360314E740220FFF7D5F9606903 +:10D2B00040304674344830380078002806D1606920 +:10D2C000C18D008C814201D9A18102E06069008C8E +:10D2D000A08160694189491E8AB2298989182981FA +:10D2E000297B002902D06E812E7302E0698989189A +:10D2F0006981014640318B8A9B188B82C388012B40 +:10D3000001D85B1CC380002A01D060308674A87BE2 +:10D31000032816D0487C002815D02889A189884286 +:10D3200011D2FDF7E5F900280DD060692A21095CCA +:10D3300000290BD06989808D814207D3A670E770E0 +:10D340000CE0A7700AE0A670E67007E0688900218B +:10D35000401C6881A7700520FEF7D5FE6069512149 +:10D360000E54A97B052901D0062920D1DE2142884F +:10D37000095A511A09B2002919DB01460522E03188 +:10D380002430F3F721FF09E0C819002090000020A5 +:10D39000F4C6000039070000F10800000122022154 +:10D3A0006069FCF77BFF6069C0304677AE736069E7 +:10D3B0004189FDF728F8A07800282AD1606920303B +:10D3C000807A002800D06E810120FBF788FE60691A +:10D3D0003830FCF73EF860693430FBF751FF216AC2 +:10D3E00000200856FBF718FF0120FCF777F8FBF741 +:10D3F000D1FEFCF76FF80120FBF7B1FF6069406ECA +:10D40000FCF782F8FFF71FF860694030C07BFBF73C +:10D4100040FF6671E671A6712672A6726672267169 +:10D4200002202070FCF768F80020F8BD10B5F74C1A +:10D430002078022801D00C2010BDA078002803D04D +:10D440000020FFF79BFC17E0FCF74BF800F01DF9FC +:10D4500060692030007C012809D0FCF79FF8FBF7B9 +:10D460009EFEF3F7AEFFE07A012803D004E0FCF75C +:10D470009DF8F4E7F5F7CCFD002010BDE349C87234 +:10D48000704710B5E14C2078032803D0E049E1480B +:10D4900007F09FFDE04801218278002A06D0002293 +:10D4A00082700171A27904231A43A271A2691378D0 +:10D4B000DB439B0707D1C378002B04D1C170A0794F +:10D4C00002210843A0711078C00606D4E0690078F4 +:10D4D000C00602D4E07900280CD06078002809D179 +:10D4E000A079002806D1FEF7F2FC002802D0207AAD +:10D4F000002803D00120FFF741FC03E0FEF7A3FF63 +:10D5000000F0C3F82078012806D0F3F75AFFE07A3C +:10D51000012801D1FCF7DAF810BD38B5BB4C6069C1 +:10D520002030007C012820D1A07A00281DD1684637 +:10D53000FCF744F8002818D061693120405C0128CC +:10D5400010D1B54A0D236D460020D356285683428C +:10D5500008D050738989303A9185114620318873FB +:10D5600001208872A07A401CA07238BD70B5A74C0B +:10D5700006462078042804D0A648A549553007F06F +:10D5800028FD607910210843A34D6071002E47D01B +:10D59000FCF765FA61780126084300280ED1687C03 +:10D5A00000280BD0E0694178C90607D00078E979F6 +:10D5B0000007C00F884201D1667247E0E07800287A +:10D5C00009D0E0694178C90605D10078C00602D4C7 +:10D5D000FFF7A3FF3AE0FFF7A0FFE069A979007821 +:10D5E0004007C00F884205D0FFF7D0FC60790821C2 +:10D5F00008436071E069E97900780007C00F88424C +:10D6000001D1FFF708FD6079304360710020E071BF +:10D61000A079000702D5A87B022817D0207A13E052 +:10D62000022108436071E079401CC0B2E07101281A +:10D630000CD8687C00280DD0774854384078C10653 +:10D64000C90E052906D2C006002803D00120FFF725 +:10D6500095FB01E0FEF750FE2078012806D0F3F795 +:10D66000B0FEE07A012801D1FCF730F870BD10B5AA +:10D6700066480078042804D066486549B73007F04A +:10D68000A8FC0120FFF77AFB10BD10B50720FBF7BF +:10D690001CFE5E490420087010BD5C4933224969B4 +:10D6A00050545D4A032090738876704710B5574CEC +:10D6B0006069C030007F00281CD0062806D056487C +:10D6C000817B0020FEF7ABFF002813D06069014684 +:10D6D000C0310A7F130007F06DFD070D0D0D0D0D14 +:10D6E0000D050D006030807AC20704D0C04380076A +:10D6F00000D1087710BD0C20FEF7AEFF6069012253 +:10D700006030817A1143817210BD10B5002A0AD0B1 +:10D71000002306E0D41A6418203CE47FC4545B1C48 +:10D72000DBB29342F6D310BD10B503F0B0FF0C2866 +:10D730001CD3364C08216069D03003F0A9FF0028C3 +:10D7400006D060690421953003F0A2FF002803D1C0 +:10D750002F49324807F03DFC6169042208469531A3 +:10D76000BD3007F099FA0420FEF776FF10BD7CB5B6 +:10D77000294E0020B17BFEF752FF0125234C0028E3 +:10D7800002D1207A284320726946E069FCF73EFD09 +:10D79000684600780021C207D20F684602706069AF +:10D7A000002A02D06030057401E0603001746069C5 +:10D7B0005E221152603085700820B0737CBD401A23 +:10D7C000174900B2884201DC002801DC01207047C3 +:10D7D0000020704770B5104D0020A97BFEF71FFF99 +:10D7E0000A4C002803D1207A012108432072E06905 +:10D7F000FCF77EFC6169DE2250524988FFF7DFFFAB +:10D8000000280FD02820FFF748FF70BD90000020AF +:10D81000F4C60000330A0000C819002062060000A8 +:10D82000FE7F00006169E069E031FCF755FC0520EE +:10D83000A873EAE770B500F047F8384C384D6079C6 +:10D84000400709D5A97B0520FEF7E9FE002803D093 +:10D85000207A082108432072FFF71AFA00F012F824 +:10D86000FFF7B6F8A079C00609D5A87B030007F03A +:10D87000A1FC06060606060604060620A873FFF7A6 +:10D880003EF8C2E710B525488179490714D5017AD9 +:10D89000002911D12249897B0B0007F08BFC080D70 +:10D8A000050D0D0D0E0D100D4069002262210A5468 +:10D8B000C030807EFFF7F1FE10BD012100E00221A3 +:10D8C0004069C030417710BD10B51448817909070F +:10D8D0001DD5017A00291AD1114A947B230007F043 +:10D8E00069FC1416160B16161616161616161616AC +:10D8F0001616161616161716406960308170407C91 +:10D90000002801D0062000E01620FFF7C6FE10BD5B +:10D910004069603001728170917310BD90000020E9 +:10D92000C819002010B5031D03600020521E04E03A +:10D930005C181C60401C2346C0B29042F8DB0020FB +:10D94000186010BD01460A680020002A02D0104667 +:10D9500012680A60704702680A6001607047000040 +:10D9600000B51A2822D00ADC030007F023FC0D11B1 +:10D970001F131F1F191915171F1F1F1B1F002A28F0 +:10D9800014DD3A38030007F015FC030F11091100EC +:10D99000002000BD1E4800BD042000BD0D2000BDBC +:10D9A0000F2000BD082000BD112000BD032000BDD8 +:10D9B00010B50C46F4F784FF00281AD02046F4F77F +:10D9C00084F9002812D020780E280BD00F2809D017 +:10D9D000022807D0032805D00EA1772007F0F9FA16 +:10D9E000002010BDA078FFF7BBFF10BD09A17D206E +:10D9F000F4E708A18320F1E710B5F4F7EDF810BDC6 +:10DA000010B5F4F762F910BD10B5F4F744F910BD84 +:10DA1000023000007372635C686F73745F686369DF +:10DA20002E630000F0B597B00021032004F082F9C6 +:10DA30000025FE4E022775807574347C12E0F06874 +:10DA4000E1004018818800290CD0858069460F705C +:10DA50004D7001680291808869468880002168467F +:10DA6000F8F702FD2046641EE4B20028E7D117B0A3 +:10DA7000F0BDEE4BD86019741A80D3E7EB49EC4B3C +:10DA80004A8800201A4200D00120497C002901D098 +:10DA9000082108437047F7B504460E460078012177 +:10DAA000E34A8140521C114098B0E04A00915188ED +:10DAB000E04B994205D0009B002B05D0DC4B19426E +:10DAC00002D001201BB0F0BD009BD84A1943518001 +:10DAD0001A9D002D11D00020287022781A98002756 +:10DAE000401C130007F066FB10EF0D152137555D44 +:10DAF0006A39AFAB85B3EEEDECEF0B28EDD0042027 +:10DB0000E0E702212970A1880170090A4170032011 +:10DB100093E004212970A1880170090A4170E1880D +:10DB20008170090AC170052087E006212970A1884B +:10DB30000170090A4170E1888170090AC170218968 +:10DB40000171090A4171A289E81D216907F0A4F851 +:10DB5000A089C01D71E0082129702178082901D110 +:10DB600010212970A1880170090A4170E188817033 +:10DB7000090AC1700520308020466A1D01A90830BD +:10DB800003F0CFFB00287DD1694630880979401821 +:10DB900053E00A212970A1880170090A417003200D +:10DBA0000AE00C212970A1880170090A4170E188FE +:10DBB0008170090AC170052030809DE0A0888446EC +:10DBC0004000401C81B2308888425BD3052959D37C +:10DBD0000E202870002008E0A36842009B5A5219CA +:10DBE00053701B0A401C937080B26045F4D331809F +:10DBF000B6E08E49487C002873D0401E4874C8683F +:10DC000021790822C9004518A988286840180838D1 +:10DC1000A16807F041F802216846017100214171B5 +:10DC200028680390A98868460181002101A8F8F7B7 +:10DC30001BFC0020A880002E00D0308090E02978C6 +:10DC400080221143297029784022114329702978B4 +:10DC50008909890112312970A1880170090A41706E +:10DC6000E288E81CA16807F017F8E088C01C308043 +:10DC70002878410640D5C00972D00121684601715B +:10DC8000002100E02BE041713188ED1C091D01816C +:10DC90001A980390E08840190490001D634D059088 +:10DCA000297C68460176002101A8F8F7DDFB0746CC +:10DCB00030880C303080022F06D0002F50D060E02A +:10DCC0003CE032E01CE059E06946097EE868CA00A1 +:10DCD00080182A7C914202D28188002902D0042730 +:10DCE0004FE02EE0697C491C69741A990160318803 +:10DCF00081800020308044E04C48A188C1802FE022 +:10DD000029788909890116312970A1880170090AC9 +:10DD10004170E1888170090AC1702289681DE1683B +:10DD200006F0BAFF2089401D46E728788009800167 +:10DD3000183028702079687002207EE73B480A047A +:10DD400001D405271DE00289A3889A4201D0062745 +:10DD500017E01E222A70012249043280490C4180BA +:10DD6000009800280DD0314D0022288811468300EC +:10DD7000032003F03AFF2078287107E0002030806C +:10DD800003272A48009942888A434280384699E608 +:10DD9000F7B59AB002000C4606D0172A04D82348DB +:10DDA000244B4088984202D107201DB0F0BD237853 +:10DDB0005D0601D4DB0901D00820F6E700236D469B +:10DDC0002B706B701D462378611C9F06931E189361 +:10DDD000531E19939BB2169302AB1793134BBF0EAE +:10DDE000DE883B0007F0E6F9208511F15EF16BF16A +:10DDF000A3F1C6F1F2F1FBF1EEF1EDF1ECF1F1F18D +:10DE0000EBF1EAF1E9F1E8F185F1052A71D104229B +:10DE100069460A7005490A7969460A71E178A3786A +:10DE20000A021A436946CA80227905E0DC190020FB +:10DE3000FE710000FFFF00004A7061788906890EBC +:10DE40000C2923D009DC891E0B0007F0B3F9091354 +:10DE500052155219521B521D520012291CD004DCBB +:10DE60000E2915D01029D1D114E0162916D0182961 +:10DE7000CCD115E0800700E04007002839DA2AE11C +:10DE80000007FAE7C006F8E78006F6E74006F4E781 +:10DE90000006F2E7C005F0E7C004EEE78004ECE717 +:10DEA0004004EAE7800724D5032AAFD105206A465B +:10DEB0001070487809780002084390800BE1400711 +:10DEC000F1D5062A15D31898617880B2012902D0BD +:10DED00002299BD101E0022700E0102706226946B3 +:10DEE0000A7000228A8001AEA11C0236BA1C179269 +:10DEF00018E0B6E04A780B7812021A433280801E8E +:10DF0000891C1890B21C1691384603F0E4F9169952 +:10DF100018986B469A88C919C01BB61D521C9A8066 +:10DF2000179A80B28242E5D900289CD1D3E000073D +:10DF3000B9D51998694682B20720087000208880F8 +:10DF4000601C891D11E0437806781B0233430B8067 +:10DF5000C37886781B0233434B806E46121FB3880A +:10DF6000001D091D5B1C92B2B380042AEBD2002A6B +:10DF700077D1B0E0C00674D5022A72D31898082170 +:10DF800082B2684601700021C18063780371A01CD1 +:10DF900017990EE04678077836023E430E80861CBD +:10DFA0004E606F46D21AFE88C0180831761C92B2B5 +:10DFB000FE809342EED9DAE76FE076E065E051E06B +:10DFC00046E01EE014E00AE000E0A0E0800648D54C +:10DFD00009206A46107096801698D0800FE040069F +:10DFE0003FD50A22684602708680169AC28006E0F3 +:10DFF000000636D50B206A46107016989080029164 +:10E0000069E0C0052DD5022A7FD318980C2182B271 +:10E01000684601700021C18063780371A01C1799C4 +:10E0200013E04678077836023E430E80C67887783C +:10E0300036023E434E80061D4E606F46D21AFE8861 +:10E04000C0180831761C92B2FE809342E9D98EE75F +:10E05000C0045AD5012A58D10D2168460170868026 +:10E0600039E052E0800450D5052A4ED30E2368468D +:10E0700003708680C8788B78010219436846C18096 +:10E08000521F0281601D039025E040043DD5012A06 +:10E090003BD10F20694608701DE0030435D44B784E +:10E0A0000E781B023343244E3381032A2DD31B2FBA +:10E0B00027D011236E46337001261F4BF6033043E1 +:10E0C000588048780B780102194368468180D21E37 +:10E0D000C280E01C029020788006800E1B280AD0A7 +:10E0E0001D2808D00021032003F024FE1248418897 +:10E0F000C90BC903418068461C99F8F7B5F9284651 +:10E1000053E610206B461870DBE70725F7E7082574 +:10E11000F5E700B50022D243074997B04A800328AB +:10E1200007D1032268460270097901710021F8F7CE +:10E130009BF917B000BD0000DC190020FFB589B0C5 +:10E140000020019009981027FE4C1E46154608280D +:10E1500006D0E06901F05EF8002809D03770BEE013 +:10E16000288809213843108013980227017016E08F +:10E17000E169012088710521E269C9029180E169A4 +:10E180008872E169F0480881E16900208873288875 +:10E190002021084328801121139804270170139827 +:10E1A0000225801C0290307806900A203070E548E5 +:10E1B0001830049001F022FA0020059020462C30FF +:10E1C00003906DE00998102808D1022D06D001991E +:10E1D0000298A28D401A8270110AC170E08D0A99CE +:10E1E000884202D901F0CDF806E0884204D10698B1 +:10E1F000002801D030701CE00298E18D0170090AFE +:10E20000417012980088401BC01B82B2FF20C01BC7 +:10E21000904200D2024607A8009002980021C3193C +:10E22000E08D01F056FA3070002805D0C0B2832886 +:10E2300058D0E08D20833EE00598002804D0206C63 +:10E2400000790A282CD336E06846808BC119C9B200 +:10E250000191022D0DD01399019A4978914202D172 +:10E26000228F824208D00191206C0178032908D0C6 +:10E2700023E0084613994870206C0178042906D0E1 +:10E2800007E000790A2818D20120059008E0E18D06 +:10E29000818002990198081802900198281885B287 +:10E2A0000399049801F0ADF9002804D11298008870 +:10E2B000401BB84286DA022D0DD00998102806D1ED +:10E2C00002990198A28D081A8270110AC1701298E1 +:10E2D000058000203070206C0078032802D00020D8 +:10E2E0000DB0F0BD0220FBE7F8B5964A0026126D8E +:10E2F000002A2ED0401F934D84B24035E88A234631 +:10E300000833AF8AC318BB4222D88B784F781B02E0 +:10E3100010183B4303701B0A43700B79CF781A0225 +:10E320003A438270120AC2700471220A4271224674 +:10E33000491D801D06F0B0FCE88AA41D001980B2BA +:10E340008049E882096D002208180270427000E0DE +:10E3500009263046F8BD30B57A4B028840339B8A97 +:10E36000934213D9774B1C6DA3185C781D78240257 +:10E370002C430BD05C791D7924022C436404640C7B +:10E38000A41D1219028000200B6030BD822030BD18 +:10E39000F0B585B0074600266846068155E001982D +:10E3A000417802780D021543417902790802104341 +:10E3B00000044AD43D8003A80023012200905202A9 +:10E3C0001946284601F085F9040044D168460189C0 +:10E3D0000182019841790279090211434378027858 +:10E3E0001C021443AC421CD10A041AD44A04012171 +:10E3F000520C89030A430096C178807809020143D0 +:10E400000023204600F0C1FF040010D10199487993 +:10E410000A79000210430122D20310430871000A56 +:10E42000487101A904A8FFF796FF0400D1D0019913 +:10E4300000964878097800020843694600238A89D3 +:10E44000194600F0A2FF822C05D101A902A8FFF70E +:10E4500082FF0400A3D06846068109E0019948794B +:10E460000A79000210434004400C0871000A487108 +:10E4700001A902A8FFF76FFF0028EFD0822C02D07D +:10E48000204605B0F0BD0020FBE7F7B584B0144688 +:10E490000646002700F071FF2A480025006D00287D +:10E4A0002FD0059801282CD12046FFF771FF0700D7 +:10E4B00027D1002E29D06846058118E001994878B7 +:10E4C0000978000208432080019B0095587919794A +:10E4D0000202D8780A4301029F78587839431F789E +:10E4E00000029B1D384300F050FF002805D101A910 +:10E4F00002A8FFF730FF0028E0D0822800D10020DA +:10E500000746002E01D00F48056500F03AFF384657 +:10E5100007B0F0BDF0B597B00021042003F00AFC6D +:10E52000084F00243D467C8040356C73AC73287BDB +:10E53000B96CC00008380E18B08800280DD0012032 +:10E54000694603E0F01900200128000008703068D7 +:10E55000019000216846F9F78EFAB4803C65AC82E0 +:10E56000EC8217B0F0BDFE4B986418464030017342 +:10E570001A803838D861CDE7F949002049880A0760 +:10E5800000D501200A06120F01D002221043CA054D +:10E5900001D5042210438A0501D5102210434905F4 +:10E5A00001D520210843EE494031497B002901D0A3 +:10E5B000082108437047FFB5A7B004002898164605 +:10E5C0001B9022D00178E6484D06428822920246EE +:10E5D00040320092002D14DB8A06920E1E2A0ED0C5 +:10E5E000229A5205520E10D13288172A0DD3009A62 +:10E5F000927B002A09D1DB4D229AAA4205D0CA0992 +:10E6000006D08A06920E122A02D003202BB0F0BD4B +:10E61000D348826C0098007B2590C0000838101801 +:10E620001F9048060CD40098407B002808D0009921 +:10E6300088731F99289808601F9884800220E5E756 +:10E64000002718A90F7069460F72C54902AA0A640B +:10E65000309A4A6410A90F850F861B981D460078D2 +:10E6600020908106BE4B601F24901A462C322192C6 +:10E670002898DA691833890E1E93401C0B0006F0A7 +:10E6800099FD1FFDFD11FD1AFD90FDFCFDFBFDFA3E +:10E69000FDF9FDFCFDF8FDFDFDF7FDF6FDFDFDFDC1 +:10E6A000FDF5FD00032C7BD10320287017226A7032 +:10E6B0000022AA70E0E2052CF5D141780278090227 +:10E6C0001143A74B10AA19831185C27880781202D2 +:10E6D00002435A8300297DD091427BD800211846FD +:10E6E00081720181491E01841E9800F087FF052078 +:10E6F0002870A81C1D900220009021991E9800F0FF +:10E7000080FF002803D047E018A90870F0E2944881 +:10E710002030807C012803D002206870102002E0A5 +:10E7200001206870022022908D4830302390002212 +:10E7300020A9239802F0F5FD00282AD120A800780E +:10E740002299814225D132880099801C511A814238 +:10E750001FDB83481D99C08D0870000A48701D9802 +:10E7600020A9801C1D9000981D9A801C0090239861 +:10E7700002F0D7FD20A909781D9840181D90009837 +:10E78000401880B2009021991E9800F03AFF0028AE +:10E79000CDD0009802288DD10A2018A908706CE20B +:10E7A0006DE0072C6BD341780378090219436C4B59 +:10E7B0008446198310AB1985C37880781B021843EF +:10E7C000674B0029588305D0814203D801211846A0 +:10E7D000817200E0A4E061464B7909791B020B438A +:10E7E000038100218173104600F014FD00280FD131 +:10E7F0005B480121C26991710522C369D2029A80E6 +:10E80000C2699172C26958491181C069002181733E +:10E810005349E01F08841B98C01D48621E9800F0F1 +:10E82000EDFE07202870681C009001201D904C48C8 +:10E830000021C18530E01D98012815D04848C169E4 +:10E84000897901292FD000981038C17B807B09027B +:10E85000014300980170090A41700098801C0090E3 +:10E860001D98801C80B21D903D4809E013E2BEE176 +:10E870007AE1D8E00DE2A0E080E03BE01EE2B6E005 +:10E88000C18D00980170090A41700098801C0090A9 +:10E890001D98801C80B21D9021991E9800F0B1FE39 +:10E8A000002802D006E0818DD3E731881D98081A30 +:10E8B0000428C0DA1D98012800D16DE72848C169F5 +:10E8C0008979012903D0828D26498A4205D1818D1B +:10E8D00000980170090A417009E000981038C17B66 +:10E8E000827B0802009910430870000A48701D9846 +:10E8F000801CC1E1072C01D0152C78D14178037818 +:10E9000009021943164B198310AB1985C378807817 +:10E910001B02034312480029438301D0994201D9C5 +:10E920000120F1E60E4801218172002101818173ED +:10E93000052C07D024981B99C0B2491D02F0CBFCCE +:10E940000028BAD100200649C04308841B980096CD +:10E950000195007818AB8006800E1CAA002105E006 +:10E96000F0190020FFFF000001280000FFF7E6FB80 +:10E970000746FE4810A9008B08857EE1032CBCD118 +:10E98000402210A90A86417802780802F74910430C +:10E99000088310A9088520A9009131886B1C491EA5 +:10E9A0008AB2002100F095FE18A90870002830D125 +:10E9B0000B20287020A8008833E0052C9DD18021F1 +:10E9C00010AB1986014640780B780202E7481A43DB +:10E9D0000283CB7889781B021943E44B10461984D3 +:10E9E00010AB1A85E24A914202D307208CE697E0E9 +:10E9F0003F23DE4A9B021943118421AA00923288E8 +:10EA00006B1C521E92B200F064FE18A90870002818 +:10EA100003D08328B1D102272FE10D20287020A830 +:10EA20008088401C28E120990C22C9095143C91C47 +:10EA30001E91A14204D92098400671D500201BE107 +:10EA4000417800780902014310A801851B980078DD +:10EA500042062898C01C1D90002A62DA05206A46EA +:10EA600010721B980078C00944D0082268460272D0 +:10EA70008181A01A87B268468782289806901E98DE +:10EA8000201A81B26846C1811D980490401806F092 +:10EA900064F9079006982599C0190890491E08A89E +:10EAA000017102A83099F8F7E6FF07460021684691 +:10EAB0000172002F1BD0022F18D1009808A9007BEB +:10EAC0000979401E884210DDA848289A836CC90045 +:10EAD0005A50816C08A80079C000001D0C520098A3 +:10EAE0000099407B401C4873C7E00527EAE00620F8 +:10EAF00069460872002000901E980021201A20907C +:10EB000082B21B9B10A8DB1C008D00F03EFC01466E +:10EB100018A80170002268460272832903D003E01E +:10EB200093E00720E4E702271B98007840060ED503 +:10EB30008E484188C90506D510AA018B128D9142D5 +:10EB400001D100214162002018A9087094E0FF2142 +:10EB5000013110A80186018D844801832099018428 +:10EB60001D994162132085E0052C6ED3417803780E +:10EB70000A021A4310A90A859446092269460A72B4 +:10EB80000021009101222499D20311438AB2C17855 +:10EB9000807809021B9B01435B1D604600F0F5FB7A +:10EBA00018A90870002269460A720122520210A9AF +:10EBB0000A86832802D0002805D099E06B48098D89 +:10EBC000018302277EE06948006D002807D02046B7 +:10EBD0001B99FFF789FB18A9087000284DD12B4617 +:10EBE000324620461B9900F024FB074645E01B985F +:10EBF000022C4078009064D1002801D0012860D117 +:10EC00000A2168460172009901731AAA002000992E +:10EC1000FFF73BFC0146684641730021817302A85F +:10EC20003099F8F728FF0746002168460172012154 +:10EC3000890210A80186022F08D04C48006C807908 +:10EC4000002807D018A9087020E04BE04749009839 +:10EC5000088337E0002F03D0812018A9087031E025 +:10EC60001AAA01200099FFF710FC18A908700028C3 +:10EC700003D119202870012030806846007A0028CE +:10EC800004D002A83099F8F7F6FE0746002F2BD0E3 +:10EC900018E0062038E522993448090711D5012CDF +:10ECA0000FD10B2269460A72C08888810021042096 +:10ECB00003F040F8082010A90886BFE62098400617 +:10ECC00010D50327294810AA4188128E114341808C +:10ECD0005005400E04D01F99289808601F98848022 +:10ECE000384693E404200FE518A8007800280ED0D9 +:10ECF000012028701B980078687010A8008DA870FB +:10ED0000000AE87018A8007828710520308017489C +:10ED100010AA4188128E91434180E1E7FFB5064673 +:10ED20009FB000201B903178012088401149124A81 +:10ED3000084010A908860D494988914203D000284F +:10ED400004D0080702D5012023B0F0BD219D002783 +:10ED50002F7020983C46018810A8018418A80771DC +:10ED600000F00BFB6846077202A907E0F0190020CB +:10ED70000102000009F80000FFFF0000FA480164EA +:10ED800001464031826C1A91097BC9000839571835 +:10ED900022994164307801282AD0022809D003281A +:10EDA00079D12878800980011D302870EE48B1881B +:10EDB000C1803078022804D12878800980011B3076 +:10EDC000287001A8009010A8008CEB1CC01E82B215 +:10EDD000B088002100F07DFC0028E1D1B188697085 +:10EDE000090AA9706946888810A9C01C08842DE109 +:10EDF000717918A801713079012802D00228CFD189 +:10EE0000E6E0D9487F2340881B010246184010AB3A +:10EE10001886802840D006DC102810D020280ED07C +:10EE200040280AD120E0FF38013859D0FF38013896 +:10EE30006AD0FF38FF3802387ED0052491E0D00632 +:10EE400001D5082000E010201B90042069460872BC +:10EE50000020888118A800900195318919AB1CAA5F +:10EE60001B98FFF76BF977E0BF4B3289188B824212 +:10EE70004FD10A221B92002973D101A9009110A938 +:10EE8000098C6B1C491E8AB2002100F022FC18A9D3 +:10EE900008710B2017E0F6E0B34B3289188B8242E1 +:10EEA00037D10C221B9200295BD101A9009110A936 +:10EEB000098C491E8AB21946098C6B1C00F009FCAA +:10EEC00018A908710D2028706946888810A9401C6F +:10EED0000884042069460872A348008B888140E0BA +:10EEE000A14A3389108B834213D112231B9300292B +:10EEF00037D1536A002B05D00091128C00F045FAEF +:10EF000018A9087113205EE097483289038B9A4252 +:10EF100001D00424E7E016221B92026D002A09D1D9 +:10EF2000F268002A06D002651A98328A82821A9AFA +:10EF30000020D082002900E02FE012D1B888396883 +:10EF4000FFF7D2F918A9087100280AD1B8882B4612 +:10EF500018AA396800F06DF90446022818D0042C6C +:10EF600016D0B88800280FD06846007A002804D050 +:10EF700002A82299F8F77FFD04460120694608722D +:10EF8000386803900020B880002C5FD0052C7BD01F +:10EF90006846007A032873D0A5E018201B9000294A +:10EFA00005D071483189018300210165D9E76E4898 +:10EFB0000246017E18320120FFF767FA18A908718E +:10EFC0000028CED119202870012010A90884C8E794 +:10EFD0001A98407B002856D0307AC0001358001D84 +:10EFE0000193105A1D9000291AD100F0CAF9062089 +:10EFF00069460872002000901D980F3882B201986F +:10F000008178437808021843019B0021DB1C00F043 +:10F01000BCF918A90871002269460A72832830D009 +:10F02000002118A8017110A801840121684601720D +:10F03000019803901A981A99407B401E48731A98B9 +:10F04000807B002802D01A99401E887310A8008E79 +:10F050007F21090102468A431DD0434800220088CF +:10F0600011468300042002F0C0FD3F483178017151 +:10F0700010A94088098E08433B4948800FE003E00F +:10F080002BE002242FE00524374810AA4188128E75 +:10F090009143418027E034494A8882434A80684648 +:10F0A000007A002805D03048416C02A8F8F7E3FC4C +:10F0B000044618A80079002815D01B986870012014 +:10F0C00028702948008BA870000AE87018A80079F9 +:10F0D0002871052110A8018405E02348416C02A88D +:10F0E000F8F7C9FC044600F04CF91F484088400579 +:10F0F000400E20D11A98807B00281CD1B8880028A7 +:10F1000019D0209910AA0988118422990091396890 +:10F1100018AA219BFFF74FFA044602280BD00120C2 +:10F12000694608723868039002A82299F8F7A3FC90 +:10F1300004460020B88010A8018C20980180204649 +:10F1400002E600B50022D243074997B04A8004285E +:10F1500007D1022268460270097901710021F8F78F +:10F160008AFC17B000BD0000F019002010B5394C22 +:10F1700003780022216C012B02D0022B44D126E01F +:10F180000B78002B01D0042B03D10A71226C0321D0 +:10F190001170216C83880A79D200921D8B52216CE8 +:10F1A0000A79D20008328918C2880A80216C038942 +:10F1B0000A79D2000A328B524289206C0179C90047 +:10F1C0000C314252216C0879401C087120E00A740D +:10F1D000226C81889180216CC288CA80226C01894E +:10F1E0001181226C41895181216CC068C860616CB9 +:10F1F000206CF8F740FC0146022807D0206C007C08 +:10F20000002802D1002903D0812010BD832010BD29 +:10F21000002010BD8178012909D100880521C9028B +:10F22000884202D0491C884201D100207047052045 +:10F23000704710B51488844201D2052010BD1724F0 +:10F240001C701080421E491C581C05F025FD002032 +:10F2500010BD0000F019002010B58B78002B11D0E4 +:10F2600082789A4207D10B88002B0BD003E0091D4E +:10F270008B78002B08D08B789A42F8D103880C88C1 +:10F28000A342F4D1002010BD812010BD10B500298B +:10F2900002D001290DD102E00088000501E00088BC +:10F2A0008004800F07D001281CD0022809D0032831 +:10F2B00010D0812010BD002901D0032010BD0220F4 +:10F2C00010BDF5F7EEFD03280CD004280AD0002865 +:10F2D00006D009E0F5F7E5FD042803D0022803D0A5 +:10F2E000052010BD002010BD0F2010BDF3B5C81CB7 +:10F2F00080080E46800081B0B04201D08620FEBD5D +:10F30000FE4C354626600198A08000202081E080D8 +:10F3100014E0B807A978800D0843F94905F036FDD7 +:10F32000E088401CE080B80607D42089401880B2ED +:10F3300020810199081A8019A8600C352F88780758 +:10F34000E7D40020A072FEBDEC480C22C1880089E1 +:10F350005143081880B2704770B51346E74A451804 +:10F360009488AC4201D2842070BD126810180A46FD +:10F37000194605F091FC002070BDE049012088721B +:10F380007047DE49002088727047FFB589B0970446 +:10F390000E460546BF0C029200F034FA040021D05C +:10F3A000002069460873D548807A012812D00121CF +:10F3B0002046FFF76BFF002815D12078400609D5BD +:10F3C0000221684601730582218841828682C782B4 +:10F3D0000C9806900298000407D500273E460125A8 +:10F3E00001970CE001200DB0F0BD2078A1788007D6 +:10F3F000800D0843C249019005F0C8FC0D460298F3 +:10F4000040040AD50198A84207D12088E1788005F8 +:10F41000800F00020843B04201D3AE4201D9072059 +:10F42000E1E7B81980B20290A84201D90D20DAE7CD +:10F430006846007B002804D003A8F8F718FB0028D2 +:10F44000D1D10198A8420BD1208803210902884319 +:10F4500002998905890F0902084320800298E0700B +:10F460001298002800D007800C9800280CD0207833 +:10F47000000609D4A0683A4680190C9905F00CFCE6 +:10F4800020881021884320800020ACE7FFB59B4DE9 +:10F4900081B00E46E8882F680C21009048433C1844 +:10F4A0009749039805F072FC0A462889E11B8446B7 +:10F4B0000C314018318880B28B0601D5002300E062 +:10F4C00013461818AB8880B2834202D8842005B056 +:10F4D000F0BD0098894D401C80B2E88021800D99D4 +:10F4E000002900D00C600399A170E2702188039D6F +:10F4F0008908AD058900AD0F294303252D02A943D5 +:10F500009505AD0F2D0229430425294321800C992F +:10F51000002900D0088001998978A1710199098892 +:10F52000A1803178890601D50B9905E073496244C1 +:10F5300092B20A81991AC919A16000212173327807 +:10F54000920601D50020C2E700910B9B0A9A04990C +:10F55000FFF71BFFBBE7FEB5044600F053F90700B9 +:10F5600008D0664D641EE8880190A6B2286834462B +:10F57000009015E00120FEBD0C2000996043095A5F +:10F580008A060BD489078A0D0099801C085C5C49A7 +:10F59000104305F0FBFB2889401A2881641CA4B2A3 +:10F5A0000198A042E8D8EE8000203870FEBD002807 +:10F5B00003D0401E0880002070470120704710B51E +:10F5C0004E490288CB889A4201D3822010BD0B6835 +:10F5D0000C21514359180B88CC789B059B0F1B02BB +:10F5E000234341608C7904738C884481C38189688A +:10F5F000521C016102800281002010BD01210182A4 +:10F600007047FEB505460020C043088068680F4675 +:10F6100081786846817068680188684601800021A9 +:10F620008171288A2C88A04200D304462C8234E0C1 +:10F63000288A401C2882301D6968FFF70DFE0028CB +:10F6400029D139882F48814201D1601E38806888CD +:10F65000A04227D33088F1788005800F000208434C +:10F6600002906946301DFFF7F7FD002813D1298964 +:10F67000244881421AD000213046FFF707FE0028B7 +:10F6800009D12A890298824205D1E968B06805F05B +:10F69000D6FA00280AD0641CA4B2204600F0B2F8C2 +:10F6A0000600C5D1641E2C828220FEBD7C80B0790C +:10F6B000B871B088B8803088388130788007810D83 +:10F6C000B078014379810298B881B0683861002030 +:10F6D000FEBDFFB585B014460F46059800F092F8C0 +:10F6E000050037D00548BE05807AB60D01281CD02C +:10F6F00000212846FFF7CAFD002805E0481A00202F +:10F7000001020000FFFF000022D1287840060CD53E +:10F71000012168460170059981802988C180068190 +:10F720004481F8F7A4F9002812D12888AA78810723 +:10F73000890D11438005800FEA7800021043BE4214 +:10F740000AD0374A914207D3611E814204DD0B2063 +:10F7500009B0F0BD0120FBE7864201D90720F7E799 +:10F76000801B82B2A24200D922460E98002800D007 +:10F7700002800898002804D0A8688119089805F02C +:10F780008BFA0020E4E770B514460D4600F03AF815 +:10F7900000280DD001882980002C0DD001788078B8 +:10F7A0008907890D01431E48814203D2012002E0EE +:10F7B000012070BD00202070002070BD70B516467D +:10F7C0000D4600F01FF804000DD02D882580FF2E77 +:10F7D00016D0A807A178800D0843114905F0D6FA84 +:10F7E000002E06D101E0012070BDFF31FF31033151 +:10F7F00089B2A170A80880008905890F084320807C +:10F80000002070BD0749CA88824207D3002805D06E +:10F810000C22096850430C380818704700207047C4 +:10F8200001020000481A0020F0B585B00E460546DA +:10F830000020694608707078FE49C00003900C589B +:10F84000FD4F002D0ED0022D73D0002C72D02078E9 +:10F85000801E030005F0AEFC09837F7F7F83797FE4 +:10F8600077727F00002C03D1F4A16B2005F0B1FB6F +:10F870002078801E030005F09DFC09065E5E5E197F +:10F88000365E50545E003078062803D0EBA1762017 +:10F8900005F09FFBB8687168806C032205F0FCF9E5 +:10F8A000012069460870002835D1CEE730780C2851 +:10F8B00003D0E2A1812005F08CFBE06800780028ED +:10F8C00006D0B8687168806B102205F0E5F928E071 +:10F8D000B8681021006B05F03CFAB868816A006BCB +:10F8E0000A787168F1E730780D2803D0D3A194200D +:10F8F00005F06FFB04206946087071684878097844 +:10F9000000020843B9684A6A517812780902114323 +:10F91000484069468880084608E0C8A1AF2005F045 +:10F9200058FB6846007800288FD06846F5F7BEFA85 +:10F930008BE727E01CE0C1A1B420F0E7B86861695B +:10F94000006CFEF708F8A16900E0E168B868006C97 +:10F95000FEF701F803E0B9A1E32005F03AFBB8682F +:10F960002146006CFDF7F7FFB24A03990020505082 +:10F97000022D07D0002D05D0012D03D0AFA1EF201F +:10F9800005F027FB05B0F0BD10B501780124012971 +:10F9900002D0022910D112E04268A74800218260FB +:10F9A0000170A4486C38C166016741678167D289DC +:10F9B00002214C3001F0E1F90024204610BDFF2067 +:10F9C0009EA1163005F005FBF7E7F0B505469EA1B0 +:10F9D00003C997B014911390002008A908759549A0 +:10F9E0002A781031944C0491217805910126914F89 +:10F9F000A168130005F0DEFB0CEF07309AF0EDEC88 +:10FA0000EBEAE9E9E8EF20700124FF264F360546CE +:10FA100010A80570457001F0C1F90746012803D010 +:10FA200086A1304605F0D5FA10A93846FFF7FCFE4E +:10FA30002046641EE4B20028EAD10A206946087014 +:10FA40006846029501F088FA002803D0FF207BA1C8 +:10FA5000583068E0002646E3C86A0078C0072FD017 +:10FA6000012069460870684601F076FA002804D043 +:10FA7000FF2072A16B3005F0ACFAA068006CFDF7B6 +:10FA800061FF050004D1FF206CA16E3005F0A1FAE2 +:10FA900008984078C0003D5006202870A068016892 +:10FAA00069600069A8606448C01CE860284601F0ED +:10FAB00053FA022804D0FF2060A1783005F089FABB +:10FAC000A068C06A00784007C4D501206946087064 +:10FAD000684601F041FA002804D0FF2057A1803089 +:10FAE00005F077FAA068006CFDF72CFF050004D143 +:10FAF000FF2052A1833005F06CFA08984078C000CE +:10FB00003D5006202870A068016869600069A860FF +:10FB10004948401DE860284601F01EFA022899D0A5 +:10FB2000FF2046A18D3005F054FA93E7A96800291B +:10FB300033D0694608712979012932D0022904D0CD +:10FB4000FF203EA1A73005F044FA3A4810221030B9 +:10FB5000A96805F0A1F837481030364920314860CF +:10FB60002078C1062CD5EF2108402070032069467B +:10FB70000870304810300290684601F00FF90446D2 +:10FB8000022808D0002C06D0012C04D0FF202BA185 +:10FB9000B83005F01EFA69466FE101216A4611711D +:10FBA000DBE7244A04996C3AD06748608860C860F3 +:10FBB0000621A86803F0FCFE1E4910310860CAE760 +:10FBC00020210843207045E7A1E15AE119E1E6E070 +:10FBD00086E056E000E081E2886C407980090128E7 +:10FBE00004D0FF2015A1CC3005F0F3F9A068017A0C +:10FBF000002906D1416B406801F01FFAA16801207D +:10FC00000872012069460870684601F0A5F90028CD +:10FC100004D0FF2009A1D73005F0DBF9A068006C03 +:10FC2000FDF790FE050004D1FF2004A1DA3005F0B5 +:10FC3000D0F90DE0C01A0020B40000207372635C9C +:10FC4000736D2E630000000004411A8800A4800038 +:10FC500008984078C0003D5002202870A068416B91 +:10FC60006960806CC01CA860284601F075F904002A +:10FC700004D0FF20FD49E23005F0ABF929462831D8 +:10FC8000FBE0172268460272012202708078820827 +:10FC9000287992008007800F024368468270FB201B +:10FCA000024028794007C00F8000024368468270F6 +:10FCB000EA8882804A6C02A901F090F9002804D0F9 +:10FCC000FF20EA49F73005F084F9052108A80175FD +:10FCD0006846017A0187A0680026406C0F9006E212 +:10FCE000012069460870684601F036F9002803D003 +:10FCF000DE49DF4805F06DF9A068006CFDF722FED3 +:10FD0000060004D18320D949800005F062F9A0687B +:10FD1000006CFDF717FE1290002804D1D448D34997 +:10FD2000801D05F056F9D3488068006CFDF70AFE87 +:10FD3000040004D1CE48CD49093005F04AF90898AD +:10FD40004078C0003E500A203070287A30716868D0 +:10FD5000C84DB060A868406C3061172030731298AD +:10FD6000B4617061304601F0F7F80446022808D00B +:10FD7000002C06D0012C04D01120BC49400105F014 +:10FD800028F92046316AFFF74FFD28780521014008 +:10FD9000042900D05EE6FB21084028702AE005987F +:10FDA00040084000207082071CD5FD2210402070C2 +:10FDB0000F206A46107017201071486C0290684638 +:10FDC00000F0ECFF0546022808D0002D06D0012DDA +:10FDD00004D0A748A5493A3005F0FBF86946284603 +:10FDE000FFF722FD2078052101400429D2D1FB2113 +:10FDF00008402070072008A908759E48807808767A +:10FE000028E6012069460870684601F0A5F8002838 +:10FE100004D097489549543005F0DBF8A068006C91 +:10FE2000FDF790FD060004D113209049400105F034 +:10FE3000D0F890488068006CFDF784FD040004D180 +:10FE40008B488A495A3005F0C4F808984078C000B9 +:10FE50003E5007203070874880684068706068684E +:10FE6000F460B060304601F077F8040004D08048B8 +:10FE70007E49653005F0ADF8316A2046FFF7D4FCC5 +:10FE8000E8E5012069460870684601F065F8002839 +:10FE900004D0774875497A3005F09BF80898407887 +:10FEA0001190A068006CFDF74DFD060004D15120B3 +:10FEB0006E49C00005F08DF8A068006CFDF742FDAA +:10FEC000040004D16A486949823005F082F811982B +:10FED000C0003E50C019296941600920307068682F +:10FEE0007060A868B060A889B08163483061103044 +:10FEF000B4617061304601F02FF8022804D05C48EC +:10FF00005A49903005F065F811982875A2E55A4ACB +:10FF100000208C32107002206B46187001922879F4 +:10FF2000002801D0107098E0524803230C3040683C +:10FF3000FB2703708378504A9B089B003B408370EB +:10FF40004B7A00271B07DB0F43708C3257600B7B0B +:10FF5000C370CB7A1372537A0C7D5B08E4075B00A5 +:10FF6000E40F23430C461534D460FD242340CC7E9B +:10FF7000E407A40F234353720B461C3313614771EC +:10FF800007718B7A3B4A9C070C32A40F1268012C34 +:10FF900004D19478A407A40F012C1DD09B089B00CA +:10FFA0008B7293785B0702D48B7A5B0728D54B7AE8 +:10FFB00013AF5B075B0FDC005B00E3181478640091 +:10FFC0001B19DBB2DC083C5D5F077F0F0623DB1BE0 +:10FFD000DC40A3079B0F14E04C7A53796406640F4E +:10FFE00023404371147906273C400471E4001C430C +:10FFF000204B5C7083789B089B005B1C8370D0E770 +:020000040001F9 +:1000000000238478FB273C408F7A7F07FF0FBF00D7 +:100010003C4384704C7A6407640F04705078012864 +:1000200007D1487A000704D5032008A908750220E3 +:100030002DE0022B27D0012B2BD00F4B0020049A50 +:10004000D86750609060D06018467C30024610320D +:100050005060887AFB2210408872684600F09EFE4D +:10006000040035D0012C34D0004907E03CFC0000EE +:1000700009020000B4000020541A00206520C000CE +:1000800004F0A7FF25E0032008A9087501200876E1 +:10009000E3E77E4C0D21E01C04F05BFE20461030AF +:1000A0004460022008A908750E94A868002807D0AB +:1000B0000068206005997648202211430170CCE742 +:1000C00005980007C9D57349734804F082FFC4E757 +:1000D000002669462046FFF7A7FB04E06E486D49FD +:1000E000203004F076FF08A8007D002802D00DA87B +:1000F000F4F7DCFE304617B0F0BDF0B597B00C4613 +:10010000054600206946087061482F785F4E0178E7 +:10011000583E82683B0005F04DF80BAA8407263B49 +:100120004C6B79798F9CAA002B20694608730CA927 +:1001300003A8FDF73DFC002804D05748554941303D +:1001400004F047FF55490D9804F020FE4F48016028 +:100150004F4869680C300160AA684260019108202C +:10016000694608708CE08A0610D5DF2211400170C4 +:1001700003202070454810304168A1604068002885 +:1001800002D00020207177E00120FBE7102256E02A +:100190002B20694608733D4903A85C39FDF708FC2C +:1001A000002804D03C483B496A3004F012FF042088 +:1001B0001BE02A206946087303A8102202306968F0 +:1001C00004F06AFD07A810220230A96804F064FD5B +:1001D0002E4903A85C39FDF7EBFB002804D0392039 +:1001E0002C49000104F0F5FE05202070666043E014 +:1001F0002A79002A02D001221143017005206946A4 +:10020000087028798880A868029039E0D06A402375 +:10021000018819430180D06B6968102204F03CFD0D +:100220002AE0FB2211400170062069460870A96887 +:1002300068680291019023E0CB0703D002221143AA +:10024000017058E70F20207017202071506CA060BB +:1002500012E0937A9B0706D0D26A44781388FF3461 +:1002600001342343138004221143017004E00A483F +:100270000849BD3004F0ADFE684600780028E0D0A3 +:100280006846F4F713FE36E701207047D01A0020C5 +:10029000B40000203CFC00001503000040420F00A9 +:1002A00070B504780D460646230004F083FF0B1C4E +:1002B000181C1C1C1C07181C1C181C0000210520E5 +:1002C00001F038FDB068007805280CD0FA4800220B +:1002D000008811468300052001F087FC03E000211F +:1002E000052001F027FD002D0ED0002028702946A2 +:1002F0003046FFF702FFF1482978005D884201D1BE +:10030000032070BD022070BD00213046FFF7F5FECE +:10031000002070BD30B5E8494B68497A0A011146A2 +:100320000C315C5C032C0CD0044600252034257174 +:1003300025725C5CA500AA18641C5C5498500320CC +:1003400030BD062030BDF0B50446264620360D46A9 +:100350003279012008218FB0002A0CD0012A21D047 +:10036000022A2BD0032A04D12A78052A01D1297028 +:1003700000200FB0F0BD01203071606800280AD065 +:10038000A069017061684160216981606169C16033 +:10039000FFF7C0FFEDE707202870206968606069FB +:1003A000A86009E029780729E3D1022030710520EF +:1003B0002870C248203868600320DAE729780529C8 +:1003C000D7D1A08910280AD9103880B2A081A1689D +:1003D0001023091803A86A6800F054FE2DE01028C5 +:1003E00004D0C1B20BAA1020A76809E0102322692B +:1003F000A16817E0491EC9B2401EC0B27B5C13540D +:100400000029F7D100280AD0401EC0B28021115423 +:10041000002102E0401EC0B211540028FAD16269E6 +:1004200010230BA907A800F02DFE102307A903A88D +:100430006A6800F027FE032030716068019003A80D +:10044000029005206946087029466846FFF728FF94 +:100450008FE7F0B5044626460D4620363179012057 +:100460008DB000290BD0012938D0022905D1297877 +:10047000052902D10920287000200DB0F0BD217D92 +:100480006846CA07D20F02738807C10F6846017415 +:10049000012203A905A800F0EDFD04A9012205AF82 +:1004A000481D00F0E7FD0722B81CE16800F0E2FDFE +:1004B00007A807220130216900F0DCFD6068019087 +:1004C00009A80290102305AAA16800F0DBFD012015 +:1004D0003071052168460170294621E029780529F7 +:1004E000CBD1062203A8E16900F0C4FD04A80622CE +:1004F0000230A16900F0BEFD042106A800F0B2FDA3 +:100500006068019007A80290102303AA696800F0B0 +:10051000B9FD0220307105206946087029466846F9 +:10052000FFF7BEFEA9E7F0B5074685B00D460020EF +:10053000694608703E466248203632798179133820 +:1005400001240078130004F035FE180DFEFDFCFBBD +:10055000FAF9F8F7F6F5F4F3F2F1F0EFEEEDECEB73 +:10056000EAE9E8E7B968039100291BD0012269464E +:100570000A7003220A710A224A7139690291397993 +:1005800000297DD0039A1278002A7AD00C2A78D2DA +:10059000130004F00FFE0BEF09EF354D8498B0F116 +:1005A000EDECEF000020C8E30021062001F0C2FBC3 +:1005B0003879072866D1424C133C2078022802D0B3 +:1005C00000287FD101E00020207003980079C11F2E +:1005D0000A2901D30A2598E1607039480722C01F13 +:1005E000039900F047FD0120307120700220694618 +:1005F00008703348801F01903869401C029037E230 +:1006000011293DD12E4C133C0228DAD16068617863 +:10061000007A884201D9062577E1039926481022FD +:10062000491C303800F026FD03202070022045E1EF +:100630001129E6D1224C133C0428C2D10520207098 +:1006400003991D481022491C203800F013FD062094 +:100650003071786903210170626851684160164900 +:100660002039816021460C31C160C91D0161017DC5 +:10067000537A49084900DB07DB0F1943017502E093 +:1006800070E354E384E1D3688361FD231940537A16 +:100690009B07DB0F5B0019430175116976E10229A5 +:1006A000AFD1002867D005206946087103984078CB +:1006B00048713869029051E3241B00203452010034 +:1006C000DB00002082E011299BD1F74C06287DD168 +:1006D000A0680399806B1022491C00F0CBFC062116 +:1006E0006846017038690290002168460171FFF781 +:1006F000D7FD072057E00B299BD1EB4C07287ED173 +:10070000A0680399006B0222491C00F0B3FCA068AA +:100710000822406B039917E00EE116E3FDE2DDE2EB +:10072000C7E2BCE29EE267E248E241E21FE2F5E195 +:10073000DFE1C8E1BEE1B1E1A5E16AE147E128E11D +:10074000DAE0BEE0AFE075E0C91C00F093FC0621E2 +:100750006846017038690290002168460171FFF710 +:100760009FFD204613304179490849003EE041E0B1 +:100770001BE001E05CE0EFE2112991D1CA4C0828AE +:100780003DD1A0680399C06B1022491C00F072FC97 +:10079000062168460170386902900021684601719F +:1007A000FFF77EFD09202070C9E208298CD1BE49DF +:1007B000092824D1039842788868016C0A7003994B +:1007C000406C0622891C00F055FC00E017E0062171 +:1007D0006846017038690290002168460171FFF790 +:1007E0005FFDB14813304179FD221FE041715EE2A7 +:1007F0003071F2E11129C0D1AB490A2801D0082596 +:1008000083E088680399806C1022491C00F032FC58 +:10081000062168460170386902900021684601711E +:10082000FFF73EFDA04813304179FB221140DDE780 +:1008300007256AE0297802297ED19B490128FBD14E +:100840006A684A6015780846002D5CD106216A4620 +:1008500011703969029107211171029902240C70FB +:10086000CA785207520FCA704B795B075B0F4B7106 +:100870008B795B075B0F8B71D20701D18A714A714B +:1008800005460A794078824200D26A70864807227B +:10089000133000F0EFFB00202C70307101466846E9 +:1008A000FFF7FEFC4BE229780429C5D103286FD15C +:1008B00008227E48696800F0DDFB032030710420C7 +:1008C000F2E129780429B7D1774F0328B4D17748CA +:1008D00008220830696800F0CDFB04203071786888 +:1008E0004168002906D00321297000212971406840 +:1008F000A86072E10320D7E1287803289CD12879E9 +:1009000000281AD00546002D16D006216846017031 +:100910003869029002216846017102980521017030 +:10092000457000216846FFF7BBFC01216846017055 +:1009300004210171457115E293E15B49A86849689A +:100940000028486001D15A48486005203071786914 +:10095000032202704A684260544A8260524A0C3252 +:10096000C260D21D0261027D4B7A5208DB07520041 +:10097000DB0F1A430275CB688361FD231A404B7A63 +:100980009B07DB0F5B001A4302750969C16130E107 +:100990000DE12978092988D14349032885D104200C +:1009A00008700620694608703869029011200871A5 +:1009B000029803210170401C1022696800F05AFB64 +:1009C00000216846FFF76CFC00203071B7E1297800 +:1009D000092993D1052891D134496A68203910201A +:1009E000401EC0B20B5C145CA34203D0002004255F +:1009F00030718AE70028F3D107203071786904212B +:100A00000170294949684968416028498160103965 +:100A1000EEE028780A28BED10620694608703869B9 +:100A2000029011200871029804210170401C1022CC +:100A30001E4900F01FFB00216846FFF731FC1A48F1 +:100A4000102140786A68091AC9B2101800F00AFB30 +:100A50006868019014481330C178C9070BD08179B8 +:100A6000002902D14079002805D0082030711BE10F +:100A700029466846EFE0072069460870002168466D +:100A8000FFF70EFC5FE128780E2884D106486968DC +:100A900081608969407808700920A9E6C80701D0FB +:100AA0000A20FFE00F20A3E6C8000020141B00204E +:100AB0001452010028780F2879D1A8683861287964 +:100AC00038730B20FAE628780428F5D1FC4C6968C5 +:100AD000A0680822006A00F0CDFA0C203071786915 +:100AE0000722B9690270A268D3684360126A826003 +:100AF0007EE028780D28DFD1F14C6968A0680223D8 +:100B00000269C06900F0BEFA0D20307178690621D3 +:100B10000170A1688A684260096966E028780C283B +:100B2000CAD1E74C6968A0686278406A00F0A2FA0E +:100B30006078A2681021091A526AC9B2101800F030 +:100B400091FA0621684601703869029011226846C0 +:100B50000271029810220170A168401C496A00F0DD +:100B600089FA00216846FFF79BFB0E206EE028788B +:100B70000F2876D1062168460170386902900B2152 +:100B800068460171029C0720CD4D2070A8680222A2 +:100B9000C169601C00F06EFAA8680822016AE01CB6 +:100BA00000F068FA00216846FFF77AFB7AE7C8E0B0 +:100BB000880701D5102075E0132019E628780F2842 +:100BC0004FD1A86838612879387311203071BC483A +:100BD000816848690078002801D00324CAE0786958 +:100BE00006220270C9684160B6498160B549091D95 +:100BF000C160FFF78FFB30E0B14880684169097838 +:100C000000290CD129780C292BD1AD4C6968806A58 +:100C1000102200F02FFAA16801204969087006210E +:100C20006846017038690290112168460171029886 +:100C300008210170A249401C89681022896A00F0CD +:100C400019FA00216846FFF72BFB122030710921A9 +:100C5000684601702946FFF723FB044601287DD032 +:100C600088E06FE028780F286CD10620694608706C +:100C70003869029008200871029809210170904992 +:100C800089680A78D207D20F427049680622801C10 +:100C900000F0F0F900216846FFF702FB8CE74807F7 +:100CA00005D514203071092069460870E0E6162049 +:100CB0009EE528780F2851D1A868386128793873C3 +:100CC000152030717869062101707D4989688A682C +:100CD0004260096981607B49891D89E728780C2871 +:100CE00045D1774C6968A0681022C06A00F0C2F94B +:100CF0000620694608703869029011200871029830 +:100D00000A210170A168401CC96A102200F0B2F9E2 +:100D100000216846FFF7C4FAC9E7694813304079F3 +:100D2000002810D0C10703D065480621017006E0F5 +:100D3000800701D5082000E00A20614908700024DE +:100D400018E00BE013E0172052E55D49002805D0BC +:100D50000020307108700A206946087068460078E3 +:100D6000002804D000216846FFF79AFA002454486E +:100D700000210170204605B0F0BD10B5524BFF2494 +:100D80005C72586019721A80002204E0491EC9B2D0 +:100D90000B010C33C2540029F8D110BDF0B54A4EF6 +:100DA0000546717A01208DB0FF2971D00127727A32 +:100DB000736811015C180C31595C8900091F645873 +:100DC0006A7021780B0004F0F5F90B960709272CBF +:100DD00059888D4A4F5492002F707CE02146203173 +:100DE0000A9109790120002902D0012967D10EE07A +:100DF0006068019005A802900D21C01C00F032F936 +:100E0000032205A8A16800F035F90A984EE0297878 +:100E1000052974D106215DE029462046FFF719FB1C +:100E200069E021462031069109790120002902D08C +:100E3000012964D10EE06068019007A802900822A1 +:100E4000E16800F017F9082209A8A16800F012F97A +:100E500006982BE02978052951D10A213AE0294644 +:100E6000204600F01AF946E029462046FFF76BFAC3 +:100E700041E029462046FFF756FB3CE02146203161 +:100E8000059109790120002903D0012937D11DE0FE +:100E900056E06068019007A802900822A16800F05F +:100EA000E9F8082109A800F0DDF8059869460771FE +:100EB0000520087029466846FFF7F2F91BE00BE0B1 +:100EC000C80000200C520100241B002029780529AD +:100ED00015D10B212970002011E02946204600F091 +:100EE00023F908E02946204600F04EF903E02946A0 +:100EF0002046FFF7C9F9002801D001280CD125624E +:100F0000717A736809010C315A5C521E1206120E76 +:100F10005A5401D003204AE70328FCD0737A726840 +:100F200019011D010D312C46515C7172FF270D34E2 +:100F300017550C35545D002C02D0FF2903D1737274 +:100F40000DB0F0BD21460C010D34145DFF2CF9D11C +:100F500009010D315354F3E770B5AD4C0546607A85 +:100F6000214603464A6811E0010108460C30105C36 +:100F700008E0401EC0B286008E199659AE4201D1DB +:100F8000042070BD0028F4D10D31505CFF28EBD156 +:100F90009F480021007A01E0491CC9B2884204D967 +:100FA0000E010C36965D002EF6D1884201D8052040 +:100FB00070BD08010D30135461722846FFF7AAF97D +:100FC000032806D0617A626809010D31515C6172B3 +:100FD00070BD28462830FFF7E1FE70BD10B50478DB +:100FE0000123012C14D10C78022C11D30B23137084 +:100FF00083785B075B0F537002220A708088002899 +:1010000005D0830000221146062000F0EEFD0023EB +:10101000184610BD0EB50022012105280AD0062869 +:1010200007D1684601700221017142710021FFF76A +:1010300064F80EBD68460170F6E710B58EB00C4638 +:1010400006216A461170019072480290001D0390BB +:101050006846FFF781FF102220460B9900F00AF83E +:101060000EB010BD002202E0491EC9B24254002950 +:10107000FAD1704703E0521ED2B28B5C8354002A2F +:10108000F9D1704730B505E05B1EDBB2CC5CD55CB6 +:101090006C40C454002BF7D130BD3EB5044620301F +:1010A0000D4602790121002A02D0012A3AD10FE02F +:1010B00061680191574908310291012101710520B0 +:1010C0006946087029466846FFF7EAF8014629E0B4 +:1010D0002878052826D169681022A06800F087F8D2 +:1010E0006868C07B000606D54A4AA06810231832FB +:1010F0000146FFF7C7FF1022A168E06800F077F80B +:10110000A068C07B000606D5424AE068102318326A +:101110000146FFF7B7FF07202870A0686860E06805 +:101120000021A86008463EBDF0B5044626460F469D +:1011300020363179012089B0002909D0012905D153 +:101140003978052902D10C203870002009B0F0BD93 +:10115000606803AD01900295022203A8A168FFF721 +:1011600089FF0222A81CE168FFF784FF0C21281DDB +:10117000FFF778FF01203071052069460870394675 +:101180006846FFF78DF8E1E710B5034620331C7978 +:101190000122002C04D0012C10D0022C25D11EE0FD +:1011A00001211971C16806220A7040684860194817 +:1011B000801C8860801CC86008460CE00C780C2CF1 +:1011C00013D102221A71C268052313704968516055 +:1011D000806890601046FFF79DF8024605E00878A9 +:1011E0000B2802D10D2008700022104610BD10B54A +:1011F000002409E00B78521E5B0023430370401C5F +:101200000B78491CD2B2DC09002AF3D110BD0000D2 +:10121000241B00200C52010070B50D46040012D0B2 +:10122000002D10D02101284603F093FD10225449CF +:10123000284603F031FD52480121083801804480DE +:101240004560002070BD012070BD70B54C4E00247B +:101250000546083E11E0716820014018817BAA7B99 +:10126000914209D1C17BEA7B914205D10C222946EA +:1012700003F0E5FC002806D0641C30888442EADBD9 +:101280000020C04370BD204670BD70B50D460600FD +:101290000AD0002D08D03A4C083C20886188401CB8 +:1012A000884203D9042070BD102070BD3046FFF77E +:1012B000CCFF002801DB401C0AE0208861680001A7 +:1012C00040181022314603F0E7FC2088401C2080A3 +:1012D0002870002070BD70B514460D001FD0002C82 +:1012E0001DD00021A170022802D0102817D108E0DB +:1012F000687829780002084311D00121A17010807C +:101300000BE02846FFF7A1FF002808DB401CA07077 +:10131000687B297B000208432080002070BD0120EB +:1013200070BD70B5054614460E000AD0002030701E +:10133000A878012807D004D9114908390A889042B1 +:101340000BD9012070BD002C04D02878207028888B +:10135000000A50700220087010E0002C0CD0496880 +:101360000001411810391022204603F095FC28781E +:1013700020732888000A607310203070002070BD30 +:10138000EC00002073490968016000207047714932 +:1013900008600020704701216F4A704B002803D07D +:1013A000012805D06E48704791630020187001E055 +:1013B000D1631970002070476A49012008606848AD +:1013C000801C70470422684B6649002805D05A608B +:1013D000086901221043086108E0086940084000DC +:1013E00008619A605C490020C03188600020704725 +:1013F0005C490622002808D0012809D002280DD017 +:1014000003280FD05648401C70470869904302E0FB +:1014100008699043801C0861002070470869904368 +:10142000001DF8E708691043F5E74E494A6A024390 +:101430004A62002070474B494A6A82434A62002050 +:1014400070474849496A0160002070474549CA69A8 +:101450000243CA61002070474249CA698243CA6197 +:10146000002070473F49C96901600020704730B5CE +:101470000546002072B601463A4A384C4032002DEB +:1014800011D00123012D0CD0022D02D0072062B60D +:1014900030BDA3706478002C01D09363F7E79163AB +:1014A000F5E7A170F9E7A170F9E72F4904208860FA +:1014B00029490020C03188602849012008702B4943 +:1014C0000A688023120A12021A430A602849086037 +:1014D000704722480078704770B5EFF31080C50759 +:1014E000ED0F72B61D4C6078401C0006000E607057 +:1014F00003D120A1CC2003F06CFD6078012806D137 +:10150000A078002803D01749012040318863002DBE +:1015100000D162B670BD70B5EFF31080C507ED0F56 +:1015200072B60E4C6078002803D112A1DC2003F0C3 +:1015300050FD6078401E0006000E607006D1A07855 +:10154000002803D00749002040318863002D00D1D6 +:1015500062B670BD0004004040000040FC00002066 +:1015600004200000000500400003004000E400E00B +:1015700000E100E07372635C736F635F706F7765A7 +:10158000722E63008107C90E002808DA0007000FD9 +:1015900008388008B94A80008018C06904E08008D3 +:1015A000B74A800080180068C8400006800F704766 +:1015B000B44948788978884201D3401A02E0212250 +:1015C000511A0818C0B27047AE492331487889785B +:1015D000884201D3401A02E02122511A0818C0B2F1 +:1015E0007047A849463148788978884201D3401A23 +:1015F00002E02122511A0818C0B27047A04810B565 +:101600000C300168FF22120291430122D2031143E0 +:1016100001609C490020233148708870233948704C +:101620008870463148708870974802F0FFFA9648F3 +:10163000401C02F0FBFAF2F7A9F900F015F910BD11 +:1016400020207047B4E770B50C4605460026FFF72A +:10165000AFFF8C49A04214D30A46203A002320460B +:10166000641EE4B200280BD08878105C287088785B +:101670006D1C401CC0B288702128F0D18B70EEE741 +:10168000012600F0F1F8304670BD202070479BE73E +:1016900070B50C4605460026FFF796FF79492331C1 +:1016A000A04214D30A46203A00232046641EE4B226 +:1016B00000280BD08878105C287088786D1C401C3E +:1016C000C0B288702128F0D18B70EEE7012600F0BF +:1016D000CBF8304670BD202101700020704710B556 +:1016E0000446FFF77EFF2070002010BD70B50C4649 +:1016F0000546FFF776FF63494631A04215D30A46F7 +:10170000203A00232046641EE4B200280BD08878DB +:10171000105C287088786D1C401CC0B2887021282D +:10172000F0D18B70EEE7002400E0584C00F09CF8FC +:10173000204670BD70B50C460546212904D9FF200E +:1017400053A1473003F045FC4C484068103840B284 +:10175000FFF718FFC6B20D20FFF714FFC0B2864294 +:1017600007D2FF204AA14D3003F033FC01E0F2F72D +:101770004DF921462846FFF766FF0028F7D070BDD7 +:10178000F8B5404E07462336B1787078212200F034 +:1017900060F8354623353B4C00280ED0A1786078A0 +:1017A000212200F056F8002814D0A9786878212268 +:1017B00000F04FF800281AD025E032497078C91C93 +:1017C0000F547078401CC0B2707021281BD10020CB +:1017D000707018E02B49607820390F546078401CF5 +:1017E000C0B2607021280ED1002060700BE0254946 +:1017F000687826310F546878401CC0B26870212880 +:1018000001D100206870B1787078212200F021F8B1 +:1018100000281DD0A1786078212200F01AF8002855 +:1018200016D0A9786878212200F013F800280FD08C +:10183000F2F7CEF8144802F001FA01214903884278 +:1018400003D013A1C12003F0C4FB0F4802F00EFA2D +:10185000F8BD401C884205D0904201D1002901D03A +:10186000002070470120704710B5074802F0E6F9E4 +:10187000002801D1F2F79BF810BD000000ED00E058 +:1018800000E400E0501B0020FF00002007200000C3 +:101890007372635C736F635F72616E642E630000CA +:1018A00010B5284802F0C2F9002803D026A11D2057 +:1018B00003F08FFB2348401C02F0B8F9002803D046 +:1018C00021A1212003F085FB10BDF1B5224D6F68E9 +:1018D00001261C4802F0B2F91A4C002803D1002658 +:1018E000601C02F0C3F91D4A1D490120506000BF71 +:1018F00000BF00BF00BF00BF00230B604B60009B18 +:101900006B60106000BF00BF00BF00BF00BF086871 +:10191000002802D148680028F9D048680028E4D19E +:10192000002E04D06F60601C02F088F907E0601C94 +:1019300002F084F90028D3D1024802F097F9002080 +:10194000F8BDC2E7010100207372635C736F635FCF +:101950006563622E6300000000E5004000E0004087 +:1019600000E1004030B5EFF31081CC07E40F72B610 +:101970001D4A116910230D461D431561002C00D12D +:1019800062B61A4DC406E40E0120A0402C68044241 +:101990000DD0C8060AD4EFF31080C007C00F72B68E +:1019A000116999431161002800D162B630BD20BF92 +:1019B00040BF20BFEAE70E4908784A78401CC0B211 +:1019C000904200D008707047084A094820BF40BFC5 +:1019D00020BF4178037843701368002B02D103784D +:1019E0008B42F3D00020704700ED00E000E200E001 +:1019F00003010020FEB5F64C07466068FF213E015A +:101A000081552178FF2913D0090108314158324608 +:101A1000491E083209020192090A805800F0CEF9E5 +:101A2000002802D02478254615E061682078885582 +:101A30002770FEBDE64842680198115828010090C1 +:101A40000830105800F0BAF9002806D1E0482C46BA +:101A5000416800980D5CFF2DECD1DD482101406804 +:101A600085554754FEBD70B5D94A04460020157A05 +:101A700053680AE00201561C9E5DA64203D10C3257 +:101A80009A588A4204D0401CC0B28542F2D8FF2046 +:101A900070BDF8B5CE4F3E7801F01AFE0146FF2E1C +:101AA00071D03401254678680835405900F086F930 +:101AB00002280CD97868405901F0FDFD01F008FEBC +:101AC00001467868405900F079F902285BD8C0498E +:101AD0004868025D0A70A11C425C002A0CD0521EAC +:101AE000425441590122D20589180902090A41517B +:101AF0003046FFF77FFF30E0631CC25C0092221D7E +:101B000094468258002A10D001239B029A420FD992 +:101B10009205920D43595703DB191B021B0A4351CF +:101B20006346C3589A1A920A09E0FF21C1540AE099 +:101B3000435952039A181202120A42510022425487 +:101B40003046FFF757FFA2480C344168C26800983E +:101B5000095980001258009890479D4C2078FF2822 +:101B600011D0000161680830085801F0A4FD01F0AF +:101B7000AFFD01462078626800010830105800F07F +:101B80001DF9022886D3F8BDF8B51C4615460E4649 +:101B90000746FF2B03D38FA1D42003F01AFA8C48F9 +:101BA000FF21C76045600472067401700022427014 +:101BB000104604E00201521C401CA954C0B2A042CD +:101BC000F8D3F8BD70B5824C06466578207C854216 +:101BD00003D380A1E72003F0FCF9E068A900465098 +:101BE0006078401C6070284670BDFFB581B01D460E +:101BF000FF2401F06DFD764F064679780198814209 +:101C000003D874A1F52003F0E4F971480021037AA8 +:101C1000406810E00A019446521C825CFF2A25D0DD +:101C2000019FBA4205D162460C328758029A974208 +:101C30001ED0491CC9B28B42ECD8FF2C18D0210110 +:101C40004A1C019B83540B460C33029AC250039BDF +:101C50005F4F0022012B0ED00B1DC25001239B02AF +:101C60009D4216D9AA05920D08D008E00C46E0E77F +:101C7000FF2005B0F0BD0B1DC550EFE71A4653031A +:101C80009B190E461B0208361B0AAA1A8351920A98 +:101C900009E0002D00D101256B039B191D022D0ABF +:101CA0000B460833C550891C42543D463E782046B9 +:101CB000FFF7A0FE2878B04214D000016968083010 +:101CC000085801F0F8FC01F003FD29786A68090161 +:101CD000083152580146104600F070F8022801D22F +:101CE000FFF7D7FE0198C4E770B50C46054601F032 +:101CF000EFFC064621462846FFF7B5FEFF2817D021 +:101D0000334D04012046696808300858314600F018 +:101D100055F80121090340186968A41C095D400BAE +:101D2000002901D089020818002800D1012070BDC7 +:101D3000002070BDF3B581B00F460198FFF793FE08 +:101D4000FF282AD0224E3578726829460C4604E0D6 +:101D5000844205D025462301D45CFF2CF8D11CE039 +:101D6000FF2C1AD0A5421CD10801105C3070FF284E +:101D700015D000010830105801F09DFC01F0A8FCBE +:101D800001463078726800010830105800F016F8EB +:101D9000022806D2FFF77DFE03E00020FEBD01F021 +:101DA00092FC39460198FFF79FFF22017168FF23DB +:101DB000541C0B558A5C2B01CA54FEBD401A00020C +:101DC0000121000AC905884200D90020704700009F +:101DD0009C1B00207372635C736F635F74696D6535 +:101DE000722E6300F0B500241C4A01211C4B08032D +:101DF000546018601B4B1C601B4C20601B4804691E +:101E0000E443E406E6170469761C10252C430461BC +:101E1000174C6160174D296000E020BF1F68002F3C +:101E2000FBD0002E03D107691026B74307619068E5 +:101E30008005906801D5104A10436960A1600021B7 +:101E400019600121084A09031160F0BD10B504466C +:101E5000FFF7C8FF2060002010BD000000C5004053 +:101E600080E100E000C1004080E200E000ED00E021 +:101E700000C3004000C0004000FCFFFF70B51F49D8 +:101E80000A68002A17D000231D4601244A68521C04 +:101E90004A60092A00D34D600E792246B2400E688E +:101EA00016420AD072B60B6893430B6062B649685B +:101EB0000160002070BD052070BD5B1C092BE5D3BF +:101EC0000FA1362003F085F8F5E7012010498005C1 +:101ED00008607047EFF31081CA07D20F72B6012174 +:101EE00081400648036819430160002A00D162B6A8 +:101EF000EBE70248002101604160704708010020C3 +:101F00007372635C736F635F6576742E63000000A9 +:101F100000E200E00120810708607047012081078E +:101F2000486070471048C068C00700D00120704763 +:101F30000D488068C00700D0012070470A484069FA +:101F4000C00700D0012070470748C06970470649A4 +:101F50008A69D20306D589698907890F814201D12F +:101F6000012070470020704700040040F8B5FE4C87 +:101F7000207BE17A88421AD00126FC4D0027E07AC6 +:101F8000215C14200A4642435019037C052B0FD0D4 +:101F9000062B1BD0072B28D0437C012B33D0F4A178 +:101FA000F64803F016F8207BE17A8842E7D1F8BDC5 +:101FB0000674E07A0A2807D0E07A401CE072491CD7 +:101FC000C8B2AA5802210CE00020F7E70674E07AB4 +:101FD0000A2808D0E07A401CE072491CC8B2AA580E +:101FE00003219047DFE70020F6E70674E07A0A282D +:101FF00007D0E07A401CE072491CC8B2AA580821F8 +:10200000EFE70020F7E74774E07A0A2807D0E07A84 +:10201000401CE072491CC8B2AA580721E1E7002021 +:10202000F7E770B5D64D06206872D648002444778D +:10203000047738300473C472D34801F0F7FDD348F5 +:102040000475EC72D249601E88606C71AC70EC70E3 +:102050002C716C70CF48022104704470CE4804701B +:10206000047528300470491EFAD10120F1F750FDA3 +:102070000020F1F74DFD0120A871F0F741FDC748A0 +:10208000F0F750FDC64C2070C648F0F74BFD60706D +:10209000F1F7E2FC70BD10B5F1F709FDC04C2078F6 +:1020A000F0F75EFD6078F0F75BFDB54C207A002814 +:1020B00005D0FFF730FAF0F7E2FD0020207210BDE6 +:1020C00070B5AF4CA079002804D0A9A1B64802F0A1 +:1020D00080FF70BDE07A002804D11320A4A1400144 +:1020E00002F077FF0126A6710025E572607A0421CF +:1020F000142250439D4A80180174A5488168491CE8 +:1021000004D0691E81600120F1F702FD0020F1F783 +:10211000FFFCF1F7E3FC01F023FEF1F7E8FDA34833 +:10212000056005600120A249C0030860F0F74AFF7E +:1021300098480078022804D0032804D1E0780028C9 +:1021400001D0A67000E0A570F1F7BDFD70BD03469B +:1021500086490520142242435218203A127F002A51 +:1021600004D0401E0006000EF4D1704714224243F2 +:1021700051180A46403AD362012220390A77704743 +:10218000012805D0032805D1002903D1002070477C +:102190000029FBD010B47A4C002363707D4A0028DC +:1021A00090700CD002280AD007291AD20B007B4469 +:1021B0001B79DB189F441505070D0F111300D37011 +:1021C00003E01B2000E03A20D0700120607010BCBA +:1021D00070475820F8E77720F6E79620F4E7B52017 +:1021E000F2E710BC0020704710B56A484078F1F75C +:1021F00085FD80B210BD411E1422504310B55B4ACC +:102200008418203C042902D8207F002803D158A13B +:10221000684802F0DEFE207F012803D054A1664802 +:1022200002F0D7FE0020207710BD70B5554C607FBE +:10223000217F884201D1012500E00025F1F7F7FC5C +:10224000F1F75CFD617F227F914201D1012100E025 +:102250000021A942EBD170BDF7B50646481E844661 +:102260008EB0C0B2142204905043404A85182846CC +:102270000595007C2D1D07282AD13B4C0027E07ACC +:10228000227B824221D0235C049A934201D1012710 +:1022900001E0002F04D00A2811D0421CA25C225475 +:1022A0000A280ED0401C227BC0B28242EBD1002F04 +:1022B0000BD0207B002806D0207B401E04E00022AB +:1022C000ECE70020EFE70A202073059A0120107444 +:1022D00060462B4C04280FD814204143234808188B +:1022E0002038007F002807D00598007C012807D0FF +:1022F0001098807A012807D01DA1304802F069FEAD +:102300001098807A012871D10598184B007C02281A +:102310001AD0154C207B0A2874D0207BE17A401C0F +:10232000884204D1C92012A1800002F052FE059912 +:1023300001204874217B04986054207B0A2865D0D2 +:10234000207B401C20731CE1607A049A0146904275 +:1023500006D0014614277843C018807C9042F8D1FB +:10236000627A824235D12BE0A81C0020B81C0020E4 +:102370007372635C72656D2E63000000D50500000A +:102380003C1D0020701C0020481D0020901C0020D7 +:102390001C1D002012010020C81C0020931A0100FF +:1023A000100100206D1F01007F02000000F50040B9 +:1023B00080E200E0CD020000CE0200001703000022 +:1023C000617A14225143C918897C61720121A1727A +:1023D00007E014224243D21814277943927CC9188B +:1023E0008A74142206215043C01881741098007A10 +:1023F000062819D203007B441B79DB189F4408127E +:10240000100E0C0AE07A00288CD090E7002099E7A3 +:1024100000210FE0B4210DE073210BE0322109E02F +:102420000A2107E0062105E0FF20FE49E23002F024 +:10243000D0FD0021109802910068401A2860109980 +:10244000097A002912D00221401A0102090A2960E2 +:1024500010980268406810180002000A686010981E +:10246000807A0228109803D0007B74E00421EBE707 +:10247000007A002813D0022202981018844610987F +:102480004268604608301718E748029A4078904240 +:1024900002D9E278002A04D03846083005E0042248 +:1024A000EAE7029A801AC0190830627A062A1CD01C +:1024B000627A14235A43DD4BD2185268914214D0E9 +:1024C000DB4B0793617A14225143D84A89184A6832 +:1024D0008968921B891B12020902120A090A90429A +:1024E0003AD89A4238D8994236D83018C01B0002E0 +:1024F000000A286010996044CE4AC9680002000AA8 +:102500009446421A01239B0507929A4201D2104633 +:1025100014E00A1A09929A4201D207980EE0079A2B +:102520006346624503D9591A0818401C06E0099A07 +:10253000624506D9181A4018401C404200285FDC4A +:1025400003E0B849BC4802F044FD2868C019000205 +:10255000000A6860002028726868082708300002B6 +:10256000000A68601098407AA8721098007A687221 +:1025700003280ED200280CD0FFF7D4FC002803D08B +:1025800007E0002011B0F0BD02983A210F1A322066 +:102590000290A5480178012901D0032909D1417889 +:1025A0000298814205D9E078002802D10298081AE1 +:1025B000C71928689E4A801B844601026868090A78 +:1025C000801B03021B0A8F421AD81746914217D864 +:1025D000BB4215D8617A062916D0677A6146062271 +:1025E000039200923A4614235A43904BD2189368B0 +:1025F0009B1B8B4216D80397977C062FF2D177E06E +:10260000049801F059F9BCE7059802220499027474 +:10261000627A062A00D0627A827461720120A07206 +:1026200011B0F0BD062F63D0002239469446142223 +:102630007E4B4A43D21853689B1B834229D2917B1D +:10264000AB7A99421FD805980521049C7B4D0174F3 +:10265000287B0A2811D0287BE97A401C884203D1C4 +:102660007049774802F0B5FC287B2C54287B0A2857 +:1026700007D0287B401C287383E7E87A0028EFD036 +:10268000F2E70020F7E701218C46917C0629CED1A4 +:1026900002E0604600282AD03D46009114202A46D8 +:1026A000424362480621161831741038007B0A280C +:1026B000624816D0017BC07A491C814203D161A1D6 +:1026C000634802F086FC5D48017B4554017B0A2982 +:1026D0000BD0017B491C0173B57C0098A842DDD169 +:1026E00006E0C07A0028EAD0EDE70021F3E7009782 +:1026F0000599022008744D4D607AB84207D10599BA +:1027000000988874049860720120A07221E00398F8 +:10271000062F0FD0062803D14AA14E4802F059FCDB +:102720000398142250434019049981740599009824 +:1027300088740EE0062803D142A1474802F049FC04 +:102740000398142250434019049981740599062076 +:102750008874012011B0F0BD70B50D4606463F49A2 +:1027600000242046891BA04103D236A13C4802F038 +:1027700030FC3C490020491BA04103D231A13A481A +:1027800002F027FC394A70190021821A8C4101D3CA +:102790003749401870BDF8B5401EC0B214214843F7 +:1027A00022494518687B062813D203007B441B7915 +:1027B000DB189F44020C0A080604002066E0B420DF +:1027C00010E073200EE032200CE00A200AE0062020 +:1027D00008E0FF201BA1E23002F0FBFB697B002038 +:1027E000002953D0022140186968002440180C21A8 +:1027F00000026956000A00294ADBF1F77FFA174AFE +:1028000006460C27EF570021101AA14103D20DA153 +:10281000134802F0DEFB13490020C91BA0412CD253 +:1028200008A127E07023010012010020B81C00203D +:10283000FFFF3F00FFFFFF0014070000A81C00205F +:10284000090200007372635C72656D2E6300000004 +:10285000C7030000DF030000E5030000FF7F841EC4 +:10286000F50300000020A107F60300000080841E8D +:1028700000807BE1FB4802F0ACFBFB4AF019002131 +:10288000821A8C4101D3F9494018F8BD0421AAE706 +:10289000F1F734FA0C21695600224018F449091A5C +:1028A000A241F2D24042F8BDF0B5064683B0F148ED +:1028B0000190457A029534687068001B0702EE4863 +:1028C0003F0A001B0090062D2DD0142029464143BD +:1028D000EA480122081884464168E748920586467E +:1028E000081B904210D3631A93420DD302467046E0 +:1028F000724503D900984018401C05E073450ED975 +:10290000411A0819401C404200280CDA6046029522 +:10291000857C0198C0790028D5D003B0F0BDD84996 +:10292000D84802F056FB0298854226D0142148432D +:10293000D2490123401802908068CF499B058C46FC +:10294000011B8646994210D3221A9A420DD3634640 +:10295000614503D900997144491C06E01946624556 +:102960002DD9091A0819401C4142002905DD029899 +:10297000B17A807B814200D37446062D15D0BF49C1 +:102980001420454368184268121B1202120ABA4208 +:102990000BD2B27A837B9A4200D38468857C0198FB +:1029A000C0790028B9D1062DEAD13068A042B4D050 +:1029B000E0190002000A3460706003B0F0BDB04955 +:1029C000B04802F006FBD8E7F0B5AF4904464868C6 +:1029D00085B0C005C00D1CD0103840B200280CDAFC +:1029E0000207120F083A920892005118C96980072D +:1029F000C00EC1400806800F09E08108A34A890083 +:102A0000891809688007C00EC1400806800F002899 +:102A100008D000262078002806D0012804D0002005 +:102A200005B0F0BD0126F5E72079062813D2030092 +:102A30007B441B79DB189F44020C0A080604002023 +:102A400018E0B42010E073200EE032200CE00A20E1 +:102A50000AE0062008E0FF208949E23002F0B9FAD6 +:102A600021790020002905D002214718814D002E30 +:102A700002D003E00421F8E70020E87102AA6946C9 +:102A8000A068F1F745F9694608228A56E06801A96D +:102A90008018C01C01221F2801DA019209E003AA54 +:102AA000F1F736F96846007B002802D00198401CF7 +:102AB000019000990198401808300002000A019026 +:102AC000C81B0002000A009060796946887200986D +:102AD0000390F1F7ACF8009A019B121A181A6C498E +:102AE00012020002120A000A8A4216D8884214D83A +:102AF0006846FFF7D9FE00990398814205D0C819AE +:102B00000002000AF1F7FAF8A0600120E979002933 +:102B100086D0002EB0D005B0F0BD0020F6E7F3B5AA +:102B20008FB05C480C460B9001F088F85A4A0F9918 +:102B3000504E5518203D594F00280BD05848007D65 +:102B4000002803D057A15A4802F043FA2078012800 +:102B50007DD05FE1787F0A280CD0787F397F401CD8 +:102B6000884203D14FA1534802F033FA207801285C +:102B700004D00CE0387F0028F4D0F7E7E87F002885 +:102B800003D048A14C4802F024FA0120E877787F6E +:102B90000F991422494D504340190174207802289E +:102BA00023D0787F14214843451920792872607911 +:102BB00068722A460C322946A068F1F7A9F80C2061 +:102BC00028560F2804DD1F3828732868401C286009 +:102BD0000C22AA56281DE16802908818C01C1F28E4 +:102BE0003FDA029901200860FDE027494868C005E6 +:102BF000C00D20D0103840B200280CDA0207120FA6 +:102C0000083A920892005118C9698007C00EC14065 +:102C10000806800F09E081081C4A890089180968A4 +:102C20008007C00EC1400806800F002803D11DA1F7 +:102C3000234802F0CEF9787F14214843451900213A +:102C4000E0686A460591117303AA05A900E0D8E07F +:102C5000F1F75EF86A460C2010560F2832DD01208D +:102C600031E0B3E0F60300000080841E00807BE1C9 +:102C7000FF7F841E3C1D0020FFFFFF00B81C0020CA +:102C8000442801001407000000ED00E000E400E02B +:102C9000FFFF3F00481D002016010020701C00208F +:102CA000901C00207372635C72656D2E63000000DF +:102CB00017050000F5040000FA040000B01B002016 +:102CC0000605000000200599401808900220A8720F +:102CD0002079287260796872A068291DC01C039150 +:102CE0001F2801DA01200AE006AAF1F711F8684668 +:102CF000007E002804D0039803990068401C0860F7 +:102D0000287A062813D203007B441B79DB189F44E2 +:102D1000020C0A08060400200FE0B4200DE0732026 +:102D20000BE0322009E00A2007E0062005E0FF2042 +:102D3000FD49E23002F04DF900202179002943D00D +:102D400002214118069168680831401808990590D9 +:102D500008180699401A0C900020F071F0F767FFF0 +:102D600004462860089820180002000AE860707A7B +:102D7000062825D0707A14214843EC494018406851 +:102D80000090059940180002000A0190687A69468F +:102D900088726846FFF788FD0098019A001B121B95 +:102DA00000021202E24B000A120A0C99984207D85C +:102DB0008A4205D80099069808180002000A28607F +:102DC000F0790028C8D110E00421BAE704AA0299DA +:102DD000F0F79EFF6846007C002804D00298029914 +:102DE0000068401C08602078A872787F0A2806D006 +:102DF000787F401C78770B9800F038FF47E0002080 +:102E0000F8E7E87F002803D0CAA1CD4802F0E1F836 +:102E10000120E877CB490F9808742078022803D165 +:102E2000C4A1C94802F0D5F8C64D2079287260794E +:102E300068722A460C322946A068F0F769FF0C2018 +:102E400028560F2804DD1F3828732868401C286086 +:102E50000C22AA56281DE16802908818C01C1F2861 +:102E600003DA0299012008600CE003AA0299F0F746 +:102E70004FFF6846007B002804D002980299006842 +:102E8000401C08602078A872AE4901200875797F3F +:102E9000387F814223D0747A062C22D0F0F7C7FE07 +:102EA00014214C43A1496218117C042917D003292D +:102EB00015D0536892681B1A101A1B0200029C4915 +:102EC0001B0A000A082B0AD30A468B4207D89042F5 +:102ED00005D8787F397F884201D0F0F7F4FE11B031 +:102EE000F0BD787F397F8842F7D111B0F0BD10B5C1 +:102EF0000020F0F7FAFD10BD10B50120F0F7F5FD48 +:102F000010BDF1B5009802281FD0904C607A0628B9 +:102F100003D188A18E4802F05CF80026A671012535 +:102F2000E572607A03211422804F5043C019017466 +:102F3000F0F7CEFE009800280CD001282AD00328F4 +:102F40007CD0B5207BA1C00044E082480078EFF738 +:102F50000DFEF8BD8048007F002803D075A17F4892 +:102F600002F037F865717C4D00202E60F0F7D0FD3F +:102F7000A968481C04D0012300221846F0F7FEFD82 +:102F8000607A617A401CC0B2142251437A58012100 +:102F90009047F8BD0120F0F7BBFD607900280DD007 +:102FA0006D488068401C09D0607A617A401CC0B2CC +:102FB000142251437A5806219047F8BD6648007F95 +:102FC00001280AD0022812D0032824D0042836D0A1 +:102FD00058A1634801F0FDFFF8BD2079002803D017 +:102FE0002671F0F77AFEE5705B480677F8BD207A27 +:102FF000002804D1FEF770FAEFF718FE2572607A08 +:10300000617A401CC0B2142251437A580021904783 +:1030100051480677F8BD504F0123397B786800226C +:10302000411A1846F0F7AAFD2079002803D026712E +:10303000F0F753FEE57002203877F8BD1BE0464EEE +:10304000217870680123411A00221846F0F796FD96 +:10305000207A002804D1FEF73FFAEFF7E7FD25724A +:10306000607A617A401CC0B2142251437A58002120 +:1030700090473577F8BD607A617A401CC0B214225F +:1030800051437A5805219047F8BD10B52F4C607A0E +:10309000062803D127A1334801F09BFF607A617AAB +:1030A000401CC0B214225143204A52580421904778 +:1030B00010BDF0B583B006200290F0F7B8FD234CA8 +:1030C0000090617A28480190062920D0617A142066 +:1030D000414316480918097C042918D0617A142242 +:1030E00051430818007C03287BD00198009A03689C +:1030F00040689B1A801A1B0200020D491B0A000A35 +:10310000082B6ED30A468B426BD8904269D812487E +:103110008068401C03D007A1144801F05AFF00202A +:103120006071607A062823E0A42C0100B81C0020FE +:10313000FFFF3F007372635C72656D2E63000000D9 +:103140001E050000901C0020240500003C1D0020EE +:1031500055050000100100201C1D00206105000025 +:103160009C050000AF0500002C1D0020EB050000B1 +:1031700007D16078002804D0FE48C178417081787A +:103180000170607A062815D0607A1421FA4A484303 +:103190008018007C04280DD1607A0290617A0120A9 +:1031A0001423594389180874617A59438918897C12 +:1031B0006172A072F14D687F297FF14F884233D050 +:1031C000F04E287F142148438019007CC05D0128FF +:1031D000287F07D048438019007CC05D02282FD08B +:1031E00044E001E2142148438019807A01280AD082 +:1031F000287F0221142250438019007CC155287F6A +:103200000A2808D009E0297F002014225143891997 +:10321000097CC8552AE0002001E0287F401C28775F +:10322000687F297F8842CCD1D74D287D00284CD09B +:10323000287CC15D012928D0C05D022830D03AE049 +:10324000287F142148438019807A012803D0CFA118 +:10325000D14801F0BEFE297F002014225143891974 +:103260008872297F51438919097CC855287F142108 +:1032700048438219287F48438019017C0098FEF753 +:10328000EBFF287F0A28C8D1C5E7A97A012904D015 +:103290000221C155002028750DE00021C1550AE02A +:1032A000A87A012803D0B9A1BC4801F092FE002001 +:1032B000A872297CC855287D002806D0297CB24AEE +:1032C0000098FEF7C9FF00202875029806281ED036 +:1032D00014214843A8494018017C012917D107212E +:1032E000AF4D0174287B0A283CD0287BE97A401C2A +:1032F000884203D1A5A1AB4801F06BFE297B02985F +:103300006854287B0A2831D0287B401C2873607AB7 +:1033100006287DD0A07A00287BD00020A072617A98 +:10332000142041439448A04B0A18566891681D46E2 +:10333000D2687C35DE67AA6069609C4D697E002991 +:1033400016D00226617A14228B4851430818407B1C +:1033500006281BD203007B441B79DB189F440A1408 +:1033600012100E0CE87A0028C4D0C7E70020CDE781 +:103370000426E7E700200FE0B4200DE073200BE007 +:10338000322009E00A2007E0062005E0FF207FA1A7 +:10339000E23001F01EFE00202873697E022901D070 +:1033A000012910D12969009A09188A1A1202120AF1 +:1033B0003A2A08D90320687632390802000A2861BF +:1033C000322028730AE0322808D2207A00280ED151 +:1033D000FEF782F8EFF72AFC012007E0207A0028A8 +:1033E00005D0FEF798F8EFF74AFC002020726149FB +:1033F0000822487820700978012901D0032906D1D4 +:1034000001212171297B884201D9421A083201E049 +:1034100091E0A1E0A378002B00D0921C2179002933 +:1034200001D1002B5DD09446614A00990092019A27 +:10343000176852687F1A511A3F0209023F0A090AA7 +:10344000BC451BD85A4A974218D8009A914215D8C1 +:10345000297B884223D92B69421A9A1A1202120A2E +:10346000101880190002000A2A616860002914D02F +:10347000032028770006000E3ED14CE0002020718A +:10348000A070297B002925D02869401880190002E6 +:10349000000A6860022028772EE00120E9E78142D7 +:1034A0000BD92A69511889190902090A696000288B +:1034B00001D00420DDE70220DBE7002B03D133A19C +:1034C0003C4801F086FD286980190002000A686006 +:1034D000002004E0296989190902090A696028772E +:1034E00019E0287B00280FD02969081880190002EC +:1034F000000A6860022028772869012381190022C8 +:103500001846F0F73BFB09E0286980190002000A21 +:103510006860002028770120F0F7FAFA607A142119 +:10352000484315490C22401882560123002069683F +:10353000F0F724FB10E00120F0F7EAFA0020F0F7A2 +:10354000E7FAF0F7CBFA207A002805D0FDF7E3FF81 +:10355000EFF795FB00202072A078002804D0F0F748 +:10356000BCFB0020E070A0706078002827D00148E4 +:10357000C17821E012010020B81C0020701C00203E +:1035800015010020B01B0020901C00207372635CAA +:1035900072656D2E630000000D0600002906000014 +:1035A000A81C00203B060000B01C00201C1D0020B1 +:1035B000FFFF3F008D060000417081780170207987 +:1035C000002806D00020CE49E0700978002900D1FB +:1035D0002071CC48017BC07A814203D0CA48407830 +:1035E000EFF7C4FA0120E07103B0F0BDF0B5C74CAD +:1035F0000746607A83B0062804D16F20C4A1000179 +:1036000001F0E7FC607A1421C44E48438019007C25 +:10361000032803D0BEA1C24801F0DBFCC14DA8685D +:10362000401C03D0BAA1C04801F0D3FC607A142139 +:10363000484381190C20085600216A4600911171F7 +:10364000C01901AA6946F0F763FB6A4604201056C8 +:103650000F2801DD012000E0002000994018696872 +:1036600040180102090AA9606079002804D00123EA +:1036700000221846F0F782FA03B0F0BD70B5AC4CEA +:10368000AA4A0B1AA34214D3451AA54211D3934256 +:1036900003D9101A43185B1C0BE0954204D9511A48 +:1036A0000818401C434204E099A1A24801F091FC93 +:1036B0000023184670BD10B50146012300220220E8 +:1036C000F0F75CFA10BD10B50220F0F721FA10BD3A +:1036D00010B5F0F7ACFA10BDF0B58C4D0446E87AA1 +:1036E00083B0002803D18AA1934801F072FC642CB6 +:1036F0004DD3924A00210846121B884147D3904877 +:10370000417F007F814242D18E48007D00283ED11A +:10371000687A1421814F4843824EC519306801AA46 +:1037200000196946F0F7F4FA6946042008560028A3 +:1037300002DD0098401C0090A96800986B680A1888 +:10374000D21A1202804B120A9A4220D8AA7C062A68 +:1037500008D014235A43D2195268511A0902090A8F +:10376000814214D3B068401C05D00120F0F7D0F995 +:103770000020C043B060306800193060A86800992C +:1037800040180002000A7061012003B0F0BD002063 +:1037900003B0F0BDF8B50646401EC4B214205F4920 +:1037A00060434518287C002804D1772058A10001E7 +:1037B00001F00FFC6248017F407F81420CD0634AD8 +:1037C00014234B439B181B7CB3420CD00A290CD00A +:1037D000491CC9B28142F3D15A48017D002961D008 +:1037E000007CB0425ED10020F8BD0021F1E7052940 +:1037F00003D0062901D0072928D101212974C17AD3 +:103800000023027B8A4221D00246565CA64201D1A7 +:10381000012301E0002B04D00A2911D04E1C965D33 +:1038200056540A290ED0491C167BC9B28E42ECD1DF +:10383000002B0BD0117B002906D0117B491E04E020 +:103840000026ECE70021EFE70A211173697C0029CB +:103850002AD06F74C17A0023027B8A4224D0425C52 +:10386000A24201D1012301E0002B04D00A2912D089 +:103870004A1C825C42540A290FD0491C027BC9B2FF +:103880008A42ECD1002B0FD0027B0146002A06D0E1 +:103890000A7B521E04E00022EBE70021EEE70A2239 +:1038A0000A7301E017480027297C01299FD16A7C0F +:1038B000002A9CD10120F8BD70B505461420174A96 +:1038C0000521684380180F4C0174207B0A2811D011 +:1038D000207BE17A401C884203D10DA11C4801F0F5 +:1038E00078FB207B2554207B0A2807D0207B401CB6 +:1038F000207370BDE07A0028EFD0F2E70020F7E7F0 +:1039000012010020A81C0020100100203C1D0020F6 +:103910007372635C72656D2E63000000B81C00203A +:10392000F10600001C1D0020F2060000FF7F841E2F +:103930000020A1071407000033070000FF1FA107A4 +:10394000701C0020901C0020FFFF3F00B01B0020D7 +:103950000902000010B501462022094801F09CF937 +:1039600007490020C877084610BD06490120486174 +:103970000548064A0168914201D100210160704763 +:103980004C1D0020000500401C010020BEBAFECAEC +:10399000064A10705170704704481C22017841712A +:1039A00042700170704770477047704720010020D7 +:1039B00030B50346002002460DE09C5C2546303DB4 +:1039C0000A2D02D30020C04330BD0A256843303899 +:1039D0002018521CD2B28A42EFD330BD70B50D46CA +:1039E000144608E00A2101F0D1F92A193031203AB1 +:1039F000641ED177E4B2002CF4D170BD10B5002361 +:103A000010E0040A00020443A0B2CC5C444020064B +:103A1000000F60400407240C44402006C00C6040A6 +:103A20005B1C9BB29342ECD310BD10B520380C4602 +:103A3000030001F0BFFB33E0DBE41B1F23272C3125 +:103A4000373C41474D5054585C606D7165697478DE +:103A50007C8084888C9094989C9FA2A6AAAEB2B8D1 +:103A6000BCC0C5CACFE9F0F3D3D7F800206800F096 +:103A7000DDF8D6E0206800F0E1F8D2E0206800F040 +:103A8000F5F8CEE0207840B200F092FAC9E0207854 +:103A900040B200F0B0FAC4E02078616840B200F0B3 +:103AA000C3FABEE0207840B200F0D3FAB9E0207843 +:103AB00040B200F0DEFAB4E02078217940B200F0A4 +:103AC000E9FAAEE02078616840B200F013FBA8E0AC +:103AD00000F01FFBA5E0206800F023FBA1E02078A8 +:103AE00000F038FB9DE02068FDF7F5FD99E02068C7 +:103AF000FDF7F5FD95E021792068FDF7F7FD90E0F1 +:103B00002068FDF73FFC8CE02068FDF740FC88E072 +:103B10002078FDF740FC84E0FDF74EFC81E0207842 +:103B2000FDF750FC7DE02078FDF762FC79E020682D +:103B3000FDF77BFC75E02068FDF77DFC71E02068F7 +:103B4000FDF77FFC6DE02068FDF780FC69E02068F0 +:103B5000FDF782FC65E02068FDF784FC61E02068E9 +:103B6000FDF785FC5DE00846EDF7F0FA59E0EFF768 +:103B700070F856E0EFF79DF853E02068EFF7A5F8EE +:103B80004FE0206800F080F84BE0206800F082F8F9 +:103B900047E0206800F083F843E02078A26861687D +:103BA00000F082F83DE0207800F089F839E02078D4 +:103BB00000F091F835E02078616800F098F830E086 +:103BC0002078616800F09FF82BE02179207800F0E0 +:103BD000D5FB26E02068FDF778FE22E02068FEF79E +:103BE0004DF91EE02068FEF731F91AE0204607C8BB +:103BF00000F0B9FC15E0206800F00CFD11E06168F0 +:103C0000206800F037FD0CE0206800F029FF08E094 +:103C100009E003E0FFE700F03BFF02E0206800F06E +:103C200073FF206010BD0120086010BD00210170ED +:103C3000084670470146002008707047EFF3108176 +:103C4000C907C90F72B60278012A01D0012200E02B +:103C5000002201230370002900D162B6002A01D09E +:103C600000207047012040037047E7E7EFF3108121 +:103C7000C907C90F72B600220270002900D162B6CE +:103C800000207047F2E7000038490968C9B20160B6 +:103C9000002070473549C0B2486000207047334962 +:103CA000C0B2886000207047082801D330487047B0 +:103CB000C3002E4818180161426100207047022895 +:103CC00002D32B48401C70472A4A0121C0008018AB +:103CD000016000207047022802D32548401C70472D +:103CE000244A0121C000801841600020704702284A +:103CF00002D31F48401C70471F4A8000C9B2801879 +:103D0000016000207047022802D31948401C704708 +:103D1000194A800080180068C0B20860002070470F +:103D200010B5FF20114AC043906008200021C30055 +:103D30009B1819615961401C1028F8D300200E4AC5 +:103D400005E0022803D383009B18196004E0830078 +:103D50009B181C68E4B21C60401C0428F1D310BD01 +:103D6000FF200249C04388607047000000F5014011 +:103D70000820000000F0014000F8014010B572B6C4 +:103D800000F0DEF800280BD0EDF78AFAFEF783F991 +:103D900000F0BBFA6F490020C86288626E49086073 +:103DA00062B6002010BDF3B5002501200007C06AEF +:103DB00081B0C0430006000E04D168480068401C72 +:103DC00000D1012572B600F0BBF8002801D062B620 +:103DD00087E0EDF7D1F9EDF767FA614C614A002110 +:103DE0002368CB40DB071FD00346CB40DB0718D14D +:103DF0004BB2002B07DA1E07360F083EB608B60096 +:103E0000B618F66904E09E08574FB600F6193668F2 +:103E10009B07DB0EDE4033069B0F012B04D0032BE8 +:103E200002D062B65148FEBD491C2029D8D3019C5E +:103E300001204F49230001F0BDF914222424242439 +:103E4000242424240B0D1012142016181A1C1E2FC3 +:103E5000002400E00124C86314E00224FBE70324EB +:103E6000F9E70424F7E70824F5E70924F3E70A242F +:103E7000F1E70B24EFE70C24EDE70524EBE707243B +:103E800000E00624D06901210002000AC9070843A6 +:103E9000D061002D04D009E062B601200003FEBD10 +:103EA0002C4D3448E862EDF7FFF9A8622A49324800 +:103EB0000860324902980860EDF7F6F9214600F0F3 +:103EC0000BFAFEF7AEF800F00DFC00F087FA01984F +:103ED000EDF7B4F9040062B603D0FFF74FFF2046B8 +:103EE000FEBD0020FEBD10B5044600F029F80028F4 +:103EF00000D001202070002010BD21490860002062 +:103F0000704710B50C46102808D011280BD0122885 +:103F10000CD013280ED00120086010BD6168206805 +:103F2000FFF741FF0AE0FFF729FF07E02068FFF7EE +:103F3000DAFF03E01249206808600020206010BD0D +:103F400005480D490068884201D1012070470020D2 +:103F500070470000000500401C0100200010001008 +:103F600000E100E000ED00E000E400E001100000EE +:103F70004000004000200000BEBAFECA2801002018 +:103F8000040000208107C90E002808DA0007000F8E +:103F900008388008814A80008018C06904E08008E1 +:103FA0007F4A800080180068C8400006800F704774 +:103FB00010B5044600F0DBF8002813D02046FFF7C8 +:103FC000E1FFC0B200F0E1F800280DD07549E2062B +:103FD0000B78D20E01209040002B08D04A68104385 +:103FE000486006E0704810BD6F48401C10BD6F4926 +:103FF0000860002010BD10B5044600F0B8F8002895 +:104000000BD06849E2060B78D20E01209040002BBD +:1040100005D04A6882434A6004E0634810BD6349A2 +:1040200080310860002010BD70B50D46044600F0D8 +:104030009EF800280BD05E480068E206D20E0121EF +:104040009140084000D001202860002070BD5648F3 +:1040500070BD10B5044600F08AF8002807D0E106CC +:10406000C90E0120884052490860002010BD4E480A +:1040700010BD10B5044600F07AF8002808D0E1061B +:10408000C90E012088404A4980310860002010BDD7 +:10409000454810BD70B50D46044600F068F800288C +:1040A00019D0284600F071F8002816D0A007C20EDB +:1040B000FF209040A907090E9140002C10DA22073A +:1040C000120F083A9308354A9B009B18DA6982431D +:1040D0000A43DA610CE0344870BD3348401C70BDBF +:1040E000A3082F4A9B009B181A6882430A431A6050 +:1040F000002070BD70B50C46054600F038F8002869 +:1041000005D02846FFF73EFF2070002070BD2648EE +:1041100070BDBFF34F8F21492648C860BFF34F8F52 +:10412000FEE770B51F4C05462178012000290ED10D +:10413000207072B600F0F8F81C4E8036316881436A +:10414000616000F0F1F8C043306062B60020287072 +:10415000002070BD13490A78002A06D0002804D137 +:10416000124A48681060002008700020704710B59F +:104170000446202805DA00F0D7F80121A1400842C2 +:1041800001D0002010BD012010BD012803D003285C +:1041900001D00020704701207047000000ED00E0D2 +:1041A00000E400E02C0100200120000000E100E01C +:1041B00000E200E00400FA05F8B504468007002597 +:1041C0000126002804DA5A48C563C66302208443E6 +:1041D000E00404D55748C563C66380148443600077 +:1041E00003D55548456080058443E00504D5534810 +:1041F000C563C66380158443A00404D55048C563D5 +:10420000C6634014844360042704C00FF90F88423A +:1042100003D04CA1612000F0DCFEB80F0AD04E495B +:10422000CD634E48C563C563CE63C663C6630320D2 +:104230008003844320050AD5494FFD632F20ECF706 +:10424000B3FFFE632F20ECF7AFFFF8148443002C7C +:1042500003DAFFF765FD640064084248044203D0B6 +:1042600038A1902000F0B5FEF8BDF0B500210A4657 +:10427000FF230446CC40E4072AD04CB2E606F60EF3 +:104280000125B540384E3560384E3560002C11DAC6 +:1042900025072D0F083DAE08354DB6007619F56996 +:1042A000A407E70E1C46BC40A5431446BC4025436A +:1042B000F5610DE0A6082F4DB60076193568A40704 +:1042C000E70E1C46BC40A5431446BC402543356060 +:1042D000491C2029CDD3F0BD70B5274C0D46206078 +:1042E000FFF76AFF2068FFF7C0FF2846EEF77AFD68 +:1042F000FDF7D6FAFDF782F9FFF712FDFDF7D5F8C5 +:10430000EEF7FEFB00F06AF870BD10B51A4C20689D +:10431000FFF752FF2068FFF7A8FFFFF701FDEEF758 +:10432000E6FD0020206010BD1348006870470000C3 +:10433000C01F0040C0CF004000E50140C08F0040DA +:10434000C0DF00407372635C736F635F636F6E66A0 +:1043500069672E6300000000C0EF0040C0FF00400E +:10436000C0BF0040FEFF0FFC80E100E080E200E003 +:1043700000ED00E000E400E03401002070B500240E +:1043800002460D4620462146002A1ED0012A04D0AE +:10439000022A04D0032A1ED103E0012002E00220F9 +:1043A00013E003202B0000F005FF07160507090B9B +:1043B0000D0F1600012108E0022106E0032104E0B0 +:1043C000042102E0052100E00621FDF7D9FE0028C6 +:1043D00001D0204670BD0724FBE70000B148002152 +:1043E00001708170704770B5AF4D01236B60AF4BAA +:1043F0001C68002CFCD0002407E00E6806601E68D4 +:10440000002EFCD0001D091D641C9442F5D3002031 +:10441000686018680028FCD070BD70B5A14C0D46CE +:104420006178884203D0A2A16C2000F0D2FD2B005D +:1044300000F0C0FE094F0625254F4F4F4F464F0055 +:104440002078022803D09AA1702000F0C2FD03203A +:104450002070A078022802D0012804D008E0A068CB +:1044600000F0CEFB04E02269E168A068FFF7BBFF23 +:104470000020A070FDF724FE0420207070BDFDF721 +:10448000D4FE01466068FFF7F9F805462078022857 +:1044900003D087A1842000F09CFD894A89498A487D +:1044A000954206D8401BC86086496078FEF737FB06 +:1044B00070BD854202D802224A71F3E7032003E06F +:1044C000A0780028FAD10220FDF704FD00F0E0F802 +:1044D00070BD77A1AD2000F07CFD70BD70B50546C4 +:1044E000FDF7A3FE6F4C60602078012803D070A117 +:1044F000B42000F06EFD73490220087000220A719A +:104500008D6003224A71704ACA6020706078FEF79D +:1045100006FB70BD10B5634CA078002802D120784E +:10452000002801D0112010BD6848FDF710FE607012 +:104530006078002803D001202070002010BD0320E7 +:1045400010BD10B50124020B64040121604BA04290 +:1045500002D29140186802E0203A58689140084021 +:1045600000D0012010BDF8B50E46910005464F1948 +:1045700014463F1F009100F054FB009980028919F6 +:10458000091FB14201D2012200E00022002C03D019 +:10459000FF2101318C4201D90920F8BD4D498D42DE +:1045A00019D3AF4217D3854205D2874203D228469A +:1045B0003043800701D01020F8BD8E420BD3002A73 +:1045C00009D12846FFF7BDFF002804D13846FFF780 +:1045D000B8FF002801D00F20F8BD3F483F490068D0 +:1045E000884205D0224631462846FFF7FCFE0FE000 +:1045F000FFF790FF0028EFD12A480121C6608560AF +:10460000046181702046312148431430FFF766FF72 +:104610000020F8BD10B504462E48800A84420BD312 +:1046200000F0FFFAA04201D8102010BDA0020446FD +:10463000FFF787FF002801D00F2010BD264827492B +:104640000068884203D0204600F0DAFA0AE0FFF75B +:1046500061FF0028F1D11348022184608170204855 +:10466000FFF73CFF002010BD1A48010B01208840D5 +:10467000401E704700B50B460246FFF7F5FF10429B +:1046800001D00F2000BD124802604360002000BD31 +:1046900010B5044C6078FDF7AEFD00202070A070CE +:1046A00010BD00003801002000E5014000E4014099 +:1046B0007372635C736F635F666C6173682E630013 +:1046C000307500006C1D0020D0FB01001B44010070 +:1046D00000060040006001001C010020BEBAFECAB6 +:1046E00010540000F74805218170002101704170CD +:1046F000C1708160704710B5F3490A78022A07D06B +:10470000CA681018C860C8689638FEF76FFF10BDF9 +:104710008A68101888608868F6E70378EB49EC4AE5 +:10472000002B02D0012B10D014E00379002B01D014 +:10473000012B0FD14379002B01D0012B0AD18368C3 +:10474000643B8B4206D2C06810E00379002B03D093 +:10475000012B01D0002070474379002B01D0012BA1 +:10476000F8D1C368643B8B42F4D280689042F1D8A0 +:1047700001207047F8B504460226FEF7BDFB00682D +:10478000002803D0D3A1BE2000F023FC0127CD4D8B +:10479000002C08D02078002817D0012805D0022846 +:1047A00011D0032813D02F710DE06068C82808D3FA +:1047B000FEF792FF002804D06068FFF79CFF0126F7 +:1047C00003E0002601E000F0F9F93046F8BD287852 +:1047D0000028F8D16068FFF7A0FF0028E3D06068E8 +:1047E0000078002826D0A878042803D0B9A1F820A2 +:1047F00000F0EFFBB44F00203870606800790128AA +:1048000000D00020387160684079002837D003203C +:10481000787160688168E868FDF79EFFB86060683D +:10482000C0689630F8600320A870A749E878FEF7C2 +:1048300076F9C8E7A4480221017061680979012965 +:1048400019D00021017161684979002915D003212F +:10485000417161688968963181606168C968C16029 +:10486000C068984C14346060FDF7DFFC20606F7006 +:104870000220A870A7E70321E4E70221E8E702206D +:10488000C6E7F8B58F4C0D46E178884204D0FF208A +:1048900090A11A3000F09DFB28468A4F0025012682 +:1048A0001437030000F086FC090612375A7C8D97F6 +:1048B000C4A0C400A078032807D0A078022804D0A0 +:1048C000FF2084A11E3000F084FBF8BDA0780328EF +:1048D00007D0A078022804D0FF207EA1223000F06B +:1048E00078FB0420A07025712078002810D1FFF7F4 +:1048F00002FFE078FDF74FFFE0607D49886A7D4A5E +:10490000024022617B4AD24310408862002050E07E +:1049100000F054F9F8BDA078032807D0A078022849 +:1049200004D0FF206BA1453000F053FB2078002815 +:1049300002D000F04FF9F8BDA07803281FD1042061 +:104940002AE0091A6048C1600146E078FEF7E7F8FE +:10495000F8BD0420FDF7BEFAA570F8BDA0780328C5 +:1049600007D0A078022804D0FF205AA1663000F0BA +:1049700030FB20780028DCD1A07803280BD0FDF78D +:1049800054FC01463868FEF779FE0028E1DB7968BF +:104990008142DEDBD5E70520FDF79CFAA670F8BD65 +:1049A000A078042804D0FF204AA1873000F011FB32 +:1049B0000220A1688847FFF7DDFEFF260546C036C6 +:1049C00042E0A078042804D0FF2042A18C3000F0FF +:1049D00000FB0120EDE7A078042899D0FF203DA13D +:1049E000913000F0F6FA93E7A07804280AD06078B6 +:1049F000002802D0A078022804D0FF2035A19630EC +:104A000000F0E7FA2078002893D12079002804D01C +:104A10000620FDF75FFA2571C0E76078002805D011 +:104A20002949E078FEF77BF86570F8BD0720B3E709 +:104A3000FF2028A1B13046E7002D0AD0012D06D075 +:104A400024A1304600F0C5FA022DF5D1F8BD0420AE +:104A500000E00320A1688847FFF78CFE0546F3E7D6 +:104A600070B5050005D0174CA078052803D011209B +:104A700070BD102070BD2048FDF769FBE070E07844 +:104A8000002803D0A5600020A07070BD032070BD79 +:104A900010B50C480178002901D0112010BD817893 +:104AA00005292BD0817801292AD08178002927D0A7 +:104AB000012101708178012922D0807800281FD03F +:104AC00020E000004C0100207C1D00203D860100FC +:104AD000FF1FA1077372635C736F635F7261646928 +:104AE0006F5F74696D65736C6F742E6300000000F6 +:104AF0000005004002810080834801000F2010BDA6 +:104B000000F068F8002010BDF8B5394E0446B078C2 +:104B1000002801D001280DD1002C0DD02046FFF730 +:104B2000FCFD00280AD02078324D002808D0B0784B +:104B3000012823D00F20F8BD1020F8BD0720F8BDB4 +:104B400002272F702079012814D000202871607965 +:104B5000002811D003206871A0689630A860E06832 +:104B6000E860E868224C14346060FDF75EFB20606A +:104B7000B77019E00320E9E70220ECE70020287075 +:104B80002079012816D0002028716079002813D0E0 +:104B900003206871A168F068FDF7DEFDA860E06899 +:104BA0009630E8600320B0701249F078FDF7B7FF47 +:104BB0000020F8BD0320E7E70220EAE710B50E4821 +:104BC000816A0E4A11400A4A126911438162FDF757 +:104BD00077FA10BD10B5064CE078FDF70CFB082005 +:104BE000FDF778F90520A07000202070607010BDDE +:104BF0004C0100207C1D002000050040FD7EFF7F51 +:104C00000A4A022151600A490B68002BFCD09060CF +:104C100008680028FCD00020506008680028FCD0FC +:104C200070470120000740697047000000E501401F +:104C300000E4014070477047704770477047034673 +:104C400010B50B439B070FD1042A0DD308C810C918 +:104C5000121FA342F8D018BA21BA884201D9012004 +:104C600010BD0020C04310BD002A03D0D30703D0DD +:104C7000521C07E0002010BD03780C78401C491C32 +:104C80001B1B07D103780C78401C491C1B1B01D14E +:104C9000921EF1D1184610BDF8B5042A2CD3830713 +:104CA00012D00B78491C0370401C521E83070BD096 +:104CB0000B78491C0370401C521E830704D00B78EC +:104CC000491C0370401C521E8B079B0F05D0C91A4C +:104CD000DF002023DE1B08C90AE0ECF775FAF8BDF7 +:104CE0001D4608C9FD401C46B4402C4310C0121F8D +:104CF000042AF5D2F308C91A521EF0D40B78491CC5 +:104D00000370401C521EEAD40B78491C0370401CEF +:104D1000521EE4D409780170F8BD01E004C0091FF7 +:104D20000429FBD28B0701D50280801CC90700D063 +:104D30000270704700290BD0C30702D00270401CDC +:104D4000491E022904D3830702D50280801C891ED4 +:104D5000E3E70022EEE70022DFE70378C278194696 +:104D6000437812061B0219438378C0781B04194349 +:104D700011430902090A000608437047020A087035 +:104D80004A70020C8A70020ECA7070470022030932 +:104D90008B4273D3030A8B4258D3030B8B423CD311 +:104DA000030C8B4221D312E003460B437FD4002235 +:104DB00043088B4274D303098B425FD3030A8B42AF +:104DC00044D3030B8B4228D3030C8B420DD3FF2219 +:104DD000090212BA030C8B4202D31212090265D0E7 +:104DE000030B8B4219D300E0090AC30B8B4201D39A +:104DF000CB03C01A5241830B8B4201D38B03C01AE1 +:104E00005241430B8B4201D34B03C01A5241030B57 +:104E10008B4201D30B03C01A5241C30A8B4201D308 +:104E2000CB02C01A5241830A8B4201D38B02C01AB3 +:104E30005241430A8B4201D34B02C01A5241030A2A +:104E40008B4201D30B02C01A5241CDD2C3098B420F +:104E500001D3CB01C01A524183098B4201D38B018C +:104E6000C01A524143098B4201D34B01C01A52412F +:104E700003098B4201D30B01C01A5241C3088B4274 +:104E800001D3CB00C01A524183088B4201D38B005F +:104E9000C01A524143088B4201D34B00C01A524101 +:104EA000411A00D201465241104670475DE0CA0FD8 +:104EB00000D04942031000D34042534000229C4698 +:104EC00003098B422DD3030A8B4212D3FC228901A2 +:104ED00012BA030A8B420CD3890192118B4208D378 +:104EE000890192118B4204D389013AD0921100E0DA +:104EF0008909C3098B4201D3CB01C01A52418309EE +:104F00008B4201D38B01C01A524143098B4201D31A +:104F10004B01C01A524103098B4201D30B01C01A45 +:104F20005241C3088B4201D3CB00C01A52418308BF +:104F30008B4201D38B00C01A5241D9D243088B4215 +:104F400001D34B00C01A5241411A00D201466346B8 +:104F500052415B10104601D34042002B00D549421C +:104F6000704763465B1000D3404201B50020C04645 +:104F7000C04602BD704770477047704710B500F0DB +:104F800059F810BD30B58C180278401C13071B0F60 +:104F900001D10378401C120906D10278401C03E0BD +:104FA0000578401C0D70491C5B1EF9D101E00B70A7 +:104FB000491C521EFBD1A142E6D3002030BD0000A7 +:104FC00001231B68134B1860134B1960134B1A60B5 +:104FD0007047134A134B13607246053AF0E7114AC3 +:104FE0000F4B1B689A420ED10D4B002018600198A0 +:104FF0000D4B04B598470CBC9E460246029800999A +:105000000A4B1B68184706980599094B1B68DB6813 +:105010001847000070010020740100207801002072 +:1050200068010020EFBEADDE5539010028010020E7 +:10503000040000201D481E497047FFF7FBFFECF7F6 +:105040007DF800BD01200007C06AC0B2FF2804D16E +:10505000184819490968884202D01848184901605F +:10506000184819490968884203D1184A13605B68D7 +:10507000184700BD20BFFDE7124813490968884260 +:105080000ED1134B18680B498842F3D080F308887F +:105090001049884204DD1048026802210A43026078 +:1050A0000E4880470E4880470E480047901D00205C +:1050B000901D0020FFFFFFFF001000102C05004096 +:1050C0000800000000100000000000200400002084 +:1050D0000060010000200020240500406B39010021 +:1050E00045500100C14F01001348704502D1EFF354 +:1050F000098101E0EFF308818869023800781028FF +:1051000014DB202810DB23280BDB0C4A12680C4B25 +:105110009A4203D1602804DB0A4A10470220086043 +:105120007047094A10470000084A1047084A1268A9 +:105130002C32126810470000FDFFFFFF1C01002009 +:10514000BEBAFECAAD1200002B3A0100033F0100B7 +:10515000040000200D4B0E4908470E4B0C49084730 +:105160000D4B0B4908470D4B094908470C4B0849A3 +:1051700008470C4B064908470B4B054908470B4BA2 +:10518000034908470A4B024908470000052E000062 +:10519000E13D0000BD2F0000873C0000353C0000D1 +:1051A000E9390000B912000063170000493D000012 +:1051B000AB2B000030B47446641E2578641CAB42EF +:1051C00000D21D46635D5B00E31830BC1847000049 +:1051D00002490020C861203908727047E0030020AE +:1051E00000020207FFFFFFFF0000FFFF01020408AB +:1051F00010204080555555D6BE898E00F401FA0026 +:10520000960064004B0032001E00140001000300F1 +:10521000000001000000000000000000000000008D +:1052200000000000870000000000000000000000F7 +:105230000000000000000203040500000E0F000043 +:10524000705201000800002010000000041100004E +:10525000805201001800002064010000844F01000A +:10526000A45201007C010020141C00002011000049 +:105270000249022208681042FCD0704700E200E0B8 +:10528000E1078F56FF9900CD29022B01360100015D +:1052900000EC3720FB349B5F8074800010027001AB +:0452A000E4C54F0111 +:00000001FF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/PeripheralNames.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,58 @@ +/* mbed Microcontroller Library + * Copyright (c) 2013 Nordic Semiconductor + * + * 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 MBED_PERIPHERALNAMES_H +#define MBED_PERIPHERALNAMES_H + +#include "cmsis.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define STDIO_UART_TX TX_PIN_NUMBER +#define STDIO_UART_RX RX_PIN_NUMBER +#define STDIO_UART UART_0 + +typedef enum { + UART_0 = (int)NRF_UART0_BASE +} UARTName; + + +typedef enum { + SPI_0 = (int)NRF_SPI0_BASE, + SPI_1 = (int)NRF_SPI1_BASE, + SPIS = (int)NRF_SPIS1_BASE +} SPIName; + +typedef enum { + PWM_1 = 0, + PWM_2 +} PWMName; + +typedef enum { + I2C_0 = (int)NRF_TWI0_BASE, + I2C_1 = (int)NRF_TWI1_BASE +} I2CName; + +typedef enum { + ADC0_0 = (int)NRF_ADC_BASE +} ADCName; + +#ifdef __cplusplus +} +#endif + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/PortNames.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,30 @@ +/* mbed Microcontroller Library + * Copyright (c) 2013 Nordic Semiconductor + * + * 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 MBED_PORTNAMES_H +#define MBED_PORTNAMES_H + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + Port0 = 0 //GPIO pins 0-31 +} PortName; + +#ifdef __cplusplus +} +#endif +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/TARGET_RBLAB_NRF51822/PinNames.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,180 @@ +/* mbed Microcontroller Library + * Copyright (c) 2013 Nordic Semiconductor + * + * 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 MBED_PINNAMES_H +#define MBED_PINNAMES_H + +#include "cmsis.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + PIN_INPUT, + PIN_OUTPUT +} PinDirection; + +#define PORT_SHIFT 3 + +typedef enum { + p0 = 0, + p1 = 1, + p2 = 2, + p3 = 3, + p4 = 4, + p5 = 5, + p6 = 6, + p7 = 7, + p8 = 8, + p9 = 9, + p10 = 10, + p11 = 11, + p12 = 12, + p13 = 13, + p14 = 14, + p15 = 15, + p16 = 16, + p17 = 17, + p18 = 18, + p19 = 19, + p20 = 20, + p21 = 21, + p22 = 22, + p23 = 23, + p24 = 24, + p25 = 25, + p26 = 26, + p27 = 27, + p28 = 28, + p29 = 29, + p30 = 30, +// p31=31, + + P0_0 = p0, + P0_1 = p1, + P0_2 = p2, + P0_3 = p3, + P0_4 = p4, + P0_5 = p5, + P0_6 = p6, + P0_7 = p7, + + P0_8 = p8, + P0_9 = p9, + P0_10 = p10, + P0_11 = p11, + P0_12 = p12, + P0_13 = p13, + P0_14 = p14, + P0_15 = p15, + + P0_16 = p16, + P0_17 = p17, + P0_18 = p18, + P0_19 = p19, + P0_20 = p20, + P0_21 = p21, + P0_22 = p22, + P0_23 = p23, + + P0_24 = p24, + P0_25 = p25, + P0_26 = p26, + P0_27 = p27, + P0_28 = p28, + P0_29 = p29, + P0_30 = p30, + + LED1 = p18, + LED2 = p19, + LED3 = p18, + LED4 = p19, + + BUTTON1 = p16, + BUTTON2 = p17, + + RX_PIN_NUMBER = p11, + TX_PIN_NUMBER = p9, + CTS_PIN_NUMBER = p10, + RTS_PIN_NUMBER = p8, + + // mBed interface Pins + USBTX = TX_PIN_NUMBER, + USBRX = RX_PIN_NUMBER, + + SPI_PSELMOSI0 = p20, + SPI_PSELMISO0 = p22, + SPI_PSELSS0 = p24, + SPI_PSELSCK0 = p25, + + SPI_PSELMOSI1 = p12, + SPI_PSELMISO1 = p13, + SPI_PSELSS1 = p14, + SPI_PSELSCK1 = p15, + + SPIS_PSELMOSI = p12, + SPIS_PSELMISO = p13, + SPIS_PSELSS = p14, + SPIS_PSELSCK = p15, + + I2C_SDA0 = p22, + I2C_SCL0 = p20, + + I2C_SDA1 = p13, + I2C_SCL1 = p15, + + D0 = p7, + D1 = p8, + D2 = p9, + D3 = p10, + D4 = p11, + D5 = p12, + D6 = p13, + D7 = p17, + + D8 = p18, + D9 = p23, + D10 = p24, + D11 = p25, + D12 = p28, + D13 = p29, + + D14 = p5, + D15 = p6, + + A0 = p1, + A1 = p2, + A2 = p3, + A3 = p4, + A4 = p5, + A5 = p6, + + // Not connected + NC = (int)0xFFFFFFFF +} PinName; + +typedef enum { + PullNone = 0, + PullDown = 1, + PullUp = 3, + PullDefault = PullUp +} PinMode; + +#ifdef __cplusplus +} +#endif + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/TARGET_RBLAB_NRF51822/device.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,57 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * 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 MBED_DEVICE_H +#define MBED_DEVICE_H + +#define DEVICE_PORTIN 1 +#define DEVICE_PORTOUT 1 +#define DEVICE_PORTINOUT 1 + +#define DEVICE_INTERRUPTIN 1 + +#define DEVICE_ANALOGIN 1 +#define DEVICE_ANALOGOUT 0 + +#define DEVICE_SERIAL 1 + +#define DEVICE_I2C 1 +#define DEVICE_I2CSLAVE 0 + +#define DEVICE_SPI 1 +#define DEVICE_SPISLAVE 1 + +#define DEVICE_CAN 0 + +#define DEVICE_RTC 0 + +#define DEVICE_ETHERNET 0 + +#define DEVICE_PWMOUT 1 + +#define DEVICE_SEMIHOST 0 +#define DEVICE_LOCALFILESYSTEM 0 + +#define DEVICE_SLEEP 1 + +#define DEVICE_DEBUG_AWARENESS 0 + +#define DEVICE_STDIO_MESSAGES 0 + +#define DEVICE_ERROR_PATTERN 1 + +#include "objects.h" + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/gpio_object.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,52 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * 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 MBED_GPIO_OBJECT_H +#define MBED_GPIO_OBJECT_H + +#include "mbed_assert.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + PinName pin; + uint32_t mask; + + __IO uint32_t *reg_dir; + __IO uint32_t *reg_set; + __IO uint32_t *reg_clr; + __I uint32_t *reg_in; +} gpio_t; + +static inline void gpio_write(gpio_t *obj, int value) { + MBED_ASSERT(obj->pin != (PinName)NC); + if (value) + *obj->reg_set = obj->mask; + else + *obj->reg_clr = obj->mask; +} + +static inline int gpio_read(gpio_t *obj) { + MBED_ASSERT(obj->pin != (PinName)NC); + return ((*obj->reg_in & obj->mask) ? 1 : 0); +} + +#ifdef __cplusplus +} +#endif + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/objects.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,73 @@ +/* mbed Microcontroller Library + * Copyright (c) 2013 Nordic Semiconductor + * + * 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 MBED_OBJECTS_H +#define MBED_OBJECTS_H + +#include "cmsis.h" +#include "PortNames.h" +#include "PeripheralNames.h" +#include "PinNames.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct serial_s { + NRF_UART_Type *uart; + int index; +}; + +struct spi_s { + NRF_SPI_Type *spi; + NRF_SPIS_Type *spis; +}; + +struct port_s { + __IO uint32_t *reg_cnf; + __IO uint32_t *reg_out; + __I uint32_t *reg_in; + PortName port; + uint32_t mask; +}; + +struct pwmout_s { + PWMName pwm; + PinName pin; +}; + +struct i2c_s { + NRF_TWI_Type *i2c; + PinName sda; + PinName scl; + int freq; +}; + +struct analogin_s { + ADCName adc; + uint8_t adc_pin; +}; + +struct gpio_irq_s { + uint32_t ch; +}; + +#include "gpio_object.h" + +#ifdef __cplusplus +} +#endif + +#endif
--- a/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,385 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_COMMON BLE SoftDevice Common - @{ - @defgroup ble_api Events, type definitions and API calls - @{ - - @brief Module independent events, type definitions and API calls for the S110 SoftDevice. - - */ - -#ifndef BLE_H__ -#define BLE_H__ - -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_gap.h" -#include "ble_l2cap.h" -#include "ble_gatt.h" -#include "ble_gattc.h" -#include "ble_gatts.h" - -/** @addtogroup BLE_COMMON_ENUMERATIONS Enumerations - * @{ */ - -/** - * @brief Common API SVC numbers. - */ -enum BLE_COMMON_SVCS -{ - SD_BLE_ENABLE = BLE_SVC_BASE, /**< Enable and initialize the BLE stack */ - SD_BLE_EVT_GET, /**< Get an event from the pending events queue. */ - SD_BLE_TX_BUFFER_COUNT_GET, /**< Get the total number of available application transmission buffers from the stack. */ - SD_BLE_UUID_VS_ADD, /**< Add a Vendor Specific UUID. */ - SD_BLE_UUID_DECODE, /**< Decode UUID bytes. */ - SD_BLE_UUID_ENCODE, /**< Encode UUID bytes. */ - SD_BLE_VERSION_GET, /**< Get the local version information (company id, Link Layer Version, Link Layer Subversion). */ - SD_BLE_USER_MEM_REPLY, /**< User Memory Reply. */ - SD_BLE_OPT_SET, /**< Set a BLE option. */ - SD_BLE_OPT_GET, /**< Get a BLE option. */ -}; - -/** @} */ - -/** @addtogroup BLE_COMMON_DEFINES Defines - * @{ */ - -/** @brief Required pointer alignment for BLE Events. -*/ -#define BLE_EVTS_PTR_ALIGNMENT 4 - -/** @defgroup BLE_USER_MEM_TYPES User Memory Types - * @{ */ -#define BLE_USER_MEM_TYPE_INVALID 0x00 /**< Invalid User Memory Types. */ -#define BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES 0x01 /**< User Memory for GATTS queued writes. */ -/** @} */ - -/** @brief Maximum number of Vendor Specific UUIDs. -*/ -#define BLE_UUID_VS_MAX_COUNT 10 - -/** @} */ - -/** @addtogroup BLE_COMMON_STRUCTURES Structures - * @{ */ - -/** - * @brief BLE Module Independent Event IDs. - */ -enum BLE_COMMON_EVTS -{ - BLE_EVT_TX_COMPLETE = BLE_EVT_BASE, /**< Transmission Complete. */ - BLE_EVT_USER_MEM_REQUEST, /**< User Memory request. */ - BLE_EVT_USER_MEM_RELEASE /**< User Memory release. */ -}; - -/**@brief User Memory Block. */ -typedef struct -{ - uint8_t* p_mem; /**< Pointer to the start of the user memory block. */ - uint16_t len; /**< Length in bytes of the user memory block. */ -} ble_user_mem_block_t; - -/** - * @brief TX complete event. - */ -typedef struct -{ - uint8_t count; /**< Number of packets transmitted. */ -} ble_evt_tx_complete_t; - -/**@brief Event structure for BLE_EVT_USER_MEM_REQUEST. */ -typedef struct -{ - uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ -} ble_evt_user_mem_request_t; - -/**@brief Event structure for BLE_EVT_USER_MEM_RELEASE. */ -typedef struct -{ - uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ - ble_user_mem_block_t mem_block; /**< User memory block */ -} ble_evt_user_mem_release_t; - - -/**@brief Event structure for events not associated with a specific function module. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which this event occured. */ - union - { - ble_evt_tx_complete_t tx_complete; /**< Transmission Complete. */ - ble_evt_user_mem_request_t user_mem_request; /**< User Memory Request Event Parameters. */ - ble_evt_user_mem_release_t user_mem_release; /**< User Memory Release Event Parameters. */ - } params; -} ble_common_evt_t; - -/**@brief BLE Event header. */ -typedef struct -{ - uint16_t evt_id; /**< Value from a BLE_<module>_EVT series. */ - uint16_t evt_len; /**< Length in octets excluding this header. */ -} ble_evt_hdr_t; - -/**@brief Common BLE Event type, wrapping the module specific event reports. */ -typedef struct -{ - ble_evt_hdr_t header; /**< Event header. */ - union - { - ble_common_evt_t common_evt; /**< Common Event, evt_id in BLE_EVT_* series. */ - ble_gap_evt_t gap_evt; /**< GAP originated event, evt_id in BLE_GAP_EVT_* series. */ - ble_l2cap_evt_t l2cap_evt; /**< L2CAP originated event, evt_id in BLE_L2CAP_EVT* series. */ - ble_gattc_evt_t gattc_evt; /**< GATT client originated event, evt_id in BLE_GATTC_EVT* series. */ - ble_gatts_evt_t gatts_evt; /**< GATT server originated event, evt_id in BLE_GATTS_EVT* series. */ - } evt; -} ble_evt_t; - - -/** - * @brief Version Information. - */ -typedef struct -{ - uint8_t version_number; /**< Link Layer Version number for BT 4.1 spec is 7 (https://www.bluetooth.org/en-us/specification/assigned-numbers/link-layer). */ - uint16_t company_id; /**< Company ID, Nordic Semiconductor's company ID is 89 (0x0059) (https://www.bluetooth.org/apps/content/Default.aspx?doc_id=49708). */ - uint16_t subversion_number; /**< Link Layer Sub Version number, corresponds to the SoftDevice Config ID or Firmware ID (FWID). */ -} ble_version_t; - -/**@brief Common BLE Option type, wrapping the module specific options. */ -typedef union -{ - ble_gap_opt_t gap; /**< GAP option, opt_id in BLE_GAP_OPT_* series. */ -} ble_opt_t; - -/** - * @brief BLE GATTS init options - */ -typedef struct -{ - ble_gatts_enable_params_t gatts_enable_params; /**< GATTS init options @ref ble_gatts_enable_params_t. */ -} ble_enable_params_t; - -/** @} */ - -/** @addtogroup BLE_COMMON_FUNCTIONS Functions - * @{ */ - -/**@brief Enable the bluetooth stack - * - * @param[in] p_ble_enable_params Pointer to ble_enable_params_t - * - * @details This call initializes the bluetooth stack, no other BLE related call can be called before this one has been executed. - * - * @return @ref NRF_SUCCESS BLE stack has been initialized successfully - * @return @ref NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. - */ -SVCALL(SD_BLE_ENABLE, uint32_t, sd_ble_enable(ble_enable_params_t * p_ble_enable_params)); - -/**@brief Get an event from the pending events queue. - * - * @param[in] p_dest Pointer to buffer to be filled in with an event, or NULL to retrieve the event length. This buffer <b>must be 4-byte aligned in memory</b>. - * @param[in, out] p_len Pointer the length of the buffer, on return it is filled with the event length. - * - * @details This call allows the application to pull a BLE event from the BLE stack. The application is signalled that an event is - * available from the BLE Stack by the triggering of the SD_EVT_IRQn interrupt (mapped to IRQ 22). - * The application is free to choose whether to call this function from thread mode (main context) or directly from the Interrupt Service Routine - * that maps to SD_EVT_IRQn. In any case however, and because the BLE stack runs at a higher priority than the application, this function should be called - * in a loop (until @ref NRF_ERROR_NOT_FOUND is returned) every time SD_EVT_IRQn is raised to ensure that all available events are pulled from the stack. - * Failure to do so could potentially leave events in the internal queue without the application being aware of this fact. - * Sizing the p_dest buffer is equally important, since the application needs to provide all the memory necessary for the event to be copied into - * application memory. If the buffer provided is not large enough to fit the entire contents of the event, @ref NRF_ERROR_DATA_SIZE will be returned - * and the application can then call again with a larger buffer size. - * Please note that because of the variable length nature of some events, sizeof(ble_evt_t) will not always be large enough to fit certain events, - * and so it is the application's responsability to provide an amount of memory large enough so that the relevant event is copied in full. - * The application may "peek" the event length by providing p_dest as a NULL pointer and inspecting the value of *p_len upon return. - * - * @note The pointer supplied must be aligned to the extend defined by @ref BLE_EVTS_PTR_ALIGNMENT - * - * @return @ref NRF_SUCCESS Event pulled and stored into the supplied buffer. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. - * @return @ref NRF_ERROR_NOT_FOUND No events ready to be pulled. - * @return @ref NRF_ERROR_DATA_SIZE Event ready but could not fit into the supplied buffer. - */ -SVCALL(SD_BLE_EVT_GET, uint32_t, sd_ble_evt_get(uint8_t* p_dest, uint16_t *p_len)); - - -/**@brief Get the total number of available application transmission buffers in the BLE stack. - * - * @details This call allows the application to obtain the total number of - * transmission buffers available for application data. Please note that - * this does not give the number of free buffers, but rather the total amount of them. - * The application has two options to handle its own application transmission buffers: - * - Use a simple arithmetic calculation: at boot time the application should use this function - * to find out the total amount of buffers available to it and store it in a variable. - * Every time a packet that consumes an application buffer is sent using any of the - * exposed functions in this BLE API, the application should decrement that variable. - * Conversely, whenever a @ref BLE_EVT_TX_COMPLETE event is received by the application - * it should retrieve the count field in such event and add that number to the same - * variable storing the number of available packets. - * This mechanism allows the application to be aware at any time of the number of - * application packets available in the BLE stack's internal buffers, and therefore - * it can know with certainty whether it is possible to send more data or it has to - * wait for a @ref BLE_EVT_TX_COMPLETE event before it proceeds. - * - Choose to simply not keep track of available buffers at all, and instead handle the - * @ref BLE_ERROR_NO_TX_BUFFERS error by queueing the packet to be transmitted and - * try again as soon as a @ref BLE_EVT_TX_COMPLETE event arrives. - * - * The API functions that <b>may</b> consume an application buffer depending on - * the parameters supplied to them can be found below: - * - * - @ref sd_ble_gattc_write (write witout response only) - * - @ref sd_ble_gatts_hvx (notifications only) - * - @ref sd_ble_l2cap_tx (all packets) - * - * @param[out] p_count Pointer to a uint8_t which will contain the number of application transmission buffers upon - * successful return. - * - * @return @ref NRF_SUCCESS Number of application transmission buffers retrieved successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_TX_BUFFER_COUNT_GET, uint32_t, sd_ble_tx_buffer_count_get(uint8_t* p_count)); - - -/**@brief Add a Vendor Specific UUID. - * - * @details This call enables the application to add a vendor specific UUID to the BLE stack's table, - * for later use all other modules and APIs. This then allows the application to use the shorter, - * 24-bit @ref ble_uuid_t format when dealing with both 16-bit and 128-bit UUIDs without having to - * check for lengths and having split code paths. The way that this is accomplished is by extending the - * grouping mechanism that the Bluetooth SIG standard base UUID uses for all other 128-bit UUIDs. The - * type field in the @ref ble_uuid_t structure is an index (relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN) - * to the table populated by multiple calls to this function, and the uuid field in the same structure - * contains the 2 bytes at indices 12 and 13. The number of possible 128-bit UUIDs available to the - * application is therefore the number of Vendor Specific UUIDs added with the help of this function times 65536, - * although restricted to modifying bytes 12 and 13 for each of the entries in the supplied array. - * - * @note Bytes 12 and 13 of the provided UUID will not be used internally, since those are always replaced by - * the 16-bit uuid field in @ref ble_uuid_t. - * - * - * @param[in] p_vs_uuid Pointer to a 16-octet (128-bit) little endian Vendor Specific UUID disregarding - * bytes 12 and 13. - * @param[out] p_uuid_type Pointer where the type field in @ref ble_uuid_t corresponding to this UUID will be stored. - * - * @return @ref NRF_SUCCESS Successfully added the Vendor Specific UUID. - * @return @ref NRF_ERROR_INVALID_ADDR If p_vs_uuid or p_uuid_type is NULL or invalid. - * @return @ref NRF_ERROR_NO_MEM If there are no more free slots for VS UUIDs. - * @return @ref NRF_ERROR_FORBIDDEN If p_vs_uuid has already been added to the VS UUID table. - */ -SVCALL(SD_BLE_UUID_VS_ADD, uint32_t, sd_ble_uuid_vs_add(ble_uuid128_t const * const p_vs_uuid, uint8_t * const p_uuid_type)); - - -/** @brief Decode little endian raw UUID bytes (16-bit or 128-bit) into a 24 bit @ref ble_uuid_t structure. - * - * @details The raw UUID bytes excluding bytes 12 and 13 (i.e. bytes 0-11 and 14-15) of p_uuid_le are compared - * to the corresponding ones in each entry of the table of vendor specific UUIDs pouplated with @ref sd_ble_uuid_vs_add - * to look for a match. If there is such a match, bytes 12 and 13 are returned as p_uuid->uuid and the index - * relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN as p_uuid->type. - * - * @note If the UUID length supplied is 2, then the type set by this call will always be @ref BLE_UUID_TYPE_BLE. - * - * @param[in] uuid_le_len Length in bytes of the buffer pointed to by p_uuid_le (must be 2 or 16 bytes). - * @param[in] p_uuid_le Pointer pointing to little endian raw UUID bytes. - * @param[in,out] p_uuid Pointer to a @ref ble_uuid_t structure to be filled in. - * - * @return @ref NRF_SUCCESS Successfully decoded into the @ref ble_uuid_t structure. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_LENGTH Invalid UUID length. - * @return @ref NRF_ERROR_NOT_FOUND For a 128-bit UUID, no match in the populated table of UUIDs. - */ -SVCALL(SD_BLE_UUID_DECODE, uint32_t, sd_ble_uuid_decode(uint8_t uuid_le_len, uint8_t const * const p_uuid_le, ble_uuid_t * const p_uuid)); - - -/** @brief Encode a @ref ble_uuid_t structure into little endian raw UUID bytes (16-bit or 128-bit). - * - * @note The pointer to the destination buffer p_uuid_le may be NULL, in which case only the validitiy and size of p_uuid is computed. - * - * @param[in] p_uuid Pointer to a @ref ble_uuid_t structure that will be encoded into bytes. - * @param[out] p_uuid_le_len Pointer to a uint8_t that will be filled with the encoded length (2 or 16 bytes). - * @param[out] p_uuid_le Pointer to a buffer where the little endian raw UUID bytes (2 or 16) will be stored. - * - * @return @ref NRF_SUCCESS Successfully encoded into the buffer. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid UUID type. - */ -SVCALL(SD_BLE_UUID_ENCODE, uint32_t, sd_ble_uuid_encode(ble_uuid_t const * const p_uuid, uint8_t * const p_uuid_le_len, uint8_t * const p_uuid_le)); - - -/**@brief Get Version Information. - * - * @details This call allows the application to get the BLE stack version information. - * - * @param[in] p_version Pointer to ble_version_t structure to be filled in. - * - * @return @ref NRF_SUCCESS Version information stored successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY The stack is busy (typically doing a locally-initiated disconnection procedure). - */ -SVCALL(SD_BLE_VERSION_GET, uint32_t, sd_ble_version_get(ble_version_t * p_version)); - - -/**@brief Provide a user memory block. - * - * @note This call can only be used as a response to a @ref BLE_EVT_USER_MEM_REQUEST event issued to the application. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_block Pointer to a user memory block structure. - * - * @return @ref NRF_SUCCESS Successfully queued a response to the peer. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_STATE No execute write request pending. - */ -SVCALL(SD_BLE_USER_MEM_REPLY, uint32_t, sd_ble_user_mem_reply(uint16_t conn_handle, ble_user_mem_block_t *p_block)); - - -/**@brief Set a BLE option. - * - * @details This call allows the application to set the value of an option. - * - * @param[in] opt_id Option ID. - * @param[in] p_opt Pointer to a ble_opt_t structure containing the option value. - * - * @retval ::NRF_SUCCESS Option set successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. - * @retval ::NRF_ERROR_INVALID_STATE Unable to set the parameter at this time. - * @retval ::NRF_ERROR_BUSY The stack is busy or the previous procedure has not completed. - */ -SVCALL(SD_BLE_OPT_SET, uint32_t, sd_ble_opt_set(uint32_t opt_id, ble_opt_t const *p_opt)); - - -/**@brief Get a BLE option. - * - * @details This call allows the application to retrieve the value of an option. - * - * @param[in] opt_id Option ID. - * @param[out] p_opt Pointer to a ble_opt_t structure to be filled in. - * - * @retval ::NRF_SUCCESS Option retrieved successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. - * @retval ::NRF_ERROR_INVALID_STATE Unable to retrieve the parameter at this time. - * @retval ::NRF_ERROR_BUSY The stack is busy or the previous procedure has not completed. - * @retval ::NRF_ERROR_NOT_SUPPORTED This option is not supported. - * - */ -SVCALL(SD_BLE_OPT_GET, uint32_t, sd_ble_opt_get(uint32_t opt_id, ble_opt_t *p_opt)); - -/** @} */ - -#endif /* BLE_H__ */ - -/** - @} - @} -*/
--- a/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_err.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - /** - @addtogroup BLE_COMMON - @{ - @addtogroup nrf_error - @{ - @ingroup BLE_COMMON - @} - - @defgroup ble_err General error codes - @{ - - @brief General error code definitions for the BLE API. - - @ingroup BLE_COMMON -*/ -#ifndef NRF_BLE_ERR_H__ -#define NRF_BLE_ERR_H__ - -#include "nrf_error.h" - -/* @defgroup BLE_ERRORS Error Codes - * @{ */ -#define BLE_ERROR_NOT_ENABLED (NRF_ERROR_STK_BASE_NUM+0x001) /**< @ref sd_ble_enable has not been called. */ -#define BLE_ERROR_INVALID_CONN_HANDLE (NRF_ERROR_STK_BASE_NUM+0x002) /**< Invalid connection handle. */ -#define BLE_ERROR_INVALID_ATTR_HANDLE (NRF_ERROR_STK_BASE_NUM+0x003) /**< Invalid attribute handle. */ -#define BLE_ERROR_NO_TX_BUFFERS (NRF_ERROR_STK_BASE_NUM+0x004) /**< Buffer capacity exceeded. */ -/** @} */ - - -/** @defgroup BLE_ERROR_SUBRANGES Module specific error code subranges - * @brief Assignment of subranges for module specific error codes. - * @note For specific error codes, see ble_<module>.h or ble_error_<module>.h. - * @{ */ -#define NRF_L2CAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x100) /**< L2CAP specific errors. */ -#define NRF_GAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x200) /**< GAP specific errors. */ -#define NRF_GATTC_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x300) /**< GATT client specific errors. */ -#define NRF_GATTS_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x400) /**< GATT server specific errors. */ -/** @} */ - -#endif - - -/** - @} - @} -*/
--- a/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gap.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1032 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_GAP Generic Access Profile (GAP) - @{ - @brief Definitions and prototypes for the GAP interface. - */ - -#ifndef BLE_GAP_H__ -#define BLE_GAP_H__ - -#include "ble_types.h" -#include "ble_ranges.h" -#include "nrf_svc.h" - - -/**@addtogroup BLE_GAP_ENUMERATIONS Enumerations - * @{ */ - -/**@brief GAP API SVC numbers. - */ -enum BLE_GAP_SVCS -{ - SD_BLE_GAP_ADDRESS_SET = BLE_GAP_SVC_BASE, /**< Set own Bluetooth Address. */ - SD_BLE_GAP_ADDRESS_GET, /**< Get own Bluetooth Address. */ - SD_BLE_GAP_ADV_DATA_SET, /**< Set Advertisement Data. */ - SD_BLE_GAP_ADV_START, /**< Start Advertising. */ - SD_BLE_GAP_ADV_STOP, /**< Stop Advertising. */ - SD_BLE_GAP_CONN_PARAM_UPDATE, /**< Connection Parameter Update. */ - SD_BLE_GAP_DISCONNECT, /**< Disconnect. */ - SD_BLE_GAP_TX_POWER_SET, /**< Set TX Power. */ - SD_BLE_GAP_APPEARANCE_SET, /**< Set Appearance. */ - SD_BLE_GAP_APPEARANCE_GET, /**< Get Appearance. */ - SD_BLE_GAP_PPCP_SET, /**< Set PPCP. */ - SD_BLE_GAP_PPCP_GET, /**< Get PPCP. */ - SD_BLE_GAP_DEVICE_NAME_SET, /**< Set Device Name. */ - SD_BLE_GAP_DEVICE_NAME_GET, /**< Get Device Name. */ - SD_BLE_GAP_AUTHENTICATE, /**< Initiate Pairing/Bonding. */ - SD_BLE_GAP_SEC_PARAMS_REPLY, /**< Reply with Security Parameters. */ - SD_BLE_GAP_AUTH_KEY_REPLY, /**< Reply with an authentication key. */ - SD_BLE_GAP_SEC_INFO_REPLY, /**< Reply with Security Information. */ - SD_BLE_GAP_CONN_SEC_GET, /**< Obtain connection security level. */ - SD_BLE_GAP_RSSI_START, /**< Start reporting of changes in RSSI. */ - SD_BLE_GAP_RSSI_STOP, /**< Stop reporting of changes in RSSI. */ -}; -/**@} */ - -/**@addtogroup BLE_GAP_DEFINES Defines - * @{ */ - -/**@defgroup BLE_ERRORS_GAP SVC return values specific to GAP - * @{ */ -#define BLE_ERROR_GAP_UUID_LIST_MISMATCH (NRF_GAP_ERR_BASE + 0x000) /**< UUID list does not contain an integral number of UUIDs. */ -#define BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST (NRF_GAP_ERR_BASE + 0x001) /**< Use of Whitelist not permitted with discoverable advertising. */ -#define BLE_ERROR_GAP_INVALID_BLE_ADDR (NRF_GAP_ERR_BASE + 0x002) /**< The upper two bits of the address do not correspond to the specified address type. */ -/**@} */ - - -/**@defgroup BLE_GAP_ROLES GAP Roles - * @note Not explicitly used in peripheral API, but will be relevant for central API. - * @{ */ -#define BLE_GAP_ROLE_INVALID 0x0 /**< Invalid Role. */ -#define BLE_GAP_ROLE_PERIPH 0x1 /**< Peripheral Role. */ -#define BLE_GAP_ROLE_CENTRAL 0x2 /**< Central Role. */ -/**@} */ - - -/**@defgroup BLE_GAP_TIMEOUT_SOURCES GAP Timeout sources - * @{ */ -#define BLE_GAP_TIMEOUT_SRC_ADVERTISEMENT 0x00 /**< Advertisement timeout. */ -#define BLE_GAP_TIMEOUT_SRC_SECURITY_REQUEST 0x01 /**< Security request timeout. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADDR_TYPES GAP Address types - * @{ */ -#define BLE_GAP_ADDR_TYPE_PUBLIC 0x00 /**< Public address. */ -#define BLE_GAP_ADDR_TYPE_RANDOM_STATIC 0x01 /**< Random Static address. */ -#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE 0x02 /**< Private Resolvable address. */ -#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE 0x03 /**< Private Non-Resolvable address. */ -/**@} */ - -/**@defgroup BLE_GAP_ADDR_CYCLE_MODES GAP Address cycle modes - * @{ */ -#define BLE_GAP_ADDR_CYCLE_MODE_NONE 0x00 /**< Set addresses directly, no automatic address cycling. */ -#define BLE_GAP_ADDR_CYCLE_MODE_AUTO 0x01 /**< Automatically generate and update private addresses. */ -/** @} */ - -/**@brief The default interval in seconds at which a private address is refreshed when address cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO. */ -#define BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S (60 * 15) - -/** @brief BLE address length. */ -#define BLE_GAP_ADDR_LEN 6 - - -/**@defgroup BLE_GAP_AD_TYPE_DEFINITIONS GAP Advertising and Scan Response Data format - * @note Found at https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm - * @{ */ -#define BLE_GAP_AD_TYPE_FLAGS 0x01 /**< Flags for discoverability. */ -#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE 0x02 /**< Partial list of 16 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE 0x03 /**< Complete list of 16 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE 0x04 /**< Partial list of 32 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE 0x05 /**< Complete list of 32 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE 0x06 /**< Partial list of 128 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE 0x07 /**< Complete list of 128 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME 0x08 /**< Short local device name. */ -#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME 0x09 /**< Complete local device name. */ -#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL 0x0A /**< Transmit power level. */ -#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE 0x0D /**< Class of device. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C 0x0E /**< Simple Pairing Hash C. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R 0x0F /**< Simple Pairing Randomizer R. */ -#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE 0x10 /**< Security Manager TK Value. */ -#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS 0x11 /**< Security Manager Out Of Band Flags. */ -#define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE 0x12 /**< Slave Connection Interval Range. */ -#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT 0x14 /**< List of 16-bit Service Solicitation UUIDs. */ -#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT 0x15 /**< List of 128-bit Service Solicitation UUIDs. */ -#define BLE_GAP_AD_TYPE_SERVICE_DATA 0x16 /**< Service Data - 16-bit UUID. */ -#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS 0x17 /**< Public Target Address. */ -#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS 0x18 /**< Random Target Address. */ -#define BLE_GAP_AD_TYPE_APPEARANCE 0x19 /**< Appearance. */ -#define BLE_GAP_AD_TYPE_ADVERTISING_INTERVAL 0x1A /**< Advertising Interval. */ -#define BLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS 0x1B /**< LE Bluetooth Device Address. */ -#define BLE_GAP_AD_TYPE_LE_ROLE 0x1C /**< LE Role. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C256 0x1D /**< Simple Pairing Hash C-256. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R256 0x1E /**< Simple Pairing Randomizer R-256. */ -#define BLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID 0x20 /**< Service Data - 32-bit UUID. */ -#define BLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID 0x21 /**< Service Data - 128-bit UUID. */ -#define BLE_GAP_AD_TYPE_3D_INFORMATION_DATA 0x3D /**< 3D Information Data. */ -#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA 0xFF /**< Manufacturer Specific Data. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADV_FLAGS GAP Advertisement Flags - * @{ */ -#define BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE (0x01) /**< LE Limited Discoverable Mode. */ -#define BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE (0x02) /**< LE General Discoverable Mode. */ -#define BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED (0x04) /**< BR/EDR not supported. */ -#define BLE_GAP_ADV_FLAG_LE_BR_EDR_CONTROLLER (0x08) /**< Simultaneous LE and BR/EDR, Controller. */ -#define BLE_GAP_ADV_FLAG_LE_BR_EDR_HOST (0x10) /**< Simultaneous LE and BR/EDR, Host. */ -#define BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE (BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE Limited Discoverable Mode, BR/EDR not supported. */ -#define BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE (BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE General Discoverable Mode, BR/EDR not supported. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADV_INTERVALS GAP Advertising interval max and min - * @{ */ -#define BLE_GAP_ADV_INTERVAL_MIN 0x0020 /**< Minimum Advertising interval in 625 us units, i.e. 20 ms. */ -#define BLE_GAP_ADV_NONCON_INTERVAL_MIN 0x00A0 /**< Minimum Advertising interval in 625 us units for non connectable mode, i.e. 100 ms. */ -#define BLE_GAP_ADV_INTERVAL_MAX 0x4000 /**< Maximum Advertising interval in 625 us units, i.e. 10.24 s. */ - /**@} */ - - -/**@brief Maximum size of advertising data in octets. */ -#define BLE_GAP_ADV_MAX_SIZE 31 - - -/**@defgroup BLE_GAP_ADV_TYPES GAP Advertising types - * @{ */ -#define BLE_GAP_ADV_TYPE_ADV_IND 0x00 /**< Connectable undirected. */ -#define BLE_GAP_ADV_TYPE_ADV_DIRECT_IND 0x01 /**< Connectable directed. */ -#define BLE_GAP_ADV_TYPE_ADV_SCAN_IND 0x02 /**< Scannable undirected. */ -#define BLE_GAP_ADV_TYPE_ADV_NONCONN_IND 0x03 /**< Non connectable undirected. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADV_FILTER_POLICIES GAP Advertising filter policies - * @{ */ -#define BLE_GAP_ADV_FP_ANY 0x00 /**< Allow scan requests and connect requests from any device. */ -#define BLE_GAP_ADV_FP_FILTER_SCANREQ 0x01 /**< Filter scan requests with whitelist. */ -#define BLE_GAP_ADV_FP_FILTER_CONNREQ 0x02 /**< Filter connect requests with whitelist. */ -#define BLE_GAP_ADV_FP_FILTER_BOTH 0x03 /**< Filter both scan and connect requests with whitelist. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADV_TIMEOUT_VALUES GAP Advertising timeout values - * @{ */ -#define BLE_GAP_ADV_TIMEOUT_LIMITED_MAX 180 /**< Maximum advertising time in limited discoverable mode (TGAP(lim_adv_timeout) = 180s in spec (Addendum 2)). */ -#define BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED 0 /**< Unlimited advertising in general discoverable mode. */ -/**@} */ - - -/**@defgroup BLE_GAP_DISC_MODES GAP Discovery modes - * @{ */ -#define BLE_GAP_DISC_MODE_NOT_DISCOVERABLE 0x00 /**< Not discoverable discovery Mode. */ -#define BLE_GAP_DISC_MODE_LIMITED 0x01 /**< Limited Discovery Mode. */ -#define BLE_GAP_DISC_MODE_GENERAL 0x02 /**< General Discovery Mode. */ -/**@} */ - -/**@defgroup BLE_GAP_IO_CAPS GAP IO Capabilities - * @{ */ -#define BLE_GAP_IO_CAPS_DISPLAY_ONLY 0x00 /**< Display Only. */ -#define BLE_GAP_IO_CAPS_DISPLAY_YESNO 0x01 /**< Display and Yes/No entry. */ -#define BLE_GAP_IO_CAPS_KEYBOARD_ONLY 0x02 /**< Keyboard Only. */ -#define BLE_GAP_IO_CAPS_NONE 0x03 /**< No I/O capabilities. */ -#define BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY 0x04 /**< Keyboard and Display. */ -/**@} */ - - -/**@defgroup BLE_GAP_AUTH_KEY_TYPES GAP Authentication Key Types - * @{ */ -#define BLE_GAP_AUTH_KEY_TYPE_NONE 0x00 /**< No key (may be used to reject). */ -#define BLE_GAP_AUTH_KEY_TYPE_PASSKEY 0x01 /**< 6-digit Passkey. */ -#define BLE_GAP_AUTH_KEY_TYPE_OOB 0x02 /**< Out Of Band data. */ -/**@} */ - -/**@defgroup BLE_GAP_SEC_STATUS GAP Security status - * @{ */ -#define BLE_GAP_SEC_STATUS_SUCCESS 0x00 /**< Successful parameters. */ -#define BLE_GAP_SEC_STATUS_TIMEOUT 0x01 /**< Procedure timed out. */ -#define BLE_GAP_SEC_STATUS_PDU_INVALID 0x02 /**< Invalid PDU received. */ -#define BLE_GAP_SEC_STATUS_PASSKEY_ENTRY_FAILED 0x81 /**< Passkey entry failed (user cancelled or other). */ -#define BLE_GAP_SEC_STATUS_OOB_NOT_AVAILABLE 0x82 /**< Out of Band Key not available. */ -#define BLE_GAP_SEC_STATUS_AUTH_REQ 0x83 /**< Authentication requirements not met. */ -#define BLE_GAP_SEC_STATUS_CONFIRM_VALUE 0x84 /**< Confirm value failed. */ -#define BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP 0x85 /**< Pairing not supported. */ -#define BLE_GAP_SEC_STATUS_ENC_KEY_SIZE 0x86 /**< Encryption key size. */ -#define BLE_GAP_SEC_STATUS_SMP_CMD_UNSUPPORTED 0x87 /**< Unsupported SMP command. */ -#define BLE_GAP_SEC_STATUS_UNSPECIFIED 0x88 /**< Unspecified reason. */ -#define BLE_GAP_SEC_STATUS_REPEATED_ATTEMPTS 0x89 /**< Too little time elapsed since last attempt. */ -#define BLE_GAP_SEC_STATUS_INVALID_PARAMS 0x8A /**< Invalid parameters. */ -/**@} */ - -/**@defgroup BLE_GAP_SEC_STATUS_SOURCES GAP Security status sources - * @{ */ -#define BLE_GAP_SEC_STATUS_SOURCE_LOCAL 0x00 /**< Local failure. */ -#define BLE_GAP_SEC_STATUS_SOURCE_REMOTE 0x01 /**< Remote failure. */ -/**@} */ - -/**@defgroup BLE_GAP_CP_LIMITS GAP Connection Parameters Limits - * @{ */ -#define BLE_GAP_CP_MIN_CONN_INTVL_NONE 0xFFFF /**< No new minimum connction interval specified in connect parameters. */ -#define BLE_GAP_CP_MIN_CONN_INTVL_MIN 0x0006 /**< Lowest mimimum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ -#define BLE_GAP_CP_MIN_CONN_INTVL_MAX 0x0C80 /**< Highest minimum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_NONE 0xFFFF /**< No new maximum connction interval specified in connect parameters. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_MIN 0x0006 /**< Lowest maximum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_MAX 0x0C80 /**< Highest maximum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ -#define BLE_GAP_CP_SLAVE_LATENCY_MAX 0x03E8 /**< Highest slave latency permitted, in connection events. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_NONE 0xFFFF /**< No new supervision timeout specified in connect parameters. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MIN 0x000A /**< Lowest supervision timeout permitted, in units of 10 ms, i.e. 100 ms. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MAX 0x0C80 /**< Highest supervision timeout permitted, in units of 10 ms, i.e. 32 s. */ -/**@} */ - - -/**@brief GAP device name maximum length. */ -#define BLE_GAP_DEVNAME_MAX_LEN 31 - - -/**@defgroup BLE_GAP_CONN_SEC_MODE_SET_MACROS GAP attribute security requirement setters - * - * See @ref ble_gap_conn_sec_mode_t. - * @{ */ -/**@brief Set sec_mode pointed to by ptr to have no access rights.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(ptr) do {(ptr)->sm = 0; (ptr)->lv = 0;} while(0) -/**@brief Set sec_mode pointed to by ptr to require no protection, open link.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_OPEN(ptr) do {(ptr)->sm = 1; (ptr)->lv = 1;} while(0) -/**@brief Set sec_mode pointed to by ptr to require encryption, but no MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 2;} while(0) -/**@brief Set sec_mode pointed to by ptr to require encryption and MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 3;} while(0) -/**@brief Set sec_mode pointed to by ptr to require signing or encryption, no MITM protection needed.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_NO_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 1;} while(0) -/**@brief Set sec_mode pointed to by ptr to require signing or encryption with MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_WITH_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 2;} while(0) -/**@} */ - - -/**@brief GAP Security Key Length. */ -#define BLE_GAP_SEC_KEY_LEN 16 - -/**@brief GAP Passkey Length. */ -#define BLE_GAP_PASSKEY_LEN 6 - -/**@brief Maximum amount of addresses in a whitelist. */ -#define BLE_GAP_WHITELIST_ADDR_MAX_COUNT (8) - -/**@brief Maximum amount of IRKs in a whitelist. - * @note The number of IRKs is limited to 8, even if the hardware supports more. - */ -#define BLE_GAP_WHITELIST_IRK_MAX_COUNT (8) - -/**@defgroup GAP_SEC_MODES GAP Security Modes - * @{ */ -#define BLE_GAP_SEC_MODE 0x00 /**< No key (may be used to reject). */ -/**@} */ - -/**@} */ - -/**@addtogroup BLE_GAP_STRUCTURES Structures - * @{ */ - -/**@brief Bluetooth Low Energy address. */ -typedef struct -{ - uint8_t addr_type; /**< See @ref BLE_GAP_ADDR_TYPES. */ - uint8_t addr[BLE_GAP_ADDR_LEN]; /**< 48-bit address, LSB format. */ -} ble_gap_addr_t; - - -/**@brief GAP connection parameters. - * - * @note When ble_conn_params_t is received in an event, both min_conn_interval and - * max_conn_interval will be equal to the connection interval set by the central. - */ -typedef struct -{ - uint16_t min_conn_interval; /**< Minimum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t max_conn_interval; /**< Maximum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t slave_latency; /**< Slave Latency in number of connection events, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t conn_sup_timeout; /**< Connection Supervision Timeout in 10 ms units, see @ref BLE_GAP_CP_LIMITS.*/ -} ble_gap_conn_params_t; - - -/**@brief GAP link requirements. - * - * See Bluetooth Core specification, Volume 3 Part C 10.2 for details. - * - * Security Mode 0 Level 0: No access permissions at all (this level is not defined by the Bluetooth Core specification).\n - * Security Mode 1 Level 1: No security is needed (aka open link).\n - * Security Mode 1 Level 2: Encrypted link required, MITM protection not necessary.\n - * Security Mode 1 Level 3: MITM protected encrypted link required.\n - * Security Mode 2 Level 1: Signing or encryption required, MITM protection not necessary.\n - * Security Mode 2 Level 2: MITM protected signing required, unless link is MITM protected encrypted.\n - */ -typedef struct -{ - uint8_t sm : 4; /**< Security Mode (1 or 2), 0 for no permissions at all. */ - uint8_t lv : 4; /**< Level (1, 2 or 3), 0 for no permissions at all. */ - -} ble_gap_conn_sec_mode_t; - - -/**@brief GAP connection security status.*/ -typedef struct -{ - ble_gap_conn_sec_mode_t sec_mode; /**< Currently active security mode for this connection.*/ - uint8_t encr_key_size; /**< Length of currently active encryption key, 7 to 16 octets (only applicable for bonding procedures). */ -} ble_gap_conn_sec_t; - - -/**@brief Identity Resolving Key. */ -typedef struct -{ - uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Array containing IRK. */ -} ble_gap_irk_t; - - -/**@brief Whitelist structure. */ -typedef struct -{ - ble_gap_addr_t ** pp_addrs; /**< Pointer to array of device address pointers, pointing to addresses to be used in whitelist. NULL if none are given. */ - uint8_t addr_count; /**< Count of device addresses in array, up to @ref BLE_GAP_WHITELIST_ADDR_MAX_COUNT. */ - ble_gap_irk_t ** pp_irks; /**< Pointer to array of Identity Resolving Key (IRK) pointers, each pointing to an IRK in the whitelist. NULL if none are given. */ - uint8_t irk_count; /**< Count of IRKs in array, up to @ref BLE_GAP_WHITELIST_IRK_MAX_COUNT. */ -} ble_gap_whitelist_t; - - -/**@brief GAP advertising parameters.*/ -typedef struct -{ - uint8_t type; /**< See @ref BLE_GAP_ADV_TYPES. */ - ble_gap_addr_t* p_peer_addr; /**< For BLE_GAP_CONN_MODE_DIRECTED mode only, known peer address. */ - uint8_t fp; /**< Filter Policy, see @ref BLE_GAP_ADV_FILTER_POLICIES. */ - ble_gap_whitelist_t * p_whitelist; /**< Pointer to whitelist, NULL if none is given. */ - uint16_t interval; /**< Advertising interval between 0x0020 and 0x4000 in 0.625 ms units (20ms to 10.24s), see @ref BLE_GAP_ADV_INTERVALS. This parameter must be set to 0 if type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND. */ - uint16_t timeout; /**< Advertising timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. See also @ref BLE_GAP_ADV_TIMEOUT_VALUES. This parameter must be set to 0 if type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND. */ -} ble_gap_adv_params_t; - - -/**@brief GAP scanning parameters. */ -typedef struct -{ - uint8_t filter; /**< Filter based on discovery mode, see @ref BLE_GAP_DISC_MODES. */ - uint8_t active : 1; /**< If 1, perform active scanning (scan requests). */ - uint8_t selective : 1; /**< If 1, ignore unknown devices (non whitelisted). */ - uint16_t interval; /**< Scan interval between 0x0020 and 0x4000 in 0.625ms units (20ms to 10.24s). */ - uint16_t window; /**< Scan window between 0x0004 and 0x4000 in 0.625ms units (2.5ms to 10.24s). */ - uint16_t timeout; /**< Scan timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. */ -} ble_gap_scan_params_t; - - -/**@brief GAP security parameters. */ -typedef struct -{ - uint16_t timeout; /**< Timeout for SMP transactions or Security Request in seconds, see @ref sd_ble_gap_authenticate and @ref sd_ble_gap_sec_params_reply for more information. */ - uint8_t bond : 1; /**< Perform bonding. */ - uint8_t mitm : 1; /**< Man In The Middle protection required. */ - uint8_t io_caps : 3; /**< IO capabilities, see @ref BLE_GAP_IO_CAPS. */ - uint8_t oob : 1; /**< Out Of Band data available. */ - uint8_t min_key_size; /**< Minimum encryption key size in octets between 7 and 16. */ - uint8_t max_key_size; /**< Maximum encryption key size in octets between min_key_size and 16. */ -} ble_gap_sec_params_t; - - -/**@brief GAP Encryption Information. */ -typedef struct -{ - uint16_t div; /**< Encryption Diversifier. */ - uint8_t ltk[BLE_GAP_SEC_KEY_LEN]; /**< Long Term Key. */ - uint8_t auth : 1; /**< Authenticated Key. */ - uint8_t ltk_len : 7; /**< LTK length in octets. */ -} ble_gap_enc_info_t; - - -/**@brief GAP Master Identification. */ -typedef struct -{ - uint16_t ediv; /**< Encrypted Diversifier. */ - uint8_t rand[8]; /**< Random Number. */ -} ble_gap_master_id_t; - - -/**@brief GAP Identity Information. */ -typedef struct -{ - ble_gap_addr_t addr; /**< Bluetooth address to which this key applies. */ - uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Identity Resolution Key. */ -} ble_gap_id_info_t; - - -/**@brief GAP Signing Information. */ -typedef struct -{ - uint8_t csrk[BLE_GAP_SEC_KEY_LEN]; /* Connection Signature Resolving Key. */ -} ble_gap_sign_info_t; - - -/**@brief GAP Event IDs. - * Those IDs uniquely identify an event coming from the stack to the application. - */ -enum BLE_GAP_EVTS -{ - BLE_GAP_EVT_CONNECTED = BLE_GAP_EVT_BASE, /**< Connection established. */ - BLE_GAP_EVT_DISCONNECTED, /**< Disconnected from peer. */ - BLE_GAP_EVT_CONN_PARAM_UPDATE, /**< Connection Parameters updated. */ - BLE_GAP_EVT_SEC_PARAMS_REQUEST, /**< Request to provide security parameters. */ - BLE_GAP_EVT_SEC_INFO_REQUEST, /**< Request to provide security information. */ - BLE_GAP_EVT_PASSKEY_DISPLAY, /**< Request to display a passkey to the user. */ - BLE_GAP_EVT_AUTH_KEY_REQUEST, /**< Request to provide an authentication key. */ - BLE_GAP_EVT_AUTH_STATUS, /**< Authentication procedure completed with status. */ - BLE_GAP_EVT_CONN_SEC_UPDATE, /**< Connection security updated. */ - BLE_GAP_EVT_TIMEOUT, /**< Timeout expired. */ - BLE_GAP_EVT_RSSI_CHANGED, /**< Signal strength measurement report. */ -}; - - -/** - * @brief GAP Option IDs. - * IDs that uniquely identify a GAP option. - */ -enum BLE_GAP_OPTS -{ - BLE_GAP_OPT_LOCAL_CONN_LATENCY = BLE_GAP_OPT_BASE, /**< Local connection latency. */ - BLE_GAP_OPT_PASSKEY, /**< Set passkey to be used during pairing. This option can be used to make the SoftDevice use an application provided passkey instead of generating a random passkey.*/ - BLE_GAP_OPT_PRIVACY, /**< Set or get custom IRK or custom private address cycle interval. */ -}; -/**@} */ - - -/**@brief Event data for connected event. */ -typedef struct -{ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ - uint8_t irk_match :1; /**< If 1, peer device's address resolved using an IRK. */ - uint8_t irk_match_idx :7; /**< Index in IRK list where the address was matched. */ - ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ -} ble_gap_evt_connected_t; - - -/**@brief Event data for disconnected event. */ -typedef struct -{ - uint8_t reason; /**< HCI error code. */ -} ble_gap_evt_disconnected_t; - - -/**@brief Event data for connection parameter update event. */ -typedef struct -{ - ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ -} ble_gap_evt_conn_param_update_t; - - -/**@brief Event data for security parameters request event. */ -typedef struct -{ - ble_gap_sec_params_t peer_params; /**< Initiator Security Parameters. */ -} ble_gap_evt_sec_params_request_t; - - -/**@brief Event data for security info request event. */ -typedef struct -{ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ - uint16_t div; /**< Encryption diversifier for LTK lookup. */ - uint8_t enc_info : 1; /**< If 1, Encryption Information required. */ - uint8_t id_info : 1; /**< If 1, Identity Information required. */ - uint8_t sign_info : 1; /**< If 1, Signing Information required. */ -} ble_gap_evt_sec_info_request_t; - - -/**@brief Event data for passkey display event. */ -typedef struct -{ - uint8_t passkey[BLE_GAP_PASSKEY_LEN]; /**< 6-digit passkey in ASCII ('0'-'9' digits only). */ -} ble_gap_evt_passkey_display_t; - - -/**@brief Event data for authentication key request event. */ -typedef struct -{ - uint8_t key_type; /**< See @ref BLE_GAP_AUTH_KEY_TYPES. */ -} ble_gap_evt_auth_key_request_t; - - -/**@brief Security levels supported. - * @note See Bluetooth Specification Version 4.1 Volume 3, Part C, Chapter 10. -*/ -typedef struct -{ - uint8_t lv1 : 1; /**< If 1: Level 1 is supported. */ - uint8_t lv2 : 1; /**< If 1: Level 2 is supported. */ - uint8_t lv3 : 1; /**< If 1: Level 3 is supported. */ -} ble_gap_sec_levels_t; - - -/**@brief Keys that have been exchanged. */ -typedef struct -{ - uint8_t ltk : 1; /**< Long Term Key. */ - uint8_t ediv_rand : 1; /**< Encrypted Diversifier and Random value. */ - uint8_t irk : 1; /**< Identity Resolving Key. */ - uint8_t address : 1; /**< Public or static random address. */ - uint8_t csrk : 1; /**< Connection Signature Resolving Key. */ -} ble_gap_sec_keys_t; - - -/**@brief Event data for authentication status event. */ -typedef struct -{ - uint8_t auth_status; /**< Authentication status, see @ref BLE_GAP_SEC_STATUS. */ - uint8_t error_src; /**< On error, source that caused the failure, see @ref BLE_GAP_SEC_STATUS_SOURCES. */ - ble_gap_sec_levels_t sm1_levels; /**< Levels supported in Security Mode 1. */ - ble_gap_sec_levels_t sm2_levels; /**< Levels supported in Security Mode 2. */ - ble_gap_sec_keys_t periph_kex; /**< Bitmap stating which keys were exchanged (distributed) by the peripheral. */ - ble_gap_sec_keys_t central_kex; /**< Bitmap stating which keys were exchanged (distributed) by the central. */ - struct periph_keys_t - { - ble_gap_enc_info_t enc_info; /**< Peripheral's Encryption information. */ - } periph_keys; /**< Actual keys distributed from the Peripheral to the Central. */ - struct central_keys_t - { - ble_gap_irk_t irk; /**< Central's IRK. */ - ble_gap_addr_t id_info; /**< Central's Identity Info. */ - } central_keys; /**< Actual keys distributed from the Central to the Peripheral. */ -} ble_gap_evt_auth_status_t; - - -/**@brief Event data for connection security update event. */ -typedef struct -{ - ble_gap_conn_sec_t conn_sec; /**< Connection security level. */ -} ble_gap_evt_conn_sec_update_t; - - -/**@brief Event data for timeout event. */ -typedef struct -{ - uint8_t src; /**< Source of timeout event, see @ref BLE_GAP_TIMEOUT_SOURCES. */ -} ble_gap_evt_timeout_t; - - -/**@brief Event data for advertisement report event. */ -typedef struct -{ - int8_t rssi; /**< Received Signal Strength Indication in dBm. */ -} ble_gap_evt_rssi_changed_t; - - -/**@brief GAP event callback event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occured. */ - union /**< union alternative identified by evt_id in enclosing struct. */ - { - ble_gap_evt_connected_t connected; /**< Connected Event Parameters. */ - ble_gap_evt_disconnected_t disconnected; /**< Disconnected Event Parameters. */ - ble_gap_evt_conn_param_update_t conn_param_update; /**< Connection Parameter Update Parameters. */ - ble_gap_evt_sec_params_request_t sec_params_request; /**< Security Parameters Request Event Parameters. */ - ble_gap_evt_sec_info_request_t sec_info_request; /**< Security Information Request Event Parameters. */ - ble_gap_evt_passkey_display_t passkey_display; /**< Passkey Display Event Parameters. */ - ble_gap_evt_auth_key_request_t auth_key_request; /**< Authentication Key Request Event Parameters. */ - ble_gap_evt_auth_status_t auth_status; /**< Authentication Status Event Parameters. */ - ble_gap_evt_conn_sec_update_t conn_sec_update; /**< Connection Security Update Event Parameters. */ - ble_gap_evt_timeout_t timeout; /**< Timeout Event Parameters. */ - ble_gap_evt_rssi_changed_t rssi_changed; /**< RSSI Event parameters. */ - } params; - -} ble_gap_evt_t; - - -/**@brief Local connection latency option. - * - * Local connection latency is a feature which enables the slave to improve - * current consumption by ignoring the slave latency set by the peer. The - * local connection latency can only be set to a multiple of the slave latency, - * and cannot be longer than half of the supervision timeout. - * - * Used with @ref sd_ble_opt_set to set the local connection latency. The - * @ref sd_ble_opt_get is not supported for this option, but the actual - * local connection latency (unless set to NULL) is set as a return parameter - * when setting the option. - * - * @note The latency set will be truncated down to the closest slave latency event - * multiple, or the nearest multiple before half of the supervision timeout. - * - * @note The local connection latency is default off, and needs to be set for new - * connections and whenever the connection is updated. - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. - */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle */ - uint16_t requested_latency; /**< Requested local connection latency. */ - uint16_t * p_actual_latency; /**< Pointer to storage for the actual local connection latency (can be set to NULL to skip return value). */ -} ble_gap_opt_local_conn_latency_t; - - -/**@brief Passkey Option. - * - * Structure containing the passkey to be used during pairing. This can be used with @ref - * sd_ble_opt_set to make the SoftDevice use a pre-programmed passkey for authentication - * instead of generating a random one. - * - * @note @ref sd_ble_opt_get is not supported for this option. - * - */ -typedef struct -{ - uint8_t * p_passkey; /**< Pointer to 6-digit ASCII string (digit 0..9 only, no NULL termination) passkey to be used during pairing. If this is NULL, the SoftDevice will generate a random passkey if required.*/ -} ble_gap_opt_passkey_t; - - -/**@brief Custom Privacy Options. - * - * @note The specified address cycle interval is used when the address cycle mode is - * @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO. If 0 is given, the address will not be refreshed at any - * interval, and not at start of advertising. A new address can be generated manually by calling - * @ref sd_ble_gap_address_set with the same type again. The default interval is - * @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S. - * - * @note If cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO, the address will immediately be - * refreshed when this option is set. - */ -typedef struct -{ - ble_gap_irk_t * p_irk; /**< When input: Pointer to custom IRK, or NULL to use/reset to the device's default IRK. When output: Pointer to where the current IRK is to be stored, or NULL to not read out the IRK. */ - uint16_t interval_s; /**< When input: Custom private address cycle interval in seconds. When output: The current private address cycle interval. */ -} ble_gap_opt_privacy_t; - - -/**@brief Option structure for GAP options. */ -typedef union -{ - ble_gap_opt_local_conn_latency_t local_conn_latency; /**< Local connection latency. */ - ble_gap_opt_passkey_t passkey; /**< Passkey to be used for pairing.*/ - ble_gap_opt_privacy_t privacy; /**< Custom privacy options. */ -} ble_gap_opt_t; -/**@} */ - - -/**@addtogroup BLE_GAP_FUNCTIONS Functions - * @{ */ - -/**@brief Set local Bluetooth address. - * - * If the address cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO, the address type is required to - * be @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE or - * @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE. The given address is ignored and the - * SoftDevice will generate a new private address automatically every time advertising is - * (re)started, and every @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S seconds. If this API - * call is used again with the same parameters while advertising, the SoftDevice will immediately - * generate a new private address to replace the current address. - * - * If the application wishes to use a @ref BLE_GAP_ADDR_TYPE_PUBLIC or - * @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC address, the cycle mode must be - * @ref BLE_GAP_ADDR_CYCLE_MODE_NONE. - * - * If this API function is called while advertising, the softdevice will immediately update the - * advertising address without the need to stop advertising in the following cases: - * - If the previously set address is of type @ref BLE_GAP_ADDR_TYPE_PUBLIC and the new address - * is also of type @ref BLE_GAP_ADDR_TYPE_PUBLIC - * - If the previously set address is not @ref BLE_GAP_ADDR_TYPE_PUBLIC and the new address is - * also not @ref BLE_GAP_ADDR_TYPE_PUBLIC. - * - * If the address is changed from a @ref BLE_GAP_ADDR_TYPE_PUBLIC address to another type or from - * another type to a @ref BLE_GAP_ADDR_TYPE_PUBLIC address, the change will take effect the next - * time advertising is started. - * - * @note If the address cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_NONE and the application is - * using privacy, the application must take care to generate and set new private addresses - * periodically to comply with the Privacy specification in Bluetooth Core Spec. - * - * @param[in] addr_cycle_mode Address cycle mode, see @ref BLE_GAP_ADDR_CYCLE_MODES. - * @param[in] p_addr Pointer to address structure. - * - * @return @ref NRF_SUCCESS Address successfully set. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameters. - * @return @ref BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address. - * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. - */ -SVCALL(SD_BLE_GAP_ADDRESS_SET, uint32_t, sd_ble_gap_address_set(uint8_t addr_cycle_mode, ble_gap_addr_t const * const p_addr)); - - -/**@brief Get local Bluetooth address. - * - * @param[out] p_addr Pointer to address structure. - * - * @return @ref NRF_SUCCESS Address successfully retrieved. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GAP_ADDRESS_GET, uint32_t, sd_ble_gap_address_get(ble_gap_addr_t * const p_addr)); - - -/**@brief Set, clear or update advertisement and scan response data. - * - * @note The format of the advertisement data will be checked by this call to ensure interoperability. - * Limitations imposed by this API call to the data provided include having a flags data type in the scan response data and - * duplicating the local name in the advertisement data and scan response data. - * - * @note: To clear the advertisement data and set it to a 0-length packet, simply provide a valid pointer (p_data/p_sr_data) with its corresponding - * length (dlen/srdlen) set to 0. - * - * @note: The call will fail if p_data and p_sr_data are both NULL since this would have no effect. - * - * @param[in] p_data Raw data to be placed in advertisement packet. If NULL, no changes are made to the current advertisement packet data. - * @param[in] dlen Data length for p_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_data is NULL, can be 0 if p_data is not NULL. - * @param[in] p_sr_data Raw data to be placed in scan response packet. If NULL, no changes are made to the current scan response packet data. - * @param[in] srdlen Data length for p_sr_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_sr_data is NULL, can be 0 if p_data is not NULL. - * - * @return @ref NRF_SUCCESS Advertisement data successfully updated or cleared. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_FLAGS Invalid combination of advertising flags supplied. - * @return @ref NRF_ERROR_INVALID_DATA Invalid data type(s) supplied, check the advertising data format specification. - * @return @ref NRF_ERROR_INVALID_LENGTH Invalid data length(s) supplied. - * @return @ref BLE_ERROR_GAP_UUID_LIST_MISMATCH Invalid UUID list supplied. - * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. - */ -SVCALL(SD_BLE_GAP_ADV_DATA_SET, uint32_t, sd_ble_gap_adv_data_set(uint8_t const * const p_data, uint8_t dlen, uint8_t const * const p_sr_data, uint8_t srdlen)); - - -/**@brief Start advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). - * - * @param[in] p_adv_params Pointer to advertising parameters structure. - * - * @return @ref NRF_SUCCESS The BLE stack has started advertising. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check the accepted ranges and limits. - * @return @ref BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Bluetooth address supplied. - * @return @ref BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST Discoverable mode and whitelist incompatible. - */ -SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start(ble_gap_adv_params_t const * const p_adv_params)); - - -/**@brief Stop advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). - * - * @return @ref NRF_SUCCESS The BLE stack has stopped advertising. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation (most probably not in advertising state). - */ -SVCALL(SD_BLE_GAP_ADV_STOP, uint32_t, sd_ble_gap_adv_stop(void)); - - -/**@brief Update connection parameters. - * - * @details In the central role this will initiate a Link Layer connection parameter update procedure, - * otherwise in the peripheral role, this will send the corresponding L2CAP request and wait for - * the central to perform the procedure. In both cases, and regardless of success or failure, the application - * will be informed of the result with a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE event. - * - * @note If both a connection supervision timeout and a maximum connection interval are specified, then the following constraint - * applies: (conn_sup_timeout * 8) >= (max_conn_interval * (slave_latency + 1)) - * - * @param[in] conn_handle Connection handle. - * @param[in] p_conn_params Pointer to desired connection parameters. If NULL is provided on a peripheral role, - * the parameters in the PPCP characteristic of the GAP service will be used instead. - * - * @return @ref NRF_SUCCESS The Connection Update procedure has been started successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. - * @return @ref NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, process pending events and retry. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GAP_CONN_PARAM_UPDATE, uint32_t, sd_ble_gap_conn_param_update(uint16_t conn_handle, ble_gap_conn_params_t const * const p_conn_params)); - - -/**@brief Disconnect (GAP Link Termination). - * - * @details This call initiates the disconnection procedure, and its completion will be communicated to the application - * with a BLE_GAP_EVT_DISCONNECTED event. - * - * @param[in] conn_handle Connection handle. - * @param[in] hci_status_code HCI status code, see @ref BLE_HCI_STATUS_CODES (accepted values are BTLE_REMOTE_USER_TERMINATED_CONNECTION and BTLE_CONN_INTERVAL_UNACCEPTABLE). - * - * @return @ref NRF_SUCCESS The disconnection procedure has been started successfully. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation (disconnection is already in progress or not connected at all). - */ -SVCALL(SD_BLE_GAP_DISCONNECT, uint32_t, sd_ble_gap_disconnect(uint16_t conn_handle, uint8_t hci_status_code)); - - -/**@brief Set the radio's transmit power. - * - * @param[in] tx_power Radio transmit power in dBm (accepted values are -40, -30, -20, -16, -12, -8, -4, 0, and 4 dBm). - * - * @note -40 dBm will not actually give -40 dBm, but will instead be remapped to -30 dBm. - * - * @return @ref NRF_SUCCESS Successfully changed the transmit power. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. - */ -SVCALL(SD_BLE_GAP_TX_POWER_SET, uint32_t, sd_ble_gap_tx_power_set(int8_t tx_power)); - - -/**@brief Set GAP Appearance value. - * - * @param[in] appearance Appearance (16-bit), see @ref BLE_APPEARANCES. - * - * @return @ref NRF_SUCCESS Appearance value set successfully. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - */ -SVCALL(SD_BLE_GAP_APPEARANCE_SET, uint32_t, sd_ble_gap_appearance_set(uint16_t appearance)); - - -/**@brief Get GAP Appearance value. - * - * @param[out] p_appearance Appearance (16-bit), see @ref BLE_APPEARANCES. - * - * @return @ref NRF_SUCCESS Appearance value retrieved successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GAP_APPEARANCE_GET, uint32_t, sd_ble_gap_appearance_get(uint16_t * const p_appearance)); - - -/**@brief Set GAP Peripheral Preferred Connection Parameters. - * - * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure with the desired parameters. - * - * @return @ref NRF_SUCCESS Peripheral Preferred Connection Parameters set successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - */ -SVCALL(SD_BLE_GAP_PPCP_SET, uint32_t, sd_ble_gap_ppcp_set(ble_gap_conn_params_t const * const p_conn_params)); - - -/**@brief Get GAP Peripheral Preferred Connection Parameters. - * - * @param[out] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the parameters will be stored. - * - * @return @ref NRF_SUCCESS Peripheral Preferred Connection Parameters retrieved successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GAP_PPCP_GET, uint32_t, sd_ble_gap_ppcp_get(ble_gap_conn_params_t * const p_conn_params)); - - -/**@brief Set GAP device name. - * - * @param[in] p_write_perm Write permissions for the Device Name characteristic see @ref ble_gap_conn_sec_mode_t. - * @param[in] p_dev_name Pointer to a UTF-8 encoded, <b>non NULL-terminated</b> string. - * @param[in] len Length of the UTF-8, <b>non NULL-terminated</b> string pointed to by p_dev_name in octets (must be smaller or equal than @ref BLE_GAP_DEVNAME_MAX_LEN). - * - * @return @ref NRF_SUCCESS GAP device name and permissions set successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - */ -SVCALL(SD_BLE_GAP_DEVICE_NAME_SET, uint32_t, sd_ble_gap_device_name_set(ble_gap_conn_sec_mode_t const * const p_write_perm, uint8_t const * const p_dev_name, uint16_t len)); - - -/**@brief Get GAP device name. - * - * @param[in] p_dev_name Pointer to an empty buffer where the UTF-8 <b>non NULL-terminated</b> string will be placed. Set to NULL to obtain the complete device name length. - * @param[in,out] p_len Length of the buffer pointed by p_dev_name, complete device name length on output. - * - * @note If the device name is longer than the size of the supplied buffer, - * p_len will return the complete device name length, - * and not the number of bytes actually returned in p_dev_name. - * The application may use this information to allocate a suitable buffer size. - * - * @return @ref NRF_SUCCESS GAP device name retrieved successfully. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - */ -SVCALL(SD_BLE_GAP_DEVICE_NAME_GET, uint32_t, sd_ble_gap_device_name_get(uint8_t * const p_dev_name, uint16_t * const p_len)); - - -/**@brief Initiate GAP Authentication procedure. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_sec_params Pointer to the @ref ble_gap_sec_params_t structure with the security parameters to be used during the pairing procedure. - * - * @details In the central role, this function will send an SMP Pairing Request, otherwise in the peripheral role, an SMP Security Request will be sent. - * In the peripheral role, only the timeout, bond and mitm fields of @ref ble_gap_sec_params_t are used. - * - * @note The GAP Authentication procedure may be triggered by the central without calling this function when accessing a secure service. - * @note Calling this function may result in the following events depending on the outcome and parameters: @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, - * @ref BLE_GAP_EVT_SEC_INFO_REQUEST, @ref BLE_GAP_EVT_AUTH_KEY_REQUEST, @ref BLE_GAP_EVT_AUTH_STATUS. - * @note The timeout parameter in @ref ble_gap_sec_params_t is interpreted here as the Security Request timeout - * - * - * @return @ref NRF_SUCCESS Successfully initiated authentication procedure. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_AUTHENTICATE, uint32_t, sd_ble_gap_authenticate(uint16_t conn_handle, ble_gap_sec_params_t const * const p_sec_params)); - - -/**@brief Reply with GAP security parameters. - * - * @param[in] conn_handle Connection handle. - * @param[in] sec_status Security status, see @ref BLE_GAP_SEC_STATUS. - * @param[in] p_sec_params Pointer to a @ref ble_gap_sec_params_t security parameters structure. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, calling it at other times will result in an NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * @note The timeout parameter in @ref ble_gap_sec_params_t is interpreted here as the SMP procedure timeout, and must be 30 seconds. The function will fail - * if the application supplies a different value. - * - * @return @ref NRF_SUCCESS Successfully accepted security parameter from the application. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_SEC_PARAMS_REPLY, uint32_t, sd_ble_gap_sec_params_reply(uint16_t conn_handle, uint8_t sec_status, ble_gap_sec_params_t const * const p_sec_params)); - - -/**@brief Reply with an authentication key. - * - * @param[in] conn_handle Connection handle. - * @param[in] key_type See @ref BLE_GAP_AUTH_KEY_TYPES. - * @param[in] key If key type is BLE_GAP_AUTH_KEY_TYPE_NONE, then NULL. - * If key type is BLE_GAP_AUTH_KEY_TYPE_PASSKEY, then a 6-byte ASCII string (digit 0..9 only, no NULL termination). - * If key type is BLE_GAP_AUTH_KEY_TYPE_OOB, then a 16-byte OOB key value in Little Endian format. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_AUTH_KEY_REQUEST, calling it at other times will result in an NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * - * @return @ref NRF_SUCCESS Authentication key successfully set. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_AUTH_KEY_REPLY, uint32_t, sd_ble_gap_auth_key_reply(uint16_t conn_handle, uint8_t key_type, uint8_t const * const key)); - - -/**@brief Reply with GAP security information. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. May be NULL to signal none is available. - * @param[in] p_sign_info Pointer to a @ref ble_gap_sign_info_t signing information structure. May be NULL to signal none is available. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_INFO_REQUEST, calling it at other times will result in NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * @note Data signing is not implemented yet. p_sign_info must therefore be NULL. - * - * @return @ref NRF_SUCCESS Successfully accepted security information. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry. - */ -SVCALL(SD_BLE_GAP_SEC_INFO_REPLY, uint32_t, sd_ble_gap_sec_info_reply(uint16_t conn_handle, ble_gap_enc_info_t const * const p_enc_info, ble_gap_sign_info_t const * const p_sign_info)); - - -/**@brief Get the current connection security. - * - * @param[in] conn_handle Connection handle. - * @param[out] p_conn_sec Pointer to a @ref ble_gap_conn_sec_t structure to be filled in. - * - * @return @ref NRF_SUCCESS Current connection security successfully retrieved. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_CONN_SEC_GET, uint32_t, sd_ble_gap_conn_sec_get(uint16_t conn_handle, ble_gap_conn_sec_t * const p_conn_sec)); - - -/**@brief Start reporting the received signal strength to the application. - * - * A new event is reported whenever the RSSI value changes, until @ref sd_ble_gap_rssi_stop is called. - * - * @param[in] conn_handle Connection handle. - * - * @return @ref NRF_SUCCESS Successfully activated RSSI reporting. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_RSSI_START, uint32_t, sd_ble_gap_rssi_start(uint16_t conn_handle)); - - -/**@brief Stop reporting the received singnal strength. - * - * An RSSI change detected before the call but not yet received by the application - * may be reported after @ref sd_ble_gap_rssi_stop has been called. - * - * @param[in] conn_handle Connection handle. - * - * @return @ref NRF_SUCCESS Successfully deactivated RSSI reporting. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_RSSI_STOP, uint32_t, sd_ble_gap_rssi_stop(uint16_t conn_handle)); -/**@} */ - -#endif // BLE_GAP_H__ - -/** - @} -*/
--- a/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gatt.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,171 +0,0 @@ -/* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - /** - @addtogroup BLE_GATT Generic Attribute Profile (GATT) Common - @{ - @brief Common definitions and prototypes for the GATT interfaces. - */ - -#ifndef BLE_GATT_H__ -#define BLE_GATT_H__ - -#include "ble_types.h" -#include "ble_ranges.h" - - -/** @addtogroup BLE_GATT_DEFINES Defines - * @{ */ - -/** @brief Default MTU size. */ -#define GATT_MTU_SIZE_DEFAULT 23 - -/** @brief Only the default MTU size of 23 is currently supported. */ -#define GATT_RX_MTU 23 - - -/**@brief Invalid Attribute Handle. */ -#define BLE_GATT_HANDLE_INVALID 0x0000 - -/** @defgroup BLE_GATT_TIMEOUT_SOURCES GATT Timeout sources - * @{ */ -#define BLE_GATT_TIMEOUT_SRC_PROTOCOL 0x00 /**< ATT Protocol timeout. */ -/** @} */ - -/** @defgroup BLE_GATT_WRITE_OPS GATT Write operations - * @{ */ -#define BLE_GATT_OP_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATT_OP_WRITE_REQ 0x01 /**< Write Request. */ -#define BLE_GATT_OP_WRITE_CMD 0x02 /**< Write Command. */ -#define BLE_GATT_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ -#define BLE_GATT_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ -#define BLE_GATT_OP_EXEC_WRITE_REQ 0x05 /**< Execute Write Request. */ -/** @} */ - -/** @defgroup BLE_GATT_EXEC_WRITE_FLAGS GATT Execute Write flags - * @{ */ -#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_CANCEL 0x00 -#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE 0x01 -/** @} */ - -/** @defgroup BLE_GATT_HVX_TYPES GATT Handle Value operations - * @{ */ -#define BLE_GATT_HVX_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATT_HVX_NOTIFICATION 0x01 /**< Handle Value Notification. */ -#define BLE_GATT_HVX_INDICATION 0x02 /**< Handle Value Indication. */ -/** @} */ - -/** @defgroup BLE_GATT_STATUS_CODES GATT Status Codes - * @{ */ -#define BLE_GATT_STATUS_SUCCESS 0x0000 /**< Success. */ -#define BLE_GATT_STATUS_UNKNOWN 0x0001 /**< Unknown or not applicable status. */ -#define BLE_GATT_STATUS_ATTERR_INVALID 0x0100 /**< ATT Error: Invalid Error Code. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_HANDLE 0x0101 /**< ATT Error: Invalid Attribute Handle. */ -#define BLE_GATT_STATUS_ATTERR_READ_NOT_PERMITTED 0x0102 /**< ATT Error: Read not permitted. */ -#define BLE_GATT_STATUS_ATTERR_WRITE_NOT_PERMITTED 0x0103 /**< ATT Error: Write not permitted. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_PDU 0x0104 /**< ATT Error: Used in ATT as Invalid PDU. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHENTICATION 0x0105 /**< ATT Error: Authenticated link required. */ -#define BLE_GATT_STATUS_ATTERR_REQUEST_NOT_SUPPORTED 0x0106 /**< ATT Error: Used in ATT as Request Not Supported. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_OFFSET 0x0107 /**< ATT Error: Offset specified was past the end of the attribute. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHORIZATION 0x0108 /**< ATT Error: Used in ATT as Insufficient Authorisation. */ -#define BLE_GATT_STATUS_ATTERR_PREPARE_QUEUE_FULL 0x0109 /**< ATT Error: Used in ATT as Prepare Queue Full. */ -#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND 0x010A /**< ATT Error: Used in ATT as Attribute not found. */ -#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_LONG 0x010B /**< ATT Error: Attribute cannot be read or written using read/write blob requests. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_ENC_KEY_SIZE 0x010C /**< ATT Error: Encryption key size used is insufficient. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_ATT_VAL_LENGTH 0x010D /**< ATT Error: Invalid value size. */ -#define BLE_GATT_STATUS_ATTERR_UNLIKELY_ERROR 0x010E /**< ATT Error: Very unlikely error. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_ENCRYPTION 0x010F /**< ATT Error: Encrypted link required. */ -#define BLE_GATT_STATUS_ATTERR_UNSUPPORTED_GROUP_TYPE 0x0110 /**< ATT Error: Attribute type is not a supported grouping attribute. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_RESOURCES 0x0111 /**< ATT Error: Encrypted link required. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_BEGIN 0x0112 /**< ATT Error: Reserved for Future Use range #1 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_END 0x017F /**< ATT Error: Reserved for Future Use range #1 end. */ -#define BLE_GATT_STATUS_ATTERR_APP_BEGIN 0x0180 /**< ATT Error: Application range begin. */ -#define BLE_GATT_STATUS_ATTERR_APP_END 0x019F /**< ATT Error: Application range end. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_BEGIN 0x01A0 /**< ATT Error: Reserved for Future Use range #2 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_END 0x01DF /**< ATT Error: Reserved for Future Use range #2 end. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_BEGIN 0x01E0 /**< ATT Error: Reserved for Future Use range #3 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_END 0x01FC /**< ATT Error: Reserved for Future Use range #3 end. */ -#define BLE_GATT_STATUS_ATTERR_CPS_CCCD_CONFIG_ERROR 0x01FD /**< ATT Common Profile and Service Error: Client Characteristic Configuration Descriptor improperly configured. */ -#define BLE_GATT_STATUS_ATTERR_CPS_PROC_ALR_IN_PROG 0x01FE /**< ATT Common Profile and Service Error: Procedure Already in Progress. */ -#define BLE_GATT_STATUS_ATTERR_CPS_OUT_OF_RANGE 0x01FF /**< ATT Common Profile and Service Error: Out Of Range. */ -/** @} */ - - -/** @defgroup BLE_GATT_CPF_FORMATS Characteristic Presentation Formats - * @note Found at http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml - * @{ */ -#define BLE_GATT_CPF_FORMAT_RFU 0x00 /**< Reserved For Future Use. */ -#define BLE_GATT_CPF_FORMAT_BOOLEAN 0x01 /**< Boolean. */ -#define BLE_GATT_CPF_FORMAT_2BIT 0x02 /**< Unsigned 2-bit integer. */ -#define BLE_GATT_CPF_FORMAT_NIBBLE 0x03 /**< Unsigned 4-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT8 0x04 /**< Unsigned 8-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT12 0x05 /**< Unsigned 12-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT16 0x06 /**< Unsigned 16-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT24 0x07 /**< Unsigned 24-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT32 0x08 /**< Unsigned 32-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT48 0x09 /**< Unsigned 48-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT64 0x0A /**< Unsigned 64-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT128 0x0B /**< Unsigned 128-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT8 0x0C /**< Signed 2-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT12 0x0D /**< Signed 12-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT16 0x0E /**< Signed 16-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT24 0x0F /**< Signed 24-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT32 0x10 /**< Signed 32-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT48 0x11 /**< Signed 48-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT64 0x12 /**< Signed 64-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT128 0x13 /**< Signed 128-bit integer. */ -#define BLE_GATT_CPF_FORMAT_FLOAT32 0x14 /**< IEEE-754 32-bit floating point. */ -#define BLE_GATT_CPF_FORMAT_FLOAT64 0x15 /**< IEEE-754 64-bit floating point. */ -#define BLE_GATT_CPF_FORMAT_SFLOAT 0x16 /**< IEEE-11073 16-bit SFLOAT. */ -#define BLE_GATT_CPF_FORMAT_FLOAT 0x17 /**< IEEE-11073 32-bit FLOAT. */ -#define BLE_GATT_CPF_FORMAT_DUINT16 0x18 /**< IEEE-20601 format. */ -#define BLE_GATT_CPF_FORMAT_UTF8S 0x19 /**< UTF-8 string. */ -#define BLE_GATT_CPF_FORMAT_UTF16S 0x1A /**< UTF-16 string. */ -#define BLE_GATT_CPF_FORMAT_STRUCT 0x1B /**< Opaque Structure. */ -/** @} */ - -/** @defgroup BLE_GATT_CPF_NAMESPACES GATT Bluetooth Namespaces - * @{ - */ -#define BLE_GATT_CPF_NAMESPACE_BTSIG 0x01 -#define BLE_GATT_CPF_NAMESPACE_DESCRIPTION_UNKNOWN 0x0000 -/** @} */ - -/** @} */ - -/** @addtogroup BLE_GATT_STRUCTURES Structures - * @{ */ - -/**@brief GATT Characteristic Properties. */ -typedef struct -{ - /* Standard properties */ - uint8_t broadcast :1; /**< Broadcasting of value permitted. */ - uint8_t read :1; /**< Reading value permitted. */ - uint8_t write_wo_resp :1; /**< Writing value with Write Command permitted. */ - uint8_t write :1; /**< Writing value with Write Request permitted. */ - uint8_t notify :1; /**< Notications of value permitted. */ - uint8_t indicate :1; /**< Indications of value permitted. */ - uint8_t auth_signed_wr :1; /**< Writing value with Signed Write Command permitted. */ -} ble_gatt_char_props_t; - -/**@brief GATT Characteristic Extended Properties. */ -typedef struct -{ - /* Extended properties */ - uint8_t reliable_wr :1; /**< Writing value with Queued Write Request permitted. */ - uint8_t wr_aux :1; /**< Writing the Characteristic User Description permitted. */ -} ble_gatt_char_ext_props_t; - -#endif // BLE_GATT_H__ - -/** @} */ - -/** - @} - @} -*/
--- a/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gattc.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,406 +0,0 @@ -/* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_GATTC Generic Attribute Profile (GATT) Client - @{ - @brief Definitions and prototypes for the GATT Client interface. - */ - -#ifndef BLE_GATTC_H__ -#define BLE_GATTC_H__ - -#include "ble_gatt.h" -#include "ble_types.h" -#include "ble_ranges.h" -#include "nrf_svc.h" - -/** @addtogroup BLE_GATTC_ENUMERATIONS Enumerations - * @{ */ - -/**@brief GATTC API SVC numbers. */ -enum BLE_GATTC_SVCS -{ - SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER = BLE_GATTC_SVC_BASE, /**< Primary Service Discovery. */ - SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, /**< Relationship Discovery. */ - SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, /**< Characteristic Discovery. */ - SD_BLE_GATTC_DESCRIPTORS_DISCOVER, /**< Characteristic Descriptor Discovery. */ - SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, /**< Read Characteristic Value by UUID. */ - SD_BLE_GATTC_READ, /**< Generic read. */ - SD_BLE_GATTC_CHAR_VALUES_READ, /**< Read multiple Characteristic Values. */ - SD_BLE_GATTC_WRITE, /**< Generic write. */ - SD_BLE_GATTC_HV_CONFIRM /**< Handle Value Confirmation. */ -}; - -/** @} */ - -/** @addtogroup BLE_GATTC_DEFINES Defines - * @{ */ - -/** @defgroup BLE_ERRORS_GATTC SVC return values specific to GATTC - * @{ */ -#define BLE_ERROR_GATTC_PROC_NOT_PERMITTED (NRF_GATTC_ERR_BASE + 0x000) -/** @} */ - -/**@brief Last Attribute Handle. */ -#define BLE_GATTC_HANDLE_END 0xFFFF - -/** @} */ - -/** @addtogroup BLE_GATTC_STRUCTURES Structures - * @{ */ - -/**@brief Operation Handle Range. */ -typedef struct -{ - uint16_t start_handle; /**< Start Handle. */ - uint16_t end_handle; /**< End Handle. */ -} ble_gattc_handle_range_t; - - -/**@brief GATT service. */ -typedef struct -{ - ble_uuid_t uuid; /**< Service UUID. */ - ble_gattc_handle_range_t handle_range; /**< Service Handle Range. */ -} ble_gattc_service_t; - - -/**@brief GATT include. */ -typedef struct -{ - uint16_t handle; /**< Include Handle. */ - ble_gattc_service_t included_srvc; /**< Handle of the included service. */ -} ble_gattc_include_t; - - -/**@brief GATT characteristic. */ -typedef struct -{ - ble_uuid_t uuid; /**< Characteristic UUID. */ - ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ - uint8_t char_ext_props : 1; /**< Extended properties present. */ - uint16_t handle_decl; /**< Handle of the Characteristic Declaration. */ - uint16_t handle_value; /**< Handle of the Characteristic Value. */ -} ble_gattc_char_t; - - -/**@brief GATT descriptor. */ -typedef struct -{ - uint16_t handle; /**< Descriptor Handle. */ - ble_uuid_t uuid; /**< Descriptor UUID. */ -} ble_gattc_desc_t; - - -/**@brief Write Parameters. */ -typedef struct -{ - uint8_t write_op; /**< Write Operation to be performed, see @ref BLE_GATT_WRITE_OPS. */ - uint16_t handle; /**< Handle to the attribute to be written. */ - uint16_t offset; /**< Offset in bytes. @note For WRITE_CMD and WRITE_REQ, offset must be 0. */ - uint16_t len; /**< Length of data in bytes. */ - uint8_t* p_value; /**< Pointer to the value data. */ - uint8_t flags; /**< Flags, see @ref BLE_GATT_EXEC_WRITE_FLAGS. */ -} ble_gattc_write_params_t; - - -/** - * @brief GATT Client Event IDs. - */ -enum BLE_GATTC_EVTS -{ - BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP = BLE_GATTC_EVT_BASE, /**< Primary Service Discovery Response event. */ - BLE_GATTC_EVT_REL_DISC_RSP, /**< Relationship Discovery Response event. */ - BLE_GATTC_EVT_CHAR_DISC_RSP, /**< Characteristic Discovery Response event. */ - BLE_GATTC_EVT_DESC_DISC_RSP, /**< Descriptor Discovery Response event. */ - BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP, /**< Read By UUID Response event. */ - BLE_GATTC_EVT_READ_RSP, /**< Read Response event. */ - BLE_GATTC_EVT_CHAR_VALS_READ_RSP, /**< Read multiple Response event. */ - BLE_GATTC_EVT_WRITE_RSP, /**< Write Response event. */ - BLE_GATTC_EVT_HVX, /**< Handle Value Notification or Indication event. */ - BLE_GATTC_EVT_TIMEOUT /**< Timeout event. */ -}; - -/**@brief Event structure for BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Service count. */ - ble_gattc_service_t services[1]; /**< Service data, variable length. */ -} ble_gattc_evt_prim_srvc_disc_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_REL_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Include count. */ - ble_gattc_include_t includes[1]; /**< Include data, variable length. */ -} ble_gattc_evt_rel_disc_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_CHAR_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Characteristic count. */ - ble_gattc_char_t chars[1]; /**< Characteristic data, variable length. */ -} ble_gattc_evt_char_disc_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_DESC_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Descriptor count. */ - ble_gattc_desc_t descs[1]; /**< Descriptor data, variable length. */ -} ble_gattc_evt_desc_disc_rsp_t; - -/**@brief GATT read by UUID handle value pair. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint8_t *p_value; /**< Pointer to value, variable length (length available as value_len in ble_gattc_evt_read_by_uuid_rsp_t). - Please note that this pointer is absolute to the memory provided by the user when retrieving the event, - so it will effectively point to a location inside the handle_value array. */ -} ble_gattc_handle_value_t; - -/**@brief Event structure for BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP. */ -typedef struct -{ - uint16_t count; /**< Handle-Value Pair Count. */ - uint16_t value_len; /**< Length of the value in Handle-Value(s) list. */ - ble_gattc_handle_value_t handle_value[1]; /**< Handle-Value(s) list, variable length. */ -} ble_gattc_evt_char_val_by_uuid_read_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_READ_RSP. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint16_t offset; /**< Offset of the attribute data. */ - uint16_t len; /**< Attribute data length. */ - uint8_t data[1]; /**< Attribute data, variable length. */ -} ble_gattc_evt_read_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_CHAR_VALS_READ_RSP. */ -typedef struct -{ - uint16_t len; /**< Concatenated Attribute values length. */ - uint8_t values[1]; /**< Attribute values, variable length. */ -} ble_gattc_evt_char_vals_read_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_WRITE_RSP. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint8_t write_op; /**< Type of write operation, see @ref BLE_GATT_WRITE_OPS. */ - uint16_t offset; /**< Data Offset. */ - uint16_t len; /**< Data length. */ - uint8_t data[1]; /**< Data, variable length. */ -} ble_gattc_evt_write_rsp_t; - -/**@brief Event structure for BLE_GATTC_EVT_HVX. */ -typedef struct -{ - uint16_t handle; /**< Handle to which the HVx operation applies. */ - uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ - uint16_t len; /**< Attribute data length. */ - uint8_t data[1]; /**< Attribute data, variable length. */ -} ble_gattc_evt_hvx_t; - -/**@brief Event structure for BLE_GATTC_EVT_TIMEOUT. */ -typedef struct -{ - uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ -} ble_gattc_evt_timeout_t; - -/**@brief GATTC event type. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occured. */ - uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ - uint16_t error_handle; /**< In case of error: The handle causing the error. In all other cases BLE_GATT_HANDLE_INVALID. */ - union - { - ble_gattc_evt_prim_srvc_disc_rsp_t prim_srvc_disc_rsp; /**< Primary Service Discovery Response Event Parameters. */ - ble_gattc_evt_rel_disc_rsp_t rel_disc_rsp; /**< Relationship Discovery Response Event Parameters. */ - ble_gattc_evt_char_disc_rsp_t char_disc_rsp; /**< Characteristic Discovery Response Event Parameters. */ - ble_gattc_evt_desc_disc_rsp_t desc_disc_rsp; /**< Descriptor Discovery Response Event Parameters. */ - ble_gattc_evt_char_val_by_uuid_read_rsp_t char_val_by_uuid_read_rsp; /**< Characteristic Value Read by UUID Response Event Parameters. */ - ble_gattc_evt_read_rsp_t read_rsp; /**< Read Response Event Parameters. */ - ble_gattc_evt_char_vals_read_rsp_t char_vals_read_rsp; /**< Characteristic Values Read Response Event Parameters. */ - ble_gattc_evt_write_rsp_t write_rsp; /**< Write Response Event Parameters. */ - ble_gattc_evt_hvx_t hvx; /**< Handle Value Notification/Indication Event Parameters. */ - ble_gattc_evt_timeout_t timeout; /**< Timeout Event Parameters. */ - } params; /**< Event Parameters. @note Only valid if @ref gatt_status == BLE_GATT_STATUS_SUCCESS. */ -} ble_gattc_evt_t; -/** @} */ - -/** @addtogroup BLE_GATTC_FUNCTIONS Functions - * @{ */ - -/**@brief Initiate or continue a GATT Primary Service Discovery procedure. - * - * @details This function initiates a Primary Service discovery, starting from the supplied handle. - * If the last service has not been reached, this must be called again with an updated start handle value to continue the search. - * - * @note If any of the discovered services have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with - * type BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] start_handle Handle to start searching from. - * @param[in] p_srvc_uuid Pointer to the service UUID to be found. If it is NULL, all primary services will be returned. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Primary Service Discovery procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER, uint32_t, sd_ble_gattc_primary_services_discover(uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const * const p_srvc_uuid)); - - -/**@brief Initiate or continue a GATT Relationship Discovery procedure. - * - * @details This function initiates the Find Included Services sub-procedure. If the last included service has not been reached, - * this must be called again with an updated handle range to continue the search. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Relationship Discovery procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, uint32_t, sd_ble_gattc_relationships_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); - - -/**@brief Initiate or continue a GATT Characteristic Discovery procedure. - * - * @details This function initiates a Characteristic discovery procedure. If the last Characteristic has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @note If any of the discovered characteristics have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with - * type BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Characteristic Discovery procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, uint32_t, sd_ble_gattc_characteristics_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); - - -/**@brief Initiate or continue a GATT Characteristic Descriptor Discovery procedure. - * - * @details This function initiates the Characteristic Descriptor discovery procedure. If the last Descriptor has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Characteristic to perform this procedure on. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Descriptor Discovery procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_DESCRIPTORS_DISCOVER, uint32_t, sd_ble_gattc_descriptors_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * const p_handle_range)); - - -/**@brief Initiate or continue a GATT Read using Characteristic UUID procedure. - * - * @details This function initiates the Read using Characteristic UUID procedure. If the last Characteristic has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_uuid Pointer to a Characteristic value UUID to read. - * @param[in] p_handle_range A pointer to the range of handles to perform this procedure on. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Read using Characteristic UUID procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, uint32_t, sd_ble_gattc_char_value_by_uuid_read(uint16_t conn_handle, ble_uuid_t const * const p_uuid, ble_gattc_handle_range_t const * const p_handle_range)); - - -/**@brief Initiate or continue a GATT Read (Long) Characteristic or Descriptor procedure. - * - * @details This function initiates a GATT Read (Long) Characteristic or Descriptor procedure. If the Characteristic or Descriptor - * to be read is longer than GATT_MTU - 1, this function must be called multiple times with appropriate offset to read the - * complete value. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] handle The handle of the attribute to be read. - * @param[in] offset Offset into the attribute value to be read. - * - * @return @ref NRF_SUCCESS Successfully started or resumed the Read (Long) procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_READ, uint32_t, sd_ble_gattc_read(uint16_t conn_handle, uint16_t handle, uint16_t offset)); - - -/**@brief Initiate a GATT Read Multiple Characteristic Values procedure. - * - * @details This function initiates a GATT Read Multiple Characteristic Values procedure. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. - * @param[in] handle_count The number of handles in p_handles. - * - * @return @ref NRF_SUCCESS Successfully started the Read Multiple Characteristic Values procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_BUSY Client procedure already in progress. - */ -SVCALL(SD_BLE_GATTC_CHAR_VALUES_READ, uint32_t, sd_ble_gattc_char_values_read(uint16_t conn_handle, uint16_t const * const p_handles, uint16_t handle_count)); - - -/**@brief Perform a Write (Characteristic Value or Descriptor, with or without response, signed or not, long or reliable) procedure. - * - * @details This function can perform all write procedures described in GATT. - * - * @note It is important to note that a write without response will <b>consume an application buffer</b>, and will therefore - * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. A write on the other hand will use the - * standard client internal buffer and thus will only generate a @ref BLE_GATTC_EVT_WRITE_RSP event as soon as the write response - * has been received from the peer. Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_write_params A pointer to a write parameters structure. - * - * @return @ref NRF_SUCCESS Successfully started the Write procedure. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - * @return @ref NRF_ERROR_BUSY Procedure already in progress. - * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers left. - */ -SVCALL(SD_BLE_GATTC_WRITE, uint32_t, sd_ble_gattc_write(uint16_t conn_handle, ble_gattc_write_params_t const * const p_write_params)); - - -/**@brief Send a Handle Value Confirmation to the GATT Server. - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] handle The handle of the attribute in the indication. - * - * @return @ref NRF_SUCCESS Successfully queued the Handle Value Confirmation for transmission. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_STATE No Indication pending to be confirmed. - * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle. - * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers left. - */ -SVCALL(SD_BLE_GATTC_HV_CONFIRM, uint32_t, sd_ble_gattc_hv_confirm(uint16_t conn_handle, uint16_t handle)); - -/** @} */ - -#endif /* BLE_GATTC_H__ */ - -/** - @} - @} -*/
--- a/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_gatts.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,566 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_GATTS Generic Attribute Profile (GATT) Server - @{ - @brief Definitions and prototypes for the GATTS interface. - */ - -#ifndef BLE_GATTS_H__ -#define BLE_GATTS_H__ - -#include "ble_types.h" -#include "ble_ranges.h" -#include "ble_l2cap.h" -#include "ble_gap.h" -#include "ble_gatt.h" -#include "nrf_svc.h" - -/** @addtogroup BLE_GATTS_ENUMERATIONS Enumerations - * @{ */ - -/** - * @brief GATTS API SVC numbers. - */ -enum BLE_GATTS_SVCS -{ - SD_BLE_GATTS_SERVICE_ADD = BLE_GATTS_SVC_BASE, /**< Add a service. */ - SD_BLE_GATTS_INCLUDE_ADD, /**< Add an included service. */ - SD_BLE_GATTS_CHARACTERISTIC_ADD, /**< Add a characteristic. */ - SD_BLE_GATTS_DESCRIPTOR_ADD, /**< Add a generic attribute. */ - SD_BLE_GATTS_VALUE_SET, /**< Set an attribute value. */ - SD_BLE_GATTS_VALUE_GET, /**< Get an attribute value. */ - SD_BLE_GATTS_HVX, /**< Handle Value Notification or Indication. */ - SD_BLE_GATTS_SERVICE_CHANGED, /**< Perform a Service Changed Indication to one or more peers. */ - SD_BLE_GATTS_RW_AUTHORIZE_REPLY, /**< Reply to an authorization request for a read or write operation on one or more attributes. */ - SD_BLE_GATTS_SYS_ATTR_SET, /**< Set the persistent system attributes for a connection. */ - SD_BLE_GATTS_SYS_ATTR_GET, /**< Get updated persistent system attributes after terminating a connection. */ -}; - -/** @} */ - -/** @addtogroup BLE_GATTS_DEFINES Defines - * @{ */ - -/** @brief Only the default MTU size of 23 is currently supported. */ -#define GATT_RX_MTU 23 - -/** @defgroup BLE_ERRORS_GATTS SVC return values specific to GATTS - * @{ */ -#define BLE_ERROR_GATTS_INVALID_ATTR_TYPE (NRF_GATTS_ERR_BASE + 0x000) /**< Invalid attribute type. */ -#define BLE_ERROR_GATTS_SYS_ATTR_MISSING (NRF_GATTS_ERR_BASE + 0x001) /**< System Attributes missing. */ -/** @} */ - -/** @defgroup BLE_GATTS_ATTR_LENS_MAX Maximum attribute lengths - * @{ */ -#define BLE_GATTS_FIX_ATTR_LEN_MAX (510) /**< Maximum length for fixed length Attribute Values. */ -#define BLE_GATTS_VAR_ATTR_LEN_MAX (512) /**< Maximum length for variable length Attribute Values. */ -/** @} */ - -/** @defgroup BLE_GATTS_SRVC_TYPES GATT Server Service Types - * @{ */ -#define BLE_GATTS_SRVC_TYPE_INVALID 0x00 /**< Invalid Service Type. */ -#define BLE_GATTS_SRVC_TYPE_PRIMARY 0x01 /**< Primary Service. */ -#define BLE_GATTS_SRVC_TYPE_SECONDARY 0x02 /**< Secondary Type. */ -/** @} */ - - -/** @defgroup BLE_GATTS_ATTR_TYPES GATT Server Attribute Types - * @{ */ -#define BLE_GATTS_ATTR_TYPE_INVALID 0x00 /**< Invalid Attribute Type. */ -#define BLE_GATTS_ATTR_TYPE_PRIM_SRVC_DECL 0x01 /**< Primary Service Declaration. */ -#define BLE_GATTS_ATTR_TYPE_SEC_SRVC_DECL 0x02 /**< Secondary Service Declaration. */ -#define BLE_GATTS_ATTR_TYPE_INC_DECL 0x03 /**< Include Declaration. */ -#define BLE_GATTS_ATTR_TYPE_CHAR_DECL 0x04 /**< Characteristic Declaration. */ -#define BLE_GATTS_ATTR_TYPE_CHAR_VAL 0x05 /**< Characteristic Value. */ -#define BLE_GATTS_ATTR_TYPE_DESC 0x06 /**< Descriptor. */ -#define BLE_GATTS_ATTR_TYPE_OTHER 0x07 /**< Other, non-GATT specific type. */ -/** @} */ - - -/** @defgroup BLE_GATTS_OPS GATT Server Operations - * @{ */ -#define BLE_GATTS_OP_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATTS_OP_WRITE_REQ 0x01 /**< Write Request. */ -#define BLE_GATTS_OP_WRITE_CMD 0x02 /**< Write Command. */ -#define BLE_GATTS_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ -#define BLE_GATTS_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ -#define BLE_GATTS_OP_EXEC_WRITE_REQ_CANCEL 0x05 /**< Execute Write Request: Cancel all prepared writes. */ -#define BLE_GATTS_OP_EXEC_WRITE_REQ_NOW 0x06 /**< Execute Write Request: Immediately execute all prepared writes. */ -/** @} */ - -/** @defgroup BLE_GATTS_VLOCS GATT Value Locations - * @{ */ -#define BLE_GATTS_VLOC_INVALID 0x00 /**< Invalid Location. */ -#define BLE_GATTS_VLOC_STACK 0x01 /**< Attribute Value is located in stack memory, no user memory is required. */ -#define BLE_GATTS_VLOC_USER 0x02 /**< Attribute Value is located in user memory. This requires the user to maintain a valid buffer through the lifetime of the attribute, since the stack - will read and write directly to the memory using the pointer provided in the APIs. There are no alignment requirements for the buffer. */ -/** @} */ - -/** @defgroup BLE_GATTS_AUTHORIZE_TYPES GATT Server Authorization Types - * @{ */ -#define BLE_GATTS_AUTHORIZE_TYPE_INVALID 0x00 /**< Invalid Type. */ -#define BLE_GATTS_AUTHORIZE_TYPE_READ 0x01 /**< Authorize a Read Operation. */ -#define BLE_GATTS_AUTHORIZE_TYPE_WRITE 0x02 /**< Authorize a Write Request Operation. */ -/** @} */ - - -/** @} */ - -/** @addtogroup BLE_GATTS_STRUCTURES Structures - * @{ */ - -/** - * @brief BLE GATTS init options - */ -typedef struct -{ - uint8_t service_changed:1; /**< Include the Service Changed characteristic in the local attributes. */ -} ble_gatts_enable_params_t; - -/**@brief Attribute metadata. */ -typedef struct -{ - ble_gap_conn_sec_mode_t read_perm; /**< Read permissions. */ - ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ - uint8_t vlen :1; /**< Variable length attribute. */ - uint8_t vloc :2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ - uint8_t rd_auth :1; /**< Read Authorization and value will be requested from the application on every read operation. */ - uint8_t wr_auth :1; /**< Write Authorization will be requested from the application on every Write Request operation (but not Write Command). */ -} ble_gatts_attr_md_t; - - -/**@brief GATT Attribute. */ -typedef struct -{ - ble_uuid_t* p_uuid; /**< Pointer to the attribute UUID. */ - ble_gatts_attr_md_t* p_attr_md; /**< Pointer to the attribute metadata structure. */ - uint16_t init_len; /**< Initial attribute value length in bytes. */ - uint16_t init_offs; /**< Initial attribute value offset in bytes. If different from zero, the first init_offs bytes of the attribute value will be left uninitialized. */ - uint16_t max_len; /**< Maximum attribute value length in bytes, see @ref BLE_GATTS_ATTR_LENS_MAX for maximum values. */ - uint8_t* p_value; /**< Pointer to the attribute data. Please note that if the @ref BLE_GATTS_VLOC_USER value location is selected in the attribute metadata, this will have to point to a buffer - that remains valid through the lifetime of the attribute. This excludes usage of automatic variables that may go out of scope or any other temporary location. - The stack may access that memory directly without the application's knowledge. */ -} ble_gatts_attr_t; - - -/**@brief GATT Attribute Context. */ -typedef struct -{ - ble_uuid_t srvc_uuid; /**< Service UUID. */ - ble_uuid_t char_uuid; /**< Characteristic UUID if applicable (BLE_UUID_TYPE_UNKNOWN if N/A). */ - ble_uuid_t desc_uuid; /**< Descriptor UUID if applicable (BLE_UUID_TYPE_UNKNOWN if N/A). */ - uint16_t srvc_handle; /**< Service Handle. */ - uint16_t value_handle; /**< Characteristic Handle if applicable (BLE_GATT_HANDLE_INVALID if N/A). */ - uint8_t type; /**< Attribute Type, see @ref BLE_GATTS_ATTR_TYPES. */ -} ble_gatts_attr_context_t; - - -/**@brief GATT Characteristic Presentation Format. */ -typedef struct -{ - uint8_t format; /**< Format of the value, see @ref BLE_GATT_CPF_FORMATS. */ - int8_t exponent; /**< Exponent for integer data types. */ - uint16_t unit; /**< UUID from Bluetooth Assigned Numbers. */ - uint8_t name_space; /**< Namespace from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ - uint16_t desc; /**< Namespace description from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ -} ble_gatts_char_pf_t; - - -/**@brief GATT Characteristic metadata. */ -typedef struct -{ - ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ - ble_gatt_char_ext_props_t char_ext_props; /**< Characteristic Extended Properties. */ - uint8_t* p_char_user_desc; /**< Pointer to a UTF-8, NULL if the descriptor is not required. */ - uint16_t char_user_desc_max_size; /**< The maximum size in bytes of the user description descriptor. */ - uint16_t char_user_desc_size; /**< The size of the user description, must be smaller or equal to char_user_desc_max_size. */ - ble_gatts_char_pf_t* p_char_pf; /**< Pointer to a presentation format structure or NULL if the descriptor is not required. */ - ble_gatts_attr_md_t* p_user_desc_md; /**< Attribute metadata for the User Description descriptor, or NULL for default values. */ - ble_gatts_attr_md_t* p_cccd_md; /**< Attribute metadata for the Client Characteristic Configuration Descriptor, or NULL for default values. */ - ble_gatts_attr_md_t* p_sccd_md; /**< Attribute metadata for the Server Characteristic Configuration Descriptor, or NULL for default values. */ -} ble_gatts_char_md_t; - - -/**@brief GATT Characteristic Definition Handles. */ -typedef struct -{ - uint16_t value_handle; /**< Handle to the characteristic value. */ - uint16_t user_desc_handle; /**< Handle to the User Description descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ - uint16_t cccd_handle; /**< Handle to the Client Characteristic Configuration Descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ - uint16_t sccd_handle; /**< Handle to the Server Characteristic Configuration Descriptor, or BLE_GATT_HANDLE_INVALID if not present. */ -} ble_gatts_char_handles_t; - - -/**@brief GATT HVx parameters. */ -typedef struct -{ - uint16_t handle; /**< Characteristic Value Handle. */ - uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ - uint16_t offset; /**< Offset within the attribute value. */ - uint16_t* p_len; /**< Length in bytes to be written, length in bytes written after successful return. */ - uint8_t* p_data; /**< Actual data content, use NULL to use the current attribute value. */ -} ble_gatts_hvx_params_t; - -/**@brief GATT Read Authorization parameters. */ -typedef struct -{ - uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ - uint8_t update : 1; /**< If set, data supplied in p_data will be used in the ATT response. */ - uint16_t offset; /**< Offset of the attribute value being updated. */ - uint16_t len; /**< Length in bytes of the value in p_data pointer, see @ref BLE_GATTS_ATTR_LENS_MAX. */ - uint8_t* p_data; /**< Pointer to new value used to update the attribute value. */ -} ble_gatts_read_authorize_params_t; - -/**@brief GATT Write Authorisation parameters. */ -typedef struct -{ - uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ -} ble_gatts_write_authorize_params_t; - -/**@brief GATT Read or Write Authorize Reply parameters. */ -typedef struct -{ - uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ - union { - ble_gatts_read_authorize_params_t read; /**< Read authorization parameters. */ - ble_gatts_write_authorize_params_t write; /**< Write authorization parameters. */ - } params; -} ble_gatts_rw_authorize_reply_params_t; - - -/** - * @brief GATT Server Event IDs. - */ -enum BLE_GATTS_EVTS -{ - BLE_GATTS_EVT_WRITE = BLE_GATTS_EVT_BASE, /**< Write operation performed. */ - BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST, /**< Read/Write Authorization request. */ - BLE_GATTS_EVT_SYS_ATTR_MISSING, /**< A persistent system attribute access is pending, awaiting a sd_ble_gatts_sys_attr_set(). */ - BLE_GATTS_EVT_HVC, /**< Handle Value Confirmation. */ - BLE_GATTS_EVT_SC_CONFIRM, /**< Service Changed Confirmation. */ - BLE_GATTS_EVT_TIMEOUT /**< Timeout. */ -}; - - -/**@brief Event structure for BLE_GATTS_EVT_WRITE. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint8_t op; /**< Type of write operation, see @ref BLE_GATTS_OPS. */ - ble_gatts_attr_context_t context; /**< Attribute Context. */ - uint16_t offset; /**< Offset for the write operation. */ - uint16_t len; /**< Length of the incoming data. */ - uint8_t data[1]; /**< Incoming data, variable length. */ -} ble_gatts_evt_write_t; - -/**@brief Event structure for authorize read request. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - ble_gatts_attr_context_t context; /**< Attribute Context. */ - uint16_t offset; /**< Offset for the read operation. */ -} ble_gatts_evt_read_t; - -/**@brief Event structure for BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST. */ -typedef struct -{ - uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ - union { - ble_gatts_evt_read_t read; /**< Attribute Read Parameters. */ - ble_gatts_evt_write_t write; /**< Attribute Write Parameters. */ - } request; -} ble_gatts_evt_rw_authorize_request_t; - -/**@brief Event structure for BLE_GATTS_EVT_SYS_ATTR_MISSING. */ -typedef struct -{ - uint8_t hint; -} ble_gatts_evt_sys_attr_missing_t; - - -/**@brief Event structure for BLE_GATTS_EVT_HVC. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ -} ble_gatts_evt_hvc_t; - -/**@brief Event structure for BLE_GATTS_EVT_TIMEOUT. */ -typedef struct -{ - uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ -} ble_gatts_evt_timeout_t; - - -/**@brief GATT Server event callback event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occurred. */ - union - { - ble_gatts_evt_write_t write; /**< Write Event Parameters. */ - ble_gatts_evt_rw_authorize_request_t authorize_request; /**< Read or Write Authorize Request Parameters. */ - ble_gatts_evt_sys_attr_missing_t sys_attr_missing; /**< System attributes missing. */ - ble_gatts_evt_hvc_t hvc; /**< Handle Value Confirmation Event Parameters. */ - ble_gatts_evt_timeout_t timeout; /**< Timeout Event. */ - } params; -} ble_gatts_evt_t; - -/** @} */ - -/** @addtogroup BLE_GATTS_FUNCTIONS Functions - * @{ */ - -/**@brief Add a service declaration to the local server ATT table. - * - * @param[in] type Toggles between primary and secondary services, see @ref BLE_GATTS_SRVC_TYPES. - * @param[in] p_uuid Pointer to service UUID. - * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @note Secondary Services are only relevant in the context of the entity that references them, it is therefore forbidden to - * add a secondary service declaration that is not referenced by another service later in the ATT table. - * - * @return @ref NRF_SUCCESS Successfully added a service declaration. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, Vendor Specific UUIDs need to be present in the table. - * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GATTS_SERVICE_ADD, uint32_t, sd_ble_gatts_service_add(uint8_t type, ble_uuid_t const*const p_uuid, uint16_t *const p_handle)); - - -/**@brief Add an include declaration to the local server ATT table. - * - * @note It is currently only possible to add an include declaration to the last added service (i.e. only sequential addition is supported at this time). - * - * @note The included service must already be present in the ATT table prior to this call. - * - * @param[in] service_handle Handle of the service where the included service is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] inc_srvc_handle Handle of the included service. - * @param[out] p_include_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @return @ref NRF_SUCCESS Successfully added an include declaration. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, handle values need to match previously added services. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, self inclusions are not allowed. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. - */ -SVCALL(SD_BLE_GATTS_INCLUDE_ADD, uint32_t, sd_ble_gatts_include_add(uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *const p_include_handle)); - - -/**@brief Add a characteristic declaration, a characteristic value declaration and optional characteristic descriptor declarations to the local server ATT table. - * - * @note It is currently only possible to add a characteristic to the last added service (i.e. only sequential addition is supported at this time). - * - * @note Several restrictions apply to the parameters, such as matching permissions between the user description descriptor and the writeable auxiliaries bits, - * readable (no security) and writeable (selectable) CCCDs and SCCDs and valid presentation format values. - * - * @note If no metadata is provided for the optional descriptors, their permissions will be derived from the characteristic permissions. - * - * @param[in] service_handle Handle of the service where the characteristic is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] p_char_md Characteristic metadata. - * @param[in] p_attr_char_value Pointer to the attribute structure corresponding to the characteristic value. - * @param[out] p_handles Pointer to the structure where the assigned handles will be stored. - * - * @return @ref NRF_SUCCESS Successfully added a characteristic. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, service handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required. - * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - */ -SVCALL(SD_BLE_GATTS_CHARACTERISTIC_ADD, uint32_t, sd_ble_gatts_characteristic_add(uint16_t service_handle, ble_gatts_char_md_t const*const p_char_md, ble_gatts_attr_t const*const p_attr_char_value, ble_gatts_char_handles_t *const p_handles)); - - -/**@brief Add a descriptor to the local server ATT table. - * - * @note It is currently only possible to add a descriptor to the last added characteristic (i.e. only sequential addition is supported at this time). - * - * @param[in] char_handle Handle of the characteristic where the descriptor is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] p_attr Pointer to the attribute structure. - * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @return @ref NRF_SUCCESS Successfully added a descriptor. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, characteristic handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, a characteristic context is required. - * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - */ -SVCALL(SD_BLE_GATTS_DESCRIPTOR_ADD, uint32_t, sd_ble_gatts_descriptor_add(uint16_t char_handle, ble_gatts_attr_t const * const p_attr, uint16_t* const p_handle)); - -/**@brief Set the value of a given attribute. - * - * @param[in] handle Attribute handle. - * @param[in] offset Offset in bytes to write from. - * @param[in,out] p_len Length in bytes to be written, length in bytes written after successful return. - * @param[in] p_value Pointer to a buffer (at least len bytes long) containing the desired attribute value. If value is stored in user memory, only the attribute length is updated when p_value == NULL. - * - * @return @ref NRF_SUCCESS Successfully set the value of the attribute. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. - * @return @ref NRF_ERROR_FORBIDDEN Forbidden handle supplied, certain attributes are not modifiable by the application. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - */ -SVCALL(SD_BLE_GATTS_VALUE_SET, uint32_t, sd_ble_gatts_value_set(uint16_t handle, uint16_t offset, uint16_t* const p_len, uint8_t const * const p_value)); - -/**@brief Get the value of a given attribute. - * - * @param[in] handle Attribute handle. - * @param[in] offset Offset in bytes to read from. - * @param[in,out] p_len Length in bytes to be read, total length of attribute value (in bytes, starting from offset) after successful return. - * @param[in,out] p_data Pointer to a buffer (at least len bytes long) where to store the attribute value. Set to NULL to obtain the complete length of attribute value. - * - * @note If the attribute value is longer than the size of the supplied buffer, - * p_len will return the total attribute value length (excluding offset), - * and not the number of bytes actually returned in p_data. - * The application may use this information to allocate a suitable buffer size. - * - * @return @ref NRF_SUCCESS Successfully retrieved the value of the attribute. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. - */ -SVCALL(SD_BLE_GATTS_VALUE_GET, uint32_t, sd_ble_gatts_value_get(uint16_t handle, uint16_t offset, uint16_t *const p_len, uint8_t* const p_data)); - -/**@brief Notify or Indicate an attribute value. - * - * @details This function checks for the relevant Client Characteristic Configuration descriptor value to verify that the relevant operation - * (notification or indication) has been enabled by the client. It is also able to update the attribute value before issuing the PDU, so that - * the application can atomically perform a value update and a server initiated transaction with a single API call. - * If the application chooses to indicate an attribute value, a @ref BLE_GATTS_EVT_HVC will be sent up as soon as the confirmation arrives from - * the peer. - * - * @note The local attribute value may be updated even if an outgoing packet is not sent to the peer due to an error during execution. - * When receiveing the error codes @ref NRF_ERROR_INVALID_STATE, @ref NRF_ERROR_BUSY, @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING and - * @ref BLE_ERROR_NO_TX_BUFFERS the ATT table has been updated. - * The caller can check whether the value has been updated by looking at the contents of *(p_hvx_params->p_len). - * - * @note It is important to note that a notification will <b>consume an application buffer</b>, and will therefore - * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. An indication on the other hand will use the - * standard server internal buffer and thus will only generate a @ref BLE_GATTS_EVT_HVC event as soon as the confirmation - * has been received from the peer. Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_hvx_params Pointer to an HVx parameters structure. If the p_data member contains a non-NULL pointer the attribute value will be updated with - * the contents pointed by it before sending the notification or indication. - * - * @return @ref NRF_SUCCESS Successfully queued a notification or indication for transmission, and optionally updated the attribute value. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied. Only attributes added directly by the application are available to notify and indicate. - * @return @ref BLE_ERROR_GATTS_INVALID_ATTR_TYPE Invalid attribute type(s) supplied, only characteristic values may be notified and indicated. - * @return @ref NRF_ERROR_NOT_FOUND Attribute not found. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, notifications or indications must be enabled in the CCCD. - * @return @ref NRF_ERROR_BUSY Procedure already in progress. - * @return @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. - * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers to send the data, applies only to notifications. - */ -SVCALL(SD_BLE_GATTS_HVX, uint32_t, sd_ble_gatts_hvx(uint16_t conn_handle, ble_gatts_hvx_params_t const*const p_hvx_params)); - -/**@brief Indicate the Service Changed attribute value. - * - * @details This call will send a Handle Value Indication to one or more peers connected to inform them that the attribute - * table layout has changed. As soon as the peer has confirmed the indication, a @ref BLE_GATTS_EVT_SC_CONFIRM event will - * be issued. - * - * @note Some of the restrictions and limitations that apply to @ref sd_ble_gatts_hvx also apply here. - * - * @param[in] conn_handle Connection handle. - * @param[in] start_handle Start of affected attribute handle range. - * @param[in] end_handle End of affected attribute handle range. - * - * @return @ref NRF_SUCCESS Successfully queued the Service Changed indication for transmission. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied, handles must be in the range populated by the application. - * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, notifications or indications must be enabled in the CCCD. - * @return @ref NRF_ERROR_BUSY Procedure already in progress. - * @return @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. - */ -SVCALL(SD_BLE_GATTS_SERVICE_CHANGED, uint32_t, sd_ble_gatts_service_changed(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle)); - -/**@brief Respond to a Read/Write authorization request. - * - * @note This call should only be used as a response to a @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST event issued to the application. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_rw_authorize_reply_params Pointer to a structure with the attribute provided by the application. - * - * @return @ref NRF_SUCCESS Successfully queued a response to the peer, and in the case of a write operation, ATT table updated. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_STATE No authorization request pending. - * @return @ref NRF_ERROR_INVALID_PARAM Authorization op invalid, - * or for Read Authorization reply: requested handles not replied with, - * or for Write Authorization reply: handle supplied does not match requested handle. - */ -SVCALL(SD_BLE_GATTS_RW_AUTHORIZE_REPLY, uint32_t, sd_ble_gatts_rw_authorize_reply(uint16_t conn_handle, ble_gatts_rw_authorize_reply_params_t const*const p_rw_authorize_reply_params)); - - -/**@brief Update persistent system attribute information. - * - * @details Supply to the stack information about persistent system attributes. - * This call is legal in the connected state only, and is usually - * made immediately after a connection is established and the bond identified. - * usually as a response to a BLE_GATTS_EVT_SYS_ATTR_MISSING. - * - * p_sysattrs may point directly to the application's stored copy of the struct. - * If the pointer is NULL, the system attribute info is initialized, assuming that - * the application does not have any previously saved data for this bond. - * - * @note The state of persistent system attributes is reset upon connection and then remembered for its duration. - * - * @note If this call returns with an error code different from @ref NRF_SUCCESS, the storage of persistent system attributes may have been completed only partially. - * This means that the state of the attribute table is undefined, and the application should either provide a new set of attributes using this same call or - * reset the SoftDevice to return to a known state. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_sys_attr_data Pointer to a saved copy of system attributes supplied to the stack, or NULL. - * @param[in] len Size of data pointed by p_sys_attr_data, in octets. - * - * @return @ref NRF_SUCCESS Successfully set the system attribute information. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_DATA Invalid data supplied, the data should be exactly the same as retrieved with @ref sd_ble_gatts_sys_attr_get. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GATTS_SYS_ATTR_SET, uint32_t, sd_ble_gatts_sys_attr_set(uint16_t conn_handle, uint8_t const*const p_sys_attr_data, uint16_t len)); - - -/**@brief Retrieve persistent system attribute information from the stack. - * - * @details This call is used to retrieve information about values to be stored perisistently by the application - * after a connection has been terminated. When a new connection is made to the same bond, the values - * should be restored using @ref sd_ble_gatts_sys_attr_set. - * The data should be read before any new advertising is started, or any new connection established. The connection handle for - * the previous now defunct connection will remain valid until a new one is created to allow this API call to refer to it. - * - * @param[in] conn_handle Connection handle of the recently terminated connection. - * @param[in] p_sys_attr_data Pointer to a buffer where updated information about system attributes will be filled in. NULL can be provided to - * obtain the length of the data - * @param[in,out] p_len Size of application buffer if p_sys_attr_data is not NULL. Unconditially updated to actual length of system attribute data. - * - * @return @ref NRF_SUCCESS Successfully retrieved the system attribute information. - * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_DATA_SIZE The system attribute information did not fit into the provided buffer. - */ -SVCALL(SD_BLE_GATTS_SYS_ATTR_GET, uint32_t, sd_ble_gatts_sys_attr_get(uint16_t conn_handle, uint8_t * const p_sys_attr_data, uint16_t* const p_len)); - -/** @} */ - -#endif // BLE_GATTS_H__ - -/** - @} -*/
--- a/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_hci.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,96 +0,0 @@ -/* - Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - - The information contained herein is confidential property of Nordic Semiconductor. The use, - copying, transfer or disclosure of such information is prohibited except by express written - agreement with Nordic Semiconductor. - */ -/** - @addtogroup BLE_COMMON - @{ -*/ - - -#ifndef BLE_HCI_H__ -#define BLE_HCI_H__ - -/** @defgroup BLE_HCI_STATUS_CODES Bluetooth status codes - * @{ */ - -#define BLE_HCI_STATUS_CODE_SUCCESS 0x00 -#define BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND 0x01 -#define BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER 0x02 -/*0x03 Hardware Failure -0x04 Page Timeout -*/ -#define BLE_HCI_AUTHENTICATION_FAILURE 0x05 -#define BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING 0x06 -#define BLE_HCI_MEMORY_CAPACITY_EXCEEDED 0x07 -#define BLE_HCI_CONNECTION_TIMEOUT 0x08 -/*0x09 Connection Limit Exceeded -0x0A Synchronous Connection Limit To A Device Exceeded -0x0B ACL Connection Already Exists*/ -#define BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED 0x0C -/*0x0D Connection Rejected due to Limited Resources -0x0E Connection Rejected Due To Security Reasons -0x0F Connection Rejected due to Unacceptable BD_ADDR -0x10 Connection Accept Timeout Exceeded -0x11 Unsupported Feature or Parameter Value*/ -#define BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS 0x12 -#define BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION 0x13 -#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES 0x14 -#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF 0x15 -#define BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION 0x16 -/* -0x17 Repeated Attempts -0x18 Pairing Not Allowed -0x19 Unknown LMP PDU -*/ -#define BLE_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1A -/* -0x1B SCO Offset Rejected -0x1C SCO Interval Rejected -0x1D SCO Air Mode Rejected*/ -#define BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS 0x1E -#define BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR 0x1F -/*0x20 Unsupported LMP Parameter Value -0x21 Role Change Not Allowed -*/ -#define BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT 0x22 -/*0x23 LMP Error Transaction Collision*/ -#define BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED 0x24 -/*0x25 Encryption Mode Not Acceptable -0x26 Link Key Can Not be Changed -0x27 Requested QoS Not Supported -*/ -#define BLE_HCI_INSTANT_PASSED 0x28 -#define BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED 0x29 -#define BLE_HCI_DIFFERENT_TRANSACTION_COLLISION 0x2A -/* -0x2B Reserved -0x2C QoS Unacceptable Parameter -0x2D QoS Rejected -0x2E Channel Classification Not Supported -0x2F Insufficient Security -0x30 Parameter Out Of Mandatory Range -0x31 Reserved -0x32 Role Switch Pending -0x33 Reserved -0x34 Reserved Slot Violation -0x35 Role Switch Failed -0x36 Extended Inquiry Response Too Large -0x37 Secure Simple Pairing Not Supported By Host. -0x38 Host Busy - Pairing -0x39 Connection Rejected due to No Suitable Channel Found*/ -#define BLE_HCI_CONTROLLER_BUSY 0x3A -#define BLE_HCI_CONN_INTERVAL_UNACCEPTABLE 0x3B -#define BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT 0x3C -#define BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE 0x3D -#define BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED 0x3E - -/** @} */ - - -#endif // BLE_HCI_H__ - -/** @} */
--- a/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_l2cap.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,144 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_L2CAP Logical Link Control and Adaptation Protocol (L2CAP) - @{ - @brief Definitions and prototypes for the L2CAP interface. - */ - -#ifndef BLE_L2CAP_H__ -#define BLE_L2CAP_H__ - -#include "ble_types.h" -#include "ble_ranges.h" -#include "ble_err.h" -#include "nrf_svc.h" - -/**@addtogroup BLE_L2CAP_ENUMERATIONS Enumerations - * @{ */ - -/**@brief L2CAP API SVC numbers. */ -enum BLE_L2CAP_SVCS -{ - SD_BLE_L2CAP_CID_REGISTER = BLE_L2CAP_SVC_BASE, /**< Register a CID. */ - SD_BLE_L2CAP_CID_UNREGISTER, /**< Unregister a CID. */ - SD_BLE_L2CAP_TX /**< Transmit a packet. */ -}; - -/** @} */ - -/**@addtogroup BLE_L2CAP_DEFINES Defines - * @{ */ - -/**@defgroup BLE_ERRORS_L2CAP SVC return values specific to L2CAP - * @{ */ -#define BLE_ERROR_L2CAP_CID_IN_USE (NRF_L2CAP_ERR_BASE + 0x000) /**< CID already in use. */ -/** @} */ - -/**@brief Default L2CAP MTU. */ -#define BLE_L2CAP_MTU_DEF (23) - -/**@brief Invalid Channel Identifier. */ -#define BLE_L2CAP_CID_INVALID (0x0000) - -/**@brief Dynamic Channel Identifier base. */ -#define BLE_L2CAP_CID_DYN_BASE (0x0040) - -/**@brief Maximum amount of dynamic CIDs. */ -#define BLE_L2CAP_CID_DYN_MAX (8) - -/** @} */ - -/**@addtogroup BLE_L2CAP_STRUCTURES Structures - * @{ */ - -/**@brief Packet header format for L2CAP transmission. */ -typedef struct -{ - uint16_t len; /**< Length of valid info in data member. */ - uint16_t cid; /**< Channel ID on which packet is transmitted. */ -} ble_l2cap_header_t; - -/**@brief L2CAP Event IDs. */ -enum BLE_L2CAP_EVTS -{ - BLE_L2CAP_EVT_RX = BLE_L2CAP_EVT_BASE /**< L2CAP packet received. */ -}; - - -/**@brief L2CAP Received packet event report. */ -typedef struct -{ - ble_l2cap_header_t header; /** L2CAP packet header. */ - uint8_t data[1]; /**< Packet data, variable length. */ -} ble_l2cap_evt_rx_t; - - -/**@brief L2CAP event callback event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occured. */ - union - { - ble_l2cap_evt_rx_t rx; /**< RX Event parameters. */ - } params; -} ble_l2cap_evt_t; - - -/**@brief Register a CID with L2CAP. - * - * @details This registers a higher protocol layer with the L2CAP multiplexer, and is requried prior to all operations on the CID. - * - * @param[in] cid L2CAP CID. - * - * @return @ref NRF_SUCCESS Successfully registered a CID with the L2CAP layer. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, CID must be above @ref BLE_L2CAP_CID_DYN_BASE. - * @return @ref BLE_ERROR_L2CAP_CID_IN_USE L2CAP CID already in use. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_L2CAP_CID_REGISTER, uint32_t, sd_ble_l2cap_cid_register(uint16_t cid)); - -/**@brief Unregister a CID with L2CAP. - * - * @details This unregisters a previously registerd higher protocol layer with the L2CAP multiplexer. - * - * @param[in] cid L2CAP CID. - * - * @return @ref NRF_SUCCESS Successfully unregistered the CID. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @return @ref NRF_ERROR_NOT_FOUND CID not previously registered. - */ -SVCALL(SD_BLE_L2CAP_CID_UNREGISTER, uint32_t, sd_ble_l2cap_cid_unregister(uint16_t cid)); - -/**@brief Transmit an L2CAP packet. - * - * @note It is important to note that a call to this function will <b>consume an application buffer</b>, and will therefore - * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. - * Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details. - * - * @param[in] conn_handle Connection Handle. - * @param[in] p_header Pointer to a packet header containing length and CID. - * @param[in] p_data Pointer to the data to be transmitted. - * - * @return @ref NRF_SUCCESS Successfully queued an L2CAP packet for transmission. - * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, CIDs must be registered beforehand with @ref sd_ble_l2cap_cid_register. - * @return @ref NRF_ERROR_NOT_FOUND CID not found. - * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @return @ref BLE_ERROR_NO_TX_BUFFERS Not enough application buffers available. - * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, see @ref BLE_L2CAP_MTU_DEF. - */ -SVCALL(SD_BLE_L2CAP_TX, uint32_t, sd_ble_l2cap_tx(uint16_t conn_handle, ble_l2cap_header_t const * const p_header, uint8_t const * const p_data)); - -/** @} */ - -#endif // BLE_L2CAP_H__ - -/** - @} -*/
--- a/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_ranges.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,89 +0,0 @@ -/* - Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - - The information contained herein is confidential property of Nordic Semiconductor. The use, - copying, transfer or disclosure of such information is prohibited except by express written - agreement with Nordic Semiconductor. - */ -/** - @addtogroup BLE_COMMON - @{ - @defgroup ble_ranges Module specific SVC and event number subranges - @{ - - @brief Definition of SVC and event number subranges for each API module. - - @note - SVCs and event numbers are split into subranges for each API module. - Each module receives its entire allocated range of SVC calls, whether implemented or not, - but return BLE_ERROR_NOT_SUPPORTED for unimplemented or undefined calls in its range. - - Note that the symbols BLE_<module>_SVC_LAST is the end of the allocated SVC range, - rather than the last SVC function call actually defined and implemented. - - Specific SVC and event values are defined in each module's ble_<module>.h file, - which defines names of each individual SVC code based on the range start value. -*/ - -#ifndef BLE_RANGES_H__ -#define BLE_RANGES_H__ - -#define BLE_SVC_BASE 0x60 -#define BLE_SVC_LAST 0x6B /* Total: 12. */ - -#define BLE_RESERVED_SVC_BASE 0x6C -#define BLE_RESERVED_SVC_LAST 0x6F /* Total: 4. */ - -#define BLE_GAP_SVC_BASE 0x70 -#define BLE_GAP_SVC_LAST 0x8F /* Total: 32. */ - -#define BLE_GATTC_SVC_BASE 0x90 -#define BLE_GATTC_SVC_LAST 0x9F /* Total: 16. */ - -#define BLE_GATTS_SVC_BASE 0xA0 -#define BLE_GATTS_SVC_LAST 0xAF /* Total: 16. */ - -#define BLE_L2CAP_SVC_BASE 0xB0 -#define BLE_L2CAP_SVC_LAST 0xBF /* Total: 16. */ - - -#define BLE_EVT_INVALID 0x00 - -#define BLE_EVT_BASE 0x01 -#define BLE_EVT_LAST 0x0F /* Total: 15. */ - -#define BLE_GAP_EVT_BASE 0x10 -#define BLE_GAP_EVT_LAST 0x2F /* Total: 32. */ - -#define BLE_GATTC_EVT_BASE 0x30 -#define BLE_GATTC_EVT_LAST 0x4F /* Total: 32. */ - -#define BLE_GATTS_EVT_BASE 0x50 -#define BLE_GATTS_EVT_LAST 0x6F /* Total: 32. */ - -#define BLE_L2CAP_EVT_BASE 0x70 -#define BLE_L2CAP_EVT_LAST 0x8F /* Total: 32. */ - -#define BLE_OPT_INVALID 0x00 /**< Invalid BLE Option. */ - -#define BLE_OPT_BASE 0x01 /**< Common BLE Option base. */ -#define BLE_OPT_LAST 0x1F /**< Total: 31. */ - -#define BLE_GAP_OPT_BASE 0x20 /**< GAP BLE Option base. */ -#define BLE_GAP_OPT_LAST 0x3F /**< Total: 32. */ - -#define BLE_GATTC_OPT_BASE 0x40 /**< GATTC BLE Option base. */ -#define BLE_GATTC_OPT_LAST 0x5F /**< Total: 32. */ - -#define BLE_GATTS_OPT_BASE 0x60 /**< GATTS BLE Option base. */ -#define BLE_GATTS_OPT_LAST 0x7F /**< Total: 32. */ - -#define BLE_L2CAP_OPT_BASE 0x80 /**< L2CAP BLE Option base. */ -#define BLE_L2CAP_OPT_LAST 0x9F /**< Total: 32. */ - -#endif /* BLE_RANGES_H__ */ - -/** - @} - @} -*/
--- a/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/ble_types.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,169 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @addtogroup BLE_COMMON - @{ - @defgroup ble_types Common types and macro definitions - @{ - - @brief Common types and macro definitions for the S110 SoftDevice. - */ - -#ifndef BLE_TYPES_H__ -#define BLE_TYPES_H__ - -#include <stdint.h> - -/** @addtogroup BLE_COMMON_DEFINES Defines - * @{ */ - -/** @defgroup BLE_CONN_HANDLES BLE Connection Handles - * @{ */ -#define BLE_CONN_HANDLE_INVALID 0xFFFF /**< Invalid Connection Handle. */ -#define BLE_CONN_HANDLE_ALL 0xFFFE /**< Applies to all Connection Handles. */ -/** @} */ - - -/** @defgroup BLE_UUID_VALUES Assigned Values for BLE UUIDs - * @{ */ -/* Generic UUIDs, applicable to all services */ -#define BLE_UUID_UNKNOWN 0x0000 /**< Reserved UUID. */ -#define BLE_UUID_SERVICE_PRIMARY 0x2800 /**< Primary Service. */ -#define BLE_UUID_SERVICE_SECONDARY 0x2801 /**< Secondary Service. */ -#define BLE_UUID_SERVICE_INCLUDE 0x2802 /**< Include. */ -#define BLE_UUID_CHARACTERISTIC 0x2803 /**< Characteristic. */ -#define BLE_UUID_DESCRIPTOR_CHAR_EXT_PROP 0x2900 /**< Characteristic Extended Properties Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_USER_DESC 0x2901 /**< Characteristic User Description Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG 0x2902 /**< Client Characteristic Configuration Descriptor. */ -#define BLE_UUID_DESCRIPTOR_SERVER_CHAR_CONFIG 0x2903 /**< Server Characteristic Configuration Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT 0x2904 /**< Characteristic Presentation Format Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_AGGREGATE_FORMAT 0x2905 /**< Characteristic Aggregate Format Descriptor. */ -/* GATT specific UUIDs */ -#define BLE_UUID_GATT 0x1801 /**< Generic Attribute Profile. */ -#define BLE_UUID_GATT_CHARACTERISTIC_SERVICE_CHANGED 0x2A05 /**< Service Changed Characteristic. */ -/* GAP specific UUIDs */ -#define BLE_UUID_GAP 0x1800 /**< Generic Access Profile. */ -#define BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME 0x2A00 /**< Device Name Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE 0x2A01 /**< Appearance Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_PPF 0x2A02 /**< Peripheral Privacy Flag Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_RECONN_ADDR 0x2A03 /**< Reconnection Address Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_PPCP 0x2A04 /**< Peripheral Preferred Connection Parameters Characteristic. */ -/** @} */ - - -/** @defgroup BLE_UUID_TYPES Types of UUID - * @{ */ -#define BLE_UUID_TYPE_UNKNOWN 0x00 /**< Invalid UUID type. */ -#define BLE_UUID_TYPE_BLE 0x01 /**< Bluetooth SIG UUID (16-bit). */ -#define BLE_UUID_TYPE_VENDOR_BEGIN 0x02 /**< Vendor UUID types start at this index (128-bit). */ -/** @} */ - - -/** @defgroup BLE_APPEARANCES Bluetooth Appearance values - * @note Retrieved from http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml - * @{ */ -#define BLE_APPEARANCE_UNKNOWN 0 /**< Unknown. */ -#define BLE_APPEARANCE_GENERIC_PHONE 64 /**< Generic Phone. */ -#define BLE_APPEARANCE_GENERIC_COMPUTER 128 /**< Generic Computer. */ -#define BLE_APPEARANCE_GENERIC_WATCH 192 /**< Generic Watch. */ -#define BLE_APPEARANCE_WATCH_SPORTS_WATCH 193 /**< Watch: Sports Watch. */ -#define BLE_APPEARANCE_GENERIC_CLOCK 256 /**< Generic Clock. */ -#define BLE_APPEARANCE_GENERIC_DISPLAY 320 /**< Generic Display. */ -#define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL 384 /**< Generic Remote Control. */ -#define BLE_APPEARANCE_GENERIC_EYE_GLASSES 448 /**< Generic Eye-glasses. */ -#define BLE_APPEARANCE_GENERIC_TAG 512 /**< Generic Tag. */ -#define BLE_APPEARANCE_GENERIC_KEYRING 576 /**< Generic Keyring. */ -#define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 640 /**< Generic Media Player. */ -#define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 704 /**< Generic Barcode Scanner. */ -#define BLE_APPEARANCE_GENERIC_THERMOMETER 768 /**< Generic Thermometer. */ -#define BLE_APPEARANCE_THERMOMETER_EAR 769 /**< Thermometer: Ear. */ -#define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR 832 /**< Generic Heart rate Sensor. */ -#define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT 833 /**< Heart Rate Sensor: Heart Rate Belt. */ -#define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 896 /**< Generic Blood Pressure. */ -#define BLE_APPEARANCE_BLOOD_PRESSURE_ARM 897 /**< Blood Pressure: Arm. */ -#define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 898 /**< Blood Pressure: Wrist. */ -#define BLE_APPEARANCE_GENERIC_HID 960 /**< Human Interface Device (HID). */ -#define BLE_APPEARANCE_HID_KEYBOARD 961 /**< Keyboard (HID Subtype). */ -#define BLE_APPEARANCE_HID_MOUSE 962 /**< Mouse (HID Subtype). */ -#define BLE_APPEARANCE_HID_JOYSTICK 963 /**< Joystiq (HID Subtype). */ -#define BLE_APPEARANCE_HID_GAMEPAD 964 /**< Gamepad (HID Subtype). */ -#define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE 965 /**< Digitizer Tablet (HID Subtype). */ -#define BLE_APPEARANCE_HID_CARD_READER 966 /**< Card Reader (HID Subtype). */ -#define BLE_APPEARANCE_HID_DIGITAL_PEN 967 /**< Digital Pen (HID Subtype). */ -#define BLE_APPEARANCE_HID_BARCODE 968 /**< Barcode Scanner (HID Subtype). */ -#define BLE_APPEARANCE_GENERIC_GLUCOSE_METER 1024 /**< Generic Glucose Meter. */ -#define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR 1088 /**< Generic Running Walking Sensor. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE 1089 /**< Running Walking Sensor: In-Shoe. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE 1090 /**< Running Walking Sensor: On-Shoe. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP 1091 /**< Running Walking Sensor: On-Hip. */ -#define BLE_APPEARANCE_GENERIC_CYCLING 1152 /**< Generic Cycling. */ -#define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER 1153 /**< Cycling: Cycling Computer. */ -#define BLE_APPEARANCE_CYCLING_SPEED_SENSOR 1154 /**< Cycling: Speed Sensor. */ -#define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR 1155 /**< Cycling: Cadence Sensor. */ -#define BLE_APPEARANCE_CYCLING_POWER_SENSOR 1156 /**< Cycling: Power Sensor. */ -#define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR 1157 /**< Cycling: Speed and Cadence Sensor. */ -#define BLE_APPEARANCE_GENERIC_PULSE_OXIMETER 3136 /**< Generic Pulse Oximeter. */ -#define BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 3137 /**< Fingertip (Pulse Oximeter subtype). */ -#define BLE_APPEARANCE_PULSE_OXIMETER_WRIST_WORN 3138 /**< Wrist Worn(Pulse Oximeter subtype). */ -#define BLE_APPEARANCE_GENERIC_WEIGHT_SCALE 3200 /**< Generic Weight Scale. */ -#define BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS_ACT 5184 /**< Generic Outdoor Sports Activity. */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_DISP 5185 /**< Location Display Device (Outdoor Sports Activity subtype). */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_DISP 5186 /**< Location and Navigation Display Device (Outdoor Sports Activity subtype). */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_POD 5187 /**< Location Pod (Outdoor Sports Activity subtype). */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_POD 5188 /**< Location and Navigation Pod (Outdoor Sports Activity subtype). */ -/** @} */ - -/** @brief Set .type and .uuid fields of ble_uuid_struct to specified uuid value. */ -#define BLE_UUID_BLE_ASSIGN(instance, value) do {\ - instance.type = BLE_UUID_TYPE_BLE; \ - instance.uuid = value;} while(0) - -/** @brief Copy type and uuid members from src to dst ble_uuid_t pointer. Both pointers must be valid/non-null. */ -#define BLE_UUID_COPY_PTR(dst, src) do {\ - (dst)->type = (src)->type; \ - (dst)->uuid = (src)->uuid;} while(0) - -/** @brief Copy type and uuid members from src to dst ble_uuid_t struct. */ -#define BLE_UUID_COPY_INST(dst, src) do {\ - (dst).type = (src).type; \ - (dst).uuid = (src).uuid;} while(0) - -/** @brief Compare for equality both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ -#define BLE_UUID_EQ(p_uuid1, p_uuid2) \ - (((p_uuid1)->type == (p_uuid2)->type) && ((p_uuid1)->uuid == (p_uuid2)->uuid)) - -/** @brief Compare for difference both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ -#define BLE_UUID_NEQ(p_uuid1, p_uuid2) \ - (((p_uuid1)->type != (p_uuid2)->type) || ((p_uuid1)->uuid != (p_uuid2)->uuid)) - -/** @} */ - -/** @addtogroup BLE_TYPES_STRUCTURES Structures - * @{ */ - -/** @brief 128 bit UUID values. */ -typedef struct -{ - unsigned char uuid128[16]; -} ble_uuid128_t; - -/** @brief Bluetooth Low Energy UUID type, encapsulates both 16-bit and 128-bit UUIDs. */ -typedef struct -{ - uint16_t uuid; /**< 16-bit UUID value or octets 12-13 of 128-bit UUID. */ - uint8_t type; /**< UUID type, see @ref BLE_UUID_TYPES. If type is BLE_UUID_TYPE_UNKNOWN, the value of uuid is undefined. */ -} ble_uuid_t; - -/** @} */ - -#endif /* BLE_TYPES_H__ */ - -/** - @} - @} -*/
--- a/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_error.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - /** - @defgroup nrf_error SoftDevice Global Error Codes - @{ - - @brief Global Error definitions -*/ - -/* Header guard */ -#ifndef NRF_ERROR_H__ -#define NRF_ERROR_H__ - -/** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions - * @{ */ -#define NRF_ERROR_BASE_NUM (0x0) ///< Global error base -#define NRF_ERROR_SDM_BASE_NUM (0x1000) ///< SDM error base -#define NRF_ERROR_SOC_BASE_NUM (0x2000) ///< SoC error base -#define NRF_ERROR_STK_BASE_NUM (0x3000) ///< STK error base -/** @} */ - -#define NRF_SUCCESS (NRF_ERROR_BASE_NUM + 0) ///< Successful command -#define NRF_ERROR_SVC_HANDLER_MISSING (NRF_ERROR_BASE_NUM + 1) ///< SVC handler is missing -#define NRF_ERROR_SOFTDEVICE_NOT_ENABLED (NRF_ERROR_BASE_NUM + 2) ///< SoftDevice has not been enabled -#define NRF_ERROR_INTERNAL (NRF_ERROR_BASE_NUM + 3) ///< Internal Error -#define NRF_ERROR_NO_MEM (NRF_ERROR_BASE_NUM + 4) ///< No Memory for operation -#define NRF_ERROR_NOT_FOUND (NRF_ERROR_BASE_NUM + 5) ///< Not found -#define NRF_ERROR_NOT_SUPPORTED (NRF_ERROR_BASE_NUM + 6) ///< Not supported -#define NRF_ERROR_INVALID_PARAM (NRF_ERROR_BASE_NUM + 7) ///< Invalid Parameter -#define NRF_ERROR_INVALID_STATE (NRF_ERROR_BASE_NUM + 8) ///< Invalid state, operation disallowed in this state -#define NRF_ERROR_INVALID_LENGTH (NRF_ERROR_BASE_NUM + 9) ///< Invalid Length -#define NRF_ERROR_INVALID_FLAGS (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags -#define NRF_ERROR_INVALID_DATA (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data -#define NRF_ERROR_DATA_SIZE (NRF_ERROR_BASE_NUM + 12) ///< Data size exceeds limit -#define NRF_ERROR_TIMEOUT (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out -#define NRF_ERROR_NULL (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer -#define NRF_ERROR_FORBIDDEN (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation -#define NRF_ERROR_INVALID_ADDR (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address -#define NRF_ERROR_BUSY (NRF_ERROR_BASE_NUM + 17) ///< Busy - -#endif // NRF_ERROR_H__ - -/** - @} -*/
--- a/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_error_sdm.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - /** - @addtogroup nrf_sdm_api - @{ - @defgroup nrf_sdm_error SoftDevice Manager Error Codes - @{ - - @brief Error definitions for the SDM API -*/ - -/* Header guard */ -#ifndef NRF_ERROR_SDM_H__ -#define NRF_ERROR_SDM_H__ - -#include "nrf_error.h" - -#define NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN (NRF_ERROR_SDM_BASE_NUM + 0) ///< Unknown lfclk source -#define NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION (NRF_ERROR_SDM_BASE_NUM + 1) ///< Incorrect interrupt configuration (can be caused by using illegal priority levels, or having enabled SoftDevice interrupts) -#define NRF_ERROR_SDM_INCORRECT_CLENR0 (NRF_ERROR_SDM_BASE_NUM + 2) ///< Incorrect CLENR0 (can be caused by erronous SoftDevice flashing) - -#endif // NRF_ERROR_SDM_H__ - -/** - @} - @} -*/
--- a/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_error_soc.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - /** - @addtogroup nrf_soc_api - @{ - @defgroup nrf_soc_error SoC Library Error Codes - @{ - - @brief Error definitions for the SoC library - -*/ - -/* Header guard */ -#ifndef NRF_ERROR_SOC_H__ -#define NRF_ERROR_SOC_H__ - -#include "nrf_error.h" - -/* Mutex Errors */ -#define NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN (NRF_ERROR_SOC_BASE_NUM + 0) ///< Mutex already taken - -/* NVIC errors */ -#define NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE (NRF_ERROR_SOC_BASE_NUM + 1) ///< NVIC interrupt not available -#define NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED (NRF_ERROR_SOC_BASE_NUM + 2) ///< NVIC interrupt priority not allowed -#define NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 3) ///< NVIC should not return - -/* Power errors */ -#define NRF_ERROR_SOC_POWER_MODE_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 4) ///< Power mode unknown -#define NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 5) ///< Power POF threshold unknown -#define NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 6) ///< Power off should not return - -/* Rand errors */ -#define NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES (NRF_ERROR_SOC_BASE_NUM + 7) ///< RAND not enough values - -/* PPI errors */ -#define NRF_ERROR_SOC_PPI_INVALID_CHANNEL (NRF_ERROR_SOC_BASE_NUM + 8) ///< Invalid PPI Channel -#define NRF_ERROR_SOC_PPI_INVALID_GROUP (NRF_ERROR_SOC_BASE_NUM + 9) ///< Invalid PPI Group - -#endif // NRF_ERROR_SOC_H__ -/** - @} - @} -*/
--- a/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_mbr.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,155 +0,0 @@ -/* - * Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @defgroup nrf_mbr_api Master Boot Record API - @{ - - @brief APIs for updating SoftDevice and BootLoader - -*/ - -/* Header guard */ -#ifndef NRF_MBR_H__ -#define NRF_MBR_H__ - -#include "nrf_svc.h" -#include <stdint.h> - - -/** @addtogroup NRF_MBR_DEFINES Defines - * @{ */ - -/**@brief MBR SVC Base number. */ -#define MBR_SVC_BASE 0x18 -/** @} */ - -/** @addtogroup NRF_MBR_ENUMS Enumerations - * @{ */ - -/**@brief nRF Master Boot Record API SVC numbers. */ -enum NRF_MBR_SVCS -{ - SD_MBR_COMMAND = MBR_SVC_BASE, /**< ::sd_mbr_command */ -}; - -/**@brief Possible values for ::sd_mbr_command_t.command */ -enum NRF_MBR_COMMANDS -{ - SD_MBR_COMMAND_COPY_BL, /**< Copy a new a new BootLoader. @see sd_mbr_command_copy_bl_t */ - SD_MBR_COMMAND_COPY_SD, /**< Copy a new SoftDevice. @see ::sd_mbr_command_copy_sd_t*/ - SD_MBR_COMMAND_INIT_SD, /**< Init forwarding interrupts to SD, and run reset function in SD*/ - SD_MBR_COMMAND_COMPARE, /**< This command works like memcmp. @see ::sd_mbr_command_compare_t*/ - SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET, /**< Start forwarding all exception to this address @see ::sd_mbr_command_vector_table_base_set_t*/ -}; - -/** @} */ - -/** @addtogroup NRF_MBR_TYPES Types - * @{ */ - -/**@brief This command copies part of a new SoftDevice - * The destination area is erased before copying. - * If dst is in the middle of a flash page, that whole flash page will be erased. - * If (dst+len) is in the middle of a flash page, that whole flash page will be erased. - * - * The user of this function is responsible for setting the PROTENSET registers. - * - * @retval ::NRF_SUCCESS indicates that the contents of the memory blocks where copied correctly. - * @retval ::NRF_ERROR_INTERNAL indicates that the contents of the memory blocks where not verified correctly after copying. - */ -typedef struct -{ - uint32_t *src; /**< Pointer to the source of data to be copied.*/ - uint32_t *dst; /**< Pointer to the destination where the content is to be copied.*/ - uint32_t len; /**< Number of 32 bit words to copy. Must be a multiple of 256 words*/ -}sd_mbr_command_copy_sd_t; - - -/**@brief This command works like memcmp, but takes the length in words. - * - * @retval ::NRF_SUCCESS indicates that the contents of both memory blocks are equal. - * @retval ::NRF_ERROR_NULL indicates that the contents of the memory blocks are not equal. - */ -typedef struct -{ - uint32_t *ptr1; /**< Pointer to block of memory */ - uint32_t *ptr2; /**< Pointer to block of memory */ - uint32_t len; /**< Number of 32 bit words to compare*/ -}sd_mbr_command_compare_t; - - -/**@brief This command copies a new BootLoader. - * With this command, destination of BootLoader is always the address written in NRF_UICR->BOOTADDR. - * - * Destination is erased by this function. - * If (destination+bl_len) is in the middle of a flash page, that whole flash page will be erased. - * - * This function will use PROTENSET to protect the flash that is not intended to be written. - * - * On Success, this function will not return. It will start the new BootLoader from reset-vector as normal. - * - * @retval ::NRF_ERROR_INVALID_STATE indicates that something was wrong. - * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. - * @retval ::NRF_ERROR_FORBIDDEN if NRF_UICR->BOOTADDR is not set - * @retval ::NRF_ERROR_INVALID_LENGTH is invalid. - */ -typedef struct -{ - uint32_t *bl_src; /**< Pointer to the source of the Bootloader to be be copied.*/ - uint32_t bl_len; /**< Number of 32 bit words to copy for BootLoader */ -}sd_mbr_command_copy_bl_t; - -/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the MBR - * - * Once this function has been called, this address is where the MBR will start to forward interrupts to after a reset. - * - * To restore default forwarding thiss function should be called with @param address set to 0. - * The MBR will then start forwarding to interrupts to the adress in NFR_UICR->BOOTADDR or to the SoftDevice if the BOOTADDR is not set. - * - * @retval ::NRF_SUCCESS - */ -typedef struct -{ - uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ -}sd_mbr_command_vector_table_base_set_t; - -typedef struct -{ - uint32_t command; /**< type of command to be issued see @ref NRF_MBR_COMMANDS. */ - union - { - sd_mbr_command_copy_sd_t copy_sd; /**< Parameters for copy*/ - sd_mbr_command_copy_bl_t copy_bl; /**< Parameters for copy SoftDevice and BootLoader*/ - sd_mbr_command_compare_t compare; /**< Parameters for verify*/ - sd_mbr_command_vector_table_base_set_t base_set; /**< Parameters for vector table base set.*/ - } params; -}sd_mbr_command_t; - -/** @} */ - -/** @addtogroup NRF_MBR_FUNCTIONS Functions - * @{ */ - -/**@brief Issue Master Boot Record commands - * - * Commands used when updating a SoftDevice and bootloader - * - * @param[in] param Pointer to a struct describing the command - * - *@note for retvals see ::sd_mbr_command_copy_sd_t ::sd_mbr_command_copy_bl_t ::sd_mbr_command_compare_t - -*/ -SVCALL(SD_MBR_COMMAND, uint32_t, sd_mbr_command(sd_mbr_command_t* param)); - -/** @} */ -#endif // NRF_MBR_H__ - -/** - @} -*/
--- a/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_sdm.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,167 +0,0 @@ -/* - * Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ -/** - @defgroup nrf_sdm_api SoftDevice Manager API - @{ - - @brief APIs for SoftDevice management. - -*/ - -/* Header guard */ -#ifndef NRF_SDM_H__ -#define NRF_SDM_H__ - -#include "nrf_svc.h" -#include "nrf51.h" -#include "nrf_soc.h" -#include "nrf_error_sdm.h" - -/** @addtogroup NRF_SDM_DEFINES Defines - * @{ */ - -/**@brief SoftDevice Manager SVC Base number. */ -#define SDM_SVC_BASE (0x10) - -/** @} */ - -/** @addtogroup NRF_SDM_ENUMS Enumerations - * @{ */ - -/**@brief nRF SoftDevice Manager API SVC numbers. */ -enum NRF_SD_SVCS -{ - SD_SOFTDEVICE_ENABLE = SDM_SVC_BASE, /**< ::sd_softdevice_enable */ - SD_SOFTDEVICE_DISABLE, /**< ::sd_softdevice_disable */ - SD_SOFTDEVICE_IS_ENABLED, /**< ::sd_softdevice_is_enabled */ - SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, /**< ::sd_softdevice_vector_table_base_set */ - SVC_SDM_LAST /**< Placeholder for last SDM SVC */ -}; - -/**@brief Possible lfclk oscillator sources. */ -enum NRF_CLOCK_LFCLKSRCS -{ - NRF_CLOCK_LFCLKSRC_SYNTH_250_PPM, /**< LFCLK Synthesized from HFCLK. */ - NRF_CLOCK_LFCLKSRC_XTAL_500_PPM, /**< LFCLK crystal oscillator 500 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_250_PPM, /**< LFCLK crystal oscillator 250 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_150_PPM, /**< LFCLK crystal oscillator 150 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_100_PPM, /**< LFCLK crystal oscillator 100 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_75_PPM, /**< LFCLK crystal oscillator 75 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_50_PPM, /**< LFCLK crystal oscillator 50 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_30_PPM, /**< LFCLK crystal oscillator 30 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_XTAL_20_PPM, /**< LFCLK crystal oscillator 20 PPM accuracy. */ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_250MS_CALIBRATION, /**< LFCLK RC oscillator, 250ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_500MS_CALIBRATION, /**< LFCLK RC oscillator, 500ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_1000MS_CALIBRATION, /**< LFCLK RC oscillator, 1000ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_2000MS_CALIBRATION, /**< LFCLK RC oscillator, 2000ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_4000MS_CALIBRATION, /**< LFCLK RC oscillator, 4000ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_8000MS_CALIBRATION, /**< LFCLK RC oscillator, 8000ms calibration interval.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_1000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 1000ms, if changed above a threshold, a calibration is done.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_2000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 2000ms, if changed above a threshold, a calibration is done.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_4000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 4000ms, if changed above a threshold, a calibration is done.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_8000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 8000ms, if changed above a threshold, a calibration is done.*/ - NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_16000MS_CALIBRATION, /**< LFCLK RC oscillator. Temperature checked every 16000ms, if changed above a threshold, a calibration is done.*/ -}; - -/** @} */ - -/** @addtogroup NRF_SDM_TYPES Types - * @{ */ - -/**@brief Type representing lfclk oscillator source. */ -typedef uint32_t nrf_clock_lfclksrc_t; - - -/**@brief SoftDevice Assertion Handler type. - * - * When an unexpected error occurs within the SoftDevice it will call the SoftDevice assertion handler callback. - * The protocol stack will be in an undefined state when this happens and the only way to recover will be to - * perform a reset, using e.g. CMSIS NVIC_SystemReset(). - * - * @note This callback is executed in HardFault context, thus SVC functions cannot be called from the SoftDevice assert callback. - * - * @param[in] pc The program counter of the failed assert. - * @param[in] line_number Line number where the assert failed. - * @param[in] file_name File name where the assert failed. - */ -typedef void (*softdevice_assertion_handler_t)(uint32_t pc, uint16_t line_number, const uint8_t * p_file_name); - -/** @} */ - -/** @addtogroup NRF_SDM_FUNCTIONS Functions - * @{ */ - -/**@brief Enables the SoftDevice and by extension the protocol stack. - * - * Idempotent function to enable the SoftDevice. - * - * @note Some care must be taken if a low frequency clock source is already running when calling this function: - * If the LF clock has a different source then the one currently running, it will be stopped. Then, the new - * clock source will be started. - * - * @note This function has no effect when returning with an error. - * - * @post If return code is ::NRF_SUCCESS - * - SoC library and protocol stack APIs are made available - * - A portion of RAM will be unavailable (see relevant SDS documentation) - * - Some peripherals will be unavailable or available only through the SoC API (see relevant SDS documentation) - * - Interrupts will not arrive from protected peripherals or interrupts - * - nrf_nvic_ functions must be used instead of CMSIS NVIC_ functions for reliable usage of the softdevice. - * - Interrupt latency may be affected by the SoftDevice (see relevant SDS documentation) - * - Chosen low frequency clock source will be running - * - * @param clock_source Low frequency clock source and accuracy. (Note: In the case of XTAL source, the PPM accuracy of the chosen clock source must be greater than or equal to the actual characteristics of your XTAL clock). - * @param assertion_handler Callback for SoftDevice assertions. - * - * @retval ::NRF_SUCCESS - * @retval ::NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION SoftDeviceinterrupt is already enabled, or an enabled interrupt has an illegal priority level - * @retval ::NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN Unknown low frequency clock source selected - */ -SVCALL(SD_SOFTDEVICE_ENABLE, uint32_t, sd_softdevice_enable(nrf_clock_lfclksrc_t clock_source, softdevice_assertion_handler_t assertion_handler)); - -/**@brief Disables the SoftDevice and by extension the protocol stack. - * - * Idempotent function to disable the SoftDevice. - * - * @post SoC library and protocol stack APIs are made unavailable. - * @post All interrupts that was protected by the SoftDevice will be disabled and initialized to priority 0 (highest). - * @post All peripherals used by the SoftDevice will be reset to default values. - * @post All of RAM become available. - * @post All interrupts are forwarded to the application. - * @post LFCLK source chosen in ::sd_softdevice_enable will be left running. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_DISABLE, uint32_t, sd_softdevice_disable(void)); - -/**@brief Check if the SoftDevice is enabled. - * - * @param[out] p_softdevice_enabled If the SoftDevice is enabled: 1 else 0. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_IS_ENABLED, uint32_t, sd_softdevice_is_enabled(uint8_t * p_softdevice_enabled)); - -/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the SoftDevice - * - * This function is only intended to be called when a bootloader is enabled. - * - * @param[in] address The base address of the interrupt vector table for forwarded interrupts. - - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, uint32_t, sd_softdevice_vector_table_base_set(uint32_t address)); - -/** @} */ - -#endif // NRF_SDM_H__ - -/** - @} -*/
--- a/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_soc.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,958 +0,0 @@ -/* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - -/** - * @defgroup nrf_soc_api SoC Library API - * @{ - * - * @brief APIs for the SoC library. - * -*/ - -#ifndef NRF_SOC_H__ -#define NRF_SOC_H__ - -#include <stdint.h> -#include <stdbool.h> -#include "nrf_svc.h" -#include "nrf51.h" -#include "nrf51_bitfields.h" -#include "nrf_error_soc.h" - -/** @addtogroup NRF_SOC_DEFINES Defines - * @{ */ - -/**@brief The number of the lowest SVC number reserved for the SoC library. */ -#define SOC_SVC_BASE (0x20) -#define SOC_SVC_BASE_NOT_AVAILABLE (0x23) - -/**@brief Guranteed time for application to process radio inactive notification. */ -#define NRF_RADIO_NOTIFICATION_INACTIVE_GUARANTEED_TIME_US (62) - -/**@brief The minimum allowed timeslot extension time. */ -#define NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US (200) - -#define SOC_ECB_KEY_LENGTH (16) /**< ECB key length. */ -#define SOC_ECB_CLEARTEXT_LENGTH (16) /**< ECB cleartext length. */ -#define SOC_ECB_CIPHERTEXT_LENGTH (SOC_ECB_CLEARTEXT_LENGTH) /**< ECB ciphertext length. */ - -#define SD_EVT_IRQn (SWI2_IRQn) /**< SoftDevice Event IRQ number. Used for both protocol events and SoC events. */ -#define SD_EVT_IRQHandler (SWI2_IRQHandler) /**< SoftDevice Event IRQ handler. Used for both protocol events and SoC events. */ -#define RADIO_NOTIFICATION_IRQn (SWI1_IRQn) /**< The radio notification IRQ number. */ -#define RADIO_NOTIFICATION_IRQHandler (SWI1_IRQHandler) /**< The radio notification IRQ handler. */ - -#define NRF_RADIO_LENGTH_MIN_US (100) /**< The shortest allowed radio timeslot, in microseconds. */ -#define NRF_RADIO_LENGTH_MAX_US (100000) /**< The longest allowed radio timeslot, in microseconds. */ - -#define NRF_RADIO_DISTANCE_MAX_US (128000000UL - 1UL) /**< The longest timeslot distance, in microseconds, allowed for the distance parameter (see @ref nrf_radio_request_normal_t) in the request. */ - -#define NRF_RADIO_EARLIEST_TIMEOUT_MAX_US (128000000UL - 1UL) /**< The longest timeout, in microseconds, allowed when requesting the earliest possible timeslot. */ - -#define NRF_RADIO_START_JITTER_US (2) /**< The maximum jitter in NRF_RADIO_CALLBACK_SIGNAL_TYPE_START relative to the requested start time. */ - -/** @} */ - -/** @addtogroup NRF_SOC_TYPES Types - * @{ */ - -/**@brief The SVC numbers used by the SVC functions in the SoC library. */ -enum NRF_SOC_SVCS -{ - SD_FLASH_PAGE_ERASE = SOC_SVC_BASE, - SD_FLASH_WRITE, - SD_FLASH_PROTECT, - SD_MUTEX_NEW = SOC_SVC_BASE_NOT_AVAILABLE, - SD_MUTEX_ACQUIRE, - SD_MUTEX_RELEASE, - SD_NVIC_ENABLEIRQ, - SD_NVIC_DISABLEIRQ, - SD_NVIC_GETPENDINGIRQ, - SD_NVIC_SETPENDINGIRQ, - SD_NVIC_CLEARPENDINGIRQ, - SD_NVIC_SETPRIORITY, - SD_NVIC_GETPRIORITY, - SD_NVIC_SYSTEMRESET, - SD_NVIC_CRITICAL_REGION_ENTER, - SD_NVIC_CRITICAL_REGION_EXIT, - SD_RAND_APPLICATION_POOL_CAPACITY, - SD_RAND_APPLICATION_BYTES_AVAILABLE, - SD_RAND_APPLICATION_GET_VECTOR, - SD_POWER_MODE_SET, - SD_POWER_SYSTEM_OFF, - SD_POWER_RESET_REASON_GET, - SD_POWER_RESET_REASON_CLR, - SD_POWER_POF_ENABLE, - SD_POWER_POF_THRESHOLD_SET, - SD_POWER_RAMON_SET, - SD_POWER_RAMON_CLR, - SD_POWER_RAMON_GET, - SD_POWER_GPREGRET_SET, - SD_POWER_GPREGRET_CLR, - SD_POWER_GPREGRET_GET, - SD_POWER_DCDC_MODE_SET, - SD_APP_EVT_WAIT, - SD_CLOCK_HFCLK_REQUEST, - SD_CLOCK_HFCLK_RELEASE, - SD_CLOCK_HFCLK_IS_RUNNING, - SD_PPI_CHANNEL_ENABLE_GET, - SD_PPI_CHANNEL_ENABLE_SET, - SD_PPI_CHANNEL_ENABLE_CLR, - SD_PPI_CHANNEL_ASSIGN, - SD_PPI_GROUP_TASK_ENABLE, - SD_PPI_GROUP_TASK_DISABLE, - SD_PPI_GROUP_ASSIGN, - SD_PPI_GROUP_GET, - SD_RADIO_NOTIFICATION_CFG_SET, - SD_ECB_BLOCK_ENCRYPT, - SD_RADIO_SESSION_OPEN, - SD_RADIO_SESSION_CLOSE, - SD_RADIO_REQUEST, - SD_EVT_GET, - SD_TEMP_GET, - SVC_SOC_LAST -}; - -/**@brief Possible values of a ::nrf_mutex_t. */ -enum NRF_MUTEX_VALUES -{ - NRF_MUTEX_FREE, - NRF_MUTEX_TAKEN -}; - -/**@brief Possible values of ::nrf_app_irq_priority_t. */ -enum NRF_APP_PRIORITIES -{ - NRF_APP_PRIORITY_HIGH = 1, - NRF_APP_PRIORITY_LOW = 3 -}; - -/**@brief Possible values of ::nrf_power_mode_t. */ -enum NRF_POWER_MODES -{ - NRF_POWER_MODE_CONSTLAT, /**< Constant latency mode. See power management in the reference manual. */ - NRF_POWER_MODE_LOWPWR /**< Low power mode. See power management in the reference manual. */ -}; - - -/**@brief Possible values of ::nrf_power_failure_threshold_t */ -enum NRF_POWER_THRESHOLDS -{ - NRF_POWER_THRESHOLD_V21, /**< 2.1 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V23, /**< 2.3 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V25, /**< 2.5 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V27 /**< 2.7 Volts power failure threshold. */ -}; - - -/**@brief Possible values of ::nrf_power_dcdc_mode_t. */ -enum NRF_POWER_DCDC_MODES -{ - NRF_POWER_DCDC_MODE_OFF, /**< The DCDC is always off. */ - NRF_POWER_DCDC_MODE_ON, /**< The DCDC is always on. */ - NRF_POWER_DCDC_MODE_AUTOMATIC /**< The DCDC is automatically managed. */ -}; - -/**@brief Possible values of ::nrf_radio_notification_distance_t. */ -enum NRF_RADIO_NOTIFICATION_DISTANCES -{ - NRF_RADIO_NOTIFICATION_DISTANCE_NONE = 0, /**< The event does not have a notification. */ - NRF_RADIO_NOTIFICATION_DISTANCE_800US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_1740US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_2680US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_3620US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_4560US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_5500US /**< The distance from the active notification to start of radio activity. */ -}; - - -/**@brief Possible values of ::nrf_radio_notification_type_t. */ -enum NRF_RADIO_NOTIFICATION_TYPES -{ - NRF_RADIO_NOTIFICATION_TYPE_NONE = 0, /**< The event does not have a radio notification signal. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_ACTIVE, /**< Using interrupt for notification when the radio will be enabled. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE, /**< Using interrupt for notification when the radio has been disabled. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_BOTH, /**< Using interrupt for notification both when the radio will be enabled and disabled. */ -}; - -/**@brief SoC Events. */ -enum NRF_SOC_EVTS -{ - NRF_EVT_HFCLKSTARTED, /**< Event indicating that the HFCLK has started. */ - NRF_EVT_POWER_FAILURE_WARNING, /**< Event indicating that a power failure warning has occurred. */ - NRF_EVT_FLASH_OPERATION_SUCCESS, /**< Event indicating that the ongoing flash operation has completed successfully. */ - NRF_EVT_FLASH_OPERATION_ERROR, /**< Event indicating that the ongoing flash operation has timed out with an error. */ - NRF_EVT_RADIO_BLOCKED, /**< Event indicating that a radio timeslot was blocked. */ - NRF_EVT_RADIO_CANCELED, /**< Event indicating that a radio timeslot was canceled by SoftDevice. */ - NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN, /**< Event indicating that a radio signal callback handler return was invalid. */ - NRF_EVT_RADIO_SESSION_IDLE, /**< Event indicating that a radio session is idle. */ - NRF_EVT_RADIO_SESSION_CLOSED, /**< Event indicating that a radio session is closed. */ - NRF_EVT_NUMBER_OF_EVTS -}; - -/** @} */ - -/** @addtogroup NRF_SOC_TYPES Types - * @{ */ - -/**@brief Represents a mutex for use with the nrf_mutex functions. - * @note Accessing the value directly is not safe, use the mutex functions! - */ -typedef volatile uint8_t nrf_mutex_t; - -/**@brief The interrupt priorities available to the application while the softdevice is active. */ -typedef uint8_t nrf_app_irq_priority_t; - -/**@brief Represents a power mode, used in power mode functions */ -typedef uint8_t nrf_power_mode_t; - -/**@brief Represents a power failure threshold value. */ -typedef uint8_t nrf_power_failure_threshold_t; - -/**@brief Represents a DCDC mode value. */ -typedef uint32_t nrf_power_dcdc_mode_t; - -/**@brief Radio notification distances. */ -typedef uint8_t nrf_radio_notification_distance_t; - -/**@brief Radio notification types. */ -typedef uint8_t nrf_radio_notification_type_t; - -/** @brief The Radio signal callback types. */ -enum NRF_RADIO_CALLBACK_SIGNAL_TYPE -{ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_START, /**< This signal indicates the start of the radio timeslot. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0, /**< This signal indicates the NRF_TIMER0 interrupt. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO, /**< This signal indicates the NRF_RADIO interrupt. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_FAILED, /**< This signal indicates extend action failed. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_SUCCEEDED /**< This signal indicates extend action succeeded. */ -}; - -/** @brief The actions requested by the signal callback. - * - * This code gives the SOC instructions about what action to take when the signal callback has - * returned. - */ -enum NRF_RADIO_SIGNAL_CALLBACK_ACTION -{ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_NONE, /**< Return without action. */ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND, /**< Request an extension of the current timeslot (maximum execution time for this action is when the extension succeeded). */ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_END, /**< End the current radio timeslot. */ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END /**< Request a new radio timeslot and end the current timeslot. */ -}; - -/**@brief Radio timeslot high frequency clock source configuration. */ -enum NRF_RADIO_HFCLK_CFG -{ - NRF_RADIO_HFCLK_CFG_DEFAULT, /**< Use the currently selected oscillator as HF clock source during the timeslot (i.e. the source is not specified). */ - NRF_RADIO_HFCLK_CFG_FORCE_XTAL, /**< Force external crystal to be used as HF clock source during whole the timeslot. */ -}; - -/** @brief Radio timeslot priorities. */ -enum NRF_RADIO_PRIORITY -{ - NRF_RADIO_PRIORITY_HIGH, /**< High (equal priority as the normal connection priority of the SoftDevice stack(s)). */ - NRF_RADIO_PRIORITY_NORMAL, /**< Normal (equal priority as the priority of secondary activites of the SoftDevice stack(s)). */ -}; - -/** @brief Radio timeslot request type. */ -enum NRF_RADIO_REQUEST_TYPE -{ - NRF_RADIO_REQ_TYPE_EARLIEST, /**< Request timeslot as early as possible. This should always be used for the first request in a session. */ - NRF_RADIO_REQ_TYPE_NORMAL /**< Normal timeslot request. */ -}; - -/** @brief Parameters for a request for a timeslot as early as possible. */ -typedef struct -{ - uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ - uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ - uint32_t length_us; /**< The radio timeslot length (in the range 100 to 100,000] microseconds). */ - uint32_t timeout_us; /**< Longest acceptable delay until the start of the requested timeslot (up to @ref NRF_RADIO_EARLIEST_TIMEOUT_MAX_US microseconds). */ -} nrf_radio_request_earliest_t; - -/** @brief Parameters for a normal radio request. */ -typedef struct -{ - uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ - uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ - uint32_t distance_us; /**< Distance from the start of the previous radio timeslot (up to @ref NRF_RADIO_DISTANCE_MAX_US microseconds). */ - uint32_t length_us; /**< The radio timeslot length (in the range [100..100,000] microseconds). */ -} nrf_radio_request_normal_t; - -/** @brief Radio request parameters. */ -typedef struct -{ - uint8_t request_type; /**< Type of request, see @ref NRF_RADIO_REQUEST_TYPE. */ - union - { - nrf_radio_request_earliest_t earliest; /**< Parameters for a request for a timeslot as early as possible. */ - nrf_radio_request_normal_t normal; /**< Parameters for a normal radio request. */ - } params; -} nrf_radio_request_t; - -/**@brief Return parameters of the radio timeslot signal callback. */ -typedef struct -{ - uint8_t callback_action; /**< The action requested by the application when returning from the signal callback, see @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION. */ - union - { - struct - { - nrf_radio_request_t * p_next; /**< The request parameters for the next radio timeslot. */ - } request; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END. */ - struct - { - uint32_t length_us; /**< Requested extension of the timeslot duration (microseconds) (for minimum time see @ref NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US). */ - } extend; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND. */ - } params; -} nrf_radio_signal_callback_return_param_t; - -/**@brief The radio signal callback type. - * - * @note In case of invalid return parameters, the radio timeslot will automatically end - * immediately after returning from the signal callback and the - * @ref NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN event will be sent. - * @note The returned struct pointer must remain valid after the signal callback - * function returns. For instance, this means that it must not point to a stack variable. - * - * @param[in] signal_type Type of signal, see @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE. - * - * @return Pointer to structure containing action requested by the application. - */ -typedef nrf_radio_signal_callback_return_param_t * (*nrf_radio_signal_callback_t) (uint8_t signal_type); - -/**@brief AES ECB data structure */ -typedef struct -{ - uint8_t key[SOC_ECB_KEY_LENGTH]; /**< Encryption key. */ - uint8_t cleartext[SOC_ECB_CLEARTEXT_LENGTH]; /**< Clear Text data. */ - uint8_t ciphertext[SOC_ECB_CIPHERTEXT_LENGTH]; /**< Cipher Text data. */ -} nrf_ecb_hal_data_t; - -/** @} */ - -/** @addtogroup NRF_SOC_FUNCTIONS Functions - * @{ */ - -/**@brief Initialize a mutex. - * - * @param[in] p_mutex Pointer to the mutex to initialize. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_MUTEX_NEW, uint32_t, sd_mutex_new(nrf_mutex_t * p_mutex)); - -/**@brief Attempt to acquire a mutex. - * - * @param[in] p_mutex Pointer to the mutex to acquire. - * - * @retval ::NRF_SUCCESS The mutex was successfully acquired. - * @retval ::NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN The mutex could not be acquired. - */ -SVCALL(SD_MUTEX_ACQUIRE, uint32_t, sd_mutex_acquire(nrf_mutex_t * p_mutex)); - -/**@brief Release a mutex. - * - * @param[in] p_mutex Pointer to the mutex to release. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_MUTEX_RELEASE, uint32_t, sd_mutex_release(nrf_mutex_t * p_mutex)); - -/**@brief Enable External Interrupt. - * @note Corresponds to NVIC_EnableIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt was enabled. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt has a priority not available for the application. - */ -SVCALL(SD_NVIC_ENABLEIRQ, uint32_t, sd_nvic_EnableIRQ(IRQn_Type IRQn)); - -/**@brief Disable External Interrupt. - * @note Corresponds to NVIC_DisableIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS - * - * @retval ::NRF_SUCCESS The interrupt was disabled. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. - */ -SVCALL(SD_NVIC_DISABLEIRQ, uint32_t, sd_nvic_DisableIRQ(IRQn_Type IRQn)); - -/**@brief Get Pending Interrupt. - * @note Corresponds to NVIC_GetPendingIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_GetPendingIRQ documentation in CMSIS. - * @param[out] p_pending_irq Return value from NVIC_GetPendingIRQ. - * - * @retval ::NRF_SUCCESS The interrupt is available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -SVCALL(SD_NVIC_GETPENDINGIRQ, uint32_t, sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq)); - -/**@brief Set Pending Interrupt. - * @note Corresponds to NVIC_SetPendingIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt is set pending. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -SVCALL(SD_NVIC_SETPENDINGIRQ, uint32_t, sd_nvic_SetPendingIRQ(IRQn_Type IRQn)); - -/**@brief Clear Pending Interrupt. - * @note Corresponds to NVIC_ClearPendingIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt pending flag is cleared. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -SVCALL(SD_NVIC_CLEARPENDINGIRQ, uint32_t, sd_nvic_ClearPendingIRQ(IRQn_Type IRQn)); - -/**@brief Set Interrupt Priority. - * @note Corresponds to NVIC_SetPriority in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * @pre{priority is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_SetPriority documentation in CMSIS. - * @param[in] priority A valid IRQ priority for use by the application. - * - * @retval ::NRF_SUCCESS The interrupt and priority level is available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt priority is not available for the application. - */ -SVCALL(SD_NVIC_SETPRIORITY, uint32_t, sd_nvic_SetPriority(IRQn_Type IRQn, nrf_app_irq_priority_t priority)); - -/**@brief Get Interrupt Priority. - * @note Corresponds to NVIC_GetPriority in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_GetPriority documentation in CMSIS. - * @param[out] p_priority Return value from NVIC_GetPriority. - * - * @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE - IRQn is not available for the application. - */ -SVCALL(SD_NVIC_GETPRIORITY, uint32_t, sd_nvic_GetPriority(IRQn_Type IRQn, nrf_app_irq_priority_t * p_priority)); - -/**@brief System Reset. - * @note Corresponds to NVIC_SystemReset in CMSIS. - * - * @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN - */ -SVCALL(SD_NVIC_SYSTEMRESET, uint32_t, sd_nvic_SystemReset(void)); - -/**@brief Enters critical region. - * - * @post Application interrupts will be disabled. - * @sa sd_nvic_critical_region_exit - * - * @param[out] p_is_nested_critical_region 1: If in a nested critical region. - * 0: Otherwise. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_NVIC_CRITICAL_REGION_ENTER, uint32_t, sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region)); - -/**@brief Exit critical region. - * - * @pre Application has entered a critical region using ::sd_nvic_critical_region_enter. - * @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called. - * - * @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_NVIC_CRITICAL_REGION_EXIT, uint32_t, sd_nvic_critical_region_exit(uint8_t is_nested_critical_region)); - -/**@brief Query the capacity of the application random pool. - * - * @param[out] p_pool_capacity The capacity of the pool. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RAND_APPLICATION_POOL_CAPACITY, uint32_t, sd_rand_application_pool_capacity_get(uint8_t * p_pool_capacity)); - -/**@brief Get number of random bytes available to the application. - * - * @param[out] p_bytes_available The number of bytes currently available in the pool. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RAND_APPLICATION_BYTES_AVAILABLE, uint32_t, sd_rand_application_bytes_available_get(uint8_t * p_bytes_available)); - -/**@brief Get random bytes from the application pool. - * - * @param[out] p_buff Pointer to unit8_t buffer for storing the bytes. - * @param[in] length Number of bytes to take from pool and place in p_buff. - * - * @retval ::NRF_SUCCESS The requested bytes were written to p_buff. - * @retval ::NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES No bytes were written to the buffer, because there were not enough bytes available. -*/ -SVCALL(SD_RAND_APPLICATION_GET_VECTOR, uint32_t, sd_rand_application_vector_get(uint8_t * p_buff, uint8_t length)); - -/**@brief Gets the reset reason register. - * - * @param[out] p_reset_reason Contents of the NRF_POWER->RESETREAS register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RESET_REASON_GET, uint32_t, sd_power_reset_reason_get(uint32_t * p_reset_reason)); - -/**@brief Clears the bits of the reset reason register. - * - * @param[in] reset_reason_clr_msk Contains the bits to clear from the reset reason register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RESET_REASON_CLR, uint32_t, sd_power_reset_reason_clr(uint32_t reset_reason_clr_msk)); - -/**@brief Sets the power mode when in CPU sleep. - * - * @param[in] power_mode The power mode to use when in CPU sleep. @sa sd_app_evt_wait - * - * @retval ::NRF_SUCCESS The power mode was set. - * @retval ::NRF_ERROR_SOC_POWER_MODE_UNKNOWN The power mode was unknown. - */ -SVCALL(SD_POWER_MODE_SET, uint32_t, sd_power_mode_set(nrf_power_mode_t power_mode)); - -/**@brief Puts the chip in System OFF mode. - * - * @retval ::NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN - */ -SVCALL(SD_POWER_SYSTEM_OFF, uint32_t, sd_power_system_off(void)); - -/**@brief Enables or disables the power-fail comparator. - * - * Enabling this will give a softdevice event (NRF_EVT_POWER_FAILURE_WARNING) when the power failure warning occurs. - * The event can be retrieved with sd_evt_get(); - * - * @param[in] pof_enable True if the power-fail comparator should be enabled, false if it should be disabled. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_POF_ENABLE, uint32_t, sd_power_pof_enable(uint8_t pof_enable)); - -/**@brief Sets the power-fail threshold value. - * - * @param[in] threshold The power-fail threshold value to use. - * - * @retval ::NRF_SUCCESS The power failure threshold was set. - * @retval ::NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN The power failure threshold is unknown. - */ -SVCALL(SD_POWER_POF_THRESHOLD_SET, uint32_t, sd_power_pof_threshold_set(nrf_power_failure_threshold_t threshold)); - -/**@brief Sets bits in the NRF_POWER->RAMON register. - * - * @param[in] ramon Contains the bits needed to be set in the NRF_POWER->RAMON register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAMON_SET, uint32_t, sd_power_ramon_set(uint32_t ramon)); - -/** @brief Clears bits in the NRF_POWER->RAMON register. - * - * @param ramon Contains the bits needed to be cleared in the NRF_POWER->RAMON register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAMON_CLR, uint32_t, sd_power_ramon_clr(uint32_t ramon)); - -/**@brief Get contents of NRF_POWER->RAMON register, indicates power status of ram blocks. - * - * @param[out] p_ramon Content of NRF_POWER->RAMON register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAMON_GET, uint32_t, sd_power_ramon_get(uint32_t * p_ramon)); - -/**@brief Set bits in the NRF_POWER->GPREGRET register. - * - * @param[in] gpregret_msk Bits to be set in the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_SET, uint32_t, sd_power_gpregret_set(uint32_t gpregret_msk)); - -/**@brief Clear bits in the NRF_POWER->GPREGRET register. - * - * @param[in] gpregret_msk Bits to be clear in the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_CLR, uint32_t, sd_power_gpregret_clr(uint32_t gpregret_msk)); - -/**@brief Get contents of the NRF_POWER->GPREGRET register. - * - * @param[out] p_gpregret Contents of the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_GET, uint32_t, sd_power_gpregret_get(uint32_t *p_gpregret)); - -/**@brief Sets the DCDC mode. - * - * Depending on the internal state of the SoftDevice, the mode change may not happen immediately. - * The DCDC mode switch will be blocked when occurring in close proximity to radio transmissions. When - * the radio transmission is done, the last mode will be used. - * - * @param[in] dcdc_mode The mode of the DCDC. - * - * @retval ::NRF_SUCCESS - * @retval ::NRF_ERROR_INVALID_PARAM The DCDC mode is invalid. - */ -SVCALL(SD_POWER_DCDC_MODE_SET, uint32_t, sd_power_dcdc_mode_set(nrf_power_dcdc_mode_t dcdc_mode)); - -/**@brief Request the high frequency crystal oscillator. - * - * Will start the high frequency crystal oscillator, the startup time of the crystal varies - * and the ::sd_clock_hfclk_is_running function can be polled to check if it has started. - * - * @see sd_clock_hfclk_is_running - * @see sd_clock_hfclk_release - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_REQUEST, uint32_t, sd_clock_hfclk_request(void)); - -/**@brief Releases the high frequency crystal oscillator. - * - * Will stop the high frequency crystal oscillator, this happens immediately. - * - * @see sd_clock_hfclk_is_running - * @see sd_clock_hfclk_request - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_RELEASE, uint32_t, sd_clock_hfclk_release(void)); - -/**@brief Checks if the high frequency crystal oscillator is running. - * - * @see sd_clock_hfclk_request - * @see sd_clock_hfclk_release - * - * @param[out] p_is_running 1 if the external crystal oscillator is running, 0 if not. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_IS_RUNNING, uint32_t, sd_clock_hfclk_is_running(uint32_t * p_is_running)); - -/**@brief Waits for an application event. - * - * An application event is either an application interrupt or a pended interrupt when the - * interrupt is disabled. When the interrupt is enabled it will be taken immediately since - * this function will wait in thread mode, then the execution will return in the application's - * main thread. When an interrupt is disabled and gets pended it will return to the application's - * thread main. The application must ensure that the pended flag is cleared using - * ::sd_nvic_ClearPendingIRQ in order to sleep using this function. This is only necessary for - * disabled interrupts, as the interrupt handler will clear the pending flag automatically for - * enabled interrupts. - * - * In order to wake up from disabled interrupts, the SEVONPEND flag has to be set in the Cortex-M0 - * System Control Register (SCR). @sa CMSIS_SCB - * - * @note If an application interrupt has happened since the last time sd_app_evt_wait was - * called this function will return immediately and not go to sleep. This is to avoid race - * conditions that can occur when a flag is updated in the interrupt handler and processed - * in the main loop. - * - * @post An application interrupt has happened or a interrupt pending flag is set. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_APP_EVT_WAIT, uint32_t, sd_app_evt_wait(void)); - -/**@brief Get PPI channel enable register contents. - * - * @param[out] p_channel_enable The contents of the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_GET, uint32_t, sd_ppi_channel_enable_get(uint32_t * p_channel_enable)); - -/**@brief Set PPI channel enable register. - * - * @param[in] channel_enable_set_msk Mask containing the bits to set in the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_SET, uint32_t, sd_ppi_channel_enable_set(uint32_t channel_enable_set_msk)); - -/**@brief Clear PPI channel enable register. - * - * @param[in] channel_enable_clr_msk Mask containing the bits to clear in the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_CLR, uint32_t, sd_ppi_channel_enable_clr(uint32_t channel_enable_clr_msk)); - -/**@brief Assign endpoints to a PPI channel. - * - * @param[in] channel_num Number of the PPI channel to assign. - * @param[in] evt_endpoint Event endpoint of the PPI channel. - * @param[in] task_endpoint Task endpoint of the PPI channel. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_CHANNEL The channel number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ASSIGN, uint32_t, sd_ppi_channel_assign(uint8_t channel_num, const volatile void * evt_endpoint, const volatile void * task_endpoint)); - -/**@brief Task to enable a channel group. - * - * @param[in] group_num Number of the channel group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_TASK_ENABLE, uint32_t, sd_ppi_group_task_enable(uint8_t group_num)); - -/**@brief Task to disable a channel group. - * - * @param[in] group_num Number of the PPI group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_TASK_DISABLE, uint32_t, sd_ppi_group_task_disable(uint8_t group_num)); - -/**@brief Assign PPI channels to a channel group. - * - * @param[in] group_num Number of the channel group. - * @param[in] channel_msk Mask of the channels to assign to the group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_ASSIGN, uint32_t, sd_ppi_group_assign(uint8_t group_num, uint32_t channel_msk)); - -/**@brief Gets the PPI channels of a channel group. - * - * @param[in] group_num Number of the channel group. - * @param[out] p_channel_msk Mask of the channels assigned to the group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_GET, uint32_t, sd_ppi_group_get(uint8_t group_num, uint32_t * p_channel_msk)); - -/**@brief Configures the Radio Notification signal. - * - * @note - * - The notification signal latency depends on the interrupt priority settings of SWI used - * for notification signal. - * - In the period between the ACTIVE signal and the start of the Radio Event, the SoftDevice - * will interrupt the application to do Radio Event preparation. - * - Using the Radio Notification feature may limit the bandwidth, as the SoftDevice may have - * to shorten the connection events to have time for the Radio Notification signals. - * - * @param[in] type Type of notification signal. - * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE shall be used to turn off radio - * notification. Using @ref NRF_RADIO_NOTIFICATION_DISTANCE_NONE is - * recommended (but not required) to be used with - * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE. - * - * @param[in] distance Distance between the notification signal and start of radio activity. - * This parameter is ignored when @ref NRF_RADIO_NOTIFICATION_TYPE_NONE or - * @ref NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE is used. - * - * @retval ::NRF_ERROR_INVALID_PARAM The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RADIO_NOTIFICATION_CFG_SET, uint32_t, sd_radio_notification_cfg_set(nrf_radio_notification_type_t type, nrf_radio_notification_distance_t distance)); - -/**@brief Encrypts a block according to the specified parameters. - * - * 128-bit AES encryption. - * - * @param[in, out] p_ecb_data Pointer to the ECB parameters' struct (two input - * parameters and one output parameter). - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_ECB_BLOCK_ENCRYPT, uint32_t, sd_ecb_block_encrypt(nrf_ecb_hal_data_t * p_ecb_data)); - -/**@brief Gets any pending events generated by the SoC API. - * - * The application should keep calling this function to get events, until ::NRF_ERROR_NOT_FOUND is returned. - * - * @param[out] p_evt_id Set to one of the values in @ref NRF_SOC_EVTS, if any events are pending. - * - * @retval ::NRF_SUCCESS An event was pending. The event id is written in the p_evt_id parameter. - * @retval ::NRF_ERROR_NOT_FOUND No pending events. - */ -SVCALL(SD_EVT_GET, uint32_t, sd_evt_get(uint32_t * p_evt_id)); - -/**@brief Get the temperature measured on the chip - * - * This function will block until the temperature measurement is done. - * It takes around 50us from call to return. - * - * @note Pan #28 in PAN-028 v 1.6 "Negative measured values are not represented correctly" is corrected by this function. - * - * @param[out] p_temp Result of temperature measurement. Die temperature in 0.25 degrees celsius. - * - * @retval ::NRF_SUCCESS A temperature measurement was done, and the temperature was written to temp - */ -SVCALL(SD_TEMP_GET, uint32_t, sd_temp_get(int32_t * p_temp)); - -/**@brief Flash Write - * - * Commands to write a buffer to flash - * - * This call initiates the flash access command, and its completion will be communicated to the - * application with exactly one of the following events: - * - NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. - * - NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. - * - * @note - * - This call takes control over the radio and the CPU during flash erase and write to make sure that - * they will not interfere with the flash access. This means that all interrupts will be blocked - * for a predictable time (depending on the NVMC specification in nRF51 Series Reference Manual - * and the command parameters). - * - * - * @param[in] p_dst Pointer to start of flash location to be written. - * @param[in] p_src Pointer to buffer with data to be written - * @param[in] size Number of 32-bit words to write. Maximum size is 256 32bit words. - * - * @retval ::NRF_ERROR_INVALID_ADDR Tried to write to a non existing flash address, or p_dst or p_src was unaligned. - * @retval ::NRF_ERROR_BUSY The previous command has not yet completed. - * @retval ::NRF_ERROR_INVALID_LENGTH Size was 0, or more than 256 words. - * @retval ::NRF_ERROR_FORBIDDEN Tried to write to or read from protected location. - * @retval ::NRF_SUCCESS The command was accepted. - */ -SVCALL(SD_FLASH_WRITE, uint32_t, sd_flash_write(uint32_t * const p_dst, uint32_t const * const p_src, uint32_t size)); - - -/**@brief Flash Erase page - * - * Commands to erase a flash page - * - * This call initiates the flash access command, and its completion will be communicated to the - * application with exactly one of the following events: - * - NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. - * - NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. - * - * @note - * - This call takes control over the radio and the CPU during flash erase and write to make sure that - * they will not interfere with the flash access. This means that all interrupts will be blocked - * for a predictable time (depending on the NVMC specification in nRF51 Series Reference Manual - * and the command parameters). - * - * - * @param[in] page_number Pagenumber of the page to erase - * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. - * @retval ::NRF_ERROR_INVALID_ADDR Tried to erase to a non existing flash page. - * @retval ::NRF_ERROR_BUSY The previous command has not yet completed. - * @retval ::NRF_ERROR_FORBIDDEN Tried to erase a protected page. - * @retval ::NRF_SUCCESS The command was accepted. - */ -SVCALL(SD_FLASH_PAGE_ERASE, uint32_t, sd_flash_page_erase(uint32_t page_number)); - - -/**@brief Flash Protection set - * - * Commands to set the flash protection registers PROTENSETx - * - * @note To read the values in PROTENSETx you can read them directly. They are only write-protected. - * - * @param[in] protenset0 Value to be written to PROTENSET0 - * @param[in] protenset1 Value to be written to PROTENSET1 - * - * @retval ::NRF_ERROR_FORBIDDEN Tried to protect the SoftDevice - * @retval ::NRF_SUCCESS Values successfully written to PROTENSETx - */ -SVCALL(SD_FLASH_PROTECT, uint32_t, sd_flash_protect(uint32_t protenset0, uint32_t protenset1)); - -/**@brief Opens a session for radio requests. - * - * @note Only one session can be open at a time. - * @note p_radio_signal_callback(NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) will be called when the radio timeslot - * starts. From this point the NRF_RADIO and NRF_TIMER0 peripherals can be freely accessed - * by the application. - * @note p_radio_signal_callback(NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0) is called whenever the NRF_TIMER0 - * interrupt occurs. - * @note p_radio_signal_callback(NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO) is called whenever the NRF_RADIO - * interrupt occurs. - * @note p_radio_signal_callback() will be called at ARM interrupt priority level 0. This - * implies that none of the sd_* API calls can be used from p_radio_signal_callback(). - * - * @param[in] p_radio_signal_callback The signal callback. - * - * @retval ::NRF_ERROR_INVALID_ADDR p_radio_signal_callback is an invalid function pointer. - * @retval ::NRF_ERROR_BUSY If session cannot be opened. - * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. - * @retval ::NRF_SUCCESS Otherwise. - */ - SVCALL(SD_RADIO_SESSION_OPEN, uint32_t, sd_radio_session_open(nrf_radio_signal_callback_t p_radio_signal_callback)); - -/**@brief Closes a session for radio requests. - * - * @note Any current radio timeslot will be finished before the session is closed. - * @note If a radio timeslot is scheduled when the session is closed, it will be canceled. - * @note The application cannot consider the session closed until the NRF_EVT_RADIO_SESSION_CLOSED - * event is received. - * - * @retval ::NRF_ERROR_FORBIDDEN If session not opened. - * @retval ::NRF_ERROR_BUSY If session is currently being closed. - * @retval ::NRF_SUCCESS Otherwise. - */ - SVCALL(SD_RADIO_SESSION_CLOSE, uint32_t, sd_radio_session_close(void)); - - /**@brief Requests a radio timeslot. - * - * @note The timing of the radio timeslot is specified by p_request->distance_us. For the first - * request in a session, p_request->distance_us is required to be 0 by convention, and - * the timeslot is scheduled at the first possible opportunity. All following radio timeslots are - * requested with a distance of p_request->distance_us measured from the start of the - * previous radio timeslot. - * @note A too small p_request->distance_us will lead to a NRF_EVT_RADIO_BLOCKED event. - * @note Timeslots scheduled too close will lead to a NRF_EVT_RADIO_BLOCKED event. - * @note See the SoftDevice Specification for more on radio timeslot scheduling, distances and lengths. - * @note If an opportunity for the first radio timeslot is not found before 100ms after the call to this - * function, it is not scheduled, and instead a NRF_EVT_RADIO_BLOCKED event is sent. - * The application may then try to schedule the first radio timeslot again. - * @note Successful requests will result in nrf_radio_signal_callback_t(NRF_RADIO_CALLBACK_SIGNAL_TYPE_START). - * Unsuccessful requests will result in a NRF_EVT_RADIO_BLOCKED event, see @ref NRF_SOC_EVTS. - * @note The jitter in the start time of the radio timeslots is +/- NRF_RADIO_START_JITTER_US us. - * @note The nrf_radio_signal_callback_t(NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) call has a latency relative to the - * specified radio timeslot start, but this does not affect the actual start time of the timeslot. - * @note NRF_TIMER0 is reset at the start of the radio timeslot, and is clocked at 1MHz from the high frequency - * (16 MHz) clock source. If p_request->hfclk_force_xtal is true, the high frequency clock is - * guaranteed to be clocked from the external crystal. - * @note The SoftDevice will neither access the NRF_RADIO peripheral nor the NRF_TIMER0 peripheral - * during the radio timeslot. - * - * @param[in] p_request Pointer to the request parameters. - * - * @retval ::NRF_ERROR_FORBIDDEN If session not opened or the session is not IDLE. - * @retval ::NRF_ERROR_INVALID_ADDR If the p_request pointer is invalid. - * @retval ::NRF_ERROR_INVALID_PARAM If the parameters of p_request are not valid. - * @retval ::NRF_SUCCESS Otherwise. - */ - SVCALL(SD_RADIO_REQUEST, uint32_t, sd_radio_request(nrf_radio_request_t * p_request )); - -/** @} */ - -#endif // NRF_SOC_H__ - -/**@} */
--- a/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/nrf_svc.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -#ifndef NRF_SVC__ -#define NRF_SVC__ - -#ifdef SVCALL_AS_NORMAL_FUNCTION -#define SVCALL(number, return_type, signature) return_type signature -#else - -#ifndef SVCALL -#if defined (__CC_ARM) -#define SVCALL(number, return_type, signature) return_type __svc(number) signature -#elif defined (__GNUC__) -#define SVCALL(number, return_type, signature) \ - _Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \ - _Pragma("GCC diagnostic ignored \"-Wunused-function\"") \ - __attribute__((naked)) static return_type signature \ - { \ - __asm( \ - "svc %0\n" \ - "bx r14" : : "I" (number) : "r0" \ - ); \ - } -#elif defined (__ICCARM__) -#define PRAGMA(x) _Pragma(#x) -#define SVCALL(number, return_type, signature) \ -PRAGMA(swi_number = number) \ - __swi return_type signature; -#else -#define SVCALL(number, return_type, signature) return_type signature -#endif -#endif // SVCALL - -#endif // SVCALL_AS_NORMAL_FUNCTION -#endif // NRF_SVC__
--- a/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_API/include/softdevice_assert.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is confidential property of Nordic Semiconductor. The use, - * copying, transfer or disclosure of such information is prohibited except by express written - * agreement with Nordic Semiconductor. - * - */ - -/** @brief Utilities for verifying program logic - */ - -#ifndef SOFTDEVICE_ASSERT_H_ -#define SOFTDEVICE_ASSERT_H_ - -#include <stdint.h> - -/** @brief This function handles assertions. - * - * - * @note - * This function is called when an assertion has triggered. - * - * - * @param line_num The line number where the assertion is called - * @param file_name Pointer to the file name - */ -void assert_softdevice_callback(uint16_t line_num, const uint8_t *file_name); - - -/*lint -emacro(506, ASSERT) */ /* Suppress "Constant value Boolean */ -/*lint -emacro(774, ASSERT) */ /* Suppress "Boolean within 'if' always evaluates to True" */ \ -/** @brief Check intended for production code - * - * Check passes if "expr" evaluates to true. */ -#define ASSERT(expr) \ -if (expr) \ -{ \ -} \ -else \ -{ \ - assert_softdevice_callback((uint16_t)__LINE__, (uint8_t *)__FILE__); \ - /*lint -unreachable */ \ -} - -#endif /* SOFTDEVICE_ASSERT_H_ */
--- a/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_7_0_0/s110_nrf51822_7.0.0_softdevice.hex Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5290 +0,0 @@ -:020000040000FA -:10000000C0070000D1060000D1000000B1060000CA -:1000100000000000000000000000000000000000E0 -:100020000000000000000000000000005107000078 -:100030000000000000000000DB000000E500000000 -:10004000EF000000F9000000030100000D010000B6 -:1000500017010000210100002B0100003501000004 -:100060003F01000049010000530100005D01000054 -:1000700067010000710100007B01000085010000A4 -:100080008F01000099010000A3010000AD010000F4 -:10009000B7010000C1010000CB010000D501000044 -:1000A000DF010000E9010000F3010000FD01000094 -:1000B00007020000110200001B02000025020000E0 -:1000C0001FB5C046C04600F0EFFA04B00FB41FBD24 -:1000D00008205A49096809580847382057490968CB -:1000E000095808473C2055490968095808474020E5 -:1000F0005249096809580847442050490968095875 -:10010000084748204D490968095808474C204B4981 -:10011000096809580847502048490968095808479C -:100120005420464909680958084758204349096836 -:10013000095808475C204149096809580847602068 -:100140003E4909680958084764203C49096809582C -:100150000847682039490968095808476C20374919 -:100160000968095808477020344909680958084740 -:100170007420324909680958084778202F490968CE -:10018000095808477C202D490968095808478020EC -:100190002A490968095808478420284909680958E4 -:1001A0000847882025490968095808478C202349B1 -:1001B00009680958084790202049096809580847E4 -:1001C00094201E4909680958084798201B49096866 -:1001D000095808479C201949096809580847A02070 -:1001E0001649096809580847A4201449096809589C -:1001F0000847A8201149096809580847AC200F4949 -:10020000096809580847B0200C4909680958084787 -:10021000B4200A49096809580847B82007490968FD -:1002200009580847BC2005490968095808470000D3 -:1002300003480449024A034B7047000000000020B5 -:10024000C0070000C00700000122D84B5A6000BF61 -:10025000D74A1268002AFBD0016000BFD44A126856 -:10026000002AFBD00022D14B5A6000BFD04A12684E -:10027000002AFBD07047F0B505460E46174600240D -:1002800006E0A200B158A2005019FFF7DDFF641C80 -:10029000BC42F6D30020F0BD0120C043C549086030 -:1002A000401048607047014601229204086890425D -:1002B00001D9102070470020FCE7F0B505460C4638 -:1002C0001646002706E028462168FFF7BDFF2D1DD2 -:1002D000241D7F1CB742F6D3F0BD70B505460C4611 -:1002E0002E460BE0304600F075F9FF2C01D80024B3 -:1002F00001E0FF3C013C012080023618002CF1D1C6 -:1003000070BD0146012292044868904201D909203B -:100310007047A9484069401C01D10F20F8E7002030 -:10032000F6E7FEB504462068030000F037FA05043E -:100330002B4249598B00201DFFF7E3FF0546002D96 -:1003400001D02846FEBDFFF7A7FF0120C00200F044 -:1003500041F9042221469948FFF78DFF002801D07A -:100360000320EFE708222146944800F06DF90028A9 -:1003700006D1002192480068FFF766FF00F00CF9F3 -:100380000320DFE7A768E6686068019031463846D9 -:10039000FFF7A3FF324638460199FFF78EFFB20000 -:1003A0003846019900F050F9002800D1CAE703202F -:1003B000C8E700F0E3F9834800688349086041E03A -:1003C00060680190E668A0680090B200009901980A -:1003D00000F03AF90746002F00D1B3E70E20B1E74D -:1003E000201DFFF760FF0546002D01D02846A9E734 -:1003F0006068002807D1FFF74FFF0320800200F05C -:10040000E9F800F0C9F8FFF747FF0120C00200F04B -:10041000E1F8042221466948FFF72DFF002801D0AA -:1004200003208FE708222146644800F00DF90028D8 -:1004300006D1002162480068FFF706FF00F0ACF823 -:1004400003207FE700BF00207CE770B505460C461F -:10045000182D04D12068FFF764FF206002E001201E -:10046000206000BF00BF70BDF0B589B05248406940 -:1004700003905248806881000398081802900398FE -:10048000000B01900121090302984018401E000B47 -:1004900000900124002520462946019A00F0C4F866 -:1004A0000022401E91410791069001260027304608 -:1004B0003946009A00F0B8F80022401E914105919B -:1004C0000490049BDB43059AD2430698184307998E -:1004D00011430791069037490698086007984860CD -:1004E00009B0F0BD70B53448446934488568466841 -:1004F000AA003146204600F0A7F8002801D00020CD -:1005000070BD0120FCE72D484068002801D0012083 -:1005100000E000200546FFF7E5FF002807D0FFF7C1 -:10052000BBFE0320800200F055F800F035F8FFF71D -:100530009BFF002D0ED020484669204884684768FC -:1005400021463046FFF7C9FE224639463046FFF7BE -:10055000B4FE00BF00F020F810B5184844681A48EF -:100560000460204600F0DCF810BD15480068006803 -:10057000401C01D100BFFEE710480068002802D0EF -:10058000042806D101E0FFF7BEFFFFF7E5FF00BF3B -:10059000FEE700BF00BFFEE7BFF34F8F0B480C49DB -:1005A000C860BFF34F8F00BFFEE7000000E50140C9 -:1005B00000E40140000600400010001000080000A8 -:1005C000B8070000BC070000000000200400FA0586 -:1005D00000ED00E010B50146104B1A6808460223F2 -:1005E0000F4C636000BF0F4B1B68002BFBD0531CEC -:1005F00004D0904202D20A4B186101E0084B986087 -:1006000000BF084B1B68002BFBD00023044C636029 -:1006100000BF044B1B68002BFBD010BD0010001066 -:1006200000E5014000E4014010B5202A04DB01464A -:10063000203A9140002010BD914020239C1A03468F -:10064000E3401943904010BD034610B50B439B0790 -:100650000FD1042A0DD308C810C9121FA342F8D025 -:1006600018BA21BA884201D9012010BD0020C04328 -:1006700010BD002A03D0D30703D0521C07E000208E -:1006800010BD03780C78401C491C1B1B07D1037854 -:100690000C78401C491C1B1B01D1921EF1D118463D -:1006A00010BD70477047704710B500F007F810BDD7 -:1006B000014B1B68DB6818470000002019481A49E5 -:1006C0007047FFF7FBFFFFF7FBFC00BD20BFFDE716 -:1006D0001649174C24688C420BD1164B1B68994263 -:1006E0000CD1154B154A1360186810498842EDD09B -:1006F0000AE0134880F30888124B18470F4A13602A -:1007000018680A498842E1D080F308880E49884277 -:1007100004DD0E48026802210A4302605B68184744 -:100720000346DFE7C0070000C0070000FFFFFFFF30 -:10073000000C000014100010001000000000002049 -:10074000000400206B05000000200020240500406C -:100750000D48704502D1EFF3098101E0EFF3088104 -:10076000886902380078182802D1C046074A104725 -:10077000074A12682C3212681047000000B5054B7A -:10078000054A9B58984700BDFDFFFFFF4B04000042 -:1007900000000020001000000400000030B4744687 -:1007A000641E2578641CAB4204D3635D5B00E318D0 -:1007B00030BC18471D46F8E7000C00000010000090 -:10100000901D002079500100ED3D0000DF4F0100F0 -:1010100000000000000000000000000000000000D0 -:10102000000000000000000000000000E950010086 -:101030000000000000000000ED3D0000ED3D00005C -:10104000555101005B510100ED3D0000ED3D0000F8 -:10105000ED3D0000ED3D0000ED3D0000ED3D0000E8 -:1010600061510100ED3D0000ED3D000067510100C0 -:10107000ED3D00006D5101007351010079510100F7 -:10108000ED3D0000ED3D0000ED3D0000ED3D0000B8 -:10109000ED3D0000ED3D0000ED3D0000ED3D0000A8 -:1010A0007F51010085510100ED3D0000ED3D000044 -:1010B000ED3D0000ED3D0000ED3D0000ED3D000088 -:1010C00000F002F813F0B9FF0CA030C8083824185B -:1010D0002D18A246671EAB4654465D46AC4201D170 -:1010E00013F0ABFF7E460F3E0FCCB64601263342CF -:1010F00000D0FB1AA246AB463343184744410100D7 -:1011000074410100103A02D378C878C1FAD8520766 -:1011100001D330C830C101D504680C6070470000AD -:101120000023002400250026103A01D378C1FBD803 -:10113000520700D330C100D50B6070471FB5C046C1 -:10114000C04613F01BFF04B00FB41FBD82690249F3 -:1011500081610248104470476111000001000000E5 -:1011600001B41EB400B510F02FFC01B401988646FE -:1011700001BC01B01EBD0000F0B4404649465246D5 -:101180005B460FB402A0013001B50648004700BF1E -:1011900001BC86460FBC8046894692469B46F0BC01 -:1011A00070470000C1100000401E00BF00BF00BF1C -:1011B00000BF00BF00BF00BF00BF00BF00BF00BF37 -:1011C00000BFF1D17047000070B505460C461646C9 -:1011D00002E00FCC0FC5103E102EFAD2082E02D31B -:1011E00003CC03C5083E042E07D301CC01C5361F2E -:1011F00003E021782970641C6D1C761EF9D270BD45 -:101200008307FF22DB0E9A408907090E99400028C8 -:101210000BDA0007000F0838830828489B001B18CA -:10122000D86990430843D8617047830824489B00DD -:101230001B181868904308431860704710B504469F -:1012400000210120FFF7DCFF00211820FFF7D8FF65 -:1012500000210B20FFF7D4FF02211920FFF7D0FF58 -:1012600002210D20FFF7CCFF02210E20FFF7C8FF5F -:1012700002210F20FFF7C4FF0221C81FFFF7C0FFA4 -:1012800003211620FFF7BCFF03211520FFF7B8FF4D -:10129000204600F019F8002010BD4F210180704752 -:1012A00010B500F03AF810BD0648704710B500F0D0 -:1012B00035F810BD704770477047000000ED00E042 -:1012C00000E400E003F900C330B50446374D95B0A3 -:1012D00007202870A81CFFF7E0FF5920A880344899 -:1012E00001F020FC0546072000F0DCF929462F48D4 -:1012F00000F08CFA641E072C0AD830216846017071 -:10130000847001F0DDFA002802D009A800F0DDFCAD -:10131000284601F083FE15B030BD7047F8B5234E66 -:101320000446B61E307801270D46002807D0204617 -:1013300060380B2808D8204601F096FB2BE0602C83 -:10134000F9D01C480860F8BD20466C38032803D843 -:10135000204601F0CBFB1EE0204670381F2803D842 -:10136000204600F037F816E0204690380F2803D8C2 -:10137000204600F0BBF80EE02046A0380F2803D826 -:10138000204600F023F906E02046B0380F2804D8A4 -:10139000204600F000F9286000E02F60602CD2D1D8 -:1013A00028680028CFD13770F8BD00001A0000204F -:1013B000C33300000130000070477047704770472A -:1013C000704770477047704710B5012801D100F091 -:1013D00042FA10BD10B57038030013F0EBFE150C87 -:1013E00012161E22252C33383D41454950555C6468 -:1013F0006C747B8085004A680878114603F081FF91 -:1014000010BD086803F0F9FF10BD0C790B7B8A68EA -:101410000868214604F005F810BD086804F07EF85D -:1014200010BD03F05BFC10BD08884A6880B211460D -:1014300004F043FA10BD0A790888114680B204F01E -:1014400091FA10BD087840B204F09CFA10BD0888EB -:1014500080B204F0B8FA10BD086804F0C7FA10BDF5 -:10146000086804F0DFFA10BD086804F00AFB10BD3C -:10147000088982B209C9194604F034FB10BD05C9B8 -:10148000114604F082FB10BD08884A6880B21146FC -:1014900004F0A0FB10BD0B7908888A6880B2194659 -:1014A00004F0FDFB10BD0B7908888A6880B21946EC -:1014B00004F0B3FC10BD08884B688A6880B21946F6 -:1014C00004F0F3FC10BD08884A6880B2114604F0AD -:1014D0003EFD10BD088880B204F056FD10BD08889E -:1014E00080B204F076FD10BD012010BD10B590381B -:1014F000030013F05FFE09060F161D242C363F462D -:101500004E0088888A6883B20888194680B205F040 -:1015100093F910BD08884A6880B2114605F0E9F9D0 -:1015200010BD08884A6880B2114605F02DFA10BD3A -:1015300008884A6880B2114605F063FA10BD088831 -:101540004B688A6880B2194605F094FA10BD088984 -:1015500082B2888883B20888194680B205F0C9FA39 -:1015600010BD08894B6882B20888194680B205F020 -:10157000FEFA10BD08884A6880B2114605F02EFBBD -:1015800010BD888882B20888114680B205F0C2FB7F -:1015900010BD012010BD10B5B02805D0B12808D06D -:1015A000B2280BD0012010BD088880B205F0A6FE3D -:1015B00010BD088880B205F0D1FE10BD08884B68C8 -:1015C0008A6880B2194605F0DAFE10BD10B5A03861 -:1015D000030013F0EFFD0B070E172028323C434D9C -:1015E000545D65004B6808788A68194607F017FA59 -:1015F00010BD88888A6883B20888194680B207F0CF -:1016000023FA10BD08884C68CB688A6880B22146EE -:1016100007F02AFA10BD08884B688A6880B219461C -:1016200007F044FA10BD8888CB6884B208888A68BD -:1016300080B2214607F064FA10BD8888CB6884B276 -:1016400008888A6880B2214607F089FA10BD0888A8 -:101650004A6880B2114607F0BDFA10BD088982B20F -:10166000888883B20888194680B207F0BDFA10BD99 -:1016700008884A6880B2114607F0DAFA10BD088976 -:101680004B6882B20888194680B207F057FB10BD3C -:1016900008884B688A6880B2194607F014FC10BDB0 -:1016A000012010BD10B507F0FAFC0FF0A7FF00F005 -:1016B00007F810F0F5F808F0F5F908F081F910BD19 -:1016C00001202B49C00308602A490020087003202C -:1016D0002949800288607047F8B5264D044628786D -:1016E000A04207D0002C05D0002803D023A14D2014 -:1016F00013F06FFC2878A04213D02C700325002330 -:101700002349AD021C48002C27D01B4A214E4032F1 -:10171000214F012C06D0022C13D018A16E2013F0FB -:1017200058FCF8BD0B6002230B604E6185601B49BD -:1017300011625762091D91621749091DD162456006 -:10174000F8BD0B6003230B604E610121C90281606B -:10175000134B9362D7624160F8BD0B600B608560EC -:10176000F8BD10B505A1772013F033FC10BD0000C3 -:1017700080E100E02000002000F501407372635C0E -:1017800068616C5F63636D5F6161722E630000006E -:1017900000F500407C01002000F0004000110040F6 -:1017A000488100401CB50446002069460870204668 -:1017B00009F0F6F86946204608F0B4FF002803D186 -:1017C000FBA1B62013F005FC01A9204608F009FF93 -:1017D000002803D1F6A1BB2013F0FBFB684600787C -:1017E0001CBD70B5F74D002428462C76203084713E -:1017F000C47113F0EDFC2846403804702030847327 -:10180000847484762C74AC7070BDEAE710B50C4615 -:10181000ED4982888A8042884A80007808700846AC -:101820000A38847008F0B3FEFFF7DBFF20460AF0A9 -:101830002FFAE44AE0321146383908461446813816 -:1018400009F020F92146E0480BF0C2FC09F09FF8AE -:1018500013F0BEFC10BD10B50120FFF7ADFD10BDAB -:10186000F8B509F083FDD84DD64C0A3D022802D0C8 -:10187000207C00287CD0207E0026102819D1A0785A -:10188000002803D0CAA1D14813F0A3FBCD48E83803 -:10189000817A89070DD50146267160398989E180F1 -:1018A000C17A217281896181C089A0810120A070E3 -:1018B0002676C44F203FB87C002859D1C4486946D9 -:1018C000808908F02FFF002805D0694668780978DC -:1018D0004018687004E0BD48B5A11D3013F079FBD5 -:1018E000207C002838D0BA488189FF300930406D0B -:1018F0008089814204D0B548ADA1223013F069FB44 -:10190000B348808908F0B4FF002804D1AF48A8A1EB -:10191000283013F05EFB09F022F800281CD0AC48F8 -:101920008089FFF73FFF697840186870A548403804 -:10193000416D20318A7C012A0DD1A54A3E779289DA -:10194000C287C87C20700120B876207E102801D084 -:10195000282800D1267626746978002908D09C486A -:101960008289FF300930C28601870120B8746E7009 -:1019700009F0CCFC002805D1207C002802D0A878F2 -:1019800001F0F4F8F8BDF8B50F460446FFF768FF1C -:101990008C4D403D28788B4E002813D0002F10D15D -:1019A000307E002804D0FF2081A1C63013F011FB47 -:1019B0002C22A91C204613F06FF90E202070002065 -:1019C00028708FE07F4D203DA87B002818D0002F85 -:1019D000F7D1307E102808D0282806D0002804D05F -:1019E000FF2073A1D23013F0F4FA0120E070E87BFD -:1019F000A070287C60700F2020700020A87371E018 -:101A00000121204608F0E4FF002807D0307C0028A0 -:101A100051D13946204608F0DBFFF8BDA97C694862 -:101A20000C38009068480A38002913D0017805293D -:101A300010D2002F56D1491C0170002666700D206F -:101A40002070012028750622A01C009913F024F9AB -:101A5000AE7447E05C4800210A380170B078002875 -:101A600014D0002F3ED1307E002803D050A1594819 -:101A700013F0AFFA002565700120524920700A2248 -:101A8000091DA01C13F008F9B5702BE0394620465B -:101A90000BF008FB002825D1A87C002805D0002FDA -:101AA00020D149480A380178C5E7A87E002802D02D -:101AB000307C002801D00020F8BD002F12D1307EEC -:101AC000002804D08F203AA1800013F082FA00266B -:101AD00066700A203B4920700622091FA01C13F0E3 -:101AE000DBF8AE760120F8BD10B53648017E00293E -:101AF00008D1007C012805D001210020FFF743FF19 -:101B0000002801D0072010BD012010BD10B5012410 -:101B10000AF006F90443FFF7E7FF044308F038FF33 -:101B200001462143084610BDF8B51D4614460E4631 -:101B300008F077FD002807D0684608F07DFD0028F2 -:101B400003D0002C07D101E00120F8BD9B2018A193 -:101B5000800013F03EFA08F01BFDA04204D21D489D -:101B600013A1583013F035FA009808F089F931467E -:101B7000009808F097F9E2B22946009808F04EFB69 -:101B800008F06CFD002804D19F2009A1800013F00B -:101B900020FA08F0FFFE0E4800244030417C002966 -:101BA00002D044740AF0A7F90948C480CCE70000C9 -:101BB0007372635C6C6C5F6374726C2E73302E6333 -:101BC00000000000200300202C00002082060000FE -:101BD000D80100201502000010B50179002908D0B5 -:101BE00001290BD0FF20FE49043013F0F2F9002048 -:101BF00010BD831D42880488022103E042880488C6 -:101C0000831D01212046FFF78FFF10BDF8B51F4649 -:101C100015460E46044609F0A9FB022803D0F148F8 -:101C2000007C00281FD0F0488089208008F020FE2A -:101C3000002803D1EA49ED4813F0CBF905246846A2 -:101C400008F021FE00280ED0009808F063F93070EB -:101C5000022809D0012807D008F055FE641E24068A -:101C6000240EECD10020F8BD3946009808F0EEFAB9 -:101C70002880002804D1AF20D949800013F0A9F9A9 -:101C800008F041FE002804D1D848D549193013F096 -:101C9000A0F90120F8BD38B50446831D821C6946B1 -:101CA000FFF7B4FF00280DD000206071684600786F -:101CB000012808D0022806D0FF20C949253013F09A -:101CC00088F9012038BD2071FBE700215BE670B583 -:101CD000C44C0546403C2078002803D1C148007E12 -:101CE000002804D0C120BE49C00013F072F9287842 -:101CF00008F085FF28780BF0C1FB0020207101203F -:101D000060713921E170207070BD70B5B54D044629 -:101D1000403D2878002803D1B248007E002804D036 -:101D20005F20AF49000113F054F9AF4E2188B0890C -:101D3000884203D109F01AFB022807D0022028713B -:101D4000012068713821E970287070BD7F2070769D -:101D5000A548E17820304174A17801740020EEE7B5 -:101D600010B5A04C403C207800280BD19D48007E47 -:101D7000002807D109F0FAFA032803D009F0FAFA8B -:101D8000032804D199489649653013F022F9954902 -:101D900000202031C8712071012060713A21E1706A -:101DA000207010BD70B58F4C0646403C207800284E -:101DB0000BD18C48007E002807D109F0D7FA032800 -:101DC00003D009F0D7FA032804D1884884497B302E -:101DD00013F0FFF8834D2035E87908280CD2E87914 -:101DE0001022000100196830314600F025FEE87924 -:101DF000401CE871002000E0072020710120607184 -:101E00003B21E170207070BDF8B5764D0446403D31 -:101E10002878002803D17348007E002803D0704939 -:101E2000734813F0D6F8704F2188B889884203D1DF -:101E300009F09CFA022801D0022022E03E8C64883E -:101E40007200788CF98B521C944217D3694A514323 -:101E50009200504312F09AFF401EFF2180B2F531EC -:101E6000884200D90846844200D22046711C401C9A -:101E700012F08CFF761C7043401E86B2FE85EE8009 -:101E800000202871012068713C21E9702870F8BD9C -:101E9000F8B5544C0546403C2078002803D1514801 -:101EA000007E002804D052484D492C3813F091F898 -:101EB000A878002801D0012804D1A888FF21F53195 -:101EC000884204D959204649000113F082F8464E51 -:101ED0002988B089884203D109F048FA022807D03E -:101EE00002202071012060713621E1702070F8BD60 -:101EF0003D48002720308772A988B18501213176BD -:101F0000A978012900D00021817237484030407CF7 -:101F1000002801D009F0EFFF2771E3E770B5314CDD -:101F20000546403C2078002807D12E48007E002836 -:101F300003D109F01BFA002804D02D482849533852 -:101F400013F047F8287809F0EEFE002020710120F8 -:101F500060713021E170207070BD70B5214C054674 -:101F6000403C2078002803D11E48007E002804D081 -:101F70001F481B495F3013F02CF8287800280BD03D -:101F8000012809D0022807D06878402804D31848CF -:101F90001349663013F01DF8284609F0DEF90028D1 -:101FA00001D0002000E00C2020710120607134215C -:101FB000E170207070BD70B50A4C0546403C207839 -:101FC000002807D10748007E002803D109F0CEF988 -:101FD000002804D057200249000112F0FAFF0BE05C -:101FE000B01B000020030020D8010020AA0200003E -:101FF000B6050000C40900002978002913D00A2979 -:1020000011D014290FD01E290DD028290BD0322928 -:1020100009D04B2907D0642905D0FF2903D0FE49F8 -:10202000FE4812F0D6FF284609F0FCFE0020207181 -:10203000012060713321E170207070BD70B5F84CE3 -:1020400006462078251D002804D120464030007E19 -:10205000002804D05520F049000112F0BAFF3146A3 -:10206000002008F0A1FD2870002804D10622314686 -:10207000EC4812F011FE012060713221E1702070F5 -:1020800070BD70B5E64C05462078002804D1204686 -:102090004030007E002804D0A720DF49C00012F0A5 -:1020A00098FF00216956042914D0002912D0081D78 -:1020B00010D0001D0ED0001D0CD0001D0AD0001D38 -:1020C00008D00A3006D0283104D0D448D249443848 -:1020D00012F07FFFD448297801700120607131210E -:1020E000E170207070BD10B5CD4C2078002804D16F -:1020F00020464030007E002803D0C749CB4812F06C -:1021000068FF08F045FAE08008F00AFB2072002022 -:102110002071012060710521E170207010BDF8B5BB -:10212000BF4C07462034A07B25462035002805D12A -:10213000287E002802D1A878002804D0B748B649E4 -:10214000703812F046FF09F011F91026022822D14A -:10215000B7483988808988421DD1B1494839084635 -:102160000A7F6038807A002A03D080070CD40C20C4 -:102170000CE0800708D406200877AD484030407C4A -:10218000002801D009F0B7FE2E760020E0732674F7 -:102190000120A073F8BD0220F8E710B5A04C20780C -:1021A000002804D120464030007E002804D09B48FF -:1021B0009949823812F00DFF002020710E20A07086 -:1021C0000F20E070FF20A0710020C04320819548BF -:1021D000C01D0178A1728188A1814088E081012021 -:1021E0006071207010BD10B58D4C2078002804D18E -:1021F00020464030007E002803D087498D4812F0E9 -:10220000E8FE0821A01D0FF095FA002020710120A2 -:1022100060712B21E170207010BD70B5804D0446B7 -:102220002878002804D128464030007E002804D0B9 -:102230007A487949B13012F0CCFE7D48102221460F -:10224000303800F0F9FB7A481022A118203800F04D -:10225000F3FB774830380FF074FB754910221039C2 -:102260002C46A81D00F0E8FB002020710E20A07075 -:102270002A20E07001206071207070BDF8B5684CB4 -:1022800005462034A07B26462036002802D1307E29 -:10229000002804D067486049E53012F09AFEA9781A -:1022A000052912D0132910D014290ED015290CD0CD -:1022B0001A290AD0292908D03D2906D03B2904D063 -:1022C0005C485549ED3012F084FE28885A4988420E -:1022D00004D958485049F63012F07BFE09F046F810 -:1022E0000C212827022809D151482A888089904248 -:1022F00015D14B484838027E002A01D0E17310E026 -:10230000A97841760121017637760020E0734848AC -:102310004030407C002804D009F0EDFD01E00220AF -:10232000E07327740120A073F8BDF8B53C4F064652 -:1023300038783D1D002804D138464030007E002802 -:1023400004D089203449C00012F043FE31460120F8 -:1023500008F02AFC01242870002807D13048062202 -:1023600060303146054612F097FCAC717C71172045 -:10237000F8703C70F8BDF0B52B4F85B0403F3D7A0A -:10238000064627480078002804D13846A038007E49 -:10239000002804D0D3202049800012F01AFE3078A3 -:1023A000002806D0012804D022481B492C3812F0FE -:1023B00010FE082D4CD21C4820380190C46930789A -:1023C00000283FD0012804D01A4813491E3812F0C3 -:1023D00000FE294608310120884004430120A8401E -:1023E00020430090B1790E4C0802727969000919F6 -:1023F0001043FF3101318881B01C12F0AEFC7178BE -:1024000000020843A9000919C031C862387A401C8B -:1024100038720199009811E0B01B00007E050000A1 -:10242000E00200202500002000040020E706000054 -:10243000D801002079030000FF0E0000C8610020D1 -:10244000207108E029460831012088408443C5E70F -:10245000FE48072101710121FC480B224171C27025 -:10246000017005B0F0BD10B5F84C2078002804D1FB -:1024700020464030007E002803D0F549F54812F090 -:10248000A8FD12F0A5FE00202071012060710A2134 -:10249000E170207010BD10B509F0DDFB002804D0FC -:1024A000EC48EB49583812F094FD08F06FFA08F048 -:1024B00052F80AF07EFE002804D0BD20E4498000D6 -:1024C00012F087FD08F0B3FA002804D05F20E0493D -:1024D000C00012F07EFD12F07BFEDF480024047085 -:1024E000FFF77FF9D9480121047141710222C270BE -:1024F000017010BD70B5D54D04462878002804D170 -:1025000028464030007E002804D0F320D0498000C7 -:1025100012F05FFD20781F2801D8601C04D1CD483F -:10252000CB498F3012F055FD002028712078611CB6 -:1025300008F054FB012068712021E970287070BDFB -:10254000F8B5C24C0646207825464035002802D111 -:10255000287E002804D0BF48BD499C3012F039FDC8 -:102560003078012806D0002804D0BA48B8499D30F8 -:1025700012F02FFD012060710C20207130780027AF -:10258000B64E012808D008F0F1FE032867D008F005 -:10259000F1FE032871D076E008F0E8FE002803D1B0 -:1025A00008F0E8FE002804D008F0E0FE02283DD044 -:1025B00069E008F07EFA002865D0287C002862D106 -:1025C000A64802210C300FF03EF8002806D00F215B -:1025D000B089090212F0DAFBB18100E0B781012273 -:1025E00003219E4807F05AFE9C4808F006FCB0897B -:1025F00007F0D0FF002804D196489549B83012F072 -:10260000E8FCB089002108F0C9F9002804D09148FD -:102610008F49BC3012F0DDFC297F688B09F087FB05 -:1026200000282FD08B488A49C03015E008F0A2FE60 -:10263000002828D1287F002825D0012823D008F0A1 -:1026400038FA00281FD0297F688B09F070FB00281A -:1026500018D080487E49D33012F0BBFC12E0002035 -:1026600009F098FA00280ED12771287C00280AD199 -:10267000B089FFF797F806E0FFE7002009F08AFA33 -:10268000002800D127711B20E07001202070F8BDC8 -:1026900070B56E4D04462878002804D12846403095 -:1026A000007E002804D06B486949803012F091FC0C -:1026B00020781F2801D8601C04D166486449813005 -:1026C00012F087FC002028712078611C08F09AFA2B -:1026D000012068711A21E970287070BDF8B55B4D52 -:1026E000044628780C272E46403600280AD1307E32 -:1026F000002807D108F03AFE032803D008F03AFE7C -:10270000032804D153485249473012F062FC6079E3 -:10271000002801D001282FD1A079002801D001285C -:102720002AD1A07B002805D0012803D0022801D09F -:10273000032821D1607B40071ED0618801208003DF -:10274000814202D82288824201D920790CE0207986 -:10275000002804D0022805D0032803D004E0202953 -:1027600004D209E0A02A01D2012805D1208888429C -:1027700007D92079012804D0364835495C3012F059 -:1027800028FC20887083207930776079002802D077 -:10279000012803D00CE0324A002105E02B4A6032C8 -:1027A0009079002804D00121204608F086F90746D8 -:1027B00001202F7168711821E9702870F8BD70B57B -:1027C000224C05462078002804D120464030007E67 -:1027D000002803D01E49234812F0FBFB08F0C6FD79 -:1027E0000C2102280ED11D482A8883899A4219D1CA -:1027F0000246C032137F002B04D1807E0E2803D006 -:102800000F2801D0217103E00520107700202071EE -:102810000E20A0702E20E0702888E08001206071DA -:10282000207070BD0220F2E770B5084C0546207894 -:10283000002804D120464030007E002804D00948FA -:1028400003492C3812F0C5FB0EE00000E002002026 -:10285000B01B00003E03000000040020D80100204F -:1028600025000020D104000008F080FD0C21022882 -:102870000ED178482A8883899A421FD10646C036ED -:10288000327F002A04D1807E0E2803D00F2801D089 -:10289000217109E06F481022A91CEA3012F0FCF9FE -:1028A00004203077002020710E20A0702D20E070D1 -:1028B0002888E08001206071207070BD0220F2E75E -:1028C00010B501780B0012F075FC3D8787388787BB -:1028D00058878787873B3E878787515487878787B5 -:1028E00087874228872C3087878787348787878721 -:1028F00087878746874A4E872024876B5B5F63679D -:10290000876F877E827B77738700801CFFF78CFF41 -:1029100060E0801CFFF753FF5CE0801CFFF7DEFEE9 -:1029200058E0801CFFF7B4FE54E0801CFFF708FE5F -:1029300050E0801CFFF7DEFD4CE0FFF7ACFD49E006 -:10294000FFF791FD46E0801CFFF715FD42E0801C7B -:10295000FFF7EBFC3EE0801CFFF790FC3AE0801CA8 -:10296000FFF75BFC36E0FFF73EFC33E0FFF715FCBA -:1029700030E0801CFFF7D3FB2CE0FFF7B4FB29E02D -:10298000801CFFF77EFB25E0801CFFF757FB21E052 -:10299000801CFFF710FB1DE0801CFFF7DEFA19E03A -:1029A000801CFFF7BBFA15E0801CFFF771FA11E0FD -:1029B000801CFFF729FA0DE0801CFFF7F3F909E00E -:1029C000FFF7CEF906E0801CFFF79FF902E0801CBC -:1029D000FFF77DF9012010BD002010BD10B51E4984 -:1029E0001E4812F0F6FA10BD70B51D4A01241146BA -:1029F000184D4031030012F0DDFB05191C1C0419B1 -:102A00001C0001220021134807F048FC1448002153 -:102A1000483801774177C03809F005FA002804D01A -:102A20000E480D49D33012F0D4FA70BD0C745565C0 -:102A300070BD09490B48F6E730B5134606E0CC18DF -:102A4000203CE47FD51A44555B1EDBB2002BF6D147 -:102A500030BD0000D8010020B01B0000410600007E -:102A6000E00200204707000010B56038030012F0B4 -:102A7000A1FB0A060A0F13181F262A31363B0868E5 -:102A800000F093FD10BD05C9114600F0ADFD10BD6D -:102A9000086800F04CFE10BD05C9114600F054FE58 -:102AA00010BD4B6808788A68194600F065FE10BDB5 -:102AB0004B688A680868194600F07FFE10BD0868F8 -:102AC00000F09AFE10BD08884A6880B2114600F0F6 -:102AD000EAFE10BD05C9114600F00AFF10BD05C988 -:102AE000114600F01DFF10BD012010BD10B56C286F -:102AF00001D0012010BD087800F0B8FE10BD000024 -:102B000001203F49400608603E4908603E490A6886 -:102B1000FF231B029A4383121A430A603849803903 -:102B20000860704710B502460420384904E0C3002D -:102B30005B181B79002B0AD00346401EC0B2002B45 -:102B4000F5D133A1432012F044FAFF2010BDC30099 -:102B5000CA50002259184A718A7101220A7110BDA7 -:102B60002A4A0021C00080180171704710B5044640 -:102B7000042803D326A1522012F02BFA2348E100A7 -:102B80000C182079012803D021A1532012F021FA3A -:102B90006079A179401CC0B2814200D060710120EF -:102BA000174940068031086010BD70B516480068AE -:102BB0000004800F022803D015A1692012F009FA41 -:102BC000124E194C03252078C10088190279012A78 -:102BD00007D1427983799A4203D042798271705841 -:102BE00080472078401CC0B22070042801D3002008 -:102BF000207028466D1EEDB20028E4D170BD0000A3 -:102C000080E100E080E200E018E400E02C12002007 -:102C10007372635C736F635F7369676E616C6C6919 -:102C20006E672E63000000003C00002010B5EFF33B -:102C30001080C407E40F72B6D6484178491C417031 -:102C40004078012801D10FF065F9002C00D162B65F -:102C500010BD70B5CF4CE07800280AD10125E57091 -:102C6000FFF7E4FF0FF05EF9002804D000200FF01A -:102C700031F9002070BDC84865714560F9E770B54D -:102C8000EFF31080C507ED0F72B6C24C60780028D4 -:102C900003D1C2A18F2012F09CF96078401E6070B1 -:102CA0006078002801D10FF039F9002D00D162B60B -:102CB00070BD10B5B748C178002904D0002141711A -:102CC000C170FFF7DCFF002010BD10B504460FF007 -:102CD00029F9B049C978084000D0012020600020BF -:102CE00010BDF8B50246AB4C0026A67108200421A1 -:102CF00001251027130012F05DFA0D080A0C0E10C2 -:102D00001214161E262123252800257122E00220F8 -:102D100001E021711EE020711CE027711AE02020E3 -:102D2000F9E7012616E0FFF781FF0FF0FBF8002816 -:102D3000FBD002260EE02171A5710BE02771FBE7A5 -:102D4000202000E040202071F6E7FF2093A17E3094 -:102D500012F03FF90FF0F2F8002809D00FF0F4F864 -:102D6000B04205D130460FF0F2F80028FAD024E046 -:102D700001208007C5608D4A002151608C4A966110 -:102D8000854B02225A6085608A4803690569DB43E6 -:102D9000DB06DB175B1C10273D430561834D00E01C -:102DA00020BF6F68002FFBD0002B03D107691023D1 -:102DB0009F430761784882606960A07900280CD041 -:102DC0000FF0B0F805460FF00DF87B4A002D02D049 -:102DD000A260E06001E0E260A060002E01D100F09E -:102DE000B1F8F8BD10B504460FF0A2F8002805D0E0 -:102DF00068490120C8704A78521C4A702046FFF783 -:102E000070FF10BDF8B5694FB8680025012802D1E0 -:102E1000BD600FF05FF87868012800D17D603868E8 -:102E200001265C4C012814D13D606079002803D054 -:102E300000200FF04FF865712078002809D00FF0BE -:102E400071F8002805D05948C0388663000606612D -:102E5000A670386901282CD13D6100F068F8012086 -:102E600080074661A079002815D00FF05BF800902C -:102E70000EF0B8FF0099002901D0E16800E0A168D8 -:102E8000411A022901DA8A1C13DC0099002901D0B9 -:102E9000E06000E0A060FFF7C9FE0FF043F80028F3 -:102EA00006D04248C038866300060661A67000E07E -:102EB0002670F868012819D100F039F800F037F8C9 -:102EC00000F035F8A078002804D1FF2033A10530A8 -:102ED00012F07FF8FD60A5702570FFF7D0FE0EF0B0 -:102EE000F8FA002802D03148C038C663F8BD10B5E2 -:102EF000284CE078002801D10FF010F8012081075C -:102F0000886100F014F8A07800280BD0274CE06806 -:102F1000002803D10FF01BF80028F8D10020E06052 -:102F200000F005F800201C49C043886010BD08B5BA -:102F30005020694608806A461088411E118000288A -:102F4000F9D108BDF8B51448192787601749002042 -:102F50000860C8600EF0E6FFBD0701240D4E002892 -:102F600005D01248C03884632C61B47000E034701E -:102F7000FFF75CFE084847600D4930798863FFF72A -:102F8000D6FFAC61FFF7D3FF0849002008616C61F0 -:102F9000F8BD000040000020000300407372635C35 -:102FA000736F635F636C6F636B2E6300000100409F -:102FB0000005004000ED00E0FFFFFF7F10B510F0BE -:102FC00064F810BD00200449C8630120012181403C -:102FD000024A116000BF7047C01F004080E200E05D -:102FE00010B504460BF095F820460CF0AAF810BD79 -:102FF0007047704770477047704770477047704719 -:1030000010FFFFFFDBE5B151006001004F00FFFF43 -:1030100003B40148019001BD09000020FE49487039 -:10302000704710B5030012F0C5F8080E050E080829 -:103030000B0B0E1104F07DF810BDFFF7D1FF10BD92 -:103040000DF0E8FF10BD01F095FE10BDFF20F3A1CB -:10305000713011F0BEFF10BD7FB5F44905464868D8 -:103060008968082301910090F14A1946F1480EF051 -:103070008BFD0024F0480EF0A5FD641CE4B2082C82 -:10308000F8D3EB490320803140020CF02FF90028DF -:1030900003D0E2A1962011F09CFF1E220221E748F6 -:1030A0000AF0E7FCE5481E22032110300BF05BFA22 -:1030B000E2480722342174300AF034FCDF484C2106 -:1030C000283011F048FEDD496A46743108464C3814 -:1030D0000164FF317B31416401211172039002F0E0 -:1030E000B4F802A80CF050FC002803D0CBA1AA2011 -:1030F00011F06FFFCF4802222421A8380AF012FCF9 -:10310000CC4802222C215C380AF00CFCCC490B2064 -:103110000EF082F8002803D0C0A1B72011F059FFAB -:1031200003F0F4FF03F0F8F904F05AFE6B460022B6 -:103130000821C4A001F070FF002803D0B7A1BE2071 -:1031400011F047FF284605F071F9002803D0B3A11C -:10315000C02011F03EFF8521C900BD4811F0FBFDE4 -:10316000BB49B24A0020135C0C18401CC0B2E3708B -:103170000428F8D3A849002048608870C8707FBD33 -:1031800070B5B44E0546706A94B00C46401C04D12C -:10319000B06AC0430004000C0BD0306AC007C00FF7 -:1031A0002870706A11F0EAFDB06A2071000A60713F -:1031B00013E02B206946087009A968460AF0F8FB5D -:1031C000002803D095A1E42011F003FF012028700E -:1031D00006220AA9204611F05FFD2878002803D0B6 -:1031E0006079C0210843607114B070BDF0B5994C8E -:1031F0000646206895B00D463746401C0837002823 -:1032000008D16068401C05D1A068401C02D1E0686C -:10321000401C11D02068314611F0B0FD6068311DAE -:1032200011F0ACFDA068394611F0A8FDE068314608 -:103230000C3111F0A3FD25E02B206946087009A987 -:1032400068460AF0B5FB002804D0FF2073A10E30B9 -:1032500011F0BFFE08220AA9304611F01DFD2B20F7 -:103260006946087009A968460AF0A2FB002804D044 -:10327000FF206AA1153011F0ACFE08220AA93846D9 -:1032800011F00AFD20692E46401C0836002808D19E -:103290006069401C05D1A069401C02D1E069401C56 -:1032A00012D02069294611F069FD6069291D11F0CD -:1032B00065FDA069314611F061FDE06929460C31D8 -:1032C00011F05CFD15B0F0BD2B246846047009A90F -:1032D0000AF06EFB002804D0FF2050A1333011F01B -:1032E00078FE082209AF0AA9284611F0D5FC6846E5 -:1032F000047009A90AF05CFB002804D0FF2047A154 -:103300003A3011F066FE0822391D304611F0C4FC37 -:10331000D8E710B5002108460EF00CFD0021012071 -:103320000EF008FD002102200EF004FD0021032014 -:103330000EF000FD002104200EF0FCFC0021052011 -:103340000EF0F8FC10BD10B5414CA0780B2804D34A -:10335000FF2032A18A3011F03CFE207860214843E2 -:1033600000190830002101704178E722C908C9001E -:10337000C91C11404170284A0121917010BD70B5DF -:10338000254CA07800280ED0314800250178491C32 -:10339000C9B201700B2900D105708178491C817078 -:1033A0000EF093FDA57070BD70B51B4C05466068AE -:1033B000002804D0FF2019A1B33011F00AFE656087 -:1033C00070BD70B5144E224DFFF7BDFF7168044605 -:1033D000002907D06022FDF7F7FEFFF7D0FF00209D -:1033E0007060F1E72879002876D012485C380AF03E -:1033F000A9FA6060002804D1FF2008A1D13011F0A3 -:10340000E8FD60680AF0FCFA002831D0204600F0A0 -:103410006FFF607801071FE0340000207372635C67 -:10342000686F73745F636F72652E6300E051010013 -:10343000040400200C12002023300000840A002025 -:10344000B41000206E524635313832320000000090 -:103450008C0C00208000001007D5C008C000401C64 -:1034600060702879401E287127E0F74861682AE0DB -:10347000F54861680AF06FFA687900282CD0F248A4 -:103480004C380AF05FFA6060002804D1FF20EF4951 -:10349000F43011F09EFD60680AF0B6FA002816D0EC -:1034A000204603F085FE6078010709D5C008C000FA -:1034B000801C60706879401E6871FFF760FF83E7C9 -:1034C000E14861684C380AF046FA7DE704E0DE48DE -:1034D00061684C380AF03FFA70BDF7B505460078D0 -:1034E000002700090C463E46062803D0D749D84895 -:1034F00011F06FFD287A00280ED0012814D0D4488E -:10350000D249213011F065FD0298002C068001D0CF -:10351000278066800020FEBD02270926002C0ED0E1 -:10352000A889A080A87B08E003271426002C06D0D9 -:103530002869E060A88A2082287B2072E4E702984C -:103540000680E7E770B50E4600211C461980154637 -:10355000030011F02FFE0723050B1711231D230075 -:1035600022462946304603F0EFFD70BD224629462B -:10357000304601F078F970BD22462946304604F005 -:103580002AFB70BD22462946304602F0F9FF70BD85 -:10359000224629463046FFF7A0FF70BD9720AB4971 -:1035A000800011F016FD032070BD10B5A94C2178E4 -:1035B000002901D0082010BDFFF74EFD012020702A -:1035C000002010BD0146A04810B54C380AF0C3F9E0 -:1035D000A1494879401CC0B24871012803D19D48D7 -:1035E0004078FFF7C3FA10BDF8B50546072040073D -:1035F0000F460A18012189038A4209D2002D02D000 -:103600002818884204D2E81C80088000A84201D013 -:103610001020F8BD90488178002911D03988009198 -:103620004178602251430C18083420783B4600074B -:10363000000F00222146FFF785FF060004D015E0A9 -:10364000002038800520F8BD002D13D0398800985F -:10365000814201D90C260DE020783B460007000F7F -:103660002A462146FFF76EFF060005D00C2E01D03A -:10367000002038803046F8BD774D6878401CC0B2D5 -:1036800068700B2801D100206870A878401EA870CF -:1036900061784807400F022810D00128EAD16A4813 -:1036A00061680AF058F92879401CC0B228710128D5 -:1036B000E0D168484078FFF759FADBE7C806D9D46B -:1036C0006068FFF77FFFD5E770B50446634816468C -:1036D0000D46814204D15E485C49C53011F079FC49 -:1036E000012E05D05A485949D53011F072FC70BDF1 -:1036F00058480121C1706620207000202072A581E9 -:10370000A17370BD70B516460D46040001D1FFF7D8 -:103710001AFE662101700121017229680161A988E0 -:1037200081820673002C01D1FFF729FE70BD0721AD -:103730004907012241189203914201D3102070479A -:103740000721017000207047454A10B590420ED302 -:1037500001239B04C21A434B9A4208D3424B98421E -:1037600005D2072252078A18DB139A4201D3102090 -:1037700010BD0DF08AFD10BD394B10B599420ED326 -:1037800001239B04374CCB1AA34208D3364B9942F2 -:1037900005D2E3020124D318A403A34201D31020CD -:1037A00010BD022803D0102801D0092010BD0DF053 -:1037B00092FD0028FAD0052010BD70B5284B984224 -:1037C00012D301239B04274CC31AA3420CD3264BCC -:1037D000984209D2E4020D19DB139D4204D2002A5B -:1037E00004D014199C4201D3102070BD0DF099FD36 -:1037F0000028FAD0072070BD10B504460720400706 -:1038000001212018890394B0884202D3102014B0FB -:1038100010BD01F06AFD002801D01120F7E70F204C -:1038200008A9087369460BA80AF0C2F80028EED16F -:103830006846007A207068464089608068468089C2 -:10384000A0800020E3E70000B01100201C3400003D -:1038500015020000340000208C0C0020FFFF000047 -:10386000006001000000FC1F0040002010B594B073 -:10387000044601F03AFD002801D01120C7E7002CD2 -:1038800001D00720C3E7392168460170002181700B -:1038900009A90AF08DF8002803D02B492B4811F014 -:1038A00098FB0020B3E770B5294C0846E178002961 -:1038B00013D000280FD007225207012385189B033D -:1038C0009D4203D20568AA189A4201D3102070BD08 -:1038D0008288002A03D0012903D0082070BD092066 -:1038E00070BD04F0E1FA0028FAD10021E17070BD4A -:1038F000184A10B5914208D301229204164B8A1A35 -:103900009A4202D3154A914201D3102010BD0246BB -:10391000203A1F2A02D801F01FFC10BD072010BD5D -:1039200007225207012310B58A189B039A4201D33C -:10393000102010BD0246203A1F2A02D801F068FC70 -:1039400010BD072010BD00001C34000079030000EA -:1039500034000020006001000000FC1F0040002037 -:103960008107C90E002808DA0007000F0838800810 -:103970002C4A80008018C06904E080082A4A800030 -:1039800080180068C8400006800F704710B50D20F1 -:10399000FFF7E6FFC4B20420C043FFF7E1FFC0B267 -:1039A000844203D021A11A2011F013FB10BD012184 -:1039B000234A48031060234B00221A60224A5160B8 -:1039C000224A1060224A11601D4980390860704700 -:1039D00001211B4A480310601D4A5160194A002109 -:1039E00011601A490860704710B516490868012827 -:1039F00004D00EA1562011F0ECFA10BD15488068D5 -:103A00000022C0B20A600DF0BBFE10BD10B50D481B -:103A100001680029FCD0FFF7E7FF01200B494003B4 -:103A2000086010BD00ED00E000E400E07372635C2C -:103A3000736F635F68616C5F726E672E6300000076 -:103A400080E100E000D1004000D3004080E200E0CF -:103A500000D0004000D5004030B40121BC48C9026C -:103A60000160CD1005604A030260BA4803681B027A -:103A70001B0A036004680023240A24020460B64879 -:103A80000468240A24020460B44801244460846069 -:103A9000B34C23606360A360B24B19601D601A6071 -:103AA000B14B19601A600121016030BC704710B43D -:103AB0000121A748CC0204600A0202600B060360E1 -:103AC000A64841608160A64900200860486088607F -:103AD000A44804600260036010BC70470121A14843 -:103AE000C9020160C91001607047002805D0012893 -:103AF00005D0022805D19D4870479D4870479D48D4 -:103B0000704710B59CA18B2011F063FA002010BD06 -:103B100070B500219F4CA04DA04A914B002808D0C1 -:103B200001281DD0022822D093A1B32011F051FA10 -:103B300070BD01200004A060A86011601960984B5E -:103B400042109A60974A9060814A0012106096482D -:103B5000016087480160954801609548017070BD1B -:103B600001204004A060A8605160596070BD012030 -:103B70008004A060A8609160996070BDF8B594461B -:103B8000844A854D00240127754E002808D001285D -:103B900036D0022844D078A1E82011F01AFAF8BDF6 -:103BA000891E0902090A01200004906034606860DF -:103BB0007A4A1160012B21D000217D4A7D4B517042 -:103BC00061463D31DC63DF637B4B5C6002249C60BB -:103BD00004241C61744B196074490F60614B891592 -:103BE0001960704B58606048016075487349C16046 -:103BF00086606B49600348601770F8BD0121DCE7FF -:103C000001205C4E40046F4F012B04D134605060A2 -:103C100068603960F8BD9060346068603960F8BDF4 -:103C20000120524E8004684F012BF4D1EEE7674823 -:103C30004068704770B54A4D28680026554C0128E9 -:103C400006D1A068C00303D501200004A0602E6047 -:103C50006868012809D1A068800306D501204004C6 -:103C6000A0606E6001200FF04CF9A868012809D10E -:103C7000A068400306D501208004A060AE60022049 -:103C80000FF03FF970BD10B549490878002818D0E9 -:103C90000120434AC0039060424A400090602C4A91 -:103CA00000121060404A00201060314A10603F4A04 -:103CB000106008704A78002A02D048700FF021F98D -:103CC00010BD0320FAE70120414900060860704753 -:103CD0000120244900060860704701203C49400546 -:103CE0000860704701201F4940050860704731494E -:103CF0000020C86388151B4908607047410A354A8F -:103D0000C005C00D5043801C5143400A081870473D -:103D100010B4314C430B63431B0C5C020C602D4C04 -:103D20006343C31A2D485C0258432A4B400D43435A -:103D3000E31A0124DB0324041B191B1613700A6801 -:103D40001018086010BC704710B50FF0B2F910BD24 -:103D500080E100E008E400E018E400E000B000408A -:103D600040B1004080E200E000E100E048B10040E6 -:103D70004081004044B100407372635C72656D5FC6 -:103D800068616C5F6576656E745F74696D65722ECF -:103D90006300000000B3004040B3004040B5004065 -:103DA00000F5014000830040408500400082004053 -:103DB00050000020C08F004000850040008000407F -:103DC00080F5014044B5004048B5004000B50040D2 -:103DD00000E200E0093D0000378600006F0C0100A2 -:103DE0000E4A12680C498A420AD118470B4A1268D7 -:103DF000094B9A4204D101B50DF0DDFD03BC8E469E -:103E0000074909680958084706480749054A064B03 -:103E10007047000000000000BEBAFECA1C0100206E -:103E200004000020901D0020901D002010B5FA4CC9 -:103E300094B02168087A002836D017206A4610709E -:103E400000A806220931023010F026FF09A96846B1 -:103E500009F0AEFD112825D02168C03189790629E5 -:103E600020D007291ED008291CD004291AD00929DE -:103E700018D00A2916D00B2914D0052912D00028F1 -:103E800003D0E6A1F32011F0A4F82168B82040582F -:103E900006221C30093110F0FFFE2068017A8030C4 -:103EA000806BC17614B010BD3220C7E770B5DA4D13 -:103EB000044629680300C03111F07CF90C077C0B23 -:103EC0001A212E3B48515C677080FF20D3A1093036 -:103ED0006EE0887901286DD009286BD0052869D05B -:103EE0000A2867D00B2865D0FF20CCA10E305FE0F8 -:103EF000887901285ED0FF20C8A1153058E0887964 -:103F0000062857D0072855D0082853D0052851D067 -:103F1000FF20C2A118304BE0887909284AD00A282E -:103F200048D00B2846D0042844D0FF20BBA11E3027 -:103F30003EE0887903283DD007283BD0082839D0B7 -:103F4000092837D0FF20B5A1243031E08879062830 -:103F500030D00A282ED0FF20B0A12A3028E088795E -:103F6000062827D0072825D00B2823D0FF20ABA177 -:103F70002E301DE0887906281CD00A281AD00B287C -:103F800018D0FF20A5A1333012E08879092811D07C -:103F90000A280FD0FF20A1A1383009E0887909282C -:103FA00008D00A2806D0082804D0FF209BA13C3066 -:103FB00011F00FF82868C030847170BDFF2097A100 -:103FC0004130F5E79449C9220968525CD206920F44 -:103FD00005D1A0318A8B824201D1887F70470020B1 -:103FE000704770B504461120207000218A4D617021 -:103FF0002968C031897A002908D003290ED0042904 -:1040000010D0FF2085A16A3010F0E3FF207800096E -:10401000012802D92868807D607070BD0007000FFC -:10402000203002E00007000F30302070EEE730B59E -:1040300003887E497E4C8B4202D09A1FA2421ED238 -:1040400042888A4202D0951FA54218D2934216D8C0 -:1040500083887D24E400A34211D8C088884205D01B -:10406000734D04460A3C2D1FAC4208D2884208D04A -:104070008A4206D05B1C5A43C000824201DD072001 -:1040800030BD002030BDFFB50022099B002802D0C2 -:10409000994205DC5CE0002902D1002004B0F0BDAB -:1040A0000920FBE7845C002C12D085186F780D2F57 -:1040B0004CD010DC3B0011F07DF80A421B2A2A305C -:1040C0003032323A3A42835C002B3FD1521CD2B29A -:1040D0008A42F8DBE1E7122F31D004DC0E2F35D015 -:1040E0000F2F2CD132E0142F11D0152F27D116E02D -:1040F000022CD5D1AB78039C072B237001D25B0730 -:1041000001D40A20CAE7029B01241B7814E0E34390 -:10411000DB0708E0012C08D011E00620BEE70F25E0 -:1041200023072D075B19002BF4D03046B6E7029B1E -:104130001B789C070AD402242343029C2370835CCF -:10414000521C9A18D2B28A4204DDA9E70B20A5E7D7 -:10415000192676028A42A5DB9FE705E00278401C1B -:10416000002A01D0002070470A46491E89B2002A61 -:10417000F4D10120704730B5274D0021286887B061 -:10418000C943A030818300248477214606200DF0A6 -:10419000D1FD002105200DF0CDFD002102200DF004 -:1041A000C9FD0120FFF782FE28686946C030C4714E -:1041B00004720120087068460BF007FC07B030BDA0 -:1041C00030B5154C95B02268C0329279042A0CD0D3 -:1041D000052A0AD028236A4613705080132906D076 -:1041E0003B2904D0072015B030BD0820FBE7117132 -:1041F000104609A909F0DCFB05000BD12068C0308E -:104200008179062916D0082914D0072912D0052053 -:10421000FFF74CFE2846E6E7540000207372635C0B -:104220006761705F636F72652E630000FFFF0000BF -:104230007B0C00000420EBE730B587B0040003D00E -:10424000002107200DF076FDFE4D012128686A4609 -:1042500001720421117003210C300DF06BFA2968F2 -:104260004022887B8006800E1043887368460BF0DE -:10427000ACFB00280DD12968098A00299ED0002CAA -:104280009CD08B000122002107200DF0AEFC0728F6 -:1042900001D0032092E7002090E770B50025064684 -:1042A000002803D0002107200DF044FDE54C01213A -:1042B00020680172062109300DF03CFA2068817BEC -:1042C0008906890E8173FFF7B1FD2068008A0028F6 -:1042D0000AD0002E08D083000122002107200DF013 -:1042E00084FC072802D00325284670BD0025FBE783 -:1042F000F0B59BB0040004D11920D349400110F05F -:1043000068FE72202070616800260A780825521F16 -:104310000127CC48130010F04DFF0F0976D9FD7628 -:1043200078FCFBB576767676FAF97600C5480068B3 -:10433000C0308079032803D0C349C44810F049FE37 -:10434000002108460DF0F6FC002107200DF0F2FCDC -:104350006078BC4A28436070106810250146C0315F -:104360004B7A2B434B7263689D783C2D48D00246B4 -:104370009D88A032977763688030DB890B80636803 -:104380001B8A4B8063685B8A8B8095836168826B34 -:10439000C97911756168806B08311530062210F0FB -:1043A0007BFC0620FFF782FDA648CA210068FB229D -:1043B0000E54017E11400176B82109588A7A92087C -:1043C00092008A724682284602F0ACFE002804D091 -:1043D0009E489D491A3010F0FCFD284602F0BCF8BA -:1043E000002804D0994898491D3010F0F2FD284665 -:1043F00003F008FD002806D069209349C0003EE183 -:104400000120FFF753FD1BB0F0BD064600688F8802 -:10441000C0308079062812D0072810D008280ED086 -:1044200004280CD009280AD00A2808D00B2806D066 -:10443000052804D0D5208449800010F0CAFD60789A -:10444000284360703068C030417A294341728079D6 -:10445000092811D00A280FD00B280DD005280BD021 -:10446000FFF789FE384602F062FE384602F07AF81D -:10447000384603F0FDFCC6E7FFF77DFE0220FFF79C -:1044800015FDEFE70068C0308079062812D00728B4 -:1044900010D008280ED004280CD009280AD00A28E9 -:1044A00008D00B2806D0052804D06F206649C0002C -:1044B00010F08FFD6068807902F0F1FE0028A2D034 -:1044C0006178294361706168C8809CE7074600688D -:1044D000C0308079062812D0072810D008280ED0C6 -:1044E00004280CD009280AD00A2808D00B2806D0A6 -:1044F000052804D055485449623010F06AFD6078B0 -:10450000284360706068C188386804E032E197E150 -:1045100084E084E00FE0C030018061680989418057 -:10452000616849898180002102200DF003FC386810 -:10453000C030C67167E706460068C030807906283B -:1045400019D0072817D0082815D0042893D0092897 -:1045500011D00A280FD00B280DD005288BD03B484E -:104560003949793010F035FD3068C0308079042841 -:10457000ABD00528A9D03068807C40063AD5606869 -:1045800002210C30FFF7E9FD002833D060680821D4 -:10459000001DFFF7E2FD00282CD03168B8204058FC -:1045A000807A800708D1CA20405C002808D1488A58 -:1045B000C20505D5C00703D14A8A402082434A82FA -:1045C0004A8A802082434A822D2268460270BC209B -:1045D000425A684642801022973101A810F05CFBD5 -:1045E00009A9684609F0E4F90028A3D0174816493C -:1045F000A03044E062683068AC2192890A52616858 -:104600000822091DAE3010F047FB10A80574306871 -:10461000AE30159014A80BF0D8F9F4E68F71064669 -:104620000068C030807906281FD007281DD00828D0 -:104630001BD00428F1D0092817D00A2815D00B2840 -:1046400013D005E0540000201C42000029030000A4 -:104650000528E2D0F949FA4810F0BBFC3068C030B8 -:1046600080790428D9D00528D7D0606881790029BD -:1046700002D08078002805D0F148F0496C3010F065 -:10468000A8FCC0E66078B8212843607030680958FB -:10469000897A8907890F012952D1817C09064FD473 -:1046A000017E490701D5042100E00321C030817259 -:1046B0002B206946087009A9684609F079F9002895 -:1046C00004D0DF48DD49213010F083FC69463068B2 -:1046D000098D81820E2210A90A74DA49B822159137 -:1046E000125808324A61024660324A6092790A7072 -:1046F000024614320A61521D8A601032CA60133AAF -:104700008A619632CA61921C0A62473A4A62103242 -:104710008A621032CA62473ACA63521E0A64921F02 -:1047200050304A64886414A80CF038FB022815D075 -:10473000002813D0C248C1494A3010F04AFC0DE0AD -:10474000817C4906017E490701D5042100E003214F -:10475000C0308172002106200DF0ECFA3068418AE9 -:104760000A0602D440229143418289B280229143B9 -:10477000418248E6B4480068C0308079032804D0FC -:10478000AF48AE49783010F024FC002108460DF007 -:10479000D1FA002107200DF0CDFA6078AA4A28430B -:1047A0006070106810250146C0314B7A2B434B7264 -:1047B00063689D783C2D00D122E602469D88A03298 -:1047C000977763688030DB890B8063681B8A4B8036 -:1047D00063685B8A8B8095836168826BC979117588 -:1047E0006168806B08311530062210F055FA0620FA -:1047F000FFF75CFB9448CA210068FB220E54017E3F -:10480000114001764682284602F08CFC002804D034 -:104810008B488A49923010F0DCFB284601F09CFE60 -:10482000002804D086488549953010F0D2FB2846F0 -:1048300003F0E8FA00289CD08148804997301EE7B1 -:10484000607828436070DEE500290BD088807E48C0 -:104850000068C0300288CA8002880A8142884A8182 -:10486000808888817047F7B5064600780C46002797 -:10487000010982B03D46012974D073480068009058 -:10488000C03002296FD0072904D00A296CD06B49A7 -:104890006E48E3E171680A78521F130010F08AFC39 -:1048A0000F09A551A5A52F585847A5A5A5A5656F22 -:1048B000A5008A783C2A1BD010271625002C7DD015 -:1048C0008888A0807068A21DC08920827068C08915 -:1048D000E0817068008A60827068408AA082716896 -:1048E00008460831C07901F09FFB0020607375E035 -:1048F00019270725002CE2D00021A17171E01127B2 -:104900000725002CDBD089880091A1807168F722EF -:104910008979A171417A11404172009802F008FC36 -:10492000009801F023FE009803F0B0FAC1E10127DE -:104930000925002CC3D08888A080706880792072F7 -:10494000B7E1888812270E252146FFF77DFFB0E1E9 -:1049500018270825002CB2D08888A080A01DFFF75A -:1049600040FBA6E145E0A1E15DE01A270725002C08 -:10497000A5D04888A08070680079A07199E18A78F4 -:104980003C2AB5D010271625002C98D08888A08006 -:104990007068C08920827068C089E0817068008A70 -:1049A00060827068408AA0827168607B497D40089F -:1049B0004000C907C90F0843607300E036E1716821 -:1049C000C007497DC00F49084900084360737168FA -:1049D000A21D08460831C07901F026FB1A4800687C -:1049E000C030417AEF22114046E1532013490001C3 -:1049F00034E1307A012803D014481049C5382DE13C -:104A000012270E2570892146FFF71EFF002C91D03A -:104A100070784007400F032888D10B480068C030E9 -:104A2000417AFB22DFE708490968A031002C01D058 -:104A30008A8BA280327A921E0AE000001C4200009B -:104A4000ED030000AC120020540000200C06000012 -:104A5000130010F0AFFB073D4853EDEE6F05ED007E -:104A600013270C25002C90D0009900224A82F1686F -:104A700089788907890F0129217A26D049084900B8 -:104A80002172FD231940F3689B785B07DB0F5B0005 -:104A900019432172E323E2801940F3681B785B0716 -:104AA000DB0E19432172DF231940F3685B78DB07C3 -:104AB0009B0E194321726272F1680122C978A172BA -:104AC000017A1143F7221140ADE001231943D7E7E2 -:104AD00015270C25002C9AD0F06806220068A11D2D -:104AE0000EF07CFFE5E016270725002C8FD0317BE8 -:104AF000A171017A08221BE00172DAE01427122565 -:104B0000002C84D00098A21D8030806B01461531A6 -:104B1000007D01F089FAB089E081207C0121084301 -:104B2000F92108402074FE480068C030017A022252 -:104B30001143E1E717273825002C77D03221A01D3B -:104B400010F007F90020A071207A03210843207299 -:104B5000FB210840F24909680A7E5207D20F9200F1 -:104B600010432072B8204058807A800757D0A07A2E -:104B70008A7C4008D2074000D20F1043FD2210402B -:104B8000A0728B7CFB229B07DB0F10409B0018431D -:104B9000A0728B7CF7269B07DB0F3040DB001843AD -:104BA000EF231840A072E07A10408A7CD206D20F20 -:104BB00092001043E0728A7C3040D206D20FD200BD -:104BC0001043E072888AA0812046102267310E309F -:104BD00010F062F8D249A07F0968C0078A7DC00F33 -:104BE00052001043A0770A7E400852074000D20FBF -:104BF0001043A077084640304DC820344DC4303CA7 -:104C00003F20405C22463032393101F00DFAC44871 -:104C100000688030806B817A890889008172C04881 -:104C20000068C030017AFB22114065E737E000E000 -:104C300038E0327B022A14D017273825002C2ED0DA -:104C4000017AFB2319400172012A17D0032A17D0D9 -:104C5000042A18D0052A16D0B249B34810F0B9F981 -:104C600027E019270725002C19D0898BA180012165 -:104C7000A171417A4908490041721AE0012000E01F -:104C80000220A07106E0707B0007000F8030A07149 -:104C9000052A02D00020E0710BE00120FBE7049818 -:104CA00005800CE0A0489F490A30D7E7317A0029F7 -:104CB00008D00498002C058001D027806580002052 -:104CC00005B0F0BD19270725002CE8D00021C94305 -:104CD000A1800021A171417AFD2284E610B5904C9B -:104CE00094B02068C0308079022809D0032807D00A -:104CF000052805D0092803D00A2801D00B2837D170 -:104D00001B2108A801730021817369460BA808F0D4 -:104D10004FFE002804D1684640781B2802D00320AB -:104D200014B010BD002108460DF004F80021072042 -:104D30000DF000F868468078002819D12068C0304E -:104D40008079801E030010F035FA0A060613081356 -:104D500013130D0F1113012000E00420FFF7A6F834 -:104D60000020DDE70620F9E70720F7E70820F5E750 -:104D70000820D5E770B50025694C002807D0022827 -:104D800017D0072828D033206649400146E0FFF7B6 -:104D9000A5FF00280CD1FEF7D6FA2221017005727A -:104DA000FEF7EDFA2068C030417A022211434172C9 -:104DB00070BDFEF7C8FA122101700121017221684D -:104DC000BC22525A4281C031CD71FEF7D8FA206818 -:104DD000C030417A0422E9E72168C620405C0228FD -:104DE00009D0032807D0092805D00A2803D00B28AA -:104DF00001D00528DCD1887B8109012911D08009E7 -:104E000004D0494847496E3010F0E3F80020FFF71E -:104E100044FA0028CCD044484249723010F0D9F806 -:104E200070BD0020FFF708FAF3E770B50D460400E7 -:104E300004D1CD203B49C00010F0CBF820780128E8 -:104E400005D0394837499D3010F0C3F870BDA188AE -:104E50003648334E814209D1E288824206D1306819 -:104E60001321A030808BFFF7ABF970BD814202D1D6 -:104E7000E08800280AD012202870687808210843AA -:104E8000687007CC083507C5002106E000227823AA -:104E9000114602200CF0A9FE02213068C030C17119 -:104EA00070BD1F480068C030807A704738B51C4C10 -:104EB00005460278206813000146C03110F07AF9E7 -:104EC00009A8060909A21945728AA800FEF7AEFFD3 -:104ED00038BD8879062806D0092804D0124811491F -:104EE000B53010F076F820680422017E1143017677 -:104EF00088E0A9880029EBD0A030808B0B4988423C -:104F0000E6D0A868002804D107480649C53010F04B -:104F100060F8A8680A38A8600090AB88206807E0AD -:104F2000540000201C420000E9050000FFFF0000C3 -:104F3000A030808B0622042102F028F80028C7D078 -:104F4000F849F94810F045F838BD287902288879E1 -:104F50000DD00428F8D00528F6D0284601F075F8C1 -:104F600020681321A030808BFFF72AF938BD07286D -:104F700006D00A2804D0EC48EA490A3010F029F893 -:104F8000284601F062F820680122C030417A1143BE -:104F900041728079072803D00920FEF787FF38BDCA -:104FA0000620FAE7887906280AD0042808D00928BC -:104FB00006D0052804D0DC48DA49313010F009F871 -:104FC0000ECDDA480361C2608160A2210170FEF754 -:104FD000EBF938BD8879062818D0072816D009289B -:104FE0000DD00A280BD0D048CE4944300FF0F1FF45 -:104FF0002068C0308079062808D0072806D00B200A -:10500000FEF754FF284601F020F838BD0820F7E7E6 -:10501000C548C449583095E7FFB593B001246846A8 -:1050200003218470C9021D4601800AF0A6F90022FE -:105030006946012003F0ABF906460AF0A2F9002EFA -:105040005CD16846152184704902018000271C212B -:1050500001A808970FF07FFE01200146103108A833 -:1050600001700020014608A841708178F9200140B4 -:10507000891C214308A881706846017902263143C2 -:10508000017114998185C7851F21018608A80A909E -:1050900013980D90684609900AF06FF90EAA09A9B5 -:1050A00001A802F036FF07460AF06BF9002F02D084 -:1050B000384617B0F0BD9E4F68463968008F48806B -:1050C000684684709B49018008A88078F9210840CF -:1050D000801C4108490008A88170684686850686BC -:1050E00015A80D900AF049F90EAA09A901A802F025 -:1050F00010FF06460AF045F9002E01D03046D8E7E9 -:1051000068463968008F88808A4968468470C91C5F -:105110000180298810A8018069884180A988818040 -:10512000E988C180082168468185018610A80D9014 -:105130000AF023F90EAA09A901A802F0EAFE044622 -:105140000AF01FF9002C01D02046B2E76846396802 -:10515000008FC8800020ACE7F0B5774D95B00C46C5 -:10516000A9423FD30126B604744FA11BB94239D3DB -:1051700073498C4236D2202806D0212827D02228F5 -:1051800042D0072015B0F0BD3C216846017021884F -:1051900041806188818009A908F00AFC0028F1D1CA -:1051A00008A98979002903D002290ED00320E9E754 -:1051B0006168A942E6D38A1BBA42E3D3604A9142AE -:1051C000E0D26A46128D0A80DCE75E48DAE72068A2 -:1051D000574C002813D00721490701224118920398 -:1051E000914201D31020CDE706210EF0E1FB2168AA -:1051F000A82250500120A03188750020C2E7206805 -:105200000021A0308175F8E7204600F02AFFB9E7B9 -:10521000494A10B5914208D301229204474B8A1A99 -:105220009A4202D3464A914201D3102010BD202851 -:1052300005D0212803D0222803D0072010BD062046 -:1052400010BD084600F051FF10BD70B50446374848 -:10525000CC21AC300FF07FFD3448354EAC3000210E -:105260003060C943A0308183002585770120FEF797 -:105270001DFE3068C7210D54E121C57389000182EC -:10528000B6210D54014609310830FDF779FF316828 -:10529000084629311930FDF7A9FF002C24D03068C9 -:1052A00080308463FEF7C2FD1E20E081607A8F218A -:1052B0000840303060723068014614312161983105 -:1052C0006162933921601031616025721339A162E6 -:1052D000091FE1628531E163303921631031616377 -:1052E00010310930A163A06470BD11480068C0305E -:1052F0008079042803D0052801D0002070470120C0 -:10530000704770B506460C480C46814208D3012010 -:1053100080040A49201A884202D30948844213D3E0 -:10532000102070BD1C420000B30600004C1200208B -:1053300054000020012A0000006001000000FC1F52 -:105340000040002002300000FFF7CFFF002801D00E -:105350001120E6E7FD48FE4D002E02D0012E46D179 -:105360002FE02278002A0AD00121012A09D0022A3E -:1053700014D0032AD5D1A2799209D2D112E000210A -:1053800003E0A2799209032ACBD128680622017290 -:1053900060308171611C0FF07FFC05E0A2799209F9 -:1053A000012ABED128680172002107200CF0C2FC3E -:1053B00028680622611C09300FF06EFCFEF736FDEE -:1053C00011E02178002912D0012910D0022910D033 -:1053D0000329A6D10120FEF760FF002803D0DD4994 -:1053E000DD480FF0F6FD2868C673002099E7072016 -:1053F00097E70120FEF720FFEFE707214907012289 -:1054000010B541189203914201D3102010BDD0492C -:10541000024609680B7A0931184600F005FE0020A3 -:1054200010BDFFB599B005460020694608710872A5 -:1054300008A9087408751E4614460121C748890446 -:10544000C74AC84B002D06D085420DD36F1A97422C -:105450000AD39D4208D2002C09D0844204D3601A9A -:10546000904201D39C4202D310201DB0F0BD2846CB -:10547000204318D01F270CAB01AA009728461A9981 -:10548000FEF701FE0028F0D10DAB02AA31462046FE -:105490000097FEF7F8FD0028E7D16846007AC107BB -:1054A00003D00A20E1E70720DFE7800705D568463B -:1054B0000079800701D50B20D7E7FFF716FF0028FA -:1054C00001D01120D1E703AF002D0FD01A2069467B -:1054D00008731A9888732946F81C1A9A0FF0DCFB97 -:1054E0000EA903A808F064FA0028BED1002C0ED043 -:1054F000202168460173867332462146F81C0FF05E -:10550000CBFB0EA903A808F053FA0028ADD19049AF -:1055100008A80968007C08700020A6E7F0B50446DA -:105520008E48002795B084426FD301208004211A51 -:105530008B488142F8D38B48844266D22378012B72 -:105540000BD1864960688842EED39904421A844997 -:105550008A42E9D383498842EFD27D490A681546D9 -:10556000C035A879022814D0032812D0052810D0FD -:1055700009280ED00A280CD00B280AD0012803D005 -:10558000002B06D0012B04D0687AC506AD0F06D1DA -:1055900001E00820F6E5850701D4400701D5112078 -:1055A000F0E5012B15D0208A6F4E0546203DB5420F -:1055B0007ED2022B01D0032B01D1A02878D3012B5E -:1055C00007D01078C00704D0608A002870D0B428B3 -:1055D0006ED8002B06D0012B08D0022B04D0032B51 -:1055E00066D110E0002512E0022510E06068012578 -:1055F000007800280BD0012808D0022806D0032804 -:1056000004D05248BEE5032501E066E00127D07BC7 -:1056100001281CD1108A002819D0907B810901290A -:1056200011D0800904D04C484A49E4300FF0D1FC35 -:105630000120FEF732FE00280BD047484549E830EC -:105640000FF0C7FC05E00120FEF7F6FDF3E7FEF7DB -:10565000EDFB207A002806D0012806D0022806D0CB -:10566000032825D105E0002604E0012602E00226F9 -:1056700000E00326002D01D0022D42D1002E40D0A3 -:10568000E068002814D00179002928D008290FD813 -:10569000027B9446082A0BD800290ED02F4A0168B5 -:1056A00091421AD3012292048B1A2D4A934200E0B0 -:1056B00084E012D32B4A91420FD26146002912D0C6 -:1056C00080682649884208D301218904421A244966 -:1056D0008A4202D32349884205D3102052E5027B37 -:1056E000002A6BD0D4E71A4800680078800702D0FF -:1056F0001648401E46E5022D03D1022E5ED0032E31 -:105700005CD0182168460170218A4180218A8180FD -:1057100085710F480068007A002801D0012870D1F7 -:105720006946C8716846077221780930012932D06C -:1057300006210FF00EFB07216846C173067409A904 -:1057400008F036F90028C9D10A210FE00232000022 -:10575000540000201C4200005F08000000600100AF -:105760000000FC1F00400020E13F0000684601707F -:1057700009A908F01DF90028B0D13A20694608703F -:1057800009A9684608F014F90028A7D1002D08D00F -:10579000022D06D04CE061680622491C0FF07CFA0D -:1057A000C9E7002E44D00026374623E00168B00048 -:1057B00009580978002903D0012904D00720E1E421 -:1057C00069468F7002E001216A469170E168062205 -:1057D0000968095800A8491C03300FF05DFA0B2036 -:1057E0006946087009A9684608F0E2F80028E6D181 -:1057F000761CF6B2E0680179B142D7D800266F4630 -:1058000012E050E08068B10041581022B81C0FF03F -:1058100043FA3B206946087009A9684608F0C8F8B1 -:105820000028CCD1761CF6B2E068017BB142E9D801 -:105830001B20694608700120887009A9684608F095 -:10584000B7F80028BBD108A840791B282BD1002D20 -:105850000AD0012D04D0022D08D0032D18D105E067 -:105860000320FEF723FB26E003200FE0FE4800683C -:10587000C030807903000FF09DFC0916061616183B -:1058800016081A1C1600022000E00920FEF70EFB85 -:10589000608A00280FD000228300114610460CF0C9 -:1058A000A4F9002807D003206CE40520EEE70A20C5 -:1058B000ECE70B20EAE7002064E470B586B00C004A -:1058C00006460BD0E94884424AD301208004E849C7 -:1058D000201A884244D3E748844241D2E24D2868E6 -:1058E000C030C179022902D0407A400702D5112088 -:1058F00006B016E5002C04D02046FEF798FB0028E1 -:10590000F6D13046FEF75EFB012803D0022823D0F3 -:10591000D948EDE721001BD1082069468882286814 -:1059200001ABC08805AA002103F019F90028DFD1D6 -:105930006846808A082801D00320D9E76846818814 -:105940008181C188C181018901824189418203A984 -:10595000304601F074FCCBE7002C01D00620C7E7ED -:105960001020C5E770B50C460546FEF72BFB012855 -:1059700003D0022801D0C048D3E421462846FEF7D0 -:105980001FFCCEE400B50146143095B0192801D2B1 -:10599000880707D008461E3004D00A3002D00720FE -:1059A00015B000BDFFF7A1FC002801D01120F7E7DA -:1059B000AD4831220068417068460270817009A9C3 -:1059C00007F0F6FFECE701B582B0022069460880D7 -:1059D000A54802AB00686A468088002102F02AFFD1 -:1059E00069460988022900D003200EBD38B502217E -:1059F0006A4611800721490701224118920391420A -:105A000001D3102038BD9849034609686A468C883E -:105A10000021204603F0A3F8694609880229F1D045 -:105A2000032038BD3EB504460820694608808F48EB -:105A3000844208D3012080048D49201A884202D371 -:105A40008C48844201D310203EBD2046FEF7EFFA79 -:105A50000028F9D12088694688806088C880A0889D -:105A60000881E0884881804801AB00686A46C088A8 -:105A7000002102F0DFFE694609880829E4D00320EE -:105A80003EBD1FB504460820694688817748844298 -:105A900008D3012080047649201A884202D3754831 -:105AA000844202D3102004B010BD6F486B460068DA -:105AB00003AAC088002103F052F80028F3D16946F8 -:105AC0008989082901D00320EDE7694609882180EA -:105AD00069464988618069468988A1806946C98884 -:105AE000E180E0E7FEB50546604817460E46814274 -:105AF00008D3012189045E4A731A934202D35D4B95 -:105B00009E4201D31020FEBD1F2F01D90C20FEBDE7 -:105B1000554C85422AD3681A904227D39D4225D2FC -:105B2000206801A9408802F037FE0028EFD12878CC -:105B300069464871206801A9408802F010FE0028DB -:105B4000E5D169460090087802210843694608704B -:105B50004979090703D0082108436946087020687D -:105B60006946408802F0A5FD0028D0D169460F8122 -:105B700020683346408802AA002102F05BFE694695 -:105B80000989B942C3D00320FEBD38B50C460721B0 -:105B9000012249079203002802D04318934202D2FF -:105BA0006118914201D3102038BD21886A461180C6 -:105BB000002801D000290BD02B49034609684D88E5 -:105BC0000021284602F0CBFF69460988218038BDB4 -:105BD0000C2038BD30B50C46244987B08C4208D320 -:105BE00001218904224A611A914202D321498C423F -:105BF00002D3102007B030BD1B4D2968C0310A7A8E -:105C0000520708D48979491F0B000FF0D3FA050415 -:105C10000604040604000820ECE7FEF7D3F9012887 -:105C200003D0022839D01448E4E720881E2801D286 -:105C30000720DFE72868C030807906282BD00A20AB -:105C4000FEF734F90520694608700879A1788008C4 -:105C5000C9078000C90F084369460871FB21084045 -:105C6000A1788907C90F09E05400002000600100F5 -:105C70000000FC1F004000200230000089000843A3 -:105C8000694608712088C880684609F09EFE002891 -:105C9000B0D00320AEE70720D2E70620AAE7F0B590 -:105CA00087B014460D46FEF78DF9012804D002286E -:105CB00002D0FE4807B0F0BDFD4B18680146C03168 -:105CC0000A7AD20707D08A79042A04D0052A02D09A -:105CD000002D02D052E00820ECE7F64A944208D3A7 -:105CE00001229204F44BA21A9A4202D3F34A94423C -:105CF00001D31020DEE7A278D206520F042A0CD876 -:105D0000E378072B09D3102B07D822799A4204D3C2 -:105D1000102A02D822881E2A01D00720CAE702468C -:105D20008032966BF727F372966B23793373966BF9 -:105D3000737A3B40A778BF06FF0FFF003B437372A7 -:105D4000966B2388F381966BA778B37AFF079B083D -:105D50009B00FF0F3B43B372FB273B40A778966B3A -:105D6000BF07FF0FBF003B43B372926BA478537A17 -:105D7000E406DB08DB00640F234353720B226B46FF -:105D80001A70852D22D008DC002D17D0812D17D058 -:105D9000822D17D0832D08D116E0862D18D0882D9E -:105DA00018D0892D18D08A2D18D00B221A71B6223E -:105DB000125CBF4C002A13D0A83012E00022F5E795 -:105DC0000122F3E70222F1E70322EFE70522EDE7E4 -:105DD0000622EBE70822E9E70922E7E70A22E5E7DE -:105DE00000200290887907280BD0082809D00920C4 -:105DF000FEF75CF8684609F0E8FD002803D00320B0 -:105E000058E70620F4E720680422C030017A4908E8 -:105E100049001143017200204CE770B5A44E0D46B5 -:105E2000316886B0C031097A1446090701D40820C8 -:105E30005EE5FEF7C7F8012803D0022801D09B4891 -:105E400056E5002D12D09B48844208D301208004DF -:105E50009949201A884202D39848844201D31020DD -:105E600046E5012D0BD0022D02D106E0002C01D019 -:105E700007203DE50020029005E0022000E001201F -:105E8000694608710294032069460870684609F063 -:105E90009CFD002801D003202AE53068F722C0309D -:105EA000017A11400172002022E570B594B01446C9 -:105EB0000E46FEF787F8012804D0022802D07B485E -:105EC00014B059E57A4D2868C030007A800701D4B3 -:105ED0000820F5E7002C01D00720F1E7FFF705FACD -:105EE000002801D01120EBE7002E1DD02D2168469F -:105EF00001702C68BC20015B684641801022B11CF7 -:105F000001A80EF0C9FE207EFB210840B17CC90724 -:105F1000490F08432076B07CFF214008A075608AB5 -:105F200082310843608207E02E21684601702868AC -:105F3000A030818B6846418009A9684607F038FD8A -:105F40002968FD23C0310A7A1A400A72B8E710B5F1 -:105F50000C46FEF737F8012803D0022801D0534839 -:105F600010BD5448844208D3012080045249201AAD -:105F7000884202D35148844201D3102010BD2046EC -:105F8000FEF72FF8002010BD10B594B00446FEF7C0 -:105F900019F8012804D0022802D0444814B010BDDA -:105FA00043480068C0308179042910D005290ED0FB -:105FB0003820694608704C8001200871487109A991 -:105FC000684607F0F5FC0028E8D00B20E6E7002043 -:105FD000E4E710B594B00446FDF7F4FF012803D0C0 -:105FE000022801D03148D9E731480068C0308179B2 -:105FF00004290DD005290BD03820694608704C8043 -:1060000000200871487109A9684607F0D1FCC5E76E -:106010000020C3E726480068C0308079062801D3F5 -:10602000012070470020704708B51346002806D0AD -:1060300023A00068009048796A468009105C1870B7 -:106040000622581C0EF028FE08BD10B50446FDF7C8 -:106050007AF9A22101700ECC08300EC0FDF78FF93D -:1060600010BD70B5124C054601682068002913D098 -:10607000104A914208D3012292040F4B8A1A9A4285 -:1060800002D30E4A914201D3102075E410227730DA -:106090000EF002FE206801218030806B01722068C2 -:1060A000A9880182C17B012919D10BE002300000CF -:1060B00054000020006001000000FC1F0040002090 -:1060C0000302FF01807B800901280AD00120FEF72E -:1060D000E4F8002803D01A491A480EF07AFF00208D -:1060E0004AE40120FEF7A8F8F3E770B5054600681A -:1060F000154C00281ED007214907401801218903AB -:10610000884201D3102037E42068B8210958097A61 -:10611000012909D00146773129300AF08EFF206825 -:1061200001218030806B017221681022286877314C -:106130000EF0B2FD2068008AA88000201CE4000058 -:106140001C420000FD02000054000020FFB581B099 -:1061500001980E46C078174610360E37022809D02F -:10616000032840D005287DD0F2A1F7480EF031FF7A -:1061700005B0F0BDCC890A2060430E301880312371 -:106180000A98002A0380F3D0486800889080002095 -:10619000D0801081097B9481891FCDB21AE03088AC -:1061A0007168388048780A7800021043F880C8780F -:1061B0008A78000210433881BA1C091D28460BF06A -:1061C0008AF8002D01D0002802D000203871788094 -:1061D00008360A372046641EA4B20028DFD1019990 -:1061E0000020C870C4E7CC890A2060430E301880B4 -:1061F00032230A98002A0380BAD048680025008814 -:106200009080D5801581087B401FC0B2009094819A -:1062100042E0716832880878FA803A79C3075208F8 -:106220005200DB0F1A43FD231A408307DB0F5B008C -:106230001A43FB231A404307DB0F9B001A43F72343 -:106240001A400307DB0FDB001A43EF231A40C30693 -:10625000DB0F1B011A43DF231A408306DB0F5B01B0 -:106260001A4300E020E0BF231A404306DB0F9B01E6 -:106270001A433A71C00978718A784B781002184332 -:1062800038813A46C91C00980BF025F8002801D047 -:10629000BD703D8008360A372046641EA4B200282F -:1062A000B7D10198C57063E7087BCC89801E85B2A1 -:1062B0002846083060431030188034230A98002A9A -:1062C00003808FD048681746008890800020D080D7 -:1062D000108194811037E000D581C0190CE030881E -:1062E0003880009878602A46716800980EF0D4FCD7 -:1062F000009808360837401900902046641EA4B262 -:106300000028ECD16BE7FFB50546C07881B00C469C -:106310000A9E03000EF04EFF0BA3071733414F6D8B -:106320008F9D9D9DA300207B1746082806D003283B -:1063300004D085487FA154300EF04BFE04990E2006 -:10634000088030200CE0207B1746042804D07E48CB -:1063500078A171300EF03DFE04990E2008803120A6 -:106360003080002F44D060680088B880607AFF30A9 -:106370000130F880E08938810020B88137E0207B47 -:106380001746042804D070486AA18D300EF021FE13 -:1063900004990E2008803220E2E7207B174602286D -:1063A00004D0694863A1A9300EF013FE04990E20B1 -:1063B00008803320D4E7207B1746042804D06248A5 -:1063C0005CA1C4300EF005FE049810210180342039 -:1063D0003080002F0CD060680088B880607AFF3071 -:1063E0000130F880E08938810020B881F881E870B8 -:1063F000BEE6207B1746052806D0062804D0524862 -:106400004CA1E1300EF0E5FD049812210180352009 -:106410003080002FECD060680088B880607AFF3050 -:106420000130F880E0893881E089B8810020388225 -:10643000A988F981DBE7207B1746072804D042486A -:106440003CA1F8300EF0C5FD04990E2008803620DE -:1064500086E700962846049B00F02DFD88E635A1CE -:106460003A480EF0B6FD83E670B5054600780C4656 -:10647000082603000EF09EFE124C3434241C380A09 -:106480000A0A0A0A0A0A0A0A0A0A0A4C687800284A -:1064900004D02E4827A12C300EF09BFD002C03D1F8 -:1064A0001F2024A1400108E060783043607020E0A4 -:1064B000002CF9D17D201FA1C0000EF08AFDF3E76A -:1064C000002904D03F201BA100010EF082FDFCF743 -:1064D0003AFF0446407830436070FCF750FF08E014 -:1064E0001A4814A1473002E0184812A14C300EF0AF -:1064F00070FD002C0AD06078000707D5932020702B -:106500002046582229460830FAF75EFE002070BD6A -:106510000E4808A15030EAE710B500200C4C0D4998 -:106520000346C2008C525218401C0006D370000E65 -:10653000F7D010BD7372635C67617474635F636FDF -:1065400072652E63000000005A020000B3030000D1 -:10655000FFFF000058000020FE49088001208870DD -:1065600000207047FB4900208870704710B500215B -:10657000F848C94301800021C17007F053FAD8E7F9 -:10658000F7B584B0054600276846078187806868AC -:106590000C46008800F0ECFB0646287A032805D05C -:1065A000002E03D1EC49ED480EF013FD297A204668 -:1065B000C91E123000900B000EF0FCFD0FF2F1F03E -:1065C0003D09AA465C6D34B3CDF38B8BF000F078B7 -:1065D000012803D0E049AD200EF0FBFCA8896946F4 -:1065E000C0000E30888030200881002C22D06868DE -:1065F0000188A180E7802781A989A18100200DE081 -:10660000C100B27909190A74B288CA81820052198C -:10661000D3894B82128A401C8A8280B2A18981422E -:10662000EED8D7E002A8009001AB224629463046BA -:1066300000F0CCFBF1E002A8009001AB2246294615 -:10664000304600F005FCE8E0F07806281AD0FF207C -:10665000C149223014E068680188A180E780278161 -:10666000A989A181B188E181E9892182EA89296921 -:1066700000982BE0F078062804D0FF20B6493C3083 -:106680000EF0A7FCE8896946123088803520088121 -:10669000002CE0D1C1E0F078072804D0FF20AE49FB -:1066A00056300EF096FCA88969460E308880362058 -:1066B0000881002CBED068680188A180E78027810E -:1066C000A989A1812046AA890E3029690EF0E4FA31 -:1066D00080E0E8896946123080B2382288800A81D9 -:1066E000002C79D068680188A180E7802781A9897A -:1066F000A181287A102809D00221A173E989218279 -:10670000EA89296900980EF0C7FA86E00121F4E7CA -:1067100002A8009001AB224629463046FFF716FD3D -:106720007BE0F078082803D08B498D480EF051FCAF -:1067300014206946888037200881002C6DD0686855 -:106740000188A180E7802781A989A18167822782AA -:106750000120A0733EE0F078092804D080487E49EB -:1067600018300EF036FC288A6946143088803720AD -:106770000881002C51D068680188A180E78004213D -:106780002781A173A989A181E9892182298A61824E -:1067900020462A8A1430696998E702E038E01CE054 -:1067A00024E0F0780A2804D06D486B4933300EF0AD -:1067B00010FC14206946888037200881002C2CD0DA -:1067C00068680188A180E78027810521A173A781DE -:1067D00027826782F77020E017E002A8009001ABE3 -:1067E000224629463046FFF78EFD16E00D20694609 -:1067F000392288800A81002C07D00120E08055488A -:106800000188A1802781277307E00699088010E09E -:106810008F205149C0000EF0DCFB68460699808845 -:106820000880002C05D06846008920806846808852 -:106830006080002007B0F0BDF7B594B015460F4654 -:10684000149800F0A0FA04000AD0032000F088FB9E -:10685000022802D2E078002804D0112017B0F0BD41 -:106860004048FBE71720694601260883002D0FD01A -:106870000321684601711021018210A8024605908B -:1068800004A928460AF04DFD00280DD00720E5E7B1 -:1068900008216846017100210781C9434181052112 -:1068A0008673C90281810CE0A878A0712888A08035 -:1068B000684605218673C902818100210781C94389 -:1068C000418109AA023206A901A807F0E4F80028CC -:1068D00002D000F06BFAC1E707A800906846038B6E -:1068E00004220321149800F051FB0028B6D1E67071 -:1068F000B4E770B592B00D0006460ED000F043FA32 -:1069000004000CD0032000F02BFB022802D2E07818 -:10691000002806D0112012B070BD1020FBE71148EE -:10692000F9E7172168468180042101722988818155 -:106930006988C181012181740B4901820AAA02324E -:1069400001A902A807F0A7F800280FD000F02EFA3E -:10695000E1E7000058000020346500003C0400001E -:1069600063020000023000000228000008A8009026 -:106970006846838804220321304600F007FB002884 -:10698000C9D10221E170C6E770B592B00D0006468C -:106990000DD000F0F8F904000BD0032000F0E0FA6D -:1069A000022802D2E078002805D01120B3E7102099 -:1069B000B1E7FA48AFE717216846818004210172E8 -:1069C000298881816988C18101218174F44901820A -:1069D0000AAA023201A902A807F05DF8002802D035 -:1069E00000F0E4F997E708A800906846838804223D -:1069F0000321304600F0CAFA00288CD10321E1704F -:106A000089E770B592B00D0006460DD000F0BBF9D5 -:106A100004000BD0032000F0A3FA022802D2E07891 -:106A2000002805D0112076E7102074E7DB4872E7D4 -:106A3000022168460172298881816988C1811721F4 -:106A400081800AAA023201A902A807F024F80028CE -:106A500002D000F0ABF95EE708A800906846838892 -:106A600004220321304600F091FA0028DBD10421F2 -:106A7000E17050E7F0B591B015000E4607460ED014 -:106A800000F081F904000CD0032000F069FA02281C -:106A900002D2E078002806D0112011B0F0BD1020FD -:106AA000FBE7BE48F9E7172168468180042101729F -:106AB000298881816988C181B17881743188018296 -:106AC0000AAA023201A902A806F0E5FF002802D0B6 -:106AD00000F06CF9E1E708A800906846838804227A -:106AE0000321384600F052FA0028D6D10521E17082 -:106AF000D3E7F7B592B015460E46129800F043F969 -:106B000004000AD0032000F02BFA022802D2E07819 -:106B1000002804D0112015B0F0BDA048FBE70627DF -:106B2000002D12D0684607728681C581A580172086 -:106B3000694688800AAA023201A902A806F0ABFFC2 -:106B4000002807D000F032F9E5E705216846017218 -:106B50008681EBE708A80090684683880422032119 -:106B6000129800F013FA0028D5D1E770D3E7F7B5F3 -:106B700092B016460D000ED0129800F004F90400F1 -:106B80000BD0032000F0ECF9022802D2E0780028B4 -:106B900005D01120BFE71020BDE78048BBE70727DD -:106BA0006846077286811721049581800AAA0232FD -:106BB00001A902A806F06FFF002802D000F0F6F845 -:106BC000A9E708A800906846838804220321129848 -:106BD00000F0DCF900289ED1E7709CE7F3B51720A0 -:106BE00091B00C46002915D021780B000EF0E2FA86 -:106BF000062B05051A041C2B1520C01EE28880B246 -:106C0000002A02D0A368002B04D0824204D90C20B1 -:106C100013B0F0BD1020FBE7042905D0A0880028A0 -:106C200011D101E00620F3E7119800F0ACF805005F -:106C30000BD02078092701281AD0022807D0042871 -:106C400024D0052835D00720E2E75448E0E768461D -:106C5000077161880181E1884181A068082603905D -:106C6000304600F07DF9072829D34C48801CCFE737 -:106C70000C216846017161880181E1884181A06829 -:106C800003900EE0E878002811D118E00D21684645 -:106C9000017161880181A1884181E1888181A068B9 -:106CA00004900326304600F05BF90228EAD3112055 -:106CB000AEE70E2168460171217B0172F1E71721D1 -:106CC0006846018309AA023206A901A806F0E3FE7C -:106CD000002802D000F06AF89AE707A800906846FA -:106CE000038B04223146119800F050F900288FD10F -:106CF0002178012907D002298AD0042905D0052945 -:106D000005D0032084E7082102E0EF7080E70A2124 -:106D1000E9707DE730B591B00C46054600F033F8D8 -:106D2000002808D0032000F01BF9022805D31B48D7 -:106D3000801C11B030BD1948FBE70F216846017176 -:106D400004811721018309AA023206A901A806F0CD -:106D5000A2FE002802D000F029F8EAE707A8009078 -:106D60006846038B04220321284600F00FF9E0E770 -:106D70000C49884205D00C490988814201D10A4852 -:106D800070470020704710B5FFF7F2FF002802D0CF -:106D90008178C90700D1002010BD0000023000003A -:106DA00003280000FFFF000058000020002806D044 -:106DB000012805D0052805D0062805D003207047F6 -:106DC00011207047082070475C487047FFB583B0BA -:106DD00003980C9EC0781D4614460F46012803D028 -:106DE0005749D2200EF0F5F8F889C0000E302880FF -:106DF00030203080387B001FC0B20190002C26D09C -:106E000078680088A0800020E0802081F889A08137 -:106E1000002616E0F0000519C01900902A464169C5 -:106E20000E3201980AF057FA002802D00020287488 -:106E3000E8810098761C008A68820098B6B2408A81 -:106E4000A882A089B042E5D803990020C870F1E477 -:106E5000F8B50646C0781F4614460D46042804D0EF -:106E6000FF20374903300EF0B4F8A88906214843C3 -:106E70000E30388033210698002C01801AD06868C3 -:106E80000088A0800020E0802081A989A18103469C -:106E90000CE01946062251434A190919D789CF81B6 -:106EA000977C8F74128A5B1C0A829BB2A1899942DB -:106EB000EFD8F070F8BD70B514460546142204985A -:106EC0001A8037220280002C18D0486800260088DB -:106ED000A080487AFF300130E080C8892081C889CD -:106EE000A0816682E878082809D0092811D00A28EC -:106EF00019D0134913480EF06CF8EE7070BD087B82 -:106F00000C2804D00F480E490C380EF062F801200E -:106F100012E0087B0D2804D00A48094908380EF011 -:106F200058F8042008E0087B0E2804D005480449DE -:106F3000001F0EF04EF80520A073DEE703300000BE -:106F4000346500008203000001460020FA4A02E096 -:106F5000401C082803D24300D35A8B42F8D1704713 -:106F600030B50446F44A0020163A117953790AE004 -:106F70005518AD79A54201D1401CC0B2491CC9B217 -:106F8000102900D100218B42F2D130BDFFB5EA4873 -:106F900081B0163841790A9C491CCDB21E46102D8D -:106FA00000D10025E44816380079A84202D1042017 -:106FB00005B0F0BD0820FFF7D3FF0746072804D926 -:106FC000FF20DEA1A5300EF004F80298082801D1B8 -:106FD000072F17D001982080301D6080002060713D -:106FE0002071E68003982081204606F005FD0028E8 -:106FF0000AD0D148029916384379821D99544571B7 -:107000000020D5E7D248D3E7FF20CCA1B7300DF060 -:10701000E0FF0320CCE7F0B58DB0044600256846BC -:10702000057116468C460620FFF79AFF00281CD1F2 -:1070300021780127C807002801D0132917D96846ED -:1070400087766178C17602218183C58304A8009088 -:1070500070680C23008805220621FFF797FF00289F -:1070600003D0B6A185200DF0B4FF0DB0F0BDB2483D -:1070700016380278002AF8D0427863789A42F4D120 -:10708000012918D0132919D16146062916D1057096 -:10709000002101200AF04EFE6846077170680188E1 -:1070A0006846C1800021C9430181607922790102CB -:1070B000114368461AE06146062908D068460079FF -:1070C0000028D2D0314601A8FDF7AFFECDE705700C -:1070D000002101200AF02EFE6846077160792279AE -:1070E00001021143684601810021C9434181E9E75A -:1070F000914810B50021163801704A1E4280417037 -:107100000171417101200AF015FE10BD10B5FFF7A5 -:10711000EFFF0020884902464300401CCA5208285D -:10712000FAD310BD84491639488000207047DFE744 -:1071300070470EB501216846017086498180C18083 -:107140000021FDF772FE0EBDF7B505460078002759 -:1071500000090C463E46012804D0FF2077A1683084 -:107160000DF037FF287A02280CD0FF2073A17E3063 -:107170000DF02FFF0298002C068001D0278066803A -:107180000020FEBDEA89702710460A3086B2002C26 -:107190000BD068680088A080A8892081E280204602 -:1071A0000A3029690DF078FDE4E702980680E7E7E8 -:1071B000F0B543680246D9799C79090221435C7A8B -:1071C0001E7A25025C88981D3543241F87B0A14292 -:1071D0001DD11B79022B1AD1042D1AD0052D2AD0CE -:1071E000062D1AD0402D12D3061D0F4614462846F0 -:1071F000FFF7AAFE08280AD0112020700220207272 -:10720000A581E7812661607808210843607007B096 -:10721000F0BD001D00F0E1F8F9E7041D0D46FEF792 -:10722000F9FE0028F3D0062168460170019405722A -:1072300008F0CBFBEBE7001DFFF7EDFEE7E710B52D -:107240003D4C8AB0163C2278012A26D012236A4689 -:10725000937363789B1CD373082313820B88538228 -:107260004B8893828B88D382C988118301A90091AE -:107270000C2305220721FFF789FE00280BD10022ED -:10728000F023114601200AF0B0FC01202070607844 -:10729000801C607000200AB010BD1120FBE7F0B523 -:1072A000254C0027163C87B00646A51D1FE06079D7 -:1072B0002179884204D1112020A140010DF089FEDE -:1072C0002079405D042804D0082808D17F1CFFB233 -:1072D00005E0072069460870684608F076FB2079CB -:1072E000401CC0B22071102801D10020207130460E -:1072F000761EF6B20028DAD1384688E710B5044683 -:10730000402801D2072010BDFFF71EFE082802D03A -:107310003120000210BD0021074802E0491C082965 -:1073200003D24A00825A002AF8D1082914D0490011 -:107330004452002010BD0000DA1300207372635C19 -:107340006C326361705F636F72652E6300000000D2 -:1073500004300000FFFF00000420EBE700B54028E8 -:1073600001D2072000BDFFF7EFFD082805D000215E -:107370003B4A40001152084600BD052000BDF0B553 -:107380008BB016460C00074607D0002E05D061884A -:10739000402904D207200BB0F0BD1020FBE7208865 -:1073A000002801D0172801D90C20F4E70846FFF780 -:1073B000CBFD08280FD0258803A82A463146023085 -:1073C0000DF06AFC01A8009062882B46082138461F -:1073D000FFF7DCFDDFE70520DDE7F0B50E460746E9 -:1073E00001468BB014460125304606F0D1FC082832 -:1073F0001DD10020694608850120FFF7B1FD002856 -:1074000002D117206946088503AB02330AAA394620 -:107410003046009407F0CFF800280AD0022819D08F -:10742000032804D0FF200F4902300DF0D2FD28467A -:10743000B1E76846038D002BF9D001A80090606881 -:10744000042200880121FFF7A1FD0028EFD00549A3 -:10745000EC20EAE760780025102108436070E6E739 -:10746000DA1300203C730000002803D08178012942 -:1074700039D101E0102070470188FA4A881A9142F8 -:1074800033D01BDCF84A881A91422ED00BDC00293D -:107490002BD00320C002081A27D0012825D00121B3 -:1074A0000903401A07E001281FD002281DD0FF2839 -:1074B0001BD0FF380138002815D116E0FF22013219 -:1074C000811A904211D008DC01280ED002280CD07D -:1074D000FE280AD0FF2806D107E0012905D002299D -:1074E00003D0032901D0002070470F20704700B55A -:1074F0000A2821D008DC03000DF05CFE0A1C2024C1 -:10750000241A24282224261A102819D008DC0B2833 -:1075100016D00C2814D00D281AD00F2808D111E04D -:1075200011280FD0822807D084280DD085280DD0AF -:10753000032000BD002000BD052000BDCB4800BDDC -:10754000072000BD0F2000BD042000BD062000BDA7 -:107550000C2000BD70B500290BD0CB1FFA3B812455 -:107560001E46CDB2112B1BD2012805D0022806D011 -:1075700009E0002010701DE0FF20043001E0FF2032 -:107580000330814218D033000DF014FE111613138E -:1075900016131616131616161313131316131600B6 -:1075A0000846FF3881381F2803D9FF39FE390229E0 -:1075B00002D81570002070BD1470072070BD00B592 -:1075C00003000DF0F7FD060406040C080A0C002069 -:1075D00000BD112000BD072000BD082000BD032014 -:1075E00000BD00780207120F04D0012A05D0022A3C -:1075F0000AD10EE0000907D108E00009012805D0F2 -:10760000022803D0032801D007207047087000200B -:10761000704706207047002807D0012807D00228AD -:1076200007D0032807D007207047002004E011206E -:1076300002E0212000E0312008700020704738B5BA -:107640000C4605004FD06946FFF7CBFF002822D13A -:107650002088032189028843694609788907090D32 -:10766000084320806946681CFFF7BBFF002812D141 -:107670002188032000038143684600788007800C3E -:1076800001432180A8784007820F2020012A03D0DF -:10769000022A03D0072038BD814300E00143218046 -:1076A00088B20105890F08D0012189038843A97890 -:1076B0000907C90F89030843208080B28104890F1C -:1076C0000AD0A9784004C906C90F400CC903084371 -:1076D00020808004800F02D12088400403D52088B8 -:1076E000402108432080002038BD70B504460020AA -:1076F000088015466068FFF7A2FF002815D1218990 -:10770000A089814210D86168594E8978C90707D08D -:10771000711E884208D831460DF038FB298009E0F7 -:10772000FF21FF31884201D90C2070BDFF30FF30AE -:107730000330288060688078C007A08903D0314674 -:107740000DF024FB03E0FF30FF30033081B22980CD -:1077500020688178474801732068464900882039AD -:107760004885002070BD10B5137804785B08E407E5 -:107770005B00E40F23431370FD2423400478A40727 -:10778000E40F640023431370FB2423400478640750 -:10779000E40FA40023431370F72423400478240744 -:1077A000E40FE40023431370EF2423400478E4063D -:1077B000E40F240123431370DF2423400478A4063C -:1077C000E40F6401234313700078BF244006C00F08 -:1077D0002340800103431370002906D00878C107B5 -:1077E00001D1800701D5012000E00020C001590629 -:1077F000490E0843107010BD30B50A8803239B0260 -:1078000004889A4323059D0F02D1A3049C0F01D045 -:107810009B0F00E001239B021A4303230A801B03F2 -:107820009A4303889804840F02D11805830F01D06E -:10783000800F00E00120000302430A8030BDF3B551 -:1078400091B00D0018D01198002818D012212846A8 -:107850000DF07FFA01A9012007F0A9FE00242646B9 -:10786000374677E0022900000128000003300000BD -:10787000010200000C140020102013B0F0BD0720FE -:10788000FBE76846007C01280BD16846C1890520CA -:10789000C002081A0AD001280AD002280CD00328F6 -:1078A0000CD0042C0ED0052C0FD10DE0012400E0EB -:1078B00002246846868908E0032406E0684604241A -:1078C000878902E0052400E0062468468189119832 -:1078D00081423FD12C74002E3AD00BA800900CAB03 -:1078E00010220021304607F0F4FE002820D168461F -:1078F000808D2A46C0B20CA909F0EDFC002817D1F2 -:10790000AE81002F24D00BA8009006AB13220021DB -:10791000384607F0DEFE00280AD16846808D06A9A9 -:10792000C01E0331C0B22A1D09F0D5FC002801D0C9 -:107930000320A2E76846817E427E08021043E88168 -:10794000062C05D16846007CA8726846C08928814B -:10795000002092E701A807F032FE002891D0FFF73F -:10796000C6FD8AE7002804D0012903D0022904D0EB -:1079700003207047F949C98D02E0F8494031C988B0 -:10798000814201D1002070470720704730B5F34C89 -:107990000025608B91B0C00B2ED1216900292BD01E -:1079A000207B800728D401226846027102720022DF -:1079B0004272228B8281A28A8282049117210183E2 -:1079C00009AA0023023206A901A807F0A7F9002896 -:1079D00003D0FFF7F4FD11B030BD207B0221084336 -:1079E000207307A8009069460B8B20880422012190 -:1079F000FFF7CCFA05460BE0FBF7A5FC84210170EC -:107A00000921017218341ECC0C301EC0FBF7B7FCE4 -:107A10002846E0E710B5D14C034621690020002933 -:107A200009D02146012210311846FBF76BFE0020D9 -:107A30002061A0820120217BF9221140217310BD19 -:107A400070B50C4605461C2120460DF082F9002039 -:107A50002080002D08D0012D04D0C1A1C5480DF013 -:107A6000B8FA70BD062000E00520A07070BD10B50A -:107A700007F07CFB10BDFEB50546007800260C46DD -:107A8000374603000DF096FB0C91070C1D962F4610 -:107A90002F46486C899168680A38FBF793FD89E0A6 -:107AA000002904D0B348AEA11B300DF092FAFBF7C9 -:107AB0004AFC04464078082108436070FBF75FFCED -:107AC00078E0002C04D1BB20A5A180000DF081FA44 -:107AD000284601F0B1FA00286CD0607808210843EC -:107AE0006070022666E0E888694608800190002CF4 -:107AF00004D1A0489AA12F300DF06BFA28780728FE -:107B00001CD10198C00B19D0944800218171A9881B -:107B1000818012E003264DE0002C04D1C52090A105 -:107B200080000DF056FA8D48017B89070BD500695E -:107B3000002802D0E888C00B3CD0022660780821DB -:107B40000843607036E0291D8EC918308EC0283871 -:107B50000188022601222046FBF7B6FD0127EDE74A -:107B6000002C04D183487EA164300DF032FA7B48AA -:107B70000821007B4007C00F460060780843607012 -:107B8000002E17D12879012802D16879002811D058 -:107B90002046FFF73FFF07460CE0002CCED10D201A -:107BA0006FA180010DF015FAC8E772486CA17A3018 -:107BB0000DF00FFA002C0CD06078000709D5002FCB -:107BC00007D1842020702046582229460830F9F732 -:107BD000FBFA3046FEBDF7B5027A88B00C46054682 -:107BE00020460C300490069216300027921E029018 -:107BF0003E460A31594813000DF0DCFA0ADF06E66A -:107C00002AE62AE66A98C6E64288002A02D0522767 -:107C10000726DDE051271E26002C7DD06A684F48DC -:107C20001288A2800122A2718079C0004019C08907 -:107C3000FFF705FE002877D148488179C900491926 -:107C4000C98921818079C0004019408AA083BFE0A2 -:107C5000688A00900698072817D1E889C00B14D0CD -:107C600000985127223086B2002C55D0A88904995B -:107C7000FFF7E5FD002857D168680088A080022042 -:107C8000A071A8892081012041E000985027203070 -:107C900086B2002C40D0A889FFF7D1FD002843D13F -:107CA00068680088A080A889E080287A07280AD020 -:107CB00002202072288AA0830098E0832046696908 -:107CC0002030009A01E00120F3E70CF0E5FF7FE0AF -:107CD000698A00910169002902D0E989C90B22D083 -:107CE0000099512722318EB200218171A9898180AA -:107CF000002C5FD00088A080A8890499FFF79FFD21 -:107D0000002811D10220A071A88920810420A0722E -:107D1000288AE083009801E04CE005E0208469694E -:107D2000009A0298D1E703200BB0F0BD007B40071A -:107D300002D55127222601E050272026002C39D0D9 -:107D40006868502F0088A08016D00220A0712146BC -:107D5000287B0831FFF774FE3AE00000EC130020A6 -:107D60007372635C67617474735F636F72652E63B3 -:107D700000000000CB020000287BA11DFFF760FE81 -:107D80000020FFF747FE23E0A9890089884207D138 -:107D900054270626002C0DD068680088A08017E0C4 -:107DA00053270826002C05D068680088A080A88981 -:107DB000E0800DE00A98068010E055270726002C89 -:107DC000F8D00020A07103E0FD49FE480DF001F954 -:107DD0000A98002C068001D0278066800020A3E747 -:107DE000F94800210172203801814181418081716F -:107DF0008180027BF923520852001A40027301610C -:107E00008182704770B5F04C86B0203C2080002005 -:107E10006080A071A0806946012007F0C8FB102691 -:107E200008E00199088802461207D20FB0431201F8 -:107E300010430880684607F0C2FB0500F1D02069B6 -:107E4000002804D0DF48DE4933300DF0C2F8207B33 -:107E5000800704D5DB48DA4934300DF0BAF8822DBA -:107E600004D02846FFF743FB06B070BD0020FBE7B7 -:107E7000D54810B52038017B012211430173002140 -:107E800041808171818006F045FB10BD10B5CE4C5C -:107E90000020C043203C20800020FFF7BBFD207B5A -:107EA00040084000207310BD70B5C74D0446203D0A -:107EB000287B800704D5C348C1494B300DF089F8B1 -:107EC000287BC00706D12888C049884202D028698B -:107ED000002801D0082070BD002C08D0A0881628EA -:107EE00001D2092070BD20682861A088A882FFF710 -:107EF0004DFD70BD10B50C4607F02DFB002804D0D9 -:107F0000C520AF49C0000DF064F82046FFF7EFFA36 -:107F100010BDF0B5AC4D0446203591B0002008905E -:107F200068820E462882E8812946E8804039088622 -:107F3000694608830885088688838882A2480E904F -:107F4000007A1746012808D0022806D0032804D05A -:107F5000042802D0082011B0F0BD9D48844269D3A6 -:107F600001239B049B49E21A8A4263D39A4A9442B2 -:107F700060D286425ED31001331A0846834259D339 -:107F80001046864256D26068002815D09049884233 -:107F900050D31101421A8F498A424BD38E498842ED -:107FA00048D260892189884203D801225202914235 -:107FB00001D90C20CFE7089010AA0CA93046FFF792 -:107FC00094FB0028C7D106A92069FFF738FB0028D9 -:107FD000C1D1206900280CD060788007002868464D -:107FE000008B03DA8004800F75D002E08004800FDC -:107FF00071D16846008B81061ED58004800F6068B1 -:1080000009D0002818D00721490740180121890309 -:1080100088420FD201E000280ED06D496068884286 -:1080200008D301218904421A6A498A4202D36A4963 -:10803000884201D310208EE705A96069FFF7FFFA97 -:10804000002888D16069002808D06846808A010528 -:10805000890F01293FD18004800F3CD007A9A06976 -:10806000FFF7EDFA0028A5D16846808A800632D451 -:108070006846808B81062ED4A169002906D00105AF -:10808000890F012927D18004800F24D0E0680028BF -:1080900004D0007800281ED01C281CD24A4A611C3B -:1080A000123220460992FFF75EFB0321002089026D -:1080B000884301218902411868460D9101850121FB -:1080C000817446490182404A0FA91532306809F08F -:1080D00028F9002801D007203DE708A8007F3A4989 -:1080E000C01CC2B26A7100201031FF3200900190B2 -:1080F000FF3203460291039003320AA904A807F055 -:10810000C5F9002827D130482038008E0B902E4822 -:108110003389383032690146123902910093019255 -:10812000039010A90A8873890CA9306807F0AEF98A -:1081300001007CD12448E98811308170090AC1709E -:108140000026009631386A79008E3146099B07F087 -:108150001CF9002802D0FFF7CAF9FCE60E98807CD3 -:10816000C00928D068460D99018501218174292113 -:1081700009020182AE81287B61784008C90740006E -:10818000C90F08432873FD2108406178022289073E -:10819000C90F4900084328730B4900922A31881CF3 -:1081A00002910190002303960D4A0AA904A807F042 -:1081B0006DF901003BD1606800283DD0206911E0D5 -:1081C000607D0000220400000C140020FFFF00006E -:1081D000006001000000FC1F004000200328000098 -:1081E0000302000000280DD106A90CA8FFF704FB2C -:1081F0006078800706D46946088B03210903884309 -:1082000069460883012069468874FD4808822089F0 -:10821000FC490CF0BBFD6268089BFB48019200938F -:1082200002900A460396002306A904A800E081E014 -:1082300007F02CF901007DD12078C10601D4800619 -:108240002ED568460684606900280DD105A90CA8C2 -:10825000FFF7D2FA6846818A032080028143012019 -:1082600080020918684681826946888A4821084345 -:108270006946888201208874E14808AA401C088267 -:10828000E1490192891C0220DE4A029100900023FC -:108290000396921C05A904A807F0F8F8010063D121 -:1082A0002078C0072ED068460684A06900280DD12A -:1082B00007A90CA8FFF7A0FA6846818B032080026B -:1082C0008143012080020918684681836846818BBA -:1082D000402001436846818301218174C84908AA6E -:1082E000891C0182C8480192001D0221C54A0091E3 -:1082F000029000230396921C07A904A807F0C6F871 -:10830000010031D1E068002832D068460D9901851E -:1083100001218174BA49C91C0182E16808A80A7860 -:10832000027049784170E068418868464184E0689D -:10833000017900E018E008A80171E0680722C1880F -:1083400008A84171090A8171AF4808A9801D0092EF -:1083500001910290412200230396D2000AA904A8A9 -:1083600007F094F8010003D00B98FFF7C3FDF2E586 -:1083700003210E98002F017207D0E8883880E88921 -:108380007880288AB880688AF8800020E3E5F0B514 -:1083900001248BB016460F46012802D002281BD1BB -:1083A00004E0684605218474C90202E068469749E2 -:1083B00084740182002F11D0032100208902884398 -:1083C0000121890241186846018506AA05A9384697 -:1083D00008F0A7FF002803D00720A5E41020A3E49D -:1083E000894DB8782E3D287338882F46203F7885F0 -:1083F0006A46127D0020294606AB00920E31019399 -:10840000FF32029103900346FF3203320AA904A807 -:1084100007F03CF8002802D0FFF769F884E4002E4A -:1084200001D0F88D30802C7200207DE470B592B0C0 -:108430000446012508A8857075496846018406F040 -:108440009CFF002208A90120FFF7A1FF064606F0C5 -:1084500098FF30003AD120780024C00700283FD090 -:108460001C2168460CF077FC684601782020014307 -:108470006846017008A885706649684601841194B1 -:108480000794817FF9200140891C6846817700208C -:10849000014668460177002001466846417704217D -:1084A0008185C485018607A80A9011A80D9008A8A7 -:1084B000099006F062FF0EAA09A96846FFF729FD98 -:1084C000054606F05EFF002D02D0284612B070BDB2 -:1084D0004D486946098F4E3801816946898F41812F -:1084E00049482E3804720020F0E7F7B5464E9CB09C -:1084F00000212E3E0091317A012904D0022902D0B8 -:1085000008201FB0F0BD40494E39CA8D824201D0CB -:108510000620F6E71D98824201D10720F1E73B488B -:10852000012110AA9176401C1083002003239B0296 -:1085300002469A438B02D31810AA93846A46918408 -:108540003549D18410AA9077908317AA0A926A4677 -:1085500091850C9009A807F051F80024254627467C -:1085600004A909A807F04DF8002810D082287BD173 -:10857000002C7CD0002D7AD010A8048145810024E5 -:10858000047518A8807812AD012872D07AE0684688 -:10859000807D002F1FD0012862D16846818A1B4848 -:1085A000401C814219D114A800906846408A0EAB45 -:1085B0001022002107F08DF8002877D110A8008A3A -:1085C000042801D006285BD16846018F1D9881429E -:1085D00046D10F2095E7012842D16846808A0521BF -:1085E000C902884202D0491C884239D106484E3817 -:1085F000C18D6846408A814210D101270FE00000FA -:1086000001290000010200003A14002001280000A6 -:1086100001180000052A0000FFFF00000027002CC1 -:1086200001D0002D0DD01D99884219D114A90091B7 -:1086300004460EAB1022002107F04BF8002835D17C -:1086400001E0009D0CE010A8008A022801D010284B -:1086500016D1C0B218AA0EA908F03DFE00280FD10D -:108660006846408A00907BE720E000E001E00520BA -:1086700047E72A1D15A918A808F053FE002801D0C5 -:1086800003203EE710A8007D0023001DC2B210A801 -:1086900002751E98029019A901950394009216A8DC -:1086A00006F0F4FE002801D102213172FEF71FFF0F -:1086B00027E73EB50B46401E84B201AA00211846AA -:1086C000FFF751F806F059FE02A8009001AB012215 -:1086D0000021204606F059FE044606F052FE684688 -:1086E0000089012803D0FE49FE480CF072FC2046A8 -:1086F000FEF7FDFE3EBDF0B5FB4E0446307A89B074 -:108700000F46032804D0042802D0082009B0F0BD89 -:1087100004AA06A92046FEF7E8FF0500F6D1F248B4 -:108720002389383022690146103902910093019261 -:10873000039069460A8A638906A9206806F0A6FEA6 -:10874000002802D0FEF7D3FEE0E7002F03D0E64872 -:10875000203000893880042030722846D6E738B5AA -:108760000C00054608D00022694607F00CF80028E6 -:1087700004D0FEF7BCFE38BD102038BD6946204647 -:10878000FEF75DFF0028F8D1A0786946C207D20F36 -:10879000284607F013F8ECE73EB50C0008D002AA13 -:1087A000694606F0F0FF002804D0FEF7A0FE3EBDAB -:1087B00010203EBD032120460CF0CBFA684600880D -:1087C00001A90005800FFEF726FF00280BD168469F -:1087D000007920706846008801A98004800FFEF7A8 -:1087E0001AFF002801D003203EBD68460079607062 -:1087F000A278EF20024068460088C10B09010A43B5 -:10880000F7210A404104C90FC9000A43A270F921A7 -:108810000A40800601D5012000E0022040006946A0 -:108820000243097A50084000C907C90F0843A070E5 -:1088300000203EBDFEB51D4614460E46074606F016 -:108840009CFD01A8009022882B463146384606F050 -:108850009CFD054668468088208006F092FD2846EB -:10886000FEF745FEFEBDF0B50C46002199B0074667 -:10887000684681850D46002C11D0E068002806D09E -:10888000A06800280BD002886B469A850180A078EA -:10889000012806D0022804D0072019B0F0BD10200E -:1088A000FBE72088002807D0401E80B201A906F00F -:1088B0007EFE002842D136E08C48EEE769468A8980 -:1088C00021888A420BD26846007C002501282CD1E1 -:1088D0006846C0898649884227D1012525E08A4219 -:1088E00003D1002D2FD06D1C01E0022D02D0032DED -:1088F0001BD31FE06946097C012916D169467C4BD0 -:10890000CA895B1ED11A9A421DD005DC7948101A1B -:1089100019D0012809D116E0012914D0FF390139F5 -:1089200003D1032506E00D26B60201A806F047FE96 -:108930000028C3D0822804D0002806D0FEF7D7FD37 -:10894000ABE7022DFAD13046A7E7E068002813D044 -:1089500006F013FD0BA800906A46A1882088928D2E -:10896000E36806F012FD054606F00BFD002D19D157 -:108970006846A168808D088002980078C00601D5FD -:108980005D488AE706F0F9FC0EA8009068468089E9 -:108990000CAB0222002106F09CFE054606F0F1FC1D -:1089A000002D01D02846C9E76846008F022801D073 -:1089B000032072E7A078012808A8007C03D0800774 -:1089C0000ED4082069E7C007FBD00820FEF7C8FADC -:1089D000072802D34548401C5FE70825022001E034 -:1089E000022503206946087621886846818317217D -:1089F000818611AA002302320DA906A806F08EF97D -:108A0000002802D0FEF7DBFD47E70FA8009068467C -:108A1000838E042229463846FEF7B8FA3DE770B542 -:108A2000064615460C460846FEF71EFD00280AD1EC -:108A300006F0A3FC2A4621463046FFF7A8FC044670 -:108A400006F09FFC204670BD70B514460D460646E4 -:108A500006F093FC224629463046FFF746FD0446C1 -:108A600006F08FFC204670BD70B51E4614460D0002 -:108A70001AD0002C18D06168002915D00121FEF70A -:108A800071FF00280FD12068FEF7EEFC00280AD104 -:108A900006F073FC324621462846FFF73AFA0446B0 -:108AA00006F06FFC204670BD102070BD70B51546F5 -:108AB0000C0023D00221FEF755FF00280ED12068BC -:108AC000FEF7D2FC002809D106F057FC29462046C3 -:108AD000FFF711FE044606F054FC204670BD00006E -:108AE000607D00003E0600000C14002003300000F2 -:108AF0000328000000280000013400001020EDE7EA -:108B0000FEB507460E4607201546400701211218FC -:108B100089031C468A4219D2002C02D020188842B0 -:108B200014D2384600F045FA00280AD1002C0FD1A3 -:108B300001AA6946384606F026FE002802D0FEF754 -:108B4000D6FCFEBD68460088800601D41020FEBD1C -:108B500023462A4631463846FFF76CFEFEBDFFB578 -:108B600085B01E4614000F4609D003AA02A9059835 -:108B700006F009FE002804D0FEF7B9FCC6E5102077 -:108B8000C4E568460089C00601D5FB48BEE506F08D -:108B9000F4FB01A800900023F84A3946059806F036 -:108BA00098FD054606F0EDFB002D11D1002E0CD0EE -:108BB00006F0E3FB002000902288334639460598F2 -:108BC00006F087FD054606F0DCFB684680882080BD -:108BD0002846D1E7002906D0E94B0A885B899A42EA -:108BE00001D8E84870473EE610B586B004236C46CD -:108BF000A382E34B1C89002C07D05B898B4201D2F6 -:108C0000914204D9DF4806B010BD0620FBE76B4651 -:108C100019825A820021009101911C8002219970D1 -:108C200005A9029104A903916946FFF71CFEEAE732 -:108C3000F0B591B00D4681206946087105F09CFCA5 -:108C40000646002D08D02878CD4C012806D00228F1 -:108C500028D0072011B0F0BD1020FBE7A98801AA99 -:108C6000FEF778FC0028F5D1B00734D568460079C6 -:108C7000002820D1A879C0071DD006F07EFB002077 -:108C800000906A892989A088EB6806F07EFB694616 -:108C9000087106F076FB6946087900280BD0FEF7CC -:108CA00026FCD7E7A98801AAFEF754FC0028D1D1F9 -:108CB000342006420FD00121684601720173017908 -:108CC0004173F00609D5A18868460182A18A018313 -:108CD0002069059004E00820BCE7A0886946088266 -:108CE000FAF731FB05461720694688830AAA2B4606 -:108CF000023207A902A806F011F8074668780007B3 -:108D000001D5FAF73CFB002F03D03846FEF757FC9D -:108D1000A0E7F00603D5207B062108432073B006A8 -:108D200002D50020FEF776FE08A8009069468B8BDE -:108D3000208804220121FEF729F98BE7F0B50026EF -:108D400095B014460D4600290FD0022C4FD3A71E14 -:108D5000BAB28A480AF052FE29191039CA7B8B7BB5 -:108D600011021943884242D1BCB201A9012006F088 -:108D70001EFC7AE0029F3888010776D5002D41D08D -:108D8000A9190691CA788B78361D1102B6B219431B -:108D90008919A1422BD869468A8906994B780978A6 -:108DA0001B020B439A4222D1C00623D506F0E5FAF6 -:108DB00007A800900698AB19C17880780A02069936 -:108DC00002434878097800020843002106F0DDFAE2 -:108DD000009006F0D6FA009800283ED10698C17897 -:108DE000827808026946898B1043884202D00B20A2 -:108DF00015B0F0BD0698C17882780802104380193A -:108E000086B22EE0C0062CD5002007AA01461154D8 -:108E1000401C80B21028FAD306F0AFFA06A80090E2 -:108E20006846002380891022194606F052FC009003 -:108E3000002803D006F0A5FA00980EE00BA86946BA -:108E4000009088890A8B07AB002106F09EFA0090FB -:108E500006F097FA0098002803D0FEF748FBC7E712 -:108E600003E0388810218843388001A806F0A7FB6A -:108E7000002800D17EE7424D6988002921D00122D7 -:108E800068460276027700244477018417218185A1 -:108E90000EAA234602320BA906A805F03FFF0028C0 -:108EA00002D0FEF78CFBA3E70CA8009069468B8DDF -:108EB000288804220121FEF769F8002898D16C80E7 -:108EC00096E7002094E7F0B5002487B015460E46DB -:108ED000002A04D002A9012006F069FB41E010201D -:108EE00007B0F0BD0398007800073AD506F045FAC0 -:108EF00001A8009068460023008A204A194606F01F -:108F0000E8FB074606F03DFA002F23D1002E23D0C0 -:108F100068468088298820183719001D814239D376 -:108F20006946098A3970090A797069468988B97071 -:108F3000090AF97006F021FA01A869460090088A2A -:108F40008A883B1D002106F0C4FB074606F019FA8B -:108F5000002F01D00320C3E7684680882018001D39 -:108F600084B202A806F02BFB0028BBD082280BD0CD -:108F7000FEF7BDFAB4E7000001340000FFFF000077 -:108F8000EC13002003300000002E0ED02988A01C16 -:108F9000814201D20C20A3E72246314639480AF02B -:108FA0002DFD31190870000A4870A41C2C80002087 -:108FB00096E700B585B06946FEF741FC00280AD166 -:108FC0006846007C03000CF0F5F808052F2F2F2FC2 -:108FD00008080531032005B000BD684680780128E7 -:108FE00007D1684600880321C902401A1CD0012815 -:108FF0001AD068468079012806D1684680881521F4 -:109000004902401A05280FD96846807A012811D1F3 -:109010006846018929200002081A05D0022803D0D9 -:10902000032801D0042805D10F20D4E7164917489A -:109030000BF0CFFF0020CEE738B5154A0021518054 -:1090400003791AE0CC002418A46800946C462488A4 -:10905000250707D5E50605D5D90008182038C08BA7 -:10906000508006E0640406D59171C9000818C088D4 -:109070009080012038BD491CC9B28B42E2D8002043 -:1090800038BD0000FFFF0000607D000033020000DB -:10909000EC1300200120F8494006C861704770B504 -:1090A000F54D0024AC7028466C7020304470047478 -:1090B0006C61AC72AC6209F01AFFA86128463430CA -:1090C0000AF0B4FD002804D0FF20ECA13A300BF0E8 -:1090D00080FFEE48C46301204006E86170BD70B5B2 -:1090E0000125EB4902260E60E849CD63E949C96ACA -:1090F00009070ED4E7494031CB6AE74A53620B6B4C -:1091000093624B6BD3628B6B1363C96BD3051943AB -:109110005163D949E14CC96900282BD001282DD0D1 -:10912000FF20D6A169300BF054FFDD48A063FF207B -:10913000043060632563DB49032008602061D74960 -:10914000962040314860D948D7494163D549FC3918 -:109150000163D549091FC163D249F03981630320F6 -:10916000D249000340394860D14910204860D148B5 -:10917000066070BDD0486061D04804E0CF48E03060 -:109180006061CE48801F0143A161CEE7BA4901204A -:1091900008707047B84900200870704770477047E2 -:1091A000BE4940310028086802D00122104301E086 -:1091B000400840000860704770B50C46AE4D01464F -:1091C0000622E81C0BF068FD6C7270BDAA482030C6 -:1091D00040787047A84A91705070704770B50D463E -:1091E0000446082904D9FF20A4A1C6300BF0F1FEE3 -:1091F0000022B34809E09100635809180B6053003E -:109200001B191B8C0B62521CD2B2AA42F3D3206BE7 -:10921000AB494031086070BD0B23DB4310B5C21A67 -:109220009E4998421FD008DC1C3222D00A2A20D046 -:10923000142A1CD0182A08D117E0083011D00428AD -:109240000DD0082809D00C2805D0FF208BA1F230C2 -:109250000BF0BFFE10BD04200CE000200AE0FC2053 -:1092600008E0F82006E0F42004E0F02002E0EC2022 -:1092700000E0D820C86010BD7F482030007B7047D8 -:1092800010B5864CC17861620BF067FD0002E061A9 -:1092900010BD252808D0262808D0272808D041004E -:1092A0000A2807D8091D06E0022105E01A2103E07B -:1092B000502101E0891DC9B2784A91607749403157 -:1092C000486170476C494861704770B56A4CA0723C -:1092D00000F01FFBA07AC00740D0724D28688007BD -:1092E00003D466A177480BF074FEA07A01061DD561 -:1092F000800707D5734861A1801C0BF06AFEA07A35 -:10930000000613D52078694E012816D0002804D015 -:109310006C485AA111300BF05CFE6B487061A0697B -:109320003061FF206149013040394860A07A8007F0 -:1093300014D52868C00708D102E06348001FEDE794 -:1093400060484EA11A300BF044FEA07A400728680E -:1093500001D5042100E008210843286070BD70B5E4 -:109360000124454D002807D0012818D002281AD022 -:10937000232042A100010BE000F0CBFA52482978EB -:10938000001F012907D0002907D04E483BA15738BC -:109390000BF01FFE70BD046070BD446070BD812085 -:1093A000FFF793FF70BD00F0B4FA6869002804D19C -:1093B000444832A14F380BF00CFE6969A86A401886 -:1093C0004249C86039484249403001603E490C3149 -:1093D00041600814354940394860274820300474FA -:1093E00070BDF8B50C2069460870314C6068C00645 -:1093F000C50F1026A66034480021FC300161324BB5 -:1094000001221B1F1A610BE000BF00BF00BF00BF9D -:1094100000BF00BF00BF00BF6B461A78521E1A7013 -:109420006A461278002A02D00269002AECD0016153 -:1094300068460078002804D1912010A180000BF02C -:10944000C8FD002D00D06660F8BD0B490020C86142 -:10945000704710B50BF081FC00021049000AC86388 -:1094600010BD0B49022008607047094902200860BE -:109470001049086070470000481400207372635C54 -:1094800068616C5F7263732E63000000C01F004050 -:1094900080E100E08000001000170040001500404F -:1094A0005B060000001200404480004040F501408F -:1094B0000013004080E200E00601020025000300E6 -:1094C0000016004075020000041000404085004076 -:1094D0004C810040F74902200860CBE7F64908704C -:1094E000C8E710B5F5480AF0A9FB002803D0F449F5 -:1094F000F4480BF06EFD10BD10B5F0480AF0B6FB55 -:1095000010BDF1494860B5E7EC4910B53439EF4B6F -:109510000022C8605A60896A0818ED49486000F066 -:10952000FFF910BDE54810B5C2213438C160E74AE3 -:1095300000215160806AE649C230486000F0F0F9CD -:1095400010BD0120E34940028860DC490020343925 -:10955000C860DF4948608DE7D84900203439886207 -:1095600088E7D648DA493438806AFE30886081E777 -:10957000D749002088607DE7D748016810229143D1 -:109580000160D6490120886174E7D5490020C8618F -:10959000D14801681022114301606BE700B5FFF765 -:1095A000EBFFC64900203439087400BD00B5FFF751 -:1095B000ECFFC24901203439087400BDC849CA69AA -:1095C000012A01D0002055E7BF4A40329268520676 -:1095D000520E524202700020C86101204AE7F8B5DD -:1095E000BF4C2069012806D00021B44834380078E7 -:1095F000012802D004E04021F7E7E268012A04D004 -:1096000000220A43012802D004E02022F9E7616821 -:10961000012905D000211143B24A002802D007E0F9 -:109620001021F8E71368012B02D1E368012B04D065 -:1096300000230B43002802D007E00823F9E7116854 -:10964000002902D1E168012905D000221A439F4E6A -:10965000002802D004E00422F8E77168012904D050 -:1096600000211143002802D004E00221F9E76068DC -:10967000012829D000259C480D4301680906090EE0 -:1096800002D06169012900D000218C4F143F397349 -:1096900000680006000E02D0A069012800D000205A -:1096A00078738B488068002803D000F03DFA0128C9 -:1096B00000D00020B8730021E16021616160616128 -:1096C000A16171602846F8BD0125D4E77B480121DE -:1096D0001438C173CEE6F8B5784E0127143E307CBD -:1096E0000025002825D07C4C206800902560FFF7DD -:1096F00078FE009820607A48C56005614560456144 -:1097000085617449001488603046203801787348B8 -:1097100001290AD000290AD0D920694980000BF01C -:1097200058FCF9F775FC3574F8BD0760F9E7476038 -:10973000F7E7FFF754FF04460020F07364484268DF -:109740005E4D343D6A620068A8622978002909D11B -:10975000A978002906D05C4B5B681B780B406978C0 -:10976000994309D000213170E10707D0104602F07B -:1097700029FD0121A86A08E03770F5E7A10601D5A7 -:10978000022102E0A10702D5002102F02AFD4E4F7E -:10979000796806220931E81C0BF051FA002807D13C -:1097A000687A79680978C909884201D1012000E006 -:1097B00000207070204600F0BDF83F48C2270078B6 -:1097C000002815D0012828D002283BD003285AD0E1 -:1097D0003B4946480BF0FDFB287C002804D0287844 -:1097E000002865D0FFF7C8FE2878002861D089E0FE -:1097F000A00701D501F0CCFB200703D50120EF60C5 -:1098000001F0FEFB600703D50020EF6001F0F8FBDC -:10981000A006E1D501F068FBDEE7A00701D503F063 -:1098200026FF200703D50120EF6003F09FFE6007AD -:1098300003D50020EF6003F099FEA006CCD503F01D -:1098400020FEC9E7A00703D5BF200440F9F7D2FBEB -:10985000200705D5BF2004400120EF60F9F7C9FBC0 -:10986000600705D5BF2004400020EF60F9F7C1FB79 -:10987000A00603D5BF200440F9F7BAFB6006ABD5BC -:10988000F9F7B9FBA8E7A00701D5F9F7B7FB20075F -:1098900003D50120EF60F9F7B0FB600703D5002086 -:1098A000EF60F9F7AAFBA00696D5F9F7A5FB93E7B9 -:1098B0001EE020E000E100E0600000207C140020B9 -:1098C0007C940000AB020000001500404081004085 -:1098D0004085004000F501400012004000100040AB -:1098E00000110040001400404016004094040000A5 -:1098F000FFF74BFE78E7E868002803D0A96A09184B -:1099000028484160F07B002800D10DE7F9F780FB83 -:10991000F8BD254903200860881524498860A9E519 -:10992000224823494030C161224981611F494015C5 -:1099300048609FE570B50546FFF7EBFF1E4CA17A26 -:10994000080701D568071CD41C4AC80605D5507BFA -:10995000002802D0907B002813D0880602D510780A -:1099600000280ED1480602D55078002809D00020E2 -:109970008A070026002A07DA4A0704D50122227046 -:1099800002E00120F4E72670CA0709D0AA0705D42F -:10999000890705D5002803D0A80601D4FFF721FDCB -:1099A000A67270BD408500400012004000F50140E5 -:1099B000101000404481004048140020681400202A -:1099C0002E48002101704170704770B5064614465C -:1099D0000D460120F7F780FE28490120284B08702A -:1099E0009E60DC601D6170BDF8B504460120F7F78C -:1099F00073FE22490120087021494C60214900264C -:109A00004E600321204D8902A960204F002C0AD00E -:109A1000012C03D01EA140200BF0DBFA3E60032096 -:109A200080026860F8BD386001208002F9E710B557 -:109A30001248017800290ED00321134A890291604F -:109A400010494A680021002A03D0154A1268427062 -:109A500000E0417001700020F7F73EFE10BD07489E -:109A60000178002907D007484068002802D00C4838 -:109A70000068C0B270474078704700006100002065 -:109A800000F5004000F1004000F5014000F2004008 -:109A90007372635C68616C5F63636D2E63000000CA -:109AA00000F400403648002101704170102181709F -:109AB000704770B5064614460D460220F7F70CFEB7 -:109AC00001202F492F4A0870E41E146196605560EA -:109AD00070BD10B50220F7F7FFFD2949012008707D -:109AE000294800210160416081602849C014486014 -:109AF00010BD10B5224C2078002811D00120234938 -:109B0000C002886000F02EF80021002804D0012057 -:109B100060701F48006801E061701020A070217023 -:109B20000020F7F7D9FD10BD10B5154801780029C0 -:109B300005D000F017F8002800D0012010BD4078B3 -:109B400010BD10B50E480178002909D000F00AF8C0 -:109B5000002803D00E480068C0B210BD102010BD10 -:109B6000807810BD08480168002905D041680029A7 -:109B700002D08068002801D0002070470120704783 -:109B80006300002000F5004000F1004000F50140B6 -:109B900000F4004010B528210BF0DBF810BD407830 -:109BA0008006800E704740788006800EC01C70478B -:109BB0002820704770B5054600780A0700090001A3 -:109BC000120F104328700B000BF0F4FA070507057D -:109BD000070509050B00062408E00C2406E02224F2 -:109BE00004E00024FEA158200BF0F3F96878800906 -:109BF00080012043687070BD00780007000F704737 -:109C000010B50622C01C0BF047F810BD0B4610B56E -:109C1000C11C062218460BF03FF810BD10B50622F5 -:109C200009300BF039F810BD0B46014610B506227D -:109C3000093118460BF030F810BD0278BF23C90770 -:109C40001A40490E0A430270704700784006C00F60 -:109C5000704702785206520EC9010A4302707047DB -:109C60000078C009704770B50C460546C11C2046F7 -:109C7000062209300BF010F820784006400E2070C4 -:109C800029784906C90FC9010843207070BD70B515 -:109C900015460E4604461F2A03D9D1A1A9200BF070 -:109CA00098F920462A46314609300AF0F5FF6078D7 -:109CB000AD1D80098001A906890E0843607070BD42 -:109CC00070B5054640780E468406A40E062C03D2D5 -:109CD000C3A1B9200BF07DF9A41FE4B21F2C00D959 -:109CE0001F2429462246093130460AF0D5FF204676 -:109CF00070BD70B515460E4604461F2A03D9B8A19B -:109D0000CD200BF066F920462A46314609300AF08C -:109D1000C3FF6078AD1D80098001A906890E084344 -:109D2000607070BD70B5044640780E468506AD0E75 -:109D3000062D03D2AAA1DE200BF04BF9AD1FEDB228 -:109D40001F2D03D9A6A1E2200BF043F921462A4694 -:109D5000093130460AF0A0FF284670BD10B5042234 -:109D60000F300AF099FF10BD0B46014610B50422D2 -:109D70000F3118460AF090FF10BD10B503221330C2 -:109D80000AF08AFF10BD0B46014610B503221331BD -:109D900018460AF081FF10BD4176090A81767047A6 -:109DA000817E427E080210437047C176090A01771E -:109DB0007047017FC27E0802104370474177090A4D -:109DC00081777047817F427F080210437047C175D9 -:109DD000090A01767047017EC27D08021043704770 -:109DE00081757047807D704720300279C90652091D -:109DF0005201C90E0A430271704720300079C00633 -:109E0000C00E704720300279D206D20E49010A43B3 -:109E100002717047203000794009704710B5052263 -:109E20001F300AF039FF10BD0B46014610B5052260 -:109E30001F3118460AF030FF10BD30B5411C837E3B -:109E40000A461902D37D447E927D1B0221431343AF -:109E5000674D827D8C1FAC4210D8002A0ED0082A94 -:109E60000CD88A420AD28B4208D8817F427F0802EE -:109E70001043A91D884201D8012030BD002030BD0B -:109E800000210A464254491C2229FBDB70474078D6 -:109E9000C006C00E70474078C006C00EC01C704798 -:109EA0002220704710B502788B07920892009B0F12 -:109EB0001A4302704278520952014270012908D0B7 -:109EC000022906D0032905D0FF2045A1A3300BF0BD -:109ED00080F810BD01210A43427010BD10B5027810 -:109EE0008B07920892009B0F1A4302704278520926 -:109EF00052014270012908D0022906D0032905D059 -:109F0000FF2037A1BD300BF064F810BD01210A43DA -:109F1000427010BD00788007800F70470278FB23E5 -:109F2000C9071A40490F0A4302707047007840077A -:109F3000C00F70470278F723C9071A40090F0A4378 -:109F40000270704700780007C00F70470278EF2357 -:109F5000C9071A40C90E0A43027070470078C0064C -:109F6000C00F704770B50546C1700B000BF022F9A9 -:109F70000E080A0C0E1012120C14141212160C18E1 -:109F80000C2413E0082411E002240FE017240DE054 -:109F90000D240BE0012409E0092407E0062405E074 -:109FA000452000240EA1C0000BF013F8687840098A -:109FB00040012043687070BDC078704770B504469A -:109FC00040780E46C506ED0E1B2D03D904A10948A5 -:109FD0000AF0FFFF6019C01C042231460CE00000AB -:109FE0007372635C756C5F7064752E6300000000B3 -:109FF0007A0C00003A0200000AF04EFE70BD70B507 -:10A00000044640780E46C506ED0E1B2D03D9A04927 -:10A01000A0480AF0DEFF6119C91C042230460AF08C -:10A020003BFE70BDC171090A01727047017AC279A5 -:10A030000802104370474172090A81727047817AA1 -:10A04000427A080210437047C172090A01737047CF -:10A05000017BC27A0802104370474171090A81717D -:10A060007047817942790802104370470171704747 -:10A07000007970474173090A81737047817B427B85 -:10A0800008021043704730B5411C037A0A46C47970 -:10A0900019022143537914791B0223437E4D007921 -:10A0A0008C1FAC4210D800280ED008280CD888424B -:10A0B0000AD28B4208D8D07A917A00020843A91DAF -:10A0C000884201D8012030BD002030BD10B50522E6 -:10A0D000001D0AF0E1FD10BD0B4610B5011D052263 -:10A0E00018460AF0D9FD10BD4172090A8172704705 -:10A0F000817A427A080210437047017170470079F3 -:10A10000704710B50822001D0AF0C6FD10BD0B46B1 -:10A1100010B5011D082218460AF0BEFD10BD0A78D0 -:10A120000273497841737047027B0A70407B487024 -:10A13000704710B508220E300AF0AEFD10BD0B4678 -:10A14000014610B508220E3118460AF0A5FD10BDD3 -:10A1500010B5042216300AF09FFD10BD0B460146D3 -:10A1600010B50422163118460AF096FD10BD10B540 -:10A170000822001D0AF090FD10BD0B4610B5011D10 -:10A18000082218460AF088FD10BD10B504220C30D4 -:10A190000AF082FD10BD0B46014610B504220C31B9 -:10A1A00018460AF079FD10BD017170474171090A26 -:10A1B00081717047C171090A017270470079704757 -:10A1C00081794279080210437047017AC279080206 -:10A1D00010437047017170470079704701717047F3 -:10A1E0000079704710B50822001D0AF055FD10BD1A -:10A1F0000B4610B5011D082218460AF04DFD10BD92 -:10A2000010B50822001D0AF047FD10BD0B4610B521 -:10A21000011D082218460AF03FFD10BD70B5154615 -:10A220000E4604461B2A04D93720194900010AF0BA -:10A23000D0FE2A463146E01C0AF02EFD6078E90681 -:10A2400040094001C90E0843607070BD70B50546F5 -:10A2500040780E46C406E40E1B2C04D9DF200C49BE -:10A2600080000AF0B6FE2246E91C30460AF014FDD2 -:10A27000204670BD4078C006C00E1B2801D80120C2 -:10A2800070470020704710B522220AF005FD10BD6E -:10A29000E09F0000430200007A0C0000FEB50F466C -:10A2A00004460146064620302546C031603640351A -:10A2B0000190032F04D0002F2DD0012F2BD04BE085 -:10A2C00000206080A080E08020816081A082E08505 -:10A2D000E0826874A074E074A076E076A073E07306 -:10A2E00020746074019B987401232B74A8822883C6 -:10A2F0000876E883B0706883A873E8732077607786 -:10A30000019988720199087430727072B072327457 -:10A31000B074A883FEBD0020A8822883012F52D0EC -:10A32000E08B0090608C0290C00000990AF02EFD36 -:10A33000401C80B2E8820099192241439202914266 -:10A3400001DD401EE8827D20000200990AF01EFD1A -:10A35000401C3080002F01D0022FDBD10198007A01 -:10A36000C1060198C90E01720020687322182421C9 -:10A370008B5C4032D9075B08DE07C90FF60F7118F6 -:10A380005B08DE07F60F71185B08DE07F60F711821 -:10A390005B08DE07F60F71185B08DE07F60F711811 -:10A3A0005B08DE07F60F76185908891911726A7B67 -:10A3B000401C5118C0B269730528D7D3002FA9D10A -:10A3C0000020A874FEBD4A7F2046E030022A12D049 -:10A3D000097F022913D050A173200AF0FAFD012051 -:10A3E00000900290E08BA98B484300990AF0DCFCB6 -:10A3F000A883029898E7818800910089F1E7018A93 -:10A400000091808AEDE770B504464034667B0546CE -:10A41000002E68D0252E66D8002964D03E20405DED -:10A42000A27B4843101825210AF0B0FC0846A1730E -:10A430004207C908520F3C4B691820319A5C0979D0 -:10A440008A4367D031460AF0A1FC491CCAB20020F9 -:10A4500006E0002804D029184031C979511ACAB23F -:10A46000291848235B5C93423AD320310979C943C8 -:10A47000CB07DB17D21A521E1206120E34D08B07EE -:10A48000DB17D21A521E1206120E2FD04B07DB1703 -:10A49000D21A521E1206120E2BD00B07DB17D21A3D -:10A4A000521E1206120E27D0CB06DB17D21A521EEE -:10A4B0001206120E23D08B06DB17D21A521E12067A -:10A4C000120E1FD04B06DB17D21A521E1206120EA6 -:10A4D0001BD00906C917511A491E0A06120E17D0B9 -:10A4E000401C0528B5DB70BDC00013E0C000401C57 -:10A4F00010E0C000801C0DE0C000C01C0AE0C000DD -:10A50000001D07E0C000401D04E0C000801D01E008 -:10A51000C000C01DE07370BD7372635C6C6C5F75CE -:10A5200074696C2E63000000EC51010010B5FF4807 -:10A530000021017041708170C17041718171C171E0 -:10A54000083009F073FB002804D0FF20F8A1843004 -:10A550000AF03FFD10BD10B5F44900204872081DF7 -:10A5600009F064FB002804D0FF20F1A1C3300AF0F9 -:10A5700030FDFFF7DBFFF148FFF782FC0021EF48D9 -:10A58000FFF7E4FC0121ED48FFF78CFC10BDE2E78A -:10A590001B207047E5494A7A002A01D00020704705 -:10A5A000488101204872704710B5E0494A7A002A74 -:10A5B00002D04989814201D0002010BDDB48001D36 -:10A5C00009F03CFB002804D0FF20D9A1B4300AF0E8 -:10A5D00000FDD648001D09F049FBFFF7A7FF012049 -:10A5E00010BD70B5D14C0025627A002A02D0628974 -:10A5F000824201D00D700DE0227863789A4203D335 -:10A6000022786378D21A04E062782378D21A102371 -:10A610009A1A0A70FFF7C8FF002801D0657201205E -:10A6200070BDC2494A7A002A04D04989814201D1C9 -:10A630000120704700207047BC490A784B78521CB3 -:10A640001207120F9A4207D0097822225143BC4ABE -:10A65000891801600120704700207047B3480178D5 -:10A660004278491C0907090F914206D00178491C1C -:10A670000907090F01700120704700207047AB499E -:10A680004A7A002A04D04989814201D101207047C9 -:10A6900000207047A5490A784B789A4207D049783C -:10A6A00022225143A64A89180160012070470020E8 -:10A6B000704710B59D4C20786178884216D060783C -:10A6C000401C0007000F6070201D09F0B7FA002839 -:10A6D00004D0E078401CE070012010BDA078401C40 -:10A6E000A0709248001D09F0C1FAF5E7002010BDE6 -:10A6F0008E4801784078814201D1012070470020C6 -:10A7000070478A4801784278914202D301784078B4 -:10A7100003E041780078081A1021081AC0B2704787 -:10A720000F20704770B5814C0D46617A002916D014 -:10A730006189814213D100262E70201D09F07EFA16 -:10A74000002805D1A0782870A670201D09F08EFA87 -:10A750002878E17840182870E670012070BD00204C -:10A7600070BD76490160704770494A7A002A04D06A -:10A770004989814201D101207047002070476B490F -:10A780004979002901D0002070476E4901600120FD -:10A79000704766484179002901D0002070470121A7 -:10A7A00041710846704761494A7A002A04D04989B4 -:10A7B000814201D101207047002070475B494979EF -:10A7C000012901D0002070475E49016001207047D7 -:10A7D00056484179012901D000207047002141717C -:10A7E0000120704751484079012801D0012070476D -:10A7F000002070474D494A7A002A04D04989814295 -:10A8000001D1012070470020704770B5474C0546C4 -:10A81000A0790721401C0AF0B9FAE079814208D0FA -:10A82000A07922214843474922314018286001205D -:10A8300070BD002070BD10B53C4C0721A079401CB4 -:10A840000AF0A4FAE079814207D0A0790721401CE0 -:10A850000AF09CFAA171012010BD002010BD334800 -:10A860008179C079814201D1012070470020704771 -:10A870002E494A7A002A04D04989814201D1012017 -:10A8800070470020704710B504462848083009F08A -:10A89000D5F9002815D125498879CA7990420CD07C -:10A8A000C8792221484327492231401820601F4897 -:10A8B000083009F0DBF9012010BD1C48083009F010 -:10A8C000D5F9002010BD10B504461848083009F02D -:10A8D000B5F9002815D115498879CA7990420CD06C -:10A8E000C8792221484317492231401820600F4877 -:10A8F000083009F0BBF9012010BD0C48083009F000 -:10A90000B5F9002010BD094810B5083009F096F9D6 -:10A91000002822D1054CA079E17988421AD0E0794B -:10A920000721401C0AF032FAE1710DE066000020B8 -:10A930007372635C646D5F712E630000B01700205A -:10A9400080140020A01600202046083009F08EF95F -:10A95000012010BD0C4809F089F9002010BD0A48FB -:10A9600008388179C079814201D1012070470020E7 -:10A970007047054808388179C079814201D10120AA -:10A9800070470020704700006E000020704770473D -:10A99000FF207047704770470020704700207047C5 -:10A9A000002070470020704700207047002070474B -:10A9B000002070470020704700207047012070473A -:10A9C000002070470020704700207047002070472B -:10A9D000F8B5FF4D0446A87F002600280CD00029BA -:10A9E00023D1667010202070E87FA07028462030A8 -:10A9F0000078E070AE7718E0287A012801D00020B6 -:10AA0000F8BD002911D16670F149687A01270A3131 -:10AA1000002801D0132000E0052020701422A01C83 -:10AA20000AF03AF9A7716E722E720120F8BDF8B5DE -:10AA3000E8480078002802D00C273846F8BD0027E7 -:10AA4000E34D3C46203DAF74EF746F75AF752F75C5 -:10AA500028466F732038DE4E47737771E87D0028F3 -:10AA600004D0FEF785FDFFF744F8EC75347274727C -:10AA7000B477D7482430FFF78DF8D5484C30FFF72E -:10AA800089F8DAE710B5D34C00232370D04C203C72 -:10AA9000E375CF4B01241C71603B583307C3FFF7AC -:10AAA000C6FF002804D0FF20CBA102300AF091FAA3 -:10AAB00010BDC7482038807C7047F8B5C44D0646A5 -:10AAC000407B203DE873C24837791346AF73B27BB1 -:10AAD00082710446603C217006221946601C0AF00F -:10AAE000DBF8B07960730622F11DE01D0AF0D4F89E -:10AAF000687B0126002800D0EE74B5484038407BC2 -:10AB0000002800D02E75002F09D0012F09D0022F68 -:10AB100024D0032F46D0FF20AFA14D3013E00021F9 -:10AB20001DE0AB4801212430FFF744F8A848E11D9F -:10AB30002430FFF773F8607B002807D0012807D086 -:10AB4000FF20A5A143300AF044FA0CE0002100E008 -:10AB500001219F482430FFF77CF804E006219C483F -:10AB60002430FFF727F800206875A8759848611C05 -:10AB70002430FFF745F8964821782430FFF75DF838 -:10AB8000934804214C30FFF715F89148611C4C3074 -:10AB9000FFF736F88E4821784C30FFF74EF8AE7448 -:10ABA0000020F8BD0221DAE770B5894C0125203C70 -:10ABB0000246A5758648007A002801D03A2070BD6B -:10ABC000834860380378934206D1002262750622DA -:10ABD000401C0AF061F86575002070BD70B5044630 -:10ABE0007B4D0020203D28752846224632380AF049 -:10ABF00053F82846203844730120287570BD7449E5 -:10AC00000871704710B5724C0022203CE2746073EA -:10AC10000246204612380AF03FF80120E07410BDC9 -:10AC2000F8B500F04CFB6A4C0025203CE07D002884 -:10AC300004D0FEF79DFCFEF75CFFE575654E3570B0 -:10AC4000FEF75AFCA07B012804D00021084601F041 -:10AC500082FAF8BD0021022001F07DFA5C4C207AD6 -:10AC60000127002809D0A07F0028F2D10520E07735 -:10AC7000204620300570A777F8BD70780028FBD0FB -:10AC8000534906226039487BE073C91D0846693084 -:10AC90000AF002F83C20A07227727570F8BD10B55A -:10ACA0004B4C203CE17B207CCA0701D0C2070BD073 -:10ACB0008A070FD582070DD42620FEF7EAFA207CFA -:10ACC00002210843207410BD2520FEF7E2FA207C03 -:10ACD0000121F6E74907F6D54007F4D42720FEF70F -:10ACE000D8FA207C0421ECE770B53A4D287800288A -:10ACF0007CD1374C203CA07C00287CD0FEF7F1FBB7 -:10AD00000026267466746E703046FEF7E7FB00205E -:10AD1000FEF7E5F93448FEF7B3FA2546403D296EC3 -:10AD20008857FEF779FA3048C01EFEF792FBFEF70F -:10AD300008FCFFF7B4FFFEF729FAFEF7CBFB012072 -:10AD4000FEF70DFB0F210520FEF744FA2978681C59 -:10AD5000FEF732FAA07B01280AD0E07C002807D059 -:10AD6000214612390846627B5630FEF790FFE674A2 -:10AD7000207D002808D0164840380146427B123911 -:10AD80008C30FEF7B6FF2675607D00280BD010488A -:10AD9000691C2430FEF734FF0D48691C4C30FEF767 -:10ADA0002FFF6675A675E86D0178002903D001783C -:10ADB000001DFEF713FAA86D0178002907D001786D -:10ADC000034A401C7732FEF774FE0120E0750EE066 -:10ADD00034180020740000207372635C6C6C5F6137 -:10ADE00064762E6300000000F751010003E0FEF7D7 -:10ADF00083FB002070BD0C2070BDFB49486070478C -:10AE000070B50546FEF79DFB002D06D00020FEF72D -:10AE10005CFAFEF7BBF9FFF742FFF44C607C0028B8 -:10AE200009D0A07B012803D1F149F2480AF0D1F8FA -:10AE3000FFF7F6FE70BD0126002D05D00220FEF7BB -:10AE40008EFAEA4820304671E8484430FEF759FB54 -:10AE5000012008F0A8FDFEF7A1F9A07B00280FD083 -:10AE600001280DD002280BD003280BD0E148E0497F -:10AE70001E300AF0AEF8E07B217C884306D009E062 -:10AE8000032000E00120FEF720FAF4E7A07B012870 -:10AE900003D06674D448067070BD00202074F9E7B2 -:10AEA00010B5FEF71EFBD048007800280ED1CF4821 -:10AEB000807C00280AD00020FFF7A2FFF6F781FA75 -:10AEC000CA4820300079012806D007E000F0F7F9E1 -:10AED000FEF712FB0C2010BDF8F79AF8002010BD09 -:10AEE000C14901204870704770B500F0DAFF0028B2 -:10AEF0001BD0FF202D30FEF7E5F9BB4E3078BB4C60 -:10AF00002034012814D0022801D003282ED0A520F7 -:10AF1000B74980000AF05DF83078002807D0F6F7CE -:10AF200050FA207901282BD02FE0FFF779FE70BD71 -:10AF3000AE4DA87B032819D0FEF7F4FAE87D00286F -:10AF400003D0FEF7C6FDFEF70CFBA8489430FEF7D1 -:10AF5000D8FA012008F028FDA87B01280BD0A179A0 -:10AF60006F20012906D0032904D004E00120FFF757 -:10AF700047FFD1E77F20FEF7A8F902203070CBE72A -:10AF80006079002801D1FEF7A1FB0020607170BD3F -:10AF900070B5964CE07D002803D0FEF7E9FAFEF785 -:10AFA000A8FD00F07EFF00281CD08F4D28780228D5 -:10AFB00003D08F4990480AF00CF8A07B012814D0E8 -:10AFC000FF202D30FEF77EF90120FFF719FF2878CA -:10AFD000002809D0F6F7F5F9844C203420790128AF -:10AFE00006D00AE0FFF71CFE70BD99208000E9E75B -:10AFF0006079002801D1FEF769FB0020607170BD07 -:10B00000F8B50446FEF738F90746FEF78DFD01282E -:10B0100027D0002674480078022804D07648744966 -:10B020003C3009F0D6FF714DE87D002803D0FEF7D3 -:10B030009FFAFEF75EFDFEF784FA6C489430FEF747 -:10B04000DBFD21006D4C009064D0FEF7BFF80028B6 -:10B0500060D0009803000AF0ADF8065D5D5D065D06 -:10B060001E5D0126D6E7A87B012853D0374304D1C3 -:10B07000A079002801D002284CD160484C30FEF75E -:10B0800040FA012008F08FFC0120FEF71EF9564817 -:10B090000321017045E059487430C178D438C27931 -:10B0A00091421DD10146D4310A79037A9A4217D1CF -:10B0B0004A79437A9A4213D18A79837A9A420FD194 -:10B0C000CA79C37A9A420BD10A7A037B9A4207D192 -:10B0D0000978407B4906C90F814201D1012100E076 -:10B0E0000021A87B012802D0002803D012E000290B -:10B0F00007D10FE0374304D1A079002801D00128FF -:10B1000008D13E487430FEF798FE002802D0A87D92 -:10B11000002810D0FF202D30FEF7D4F80120FFF7D3 -:10B120006FFE3148007800286AD0F6F74AF9207996 -:10B1300001286ED0C0E02C4F30497868042283315A -:10B14000343009F0A9FD2D484021743000784006C4 -:10B15000C20F78680A54294906227731413009F034 -:10B160009BFD2649786803228731383009F094FD29 -:10B1700022483B217430827D78680A541F4974311B -:10B180000A7ECB7D12021A4382878A7E4B7E120290 -:10B190001A43C2830A7FCB7E1102194301841749E7 -:10B1A00074318A7F4B7F1102194341841349052270 -:10B1B0009331243009F070FD10497F68943108798B -:10B1C000C20638462030D20E0090827709794909AC -:10B1D000C177207A00281DD0A07F00285BD1607A3B -:10B1E00000280ED013200DE0740000201418002059 -:10B1F000D8AD0000F9030000BF02000034180020A1 -:10B200005CE00520E0773449002008700120A07739 -:10B2100041E04CE03048E97D1038002924D000217D -:10B22000A172B989A1814021C95DE1733946062225 -:10B23000413109F031FDF88BE082388C2083788C25 -:10B2400060830098C07F2077607F400840003043D3 -:10B250006077FEF776FC617F4000C907C90F0143A4 -:10B2600061770120607215E00021A172B989A18186 -:10B270004021C95DE17339460622413109F00CFDD8 -:10B28000F88BE082388C2083788C60830098C07FB4 -:10B29000207701202072114D0020287000F00FF857 -:10B2A000FEF72AF90120696800F055FF39E7607957 -:10B2B000002801D1FEF70AFA00206071F8BD10B530 -:10B2C000FEF74AF9FEF73DF9FEF78BF80020FDF78F -:10B2D000FCFFFEF7CAF810BD5418002074000020CF -:10B2E0008107C90E002808DA0007000F0838800817 -:10B2F000FD4A80008018C06904E08008FB4A800095 -:10B3000080180068C8400006800F704710B500F034 -:10B310007BFF10BD70B5F64C0546A26800290DD024 -:10B32000002A04D0FF20F3A14C3009F052FEA560A2 -:10B33000F6F748F80220F6F73FF870BD002A04D16E -:10B34000FF20ECA1543009F044FE0020A060F6F785 -:10B350003AF80120F6F738F870BDE5481030C07EA5 -:10B36000002801D00020704701207047E0481030CD -:10B37000C07E7047DE483430C07E70470021C17601 -:10B38000817601600162DA481030C07E002807D162 -:10B39000D7483430C07E002802D1D549012008703A -:10B3A000704710B50B46C17E847EA14204D0114681 -:10B3B000184607F0B4FB10BDFFF7E0FF10BD38B52D -:10B3C000CB4C606801684978012924D00121684686 -:10B3D00006F05EF968460078CA49000209F0D6FC1A -:10B3E00060680268C0685268511807F0B5F9616872 -:10B3F000C860BF49606834310022884215D0018B93 -:10B40000002912D04272032101720271021D017FD4 -:10B41000FFF7C7FF38BD7D21C068C90007F09CF960 -:10B420006168C860B8480861E3E7018B491C018383 -:10B4300002214172E7E7FFB5AD4F02461037386A87 -:10B440003C68056889B060680790A948C1680291A6 -:10B450006B880B98C01A80B208900C98002804D012 -:10B46000264638362046483002E03E1D28466430E5 -:10B47000059003203071002A15D0012A7ED0022ABF -:10B4800052D0032A7BD09BA1A04809F0A2FD0C98C2 -:10B490000028307974D0032804D09C4895A1093045 -:10B4A00009F097FD40E1002904D1984891A169383D -:10B4B00009F08FFD9549A88FA839484340180A998B -:10B4C00000F0A8FEA0619149E88BA83948430A9989 -:10B4D00000F0A0FEE06186488C4AC068A98FA83AB7 -:10B4E000514384464118A069894A091A8A183B21A8 -:10B4F000A262864B495DA83B594341180818FF30AA -:10B500001630206260626046101AFF38ED2135382F -:10B51000C9008842BBD27F49884204D27B4875A1CA -:10B520005C3809F056FDBAE0784AA88FA83AE1687D -:10B53000504308180A9900F06DFEA0617349E88B2A -:10B54000A83948430A9900F065FEE0616848C06880 -:10B55000002804D16D4867A1543809F03AFD5820FD -:10B56000405B6D4A0028A88FE16822D0504308183C -:10B57000A169401AA0622169A06802E022E051E0BE -:10B58000CDE04843A169644A40183B21495D5143DD -:10B5900041180818FF3014302062E88BE1695043ED -:10B5A000411A0F208001081A60625148A16AC068E0 -:10B5B0006DE050430818A169401A3968D3384968CA -:10B5C0004018D7E7284640300290008B002801D071 -:10B5D000002904D14D4847A13C3809F0FAFCE88B1A -:10B5E0004D494843E169401AA062029A138B2269CF -:10B5F0009B1A9C46A3685343A2699A186346594311 -:10B6000051183B22525D444B5A438A185118FF315E -:10B61000143121620F218901411A61623449C968DC -:10B62000401A35E00C98002803D03420005D002833 -:10B6300074D1E88B38494843E169401A0899484376 -:10B64000A062284640300690008B0028079829D039 -:10B65000002804D02D4827A1163809F0BAFC069816 -:10B660002D4A018B08980818E16948434000FF30D3 -:10B6700014302062E88B5043411A0F208001081AD1 -:10B68000606200F0C1FD00281CD0A16A0298081A6F -:10B69000FF38ED212338C900884200D3F7E60220A5 -:10B6A0003071F4E6002802D00298002804D117482F -:10B6B00010A11D3809F08DFC0798A16AD33808182D -:10B6C000A062CCE706F0B1FD7A690146104607F0AA -:10B6D000D5FFA16A081AFF38ED211E38C90088423B -:10B6E000DCD201200DB0F0BD00ED00E000E400E090 -:10B6F000D01800207372635C6C6C5F6C6D2E7330BD -:10B700002E63000010270000B78913008A0500008F -:10B7100036040000A3020000E20400002AE003282F -:10B7200002D1FD4807210170A16A786907F014F879 -:10B73000B060616A206A884202D90598016001E020 -:10B74000059908600598F54900680818F060A9880F -:10B750000B98081A00B2002801DD022000E000204A -:10B7600070710C9830700C98002805D03420005D62 -:10B77000002801D00220B5E70C9801214840203470 -:10B780006075397F32463846FFF70BFE0020A9E787 -:10B7900010B5E14900284A68116A096807D01268A3 -:10B7A000C98BDF4BD2695943891A09F0EFFA10BDF2 -:10B7B000F8B5D94F35227868016A0C680168525C87 -:10B7C000002A0AD0498E6288914206D1407A002828 -:10B7D00003D1D449D44809F0FCFB06F026FD01460C -:10B7E0007868406907F04AFFFFF7D2FF79686588FB -:10B7F0000B682E185A8EB24202DB521C5A8602E0A7 -:10B80000401C2818588608683622125C002A05D188 -:10B81000428E23899A4201D1521C4286088B03280A -:10B8200002D2401C088302E00868408EA0802046B7 -:10B830004030C18A808A081A6188401E401885B24B -:10B84000203416E0096AE67F097976004B00B74993 -:10B85000007DCB5A895BC91889B20023FFF7EBFD45 -:10B86000002811D0012810D0AF48AE493A3009F075 -:10B87000B0FB79680868428EAB1A1BB2002BE1DA84 -:10B880000820E07400F00BFEF8BD78680068418E77 -:10B89000491C4186EDE770B51F209F4D002128709F -:10B8A000E960A868C27E130009F084FC04545403C4 -:10B8B0004654026A14680268117002685160006898 -:10B8C0002030407D002808D106F0AFFCA968096847 -:10B8D000096C07F0D3FE002815DCA86801684A8EC1 -:10B8E00061888A4204D12289511A6181628004E010 -:10B8F000511A61810168498E61800268C1681164D2 -:10B90000C16841610FE0A8680168098E6288891AE0 -:10B9100061810168098E618001680A6CC2600A6CED -:10B920004261886C6066204601F06DFC00280ED0F4 -:10B930007B487C49BD3808E0C1684161FFF7D4F914 -:10B94000002804D076487749B73809F042FBF5F76C -:10B9500038FD70BD72487349B038F6E710B56E4ACD -:10B960000B00526809F026FC0906090F1E0C2D2D4C -:10B97000082A2D00FFF78FFF10BD00F059FC10BD05 -:10B98000FDF7A9FE10BDD07E022805D0D07E032889 -:10B9900005D0644966480EE0FFF70AFF10BDFFF7C7 -:10B9A0000EFD10BDD07E0228F6D0D07E0328F6D042 -:10B9B0005F485C490B3009F00CFBF0E706F01BFC1C -:10B9C00010BD23205749000109F003FB10BDF3B55A -:10B9D00081B0514C029825460026012710350300FE -:10B9E00009F0E8FB0906313C3C3143433C3C430051 -:10B9F000494801211030FFF78DFC02990198FFF7AB -:10BA0000ADFFE87E022828D1A0680468006A0668B5 -:10BA100006F0EAFBF18B424A5143E269891AD339B5 -:10BA2000FF223232E162904202D24248081802E01C -:10BA3000081A41494018E0624048E16A814200D852 -:10BA40000846E06206E001460198FFF787FFE87EBE -:10BA5000022802D1286820300775FEBD01466560C6 -:10BA60000198FFF77BFF6660FEBDFF202D49C130C6 -:10BA700009F0AFFAFEBDF8B5064627480D4600248A -:10BA80003430254F0B0009F095FB09060C10100C03 -:10BA9000161610101600204801213430FFF73AFC2A -:10BAA00029463046FFF75AFFF8BD78603046FFF769 -:10BAB00055FF7C60F8BDFF201A49F53009F089FA7E -:10BAC000F8BDF0B5144C0020616885B003268E7671 -:10BAD000CA7E0746032A03D0C97E00293FD03FE033 -:10BAE000087F002804D112480E49D93009F071FAB4 -:10BAF0006068057F684606710221417106F095FB7A -:10BB00000290FF20F53003900121684601706946DC -:10BB1000284607F004F814E0D0180020EF160000C3 -:10BB2000E2040000F4B6000074060000FC510100BD -:10BB30001602000084F8FFFFB5F9FFFF161200009F -:10BB400020BF6068007F07F025FE0028F8D06068FD -:10BB5000007F06F050FB60680777FFF70FFC0120BD -:10BB600061688F7605B0BEE5FD494A68907600E0D1 -:10BB700020BF4A68D07E002803D0D07E937E9842B2 -:10BB8000F6D0D07E002803D00020002191767047A7 -:10BB90000120FAE770B5F24900241031CA7EF04D59 -:10BBA000032A03D02431CA7E032A17D169600028F2 -:10BBB00010D001280AD0EB49EB4809F00AFA00201E -:10BBC0006968002C0860686008D070BD0320FFF72A -:10BBD000CBFF01E0FFF775FF0446F0E70C2070BDD6 -:10BBE000F8B5DF4F04461F25E67E330009F0E2FA80 -:10BBF000042A20031B20DA481030844203D0D9499C -:10BC0000DA4809F0E6F902207C60FFF7ADFF002872 -:10BC100005D07968002008600862786012E00C2581 -:10BC2000002078600BE00120FFF7B4FF054604E038 -:10BC3000CE48CC490C3009F0CCF9002D02D0E07E82 -:10BC4000B042D1D1E07E002804D0C848C5491230A6 -:10BC500009F0BFF9F8BDC24810B51030FFF7C0FFBA -:10BC6000BF483430FFF7BCFFBD490020583108758C -:10BC7000BF494870BA49103148610A4624325061C0 -:10BC800088769076012210390A708860486010BD6D -:10BC900070B504460120FFF723FBC5B20B20FFF768 -:10BCA0001FFBC0B2854204D0B048AE49343809F019 -:10BCB00090F90120FFF714FBC5B21820FFF710FB25 -:10BCC000C0B2854204D0A948A649333809F081F9A9 -:10BCD0000420C043FFF704FBC5B21920FFF700FBA7 -:10BCE000C0B2854204D0A1489E49323809F071F9AA -:10BCF0009F489B490C38047000201031C876887624 -:10BD00000A462432D0769076994B0124083B1C7168 -:10BD100018600862106208601060FFF79CFF70BD39 -:10BD20008F48007870479249083908717047F3B519 -:10BD30000D468B4983B01031CA7E08462430884CAA -:10BD4000002A02D1C27E002A03D0C97E022903D074 -:10BD500005E08848616006E0C17E002901D00C2022 -:10BD600000E76060844806F0F2F96168087760686F -:10BD70007F490160007F002804D17B4879496238FF -:10BD800009F027F906F030FA7C49884200D20846CB -:10BD9000FF30C83086B260680321C1760027012DCC -:10BDA0002FD0724A0399121D5143026851600068F6 -:10BDB00001210170684605F06BFC68460078704907 -:10BDC000000208F0E3FF019106F02FFA01997118C3 -:10BDD00006F0C2FC6168032DC86021D06948086183 -:10BDE000606803210172022141720771021D017F07 -:10BDF000FFF7D7FA6068078307202070002067608C -:10BE0000B0E606F012FA314606F0A6FC6168C8609A -:10BE10005D48086108680770096801204870DFE71D -:10BE20005A48DCE77047F8B54D4E1036F17E0029D0 -:10BE300004D131462431C97E002901D00C20F8BD3F -:10BE40000221F176464C4A4F5834083F376234603D -:10BE5000002538602575397920304A004C49C07F6B -:10BE60008A5A4000085A2B46101881B22A462846A2 -:10BE7000FFF7E1FA002804D03B483A49323009F094 -:10BE8000A8F825610120A5602075658625863448BF -:10BE90007830857539684888401E48803583002091 -:10BEA000F8BD10B52E4901248868827E032A0CD083 -:10BEB00000684078002806D0C8683649884202D910 -:10BEC0000024FFF70DF8204610BD0024FBE72448AE -:10BED000826813681978491C1970C1681068C26AB1 -:10BEE000914204D8007D012801D001207047002034 -:10BEF000704700207047F8B51948194C1030606041 -:10BF0000016A00260D68006834212F460E54403720 -:10BF1000B97C002963D1007D032860D106F085F942 -:10BF200001466068406907F0A9FB002857DDFFF76C -:10BF30002FFC6988401C41186068026811860068FF -:10BF40002989028E91424AD9012120308175F88ACF -:10BF5000B98A401A6988401E401887B238E000004C -:10BF6000D0180020F4B600008D0300006D02000020 -:10BF700088000020CFB9000077BA0000F605000065 -:10BF800010270000CB120000B7891300B70800008B -:10BF9000FC5101002E841300096A09794A00CD4939 -:10BFA0008B5A028E007D94463F22525D5200895A80 -:10BFB000C91889B201236246FFF73DFA00280ED066 -:10BFC00001280ED002280AD0C349C44809F001F85C -:10BFD00061680868028EBA1A12B2002ADCDA66605A -:10BFE000F8BD60680068018E491C0186F0E7F8B56D -:10BFF000BB4D0026AA680128116A0C6810D00720E2 -:10C00000287006F05DF8B7480078F6F7AFFDA8682D -:10C010000683026861885186006820308675F8BD05 -:10C02000087913684100AB481F7D415A032F18D08F -:10C030001A7D022A22D01A7D012AE2D13F231B5DFC -:10C0400022895B00C05A0023401881B20120FFF70B -:10C05000F2F90028D5D0A1489F49B53008F0B9FFC2 -:10C06000CFE71E6112683F2396601B5D22895B004B -:10C07000C05A0023401881B20320E8E75822125B1F -:10C080001A613F231B5D22895B00C05A00234018C0 -:10C0900081B20220FFF7CFF9AA6801211268117559 -:10C0A000D7E738B58E4C0021A0680D46006842786D -:10C0B000002A01D045701FE00078002809D0012136 -:10C0C000684605F0E5FA684600788749000208F0FE -:10C0D0005DFEA0680268C0685268511806F03CFB1B -:10C0E0000146A068C160057102214172021D017FF5 -:10C0F000FFF757F9A068058305F0E2FF794800785B -:10C10000F6F734FD38BD10B50146754A0B0090684E -:10C1100009F050F8060D150408190C1C012100F057 -:10C12000A6F807E00021506800F0A1F810BD01203A -:10C13000FFF75DFF00210846FFF7ECF810BD00682F -:10C140000321017510BD00F0A5F810BD62496748D4 -:10C1500008F03FFF10BD70B5614C002809D00128E0 -:10C1600016D0022821D061485B49243008F031FF05 -:10C1700070BDFFF796FF00210846FFF7CBF8A068D7 -:10C18000807E002801D01F2000E00720207070BDB5 -:10C19000A068002501684D70FFF7F0F80320F6F75E -:10C1A00023FC05F08DFFA56070BDFFF77AFFA06846 -:10C1B000FFF7E4F800210846FFF7ACF80420F6F793 -:10C1C00013FC70BD46498968CA7E022A08D10A68F4 -:10C1D0001378002B04D150600968CA6A1018C8622D -:10C1E000704710B53E4A00290CD0012907D002291A -:10C1F00007D03E483849443008F0EBFE10BD401EE1 -:10C2000000E0401FD06010BD35488068002800D095 -:10C210000120704710B504460020002907D034489B -:10C2200008F0B4FD0146204608F0B0FD401C10BDEA -:10C2300010B52B488068C07E030008F0BBFF0414D3 -:10C2400014030A1401F0F2F800280BD022492948FF -:10C2500006E0FEF725FE002804D026481E49001DF2 -:10C2600008F0B7FE10BD23481B490B30F8E710B5A6 -:10C270000446002903D00020FFF7B9FE03E0194867 -:10C280000078F6F773FC2046FFF778F80020F6F701 -:10C29000ABFB10BD10B512488268106A11680068C7 -:10C2A000CB698B60134BC18B9B3359431368D960A7 -:10C2B0000146E0314B8883870C783B231C548B88E4 -:10C2C000C383CB88038409894184116802200875DF -:10C2D00010BD0000FC510100F4B600005A06000039 -:10C2E000D01800207C00002010270000B2070000BA -:10C2F00040420F0047040000F8B5FEF702FA064678 -:10C30000FEF770FAF94D07466879F94C002809D014 -:10C31000012823D0022826D003282ED0FF20F5A103 -:10C32000C63033E0F2481830FEF748FA002801D052 -:10C3300003200FE0EE481830FEF7ACF9002804D0D7 -:10C3400060696030007A002806D0E9481830FEF7AE -:10C3500008FA012068711BE00220FBE7E44818306E -:10C36000FEF7FFF914E0E2481830FEF793F90028D1 -:10C370000ED1FF20DFA1B83008E0DD481830FEF70D -:10C380001DFA002804D1FF20DAA1C03008F021FEF8 -:10C39000A169F722087810400870AA79D207120F15 -:10C3A0001043FB2210400870EA79D207520F104365 -:10C3B00008706B79EF22022B04D0012B07D0032BDE -:10C3C00007D00CE0012E06D8002F04D007E07F1E16 -:10C3D0003E43002E03D010401022104300E01040D6 -:10C3E0000870287C002811D0687901280ED0BF4839 -:10C3F0005438FDF786F8BD49606954397830A26930 -:10C40000FDF7E3FA0020FDF7EFFA04E00846FDF738 -:10C4100078F8FDF70CFBA0690078C00606D4E06947 -:10C420000078C00602D4E079002802D0A079002864 -:10C4300001D0012000E00320FCF747FF032020701B -:10C4400001202071F8BDAA4810B51C30FEF7DDF9B7 -:10C45000A74C002802D00020607004E0012060702A -:10C46000A2485438E061A148407C002802D060789E -:10C47000002805D0E069FDF744F8FDF7D8FA10BDB3 -:10C480009A485438FDF73DF8984A6069543AA0300C -:10C49000E169FDF79AFA0120FDF7A6FA10BD10B583 -:10C4A00093490022486932238276C27601221A54C7 -:10C4B0004030807C002803D00A700021022001E077 -:10C4C00000210320FFF71FFE10BD70B5884C607976 -:10C4D000C2062046416908464030002A01DA00229F -:10C4E00002E0028B4B89D2180B460283C0331A7EBE -:10C4F000002A03D0828B4D8952198283627A002AE6 -:10C5000003D03D2001F0C9F852E08A7E032A4FD0C3 -:10C51000227A002A13D0500701D4D00601D51E205C -:10C5200036E0100701D53D2032E0D00705D1900755 -:10C5300003D470A1734808F04CFD2A2028E0603134 -:10C540008A78002A05D0C28B551CC5830D88AA4263 -:10C550000FD25A7F062A02D01A7F062A05D1428BB3 -:10C56000531C438309888A4203D2828BC18A8A4240 -:10C5700001D322200CE0027C808A002A0FD00628FA -:10C580000FD35A48C07B012801D03E2000E008208C -:10C5900001F083F86069807E032809D001E08842B9 -:10C5A000F5D20120207000210846FFF7ACFD70BDD8 -:10C5B000FFF775FF70BD10B54C494D48CA7B002A86 -:10C5C0002BD0012A29D0022A27D0032A04D049A13E -:10C5D0004D4808F0FEFC10BD897B02290FD00729C9 -:10C5E0001BD0406901464031CA8A898A511A891E86 -:10C5F00089B2032900D30321028951180BE0406955 -:10C60000014640318A8A032A01D2018903E0428827 -:10C61000C98A5118491C818010BD4069F5E700B5F1 -:10C62000030008F0C7FD0604070B0F1212170029BC -:10C630000ED00FE0491E02290AD90BE0491F01293B -:10C6400006D907E0072903D004E00A390C2901D8EC -:10C65000012000BD002000BDFEB50546244818306D -:10C66000FEF78DF8002804D1274822A1CF3808F022 -:10C67000B0FC1F4CA069FDF703FC0321A069FDF786 -:10C680002DFCA069EF220178114001702946FDF7C9 -:10C6900069FC002601272B0008F08CFD0E5D5D086B -:10C6A0005D1D6161155D4D5D613D385D60697121A4 -:10C6B000095C002901D0062101E0C030417EA0695B -:10C6C000FDF71BFD4BE0E069FDF776FC0146A06934 -:10C6D000FDF784FD43E06169A069D031FDF747FDB6 -:10C6E0006169A0699531FDF750FD38E0C819002057 -:10C6F000900000207372635C6C6C5F736C61766594 -:10C700002E6300006B020000780800000621A0697B -:10C71000FDF760FD23E020690178A069FDF744FD85 -:10C7200020698188A069FDF741FD20694188A069E1 -:10C73000FDF740FD13E00096019660696030007CD3 -:10C74000002803D069460878384308706946A06914 -:10C75000FDF756FD03E0FE49FE4808F03AFCFEF7FF -:10C7600018F8002804D1FB48F949801D08F031FC75 -:10C770000C2D07D0072D04D060695E210E52603069 -:10C780008770FEBD606940304683FEBDF0B5F24C57 -:10C79000DC2061698DB0405C042809D0052834D1C3 -:10C7A0006031487A002829D001204874022026E010 -:10C7B0001022EA31684600F0A8FF61691022C831F2 -:10C7C00004A800F0A2FF684605F0BBF8616908AA5A -:10C7D0006CCA0F46CB6778378A670846FE608030A0 -:10C7E000BD60074620376CC7002303634363012005 -:10C7F000A0310876D9494874052000E00D20FFF7E4 -:10C800002BFF61690020C03108770DB0F0BDF8B58D -:10C81000D1481830FDF7B3FF002842D0CE4C207A23 -:10C8200000283ED160690025C030007ECB4E002834 -:10C830000BD0B17B0120FFF7F2FE002805D1B17BC0 -:10C840000420FFF7ECFE002806D060690127C03005 -:10C85000407F062807D00CE060695C210D526030F3 -:10C86000457402202FE0B17B0420FFF7D8FE00289A -:10C8700010D0B07B030008F09DFC173F3F3F3F1EE8 -:10C880003F3F3F3D3F203F3F3F292C3F3F3F3F3F02 -:10C890003F2F3F0060696A21095CC90702D0C030A0 -:10C8A0004577F8BD0C20FFF7D7FE60696030817ACC -:10C8B00039438172F8BD072005E0FDF7D0FF00285D -:10C8C000F8D075740B20FFF7C7FEF8BD00F02CFF01 -:10C8D000F8BDFFF75BFFF8BD606900218030816023 -:10C8E000C160057437740620FFF7B6FE60696030DA -:10C8F0008570F8BD0920E6E700F0D8FEF8BD70B5F8 -:10C90000964DA87B072834D1934CDE22606941887C -:10C91000125A491C91422CD1217A002929D1014671 -:10C92000E0318B88C28B934207D1CA88068CB24211 -:10C9300003D10A89468CB2420DD0884A8689303AA2 -:10C9400056819381CB88D3810989118201462E318A -:10C9500051600121117001221146FDF79FFC002159 -:10C960000420FFF7D0FB61690020C0314877A8732D -:10C97000E87370BD70B5794CA07B162803D074495C -:10C98000774808F026FB74480021426973486032FA -:10C99000117291703038067E0B250123002E06D0CF -:10C9A000027D002A12D14575817503750EE0567A15 -:10C9B000002E06D051722288828381760C22027664 -:10C9C00004E022888283817683770576A17370BD27 -:10C9D000F8B5614DA879800723D5287A002820D1A1 -:10C9E0005E4C0120A17BFFF71AFE002819D1A8692F -:10C9F0000127C0780026030008F0DCFB0E62620805 -:10CA0000622E3B4F0A62146220524562022021E0EE -:10CA1000A07B042804D052484D49333808F0D9FA95 -:10CA2000A673F8BDA07B082804D04D4848492D388E -:10CA300008F0CFFA686960308670F1E7A07B0A28B9 -:10CA400004D047484249263808F0C3FA6869603084 -:10CA500007720B20A073F8BDA07B0E2804D0AB207A -:10CA60003B49C00008F0B5FA6869603007720F20D2 -:10CA7000F0E7A07B0F2804D039483549183808F072 -:10CA8000A8FA1120E6E7A07B0F2804D034483049EB -:10CA9000123808F09EFA1320DCE7FFF76BFFF8BDB1 -:10CAA00069690846C0310A7F062A04D16030807A5D -:10CAB000800700D50E77487F0628F0D14E77F8BD65 -:10CAC000274823496E3008F084FAF8BD10B5234C8E -:10CAD0000020A17BFFF7A3FD002804D11E480122FE -:10CAE000017A114301720420A07310BD10B51A4CD5 -:10CAF00060690146C0314A7F002A06D0097F0629B5 -:10CB000003D0217A0122114321726030807A80079C -:10CB100015D4E069FDF752FB61696031C872E069C4 -:10CB2000FDF74EFB616960318881E069FDF74DFBDF -:10CB3000616902226031C881887A10438872606915 -:10CB400000220146C0310B7F062B00D10A7709E095 -:10CB5000F4C60000ED07000090000020C819002076 -:10CB6000770500006A231B5CDB0703D106234B77A4 -:10CB70004030428310BDF8B5FE48817B0020FFF7AE -:10CB80004EFDFD4C0126002807D160696030407AD7 -:10CB9000002802D1207A30432072616900255E208E -:10CBA000455262204654C831E069FDF7C8FA616910 -:10CBB000E0699131FDF7D2FA6169042208469131AA -:10CBC000B93008F069F8EB483038017E08270029B1 -:10CBD00006D0017D002912D14775857506750EE0D6 -:10CBE0006169054689894183E249E0691439FDF7A5 -:10CBF0008EFAE049E0690C39FDF796FA2F76DD48A8 -:10CC00000E218173F8BD70B5DA4D0020A97BFFF7C6 -:10CC100006FDD94C002803D1207A01210843207257 -:10CC2000E069FDF730FA00280ED0E069FDF726FA3A -:10CC30006169DE225052498800F0C1FD002806D00B -:10CC4000282000F02AFD70BDFFF740FF70BDE069AD -:10CC5000FDF70EFA6169E0310870E069FDF701FA4D -:10CC60006169E0314880E069FDF7E0F96169E03130 -:10CC70008880E069FDF7E3F96169E031C880E06927 -:10CC8000FDF7E6F96169E03108810720A87370BDFE -:10CC9000F8B5B94CA079C0076FD0207A00286CD1C4 -:10CCA000B44D0120A97BFFF7BAFC002853D1E069FD -:10CCB0000027C178022201260B0008F07BFA0D162E -:10CCC0001308354A4A384C474A1929444A00FDF7A7 -:10CCD00016FA6169DA225054AE735E204752603111 -:10CCE0008E7038E000F076FD35E0FFF78CFF32E023 -:10CCF000A97B0020FFF793FC002802D1207A304363 -:10CD0000207260695E210F52603086700A2018E040 -:10CD1000A87B0B2802D0207A104320722F74606900 -:10CD2000603046720C200CE0FFF725FF13E0A87B73 -:10CD3000112802D0207A1043207260696030877019 -:10CD40001620A87307E0FFF7D1FE04E000F00FFD06 -:10CD500001E0FFF7BBFEFDF76EFD002804D14F2078 -:10CD60008649000108F035F9606900238030016BC5 -:10CD7000426B491C5A4142630163F8BDF8B57D4FCF -:10CD8000012814D1787C002802D1387C002801D0F9 -:10CD9000FCF74DFEFCF7E0FBFCF7D3FB0020FCF7B3 -:10CDA00094FAFCF71EFBFCF760FBFCF7A5FBF87B95 -:10CDB00001260025704C00280FD16079C10705D0ED -:10CDC0000220F87360694030057402E0800717D5CF -:10CDD000FE7300210120FFF796F9F87B012802D0AD -:10CDE000022808D00CE06079C00709D00220F8734F -:10CDF0006069403005746079000701D50320F8733D -:10CE000000F018FDFFF703FD2079002801D03D81D7 -:10CE100002E03889401C38816079C007606904D01D -:10CE200072210D544030858203E04030818A491CD4 -:10CE30008182E079002806D061696031887C02280F -:10CE400006D8401C887460696030807C022804D950 -:10CE50003D817D81606960308574B97B0020FFF77A -:10CE6000DEFB002802D1B87B06284BD16069014661 -:10CE7000C0310A7F062A45D0497F062942D03D4964 -:10CE8000C97B03293ED16030807C00283AD1FDF770 -:10CE90002FFC002836D0FDF7A5FC002832D06169B0 -:10CEA000C88801282ED90A4640325674D08A978AFB -:10CEB000831E9F4201DB012002E0C01B401E80B2A6 -:10CEC0002C4B1F89A3899F4201D3012302E0DB1B66 -:10CED0005B1C9BB2984200D91846012800D15574BA -:10CEE0002A22525C002A11D0224A898D52898A4214 -:10CEF00001D3012102E0891A491C89B2884205D96F -:10CF0000084603E06169012040314D7461694A8837 -:10CF100010180881FFF74FFB6069122215490C3089 -:10CF200007F0BAFEFFF7D1FAFEF7E3FF00280AD0B8 -:10CF3000104810388179002905D161690246898934 -:10CF4000203A118586710C481C30FDF7BCFC002886 -:10CF50000FD0E06900788007800F012809D00228EF -:10CF600007D0FDF7D0FC002803D10449044808F09D -:10CF700030F807E0C819002090000020F4C6000037 -:10CF80007F030000606940308574F8BD70B5FE4CC9 -:10CF9000607900283CD0FD4D022810D1FDF789FBB7 -:10CFA000002803D1FA49FB4808F013F86A69002306 -:10CFB00080329068D168401C5941D1609060002651 -:10CFC00066712079012804D12671A87910210843BF -:10CFD000A871E078012816D1E670A87908210843E5 -:10CFE000A871FDF7F5FB002804D1EA48E84918309C -:10CFF00007F0EFFF6969002380318A68C868521C16 -:10D0000058418A60C860A079012802D00120A0712F -:10D0100070BDA67170BDF8B5DC4CDB4DE269002730 -:10D020001078042183079B0FE8790126012B11D08A -:10D03000022B0FD0032B01D0207A30E06178002939 -:10D0400005D1AE70A1793143A17123E0EF71F8BD34 -:10D05000EE71F8BD5278D3061CD060780028F8D164 -:10D06000D006C00E1B2818D8607908436071FDF700 -:10D07000E2FB002804D1C748C5494B3007F0A9FF9F -:10D08000606900238030026B416B521C594102637E -:10D090004163E8790128DBD1D8E7207A10210843E1 -:10D0A0002072F8BDF8B5B84D0446303D287D002704 -:10D0B00000280AD0002978D1677010202070687D80 -:10D0C000A070A87DE0702F756FE02878002814D03C -:10D0D00000296AD1072067702E462070083607E0C5 -:10D0E000686807802F700A223146A01C07F0D4FD23 -:10D0F00028780028F4D1A77057E0287EA24E143E6D -:10D10000002837D0002950D1297EA0480B0008F014 -:10D1100051F80D2C2C2C2C2C2C2C2C112C2C2008C8 -:10D120002C0067700C212170A97EA1704069808954 -:10D13000A08018E008216770217040690A46808944 -:10D14000914960801439201D07F0A6FD3089A08127 -:10D1500009E067700B212170A97EA1704069808968 -:10D16000A080A87FA0712F761FE089498A4807F028 -:10D1700030FF1AE0844810388279002A08D000294C -:10D1800013D1677011212170B189618087710CE022 -:10D19000827A002A0BD0002907D1677012212170F2 -:10D1A000318A6180718AA18087720120F8BD0020D8 -:10D1B000F8BD76480078012801D00C2070477249EC -:10D1C0000020303908700875087620318871704762 -:10D1D00070B56E4C064620780D46002804D093208A -:10D1E0006B49000107F0F5FE01202661E07225621F -:10D1F0002070FFF7DEFF002804D0674864494930FB -:10D2000007F0E7FE70BDF8B5604C2178012902D126 -:10D210002178012901D00C20F8BD01460546606146 -:10D2200012220C31584807F037FD01274035AF7402 -:10D23000554D2888FDF723FA002827D02888FDF7C8 -:10D24000D9FA002822D02888FDF78EFA00281DD0B0 -:10D250002888FDF7A8FA002818D0FCF742F9606981 -:10D260000026C088002825D048481830FDF787FAE6 -:10D2700000281FD06069C030007E00281AD0A97B2A -:10D280000120FFF7CCF9002802D013E01220F8BDEE -:10D29000A97B0420FFF7C3F900280BD16069014680 -:10D2A0004030868360314E740220FFF7D5F9606903 -:10D2B00040304674344830380078002806D1606920 -:10D2C000C18D008C814201D9A18102E06069008C8E -:10D2D000A08160694189491E8AB2298989182981FA -:10D2E000297B002902D06E812E7302E0698989189A -:10D2F0006981014640318B8A9B188B82C388012B40 -:10D3000001D85B1CC380002A01D060308674A87BE2 -:10D31000032816D0487C002815D02889A189884286 -:10D3200011D2FDF7E5F900280DD060692A21095CCA -:10D3300000290BD06989808D814207D3A670E770E0 -:10D340000CE0A7700AE0A670E67007E0688900218B -:10D35000401C6881A7700520FEF7D5FE6069512149 -:10D360000E54A97B052901D0062920D1DE2142884F -:10D37000095A511A09B2002919DB01460522E03188 -:10D380002430F3F721FF09E0C819002090000020A5 -:10D39000F4C6000039070000F10800000122022154 -:10D3A0006069FCF77BFF6069C0304677AE736069E7 -:10D3B0004189FDF728F8A07800282AD1606920303B -:10D3C000807A002800D06E810120FBF788FE60691A -:10D3D0003830FCF73EF860693430FBF751FF216AC2 -:10D3E00000200856FBF718FF0120FCF777F8FBF741 -:10D3F000D1FEFCF76FF80120FBF7B1FF6069406ECA -:10D40000FCF782F8FFF71FF860694030C07BFBF73C -:10D4100040FF6671E671A6712672A6726672267169 -:10D4200002202070FCF768F80020F8BD10B5F74C1A -:10D430002078022801D00C2010BDA078002803D04D -:10D440000020FFF79BFC17E0FCF74BF800F01DF9FC -:10D4500060692030007C012809D0FCF79FF8FBF7B9 -:10D460009EFEF3F7AEFFE07A012803D004E0FCF75C -:10D470009DF8F4E7F5F7CCFD002010BDE349C87234 -:10D48000704710B5E14C2078032803D0E049E1480B -:10D4900007F09FFDE04801218278002A06D0002293 -:10D4A00082700171A27904231A43A271A2691378D0 -:10D4B000DB439B0707D1C378002B04D1C170A0794F -:10D4C00002210843A0711078C00606D4E0690078F4 -:10D4D000C00602D4E07900280CD06078002809D179 -:10D4E000A079002806D1FEF7F2FC002802D0207AAD -:10D4F000002803D00120FFF741FC03E0FEF7A3FF63 -:10D5000000F0C3F82078012806D0F3F75AFFE07A3C -:10D51000012801D1FCF7DAF810BD38B5BB4C6069C1 -:10D520002030007C012820D1A07A00281DD1684637 -:10D53000FCF744F8002818D061693120405C0128CC -:10D5400010D1B54A0D236D460020D356285683428C -:10D5500008D050738989303A9185114620318873FB -:10D5600001208872A07A401CA07238BD70B5A74C0B -:10D5700006462078042804D0A648A549553007F06F -:10D5800028FD607910210843A34D6071002E47D01B -:10D59000FCF765FA61780126084300280ED1687C03 -:10D5A00000280BD0E0694178C90607D00078E979F6 -:10D5B0000007C00F884201D1667247E0E07800287A -:10D5C00009D0E0694178C90605D10078C00602D4C7 -:10D5D000FFF7A3FF3AE0FFF7A0FFE069A979007821 -:10D5E0004007C00F884205D0FFF7D0FC60790821C2 -:10D5F00008436071E069E97900780007C00F88424C -:10D6000001D1FFF708FD6079304360710020E071BF -:10D61000A079000702D5A87B022817D0207A13E052 -:10D62000022108436071E079401CC0B2E07101281A -:10D630000CD8687C00280DD0774854384078C10653 -:10D64000C90E052906D2C006002803D00120FFF725 -:10D6500095FB01E0FEF750FE2078012806D0F3F795 -:10D66000B0FEE07A012801D1FCF730F870BD10B5AA -:10D6700066480078042804D066486549B73007F04A -:10D68000A8FC0120FFF77AFB10BD10B50720FBF7BF -:10D690001CFE5E490420087010BD5C4933224969B4 -:10D6A00050545D4A032090738876704710B5574CEC -:10D6B0006069C030007F00281CD0062806D056487C -:10D6C000817B0020FEF7ABFF002813D06069014684 -:10D6D000C0310A7F130007F06DFD070D0D0D0D0D14 -:10D6E0000D050D006030807AC20704D0C04380076A -:10D6F00000D1087710BD0C20FEF7AEFF6069012253 -:10D700006030817A1143817210BD10B5002A0AD0B1 -:10D71000002306E0D41A6418203CE47FC4545B1C48 -:10D72000DBB29342F6D310BD10B503F0B0FF0C2866 -:10D730001CD3364C08216069D03003F0A9FF0028C3 -:10D7400006D060690421953003F0A2FF002803D1C0 -:10D750002F49324807F03DFC6169042208469531A3 -:10D76000BD3007F099FA0420FEF776FF10BD7CB5B6 -:10D77000294E0020B17BFEF752FF0125234C0028E3 -:10D7800002D1207A284320726946E069FCF73EFD09 -:10D79000684600780021C207D20F684602706069AF -:10D7A000002A02D06030057401E0603001746069C5 -:10D7B0005E221152603085700820B0737CBD401A23 -:10D7C000174900B2884201DC002801DC01207047C3 -:10D7D0000020704770B5104D0020A97BFEF71FFF99 -:10D7E0000A4C002803D1207A012108432072E06905 -:10D7F000FCF77EFC6169DE2250524988FFF7DFFFAB -:10D8000000280FD02820FFF748FF70BD90000020AF -:10D81000F4C60000330A0000C819002062060000A8 -:10D82000FE7F00006169E069E031FCF755FC0520EE -:10D83000A873EAE770B500F047F8384C384D6079C6 -:10D84000400709D5A97B0520FEF7E9FE002803D093 -:10D85000207A082108432072FFF71AFA00F012F824 -:10D86000FFF7B6F8A079C00609D5A87B030007F03A -:10D87000A1FC06060606060604060620A873FFF7A6 -:10D880003EF8C2E710B525488179490714D5017AD9 -:10D89000002911D12249897B0B0007F08BFC080D70 -:10D8A000050D0D0D0E0D100D4069002262210A5468 -:10D8B000C030807EFFF7F1FE10BD012100E00221A3 -:10D8C0004069C030417710BD10B51448817909070F -:10D8D0001DD5017A00291AD1114A947B230007F043 -:10D8E00069FC1416160B16161616161616161616AC -:10D8F0001616161616161716406960308170407C91 -:10D90000002801D0062000E01620FFF7C6FE10BD5B -:10D910004069603001728170917310BD90000020E9 -:10D92000C819002010B5031D03600020521E04E03A -:10D930005C181C60401C2346C0B29042F8DB0020FB -:10D94000186010BD01460A680020002A02D0104667 -:10D9500012680A60704702680A6001607047000040 -:10D9600000B51A2822D00ADC030007F023FC0D11B1 -:10D970001F131F1F191915171F1F1F1B1F002A28F0 -:10D9800014DD3A38030007F015FC030F11091100EC -:10D99000002000BD1E4800BD042000BD0D2000BDBC -:10D9A0000F2000BD082000BD112000BD032000BDD8 -:10D9B00010B50C46F4F784FF00281AD02046F4F77F -:10D9C00084F9002812D020780E280BD00F2809D017 -:10D9D000022807D0032805D00EA1772007F0F9FA16 -:10D9E000002010BDA078FFF7BBFF10BD09A17D206E -:10D9F000F4E708A18320F1E710B5F4F7EDF810BDC6 -:10DA000010B5F4F762F910BD10B5F4F744F910BD84 -:10DA1000023000007372635C686F73745F686369DF -:10DA20002E630000F0B597B00021032004F082F9C6 -:10DA30000025FE4E022775807574347C12E0F06874 -:10DA4000E1004018818800290CD0858069460F705C -:10DA50004D7001680291808869468880002168467F -:10DA6000F8F702FD2046641EE4B20028E7D117B0A3 -:10DA7000F0BDEE4BD86019741A80D3E7EB49EC4B3C -:10DA80004A8800201A4200D00120497C002901D098 -:10DA9000082108437047F7B504460E460078012177 -:10DAA000E34A8140521C114098B0E04A00915188ED -:10DAB000E04B994205D0009B002B05D0DC4B19426E -:10DAC00002D001201BB0F0BD009BD84A1943518001 -:10DAD0001A9D002D11D00020287022781A98002756 -:10DAE000401C130007F066FB10EF0D152137555D44 -:10DAF0006A39AFAB85B3EEEDECEF0B28EDD0042027 -:10DB0000E0E702212970A1880170090A4170032011 -:10DB100093E004212970A1880170090A4170E1880D -:10DB20008170090AC170052087E006212970A1884B -:10DB30000170090A4170E1888170090AC170218968 -:10DB40000171090A4171A289E81D216907F0A4F851 -:10DB5000A089C01D71E0082129702178082901D110 -:10DB600010212970A1880170090A4170E188817033 -:10DB7000090AC1700520308020466A1D01A90830BD -:10DB800003F0CFFB00287DD1694630880979401821 -:10DB900053E00A212970A1880170090A417003200D -:10DBA0000AE00C212970A1880170090A4170E188FE -:10DBB0008170090AC170052030809DE0A0888446EC -:10DBC0004000401C81B2308888425BD3052959D37C -:10DBD0000E202870002008E0A36842009B5A5219CA -:10DBE00053701B0A401C937080B26045F4D331809F -:10DBF000B6E08E49487C002873D0401E4874C8683F -:10DC000021790822C9004518A988286840180838D1 -:10DC1000A16807F041F802216846017100214171B5 -:10DC200028680390A98868460181002101A8F8F7B7 -:10DC30001BFC0020A880002E00D0308090E02978C6 -:10DC400080221143297029784022114329702978B4 -:10DC50008909890112312970A1880170090A41706E -:10DC6000E288E81CA16807F017F8E088C01C308043 -:10DC70002878410640D5C00972D00121684601715B -:10DC8000002100E02BE041713188ED1C091D01816C -:10DC90001A980390E08840190490001D634D059088 -:10DCA000297C68460176002101A8F8F7DDFB0746CC -:10DCB00030880C303080022F06D0002F50D060E02A -:10DCC0003CE032E01CE059E06946097EE868CA00A1 -:10DCD00080182A7C914202D28188002902D0042730 -:10DCE0004FE02EE0697C491C69741A990160318803 -:10DCF00081800020308044E04C48A188C1802FE022 -:10DD000029788909890116312970A1880170090AC9 -:10DD10004170E1888170090AC1702289681DE1683B -:10DD200006F0BAFF2089401D46E728788009800167 -:10DD3000183028702079687002207EE73B480A047A -:10DD400001D405271DE00289A3889A4201D0062745 -:10DD500017E01E222A70012249043280490C4180BA -:10DD6000009800280DD0314D0022288811468300EC -:10DD7000032003F03AFF2078287107E0002030806C -:10DD800003272A48009942888A434280384699E608 -:10DD9000F7B59AB002000C4606D0172A04D82348DB -:10DDA000244B4088984202D107201DB0F0BD237853 -:10DDB0005D0601D4DB0901D00820F6E700236D469B -:10DDC0002B706B701D462378611C9F06931E189361 -:10DDD000531E19939BB2169302AB1793134BBF0EAE -:10DDE000DE883B0007F0E6F9208511F15EF16BF16A -:10DDF000A3F1C6F1F2F1FBF1EEF1EDF1ECF1F1F18D -:10DE0000EBF1EAF1E9F1E8F185F1052A71D104229B -:10DE100069460A7005490A7969460A71E178A3786A -:10DE20000A021A436946CA80227905E0DC190020FB -:10DE3000FE710000FFFF00004A7061788906890EBC -:10DE40000C2923D009DC891E0B0007F0B3F9091354 -:10DE500052155219521B521D520012291CD004DCBB -:10DE60000E2915D01029D1D114E0162916D0182961 -:10DE7000CCD115E0800700E04007002839DA2AE11C -:10DE80000007FAE7C006F8E78006F6E74006F4E781 -:10DE90000006F2E7C005F0E7C004EEE78004ECE717 -:10DEA0004004EAE7800724D5032AAFD105206A465B -:10DEB0001070487809780002084390800BE1400711 -:10DEC000F1D5062A15D31898617880B2012902D0BD -:10DED00002299BD101E0022700E0102706226946B3 -:10DEE0000A7000228A8001AEA11C0236BA1C179269 -:10DEF00018E0B6E04A780B7812021A433280801E8E -:10DF0000891C1890B21C1691384603F0E4F9169952 -:10DF100018986B469A88C919C01BB61D521C9A8066 -:10DF2000179A80B28242E5D900289CD1D3E000073D -:10DF3000B9D51998694682B20720087000208880F8 -:10DF4000601C891D11E0437806781B0233430B8067 -:10DF5000C37886781B0233434B806E46121FB3880A -:10DF6000001D091D5B1C92B2B380042AEBD2002A6B -:10DF700077D1B0E0C00674D5022A72D31898082170 -:10DF800082B2684601700021C18063780371A01CD1 -:10DF900017990EE04678077836023E430E80861CBD -:10DFA0004E606F46D21AFE88C0180831761C92B2B5 -:10DFB000FE809342EED9DAE76FE076E065E051E06B -:10DFC00046E01EE014E00AE000E0A0E0800648D54C -:10DFD00009206A46107096801698D0800FE040069F -:10DFE0003FD50A22684602708680169AC28006E0F3 -:10DFF000000636D50B206A46107016989080029164 -:10E0000069E0C0052DD5022A7FD318980C2182B271 -:10E01000684601700021C18063780371A01C1799C4 -:10E0200013E04678077836023E430E80C67887783C -:10E0300036023E434E80061D4E606F46D21AFE8861 -:10E04000C0180831761C92B2FE809342E9D98EE75F -:10E05000C0045AD5012A58D10D2168460170868026 -:10E0600039E052E0800450D5052A4ED30E2368468D -:10E0700003708680C8788B78010219436846C18096 -:10E08000521F0281601D039025E040043DD5012A06 -:10E090003BD10F20694608701DE0030435D44B784E -:10E0A0000E781B023343244E3381032A2DD31B2FBA -:10E0B00027D011236E46337001261F4BF6033043E1 -:10E0C000588048780B780102194368468180D21E37 -:10E0D000C280E01C029020788006800E1B280AD0A7 -:10E0E0001D2808D00021032003F024FE1248418897 -:10E0F000C90BC903418068461C99F8F7B5F9284651 -:10E1000053E610206B461870DBE70725F7E7082574 -:10E11000F5E700B50022D243074997B04A800328AB -:10E1200007D1032268460270097901710021F8F7CE -:10E130009BF917B000BD0000DC190020FFB589B0C5 -:10E140000020019009981027FE4C1E46154608280D -:10E1500006D0E06901F05EF8002809D03770BEE013 -:10E16000288809213843108013980227017016E08F -:10E17000E169012088710521E269C9029180E169A4 -:10E180008872E169F0480881E16900208873288875 -:10E190002021084328801121139804270170139827 -:10E1A0000225801C0290307806900A203070E548E5 -:10E1B0001830049001F022FA0020059020462C30FF -:10E1C00003906DE00998102808D1022D06D001991E -:10E1D0000298A28D401A8270110AC170E08D0A99CE -:10E1E000884202D901F0CDF806E0884204D10698B1 -:10E1F000002801D030701CE00298E18D0170090AFE -:10E20000417012980088401BC01B82B2FF20C01BC7 -:10E21000904200D2024607A8009002980021C3193C -:10E22000E08D01F056FA3070002805D0C0B2832886 -:10E2300058D0E08D20833EE00598002804D0206C63 -:10E2400000790A282CD336E06846808BC119C9B200 -:10E250000191022D0DD01399019A4978914202D172 -:10E26000228F824208D00191206C0178032908D0C6 -:10E2700023E0084613994870206C0178042906D0E1 -:10E2800007E000790A2818D20120059008E0E18D06 -:10E29000818002990198081802900198281885B287 -:10E2A0000399049801F0ADF9002804D11298008870 -:10E2B000401BB84286DA022D0DD00998102806D1ED -:10E2C00002990198A28D081A8270110AC1701298E1 -:10E2D000058000203070206C0078032802D00020D8 -:10E2E0000DB0F0BD0220FBE7F8B5964A0026126D8E -:10E2F000002A2ED0401F934D84B24035E88A234631 -:10E300000833AF8AC318BB4222D88B784F781B02E0 -:10E3100010183B4303701B0A43700B79CF781A0225 -:10E320003A438270120AC2700471220A4271224674 -:10E33000491D801D06F0B0FCE88AA41D001980B2BA -:10E340008049E882096D002208180270427000E0DE -:10E3500009263046F8BD30B57A4B028840339B8A97 -:10E36000934213D9774B1C6DA3185C781D78240257 -:10E370002C430BD05C791D7924022C436404640C7B -:10E38000A41D1219028000200B6030BD822030BD18 -:10E39000F0B585B0074600266846068155E001982D -:10E3A000417802780D021543417902790802104341 -:10E3B00000044AD43D8003A80023012200905202A9 -:10E3C0001946284601F085F9040044D168460189C0 -:10E3D0000182019841790279090211434378027858 -:10E3E0001C021443AC421CD10A041AD44A04012171 -:10E3F000520C89030A430096C178807809020143D0 -:10E400000023204600F0C1FF040010D10199487993 -:10E410000A79000210430122D20310430871000A56 -:10E42000487101A904A8FFF796FF0400D1D0019913 -:10E4300000964878097800020843694600238A89D3 -:10E44000194600F0A2FF822C05D101A902A8FFF70E -:10E4500082FF0400A3D06846068109E0019948794B -:10E460000A79000210434004400C0871000A487108 -:10E4700001A902A8FFF76FFF0028EFD0822C02D07D -:10E48000204605B0F0BD0020FBE7F7B584B0144688 -:10E490000646002700F071FF2A480025006D00287D -:10E4A0002FD0059801282CD12046FFF771FF0700D7 -:10E4B00027D1002E29D06846058118E001994878B7 -:10E4C0000978000208432080019B0095587919794A -:10E4D0000202D8780A4301029F78587839431F789E -:10E4E00000029B1D384300F050FF002805D101A910 -:10E4F00002A8FFF730FF0028E0D0822800D10020DA -:10E500000746002E01D00F48056500F03AFF384657 -:10E5100007B0F0BDF0B597B00021042003F00AFC6D -:10E52000084F00243D467C8040356C73AC73287BDB -:10E53000B96CC00008380E18B08800280DD0012032 -:10E54000694603E0F01900200128000008703068D7 -:10E55000019000216846F9F78EFAB4803C65AC82E0 -:10E56000EC8217B0F0BDFE4B986418464030017342 -:10E570001A803838D861CDE7F949002049880A0760 -:10E5800000D501200A06120F01D002221043CA054D -:10E5900001D5042210438A0501D5102210434905F4 -:10E5A00001D520210843EE494031497B002901D0A3 -:10E5B000082108437047FFB5A7B004002898164605 -:10E5C0001B9022D00178E6484D06428822920246EE -:10E5D00040320092002D14DB8A06920E1E2A0ED0C5 -:10E5E000229A5205520E10D13288172A0DD3009A62 -:10E5F000927B002A09D1DB4D229AAA4205D0CA0992 -:10E6000006D08A06920E122A02D003202BB0F0BD4B -:10E61000D348826C0098007B2590C0000838101801 -:10E620001F9048060CD40098407B002808D0009921 -:10E6300088731F99289808601F9884800220E5E756 -:10E64000002718A90F7069460F72C54902AA0A640B -:10E65000309A4A6410A90F850F861B981D460078D2 -:10E6600020908106BE4B601F24901A462C322192C6 -:10E670002898DA691833890E1E93401C0B0006F0A7 -:10E6800099FD1FFDFD11FD1AFD90FDFCFDFBFDFA3E -:10E69000FDF9FDFCFDF8FDFDFDF7FDF6FDFDFDFDC1 -:10E6A000FDF5FD00032C7BD10320287017226A7032 -:10E6B0000022AA70E0E2052CF5D141780278090227 -:10E6C0001143A74B10AA19831185C27880781202D2 -:10E6D00002435A8300297DD091427BD800211846FD -:10E6E00081720181491E01841E9800F087FF052078 -:10E6F0002870A81C1D900220009021991E9800F0FF -:10E7000080FF002803D047E018A90870F0E2944881 -:10E710002030807C012803D002206870102002E0A5 -:10E7200001206870022022908D4830302390002212 -:10E7300020A9239802F0F5FD00282AD120A800780E -:10E740002299814225D132880099801C511A814238 -:10E750001FDB83481D99C08D0870000A48701D9802 -:10E7600020A9801C1D9000981D9A801C0090239861 -:10E7700002F0D7FD20A909781D9840181D90009837 -:10E78000401880B2009021991E9800F03AFF0028AE -:10E79000CDD0009802288DD10A2018A908706CE20B -:10E7A0006DE0072C6BD341780378090219436C4B59 -:10E7B0008446198310AB1985C37880781B021843EF -:10E7C000674B0029588305D0814203D801211846A0 -:10E7D000817200E0A4E061464B7909791B020B438A -:10E7E000038100218173104600F014FD00280FD131 -:10E7F0005B480121C26991710522C369D2029A80E6 -:10E80000C2699172C26958491181C069002181733E -:10E810005349E01F08841B98C01D48621E9800F0F1 -:10E82000EDFE07202870681C009001201D904C48C8 -:10E830000021C18530E01D98012815D04848C169E4 -:10E84000897901292FD000981038C17B807B09027B -:10E85000014300980170090A41700098801C0090E3 -:10E860001D98801C80B21D903D4809E013E2BEE176 -:10E870007AE1D8E00DE2A0E080E03BE01EE2B6E005 -:10E88000C18D00980170090A41700098801C0090A9 -:10E890001D98801C80B21D9021991E9800F0B1FE39 -:10E8A000002802D006E0818DD3E731881D98081A30 -:10E8B0000428C0DA1D98012800D16DE72848C169F5 -:10E8C0008979012903D0828D26498A4205D1818D1B -:10E8D00000980170090A417009E000981038C17B66 -:10E8E000827B0802009910430870000A48701D9846 -:10E8F000801CC1E1072C01D0152C78D14178037818 -:10E9000009021943164B198310AB1985C378807817 -:10E910001B02034312480029438301D0994201D9C5 -:10E920000120F1E60E4801218172002101818173ED -:10E93000052C07D024981B99C0B2491D02F0CBFCCE -:10E940000028BAD100200649C04308841B980096CD -:10E950000195007818AB8006800E1CAA002105E006 -:10E96000F0190020FFFF000001280000FFF7E6FB80 -:10E970000746FE4810A9008B08857EE1032CBCD118 -:10E98000402210A90A86417802780802F74910430C -:10E99000088310A9088520A9009131886B1C491EA5 -:10E9A0008AB2002100F095FE18A90870002830D125 -:10E9B0000B20287020A8008833E0052C9DD18021F1 -:10E9C00010AB1986014640780B780202E7481A43DB -:10E9D0000283CB7889781B021943E44B10461984D3 -:10E9E00010AB1A85E24A914202D307208CE697E0E9 -:10E9F0003F23DE4A9B021943118421AA00923288E8 -:10EA00006B1C521E92B200F064FE18A90870002818 -:10EA100003D08328B1D102272FE10D20287020A830 -:10EA20008088401C28E120990C22C9095143C91C47 -:10EA30001E91A14204D92098400671D500201BE107 -:10EA4000417800780902014310A801851B980078DD -:10EA500042062898C01C1D90002A62DA05206A46EA -:10EA600010721B980078C00944D0082268460272D0 -:10EA70008181A01A87B268468782289806901E98DE -:10EA8000201A81B26846C1811D980490401806F092 -:10EA900064F9079006982599C0190890491E08A89E -:10EAA000017102A83099F8F7E6FF07460021684691 -:10EAB0000172002F1BD0022F18D1009808A9007BEB -:10EAC0000979401E884210DDA848289A836CC90045 -:10EAD0005A50816C08A80079C000001D0C520098A3 -:10EAE0000099407B401C4873C7E00527EAE00620F8 -:10EAF00069460872002000901E980021201A20907C -:10EB000082B21B9B10A8DB1C008D00F03EFC01466E -:10EB100018A80170002268460272832903D003E01E -:10EB200093E00720E4E702271B98007840060ED503 -:10EB30008E484188C90506D510AA018B128D9142D5 -:10EB400001D100214162002018A9087094E0FF2142 -:10EB5000013110A80186018D844801832099018428 -:10EB60001D994162132085E0052C6ED3417803780E -:10EB70000A021A4310A90A859446092269460A72B4 -:10EB80000021009101222499D20311438AB2C17855 -:10EB9000807809021B9B01435B1D604600F0F5FB7A -:10EBA00018A90870002269460A720122520210A9AF -:10EBB0000A86832802D0002805D099E06B48098D89 -:10EBC000018302277EE06948006D002807D02046B7 -:10EBD0001B99FFF789FB18A9087000284DD12B4617 -:10EBE000324620461B9900F024FB074645E01B985F -:10EBF000022C4078009064D1002801D0012860D117 -:10EC00000A2168460172009901731AAA002000992E -:10EC1000FFF73BFC0146684641730021817302A85F -:10EC20003099F8F728FF0746002168460172012154 -:10EC3000890210A80186022F08D04C48006C807908 -:10EC4000002807D018A9087020E04BE04749009839 -:10EC5000088337E0002F03D0812018A9087031E025 -:10EC60001AAA01200099FFF710FC18A908700028C3 -:10EC700003D119202870012030806846007A0028CE -:10EC800004D002A83099F8F7F6FE0746002F2BD0E3 -:10EC900018E0062038E522993448090711D5012CDF -:10ECA0000FD10B2269460A72C08888810021042096 -:10ECB00003F040F8082010A90886BFE62098400617 -:10ECC00010D50327294810AA4188128E114341808C -:10ECD0005005400E04D01F99289808601F98848022 -:10ECE000384693E404200FE518A8007800280ED0D9 -:10ECF000012028701B980078687010A8008DA870FB -:10ED0000000AE87018A8007828710520308017489C -:10ED100010AA4188128E91434180E1E7FFB5064673 -:10ED20009FB000201B903178012088401149124A81 -:10ED3000084010A908860D494988914203D000284F -:10ED400004D0080702D5012023B0F0BD219D002783 -:10ED50002F7020983C46018810A8018418A80771DC -:10ED600000F00BFB6846077202A907E0F0190020CB -:10ED70000102000009F80000FFFF0000FA480164EA -:10ED800001464031826C1A91097BC9000839571835 -:10ED900022994164307801282AD0022809D003281A -:10EDA00079D12878800980011D302870EE48B1881B -:10EDB000C1803078022804D12878800980011B3076 -:10EDC000287001A8009010A8008CEB1CC01E82B215 -:10EDD000B088002100F07DFC0028E1D1B188697085 -:10EDE000090AA9706946888810A9C01C08842DE109 -:10EDF000717918A801713079012802D00228CFD189 -:10EE0000E6E0D9487F2340881B010246184010AB3A -:10EE10001886802840D006DC102810D020280ED07C -:10EE200040280AD120E0FF38013859D0FF38013896 -:10EE30006AD0FF38FF3802387ED0052491E0D00632 -:10EE400001D5082000E010201B90042069460872BC -:10EE50000020888118A800900195318919AB1CAA5F -:10EE60001B98FFF76BF977E0BF4B3289188B824212 -:10EE70004FD10A221B92002973D101A9009110A938 -:10EE8000098C6B1C491E8AB2002100F022FC18A9D3 -:10EE900008710B2017E0F6E0B34B3289188B8242E1 -:10EEA00037D10C221B9200295BD101A9009110A936 -:10EEB000098C491E8AB21946098C6B1C00F009FCAA -:10EEC00018A908710D2028706946888810A9401C6F -:10EED0000884042069460872A348008B888140E0BA -:10EEE000A14A3389108B834213D112231B9300292B -:10EEF00037D1536A002B05D00091128C00F045FAEF -:10EF000018A9087113205EE097483289038B9A4252 -:10EF100001D00424E7E016221B92026D002A09D1D9 -:10EF2000F268002A06D002651A98328A82821A9AFA -:10EF30000020D082002900E02FE012D1B888396883 -:10EF4000FFF7D2F918A9087100280AD1B8882B4612 -:10EF500018AA396800F06DF90446022818D0042C6C -:10EF600016D0B88800280FD06846007A002804D050 -:10EF700002A82299F8F77FFD04460120694608722D -:10EF8000386803900020B880002C5FD0052C7BD01F -:10EF90006846007A032873D0A5E018201B9000294A -:10EFA00005D071483189018300210165D9E76E4898 -:10EFB0000246017E18320120FFF767FA18A908718E -:10EFC0000028CED119202870012010A90884C8E794 -:10EFD0001A98407B002856D0307AC0001358001D84 -:10EFE0000193105A1D9000291AD100F0CAF9062089 -:10EFF00069460872002000901D980F3882B201986F -:10F000008178437808021843019B0021DB1C00F043 -:10F01000BCF918A90871002269460A72832830D009 -:10F02000002118A8017110A801840121684601720D -:10F03000019803901A981A99407B401E48731A98B9 -:10F04000807B002802D01A99401E887310A8008E79 -:10F050007F21090102468A431DD0434800220088CF -:10F0600011468300042002F0C0FD3F483178017151 -:10F0700010A94088098E08433B4948800FE003E00F -:10F080002BE002242FE00524374810AA4188128E75 -:10F090009143418027E034494A8882434A80684648 -:10F0A000007A002805D03048416C02A8F8F7E3FC4C -:10F0B000044618A80079002815D01B986870012014 -:10F0C00028702948008BA870000AE87018A80079F9 -:10F0D0002871052110A8018405E02348416C02A88D -:10F0E000F8F7C9FC044600F04CF91F484088400579 -:10F0F000400E20D11A98807B00281CD1B8880028A7 -:10F1000019D0209910AA0988118422990091396890 -:10F1100018AA219BFFF74FFA044602280BD00120C2 -:10F12000694608723868039002A82299F8F7A3FC90 -:10F1300004460020B88010A8018C20980180204649 -:10F1400002E600B50022D243074997B04A8004285E -:10F1500007D1022268460270097901710021F8F78F -:10F160008AFC17B000BD0000F019002010B5394C22 -:10F1700003780022216C012B02D0022B44D126E01F -:10F180000B78002B01D0042B03D10A71226C0321D0 -:10F190001170216C83880A79D200921D8B52216CE8 -:10F1A0000A79D20008328918C2880A80216C038942 -:10F1B0000A79D2000A328B524289206C0179C90047 -:10F1C0000C314252216C0879401C087120E00A740D -:10F1D000226C81889180216CC288CA80226C01894E -:10F1E0001181226C41895181216CC068C860616CB9 -:10F1F000206CF8F740FC0146022807D0206C007C08 -:10F20000002802D1002903D0812010BD832010BD29 -:10F21000002010BD8178012909D100880521C9028B -:10F22000884202D0491C884201D100207047052045 -:10F23000704710B51488844201D2052010BD1724F0 -:10F240001C701080421E491C581C05F025FD002032 -:10F2500010BD0000F019002010B58B78002B11D0E4 -:10F2600082789A4207D10B88002B0BD003E0091D4E -:10F270008B78002B08D08B789A42F8D103880C88C1 -:10F28000A342F4D1002010BD812010BD10B500298B -:10F2900002D001290DD102E00088000501E00088BC -:10F2A0008004800F07D001281CD0022809D0032831 -:10F2B00010D0812010BD002901D0032010BD0220F4 -:10F2C00010BDF5F7EEFD03280CD004280AD0002865 -:10F2D00006D009E0F5F7E5FD042803D0022803D0A5 -:10F2E000052010BD002010BD0F2010BDF3B5C81CB7 -:10F2F00080080E46800081B0B04201D08620FEBD5D -:10F30000FE4C354626600198A08000202081E080D8 -:10F3100014E0B807A978800D0843F94905F036FDD7 -:10F32000E088401CE080B80607D42089401880B2ED -:10F3300020810199081A8019A8600C352F88780758 -:10F34000E7D40020A072FEBDEC480C22C1880089E1 -:10F350005143081880B2704770B51346E74A451804 -:10F360009488AC4201D2842070BD126810180A46FD -:10F37000194605F091FC002070BDE049012088721B -:10F380007047DE49002088727047FFB589B0970446 -:10F390000E460546BF0C029200F034FA040021D05C -:10F3A000002069460873D548807A012812D00121CF -:10F3B0002046FFF76BFF002815D12078400609D5BD -:10F3C0000221684601730582218841828682C782B4 -:10F3D0000C9806900298000407D500273E460125A8 -:10F3E00001970CE001200DB0F0BD2078A1788007D6 -:10F3F000800D0843C249019005F0C8FC0D460298F3 -:10F4000040040AD50198A84207D12088E1788005F8 -:10F41000800F00020843B04201D3AE4201D9072059 -:10F42000E1E7B81980B20290A84201D90D20DAE7CD -:10F430006846007B002804D003A8F8F718FB0028D2 -:10F44000D1D10198A8420BD1208803210902884319 -:10F4500002998905890F0902084320800298E0700B -:10F460001298002800D007800C9800280CD0207833 -:10F47000000609D4A0683A4680190C9905F00CFCE6 -:10F4800020881021884320800020ACE7FFB59B4DE9 -:10F4900081B00E46E8882F680C21009048433C1844 -:10F4A0009749039805F072FC0A462889E11B8446B7 -:10F4B0000C314018318880B28B0601D5002300E062 -:10F4C00013461818AB8880B2834202D8842005B056 -:10F4D000F0BD0098894D401C80B2E88021800D99D4 -:10F4E000002900D00C600399A170E2702188039D6F -:10F4F0008908AD058900AD0F294303252D02A943D5 -:10F500009505AD0F2D0229430425294321800C992F -:10F51000002900D0088001998978A1710199098892 -:10F52000A1803178890601D50B9905E073496244C1 -:10F5300092B20A81991AC919A16000212173327807 -:10F54000920601D50020C2E700910B9B0A9A04990C -:10F55000FFF71BFFBBE7FEB5044600F053F90700B9 -:10F5600008D0664D641EE8880190A6B2286834462B -:10F57000009015E00120FEBD0C2000996043095A5F -:10F580008A060BD489078A0D0099801C085C5C49A7 -:10F59000104305F0FBFB2889401A2881641CA4B2A3 -:10F5A0000198A042E8D8EE8000203870FEBD002807 -:10F5B00003D0401E0880002070470120704710B51E -:10F5C0004E490288CB889A4201D3822010BD0B6835 -:10F5D0000C21514359180B88CC789B059B0F1B02BB -:10F5E000234341608C7904738C884481C38189688A -:10F5F000521C016102800281002010BD01210182A4 -:10F600007047FEB505460020C043088068680F4675 -:10F6100081786846817068680188684601800021A9 -:10F620008171288A2C88A04200D304462C8234E0C1 -:10F63000288A401C2882301D6968FFF70DFE0028CB -:10F6400029D139882F48814201D1601E38806888CD -:10F65000A04227D33088F1788005800F000208434C -:10F6600002906946301DFFF7F7FD002813D1298964 -:10F67000244881421AD000213046FFF707FE0028B7 -:10F6800009D12A890298824205D1E968B06805F05B -:10F69000D6FA00280AD0641CA4B2204600F0B2F8C2 -:10F6A0000600C5D1641E2C828220FEBD7C80B0790C -:10F6B000B871B088B8803088388130788007810D83 -:10F6C000B078014379810298B881B0683861002030 -:10F6D000FEBDFFB585B014460F46059800F092F8C0 -:10F6E000050037D00548BE05807AB60D01281CD02C -:10F6F00000212846FFF7CAFD002805E0481A00202F -:10F7000001020000FFFF000022D1287840060CD53E -:10F71000012168460170059981802988C180068190 -:10F720004481F8F7A4F9002812D12888AA78810723 -:10F73000890D11438005800FEA7800021043BE4214 -:10F740000AD0374A914207D3611E814204DD0B2063 -:10F7500009B0F0BD0120FBE7864201D90720F7E799 -:10F76000801B82B2A24200D922460E98002800D007 -:10F7700002800898002804D0A8688119089805F02C -:10F780008BFA0020E4E770B514460D4600F03AF815 -:10F7900000280DD001882980002C0DD001788078B8 -:10F7A0008907890D01431E48814203D2012002E0EE -:10F7B000012070BD00202070002070BD70B516467D -:10F7C0000D4600F01FF804000DD02D882580FF2E77 -:10F7D00016D0A807A178800D0843114905F0D6FA84 -:10F7E000002E06D101E0012070BDFF31FF31033151 -:10F7F00089B2A170A80880008905890F084320807C -:10F80000002070BD0749CA88824207D3002805D06E -:10F810000C22096850430C380818704700207047C4 -:10F8200001020000481A0020F0B585B00E460546DA -:10F830000020694608707078FE49C00003900C589B -:10F84000FD4F002D0ED0022D73D0002C72D02078E9 -:10F85000801E030005F0AEFC09837F7F7F83797FE4 -:10F8600077727F00002C03D1F4A16B2005F0B1FB6F -:10F870002078801E030005F09DFC09065E5E5E197F -:10F88000365E50545E003078062803D0EBA1762017 -:10F8900005F09FFBB8687168806C032205F0FCF9E5 -:10F8A000012069460870002835D1CEE730780C2851 -:10F8B00003D0E2A1812005F08CFBE06800780028ED -:10F8C00006D0B8687168806B102205F0E5F928E071 -:10F8D000B8681021006B05F03CFAB868816A006BCB -:10F8E0000A787168F1E730780D2803D0D3A194200D -:10F8F00005F06FFB04206946087071684878097844 -:10F9000000020843B9684A6A517812780902114323 -:10F91000484069468880084608E0C8A1AF2005F045 -:10F9200058FB6846007800288FD06846F5F7BEFA85 -:10F930008BE727E01CE0C1A1B420F0E7B86861695B -:10F94000006CFEF708F8A16900E0E168B868006C97 -:10F95000FEF701F803E0B9A1E32005F03AFBB8682F -:10F960002146006CFDF7F7FFB24A03990020505082 -:10F97000022D07D0002D05D0012D03D0AFA1EF201F -:10F9800005F027FB05B0F0BD10B501780124012971 -:10F9900002D0022910D112E04268A74800218260FB -:10F9A0000170A4486C38C166016741678167D289DC -:10F9B00002214C3001F0E1F90024204610BDFF2067 -:10F9C0009EA1163005F005FBF7E7F0B505469EA1B0 -:10F9D00003C997B014911390002008A908759549A0 -:10F9E0002A781031944C0491217805910126914F89 -:10F9F000A168130005F0DEFB0CEF07309AF0EDEC88 -:10FA0000EBEAE9E9E8EF20700124FF264F360546CE -:10FA100010A80570457001F0C1F90746012803D010 -:10FA200086A1304605F0D5FA10A93846FFF7FCFE4E -:10FA30002046641EE4B20028EAD10A206946087014 -:10FA40006846029501F088FA002803D0FF207BA1C8 -:10FA5000583068E0002646E3C86A0078C0072FD017 -:10FA6000012069460870684601F076FA002804D043 -:10FA7000FF2072A16B3005F0ACFAA068006CFDF7B6 -:10FA800061FF050004D1FF206CA16E3005F0A1FAE2 -:10FA900008984078C0003D5006202870A068016892 -:10FAA00069600069A8606448C01CE860284601F0ED -:10FAB00053FA022804D0FF2060A1783005F089FABB -:10FAC000A068C06A00784007C4D501206946087064 -:10FAD000684601F041FA002804D0FF2057A1803089 -:10FAE00005F077FAA068006CFDF72CFF050004D143 -:10FAF000FF2052A1833005F06CFA08984078C000CE -:10FB00003D5006202870A068016869600069A860FF -:10FB10004948401DE860284601F01EFA022899D0A5 -:10FB2000FF2046A18D3005F054FA93E7A96800291B -:10FB300033D0694608712979012932D0022904D0CD -:10FB4000FF203EA1A73005F044FA3A4810221030B9 -:10FB5000A96805F0A1F837481030364920314860CF -:10FB60002078C1062CD5EF2108402070032069467B -:10FB70000870304810300290684601F00FF90446D2 -:10FB8000022808D0002C06D0012C04D0FF202BA185 -:10FB9000B83005F01EFA69466FE101216A4611711D -:10FBA000DBE7244A04996C3AD06748608860C860F3 -:10FBB0000621A86803F0FCFE1E4910310860CAE760 -:10FBC00020210843207045E7A1E15AE119E1E6E070 -:10FBD00086E056E000E081E2886C407980090128E7 -:10FBE00004D0FF2015A1CC3005F0F3F9A068017A0C -:10FBF000002906D1416B406801F01FFAA16801207D -:10FC00000872012069460870684601F0A5F90028CD -:10FC100004D0FF2009A1D73005F0DBF9A068006C03 -:10FC2000FDF790FE050004D1FF2004A1DA3005F0B5 -:10FC3000D0F90DE0C01A0020B40000207372635C9C -:10FC4000736D2E630000000004411A8800A4800038 -:10FC500008984078C0003D5002202870A068416B91 -:10FC60006960806CC01CA860284601F075F904002A -:10FC700004D0FF20FD49E23005F0ABF929462831D8 -:10FC8000FBE0172268460272012202708078820827 -:10FC9000287992008007800F024368468270FB201B -:10FCA000024028794007C00F8000024368468270F6 -:10FCB000EA8882804A6C02A901F090F9002804D0F9 -:10FCC000FF20EA49F73005F084F9052108A80175FD -:10FCD0006846017A0187A0680026406C0F9006E212 -:10FCE000012069460870684601F036F9002803D003 -:10FCF000DE49DF4805F06DF9A068006CFDF722FED3 -:10FD0000060004D18320D949800005F062F9A0687B -:10FD1000006CFDF717FE1290002804D1D448D34997 -:10FD2000801D05F056F9D3488068006CFDF70AFE87 -:10FD3000040004D1CE48CD49093005F04AF90898AD -:10FD40004078C0003E500A203070287A30716868D0 -:10FD5000C84DB060A868406C3061172030731298AD -:10FD6000B4617061304601F0F7F80446022808D00B -:10FD7000002C06D0012C04D01120BC49400105F014 -:10FD800028F92046316AFFF74FFD28780521014008 -:10FD9000042900D05EE6FB21084028702AE005987F -:10FDA00040084000207082071CD5FD2210402070C2 -:10FDB0000F206A46107017201071486C0290684638 -:10FDC00000F0ECFF0546022808D0002D06D0012DDA -:10FDD00004D0A748A5493A3005F0FBF86946284603 -:10FDE000FFF722FD2078052101400429D2D1FB2113 -:10FDF00008402070072008A908759E48807808767A -:10FE000028E6012069460870684601F0A5F8002838 -:10FE100004D097489549543005F0DBF8A068006C91 -:10FE2000FDF790FD060004D113209049400105F034 -:10FE3000D0F890488068006CFDF784FD040004D180 -:10FE40008B488A495A3005F0C4F808984078C000B9 -:10FE50003E5007203070874880684068706068684E -:10FE6000F460B060304601F077F8040004D08048B8 -:10FE70007E49653005F0ADF8316A2046FFF7D4FCC5 -:10FE8000E8E5012069460870684601F065F8002839 -:10FE900004D0774875497A3005F09BF80898407887 -:10FEA0001190A068006CFDF74DFD060004D15120B3 -:10FEB0006E49C00005F08DF8A068006CFDF742FDAA -:10FEC000040004D16A486949823005F082F811982B -:10FED000C0003E50C019296941600920307068682F -:10FEE0007060A868B060A889B08163483061103044 -:10FEF000B4617061304601F02FF8022804D05C48EC -:10FF00005A49903005F065F811982875A2E55A4ACB -:10FF100000208C32107002206B46187001922879F4 -:10FF2000002801D0107098E0524803230C3040683C -:10FF3000FB2703708378504A9B089B003B408370EB -:10FF40004B7A00271B07DB0F43708C3257600B7B0B -:10FF5000C370CB7A1372537A0C7D5B08E4075B00A5 -:10FF6000E40F23430C461534D460FD242340CC7E9B -:10FF7000E407A40F234353720B461C3313614771EC -:10FF800007718B7A3B4A9C070C32A40F1268012C34 -:10FF900004D19478A407A40F012C1DD09B089B00CA -:10FFA0008B7293785B0702D48B7A5B0728D54B7AE8 -:10FFB00013AF5B075B0FDC005B00E3181478640091 -:10FFC0001B19DBB2DC083C5D5F077F0F0623DB1BE0 -:10FFD000DC40A3079B0F14E04C7A53796406640F4E -:10FFE00023404371147906273C400471E4001C430C -:10FFF000204B5C7083789B089B005B1C8370D0E770 -:020000040001F9 -:1000000000238478FB273C408F7A7F07FF0FBF00D7 -:100010003C4384704C7A6407640F04705078012864 -:1000200007D1487A000704D5032008A908750220E3 -:100030002DE0022B27D0012B2BD00F4B0020049A50 -:10004000D86750609060D06018467C30024610320D -:100050005060887AFB2210408872684600F09EFE4D -:10006000040035D0012C34D0004907E03CFC0000EE -:1000700009020000B4000020541A00206520C000CE -:1000800004F0A7FF25E0032008A9087501200876E1 -:10009000E3E77E4C0D21E01C04F05BFE20461030AF -:1000A0004460022008A908750E94A868002807D0AB -:1000B0000068206005997648202211430170CCE742 -:1000C00005980007C9D57349734804F082FFC4E757 -:1000D000002669462046FFF7A7FB04E06E486D49FD -:1000E000203004F076FF08A8007D002802D00DA87B -:1000F000F4F7DCFE304617B0F0BDF0B597B00C4613 -:10010000054600206946087061482F785F4E0178E7 -:10011000583E82683B0005F04DF80BAA8407263B49 -:100120004C6B79798F9CAA002B20694608730CA927 -:1001300003A8FDF73DFC002804D05748554941303D -:1001400004F047FF55490D9804F020FE4F48016028 -:100150004F4869680C300160AA684260019108202C -:10016000694608708CE08A0610D5DF2211400170C4 -:1001700003202070454810304168A1604068002885 -:1001800002D00020207177E00120FBE7102256E02A -:100190002B20694608733D4903A85C39FDF708FC2C -:1001A000002804D03C483B496A3004F012FF042088 -:1001B0001BE02A206946087303A8102202306968F0 -:1001C00004F06AFD07A810220230A96804F064FD5B -:1001D0002E4903A85C39FDF7EBFB002804D0392039 -:1001E0002C49000104F0F5FE05202070666043E014 -:1001F0002A79002A02D001221143017005206946A4 -:10020000087028798880A868029039E0D06A402375 -:10021000018819430180D06B6968102204F03CFD0D -:100220002AE0FB2211400170062069460870A96887 -:1002300068680291019023E0CB0703D002221143AA -:10024000017058E70F20207017202071506CA060BB -:1002500012E0937A9B0706D0D26A44781388FF3461 -:1002600001342343138004221143017004E00A483F -:100270000849BD3004F0ADFE684600780028E0D0A3 -:100280006846F4F713FE36E701207047D01A0020C5 -:10029000B40000203CFC00001503000040420F00A9 -:1002A00070B504780D460646230004F083FF0B1C4E -:1002B000181C1C1C1C07181C1C181C0000210520E5 -:1002C00001F038FDB068007805280CD0FA4800220B -:1002D000008811468300052001F087FC03E000211F -:1002E000052001F027FD002D0ED0002028702946A2 -:1002F0003046FFF702FFF1482978005D884201D1BE -:10030000032070BD022070BD00213046FFF7F5FECE -:10031000002070BD30B5E8494B68497A0A011146A2 -:100320000C315C5C032C0CD0044600252034257174 -:1003300025725C5CA500AA18641C5C5498500320CC -:1003400030BD062030BDF0B50446264620360D46A9 -:100350003279012008218FB0002A0CD0012A21D047 -:10036000022A2BD0032A04D12A78052A01D1297028 -:1003700000200FB0F0BD01203071606800280AD065 -:10038000A069017061684160216981606169C16033 -:10039000FFF7C0FFEDE707202870206968606069FB -:1003A000A86009E029780729E3D1022030710520EF -:1003B0002870C248203868600320DAE729780529C8 -:1003C000D7D1A08910280AD9103880B2A081A1689D -:1003D0001023091803A86A6800F054FE2DE01028C5 -:1003E00004D0C1B20BAA1020A76809E0102322692B -:1003F000A16817E0491EC9B2401EC0B27B5C13540D -:100400000029F7D100280AD0401EC0B28021115423 -:10041000002102E0401EC0B211540028FAD16269E6 -:1004200010230BA907A800F02DFE102307A903A88D -:100430006A6800F027FE032030716068019003A80D -:10044000029005206946087029466846FFF728FF94 -:100450008FE7F0B5044626460D4620363179012057 -:100460008DB000290BD0012938D0022905D1297877 -:10047000052902D10920287000200DB0F0BD217D92 -:100480006846CA07D20F02738807C10F6846017415 -:10049000012203A905A800F0EDFD04A9012205AF82 -:1004A000481D00F0E7FD0722B81CE16800F0E2FDFE -:1004B00007A807220130216900F0DCFD6068019087 -:1004C00009A80290102305AAA16800F0DBFD012015 -:1004D0003071052168460170294621E029780529F7 -:1004E000CBD1062203A8E16900F0C4FD04A80622CE -:1004F0000230A16900F0BEFD042106A800F0B2FDA3 -:100500006068019007A80290102303AA696800F0B0 -:10051000B9FD0220307105206946087029466846F9 -:10052000FFF7BEFEA9E7F0B5074685B00D460020EF -:10053000694608703E466248203632798179133820 -:1005400001240078130004F035FE180DFEFDFCFBBD -:10055000FAF9F8F7F6F5F4F3F2F1F0EFEEEDECEB73 -:10056000EAE9E8E7B968039100291BD0012269464E -:100570000A7003220A710A224A7139690291397993 -:1005800000297DD0039A1278002A7AD00C2A78D2DA -:10059000130004F00FFE0BEF09EF354D8498B0F116 -:1005A000EDECEF000020C8E30021062001F0C2FBC3 -:1005B0003879072866D1424C133C2078022802D0B3 -:1005C00000287FD101E00020207003980079C11F2E -:1005D0000A2901D30A2598E1607039480722C01F13 -:1005E000039900F047FD0120307120700220694618 -:1005F00008703348801F01903869401C029037E230 -:1006000011293DD12E4C133C0228DAD16068617863 -:10061000007A884201D9062577E1039926481022FD -:10062000491C303800F026FD03202070022045E1EF -:100630001129E6D1224C133C0428C2D10520207098 -:1006400003991D481022491C203800F013FD062094 -:100650003071786903210170626851684160164900 -:100660002039816021460C31C160C91D0161017DC5 -:10067000537A49084900DB07DB0F1943017502E093 -:1006800070E354E384E1D3688361FD231940537A16 -:100690009B07DB0F5B0019430175116976E10229A5 -:1006A000AFD1002867D005206946087103984078CB -:1006B00048713869029051E3241B00203452010034 -:1006C000DB00002082E011299BD1F74C06287DD168 -:1006D000A0680399806B1022491C00F0CBFC062116 -:1006E0006846017038690290002168460171FFF781 -:1006F000D7FD072057E00B299BD1EB4C07287ED173 -:10070000A0680399006B0222491C00F0B3FCA068AA -:100710000822406B039917E00EE116E3FDE2DDE2EB -:10072000C7E2BCE29EE267E248E241E21FE2F5E195 -:10073000DFE1C8E1BEE1B1E1A5E16AE147E128E11D -:10074000DAE0BEE0AFE075E0C91C00F093FC0621E2 -:100750006846017038690290002168460171FFF710 -:100760009FFD204613304179490849003EE041E0B1 -:100770001BE001E05CE0EFE2112991D1CA4C0828AE -:100780003DD1A0680399C06B1022491C00F072FC97 -:10079000062168460170386902900021684601719F -:1007A000FFF77EFD09202070C9E208298CD1BE49DF -:1007B000092824D1039842788868016C0A7003994B -:1007C000406C0622891C00F055FC00E017E0062171 -:1007D0006846017038690290002168460171FFF790 -:1007E0005FFDB14813304179FD221FE041715EE2A7 -:1007F0003071F2E11129C0D1AB490A2801D0082596 -:1008000083E088680399806C1022491C00F032FC58 -:10081000062168460170386902900021684601711E -:10082000FFF73EFDA04813304179FB221140DDE780 -:1008300007256AE0297802297ED19B490128FBD14E -:100840006A684A6015780846002D5CD106216A4620 -:1008500011703969029107211171029902240C70FB -:10086000CA785207520FCA704B795B075B0F4B7106 -:100870008B795B075B0F8B71D20701D18A714A714B -:1008800005460A794078824200D26A70864807227B -:10089000133000F0EFFB00202C70307101466846E9 -:1008A000FFF7FEFC4BE229780429C5D103286FD15C -:1008B00008227E48696800F0DDFB032030710420C7 -:1008C000F2E129780429B7D1774F0328B4D17748CA -:1008D00008220830696800F0CDFB04203071786888 -:1008E0004168002906D00321297000212971406840 -:1008F000A86072E10320D7E1287803289CD12879E9 -:1009000000281AD00546002D16D006216846017031 -:100910003869029002216846017102980521017030 -:10092000457000216846FFF7BBFC01216846017055 -:1009300004210171457115E293E15B49A86849689A -:100940000028486001D15A48486005203071786914 -:10095000032202704A684260544A8260524A0C3252 -:10096000C260D21D0261027D4B7A5208DB07520041 -:10097000DB0F1A430275CB688361FD231A404B7A63 -:100980009B07DB0F5B001A4302750969C16130E107 -:100990000DE12978092988D14349032885D104200C -:1009A00008700620694608703869029011200871A5 -:1009B000029803210170401C1022696800F05AFB64 -:1009C00000216846FFF76CFC00203071B7E1297800 -:1009D000092993D1052891D134496A68203910201A -:1009E000401EC0B20B5C145CA34203D0002004255F -:1009F00030718AE70028F3D107203071786904212B -:100A00000170294949684968416028498160103965 -:100A1000EEE028780A28BED10620694608703869B9 -:100A2000029011200871029804210170401C1022CC -:100A30001E4900F01FFB00216846FFF731FC1A48F1 -:100A4000102140786A68091AC9B2101800F00AFB30 -:100A50006868019014481330C178C9070BD08179B8 -:100A6000002902D14079002805D0082030711BE10F -:100A700029466846EFE0072069460870002168466D -:100A8000FFF70EFC5FE128780E2884D106486968DC -:100A900081608969407808700920A9E6C80701D0FB -:100AA0000A20FFE00F20A3E6C8000020141B00204E -:100AB0001452010028780F2879D1A8683861287964 -:100AC00038730B20FAE628780428F5D1FC4C6968C5 -:100AD000A0680822006A00F0CDFA0C203071786915 -:100AE0000722B9690270A268D3684360126A826003 -:100AF0007EE028780D28DFD1F14C6968A0680223D8 -:100B00000269C06900F0BEFA0D20307178690621D3 -:100B10000170A1688A684260096966E028780C283B -:100B2000CAD1E74C6968A0686278406A00F0A2FA0E -:100B30006078A2681021091A526AC9B2101800F030 -:100B400091FA0621684601703869029011226846C0 -:100B50000271029810220170A168401C496A00F0DD -:100B600089FA00216846FFF79BFB0E206EE028788B -:100B70000F2876D1062168460170386902900B2152 -:100B800068460171029C0720CD4D2070A8680222A2 -:100B9000C169601C00F06EFAA8680822016AE01CB6 -:100BA00000F068FA00216846FFF77AFB7AE7C8E0B0 -:100BB000880701D5102075E0132019E628780F2842 -:100BC0004FD1A86838612879387311203071BC483A -:100BD000816848690078002801D00324CAE0786958 -:100BE00006220270C9684160B6498160B549091D95 -:100BF000C160FFF78FFB30E0B14880684169097838 -:100C000000290CD129780C292BD1AD4C6968806A58 -:100C1000102200F02FFAA16801204969087006210E -:100C20006846017038690290112168460171029886 -:100C300008210170A249401C89681022896A00F0CD -:100C400019FA00216846FFF72BFB122030710921A9 -:100C5000684601702946FFF723FB044601287DD032 -:100C600088E06FE028780F286CD10620694608706C -:100C70003869029008200871029809210170904992 -:100C800089680A78D207D20F427049680622801C10 -:100C900000F0F0F900216846FFF702FB8CE74807F7 -:100CA00005D514203071092069460870E0E6162049 -:100CB0009EE528780F2851D1A868386128793873C3 -:100CC000152030717869062101707D4989688A682C -:100CD0004260096981607B49891D89E728780C2871 -:100CE00045D1774C6968A0681022C06A00F0C2F94B -:100CF0000620694608703869029011200871029830 -:100D00000A210170A168401CC96A102200F0B2F9E2 -:100D100000216846FFF7C4FAC9E7694813304079F3 -:100D2000002810D0C10703D065480621017006E0F5 -:100D3000800701D5082000E00A20614908700024DE -:100D400018E00BE013E0172052E55D49002805D0BC -:100D50000020307108700A206946087068460078E3 -:100D6000002804D000216846FFF79AFA002454486E -:100D700000210170204605B0F0BD10B5524BFF2494 -:100D80005C72586019721A80002204E0491EC9B2D0 -:100D90000B010C33C2540029F8D110BDF0B54A4EF6 -:100DA0000546717A01208DB0FF2971D00127727A32 -:100DB000736811015C180C31595C8900091F645873 -:100DC0006A7021780B0004F0F5F90B960709272CBF -:100DD00059888D4A4F5492002F707CE02146203173 -:100DE0000A9109790120002902D0012967D10EE07A -:100DF0006068019005A802900D21C01C00F032F936 -:100E0000032205A8A16800F035F90A984EE0297878 -:100E1000052974D106215DE029462046FFF719FB1C -:100E200069E021462031069109790120002902D08C -:100E3000012964D10EE06068019007A802900822A1 -:100E4000E16800F017F9082209A8A16800F012F97A -:100E500006982BE02978052951D10A213AE0294644 -:100E6000204600F01AF946E029462046FFF76BFAC3 -:100E700041E029462046FFF756FB3CE02146203161 -:100E8000059109790120002903D0012937D11DE0FE -:100E900056E06068019007A802900822A16800F05F -:100EA000E9F8082109A800F0DDF8059869460771FE -:100EB0000520087029466846FFF7F2F91BE00BE0B1 -:100EC000C80000200C520100241B002029780529AD -:100ED00015D10B212970002011E02946204600F091 -:100EE00023F908E02946204600F04EF903E02946A0 -:100EF0002046FFF7C9F9002801D001280CD125624E -:100F0000717A736809010C315A5C521E1206120E76 -:100F10005A5401D003204AE70328FCD0737A726840 -:100F200019011D010D312C46515C7172FF270D34E2 -:100F300017550C35545D002C02D0FF2903D1737274 -:100F40000DB0F0BD21460C010D34145DFF2CF9D11C -:100F500009010D315354F3E770B5AD4C0546607A85 -:100F6000214603464A6811E0010108460C30105C36 -:100F700008E0401EC0B286008E199659AE4201D1DB -:100F8000042070BD0028F4D10D31505CFF28EBD156 -:100F90009F480021007A01E0491CC9B2884204D967 -:100FA0000E010C36965D002EF6D1884201D8052040 -:100FB00070BD08010D30135461722846FFF7AAF97D -:100FC000032806D0617A626809010D31515C6172B3 -:100FD00070BD28462830FFF7E1FE70BD10B50478DB -:100FE0000123012C14D10C78022C11D30B23137084 -:100FF00083785B075B0F537002220A708088002899 -:1010000005D0830000221146062000F0EEFD0023EB -:10101000184610BD0EB50022012105280AD0062869 -:1010200007D1684601700221017142710021FFF76A -:1010300064F80EBD68460170F6E710B58EB00C4638 -:1010400006216A461170019072480290001D0390BB -:101050006846FFF781FF102220460B9900F00AF83E -:101060000EB010BD002202E0491EC9B24254002950 -:10107000FAD1704703E0521ED2B28B5C8354002A2F -:10108000F9D1704730B505E05B1EDBB2CC5CD55CB6 -:101090006C40C454002BF7D130BD3EB5044620301F -:1010A0000D4602790121002A02D0012A3AD10FE02F -:1010B00061680191574908310291012101710520B0 -:1010C0006946087029466846FFF7EAF8014629E0B4 -:1010D0002878052826D169681022A06800F087F8D2 -:1010E0006868C07B000606D54A4AA06810231832FB -:1010F0000146FFF7C7FF1022A168E06800F077F80B -:10110000A068C07B000606D5424AE068102318326A -:101110000146FFF7B7FF07202870A0686860E06805 -:101120000021A86008463EBDF0B5044626460F469D -:1011300020363179012089B0002909D0012905D153 -:101140003978052902D10C203870002009B0F0BD93 -:10115000606803AD01900295022203A8A168FFF721 -:1011600089FF0222A81CE168FFF784FF0C21281DDB -:10117000FFF778FF01203071052069460870394675 -:101180006846FFF78DF8E1E710B5034620331C7978 -:101190000122002C04D0012C10D0022C25D11EE0FD -:1011A00001211971C16806220A7040684860194817 -:1011B000801C8860801CC86008460CE00C780C2CF1 -:1011C00013D102221A71C268052313704968516055 -:1011D000806890601046FFF79DF8024605E00878A9 -:1011E0000B2802D10D2008700022104610BD10B54A -:1011F000002409E00B78521E5B0023430370401C5F -:101200000B78491CD2B2DC09002AF3D110BD0000D2 -:10121000241B00200C52010070B50D46040012D0B2 -:10122000002D10D02101284603F093FD10225449CF -:10123000284603F031FD52480121083801804480DE -:101240004560002070BD012070BD70B54C4E00247B -:101250000546083E11E0716820014018817BAA7B99 -:10126000914209D1C17BEA7B914205D10C222946EA -:1012700003F0E5FC002806D0641C30888442EADBD9 -:101280000020C04370BD204670BD70B50D460600FD -:101290000AD0002D08D03A4C083C20886188401CB8 -:1012A000884203D9042070BD102070BD3046FFF77E -:1012B000CCFF002801DB401C0AE0208861680001A7 -:1012C00040181022314603F0E7FC2088401C2080A3 -:1012D0002870002070BD70B514460D001FD0002C82 -:1012E0001DD00021A170022802D0102817D108E0DB -:1012F000687829780002084311D00121A17010807C -:101300000BE02846FFF7A1FF002808DB401CA07077 -:10131000687B297B000208432080002070BD0120EB -:1013200070BD70B5054614460E000AD0002030701E -:10133000A878012807D004D9114908390A889042B1 -:101340000BD9012070BD002C04D02878207028888B -:10135000000A50700220087010E0002C0CD0496880 -:101360000001411810391022204603F095FC28781E -:1013700020732888000A607310203070002070BD30 -:10138000EC00002073490968016000207047714932 -:1013900008600020704701216F4A704B002803D07D -:1013A000012805D06E48704791630020187001E055 -:1013B000D1631970002070476A49012008606848AD -:1013C000801C70470422684B6649002805D05A608B -:1013D000086901221043086108E0086940084000DC -:1013E00008619A605C490020C03188600020704725 -:1013F0005C490622002808D0012809D002280DD017 -:1014000003280FD05648401C70470869904302E0FB -:1014100008699043801C0861002070470869904368 -:10142000001DF8E708691043F5E74E494A6A024390 -:101430004A62002070474B494A6A82434A62002050 -:1014400070474849496A0160002070474549CA69A8 -:101450000243CA61002070474249CA698243CA6197 -:10146000002070473F49C96901600020704730B5CE -:101470000546002072B601463A4A384C4032002DEB -:1014800011D00123012D0CD0022D02D0072062B60D -:1014900030BDA3706478002C01D09363F7E79163AB -:1014A000F5E7A170F9E7A170F9E72F4904208860FA -:1014B00029490020C03188602849012008702B4943 -:1014C0000A688023120A12021A430A602849086037 -:1014D000704722480078704770B5EFF31080C50759 -:1014E000ED0F72B61D4C6078401C0006000E607057 -:1014F00003D120A1CC2003F06CFD6078012806D137 -:10150000A078002803D01749012040318863002DBE -:1015100000D162B670BD70B5EFF31080C507ED0F56 -:1015200072B60E4C6078002803D112A1DC2003F0C3 -:1015300050FD6078401E0006000E607006D1A07855 -:10154000002803D00749002040318863002D00D1D6 -:1015500062B670BD0004004040000040FC00002066 -:1015600004200000000500400003004000E400E00B -:1015700000E100E07372635C736F635F706F7765A7 -:10158000722E63008107C90E002808DA0007000FD9 -:1015900008388008B94A80008018C06904E08008D3 -:1015A000B74A800080180068C8400006800F704766 -:1015B000B44948788978884201D3401A02E0212250 -:1015C000511A0818C0B27047AE492331487889785B -:1015D000884201D3401A02E02122511A0818C0B2F1 -:1015E0007047A849463148788978884201D3401A23 -:1015F00002E02122511A0818C0B27047A04810B565 -:101600000C300168FF22120291430122D2031143E0 -:1016100001609C490020233148708870233948704C -:101620008870463148708870974802F0FFFA9648F3 -:10163000401C02F0FBFAF2F7A9F900F015F910BD11 -:1016400020207047B4E770B50C4605460026FFF72A -:10165000AFFF8C49A04214D30A46203A002320460B -:10166000641EE4B200280BD08878105C287088785B -:101670006D1C401CC0B288702128F0D18B70EEE741 -:10168000012600F0F1F8304670BD202070479BE73E -:1016900070B50C4605460026FFF796FF79492331C1 -:1016A000A04214D30A46203A00232046641EE4B226 -:1016B00000280BD08878105C287088786D1C401C3E -:1016C000C0B288702128F0D18B70EEE7012600F0BF -:1016D000CBF8304670BD202101700020704710B556 -:1016E0000446FFF77EFF2070002010BD70B50C4649 -:1016F0000546FFF776FF63494631A04215D30A46F7 -:10170000203A00232046641EE4B200280BD08878DB -:10171000105C287088786D1C401CC0B2887021282D -:10172000F0D18B70EEE7002400E0584C00F09CF8FC -:10173000204670BD70B50C460546212904D9FF200E -:1017400053A1473003F045FC4C484068103840B284 -:10175000FFF718FFC6B20D20FFF714FFC0B2864294 -:1017600007D2FF204AA14D3003F033FC01E0F2F72D -:101770004DF921462846FFF766FF0028F7D070BDD7 -:10178000F8B5404E07462336B1787078212200F034 -:1017900060F8354623353B4C00280ED0A1786078A0 -:1017A000212200F056F8002814D0A9786878212268 -:1017B00000F04FF800281AD025E032497078C91C93 -:1017C0000F547078401CC0B2707021281BD10020CB -:1017D000707018E02B49607820390F546078401CF5 -:1017E000C0B2607021280ED1002060700BE0254946 -:1017F000687826310F546878401CC0B26870212880 -:1018000001D100206870B1787078212200F021F8B1 -:1018100000281DD0A1786078212200F01AF8002855 -:1018200016D0A9786878212200F013F800280FD08C -:10183000F2F7CEF8144802F001FA01214903884278 -:1018400003D013A1C12003F0C4FB0F4802F00EFA2D -:10185000F8BD401C884205D0904201D1002901D03A -:10186000002070470120704710B5074802F0E6F9E4 -:10187000002801D1F2F79BF810BD000000ED00E058 -:1018800000E400E0501B0020FF00002007200000C3 -:101890007372635C736F635F72616E642E630000CA -:1018A00010B5284802F0C2F9002803D026A11D2057 -:1018B00003F08FFB2348401C02F0B8F9002803D046 -:1018C00021A1212003F085FB10BDF1B5224D6F68E9 -:1018D00001261C4802F0B2F91A4C002803D1002658 -:1018E000601C02F0C3F91D4A1D490120506000BF71 -:1018F00000BF00BF00BF00BF00230B604B60009B18 -:101900006B60106000BF00BF00BF00BF00BF086871 -:10191000002802D148680028F9D048680028E4D19E -:10192000002E04D06F60601C02F088F907E0601C94 -:1019300002F084F90028D3D1024802F097F9002080 -:10194000F8BDC2E7010100207372635C736F635FCF -:101950006563622E6300000000E5004000E0004087 -:1019600000E1004030B5EFF31081CC07E40F72B610 -:101970001D4A116910230D461D431561002C00D12D -:1019800062B61A4DC406E40E0120A0402C68044241 -:101990000DD0C8060AD4EFF31080C007C00F72B68E -:1019A000116999431161002800D162B630BD20BF92 -:1019B00040BF20BFEAE70E4908784A78401CC0B211 -:1019C000904200D008707047084A094820BF40BFC5 -:1019D00020BF4178037843701368002B02D103784D -:1019E0008B42F3D00020704700ED00E000E200E001 -:1019F00003010020FEB5F64C07466068FF213E015A -:101A000081552178FF2913D0090108314158324608 -:101A1000491E083209020192090A805800F0CEF9E5 -:101A2000002802D02478254615E061682078885582 -:101A30002770FEBDE64842680198115828010090C1 -:101A40000830105800F0BAF9002806D1E0482C46BA -:101A5000416800980D5CFF2DECD1DD482101406804 -:101A600085554754FEBD70B5D94A04460020157A05 -:101A700053680AE00201561C9E5DA64203D10C3257 -:101A80009A588A4204D0401CC0B28542F2D8FF2046 -:101A900070BDF8B5CE4F3E7801F01AFE0146FF2E1C -:101AA00071D03401254678680835405900F086F930 -:101AB00002280CD97868405901F0FDFD01F008FEBC -:101AC00001467868405900F079F902285BD8C0498E -:101AD0004868025D0A70A11C425C002A0CD0521EAC -:101AE000425441590122D20589180902090A41517B -:101AF0003046FFF77FFF30E0631CC25C0092221D7E -:101B000094468258002A10D001239B029A420FD992 -:101B10009205920D43595703DB191B021B0A4351CF -:101B20006346C3589A1A920A09E0FF21C1540AE099 -:101B3000435952039A181202120A42510022425487 -:101B40003046FFF757FFA2480C344168C26800983E -:101B5000095980001258009890479D4C2078FF2822 -:101B600011D0000161680830085801F0A4FD01F0AF -:101B7000AFFD01462078626800010830105800F07F -:101B80001DF9022886D3F8BDF8B51C4615460E4649 -:101B90000746FF2B03D38FA1D42003F01AFA8C48F9 -:101BA000FF21C76045600472067401700022427014 -:101BB000104604E00201521C401CA954C0B2A042CD -:101BC000F8D3F8BD70B5824C06466578207C854216 -:101BD00003D380A1E72003F0FCF9E068A900465098 -:101BE0006078401C6070284670BDFFB581B01D460E -:101BF000FF2401F06DFD764F064679780198814209 -:101C000003D874A1F52003F0E4F971480021037AA8 -:101C1000406810E00A019446521C825CFF2A25D0DD -:101C2000019FBA4205D162460C328758029A974208 -:101C30001ED0491CC9B28B42ECD8FF2C18D0210110 -:101C40004A1C019B83540B460C33029AC250039BDF -:101C50005F4F0022012B0ED00B1DC25001239B02AF -:101C60009D4216D9AA05920D08D008E00C46E0E77F -:101C7000FF2005B0F0BD0B1DC550EFE71A4653031A -:101C80009B190E461B0208361B0AAA1A8351920A98 -:101C900009E0002D00D101256B039B191D022D0ABF -:101CA0000B460833C550891C42543D463E782046B9 -:101CB000FFF7A0FE2878B04214D000016968083010 -:101CC000085801F0F8FC01F003FD29786A68090161 -:101CD000083152580146104600F070F8022801D22F -:101CE000FFF7D7FE0198C4E770B50C46054601F032 -:101CF000EFFC064621462846FFF7B5FEFF2817D021 -:101D0000334D04012046696808300858314600F018 -:101D100055F80121090340186968A41C095D400BAE -:101D2000002901D089020818002800D1012070BDC7 -:101D3000002070BDF3B581B00F460198FFF793FE08 -:101D4000FF282AD0224E3578726829460C4604E0D6 -:101D5000844205D025462301D45CFF2CF8D11CE039 -:101D6000FF2C1AD0A5421CD10801105C3070FF284E -:101D700015D000010830105801F09DFC01F0A8FCBE -:101D800001463078726800010830105800F016F8EB -:101D9000022806D2FFF77DFE03E00020FEBD01F021 -:101DA00092FC39460198FFF79FFF22017168FF23DB -:101DB000541C0B558A5C2B01CA54FEBD401A00020C -:101DC0000121000AC905884200D90020704700009F -:101DD0009C1B00207372635C736F635F74696D6535 -:101DE000722E6300F0B500241C4A01211C4B08032D -:101DF000546018601B4B1C601B4C20601B4804691E -:101E0000E443E406E6170469761C10252C430461BC -:101E1000174C6160174D296000E020BF1F68002F3C -:101E2000FBD0002E03D107691026B74307619068E5 -:101E30008005906801D5104A10436960A1600021B7 -:101E400019600121084A09031160F0BD10B504466C -:101E5000FFF7C8FF2060002010BD000000C5004053 -:101E600080E100E000C1004080E200E000ED00E021 -:101E700000C3004000C0004000FCFFFF70B51F49D8 -:101E80000A68002A17D000231D4601244A68521C04 -:101E90004A60092A00D34D600E792246B2400E688E -:101EA00016420AD072B60B6893430B6062B649685B -:101EB0000160002070BD052070BD5B1C092BE5D3BF -:101EC0000FA1362003F085F8F5E7012010498005C1 -:101ED00008607047EFF31081CA07D20F72B6012174 -:101EE00081400648036819430160002A00D162B6A8 -:101EF000EBE70248002101604160704708010020C3 -:101F00007372635C736F635F6576742E63000000A9 -:101F100000E200E00120810708607047012081078E -:101F2000486070471048C068C00700D00120704763 -:101F30000D488068C00700D0012070470A484069FA -:101F4000C00700D0012070470748C06970470649A4 -:101F50008A69D20306D589698907890F814201D12F -:101F6000012070470020704700040040F8B5FE4C87 -:101F7000207BE17A88421AD00126FC4D0027E07AC6 -:101F8000215C14200A4642435019037C052B0FD0D4 -:101F9000062B1BD0072B28D0437C012B33D0F4A178 -:101FA000F64803F016F8207BE17A8842E7D1F8BDC5 -:101FB0000674E07A0A2807D0E07A401CE072491CD7 -:101FC000C8B2AA5802210CE00020F7E70674E07AB4 -:101FD0000A2808D0E07A401CE072491CC8B2AA580E -:101FE00003219047DFE70020F6E70674E07A0A282D -:101FF00007D0E07A401CE072491CC8B2AA580821F8 -:10200000EFE70020F7E74774E07A0A2807D0E07A84 -:10201000401CE072491CC8B2AA580721E1E7002021 -:10202000F7E770B5D64D06206872D648002444778D -:10203000047738300473C472D34801F0F7FDD348F5 -:102040000475EC72D249601E88606C71AC70EC70E3 -:102050002C716C70CF48022104704470CE4804701B -:10206000047528300470491EFAD10120F1F750FDA3 -:102070000020F1F74DFD0120A871F0F741FDC748A0 -:10208000F0F750FDC64C2070C648F0F74BFD60706D -:10209000F1F7E2FC70BD10B5F1F709FDC04C2078F6 -:1020A000F0F75EFD6078F0F75BFDB54C207A002814 -:1020B00005D0FFF730FAF0F7E2FD0020207210BDE6 -:1020C00070B5AF4CA079002804D0A9A1B64802F0A1 -:1020D00080FF70BDE07A002804D11320A4A1400144 -:1020E00002F077FF0126A6710025E572607A0421CF -:1020F000142250439D4A80180174A5488168491CE8 -:1021000004D0691E81600120F1F702FD0020F1F783 -:10211000FFFCF1F7E3FC01F023FEF1F7E8FDA34833 -:10212000056005600120A249C0030860F0F74AFF7E -:1021300098480078022804D0032804D1E0780028C9 -:1021400001D0A67000E0A570F1F7BDFD70BD03469B -:1021500086490520142242435218203A127F002A51 -:1021600004D0401E0006000EF4D1704714224243F2 -:1021700051180A46403AD362012220390A77704743 -:10218000012805D0032805D1002903D1002070477C -:102190000029FBD010B47A4C002363707D4A0028DC -:1021A00090700CD002280AD007291AD20B007B4469 -:1021B0001B79DB189F441505070D0F111300D37011 -:1021C00003E01B2000E03A20D0700120607010BCBA -:1021D00070475820F8E77720F6E79620F4E7B52017 -:1021E000F2E710BC0020704710B56A484078F1F75C -:1021F00085FD80B210BD411E1422504310B55B4ACC -:102200008418203C042902D8207F002803D158A13B -:10221000684802F0DEFE207F012803D054A1664802 -:1022200002F0D7FE0020207710BD70B5554C607FBE -:10223000217F884201D1012500E00025F1F7F7FC5C -:10224000F1F75CFD617F227F914201D1012100E025 -:102250000021A942EBD170BDF7B50646481E844661 -:102260008EB0C0B2142204905043404A85182846CC -:102270000595007C2D1D07282AD13B4C0027E07ACC -:10228000227B824221D0235C049A934201D1012710 -:1022900001E0002F04D00A2811D0421CA25C225475 -:1022A0000A280ED0401C227BC0B28242EBD1002F04 -:1022B0000BD0207B002806D0207B401E04E00022AB -:1022C000ECE70020EFE70A202073059A0120107444 -:1022D00060462B4C04280FD814204143234808188B -:1022E0002038007F002807D00598007C012807D0FF -:1022F0001098807A012807D01DA1304802F069FEAD -:102300001098807A012871D10598184B007C02281A -:102310001AD0154C207B0A2874D0207BE17A401C0F -:10232000884204D1C92012A1800002F052FE059912 -:1023300001204874217B04986054207B0A2865D0D2 -:10234000207B401C20731CE1607A049A0146904275 -:1023500006D0014614277843C018807C9042F8D1FB -:10236000627A824235D12BE0A81C0020B81C0020E4 -:102370007372635C72656D2E63000000D50500000A -:102380003C1D0020701C0020481D0020901C0020D7 -:102390001C1D002012010020C81C0020931A0100FF -:1023A000100100206D1F01007F02000000F50040B9 -:1023B00080E200E0CD020000CE0200001703000022 -:1023C000617A14225143C918897C61720121A1727A -:1023D00007E014224243D21814277943927CC9188B -:1023E0008A74142206215043C01881741098007A10 -:1023F000062819D203007B441B79DB189F4408127E -:10240000100E0C0AE07A00288CD090E7002099E7A3 -:1024100000210FE0B4210DE073210BE0322109E02F -:102420000A2107E0062105E0FF20FE49E23002F024 -:10243000D0FD0021109802910068401A2860109980 -:10244000097A002912D00221401A0102090A2960E2 -:1024500010980268406810180002000A686010981E -:10246000807A0228109803D0007B74E00421EBE707 -:10247000007A002813D0022202981018844610987F -:102480004268604608301718E748029A4078904240 -:1024900002D9E278002A04D03846083005E0042248 -:1024A000EAE7029A801AC0190830627A062A1CD01C -:1024B000627A14235A43DD4BD2185268914214D0E9 -:1024C000DB4B0793617A14225143D84A89184A6832 -:1024D0008968921B891B12020902120A090A90429A -:1024E0003AD89A4238D8994236D83018C01B0002E0 -:1024F000000A286010996044CE4AC9680002000AA8 -:102500009446421A01239B0507929A4201D2104633 -:1025100014E00A1A09929A4201D207980EE0079A2B -:102520006346624503D9591A0818401C06E0099A07 -:10253000624506D9181A4018401C404200285FDC4A -:1025400003E0B849BC4802F044FD2868C019000205 -:10255000000A6860002028726868082708300002B6 -:10256000000A68601098407AA8721098007A687221 -:1025700003280ED200280CD0FFF7D4FC002803D08B -:1025800007E0002011B0F0BD02983A210F1A322066 -:102590000290A5480178012901D0032909D1417889 -:1025A0000298814205D9E078002802D10298081AE1 -:1025B000C71928689E4A801B844601026868090A78 -:1025C000801B03021B0A8F421AD81746914217D864 -:1025D000BB4215D8617A062916D0677A6146062271 -:1025E000039200923A4614235A43904BD2189368B0 -:1025F0009B1B8B4216D80397977C062FF2D177E06E -:10260000049801F059F9BCE7059802220499027474 -:10261000627A062A00D0627A827461720120A07206 -:1026200011B0F0BD062F63D0002239469446142223 -:102630007E4B4A43D21853689B1B834229D2917B1D -:10264000AB7A99421FD805980521049C7B4D0174F3 -:10265000287B0A2811D0287BE97A401C884203D1C4 -:102660007049774802F0B5FC287B2C54287B0A2857 -:1026700007D0287B401C287383E7E87A0028EFD036 -:10268000F2E70020F7E701218C46917C0629CED1A4 -:1026900002E0604600282AD03D46009114202A46D8 -:1026A000424362480621161831741038007B0A280C -:1026B000624816D0017BC07A491C814203D161A1D6 -:1026C000634802F086FC5D48017B4554017B0A2982 -:1026D0000BD0017B491C0173B57C0098A842DDD169 -:1026E00006E0C07A0028EAD0EDE70021F3E7009782 -:1026F0000599022008744D4D607AB84207D10599BA -:1027000000988874049860720120A07221E00398F8 -:10271000062F0FD0062803D14AA14E4802F059FCDB -:102720000398142250434019049981740599009824 -:1027300088740EE0062803D142A1474802F049FC04 -:102740000398142250434019049981740599062076 -:102750008874012011B0F0BD70B50D4606463F49A2 -:1027600000242046891BA04103D236A13C4802F038 -:1027700030FC3C490020491BA04103D231A13A481A -:1027800002F027FC394A70190021821A8C4101D3CA -:102790003749401870BDF8B5401EC0B214214843F7 -:1027A00022494518687B062813D203007B441B7915 -:1027B000DB189F44020C0A080604002066E0B420DF -:1027C00010E073200EE032200CE00A200AE0062020 -:1027D00008E0FF201BA1E23002F0FBFB697B002038 -:1027E000002953D0022140186968002440180C21A8 -:1027F00000026956000A00294ADBF1F77FFA174AFE -:1028000006460C27EF570021101AA14103D20DA153 -:10281000134802F0DEFB13490020C91BA0412CD253 -:1028200008A127E07023010012010020B81C00203D -:10283000FFFF3F00FFFFFF0014070000A81C00205F -:10284000090200007372635C72656D2E6300000004 -:10285000C7030000DF030000E5030000FF7F841EC4 -:10286000F50300000020A107F60300000080841E8D -:1028700000807BE1FB4802F0ACFBFB4AF019002131 -:10288000821A8C4101D3F9494018F8BD0421AAE706 -:10289000F1F734FA0C21695600224018F449091A5C -:1028A000A241F2D24042F8BDF0B5064683B0F148ED -:1028B0000190457A029534687068001B0702EE4863 -:1028C0003F0A001B0090062D2DD0142029464143BD -:1028D000EA480122081884464168E748920586467E -:1028E000081B904210D3631A93420DD302467046E0 -:1028F000724503D900984018401C05E073450ED975 -:10290000411A0819401C404200280CDA6046029522 -:10291000857C0198C0790028D5D003B0F0BDD84996 -:10292000D84802F056FB0298854226D0142148432D -:10293000D2490123401802908068CF499B058C46FC -:10294000011B8646994210D3221A9A420DD3634640 -:10295000614503D900997144491C06E01946624556 -:102960002DD9091A0819401C4142002905DD029899 -:10297000B17A807B814200D37446062D15D0BF49C1 -:102980001420454368184268121B1202120ABA4208 -:102990000BD2B27A837B9A4200D38468857C0198FB -:1029A000C0790028B9D1062DEAD13068A042B4D050 -:1029B000E0190002000A3460706003B0F0BDB04955 -:1029C000B04802F006FBD8E7F0B5AF4904464868C6 -:1029D00085B0C005C00D1CD0103840B200280CDAFC -:1029E0000207120F083A920892005118C96980072D -:1029F000C00EC1400806800F09E08108A34A890083 -:102A0000891809688007C00EC1400806800F002899 -:102A100008D000262078002806D0012804D0002005 -:102A200005B0F0BD0126F5E72079062813D2030092 -:102A30007B441B79DB189F44020C0A080604002023 -:102A400018E0B42010E073200EE032200CE00A20E1 -:102A50000AE0062008E0FF208949E23002F0B9FAD6 -:102A600021790020002905D002214718814D002E30 -:102A700002D003E00421F8E70020E87102AA6946C9 -:102A8000A068F1F745F9694608228A56E06801A96D -:102A90008018C01C01221F2801DA019209E003AA54 -:102AA000F1F736F96846007B002802D00198401CF7 -:102AB000019000990198401808300002000A019026 -:102AC000C81B0002000A009060796946887200986D -:102AD0000390F1F7ACF8009A019B121A181A6C498E -:102AE00012020002120A000A8A4216D8884214D83A -:102AF0006846FFF7D9FE00990398814205D0C819AE -:102B00000002000AF1F7FAF8A0600120E979002933 -:102B100086D0002EB0D005B0F0BD0020F6E7F3B5AA -:102B20008FB05C480C460B9001F088F85A4A0F9918 -:102B3000504E5518203D594F00280BD05848007D65 -:102B4000002803D057A15A4802F043FA2078012800 -:102B50007DD05FE1787F0A280CD0787F397F401CD8 -:102B6000884203D14FA1534802F033FA207801285C -:102B700004D00CE0387F0028F4D0F7E7E87F002885 -:102B800003D048A14C4802F024FA0120E877787F6E -:102B90000F991422494D504340190174207802289E -:102BA00023D0787F14214843451920792872607911 -:102BB00068722A460C322946A068F1F7A9F80C2061 -:102BC00028560F2804DD1F3828732868401C286009 -:102BD0000C22AA56281DE16802908818C01C1F28E4 -:102BE0003FDA029901200860FDE027494868C005E6 -:102BF000C00D20D0103840B200280CDA0207120FA6 -:102C0000083A920892005118C9698007C00EC14065 -:102C10000806800F09E081081C4A890089180968A4 -:102C20008007C00EC1400806800F002803D11DA1F7 -:102C3000234802F0CEF9787F14214843451900213A -:102C4000E0686A460591117303AA05A900E0D8E07F -:102C5000F1F75EF86A460C2010560F2832DD01208D -:102C600031E0B3E0F60300000080841E00807BE1C9 -:102C7000FF7F841E3C1D0020FFFFFF00B81C0020CA -:102C8000442801001407000000ED00E000E400E02B -:102C9000FFFF3F00481D002016010020701C00208F -:102CA000901C00207372635C72656D2E63000000DF -:102CB00017050000F5040000FA040000B01B002016 -:102CC0000605000000200599401808900220A8720F -:102CD0002079287260796872A068291DC01C039150 -:102CE0001F2801DA01200AE006AAF1F711F8684668 -:102CF000007E002804D0039803990068401C0860F7 -:102D0000287A062813D203007B441B79DB189F44E2 -:102D1000020C0A08060400200FE0B4200DE0732026 -:102D20000BE0322009E00A2007E0062005E0FF2042 -:102D3000FD49E23002F04DF900202179002943D00D -:102D400002214118069168680831401808990590D9 -:102D500008180699401A0C900020F071F0F767FFF0 -:102D600004462860089820180002000AE860707A7B -:102D7000062825D0707A14214843EC494018406851 -:102D80000090059940180002000A0190687A69468F -:102D900088726846FFF788FD0098019A001B121B95 -:102DA00000021202E24B000A120A0C99984207D85C -:102DB0008A4205D80099069808180002000A28607F -:102DC000F0790028C8D110E00421BAE704AA0299DA -:102DD000F0F79EFF6846007C002804D00298029914 -:102DE0000068401C08602078A872787F0A2806D006 -:102DF000787F401C78770B9800F038FF47E0002080 -:102E0000F8E7E87F002803D0CAA1CD4802F0E1F836 -:102E10000120E877CB490F9808742078022803D165 -:102E2000C4A1C94802F0D5F8C64D2079287260794E -:102E300068722A460C322946A068F0F769FF0C2018 -:102E400028560F2804DD1F3828732868401C286086 -:102E50000C22AA56281DE16802908818C01C1F2861 -:102E600003DA0299012008600CE003AA0299F0F746 -:102E70004FFF6846007B002804D002980299006842 -:102E8000401C08602078A872AE4901200875797F3F -:102E9000387F814223D0747A062C22D0F0F7C7FE07 -:102EA00014214C43A1496218117C042917D003292D -:102EB00015D0536892681B1A101A1B0200029C4915 -:102EC0001B0A000A082B0AD30A468B4207D89042F5 -:102ED00005D8787F397F884201D0F0F7F4FE11B031 -:102EE000F0BD787F397F8842F7D111B0F0BD10B5C1 -:102EF0000020F0F7FAFD10BD10B50120F0F7F5FD48 -:102F000010BDF1B5009802281FD0904C607A0628B9 -:102F100003D188A18E4802F05CF80026A671012535 -:102F2000E572607A03211422804F5043C019017466 -:102F3000F0F7CEFE009800280CD001282AD00328F4 -:102F40007CD0B5207BA1C00044E082480078EFF738 -:102F50000DFEF8BD8048007F002803D075A17F4892 -:102F600002F037F865717C4D00202E60F0F7D0FD3F -:102F7000A968481C04D0012300221846F0F7FEFD82 -:102F8000607A617A401CC0B2142251437A58012100 -:102F90009047F8BD0120F0F7BBFD607900280DD007 -:102FA0006D488068401C09D0607A617A401CC0B2CC -:102FB000142251437A5806219047F8BD6648007F95 -:102FC00001280AD0022812D0032824D0042836D0A1 -:102FD00058A1634801F0FDFFF8BD2079002803D017 -:102FE0002671F0F77AFEE5705B480677F8BD207A27 -:102FF000002804D1FEF770FAEFF718FE2572607A08 -:10300000617A401CC0B2142251437A580021904783 -:1030100051480677F8BD504F0123397B786800226C -:10302000411A1846F0F7AAFD2079002803D026712E -:10303000F0F753FEE57002203877F8BD1BE0464EEE -:10304000217870680123411A00221846F0F796FD96 -:10305000207A002804D1FEF73FFAEFF7E7FD25724A -:10306000607A617A401CC0B2142251437A58002120 -:1030700090473577F8BD607A617A401CC0B214225F -:1030800051437A5805219047F8BD10B52F4C607A0E -:10309000062803D127A1334801F09BFF607A617AAB -:1030A000401CC0B214225143204A52580421904778 -:1030B00010BDF0B583B006200290F0F7B8FD234CA8 -:1030C0000090617A28480190062920D0617A142066 -:1030D000414316480918097C042918D0617A142242 -:1030E00051430818007C03287BD00198009A03689C -:1030F00040689B1A801A1B0200020D491B0A000A35 -:10310000082B6ED30A468B426BD8904269D812487E -:103110008068401C03D007A1144801F05AFF00202A -:103120006071607A062823E0A42C0100B81C0020FE -:10313000FFFF3F007372635C72656D2E63000000D9 -:103140001E050000901C0020240500003C1D0020EE -:1031500055050000100100201C1D00206105000025 -:103160009C050000AF0500002C1D0020EB050000B1 -:1031700007D16078002804D0FE48C178417081787A -:103180000170607A062815D0607A1421FA4A484303 -:103190008018007C04280DD1607A0290617A0120A9 -:1031A0001423594389180874617A59438918897C12 -:1031B0006172A072F14D687F297FF14F884233D050 -:1031C000F04E287F142148438019007CC05D0128FF -:1031D000287F07D048438019007CC05D02282FD08B -:1031E00044E001E2142148438019807A01280AD082 -:1031F000287F0221142250438019007CC155287F6A -:103200000A2808D009E0297F002014225143891997 -:10321000097CC8552AE0002001E0287F401C28775F -:10322000687F297F8842CCD1D74D287D00284CD09B -:10323000287CC15D012928D0C05D022830D03AE049 -:10324000287F142148438019807A012803D0CFA118 -:10325000D14801F0BEFE297F002014225143891974 -:103260008872297F51438919097CC855287F142108 -:1032700048438219287F48438019017C0098FEF753 -:10328000EBFF287F0A28C8D1C5E7A97A012904D015 -:103290000221C155002028750DE00021C1550AE02A -:1032A000A87A012803D0B9A1BC4801F092FE002001 -:1032B000A872297CC855287D002806D0297CB24AEE -:1032C0000098FEF7C9FF00202875029806281ED036 -:1032D00014214843A8494018017C012917D107212E -:1032E000AF4D0174287B0A283CD0287BE97A401C2A -:1032F000884203D1A5A1AB4801F06BFE297B02985F -:103300006854287B0A2831D0287B401C2873607AB7 -:1033100006287DD0A07A00287BD00020A072617A98 -:10332000142041439448A04B0A18566891681D46E2 -:10333000D2687C35DE67AA6069609C4D697E002991 -:1033400016D00226617A14228B4851430818407B1C -:1033500006281BD203007B441B79DB189F440A1408 -:1033600012100E0CE87A0028C4D0C7E70020CDE781 -:103370000426E7E700200FE0B4200DE073200BE007 -:10338000322009E00A2007E0062005E0FF207FA1A7 -:10339000E23001F01EFE00202873697E022901D070 -:1033A000012910D12969009A09188A1A1202120AF1 -:1033B0003A2A08D90320687632390802000A2861BF -:1033C000322028730AE0322808D2207A00280ED151 -:1033D000FEF782F8EFF72AFC012007E0207A0028A8 -:1033E00005D0FEF798F8EFF74AFC002020726149FB -:1033F0000822487820700978012901D0032906D1D4 -:1034000001212171297B884201D9421A083201E049 -:1034100091E0A1E0A378002B00D0921C2179002933 -:1034200001D1002B5DD09446614A00990092019A27 -:10343000176852687F1A511A3F0209023F0A090AA7 -:10344000BC451BD85A4A974218D8009A914215D8C1 -:10345000297B884223D92B69421A9A1A1202120A2E -:10346000101880190002000A2A616860002914D02F -:10347000032028770006000E3ED14CE0002020718A -:10348000A070297B002925D02869401880190002E6 -:10349000000A6860022028772EE00120E9E78142D7 -:1034A0000BD92A69511889190902090A696000288B -:1034B00001D00420DDE70220DBE7002B03D133A19C -:1034C0003C4801F086FD286980190002000A686006 -:1034D000002004E0296989190902090A696028772E -:1034E00019E0287B00280FD02969081880190002EC -:1034F000000A6860022028772869012381190022C8 -:103500001846F0F73BFB09E0286980190002000A21 -:103510006860002028770120F0F7FAFA607A142119 -:10352000484315490C22401882560123002069683F -:10353000F0F724FB10E00120F0F7EAFA0020F0F7A2 -:10354000E7FAF0F7CBFA207A002805D0FDF7E3FF81 -:10355000EFF795FB00202072A078002804D0F0F748 -:10356000BCFB0020E070A0706078002827D00148E4 -:10357000C17821E012010020B81C0020701C00203E -:1035800015010020B01B0020901C00207372635CAA -:1035900072656D2E630000000D0600002906000014 -:1035A000A81C00203B060000B01C00201C1D0020B1 -:1035B000FFFF3F008D060000417081780170207987 -:1035C000002806D00020CE49E0700978002900D1FB -:1035D0002071CC48017BC07A814203D0CA48407830 -:1035E000EFF7C4FA0120E07103B0F0BDF0B5C74CAD -:1035F0000746607A83B0062804D16F20C4A1000179 -:1036000001F0E7FC607A1421C44E48438019007C25 -:10361000032803D0BEA1C24801F0DBFCC14DA8685D -:10362000401C03D0BAA1C04801F0D3FC607A142139 -:10363000484381190C20085600216A4600911171F7 -:10364000C01901AA6946F0F763FB6A4604201056C8 -:103650000F2801DD012000E0002000994018696872 -:1036600040180102090AA9606079002804D00123EA -:1036700000221846F0F782FA03B0F0BD70B5AC4CEA -:10368000AA4A0B1AA34214D3451AA54211D3934256 -:1036900003D9101A43185B1C0BE0954204D9511A48 -:1036A0000818401C434204E099A1A24801F091FC93 -:1036B0000023184670BD10B50146012300220220E8 -:1036C000F0F75CFA10BD10B50220F0F721FA10BD3A -:1036D00010B5F0F7ACFA10BDF0B58C4D0446E87AA1 -:1036E00083B0002803D18AA1934801F072FC642CB6 -:1036F0004DD3924A00210846121B884147D3904877 -:10370000417F007F814242D18E48007D00283ED11A -:10371000687A1421814F4843824EC519306801AA46 -:1037200000196946F0F7F4FA6946042008560028A3 -:1037300002DD0098401C0090A96800986B680A1888 -:10374000D21A1202804B120A9A4220D8AA7C062A68 -:1037500008D014235A43D2195268511A0902090A8F -:10376000814214D3B068401C05D00120F0F7D0F995 -:103770000020C043B060306800193060A86800992C -:1037800040180002000A7061012003B0F0BD002063 -:1037900003B0F0BDF8B50646401EC4B214205F4920 -:1037A00060434518287C002804D1772058A10001E7 -:1037B00001F00FFC6248017F407F81420CD0634AD8 -:1037C00014234B439B181B7CB3420CD00A290CD00A -:1037D000491CC9B28142F3D15A48017D002961D008 -:1037E000007CB0425ED10020F8BD0021F1E7052940 -:1037F00003D0062901D0072928D101212974C17AD3 -:103800000023027B8A4221D00246565CA64201D1A7 -:10381000012301E0002B04D00A2911D04E1C965D33 -:1038200056540A290ED0491C167BC9B28E42ECD1DF -:10383000002B0BD0117B002906D0117B491E04E020 -:103840000026ECE70021EFE70A211173697C0029CB -:103850002AD06F74C17A0023027B8A4224D0425C52 -:10386000A24201D1012301E0002B04D00A2912D089 -:103870004A1C825C42540A290FD0491C027BC9B2FF -:103880008A42ECD1002B0FD0027B0146002A06D0E1 -:103890000A7B521E04E00022EBE70021EEE70A2239 -:1038A0000A7301E017480027297C01299FD16A7C0F -:1038B000002A9CD10120F8BD70B505461420174A96 -:1038C0000521684380180F4C0174207B0A2811D011 -:1038D000207BE17A401C884203D10DA11C4801F0F5 -:1038E00078FB207B2554207B0A2807D0207B401CB6 -:1038F000207370BDE07A0028EFD0F2E70020F7E7F0 -:1039000012010020A81C0020100100203C1D0020F6 -:103910007372635C72656D2E63000000B81C00203A -:10392000F10600001C1D0020F2060000FF7F841E2F -:103930000020A1071407000033070000FF1FA107A4 -:10394000701C0020901C0020FFFF3F00B01B0020D7 -:103950000902000010B501462022094801F09CF937 -:1039600007490020C877084610BD06490120486174 -:103970000548064A0168914201D100210160704763 -:103980004C1D0020000500401C010020BEBAFECAEC -:10399000064A10705170704704481C22017841712A -:1039A00042700170704770477047704720010020D7 -:1039B00030B50346002002460DE09C5C2546303DB4 -:1039C0000A2D02D30020C04330BD0A256843303899 -:1039D0002018521CD2B28A42EFD330BD70B50D46CA -:1039E000144608E00A2101F0D1F92A193031203AB1 -:1039F000641ED177E4B2002CF4D170BD10B5002361 -:103A000010E0040A00020443A0B2CC5C444020064B -:103A1000000F60400407240C44402006C00C6040A6 -:103A20005B1C9BB29342ECD310BD10B520380C4602 -:103A3000030001F0BFFB33E0DBE41B1F23272C3125 -:103A4000373C41474D5054585C606D7165697478DE -:103A50007C8084888C9094989C9FA2A6AAAEB2B8D1 -:103A6000BCC0C5CACFE9F0F3D3D7F800206800F096 -:103A7000DDF8D6E0206800F0E1F8D2E0206800F040 -:103A8000F5F8CEE0207840B200F092FAC9E0207854 -:103A900040B200F0B0FAC4E02078616840B200F0B3 -:103AA000C3FABEE0207840B200F0D3FAB9E0207843 -:103AB00040B200F0DEFAB4E02078217940B200F0A4 -:103AC000E9FAAEE02078616840B200F013FBA8E0AC -:103AD00000F01FFBA5E0206800F023FBA1E02078A8 -:103AE00000F038FB9DE02068FDF7F5FD99E02068C7 -:103AF000FDF7F5FD95E021792068FDF7F7FD90E0F1 -:103B00002068FDF73FFC8CE02068FDF740FC88E072 -:103B10002078FDF740FC84E0FDF74EFC81E0207842 -:103B2000FDF750FC7DE02078FDF762FC79E020682D -:103B3000FDF77BFC75E02068FDF77DFC71E02068F7 -:103B4000FDF77FFC6DE02068FDF780FC69E02068F0 -:103B5000FDF782FC65E02068FDF784FC61E02068E9 -:103B6000FDF785FC5DE00846EDF7F0FA59E0EFF768 -:103B700070F856E0EFF79DF853E02068EFF7A5F8EE -:103B80004FE0206800F080F84BE0206800F082F8F9 -:103B900047E0206800F083F843E02078A26861687D -:103BA00000F082F83DE0207800F089F839E02078D4 -:103BB00000F091F835E02078616800F098F830E086 -:103BC0002078616800F09FF82BE02179207800F0E0 -:103BD000D5FB26E02068FDF778FE22E02068FEF79E -:103BE0004DF91EE02068FEF731F91AE0204607C8BB -:103BF00000F0B9FC15E0206800F00CFD11E06168F0 -:103C0000206800F037FD0CE0206800F029FF08E094 -:103C100009E003E0FFE700F03BFF02E0206800F06E -:103C200073FF206010BD0120086010BD00210170ED -:103C3000084670470146002008707047EFF3108176 -:103C4000C907C90F72B60278012A01D0012200E02B -:103C5000002201230370002900D162B6002A01D09E -:103C600000207047012040037047E7E7EFF3108121 -:103C7000C907C90F72B600220270002900D162B6CE -:103C800000207047F2E7000038490968C9B20160B6 -:103C9000002070473549C0B2486000207047334962 -:103CA000C0B2886000207047082801D330487047B0 -:103CB000C3002E4818180161426100207047022895 -:103CC00002D32B48401C70472A4A0121C0008018AB -:103CD000016000207047022802D32548401C70472D -:103CE000244A0121C000801841600020704702284A -:103CF00002D31F48401C70471F4A8000C9B2801879 -:103D0000016000207047022802D31948401C704708 -:103D1000194A800080180068C0B20860002070470F -:103D200010B5FF20114AC043906008200021C30055 -:103D30009B1819615961401C1028F8D300200E4AC5 -:103D400005E0022803D383009B18196004E0830078 -:103D50009B181C68E4B21C60401C0428F1D310BD01 -:103D6000FF200249C04388607047000000F5014011 -:103D70000820000000F0014000F8014010B572B6C4 -:103D800000F0DEF800280BD0EDF78AFAFEF783F991 -:103D900000F0BBFA6F490020C86288626E49086073 -:103DA00062B6002010BDF3B5002501200007C06AEF -:103DB00081B0C0430006000E04D168480068401C72 -:103DC00000D1012572B600F0BBF8002801D062B620 -:103DD00087E0EDF7D1F9EDF767FA614C614A002110 -:103DE0002368CB40DB071FD00346CB40DB0718D14D -:103DF0004BB2002B07DA1E07360F083EB608B60096 -:103E0000B618F66904E09E08574FB600F6193668F2 -:103E10009B07DB0EDE4033069B0F012B04D0032BE8 -:103E200002D062B65148FEBD491C2029D8D3019C5E -:103E300001204F49230001F0BDF914222424242439 -:103E4000242424240B0D1012142016181A1C1E2FC3 -:103E5000002400E00124C86314E00224FBE70324EB -:103E6000F9E70424F7E70824F5E70924F3E70A242F -:103E7000F1E70B24EFE70C24EDE70524EBE707243B -:103E800000E00624D06901210002000AC9070843A6 -:103E9000D061002D04D009E062B601200003FEBD10 -:103EA0002C4D3448E862EDF7FFF9A8622A49324800 -:103EB0000860324902980860EDF7F6F9214600F0F3 -:103EC0000BFAFEF7AEF800F00DFC00F087FA01984F -:103ED000EDF7B4F9040062B603D0FFF74FFF2046B8 -:103EE000FEBD0020FEBD10B5044600F029F80028F4 -:103EF00000D001202070002010BD21490860002062 -:103F0000704710B50C46102808D011280BD0122885 -:103F10000CD013280ED00120086010BD6168206805 -:103F2000FFF741FF0AE0FFF729FF07E02068FFF7EE -:103F3000DAFF03E01249206808600020206010BD0D -:103F400005480D490068884201D1012070470020D2 -:103F500070470000000500401C0100200010001008 -:103F600000E100E000ED00E000E400E001100000EE -:103F70004000004000200000BEBAFECA2801002018 -:103F8000040000208107C90E002808DA0007000F8E -:103F900008388008814A80008018C06904E08008E1 -:103FA0007F4A800080180068C8400006800F704774 -:103FB00010B5044600F0DBF8002813D02046FFF7C8 -:103FC000E1FFC0B200F0E1F800280DD07549E2062B -:103FD0000B78D20E01209040002B08D04A68104385 -:103FE000486006E0704810BD6F48401C10BD6F4926 -:103FF0000860002010BD10B5044600F0B8F8002895 -:104000000BD06849E2060B78D20E01209040002BBD -:1040100005D04A6882434A6004E0634810BD6349A2 -:1040200080310860002010BD70B50D46044600F0D8 -:104030009EF800280BD05E480068E206D20E0121EF -:104040009140084000D001202860002070BD5648F3 -:1040500070BD10B5044600F08AF8002807D0E106CC -:10406000C90E0120884052490860002010BD4E480A -:1040700010BD10B5044600F07AF8002808D0E1061B -:10408000C90E012088404A4980310860002010BDD7 -:10409000454810BD70B50D46044600F068F800288C -:1040A00019D0284600F071F8002816D0A007C20EDB -:1040B000FF209040A907090E9140002C10DA22073A -:1040C000120F083A9308354A9B009B18DA6982431D -:1040D0000A43DA610CE0344870BD3348401C70BDBF -:1040E000A3082F4A9B009B181A6882430A431A6050 -:1040F000002070BD70B50C46054600F038F8002869 -:1041000005D02846FFF73EFF2070002070BD2648EE -:1041100070BDBFF34F8F21492648C860BFF34F8F52 -:10412000FEE770B51F4C05462178012000290ED10D -:10413000207072B600F0F8F81C4E8036316881436A -:10414000616000F0F1F8C043306062B60020287072 -:10415000002070BD13490A78002A06D0002804D137 -:10416000124A48681060002008700020704710B59F -:104170000446202805DA00F0D7F80121A1400842C2 -:1041800001D0002010BD012010BD012803D003285C -:1041900001D00020704701207047000000ED00E0D2 -:1041A00000E400E02C0100200120000000E100E01C -:1041B00000E200E00400FA05F8B504468007002597 -:1041C0000126002804DA5A48C563C66302208443E6 -:1041D000E00404D55748C563C66380148443600077 -:1041E00003D55548456080058443E00504D5534810 -:1041F000C563C66380158443A00404D55048C563D5 -:10420000C6634014844360042704C00FF90F88423A -:1042100003D04CA1612000F0DCFEB80F0AD04E495B -:10422000CD634E48C563C563CE63C663C6630320D2 -:104230008003844320050AD5494FFD632F20ECF706 -:10424000B3FFFE632F20ECF7AFFFF8148443002C7C -:1042500003DAFFF765FD640064084248044203D0B6 -:1042600038A1902000F0B5FEF8BDF0B500210A4657 -:10427000FF230446CC40E4072AD04CB2E606F60EF3 -:104280000125B540384E3560384E3560002C11DAC6 -:1042900025072D0F083DAE08354DB6007619F56996 -:1042A000A407E70E1C46BC40A5431446BC4025436A -:1042B000F5610DE0A6082F4DB60076193568A40704 -:1042C000E70E1C46BC40A5431446BC402543356060 -:1042D000491C2029CDD3F0BD70B5274C0D46206078 -:1042E000FFF76AFF2068FFF7C0FF2846EEF77AFD68 -:1042F000FDF7D6FAFDF782F9FFF712FDFDF7D5F8C5 -:10430000EEF7FEFB00F06AF870BD10B51A4C20689D -:10431000FFF752FF2068FFF7A8FFFFF701FDEEF758 -:10432000E6FD0020206010BD1348006870470000C3 -:10433000C01F0040C0CF004000E50140C08F0040DA -:10434000C0DF00407372635C736F635F636F6E66A0 -:1043500069672E6300000000C0EF0040C0FF00400E -:10436000C0BF0040FEFF0FFC80E100E080E200E003 -:1043700000ED00E000E400E03401002070B500240E -:1043800002460D4620462146002A1ED0012A04D0AE -:10439000022A04D0032A1ED103E0012002E00220F9 -:1043A00013E003202B0000F005FF07160507090B9B -:1043B0000D0F1600012108E0022106E0032104E0B0 -:1043C000042102E0052100E00621FDF7D9FE0028C6 -:1043D00001D0204670BD0724FBE70000B148002152 -:1043E00001708170704770B5AF4D01236B60AF4BAA -:1043F0001C68002CFCD0002407E00E6806601E68D4 -:10440000002EFCD0001D091D641C9442F5D3002031 -:10441000686018680028FCD070BD70B5A14C0D46CE -:104420006178884203D0A2A16C2000F0D2FD2B005D -:1044300000F0C0FE094F0625254F4F4F4F464F0055 -:104440002078022803D09AA1702000F0C2FD03203A -:104450002070A078022802D0012804D008E0A068CB -:1044600000F0CEFB04E02269E168A068FFF7BBFF23 -:104470000020A070FDF724FE0420207070BDFDF721 -:10448000D4FE01466068FFF7F9F805462078022857 -:1044900003D087A1842000F09CFD894A89498A487D -:1044A000954206D8401BC86086496078FEF737FB06 -:1044B00070BD854202D802224A71F3E7032003E06F -:1044C000A0780028FAD10220FDF704FD00F0E0F802 -:1044D00070BD77A1AD2000F07CFD70BD70B50546C4 -:1044E000FDF7A3FE6F4C60602078012803D070A117 -:1044F000B42000F06EFD73490220087000220A719A -:104500008D6003224A71704ACA6020706078FEF79D -:1045100006FB70BD10B5634CA078002802D120784E -:10452000002801D0112010BD6848FDF710FE607012 -:104530006078002803D001202070002010BD0320E7 -:1045400010BD10B50124020B64040121604BA04290 -:1045500002D29140186802E0203A58689140084021 -:1045600000D0012010BDF8B50E46910005464F1948 -:1045700014463F1F009100F054FB009980028919F6 -:10458000091FB14201D2012200E00022002C03D019 -:10459000FF2101318C4201D90920F8BD4D498D42DE -:1045A00019D3AF4217D3854205D2874203D228469A -:1045B0003043800701D01020F8BD8E420BD3002A73 -:1045C00009D12846FFF7BDFF002804D13846FFF780 -:1045D000B8FF002801D00F20F8BD3F483F490068D0 -:1045E000884205D0224631462846FFF7FCFE0FE000 -:1045F000FFF790FF0028EFD12A480121C6608560AF -:10460000046181702046312148431430FFF766FF72 -:104610000020F8BD10B504462E48800A84420BD312 -:1046200000F0FFFAA04201D8102010BDA0020446FD -:10463000FFF787FF002801D00F2010BD264827492B -:104640000068884203D0204600F0DAFA0AE0FFF75B -:1046500061FF0028F1D11348022184608170204855 -:10466000FFF73CFF002010BD1A48010B01208840D5 -:10467000401E704700B50B460246FFF7F5FF10429B -:1046800001D00F2000BD124802604360002000BD31 -:1046900010B5044C6078FDF7AEFD00202070A070CE -:1046A00010BD00003801002000E5014000E4014099 -:1046B0007372635C736F635F666C6173682E630013 -:1046C000307500006C1D0020D0FB01001B44010070 -:1046D00000060040006001001C010020BEBAFECAB6 -:1046E00010540000F74805218170002101704170CD -:1046F000C1708160704710B5F3490A78022A07D06B -:10470000CA681018C860C8689638FEF76FFF10BDF9 -:104710008A68101888608868F6E70378EB49EC4AE5 -:10472000002B02D0012B10D014E00379002B01D014 -:10473000012B0FD14379002B01D0012B0AD18368C3 -:10474000643B8B4206D2C06810E00379002B03D093 -:10475000012B01D0002070474379002B01D0012BA1 -:10476000F8D1C368643B8B42F4D280689042F1D8A0 -:1047700001207047F8B504460226FEF7BDFB00682D -:10478000002803D0D3A1BE2000F023FC0127CD4D8B -:10479000002C08D02078002817D0012805D0022846 -:1047A00011D0032813D02F710DE06068C82808D3FA -:1047B000FEF792FF002804D06068FFF79CFF0126F7 -:1047C00003E0002601E000F0F9F93046F8BD287852 -:1047D0000028F8D16068FFF7A0FF0028E3D06068E8 -:1047E0000078002826D0A878042803D0B9A1F820A2 -:1047F00000F0EFFBB44F00203870606800790128AA -:1048000000D00020387160684079002837D003203C -:10481000787160688168E868FDF79EFFB86060683D -:10482000C0689630F8600320A870A749E878FEF7C2 -:1048300076F9C8E7A4480221017061680979012965 -:1048400019D00021017161684979002915D003212F -:10485000417161688968963181606168C968C16029 -:10486000C068984C14346060FDF7DFFC20606F7006 -:104870000220A870A7E70321E4E70221E8E702206D -:10488000C6E7F8B58F4C0D46E178884204D0FF208A -:1048900090A11A3000F09DFB28468A4F0025012682 -:1048A0001437030000F086FC090612375A7C8D97F6 -:1048B000C4A0C400A078032807D0A078022804D0A0 -:1048C000FF2084A11E3000F084FBF8BDA0780328EF -:1048D00007D0A078022804D0FF207EA1223000F06B -:1048E00078FB0420A07025712078002810D1FFF7F4 -:1048F00002FFE078FDF74FFFE0607D49886A7D4A5E -:10490000024022617B4AD24310408862002050E07E -:1049100000F054F9F8BDA078032807D0A078022849 -:1049200004D0FF206BA1453000F053FB2078002815 -:1049300002D000F04FF9F8BDA07803281FD1042061 -:104940002AE0091A6048C1600146E078FEF7E7F8FE -:10495000F8BD0420FDF7BEFAA570F8BDA0780328C5 -:1049600007D0A078022804D0FF205AA1663000F0BA -:1049700030FB20780028DCD1A07803280BD0FDF78D -:1049800054FC01463868FEF779FE0028E1DB7968BF -:104990008142DEDBD5E70520FDF79CFAA670F8BD65 -:1049A000A078042804D0FF204AA1873000F011FB32 -:1049B0000220A1688847FFF7DDFEFF260546C036C6 -:1049C00042E0A078042804D0FF2042A18C3000F0FF -:1049D00000FB0120EDE7A078042899D0FF203DA13D -:1049E000913000F0F6FA93E7A07804280AD06078B6 -:1049F000002802D0A078022804D0FF2035A19630EC -:104A000000F0E7FA2078002893D12079002804D01C -:104A10000620FDF75FFA2571C0E76078002805D011 -:104A20002949E078FEF77BF86570F8BD0720B3E709 -:104A3000FF2028A1B13046E7002D0AD0012D06D075 -:104A400024A1304600F0C5FA022DF5D1F8BD0420AE -:104A500000E00320A1688847FFF78CFE0546F3E7D6 -:104A600070B5050005D0174CA078052803D011209B -:104A700070BD102070BD2048FDF769FBE070E07844 -:104A8000002803D0A5600020A07070BD032070BD79 -:104A900010B50C480178002901D0112010BD817893 -:104AA00005292BD0817801292AD08178002927D0A7 -:104AB000012101708178012922D0807800281FD03F -:104AC00020E000004C0100207C1D00203D860100FC -:104AD000FF1FA1077372635C736F635F7261646928 -:104AE0006F5F74696D65736C6F742E6300000000F6 -:104AF0000005004002810080834801000F2010BDA6 -:104B000000F068F8002010BDF8B5394E0446B078C2 -:104B1000002801D001280DD1002C0DD02046FFF730 -:104B2000FCFD00280AD02078324D002808D0B0784B -:104B3000012823D00F20F8BD1020F8BD0720F8BDB4 -:104B400002272F702079012814D000202871607965 -:104B5000002811D003206871A0689630A860E06832 -:104B6000E860E868224C14346060FDF75EFB20606A -:104B7000B77019E00320E9E70220ECE70020287075 -:104B80002079012816D0002028716079002813D0E0 -:104B900003206871A168F068FDF7DEFDA860E06899 -:104BA0009630E8600320B0701249F078FDF7B7FF47 -:104BB0000020F8BD0320E7E70220EAE710B50E4821 -:104BC000816A0E4A11400A4A126911438162FDF757 -:104BD00077FA10BD10B5064CE078FDF70CFB082005 -:104BE000FDF778F90520A07000202070607010BDDE -:104BF0004C0100207C1D002000050040FD7EFF7F51 -:104C00000A4A022151600A490B68002BFCD09060CF -:104C100008680028FCD00020506008680028FCD0FC -:104C200070470120000740697047000000E501401F -:104C300000E4014070477047704770477047034673 -:104C400010B50B439B070FD1042A0DD308C810C918 -:104C5000121FA342F8D018BA21BA884201D9012004 -:104C600010BD0020C04310BD002A03D0D30703D0DD -:104C7000521C07E0002010BD03780C78401C491C32 -:104C80001B1B07D103780C78401C491C1B1B01D14E -:104C9000921EF1D1184610BDF8B5042A2CD3830713 -:104CA00012D00B78491C0370401C521E83070BD096 -:104CB0000B78491C0370401C521E830704D00B78EC -:104CC000491C0370401C521E8B079B0F05D0C91A4C -:104CD000DF002023DE1B08C90AE0ECF775FAF8BDF7 -:104CE0001D4608C9FD401C46B4402C4310C0121F8D -:104CF000042AF5D2F308C91A521EF0D40B78491CC5 -:104D00000370401C521EEAD40B78491C0370401CEF -:104D1000521EE4D409780170F8BD01E004C0091FF7 -:104D20000429FBD28B0701D50280801CC90700D063 -:104D30000270704700290BD0C30702D00270401CDC -:104D4000491E022904D3830702D50280801C891ED4 -:104D5000E3E70022EEE70022DFE70378C278194696 -:104D6000437812061B0219438378C0781B04194349 -:104D700011430902090A000608437047020A087035 -:104D80004A70020C8A70020ECA7070470022030932 -:104D90008B4273D3030A8B4258D3030B8B423CD311 -:104DA000030C8B4221D312E003460B437FD4002235 -:104DB00043088B4274D303098B425FD3030A8B42AF -:104DC00044D3030B8B4228D3030C8B420DD3FF2219 -:104DD000090212BA030C8B4202D31212090265D0E7 -:104DE000030B8B4219D300E0090AC30B8B4201D39A -:104DF000CB03C01A5241830B8B4201D38B03C01AE1 -:104E00005241430B8B4201D34B03C01A5241030B57 -:104E10008B4201D30B03C01A5241C30A8B4201D308 -:104E2000CB02C01A5241830A8B4201D38B02C01AB3 -:104E30005241430A8B4201D34B02C01A5241030A2A -:104E40008B4201D30B02C01A5241CDD2C3098B420F -:104E500001D3CB01C01A524183098B4201D38B018C -:104E6000C01A524143098B4201D34B01C01A52412F -:104E700003098B4201D30B01C01A5241C3088B4274 -:104E800001D3CB00C01A524183088B4201D38B005F -:104E9000C01A524143088B4201D34B00C01A524101 -:104EA000411A00D201465241104670475DE0CA0FD8 -:104EB00000D04942031000D34042534000229C4698 -:104EC00003098B422DD3030A8B4212D3FC228901A2 -:104ED00012BA030A8B420CD3890192118B4208D378 -:104EE000890192118B4204D389013AD0921100E0DA -:104EF0008909C3098B4201D3CB01C01A52418309EE -:104F00008B4201D38B01C01A524143098B4201D31A -:104F10004B01C01A524103098B4201D30B01C01A45 -:104F20005241C3088B4201D3CB00C01A52418308BF -:104F30008B4201D38B00C01A5241D9D243088B4215 -:104F400001D34B00C01A5241411A00D201466346B8 -:104F500052415B10104601D34042002B00D549421C -:104F6000704763465B1000D3404201B50020C04645 -:104F7000C04602BD704770477047704710B500F0DB -:104F800059F810BD30B58C180278401C13071B0F60 -:104F900001D10378401C120906D10278401C03E0BD -:104FA0000578401C0D70491C5B1EF9D101E00B70A7 -:104FB000491C521EFBD1A142E6D3002030BD0000A7 -:104FC00001231B68134B1860134B1960134B1A60B5 -:104FD0007047134A134B13607246053AF0E7114AC3 -:104FE0000F4B1B689A420ED10D4B002018600198A0 -:104FF0000D4B04B598470CBC9E460246029800999A -:105000000A4B1B68184706980599094B1B68DB6813 -:105010001847000070010020740100207801002072 -:1050200068010020EFBEADDE5539010028010020E7 -:10503000040000201D481E497047FFF7FBFFECF7F6 -:105040007DF800BD01200007C06AC0B2FF2804D16E -:10505000184819490968884202D01848184901605F -:10506000184819490968884203D1184A13605B68D7 -:10507000184700BD20BFFDE7124813490968884260 -:105080000ED1134B18680B498842F3D080F308887F -:105090001049884204DD1048026802210A43026078 -:1050A0000E4880470E4880470E480047901D00205C -:1050B000901D0020FFFFFFFF001000102C05004096 -:1050C0000800000000100000000000200400002084 -:1050D0000060010000200020240500406B39010021 -:1050E00045500100C14F01001348704502D1EFF354 -:1050F000098101E0EFF308818869023800781028FF -:1051000014DB202810DB23280BDB0C4A12680C4B25 -:105110009A4203D1602804DB0A4A10470220086043 -:105120007047094A10470000084A1047084A1268A9 -:105130002C32126810470000FDFFFFFF1C01002009 -:10514000BEBAFECAAD1200002B3A0100033F0100B7 -:10515000040000200D4B0E4908470E4B0C49084730 -:105160000D4B0B4908470D4B094908470C4B0849A3 -:1051700008470C4B064908470B4B054908470B4BA2 -:10518000034908470A4B024908470000052E000062 -:10519000E13D0000BD2F0000873C0000353C0000D1 -:1051A000E9390000B912000063170000493D000012 -:1051B000AB2B000030B47446641E2578641CAB42EF -:1051C00000D21D46635D5B00E31830BC1847000049 -:1051D00002490020C861203908727047E0030020AE -:1051E00000020207FFFFFFFF0000FFFF01020408AB -:1051F00010204080555555D6BE898E00F401FA0026 -:10520000960064004B0032001E00140001000300F1 -:10521000000001000000000000000000000000008D -:1052200000000000870000000000000000000000F7 -:105230000000000000000203040500000E0F000043 -:10524000705201000800002010000000041100004E -:10525000805201001800002064010000844F01000A -:10526000A45201007C010020141C00002011000049 -:105270000249022208681042FCD0704700E200E0B8 -:10528000E1078F56FF9900CD29022B01360100015D -:1052900000EC3720FB349B5F8074800010027001AB -:0452A000E4C54F0111 -:00000001FF
--- a/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_NRF51822/PeripheralNames.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2013 Nordic Semiconductor - * - * 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 MBED_PERIPHERALNAMES_H -#define MBED_PERIPHERALNAMES_H - -#include "cmsis.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define STDIO_UART_TX TX_PIN_NUMBER -#define STDIO_UART_RX RX_PIN_NUMBER -#define STDIO_UART UART_0 - -typedef enum { - UART_0 = (int)NRF_UART0_BASE -} UARTName; - - -typedef enum { - SPI_0 = (int)NRF_SPI0_BASE, - SPI_1 = (int)NRF_SPI1_BASE, - SPIS = (int)NRF_SPIS1_BASE -} SPIName; - -typedef enum { - PWM_1 = 0, - PWM_2 -} PWMName; - -typedef enum { - I2C_0 = (int)NRF_TWI0_BASE, - I2C_1 = (int)NRF_TWI1_BASE -} I2CName; - -typedef enum { - ADC0_0 = (int)NRF_ADC_BASE -} ADCName; - -#ifdef __cplusplus -} -#endif - -#endif
--- a/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_NRF51822/PortNames.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2013 Nordic Semiconductor - * - * 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 MBED_PORTNAMES_H -#define MBED_PORTNAMES_H - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - Port0 = 0 //GPIO pins 0-31 -} PortName; - -#ifdef __cplusplus -} -#endif -#endif
--- a/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_NRF51822/TARGET_RBLAB_NRF51822/PinNames.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,180 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2013 Nordic Semiconductor - * - * 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 MBED_PINNAMES_H -#define MBED_PINNAMES_H - -#include "cmsis.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - PIN_INPUT, - PIN_OUTPUT -} PinDirection; - -#define PORT_SHIFT 3 - -typedef enum { - p0 = 0, - p1 = 1, - p2 = 2, - p3 = 3, - p4 = 4, - p5 = 5, - p6 = 6, - p7 = 7, - p8 = 8, - p9 = 9, - p10 = 10, - p11 = 11, - p12 = 12, - p13 = 13, - p14 = 14, - p15 = 15, - p16 = 16, - p17 = 17, - p18 = 18, - p19 = 19, - p20 = 20, - p21 = 21, - p22 = 22, - p23 = 23, - p24 = 24, - p25 = 25, - p26 = 26, - p27 = 27, - p28 = 28, - p29 = 29, - p30 = 30, -// p31=31, - - P0_0 = p0, - P0_1 = p1, - P0_2 = p2, - P0_3 = p3, - P0_4 = p4, - P0_5 = p5, - P0_6 = p6, - P0_7 = p7, - - P0_8 = p8, - P0_9 = p9, - P0_10 = p10, - P0_11 = p11, - P0_12 = p12, - P0_13 = p13, - P0_14 = p14, - P0_15 = p15, - - P0_16 = p16, - P0_17 = p17, - P0_18 = p18, - P0_19 = p19, - P0_20 = p20, - P0_21 = p21, - P0_22 = p22, - P0_23 = p23, - - P0_24 = p24, - P0_25 = p25, - P0_26 = p26, - P0_27 = p27, - P0_28 = p28, - P0_29 = p29, - P0_30 = p30, - - LED1 = p18, - LED2 = p19, - LED3 = p18, - LED4 = p19, - - BUTTON1 = p16, - BUTTON2 = p17, - - RX_PIN_NUMBER = p11, - TX_PIN_NUMBER = p9, - CTS_PIN_NUMBER = p10, - RTS_PIN_NUMBER = p8, - - // mBed interface Pins - USBTX = TX_PIN_NUMBER, - USBRX = RX_PIN_NUMBER, - - SPI_PSELMOSI0 = p20, - SPI_PSELMISO0 = p22, - SPI_PSELSS0 = p24, - SPI_PSELSCK0 = p25, - - SPI_PSELMOSI1 = p12, - SPI_PSELMISO1 = p13, - SPI_PSELSS1 = p14, - SPI_PSELSCK1 = p15, - - SPIS_PSELMOSI = p12, - SPIS_PSELMISO = p13, - SPIS_PSELSS = p14, - SPIS_PSELSCK = p15, - - I2C_SDA0 = p22, - I2C_SCL0 = p20, - - I2C_SDA1 = p13, - I2C_SCL1 = p15, - - D0 = p7, - D1 = p8, - D2 = p9, - D3 = p10, - D4 = p11, - D5 = p12, - D6 = p13, - D7 = p17, - - D8 = p18, - D9 = p23, - D10 = p24, - D11 = p25, - D12 = p28, - D13 = p29, - - D14 = p5, - D15 = p6, - - A0 = p1, - A1 = p2, - A2 = p3, - A3 = p4, - A4 = p5, - A5 = p6, - - // Not connected - NC = (int)0xFFFFFFFF -} PinName; - -typedef enum { - PullNone = 0, - PullDown = 1, - PullUp = 3, - PullDefault = PullUp -} PinMode; - -#ifdef __cplusplus -} -#endif - -#endif
--- a/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_NRF51822/TARGET_RBLAB_NRF51822/device.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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 MBED_DEVICE_H -#define MBED_DEVICE_H - -#define DEVICE_PORTIN 1 -#define DEVICE_PORTOUT 1 -#define DEVICE_PORTINOUT 1 - -#define DEVICE_INTERRUPTIN 1 - -#define DEVICE_ANALOGIN 1 -#define DEVICE_ANALOGOUT 0 - -#define DEVICE_SERIAL 1 - -#define DEVICE_I2C 1 -#define DEVICE_I2CSLAVE 0 - -#define DEVICE_SPI 1 -#define DEVICE_SPISLAVE 1 - -#define DEVICE_CAN 0 - -#define DEVICE_RTC 0 - -#define DEVICE_ETHERNET 0 - -#define DEVICE_PWMOUT 1 - -#define DEVICE_SEMIHOST 0 -#define DEVICE_LOCALFILESYSTEM 0 - -#define DEVICE_SLEEP 1 - -#define DEVICE_DEBUG_AWARENESS 0 - -#define DEVICE_STDIO_MESSAGES 0 - -#define DEVICE_ERROR_PATTERN 1 - -#include "objects.h" - -#endif
--- a/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_NRF51822/gpio_object.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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 MBED_GPIO_OBJECT_H -#define MBED_GPIO_OBJECT_H - -#include "mbed_assert.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - PinName pin; - uint32_t mask; - - __IO uint32_t *reg_dir; - __IO uint32_t *reg_set; - __IO uint32_t *reg_clr; - __I uint32_t *reg_in; -} gpio_t; - -static inline void gpio_write(gpio_t *obj, int value) { - MBED_ASSERT(obj->pin != (PinName)NC); - if (value) - *obj->reg_set = obj->mask; - else - *obj->reg_clr = obj->mask; -} - -static inline int gpio_read(gpio_t *obj) { - MBED_ASSERT(obj->pin != (PinName)NC); - return ((*obj->reg_in & obj->mask) ? 1 : 0); -} - -#ifdef __cplusplus -} -#endif - -#endif
--- a/TARGET_RBLAB_NRF51822/TARGET_NORDIC/TARGET_NRF51822/objects.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,73 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2013 Nordic Semiconductor - * - * 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 MBED_OBJECTS_H -#define MBED_OBJECTS_H - -#include "cmsis.h" -#include "PortNames.h" -#include "PeripheralNames.h" -#include "PinNames.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct serial_s { - NRF_UART_Type *uart; - int index; -}; - -struct spi_s { - NRF_SPI_Type *spi; - NRF_SPIS_Type *spis; -}; - -struct port_s { - __IO uint32_t *reg_cnf; - __IO uint32_t *reg_out; - __I uint32_t *reg_in; - PortName port; - uint32_t mask; -}; - -struct pwmout_s { - PWMName pwm; - PinName pin; -}; - -struct i2c_s { - NRF_TWI_Type *i2c; - PinName sda; - PinName scl; - int freq; -}; - -struct analogin_s { - ADCName adc; - uint8_t adc_pin; -}; - -struct gpio_irq_s { - uint32_t ch; -}; - -#include "gpio_object.h" - -#ifdef __cplusplus -} -#endif - -#endif
Binary file TARGET_RBLAB_NRF51822/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_RBLAB_NRF51822/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_RBLAB_NRF51822/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_RBLAB_NRF51822/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_RBLAB_NRF51822/TOOLCHAIN_ARM_STD/startup_nRF51822.o has changed
Binary file TARGET_RBLAB_NRF51822/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_RBLAB_NRF51822/TOOLCHAIN_ARM_STD/system_nrf51822.o has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_RBLAB_NRF51822/TOOLCHAIN_GCC_ARM/NRF51822.ld Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,151 @@ +/* Linker script to configure memory regions. */ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00016000, LENGTH = 0x2A000 + RAM (rwx) : ORIGIN = 0x20002000, LENGTH = 0x2000 +} + +OUTPUT_FORMAT ("elf32-littlearm", "elf32-bigarm", "elf32-littlearm") + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + KEEP(*(.Vectors)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + *(.jcr) + . = ALIGN(4); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + end = __end__; + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +}
Binary file TARGET_RBLAB_NRF51822/TOOLCHAIN_GCC_ARM/board.o has changed
Binary file TARGET_RBLAB_NRF51822/TOOLCHAIN_GCC_ARM/cmsis_nvic.o has changed
Binary file TARGET_RBLAB_NRF51822/TOOLCHAIN_GCC_ARM/libmbed.a has changed
Binary file TARGET_RBLAB_NRF51822/TOOLCHAIN_GCC_ARM/retarget.o has changed
Binary file TARGET_RBLAB_NRF51822/TOOLCHAIN_GCC_ARM/startup_NRF51822.o has changed
Binary file TARGET_RBLAB_NRF51822/TOOLCHAIN_GCC_ARM/system_nrf51822.o has changed
Binary file TARGET_UBLOX_C027/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_UBLOX_C027/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_UBLOX_C027/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_UBLOX_C027/TOOLCHAIN_ARM_STD/mbed_overrides.o has changed
Binary file TARGET_UBLOX_C027/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_UBLOX_C027/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_UBLOX_C027/TOOLCHAIN_ARM_STD/system_LPC17xx.o has changed
Binary file TARGET_UBLOX_C027/TOOLCHAIN_GCC_ARM/libmbed.a has changed
Binary file TARGET_UBLOX_C027/TOOLCHAIN_GCC_ARM/retarget.o has changed
Binary file TARGET_UBLOX_C027/TOOLCHAIN_GCC_CR/libmbed.a has changed
Binary file TARGET_UBLOX_C027/TOOLCHAIN_GCC_CR/retarget.o has changed
Binary file TARGET_UBLOX_C027/TOOLCHAIN_GCC_CS/libmbed.a has changed
Binary file TARGET_UBLOX_C027/TOOLCHAIN_GCC_CS/retarget.o has changed
Binary file TARGET_UBLOX_C027/TOOLCHAIN_IAR/board.o has changed
Binary file TARGET_UBLOX_C027/TOOLCHAIN_IAR/cmsis_nvic.o has changed
Binary file TARGET_UBLOX_C027/TOOLCHAIN_IAR/mbed.a has changed
Binary file TARGET_UBLOX_C027/TOOLCHAIN_IAR/mbed_overrides.o has changed
Binary file TARGET_UBLOX_C027/TOOLCHAIN_IAR/retarget.o has changed
Binary file TARGET_UBLOX_C027/TOOLCHAIN_IAR/startup_LPC17xx.o has changed
Binary file TARGET_UBLOX_C027/TOOLCHAIN_IAR/system_LPC17xx.o has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_XADOW_M0/TARGET_NXP/TARGET_LPC11UXX/PeripheralPins.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,43 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * 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 MBED_PERIPHERALPINS_H +#define MBED_PERIPHERALPINS_H + +#include "pinmap.h" +#include "PeripheralNames.h" + +/************ADC***************/ +extern const PinMap PinMap_ADC[]; + +/************I2C***************/ +extern const PinMap PinMap_I2C_SDA[]; +extern const PinMap PinMap_I2C_SCL[]; + +/************UART***************/ +extern const PinMap PinMap_UART_TX[]; +extern const PinMap PinMap_UART_RX[]; + +/************SPI***************/ +extern const PinMap PinMap_SPI_SCLK[]; +extern const PinMap PinMap_SPI_MOSI[]; +extern const PinMap PinMap_SPI_MISO[]; +extern const PinMap PinMap_SPI_SSEL[]; + +/************PWM***************/ +extern const PinMap PinMap_PWM[]; + +#endif
--- a/TARGET_XADOW_M0/TARGET_NXP/TARGET_LPC11UXX/TARGET_LPC11U35_501/PeripheralNames.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,71 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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 MBED_PERIPHERALNAMES_H -#define MBED_PERIPHERALNAMES_H - -#include "cmsis.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - UART_0 = (int)LPC_USART_BASE -} UARTName; - -typedef enum { - I2C_0 = (int)LPC_I2C_BASE -} I2CName; - -typedef enum { - ADC0_0 = 0, - ADC0_1, - ADC0_2, - ADC0_3, - ADC0_4, - ADC0_5, - ADC0_6, - ADC0_7 -} ADCName; - -typedef enum { - SPI_0 = (int)LPC_SSP0_BASE, - SPI_1 = (int)LPC_SSP1_BASE -} SPIName; - -typedef enum { - PWM_1 = 0, - PWM_2, - PWM_3, - PWM_4, - PWM_5, - PWM_6, - PWM_7, - PWM_8, - PWM_9, - PWM_10, - PWM_11 -} PWMName; - -#define STDIO_UART_TX UART_TX -#define STDIO_UART_RX UART_RX -#define STDIO_UART UART_0 - -#ifdef __cplusplus -} -#endif - -#endif
--- a/TARGET_XADOW_M0/TARGET_NXP/TARGET_LPC11UXX/TARGET_LPC11U35_501/PinNames.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,176 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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 MBED_PINNAMES_H -#define MBED_PINNAMES_H - -#include "cmsis.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - PIN_INPUT, - PIN_OUTPUT -} PinDirection; - -#define PORT_SHIFT 5 - -typedef enum { - // LPC11U Pin Names - P0_0 = 0, - P0_1 = 1, - P0_2 = 2, - P0_3 = 3, - P0_4 = 4, - P0_5 = 5, - P0_6 = 6, - P0_7 = 7, - P0_8 = 8, - P0_9 = 9, - P0_10 = 10, - P0_11 = 11, - P0_12 = 12, - P0_13 = 13, - P0_14 = 14, - P0_15 = 15, - P0_16 = 16, - P0_17 = 17, - P0_18 = 18, - P0_19 = 19, - P0_20 = 20, - P0_21 = 21, - P0_22 = 22, - P0_23 = 23, - P0_24 = 24, - P0_25 = 25, - P0_26 = 26, - P0_27 = 27, - - P1_0 = 32, - P1_1 = 33, - P1_2 = 34, - P1_3 = 35, - P1_4 = 36, - P1_5 = 37, - P1_6 = 38, - P1_7 = 39, - P1_8 = 40, - P1_9 = 41, - P1_10 = 42, - P1_11 = 43, - P1_12 = 44, - P1_13 = 45, - P1_14 = 46, - P1_15 = 47, - P1_16 = 48, - P1_17 = 49, - P1_18 = 50, - P1_19 = 51, - P1_20 = 52, - P1_21 = 53, - P1_22 = 54, - P1_23 = 55, - P1_24 = 56, - P1_25 = 57, - P1_26 = 58, - P1_27 = 59, - P1_28 = 60, - P1_29 = 61, - - P1_31 = 63, - - // mbed DIP Pin Names - // CN1-1 (GND) - // CN1-2 (EXTPOWER) - // CN1-3 (NC) - p4 = P0_0, // CN1-4 - p5 = P0_9, // CN1-5 - p6 = P0_8, // CN1-6 - p7 = P0_10, // CN1-7 - p8 = P0_7, // CN1-8 - p9 = P0_19, // CN1-9 - p10 = P0_18, // CN1-10 - p11 = P0_21, // CN1-11 - p12 = P0_22, // CN1-12 - p13 = P1_15, // CN1-13 - p14 = P0_6, // CN1-14 - p15 = P0_11, // CN1-15 - p16 = P0_12, // CN1-16 - p17 = P0_13, // CN1-17 - p18 = P0_14, // CN1-18 - p19 = P0_15, // CN1-19 - p20 = P0_16, // CN1-20 - - p21 = P0_14, // CN2-20 - p22 = P0_2, // CN2-19 - p23 = P0_23, // CN2-18 - p24 = P0_17, // CN2-17 - p25 = P0_20, // CN2-16 - p26 = P1_15, // CN2-15 - p27 = P0_4, // CN2-14 - p28 = P0_5, // CN2-13 - p29 = P1_19, // CN2-12 - p30 = P0_1, // CN2-11 - // CN2-10 (D+USB) - // CN2-9 (D-USB) - p33 = P0_3, // CN2-8 (USB-VBUS) - // CN2-7 (NC) - // CN2-6 (NC) - // CN2-5 (NC) - // CN2-4 (NC) - // CN2-3 (NC) - // CN2-2 (VDD) - // CN2-1 (VDD) - - // Other mbed Pin Names - LED1 = P0_20, - LED2 = P0_21, - LED3 = P0_20, - LED4 = P0_21, - - UART_TX = P0_19, - UART_RX = P0_18, - - // Not connected - NC = (int)0xFFFFFFFF, -} PinName; - -typedef enum { - CHANNEL0 = FLEX_INT0_IRQn, - CHANNEL1 = FLEX_INT1_IRQn, - CHANNEL2 = FLEX_INT2_IRQn, - CHANNEL3 = FLEX_INT3_IRQn, - CHANNEL4 = FLEX_INT4_IRQn, - CHANNEL5 = FLEX_INT5_IRQn, - CHANNEL6 = FLEX_INT6_IRQn, - CHANNEL7 = FLEX_INT7_IRQn -} Channel; - -typedef enum { - PullUp = 2, - PullDown = 1, - PullNone = 0, - Repeater = 3, - OpenDrain = 4, - PullDefault = PullDown -} PinMode; - -#ifdef __cplusplus -} -#endif - -#endif
--- a/TARGET_XADOW_M0/TARGET_NXP/TARGET_LPC11UXX/TARGET_LPC11U35_501/device.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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 MBED_DEVICE_H -#define MBED_DEVICE_H - -#define DEVICE_PORTIN 1 -#define DEVICE_PORTOUT 1 -#define DEVICE_PORTINOUT 1 - -#define DEVICE_INTERRUPTIN 1 - -#define DEVICE_ANALOGIN 1 -#define DEVICE_ANALOGOUT 0 - -#define DEVICE_SERIAL 1 - -#define DEVICE_I2C 1 -#define DEVICE_I2CSLAVE 1 - -#define DEVICE_SPI 1 -#define DEVICE_SPISLAVE 1 - -#define DEVICE_CAN 0 - -#define DEVICE_RTC 0 - -#define DEVICE_ETHERNET 0 - -#define DEVICE_PWMOUT 1 - -#define DEVICE_SEMIHOST 0 -#define DEVICE_LOCALFILESYSTEM 0 -#define DEVICE_ID_LENGTH 32 -#define DEVICE_MAC_OFFSET 20 - -#define DEVICE_SLEEP 1 - -#define DEVICE_DEBUG_AWARENESS 0 - -#define DEVICE_STDIO_MESSAGES 0 - -#define DEVICE_ERROR_PATTERN 1 - -#include "objects.h" - -#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_XADOW_M0/TARGET_NXP/TARGET_LPC11UXX/TARGET_MCU_LPC11U35_501/PeripheralNames.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,71 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * 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 MBED_PERIPHERALNAMES_H +#define MBED_PERIPHERALNAMES_H + +#include "cmsis.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + UART_0 = (int)LPC_USART_BASE +} UARTName; + +typedef enum { + I2C_0 = (int)LPC_I2C_BASE +} I2CName; + +typedef enum { + ADC0_0 = 0, + ADC0_1, + ADC0_2, + ADC0_3, + ADC0_4, + ADC0_5, + ADC0_6, + ADC0_7 +} ADCName; + +typedef enum { + SPI_0 = (int)LPC_SSP0_BASE, + SPI_1 = (int)LPC_SSP1_BASE +} SPIName; + +typedef enum { + PWM_1 = 0, + PWM_2, + PWM_3, + PWM_4, + PWM_5, + PWM_6, + PWM_7, + PWM_8, + PWM_9, + PWM_10, + PWM_11 +} PWMName; + +#define STDIO_UART_TX UART_TX +#define STDIO_UART_RX UART_RX +#define STDIO_UART UART_0 + +#ifdef __cplusplus +} +#endif + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_XADOW_M0/TARGET_NXP/TARGET_LPC11UXX/TARGET_MCU_LPC11U35_501/TARGET_XADOW_M0/PinNames.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,179 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * 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 MBED_PINNAMES_H +#define MBED_PINNAMES_H + +#include "cmsis.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + PIN_INPUT, + PIN_OUTPUT +} PinDirection; + +#define PORT_SHIFT 5 + +typedef enum { + // LPC11U Pin Names + P0_0 = 0, + P0_1 = 1, + P0_2 = 2, + P0_3 = 3, + P0_4 = 4, + P0_5 = 5, + P0_6 = 6, + P0_7 = 7, + P0_8 = 8, + P0_9 = 9, + P0_10 = 10, + P0_11 = 11, + P0_12 = 12, + P0_13 = 13, + P0_14 = 14, + P0_15 = 15, + P0_16 = 16, + P0_17 = 17, + P0_18 = 18, + P0_19 = 19, + P0_20 = 20, + P0_21 = 21, + P0_22 = 22, + P0_23 = 23, + P0_24 = 24, + P0_25 = 25, + P0_26 = 26, + P0_27 = 27, + + P1_0 = 32, + P1_1 = 33, + P1_2 = 34, + P1_3 = 35, + P1_4 = 36, + P1_5 = 37, + P1_6 = 38, + P1_7 = 39, + P1_8 = 40, + P1_9 = 41, + P1_10 = 42, + P1_11 = 43, + P1_12 = 44, + P1_13 = 45, + P1_14 = 46, + P1_15 = 47, + P1_16 = 48, + P1_17 = 49, + P1_18 = 50, + P1_19 = 51, + P1_20 = 52, + P1_21 = 53, + P1_22 = 54, + P1_23 = 55, + P1_24 = 56, + P1_25 = 57, + P1_26 = 58, + P1_27 = 59, + P1_28 = 60, + P1_29 = 61, + + P1_31 = 63, + + // mbed DIP Pin Names + // CN1-1 (GND) + // CN1-2 (EXTPOWER) + // CN1-3 (NC) + p4 = P0_0, // CN1-4 + p5 = P0_9, // CN1-5 + p6 = P0_8, // CN1-6 + p7 = P0_10, // CN1-7 + p8 = P0_7, // CN1-8 + p9 = P0_19, // CN1-9 + p10 = P0_18, // CN1-10 + p11 = P0_21, // CN1-11 + p12 = P0_22, // CN1-12 + p13 = P1_15, // CN1-13 + p14 = P0_6, // CN1-14 + p15 = P0_11, // CN1-15 + p16 = P0_12, // CN1-16 + p17 = P0_13, // CN1-17 + p18 = P0_14, // CN1-18 + p19 = P0_15, // CN1-19 + p20 = P0_16, // CN1-20 + + p21 = P0_14, // CN2-20 + p22 = P0_2, // CN2-19 + p23 = P0_23, // CN2-18 + p24 = P0_17, // CN2-17 + p25 = P0_20, // CN2-16 + p26 = P1_15, // CN2-15 + p27 = P0_4, // CN2-14 + p28 = P0_5, // CN2-13 + p29 = P1_19, // CN2-12 + p30 = P0_1, // CN2-11 + // CN2-10 (D+USB) + // CN2-9 (D-USB) + p33 = P0_3, // CN2-8 (USB-VBUS) + // CN2-7 (NC) + // CN2-6 (NC) + // CN2-5 (NC) + // CN2-4 (NC) + // CN2-3 (NC) + // CN2-2 (VDD) + // CN2-1 (VDD) + + // Other mbed Pin Names + LED1 = P0_20, + LED2 = P0_23, + LED3 = P0_20, + LED4 = P0_23, + + UART_TX = P0_19, + UART_RX = P0_18, + + I2C_SCL = P0_4, + I2C_SDA = P0_5, + + // Not connected + NC = (int)0xFFFFFFFF, +} PinName; + +typedef enum { + CHANNEL0 = FLEX_INT0_IRQn, + CHANNEL1 = FLEX_INT1_IRQn, + CHANNEL2 = FLEX_INT2_IRQn, + CHANNEL3 = FLEX_INT3_IRQn, + CHANNEL4 = FLEX_INT4_IRQn, + CHANNEL5 = FLEX_INT5_IRQn, + CHANNEL6 = FLEX_INT6_IRQn, + CHANNEL7 = FLEX_INT7_IRQn +} Channel; + +typedef enum { + PullUp = 2, + PullDown = 1, + PullNone = 0, + Repeater = 3, + OpenDrain = 4, + PullDefault = PullDown +} PinMode; + +#ifdef __cplusplus +} +#endif + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_XADOW_M0/TARGET_NXP/TARGET_LPC11UXX/TARGET_MCU_LPC11U35_501/TARGET_XADOW_M0/device.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,59 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * 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 MBED_DEVICE_H +#define MBED_DEVICE_H + +#define DEVICE_PORTIN 1 +#define DEVICE_PORTOUT 1 +#define DEVICE_PORTINOUT 1 + +#define DEVICE_INTERRUPTIN 1 + +#define DEVICE_ANALOGIN 1 +#define DEVICE_ANALOGOUT 0 + +#define DEVICE_SERIAL 1 + +#define DEVICE_I2C 1 +#define DEVICE_I2CSLAVE 1 + +#define DEVICE_SPI 1 +#define DEVICE_SPISLAVE 1 + +#define DEVICE_CAN 0 + +#define DEVICE_RTC 0 + +#define DEVICE_ETHERNET 0 + +#define DEVICE_PWMOUT 1 + +#define DEVICE_SEMIHOST 0 +#define DEVICE_LOCALFILESYSTEM 0 +#define DEVICE_ID_LENGTH 32 +#define DEVICE_MAC_OFFSET 20 + +#define DEVICE_SLEEP 1 + +#define DEVICE_DEBUG_AWARENESS 0 + +#define DEVICE_STDIO_MESSAGES 0 + +#define DEVICE_ERROR_PATTERN 1 + +#include "objects.h" + +#endif
Binary file TARGET_XADOW_M0/TOOLCHAIN_ARM_MICRO/board.o has changed
Binary file TARGET_XADOW_M0/TOOLCHAIN_ARM_MICRO/cmsis_nvic.o has changed
Binary file TARGET_XADOW_M0/TOOLCHAIN_ARM_MICRO/mbed.ar has changed
Binary file TARGET_XADOW_M0/TOOLCHAIN_ARM_MICRO/retarget.o has changed
Binary file TARGET_XADOW_M0/TOOLCHAIN_ARM_MICRO/startup_LPC11xx.o has changed
Binary file TARGET_XADOW_M0/TOOLCHAIN_ARM_MICRO/sys.o has changed
Binary file TARGET_XADOW_M0/TOOLCHAIN_ARM_MICRO/system_LPC11Uxx.o has changed
--- a/TARGET_XADOW_M0/TOOLCHAIN_ARM_STD/LPC11U35.sct Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,20 +0,0 @@ - -LR_IROM1 0x00000000 0x10000 { ; load region size_region (64k) - ER_IROM1 0x00000000 0x10000 { ; load address = execution address - *.o (RESET, +First) - *(InRoot$$Sections) - .ANY (+RO) - } - ; 8_byte_aligned(48 vect * 4 bytes) = 8_byte_aligned(0xC0) = 0xC0 - ; 8KB - 0xC0 = 0x1F40 - RW_IRAM1 0x100000C0 0x1F40 { - .ANY (+RW +ZI) - } - RW_IRAM2 0x20000000 0x800 { ; RW data, I/O Handler RAM - .ANY (IOHANDLER_RAM) - } - RW_IRAM3 0x20004000 0x800 { ; RW data, USB RAM - .ANY (USBRAM) - } -} -
Binary file TARGET_XADOW_M0/TOOLCHAIN_ARM_STD/board.o has changed
Binary file TARGET_XADOW_M0/TOOLCHAIN_ARM_STD/cmsis_nvic.o has changed
Binary file TARGET_XADOW_M0/TOOLCHAIN_ARM_STD/mbed.ar has changed
Binary file TARGET_XADOW_M0/TOOLCHAIN_ARM_STD/retarget.o has changed
Binary file TARGET_XADOW_M0/TOOLCHAIN_ARM_STD/startup_LPC11xx.o has changed
Binary file TARGET_XADOW_M0/TOOLCHAIN_ARM_STD/sys.o has changed
Binary file TARGET_XADOW_M0/TOOLCHAIN_ARM_STD/system_LPC11Uxx.o has changed
--- a/TARGET_XADOW_M0/TOOLCHAIN_GCC_ARM/LPC11U35.ld Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,151 +0,0 @@ -/* Linker script to configure memory regions. */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 64K - RAM (rwx) : ORIGIN = 0x100000C0, LENGTH = 0x1F40 - USB_RAM (rwx): ORIGIN = 0x20004000, LENGTH = 0x800 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - KEEP(*(.isr_vector)) - *(.text.Reset_Handler) - - /* Only vectors and code running at reset are safe to be in first 512 - bytes since RAM can be mapped into this area for RAM based interrupt - vectors. */ - . = 0x00000200; - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE (__fini_array_end = .); - - . = ALIGN(4); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - __bss_start__ = .; - *(.bss*) - *(COMMON) - __bss_end__ = .; - } > RAM - - .heap : - { - __end__ = .; - end = __end__; - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy : - { - *(.stack) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -}
Binary file TARGET_XADOW_M0/TOOLCHAIN_GCC_ARM/board.o has changed
Binary file TARGET_XADOW_M0/TOOLCHAIN_GCC_ARM/libmbed.a has changed
Binary file TARGET_XADOW_M0/TOOLCHAIN_GCC_ARM/retarget.o has changed
--- a/TARGET_XADOW_M0/TOOLCHAIN_GCC_CR/LPC11U35.ld Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,155 +0,0 @@ -/* mbed - LPC11U35 linker script - * Based linker script generated by Code Red Technologies Red Suite 4.1 - */ -GROUP(libgcc.a libc_s.a libstdc++_s.a libm.a libcr_newlib_nohost.a crti.o crtn.o crtbegin.o crtend.o) - -MEMORY -{ - /* Define each memory region */ - MFlash32 (rx) : ORIGIN = 0x0, LENGTH = 0x10000 /* 64k */ - RamLoc8 (rwx) : ORIGIN = 0x100000C0, LENGTH = 0x1F40 /* 8k */ - RamUsb2 (rwx) : ORIGIN = 0x20004000, LENGTH = 0x800 /* 2k */ -} - /* Define a symbol for the top of each memory region */ - __top_MFlash32 = 0x0 + 0x10000; - __top_RamLoc8 = 0x10000000 + 0x1F40; - __top_RamUsb2 = 0x20004000 + 0x800; - -ENTRY(ResetISR) - -SECTIONS -{ - - /* MAIN TEXT SECTION */ - .text : ALIGN(4) - { - FILL(0xff) - KEEP(*(.isr_vector)) - *(.text.ResetISR) - . = 0x200; - - /* Global Section Table */ - . = ALIGN(4) ; - __section_table_start = .; - __data_section_table = .; - LONG(LOADADDR(.data)); - LONG( ADDR(.data)) ; - LONG( SIZEOF(.data)); - LONG(LOADADDR(.data_RAM2)); - LONG( ADDR(.data_RAM2)) ; - LONG( SIZEOF(.data_RAM2)); - __data_section_table_end = .; - __bss_section_table = .; - LONG( ADDR(.bss)); - LONG( SIZEOF(.bss)); - LONG( ADDR(.bss_RAM2)); - LONG( SIZEOF(.bss_RAM2)); - __bss_section_table_end = .; - __section_table_end = . ; - /* End of Global Section Table */ - - - *(.after_vectors*) - - *(.text*) - *(.rodata .rodata.*) - . = ALIGN(4); - - /* C++ constructors etc */ - . = ALIGN(4); - KEEP(*(.init)) - - . = ALIGN(4); - __preinit_array_start = .; - KEEP (*(.preinit_array)) - __preinit_array_end = .; - - . = ALIGN(4); - __init_array_start = .; - KEEP (*(SORT(.init_array.*))) - KEEP (*(.init_array)) - __init_array_end = .; - - KEEP(*(.fini)); - - . = ALIGN(0x4); - KEEP (*crtbegin.o(.ctors)) - KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*crtend.o(.ctors)) - - . = ALIGN(0x4); - KEEP (*crtbegin.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*crtend.o(.dtors)) - /* End C++ */ - } > MFlash32 - - /* - * for exception handling/unwind - some Newlib functions (in common - * with C++ and STDC++) use this. - */ - .ARM.extab : ALIGN(4) - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > MFlash32 - __exidx_start = .; - - .ARM.exidx : ALIGN(4) - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > MFlash32 - __exidx_end = .; - - _etext = .; - - - .data_RAM2 : ALIGN(4) - { - FILL(0xff) - *(.data.$RAM2*) - *(.data.$RamUsb2*) - . = ALIGN(4) ; - } > RamUsb2 AT>MFlash32 - - /* MAIN DATA SECTION */ - - .uninit_RESERVED : ALIGN(4) - { - KEEP(*(.bss.$RESERVED*)) - } > RamLoc8 - - .data : ALIGN(4) - { - FILL(0xff) - _data = .; - *(vtable) - *(.data*) - . = ALIGN(4) ; - _edata = .; - } > RamLoc8 AT>MFlash32 - - - .bss_RAM2 : ALIGN(4) - { - *(.bss.$RAM2*) - *(.bss.$RamUsb2*) - . = ALIGN(4) ; - } > RamUsb2 - - /* MAIN BSS SECTION */ - .bss : ALIGN(4) - { - _bss = .; - *(.bss*) - *(COMMON) - . = ALIGN(4) ; - _ebss = .; - PROVIDE(end = .); - __end__ = .; - } > RamLoc8 - - PROVIDE(_pvHeapStart = .); - PROVIDE(_vStackTop = __top_RamLoc8 - 0); -}
Binary file TARGET_XADOW_M0/TOOLCHAIN_GCC_CR/board.o has changed
Binary file TARGET_XADOW_M0/TOOLCHAIN_GCC_CR/libmbed.a has changed
Binary file TARGET_XADOW_M0/TOOLCHAIN_GCC_CR/retarget.o has changed
--- a/error.h Fri Jul 25 09:46:51 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,66 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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 MBED_ERROR_H -#define MBED_ERROR_H - -/** To generate a fatal compile-time error, you can use the pre-processor #error directive. - * - * @code - * #error "That shouldn't have happened!" - * @endcode - * - * If the compiler evaluates this line, it will report the error and stop the compile. - * - * For example, you could use this to check some user-defined compile-time variables: - * - * @code - * #define NUM_PORTS 7 - * #if (NUM_PORTS > 4) - * #error "NUM_PORTS must be less than 4" - * #endif - * @endcode - * - * Reporting Run-Time Errors: - * To generate a fatal run-time error, you can use the mbed error() function. - * - * @code - * error("That shouldn't have happened!"); - * @endcode - * - * If the mbed running the program executes this function, it will print the - * message via the USB serial port, and then die with the blue lights of death! - * - * The message can use printf-style formatting, so you can report variables in the - * message too. For example, you could use this to check a run-time condition: - * - * @code - * if(x >= 5) { - * error("expected x to be less than 5, but got %d", x); - * } - * #endcode - */ - -#ifdef __cplusplus -extern "C" { -#endif - -void error(const char* format, ...); - -#ifdef __cplusplus -} -#endif - -#endif
--- a/mbed.h Fri Jul 25 09:46:51 2014 +0100 +++ b/mbed.h Fri Aug 15 15:28:31 2014 +0100 @@ -16,7 +16,7 @@ #ifndef MBED_H #define MBED_H -#define MBED_LIBRARY_VERSION 86 +#define MBED_LIBRARY_VERSION 88 #include "platform.h" @@ -25,7 +25,7 @@ #include <time.h> // mbed Debug libraries -#include "error.h" +#include "mbed_error.h" #include "mbed_interface.h" // mbed Peripheral components
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed_error.h Fri Aug 15 15:28:31 2014 +0100 @@ -0,0 +1,66 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * 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 MBED_ERROR_H +#define MBED_ERROR_H + +/** To generate a fatal compile-time error, you can use the pre-processor #error directive. + * + * @code + * #error "That shouldn't have happened!" + * @endcode + * + * If the compiler evaluates this line, it will report the error and stop the compile. + * + * For example, you could use this to check some user-defined compile-time variables: + * + * @code + * #define NUM_PORTS 7 + * #if (NUM_PORTS > 4) + * #error "NUM_PORTS must be less than 4" + * #endif + * @endcode + * + * Reporting Run-Time Errors: + * To generate a fatal run-time error, you can use the mbed error() function. + * + * @code + * error("That shouldn't have happened!"); + * @endcode + * + * If the mbed running the program executes this function, it will print the + * message via the USB serial port, and then die with the blue lights of death! + * + * The message can use printf-style formatting, so you can report variables in the + * message too. For example, you could use this to check a run-time condition: + * + * @code + * if(x >= 5) { + * error("expected x to be less than 5, but got %d", x); + * } + * #endcode + */ + +#ifdef __cplusplus +extern "C" { +#endif + +void error(const char* format, ...); + +#ifdef __cplusplus +} +#endif + +#endif