+ * int main(void)
+ * {
+ * DAVE_STATUS_t status;
+ * DAVE_APP_VERSION_t app_version;
+ * SDMMC_BLOCK_CARD_STATE_t card_status;
+ *
+ * status = DAVE_Init(); // SDMMC_BLOCK_Init() is called from DAVE_Init()
+ *
+ * sdmmc_status = SDMMC_BLOCK_Initialize(&SDMMC_BLOCK_0);
+ *
+ * if (sdmmc_status == SDMMC_BLOCK_STATUS_SUCCESS)
+ * {
+ * do
+ * {
+ * send_data[count] = count;
+ * } while (count++ < 1024);
+ *
+ * sdmmc_status = SDMMC_BLOCK_WriteBlock(&SDMMC_BLOCK_0, send_data, 1004U, 2U);
+ *
+ * if (sdmmc_status == SDMMC_BLOCK_STATUS_SUCCESS)
+ * {
+ * sdmmc_status = SDMMC_BLOCK_ReadBlock(&SDMMC_BLOCK_0, read_data, 1004U, 2U);
+ *
+ * for (count = 0; count < 1024; count++)
+ * {
+ * if(read_data[count] != send_data[count])
+ * status = DAVE_STATUS_FAILURE;
+ * }
+ *
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_CTRL_TRIM, &erase_address);
+ *
+ * sdmmc_status = SDMMC_BLOCK_ReadBlock(&SDMMC_BLOCK_0, read_data, 1004U, 2U);
+ *
+ * for (count = 0; count < 1024; count++)
+ * {
+ * if(read_data[count] != 0U)
+ * status = DAVE_STATUS_FAILURE;
+ * }
+ * }
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_CTRL_EJECT, &buffer);
+ * }
+ *
+ * if(status == DAVE_STATUS_FAILURE)
+ * {
+ * // Placeholder for error handler code. The while loop below can be replaced with an user error handler.
+ * XMC_DEBUG("DAVE APPs initialization failed\n");
+ *
+ * while(1U)
+ * {
+ *
+ * }
+ * }
+ *
+ * // Placeholder for user application code. The while loop below can be replaced with user application code.
+ * while(1U)
+ * {
+ *
+ * }
+ * }
+ * @endcode
+ */
+SDMMC_BLOCK_STATUS_t SDMMC_BLOCK_WriteBlock(SDMMC_BLOCK_t *const obj,
+ uint8_t *write_buf,
+ const uint32_t sector_number,
+ const uint8_t sector_count);
+
+/**
+ * @brief Control the specified SDMMC device features and the miscellaneous device independent functions
+ * other than disk read/write.
+ * @param obj A pointer to SDMMC_BLOCK_t, pointing to the SDMMC_BLOCK handle configuration
+ * @param command Specifies the command code.
+ * @param buffer Pointer to the parameter buffer depends on the command code.\n
+ * When it is not used, specify a NULL pointer.
+ * @return SDMMC_BLOCK_STATUS_t: Status of SDMMC_BLOCK APP operation.\n
+ * SDMMC_BLOCK_STATUS_SUCCESS: on successful operation.\n
+ * SDMMC_BLOCK_STATUS_FAILURE: If the specified operation fails.\n
+ * SDMMC_BLOCK_STATUS_NOTRDY : Card is not available or not initialized\n
+ * SDMMC_BLOCK_STATUS_LOCKED : Card is locked with password\n
+ * SDMMC_BLOCK_STATUS_PARERR : If invalid parameter is passed as argument.\n
+ * SDMMC_BLOCK_STATUS_WRPRT : Card is write protected.\n
+ *
+ * \parDescription:
+ * For Locking features, the user must provide the password information in the SDMMC_BLOCK_PASSWORD_t structure.
+ *
+ * The IOCTL commands used are: \n\n
+ * Generic IOCTL commands: \n\n
+ * SDMMC_BLOCK_CTRL_SYNC: Flush disk cache (for write functions). \n ('buffer' can be NULL). \n\n
+ * SDMMC_BLOCK_GET_SECTOR_COUNT: Get media size. \n ('buffer' must refer to a uint32_t) \n\n
+ * SDMMC_BLOCK_GET_SECTOR_SIZE: Get sector size. \n ('buffer' must refer to a uint32_t) \n\n
+ * SDMMC_BLOCK_GET_BLOCK_SIZE: Get erase block size. \n ('buffer' must refer to a uint32_t) \n\n
+ * SDMMC_BLOCK_CTRL_TRIM: Inform device that the data on the block of sectors is no longer used. \n
+ * ('buffer must refer to a value of type SDMMC_BLOCK_ERASE_ADDRESS_t). \n\n
+ * SDMMC_BLOCK_CTRL_EJECT: Eject media. \n ('buffer' can be NULL). \n\n
+ * MMC/SD card specific IOCTL commands: \n\n
+ * SDMMC_BLOCK_MMC_GET_TYPE: Get card type i.e. Standard Capacity v2/v1x or High Capacity card. \n
+ * ('buffer' must refer to a value of type SDMMC_BLOCK_CARD_TYPE_t). \n\n
+ * SDMMC_BLOCK_MMC_GET_CSD: Get Card's Specific Data register. \n ('buffer' must refer to a value of type SDMMC_BLOCK_SDV2_CSD_t). \n\n
+ * SDMMC_BLOCK_MMC_GET_CID: Get Card's Identification Number. \n ('buffer' must refer to a value of type SDMMC_BLOCK_CID_t). \n\n
+ * SDMMC_BLOCK_MMC_GET_OCR: Get Card's Operating Condition Register \n ('buffer' must refer to a uint32_t). \n\n
+ * SDMMC_BLOCK_MMC_GET_SDSTAT: Get SD bus status information. \n ('buffer' must refer to a uin8_t array of size 64 bytes) \n\n
+ * SDMMC_BLOCK_MMC_LOCK_CARD: Locks the card. \n ('buffer' must refer to a value of type SDMMC_BLOCK_PASSWORD_t). \n\n
+ * SDMMC_BLOCK_MMC_UNLOCK_CARD: Unlocks the card. \n ('buffer' must refer to a value of type SDMMC_BLOCK_PASSWORD_t). \n\n
+ * SDMMC_BLOCK_MMC_SET_PASSWD: Set/replace the password. \n ('buffer' must refer to a value of type SDMMC_BLOCK_PASSWORD_t). \n\n
+ * SDMMC_BLOCK_MMC_CLEAR_PASSWD: Clear the password. \n ('buffer' must refer to a value of type SDMMC_BLOCK_PASSWORD_t). \n\n
+ * SDMMC_BLOCK_MMC_SET_LOCK: Sets the password and locks the card in the same power cycle. \n ('buffer' must refer to a value of type SDMMC_BLOCK_PASSWORD_t). \n\n
+ * SDMMC_BLOCK_MMC_READ_LOCK_STATUS: Reads the current lock status of the card. \n ('buffer' must refer to a value of type SDMMC_BLOCK_CARD_LOCK_STATUS_t). \n\n
+ * SDMMC_BLOCK_MMC_FORCE_ERASE: Force erase the password. It is useful when user forgets the password. \n ('buffer' is NULL). \n\n
+ *
+ *
+ * Example Usage1:
+ * The example initializes the card. If initialization is successful the control then checks for the lock_status.
+ * For a card without any password, the program should indicate that the card is not locked. Then a password of length
+ * 6 is set and the card is locked with the configured password. The lock status is then checked to ensure that it is
+ * locked. Post this operation, the card is unlocked. If the unlock operation is successful, the card should
+ * indicate so. The password is then cleared.
+ * @code
+ * #include //Declarations from DAVE Code Generation (includes SFR declaration)
+ *
+ * SDMMC_BLOCK_PASSWORD_t password =
+ * {
+ * .old_pwd_len = 6U,
+ * .old_pwd = {'p', 'a', 's', 's', 'w', 'd'},
+ * };
+ *
+ * int main(void)
+ * {
+ * DAVE_STATUS_t status;
+ * SDMMC_BLOCK_STATUS_t sdmmc_status;
+ * SDMMC_BLOCK_CARD_LOCK_STATUS_t lock_status;
+ *
+ * status = DAVE_Init(); // Initialization of DAVE APPs
+ *
+ * sdmmc_status = SDMMC_BLOCK_Initialize(&SDMMC_BLOCK_0);
+ *
+ * if (sdmmc_status == SDMMC_BLOCK_STATUS_SUCCESS)
+ * {
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_MMC_READ_LOCK_STATUS, &lock_status);
+ *
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_MMC_SET_PASSWD, &password);
+ *
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_MMC_LOCK_CARD, &password);
+ *
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_MMC_READ_LOCK_STATUS, &lock_status);
+ *
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_MMC_UNLOCK_CARD, &password);
+ *
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_MMC_READ_LOCK_STATUS, &lock_status);
+ *
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_MMC_CLEAR_PASSWD, &password);
+ * }
+ *
+ * if(status == DAVE_STATUS_FAILURE)
+ * {
+ * // Placeholder for error handler code. The while loop below can be replaced with an user error handler.
+ * XMC_DEBUG("DAVE APPs initialization failed\n");
+ *
+ * while(1U)
+ * {
+ *
+ * }
+ * }
+ *
+ * // Placeholder for user application code. The while loop below can be replaced with user application code.
+ * while(1U)
+ * {
+ *
+ * }
+ * }
+ * @endcode
+ *
+ * Example Usage2:
+ * This example demonstrates the procedure to change the existing password of the card and then performs a force erase
+ * of the card.
+ * @code
+ * #include //Declarations from DAVE Code Generation (includes SFR declaration)
+ * #include
+ * SDMMC_BLOCK_PASSWORD_t password =
+ * {
+ * .old_pwd_len = 6U,
+ * .old_pwd = {'p', 'a', 's', 's', 'w', 'd'},
+ * .new_pwd_len = 6U,
+ * .new_pwd = {'s', 'e', 'c', 'r', 'e', 't'},
+ * };
+ *
+ * int main(void)
+ * {
+ * DAVE_STATUS_t status;
+ * SDMMC_BLOCK_STATUS_t sdmmc_status;
+ * SDMMC_BLOCK_CARD_LOCK_STATUS_t lock_status;
+ * uint8_t buffer;
+ *
+ * status = DAVE_Init(); /. Initialization of DAVE APPs
+ *
+ * sdmmc_status = SDMMC_BLOCK_Initialize(&SDMMC_BLOCK_0);
+ *
+ * if (sdmmc_status == SDMMC_BLOCK_STATUS_SUCCESS)
+ * {
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_MMC_READ_LOCK_STATUS, &lock_status);
+ *
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_MMC_SET_PASSWD, &password);
+ *
+ * // Set the old password value with the new one. SO that card can be locked with the password configured.
+ * memcpy(password.old_pwd, password.new_pwd, password.new_pwd_len);
+ * password.old_pwd_len = password.new_pwd_len;
+ * password.new_pwd_len = 0U;
+ *
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_MMC_LOCK_CARD, &password);
+ *
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_MMC_READ_LOCK_STATUS, &lock_status);
+ *
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_MMC_FORCE_ERASE, &buffer);
+ * }
+ *
+ * if(status == DAVE_STATUS_FAILURE)
+ * {
+ * // Placeholder for error handler code. The while loop below can be replaced with an user error handler.
+ * XMC_DEBUG("DAVE APPs initialization failed\n");
+ *
+ * while(1U)
+ * {
+ *
+ * }
+ * }
+ *
+ * // Placeholder for user application code. The while loop below can be replaced with user application code.
+ * while(1U)
+ * {
+ *
+ * }
+ * }
+ * @endcode
+ */
+SDMMC_BLOCK_STATUS_t SDMMC_BLOCK_Ioctl(SDMMC_BLOCK_t *const obj,
+ const uint8_t command,
+ void *buffer);
+
+#if SDMMC_BLOCK_SD_CARD_DETECTION_SUPPORT
+
+#ifdef SDMMC_BLOCK_SD
+
+ /**
+ * @brief Register a callback function
+ * @param obj A pointer to SDMMC_BLOCK_t, pointing to the SDMMC_BLOCK handle configuration
+ * @param cb A pointer to a function accepting ::SDMMC_BLOCK_SD_INTERRUPT_t and returning void
+ * @return SDMMC_BLOCK_STATUS_t: Status of callback function registration.\n
+ * SDMMC_BLOCK_STATUS_SUCCESS - On successful registration.\n
+ * SDMMC_BLOCK_STATUS_PARERR - If registration fails (invalid callback parameter).\n
+ *
+ * \parDescription:
+ * The function can be used to register a callback function to signal a card detection
+ * event. The microcontroller will generate interrupts for a card insertion and a card
+ * removal event. The callback can be used to signal these events.
+ *
+ * Example Usage:
+ * The following example registers a callback function for the card-detect events:
+ * card insertion and removal.
+ * @code
+ * #include
+ *
+ * volatile bool led_status = false;
+ *
+ * void card_detect_callback(SDMMC_BLOCK_SD_INTERRUPT_t card_ins)
+ * {
+ * if (card_ins == SDMMC_BLOCK_SD_INTERRUPT_CARD_INSERTION)
+ * {
+ * // Turn an LED on perhaps? Be sure to configure the LED first.
+ * led_status = true;
+ * }
+ * else
+ * {
+ * // Turn the LED off perhaps?
+ * led_status = false;
+ * }
+ * }
+ *
+ * int main(void)
+ * {
+ * DAVE_STATUS_t status;
+ * SDMMC_BLOCK_STATUS_t sdmmc_status;
+ * SDMMC_BLOCK_CARD_LOCK_STATUS_t lock_status;
+ *
+ * // Register the callback now
+ * sdmmc_status = SDMMC_BLOCK_RegisterCallback(&SDMMC_BLOCK_0, card_detect_callback);
+ *
+ * status = DAVE_Init(); // SDMMC_BLOCK_Init() is called from DAVE_Init()
+ *
+ * sdmmc_status = SDMMC_BLOCK_Initialize(&SDMMC_BLOCK_0);
+ * if (sdmmc_status == SDMMC_BLOCK_STATUS_SUCCESS)
+ * {
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_MMC_READ_LOCK_STATUS, &lock_status);
+ * }
+ *
+ * // Placeholder for user application code.
+ * while(1U)
+ * {
+ * }
+ * }
+ * @endcode
+ */
+SDMMC_BLOCK_STATUS_t SDMMC_BLOCK_RegisterCallback(SDMMC_BLOCK_t *const obj,
+ void (*cb)(SDMMC_BLOCK_SD_INTERRUPT_t));
+
+#endif /* #ifdef SDMMC_BLOCK_SD */
+
+#endif /* #if SDMMC_BLOCK_SD_CARD_DETECTION_SUPPORT */
+
+/**
+ * @}
+ */
+
+/* Support for C++ */
+#ifdef __cplusplus
+}
+#endif
+
+#include "sdmmc_block_extern.h"
+
+#endif /* SDMMC_BLOCK_H */
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/Libraries/FatFS/SDMMC_BLOCK/sdmmc_block_conf.c b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/Libraries/FatFS/SDMMC_BLOCK/sdmmc_block_conf.c
new file mode 100644
index 00000000..4ecfedee
--- /dev/null
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/Libraries/FatFS/SDMMC_BLOCK/sdmmc_block_conf.c
@@ -0,0 +1,326 @@
+/*********************************************************************************************************************
+* DAVE APP Name : SDMMC_BLOCK APP Version: 4.0.22
+*
+* NOTE:
+* This file is generated by DAVE. Any manual modification done to this file will be lost when the code is regenerated.
+*********************************************************************************************************************/
+
+/**
+ * @cond
+ ***********************************************************************************************************************
+ * Copyright (c) 2016, Infineon Technologies AG
+ * 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 the copyright holders nor the names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY,OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes
+ * with Infineon Technologies AG (dave@infineon.com).
+ ***********************************************************************************************************************
+ *
+ * Change History
+ * --------------
+ *
+ * 2016-01-20:
+ * - Initial version
+ *
+ * 2016-02-05:
+ * - RTOS support added
+ *
+ * 2016-04-05:
+ * - MISRA fixes.
+ * - Bug fixes done for PR.
+ *
+ * 2016-04-05:
+ * - Code genration fix for XMC4300 device.
+ *
+ * @endcond
+ */
+
+/***********************************************************************************************************************
+ * HEADER FILES
+ **********************************************************************************************************************/
+
+#include "sdmmc_block.h"
+
+/**********************************************************************************************************************
+ * LOCAL ROUTINES
+ **********************************************************************************************************************/
+
+/* SDMMC_BLOCK configuration initialization */
+static void SDMMC_BLOCK_0_Config_Init(void);
+
+
+/**********************************************************************************************************************
+ * EXTERNAL REFERENCES
+ **********************************************************************************************************************/
+
+extern SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_ErrorInterruptHandler(SDMMC_BLOCK_t *const obj,
+ uint16_t int_status);
+
+extern SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_NormalInterruptHandler(SDMMC_BLOCK_t *const obj,
+ uint16_t int_status);
+
+
+/**********************************************************************************************************************
+ * GLOBAL VARIABLES
+ **********************************************************************************************************************/
+
+volatile uint16_t normal_int_status; /* Normal interrupt status */
+volatile uint16_t err_int_status; /* Error interrupt status */
+
+
+/**********************************************************************************************************************
+ * DATA STRUCTURES
+ **********************************************************************************************************************/
+
+
+/* SDMMC_BLOCK Data 0 pin config */
+const SDMMC_BLOCK_GPIO_CONFIG_t SDMMC_BLOCK_0_DATA_0_PIN_CONFIG =
+{
+ .config =
+ {
+ .mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL,
+ .output_strength = XMC_GPIO_OUTPUT_STRENGTH_STRONG_MEDIUM_EDGE,
+ .output_level = XMC_GPIO_OUTPUT_LEVEL_LOW,
+ },
+ .hw_control = XMC_GPIO_HWCTRL_PERIPHERAL1,
+};
+
+/* SDMMC_BLOCK Data 0 pin */
+const SDMMC_BLOCK_PIN_CONFIG_t SDMMC_BLOCK_0_DATA_0 =
+{
+ .port = (XMC_GPIO_PORT_t *)PORT4_BASE,
+ .pin = (uint8_t)0,
+ .config = &SDMMC_BLOCK_0_DATA_0_PIN_CONFIG
+};
+
+
+/* SDMMC_BLOCK Data 1 pin config */
+const SDMMC_BLOCK_GPIO_CONFIG_t SDMMC_BLOCK_0_DATA_1_PIN_CONFIG =
+{
+ .config =
+ {
+ .mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL,
+ .output_strength = XMC_GPIO_OUTPUT_STRENGTH_STRONG_MEDIUM_EDGE,
+ .output_level = XMC_GPIO_OUTPUT_LEVEL_LOW,
+ },
+ .hw_control = XMC_GPIO_HWCTRL_PERIPHERAL1,
+};
+
+/* SDMMC_BLOCK Data 1 pin */
+const SDMMC_BLOCK_PIN_CONFIG_t SDMMC_BLOCK_0_DATA_1 =
+{
+ .port = (XMC_GPIO_PORT_t *)PORT1_BASE,
+ .pin = (uint8_t)6,
+ .config = &SDMMC_BLOCK_0_DATA_1_PIN_CONFIG
+};
+
+
+/* SDMMC_BLOCK Data 2 pin config */
+const SDMMC_BLOCK_GPIO_CONFIG_t SDMMC_BLOCK_0_DATA_2_PIN_CONFIG =
+{
+ .config =
+ {
+ .mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL,
+ .output_strength = XMC_GPIO_OUTPUT_STRENGTH_STRONG_MEDIUM_EDGE,
+ .output_level = XMC_GPIO_OUTPUT_LEVEL_LOW,
+ },
+ .hw_control = XMC_GPIO_HWCTRL_PERIPHERAL1,
+};
+
+/* SDMMC_BLOCK Data 2 pin */
+const SDMMC_BLOCK_PIN_CONFIG_t SDMMC_BLOCK_0_DATA_2 =
+{
+ .port = (XMC_GPIO_PORT_t *)PORT1_BASE,
+ .pin = (uint8_t)7,
+ .config = &SDMMC_BLOCK_0_DATA_2_PIN_CONFIG
+};
+
+
+/* SDMMC_BLOCK Data 3 pin config */
+const SDMMC_BLOCK_GPIO_CONFIG_t SDMMC_BLOCK_0_DATA_3_PIN_CONFIG =
+{
+ .config =
+ {
+ .mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL,
+ .output_strength = XMC_GPIO_OUTPUT_STRENGTH_STRONG_MEDIUM_EDGE,
+ .output_level = XMC_GPIO_OUTPUT_LEVEL_LOW,
+ },
+ .hw_control = XMC_GPIO_HWCTRL_PERIPHERAL1,
+};
+
+/* SDMMC_BLOCK Data 3 pin */
+const SDMMC_BLOCK_PIN_CONFIG_t SDMMC_BLOCK_0_DATA_3 =
+{
+ .port = (XMC_GPIO_PORT_t *)PORT4_BASE,
+ .pin = (uint8_t)1,
+ .config = &SDMMC_BLOCK_0_DATA_3_PIN_CONFIG
+};
+
+
+/* SDMMC_BLOCK Command pin config */
+const SDMMC_BLOCK_GPIO_CONFIG_t SDMMC_BLOCK_0_COMMAND_PIN_CONFIG =
+{
+ .config =
+ {
+ .mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL,
+ .output_strength = XMC_GPIO_OUTPUT_STRENGTH_STRONG_MEDIUM_EDGE,
+ .output_level = XMC_GPIO_OUTPUT_LEVEL_LOW,
+ },
+ .hw_control = XMC_GPIO_HWCTRL_PERIPHERAL1,
+};
+
+/* SDMMC_BLOCK Command pin */
+const SDMMC_BLOCK_PIN_CONFIG_t SDMMC_BLOCK_0_COMMAND =
+{
+ .port = (XMC_GPIO_PORT_t *)PORT3_BASE,
+ .pin = (uint8_t)5,
+ .config = &SDMMC_BLOCK_0_COMMAND_PIN_CONFIG
+};
+
+
+/* SDMMC_BLOCK Clock pin config */
+const SDMMC_BLOCK_GPIO_CONFIG_t SDMMC_BLOCK_0_CLK_PIN_CONFIG =
+{
+ .config =
+ {
+ .mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL,
+ .output_strength = XMC_GPIO_OUTPUT_STRENGTH_STRONG_MEDIUM_EDGE,
+ .output_level = XMC_GPIO_OUTPUT_LEVEL_LOW,
+ },
+ .hw_control = XMC_GPIO_HWCTRL_PERIPHERAL1,
+};
+
+/* SDMMC_BLOCK Clock pin */
+const SDMMC_BLOCK_PIN_CONFIG_t SDMMC_BLOCK_0_CLK =
+{
+ .port = (XMC_GPIO_PORT_t *)PORT3_BASE,
+ .pin = (uint8_t)6,
+ .config = &SDMMC_BLOCK_0_CLK_PIN_CONFIG
+};
+
+
+/* SDMMC SD mode instance */
+SDMMC_BLOCK_SD_t SDMMC_BLOCK_0_SD =
+{
+ .sdmmc = XMC_SDMMC, /* SDMMC instance */
+ .int_priority = 63U, /* Node interrupt priority */
+ .int_sub_priority = 0U, /* Node interrupt sub-priority */
+ .mode_init_flag = false, /* Mode initialization false by default */
+};
+
+/* SDMMC_BLOCK APP instance */
+SDMMC_BLOCK_t SDMMC_BLOCK_0 =
+{
+ .interface_mode = SDMMC_BLOCK_CARD_INTERFACE_SD, /* SD interface */
+ .sdmmc_sd = &SDMMC_BLOCK_0_SD, /* SDMMC_SD instance */
+ .rtos_mode = SDMMC_BLOCK_RTOS_MODE_DISABLED, /* RTOS mose is not used */
+
+ #if SDMMC_BLOCK_RTOS_MODE_SELECT
+ .cmsis_rtos = NULL, /* RTOS mose is not used */
+ #endif /* SDMMC_BLOCK_RTOS_MODE_SELECT */
+
+ .init_pins = SDMMC_BLOCK_0_Config_Init, /* true: Initialized; false: Uninitialized */
+ .init_flag = false, /* true: Initialized; false: Uninitialized */
+ .card_state = ((uint8_t)SDMMC_BLOCK_CARD_STATE_NOT_INITIALIZED |
+ (uint8_t)SDMMC_BLOCK_CARD_STATE_NO_CARD) /* Card state */
+};
+
+/**********************************************************************************************************************
+ * FUNCTION DEFINITIONS
+ **********************************************************************************************************************/
+
+/* SDMMC SD interrupt handler */
+void SDMMC0_0_IRQHandler(void)
+{
+ normal_int_status = SDMMC_BLOCK_0.sdmmc_sd->sdmmc->INT_STATUS_NORM;
+ err_int_status = SDMMC_BLOCK_0.sdmmc_sd->sdmmc->INT_STATUS_ERR;
+
+ if (normal_int_status & SDMMC_INT_STATUS_NORM_ERR_INT_Msk)
+ {
+ SDMMC_BLOCK_SD_ErrorInterruptHandler(&SDMMC_BLOCK_0, err_int_status);
+ }
+
+ if (normal_int_status & SDMMC_BLOCK_NORMAL_INT_STATUS_BITS)
+ {
+ SDMMC_BLOCK_SD_NormalInterruptHandler(&SDMMC_BLOCK_0, normal_int_status);
+ }
+}
+
+/*
+ * Configuration initialization:
+ * For pins and other mode specific settings
+ */
+static void SDMMC_BLOCK_0_Config_Init(void)
+{
+ /* Enable delay on command and data lines */
+ XMC_SDMMC_EnableDelayCmdDatLines();
+
+ /* Set the delay value chosen in the APP user interface */
+ XMC_SDMMC_SetDelay(SDMMC_BLOCK_SD_NUM_DELAY_ELEMENTS);
+
+ XMC_GPIO_Init(SDMMC_BLOCK_0_COMMAND.port,
+ SDMMC_BLOCK_0_COMMAND.pin,
+ &SDMMC_BLOCK_0_COMMAND.config->config);
+ XMC_GPIO_SetHardwareControl(SDMMC_BLOCK_0_COMMAND.port,
+ SDMMC_BLOCK_0_COMMAND.pin,
+ SDMMC_BLOCK_0_COMMAND.config->hw_control);
+
+ XMC_GPIO_Init(SDMMC_BLOCK_0_CLK.port,
+ SDMMC_BLOCK_0_CLK.pin,
+ &SDMMC_BLOCK_0_CLK.config->config);
+ XMC_GPIO_SetHardwareControl(SDMMC_BLOCK_0_CLK.port,
+ SDMMC_BLOCK_0_CLK.pin,
+ SDMMC_BLOCK_0_CLK.config->hw_control);
+
+ XMC_GPIO_Init(SDMMC_BLOCK_0_DATA_0.port,
+ SDMMC_BLOCK_0_DATA_0.pin,
+ &SDMMC_BLOCK_0_DATA_0.config->config);
+ XMC_GPIO_SetHardwareControl(SDMMC_BLOCK_0_DATA_0.port,
+ SDMMC_BLOCK_0_DATA_0.pin,
+ SDMMC_BLOCK_0_DATA_0.config->hw_control);
+
+ XMC_GPIO_Init(SDMMC_BLOCK_0_DATA_1.port,
+ SDMMC_BLOCK_0_DATA_1.pin,
+ &SDMMC_BLOCK_0_DATA_1.config->config);
+ XMC_GPIO_SetHardwareControl(SDMMC_BLOCK_0_DATA_1.port,
+ SDMMC_BLOCK_0_DATA_1.pin,
+ SDMMC_BLOCK_0_DATA_1.config->hw_control);
+
+ XMC_GPIO_Init(SDMMC_BLOCK_0_DATA_2.port,
+ SDMMC_BLOCK_0_DATA_2.pin,
+ &SDMMC_BLOCK_0_DATA_2.config->config);
+ XMC_GPIO_SetHardwareControl(SDMMC_BLOCK_0_DATA_2.port,
+ SDMMC_BLOCK_0_DATA_2.pin,
+ SDMMC_BLOCK_0_DATA_2.config->hw_control);
+
+ XMC_GPIO_Init(SDMMC_BLOCK_0_DATA_3.port,
+ SDMMC_BLOCK_0_DATA_3.pin,
+ &SDMMC_BLOCK_0_DATA_3.config->config);
+ XMC_GPIO_SetHardwareControl(SDMMC_BLOCK_0_DATA_3.port,
+ SDMMC_BLOCK_0_DATA_3.pin,
+ SDMMC_BLOCK_0_DATA_3.config->hw_control);
+
+ XMC_SDMMC_SetCardDetectionSource(XMC_SDMMC, XMC_SDMMC_CD_SOURCE_SW);
+ XMC_SDMMC_SetCardDetectionStatus(XMC_SDMMC, XMC_SDMMC_CD_STATUS_INSERTED);
+}
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/Libraries/FatFS/SDMMC_BLOCK/sdmmc_block_conf.h b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/Libraries/FatFS/SDMMC_BLOCK/sdmmc_block_conf.h
new file mode 100644
index 00000000..9380ae74
--- /dev/null
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/Libraries/FatFS/SDMMC_BLOCK/sdmmc_block_conf.h
@@ -0,0 +1,82 @@
+/*********************************************************************************************************************
+* DAVE APP Name : SDMMC_BLOCK APP Version: 4.0.22
+*
+* NOTE:
+* This file is generated by DAVE. Any manual modification done to this file will be lost when the code is regenerated.
+*********************************************************************************************************************/
+
+/**
+ * @cond
+ ***********************************************************************************************************************
+ * Copyright (c) 2016, Infineon Technologies AG
+ * 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 the copyright holders nor the names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY,OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes
+ * with Infineon Technologies AG (dave@infineon.com).
+ ***********************************************************************************************************************
+ *
+ * Change History
+ * --------------
+ *
+ * 2016-01-20:
+ * - Initial version
+ *
+ * 2016-02-05:
+ * - RTOS support added
+ *
+ * 2016-04-05:
+ * - Bug fixes done for PR.
+ *
+ * @endcond
+ */
+
+#ifndef SDMMC_BLOCK_CONF_H
+#define SDMMC_BLOCK_CONF_H
+
+
+
+/***********************************************************************************************************************
+ * HEADER FILES
+ **********************************************************************************************************************/
+
+#include "xmc_scu.h"
+#include "xmc_sdmmc.h"
+
+
+/**********************************************************************************************************************
+ * MACROS
+ **********************************************************************************************************************/
+
+#define SDMMC_BLOCK_MAJOR_VERSION (4U) /**< Major version */
+#define SDMMC_BLOCK_MINOR_VERSION (0U) /**< Minor version */
+#define SDMMC_BLOCK_PATCH_VERSION (22U) /**< Patch version */
+
+#define SDMMC_BLOCK_SD
+#define SDMMC_BLOCK_SD_NUM_DELAY_ELEMENTS (8U)
+#define SDMMC_BLOCK_SD_SUPPORT_4_BUS_WIDTH (1U)
+#define SDMMC_BLOCK_RTOS_MODE_SELECT (0U)
+
+/* Added configurable to support polling mode operation instead of interrupt driven. */
+#define SDMMC_BLOCK_POLLING_MODE (1U)
+
+#endif /* ifndef SDMMC_BLOCK_CONF_H */
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/Libraries/FatFS/SDMMC_BLOCK/sdmmc_block_extern.h b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/Libraries/FatFS/SDMMC_BLOCK/sdmmc_block_extern.h
new file mode 100644
index 00000000..5fb8d1c6
--- /dev/null
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/Libraries/FatFS/SDMMC_BLOCK/sdmmc_block_extern.h
@@ -0,0 +1,79 @@
+/*********************************************************************************************************************
+* DAVE APP Name : SDMMC_BLOCK APP Version: 4.0.22
+*
+* NOTE:
+* This file is generated by DAVE. Any manual modification done to this file will be lost when the code is regenerated.
+*********************************************************************************************************************/
+
+/**
+ * @cond
+ ***********************************************************************************************************************
+ * Copyright (c) 2016, Infineon Technologies AG
+ * 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 the copyright holders nor the names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY,OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes
+ * with Infineon Technologies AG (dave@infineon.com).
+ ***********************************************************************************************************************
+ *
+ * Change History
+ * --------------
+ *
+ * 2016-01-20:
+ * - Initial version
+ *
+ * 2016-02-05:
+ * - RTOS support added
+ *
+ * 2016-04-05:
+ * - Test hooks is added to emulates the hardware failures.
+ * - Bug fixes done for PR.
+ *
+ * 2016-06-07:
+ * - Fixed code generation error for project folder paths with spaces in between.
+ * @endcond
+ */
+
+#ifndef SDMMC_BLOCK_EXTERN_H
+#define SDMMC_BLOCK_EXTERN_H
+
+/***********************************************************************************************************************
+ * HEADER FILES
+ **********************************************************************************************************************/
+
+/**********************************************************************************************************************
+ * MACROS
+ **********************************************************************************************************************/
+
+/***********************************************************************************************************************
+ * EXTERN DECLARATIONS
+ ***********************************************************************************************************************/
+
+extern SDMMC_BLOCK_t SDMMC_BLOCK_0;
+
+#ifdef SDMMC_BLOCK_TEST_HOOK_ENABLE
+extern uint32_t sdmmc_block_test_hook_expected_command;
+#endif
+
+
+
+#endif /* ifndef SDMMC_BLOCK_EXTERN_H */
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/Libraries/FatFS/SDMMC_BLOCK/sdmmc_block_private_sd.c b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/Libraries/FatFS/SDMMC_BLOCK/sdmmc_block_private_sd.c
new file mode 100644
index 00000000..af860567
--- /dev/null
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/Libraries/FatFS/SDMMC_BLOCK/sdmmc_block_private_sd.c
@@ -0,0 +1,2911 @@
+/**
+ * @file sdmmc_block_private_sd.c
+ * @date 2017-06-08
+ *
+ * NOTE:
+ * This file is generated by DAVE. Any manual modification done to this file will be lost when the code is regenerated.
+ *
+ * @cond
+ ***********************************************************************************************************************
+ * SDMMC_BLOCK v4.0.22 - Configures the SD host to interface with the SDMMC card.
+ *
+ * Copyright (c) 2016-2017, Infineon Technologies AG
+ * 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 the copyright holders nor the names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY,OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes
+ * with Infineon Technologies AG (dave@infineon.com).
+ ***********************************************************************************************************************
+ *
+ * Change History
+ * --------------
+ *
+ * 2016-01-20:
+ * - Initial version.
+ *
+ * 2016-02-08:
+ * - Help Doc updated.
+ * - Bug fixes done.
+ *
+ * 2016-04-05
+ * - Bug fixes for public release, April, 2016
+ * - MISRA fixes
+ * - Add timeout for erase()
+ * - Check write protection in write/erase conditions
+ * - Remove mode_init_flag check for functions invoked in IOCTL
+ *
+ * 2016-07-20:
+ * - lReadResponse(): Fixes in handling XMC_SDMMC_RESPONSE_TYPE_R2
+ *
+ * 2016-08-24:
+ * - Introduce timeout mechanism in SDMMC_BLOCK_SD_lCheckDataCommandLines()
+ *
+ * 2017-06-08
+ * - Fix SDMMC_BLOCK_SD_GetSectorCount() for Standard Capacity cards
+ *
+ * @endcond
+ *
+ */
+
+#include "sdmmc_block_private_sd.h"
+#include "boot.h"
+
+
+#ifdef SDMMC_BLOCK_SD
+
+
+/***********************************************************************************************************************
+ * EXTERNAL ROUTINES
+ **********************************************************************************************************************/
+extern void SDMMC0_0_IRQHandler(void);
+
+
+/***********************************************************************************************************************
+ * LOCAL ROUTINES
+ **********************************************************************************************************************/
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lReset(SDMMC_BLOCK_t *const obj, uint32_t reset);
+
+static void
+SDMMC_BLOCK_SD_lCardCleanUp(SDMMC_BLOCK_t *const obj);
+
+static uint32_t
+SDMMC_BLOCK_SD_lCheckDataCommandLines(SDMMC_BLOCK_t *const obj,
+ const XMC_SDMMC_COMMAND_t *cmd);
+
+static void
+SDMMC_BLOCK_SD_lCheckArgumentError(const uint32_t *card_status, uint8_t *err);
+
+static void
+SDMMC_BLOCK_SD_lCheckEraseError(const uint32_t *card_status, uint8_t *err);
+
+static void
+SDMMC_BLOCK_SD_lCheckCardError(const uint32_t *card_status, uint8_t *err);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lCheckErrorInResponse(const uint32_t *card_status);
+
+static void
+SDMMC_BLOCK_SD_lGetCardLockState(SDMMC_BLOCK_t *const obj, uint32_t card_status, uint16_t cmd_index);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lTransferDelay(SDMMC_BLOCK_t *const obj, uint32_t delay);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lReadResponse(SDMMC_BLOCK_t *const obj,
+ const XMC_SDMMC_COMMAND_t *cmd,
+ XMC_SDMMC_RESPONSE_TYPE_t resp_type,
+ void *resp);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lSendCommand(SDMMC_BLOCK_t *const obj,
+ const XMC_SDMMC_COMMAND_t *cmd,
+ uint32_t arg,
+ XMC_SDMMC_RESPONSE_TYPE_t resp_type,
+ void *resp);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lSetVoltageWindow(SDMMC_BLOCK_t *const obj);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lQueryOperatingCondition(SDMMC_BLOCK_t *const obj);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lQueryVoltage(SDMMC_BLOCK_t *const obj, uint32_t arg);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lAfterCardInitialize(SDMMC_BLOCK_t *const obj);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lInitializeCard(SDMMC_BLOCK_t *const obj);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lGetWriteProtect(SDMMC_BLOCK_t *const obj);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lConfigureSingleBlockTransfer(SDMMC_BLOCK_t *const obj,
+ const XMC_SDMMC_COMMAND_t *cmd,
+ uint32_t arg,
+ uint16_t block_size);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lMultiBlockTransfer(SDMMC_BLOCK_t *const obj,
+ uint32_t *addr,
+ uint32_t num_blocks,
+ const XMC_SDMMC_COMMAND_t *cmd,
+ uint32_t *buf,
+ SDMMC_BLOCK_SD_DATA_TRANSFER_t transfer_mode);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lCheckLockStatus(SDMMC_BLOCK_t *const obj, SDMMC_BLOCK_CARD_LOCK_STATUS_t mode);
+
+#if SDMMC_BLOCK_SD_SUPPORT_4_BUS_WIDTH
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lSwitchBusWidth(SDMMC_BLOCK_t *const obj);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lSwitchSpeed(SDMMC_BLOCK_t *const obj);
+#endif
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lCommandDelay(SDMMC_BLOCK_t *const obj, uint32_t delay);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lSwitchToTransferState(SDMMC_BLOCK_t *const obj);
+
+static void
+SDMMC_BLOCK_SD_lAcmdErrorRecovery(SDMMC_BLOCK_t *const obj);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lCheckSectorBound(SDMMC_BLOCK_t *const obj,
+ uint32_t sector_num,
+ uint32_t sector_count);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lLocalErase(SDMMC_BLOCK_t *const obj,
+ uint32_t start_addr,
+ uint32_t end_addr,
+ uint32_t timeout);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lHostControllerInit(SDMMC_BLOCK_t *const obj);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lHostControllerDeInit(SDMMC_BLOCK_t *const obj);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lCardReadMultipleBlocks(SDMMC_BLOCK_t *const obj,
+ uint32_t *read_buf,
+ uint32_t read_addr,
+ uint32_t num_blocks);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lCardReadSingleBlock(SDMMC_BLOCK_t *const obj,
+ uint32_t *read_buf,
+ uint32_t read_addr);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lCardWriteMultipleBlocks(SDMMC_BLOCK_t *const obj,
+ const uint32_t *write_buf,
+ uint32_t write_addr,
+ uint32_t num_blocks);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lCardWriteSingleBlock(SDMMC_BLOCK_t *const obj,
+ const uint32_t *write_buf,
+ uint32_t write_addr);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lDelay(SDMMC_BLOCK_t *const obj, uint32_t delay);
+
+static void
+SDMMC_BLOCK_SD_lWriteCardType(SDMMC_BLOCK_t *const obj);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lReadRca(SDMMC_BLOCK_t *const obj);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lReadCardRegisters(SDMMC_BLOCK_t *const obj);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lDataTransfer(SDMMC_BLOCK_t *const obj,
+ uint32_t *buf,
+ SDMMC_BLOCK_SD_DATA_TRANSFER_t transfer_mode,
+ uint32_t quad_bytes);
+
+
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lErrorInterruptRecovery(SDMMC_BLOCK_t *const obj);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lSingleBlockTransfer(SDMMC_BLOCK_t *const obj,
+ const XMC_SDMMC_COMMAND_t *cmd,
+ uint32_t arg,
+ uint16_t block_size,
+ uint32_t *buf,
+ SDMMC_BLOCK_SD_DATA_TRANSFER_t transfer_mode);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_Start(SDMMC_BLOCK_t *const obj);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_NormalInterruptHandler(SDMMC_BLOCK_t *const obj, uint16_t int_status);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_ErrorInterruptHandler(SDMMC_BLOCK_t *const obj, uint16_t int_status);
+
+/***********************************************************************************************************************
+ * MACROS
+ **********************************************************************************************************************/
+
+/***********************************************************************************************************************
+ * DATA STRUCTURES
+ **********************************************************************************************************************/
+
+/* Command Structure defining SD, MMC and Application specific commands */
+const XMC_SDMMC_COMMAND_t sdmmc_block_command[40] =
+{
+ /* Start: SD card commands */
+ {{0U, 0U, 0U, 0U, 0U, SDMMC_BLOCK_GO_IDLE_STATE}}, /* 0 */
+ {{1U, 1U, 0U, 0U, 0U, SDMMC_BLOCK_ALL_SEND_CID}}, /* 1 */
+ {{2U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_SEND_RELATIVE_ADDR}}, /* 2 */
+ {{0U, 0U, 0U, 0U, 0U, SDMMC_BLOCK_SET_DSR}}, /* 3 */
+ {{2U, 1U, 1U, 1U, 0U, SDMMC_BLOCK_SWITCH_FUNC}}, /* 4 */
+ {{3U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_SELECT_DESELECT_CARD}}, /* 5 */
+ {{2U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_SD_SEND_IF_COND}}, /* 6 */
+ {{1U, 1U, 0U, 0U, 0U, SDMMC_BLOCK_SEND_CSD}}, /* 7 */
+ {{1U, 1U, 0U, 0U, 0U, SDMMC_BLOCK_SEND_CID}}, /* 8 */
+ {{3U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_STOP_TRANSMISSION}}, /* 9 */
+ {{2U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_SEND_STATUS}}, /* 10 */
+ {{0U, 0U, 0U, 0U, 0U, SDMMC_BLOCK_GO_INACTIVE_STATE}}, /* 11 */
+ {{2U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_SET_BLOCKLEN}}, /* 12 */
+ {{2U, 1U, 1U, 1U, 0U, SDMMC_BLOCK_READ_SINGLE_BLOCK}}, /* 13 */
+ {{2U, 1U, 1U, 1U, 0U, SDMMC_BLOCK_READ_MULTIPLE_BLOCK}}, /* 14 */
+ {{2U, 1U, 1U, 1U, 0U, SDMMC_BLOCK_WRITE_BLOCK}}, /* 15 */
+ {{2U, 1U, 1U, 1U, 0U, SDMMC_BLOCK_WRITE_MULTIPLE_BLOCK}}, /* 16 */
+ {{2U, 1U, 1U, 1U, 0U, SDMMC_BLOCK_PROGRAM_CSD}}, /* 17 */
+ {{2U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_SET_WRITE_PROT}}, /* 18 */
+ {{2U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_CLR_WRITE_PROT}}, /* 19 */
+ {{2U, 1U, 1U, 1U, 0U, SDMMC_BLOCK_SEND_WRITE_PROT}}, /* 20 */
+ {{2U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_ERASE_WR_BLK_START}}, /* 21 */
+ {{2U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_ERASE_WR_BLK_END}}, /* 22 */
+ {{3U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_ERASE}}, /* 23 */
+ {{2U, 1U, 1U, 1U, 0U, SDMMC_BLOCK_LOCK_UNLOCK}}, /* 24 */
+ {{2U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_APP_CMD}}, /* 25 */
+ {{2U, 1U, 1U, 1U, 0U, SDMMC_BLOCK_GEN_CMD}}, /* 26 */
+ /* Start: application specific commands */
+ {{2U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_SET_BUS_WIDTH}}, /* 27 */
+ {{2U, 1U, 1U, 1U, 0U, SDMMC_BLOCK_SD_STATUS}}, /* 28 */
+ {{2U, 1U, 1U, 1U, 0U, SDMMC_BLOCK_SEND_NUM_WR_BLOCKS}}, /* 29 */
+ {{2U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_SET_WR_BLK_ERASE_COUNT}}, /* 30 */
+ {{2U, 0U, 0U, 0U, 0U, SDMMC_BLOCK_SD_SEND_OP_COND}}, /* 31 */
+ {{2U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_SET_CLR_CARD_DETECT}}, /* 32 */
+ {{2U, 1U, 1U, 1U, 0U, SDMMC_BLOCK_SEND_SCR}}, /* 33 */
+ /* Start of SDMMC_MMC Card specific commands */
+ {{2U, 0U, 1U, 0U, 0U, SDMMC_BLOCK_MMC_SEND_OP_COND}}, /* 34 */
+ {{3U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_MMC_SLEEP_AWAKE}}, /* 35 */
+ {{3U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_SWITCH_FUNC}}, /* 36 */
+ {{2U, 1U, 1U, 1U, 0U, SDMMC_BLOCK_MMC_SEND_EXT_CSD}}, /* 37 */
+ {{2U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_ERASE_GROUP_START}}, /* 38 */
+ {{2U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_ERASE_GROUP_END}} /* 39 */
+};
+
+/*
+ * SD card command index hash table
+ * It contains the index of the command structure
+ *
+ * Array index 0-57 is for general SD commands and array
+ * index 58-64 is for application specific commands.
+ */
+const uint8_t sdmmc_block_sd_hash_table[65] =
+{
+ (uint8_t)0x00, (uint8_t)0xFF, (uint8_t)0x01, (uint8_t)0x02,
+ (uint8_t)0x03, (uint8_t)0xFF, (uint8_t)0x04, (uint8_t)0x05,
+ (uint8_t)0x06, (uint8_t)0x07, (uint8_t)0x08, (uint8_t)0xFF,
+ (uint8_t)0x09, (uint8_t)0x0A, (uint8_t)0xFF, (uint8_t)0x0B,
+ (uint8_t)0x0C, (uint8_t)0x0D, (uint8_t)0x0E, (uint8_t)0xFF,
+ (uint8_t)0xFF, (uint8_t)0xFF, (uint8_t)0xFF, (uint8_t)0xFF,
+ (uint8_t)0x0F, (uint8_t)0x10, (uint8_t)0xFF, (uint8_t)0x11,
+ (uint8_t)0x12, (uint8_t)0x13, (uint8_t)0x14, (uint8_t)0xFF,
+ (uint8_t)0x15, (uint8_t)0x16, (uint8_t)0xFF, (uint8_t)0xFF,
+ (uint8_t)0xFF, (uint8_t)0xFF, (uint8_t)0x17, (uint8_t)0xFF,
+ (uint8_t)0xFF, (uint8_t)0xFF, (uint8_t)0x18, (uint8_t)0xFF,
+ (uint8_t)0xFF, (uint8_t)0xFF, (uint8_t)0xFF, (uint8_t)0xFF,
+ (uint8_t)0xFF, (uint8_t)0xFF, (uint8_t)0xFF, (uint8_t)0xFF,
+ (uint8_t)0xFF, (uint8_t)0xFF, (uint8_t)0xFF, (uint8_t)0x19,
+ (uint8_t)0x1A, (uint8_t)0xFF, (uint8_t)0x1B, (uint8_t)0x1C,
+ (uint8_t)0x1D, (uint8_t)0x1E, (uint8_t)0x1F, (uint8_t)0x20,
+ (uint8_t)0x21
+};
+
+/***********************************************************************************************************************
+ * EXTERNAL REFERENCES
+ **********************************************************************************************************************/
+
+/***********************************************************************************************************************
+ * API DEFINITIONS
+ **********************************************************************************************************************/
+
+/* Resets the Host Controller's register */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lReset(SDMMC_BLOCK_t *const obj, uint32_t reset)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ uint32_t timeoutTime;
+
+ XMC_SDMMC_SetSWReset(obj->sdmmc_sd->sdmmc, reset);
+
+ /* Set timeout time. */
+ timeoutTime = TimerGet() + (SDMMC_BLOCK_RESET_DELAY / 1000u) + 1u;
+
+ do
+ {
+ if (TimerGet() > timeoutTime)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_TIMEOUT_OCCURED;
+ break;
+ }
+ /* Service the watchdog. */
+ CopService();
+ }
+ while (((uint32_t)XMC_SDMMC_GetSWResetStatus(obj->sdmmc_sd->sdmmc)) & (reset));
+
+ return status;
+}
+
+/* Clears card specific structures and stops the SD clock */
+static void SDMMC_BLOCK_SD_lCardCleanUp(SDMMC_BLOCK_t *const obj)
+{
+ memset((void *)&obj->sdmmc_sd->card_info, 0, sizeof(SDMMC_BLOCK_SD_CARD_INFORMATION_t));
+ obj->card_type = (uint8_t)0;
+ obj->sdmmc_sd->f8 = (uint8_t)0;
+ obj->sdmmc_sd->cmd_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ obj->sdmmc_sd->data_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ obj->sdmmc_sd->err_recovery_stat = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ obj->sdmmc_sd->transfer_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ obj->card_state = (uint8_t)0U;
+
+ /* SD clock disable */
+ XMC_SDMMC_SDClockDisable(obj->sdmmc_sd->sdmmc);
+}
+
+/* Check if CMD and DAT lines are free before issuing a command */
+static uint32_t SDMMC_BLOCK_SD_lCheckDataCommandLines(SDMMC_BLOCK_t *const obj, const XMC_SDMMC_COMMAND_t *cmd)
+{
+ uint32_t status = (uint32_t)SDMMC_BLOCK_MODE_STATUS_CMD_LINE_BUSY;
+ uint32_t timeoutTime;
+
+ timeoutTime = TimerGet() + (SDMMC_BLOCK_DELAY_IN_COMMAND / 1000u) + 1u;
+
+ do
+ {
+ if (TimerGet() > timeoutTime)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_TIMEOUT_OCCURED;
+ break;
+ }
+ /* Service the watchdog. */
+ CopService();
+ } while ((XMC_SDMMC_IsDataLineBusy(obj->sdmmc_sd->sdmmc) ||
+ (XMC_SDMMC_IsCommandLineBusy(obj->sdmmc_sd->sdmmc))));
+
+ /* Check if command line is not busy; then proceed */
+ if (XMC_SDMMC_IsCommandLineBusy(obj->sdmmc_sd->sdmmc) == false)
+ {
+ status = (uint32_t)SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ if (((uint32_t)cmd->dat_present_sel == (uint32_t)1U) ||
+ ((uint32_t)cmd->cmd_index == (uint32_t)SDMMC_BLOCK_SEND_STATUS) ||
+ ((uint32_t)cmd->response_type_sel == (uint32_t)3U))
+ {
+ if (XMC_SDMMC_IsDataLineBusy(obj->sdmmc_sd->sdmmc) != false)
+ {
+ status = (uint32_t)SDMMC_BLOCK_MODE_STATUS_DATA_LINE_BUSY;
+ }
+ else
+ {
+ if (((uint32_t)cmd->dat_present_sel == (uint32_t)1U) || ((uint32_t)cmd->response_type_sel == (uint32_t)3U))
+ {
+ /* Update data line state to active */
+ obj->card_state |= (uint8_t)SDMMC_BLOCK_CARD_STATE_DATA_ACTIVE;
+ }
+ }
+ }
+
+ if (status == (uint32_t)SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Update command line state to active */
+ obj->card_state |= (uint8_t)SDMMC_BLOCK_CARD_STATE_CMD_ACTIVE;
+ }
+ }
+
+ return status;
+}
+
+/* Check response error types in command's arguments category */
+static void SDMMC_BLOCK_SD_lCheckArgumentError(const uint32_t *card_status, uint8_t *err)
+{
+ if ((*card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_OUT_OF_RANGE_BITMASK) != (uint32_t)0U)
+ {
+ *err = (uint8_t)1U;
+ XMC_DEBUG("SDMMC_BLOCK_SD_CheckArgumentError: Out of range error");
+ }
+
+ if ((*card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_ADDRESS_ERROR_BITMASK) != (uint32_t)0U)
+ {
+ *err = (uint8_t)1U;
+ XMC_DEBUG("SDMMC_BLOCK_SD_CheckArgumentError: Address error");
+ }
+
+ if ((*card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_BLOCK_LEN_ERROR_BITMASK) != (uint32_t)0U)
+ {
+ *err = (uint8_t)1U;
+ XMC_DEBUG("SDMMC_BLOCK_SD_CheckArgumentError: Block length error");
+ }
+
+ if ((*card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_WP_VIOLATION_BITMASK) != (uint32_t)0U)
+ {
+ *err = (uint8_t)1U;
+ XMC_DEBUG("SDMMC_BLOCK_SD_CheckArgumentError: Write protection violation error");
+ }
+}
+
+/* Checks response error types in erase category */
+static void SDMMC_BLOCK_SD_lCheckEraseError(const uint32_t *card_status, uint8_t *err)
+{
+ /* An error in the sequence of erase commands occurred.*/
+ if ((*card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_ERASE_SEQ_ERROR_BITMASK) != (uint32_t)0)
+ {
+ *err = (uint8_t)1U;
+ XMC_DEBUG("SDMMC_BLOCK_SD_CheckEraseError: Sequential erase error");
+ }
+
+ /* An invalid selection of write-blocks for erase occurred */
+ if ((*card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_ERASE_PARAM_BITMASK) != (uint32_t)0)
+ {
+ *err = (uint8_t)1U;
+ XMC_DEBUG("SDMMC_BLOCK_SD_CheckEraseError: Parameter erase error");
+ }
+
+ /*
+ * Set when only partial address space was erased due to existing
+ * write protected blocks OR the temporary/permanent write protected card
+ * was erased
+ */
+ if ((*card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_WP_ERASE_SKIP_BITMASK) != (uint32_t)0)
+ {
+ *err = (uint8_t)1U;
+ XMC_DEBUG("SDMMC_BLOCK_SD_CheckEraseError: Write protection erase skip error");
+ }
+}
+
+/* Check response error types in card's internal error category */
+static void SDMMC_BLOCK_SD_lCheckCardError(const uint32_t *card_status, uint8_t *err)
+{
+ /* Card internal ECC was applied but failed to correct the data */
+ if ((*card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_CARD_ECC_FAILED_BITMASK) != (uint32_t)0U)
+ {
+ *err = (uint8_t)1U;
+ XMC_DEBUG("SDMMC_BLOCK_SD_CheckCardError: Card ECC error");
+ }
+
+ /* Internal card controller error */
+ if ((*card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_CC_ERROR_BITMASK) != (uint32_t)0)
+ {
+ *err = (uint8_t)1U;
+ XMC_DEBUG("SDMMC_BLOCK_SD_CheckCardError: Internal card controller error");
+ }
+
+ /* A general or an unknown error occurred during the operation */
+ if ((*card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_ERROR_BITMASK) != (uint32_t)0)
+ {
+ *err = (uint8_t)1U;
+ XMC_DEBUG("SDMMC_BLOCK_SD_CheckCardError: Unknown error");
+ }
+}
+
+/* Check for any error in the command's (received) response */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lCheckErrorInResponse(const uint32_t *card_status)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ uint8_t err = (uint8_t)0; /* No error */
+
+ /* Check errors in arguments */
+ SDMMC_BLOCK_SD_lCheckArgumentError(card_status, &err);
+
+ /* Check errors specific to erase operation */
+ SDMMC_BLOCK_SD_lCheckEraseError(card_status, &err);
+
+ /* Check errors specific to the card */
+ SDMMC_BLOCK_SD_lCheckCardError(card_status, &err);
+
+ /*
+ * Set when a sequence or password error has been detected in
+ * lock/unlock card command
+ */
+ if ((*card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_LOCK_UNLOCK_FAILED_BITMASK) != (uint32_t)0)
+ {
+ err = (uint8_t)1;
+ XMC_DEBUG("SDMMC_BLOCK_SD_CheckErrorInResponse: Lock/unlock error");
+ }
+
+ /*
+ * Can be one of the following errors:
+ * 1) The read only section of the CSD does not match the card content
+ * 2) An attempt to reverse the copy or permanent WP bits was made
+ */
+ if ((*card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_CSD_OVERWRITE_BITMASK) != (uint32_t)0)
+ {
+ err = (uint8_t)1;
+ XMC_DEBUG("SDMMC_BLOCK_SD_CheckErrorInResponse: CSD overwrite error");
+ }
+
+ /* Error in the sequence of the authentication process */
+ if ((*card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_ASK_SEQ_ERROR_BITMASK) != (uint32_t)0)
+ {
+ err = (uint8_t)1;
+ XMC_DEBUG("SDMMC_BLOCK_SD_CheckErrorInResponse: Authentication sequence error");
+ }
+
+ /* Some SD cards treat CMD55 as an illegal command */
+ if (err == 1U)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ }
+
+ return status;
+}
+
+/* Check for lock status of SD card */
+static void SDMMC_BLOCK_SD_lGetCardLockState(SDMMC_BLOCK_t *const obj, uint32_t card_status, uint16_t cmd_index)
+{
+ if (((card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_CARD_IS_LOCKED_BITMASK) != (uint32_t)0) &&
+ (cmd_index != (uint32_t)SDMMC_BLOCK_SEND_RELATIVE_ADDR))
+ {
+ obj->card_state |= (uint8_t)SDMMC_BLOCK_CARD_STATE_LOCKED;
+ }
+ else
+ {
+ obj->card_state &= (uint8_t)~(uint8_t)SDMMC_BLOCK_CARD_STATE_LOCKED;
+ }
+}
+
+/* Provide transfer delay */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lTransferDelay(SDMMC_BLOCK_t *const obj, uint32_t delay)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ uint32_t timeoutTime;
+ obj->sdmmc_sd->tmr_expire = (bool)1;
+
+ timeoutTime = TimerGet() + (delay / 1000u) + 1u;
+
+ do
+ {
+#if (SDMMC_BLOCK_POLLING_MODE > 0U)
+ /* Poll for interrupt events. */
+ SDMMC0_0_IRQHandler();
+#endif
+ if (TimerGet() > timeoutTime)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_TIMEOUT_OCCURED;
+ break;
+ }
+ /* Service the watchdog. */
+ CopService();
+ } while (obj->sdmmc_sd->isr_context.transfer_flag == (uint8_t)0U);
+
+ obj->sdmmc_sd->isr_context.transfer_flag = (uint8_t)0U;
+
+ if (obj->sdmmc_sd->transfer_int_err != SDMMC_BLOCK_MODE_STATUS_TRANSFER_COMPLETE)
+ {
+ status = (SDMMC_BLOCK_MODE_STATUS_t)obj->sdmmc_sd->data_int_err;
+ }
+
+ return status;
+}
+
+/* Read response received for the command issued */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lReadResponse(SDMMC_BLOCK_t *const obj,
+ const XMC_SDMMC_COMMAND_t *cmd,
+ XMC_SDMMC_RESPONSE_TYPE_t resp_type,
+ void *resp)
+{
+ uint32_t *ptr;
+ uint32_t card_status = 0U;
+ uint32_t err_status = 0U;
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ /* To mask high byte from response register */
+ uint32_t resp_high_mask = 0;
+
+ /* Check for no-response type commands */
+ if (((uint16_t)cmd->cmd_index == (uint16_t)SDMMC_BLOCK_GO_IDLE_STATE) ||
+ ((uint16_t)cmd->cmd_index == (uint16_t)SDMMC_BLOCK_GO_INACTIVE_STATE))
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ }
+ else
+ {
+ ptr = (uint32_t *)resp;
+ card_status = (uint32_t)obj->sdmmc_sd->sdmmc->RESPONSE[0];
+
+ /* Check Lock Status */
+ SDMMC_BLOCK_SD_lGetCardLockState(obj, card_status, (uint16_t)cmd->cmd_index);
+
+ /* Check response type */
+ switch (resp_type)
+ {
+ /* Response R1 */
+ case XMC_SDMMC_RESPONSE_TYPE_R1:
+ /* check the error bits in the response */
+ *ptr = card_status;
+ status = SDMMC_BLOCK_SD_lCheckErrorInResponse(&card_status);
+ break;
+
+ /* Response R1b */
+ case XMC_SDMMC_RESPONSE_TYPE_R1b:
+ *ptr = card_status;
+
+ status = SDMMC_BLOCK_SD_lCheckErrorInResponse(&card_status);
+ if (status != SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Wait for transfer complete interrupt */
+ status = SDMMC_BLOCK_SD_lTransferDelay(obj, (uint32_t)SDMMC_BLOCK_DELAY_IN_TRANSFER);
+ if (status != SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ XMC_DEBUG("SDMMC_BLOCK_ReadResponse: For R1b, SDMMC_BLOCK_TransferDelay failed");
+ }
+ }
+
+ break;
+
+ /* Response R2: response register R0-R7 */
+ case XMC_SDMMC_RESPONSE_TYPE_R2:
+ *ptr = (uint32_t)((uint32_t)XMC_SDMMC->RESPONSE[0] << 8U); ptr++;
+ resp_high_mask = (uint32_t)(((uint32_t)XMC_SDMMC->RESPONSE[0] & 0xFF000000) >> 24U);
+
+ *ptr = (uint32_t)(((uint32_t)XMC_SDMMC->RESPONSE[1] << 8U) | resp_high_mask); ptr++;
+ resp_high_mask = (uint32_t)(((uint32_t)XMC_SDMMC->RESPONSE[1] & 0xFF000000) >> 24U);
+
+ *ptr = (uint32_t)(((uint32_t)XMC_SDMMC->RESPONSE[2] << 8U) | resp_high_mask);
+ resp_high_mask = (uint32_t)(((uint32_t)XMC_SDMMC->RESPONSE[2] & 0xFF000000) >> 24U);
+
+ *ptr = (uint32_t)(((uint32_t)XMC_SDMMC->RESPONSE[3] << 8U) | resp_high_mask);
+ break;
+
+ /* Responses R3 and R7 */
+ case XMC_SDMMC_RESPONSE_TYPE_R3:
+ *ptr = card_status;
+ break;
+
+ case XMC_SDMMC_RESPONSE_TYPE_R7:
+ *ptr = card_status;
+ break;
+
+ /* Response R6 */
+ case XMC_SDMMC_RESPONSE_TYPE_R6:
+ err_status = card_status & (uint32_t)SDMMC_RESPONSE0_RESPONSE0_Msk;
+ status = SDMMC_BLOCK_SD_lCheckErrorInResponse(&err_status);
+
+ /* Read 16-bit RCA received in response R1 register */
+ *ptr = ((uint32_t)(card_status & (uint32_t)SDMMC_RESPONSE0_RESPONSE1_Msk) >> SDMMC_BLOCK_HC_RESPONSE1_BITPOS);
+ break;
+
+ /* No response */
+ case XMC_SDMMC_RESPONSE_TYPE_NO_RESPONSE:
+ status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ break;
+
+ default:
+ status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ break;
+ }
+ }
+
+ return status;
+}
+
+/* Send command */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lSendCommand(SDMMC_BLOCK_t *const obj,
+ const XMC_SDMMC_COMMAND_t *cmd,
+ uint32_t arg,
+ XMC_SDMMC_RESPONSE_TYPE_t resp_type,
+ void *resp)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ uint32_t timeoutTime;
+
+ obj->sdmmc_sd->issue_abort = (uint8_t)0U;
+ obj->sdmmc_sd->cmd_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ obj->sdmmc_sd->data_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+
+ /* Data or command line free? */
+ status = (SDMMC_BLOCK_MODE_STATUS_t)SDMMC_BLOCK_SD_lCheckDataCommandLines(obj, cmd);
+ if (!((status == SDMMC_BLOCK_MODE_STATUS_DATA_LINE_BUSY) ||
+ (status == SDMMC_BLOCK_MODE_STATUS_CMD_LINE_BUSY)))
+ {
+ /* Send command */
+ (void)XMC_SDMMC_SendCommand(obj->sdmmc_sd->sdmmc, cmd, arg);
+
+ /* Block until any of the bit in the interrupt status register gets set */
+ timeoutTime = TimerGet() + (SDMMC_BLOCK_DELAY_IN_COMMAND / 1000u) + 1u;
+
+ do
+ {
+#if (SDMMC_BLOCK_POLLING_MODE > 0U)
+ /* Poll for interrupt events. */
+ SDMMC0_0_IRQHandler();
+#endif
+
+ if (TimerGet() > timeoutTime)
+ {
+ XMC_DEBUG("SDMMC_BLOCK_SendCommand: Timeout occured");
+ break;
+ }
+ /* Service the watchdog. */
+ CopService();
+ } while ((uint8_t)obj->sdmmc_sd->isr_context.cmd_flag == (uint8_t)0U);
+
+ obj->sdmmc_sd->isr_context.cmd_flag = (uint8_t)0;
+
+ /* Check for possible errors */
+ if ((SDMMC_BLOCK_MODE_STATUS_t)obj->sdmmc_sd->cmd_int_err == SDMMC_BLOCK_MODE_STATUS_COMMAND_COMPLETE)
+ {
+ /* Read response received */
+ status = SDMMC_BLOCK_SD_lReadResponse(obj, cmd, resp_type, resp);
+ }
+ /* For cmd8, check for cmd timeout interrupt */
+ else if (((SDMMC_BLOCK_MODE_STATUS_t)obj->sdmmc_sd->cmd_int_err == SDMMC_BLOCK_MODE_STATUS_COMMAND_TIMEOUT_ERROR) &&
+ ((uint16_t)cmd->cmd_index == (uint16_t)SDMMC_BLOCK_SD_SEND_IF_COND))
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_COMMAND_TIMEOUT_ERROR;
+ }
+ else
+ {
+ if ((uint16_t)cmd->dat_present_sel == (uint16_t)1)
+ {
+ obj->sdmmc_sd->issue_abort = (uint8_t)1;
+ }
+
+ /* Error Recovery for the failed command */
+ status = SDMMC_BLOCK_SD_lErrorInterruptRecovery(obj);
+ }
+ }
+
+ return status;
+}
+
+/* Set voltage window in the OCR register */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lSetVoltageWindow(SDMMC_BLOCK_t *const obj)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ uint32_t card_status = 0U;
+ uint32_t loop_count = 0U;
+ uint32_t arg = 0U;
+
+ if (obj->sdmmc_sd->f8 == (uint8_t)0U)
+ {
+ arg = SDMMC_BLOCK_SD_ACMD41_F80_ARG; /* Set HCS=0 for standard cards */
+ }
+ else
+ {
+ arg = SDMMC_BLOCK_SD_ACMD41_F81_ARG; /* Set HCS=1 for high capacity cards */
+ }
+
+ do
+ {
+ /* Send CMD55 for application specific commands (default RCA: 0) */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(55)),
+ SDMMC_BLOCK_ARGUMENT0,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Send ACMD41 to set card's voltage window */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_SD_COMMAND(62)),
+ arg,
+ XMC_SDMMC_RESPONSE_TYPE_R3,
+ &(obj->sdmmc_sd->card_info.ocr));
+
+ if ((status != SDMMC_BLOCK_MODE_STATUS_SUCCESS) &&
+ (status != SDMMC_BLOCK_MODE_STATUS_ILLEGAL_COMMAND_ERROR))
+ {
+ break;
+ }
+ status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+
+ /* Card takes some time to set power status bit. Card must respond in a second */
+ (void)SDMMC_BLOCK_SD_lDelay(obj, (uint32_t)SDMMC_BLOCK_CARD_POWER_DELAY);
+ }
+ else
+ {
+ loop_count = 100U;
+ }
+ } while (((loop_count++) < (uint32_t)50U) &&
+ (!(((uint32_t)obj->sdmmc_sd->card_info.ocr &
+ (uint32_t)SDMMC_BLOCK_OCR_POWER_STATUS_BITMASK)!= (uint32_t)0UL)));
+
+ return status;
+}
+
+/* Query voltage operating condition of the card */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lQueryOperatingCondition(SDMMC_BLOCK_t *const obj)
+{
+ uint32_t resp_data = 0U;
+ SDMMC_BLOCK_MODE_STATUS_t status;
+
+ /* Query voltage operating condition (cmd8) */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_SD_COMMAND(8)),
+ SDMMC_BLOCK_SD_CMD8_ARG,
+ XMC_SDMMC_RESPONSE_TYPE_R7,
+ &resp_data);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Check if pattern matches in both the argument and response */
+ if (((resp_data >> SDMMC_BLOCK_SD_CMD8_CHECK_PATTERN_BITPOS) & SDMMC_BLOCK_SD_CMD8_CHECK_PATTERN_BITMASK) !=
+ (SDMMC_BLOCK_SD_CMD8_CHECK_PATTERN_VALUE))
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_BAD_RESPONSE;
+ }
+ /* Check if input voltage accepted by the card in the response */
+ else if (((uint8_t)(resp_data >> SDMMC_BLOCK_SD_CMD8_VHS_BITPOS) & SDMMC_BLOCK_SD_CMD8_VHS_BITMASK) !=
+ (SDMMC_BLOCK_SD_VHS_PATTERN_2_7_3_6_VALUE))
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_BAD_RESPONSE;
+ }
+ else
+ {
+ /* Set Flag f8 */
+ obj->sdmmc_sd->f8 = (uint8_t)1U;
+ }
+ }
+ /* Response received; High capacity cards */
+ else
+ {
+ /* No response is received for Standard Capacity SD cards or MMC card. */
+ if (obj->sdmmc_sd->cmd_int_err == SDMMC_BLOCK_MODE_STATUS_COMMAND_TIMEOUT_ERROR)
+ {
+ obj->sdmmc_sd->f8 = (uint8_t)0U;
+ status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ }
+ }
+
+ return status;
+}
+
+/* Query voltage supported from the card */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lQueryVoltage(SDMMC_BLOCK_t *const obj, uint32_t arg)
+{
+ uint32_t card_status = 0U;
+ SDMMC_BLOCK_MODE_STATUS_t status;
+
+ /* Send CMD55 for application specific commands with 0 as the default RCA */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(55)),
+ arg,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+
+ if (((obj->sdmmc_sd->f8 == (uint8_t)0U) && (status == SDMMC_BLOCK_MODE_STATUS_ILLEGAL_COMMAND_ERROR)) ||
+ (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS))
+ {
+ /* Send ACMD41 to query the card's voltage window */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_SD_COMMAND(62)),
+ arg,
+ XMC_SDMMC_RESPONSE_TYPE_R3,
+ &(obj->sdmmc_sd->card_info.ocr));
+
+ if ((status == SDMMC_BLOCK_MODE_STATUS_ILLEGAL_COMMAND_ERROR) ||
+ (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS))
+ {
+ /* Send ACMD41 with voltage window argument set */
+ status = SDMMC_BLOCK_SD_lSetVoltageWindow(obj);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* SD Card Type */
+ SDMMC_BLOCK_SD_lWriteCardType(obj);
+ }
+ }
+ }
+
+ return status;
+}
+
+/* Read card registers after the card initialization */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lAfterCardInitialize(SDMMC_BLOCK_t *const obj)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ uint8_t card_lock = (obj->card_state & (uint8_t)SDMMC_BLOCK_CARD_STATE_LOCKED);
+ uint32_t card_status;
+
+ /* Read CSD & SCR register & card write protection flags */
+ status = SDMMC_BLOCK_SD_lReadCardRegisters(obj);
+
+ /* Explicitly set block size as 512 */
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(16)),
+ 512U,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+ }
+
+ if ((status == SDMMC_BLOCK_MODE_STATUS_SUCCESS) && (card_lock == (uint8_t)0U))
+ {
+#if SDMMC_BLOCK_SD_SUPPORT_4_BUS_WIDTH
+ /* Switch to 4-bit bus width if supported */
+ status = SDMMC_BLOCK_SD_lSwitchBusWidth(obj);
+
+ if (status != SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Switch to default (1-bit) bus width */
+ XMC_SDMMC_SetDataTransferWidth(obj->sdmmc_sd->sdmmc, XMC_SDMMC_DATA_LINES_1);
+ }
+
+ /* Switch to high speed mode */
+ status = SDMMC_BLOCK_SD_lSwitchSpeed(obj);
+ if (status != SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Switch host controller to normal (default) speed mode */
+ XMC_SDMMC_DisableHighSpeed(obj->sdmmc_sd->sdmmc);
+ status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ }
+#endif
+ }
+
+ return status;
+}
+
+/* Initialize the SD card */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lInitializeCard(SDMMC_BLOCK_t *const obj)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status;
+ SDMMC_BLOCK_CARD_LOCK_STATUS_t lock_status;
+ uint8_t count = (uint8_t)0U;
+
+ /* Repeat the below steps 2 times if bad response is received */
+ do
+ {
+ /* Reset the card (CMD0) */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(0)),
+ SDMMC_BLOCK_ARGUMENT0,
+ XMC_SDMMC_RESPONSE_TYPE_NO_RESPONSE,
+ NULL);
+
+ if (status != SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ break;
+ }
+
+ /* Query card's operation condition */
+ status = SDMMC_BLOCK_SD_lQueryOperatingCondition(obj);
+
+ count++;
+ } while ((count < (uint8_t)SDMMC_BLOCK_NUM_CARD_RESET_RETRIES) &&
+ (status == SDMMC_BLOCK_MODE_STATUS_BAD_RESPONSE));
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Query and set voltage window */
+ status = SDMMC_BLOCK_SD_lQueryVoltage(obj, (uint32_t)obj->sdmmc_sd->card_info.rca);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Read CID */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(2)),
+ SDMMC_BLOCK_ARGUMENT0,
+ XMC_SDMMC_RESPONSE_TYPE_R2,
+ (void *)obj->sdmmc_sd->card_info.cid);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Read RCA */
+ status = SDMMC_BLOCK_SD_lReadRca(obj);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Check card lock/unlock status */
+ status = SDMMC_BLOCK_SD_GetLockStatus(obj, &lock_status);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ if (lock_status == SDMMC_BLOCK_CARD_LOCK_STATUS_LOCKED)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_INITIALIZED_BUT_LOCKED;
+ }
+
+ /* Update card initialization status */
+ obj->card_state &= (uint8_t)~((uint8_t)SDMMC_BLOCK_CARD_STATE_NOT_INITIALIZED |
+ (uint8_t)SDMMC_BLOCK_CARD_STATE_NO_CARD);
+ }
+ }
+ }
+ }
+ }
+
+ return status;
+}
+
+
+/* Get card type */
+static void SDMMC_BLOCK_SD_lWriteCardType(SDMMC_BLOCK_t *const obj)
+{
+ /* If F8=0; standard capacity v1 card */
+ if (obj->sdmmc_sd->f8 == (uint8_t)0U)
+ {
+ obj->card_type |= (uint8_t)SDMMC_BLOCK_CARD_TYPE_STANDARD_CAPACITY_V1X;
+ }
+ /* If F8=1; standard capacity v2 or high capacity card */
+ else
+ {
+ /* Check CCS bit in the OCR register; CCS=1 implies a high capacity card */
+ if (((uint32_t)obj->sdmmc_sd->card_info.ocr & (uint32_t)SDMMC_BLOCK_OCR_CCS_BITMASK) != (uint32_t)0U)
+ {
+ obj->card_type |= (uint8_t)((uint8_t)SDMMC_BLOCK_CARD_TYPE_HIGH_CAPACITY |
+ (uint8_t)SDMMC_BLOCK_CARD_TYPE_BLOCK_ADDRESSING);
+ }
+ else
+ {
+ /* CCS=0 implies standard capacity v2 */
+ obj->card_type |= (uint8_t)SDMMC_BLOCK_CARD_TYPE_STANDARD_CAPACITY_V2;
+ }
+ }
+}
+
+/* Check write protection status of card */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lGetWriteProtect(SDMMC_BLOCK_t *const obj)
+{
+ uint32_t sd_status[16] = {0U};
+ uint32_t write_protect;
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+
+ status = SDMMC_BLOCK_SD_GetSdStatus(obj, (void *)&(sd_status[0]));
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Bits 480:495 in the SD status provides write protection information */
+ write_protect = ((sd_status[0] & 0xFF000000U) >> 24U) | (((sd_status[0] & 0x00FF0000U) >> 16U) << 8U);
+ if ((write_protect & SDMMC_BLOCK_SD_CARD_TYPE_BITMASK) != 0U)
+ {
+ obj->card_state |= (uint8_t)SDMMC_BLOCK_CARD_STATE_WRITE_PROTECTED;
+ }
+ }
+
+ return status;
+}
+
+/* Reads RCA (relative card address) of the card */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lReadRca(SDMMC_BLOCK_t *const obj)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status;
+
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(3)),
+ SDMMC_BLOCK_ARGUMENT0,
+ XMC_SDMMC_RESPONSE_TYPE_R6,
+ &(obj->sdmmc_sd->card_info.rca));
+ return status;
+}
+
+/* Read the CSD, SCR and Write protection status of the card */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lReadCardRegisters(SDMMC_BLOCK_t *const obj)
+{
+ uint32_t arg = 0U;
+ uint32_t card_status = 0U;
+ SDMMC_BLOCK_MODE_STATUS_t status;
+ SDMMC_BLOCK_SCR_t scr_content = {0U};
+ uint8_t card_lock = (obj->card_state & (uint8_t)SDMMC_BLOCK_CARD_STATE_LOCKED);
+
+ /* Read CSD Register */
+ arg |= (uint32_t)((uint32_t)obj->sdmmc_sd->card_info.rca << (uint16_t)SDMMC_BLOCK_ARG_RCA_BITPOS);
+
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(9)),
+ arg,
+ XMC_SDMMC_RESPONSE_TYPE_R2,
+ (void *)obj->sdmmc_sd->card_info.csd);
+
+ if ((status == SDMMC_BLOCK_MODE_STATUS_SUCCESS) && (card_lock == (uint8_t)0U))
+ {
+ /* Set write protection flags */
+ status = SDMMC_BLOCK_SD_lGetWriteProtect(obj);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Read SCR register for SD card */
+ if (((uint8_t)obj->card_type & (uint8_t)SDMMC_BLOCK_CARD_TYPE_MMC) == 0U)
+ {
+ /* Switch to Transferring State. */
+ status = SDMMC_BLOCK_SD_lSwitchToTransferState(obj);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Send application specific command CMD55 */
+ arg |= (uint32_t)((uint32_t)obj->sdmmc_sd->card_info.rca << (uint32_t)SDMMC_BLOCK_ARG_RCA_BITPOS);
+
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(55)),
+ arg,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Set direction select bit */
+ XMC_SDMMC_SetDataTransferDirection(obj->sdmmc_sd->sdmmc, XMC_SDMMC_DATA_TRANSFER_CARD_TO_HOST);
+
+ /* Read the transferred SCR data */
+ status = SDMMC_BLOCK_SD_lSingleBlockTransfer(obj,
+ &(SDMMC_BLOCK_SD_COMMAND(64)),
+ (uint32_t)SDMMC_BLOCK_ARGUMENT0,
+ (uint16_t)8U,
+ (uint32_t *)&scr_content,
+ SDMMC_BLOCK_SD_DATA_TRANSFER_READ_BUFFER);
+
+ obj->sdmmc_sd->card_info.scr = scr_content;
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ status = SDMMC_BLOCK_SD_lSwitchToTransferState(obj);
+ XMC_SDMMC_SetDataTransferDirection(obj->sdmmc_sd->sdmmc, XMC_SDMMC_DATA_TRANSFER_CARD_TO_HOST);
+ }
+
+ return status;
+}
+
+/* Configure the registers for a single block transfer */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lConfigureSingleBlockTransfer(SDMMC_BLOCK_t *const obj,
+ const XMC_SDMMC_COMMAND_t *cmd,
+ uint32_t arg,
+ uint16_t block_size)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ uint32_t card_status = 0U;
+ XMC_SDMMC_TRANSFER_MODE_t response;
+
+ response.block_size = block_size;
+ response.type = XMC_SDMMC_TRANSFER_MODE_TYPE_SINGLE;
+ response.auto_cmd = XMC_SDMMC_TRANSFER_MODE_AUTO_CMD_DISABLED;
+
+ XMC_SDMMC_SetDataTransferMode(obj->sdmmc_sd->sdmmc, &response);
+
+ status = SDMMC_BLOCK_SD_lSendCommand(obj, cmd, arg, XMC_SDMMC_RESPONSE_TYPE_R1, &card_status);
+
+ return status;
+}
+
+/* Configure the registers for a multi-block transfer */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lConfigureMultiBlockTransfer(SDMMC_BLOCK_t *const obj,
+ uint32_t *arg,
+ uint32_t num_blocks,
+ const XMC_SDMMC_COMMAND_t *cmd)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status;
+ uint32_t card_status = 0U;
+ XMC_SDMMC_TRANSFER_MODE_t response;
+
+ /* Block addressing */
+ if (((uint8_t)obj->card_type & (uint8_t)SDMMC_BLOCK_CARD_TYPE_BLOCK_ADDRESSING) == (uint8_t)0U)
+ {
+ *arg *= (uint32_t)512U;
+ }
+
+ response.block_size = SDMMC_BLOCK_TX_BLOCK_SIZE_VALUE;
+ response.num_blocks = num_blocks;
+ response.type = XMC_SDMMC_TRANSFER_MODE_TYPE_MULTIPLE;
+ response.auto_cmd = XMC_SDMMC_TRANSFER_MODE_AUTO_CMD_12;
+
+ XMC_SDMMC_SetDataTransferMode(obj->sdmmc_sd->sdmmc, &response);
+
+ /* Enable ACMD 12 interrupt signal */
+ XMC_SDMMC_EnableEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_ACMD_ERR);
+
+ /* Send multiple block transfer command */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj, cmd, *arg, XMC_SDMMC_RESPONSE_TYPE_R1, &card_status);
+
+ return status;
+}
+
+/* Transfer multiple blocks of data */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lMultiBlockTransfer(SDMMC_BLOCK_t *const obj,
+ uint32_t *addr,
+ uint32_t num_blocks,
+ const XMC_SDMMC_COMMAND_t *cmd,
+ uint32_t *buf,
+ SDMMC_BLOCK_SD_DATA_TRANSFER_t transfer_mode)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status;
+ obj->sdmmc_sd->transfer_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+
+ /* Configure registers for Multi block transfer*/
+ status = SDMMC_BLOCK_SD_lConfigureMultiBlockTransfer(obj, addr, (uint32_t)num_blocks, cmd);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Read/write block data */
+ while ((uint32_t)num_blocks > 0U)
+ {
+ /* Perform Transfer */
+ status = SDMMC_BLOCK_SD_lDataTransfer(obj, buf, transfer_mode, SDMMC_BLOCK_NUM_QUADLETS_IN_BLOCK);
+ if (status != SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ break;
+ }
+ /* Decrement number of blocks */
+ num_blocks--;
+ /* Pointer pointing to the next block pointer */
+ buf += (uint32_t)SDMMC_BLOCK_NUM_QUADLETS_IN_BLOCK;
+ }
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Block on transfer complete interrupt */
+ /* Timeout: 5ms */
+ status = SDMMC_BLOCK_SD_lTransferDelay(obj, SDMMC_BLOCK_DELAY_IN_TRANSFER);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Check if transfer happened successfully; Check ACMD status */
+ if ((SDMMC_BLOCK_MODE_STATUS_t)obj->sdmmc_sd->acmd_int_err == SDMMC_BLOCK_MODE_STATUS_ACMD12_ERROR)
+ {
+ /* Call ACMD12 error recovery */
+ SDMMC_BLOCK_SD_lAcmdErrorRecovery(obj);
+ }
+ }
+ }
+ }
+ return status;
+}
+
+/* Performs single block transfer */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lSingleBlockTransfer(SDMMC_BLOCK_t *const obj,
+ const XMC_SDMMC_COMMAND_t *cmd,
+ uint32_t arg,
+ uint16_t block_size,
+ uint32_t *buf,
+ SDMMC_BLOCK_SD_DATA_TRANSFER_t transfer_mode)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status;
+ uint32_t timeoutTime;
+ uint32_t qbytes = (uint32_t)(((((uint32_t)block_size + 3UL) >> 2U) << 2U) >> 2U);
+
+ status = SDMMC_BLOCK_SD_lConfigureSingleBlockTransfer(obj, cmd, arg, block_size);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Perform data transfer */
+ status = SDMMC_BLOCK_SD_lDataTransfer(obj, buf, transfer_mode, qbytes);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Block on transfer complete interrupt */
+ timeoutTime = TimerGet() + (SDMMC_BLOCK_DELAY_IN_TRANSFER / 1000u) + 1u;
+
+ do
+ {
+#if (SDMMC_BLOCK_POLLING_MODE > 0U)
+ /* Poll for interrupt events. */
+ SDMMC0_0_IRQHandler();
+#endif
+
+ if (TimerGet() > timeoutTime)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_TIMEOUT_OCCURED;
+ break;
+ }
+ /* Service the watchdog. */
+ CopService();
+ } while ((uint8_t)obj->sdmmc_sd->isr_context.transfer_flag == (uint8_t)0U);
+
+ obj->sdmmc_sd->isr_context.transfer_flag = (uint8_t)0U;
+
+ /* Check transfer complete status */
+ if ((SDMMC_BLOCK_MODE_STATUS_t)obj->sdmmc_sd->transfer_int_err == SDMMC_BLOCK_MODE_STATUS_TRANSFER_COMPLETE)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ }
+ else
+ {
+ obj->sdmmc_sd->issue_abort = (uint8_t)1U;
+ status = SDMMC_BLOCK_SD_lErrorInterruptRecovery(obj);
+ }
+ }
+ }
+
+ return status;
+}
+
+/* Check lock status */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lCheckLockStatus(SDMMC_BLOCK_t *const obj,
+ SDMMC_BLOCK_CARD_LOCK_STATUS_t mode)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status;
+ SDMMC_BLOCK_CARD_LOCK_STATUS_t lock_status;
+
+ status = SDMMC_BLOCK_SD_GetLockStatus(obj, &lock_status);
+ /* For lock, card state must be "locked" */
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ if ((lock_status == SDMMC_BLOCK_CARD_LOCK_STATUS_LOCKED) && (mode == SDMMC_BLOCK_CARD_LOCK_STATUS_LOCKED))
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ }
+ /* For unlock, card state must be "unlocked" */
+ else if ((lock_status == SDMMC_BLOCK_CARD_LOCK_STATUS_UNLOCKED) && (mode == SDMMC_BLOCK_CARD_LOCK_STATUS_UNLOCKED))
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ }
+ else
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_LOCK_UNLOCK_ERROR;
+ }
+ }
+
+ return status;
+}
+
+#if SDMMC_BLOCK_SD_SUPPORT_4_BUS_WIDTH
+
+/* Switch bus width to 4-bit if supported */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lSwitchBusWidth(SDMMC_BLOCK_t *const obj)
+{
+ uint32_t arg = 0U;
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ uint32_t card_status = 0U;
+
+ /* Switch to transfer state (CMD7) */
+ status = SDMMC_BLOCK_SD_lSwitchToTransferState(obj);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Disable card insertion interrupt */
+ XMC_SDMMC_DisableEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_CARD_INS);
+
+ /* Check data transfer width supported in SCR register */
+ if ((obj->sdmmc_sd->card_info.scr.sd_bus_width & SDMMC_BLOCK_SCR_BUS_WIDTH4_BITMASK))
+ {
+ /* Set the argument */
+ arg |= ((uint32_t)obj->sdmmc_sd->card_info.rca << (uint32_t)SDMMC_BLOCK_ARG_RCA_BITPOS);
+
+ /* Send application specific command */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(55)),
+ arg,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Send ACMD6 to switch the bus width */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_SD_COMMAND(58)),
+ SDMMC_BLOCK_SD_4BUS_WIDTH_ARG,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+ }
+ }
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Set data transfer width */
+ XMC_SDMMC_SetDataTransferWidth(obj->sdmmc_sd->sdmmc, XMC_SDMMC_DATA_LINES_4);
+ }
+ }
+
+ return status;
+}
+
+/* Switch the card speed mode to high speed if supported */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lSwitchSpeed(SDMMC_BLOCK_t *const obj)
+{
+ uint32_t switch_status[16] = {0U};
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+
+ /* Check CMD6 support in SCR register */
+ if (obj->sdmmc_sd->card_info.scr.sd_spec != 0UL)
+ {
+ /* Switch to transfer state (CMD7) */
+ status = SDMMC_BLOCK_SD_lSwitchToTransferState(obj);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /*
+ * Send the Switch function command and read the transferred block of
+ * data from the card
+ */
+ status = SDMMC_BLOCK_SD_lSingleBlockTransfer(obj,
+ &(SDMMC_BLOCK_SD_COMMAND(6)),
+ SDMMC_BLOCK_SD_HIGH_SPEED_ARG,
+ 64U,
+ (uint32_t *)switch_status,
+ SDMMC_BLOCK_SD_DATA_TRANSFER_READ_BUFFER);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ if (((switch_status[4] & (uint32_t)SDMMC_BLOCK_SWITCH_FUNC_GRP1_STATUS_BITMASK) >>
+ (uint32_t)SDMMC_BLOCK_SWITCH_FUNC_GRP1_STATUS_BITPOS) != (uint32_t)1U)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ }
+ }
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Change speed mode (high speed) in the host controller */
+ XMC_SDMMC_EnableHighSpeed(obj->sdmmc_sd->sdmmc);
+ }
+ }
+ }
+
+ return status;
+}
+
+#endif
+
+/* Provides delay in command execution */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lCommandDelay(SDMMC_BLOCK_t *const obj, uint32_t delay)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ uint32_t timeoutTime;
+ obj->sdmmc_sd->tmr_expire = (bool)1U;
+
+ timeoutTime = TimerGet() + (delay / 1000u) + 1u;
+
+ do
+ {
+#if (SDMMC_BLOCK_POLLING_MODE > 0U)
+ /* Poll for interrupt events. */
+ SDMMC0_0_IRQHandler();
+#endif
+
+ if (TimerGet() > timeoutTime)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_TIMEOUT_OCCURED;
+ break;
+ }
+ /* Service the watchdog. */
+ CopService();
+ } while ((!((obj->sdmmc_sd->isr_context.cmd_flag == 1U) ||
+ (obj->sdmmc_sd->isr_context.data_flag == 1U))) &&
+ ((XMC_SDMMC_GetEvent(obj->sdmmc_sd->sdmmc, XMC_SDMMC_CARD_ERR) != 0U)));
+
+ obj->sdmmc_sd->isr_context.cmd_flag = (uint8_t)0U;
+ obj->sdmmc_sd->isr_context.data_flag = (uint8_t)0U;
+
+ return status;
+}
+
+/* Recovery task for error interrupts */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lErrorInterruptRecovery(SDMMC_BLOCK_t *const obj)
+{
+ XMC_SDMMC_COMMAND_t *cmd = (XMC_SDMMC_COMMAND_t *)&(SDMMC_BLOCK_COMMON_COMMAND(12));
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_NONRECOVERABLE_ERROR;
+ uint32_t normal_events = 0U;
+ uint32_t error_events = 0U;
+
+ error_events = ((uint32_t)XMC_SDMMC_CMD_TIMEOUT_ERR) |
+ ((uint32_t)XMC_SDMMC_CMD_CRC_ERR) |
+ ((uint32_t)XMC_SDMMC_CMD_END_BIT_ERR) |
+ ((uint32_t)XMC_SDMMC_CMD_IND_ERR) |
+ ((uint32_t)XMC_SDMMC_DATA_TIMEOUT_ERR) |
+ ((uint32_t)XMC_SDMMC_DATA_CRC_ERR) |
+ ((uint32_t)XMC_SDMMC_DATA_END_BIT_ERR) |
+ ((uint32_t)XMC_SDMMC_CURRENT_LIMIT_ERR) |
+ ((uint32_t)XMC_SDMMC_TARGET_RESP_ERR);
+
+ /* Disable all error events */
+ XMC_SDMMC_DisableEvent(obj->sdmmc_sd->sdmmc, error_events);
+
+ /* Check error interrupt status bits D0-D3 for CMD line errors */
+ if ((((uint32_t)obj->sdmmc_sd->isr_context.int_status_shadow &
+ (uint32_t)SDMMC_BLOCK_ERROR_CMD_STATUS_BITMASK) != (uint32_t)0U) ||
+ (XMC_SDMMC_IsCommandLineBusy(obj->sdmmc_sd->sdmmc) == true))
+ {
+ /* Set software reset for CMD line */
+ status = SDMMC_BLOCK_SD_lReset(obj, (uint32_t)XMC_SDMMC_SW_RST_CMD_LINE);
+ }
+
+ /* Check error interrupt status bits D4-D6 for data line errors */
+ if ((((uint32_t)obj->sdmmc_sd->isr_context.int_status_shadow &
+ (uint32_t)SDMMC_BLOCK_ERROR_DATA_STATUS_BITMASK) != (uint32_t)0U) ||
+ (XMC_SDMMC_IsDataLineBusy(obj->sdmmc_sd->sdmmc) == true))
+ {
+ /* Set software reset for data line */
+ status = SDMMC_BLOCK_SD_lReset(obj, (uint32_t)XMC_SDMMC_SW_RST_DAT_LINE);
+ }
+
+ error_events = ((uint32_t)XMC_SDMMC_CMD_TIMEOUT_ERR) |
+ ((uint32_t)XMC_SDMMC_CMD_CRC_ERR) |
+ ((uint32_t)XMC_SDMMC_CMD_END_BIT_ERR) |
+ ((uint32_t)XMC_SDMMC_CMD_IND_ERR) |
+ ((uint32_t)XMC_SDMMC_DATA_TIMEOUT_ERR) |
+ ((uint32_t)XMC_SDMMC_DATA_CRC_ERR) |
+ ((uint32_t)XMC_SDMMC_DATA_END_BIT_ERR) |
+ ((uint32_t)XMC_SDMMC_CURRENT_LIMIT_ERR) |
+ ((uint32_t)XMC_SDMMC_CARD_ERR);
+
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, error_events);
+
+ if (obj->sdmmc_sd->issue_abort == (uint8_t)1U)
+ {
+ /* Issue abort command. Set argument register */
+ (void)XMC_SDMMC_SendCommand(obj->sdmmc_sd->sdmmc, cmd, SDMMC_BLOCK_ARGUMENT0);
+
+ /* Wait for any interrupt status bit to be set */
+
+ /* Timeout of 5ms */
+ status = SDMMC_BLOCK_SD_lCommandDelay(obj, (uint32_t)SDMMC_BLOCK_DELAY_IN_COMMAND);
+ if ((SDMMC_BLOCK_MODE_STATUS_t)status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* If error status bit is set in the status register */
+ if (XMC_SDMMC_IsAnyErrorEvent(obj->sdmmc_sd->sdmmc) == true)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_NONRECOVERABLE_ERROR;
+
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, normal_events);
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, error_events);
+
+ /* Set software reset for CMD line and data line */
+ (void)SDMMC_BLOCK_SD_lReset(obj, (uint32_t)((uint32_t)XMC_SDMMC_SW_RST_CMD_LINE |
+ (uint32_t)XMC_SDMMC_SW_RST_DAT_LINE));
+ }
+ }
+
+ /* Check Data lines status in present status register */
+ if (XMC_SDMMC_IsAnyErrorEvent(obj->sdmmc_sd->sdmmc) == false)
+ {
+ if (XMC_SDMMC_IsAllDataLinesHigh(obj->sdmmc_sd->sdmmc) == true)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_RECOVERABLE_ERROR;
+ }
+ else
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_NONRECOVERABLE_ERROR;
+ }
+ }
+ }
+ else
+ {
+ if (XMC_SDMMC_IsAnyErrorEvent(obj->sdmmc_sd->sdmmc) == false)
+ {
+ if (XMC_SDMMC_IsAllDataLinesHigh(obj->sdmmc_sd->sdmmc) == true)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_RECOVERABLE_ERROR;
+ }
+ else
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_NONRECOVERABLE_ERROR;
+ }
+ }
+ }
+
+ /* Enable the error interrupt signal */
+ error_events |= (uint32_t)XMC_SDMMC_TARGET_RESP_ERR;
+ XMC_SDMMC_EnableEvent(obj->sdmmc_sd->sdmmc, error_events);
+
+ /* Global error recovery variable */
+ obj->sdmmc_sd->err_recovery_stat = status;
+
+ return status;
+}
+
+/* Handles interrupts in normal interrupt status register */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_NormalInterruptHandler(SDMMC_BLOCK_t *const obj, uint16_t int_status)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+
+#if SDMMC_BLOCK_SD_CARD_DETECTION_SUPPORT
+ bool pstate;
+
+ /* Card removal interrupt */
+ if ((int_status & (uint32_t)XMC_SDMMC_CARD_REMOVAL) != 0U)
+ {
+ obj->sdmmc_sd->card_detect_state |= ((uint32_t)1U << SDMMC_BLOCK_SD_INTERRUPT_CARD_REMOVAL);
+ /* Clear the interrupt status bit */
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_CARD_REMOVAL);
+ }
+
+ /* Card insertion interrupt */
+ if ((int_status & (uint32_t)XMC_SDMMC_CARD_INS) != 0U)
+ {
+ obj->sdmmc_sd->card_detect_state |= ((uint32_t)1U << SDMMC_BLOCK_SD_INTERRUPT_CARD_INSERTION);
+ /* Clear the interrupt status bit */
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_CARD_INS);
+ }
+
+ /* Invoke a callback function if a user has registered one */
+ if ((obj->sdmmc_sd->callback != NULL) && (obj->sdmmc_sd->card_detect_state != 0U))
+ {
+ obj->sdmmc_sd->card_detect_state = 0U;
+ pstate = (bool)(SDMMC_BLOCK_0.sdmmc_sd->sdmmc->PRESENT_STATE & SDMMC_PRESENT_STATE_CARD_INSERTED_Msk);
+ obj->sdmmc_sd->callback((SDMMC_BLOCK_SD_INTERRUPT_t)pstate);
+ }
+ else
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_NULL_POINTER;
+ }
+#endif
+
+ /* Buffer read ready interrupt */
+ if (((uint32_t)int_status & (uint32_t)XMC_SDMMC_BUFFER_READ_READY) != (uint32_t)0)
+ {
+ obj->sdmmc_sd->data_int_err = SDMMC_BLOCK_MODE_STATUS_BUFFER_READY;
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_BUFFER_READ_READY);
+ obj->sdmmc_sd->isr_context.data_flag = (uint8_t)1U;
+ }
+
+ /* Buffer write ready interrupt */
+ if (((uint32_t)int_status & (uint32_t)XMC_SDMMC_BUFFER_WRITE_READY) != (uint32_t)0)
+ {
+ obj->sdmmc_sd->data_int_err = SDMMC_BLOCK_MODE_STATUS_BUFFER_READY;
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_BUFFER_WRITE_READY);
+ obj->sdmmc_sd->isr_context.data_flag = (uint8_t)1U;
+ }
+
+ /* Transfer complete interrupt */
+ if (((uint32_t)int_status & (uint32_t)XMC_SDMMC_TX_COMPLETE) != (uint32_t)0)
+ {
+ obj->sdmmc_sd->transfer_int_err = SDMMC_BLOCK_MODE_STATUS_TRANSFER_COMPLETE;
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_TX_COMPLETE);
+ obj->card_state &= (uint8_t)~(uint8_t)SDMMC_BLOCK_CARD_STATE_DATA_ACTIVE;
+ obj->sdmmc_sd->isr_context.transfer_flag = (uint8_t)1U;
+ }
+
+ /* Command complete interrupt */
+ if (((uint32_t)int_status & (uint32_t)XMC_SDMMC_CMD_COMPLETE) != (uint32_t)0)
+ {
+ obj->sdmmc_sd->cmd_int_err = SDMMC_BLOCK_MODE_STATUS_COMMAND_COMPLETE;
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_CMD_COMPLETE);
+ obj->card_state &= (uint8_t)~(uint8_t)SDMMC_BLOCK_CARD_STATE_CMD_ACTIVE;
+ obj->sdmmc_sd->isr_context.cmd_flag = (uint8_t)1;
+ }
+
+ return status;
+}
+
+/* Handles interrupt in error interrupt status register */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_ErrorInterruptHandler(SDMMC_BLOCK_t *const obj,
+ uint16_t int_status)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ obj->sdmmc_sd->isr_context.int_status_shadow = int_status;
+
+ /* Command timeout error interrupt */
+ if (((uint32_t)int_status & ((uint32_t)XMC_SDMMC_CMD_TIMEOUT_ERR >> 16U)) != (uint32_t)0)
+ {
+ obj->sdmmc_sd->cmd_int_err = SDMMC_BLOCK_MODE_STATUS_COMMAND_TIMEOUT_ERROR;
+ obj->card_state &= (uint8_t)~(uint8_t)SDMMC_BLOCK_CARD_STATE_CMD_ACTIVE;
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_CMD_TIMEOUT_ERR);
+ obj->sdmmc_sd->isr_context.cmd_flag = 1U;
+ }
+
+ /* Command CRC error interrupt */
+ if (((uint32_t)int_status & ((uint32_t)XMC_SDMMC_CMD_CRC_ERR >> 16U)) != (uint32_t)0)
+ {
+ obj->sdmmc_sd->cmd_int_err = SDMMC_BLOCK_MODE_STATUS_COMMAND_CRC_ERROR;
+ obj->card_state &= (uint8_t)~(uint8_t)SDMMC_BLOCK_CARD_STATE_CMD_ACTIVE;
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_CMD_CRC_ERR);
+ obj->sdmmc_sd->isr_context.cmd_flag = 1U;
+ }
+
+ /* Command end bit error interrupt */
+ if (((uint32_t)int_status & ((uint32_t)XMC_SDMMC_CMD_END_BIT_ERR >> 16U)) != (uint32_t)0)
+ {
+ obj->sdmmc_sd->cmd_int_err = SDMMC_BLOCK_MODE_STATUS_COMMAND_ENDBIT_ERROR;
+ obj->card_state &= (uint8_t)~(uint8_t)SDMMC_BLOCK_CARD_STATE_CMD_ACTIVE;
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_CMD_END_BIT_ERR);
+ obj->sdmmc_sd->isr_context.cmd_flag = 1U;
+ }
+
+ /* Command index error interrupt */
+ if (((uint32_t)int_status & ((uint32_t)XMC_SDMMC_CMD_IND_ERR >> 16U)) != (uint32_t)0)
+ {
+ obj->sdmmc_sd->cmd_int_err = SDMMC_BLOCK_MODE_STATUS_COMMAND_INDEX_ERROR;
+ obj->card_state &= (uint8_t)~(uint8_t)SDMMC_BLOCK_CARD_STATE_CMD_ACTIVE;
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_CMD_IND_ERR);
+ obj->sdmmc_sd->isr_context.cmd_flag = 1U;
+ }
+
+ /* Data timeout error interrupt */
+ if (((uint32_t)int_status & ((uint32_t)XMC_SDMMC_DATA_TIMEOUT_ERR >> 16U)) != (uint32_t)0)
+ {
+ obj->sdmmc_sd->data_int_err = SDMMC_BLOCK_MODE_STATUS_DATA_TIMEOUT_ERROR;
+ obj->card_state &= (uint8_t)~(uint8_t)SDMMC_BLOCK_CARD_STATE_DATA_ACTIVE;
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_DATA_TIMEOUT_ERR);
+ obj->sdmmc_sd->isr_context.data_flag = 1U;
+ }
+
+ /* Data CRC error interrupt */
+ if (((uint32_t)int_status & ((uint32_t)XMC_SDMMC_DATA_CRC_ERR >> 16U)) != (uint32_t)0)
+ {
+ obj->sdmmc_sd->data_int_err = SDMMC_BLOCK_MODE_STATUS_DATA_CRC_ERROR;
+ obj->card_state &= (uint8_t)~(uint8_t)SDMMC_BLOCK_CARD_STATE_DATA_ACTIVE;
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_DATA_CRC_ERR);
+ obj->sdmmc_sd->isr_context.data_flag = 1U;
+ }
+
+ /* Data end bit error interrupt */
+ if (((uint32_t)int_status & ((uint32_t)XMC_SDMMC_DATA_END_BIT_ERR >> 16U)) != (uint32_t)0)
+ {
+ obj->sdmmc_sd->data_int_err = SDMMC_BLOCK_MODE_STATUS_DATA_ENDBIT_ERROR;
+ obj->card_state &= (uint8_t)~(uint8_t)SDMMC_BLOCK_CARD_STATE_DATA_ACTIVE;
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_DATA_END_BIT_ERR);
+ obj->sdmmc_sd->isr_context.data_flag = 1U;
+ }
+
+ /* ACMD12 error interrupt */
+ if (((uint32_t)int_status & ((uint32_t)XMC_SDMMC_ACMD_ERR >> 16U)) != (uint32_t)0)
+ {
+ obj->sdmmc_sd->acmd_int_err = SDMMC_BLOCK_MODE_STATUS_ACMD12_ERROR;
+ obj->card_state &= (uint8_t)~(uint8_t)SDMMC_BLOCK_CARD_STATE_CMD_ACTIVE;
+ obj->card_state &= (uint8_t)~(uint8_t)SDMMC_BLOCK_CARD_STATE_DATA_ACTIVE;
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_ACMD_ERR);
+ obj->sdmmc_sd->isr_context.cmd_flag = 1U;
+ }
+
+ return status;
+}
+
+/* Switch the card state to transferring state if it isn't */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lSwitchToTransferState(SDMMC_BLOCK_t *const obj)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ uint32_t arg = 0UL;
+ uint32_t card_status = 0U;
+
+ /* Check the current state of the card */
+ arg |= (uint32_t)((uint32_t)obj->sdmmc_sd->card_info.rca << (uint32_t)SDMMC_BLOCK_ARG_RCA_BITPOS);
+
+ /* Send CMD13 to read card status */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(13)),
+ arg,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Check if it is in transferring state */
+ if (((card_status & SDMMC_BLOCK_SD_CSR_CURRENT_STATE_BITMASK) >> SDMMC_BLOCK_SD_CSR_CURRENT_STATE_BITPOS) ==
+ SDMMC_BLOCK_SD_CSR_CURRENT_STATE_TRANS_VALUE)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ }
+ else
+ {
+ /* Switch to transfer state (CMD7) */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(7)),
+ arg,
+ XMC_SDMMC_RESPONSE_TYPE_R1b,
+ &card_status);
+ }
+ }
+
+ return status;
+}
+
+/* Do data transfer to OR from card */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lDataTransfer(SDMMC_BLOCK_t *const obj,
+ uint32_t *buf,
+ SDMMC_BLOCK_SD_DATA_TRANSFER_t transfer_mode,
+ uint32_t quad_bytes)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ uint32_t timeoutTime;
+ uint32_t count = 0U;
+
+ /* Block on buffer read/write ready interrupt */
+ timeoutTime = TimerGet() + (SDMMC_BLOCK_RESET_IN_DATA_TRANSFER / 1000u) + 1u;
+
+ do
+ {
+#if (SDMMC_BLOCK_POLLING_MODE > 0U)
+ /* Poll for interrupt events. */
+ SDMMC0_0_IRQHandler();
+#endif
+
+ if (TimerGet() > timeoutTime)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_TIMEOUT_OCCURED;
+ break;
+ }
+ /* Service the watchdog. */
+ CopService();
+ } while (obj->sdmmc_sd->isr_context.data_flag == 0U);
+
+ obj->sdmmc_sd->isr_context.data_flag = (uint8_t)0U;
+
+ /* Check if buffer is ready */
+ if (obj->sdmmc_sd->data_int_err == SDMMC_BLOCK_MODE_STATUS_BUFFER_READY)
+ {
+ /* 4 bytes data transmission in each iteration */
+ for (count = 0U; count < quad_bytes; count++)
+ {
+ if (transfer_mode == SDMMC_BLOCK_SD_DATA_TRANSFER_READ_BUFFER)
+ {
+ *buf = (uint32_t)XMC_SDMMC_ReadFIFO(obj->sdmmc_sd->sdmmc);
+ }
+
+ if (transfer_mode == SDMMC_BLOCK_SD_DATA_TRANSFER_WRITE_BUFFER)
+ {
+ XMC_SDMMC_WriteFIFO(obj->sdmmc_sd->sdmmc, buf);
+ }
+
+ buf++;
+ }
+ status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ }
+ else
+ {
+ obj->sdmmc_sd->issue_abort = (uint8_t)1U;
+ status = SDMMC_BLOCK_SD_lErrorInterruptRecovery(obj);
+ }
+
+ return status;
+}
+
+/* Performs the ACMD error recovery */
+static void SDMMC_BLOCK_SD_lAcmdErrorRecovery(SDMMC_BLOCK_t *const obj)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ uint32_t pcmd_flag = 0U;
+ uint32_t card_status = 0U;
+
+ /* Check ACMD12 "Not executed err" in Auto CMD12 error status register */
+ if (XMC_SDMMC_GetACMDErrStatus(obj->sdmmc_sd->sdmmc, XMC_SDMMC_ACMD12_NOT_EXEC_ERR) == true)
+ {
+ pcmd_flag = 1U;
+ /* Check Return Status of Recovery function of CMD_wo_DAT command */
+ if (obj->sdmmc_sd->err_recovery_stat == SDMMC_BLOCK_MODE_STATUS_RECOVERABLE_ERROR)
+ {
+ /* For recoverable error, issue CMD12 */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(12)),
+ SDMMC_BLOCK_ARGUMENT0,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+ }
+ if ((status != SDMMC_BLOCK_MODE_STATUS_SUCCESS) && (status != SDMMC_BLOCK_MODE_STATUS_NONRECOVERABLE_ERROR))
+ {
+ /* Set software reset for data line */
+ status = SDMMC_BLOCK_SD_lReset(obj, (uint32_t)XMC_SDMMC_SW_RST_DAT_LINE);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Check for XMC_SDMMC_CMD_NOT_ISSUED_BY_ACMD12_ERR */
+ if (XMC_SDMMC_GetACMDErrStatus(obj->sdmmc_sd->sdmmc, XMC_SDMMC_CMD_NOT_ISSUED_BY_ACMD12_ERR) == true)
+ {
+ XMC_DEBUG("SDMMC_BLOCK_ACMDErrorRecovery: SDMMC_BLOCK_ACMD_CMD_wo_DAT_NOT_ISSUED");
+ }
+ else
+ {
+ /*
+ * Check pcmd_flag. If 1, an error occurred in CMD_wo_DAT,
+ * and also in the SD memory transfer
+ */
+ if (pcmd_flag == 1U)
+ {
+ XMC_DEBUG("SDMMC_BLOCK_CheckPCMDFlag: ACMD both error");
+ }
+ else
+ {
+ XMC_DEBUG("SDMMC_BLOCK_CheckPCMDFlag: ACMD SD transfer error");
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ /* Set software reset for CMD line */
+ status = SDMMC_BLOCK_SD_lReset(obj, (uint32_t)XMC_SDMMC_SW_RST_CMD_LINE);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Issue CMD12 */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(12)),
+ SDMMC_BLOCK_ARGUMENT0,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+ if (status != SDMMC_BLOCK_MODE_STATUS_NONRECOVERABLE_ERROR)
+ {
+ /*Set Software Reset for Data line*/
+ status = SDMMC_BLOCK_SD_lReset(obj, (uint32_t)XMC_SDMMC_SW_RST_DAT_LINE);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Check XMC_SDMMC_CMD_NOT_ISSUED_BY_ACMD12_ERR */
+ if (XMC_SDMMC_GetACMDErrStatus(obj->sdmmc_sd->sdmmc, XMC_SDMMC_CMD_NOT_ISSUED_BY_ACMD12_ERR) == true)
+ {
+ XMC_DEBUG("SDMMC_BLOCK_ACMDErrorRecovery: SDMMC_BLOCK_ACMD_CMD_wo_DAT_NOT_ISSUED");
+ }
+ else
+ {
+ /*
+ * Check PCMD flag. If 1, an error occurred in CMD_wo_DAT,
+ * and also in the SD memory transfer
+ */
+ if (pcmd_flag == 1U)
+ {
+ XMC_DEBUG("SDMMC_BLOCK_CheckPCMDFlag: ACMD both error");
+ }
+ else
+ {
+ XMC_DEBUG("SDMMC_BLOCK_CheckPCMDFlag: ACMD SD transfer error");
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+/* Delay function */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lDelay(SDMMC_BLOCK_t *const obj, uint32_t delay)
+{
+ uint32_t timeoutTime;
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_CREATE_TIMER_FAILED;
+
+ /* Set timeout time. */
+ timeoutTime = TimerGet() + (delay / 1000u) + 1u;
+
+ /* Wait for the timer to expire. */
+ while (TimerGet() < timeoutTime)
+ {
+ /* Service the watchdog. */
+ CopService();
+ }
+
+ /* Update the status. */
+ status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+
+ /* Return the status. */
+ return status;
+}
+
+/*
+ * Perform host controller initialization and card initialization.
+ * Also, reading card registers
+ */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_CardIdentificationProcess(SDMMC_BLOCK_t *const obj)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ uint32_t timeoutTime;
+
+ /* Wait until the internal clock is stable */
+ timeoutTime = TimerGet() + (SDMMC_BLOCK_CLOCK_STABLE_DELAY / 1000u) + 1u;
+
+ do
+ {
+ if (TimerGet() > timeoutTime)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_TIMEOUT_OCCURED;
+ break;
+ }
+ /* Service the watchdog. */
+ CopService();
+ } while ((XMC_SDMMC_GetClockStability(obj->sdmmc_sd->sdmmc) == false));
+
+ if (status != SDMMC_BLOCK_MODE_STATUS_TIMEOUT_OCCURED)
+ {
+ /* Enable the SD clock */
+ XMC_SDMMC_SDClockEnable(obj->sdmmc_sd->sdmmc);
+
+ /* Turn the bus power on */
+ XMC_SDMMC_BusPowerOn(obj->sdmmc_sd->sdmmc);
+
+ if (obj->sdmmc_sd->mode_init_flag == false)
+ {
+ status = SDMMC_BLOCK_SD_lInitializeCard(obj);
+ if ((status == SDMMC_BLOCK_MODE_STATUS_SUCCESS) ||
+ (status == SDMMC_BLOCK_MODE_STATUS_INITIALIZED_BUT_LOCKED))
+ {
+ status = SDMMC_BLOCK_SD_lAfterCardInitialize(obj);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ obj->sdmmc_sd->mode_init_flag = 1U;
+ }
+ }
+ }
+ }
+
+ return status;
+}
+
+/* Check if the sector address is out of bound */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lCheckSectorBound(SDMMC_BLOCK_t *const obj,
+ uint32_t sector_num,
+ uint32_t sector_count)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status;
+ uint32_t local_sector_count = 0U;
+
+ /* Get sector count function */
+ status = SDMMC_BLOCK_SD_GetSectorCount(obj, (void *)&local_sector_count);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Check the sector count limit */
+ if ((sector_num + sector_count) > local_sector_count)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_SECTOR_OUT_OF_BOUND;
+ }
+ }
+
+ return status;
+}
+
+/* Perform erase operation */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lLocalErase(SDMMC_BLOCK_t *const obj,
+ uint32_t start_addr,
+ uint32_t end_addr,
+ uint32_t timeout)
+{
+ /* Stores the response received */
+ uint32_t card_status = 0U;
+ uint32_t timeoutTime;
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+
+ if (((uint32_t)obj->card_type & (uint32_t)SDMMC_BLOCK_CARD_TYPE_BLOCK_ADDRESSING) == (uint32_t)0U)
+ {
+ start_addr *= (uint32_t)512U;
+ end_addr *= (uint32_t)512U;
+ }
+
+ /* SD erase start command */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_SD_COMMAND(32)),
+ start_addr,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* SD Erase End Command */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_SD_COMMAND(33)),
+ end_addr,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+ }
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_SD_COMMAND(38)),
+ SDMMC_BLOCK_ARGUMENT0,
+ XMC_SDMMC_RESPONSE_TYPE_R1b,
+ &card_status);
+
+ timeoutTime = TimerGet() + ((timeout * (uint32_t)1000U)) + 1u;
+
+ do
+ {
+ if (TimerGet() > timeoutTime)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_TIMEOUT_OCCURED;
+ break;
+ }
+ /* Service the watchdog. */
+ CopService();
+ } while ((XMC_SDMMC_IsDataLineBusy(obj->sdmmc_sd->sdmmc) ||
+ (XMC_SDMMC_IsCommandLineBusy(obj->sdmmc_sd->sdmmc))));
+
+ }
+
+ return status;
+}
+
+/*
+ * PUBLIC FUNCTIONS
+ */
+
+/* Initialize host controller */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lHostControllerInit(SDMMC_BLOCK_t *const obj)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_HOST_CONTROLLER_INITIALIZED;
+
+ /* Check if host controller is initialized */
+ if (((uint32_t)obj->card_state & (uint32_t)SDMMC_BLOCK_CARD_STATE_HC_INITIALIZED) == (uint32_t)0U)
+ {
+ /* Reset the registers to default values */
+ status = SDMMC_BLOCK_SD_lReset(obj, (uint32_t)XMC_SDMMC_SW_RESET_ALL);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /*
+ * The internal clock should be disabled before
+ * updating frequency clock select (Please see
+ * section 2.2.14 -> Clock Control Register)
+ */
+ XMC_SDMMC_Stop(obj->sdmmc_sd->sdmmc);
+
+ /* Select SD clock frequency */
+ XMC_SDMMC_SDClockFreqSelect(obj->sdmmc_sd->sdmmc, XMC_SDMMC_CLK_DIV_2);
+
+ /* Internal clock enable */
+ XMC_SDMMC_Start(obj->sdmmc_sd->sdmmc);
+
+ /*
+ * Enable all normal interrupt status bits except block-gap
+ * event, card interrupt event, DMA int., ADMA and auto cmd
+ * errors. Enable the status and the events themselves.
+ */
+ obj->sdmmc_sd->sdmmc->EN_INT_STATUS_NORM = SDMMC_BLOCK_NORMAL_INT_STATUS_ENABLE;
+ obj->sdmmc_sd->sdmmc->EN_INT_STATUS_ERR = SDMMC_BLOCK_ERROR_INT_STATUS_ENABLE;
+ obj->sdmmc_sd->sdmmc->EN_INT_SIGNAL_NORM = SDMMC_BLOCK_NORMAL_INT_SIGNAL_ENABLE;
+ obj->sdmmc_sd->sdmmc->EN_INT_SIGNAL_ERR = SDMMC_BLOCK_ERROR_INT_SIGNAL_ENABLE;
+
+#if SDMMC_BLOCK_SD_CARD_DETECTION_SUPPORT
+ XMC_SDMMC_EnableEvent(obj->sdmmc_sd->sdmmc, ((uint32_t)XMC_SDMMC_CARD_REMOVAL) |
+ ((uint32_t)XMC_SDMMC_CARD_INS) |
+ ((uint32_t)XMC_SDMMC_CARD_INT));
+#endif
+
+ /* Set data-line timeout */
+ XMC_SDMMC_SetDataLineTimeout(obj->sdmmc_sd->sdmmc, XMC_SDMMC_DAT_TIMEOUT_COUNTER_2_POW_27);
+
+ /* Set bus voltage in the power control register: flattop 3.3 volts */
+ XMC_SDMMC_SetBusVoltage(obj->sdmmc_sd->sdmmc, XMC_SDMMC_BUS_VOLTAGE_3_3_VOLTS);
+
+ /* Update the state status to card initialized */
+ obj->card_state |= (uint8_t)((uint8_t)SDMMC_BLOCK_CARD_STATE_HC_INITIALIZED |
+ (uint8_t)SDMMC_BLOCK_CARD_STATE_NO_CARD |
+ (uint8_t)SDMMC_BLOCK_CARD_STATE_NOT_INITIALIZED);
+
+ /* A stub of delay for initialization */
+ for (volatile uint32_t i = 0; (uint32_t)i < (uint32_t)100000U; i++)
+ {
+ }
+ }
+ }
+
+ return status;
+}
+
+/* De-initialize the host controller */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lHostControllerDeInit(SDMMC_BLOCK_t *const obj)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+
+ /* Check if the host controller is initialized */
+ if (((uint32_t)obj->card_state & (uint32_t)SDMMC_BLOCK_CARD_STATE_HC_INITIALIZED) != (uint32_t)0U)
+ {
+ /* Cleanup the card */
+ SDMMC_BLOCK_SD_lCardCleanUp(obj);
+
+ /* Reset host controller's registers */
+ status = SDMMC_BLOCK_SD_lReset(obj, (uint32_t)XMC_SDMMC_SW_RESET_ALL);
+ }
+
+ return status;
+}
+
+/* Read multiple blocks of data from the card */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lCardReadMultipleBlocks(SDMMC_BLOCK_t *const obj,
+ uint32_t *read_buf,
+ uint32_t read_addr,
+ uint32_t num_blocks)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_INIT_FAIL;
+ obj->sdmmc_sd->cmd_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ obj->sdmmc_sd->data_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ obj->sdmmc_sd->transfer_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+
+ /* Check if initialization is successful */
+ if (obj->sdmmc_sd->mode_init_flag == true)
+ {
+ /* Ensure that sector number is not out of bound */
+ status = SDMMC_BLOCK_SD_lCheckSectorBound(obj, read_addr, num_blocks);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Set transfer direction select in the Transfer Mode Register */
+ XMC_SDMMC_SetDataTransferDirection(obj->sdmmc_sd->sdmmc, XMC_SDMMC_DATA_TRANSFER_CARD_TO_HOST);
+
+ /* Send Multiple Block Read Command i.e CMD18 */
+ status = SDMMC_BLOCK_SD_lMultiBlockTransfer(obj,
+ &read_addr,
+ num_blocks,
+ &(SDMMC_BLOCK_COMMON_COMMAND(18)),
+ read_buf,
+ SDMMC_BLOCK_SD_DATA_TRANSFER_READ_BUFFER);
+ }
+ }
+
+ return status;
+}
+
+/* Read single block of data from the card */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lCardReadSingleBlock(SDMMC_BLOCK_t *const obj,
+ uint32_t *read_buf,
+ uint32_t read_addr)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_INIT_FAIL;
+ uint32_t sector_count = 1U;
+
+ /* Check if initialization successful */
+ if (obj->sdmmc_sd->mode_init_flag == true)
+ {
+ /* Ensure that the sector number is not out of bound */
+ status = SDMMC_BLOCK_SD_lCheckSectorBound(obj, read_addr, sector_count);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Block addressing or byte addressing */
+ if (((uint32_t)obj->card_type & (uint32_t)SDMMC_BLOCK_CARD_TYPE_BLOCK_ADDRESSING) == (uint32_t)0UL)
+ {
+ read_addr = (uint32_t)(read_addr * 512UL);
+ }
+
+ XMC_SDMMC_SetDataTransferDirection(obj->sdmmc_sd->sdmmc, XMC_SDMMC_DATA_TRANSFER_CARD_TO_HOST);
+ /* SDMMC->TRANSFER_MODE |= (uint16_t)((uint32_t)1U << (uint32_t)SDMMC_TRANSFER_MODE_TX_DIR_SELECT_Pos); */
+
+ /* Perform the Single block transfer operation */
+ status = SDMMC_BLOCK_SD_lSingleBlockTransfer(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(17)),
+ read_addr,
+ (uint16_t)SDMMC_BLOCK_BLOCK_SIZE,
+ read_buf,
+ SDMMC_BLOCK_SD_DATA_TRANSFER_READ_BUFFER);
+ }
+ }
+
+ return status;
+}
+
+/* Write multiple blocks of data on the card */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lCardWriteMultipleBlocks(SDMMC_BLOCK_t *const obj,
+ const uint32_t *write_buf,
+ uint32_t write_addr,
+ uint32_t num_blocks)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_INIT_FAIL;
+
+ obj->sdmmc_sd->cmd_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ obj->sdmmc_sd->data_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ obj->sdmmc_sd->transfer_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+
+ /* Check if initialization is successful */
+ if (obj->sdmmc_sd->mode_init_flag == true)
+ {
+ /* Ensure sector number is not out of bound */
+ status = SDMMC_BLOCK_SD_lCheckSectorBound(obj, write_addr, num_blocks);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Clear transfer direction select in transfer mode register */
+ XMC_SDMMC_SetDataTransferDirection(obj->sdmmc_sd->sdmmc, XMC_SDMMC_DATA_TRANSFER_HOST_TO_CARD);
+
+ /* Send Multiple Block Write Command i.e CMD25 */
+ status = SDMMC_BLOCK_SD_lMultiBlockTransfer(obj,
+ &write_addr,
+ num_blocks,
+ &(SDMMC_BLOCK_COMMON_COMMAND(25)),
+ (uint32_t *)write_buf,
+ SDMMC_BLOCK_SD_DATA_TRANSFER_WRITE_BUFFER);
+ }
+ }
+
+ return status;
+}
+
+/* Write single block of data on the card */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lCardWriteSingleBlock(SDMMC_BLOCK_t *const obj,
+ const uint32_t *write_buf,
+ uint32_t write_addr)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_INIT_FAIL;
+ uint32_t sector_count = 1U;
+
+ /* Check if initialization is successful */
+ if (obj->sdmmc_sd->mode_init_flag == true)
+ {
+ /* Check if sector number is not out of bound */
+ status = SDMMC_BLOCK_SD_lCheckSectorBound(obj, write_addr, sector_count);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* If not block addressing, then multiply by 512 bytes */
+ if (((uint32_t)obj->card_type & (uint32_t)SDMMC_BLOCK_CARD_TYPE_BLOCK_ADDRESSING) == (uint32_t)0U)
+ {
+ write_addr = (uint32_t)(write_addr * 512U);
+ }
+
+ /* Clear transfer direction select bit */
+ XMC_SDMMC_SetDataTransferDirection(obj->sdmmc_sd->sdmmc, XMC_SDMMC_DATA_TRANSFER_HOST_TO_CARD);
+
+ /* Single block transfer function */
+ status = SDMMC_BLOCK_SD_lSingleBlockTransfer(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(24)),
+ write_addr,
+ (uint16_t)SDMMC_BLOCK_BLOCK_SIZE,
+ (uint32_t *)write_buf,
+ SDMMC_BLOCK_SD_DATA_TRANSFER_WRITE_BUFFER);
+ }
+ }
+
+ return status;
+}
+
+/* Erase data from the card */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_EraseBlock(SDMMC_BLOCK_t *const obj, uint32_t start_addr, uint32_t end_addr)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_INIT_FAIL;
+ uint32_t tmp_start_addr;
+ uint32_t num_sectors = 0U;
+ /* Allocation unit to no. of sectors in 1 AU table mapping */
+ uint32_t au_to_sectors[10] = {0U, 32U, 64U, 128U, 256U, 512U, 1024U, 2048U, 4096U, 8192U};
+ uint16_t erase_size = (uint16_t)0U;
+ uint8_t erase_offset = (uint8_t)0U;
+ uint8_t erase_timeout = (uint8_t)0U;
+ uint8_t au_size = (uint8_t)0U;
+ uint32_t sectors_in_au = 0U;
+ uint32_t sectors_in_erase_cluster = 0U;
+ /* Read SD status */
+ uint32_t sd_status[16] = {0U};
+ uint32_t erase_timeout_per_cluster = 0UL;
+
+ obj->sdmmc_sd->cmd_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ obj->sdmmc_sd->data_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ obj->sdmmc_sd->transfer_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+
+ /* If the card is read only or write protected */
+ if ((obj->card_state & (uint8_t)SDMMC_BLOCK_CARD_STATE_WRITE_PROTECTED) != (uint8_t)0U)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_WP_VIOLATION_ERROR;
+ }
+#ifdef SDMMC_BLOCK_CARD_WRITE_PROTECT_SIGNAL
+ else if ((obj->sdwc != NULL) && (XMC_GPIO_GetInput(obj->sdwc->port, obj->sdwc->pin)))
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_WP_VIOLATION_ERROR;
+ }
+#endif /* SDMMC_BLOCK_CARD_WRITE_PROTECT_SIGNAL */
+ /* Assume initialization is successful: This is invoked from IOCTL */
+ else
+ {
+ tmp_start_addr = start_addr;
+ num_sectors = (end_addr - tmp_start_addr) + 1U;
+ /* Check sector number is not out of bound */
+ status = SDMMC_BLOCK_SD_lCheckSectorBound(obj, tmp_start_addr, num_sectors);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Erase timeout calculation */
+ /* Get SD status */
+ status = SDMMC_BLOCK_SD_GetSdStatus(obj, (void*)&(sd_status[0]));
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Bits 400-401 in SD status: Erase offset */
+ erase_offset = (uint8_t)(((sd_status[3] & 0x00000300UL)) >> 8U);
+
+ /* Bits 402-407: Erase timeout */
+ erase_timeout = (uint8_t)(((sd_status[3] & 0x0000FC00UL)) >> 10UL);
+
+ /* Bits 408-423: Erase size */
+ erase_size = (uint16_t)((((sd_status[2] & 0xFF000000U) >> 24U) << 8U) | (sd_status[3] & 0x000000FFU));
+
+ /* Bits 428-431: Allocation unit size */
+ au_size = (uint8_t)((sd_status[2] & 0x00F00000U) >> 20);
+
+ /* Erase timeout calculations */
+ erase_timeout_per_cluster = ((uint32_t)erase_timeout / (uint32_t)erase_size) + (uint32_t)erase_offset;
+
+ /* Number of sectors in 1 AU */
+ sectors_in_au = au_to_sectors[au_size];
+ sectors_in_erase_cluster = sectors_in_au * erase_size;
+
+ while (num_sectors >= sectors_in_erase_cluster)
+ {
+ status = SDMMC_BLOCK_SD_lLocalErase(obj,
+ tmp_start_addr,
+ (tmp_start_addr + sectors_in_erase_cluster),
+ erase_timeout_per_cluster);
+ if (status != SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ break;
+ }
+ tmp_start_addr = tmp_start_addr + sectors_in_erase_cluster;
+ num_sectors = num_sectors - sectors_in_erase_cluster;
+ }
+
+ if (num_sectors != 0U)
+ {
+ status = SDMMC_BLOCK_SD_lLocalErase(obj, tmp_start_addr, end_addr, erase_timeout_per_cluster);
+ }
+ }
+ }
+ }
+
+ /* Wait for until the command OR data lines aren't busy */
+ while ((XMC_SDMMC_IsDataLineBusy(obj->sdmmc_sd->sdmmc)) || (XMC_SDMMC_IsCommandLineBusy(obj->sdmmc_sd->sdmmc)))
+ {
+ }
+
+ return status;
+}
+
+/* Set, clear password, lock/unlock card */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_LockUnlockCard(SDMMC_BLOCK_t *const obj,
+ SDMMC_BLOCK_LOCK_STRUCTURE_t *lock,
+ SDMMC_BLOCK_CARD_LOCK_STATUS_t operation_mode)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ uint32_t data_length = 0U;
+ uint32_t card_status;
+
+ /* Select the card before proceeding */
+ status = SDMMC_BLOCK_SD_lSwitchToTransferState(obj);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Send CMD42 and write the lock data structure */
+ /* Clear transfer direction select in transfer mode register */
+ XMC_SDMMC_SetDataTransferDirection(obj->sdmmc_sd->sdmmc, XMC_SDMMC_DATA_TRANSFER_HOST_TO_CARD);
+
+ /* Compute password length */
+ data_length = (uint32_t)((((uint32_t)lock->pwd_len + (uint32_t)1U) >> 1U) << 1U) + 2U;
+
+ /* Set block length */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(16)),
+ data_length,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ status = SDMMC_BLOCK_SD_lSingleBlockTransfer(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(42)),
+ (uint32_t)SDMMC_BLOCK_ARGUMENT0,
+ (uint16_t)data_length,
+ (uint32_t *)lock,
+ SDMMC_BLOCK_SD_DATA_TRANSFER_WRITE_BUFFER);
+
+ while (XMC_SDMMC_IsDataLineBusy(obj->sdmmc_sd->sdmmc))
+ {
+ }
+
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(16)),
+ 512U,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+
+ /* Wait for until the command OR data lines aren't busy */
+ while ((XMC_SDMMC_IsDataLineBusy(obj->sdmmc_sd->sdmmc)) ||
+ (XMC_SDMMC_IsCommandLineBusy(obj->sdmmc_sd->sdmmc)))
+ {
+ }
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ status = SDMMC_BLOCK_SD_lCheckLockStatus(obj, operation_mode);
+ }
+ }
+ }
+ return status;
+}
+
+/* Get the lock status from card */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_GetLockStatus(SDMMC_BLOCK_t *const obj,
+ SDMMC_BLOCK_CARD_LOCK_STATUS_t *lock_status)
+{
+ uint32_t card_status = 0UL;
+ uint32_t arg = 0UL;
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+
+ arg |= ((uint32_t)obj->sdmmc_sd->card_info.rca << SDMMC_BLOCK_ARG_RCA_BITPOS);
+
+ /* Send CMD13 to read card status */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(13)),
+ arg,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Lock/unlock status bit in the CSR register */
+ if (((uint32_t)card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_CARD_IS_LOCKED_BITMASK) != (uint32_t)0)
+ {
+ *lock_status = SDMMC_BLOCK_CARD_LOCK_STATUS_LOCKED;
+ obj->card_state |= (uint8_t)SDMMC_BLOCK_CARD_STATE_LOCKED;
+ }
+ else
+ {
+ *lock_status = SDMMC_BLOCK_CARD_LOCK_STATUS_UNLOCKED;
+ obj->card_state &= (uint8_t)~(uint8_t)(SDMMC_BLOCK_CARD_STATE_LOCKED);
+ }
+ }
+
+ return status;
+}
+
+/* Get card's current state */
+uint8_t SDMMC_BLOCK_SD_GetState(SDMMC_BLOCK_t *obj)
+{
+ return (obj->card_state & 0xFU);
+}
+
+/* Get card type */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_GetCardType(SDMMC_BLOCK_t *const obj, uint32_t *card_type)
+{
+ *card_type = obj->card_type;
+
+ return SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+}
+
+/* Get CID register information of card */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_GetCid(SDMMC_BLOCK_t *const obj, void *buf)
+{
+ SDMMC_BLOCK_CID_t *temp = (SDMMC_BLOCK_CID_t *)buf;
+
+ temp->manufacturing_date = (uint16_t)((obj->sdmmc_sd->card_info.cid[0]) & 0xFFFU);
+ temp->product_serial_num = (obj->sdmmc_sd->card_info.cid[1] << 16U) | (obj->sdmmc_sd->card_info.cid[0] >> 16U);
+ temp->product_rev = (uint8_t)((obj->sdmmc_sd->card_info.cid[1] >> 16U) & 0xFFU);
+ temp->product_name[0] = (uint8_t)((obj->sdmmc_sd->card_info.cid[2] >> 24U) & 0xFFU);
+ temp->product_name[1] = (uint8_t)((obj->sdmmc_sd->card_info.cid[2] >> 16U) & 0xFFU);
+ temp->product_name[2] = (uint8_t)((obj->sdmmc_sd->card_info.cid[2] >> 8U) & 0xFFU);
+ temp->product_name[3] = (uint8_t)((obj->sdmmc_sd->card_info.cid[2] >> 0U) & 0xFFU);
+ temp->product_name[4] = (uint8_t)((obj->sdmmc_sd->card_info.cid[1] >> 24U) & 0xFFU);
+ temp->app_oem_id[0] = (uint8_t)((obj->sdmmc_sd->card_info.cid[3] >> 8U) & 0xFFU);
+ temp->app_oem_id[1] = (uint8_t)((obj->sdmmc_sd->card_info.cid[3]) & 0xFFU);
+ temp->manufacturer_id = (uint8_t)((obj->sdmmc_sd->card_info.cid[3] >> 16U) & 0xFFU);
+
+ return SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+}
+
+/* Get OCR information */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_GetOcr(SDMMC_BLOCK_t *const obj, void *buf)
+{
+ *(uint32_t *)buf = obj->sdmmc_sd->card_info.ocr;
+
+ return SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+}
+
+/* Get CSD information */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_GetCsd(SDMMC_BLOCK_t *const obj, void *buf)
+{
+ /*
+ * CSD Structure includes 7-bit CRC and 1-bit fixed bit
+ * which is not sent by the card. So, skip 1 byte before
+ * copying into the structure.
+ */
+ memcpy(((uint8_t *)buf + 1U), (void *)obj->sdmmc_sd->card_info.csd, 15U);
+
+ return SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+}
+
+/* Get number of sectors present on the card */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_GetSectorCount(SDMMC_BLOCK_t *const obj, void *buf)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ uint32_t mult = 0U;
+
+ if (((uint32_t)obj->card_type & (uint32_t)SDMMC_BLOCK_CARD_TYPE_HIGH_CAPACITY) != (uint32_t)0U)
+ {
+ SDMMC_BLOCK_SDV2_CSD_t temp_csd_v2 = {0U};
+
+ /* Get CSD function */
+ status = SDMMC_BLOCK_SD_GetCsd(obj, (void *)&temp_csd_v2);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /*
+ * For High Capacity SD card, (C_SIZE field value + 1) * 1024
+ * gives the sector count
+ */
+ *(uint32_t *)buf = (uint32_t)(((((uint32_t)temp_csd_v2.dev_size_high << (uint32_t)16UL) |
+ ((uint32_t)temp_csd_v2.dev_size_low)) + (uint32_t)1UL) << (uint32_t)10UL);
+ }
+ }
+ /*
+ * For Standard SD (and MMC) cards:
+ * Sector Count = (Device Size + 1) * Mult, where Mult = 2 ^ C_SIZE_MULT
+ */
+ else
+ {
+ SDMMC_BLOCK_SDV1_CSD_t temp_csd_v1 = {0U};
+ /* Get CSD function */
+ status = SDMMC_BLOCK_SD_GetCsd(obj, (void *)&temp_csd_v1);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Left shift evaluates 1 * 2 ^ (TmpMmcCsd.DeviceSizeMult + 2) */
+ mult = (uint32_t)((uint32_t)temp_csd_v1.dev_size_mult + 2U);
+
+ /* Sector Count = device_size * mult */
+ *(uint32_t *)buf = (uint32_t)((((uint32_t)temp_csd_v1.dev_size_high << (uint32_t)2UL) |
+ ((uint32_t)temp_csd_v1.dev_size_low)) + (uint32_t)1UL) << mult;
+ }
+ }
+
+ return status;
+}
+
+/* Get sector size info from the card */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_GetSectorSize(SDMMC_BLOCK_t *const obj, void *buf)
+{
+ /* Sector Size is fixed to 512 bytes */
+ *(uint16_t *)buf = (uint16_t)512U;
+
+ return SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+}
+
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_GetBlockSize(SDMMC_BLOCK_t *const obj, void *buf)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+
+ /* SD high capacity card (CSD V2) */
+ if (((uint32_t)obj->card_type & (uint32_t)SDMMC_BLOCK_CARD_TYPE_HIGH_CAPACITY) != (uint32_t)0)
+ {
+ SDMMC_BLOCK_SDV2_CSD_t temp_csd_v2 = {0U};
+ /* Get CSD function */
+ status = SDMMC_BLOCK_SD_GetCsd(obj, (void *)&temp_csd_v2);
+ *(uint32_t *)buf = (uint32_t)((uint32_t)temp_csd_v2.erase_sector_size + (uint32_t)1U);
+ }
+ /* SD standard capacity card (CSD V1) */
+ else
+ {
+ SDMMC_BLOCK_SDV2_CSD_t temp_csd_v1 = {0U};
+ /* Get CSD function */
+ status = SDMMC_BLOCK_SD_GetCsd(obj, (void *)&temp_csd_v1);
+ *(uint32_t *)buf = (uint32_t)((uint32_t)temp_csd_v1.erase_sector_size + (uint32_t)1U);
+ }
+
+ return status;
+}
+
+/* Get SD status information */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_GetSdStatus(SDMMC_BLOCK_t *const obj, void *buf)
+{
+ uint32_t arg = 0U;
+ uint32_t card_status = 0U;
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+
+ /* Select the card (CMD7) */
+ status = SDMMC_BLOCK_SD_lSwitchToTransferState(obj);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Send CMD55 (application specific command) */
+ arg |= (uint32_t)((uint32_t)obj->sdmmc_sd->card_info.rca << (uint32_t)SDMMC_BLOCK_ARG_RCA_BITPOS);
+
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(55)),
+ arg,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Set transfer mode */
+ XMC_SDMMC_SetDataTransferDirection(obj->sdmmc_sd->sdmmc, XMC_SDMMC_DATA_TRANSFER_CARD_TO_HOST);
+
+ /* Read the SD status from the data line */
+ status = SDMMC_BLOCK_SD_lSingleBlockTransfer(obj,
+ &(SDMMC_BLOCK_SD_COMMAND(59)),
+ (uint32_t)SDMMC_BLOCK_ARGUMENT0,
+ (uint16_t)64U,
+ (uint32_t *)buf,
+ SDMMC_BLOCK_SD_DATA_TRANSFER_READ_BUFFER);
+ }
+ }
+
+ return status;
+}
+
+/* Eject SD card */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_EjectCard(SDMMC_BLOCK_t *const obj)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ uint32_t arg = 0U;
+
+ if ((obj->card_state & (uint16_t)SDMMC_BLOCK_CARD_STATE_NO_CARD) == 0U)
+ {
+ /* Send CMD15 to deactivate the card */
+ arg |= (uint32_t)((uint32_t)obj->sdmmc_sd->card_info.rca << (uint32_t)SDMMC_BLOCK_ARG_RCA_BITPOS);
+
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_SD_COMMAND(15)),
+ (uint32_t)arg,
+ (XMC_SDMMC_RESPONSE_TYPE_t)XMC_SDMMC_RESPONSE_TYPE_NO_RESPONSE,
+ NULL);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Card Cleanup */
+ SDMMC_BLOCK_SD_lCardCleanUp(obj);
+ obj->sdmmc_sd->mode_init_flag = false;
+ }
+ }
+
+ return status;
+}
+
+/*
+ * Initialize low level drivers, host controller, the card
+ * and read card registers.
+ */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_Start(SDMMC_BLOCK_t *const obj)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_HOST_CONTROLLER_INITIALIZED;
+
+ /* Check If host controller is already initialized */
+ if (((uint32_t)obj->card_state & (uint32_t)SDMMC_BLOCK_CARD_STATE_HC_INITIALIZED) == (uint32_t)0U)
+ {
+#if (SDMMC_BLOCK_POLLING_MODE == 0U)
+ /* Enable Interrupt */
+ NVIC_SetPriority(SDMMC0_0_IRQn,
+ NVIC_EncodePriority(NVIC_GetPriorityGrouping(),
+ obj->sdmmc_sd->int_priority,
+ obj->sdmmc_sd->int_sub_priority));
+
+ NVIC_ClearPendingIRQ(SDMMC0_0_IRQn);
+ NVIC_EnableIRQ(SDMMC0_0_IRQn);
+#endif
+
+ /* Host controller initialize */
+ status = SDMMC_BLOCK_SD_lHostControllerInit(obj);
+ }
+
+ return status;
+}
+
+/* De-assert the SDMMC peripheral */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_Init(SDMMC_BLOCK_t *const obj)
+{
+ /* Enable SDMMC peripheral */
+ XMC_SDMMC_Enable(obj->sdmmc_sd->sdmmc);
+
+ /* Enable SCU clock for SDMMC */
+ XMC_SCU_CLOCK_EnableClock(XMC_SCU_CLOCK_MMC);
+
+ /* De-initialize host controller */
+ (void)SDMMC_BLOCK_SD_lHostControllerDeInit(obj);
+
+ /* Initialize LLD and host controller */
+ return SDMMC_BLOCK_SD_Start(obj);
+}
+
+/* Reads the data from the card */
+SDMMC_BLOCK_STATUS_t SDMMC_BLOCK_SD_ReadBlock(SDMMC_BLOCK_t *const obj,
+ uint8_t *read_buf,
+ uint32_t sector_num,
+ uint8_t sector_count)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status;
+ uint8_t disk_status;
+ SDMMC_BLOCK_STATUS_t res;
+
+ /* Check the status before reading data */
+ disk_status = obj->card_state;
+
+ if ((disk_status & (uint8_t)SDMMC_BLOCK_CARD_STATE_NOT_INITIALIZED) != (uint8_t)0U)
+ {
+ res = SDMMC_BLOCK_STATUS_NOTRDY;
+ }
+ else if ((disk_status & (uint8_t)SDMMC_BLOCK_CARD_STATE_LOCKED) != (uint8_t)0U)
+ {
+ res = SDMMC_BLOCK_STATUS_LOCKED;
+ }
+ else
+ {
+ /* Check for single block read or multiple block read based on sector count */
+ if (sector_count == (uint8_t)1U)
+ {
+ status = SDMMC_BLOCK_SD_lCardReadSingleBlock(obj, (uint32_t *)read_buf, sector_num);
+ }
+ else
+ {
+ status = SDMMC_BLOCK_SD_lCardReadMultipleBlocks(obj, (uint32_t *)read_buf, sector_num, (uint32_t)sector_count);
+ }
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ res = SDMMC_BLOCK_STATUS_SUCCESS;
+ }
+ else if (status == SDMMC_BLOCK_MODE_STATUS_SECTOR_OUT_OF_BOUND)
+ {
+ res = SDMMC_BLOCK_STATUS_PARERR;
+ }
+ else
+ {
+ res = SDMMC_BLOCK_STATUS_FAILURE;
+ }
+ }
+
+ /* Wait for until the command OR data lines aren't busy */
+ while ((XMC_SDMMC_IsDataLineBusy(obj->sdmmc_sd->sdmmc)) || (XMC_SDMMC_IsCommandLineBusy(obj->sdmmc_sd->sdmmc)))
+ {
+ }
+
+ return res;
+}
+
+/* Writes the data on the card */
+SDMMC_BLOCK_STATUS_t SDMMC_BLOCK_SD_WriteBlock(SDMMC_BLOCK_t *const obj,
+ const uint8_t *write_buf,
+ uint32_t sector_num,
+ uint8_t sector_count)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status;
+ uint8_t disk_status;
+ SDMMC_BLOCK_STATUS_t res;
+
+ /* Get card state */
+ disk_status = obj->card_state;
+
+ /* If the card is not initialized */
+ if ((disk_status & (uint8_t)SDMMC_BLOCK_CARD_STATE_NOT_INITIALIZED) != (uint8_t)0U)
+ {
+ res = SDMMC_BLOCK_STATUS_NOTRDY;
+ }
+ else if ((disk_status & (uint8_t)SDMMC_BLOCK_CARD_STATE_LOCKED) != (uint8_t)0U)
+ {
+ res = SDMMC_BLOCK_STATUS_LOCKED;
+ }
+ /* If the card is read only or write protected */
+ else if ((disk_status & (uint8_t)SDMMC_BLOCK_CARD_STATE_WRITE_PROTECTED) != (uint8_t)0U)
+ {
+ res = SDMMC_BLOCK_STATUS_WRPRT;
+ }
+#ifdef SDMMC_BLOCK_CARD_WRITE_PROTECT_SIGNAL
+ else if ((obj->sdwc != NULL) && (XMC_GPIO_GetInput(obj->sdwc->port, obj->sdwc->pin)))
+ {
+ res = SDMMC_BLOCK_STATUS_WRPRT;
+ }
+#endif /* SDMMC_BLOCK_CARD_WRITE_PROTECT_SIGNAL */
+ else
+ {
+ /* Check for single block write or multiple block write */
+ if (sector_count == (uint8_t)1U)
+ {
+ status = SDMMC_BLOCK_SD_lCardWriteSingleBlock(obj, (const uint32_t *)write_buf, sector_num);
+ }
+ else
+ {
+ status = SDMMC_BLOCK_SD_lCardWriteMultipleBlocks(obj,
+ (const uint32_t *)write_buf,
+ sector_num,
+ (uint32_t)sector_count);
+ }
+
+ if ((status == SDMMC_BLOCK_MODE_STATUS_SUCCESS) || (status == SDMMC_BLOCK_MODE_STATUS_BUFFER_READY))
+ {
+ res = SDMMC_BLOCK_STATUS_SUCCESS;
+ }
+ else if (status == SDMMC_BLOCK_MODE_STATUS_SECTOR_OUT_OF_BOUND)
+ {
+ res = SDMMC_BLOCK_STATUS_PARERR;
+ }
+ else
+ {
+ res = SDMMC_BLOCK_STATUS_FAILURE;
+ }
+ }
+
+ /* Wait for until the command OR data lines aren't busy */
+ while ((XMC_SDMMC_IsDataLineBusy(obj->sdmmc_sd->sdmmc)) || (XMC_SDMMC_IsCommandLineBusy(obj->sdmmc_sd->sdmmc)))
+ {
+ }
+
+ return res;
+}
+
+#endif /* SDMMC_BLOCK_SD */
+
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/Libraries/FatFS/SDMMC_BLOCK/sdmmc_block_private_sd.h b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/Libraries/FatFS/SDMMC_BLOCK/sdmmc_block_private_sd.h
new file mode 100644
index 00000000..6bec7078
--- /dev/null
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/Libraries/FatFS/SDMMC_BLOCK/sdmmc_block_private_sd.h
@@ -0,0 +1,263 @@
+/**
+ * @file sdmmc_block_private_sd.h
+ * @date 2016-08-24
+ *
+ * NOTE:
+ * This file is generated by DAVE. Any manual modification done to this file will be lost when the code is regenerated.
+ *
+ * @cond
+ ***********************************************************************************************************************
+ * SDMMC_BLOCK v4.0.22 - Configures the SD host to interface with the SDMMC card.
+ *
+ * Copyright (c) 2016-2017, Infineon Technologies AG
+ * 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 the copyright holders nor the names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY,OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes
+ * with Infineon Technologies AG (dave@infineon.com).
+ ***********************************************************************************************************************
+ *
+ * Change History
+ * --------------
+ *
+ * 2016-01-20:
+ * - Initial version.
+ *
+ * 2016-02-08:
+ * - Help Doc updated.
+ * - Bug fixes done.
+ *
+ * 2016-04-05:
+ * - MISRA fixes
+ *
+ * @endcond
+ *
+ */
+
+
+#ifndef SDMMC_BLOCK_SD_H
+#define SDMMC_BLOCK_SD_H
+
+/***********************************************************************************************************************
+ * HEADER FILES
+ **********************************************************************************************************************/
+
+#include
+#include "sdmmc_block.h"
+
+#ifdef SDMMC_BLOCK_SD
+
+/***********************************************************************************************************************
+ * LOCAL DATA
+ **********************************************************************************************************************/
+
+extern const XMC_SDMMC_COMMAND_t sdmmc_block_command[40];
+extern const uint8_t sdmmc_block_sd_hash_table[65];
+
+/***********************************************************************************************************************
+ * MACROS
+ **********************************************************************************************************************/
+
+/**
+ * @brief This structure stores the command register fields.
+ */
+#define SDMMC_BLOCK_COMMON_COMMAND(c) sdmmc_block_command[sdmmc_block_sd_hash_table[c]]
+#define SDMMC_BLOCK_SD_COMMAND(c) SDMMC_BLOCK_COMMON_COMMAND(c)
+
+#define SDMMC_BLOCK_ERROR_CMD_STATUS_BITMASK (0x000FU) /* Command line Int errors status bit-mask */
+#define SDMMC_BLOCK_ERROR_DATA_STATUS_BITMASK (0x0070U) /* Data line Error status bitmask */
+#define SDMMC_BLOCK_TX_BLOCK_SIZE_VALUE (0x0200U) /* Transfer block register */
+#define SDMMC_BLOCK_HC_RESPONSE1_BITPOS (0x10U) /* Response register */
+#define SDMMC_BLOCK_SWITCH_FUNC_GRP1_STATUS_BITMASK (0x0000000FU) /* Switch speed function bit-mask */
+#define SDMMC_BLOCK_SWITCH_FUNC_GRP1_STATUS_BITPOS (0x0U) /* Switch speed function bit-position */
+
+/*
+ * Append by 3 zeros since the SYSTIMER APP takes
+ * time in microseconds
+ */
+#define SDMMC_BLOCK_CARD_POWER_DELAY (20000U) /* Card power delay */
+#define SDMMC_BLOCK_DELAY_IN_TRANSFER (1000000U) /* Transfer delay */
+#define SDMMC_BLOCK_RESET_IN_DATA_TRANSFER (1000000U) /* Reset in data transfer */
+#define SDMMC_BLOCK_DELAY_IN_COMMAND (1000000U) /* Command delay */
+#define SDMMC_BLOCK_RESET_DELAY (500000U) /* Reset delay */
+#define SDMMC_BLOCK_CLOCK_STABLE_DELAY (1000000U) /* Clock stable delay */
+
+#define SDMMC_BLOCK_NUM_CARD_RESET_RETRIES (2U) /* Number of reset retries at card init */
+#define SDMMC_BLOCK_BLOCK_SIZE (512U) /* Block Size in bytes */
+#define SDMMC_BLOCK_NUM_QUADLETS_IN_BLOCK (SDMMC_BLOCK_BLOCK_SIZE >> 2U) /* Block size in quad bytes */
+
+/* Command index */
+#define SDMMC_BLOCK_GO_IDLE_STATE (0x00U) /* CMD0 */
+#define SDMMC_BLOCK_MMC_SEND_OP_COND (0x01U) /* MMC CMD1 */
+#define SDMMC_BLOCK_ALL_SEND_CID (0x02U) /* CMD2 */
+#define SDMMC_BLOCK_SEND_RELATIVE_ADDR (0x03U) /* CMD3 */
+#define SDMMC_BLOCK_SET_DSR (0x04U) /* CMD4 */
+#define SDMMC_BLOCK_MMC_SLEEP_AWAKE (0x05U) /* MMC CMD5 */
+#define SDMMC_BLOCK_SWITCH_FUNC (0x06U) /* CMD6 */
+#define SDMMC_BLOCK_SELECT_DESELECT_CARD (0x07U) /* CMD7 */
+#define SDMMC_BLOCK_SD_SEND_IF_COND (0x08U) /* SD CMD8 */
+#define SDMMC_BLOCK_MMC_SEND_EXT_CSD (0x08U) /* MMC CMD8 */
+#define SDMMC_BLOCK_SEND_CSD (0x09U) /* CMD9 */
+#define SDMMC_BLOCK_SEND_CID (0x0AU) /* CMD10 */
+#define SDMMC_BLOCK_STOP_TRANSMISSION (0x0CU) /* CMD12 */
+#define SDMMC_BLOCK_SEND_STATUS (0x0DU) /* CMD13 */
+#define SDMMC_BLOCK_GO_INACTIVE_STATE (0x0FU) /* CMD15 */
+#define SDMMC_BLOCK_SET_BLOCKLEN (0x10U) /* CMD16 */
+#define SDMMC_BLOCK_READ_SINGLE_BLOCK (0x11U) /* CMD17 */
+#define SDMMC_BLOCK_READ_MULTIPLE_BLOCK (0x12U) /* CMD18 */
+#define SDMMC_BLOCK_WRITE_BLOCK (0x18U) /* CMD24 */
+#define SDMMC_BLOCK_WRITE_MULTIPLE_BLOCK (0x19U) /* CMD25 */
+#define SDMMC_BLOCK_PROGRAM_CSD (0x1BU) /* CMD27 */
+#define SDMMC_BLOCK_SET_WRITE_PROT (0x1CU) /* CMD28 */
+#define SDMMC_BLOCK_CLR_WRITE_PROT (0x1DU) /* CMD29 */
+#define SDMMC_BLOCK_SEND_WRITE_PROT (0x1EU) /* CMD30 */
+#define SDMMC_BLOCK_ERASE_WR_BLK_START (0x20U) /* CMD32 */
+#define SDMMC_BLOCK_ERASE_WR_BLK_END (0x21U) /* CMD33 */
+#define SDMMC_BLOCK_ERASE_GROUP_START (0x23U) /* CMD35 */
+#define SDMMC_BLOCK_ERASE_GROUP_END (0x24U) /* CMD36 */
+#define SDMMC_BLOCK_ERASE (0x26U) /* CMD38 */
+#define SDMMC_BLOCK_LOCK_UNLOCK (0x2AU) /* CMD42 */
+#define SDMMC_BLOCK_APP_CMD (0x37U) /* CMD55 */
+#define SDMMC_BLOCK_GEN_CMD (0x38U) /* CMD56 */
+#define SDMMC_BLOCK_SET_BUS_WIDTH (0x06U) /* ACMD6 */
+#define SDMMC_BLOCK_SD_STATUS (0x0DU) /* ACMD13 */
+#define SDMMC_BLOCK_SEND_NUM_WR_BLOCKS (0x16U) /* ACMD22 */
+#define SDMMC_BLOCK_SET_WR_BLK_ERASE_COUNT (0x17U) /* ACMD23 */
+#define SDMMC_BLOCK_SD_SEND_OP_COND (0x29U) /* ACMD41 */
+#define SDMMC_BLOCK_SET_CLR_CARD_DETECT (0x2AU) /* ACMD42 */
+#define SDMMC_BLOCK_SEND_SCR (0x33U) /* ACMD51 */
+
+/* Start of Card Status Register i.e CSR Error Bits bitmask */
+#define SDMMC_BLOCK_SD_CSR_OUT_OF_RANGE_BITMASK (0x80000000U)
+#define SDMMC_BLOCK_SD_CSR_ADDRESS_ERROR_BITMASK (0x40000000U)
+#define SDMMC_BLOCK_SD_CSR_BLOCK_LEN_ERROR_BITMASK (0x20000000U)
+#define SDMMC_BLOCK_SD_CSR_ERASE_SEQ_ERROR_BITMASK (0x10000000U)
+#define SDMMC_BLOCK_SD_CSR_ERASE_PARAM_BITMASK (0x08000000U)
+#define SDMMC_BLOCK_SD_CSR_WP_VIOLATION_BITMASK (0x04000000U)
+#define SDMMC_BLOCK_SD_CSR_LOCK_UNLOCK_FAILED_BITMASK (0x01000000U)
+#define SDMMC_BLOCK_SD_CSR_COM_CRC_ERROR_BITMASK (0x00800000U)
+#define SDMMC_BLOCK_SD_CSR_ILLEGAL_COMMAND_BITMASK (0x00400000U)
+#define SDMMC_BLOCK_SD_CSR_CARD_ECC_FAILED_BITMASK (0x00200000U)
+#define SDMMC_BLOCK_SD_CSR_CC_ERROR_BITMASK (0x00100000U)
+#define SDMMC_BLOCK_SD_CSR_ERROR_BITMASK (0x00080000U)
+#define SDMMC_BLOCK_SD_CSR_CSD_OVERWRITE_BITMASK (0x00010000U)
+#define SDMMC_BLOCK_SD_CSR_WP_ERASE_SKIP_BITMASK (0x00008000U)
+#define SDMMC_BLOCK_SD_SWITCH_ERROR_BITMASK (0x00000080U)
+#define SDMMC_BLOCK_SD_CSR_ASK_SEQ_ERROR_BITMASK (0x00000008U)
+#define SDMMC_BLOCK_SD_CSR_CARD_IS_LOCKED_BITMASK (0x02000000U)
+#define SDMMC_BLOCK_SD_CSR_CURRENT_STATE_BITMASK (0x00001D00U)
+#define SDMMC_BLOCK_SD_CSR_CURRENT_STATE_BITPOS (0x00000009U)
+#define SDMMC_BLOCK_SD_CSR_CURRENT_STATE_TRANS_VALUE (0x00000004U)
+#define SDMMC_BLOCK_SD_CSR_CARD_IS_LOCKED_BITMASK (0x02000000U)
+
+/* Normal and error interrupt status defines */
+#define SDMMC_BLOCK_NORMAL_INT_STATUS_ENABLE (0x00F3U)
+#define SDMMC_BLOCK_ERROR_INT_STATUS_ENABLE (0xE0FFU)
+#define SDMMC_BLOCK_NORMAL_INT_SIGNAL_ENABLE (0x0033U)
+#define SDMMC_BLOCK_ERROR_INT_SIGNAL_ENABLE (0xE0FFU)
+
+/***********************************************************************************************************************
+ * ENUMS
+ **********************************************************************************************************************/
+
+/***********************************************************************************************************************
+ * DATA STRUCTURES
+ **********************************************************************************************************************/
+
+/***********************************************************************************************************************
+ * API PROTOTYPES
+ **********************************************************************************************************************/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_GetLockStatus(SDMMC_BLOCK_t *const obj, SDMMC_BLOCK_CARD_LOCK_STATUS_t *lock_stat);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_CardIdentificationProcess(SDMMC_BLOCK_t *const obj);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_GetSdStatus(SDMMC_BLOCK_t *const obj, void *buf);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_GetSectorCount(SDMMC_BLOCK_t *const obj, void *buf);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_GetCid(SDMMC_BLOCK_t *const obj, void *buf);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_GetOcr(SDMMC_BLOCK_t *const obj, void *buf);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_GetCsd(SDMMC_BLOCK_t *const obj, void *buf);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_GetCardType(SDMMC_BLOCK_t *const obj, uint32_t *card_type);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_EraseBlock(SDMMC_BLOCK_t *const obj, uint32_t start_addr, uint32_t end_addr);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_GetSectorSize(SDMMC_BLOCK_t *const obj, void *buf);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_GetBlockSize(SDMMC_BLOCK_t *const obj, void *buf);
+
+uint8_t
+SDMMC_BLOCK_SD_GetState(SDMMC_BLOCK_t *const obj);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_Init(SDMMC_BLOCK_t *const obj);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_CheckLockStatus(SDMMC_BLOCK_t *const obj,
+ SDMMC_BLOCK_CARD_LOCK_STATUS_t mode);
+
+SDMMC_BLOCK_STATUS_t
+SDMMC_BLOCK_SD_ReadBlock(SDMMC_BLOCK_t *const obj,
+ uint8_t *read_buf,
+ uint32_t sector_num,
+ uint8_t sector_count);
+
+SDMMC_BLOCK_STATUS_t
+SDMMC_BLOCK_SD_WriteBlock(SDMMC_BLOCK_t *const obj,
+ const uint8_t *write_buf,
+ uint32_t sector_num,
+ uint8_t sector_count);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_LockUnlockCard(SDMMC_BLOCK_t *const obj,
+ SDMMC_BLOCK_LOCK_STRUCTURE_t *lock,
+ SDMMC_BLOCK_CARD_LOCK_STATUS_t mode);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_EjectCard(SDMMC_BLOCK_t *const obj);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifdef SDMMC_BLOCK_SD */
+
+#endif /* SDMMC_BLOCK_SD_H */
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/Libraries/FatFS/ffconf.h b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/Libraries/FatFS/ffconf.h
new file mode 100644
index 00000000..c51b9383
--- /dev/null
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/Libraries/FatFS/ffconf.h
@@ -0,0 +1,266 @@
+/*---------------------------------------------------------------------------/
+/ FatFs - FAT file system module configuration file R0.12 (C)ChaN, 2016
+/---------------------------------------------------------------------------*/
+
+#define _FFCONF 88100 /* Revision ID */
+
+/*---------------------------------------------------------------------------/
+/ Function Configurations
+/---------------------------------------------------------------------------*/
+
+#define _FS_READONLY 0
+/* This option switches read-only configuration. (0:Read/Write or 1:Read-only)
+/ Read-only configuration removes writing API functions, f_write(), f_sync(),
+/ f_unlink(), f_mkdir(), f_chmod(), f_rename(), f_truncate(), f_getfree()
+/ and optional writing functions as well. */
+
+
+#define _FS_MINIMIZE 0
+/* This option defines minimization level to remove some basic API functions.
+/
+/ 0: All basic functions are enabled.
+/ 1: f_stat(), f_getfree(), f_unlink(), f_mkdir(), f_truncate() and f_rename()
+/ are removed.
+/ 2: f_opendir(), f_readdir() and f_closedir() are removed in addition to 1.
+/ 3: f_lseek() function is removed in addition to 2. */
+
+
+#define _USE_STRFUNC 2 /* 0:Disable or 1-2:Enable */
+/* This option switches string functions, f_gets(), f_putc(), f_puts() and
+/ f_printf().
+/
+/ 0: Disable string functions.
+/ 1: Enable without LF-CRLF conversion.
+/ 2: Enable with LF-CRLF conversion. */
+
+
+#define _USE_FIND 0
+/* This option switches filtered directory read functions, f_findfirst() and
+/ f_findnext(). (0:Disable, 1:Enable 2:Enable with matching altname[] too) */
+
+
+#define _USE_MKFS 0
+/* This option switches f_mkfs() function. (0:Disable or 1:Enable) */
+
+
+#define _USE_FASTSEEK 0
+/* This option switches fast seek function. (0:Disable or 1:Enable) */
+
+
+#define _USE_EXPAND 0
+/* This option switches f_expand function. (0:Disable or 1:Enable) */
+
+
+#define _USE_CHMOD 0
+/* This option switches attribute manipulation functions, f_chmod() and f_utime().
+/ (0:Disable or 1:Enable) Also _FS_READONLY needs to be 0 to enable this option. */
+
+
+#define _USE_LABEL 0
+/* This option switches volume label functions, f_getlabel() and f_setlabel().
+/ (0:Disable or 1:Enable) */
+
+
+#define _USE_FORWARD 0
+/* This option switches f_forward() function. (0:Disable or 1:Enable)
+/ To enable it, also _FS_TINY need to be 1. */
+
+
+/*---------------------------------------------------------------------------/
+/ Locale and Namespace Configurations
+/---------------------------------------------------------------------------*/
+
+#define _CODE_PAGE 437
+/* This option specifies the OEM code page to be used on the target system.
+/ Incorrect setting of the code page can cause a file open failure.
+/
+/ 1 - ASCII (No extended character. Non-LFN cfg. only)
+/ 437 - U.S.
+/ 720 - Arabic
+/ 737 - Greek
+/ 771 - KBL
+/ 775 - Baltic
+/ 850 - Latin 1
+/ 852 - Latin 2
+/ 855 - Cyrillic
+/ 857 - Turkish
+/ 860 - Portuguese
+/ 861 - Icelandic
+/ 862 - Hebrew
+/ 863 - Canadian French
+/ 864 - Arabic
+/ 865 - Nordic
+/ 866 - Russian
+/ 869 - Greek 2
+/ 932 - Japanese (DBCS)
+/ 936 - Simplified Chinese (DBCS)
+/ 949 - Korean (DBCS)
+/ 950 - Traditional Chinese (DBCS)
+*/
+
+
+#define _USE_LFN 1 /* 0 to 3 */
+#define _MAX_LFN 255
+/* The _USE_LFN switches the support of long file name (LFN).
+/
+/ 0: Disable support of LFN. _MAX_LFN has no effect.
+/ 1: Enable LFN with static working buffer on the BSS. Always NOT thread-safe.
+/ 2: Enable LFN with dynamic working buffer on the STACK.
+/ 3: Enable LFN with dynamic working buffer on the HEAP.
+/
+/ To enable the LFN, Unicode handling functions (option/unicode.c) must be added
+/ to the project. The working buffer occupies (_MAX_LFN + 1) * 2 bytes and
+/ additional 608 bytes at exFAT enabled. _MAX_LFN can be in range from 12 to 255.
+/ It should be set 255 to support full featured LFN operations.
+/ When use stack for the working buffer, take care on stack overflow. When use heap
+/ memory for the working buffer, memory management functions, ff_memalloc() and
+/ ff_memfree(), must be added to the project. */
+
+
+#define _LFN_UNICODE 0
+/* This option switches character encoding on the API. (0:ANSI/OEM or 1:Unicode)
+/ To use Unicode string for the path name, enable LFN and set _LFN_UNICODE = 1.
+/ This option also affects behavior of string I/O functions. */
+
+
+#define _STRF_ENCODE 3
+/* When _LFN_UNICODE == 1, this option selects the character encoding on the file to
+/ be read/written via string I/O functions, f_gets(), f_putc(), f_puts and f_printf().
+/
+/ 0: ANSI/OEM
+/ 1: UTF-16LE
+/ 2: UTF-16BE
+/ 3: UTF-8
+/
+/ This option has no effect when _LFN_UNICODE == 0. */
+
+
+#define _FS_RPATH 0
+/* This option configures support of relative path.
+/
+/ 0: Disable relative path and remove related functions.
+/ 1: Enable relative path. f_chdir() and f_chdrive() are available.
+/ 2: f_getcwd() function is available in addition to 1.
+*/
+
+
+/*---------------------------------------------------------------------------/
+/ Drive/Volume Configurations
+/---------------------------------------------------------------------------*/
+
+#define _VOLUMES 1
+/* Number of volumes (logical drives) to be used. */
+
+
+#define _STR_VOLUME_ID 0
+#define _VOLUME_STRS "RAM","NAND","CF","SD1","SD2","USB1","USB2","USB3"
+/* _STR_VOLUME_ID switches string support of volume ID.
+/ When _STR_VOLUME_ID is set to 1, also pre-defined strings can be used as drive
+/ number in the path name. _VOLUME_STRS defines the drive ID strings for each
+/ logical drives. Number of items must be equal to _VOLUMES. Valid characters for
+/ the drive ID strings are: A-Z and 0-9. */
+
+
+#define _MULTI_PARTITION 0
+/* This option switches support of multi-partition on a physical drive.
+/ By default (0), each logical drive number is bound to the same physical drive
+/ number and only an FAT volume found on the physical drive will be mounted.
+/ When multi-partition is enabled (1), each logical drive number can be bound to
+/ arbitrary physical drive and partition listed in the VolToPart[]. Also f_fdisk()
+/ funciton will be available. */
+
+
+#define _MIN_SS 512
+#define _MAX_SS 512
+/* These options configure the range of sector size to be supported. (512, 1024,
+/ 2048 or 4096) Always set both 512 for most systems, all type of memory cards and
+/ harddisk. But a larger value may be required for on-board flash memory and some
+/ type of optical media. When _MAX_SS is larger than _MIN_SS, FatFs is configured
+/ to variable sector size and GET_SECTOR_SIZE command must be implemented to the
+/ disk_ioctl() function. */
+
+
+#define _USE_TRIM 0
+/* This option switches support of ATA-TRIM. (0:Disable or 1:Enable)
+/ To enable Trim function, also CTRL_TRIM command should be implemented to the
+/ disk_ioctl() function. */
+
+
+#define _FS_NOFSINFO 0
+/* If you need to know correct free space on the FAT32 volume, set bit 0 of this
+/ option, and f_getfree() function at first time after volume mount will force
+/ a full FAT scan. Bit 1 controls the use of last allocated cluster number.
+/
+/ bit0=0: Use free cluster count in the FSINFO if available.
+/ bit0=1: Do not trust free cluster count in the FSINFO.
+/ bit1=0: Use last allocated cluster number in the FSINFO if available.
+/ bit1=1: Do not trust last allocated cluster number in the FSINFO.
+*/
+
+
+
+/*---------------------------------------------------------------------------/
+/ System Configurations
+/---------------------------------------------------------------------------*/
+
+#define _FS_TINY 0
+/* This option switches tiny buffer configuration. (0:Normal or 1:Tiny)
+/ At the tiny configuration, size of the file object (FIL) is reduced _MAX_SS bytes.
+/ Instead of private sector buffer eliminated from the file object, common sector
+/ buffer in the file system object (FATFS) is used for the file data transfer. */
+
+
+#define _FS_EXFAT 0
+/* This option switches support of exFAT file system in addition to the traditional
+/ FAT file system. (0:Disable or 1:Enable) To enable exFAT, also LFN must be enabled.
+/ Note that enabling exFAT discards C89 compatibility. */
+
+
+#define _FS_NORTC 1
+#define _NORTC_MON 3
+#define _NORTC_MDAY 1
+#define _NORTC_YEAR 2016
+/* The option _FS_NORTC switches timestamp functiton. If the system does not have
+/ any RTC function or valid timestamp is not needed, set _FS_NORTC = 1 to disable
+/ the timestamp function. All objects modified by FatFs will have a fixed timestamp
+/ defined by _NORTC_MON, _NORTC_MDAY and _NORTC_YEAR in local time.
+/ To enable timestamp function (_FS_NORTC = 0), get_fattime() function need to be
+/ added to the project to get current time form real-time clock. _NORTC_MON,
+/ _NORTC_MDAY and _NORTC_YEAR have no effect.
+/ These options have no effect at read-only configuration (_FS_READONLY = 1). */
+
+
+#define _FS_LOCK 0
+/* The option _FS_LOCK switches file lock function to control duplicated file open
+/ and illegal operation to open objects. This option must be 0 when _FS_READONLY
+/ is 1.
+/
+/ 0: Disable file lock function. To avoid volume corruption, application program
+/ should avoid illegal open, remove and rename to the open objects.
+/ >0: Enable file lock function. The value defines how many files/sub-directories
+/ can be opened simultaneously under file lock control. Note that the file
+/ lock control is independent of re-entrancy. */
+
+
+#define _FS_REENTRANT 0
+#define _FS_TIMEOUT 1000
+#define _SYNC_t HANDLE
+/* The option _FS_REENTRANT switches the re-entrancy (thread safe) of the FatFs
+/ module itself. Note that regardless of this option, file access to different
+/ volume is always re-entrant and volume control functions, f_mount(), f_mkfs()
+/ and f_fdisk() function, are always not re-entrant. Only file/directory access
+/ to the same volume is under control of this function.
+/
+/ 0: Disable re-entrancy. _FS_TIMEOUT and _SYNC_t have no effect.
+/ 1: Enable re-entrancy. Also user provided synchronization handlers,
+/ ff_req_grant(), ff_rel_grant(), ff_del_syncobj() and ff_cre_syncobj()
+/ function, must be added to the project. Samples are available in
+/ option/syscall.c.
+/
+/ The _FS_TIMEOUT defines timeout period in unit of time tick.
+/ The _SYNC_t defines O/S dependent sync object type. e.g. HANDLE, ID, OS_EVENT*,
+/ SemaphoreHandle_t and etc.. A header file for O/S definitions needs to be
+/ included somewhere in the scope of ff.c. */
+
+
+/*--- End of configuration options ---*/
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/Libraries/FatFS/mmc.c b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/Libraries/FatFS/mmc.c
new file mode 100644
index 00000000..9a22012e
--- /dev/null
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/Libraries/FatFS/mmc.c
@@ -0,0 +1,217 @@
+/*------------------------------------------------------------------------/
+/ MMCv3/SDv1/SDv2 (in SDIO mode) control module
+/-------------------------------------------------------------------------/
+/
+/ Copyright (C) 2013, ChaN, all right reserved.
+/
+/ * This software is a free software and there is NO WARRANTY.
+/ * No restriction on use. You can use, modify and redistribute it for
+/ personal, non-profit or commercial products UNDER YOUR RESPONSIBILITY.
+/ * Redistributions of source code must retain the above copyright notice.
+/
+/-------------------------------------------------------------------------*/
+
+
+/*
+ * This file was modified from a sample available from the FatFs
+ * web site. It was modified to work with a Infineon XMC4700 Relax Kit
+ * evaluation board. It is based on the DAVE 4 SDMMC_BLOCK app, which was modified
+ * to work with an existing timer and for operation in polling mode.
+ *
+ */
+#include "diskio.h"
+#include "boot.h"
+#include "sdmmc_block.h"
+
+
+static volatile
+DSTATUS Stat = STA_NOINIT; /* Disk status */
+
+const
+DRESULT FATFS_errorcodes[5] = {
+ RES_OK ,
+ RES_ERROR,
+ RES_WRPRT,
+ RES_NOTRDY,
+ RES_PARERR
+ };
+const
+DSTATUS FATFS_statuscodes[4] = {
+ (DSTATUS)0,
+ (DSTATUS)STA_NOINIT,
+ (DSTATUS)STA_NODISK,
+ (DSTATUS)STA_PROTECT
+ };
+
+/*--------------------------------------------------------------------------
+
+ Public Functions
+
+---------------------------------------------------------------------------*/
+
+
+/*-----------------------------------------------------------------------*/
+/* Initialize Disk Drive */
+/*-----------------------------------------------------------------------*/
+
+DSTATUS disk_initialize (
+ BYTE pdrv /* Physical drive number (0) */
+)
+{
+ DSTATUS diskstatus;
+ uint32_t status;
+
+ /* Make sure the SDMMC block is initialized. Note that it has a protection
+ * against mutiple initialization.
+ */
+ SDMMC_BLOCK_Init(&SDMMC_BLOCK_0);
+
+ /* If drive number is greater than the maximum drives allowed */
+ if (pdrv > 0)
+ {
+ diskstatus = (DSTATUS)((uint8_t)STA_NODISK | (uint8_t)STA_NOINIT);
+ }
+ else
+ {
+ /* Call the Initialize function. */
+ status = SDMMC_BLOCK_Initialize(&SDMMC_BLOCK_0);
+ /* Fatfs to Device Abstraction Layer Error Code Mapping */
+ diskstatus = FATFS_statuscodes[status];
+ }
+
+ return (diskstatus);
+}
+
+
+
+/*-----------------------------------------------------------------------*/
+/* Get Disk Status */
+/*-----------------------------------------------------------------------*/
+
+DSTATUS disk_status (
+ BYTE pdrv /* Physical drive nmuber (0) */
+)
+{
+ DSTATUS diskstatus;
+ uint32_t status;
+
+ /* If drive number is greater than the maximum drives allowed */
+ if (pdrv > 0)
+ {
+ diskstatus = (DSTATUS)((uint8_t)STA_NODISK | (uint8_t)STA_NOINIT);
+ }
+ else
+ {
+ /* Call the Initialize function.*/
+ status = SDMMC_BLOCK_GetStatus(&SDMMC_BLOCK_0);
+ /* Fatfs to Block Layer Error Code Mapping */
+ diskstatus = FATFS_statuscodes[status];
+ }
+ return (diskstatus);
+}
+
+
+
+/*-----------------------------------------------------------------------*/
+/* Read Sector(s) */
+/*-----------------------------------------------------------------------*/
+
+DRESULT disk_read (
+ BYTE pdrv, /* Physical drive nmuber to identify the drive */
+ BYTE *buff, /* Data buffer to store read data */
+ DWORD sector, /* Sector address in LBA */
+ UINT count /* Number of sectors to read */
+)
+{
+ DRESULT diskresult;
+ uint32_t result;
+
+ /* If drive number is greater than the maximum drives allowed */
+ if (pdrv > 0)
+ {
+ diskresult = RES_PARERR;
+ }
+ /* If sector count is less than 1. Minimum 1 sector is needed*/
+ else if (count < (uint8_t)1)
+ {
+ diskresult = RES_PARERR;
+ }
+ /*Call the ReadBlk function.*/
+ else
+ {
+ result = (uint32_t)SDMMC_BLOCK_ReadBlock(&SDMMC_BLOCK_0, (uint8_t *)buff,
+ (uint32_t)sector, count);
+
+ /* FatFs to Device Abstraction Layer Error Code Mapping */
+ diskresult = FATFS_errorcodes[result];
+ }
+ return (diskresult);
+}
+
+
+
+/*-----------------------------------------------------------------------*/
+/* Write Sector(s) */
+/*-----------------------------------------------------------------------*/
+
+DRESULT disk_write (
+ BYTE pdrv, /* Physical drive nmuber to identify the drive */
+ const BYTE *buff, /* Data to be written */
+ DWORD sector, /* Sector address in LBA */
+ UINT count /* Number of sectors to write */
+)
+{
+ DRESULT diskresult;
+ uint32_t result;
+
+ /* If drive number is greater than the maximum drives allowed */
+ if (pdrv > 0)
+ {
+ diskresult = RES_PARERR;
+ }
+ /* If sector count is less than 1. Minimum 1 sector is needed*/
+ else if (count < (uint8_t)1)
+ {
+ diskresult = RES_PARERR;
+ }
+ /*Call the WriteBlk function.*/
+ else
+ {
+ result = (uint32_t)SDMMC_BLOCK_WriteBlock(&SDMMC_BLOCK_0,(uint8_t *)buff,
+ (uint32_t)sector, count);
+ /* FatFs to Device Abstraction Layer Error Code Mapping */
+ diskresult = FATFS_errorcodes[result];
+ }
+ return (diskresult);
+}
+
+
+
+/*-----------------------------------------------------------------------*/
+/* Miscellaneous Functions */
+/*-----------------------------------------------------------------------*/
+
+DRESULT disk_ioctl (
+ BYTE pdrv, /* Physical drive nmuber (0) */
+ BYTE cmd, /* Control code */
+ void *buff /* Buffer to send/receive data block */
+)
+{
+ DRESULT diskresult;
+ uint32_t result;
+ if (pdrv > 0)
+ {
+ diskresult = RES_PARERR;
+ }
+ /*Call the Ioctl function.*/
+ else
+ {
+ result = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, cmd, buff);
+ /* FatFs to Block Layer Error Code Mapping */
+ diskresult = FATFS_errorcodes[result];
+ }
+ return (diskresult);
+}
+
+
+
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/blt_conf.h b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/blt_conf.h
index a0f73b51..f6a70c22 100644
--- a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/blt_conf.h
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/blt_conf.h
@@ -160,6 +160,42 @@
#define BOOT_COM_NET_DEFERRED_INIT_ENABLE (1)
+/****************************************************************************************
+* F I L E S Y S T E M I N T E R F A C E C O N F I G U R A T I O N
+****************************************************************************************/
+/* The file system interface is selected by setting the BOOT_FILE_SYS_ENABLE configurable
+ * to 1. This enables support for firmware updates from a file stored on a locally
+ * attached file system such as an SD-card. Note that this interface can be enabled
+ * together with one of the remote communication interfaces such as UART, CAN or USB.
+ *
+ * Set BOOT_FILE_LOGGING_ENABLE to 1 if you would like log messages to be created during
+ * a firmware update. The hook function FileFirmwareUpdateLogHook() will be called each
+ * time a new string formatted log entry is available. This could be used during testing
+ * by outputting the string on UART or to create a log file on the file system itself.
+ *
+ * Set BOOT_FILE_ERROR_HOOK_ENABLE to 1 if you would like to be informed in case an error
+ * occurs during the firmware update. This could for example be used to turn on an error
+ * LED to inform the user that something went wrong. Inspecting the log messages provides
+ * additional information on the error cause.
+ *
+ * Set BOOT_FILE_STARTED_HOOK_ENABLE to 1 if you would like to be informed when a new
+ * firmware update is started by the bootloader.
+ *
+ * Set BOOT_FILE_COMPLETED_HOOK_ENABLE to 1 if you would like to be informed when a
+ * firmware update is completed by the bootloader.
+ */
+/** \brief Enable/disable support for firmware updates from a locally attached storage.*/
+#define BOOT_FILE_SYS_ENABLE (1)
+/** \brief Enable/disable logging messages during firmware updates. */
+#define BOOT_FILE_LOGGING_ENABLE (1)
+/** \brief Enable/disable a hook function that is called upon detection of an error. */
+#define BOOT_FILE_ERROR_HOOK_ENABLE (1)
+/** \brief Enable/disable a hook function that is called at the start of the update. */
+#define BOOT_FILE_STARTED_HOOK_ENABLE (1)
+/** \brief Enable/disable a hook function that is called at the end of the update. */
+#define BOOT_FILE_COMPLETED_HOOK_ENABLE (1)
+
+
/****************************************************************************************
* B A C K D O O R E N T R Y C O N F I G U R A T I O N
****************************************************************************************/
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/hooks.c b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/hooks.c
index b6f2670a..2d3a1735 100644
--- a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/hooks.c
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/hooks.c
@@ -32,6 +32,7 @@
#include "boot.h" /* bootloader generic header */
#include "led.h" /* LED driver header */
#include "xmc_gpio.h" /* GPIO module */
+#include "xmc_uart.h" /* UART driver header */
/****************************************************************************************
@@ -245,6 +246,194 @@ blt_bool NvmWriteChecksumHook(void)
#endif /* BOOT_NVM_CHECKSUM_HOOKS_ENABLE > 0 */
+/****************************************************************************************
+* F I L E S Y S T E M I N T E R F A C E H O O K F U N C T I O N S
+****************************************************************************************/
+
+#if (BOOT_FILE_SYS_ENABLE > 0)
+
+/****************************************************************************************
+* Constant data declarations
+****************************************************************************************/
+/** \brief Firmware filename. */
+static const blt_char firmwareFilename[] = "/demoprog_xmc4700.srec";
+
+
+/****************************************************************************************
+* Local data declarations
+****************************************************************************************/
+#if (BOOT_FILE_LOGGING_ENABLE > 0)
+/** \brief Data structure for grouping log-file related information. */
+static struct
+{
+ FIL handle; /**< FatFS handle to the log-file. */
+ blt_bool canUse; /**< Flag to indicate if the log-file can be used. */
+} logfile;
+#endif
+
+
+/************************************************************************************//**
+** \brief Callback that gets called to check whether a firmware update from
+** local file storage should be started. This could for example be when
+** a switch is pressed, when a certain file is found on the local file
+** storage, etc.
+** \return BLT_TRUE if a firmware update is requested, BLT_FALSE otherwise.
+**
+****************************************************************************************/
+blt_bool FileIsFirmwareUpdateRequestedHook(void)
+{
+ FILINFO fileInfoObject = { 0 }; /* needs to be zeroed according to f_stat docs */;
+
+ /* Current example implementation looks for a predetermined firmware file on the
+ * SD-card. If the SD-card is accessible and the firmware file was found the firmware
+ * update is started. When successfully completed, the firmware file is deleted.
+ * During the firmware update, progress information is written to a file called
+ * bootlog.txt and additionally outputted on UART @57600 bps for debugging purposes.
+ */
+ /* check if firmware file is present and SD-card is accessible */
+ if (f_stat(firmwareFilename, &fileInfoObject) == FR_OK)
+ {
+ /* check if the filesize is valid and that it is not a directory */
+ if ( (fileInfoObject.fsize > 0) && (!(fileInfoObject.fattrib & AM_DIR)) )
+ {
+ /* all conditions are met to start a firmware update from local file storage */
+ return BLT_TRUE;
+ }
+ }
+ /* still here so no firmware update request is pending */
+ return BLT_FALSE;
+} /*** end of FileIsFirmwareUpdateRequestedHook ***/
+
+
+/************************************************************************************//**
+** \brief Callback to obtain the filename of the firmware file that should be
+** used during the firmware update from the local file storage. This
+** hook function is called at the beginning of the firmware update from
+** local storage sequence.
+** \return valid firmware filename with full path or BLT_NULL.
+**
+****************************************************************************************/
+const blt_char *FileGetFirmwareFilenameHook(void)
+{
+ return firmwareFilename;
+} /*** end of FileGetFirmwareFilenameHook ***/
+
+
+#if (BOOT_FILE_STARTED_HOOK_ENABLE > 0)
+/************************************************************************************//**
+** \brief Callback that gets called to inform the application that a firmware
+** update from local storage just started.
+** \return none.
+**
+****************************************************************************************/
+void FileFirmwareUpdateStartedHook(void)
+{
+ #if (BOOT_FILE_LOGGING_ENABLE > 0)
+ /* create/overwrite the logfile */
+ logfile.canUse = BLT_FALSE;
+ if (f_open(&logfile.handle, "/bootlog.txt", FA_CREATE_ALWAYS | FA_WRITE) == FR_OK)
+ {
+ logfile.canUse = BLT_TRUE;
+ }
+ #endif
+} /*** end of FileFirmwareUpdateStartedHook ***/
+#endif /* BOOT_FILE_STARTED_HOOK_ENABLE > 0 */
+
+
+#if (BOOT_FILE_COMPLETED_HOOK_ENABLE > 0)
+/************************************************************************************//**
+** \brief Callback that gets called to inform the application that a firmware
+** update was successfully completed.
+** \return none.
+**
+****************************************************************************************/
+void FileFirmwareUpdateCompletedHook(void)
+{
+ #if (BOOT_FILE_LOGGING_ENABLE > 0)
+ /* close the log file */
+ if (logfile.canUse == BLT_TRUE)
+ {
+ f_close(&logfile.handle);
+ }
+ #endif
+ /* now delete the firmware file from the disk since the update was successful */
+ f_unlink(firmwareFilename);
+} /*** end of FileFirmwareUpdateCompletedHook ***/
+#endif /* BOOT_FILE_COMPLETED_HOOK_ENABLE > 0 */
+
+
+#if (BOOT_FILE_ERROR_HOOK_ENABLE > 0)
+/************************************************************************************//**
+** \brief Callback that gets called in case an error occurred during a firmware
+** update. Refer to for a list of available error codes.
+** \return none.
+**
+****************************************************************************************/
+void FileFirmwareUpdateErrorHook(blt_int8u error_code)
+{
+ #if (BOOT_FILE_LOGGING_ENABLE > 0)
+ /* error detected which stops the firmware update, so close the log file */
+ if (logfile.canUse == BLT_TRUE)
+ {
+ f_close(&logfile.handle);
+ }
+ #endif
+} /*** end of FileFirmwareUpdateErrorHook ***/
+#endif /* BOOT_FILE_ERROR_HOOK_ENABLE > 0 */
+
+
+#if (BOOT_FILE_LOGGING_ENABLE > 0)
+/************************************************************************************//**
+** \brief Callback that gets called each time new log information becomes
+** available during a firmware update.
+** \param info_string Pointer to a character array with the log entry info.
+** \return none.
+**
+****************************************************************************************/
+void FileFirmwareUpdateLogHook(blt_char *info_string)
+{
+ blt_int32u timeoutTime;
+
+ /* write the string to the log file */
+ if (logfile.canUse == BLT_TRUE)
+ {
+ if (f_puts(info_string, &logfile.handle) < 0)
+ {
+ logfile.canUse = BLT_FALSE;
+ f_close(&logfile.handle);
+ }
+ }
+
+ /* echo all characters in the string on UART */
+ while(*info_string != '\0')
+ {
+ /* write byte to transmit holding register */
+ XMC_UART_CH_Transmit(XMC_UART0_CH0, *info_string);
+ /* set timeout time to wait for transmit completion. */
+ timeoutTime = TimerGet() + 10;
+ /* wait for tx holding register to be empty */
+ while( (XMC_USIC_CH_TXFIFO_GetEvent(XMC_UART0_CH0) & XMC_USIC_CH_TXFIFO_EVENT_STANDARD) == 0)
+ {
+ /* keep the watchdog happy */
+ CopService();
+ /* break loop upon timeout. this would indicate a hardware failure. */
+ if (TimerGet() > timeoutTime)
+ {
+ break;
+ }
+ }
+ /* reset event */
+ XMC_USIC_CH_TXFIFO_ClearEvent(XMC_UART0_CH0, XMC_USIC_CH_TXFIFO_EVENT_STANDARD);
+ /* point to the next character in the string */
+ info_string++;
+ }
+} /*** end of FileFirmwareUpdateLogHook ***/
+#endif /* BOOT_FILE_LOGGING_ENABLE > 0 */
+
+
+#endif /* BOOT_FILE_SYS_ENABLE > 0 */
+
+
/****************************************************************************************
* S E E D / K E Y S E C U R I T Y H O O K F U N C T I O N S
****************************************************************************************/
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/linker_script.ld b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/linker_script.ld
index 81d5c09d..c00ab81e 100644
--- a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/linker_script.ld
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/linker_script.ld
@@ -65,8 +65,8 @@ no_init_size = 64;
MEMORY
{
- FLASH_1_cached(RX) : ORIGIN = 0x08000000, LENGTH = 0x8000
- FLASH_1_uncached(RX) : ORIGIN = 0x0C000000, LENGTH = 0x8000
+ FLASH_1_cached(RX) : ORIGIN = 0x08000000, LENGTH = 0xC000
+ FLASH_1_uncached(RX) : ORIGIN = 0x0C000000, LENGTH = 0xC000
PSRAM_1(!RX) : ORIGIN = 0x1FFE8040, LENGTH = 0x17fc0
DSRAM_1_system(!RX) : ORIGIN = 0x20000000, LENGTH = 0x20000
DSRAM_2_comm(!RX) : ORIGIN = 0x20020000, LENGTH = 0x20000
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/main.c b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/main.c
index 90b1d0a9..33c3bbf7 100644
--- a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/main.c
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Boot/main.c
@@ -111,11 +111,31 @@ int main(void)
****************************************************************************************/
static void Init(void)
{
+#if (BOOT_FILE_LOGGING_ENABLE > 0) && (BOOT_COM_UART_ENABLE == 0)
+ XMC_UART_CH_CONFIG_t uart_config;
+#endif
+
/* initialize LED1 on P5.9 as digital output */
XMC_GPIO_SetMode(P5_9, XMC_GPIO_MODE_OUTPUT_PUSH_PULL);
/* initialize BUTTON1 as digital input. */
XMC_GPIO_SetMode(P15_13, XMC_GPIO_MODE_INPUT_TRISTATE);
XMC_GPIO_EnableDigitalInput(P15_13);
+
+#if (BOOT_FILE_LOGGING_ENABLE > 0) && (BOOT_COM_UART_ENABLE == 0)
+ /* set configuration and initialize UART channel */
+ uart_config.baudrate = BOOT_COM_UART_BAUDRATE;
+ uart_config.data_bits = 8;
+ uart_config.frame_length = 8;
+ uart_config.stop_bits = 1;
+ uart_config.oversampling = 16;
+ uart_config.parity_mode = XMC_USIC_CH_PARITY_MODE_NONE;
+ XMC_UART_CH_Init(XMC_UART0_CH0, &uart_config);
+ /* configure small transmit and receive FIFO */
+ XMC_USIC_CH_TXFIFO_Configure(XMC_UART0_CH0, 16U, XMC_USIC_CH_FIFO_SIZE_16WORDS, 1U);
+ XMC_USIC_CH_RXFIFO_Configure(XMC_UART0_CH0, 0U, XMC_USIC_CH_FIFO_SIZE_16WORDS, 1U);
+ /* start UART */
+ XMC_UART_CH_Start(XMC_UART0_CH0);
+#endif
} /*** end of Init ***/
@@ -127,7 +147,7 @@ static void Init(void)
****************************************************************************************/
static void PostInit(void)
{
-#if (BOOT_COM_UART_ENABLE > 0)
+#if (BOOT_COM_UART_ENABLE > 0) || (BOOT_FILE_LOGGING_ENABLE > 0)
XMC_GPIO_CONFIG_t rx_uart_config;
XMC_GPIO_CONFIG_t tx_uart_config;
#endif
@@ -136,7 +156,7 @@ static void PostInit(void)
XMC_GPIO_CONFIG_t tx_can_config;
#endif
-#if (BOOT_COM_UART_ENABLE > 0)
+#if (BOOT_COM_UART_ENABLE > 0) || (BOOT_FILE_LOGGING_ENABLE > 0)
/* initialize UART Rx pin */
rx_uart_config.mode = XMC_GPIO_MODE_INPUT_TRISTATE;
rx_uart_config.output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH;
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Prog/Debug/demoprog_xmc4700.elf b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Prog/Debug/demoprog_xmc4700.elf
index 1f809350..84bde1ef 100644
Binary files a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Prog/Debug/demoprog_xmc4700.elf and b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Prog/Debug/demoprog_xmc4700.elf differ
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Prog/Debug/demoprog_xmc4700.srec b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Prog/Debug/demoprog_xmc4700.srec
index 24ce8fe5..fb6aa3d7 100644
--- a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Prog/Debug/demoprog_xmc4700.srec
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Prog/Debug/demoprog_xmc4700.srec
@@ -1,805 +1,805 @@
S018000064656D6F70726F675F786D63343730302E737265633D
-S3150C0080004088FE1F058200089D8200089D8200089C
-S3150C0080109D8200089D8200089D82000800000000D9
-S3150C0080200000000000000000000000009D82000817
-S3150C0080309D820008000000009D82000845B10008E2
-S3150C0080409D8200089D8200089D8200089D82000882
-S3150C0080509D8200089D8200089D8200089D82000872
-S3150C0080609D820008000000000000000000000000D7
-S3150C0080709D820008000000009D8200089D82000879
-S3150C0080809D8200089D8200089D8200089D82000842
-S3150C0080909D8200089D8200089D8200089D82000832
-S3150C0080A09D8200089D8200089D8200089D82000822
-S3150C0080B09D8200089D8200089D8200089D82000812
-S3150C0080C09D8200089D8200089D8200089D82000802
-S3150C0080D09D8200089D8200089D8200089D820008F2
-S3150C0080E09D8200089D8200089D8200089D820008E2
-S3150C0080F09D8200089D8200089D8200089D820008D2
-S3150C0081009D8200089D8200089D8200089D820008C1
-S3150C0081109D8200089D8200089D8200089D820008B1
-S3150C0081209D8200089D8200089D8200089D820008A1
-S3150C0081309D8200089D8200089D8200089D82000891
-S3150C0081409D8200089D8200089D8200089D82000881
-S3150C0081509D8200089D8200089D8200089D82000871
-S3150C00816000000000000000000000000000000000FD
-S3150C0081709D8200089D8200089D8200089D82000851
-S3150C0081809D8200089D8200089D8200089D82000841
-S3150C0081909D8200089D8200089D8200089D82000831
-S3150C0081A09D8200089D8200089D8200089D82000821
-S3150C0081B09D8200089D8200089D8200089D82000811
-S3150C0081C09D8200089D8200089D8200089D82000801
-S3150C0081D09D8200089D8200089D8200080000000018
-S3150C0081E09D8200089D8200089D8200089D820008E1
-S3150C0081F09D820008000000009D820008000000001F
-S3150C008200EE11AA55DFF874D01D4880471D4C1E4D43
-S3150C008210AC4209DA21686268A368043BA2BFC8585D
-S3150C008220D050FAE70C34F3E7184B194CA34208DA92
-S3150C00823019685A680020043AA4BF8850FBE7083333
-S3150C008240F4E71448804714488047000000B2000C3D
-S3150C0082504088FE1F3000000000B2000C4088FE1F54
-S3150C008260000000007088FE1F1408000000000020AB
-S3150C0082700000000000000020A03000004088FE1F17
-S3150C008280259D00084C820008648200086482000860
-S3150C0082907C82000855B1000825AE0008FEE70000F8
-S3150C0082A010B4013A0A440BE00C784B7803EB042328
-S3150C0082B09BB2184480B2984201D2013080B202318E
-S3150C0082C09142F1D307D10B781B02184480B2984225
-S3150C0082D001D2013080B25DF8044B704770B4C5789A
-S3150C0082E00D44EDB2134CE57083780E0A3344DBB2C1
-S3150C0082F0A37042786270007820709CB2A64206D9B0
-S3150C0083000132D2B20B4C62700AB901302070C9B27C
-S3150C0083108D420CDA0133DBB2064A93703BB95378C3
-S3150C0083200133DBB2537013B913780133137070BC7D
-S3150C008330704700BFBC89FE1F10B50146074C20686C
-S3150C0083400830FFF7CBFF2368054A1178197251786C
-S3150C008350597291789972D278DA7210BDCC89FE1F57
-S3150C008360BC89FE1F00221A4B1A7006E00021194A1E
-S3150C00837022F813100133164A1370154B1B78002B79
-S3150C008380F4D00022124B1A7009E0C3EB031149001A
-S3150C008390114A0A440021517001330D4A13700C4BDB
-S3150C0083A01B78002BF1D04FF480620C4B1A80002204
-S3150C0083B0074B1A7007E00A4A02EB831200219180E0
-S3150C0083C00133034A1370024B1B78002BF3D0704712
-S3150C0083D08488FE1FF089FE1FE889FE1F7888FE1F21
-S3150C0083E04490FE1F00220A4B1A700BE01946094AEC
-S3150C0083F032F813201AB9074B23F8110070470133D2
-S3150C008400034A1370024B1B78002BEFD0704700BF4A
-S3150C0084108488FE1FF089FE1F030A43EA002080B2FF
-S3150C008420704700BF08B5002005491422FFF738FF36
-S3150C00843010B1FFF7F1FF08BD4FF6FF7008BD00BF86
-S3150C0084400E8AFE1F38B50D4D2C7C6B7C03EB042479
-S3150C008450143CA4B2204480B205F11A010822FFF79D
-S3150C0084601FFF05F122012246FFF71AFF10B1FFF795
-S3150C008470D3FF38BD4FF6FF7038BD00BF008AFE1F14
-S3150C00848008B50620FFF7DEFF08BD00BF70B5A54B8B
-S3150C0084901C68042800F07181A34BA44A1360A44AFB
-S3150C0084A01360032810D1637E03F00F03032B40F0F7
-S3150C0084B0DA85238A002B40F0D68508229D4B1A704C
-S3150C0084C002F0FEFC00F094BC02287BD19A4AD378C9
-S3150C0084D00133DBB2D37063B993780133DBB293709B
-S3150C0084E03BB953780133DBB2537013B913780133AC
-S3150C0084F013700023914A1380914A1380637E072BD5
-S3150C00850001D0052B0AD1A37E0133DBB2A376782BDF
-S3150C00851040F0A9850023637600F0A5BD002B00F082
-S3150C008520A285228A002A41D0A27E511EA176002A5B
-S3150C00853040F09985E27E082A05D0591EC9B2012958
-S3150C0085400ED8052A0CD1002363768022794B1A703B
-S3150C00855002F0B6FC14227B4B83F82F2000F014BDDE
-S3150C008560042A03D803219140C9B200E03021A17638
-S3150C0085700132E27603F00F03013B072B00F2738501
-S3150C008580DFE813F0780208000D00F2037105F20320
-S3150C0085907105F20300226B4B83F82F206EE2042246
-S3150C0085A0644B1A7002F08CFC00F057BC03F00F03FE
-S3150C0085B0032B40F0588508225E4B1A7002F080FCA3
-S3150C0085C000F016BC052817D15F4B1B689B88002B47
-S3150C0085D000F049850023534A13605C4A53490A60EC
-S3150C0085E053490A60564A1380544A13800822514B49
-S3150C0085F01A7001F04DFAC0E0524B9B7B452B40F0B4
-S3150C0086003285504A157C537C03EB05214B4A128864
-S3150C008610914200F328858DB2484B1D80494B1B7D3A
-S3150C00862013F03F0F40F01F85464B5B7D002B40F04F
-S3150C0086301A85474B1C880CB95B885BB1414BDB8BAD
-S3150C0086409C4240F010853F4B1A8C414B5B889A42FA
-S3150C00865040F00985FFF7E6FE4FF6FF73984240F0AF
-S3150C0086600285384BDB7D062B00F0B880112B23D00E
-S3150C008670012B40F0F884334B93F82230082B40F052
-S3150C008680F284304B002283F822209B8C4FF6F67234
-S3150C008690934203D909332B4A938402E00833294ABF
-S3150C0086A09384284B5A8BDA839A8B1A845C83284AD8
-S3150C0086B052889A8300F0D3BC1C3D204B1D80254A62
-S3150C0086C0214B1A6026E09A880AB31E49898C8A4285
-S3150C0086D01DD1DA8832B11B49498C8A4202D0B2F5D7
-S3150C0086E08A4F14D11A8812B95988002936D04FF6F8
-S3150C0086F0FF718A4202D1588888422FD01149498B82
-S3150C0087008A4204D10F4A918B5A88914226D0403323
-S3150C0087100D4A13600C4B1B680F4A9342D3D300F0DF
-S3150C008720A2BC00BFCC89FE1F368AFE1FC889FE1F5D
-S3150C008730B889FE1FC089FE1F7488FE1FB489FE1FF0
-S3150C0087404290FE1F008AFE1FC489FE1F2A8AFE1F46
-S3150C008750FC89FE1F4490FE1F8490FE1F0023AD4A29
-S3150C00876013600221AC4A1170AC4AAD490A60AD499E
-S3150C0087700A60AD4A138001F08BF9AB4B1A88002ABC
-S3150C00878000F0718402F11C0189B2A84B1980A84B28
-S3150C008790080A18745974A7490968087A987511203B
-S3150C0087A0D875083292B2100A40EA0222DA84002204
-S3150C0087B083F8282083F829208A885A84CA889A84C0
-S3150C0087C09D4A1088588352889A830A88DA834A8885
-S3150C0087D01A843633924A136000F02CBCFFF750FE15
-S3150C0087E04FF6FF73984240F03E84944C17E0617E3E
-S3150C0087F0A1B18F4B9A8CA3889A420FD18C4B5A8C71
-S3150C008800E3889A420AD18A4B5A8B23889A4205D11D
-S3150C008810874B9A8B63889A4200F04A811E34874BA9
-S3150C0088209C42E4D9824B93F82F3003F03F03022B82
-S3150C00883014D17F4B9B8C99B2814A13800022814BB9
-S3150C0088401A7007E0804A32F8132091425BD001334C
-S3150C0088507C4A13707B4B1B78002BF3D0744B93F82C
-S3150C0088602F3013F0040F40F0FE83714B142283F863
-S3150C0088702F2028216D4A1180502283F82E2093F840
-S3150C008880290093F82D2083F8292093F8281093F8C3
-S3150C0088902C2083F8282083F82C1093F8272093F8A3
-S3150C0088A02B4083F8274083F82B2093F82640654D00
-S3150C0088B02C7093F82A5083F8265083F82A400130FE
-S3150C0088C0C0B283F82D0068B94B1CDBB2584981F84D
-S3150C0088D02C303BB9531CDBB281F82B3013B9013465
-S3150C0088E081F82A40524B5A8C55490A80998C5984E6
-S3150C0088F09A845A8BDA839A8B1A844F4A1188598335
-S3150C00890052889A8381E300244E4B1C701CE0194656
-S3150C0089101E224A4802FB0302527E1AB91E2404FB8D
-S3150C008920010415E0072A0CD13CB11E22434902FB77
-S3150C0089300312917EA27E914203D9404A1E2404FB67
-S3150C008940032401333F4A13703E4B1B78002BDED0B9
-S3150C008950002C00F088832F4B1C600323A376237610
-S3150C0089600023A3750422E275E376314DAB8CA3800C
-S3150C0089706B8CE3806B8B2380AB8B638001206076E2
-S3150C008980324B1A7822735A7862739A78A273DB7810
-S3150C008990E373208295F82930E37295F82830A37298
-S3150C0089A095F82730637295F826302372FFF7C4FCCE
-S3150C0089B095F82E0000F0F003502B5BDD0022214BC6
-S3150C0089C01A704FE003F13602194DAA5C204D2A703D
-S3150C0089D0002A4FD0012A03D101331A4A137041E001
-S3150C0089E0022A37D103F13702114DAA5C042A31D180
-S3150C0089F001F13803EA5C39316B5C43EA0222104B15
-S3150C008A001A8040F20A63934228BF13466382A382FC
-S3150C008A1030E000BFCC89FE1FC089FE1F2A8AFE1FCC
-S3150C008A20C889FE1FB889FE1F4290FE1FB489FE1F1F
-S3150C008A30008AFE1FC489FE1FFC89FE1FD089FE1FFB
-S3150C008A407088FE1F8488FE1FF089FE1F7488FE1F27
-S3150C008A508588FE1F03F13702A7498A5C52B113447D
-S3150C008A60A64A1370A54B1B7819460209053AB3EBB7
-S3150C008A70820FA7DB1022A04B83F82F209E4B93F876
-S3150C008A802F2042F0020283F82F20022283F8362090
-S3150C008A90042283F83720062283F838200A2283F82A
-S3150C008AA039202C21964A1180602283F82E2072E2FE
-S3150C008AB0944B1C600022944B1A708F4B93F82F200A
-S3150C008AC012F0040F07D00023637620228E4B1A7007
-S3150C008AD002F0F6F9C7E2884B93F82E301B099B007F
-S3150C008AE086480370EB1A143B9BB28548038001F051
-S3150C008AF00F01022903D102F03F0112290FD013B93D
-S3150C008B0012F0030F0BD07C4BD98C2389994240F081
-S3150C008B103782794B198D6389994240F0318212F074
-S3150C008B20100F48D0218A002945D004F10C00FFF71C
-S3150C008B30D5FB714B93F82A30744A107883423AD19C
-S3150C008B406D4B93F82B3051788B4234D16A4B93F89A
-S3150C008B502C30927893422ED1674B93F82D506B4B59
-S3150C008B60DB789D4227D120736173A273E373E37E96
-S3150C008B70D3B9237EA27E9A1AA17DA2EBD10202F072
-S3150C008B80FF02D3B21144C9B2A17513F0800F01D004
-S3150C008B905242D3B2E07DA3EB900250FA82F2D3B2EA
-S3150C008BA0E37503EBD10323760122574B1A70237E10
-S3150C008BB0A37600232382617E01F00F03013B072B72
-S3150C008BC000F25182DFE813F008002300AA007601B8
-S3150C008BD0A601C201DC0168014B4B1B7813F0010F97
-S3150C008BE000F04182032363764022474B1A70002320
-S3150C008BF02382434B188820B14222434B1A70FFF74D
-S3150C008C009BFB0022424B1A8002F05AF9F0E03E4BD5
-S3150C008C101B7813F0010F65D0374B93F82F3003F008
-S3150C008C203F03122B5ED1344B93F82E0000F0F00369
-S3150C008C30502B39DD0022314B1A702DE003F1360230
-S3150C008C402D4DAA5C334D2A7072B3012A03D1013320
-S3150C008C502A4A137020E0022A16D103F13702264D58
-S3150C008C60AA5C042A10D101F13803EA5C39316B5C39
-S3150C008C7043EA0222284B1A8040F20A63934228BF29
-S3150C008C8013466382A3820FE003F137021A498A5C0A
-S3150C008C9052B11344194A1370184B1B781946020922
-S3150C008CA0053AB3EB820FC9DB03236376124B93F8B9
-S3150C008CB02620227293F82720627293F82820A2723B
-S3150C008CC093F82930E3720120FFF736FB42220E4B54
-S3150C008CD01A70002323820A4A13800D4A138002F06D
-S3150C008CE0EFF885E02022084B1A7002F0E9F8054BE4
-S3150C008CF01B6800225A76B1E5008AFE1F8488FE1F87
-S3150C008D00B489FE1FCC89FE1FC089FE1FBC89FE1FBD
-S3150C008D104290FE1F8588FE1F7088FE1F914B93F8AC
-S3150C008D202F3013F0010F24D011F0100F21D1238A0C
-S3150C008D30002B40F098818C4D2888013080B2FFF7CB
-S3150C008D40FBFA8A4A137843F0100313702A881AB177
-S3150C008D5043F00203854A137002F0B2F80123238212
-S3150C008D60082363760023E37611227E4B83F82F20AB
-S3150C008D700AE113F0200F10D07A4890F834301A021A
-S3150C008D8090F8353042EA0300794D2E68304428605D
-S3150C008D90754813430288D31A0380734B188848B15D
-S3150C008DA011F0100F06D1714A137843F002031370B9
-S3150C008DB0FFF7C2FA6B4A92F8301092F8313003EB97
-S3150C008DC001239BB26B4A1380A28A934200D80BB93B
-S3150C008DD0684B1A80674B1B886382644B1B7813F0B5
-S3150C008DE0030F00F040810022634B1A8002F068F8F2
-S3150C008DF05E4B1B7813F0200F08D000235E4A1380BD
-S3150C008E0063761422574B83F82F20BDE013F0100F16
-S3150C008E100CD00023584A1380012222820422627647
-S3150C008E20E37611224F4B83F82F20ADE0524A12887D
-S3150C008E308AB113F0010F01D000232382238A43B990
-S3150C008E40638A9A4201D94C4A13804B4B1B88238266
-S3150C008E5001E0494A13800023E376484B1A68444BD9
-S3150C008E601A60454B1B884BB1238A3BB128333E4ACB
-S3150C008E70138018223B4B83F82F2088E03B4B1B7842
-S3150C008E8013F0020F00F0EF802822374B1A801022C5
-S3150C008E90344B83F82F207AE0344B1B7813F0010FF8
-S3150C008EA000F0E180002363761022304B1A7002F03A
-S3150C008EB007F8D8E02C4B188808B1FFF73DFA294B78
-S3150C008EC093F82F3013F0010F15D0284B1B7813F0A5
-S3150C008ED0010F05D0072363760023A376238201E0D6
-S3150C008EE0062363760120FFF727FA10221F4B1A7010
-S3150C008EF001F0E6FF44E01D4B1B7813F0010F04D084
-S3150C008F000523637600232382ADE0174B1B88002BC9
-S3150C008F1036D1A8E0144B188808B1FFF70DFA114B9F
-S3150C008F2093F82F3013F0010F0CD007236376002330
-S3150C008F30A3760120FFF700FA10220C4B1A7001F0F1
-S3150C008F40BFFF1DE0084B1B88D3B98CE0074B1B7881
-S3150C008F5013F0010F00F08780072363760023A376B6
-S3150C008F6081E000BF008AFE1FB489FE1FC089FE1F68
-S3150C008F70C889FE1F7088FE1F4290FE1FB889FE1F0F
-S3150C008F8010223C4B83F82F2028223B4B1A80502270
-S3150C008F90384B83F82E20227A364B83F82A20627AB5
-S3150C008FA083F82B20A27A83F82C20E27A83F82D20E2
-S3150C008FB0227B83F82620627B83F82720A27B83F80A
-S3150C008FC02820E27B83F829200622DA75A2885A84A7
-S3150C008FD0E2889A84294A1188598352889A8322886E
-S3150C008FE0DA8362881A84637E13F0100F06D0214B45
-S3150C008FF0002283F8312083F8302006E01D4B062230
-S3150C00900083F830200A2283F831201A4C4023A375AA
-S3150C009010194B1B881A0A22746374002384F83530A2
-S3150C00902084F8343084F8323084F83330FFF728FA79
-S3150C009030C04360860F4C4523A3730022E27362750E
-S3150C00904022750F490B8801339BB20B80190AA17448
-S3150C009050E37422766276FFF7E5F9C043208300229B
-S3150C009060084B1A7070BD0023034A1380054A13700F
-S3150C00907070BD00BF008AFE1FB489FE1FFC89FE1F4F
-S3150C0090807288FE1FC089FE1FF8B505460E46284A93
-S3150C009090138801339BB21380B3F5FA4F03D34FF405
-S3150C0090A08052234B1A800022224B1A700CE0224B62
-S3150C0090B003EB84139F881E4B1888FFF7ADF9874284
-S3150C0090C0E5D001341B4B1C701A4B1C78002CEED0CF
-S3150C0090D000221A700BE0184A02EB831292881AB916
-S3150C0090E0154800EB831007E00133124A1370114B3D
-S3150C0090F01B78002BEFD00020C0B10D4B1A88130A39
-S3150C00910043EA02238380C6804DB90346002203F846
-S3150C009110012B4270013303F8012B1A7003E02B88E4
-S3150C00912003806B88438040230372F8BD0020F8BD92
-S3150C0091307888FE1F8488FE1F4490FE1F00290CDDD4
-S3150C00914008B503468AB205490A8005490868834270
-S3150C00915002D0194602F034F808BD70474290FE1F43
-S3150C009160B889FE1FF0B400223B4B1A703B4D1EE033
-S3150C0091703A4C5A001A449200A518A45AA4B103EB0F
-S3150C00918043029200354F3A4452886AB10788BC4272
-S3150C0091900AD14488A24207D10C686C60898829815F
-S3150C0091A02F4B1B78AB7254E001332B4A13702A4BAE
-S3150C0091B01B78072BDCD90022274B1A700FE0274CA3
-S3150C0091C05A001A449200A518A25A2AB903EB430274
-S3150C0091D092002244528832B101331F4A13701E4B3F
-S3150C0091E01B78072BEBD9082B28D100231D4A1370AB
-S3150C0091F01D4A1370184A137013E0194A157803EBBD
-S3150C0092004304A400194A22449278AE1A154C2478C9
-S3150C009210A64203DD134A1670134A137001330E4A25
-S3150C00922013700D4B1B78072BE7D90F4B1D780A4B88
-S3150C0092301D7005EB45039B00084D1D4402682B462B
-S3150C00924043F8042B0A686A608A889A80044B1B7858
-S3150C009250AB72F0BC704700BF8688FE1F8888FE1F65
-S3150C009260E988FE1F8788FE1FE888FE1F9088FE1F70
-S3150C00927070B4174B18780130C0B218700022154B19
-S3150C0092801A701EE014495A001A4492008C18895A16
-S3150C00929062880A4312D003EB430189000F4A0A4441
-S3150C0092A09278821A772A09DD0B4E0C467518002126
-S3150C0092B031556970AA1C02F8011B11700133054A5D
-S3150C0092C01370044B1B78072BDCD970BC704700BF9E
-S3150C0092D0E988FE1F8688FE1F8888FE1F9088FE1F61
-S3150C0092E038B5354B1B88292B03D80022324B1A80F4
-S3150C0092F038BD0022304B1A80304B9B8AB3F5807FE9
-S3150C00930003D0B3F5007F44D038BD2C4BDA8C2C4BF4
-S3150C0093101B889A424ED1294B1A8D294B5B889A424F
-S3150C00932048D1284CA51F20462946FFF71BFFA4F160
-S3150C0093301C03002204F8082C022204F8072C54F80B
-S3150C009340061C616034F8021C21811F49086844F828
-S3150C009350060C898824F8021C44F8160C24F8121CF6
-S3150C009360616844F81C1C228924F8182C9A8B62819B
-S3150C0093706288A281124A11889983528862800822D7
-S3150C00938004F8102C062204F80F2C2A220A4B1A80F9
-S3150C00939038BD0A4BDA8C0A4B1B889A420AD1074B0A
-S3150C0093A01A8D074B5B889A4204D106490846063942
-S3150C0093B0FFF7D8FE38BD00BFB489FE1F008AFE1F1A
-S3150C0093C0FC89FE1F1C8AFE1F7C88FE1F10B5514BA4
-S3150C0093D0D98B8AB24FF6FF739A420CD14D4B188C2F
-S3150C0093E04FF6FF73984206D14A4B4B4A10681860E9
-S3150C0093F092889A807EE0494B1B88494800885340E6
-S3150C009400184209D1434B1A8C94B2444B5B8844489E
-S3150C00941040886340184206D0424B434A1188198053
-S3150C00942052885A8002E03F4B19805A8000223F4BEB
-S3150C0094301A703F4C16E03E495A001A4492008C189A
-S3150C009440384800888A5A904209D1364A518803EB2B
-S3150C00945043029200364802445288914206D00133A8
-S3150C009460324A1370314B1B78072BE4D9082B3BD1AE
-S3150C009470284C2046FF21062201F0ADFE002384F87D
-S3150C009480203084F8213084F8223084F8233084F894
-S3150C009490243084F82530274A1168C4F806109288BF
-S3150C0094A06281C4F8161062831E4A1188E1845288C0
-S3150C0094B022851A4A1188A1835288E28323750122D8
-S3150C0094C06275A373E2730822227463740623A37471
-S3150C0094D00423E3742273062363733634164B1C6021
-S3150C0094E02A22164B1A8010BD0A4B54F8042F1A6008
-S3150C0094F0A2889A80074B0F4A1168C3F80610928807
-S3150C0095005A8108221A7300225A730C4A13880E3396
-S3150C009510138010BD008AFE1FE8B10008FC89FE1FEF
-S3150C009520F889FE1FEC88FE1FF489FE1F8688FE1F35
-S3150C0095308888FE1F7C88FE1FC889FE1FB489FE1F03
-S3150C00954010B50446416000F0FBFB206010BD00BF67
-S3150C00955010B5044600F0F4FB2368C01A6368984201
-S3150C009560B4BF0020012010BD3523037001234370C6
-S3150C00957081700330704700BF034636220270042206
-S3150C0095804270034A1068C3F80200981D704700BF6A
-S3150C0095900C89FE1F3723037003234370012282704C
-S3150C0095A0C370062303710530704700BFFF23037099
-S3150C0095B001307047074B828C1A80C28C5A80064B3E
-S3150C0095C0028D1A80428D5A80044B028E1A80428E6E
-S3150C0095D05A807047FC89FE1FF889FE1FF489FE1F0E
-S3150C0095E003463222027004224270034A1068C3F802
-S3150C0095F00200981D704700BF1489FE1F10B4034665
-S3150C009600014400242EE01A78332A24D006D8032AE3
-S3150C00961010D0062A13D0012A21D106E0362A15D0FD
-S3150C009620FF2A21D0352A1AD10EE0D3F80200104AAF
-S3150C009630906214E0D3F802000D4A10630FE0D3F8E1
-S3150C00964002000B4AD0620AE09C7808E0D3F80200CC
-S3150C009650074AD06103E0D3F80200054A10625A7833
-S3150C009660023213448B42CED320465DF8044B70472E
-S3150C009670F088FE1FF8B504460123037043701C4B9B
-S3150C0096809A6982700025C5701A4A10686060258137
-S3150C00969080276781184A1268E26025746574A57480
-S3150C0096A0E57425756575A575E57525766576A576D6
-S3150C0096B0E5769E6904F11C005969324601F080FD7D
-S3150C0096C0A0191C302946C6F1100201F084FD04F1E4
-S3150C0096D02C002946402201F07EFD04F16C0029463F
-S3150C0096E03A4601F078FD054B1868C4F8EC00F8BD55
-S3150C0096F0F088FE1FF0B10008FC89FE1FF4B10008CB
-S3150C00970038B50A4C25682846FFF7B4FF05F1F0007A
-S3150C0097100121FFF729FFFFF73DFFFFF747FF2368FE
-S3150C009720C11A1846FFF70AFD38BD00BFC889FE1FCF
-S3150C00973038B50B4C25682846FFF79CFF05F1F00061
-S3150C0097400321FFF711FFFFF717FFFFF749FFFFF79D
-S3150C0097502DFF2368C11A1846FFF7F0FC38BD00BF71
-S3150C009760C889FE1F10B5114B1C682378022B17D124
-S3150C009770201D0F49042201F013FD98B90D4B04F17D
-S3150C0097801C0059699A6901F00BFD68B92069094BEF
-S3150C009790586204F1F000084B1988FFF72FFF10BD33
-S3150C0097A0002010BD002010BD002010BDC889FE1F72
-S3150C0097B0F0B10008F088FE1FB489FE1F10B582B008
-S3150C0097C00C4C6061A1610023A3704FF6FF73ADF8DA
-S3150C0097D00430ADF8063001A84FF48641FFF754FC6F
-S3150C0097E0606010B14FF4884383800022014B1A80CD
-S3150C0097F002B010BDF088FE1F024B00221A805A8060
-S3150C009800704700BFFC89FE1F38B59E4B1B88B3F50D
-S3150C009810937F7FD010D840F20F12934234D0B3F519
-S3150C009820887F01D2EBB118E1B3F5887F34D040F2D2
-S3150C0098302512934266D010E1B3F5AB7F00F0BF80E2
-S3150C00984005D840F25512934200F0B28005E1B3F50B
-S3150C009850B57F00F0CE8040F26B12934200F0D080C0
-S3150C009860FBE0884B01229A704FF47A721A61FFF76B
-S3150C00987047FF844C04F108002169FFF761FE40F2B2
-S3150C0098800F132380002300E00123002B00F0EA8055
-S3150C0098904FF488727B4B1A807B4B1B7813F0020FAC
-S3150C0098A005D17A48FFF754FE002800F0DD80764B90
-S3150C0098B01B7813F0020F07D0FFF754FF022803D1D1
-S3150C0098C00222704B9A700CE06E4B1B694EF65F22AF
-S3150C0098D0934202DC5B006B4A13616A4B9B78022B4A
-S3150C0098E0C5D14FF47A72674B1A61FFF721FF654CAD
-S3150C0098F004F108002169FFF723FE40F225132380AB
-S3150C009900002300E00123002B00F0B0804FF493728B
-S3150C0099105C4B1A805C4B1B7813F0020F05D15B482D
-S3150C009920FFF716FE002800F0A380574B1B7813F0A8
-S3150C009930020F07D0FFF716FF052803D10322514B60
-S3150C0099409A7011E04F4B1B6942F21072934207DC7E
-S3150C0099504C4A03F57A7313619378032BC5D103E054
-S3150C0099600020484B188038BD4648FFF723FE454D6E
-S3150C009970288CFEF751FD0404688CFEF74DFD204340
-S3150C00998040084FF47A7303FB00F0002801DB2861D2
-S3150C00999003E06FF000423B4B1A613A4C04F10800AD
-S3150C0099A02169FFF7CDFD40F255132380002300E01B
-S3150C0099B00123002B5ED04FF4AB72324B1A80334826
-S3150C0099C0FFF7C6FD002857D02E4B02229A704FF493
-S3150C0099D07A721A61FFF710FFFFF7AAFE294C04F101
-S3150C0099E008002169FFF7ACFD4FF4B5732380002303
-S3150C0099F000E00123002B41D040F26B12214B1A8060
-S3150C009A00214B1B7813F0020F04D12048FFF7A0FD61
-S3150C009A10002835D01C4B1B7813F0020F07D0FFF72C
-S3150C009A20A1FE052803D10322164B9A7011E0154BA3
-S3150C009A301B6942F21072934207DC124A03F57A73E1
-S3150C009A4013619378032BC7D103E000200D4B1880CC
-S3150C009A5038BD0C48FFF7AEFD89E70022094B1A808A
-S3150C009A60022038BD032038BD002038BD032038BD88
-S3150C009A70002038BD032038BD002038BD032038BD7A
-S3150C009A80002038BDF088FE1FC089FE1FF888FE1F17
-S3150C009A9008B5FFF7B9FE08BD82B00023019303E0B9
-S3150C009AA000BF019B01330193019B8342F8D302B0A3
-S3150C009AB0704700BF72B60D4B0D4A9A60BFF34F8FBD
-S3150C009AC062B6D3F8882042F47002C3F888205A692B
-S3150C009AD022F008025A61074941F214028B5823F00E
-S3150C009AE00F0343F004038B50704700BF00ED00E0FA
-S3150C009AF0008000080010005800487047001BB70093
-S3150C009B0010B51E4BDB6813F4803F27D01C4BDB686B
-S3150C009B1013F0010F02D1FFF7EFFF00E01948184BC5
-S3150C009B201B6813F0040F11D015498A68C2F303623F
-S3150C009B308B68C3F306238C68C4F30644611C02FBD2
-S3150C009B400112B0FBF2F203FB022208E00C4B9B68FD
-S3150C009B5003F07F030133B0FBF3F200E0094A074937
-S3150C009B60C868C0B20130B2FBF0F3086900F001001E
-S3150C009B700130B3FBF0F0044B186010BD00460050EA
-S3150C009B801047005000366E01C0FF032070B5574BCE
-S3150C009B901B6813F0010F09D1544A536843F00103B3
-S3150C009BA05360524B1B6813F0010FFAD0504B1B68D5
-S3150C009BB013F4007F08D04E4A936843F40073936005
-S3150C009BC041F64C50FFF768FF4A4C636843F4002398
-S3150C009BD0636040F6C410FFF75FFF636823F48033BD
-S3150C009BE023F002036360444B5B6813F0300F21D003
-S3150C009BF0103C636823F4702323F030036360FFF793
-S3150C009C007BFF3E4BA3FB00231B0D013B626842EA24
-S3150C009C1003436360374BDA6822F00102DA605A6854
-S3150C009C2022F400325A60334B1B6803F46073B3F5AD
-S3150C009C30607FF8D12F4B5A6842F001025A605A687D
-S3150C009C4042F010025A602E4A9A605A6842F040025C
-S3150C009C505A605A6822F010025A605A6842F48022FE
-S3150C009C605A60244B1B6813F0040FFAD0214A536830
-S3150C009C7023F0010353601F4B1B6813F0010FFAD13D
-S3150C009C80204C4FF00113E3600026666126612662C4
-S3150C009C9066620323E3611C4BA3611C4BA362154D47
-S3150C009CA06B6823F040036B60194BAB604FF4166086
-S3150C009CB0FFF7F2FE174BAB604FF46160FFF7ECFE5B
-S3150C009CC0154BAB604FF49650FFF7E6FE134BAB60AB
-S3150C009CD041F27070FFF7E0FE114BAB604FF4E150B0
-S3150C009CE0FFF7DAFE6660FFF70BFF70BD004200500F
-S3150C009CF00044005010470050004700506BCA5F6B81
-S3150C009D00002F0B0100460050050001000300200146
-S3150C009D10002F0501002F0301002F0201002F010166
-S3150C009D20002F000110B54FF00053044C0FCB84E804
-S3150C009D300F00FFF7BFFEFFF729FF10BDC4FF03207E
-S3150C009D4008B501F0F9F908BD2DE9F04184B04FF4DE
-S3150C009D5080330293002404AD05F80C4DDFF8D8804F
-S3150C009D60404609212A4600F035F98DF80440304E5C
-S3150C009D70304604212A4600F02DF98DF80440304671
-S3150C009D8002212A4600F026F98DF8044030460321BC
-S3150C009D902A4600F01FF98DF80C4088278DF80470C0
-S3150C009DA0304605212A4600F015F98DF80C408DF841
-S3150C009DB00470304608212A4600F00CF98DF80C4048
-S3150C009DC08DF80470304609212A4600F003F98DF807
-S3150C009DD00440404608212A4600F0FCF88DF80C4059
-S3150C009DE08DF80470304607212A4600F0F3F88DF8FA
-S3150C009DF00440304621462A4600F0ECF8304621460F
-S3150C009E00012200F001FD4FF0806364F3010364F35B
-S3150C009E108303022262F3092362F38B2364F38F33E9
-S3150C009E20012262F39753034A136004B0BDE8F08134
-S3150C009E300082024840400050008F024810B5234C67
-S3150C009E40204600F0BBFB2268136823F480131360D2
-S3150C009E5001F072F900F59C54083403E001F06CF93A
-S3150C009E60A04205D21948002100F0A4FC0028F5D028
-S3150C009E70164C20460021164A00F070FC2268136826
-S3150C009E8043F490431360236841F21802995841F445
-S3150C009E9000519950196841F00801196023689958C6
-S3150C009EA041F0020199501A6842F004021A60094BFB
-S3150C009EB008221A7000225A7027229A706922DA70C8
-S3150C009EC05B221A7145225A7110BD00BF4088FE1FD5
-S3150C009ED0F8B100087C88FE1F08230370002343702A
-S3150C009EE0272383706923C3705B2303714523437156
-S3150C009EF0704700BF10B5094800F0F8FA0446421E38
-S3150C009F0040F2F3539A4205D804480549224600F01C
-S3150C009F10BBFA00E00024204610BD00BF4088FE1F9F
-S3150C009F20008AFE1F284B1B88013B9BB240F2F35262
-S3150C009F30934248D8254B5A6993F826305B01D118C1
-S3150C009F40D358002B0ADA214B1B68022141F214026A
-S3150C009F509950002141F204029950704789680023F8
-S3150C009F6003E01B4AD25CCA540133174A12889A4240
-S3150C009F70F7D8164B596993F8260001EB40114A6045
-S3150C009F8093F8262083F8282058695201815841F00D
-S3150C009F900041815093F826200132D2B283F8262054
-S3150C009FA093F825309A4203D10022084B83F82620D9
-S3150C009FB0064B00221A621B68022041F2140158500B
-S3150C009FC041F204015A507047B489FE1F4088FE1FA7
-S3150C009FD0008AFE1FF0B48B081F1D50F8276001F095
-S3150C009FE00305ED00F824AC4026EA040440F82740AB
-S3150C009FF0466F4F000324BC4026EA04044467184C01
-S3150C00A000A04203D004F58074A04207D1046E012649
-S3150C00A01006FA01F124EA0101016617E054688C4046
-S3150C00A0204460CC08103450F8247001F00701890004
-S3150C00A03007268E4027EA060640F8246050F824705E
-S3150C00A040167A06FA01F1394340F82410043350F815
-S3150C00A05023101278AA400A4340F82320F0BC70471C
-S3150C00A060008E0248030F20F0704003EB43039B0065
-S3150C00A070014A9850704700BF14440050034B1868AF
-S3150C00A080034B5B6903F00103D8407047C0FF032004
-S3150C00A09000460050014B5860704700BF0046005008
-S3150C00A0A0030F20F0704003EB43039B00014A9850CA
-S3150C00A0B0704700BF484600502DE9F04142F2107E31
-S3150C00A0C00027BC46012638E00B6803EB83035B00D4
-S3150C00A0D0B3FBF6F34D68B3FBF5F4374AA2FB0482E7
-S3150C00A0E0D20802EB82025200A21A052A05D9324A7C
-S3150C00A0F0A2FB0442D208013203E02F4AA2FB04421F
-S3150C00A100D2082AB102EB82046400B3FBF4F304E038
-S3150C00A110294AA2FB0323DB080122AB4201D35B1BBA
-S3150C00A12000E0EB1A142A07D89E4505D9B3F57A7FB9
-S3150C00A13006D39E461746B4460136402EC4D901E0D6
-S3150C00A1401746B44642F2107E0126402212E042F235
-S3150C00A150107302FB0333B3FBF7F30C899C4201D853
-S3150C00A1601D1B00E0E51AAE4501D9AE461646A342C4
-S3150C00A17002D3013A022AEAD8BB1B026842F040021B
-S3150C00A1800260023B1B0303F4E0434A89013A920145
-S3150C00A190D2B21343721E120202F4706213430CF114
-S3150C00A1A0FF3C0CF03F0C43EA0C030361036823F0FD
-S3150C00A1B040030360BDE8F081CDCCCCCCD0F8C431E3
-S3150C00A1C013F4407FFAD10131120442F0020242EA42
-S3150C00A1D00161C0F8C411704738B50446074D2846CE
-S3150C00A1E0FFF75EFF2846FFF73DFF236823F00103C8
-S3150C00A1F02360236813F0020FFBD138BD100000104A
-S3150C00A200D0F8C83123F00F031943C0F8C8117047B2
-S3150C00A210D0F8C80100F00F00704700BF08B5FFF773
-S3150C00A220F7FF012802D0022803D005E0FFF726FF2E
-S3150C00A23008BDFFF761FC08BD002008BDF8B5044653
-S3150C00A2400E461546FFF7C8FF20463146FFF7D8FFE6
-S3150C00A2502046FFF7E3FFB0FBF5F2C2F58062002A59
-S3150C00A26038BF002240F2FF37BA4228BF3A46C2F541
-S3150C00A2708061B0FBF1F1AE098009B602B6FBF0F3D2
-S3150C00A280BB4228BF3B4603FB00F0800A691AA5EBCC
-S3150C00A290801081428CBF0020012000B1134608B10A
-S3150C00A2A0012100E00221E26822F4434222F0FF027F
-S3150C00A2B0E260E26843EA81331343E360F8BD00BF12
-S3150C00A2C0037E012B17D103682022DA6101680B6823
-S3150C00A2D023F07062037B1B0603F0706313430B6061
-S3150C00A2E0036802691A61036842695A610368034A82
-S3150C00A2F0DA61002070470320704700BF4000280039
-S3150C00A300026802F13843A3F5A833990AC3F3441340
-S3150C00A3101B0243EA4133916821F47F419160026844
-S3150C00A32091680B439360037E012B2FD810B50368FD
-S3150C00A3302022DA61C37913F0200F0ED1426802F0A5
-S3150C00A340604343EA824302689361826802F0604389
-S3150C00A35043EA82430268D36005E0036842689A6167
-S3150C00A36003688268DA600446037E012B06D1FFF788
-S3150C00A370A7FF23684FF00062DA6103E003684FF42D
-S3150C00A3800062DA612368024ADA6110BD704700BFC9
-S3150C00A3904000A0060368D969DA69C2F3800211F499
-S3150C00A3A0006F0FD182B91A6902615A694261D96983
-S3150C00A3B0DA69C2F3C00211F0040F07D0002AF2D1F9
-S3150C00A3C0002070470320704702207047002070471A
-S3150C00A3D030B400221EE0016953014FF00044CC500A
-S3150C00A3E00169194444F2F4544C60016919448569B5
-S3150C00A3F040F2F45404FB02548C60013290F82410A1
-S3150C00A400914201D0144600E0002401690B4401EB93
-S3150C00A4104411D96090F824309342DCD80268016963
-S3150C00A42041F20C03D150002380F8273030BC704722
-S3150C00A43030B4002318E041695A01124C8C50416922
-S3150C00A4401144C56940F2F45404FB03548C60013387
-S3150C00A45090F82510994201D01C4600E00024416971
-S3150C00A4600A4401EB4411D16090F825209A42E2D8B7
-S3150C00A4700268416941F21003D150002380F826305E
-S3150C00A48030BC70470000103038B5044615460369D9
-S3150C00A49090F8270003EB40130846996800F090FEED
-S3150C00A4A0226994F827305B014FF00041D15094F8A3
-S3150C00A4B027300133DBB284F8273094F824209342FA
-S3150C00A4C002D1002384F82730236841F214029A58EB
-S3150C00A4D012F0800F08D0802141F2140299502268A4
-S3150C00A4E0002141F20803D150284638BD026990F884
-S3150C00A4F027305B01D058002808DB00F40343B3F582
-S3150C00A500407F05D1C0F30D400438704700207047DA
-S3150C00A5104FF0FF30704700BF194B1B68194A126980
-S3150C00A52002F0010293405B080168174A934203D874
-S3150C00A53008230B6100207047144A934203D80C235E
-S3150C00A5400B6100207047124A934202D80020086122
-S3150C00A5507047104A934203D804230B6100207047BE
-S3150C00A5600D4A934203D810230B61002070470B4A07
-S3150C00A570934203D814230B610020704702207047C6
-S3150C00A580C0FF032000460050C00E1602008793033E
-S3150C00A59000E1F50580D1F00800C2EB0B80B2E60EA7
-S3150C00A5A010B50420FFF776FD034C2046FFF778FD27
-S3150C00A5B02046FFF757FD10BD0400002038B50446B1
-S3150C00A5C0FFF7EEFF236803F580531A6842F0010289
-S3150C00A5D01A60236803F580531B6813F0010FF8D13A
-S3150C00A5E02046FFF799FF0546A268E16823681964BF
-S3150C00A5F023685A6423684FF480621A6023688022A9
-S3150C00A6009A612268144941F21803D150236803F564
-S3150C00A6108053124A1A602046FFF7DAFE2046FFF7EF
-S3150C00A62007FF22684FF0FF3141F21403D150226824
-S3150C00A6306FF07C43C2F810312268C2F80C312368E3
-S3150C00A6406FF0C022C3F8002223684FF40272DA635B
-S3150C00A65000232362284638BD040020028020010214
-S3150C00A66030B405682C6904F03C0444EAC12141EA83
-S3150C00A670821242F001022A61002201680C6914F070
-S3150C00A680010F03D14A691A80002005E001324FF60A
-S3150C00A690FE718A42F1D9022030BC704710B40468AE
-S3150C00A6A063610468236903F03C0343EAC12141EA70
-S3150C00A6B0821242F00303236100230268126912F02E
-S3150C00A6C0010F06D001334FF6FE729342F5D90220E4
-S3150C00A6D000E000205DF8044B704700BF30B583B036
-S3150C00A6E005460C4602220DF10603FFF7B9FFA0B989
-S3150C00A6F028462146032201ABFFF7B2FF78B9BDF815
-S3150C00A7000630222B0DD1BDF8043023F00F039BB27B
-S3150C00A710B3F5AB5F07D0032006E0042004E0042069
-S3150C00A72002E0032000E0002003B030BD30B583B05A
-S3150C00A73005460C4600224FF40043FFF7AFFF0346D5
-S3150C00A74053B92846214600220DF10603FFF788FF70
-S3150C00A750BDF90630002BF4DB03B030BD70B50646F0
-S3150C00A7600D461446FFF7BAFF034608BB304629468A
-S3150C00A770FFF7DCFF0346D8B96388B3F5804F01D0E9
-S3150C00A780002301E04FF40053A288B2F5006F01D10B
-S3150C00A79043F48073A2790AB143F48053E2790AB187
-S3150C00A7A043F48043304629460022FFF777FF0346E1
-S3150C00A7B0184670BD00B583B001220DF10603FFF7F4
-S3150C00A7C04FFFBDF8063003F004039BB20BB101201A
-S3150C00A7D000E0002003B05DF804FB00BF30B48B082A
-S3150C00A7E0043350F8235001F00301C900F8248C40BF
-S3150C00A7F025EA040440F8234050F823408A402243BB
-S3150C00A80040F8232030BC704710B4436F4900032432
-S3150C00A8108C4023EA04034367436F8A401A4342671A
-S3150C00A8205DF8044B704700BF70B505460E4600F048
-S3150C00A830E3F8F47904B9102428463168224600F06E
-S3150C00A84035F8B379013B64080134240244EA430326
-S3150C00A85043F4403343F00103EB633379013B1B06AE
-S3150C00A86043F481736B6373792BB16A6B013B42EAD8
-S3150C00A87003436B6305E06A6B3379013B42EA03439E
-S3150C00A8806B634FF4A063AB634FF0FF33EB64338918
-S3150C00A8902B6470BDD0F80C3113F0E06F02D1406D13
-S3150C00A8A080B27047D0F81C0180B2704763293BD93F
-S3150C00A8B0002A3BD02DE9F04115460C460646FFF71B
-S3150C00A8C0DDFB1B49A1FB00377F09A1FB04314809BD
-S3150C00A8D040F2FF3E4FF0010CE046714611E001FBE1
-S3150C00A8E007F305FB00F2B3FBF2F39C0AC3F309036F
-S3150C00A8F0B4F5806F04D2734502D29E46A4468846B0
-S3150C00A90001390029EBD148F4004333617269094BD4
-S3150C00A9101340013D43EA85230CF1FF3C43EA0C430B
-S3150C00A92073610020BDE8F08101207047012070475B
-S3150C00A9301F85EB51EF8000FC30B4D0F8084124F0B1
-S3150C00A940E064C0F80841D0F80851064C2C4041EAA6
-S3150C00A950032343EA026244EA0203C0F8083130BC1E
-S3150C00A960704700BFC0C0FFF830B4D0F80C4124F0DB
-S3150C00A970E064C0F80C41D0F80C51074C2C4041EA6D
-S3150C00A980032343EA026244EA020343F08053C0F80D
-S3150C00A9900C3130BC704700BFC0C0FFEF10B5114B77
-S3150C00A9A0984208D14FF40060FFF77AFB4FF4006031
-S3150C00A9B0FFF758FB10BD0C4B984207D10B4C2046A9
-S3150C00A9C0FFF76EFB2046FFF74DFB10BD084B984278
-S3150C00A9D006D1084C2046FFF763FB2046FFF742FBE7
-S3150C00A9E010BD00BF0800034008000248800000109C
-S3150C00A9F0084002480001001010B50446154B984259
-S3150C00AA0003D003F50073984203D11348FFF7C6FF32
-S3150C00AA1014E0124B984203D003F50073984203D10D
-S3150C00AA200F48FFF7BBFF09E00E4B984203D003F526
-S3150C00AA300073984202D10C48FFF7B0FF0323E36082
-S3150C00AA40E36813F0010FFBD0236C23F00F03236490
-S3150C00AA5010BD00BF00000340080003400000024880
-S3150C00AA60080002480040024808400248704700BFF0
-S3150C00AA702DE9F0438BB04FF46143019308238DF815
-S3150C00AA8008308DF8093001258DF80A5010278DF8FD
-S3150C00AA900B700026ADF80C601C4C204601A9FFF784
-S3150C00AAA0C3FE8DF81C6008954FF002098DF82490B2
-S3150C00AAB0DFF85C804046042107AAFFF78BFA902347
-S3150C00AAC08DF8103005958DF81890404605210DEB44
-S3150C00AAD00702FFF77FFAE36923F007032B43E361D1
-S3150C00AAE02046394604222B46FFF726FF20463146E0
-S3150C00AAF004222B46FFF738FF236C23F00F0343EA9F
-S3150C00AB00090323640BB0BDE8F08300BF00000340CB
-S3150C00AB100081024830B58BB0FFF7B0FA044600E06E
-S3150C00AB206400434B9C42FBD900E06408414B9C42B9
-S3150C00AB30FBD8414801212246FFF780FB01943F4B8D
-S3150C00AB4002934FF4FA53ADF80C300123ADF80E30E6
-S3150C00AB503B4C204601A9FFF7AFFA236843F04003AC
-S3150C00AB602360236843F001032360364B3648186094
-S3150C00AB70DA79022161F38712DA71596840F2676457
-S3150C00AB8064F31C0159609A6864F31C029A60090EFE
-S3150C00AB906FF34511D971120E42F02002DA72C268B7
-S3150C00ABA042F00052C26008221A73002305E0254ABF
-S3150C00ABB01A44002111740133DBB2072BF7D9214853
-S3150C00ABC000250576FFF79CFB1B4801210A46FFF77B
-S3150C00ABD0F5FA1B4C236823F040032360236823F00B
-S3150C00ABE0010323600AAA02F80C5D184D28460D21B4
-S3150C00ABF0FFF7F0F990238DF810300123059302230B
-S3150C00AC008DF8183028460C2104AAFFF7E3F92368BF
-S3150C00AC1043F040032360E36823F0070343F0020389
-S3150C00AC20E360236823F0400323600BB030BD00BF04
-S3150C00AC30FF1AB700000E27070040014820A10700A5
-S3150C00AC40004301487889FE1F2050014800810248C4
-S3150C00AC50074BD3F8143113F0080F07D110B504467F
-S3150C00AC600348FFF717FE2070012010BD0020704727
-S3150C00AC700000034008B5FFF7FBFEFFF74BFF08BDCE
-S3150C00AC80BFF34F8F0549CA6802F4E062044B1343C5
-S3150C00AC90CB60BFF34F8F00BFFDE700BF00ED00E0B8
-S3150C00ACA00400FA0508B5204B1B78ABB91F48FFF713
-S3150C00ACB0CFFF012837D11D4B1B78013BDBB23F2B55
-S3150C00ACC031D800F039FA1A4B18600122164B1A705B
-S3150C00ACD00022184B1A7008BD164B1B7816481844E0
-S3150C00ACE0FFF7B6FF012814D1124A13780133DBB2F1
-S3150C00ACF013700E4A1278934215D100220A4B1A7021
-S3150C00AD000A4B5B78FF2B0ED1084B9B785BB9FFF790
-S3150C00AD10B7FF00F011FA064B1B686433984202D950
-S3150C00AD200022014B1A7008BD6C89FE1F2889FE1F74
-S3150C00AD307089FE1F2489FE1F2989FE1F00B583B06A
-S3150C00AD40174B1B68DB6913F0010F1BD01448FFF778
-S3150C00AD5021FB60B1002210E0114A1A44117C02AAB0
-S3150C00AD601A4402F8081C0133DBB2012201E000226E
-S3150C00AD7013460B49097B9942EED8094B1B680121F6
-S3150C00AD80D96100E0002242B19DF80030FF2B04D1BE
-S3150C00AD909DF801300BB9FFF773FF03B05DF804FBA8
-S3150C00ADA07889FE1F08B5FFF77DFFFFF7C7FF08BDC3
-S3150C00ADB010B5054C204608218022FFF70FFD4FF0F9
-S3150C00ADC08073636010BD00BF0085024808B500F0B3
-S3150C00ADD0B3F90D4B1B68C31AB3F5FA7F13D30B4BA0
-S3150C00ADE01B783BB90122094B1A704FF48072084B41
-S3150C00ADF05A6006E00022054B1A704FF08072044B25
-S3150C00AE005A60014B186008BD9889FE1F9C89FE1F6D
-S3150C00AE100085024808B5FEF773FEFFF7C9FF00F080
-S3150C00AE2069F908BD08B5FFF7F5FF00F02FF900F03A
-S3150C00AE300DF8FFF71FFF0020014600F03FF9FFF762
-S3150C00AE40C5FF00F059F8FFF7ADFFF8E710B5FEF7B0
-S3150C00AE507BFF00F071F900F5FA70134B186000F0E7
-S3150C00AE606BF900F51C501030104B1860FDF77AFA90
-S3150C00AE700F4A0023138053800E4A138053800E4AC8
-S3150C00AE80138053804EF60300FDF7ACFAFEF7D6FF9F
-S3150C00AE900A4C2046FFF720F820460621FEF78EFCCA
-S3150C00AEA0FEF7AAFC10BD00BFAC89FE1FA089FE1FD1
-S3150C00AEB0FC89FE1FF889FE1FF489FE1FA489FE1F5C
-S3150C00AEC008B50B4B1B7813F0400F0FD113F0020F84
-S3150C00AED00CD0084B1B681A79FF2A07D15B792BB962
-S3150C00AEE00020012100F0EAF8FFF7CAFE08BD00BFFA
-S3150C00AEF0C089FE1FC889FE1F10B5FEF7FBFF48B3BD
-S3150C00AF00384A1080384B9C894FF40060FDF784FA60
-S3150C00AF1084420DD10120FDF7B9FA324B1B88CBB117
-S3150C00AF20FEF754FAFEF7FEFF00222E4B1A8011E0B4
-S3150C00AF302D4B9C8940F60600FDF76EFA844209D12A
-S3150C00AF40FEF7CEF9274B1B8823B1FEF7EBFF002249
-S3150C00AF50244B1A8000F0F0F8244B1B68984233D32C
-S3150C00AF6003F5FA73214A1360002414E0C4EB0412AF
-S3150C00AF7052001F4B13441F4A13600220FDF786FA3A
-S3150C00AF80184B1B8833B1FEF721FAFEF7CBFF0022D4
-S3150C00AF90144B1A800134002CE8D0002412E0164B16
-S3150C00AFA003EB8413154A13600520FDF76FFA0D4B5E
-S3150C00AFB01B8833B1FEF70AFAFEF7B4FF0022094BE1
-S3150C00AFC01A800134002CEAD000F0B6F80C4B1B6842
-S3150C00AFD0984206D303F51C531033094A1360FEF747
-S3150C00AFE047F910BDB489FE1F008AFE1FAC89FE1FEF
-S3150C00AFF0D089FE1FCC89FE1F4490FE1FC489FE1FFC
-S3150C00B000A089FE1F0C4B1968C1F3072353FA81F371
-S3150C00B010C1F307421A440B0E13FA82F39BB20022B9
-S3150C00B02005E005491144087903449BB20132372ADD
-S3150C00B030F7D9584280B270470080FE1F08B5FFF75B
-S3150C00B040E1FF044B9B8F984201D0002008BD0120E4
-S3150C00B05008BD00BF0080FE1F08B5064B1A68064BDC
-S3150C00B0609A4203D1FFF7EAFF10B908BD002008BDCC
-S3150C00B070012008BD0080FE1FA2E742CE08B5FFF7EF
-S3150C00B080C1FF014B988708BD0080FE1F08B5FFF76E
-S3150C00B090E3FF68B9074A084B1A60002304E0064A26
-S3150C00B0A01A44002111710133372BF8D9FFF7E6FF4B
-S3150C00B0B008BD00BFA2E742CE0080FE1F38B504468D
-S3150C00B0C00D46FFF7C9FF40B1372C08D8054B1C4479
-S3150C00B0D02571FFF7D3FF012038BD002038BD0020B5
-S3150C00B0E038BD00BF0080FE1F014B1860704700BFC3
-S3150C00B0F0B089FE1F08B50C4B1B680C4AA2FB032338
-S3150C00B1009B09013BB3F1807F09D2094A5360FC21AC
-S3150C00B110084B83F823100023936007231360002049
-S3150C00B120FFF7E2FF08BD00BFC0FF0320D34D62103E
-S3150C00B13010E000E000ED00E0014B1868704700BF1E
-S3150C00B140B089FE1F024A136801331360704700BFB3
-S3150C00B150B089FE1F70B50E4B0E4CE41AA4100025D8
-S3150C00B1601E46A54204D056F8253098470135F8E717
-S3150C00B170FFF77CFC084C094BE41AA41000251E466C
-S3150C00B180A54204D056F8253098470135F8E770BD2E
-S3150C00B1907088FE1F7088FE1F7088FE1F7088FE1F49
-S3150C00B1A010B50A44441E914208D014F8013F0878A1
-S3150C00B1B0834201D0181A10BD0131F4E7002010BDEE
-S3150C00B1C010B5431E0A44914204D011F8014B03F802
-S3150C00B1D0014FF8E710BD02440346934202D003F830
-S3150C00B1E0011BFAE770470000FFFFFFFFFFFF00009F
-S3150C00B1F0ADDE122363825363010000400008000099
-S3150C00B20000C0005000000000080027695B450000E4
-S3150C00B21020300020A02F0020D01700200000002096
-S3150C00B2200000000004040000000000000000000004
-S705080082056B
+S3150C00C0004088FE1F05C200089DC200089DC200089C
+S3150C00C0109DC200089DC200089DC2000800000000D9
+S3150C00C0200000000000000000000000009DC2000897
+S3150C00C0309DC20008000000009DC2000845F10008E2
+S3150C00C0409DC200089DC200089DC200089DC2000842
+S3150C00C0509DC200089DC200089DC200089DC2000832
+S3150C00C0609DC2000800000000000000000000000057
+S3150C00C0709DC20008000000009DC200089DC2000879
+S3150C00C0809DC200089DC200089DC200089DC2000802
+S3150C00C0909DC200089DC200089DC200089DC20008F2
+S3150C00C0A09DC200089DC200089DC200089DC20008E2
+S3150C00C0B09DC200089DC200089DC200089DC20008D2
+S3150C00C0C09DC200089DC200089DC200089DC20008C2
+S3150C00C0D09DC200089DC200089DC200089DC20008B2
+S3150C00C0E09DC200089DC200089DC200089DC20008A2
+S3150C00C0F09DC200089DC200089DC200089DC2000892
+S3150C00C1009DC200089DC200089DC200089DC2000881
+S3150C00C1109DC200089DC200089DC200089DC2000871
+S3150C00C1209DC200089DC200089DC200089DC2000861
+S3150C00C1309DC200089DC200089DC200089DC2000851
+S3150C00C1409DC200089DC200089DC200089DC2000841
+S3150C00C1509DC200089DC200089DC200089DC2000831
+S3150C00C16000000000000000000000000000000000BD
+S3150C00C1709DC200089DC200089DC200089DC2000811
+S3150C00C1809DC200089DC200089DC200089DC2000801
+S3150C00C1909DC200089DC200089DC200089DC20008F1
+S3150C00C1A09DC200089DC200089DC200089DC20008E1
+S3150C00C1B09DC200089DC200089DC200089DC20008D1
+S3150C00C1C09DC200089DC200089DC200089DC20008C1
+S3150C00C1D09DC200089DC200089DC200080000000018
+S3150C00C1E09DC200089DC200089DC200089DC20008A1
+S3150C00C1F09DC20008000000009DC20008000000005F
+S3150C00C200EE11AA55DFF874D01D4880471D4C1E4D03
+S3150C00C210AC4209DA21686268A368043BA2BFC8581D
+S3150C00C220D050FAE70C34F3E7184B194CA34208DA52
+S3150C00C23019685A680020043AA4BF8850FBE70833F3
+S3150C00C240F4E71448804714488047000000F2000CBD
+S3150C00C2504088FE1F3000000000F2000C4088FE1FD4
+S3150C00C260000000007088FE1F14080000000000206B
+S3150C00C2700000000000000020A03000004088FE1FD7
+S3150C00C28025DD00084CC2000864C2000864C2000820
+S3150C00C2907CC2000855F1000825EE0008FEE70000F8
+S3150C00C2A010B4013A0A440BE00C784B7803EB0423E8
+S3150C00C2B09BB2184480B2984201D2013080B202314E
+S3150C00C2C09142F1D307D10B781B02184480B29842E5
+S3150C00C2D001D2013080B25DF8044B704770B4C5785A
+S3150C00C2E00D44EDB2134CE57083780E0A3344DBB281
+S3150C00C2F0A37042786270007820709CB2A64206D970
+S3150C00C3000132D2B20B4C62700AB901302070C9B23C
+S3150C00C3108D420CDA0133DBB2064A93703BB9537883
+S3150C00C3200133DBB2537013B913780133137070BC3D
+S3150C00C330704700BFBC89FE1F10B50146074C20682C
+S3150C00C3400830FFF7CBFF2368054A1178197251782C
+S3150C00C350597291789972D278DA7210BDCC89FE1F17
+S3150C00C360BC89FE1F00221A4B1A7006E00021194ADE
+S3150C00C37022F813100133164A1370154B1B78002B39
+S3150C00C380F4D00022124B1A7009E0C3EB03114900DA
+S3150C00C390114A0A440021517001330D4A13700C4B9B
+S3150C00C3A01B78002BF1D04FF480620C4B1A800022C4
+S3150C00C3B0074B1A7007E00A4A02EB831200219180A0
+S3150C00C3C00133034A1370024B1B78002BF3D07047D2
+S3150C00C3D08488FE1FF089FE1FE889FE1F7888FE1FE1
+S3150C00C3E04490FE1F00220A4B1A700BE01946094AAC
+S3150C00C3F032F813201AB9074B23F811007047013392
+S3150C00C400034A1370024B1B78002BEFD0704700BF0A
+S3150C00C4108488FE1FF089FE1F030A43EA002080B2BF
+S3150C00C420704700BF08B5002005491422FFF738FFF6
+S3150C00C43010B1FFF7F1FF08BD4FF6FF7008BD00BF46
+S3150C00C4400E8AFE1F38B50D4D2C7C6B7C03EB042439
+S3150C00C450143CA4B2204480B205F11A010822FFF75D
+S3150C00C4601FFF05F122012246FFF71AFF10B1FFF755
+S3150C00C470D3FF38BD4FF6FF7038BD00BF008AFE1FD4
+S3150C00C48008B50620FFF7DEFF08BD00BF70B5A54B4B
+S3150C00C4901C68042800F07181A34BA44A1360A44ABB
+S3150C00C4A01360032810D1637E03F00F03032B40F0B7
+S3150C00C4B0DA85238A002B40F0D68508229D4B1A700C
+S3150C00C4C002F0FEFC00F094BC02287BD19A4AD37889
+S3150C00C4D00133DBB2D37063B993780133DBB293705B
+S3150C00C4E03BB953780133DBB2537013B9137801336C
+S3150C00C4F013700023914A1380914A1380637E072B95
+S3150C00C50001D0052B0AD1A37E0133DBB2A376782B9F
+S3150C00C51040F0A9850023637600F0A5BD002B00F042
+S3150C00C520A285228A002A41D0A27E511EA176002A1B
+S3150C00C53040F09985E27E082A05D0591EC9B2012918
+S3150C00C5400ED8052A0CD1002363768022794B1A70FB
+S3150C00C55002F0B6FC14227B4B83F82F2000F014BD9E
+S3150C00C560042A03D803219140C9B200E03021A176F8
+S3150C00C5700132E27603F00F03013B072B00F27385C1
+S3150C00C580DFE813F0780208000D00F2037105F203E0
+S3150C00C5907105F20300226B4B83F82F206EE2042206
+S3150C00C5A0644B1A7002F08CFC00F057BC03F00F03BE
+S3150C00C5B0032B40F0588508225E4B1A7002F080FC63
+S3150C00C5C000F016BC052817D15F4B1B689B88002B07
+S3150C00C5D000F049850023534A13605C4A53490A60AC
+S3150C00C5E053490A60564A1380544A13800822514B09
+S3150C00C5F01A7001F04DFAC0E0524B9B7B452B40F074
+S3150C00C6003285504A157C537C03EB05214B4A128824
+S3150C00C610914200F328858DB2484B1D80494B1B7DFA
+S3150C00C62013F03F0F40F01F85464B5B7D002B40F00F
+S3150C00C6301A85474B1C880CB95B885BB1414BDB8B6D
+S3150C00C6409C4240F010853F4B1A8C414B5B889A42BA
+S3150C00C65040F00985FFF7E6FE4FF6FF73984240F06F
+S3150C00C6600285384BDB7D062B00F0B880112B23D0CE
+S3150C00C670012B40F0F884334B93F82230082B40F012
+S3150C00C680F284304B002283F822209B8C4FF6F672F4
+S3150C00C690934203D909332B4A938402E00833294A7F
+S3150C00C6A09384284B5A8BDA839A8B1A845C83284A98
+S3150C00C6B052889A8300F0D3BC1C3D204B1D80254A22
+S3150C00C6C0214B1A6026E09A880AB31E49898C8A4245
+S3150C00C6D01DD1DA8832B11B49498C8A4202D0B2F597
+S3150C00C6E08A4F14D11A8812B95988002936D04FF6B8
+S3150C00C6F0FF718A4202D1588888422FD01149498B42
+S3150C00C7008A4204D10F4A918B5A88914226D04033E3
+S3150C00C7100D4A13600C4B1B680F4A9342D3D300F09F
+S3150C00C720A2BC00BFCC89FE1F368AFE1FC889FE1F1D
+S3150C00C730B889FE1FC089FE1F7488FE1FB489FE1FB0
+S3150C00C7404290FE1F008AFE1FC489FE1F2A8AFE1F06
+S3150C00C750FC89FE1F4490FE1F8490FE1F0023AD4AE9
+S3150C00C76013600221AC4A1170AC4AAD490A60AD495E
+S3150C00C7700A60AD4A138001F08BF9AB4B1A88002A7C
+S3150C00C78000F0718402F11C0189B2A84B1980A84BE8
+S3150C00C790080A18745974A7490968087A98751120FB
+S3150C00C7A0D875083292B2100A40EA0222DA840022C4
+S3150C00C7B083F8282083F829208A885A84CA889A8480
+S3150C00C7C09D4A1088588352889A830A88DA834A8845
+S3150C00C7D01A843633924A136000F02CBCFFF750FED5
+S3150C00C7E04FF6FF73984240F03E84944C17E0617EFE
+S3150C00C7F0A1B18F4B9A8CA3889A420FD18C4B5A8C31
+S3150C00C800E3889A420AD18A4B5A8B23889A4205D1DD
+S3150C00C810874B9A8B63889A4200F04A811E34874B69
+S3150C00C8209C42E4D9824B93F82F3003F03F03022B42
+S3150C00C83014D17F4B9B8C99B2814A13800022814B79
+S3150C00C8401A7007E0804A32F8132091425BD001330C
+S3150C00C8507C4A13707B4B1B78002BF3D0744B93F8EC
+S3150C00C8602F3013F0040F40F0FE83714B142283F823
+S3150C00C8702F2028216D4A1180502283F82E2093F800
+S3150C00C880290093F82D2083F8292093F8281093F883
+S3150C00C8902C2083F8282083F82C1093F8272093F863
+S3150C00C8A02B4083F8274083F82B2093F82640654DC0
+S3150C00C8B02C7093F82A5083F8265083F82A400130BE
+S3150C00C8C0C0B283F82D0068B94B1CDBB2584981F80D
+S3150C00C8D02C303BB9531CDBB281F82B3013B9013425
+S3150C00C8E081F82A40524B5A8C55490A80998C5984A6
+S3150C00C8F09A845A8BDA839A8B1A844F4A11885983F5
+S3150C00C90052889A8381E300244E4B1C701CE0194616
+S3150C00C9101E224A4802FB0302527E1AB91E2404FB4D
+S3150C00C920010415E0072A0CD13CB11E22434902FB37
+S3150C00C9300312917EA27E914203D9404A1E2404FB27
+S3150C00C940032401333F4A13703E4B1B78002BDED079
+S3150C00C950002C00F088832F4B1C600323A3762376D0
+S3150C00C9600023A3750422E275E376314DAB8CA380CC
+S3150C00C9706B8CE3806B8B2380AB8B638001206076A2
+S3150C00C980324B1A7822735A7862739A78A273DB78D0
+S3150C00C990E373208295F82930E37295F82830A37258
+S3150C00C9A095F82730637295F826302372FFF7C4FC8E
+S3150C00C9B095F82E0000F0F003502B5BDD0022214B86
+S3150C00C9C01A704FE003F13602194DAA5C204D2A70FD
+S3150C00C9D0002A4FD0012A03D101331A4A137041E0C1
+S3150C00C9E0022A37D103F13702114DAA5C042A31D140
+S3150C00C9F001F13803EA5C39316B5C43EA0222104BD5
+S3150C00CA001A8040F20A63934228BF13466382A382BC
+S3150C00CA1030E000BFCC89FE1FC089FE1F2A8AFE1F8C
+S3150C00CA20C889FE1FB889FE1F4290FE1FB489FE1FDF
+S3150C00CA30008AFE1FC489FE1FFC89FE1FD089FE1FBB
+S3150C00CA407088FE1F8488FE1FF089FE1F7488FE1FE7
+S3150C00CA508588FE1F03F13702A7498A5C52B113443D
+S3150C00CA60A64A1370A54B1B7819460209053AB3EB77
+S3150C00CA70820FA7DB1022A04B83F82F209E4B93F836
+S3150C00CA802F2042F0020283F82F20022283F8362050
+S3150C00CA90042283F83720062283F838200A2283F8EA
+S3150C00CAA039202C21964A1180602283F82E2072E2BE
+S3150C00CAB0944B1C600022944B1A708F4B93F82F20CA
+S3150C00CAC012F0040F07D00023637620228E4B1A70C7
+S3150C00CAD002F0F6F9C7E2884B93F82E301B099B003F
+S3150C00CAE086480370EB1A143B9BB28548038001F011
+S3150C00CAF00F01022903D102F03F0112290FD013B9FD
+S3150C00CB0012F0030F0BD07C4BD98C2389994240F041
+S3150C00CB103782794B198D6389994240F0318212F034
+S3150C00CB20100F48D0218A002945D004F10C00FFF7DC
+S3150C00CB30D5FB714B93F82A30744A107883423AD15C
+S3150C00CB406D4B93F82B3051788B4234D16A4B93F85A
+S3150C00CB502C30927893422ED1674B93F82D506B4B19
+S3150C00CB60DB789D4227D120736173A273E373E37E56
+S3150C00CB70D3B9237EA27E9A1AA17DA2EBD10202F032
+S3150C00CB80FF02D3B21144C9B2A17513F0800F01D0C4
+S3150C00CB905242D3B2E07DA3EB900250FA82F2D3B2AA
+S3150C00CBA0E37503EBD10323760122574B1A70237ED0
+S3150C00CBB0A37600232382617E01F00F03013B072B32
+S3150C00CBC000F25182DFE813F008002300AA00760178
+S3150C00CBD0A601C201DC0168014B4B1B7813F0010F57
+S3150C00CBE000F04182032363764022474B1A700023E0
+S3150C00CBF02382434B188820B14222434B1A70FFF70D
+S3150C00CC009BFB0022424B1A8002F05AF9F0E03E4B95
+S3150C00CC101B7813F0010F65D0374B93F82F3003F0C8
+S3150C00CC203F03122B5ED1344B93F82E0000F0F00329
+S3150C00CC30502B39DD0022314B1A702DE003F13602F0
+S3150C00CC402D4DAA5C334D2A7072B3012A03D10133E0
+S3150C00CC502A4A137020E0022A16D103F13702264D18
+S3150C00CC60AA5C042A10D101F13803EA5C39316B5CF9
+S3150C00CC7043EA0222284B1A8040F20A63934228BFE9
+S3150C00CC8013466382A3820FE003F137021A498A5CCA
+S3150C00CC9052B11344194A1370184B1B7819460209E2
+S3150C00CCA0053AB3EB820FC9DB03236376124B93F879
+S3150C00CCB02620227293F82720627293F82820A272FB
+S3150C00CCC093F82930E3720120FFF736FB42220E4B14
+S3150C00CCD01A70002323820A4A13800D4A138002F02D
+S3150C00CCE0EFF885E02022084B1A7002F0E9F8054BA4
+S3150C00CCF01B6800225A76B1E5008AFE1F8488FE1F47
+S3150C00CD00B489FE1FCC89FE1FC089FE1FBC89FE1F7D
+S3150C00CD104290FE1F8588FE1F7088FE1F914B93F86C
+S3150C00CD202F3013F0010F24D011F0100F21D1238ACC
+S3150C00CD30002B40F098818C4D2888013080B2FFF78B
+S3150C00CD40FBFA8A4A137843F0100313702A881AB137
+S3150C00CD5043F00203854A137002F0B2F801232382D2
+S3150C00CD60082363760023E37611227E4B83F82F206B
+S3150C00CD700AE113F0200F10D07A4890F834301A02DA
+S3150C00CD8090F8353042EA0300794D2E68304428601D
+S3150C00CD90754813430288D31A0380734B188848B11D
+S3150C00CDA011F0100F06D1714A137843F00203137079
+S3150C00CDB0FFF7C2FA6B4A92F8301092F8313003EB57
+S3150C00CDC001239BB26B4A1380A28A934200D80BB9FB
+S3150C00CDD0684B1A80674B1B886382644B1B7813F075
+S3150C00CDE0030F00F040810022634B1A8002F068F8B2
+S3150C00CDF05E4B1B7813F0200F08D000235E4A13807D
+S3150C00CE0063761422574B83F82F20BDE013F0100FD6
+S3150C00CE100CD00023584A1380012222820422627607
+S3150C00CE20E37611224F4B83F82F20ADE0524A12883D
+S3150C00CE308AB113F0010F01D000232382238A43B950
+S3150C00CE40638A9A4201D94C4A13804B4B1B88238226
+S3150C00CE5001E0494A13800023E376484B1A68444B99
+S3150C00CE601A60454B1B884BB1238A3BB128333E4A8B
+S3150C00CE70138018223B4B83F82F2088E03B4B1B7802
+S3150C00CE8013F0020F00F0EF802822374B1A80102285
+S3150C00CE90344B83F82F207AE0344B1B7813F0010FB8
+S3150C00CEA000F0E180002363761022304B1A7002F0FA
+S3150C00CEB007F8D8E02C4B188808B1FFF73DFA294B38
+S3150C00CEC093F82F3013F0010F15D0284B1B7813F065
+S3150C00CED0010F05D0072363760023A376238201E096
+S3150C00CEE0062363760120FFF727FA10221F4B1A70D0
+S3150C00CEF001F0E6FF44E01D4B1B7813F0010F04D044
+S3150C00CF000523637600232382ADE0174B1B88002B89
+S3150C00CF1036D1A8E0144B188808B1FFF70DFA114B5F
+S3150C00CF2093F82F3013F0010F0CD0072363760023F0
+S3150C00CF30A3760120FFF700FA10220C4B1A7001F0B1
+S3150C00CF40BFFF1DE0084B1B88D3B98CE0074B1B7841
+S3150C00CF5013F0010F00F08780072363760023A37676
+S3150C00CF6081E000BF008AFE1FB489FE1FC089FE1F28
+S3150C00CF70C889FE1F7088FE1F4290FE1FB889FE1FCF
+S3150C00CF8010223C4B83F82F2028223B4B1A80502230
+S3150C00CF90384B83F82E20227A364B83F82A20627A75
+S3150C00CFA083F82B20A27A83F82C20E27A83F82D20A2
+S3150C00CFB0227B83F82620627B83F82720A27B83F8CA
+S3150C00CFC02820E27B83F829200622DA75A2885A8467
+S3150C00CFD0E2889A84294A1188598352889A8322882E
+S3150C00CFE0DA8362881A84637E13F0100F06D0214B05
+S3150C00CFF0002283F8312083F8302006E01D4B0622F0
+S3150C00D00083F830200A2283F831201A4C4023A3756A
+S3150C00D010194B1B881A0A22746374002384F8353062
+S3150C00D02084F8343084F8323084F83330FFF728FA39
+S3150C00D030C04360860F4C4523A3730022E2736275CE
+S3150C00D04022750F490B8801339BB20B80190AA17408
+S3150C00D050E37422766276FFF7E5F9C043208300225B
+S3150C00D060084B1A7070BD0023034A1380054A1370CF
+S3150C00D07070BD00BF008AFE1FB489FE1FFC89FE1F0F
+S3150C00D0807288FE1FC089FE1FF8B505460E46284A53
+S3150C00D090138801339BB21380B3F5FA4F03D34FF4C5
+S3150C00D0A08052234B1A800022224B1A700CE0224B22
+S3150C00D0B003EB84139F881E4B1888FFF7ADF9874244
+S3150C00D0C0E5D001341B4B1C701A4B1C78002CEED08F
+S3150C00D0D000221A700BE0184A02EB831292881AB9D6
+S3150C00D0E0154800EB831007E00133124A1370114BFD
+S3150C00D0F01B78002BEFD00020C0B10D4B1A88130AF9
+S3150C00D10043EA02238380C6804DB90346002203F806
+S3150C00D110012B4270013303F8012B1A7003E02B88A4
+S3150C00D12003806B88438040230372F8BD0020F8BD52
+S3150C00D1307888FE1F8488FE1F4490FE1F00290CDD94
+S3150C00D14008B503468AB205490A8005490868834230
+S3150C00D15002D0194602F034F808BD70474290FE1F03
+S3150C00D160B889FE1FF0B400223B4B1A703B4D1EE0F3
+S3150C00D1703A4C5A001A449200A518A45AA4B103EBCF
+S3150C00D18043029200354F3A4452886AB10788BC4232
+S3150C00D1900AD14488A24207D10C686C60898829811F
+S3150C00D1A02F4B1B78AB7254E001332B4A13702A4B6E
+S3150C00D1B01B78072BDCD90022274B1A700FE0274C63
+S3150C00D1C05A001A449200A518A25A2AB903EB430234
+S3150C00D1D092002244528832B101331F4A13701E4BFF
+S3150C00D1E01B78072BEBD9082B28D100231D4A13706B
+S3150C00D1F01D4A1370184A137013E0194A157803EB7D
+S3150C00D2004304A400194A22449278AE1A154C247889
+S3150C00D210A64203DD134A1670134A137001330E4AE5
+S3150C00D22013700D4B1B78072BE7D90F4B1D780A4B48
+S3150C00D2301D7005EB45039B00084D1D4402682B46EB
+S3150C00D24043F8042B0A686A608A889A80044B1B7818
+S3150C00D250AB72F0BC704700BF8688FE1F8888FE1F25
+S3150C00D260E988FE1F8788FE1FE888FE1F9088FE1F30
+S3150C00D27070B4174B18780130C0B218700022154BD9
+S3150C00D2801A701EE014495A001A4492008C18895AD6
+S3150C00D29062880A4312D003EB430189000F4A0A4401
+S3150C00D2A09278821A772A09DD0B4E0C4675180021E6
+S3150C00D2B031556970AA1C02F8011B11700133054A1D
+S3150C00D2C01370044B1B78072BDCD970BC704700BF5E
+S3150C00D2D0E988FE1F8688FE1F8888FE1F9088FE1F21
+S3150C00D2E038B5354B1B88292B03D80022324B1A80B4
+S3150C00D2F038BD0022304B1A80304B9B8AB3F5807FA9
+S3150C00D30003D0B3F5007F44D038BD2C4BDA8C2C4BB4
+S3150C00D3101B889A424ED1294B1A8D294B5B889A420F
+S3150C00D32048D1284CA51F20462946FFF71BFFA4F120
+S3150C00D3301C03002204F8082C022204F8072C54F8CB
+S3150C00D340061C616034F8021C21811F49086844F8E8
+S3150C00D350060C898824F8021C44F8160C24F8121CB6
+S3150C00D360616844F81C1C228924F8182C9A8B62815B
+S3150C00D3706288A281124A1188998352886280082297
+S3150C00D38004F8102C062204F80F2C2A220A4B1A80B9
+S3150C00D39038BD0A4BDA8C0A4B1B889A420AD1074BCA
+S3150C00D3A01A8D074B5B889A4204D106490846063902
+S3150C00D3B0FFF7D8FE38BD00BFB489FE1F008AFE1FDA
+S3150C00D3C0FC89FE1F1C8AFE1F7C88FE1F10B5514B64
+S3150C00D3D0D98B8AB24FF6FF739A420CD14D4B188CEF
+S3150C00D3E04FF6FF73984206D14A4B4B4A10681860A9
+S3150C00D3F092889A807EE0494B1B88494800885340A6
+S3150C00D400184209D1434B1A8C94B2444B5B8844485E
+S3150C00D41040886340184206D0424B434A1188198013
+S3150C00D42052885A8002E03F4B19805A8000223F4BAB
+S3150C00D4301A703F4C16E03E495A001A4492008C185A
+S3150C00D440384800888A5A904209D1364A518803EBEB
+S3150C00D45043029200364802445288914206D0013368
+S3150C00D460324A1370314B1B78072BE4D9082B3BD16E
+S3150C00D470284C2046FF21062201F0ADFE002384F83D
+S3150C00D480203084F8213084F8223084F8233084F854
+S3150C00D490243084F82530274A1168C4F8061092887F
+S3150C00D4A06281C4F8161062831E4A1188E184528880
+S3150C00D4B022851A4A1188A1835288E2832375012298
+S3150C00D4C06275A373E2730822227463740623A37431
+S3150C00D4D00423E3742273062363733634164B1C60E1
+S3150C00D4E02A22164B1A8010BD0A4B54F8042F1A60C8
+S3150C00D4F0A2889A80074B0F4A1168C3F806109288C7
+S3150C00D5005A8108221A7300225A730C4A13880E3356
+S3150C00D510138010BD008AFE1FE8F10008FC89FE1F6F
+S3150C00D520F889FE1FEC88FE1FF489FE1F8688FE1FF5
+S3150C00D5308888FE1F7C88FE1FC889FE1FB489FE1FC3
+S3150C00D54010B50446416000F0FBFB206010BD00BF27
+S3150C00D55010B5044600F0F4FB2368C01A63689842C1
+S3150C00D560B4BF0020012010BD352303700123437086
+S3150C00D57081700330704700BF0346362202700422C6
+S3150C00D5804270034A1068C3F80200981D704700BF2A
+S3150C00D5900C89FE1F3723037003234370012282700C
+S3150C00D5A0C370062303710530704700BFFF23037059
+S3150C00D5B001307047074B828C1A80C28C5A80064BFE
+S3150C00D5C0028D1A80428D5A80044B028E1A80428E2E
+S3150C00D5D05A807047FC89FE1FF889FE1FF489FE1FCE
+S3150C00D5E003463222027004224270034A1068C3F8C2
+S3150C00D5F00200981D704700BF1489FE1F10B4034625
+S3150C00D600014400242EE01A78332A24D006D8032AA3
+S3150C00D61010D0062A13D0012A21D106E0362A15D0BD
+S3150C00D620FF2A21D0352A1AD10EE0D3F80200104A6F
+S3150C00D630906214E0D3F802000D4A10630FE0D3F8A1
+S3150C00D64002000B4AD0620AE09C7808E0D3F802008C
+S3150C00D650074AD06103E0D3F80200054A10625A78F3
+S3150C00D660023213448B42CED320465DF8044B7047EE
+S3150C00D670F088FE1FF8B504460123037043701C4B5B
+S3150C00D6809A6982700025C5701A4A106860602581F7
+S3150C00D69080276781184A1268E26025746574A57440
+S3150C00D6A0E57425756575A575E57525766576A57696
+S3150C00D6B0E5769E6904F11C005969324601F080FD3D
+S3150C00D6C0A0191C302946C6F1100201F084FD04F1A4
+S3150C00D6D02C002946402201F07EFD04F16C002946FF
+S3150C00D6E03A4601F078FD054B1868C4F8EC00F8BD15
+S3150C00D6F0F088FE1FF0F10008FC89FE1FF4F100080B
+S3150C00D70038B50A4C25682846FFF7B4FF05F1F0003A
+S3150C00D7100121FFF729FFFFF73DFFFFF747FF2368BE
+S3150C00D720C11A1846FFF70AFD38BD00BFC889FE1F8F
+S3150C00D73038B50B4C25682846FFF79CFF05F1F00021
+S3150C00D7400321FFF711FFFFF717FFFFF749FFFFF75D
+S3150C00D7502DFF2368C11A1846FFF7F0FC38BD00BF31
+S3150C00D760C889FE1F10B5114B1C682378022B17D1E4
+S3150C00D770201D0F49042201F013FD98B90D4B04F13D
+S3150C00D7801C0059699A6901F00BFD68B92069094BAF
+S3150C00D790586204F1F000084B1988FFF72FFF10BDF3
+S3150C00D7A0002010BD002010BD002010BDC889FE1F32
+S3150C00D7B0F0F10008F088FE1FB489FE1F10B582B088
+S3150C00D7C00C4C6061A1610023A3704FF6FF73ADF89A
+S3150C00D7D00430ADF8063001A84FF48641FFF754FC2F
+S3150C00D7E0606010B14FF4884383800022014B1A808D
+S3150C00D7F002B010BDF088FE1F024B00221A805A8020
+S3150C00D800704700BFFC89FE1F38B59E4B1B88B3F5CD
+S3150C00D810937F7FD010D840F20F12934234D0B3F5D9
+S3150C00D820887F01D2EBB118E1B3F5887F34D040F292
+S3150C00D8302512934266D010E1B3F5AB7F00F0BF80A2
+S3150C00D84005D840F25512934200F0B28005E1B3F5CB
+S3150C00D850B57F00F0CE8040F26B12934200F0D08080
+S3150C00D860FBE0884B01229A704FF47A721A61FFF72B
+S3150C00D87047FF844C04F108002169FFF761FE40F272
+S3150C00D8800F132380002300E00123002B00F0EA8015
+S3150C00D8904FF488727B4B1A807B4B1B7813F0020F6C
+S3150C00D8A005D17A48FFF754FE002800F0DD80764B50
+S3150C00D8B01B7813F0020F07D0FFF754FF022803D191
+S3150C00D8C00222704B9A700CE06E4B1B694EF65F226F
+S3150C00D8D0934202DC5B006B4A13616A4B9B78022B0A
+S3150C00D8E0C5D14FF47A72674B1A61FFF721FF654C6D
+S3150C00D8F004F108002169FFF723FE40F2251323806B
+S3150C00D900002300E00123002B00F0B0804FF493724B
+S3150C00D9105C4B1A805C4B1B7813F0020F05D15B48ED
+S3150C00D920FFF716FE002800F0A380574B1B7813F068
+S3150C00D930020F07D0FFF716FF052803D10322514B20
+S3150C00D9409A7011E04F4B1B6942F21072934207DC3E
+S3150C00D9504C4A03F57A7313619378032BC5D103E014
+S3150C00D9600020484B188038BD4648FFF723FE454D2E
+S3150C00D970288CFEF751FD0404688CFEF74DFD204300
+S3150C00D98040084FF47A7303FB00F0002801DB286192
+S3150C00D99003E06FF000423B4B1A613A4C04F108006D
+S3150C00D9A02169FFF7CDFD40F255132380002300E0DB
+S3150C00D9B00123002B5ED04FF4AB72324B1A803348E6
+S3150C00D9C0FFF7C6FD002857D02E4B02229A704FF453
+S3150C00D9D07A721A61FFF710FFFFF7AAFE294C04F1C1
+S3150C00D9E008002169FFF7ACFD4FF4B57323800023C3
+S3150C00D9F000E00123002B41D040F26B12214B1A8020
+S3150C00DA00214B1B7813F0020F04D12048FFF7A0FD21
+S3150C00DA10002835D01C4B1B7813F0020F07D0FFF7EC
+S3150C00DA20A1FE052803D10322164B9A7011E0154B63
+S3150C00DA301B6942F21072934207DC124A03F57A73A1
+S3150C00DA4013619378032BC7D103E000200D4B18808C
+S3150C00DA5038BD0C48FFF7AEFD89E70022094B1A804A
+S3150C00DA60022038BD032038BD002038BD032038BD48
+S3150C00DA70002038BD032038BD002038BD032038BD3A
+S3150C00DA80002038BDF088FE1FC089FE1FF888FE1FD7
+S3150C00DA9008B5FFF7B9FE08BD82B00023019303E079
+S3150C00DAA000BF019B01330193019B8342F8D302B063
+S3150C00DAB0704700BF72B60D4B0D4A9A60BFF34F8F7D
+S3150C00DAC062B6D3F8882042F47002C3F888205A69EB
+S3150C00DAD022F008025A61074941F214028B5823F0CE
+S3150C00DAE00F0343F004038B50704700BF00ED00E0BA
+S3150C00DAF000C000080010005800487047001BB70013
+S3150C00DB0010B51E4BDB6813F4803F27D01C4BDB682B
+S3150C00DB1013F0010F02D1FFF7EFFF00E01948184B85
+S3150C00DB201B6813F0040F11D015498A68C2F30362FF
+S3150C00DB308B68C3F306238C68C4F30644611C02FB92
+S3150C00DB400112B0FBF2F203FB022208E00C4B9B68BD
+S3150C00DB5003F07F030133B0FBF3F200E0094A0749F7
+S3150C00DB60C868C0B20130B2FBF0F3086900F00100DE
+S3150C00DB700130B3FBF0F0044B186010BD00460050AA
+S3150C00DB801047005000366E01C0FF032070B5574B8E
+S3150C00DB901B6813F0010F09D1544A536843F0010373
+S3150C00DBA05360524B1B6813F0010FFAD0504B1B6895
+S3150C00DBB013F4007F08D04E4A936843F400739360C5
+S3150C00DBC041F64C50FFF768FF4A4C636843F4002358
+S3150C00DBD0636040F6C410FFF75FFF636823F480337D
+S3150C00DBE023F002036360444B5B6813F0300F21D0C3
+S3150C00DBF0103C636823F4702323F030036360FFF753
+S3150C00DC007BFF3E4BA3FB00231B0D013B626842EAE4
+S3150C00DC1003436360374BDA6822F00102DA605A6814
+S3150C00DC2022F400325A60334B1B6803F46073B3F56D
+S3150C00DC30607FF8D12F4B5A6842F001025A605A683D
+S3150C00DC4042F010025A602E4A9A605A6842F040021C
+S3150C00DC505A605A6822F010025A605A6842F48022BE
+S3150C00DC605A60244B1B6813F0040FFAD0214A5368F0
+S3150C00DC7023F0010353601F4B1B6813F0010FFAD1FD
+S3150C00DC80204C4FF00113E360002666612661266284
+S3150C00DC9066620323E3611C4BA3611C4BA362154D07
+S3150C00DCA06B6823F040036B60194BAB604FF4166046
+S3150C00DCB0FFF7F2FE174BAB604FF46160FFF7ECFE1B
+S3150C00DCC0154BAB604FF49650FFF7E6FE134BAB606B
+S3150C00DCD041F27070FFF7E0FE114BAB604FF4E15070
+S3150C00DCE0FFF7DAFE6660FFF70BFF70BD00420050CF
+S3150C00DCF00044005010470050004700506BCA5F6B41
+S3150C00DD00002F0B0100460050050001000300200106
+S3150C00DD10002F0501002F0301002F0201002F010126
+S3150C00DD20002F000110B54FF00053044C0FCB84E8C4
+S3150C00DD300F00FFF7BFFEFFF729FF10BDC4FF03203E
+S3150C00DD4008B501F0F9F908BD2DE9F04184B04FF49E
+S3150C00DD5080330293002404AD05F80C4DDFF8D8800F
+S3150C00DD60404609212A4600F035F98DF80440304E1C
+S3150C00DD70304604212A4600F02DF98DF80440304631
+S3150C00DD8002212A4600F026F98DF80440304603217C
+S3150C00DD902A4600F01FF98DF80C4088278DF8047080
+S3150C00DDA0304605212A4600F015F98DF80C408DF801
+S3150C00DDB00470304608212A4600F00CF98DF80C4008
+S3150C00DDC08DF80470304609212A4600F003F98DF8C7
+S3150C00DDD00440404608212A4600F0FCF88DF80C4019
+S3150C00DDE08DF80470304607212A4600F0F3F88DF8BA
+S3150C00DDF00440304621462A4600F0ECF830462146CF
+S3150C00DE00012200F001FD4FF0806364F3010364F31B
+S3150C00DE108303022262F3092362F38B2364F38F33A9
+S3150C00DE20012262F39753034A136004B0BDE8F081F4
+S3150C00DE300082024840400050008F024810B5234C27
+S3150C00DE40204600F0BBFB2268136823F48013136092
+S3150C00DE5001F072F900F59C54083403E001F06CF9FA
+S3150C00DE60A04205D21948002100F0A4FC0028F5D0E8
+S3150C00DE70164C20460021164A00F070FC22681368E6
+S3150C00DE8043F490431360236841F21802995841F405
+S3150C00DE9000519950196841F0080119602368995886
+S3150C00DEA041F0020199501A6842F004021A60094BBB
+S3150C00DEB008221A7000225A7027229A706922DA7088
+S3150C00DEC05B221A7145225A7110BD00BF4088FE1F95
+S3150C00DED0F8F100087C88FE1F0823037000234370AA
+S3150C00DEE0272383706923C3705B2303714523437116
+S3150C00DEF0704700BF10B5094800F0F8FA0446421EF8
+S3150C00DF0040F2F3539A4205D804480549224600F0DC
+S3150C00DF10BBFA00E00024204610BD00BF4088FE1F5F
+S3150C00DF20008AFE1F284B1B88013B9BB240F2F35222
+S3150C00DF30934248D8254B5A6993F826305B01D11881
+S3150C00DF40D358002B0ADA214B1B68022141F214022A
+S3150C00DF509950002141F204029950704789680023B8
+S3150C00DF6003E01B4AD25CCA540133174A12889A4200
+S3150C00DF70F7D8164B596993F8260001EB40114A6005
+S3150C00DF8093F8262083F8282058695201815841F0CD
+S3150C00DF900041815093F826200132D2B283F8262014
+S3150C00DFA093F825309A4203D10022084B83F8262099
+S3150C00DFB0064B00221A621B68022041F214015850CB
+S3150C00DFC041F204015A507047B489FE1F4088FE1F67
+S3150C00DFD0008AFE1FF0B48B081F1D50F8276001F055
+S3150C00DFE00305ED00F824AC4026EA040440F827406B
+S3150C00DFF0466F4F000324BC4026EA04044467184CC1
+S3150C00E000A04203D004F58074A04207D1046E012609
+S3150C00E01006FA01F124EA0101016617E054688C4006
+S3150C00E0204460CC08103450F8247001F007018900C4
+S3150C00E03007268E4027EA060640F8246050F824701E
+S3150C00E040167A06FA01F1394340F82410043350F8D5
+S3150C00E05023101278AA400A4340F82320F0BC7047DC
+S3150C00E060008E0248030F20F0704003EB43039B0025
+S3150C00E070014A9850704700BF14440050034B18686F
+S3150C00E080034B5B6903F00103D8407047C0FF0320C4
+S3150C00E09000460050014B5860704700BF00460050C8
+S3150C00E0A0030F20F0704003EB43039B00014A98508A
+S3150C00E0B0704700BF484600502DE9F04142F2107EF1
+S3150C00E0C00027BC46012638E00B6803EB83035B0094
+S3150C00E0D0B3FBF6F34D68B3FBF5F4374AA2FB0482A7
+S3150C00E0E0D20802EB82025200A21A052A05D9324A3C
+S3150C00E0F0A2FB0442D208013203E02F4AA2FB0442DF
+S3150C00E100D2082AB102EB82046400B3FBF4F304E0F8
+S3150C00E110294AA2FB0323DB080122AB4201D35B1B7A
+S3150C00E12000E0EB1A142A07D89E4505D9B3F57A7F79
+S3150C00E13006D39E461746B4460136402EC4D901E096
+S3150C00E1401746B44642F2107E0126402212E042F2F5
+S3150C00E150107302FB0333B3FBF7F30C899C4201D813
+S3150C00E1601D1B00E0E51AAE4501D9AE461646A34284
+S3150C00E17002D3013A022AEAD8BB1B026842F04002DB
+S3150C00E1800260023B1B0303F4E0434A89013A920105
+S3150C00E190D2B21343721E120202F4706213430CF1D4
+S3150C00E1A0FF3C0CF03F0C43EA0C030361036823F0BD
+S3150C00E1B040030360BDE8F081CDCCCCCCD0F8C431A3
+S3150C00E1C013F4407FFAD10131120442F0020242EA02
+S3150C00E1D00161C0F8C411704738B50446074D28468E
+S3150C00E1E0FFF75EFF2846FFF73DFF236823F0010388
+S3150C00E1F02360236813F0020FFBD138BD100000100A
+S3150C00E200D0F8C83123F00F031943C0F8C811704772
+S3150C00E210D0F8C80100F00F00704700BF08B5FFF733
+S3150C00E220F7FF012802D0022803D005E0FFF726FFEE
+S3150C00E23008BDFFF761FC08BD002008BDF8B5044613
+S3150C00E2400E461546FFF7C8FF20463146FFF7D8FFA6
+S3150C00E2502046FFF7E3FFB0FBF5F2C2F58062002A19
+S3150C00E26038BF002240F2FF37BA4228BF3A46C2F501
+S3150C00E2708061B0FBF1F1AE098009B602B6FBF0F392
+S3150C00E280BB4228BF3B4603FB00F0800A691AA5EB8C
+S3150C00E290801081428CBF0020012000B1134608B1CA
+S3150C00E2A0012100E00221E26822F4434222F0FF023F
+S3150C00E2B0E260E26843EA81331343E360F8BD00BFD2
+S3150C00E2C0037E012B17D103682022DA6101680B68E3
+S3150C00E2D023F07062037B1B0603F0706313430B6021
+S3150C00E2E0036802691A61036842695A610368034A42
+S3150C00E2F0DA61002070470320704700BF40002800F9
+S3150C00E300026802F13843A3F5A833990AC3F3441300
+S3150C00E3101B0243EA4133916821F47F419160026804
+S3150C00E32091680B439360037E012B2FD810B50368BD
+S3150C00E3302022DA61C37913F0200F0ED1426802F065
+S3150C00E340604343EA824302689361826802F0604349
+S3150C00E35043EA82430268D36005E0036842689A6127
+S3150C00E36003688268DA600446037E012B06D1FFF748
+S3150C00E370A7FF23684FF00062DA6103E003684FF4ED
+S3150C00E3800062DA612368024ADA6110BD704700BF89
+S3150C00E3904000A0060368D969DA69C2F3800211F459
+S3150C00E3A0006F0FD182B91A6902615A694261D96943
+S3150C00E3B0DA69C2F3C00211F0040F07D0002AF2D1B9
+S3150C00E3C000207047032070470220704700207047DA
+S3150C00E3D030B400221EE0016953014FF00044CC50CA
+S3150C00E3E00169194444F2F4544C6001691944856975
+S3150C00E3F040F2F45404FB02548C60013290F8241061
+S3150C00E400914201D0144600E0002401690B4401EB53
+S3150C00E4104411D96090F824309342DCD80268016923
+S3150C00E42041F20C03D150002380F8273030BC7047E2
+S3150C00E43030B4002318E041695A01124C8C504169E2
+S3150C00E4401144C56940F2F45404FB03548C60013347
+S3150C00E45090F82510994201D01C4600E00024416931
+S3150C00E4600A4401EB4411D16090F825209A42E2D877
+S3150C00E4700268416941F21003D150002380F826301E
+S3150C00E48030BC70470000103038B504461546036999
+S3150C00E49090F8270003EB40130846996800F090FEAD
+S3150C00E4A0226994F827305B014FF00041D15094F863
+S3150C00E4B027300133DBB284F8273094F824209342BA
+S3150C00E4C002D1002384F82730236841F214029A58AB
+S3150C00E4D012F0800F08D0802141F214029950226864
+S3150C00E4E0002141F20803D150284638BD026990F844
+S3150C00E4F027305B01D058002808DB00F40343B3F542
+S3150C00E500407F05D1C0F30D4004387047002070479A
+S3150C00E5104FF0FF30704700BF194B1B68194A126940
+S3150C00E52002F0010293405B080168174A934203D834
+S3150C00E53008230B6100207047144A934203D80C231E
+S3150C00E5400B6100207047124A934202D800200861E2
+S3150C00E5507047104A934203D804230B61002070477E
+S3150C00E5600D4A934203D810230B61002070470B4AC7
+S3150C00E570934203D814230B61002070470220704786
+S3150C00E580C0FF032000460050C00E160200879303FE
+S3150C00E59000E1F50580D1F00800C2EB0B80B2E60E67
+S3150C00E5A010B50420FFF776FD034C2046FFF778FDE7
+S3150C00E5B02046FFF757FD10BD0400002038B5044671
+S3150C00E5C0FFF7EEFF236803F580531A6842F0010249
+S3150C00E5D01A60236803F580531B6813F0010FF8D1FA
+S3150C00E5E02046FFF799FF0546A268E168236819647F
+S3150C00E5F023685A6423684FF480621A602368802269
+S3150C00E6009A612268144941F21803D150236803F524
+S3150C00E6108053124A1A602046FFF7DAFE2046FFF7AF
+S3150C00E62007FF22684FF0FF3141F21403D1502268E4
+S3150C00E6306FF07C43C2F810312268C2F80C312368A3
+S3150C00E6406FF0C022C3F8002223684FF40272DA631B
+S3150C00E65000232362284638BD0400200280200102D4
+S3150C00E66030B405682C6904F03C0444EAC12141EA43
+S3150C00E670821242F001022A61002201680C6914F030
+S3150C00E680010F03D14A691A80002005E001324FF6CA
+S3150C00E690FE718A42F1D9022030BC704710B404686E
+S3150C00E6A063610468236903F03C0343EAC12141EA30
+S3150C00E6B0821242F00303236100230268126912F0EE
+S3150C00E6C0010F06D001334FF6FE729342F5D90220A4
+S3150C00E6D000E000205DF8044B704700BF30B583B0F6
+S3150C00E6E005460C4602220DF10603FFF7B9FFA0B949
+S3150C00E6F028462146032201ABFFF7B2FF78B9BDF8D5
+S3150C00E7000630222B0DD1BDF8043023F00F039BB23B
+S3150C00E710B3F5AB5F07D0032006E0042004E0042029
+S3150C00E72002E0032000E0002003B030BD30B583B01A
+S3150C00E73005460C4600224FF40043FFF7AFFF034695
+S3150C00E74053B92846214600220DF10603FFF788FF30
+S3150C00E750BDF90630002BF4DB03B030BD70B50646B0
+S3150C00E7600D461446FFF7BAFF034608BB304629464A
+S3150C00E770FFF7DCFF0346D8B96388B3F5804F01D0A9
+S3150C00E780002301E04FF40053A288B2F5006F01D1CB
+S3150C00E79043F48073A2790AB143F48053E2790AB147
+S3150C00E7A043F48043304629460022FFF777FF0346A1
+S3150C00E7B0184670BD00B583B001220DF10603FFF7B4
+S3150C00E7C04FFFBDF8063003F004039BB20BB10120DA
+S3150C00E7D000E0002003B05DF804FB00BF30B48B08EA
+S3150C00E7E0043350F8235001F00301C900F8248C407F
+S3150C00E7F025EA040440F8234050F823408A4022437B
+S3150C00E80040F8232030BC704710B4436F49000324F2
+S3150C00E8108C4023EA04034367436F8A401A434267DA
+S3150C00E8205DF8044B704700BF70B505460E4600F008
+S3150C00E830E3F8F47904B9102428463168224600F02E
+S3150C00E84035F8B379013B64080134240244EA4303E6
+S3150C00E85043F4403343F00103EB633379013B1B066E
+S3150C00E86043F481736B6373792BB16A6B013B42EA98
+S3150C00E87003436B6305E06A6B3379013B42EA03435E
+S3150C00E8806B634FF4A063AB634FF0FF33EB643389D8
+S3150C00E8902B6470BDD0F80C3113F0E06F02D1406DD3
+S3150C00E8A080B27047D0F81C0180B2704763293BD9FF
+S3150C00E8B0002A3BD02DE9F04115460C460646FFF7DB
+S3150C00E8C0DDFB1B49A1FB00377F09A1FB043148097D
+S3150C00E8D040F2FF3E4FF0010CE046714611E001FBA1
+S3150C00E8E007F305FB00F2B3FBF2F39C0AC3F309032F
+S3150C00E8F0B4F5806F04D2734502D29E46A446884670
+S3150C00E90001390029EBD148F4004333617269094B94
+S3150C00E9101340013D43EA85230CF1FF3C43EA0C43CB
+S3150C00E92073610020BDE8F08101207047012070471B
+S3150C00E9301F85EB51EF8000FC30B4D0F8084124F071
+S3150C00E940E064C0F80841D0F80851064C2C4041EA66
+S3150C00E950032343EA026244EA0203C0F8083130BCDE
+S3150C00E960704700BFC0C0FFF830B4D0F80C4124F09B
+S3150C00E970E064C0F80C41D0F80C51074C2C4041EA2D
+S3150C00E980032343EA026244EA020343F08053C0F8CD
+S3150C00E9900C3130BC704700BFC0C0FFEF10B5114B37
+S3150C00E9A0984208D14FF40060FFF77AFB4FF40060F1
+S3150C00E9B0FFF758FB10BD0C4B984207D10B4C204669
+S3150C00E9C0FFF76EFB2046FFF74DFB10BD084B984238
+S3150C00E9D006D1084C2046FFF763FB2046FFF742FBA7
+S3150C00E9E010BD00BF0800034008000248800000105C
+S3150C00E9F0084002480001001010B50446154B984219
+S3150C00EA0003D003F50073984203D11348FFF7C6FFF2
+S3150C00EA1014E0124B984203D003F50073984203D1CD
+S3150C00EA200F48FFF7BBFF09E00E4B984203D003F5E6
+S3150C00EA300073984202D10C48FFF7B0FF0323E36042
+S3150C00EA40E36813F0010FFBD0236C23F00F03236450
+S3150C00EA5010BD00BF00000340080003400000024840
+S3150C00EA60080002480040024808400248704700BFB0
+S3150C00EA702DE9F0438BB04FF46143019308238DF8D5
+S3150C00EA8008308DF8093001258DF80A5010278DF8BD
+S3150C00EA900B700026ADF80C601C4C204601A9FFF744
+S3150C00EAA0C3FE8DF81C6008954FF002098DF8249072
+S3150C00EAB0DFF85C804046042107AAFFF78BFA902307
+S3150C00EAC08DF8103005958DF81890404605210DEB04
+S3150C00EAD00702FFF77FFAE36923F007032B43E36191
+S3150C00EAE02046394604222B46FFF726FF20463146A0
+S3150C00EAF004222B46FFF738FF236C23F00F0343EA5F
+S3150C00EB00090323640BB0BDE8F08300BF000003408B
+S3150C00EB100081024830B58BB0FFF7B0FA044600E02E
+S3150C00EB206400434B9C42FBD900E06408414B9C4279
+S3150C00EB30FBD8414801212246FFF780FB01943F4B4D
+S3150C00EB4002934FF4FA53ADF80C300123ADF80E30A6
+S3150C00EB503B4C204601A9FFF7AFFA236843F040036C
+S3150C00EB602360236843F001032360364B3648186054
+S3150C00EB70DA79022161F38712DA71596840F2676417
+S3150C00EB8064F31C0159609A6864F31C029A60090EBE
+S3150C00EB906FF34511D971120E42F02002DA72C26877
+S3150C00EBA042F00052C26008221A73002305E0254A7F
+S3150C00EBB01A44002111740133DBB2072BF7D9214813
+S3150C00EBC000250576FFF79CFB1B4801210A46FFF73B
+S3150C00EBD0F5FA1B4C236823F040032360236823F0CB
+S3150C00EBE0010323600AAA02F80C5D184D28460D2174
+S3150C00EBF0FFF7F0F990238DF81030012305930223CB
+S3150C00EC008DF8183028460C2104AAFFF7E3F923687F
+S3150C00EC1043F040032360E36823F0070343F0020349
+S3150C00EC20E360236823F0400323600BB030BD00BFC4
+S3150C00EC30FF1AB700000E27070040014820A1070065
+S3150C00EC40004301487889FE1F205001480081024884
+S3150C00EC50074BD3F8143113F0080F07D110B504463F
+S3150C00EC600348FFF717FE2070012010BD00207047E7
+S3150C00EC700000034008B5FFF7FBFEFFF74BFF08BD8E
+S3150C00EC80BFF34F8F0549CA6802F4E062044B134385
+S3150C00EC90CB60BFF34F8F00BFFDE700BF00ED00E078
+S3150C00ECA00400FA0508B5204B1B78ABB91F48FFF7D3
+S3150C00ECB0CFFF012837D11D4B1B78013BDBB23F2B15
+S3150C00ECC031D800F039FA1A4B18600122164B1A701B
+S3150C00ECD00022184B1A7008BD164B1B7816481844A0
+S3150C00ECE0FFF7B6FF012814D1124A13780133DBB2B1
+S3150C00ECF013700E4A1278934215D100220A4B1A70E1
+S3150C00ED000A4B5B78FF2B0ED1084B9B785BB9FFF750
+S3150C00ED10B7FF00F011FA064B1B686433984202D910
+S3150C00ED200022014B1A7008BD6C89FE1F2889FE1F34
+S3150C00ED307089FE1F2489FE1F2989FE1F00B583B02A
+S3150C00ED40174B1B68DB6913F0010F1BD01448FFF738
+S3150C00ED5021FB60B1002210E0114A1A44117C02AA70
+S3150C00ED601A4402F8081C0133DBB2012201E000222E
+S3150C00ED7013460B49097B9942EED8094B1B680121B6
+S3150C00ED80D96100E0002242B19DF80030FF2B04D17E
+S3150C00ED909DF801300BB9FFF773FF03B05DF804FB68
+S3150C00EDA07889FE1F08B5FFF77DFFFFF7C7FF08BD83
+S3150C00EDB010B5054C204608218022FFF70FFD4FF0B9
+S3150C00EDC08073636010BD00BF0085024808B500F073
+S3150C00EDD0B3F90D4B1B68C31AB3F5FA7F13D30B4B60
+S3150C00EDE01B783BB90122094B1A704FF48072084B01
+S3150C00EDF05A6006E00022054B1A704FF08072044BE5
+S3150C00EE005A60014B186008BD9889FE1F9C89FE1F2D
+S3150C00EE100085024808B5FEF773FEFFF7C9FF00F040
+S3150C00EE2069F908BD08B5FFF7F5FF00F02FF900F0FA
+S3150C00EE300DF8FFF71FFF0020014600F03FF9FFF722
+S3150C00EE40C5FF00F059F8FFF7ADFFF8E710B5FEF770
+S3150C00EE507BFF00F071F900F5FA70134B186000F0A7
+S3150C00EE606BF900F51C501030104B1860FDF77AFA50
+S3150C00EE700F4A0023138053800E4A138053800E4A88
+S3150C00EE80138053804EF60300FDF7ACFAFEF7D6FF5F
+S3150C00EE900A4C2046FFF720F820460621FEF78EFC8A
+S3150C00EEA0FEF7AAFC10BD00BFAC89FE1FA089FE1F91
+S3150C00EEB0FC89FE1FF889FE1FF489FE1FA489FE1F1C
+S3150C00EEC008B50B4B1B7813F0400F0FD113F0020F44
+S3150C00EED00CD0084B1B681A79FF2A07D15B792BB922
+S3150C00EEE00020012100F0EAF8FFF7CAFE08BD00BFBA
+S3150C00EEF0C089FE1FC889FE1F10B5FEF7FBFF48B37D
+S3150C00EF00384A1080384B9C894FF40060FDF784FA20
+S3150C00EF1084420DD10120FDF7B9FA324B1B88CBB1D7
+S3150C00EF20FEF754FAFEF7FEFF00222E4B1A8011E074
+S3150C00EF302D4B9C8940F60600FDF76EFA844209D1EA
+S3150C00EF40FEF7CEF9274B1B8823B1FEF7EBFF002209
+S3150C00EF50244B1A8000F0F0F8244B1B68984233D3EC
+S3150C00EF6003F5FA73214A1360002414E0C4EB04126F
+S3150C00EF7052001F4B13441F4A13600220FDF786FAFA
+S3150C00EF80184B1B8833B1FEF721FAFEF7CBFF002294
+S3150C00EF90144B1A800134002CE8D0002412E0164BD6
+S3150C00EFA003EB8413154A13600520FDF76FFA0D4B1E
+S3150C00EFB01B8833B1FEF70AFAFEF7B4FF0022094BA1
+S3150C00EFC01A800134002CEAD000F0B6F80C4B1B6802
+S3150C00EFD0984206D303F51C531033094A1360FEF707
+S3150C00EFE047F910BDB489FE1F008AFE1FAC89FE1FAF
+S3150C00EFF0D089FE1FCC89FE1F4490FE1FC489FE1FBC
+S3150C00F000A089FE1F0C4B1968C1F3072353FA81F331
+S3150C00F010C1F307421A440B0E13FA82F39BB2002279
+S3150C00F02005E005491144087903449BB20132372A9D
+S3150C00F030F7D9584280B270470080FE1F08B5FFF71B
+S3150C00F040E1FF044B9B8F984201D0002008BD0120A4
+S3150C00F05008BD00BF0080FE1F08B5064B1A68064B9C
+S3150C00F0609A4203D1FFF7EAFF10B908BD002008BD8C
+S3150C00F070012008BD0080FE1FA2E742CE08B5FFF7AF
+S3150C00F080C1FF014B988708BD0080FE1F08B5FFF72E
+S3150C00F090E3FF68B9074A084B1A60002304E0064AE6
+S3150C00F0A01A44002111710133372BF8D9FFF7E6FF0B
+S3150C00F0B008BD00BFA2E742CE0080FE1F38B504464D
+S3150C00F0C00D46FFF7C9FF40B1372C08D8054B1C4439
+S3150C00F0D02571FFF7D3FF012038BD002038BD002075
+S3150C00F0E038BD00BF0080FE1F014B1860704700BF83
+S3150C00F0F0B089FE1F08B50C4B1B680C4AA2FB0323F8
+S3150C00F1009B09013BB3F1807F09D2094A5360FC216C
+S3150C00F110084B83F823100023936007231360002009
+S3150C00F120FFF7E2FF08BD00BFC0FF0320D34D6210FE
+S3150C00F13010E000E000ED00E0014B1868704700BFDE
+S3150C00F140B089FE1F024A136801331360704700BF73
+S3150C00F150B089FE1F70B50E4B0E4CE41AA410002598
+S3150C00F1601E46A54204D056F8253098470135F8E7D7
+S3150C00F170FFF77CFC084C094BE41AA41000251E462C
+S3150C00F180A54204D056F8253098470135F8E770BDEE
+S3150C00F1907088FE1F7088FE1F7088FE1F7088FE1F09
+S3150C00F1A010B50A44441E914208D014F8013F087861
+S3150C00F1B0834201D0181A10BD0131F4E7002010BDAE
+S3150C00F1C010B5431E0A44914204D011F8014B03F8C2
+S3150C00F1D0014FF8E710BD02440346934202D003F8F0
+S3150C00F1E0011BFAE770470000FFFFFFFFFFFF00005F
+S3150C00F1F0ADDE122363825363010000400008000059
+S3150C00F20000C0005000000000080027695B450000A4
+S3150C00F21020300020A02F0020D01700200000002056
+S3150C00F22000000000040400000000000000000000C4
+S7050800C2052B
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Prog/linker_script.ld b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Prog/linker_script.ld
index f1f11360..556dab23 100644
--- a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Prog/linker_script.ld
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_GCC/Prog/linker_script.ld
@@ -65,8 +65,8 @@ no_init_size = 64;
MEMORY
{
- FLASH_1_cached(RX) : ORIGIN = 0x08008000, LENGTH = 0x1f8000
- FLASH_1_uncached(RX) : ORIGIN = 0x0C008000, LENGTH = 0x1f8000
+ FLASH_1_cached(RX) : ORIGIN = 0x0800C000, LENGTH = 0x1f4000
+ FLASH_1_uncached(RX) : ORIGIN = 0x0C00C000, LENGTH = 0x1f4000
PSRAM_1(!RX) : ORIGIN = 0x1FFE8040, LENGTH = 0x17fc0
DSRAM_1_system(!RX) : ORIGIN = 0x20000000, LENGTH = 0x20000
DSRAM_2_comm(!RX) : ORIGIN = 0x20020000, LENGTH = 0x20000
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/bin/openblt_xmc4700.out b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/bin/openblt_xmc4700.out
index a9ce0ddb..a141f24d 100644
Binary files a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/bin/openblt_xmc4700.out and b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/bin/openblt_xmc4700.out differ
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/bin/openblt_xmc4700.srec b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/bin/openblt_xmc4700.srec
index c48b4f67..c67e510e 100644
--- a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/bin/openblt_xmc4700.srec
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/bin/openblt_xmc4700.srec
@@ -1,1329 +1,2691 @@
S01700006F70656E626C745F786D63343730302E73726563A7
-S31508000000C899FE1F79500008C9500008CD5000084D
-S31508000010D1500008D5500008D9500008000000004B
-S31508000020000000000000000000000000DD5000088D
-S31508000030E150000800000000E5500008E9500008FB
-S31508000040ED500008F1500008F5500008F950000876
-S31508000050FD50000801510008055100080951000823
-S315080000600D5100080000000000000000000000001C
-S315080000701151000800000000155100081951000828
-S315080000801D51000821510008255100082951000872
-S315080000902D51000831510008355100083951000822
-S315080000A03D510008415100084551000849510008D2
-S315080000B04D51000851510008555100085951000882
-S315080000C05D51000861510008655100086951000832
-S315080000D06D510008715100087551000879510008E2
-S315080000E07D51000881510008855100088951000892
-S315080000F08D51000891510008955100089951000842
-S315080001009D510008A1510008A5510008A9510008F1
-S31508000110AD510008B1510008B5510008B9510008A1
-S31508000120BD510008C1510008C5510008C951000851
-S31508000130CD510008D1510008D5510008D951000801
-S31508000140DD510008E1510008E5510008E9510008B1
-S31508000150ED510008F1510008F5510008F951000861
+S3150800000088A4FE1FD9A3000885A5000889A50008AD
+S315080000108DA5000891A5000895A500080000000018
+S3150800002000000000000000000000000099A500087C
+S315080000309DA5000800000000A1A50008A5A50008C8
+S31508000040A9A50008ADA50008B1A50008B5A5000832
+S31508000050B9A50008BDA50008C1A50008C5A50008E2
+S31508000060C9A500080000000000000000000000000C
+S31508000070CDA5000800000000D1A50008D5A50008F8
+S31508000080D9A50008DDA50008E1A50008E5A5000832
+S31508000090E9A50008EDA50008F1A50008F5A50008E2
+S315080000A0F9A50008FDA5000801A6000805A6000890
+S315080000B009A600080DA6000811A6000815A600083E
+S315080000C019A600081DA6000821A6000825A60008EE
+S315080000D029A600082DA6000831A6000835A600089E
+S315080000E039A600083DA6000841A6000845A600084E
+S315080000F049A600084DA6000851A6000855A60008FE
+S3150800010059A600085DA6000861A6000865A60008AD
+S3150800011069A600086DA6000871A6000875A600085D
+S3150800012079A600087DA6000881A6000885A600080D
+S3150800013089A600088DA6000891A6000895A60008BD
+S3150800014099A600089DA60008A1A60008A5A600086D
+S31508000150A9A60008ADA60008B1A60008B5A600081D
S315080001600000000000000000000000000000000081
-S31508000170FD510008015200080552000809520008FE
-S315080001800D520008115200081552000819520008AD
-S315080001901D5200082152000825520008295200085D
-S315080001A02D5200083152000835520008395200080D
-S315080001B03D520008415200084552000849520008BD
-S315080001C04D5200085152000855520008595200086D
-S315080001D05D520008615200086552000800000000E0
-S315080001E0695200086D5200087152000875520008DD
-S315080001F079520008000000007D5200080000000047
-S31508000200C2788A18DFF83833DA7083780A0092B22F
-S31508000210120AD218DFF828339A704278DFF82033AA
-S315080002205A700078DFF818231070DFF81403827804
-S31508000230080080B2000A80B2824212DADFF80003B0
-S315080002404078401CDFF8F8225070DFF8F402407856
-S31508000250002806D1DFF8E8020078401CDFF8E02223
-S315080002601070DFF8DC02C07889B201F0FF0188421D
-S315080002701EDADFF8CC028078401CDFF8C4128870DA
-S31508000280DFF8BC028078002812D1DFF8B402407883
-S31508000290401CDFF8AC124870DFF8A402407800284A
-S315080002A006D1DFF89C020078401CDFF8941208702B
-S315080002B0704710B492B20A44531E0BE00A78120231
-S315080002C04C78121910180400A4B292B2944200D2C3
-S315080002D0401C891C9942F1D3994208D109780A022F
-S315080002E01018010089B292B2914200D2401C80B225
-S315080002F010BC704780B51422DFF848120020FFF7BB
-S31508000300D8FF80B2002802D14FF6FF7002E080B213
-S3150800031001F036FA80B202BD10B5DFF82C12097C5E
-S315080003200902DFF82422527C8918B1F1140454FA20
-S3150800033080F00822DFF8141280B2FFF7BAFF220015
-S3150800034092B2DFF80C1280B2FFF7B3FF80B2002832
-S3150800035002D14FF6FF7002E080B201F011FA80B2C6
-S3150800036010BD80B50620FFF7D7FF02BD0020DFF8D5
-S31508000370E41108700EE00020DFF8DC11DFF8D42164
-S31508000380127821F81200DFF8CC010078401CDFF85B
-S31508000390C4110870DFF8BC0100780028EBD00020F3
-S315080003A06C4908700CE000206C496A4A1278682388
-S315080003B05A431144487667480078401C65490870D6
-S315080003C0644800780028EED04FF4806064490880BD
-S315080003D00020604908700CE0002062495D4A1278E6
-S315080003E040235A43114488805A480078401C59498A
-S315080003F00870584800780028EED0704770B5040099
-S315080004000D000CE0574853490978402251430844E7
-S3150800041086885348008801F0B3F9864211D15048BE
-S315080004200088401C4E4908804D480088B0F5FA4FB0
-S3150800043003DB4FF480504A4908800020454908707C
-S3150800044004E044480078401C424908704148007856
-S315080004500028D7D0002600203E49087004E03D4811
-S315080004600078401C3B4908703A48007800280FD1AC
-S315080004703C48384909784022514308448088002876
-S31508000480EDD13848334909784022514300EB01063B
-S31508000490002E01D1002018E031480088304909882B
-S315080004A089B2090A51EA0020B080F580002C05D1EE
-S315080004B004210022300001F097F903E020883080FB
-S315080004C06088708040203072300070BD0021214A5B
-S315080004D0117004E01F490978491C1E4A11701D490C
-S315080004E0097800290CD11C491A4A127831F81210D9
-S315080004F00029EFD11849174A127821F81200FFE7A8
-S31508000500704780B5010089B2174800680830FFF7C0
-S3150800051077FE0B480078144909680872084840783D
-S31508000520114909684872064880780F49096888722F
-S315080005300348C0780C490968C87201BD000000006C
-S315080005408C91FE1FB280FE1FA480FE1FBE80FE1F78
-S31508000550C680FE1FA891FE1F9A91FE1FF08EFE1FF1
-S315080005609E91FE1F8890FE1F8091FE1F10B5DFF832
-S31508000570141E0C68C0B2042806D1DFF83C0E0088A9
-S31508000580002840F061821DE0DFF8301EDFF8302ECB
-S315080005901160DFF82C1E0968DFF8282E1160C0B23A
-S315080005A0032818D1607E10F00F0003280AD1208A8C
-S315080005B0002807D10820DFF8281E087001F0E1F9A5
-S315080005C000F0A9BF0020DFF81C1E08800020DFF815
-S315080005D0101E087010BDC0B2022840F0D180DFF8A6
-S315080005E0080EC078401CDFF8001EC870DFF8F80D4A
-S315080005F0C07800281ED1DFF8F00D8078401CDFF89F
-S31508000600E81D8870DFF8E00D8078002812D1DFF841
-S31508000610D80D4078401CDFF8D01D4870DFF8C80DAB
-S315080006204078002806D1DFF8C00D0078401CDFF8B6
-S31508000630B81D08700020DFF8AC1D08800020DFF820
-S31508000640781D0880607E072802D0607E052808D1BC
-S31508000650A07E401CA076A07E782801D10020607676
-S31508000660B0E7607E0028FBD0208A00287AD0A07EDA
-S31508000670411EA176C0B20028F2D1E07E082808D033
-S31508000680607E022802D0607E012810D1E07E05280F
-S315080006900DD1002060768020DFF8441D087001F037
-S315080006A070F91420DFF8B01D81F82F00B0E2E07E63
-S315080006B0052801DB042000E0E07E032111FA00F0A2
-S315080006C0A076E07E401CE076607E10F00F00C0B297
-S315080006D001280AD0022835D0032839D004283FD06B
-S315080006E006283DD008283BD0BAE71020DFF8681D59
-S315080006F081F82F00DFF8600D90F82F0050F0020007
-S31508000700DFF8541D81F82F000220DFF84C1D81F810
-S3150800071036000420DFF8401D81F837000620DFF890
-S31508000720381D81F838000A20DFF82C1D81F83900B9
-S315080007302C20DFF8B01C08806020DFF81C1D81F82B
-S315080007402E006EE20020DFF8101D81F82F00D1E799
-S315080007500420DFF88C1C087001F013F900F01FBFA5
-S3150800076000F074BE607E10F00F0003287FF478AFA7
-S315080007700820DFF86C1C087001F003F900F0CBBE06
-S31508000780C0B2052826D1DFF8040E00688088002844
-S315080007901FD00020DFF8EC1B0860DFF8F40DDFF847
-S315080007A0201C0860DFF8180C0068DFF8181C0860C1
-S315080007B00020DFF8041C0880DFF8FC0B0088DFF84F
-S315080007C0241C08800820DFF8181C087001F05DFC5E
-S315080007D0D3E6F7E6DFF8800C807B45287FF4F2AE97
-S315080007E0DFF8000C0088DFF8701C097C0902DFF8C6
-S315080007F0682C527C8918884216DBDFF85C0C007C72
-S315080008000002DFF8541C497C4018DFF8D81B088022
-S31508000810DFF8440C007D3F21084204D1DFF8380C8C
-S31508000820407D002801D0CDE6CCE6DFF8B80D00887B
-S31508000830DFF8B41D0988884207D1DFF8A80D40887B
-S31508000840DFF8A41D4988884210D0DFF80C0CC08B4D
-S31508000850DFF8901D0988884207D1DFF8FC0B008C69
-S31508000860DFF8801D4988884200D0ABE6FFF742FDD5
-S315080008704FF6FF7188427FF4A5AEDFF8DC0BC07D2A
-S31508000880062809D1FFF76DFD4FF6FF71884240F043
-S315080008903D81DFF8584D3BE1DFF8BC0BC07D1128E0
-S315080008A00CD1DFF8400B00881C38DFF8381B0880AD
-S315080008B0DFF8080EDFF8D41C086048E0DFF8980B6C
-S315080008C0C07D01287FF47EAEDFF88C0B90F82200FD
-S315080008D008287FF477AE0020DFF87C1B81F8220019
-S315080008E0DFF8740B808C4FF6F771884207DBDFF868
-S315080008F0680B808C0930DFF8601B888406E0DFF817
-S31508000900580B808C0830DFF8501B8884DFF8480BBA
-S31508000910408BDFF8441BC883DFF83C0B808BDFF87D
-S31508000920381B0884DFF8BC0C0088DFF82C1B4883CA
-S31508000930DFF8B00C4088DFF8201B888300F019BF69
-S31508000940DFF8480C00684030DFF8401C0860DFF824
-S315080009503C0C0068DFF8681D884274D2DFF82C0C5E
-S31508000960006880880028EBD0DFF8EC0A808CDFF876
-S315080009701C1C096889888842E2D1DFF8100C0068D7
-S31508000980C08800280FD0DFF8D00A408CDFF8FC1B9F
-S315080009900968C988884206D0DFF8F00B0068C08865
-S315080009A0B0F58A4FCCD1DFF8E40B00680088DFF891
-S315080009B0381C0988884208D1DFF8D00B00684088BF
-S315080009C0DFF8241C4988884223D0DFF8C00B00686A
-S315080009D00088DFF8A81D0988884208D1DFF8AC0B23
-S315080009E000684088DFF8941D4988884211D0DFF8EE
-S315080009F0680A408BDFF8941B0968098888429FD1EA
-S31508000A00DFF8540A808BDFF8841B09684988884216
-S31508000A1096D10020DFF86C1908600220DFF8C019AB
-S31508000A200870DFF86C0BDFF898190860DFF8900992
-S31508000A300068DFF8901908600020DFF87C19088044
-S31508000A4001F023FB99E5BDE5DFF86C0900881C3049
-S31508000A50DFF890190880DFF88C09008880B2000A50
-S31508000A60DFF8F4190874DFF87C090088DFF8E8195C
-S31508000A704874DFF8180B0068007ADFF8DC19887507
-S31508000A801120DFF8D419C875DFF82C09008808305A
-S31508000A90DFF824190988083189B2090A51EA0020C1
-S31508000AA0DFF8B419C8840020DFF8AC190885DFF828
-S31508000AB0DC0A00688088DFF8A0194884DFF8CC0AC9
-S31508000AC00068C088DFF890198884DFF8180B00885A
-S31508000AD0DFF884194883DFF80C0B4088DFF87819AB
-S31508000AE08883DFF8A80A00680088DFF86C19C883CD
-S31508000AF0DFF8980A00684088DFF85C190884DFF890
-S31508000B00BC08DFF8BC18086000F00FBE5AE5683468
-S31508000B10DFF8D80AA042C0F0DF80607E0028F6D051
-S31508000B20DFF83409808CA1888842F0D1DFF82809DB
-S31508000B30408CE1888842EAD1DFF81C09408B21887D
-S31508000B408842E4D1DFF81009808B61888842DED1BB
-S31508000B50DFF8300804600020DFF884180870DFF832
-S31508000B60F80890F82F00400700F1CD82DFF8E80872
-S31508000B7090F82E00C0B200098000DFF8381C087013
-S31508000B80DFF860080088DFF82C1C0978401A14384A
-S31508000B90DFF850180880607E10F00F00022808D190
-S31508000BA0DFF8B40890F82F0010F03F00122800F084
-S31508000BB0B382DFF830080088002807D1DFF89808E4
-S31508000BC090F82F000321084200F0A682DFF8880873
-S31508000BD090F82600217A884215D1DFF87C0890F82B
-S31508000BE02700617A88420ED1DFF86C0890F8280051
-S31508000BF0A17A884207D1DFF8600890F82900E17ADF
-S31508000C00884200F089821020DFF84C1881F82F00FE
-S31508000C102820DFF8D01708805020DFF83C1881F824
-S31508000C202E00207ADFF8301881F82A00607ADFF87B
-S31508000C30281881F82B00A07ADFF81C1881F82C00F8
-S31508000C40E07ADFF8141881F82D00207BDFF8081801
-S31508000C5081F82600607BDFF8001881F82700A07B62
-S31508000C60DFF8F41781F82800E07BDFF8EC1781F845
-S31508000C7029000620DFF8E017C875A088DFF8D8171E
-S31508000C804884E088DFF8D0178884DFF85809008898
-S31508000C90DFF8C4174883DFF84C094088DFF8B8172F
-S31508000CA088832088DFF8B017C8836088DFF8A8171C
-S31508000CB00884607EC00640F111850020DFF8981789
-S31508000CC081F83100DFF8900790F83100DFF88817CF
-S31508000CD081F8300000F00ABDDFF87C0790F82F0095
-S31508000CE010F03F00022806D0DFF86C0790F82F00B6
-S31508000CF0400729D566E4DFF86007808CDFF8B81A64
-S31508000D0008800020DFF8AC1A087006E0DFF8A40AAD
-S31508000D100078401CDFF89C1A0870DFF8980A0078FB
-S31508000D200028E1D1DFF8900A0088DFF8901ADFF88A
-S31508000D30842A127831F812108842E7D1002400205C
-S31508000D40DFF8701A0870F0E01420DFF80C1781F845
-S31508000D502F002820DFF88C1608805020DFF8F816B8
-S31508000D6081F82E00DFF8F00690F82900DFF8441A1B
-S31508000D700870DFF8E40690F82D00DFF8DC1681F835
-S31508000D802900DFF8300A0078DFF8CC1681F82D0044
-S31508000D90DFF8C40690F82800DFF8181A0870DFF89C
-S31508000DA0B80690F82C00DFF8B01681F82800DFF8AE
-S31508000DB0040A0078DFF8A01681F82C00DFF89806F8
-S31508000DC090F82700DFF8EC190870DFF88C0690F821
-S31508000DD02B00DFF8841681F82700DFF8D809007899
-S31508000DE0DFF8741681F82B00DFF86C0690F82600F9
-S31508000DF0DFF8C0190870DFF8600690F82A00DFF8F7
-S31508000E00581681F82600DFF8AC090078DFF848168E
-S31508000E1081F82A00DFF8400690F82D00401CDFF81C
-S31508000E20381681F82D00DFF8300690F82D000028D6
-S31508000E3026D1DFF8240690F82C00401CDFF8181697
-S31508000E4081F82C00DFF8100690F82C00002817D13E
-S31508000E50DFF8040690F82B00401CDFF8FC1581F833
-S31508000E602B00DFF8F40590F82B00002808D1DFF8EE
-S31508000E70E80590F82A00401CDFF8DC1581F82A00FE
-S31508000E80DFF8D405408CDFF830190880DFF8C8058C
-S31508000E90808CDFF8C4154884DFF81C090088DFF861
-S31508000EA0B8158884DFF8B005408BDFF8AC15C88321
-S31508000EB0DFF8A405808BDFF8A0150884DFF824077F
-S31508000EC00088DFF894154883DFF818074088DFF8AC
-S31508000ED08815888300F00ABCDFF81007DFF8D418F5
-S31508000EE00978682251430844407E072816D1002C09
-S31508000EF00BD0A07EDFF8F416DFF8B828127868233E
-S31508000F005A431144897E884208D2DFF8E006DFF8A2
-S31508000F10A41809786822514300EB0104DFF8940805
-S31508000F200078401CDFF88C180870DFF8880800780D
-S31508000F30002813D1DFF8B406DFF878180978682294
-S31508000F4051430844407E0028C6D1DFF8A006DFF8E2
-S31508000F50641809786822514300EB0104002C3FF419
-S31508000F6031ABDFF8200404600320A076A07E20764B
-S31508000F700020A0750420E0750020E076DFF8D8048C
-S31508000F80808CA080DFF8D004408CE080DFF8C804AD
-S31508000F90408B2080DFF8C004808B6080012060765B
-S31508000FA0DFF8440400782073DFF83C044078607367
-S31508000FB0DFF834048078A073DFF82C04C078E07377
-S31508000FC001202082DFF8900490F82900E072DFF80B
-S31508000FD0880490F82800A072DFF87C0490F82700AF
-S31508000FE06072DFF8740490F8260020720120FFF77B
-S31508000FF088FADFF8640490F82E0010F0F000512803
-S31508001000FFF673AB0020DFF8AC17087006E0DFF8D0
-S31508001010A4070078401CDFF89C170870DFF89407CF
-S315080010200078DFF8341491F82E10C9B20909C9B24C
-S31508001030491FB0EB810FBFF658ABDFF81C04DFF889
-S3150800104074170978084490F83600DFF874170870A2
-S31508001050DFF86C07007800283FF447ABDFF8600735
-S3150800106000780128D3D0DFF85807007802282FD156
-S31508001070DFF8E403DFF83C170978084490F83700EE
-S31508001080042825D1DFF8D003DFF8281709780844A3
-S3150800109090F83800DFF8C013DFF8182712781144E3
-S315080010A091F8391051EA0020DFF80C170880DFF8AC
-S315080010B00807008840F20B61884202DB40F20A60AA
-S315080010C002E0DFF8F40600886082A082FFF70DBB15
-S315080010D0DFF88403DFF8DC160978084490F837004F
-S315080010E000283FF402ABDFF8CC060078DFF8681377
-S315080010F0DFF8C0261278114491F837100818DFF87F
-S31508001100B41608708AE7002060762020B449087073
-S3150800111000F037FCFFF756BACF4890F82F00C00604
-S315080011205FD5208A00285CD0218A14F10C00FFF7CD
-S3150800113067F8C94890F82A00DFF8881609788842BF
-S315080011404FD1C54890F82B00DFF8781649788842C1
-S3150800115047D1C14890F82C00DFF86816897888428C
-S315080011603FD1BD4890F82D00DFF85816C978884257
-S3150800117037D1DFF8500600782073DFF84806407844
-S315080011806073DFF840068078A073DFF83806C07809
-S31508001190E073E07E00281DD194F9180094F91A101E
-S315080011A0401AA17DC9B2B0EBD100A17D4118A17545
-S315080011B040B2002801D540B24042E17DC9B2B0EB49
-S315080011C09100E17D4018E075A07DC0B2E17D11EB8C
-S315080011D0D0002076012082490870207EA076002063
-S315080011E02082607E10F00F00C0B2012813D0C0F034
-S315080011F07382032800F0FA802ED3052800F03B827C
-S31508001200C0F00482072800F05D82C0F05D820828DD
-S3150800121000F0F08160E272480078C0071AD5032012
-S31508001220607640206E490870002020826D4800884C
-S31508001230002809D06A48007850F00200684908700A
-S3150800124068480088FFF75DF900205B49088000F0D0
-S3150800125098FB60E1FFF7B6B961480078C00740F12E
-S31508001260B3807D4890F82F0010F03F00122840F018
-S31508001270AB80794890F82E0010F0F000512827DB53
-S315080012800020DFF83015087006E0DFF8280500783A
-S31508001290401CDFF820150870DFF8180500786E493D
-S315080012A091F82E10C9B20909C9B2491FB0EB810FCE
-S315080012B00EDA6948DFF8FC140978084490F8360015
-S315080012C0DFF8FC140870DFF8F8040078002822D14B
-S315080012D003206076604890F8260020725E4890F8F1
-S315080012E0270060725C4890F82800A0725A4890F867
-S315080012F02900E0720120FFF704F9422038490870F6
-S315080013000020208200203749088000202A490880CA
-S3150800131000F037FBFFE0DFF8A80400780128B4D016
-S31508001320DFF89C04007802282ED14B48DFF8841495
-S315080013300978084490F83700042825D14648DFF88C
-S3150800134074140978084490F838004349DFF864248F
-S315080013501278114491F8391051EA0020DFF8581430
-S315080013600880DFF85404008840F20B61884202DBEB
-S3150800137040F20A6002E0DFF8400400886082A0823A
-S31508001380A6E700BF8091FE1F3348DFF828140978C6
-S31508001390084490F8370000289AD0DFF81804007837
-S315080013A02D49DFF810241278114491F837100818DF
-S315080013B0DFF8001408706FE79891FE1FDA80FE1FA9
-S315080013C07891FE1F7C91FE1F20200549087000F0C9
-S315080013D0D8FA0020DFF8F0130968487684E400BFDD
-S315080013E0A791FE1F9691FE1F8891FE1F1A4890F836
-S315080013F02F00C00732D5607EC0062FD4208A002869
-S315080014007FF4E0A8DFF8C4030088401C80B2FFF729
-S3150800141078F8DFF8BC03007850F01000DFF8B01356
-S315080014200870DFF8A8030088002807D0DFF8A003B3
-S31508001430007850F00200DFF89813087000F0A1FA5F
-S3150800144001202082082060760020E07611200249DB
-S3150800145081F82F00FFF7DCBBA480FE1FDFF87403BA
-S3150800146090F82F00800621D5DFF86C030068DFF8B6
-S31508001470641391F83410DFF85C2392F8352052EAA9
-S3150800148001210844DFF850130860DFF8400300889C
-S31508001490DFF8401391F83410DFF8382392F8352036
-S315080014A052EA0121401ADFF824130880DFF81C03EA
-S315080014B0008800280CD0607EC00609D4C44800788D
-S315080014C050F00200C2490870C0480088FFF719F8B2
-S315080014D0C04890F830000002BE4991F83110401813
-S315080014E0B5490880A08AB4490988884203D3B24816
-S315080014F00088002802D1A08AAF490880AE48008833
-S315080015006082B34800780321084271D00020B349AD
-S31508001510088000F036FAAE48007880060AD5002022
-S31508001520AE490880002060761420AA4981F82F0069
-S31508001530FFF76EBBA6480078C0060ED50020A7495F
-S31508001540088001202082042060760020E0761120A1
-S31508001550A04981F82F00FFF75BBBA0480088002848
-S315080015601BD09B480078C00701D500202082208A1E
-S3150800157000280FD1608A99490988884202D2608A70
-S315080015809649088095480088208206E08491FE1FC7
-S31508001590CE80FE1F208A914908800020E076904878
-S315080015A000688D4908608D48008800280CD0208A7C
-S315080015B0002809D0208A28308449088018208549BF
-S315080015C081F82F00FFF728BB8148007880070FD5E0
-S315080015D028207E49088010207E4981F82F00FFF7D1
-S315080015E01BBB00BF6C91FE1FC0500008F08EFE1F8B
-S315080015F0FEF7E8BF76480078C00706D50020607673
-S3150800160010207349087000F0BCF965E06F4800883F
-S31508001610002803D06D480088FEF773FF6D4890F8E0
-S315080016202F00C00716D56A480078C00706D50720D8
-S3150800163060760020A0760020208201E006206076F1
-S315080016400120FEF75EFF10206149087000F099F945
-S31508001650FFF7D9BA5E480078C00705D50520607639
-S3150800166000202082FEF7AEBF5848008800287FF485
-S31508001670CAAAFEF7A7BF55480088002803D05348D2
-S315080016800088FEF73EFF534890F82F00C0070DD597
-S31508001690072060760020A0760120FEF732FF102092
-S315080016A04B49087000F06DF9FFF7ADBA4748008856
-S315080016B000287FF4A8AAFEF785BF00BF8890FE1F02
-S315080016C0C890FE1FFFF79FBA41480078C00703D5A8
-S315080016D0072060760020A076FEF774BF06203D49F5
-S315080016E081F830000A203B4981F831004020394909
-S315080016F088753648008880B2000A36490874334827
-S315080017000088344948740020324981F83500314848
-S3150800171090F835002F4981F8340000202D49488675
-S31508001720FEF71FFEC0432B49488645202949887382
-S3150800173000202849C8730020264948752548407D59
-S315080017402449087527480088401C264908802548EA
-S31508001750008880B2000A1F498874224800881D49FB
-S31508001760C87400201B490883FEF7C4FDC043194905
-S315080017700883002016490870FEF72CBFBC500008E5
-S31508001780010089B2090A51EA002080B2704710B5F3
-S3150800179001290DDB114A118011490968884207D0D1
-S315080017A00E490A880E490C680100200000F0B8FCB2
-S315080017B010BD0000A891FE1FA091FE1F9A91FE1F62
-S315080017C0A991FE1F8C91FE1F8091FE1F9691FE1F08
-S315080017D0A791FE1FA480FE1F7891FE1F9891FE1FF9
-S315080017E07C91FE1F9C91FE1F62F30F2262F31F423B
-S315080017F0401810F0030308D0C91A1FD3DB0748BFE7
-S3150800180000F8012D28BF20F8022D130030B4144625
-S315080018101546103928BF20E93C00FAD8490728BFE1
-S3150800182020E90C0048BF40F8042D890028BF20F89D
-S31508001830022D48BF00F8012D30BC7047C91818BFE3
-S3150800184000F8012DCB0728BF00F8012D70470000CE
-S3150800185080B5AA480078002856D100F0F5FC00F0BB
-S3150800186069FE10F5FA70A649086000F063FE00F5F7
-S315080018701C501030A3490860FEF778FD0020ADF82B
-S3150800188000000020ADF80200BDF800009E4908805F
-S31508001890BDF802009C4948800020ADF800000020F1
-S315080018A0ADF80200BDF8000098490880BDF80200AE
-S315080018B0964948800020ADF800000020ADF80200E7
-S315080018C0BDF8000092490880BDF80200904948809A
-S315080018D04EF60300FEF7FAFD00F030FD8D4800F0E5
-S315080018E083FD06218B4800F0ACFB00F0D2FB00F02C
-S315080018F057FE42F21071884203D242F2107000F08D
-S315080019004CFE01208449087001BD80B500207B4942
-S31508001910087081480078002801D1FFF799FF01BDBA
-S3150800192038B57D4A1278012A21D17C4A126812F10B
-S315080019301C0422686260002206E092B2835C92B2BE
-S3150800194004EB02052B72521C13000D00EDB29BB27C
-S31508001950ADB2AB42F1D3C9B2081DA4F84800B4F839
-S315080019604810201DFFF713FF2068401C206031BD7A
-S3150800197080B569480078012801D100F03BF80020BD
-S3150800198002BD10B56548006810F11C04644800786B
-S31508001990400605D5012020600020A4F8480028E06C
-S315080019A05F480078C00702D50020A4F848005C48C4
-S315080019B00078400708D5B4F84800002804D0B4F8E1
-S315080019C04810201DFFF7E3FE55480078800710D51C
-S315080019D054480088001F41280BDA0020A4F8480064
-S315080019E0514800684F490988091FC9B2001D00F00F
-S315080019F015FE10BD10B500F004FD00282DD049498C
-S31508001A0008804FF40060FFF7BBFE4849898980B219
-S31508001A1081420ED10120FEF7A9FD42480088002820
-S31508001A201BD001F059F900F000FD00203D4908805F
-S31508001A3013E040F60600FFF7A3FE3C49898980B209
-S31508001A4081420AD101F0DEF836480088002804D021
-S31508001A5000F0EBFC00203349088000F06BFD2849B4
-S31508001A600968884239D32648006810F5FA7024496F
-S31508001A700860002415E02E48682101FB04F108449B
-S31508001A80264908600220FEF771FD264800880028CE
-S31508001A9006D001F021F900F0C8FC00202149088091
-S31508001AA0641C002CE7D0002415E02248402101FBE5
-S31508001AB004F10844204908600520FEF757FD194837
-S31508001AC00088002806D001F007F900F0AEFC0020D7
-S31508001AD014490880641C002CE7D000F02BFD094946
-S31508001AE00968884208D30748006800F51C5010307A
-S31508001AF00449086000F0AEFF10BD0000A180FE1F7B
-S31508001B005C91FE1F6091FE1F6C91FE1F7491FE1F73
-S31508001B107091FE1F4091FE1FA491FE1F8091FE1F2B
-S31508001B20A791FE1F9691FE1F7891FE1FA480FE1FA7
-S31508001B30F08EFE1F8890FE1F8491FE1F35220270CC
-S31508001B40401C01220270401C0170401C704710B5F1
-S31508001B50040036202070641C04202070641C0422B3
-S31508001B60DFF87815200000F0DBFA201D10BD10B54F
-S31508001B70040032202070641C04202070641C042297
-S31508001B80DFF85C15200000F0CBFA201D10BD3721C8
-S31508001B900170401C03210170401C01210170401C8A
-S31508001BA003210170401C06210170401C7047FF216B
-S31508001BB00170401C704738B50400012020700120D0
-S31508001BC06070DFF820058069A0700020E0700422AC
-S31508001BD0DFF81415251D280000F0A2FA0020208140
-S31508001BE0802060810422DFF8041514F10C05280012
-S31508001BF000F096FA0421002214F110052800FFF7D8
-S31508001C00F3FD0421002214F114052800FFF7ECFD6A
-S31508001C100421002214F118052800FFF7E5FDDFF876
-S31508001C20C4048269DFF8BC04416914F11C05280064
-S31508001C3000F076FADFF8AC048069D0F110010022D2
-S31508001C40DFF8A0048069204410F11C052800FFF77E
-S31508001C50CBFD4021002214F12C052800FFF7C4FD16
-S31508001C608021002214F16C052800FFF7BDFD04222F
-S31508001C70DFF87C14EC34200000F052FA31BD10B5C0
-S31508001C80DFF8700404682000FFF795FF012114F1BE
-S31508001C90F000FFF753FFFFF77AFFFFF788FFDFF83B
-S31508001CA054140968411ADFF84C040068FFF76FFD01
-S31508001CB010BD10B5DFF83C0404682000FFF77BFF71
-S31508001CC0032114F1F000FFF739FFFFF740FFFFF794
-S31508001CD04EFFFFF76CFFDFF81C140968411ADFF89E
-S31508001CE014040068FFF753FD10BDF8B5060006EBAF
-S31508001CF00104002509E00422B11CDFF8FC73380052
-S31508001D0000F00EFA70783044861CA64234D2307839
-S31508001D100128F0D003280AD0062810D0332820D06E
-S31508001D20352814D0362814D0FF2822D0EAE7042212
-S31508001D30B11CDFF8C873380000F0F2F9E2E70422B4
-S31508001D40B11CDFF8BC73380000F0EAF9DAE7B578B9
-S31508001D50D8E70422B11CDFF88473380000F0E0F9F4
-S31508001D60D0E70422B11CDFF89C73380000F0D8F9DC
-S31508001D70C8E72800C0B201E02800C0B2F2BD38B5F5
-S31508001D80DFF8700304682078022823D10422DFF8DC
-S31508001D905813201D01F082F800281BD1DFF84403F0
-S31508001DA08269DFF84003416914F11C0001F076F8F6
-S31508001DB000280FD1042214F11001DFF8245328005B
-S31508001DC000F0AEF9DFF84003018814F1F000FFF7E0
-S31508001DD08CFF00E0002032BD10B50120DFF80413A7
-S31508001DE00988002916D040F20F12891A25D0491EF3
-S31508001DF02CD0153960D0491E67D02F3900F0BB802A
-S31508001E00491E00F0C180143900F0DC80491E00F03C
-S31508001E10E28010E10120B34988704FF47A70B14925
-S31508001E200861FFF72CFFAF480169B84801F067F869
-S31508001E30002040F20F11AB4A1180C0B2002801D130
-S31508001E400320FDE04FF48870A6490880B048007862
-S31508001E50800706D4AD4801F059F8002801D10020C2
-S31508001E60EEE0AB480078800707D5FFF788FF022821
-S31508001E7003D102209B4988700EE09A4800694EF605
-S31508001E806021884204DA974800694000954908614C
-S31508001E90944880780228C4D14FF47A709149086131
-S31508001EA0FFF707FF8F480169984801F028F80020D6
-S31508001EB040F225118B4A1180C0B2002801D10320B7
-S31508001EC0BEE04FF4937087490880914800788007F0
-S31508001ED006D48E4801F01AF8002801D10020AFE098
-S31508001EE08B480078800722D5FFF749FF05281ED1C1
-S31508001EF003207C4988707B4800F0DCF87948008C20
-S31508001F00FFF73EFC04047748408CFFF739FC04438E
-S31508001F1064084FF47A7000FB04F0B0F1004F1CD24D
-S31508001F204FF47A7000FB04F06E49086119E06D48B9
-S31508001F30006942F2117188420ADA6A48006910F5A6
-S31508001F407A7068490861674880780328A8D1D2E77B
-S31508001F50002064490880002072E07FF00040614953
-S31508001F60086160480169694800F0C9FF002040F22D
-S31508001F7055115C4A1180C0B2002801D103205FE0E8
-S31508001F804FF4AB7057490880604800F0BFFF00283F
-S31508001F9001D1002054E00220524988704FF47A702B
-S31508001FA05049086100F075F800F0B8F8FFF781FEAF
-S31508001FB04C480169554800F0A2FF00204FF4B5715E
-S31508001FC0484A1180C0B2002801D1032038E040F207
-S31508001FD06B10444908804E480078800706D44B4861
-S31508001FE000F094FF002801D1002029E04848007835
-S31508001FF080070AD5FFF7C3FE052806D1032039490D
-S315080020008870384800F056F878E73648006942F292
-S31508002010117188420ADA3348006910F57A70314935
-S315080020200861304880780328C0D1EAE700202D49A6
-S315080020300880002004E0002000202A4908800220A9
-S3150800204010BD80B5274A5061264881610020254980
-S3150800205088704FF6FF70ADF800004FF6FF70ADF8C8
-S3150800206002004FF486416846FEF7C8F91D494860E4
-S315080020701C484068002804D04FF48840194949682C
-S31508002080888000201749088001BD80B5FFF7A4FEA7
-S3150800209001BD81B00020ADF800000020ADF80200B7
-S315080020A0BDF8000011490880BDF802000F494880B4
-S315080020B001B07047818C0D4A1180C18C0B4A518042
-S315080020C0018D144A1180418D124A5180018E124A9F
-S315080020D01180408E1049488070470000E490FE1F2A
-S315080020E0EC90FE1FC890FE1FB45000086C91FE1FAE
-S315080020F0B85000087891FE1FF090FE1FF890FE1F5A
-S31508002100F490FE1FE890FE1F9691FE1FD090FE1FCA
-S31508002110A791FE1F7491FE1F7091FE1F7047000065
-S3150800212062B38B0708D0521E11F8013B00F8013B39
-S3150800213000F024808B07F6D1830740F0208000BF8B
-S31508002140103A07D330B4B1E83810103AA0E838107E
-S31508002150F9D230BC530724BFB1E80810A0E808102C
-S3150800216044BF51F8043B40F8043BD20724BF31F87A
-S31508002170022B20F8022B44BF0B7803707047083AED
-S3150800218007D3B1E80810083A40F8043B40F804CBF6
-S31508002190F7D25307E4E70000CF48016070470168AB
-S315080021A0096831F4801100680160704703681B688C
-S315080021B033F4904309B2194312B21143006801601F
-S315080021C07047416990F8260040010858C00FC0B210
-S315080021D07047016841F21802895851F002010268F5
-S315080021E041F21803D1500168096851F004010068EA
-S315080021F001607047016841F21802895851F400518C
-S31508002200026841F21803D1500168096851F00801C3
-S315080022100068016070470221026841F21403D15038
-S315080022200021006841F2040281507047416990F824
-S3150800223026004001084480687047426990F82600E5
-S315080022404001104441607047E0B55FF4803001906A
-S3150800225000208DF800006A460921A04800F064FEB7
-S3150800226000208DF800006A4604219D4800F05CFEB7
-S3150800227000208DF800006A460221994800F054FEB5
-S3150800228000208DF800006A460321954800F04CFEB0
-S3150800229000208DF8080088208DF800006A46052180
-S315080022A08F4800F041FE00208DF8080088208DF840
-S315080022B000006A4608218A4800F036FE00208DF89C
-S315080022C0080088208DF800006A460921844800F035
-S315080022D02BFE00208DF800006A4608217F4800F092
-S315080022E023FE00208DF8080088208DF800006A4635
-S315080022F007217B4800F018FE00208DF800006A468A
-S315080023000021774800F010FE01220021744800F0F1
-S3150800231093FE5FF080618908890031F00C01022084
-S3150800232060F30921022060F38B2131F4404101203A
-S3150800233060F397516B48FFF72FFF07BD1CB5694837
-S3150800234000F0AFFE6748FFF72AFF00F0F3F800F544
-S315080023509854883401E001F03BF80021614801F007
-S31508002360B0F8002803D100F0E5F8A042F3D35E4A9E
-S3150800237000215C4801F059F84FF400624FF480419F
-S315080023805848FFF713FF5748FFF734FF5548FFF73C
-S3150800239020FF08208DF8000000208DF80100272076
-S315080023A08DF8020069208DF803005B208DF8040083
-S315080023B045208DF805009DF800004C4908709DF8E9
-S315080023C001004A4948709DF80200484988709DF8FE
-S315080023D003004649C8709DF80400444908719DF8F1
-S315080023E005004249487113BD08210170002141705A
-S315080023F0272181706921C1705B21017145214171D5
-S31508002400704738B50024374800F02AFF0500002D2C
-S3150800241009D040F2F550854205D22A0034493148A0
-S3150800242000F0E9FE2C00200032BD80B53148008856
-S3150800243000284FD02F48008840F2F551884249D2EB
-S315080024402848FFF7BEFE002803D02648FFF7E3FE1C
-S3150800245040E02448FFF7EAFE002103E0244A525CE4
-S315080024604254491C234A12889142F7D321480188CD
-S315080024701C48FFF7E2FE1B4890F82600194981F828
-S31508002480280018484069174991F826104901154A45
-S315080024905269144B93F826305B01D25852F0004229
-S315080024A04250104890F82600401C0E4981F8260034
-S315080024B00C4890F826000B4991F82510884203D15C
-S315080024C00020084981F826000020064908620548C8
-S315080024D0FFF7A1FE01BD000040400050008F0248F2
-S315080024E0008202484080FE1F9C5000084891FE1F4B
-S315080024F0A480FE1F9691FE1F80B500F00DF81048C7
-S315080025001049086000201049086005200F49086036
-S3150800251000200F49086001BD00200C49086070477B
-S315080025200A480068C00304D509480068401C0849E1
-S315080025300860704780B5FFF7F3FF0548006802BDDD
-S315080025407F32020014E000E018E000E010E000E04E
-S315080025506491FE1F80B501201849087000F023F821
-S3150800256000F001F801BD80B501F03EF8012813D04E
-S315080025701248007801280FD1FFF7DCFF10490968D7
-S31508002580104A1268511811F5FA71884204D30020CE
-S315080025900A49087001F03EF801BD0949086070470C
-S315080025A007480068704780B504480078012803D1B9
-S315080025B0FFF7C0FF0349086001BD0000A291FE1F96
-S315080025C05491FE1F5091FE1F0020DFF86814087012
-S315080025D00020DFF8601488640020DFF8581481F8BA
-S315080025E043000020DFF84C14A1F844000020DFF86F
-S315080025F0441488700020DFF83C1448707047DFF8F0
-S3150800260034040078002801D1002000E0012070473A
-S315080026100020DFF8201481F84300704780B5017860
-S31508002620FF291ED100F095F8DFF8080490F843005A
-S31508002630012802D1102000F082F8DFF8F803B0F97B
-S31508002640440001280CDB0120DFF8E81381F8430079
-S31508002650DFF8E003B0F94410DFF8DC0300F053F8C4
-S3150800266001BDDFF8D013097801294BD10178C929B2
-S3150800267032D0CC293FD0CF293AD0D0292FD0D12952
-S3150800268033D0D2292ED0F32917D0F4290FD0F52923
-S315080026900AD0F6290ED0FA2912D0FC2913D0FD2922
-S315080026A014D0FE2915D029E000F0D5F8BCE700F0D3
-S315080026B0F5F8B9E700F0C4F8B6E700F015F9B3E79E
-S315080026C000F0A6F8B0E700F09EF8ADE700F083F852
-S315080026D0AAE700F072F8A7E700F039F9A4E700F0D6
-S315080026E058F9A1E700F017F99EE700F084F99BE78F
-S315080026F000F095F998E700F0A7F995E7202000F093
-S315080027001EF891E7ACE780B589B200F022FF01BD5B
-S31508002710F8B504000D001600002704E02078C71954
-S31508002720641C00F055FE2800451E0028F6D1FFB2AD
-S3150800273037600120F2BD0020BE4948707047FE216F
-S31508002740BC4AD170BB4908710220BA49A1F84400B5
-S31508002750704780B5FFF7EFFF0120B6490870FF20E4
-S31508002760B449C8700020B3490871B248007950F0DE
-S315080027701000B04908710020AE494871AD4840794B
-S31508002780AC49487100F006FFAA49887100F017FFA6
-S31508002790A849C87100F013FF80B2000AA54908725B
-S315080027A00120A44948720120A24988720820A1493B
-S315080027B0A1F8440000F067FF01BD80B500209D49DF
-S315080027C00870FFF7B8FFFF209A49C8700120994999
-S315080027D0A1F8440001BDFF209649C870002095491C
-S315080027E00871944840789349487100209149887146
-S315080027F000209049C87100208E49087206208D492C
-S31508002800A1F84400704780B50020FFF798FF01BD86
-S31508002810FF208849C8708948864988640020854908
-S315080028200871002083494871002082498871072071
-S315080028308049C1F8070008207E49A1F8440070477E
-S31508002840FF217C4AD17040687A4988640120794919
-S31508002850A1F84400704710B5040000F09BFE80B252
-S31508002860401E6178884203DA2220FFF768FF14E0E9
-S315080028706278734892B26F49896C00F0F3FEFF20C4
-S315080028806C49C8706B48806C6178401869498864DF
-S315080028906078401C6749A1F8440010BD10B50400D3
-S315080028A000F078FE80B2401E6178884203DA222062
-S315080028B0FFF745FF17E060685E49886462786048FC
-S315080028C092B25C49896C00F0CDFEFF205949C87068
-S315080028D05848806C61784018564988646078401C6E
-S315080028E05449A1F8440010BD80B5FF21514AD17062
-S315080028F0544A41684F48806CFFF70AFF4D490871F2
-S3150800290000204C49487100204A49887108204949E5
-S31508002910A1F8440001BD80B5FF204649C8700020D3
-S315080029204449087100204349487100F033FE414983
-S31508002930887100203F49C87100203E49087200206E
-S315080029403C49487207203B49A1F8440001BD10B52F
-S31508002950040000F01FFE621C80B2411E3548806CE0
-S3150800296000F095FE002803D13120FFF7E8FE0FE0BE
-S31508002970FF203049C87000F00DFE2E49896C80B2E0
-S31508002980401E40182B49886401202A49A1F84400B2
-S3150800299010BD10B5040000F0FDFD80B2801E617800
-S315080029A0884203DA2220FFF7CAFE23E0FF202149E6
-S315080029B0C87001201F49A1F844006078002807D193
-S315080029C000F075FE002802D13120FFF7B8FE11E0AD
-S315080029D0A21C61781748806C00F059FE002803D1C4
-S315080029E03120FFF7ACFE05E01248806C617840188C
-S315080029F01049886410BD80B541680E48806C00F0A7
-S31508002A004AFE002803D13120FFF799FE06E0FF2091
-S31508002A100849C87001200749A1F8440001BD80B5DE
-S31508002A2000F0F8FDFF200349C87001200149A1F80C
-S31508002A30440001BDB88FFE1FBB8FFE1FAC500008B7
-S31508002A40BC8FFE1FBF8FFE1F80B53120FFF777FEB4
-S31508002A5001BD000010B5DFF8FC030078401CDFF864
-S31508002A60F41308700020DFF8E413087020E0DFF89C
-S31508002A70E003DFF8D81309780C22514300EB010470
-S31508002A8020886188084300280BD0DFF8C80300783F
-S31508002A90A17A401A782804DB042100222000FEF7D8
-S31508002AA0A3FEDFF8A8030078401CDFF8A01308701F
-S31508002AB0DFF8980300780828D9DB10BD70B50C003C
-S31508002AC0DFF88C530021DFF88423117006E0DFF865
-S31508002AD07C130978491CDFF874231170DFF86C132E
-S31508002AE00978082921DADFF86813DFF860231278F5
-S31508002AF00C235A4301EB020529880029E7D0698887
-S31508002B000029E4D001882A889142E0D141886A8860
-S31508002B109142DCD106222E1D21003000FFF700FB72
-S31508002B20DFF830030078A8726BE00021DFF81C2379
-S31508002B30117006E0DFF814130978491CDFF80C2336
-S31508002B401170DFF80813097808290EDADFF8001380
-S31508002B50DFF8F82212780C235A4301EB020529887C
-S31508002B600029E7D169880029E4D1DFF8E01209785D
-S31508002B70082938D10021DFF8E02211700021DFF89A
-S31508002B80DC2211700021B14A11701DE0B049AF4A2C
-S31508002B9012780C235A4301EB0205AF490978AD4A6E
-S31508002BA01278AB7AD21A914209DAAA490978AA7A2E
-S31508002BB0891AA94A1170A5490978A84A1170A34922
-S31508002BC00978491CA14A1170A04909780829DDDB52
-S31508002BD0A24909789D4A11709D499C4A12780C238E
-S31508002BE05A4301EB0205042201002800FFF798FA70
-S31508002BF006222E1D21003000FFF792FA954800782C
-S31508002C00A87270BD10B5964800882A2803D20020FD
-S31508002C10934908805FE00020914908809148808A9E
-S31508002C20B0F5807F03D0B0F5007F44D053E08D48DF
-S31508002C30C08C8D49098888423CD18A48008D8A49CA
-S31508002C404988884236D189498948FFF737FF4FF4C2
-S31508002C5000708449888206228449864C2000FFF742
-S31508002C605FFA06228449814C2000FFF759FA0622AA
-S31508002C708149824C2000FFF753FA06227D49794C98
-S31508002C802000FFF74DFA7748808B7649C884754847
-S31508002C90C08B7449088574480088724988837248CD
-S31508002CA040887049C8834FF4C1606E4988812A20DC
-S31508002CB06B4908800FE06B48C08C6B4909888842CD
-S31508002CC009D16848008D68494988884203D167490F
-S31508002CD06748FFF7F3FE10BD10B55D486149C98B1B
-S31508002CE0674A128891420CD15E49098C644A528817
-S31508002CF0914206D1062263495A4C2000FFF710FA82
-S31508002D0093E05849C98B604A12881140564A12887E
-S31508002D105D4B1B881A4091420BD15249098C5A4A7D
-S31508002D2052881140504A5288574B5B881A40914244
-S31508002D3008D056490988564A118054494988544A40
-S31508002D40518007E04749C98B514A11804549098C8A
-S31508002D504F4A518000213D4A117004E03B490978E9
-S31508002D60491C3A4A11703949097808290FDA38484E
-S31508002D70364909780C22514308444549098802888E
-S31508002D809142EBD14249498842889142E6D12F497E
-S31508002D900978082943D10621FF22324C2000FEF784
-S31508002DA023FD06210022334C2000FEF71DFD0622D6
-S31508002DB03149324C2000FFF7B3F906222E492B4C35
-S31508002DC02000FFF7ADF9324800882649C884304804
-S31508002DD0408824490885244800882249888322484F
-S31508002DE040882049C8834FF480701E4988824FF472
-S31508002DF080701C49C88108201A490882062019498A
-S31508002E00887404201749C8744FF4C160154988812D
-S31508002E102048214908602A201149088013E0062223
-S31508002E20011D104C2000FFF77BF906221249134CAE
-S31508002E302000FFF775F908200A49888108480088A4
-S31508002E400E300749088010BD00000000AA91FE1F39
-S31508002E50588FFE1FAC91FE1FAD91FE1FAB91FE1F52
-S31508002E609691FE1FA480FE1F6C91FE1FBA80FE1F5E
-S31508002E70C080FE1FC480FE1F4891FE1FAA80FE1F49
-S31508002E80C4500008A45000087491FE1F7091FE1FDC
-S31508002E909091FE1FDA80FE1F7891FE1F0300002026
-S31508002EA013F0030F09D0521E22BF13F8010B11F8B5
-S31508002EB001CBB0EB0C00F3D07047121F22BF53F8BA
-S31508002EC0040B51F804CB6045F7D0121D0AD200BA9C
-S31508002ED09CFA8CFCB0EB0C0038BF6FF0000088BF82
-S31508002EE001207047521E22BF13F8010B11F801CBBF
-S31508002EF0B0EB0C00F6D0521C08BF1046704710B550
-S31508002F000400616000F0DDFB206010BD10B5040010
-S31508002F1000F0D7FB2168401A6168884201DB01206E
-S31508002F2000E00020C0B210BD70B4C9B28B1000EB2F
-S31508002F308303C9B28C1000EB84042469F82511F0C8
-S31508002F400306F6B2F600B540AC431C61436F032492
-S31508002F504D00AC40A3434367224B984202D0224B14
-S31508002F60984205D1036E01248C40A343036624E0EE
-S31508002F7053688B404360C9B2CB1000EB8303C9B2D8
-S31508002F80CC1000EB8404246C072511F00706F6B272
-S31508002F90B600B540AC431C64C9B2CB1000EB830342
-S31508002FA0C9B2CC1000EB8404246C157A11F007061C
-S31508002FB0F6B2B600B5402C431C64C9B28B1000EBC0
-S31508002FC08303C9B28C1000EB84000069127811F0F3
-S31508002FD00301C9B2C90012FA01F10843186170BCAD
-S31508002FE070470000008E0248008F024870B4C9B2CC
-S31508002FF08B0800EB8303C9B28C0800EB84042469B0
-S31508003000F82511F00306F6B2F600B540AC431C618C
-S31508003010C9B28B0800EB8303C9B28C0800EB8400A5
-S315080030200069D2B211F00301C9B2C90012FA01F15E
-S315080030300843186170BC704730B4436F03244D00D1
-S31508003040AC40A3434367436FD2B2490012FA01F179
-S315080030501943416730BC704701684FF4805289585C
-S3150800306051F0010102684FF48053D15001684FF4C2
-S3150800307080528958C907F9D4704701680B640068FB
-S3150800308042647047DFF810030068DFF81013096818
-S3150800309011F001018840704780B5FFF7F3FF40083B
-S315080030A002BD38B50400200000F026F92000FFF71D
-S315080030B0D3FF200000F0EBF80500D4E90223200036
-S315080030C0FFF7DBFF4FF480602168086080202168E5
-S315080030D08861DFF8CC02216841F218028850DFF8CF
-S315080030E0C40221684FF480528850200000F021F86D
-S315080030F0200000F052F85FF0FF30216841F2140218
-S3150800310088507FF07C402168C1F810017FF07C4030
-S315080031102168C1F80C017FF0C0202168C1F80002BF
-S315080031204FF402702168C863002020622800C0B2EC
-S3150800313032BD10B4002122E05FF0004203694C0161
-S315080031401A5102694B011A4444F2F4535360026956
-S315080031504B011A44836940F2F45404FB01F42344F6
-S3150800316093604A1C90F824309A4200D100220369E1
-S315080031704C012344046952012244DA60491C90F840
-S3150800318024209142D8D30169026841F20C03D15038
-S31508003190002180F8271010BC704710B400211CE0ED
-S315080031A0DFF8042243694C011A5142694B011A445B
-S315080031B0C36940F2F45404FB01F4234493604A1CA7
-S315080031C090F825309A4200D1002243694C012344E5
-S315080031D0446952012244DA60491C90F8252091423C
-S315080031E0DED34169026841F21003D150002180F80C
-S315080031F0261010BC704770B504000E001500206933
-S3150800320094F827104901084481682A003000FEF71F
-S3150800321087FF206994F8271049015FF00042425061
-S3150800322094F82700401C84F8270094F8270094F89F
-S315080032302410884202D1002084F82700206841F231
-S3150800324014014058000609D58020216841F214026D
-S3150800325088500020216841F208028850280070BD75
-S315080032600021016990F8270040010858002801D577
-S3150800327000210AE010F40341B1F5407F02D05FF067
-S31508003280FF3102E0C0F30D40011F0800704710B57A
-S315080032900400FFF701FF0100002022681032DFF862
-S315080032A00C31994202D20821116023E0DFF800317F
-S315080032B0994202D20C2111601CE0DFF8F8309942DD
-S315080032C002D20021116015E0DFF8EC30994202D2F3
-S315080032D0042111600EE0DFF8E430994202D2102191
-S315080032E0116007E0DFF8D830994202D21421116044
-S315080032F000E00220C0B210BD80B5042000F0FDF940
-S31508003300DFF8C00000F0FEF9DFF8B80000F0E2F9D7
-S3150800331001BD10B40468246914F03C04C9B254EA27
-S31508003320C121D2B251EA821151F00101026811613C
-S31508003330002102681269D20704D40068406918801F
-S31508003340002005E0491C4FF6FF729142F1D3022096
-S3150800335010BC704710B49BB20468636103681B69AC
-S3150800336013F03C03C9B253EAC121D2B251EA821121
-S3150800337051F0030102681161002102681269D2073F
-S3150800338001D4002005E0491C4FF6FF729142F4D3A0
-S31508003390022010BC70470000C091FE1F1046005066
-S315080033A0040020028020010200001030C10E16021F
-S315080033B00187930301E1F50581D1F00801C2EB0B02
-S315080033C081B2E60E0400002080B500F0C3F901BD05
-S315080033D080B500F0C4F901BD38B504000D000DF143
-S315080033E0020302222900C9B22000FFF792FF002833
-S315080033F018D16B4603222900C9B22000FFF789FFBE
-S3150800340000280FD1BDF80200222809D1BDF8000016
-S315080034104FF6F0710840B0F5AB5F01D1002002E02D
-S31508003420032000E00420C0B232BD70B504000D00D0
-S3150800343016002900C9B22000FFF7CEFF002826D1C2
-S315080034402900C9B2200000F023F800281FD1002364
-S31508003450B6F90200B0F5804F01D153F40053B6F91E
-S315080034600400B0F5006F01D153F48073B0790028D9
-S3150800347001D053F48053F079002801D053F48043E7
-S315080034809BB200222900C9B22000FFF763FF70BD76
-S3150800349038B504000D004FF4004300222900C9B2D4
-S315080034A02000FFF757FF00280AD16B4600222900A3
-S315080034B0C9B22000FFF72DFFBDF800100904F4D4A7
-S315080034C032BD80B56B460122C9B2FFF722FFBDF8AF
-S315080034D00000C0B2800810F0010002BD80B5FFF7F9
-S315080034E073F800F066F901204649087000F099FA69
-S315080034F000204449087001BD80B56946424800F07D
-S315080035003AFA012807D101203E4908709DF80010B3
-S315080035103D48FFF783F869463B4800F0DAFA012888
-S3150800352007D10020374908709DF800103648FFF784
-S3150800353075F869463448FEF71BFA012807D10320B7
-S31508003540304908709DF800102F48FFF767F801BD4D
-S31508003550704738B504000D002A480078012804D1C0
-S315080035602900C9B2200000F0DAF9264800780028B8
-S3150800357004D12900C9B2200000F07EFA214800785B
-S31508003580032804D12900C9B22000FEF7C9F9FFF7BC
-S315080035903FF831BD1B480078002805D0022807D01F
-S315080035A004D3032806D007E0402006E0082004E0FC
-S315080035B0002002E0402000E0402080B27047114819
-S315080035C00078002805D0022807D004D3032806D09F
-S315080035D007E0402006E0082004E0002002E0402042
-S315080035E000E0402080B2704780B5FFF708F802BDBA
-S315080035F080B5FEF78AF9032002490870FEF7D3FF63
-S3150800360001BD0000A080FE1F4890FE1F80B500F097
-S31508003610F9FA01BD10B500F042F8002802D1FFF70B
-S31508003620E7FF19E000F087F8002802D1FFF7E0FF6E
-S3150800363012E0FFF78DFFFEF76FFF00F034F8074939
-S3150800364008400749086000F02EF8001D046800F0DD
-S31508003650DBFAA047FFF7CCFF10BD000080FFFF1F75
-S3150800366008ED00E070B504000D00160005E02878A6
-S3150800367020706D1C641CFFF7ABFE3000461E80B23E
-S315080036800028F4D170BD80B500F0C6FA01BD80B53A
-S3150800369000F0CDFA02BD80B500F007FB02BD80B58B
-S315080036A000F073FB02BD80B500F0BCFB02BD80B51F
-S315080036B000F029FB002801D1002001E000F097FB6B
-S315080036C002BD80B5FEF736FF02BD0000DFF84800F0
-S315080036D000687047010F20F07040DFF840200C2387
-S315080036E059435050704780B5FFF7F0FFDFF83010A8
-S315080036F0096811F00101C84002BDC0B2DFF8241004
-S3150800370008607047010F20F07040DFF81C200C237A
-S315080037105943505070470000C091FE1F1444005092
-S31508003720144600500446005048460050406AC840B7
-S3150800373010F00100704780B50D210548FFF7F6FF28
-S31508003740002801D1002002E000F0FEFC012002BDA5
-S31508003750008F024880B5642000F0CEFC01BD80B51C
-S3150800376000F0CDFC01BD0000016851F04001016088
-S315080037707047016831F0400101607047016851F0F7
-S3150800378001010160704701684908490001607047F6
-S315080037900068C06970470068C1617047816851F068
-S315080037A0005181600168C96851F000510068C16024
-S315080037B0704710B584B0FFF796FF040002E0640076
-S315080037C0FFF706FE80488442F9D38048844203D333
-S315080037D06408FFF7FDFDF8E7220001217C4800F0A8
-S315080037E0B3FD00947B4801904FF4FA50ADF80800F9
-S315080037F00120ADF80A0069467748406800F0DAFC0F
-S3150800380075484068FFF7B0FF73484068FFF7B6FF92
-S3150800381072487349086002207149496860F39F71CC
-S315080038206F48416040F2E17020F000406C494968F9
-S3150800383060F31C016A4A51606949896860F31C0192
-S31508003840674881606648406830F0005064494860BF
-S315080038506348FFF7A3FF082061490873002005E0C5
-S3150800386000215F4AC0B202441174401C01005C4A40
-S31508003870127BC9B29142F3D30120594908765848B8
-S3150800388000F0BFFD00220121514800F029FD5548EE
-S315080038905549086002205449496860F39F715248A7
-S315080038A0416040F2676020F000404F49496860F384
-S315080038B01C014D4A51604C49896860F31C014A480D
-S315080038C081604948406830F000504749486046489A
-S315080038D0FFF764FF082044490873002005E000212B
-S315080038E0414AC0B202441174401C01003E4A127B90
-S315080038F0C9B29142F3D300203B4908763A4800F012
-S3150800390080FD01220121324800F0EAFC3248406875
-S31508003910FFF72FFF30484068FFF735FF1FBD10B58A
-S315080039202F4A1173002106E0C9B2425C2C4BC9B27A
-S315080039300B441A74491C0A00294B1B7BD2B29A42C3
-S31508003940F2D3274800F0B7FD02212548FFF723FFE9
-S31508003950234800F0D1FDFEF7EDFD10F132042048B2
-S31508003960FFF716FF800705D5FFF732FDFEF7E2FDE4
-S315080039708442F4D210BD70B504000E0000251A4822
-S31508003980FFF706FFC0071BD5174800F0CEFD002835
-S3150800399012D11548007B3070002007E01249C0B2EA
-S315080039A00144097CC0B221540125401C01000E4A7D
-S315080039B0127BC9B29142F1D301210B48FFF7EBFE06
-S315080039C02800C0B270BD0000001BB700010E270713
-S315080039D00040014820A107007080FE1F00500148E2
-S315080039E00091FE1F205001482091FE1FD0F81401B7
-S315080039F0000B10F001007047D0F8140110F4407065
-S31508003A007047C0F818117047D0F81401C00810F0B4
-S31508003A1001007047016C0909090151F002010164AE
-S31508003A207047E0B54FF46140009008208DF8040017
-S31508003A3008208DF8050001208DF8060010208DF865
-S31508003A4007000020ADF8080069466748006800F0DE
-S31508003A50A7FD0123042210216348006800F069FECF
-S31508003A600123042200216048006800F077FE5E48C2
-S31508003A700068FFF7CFFF07BD70B504000D00EDB273
-S31508003A80412D03DB7A21594800F0BCFE2800C0B25C
-S31508003A9000F07EF8C0B2012803D07E21534800F01A
-S31508003AA0B1FE00260DE0FFF793FCB6B2A05D00F06C
-S31508003AB06FF8C0B2012803D087214C4800F0A2FE57
-S31508003AC0761C30002900C9B280B289B28842EAD38E
-S31508003AD070BD38B504000D0045480078002817D198
-S31508003AE0444800F044F801283FD1424800780028AD
-S31508003AF03BD040480078412837DAFEF71BFD3E499F
-S31508003B00086000203D4908700120394908702CE0FA
-S31508003B1038483A4909780844401C00F028F8012832
-S31508003B2019D136480078401C344908703348007863
-S31508003B3030490978884218D13048027892B230491B
-S31508003B402000FFF78FFD0020294908702B480078D0
-S31508003B50287001200AE0FEF7EDFC27490968643160
-S31508003B60814202D2002022490870002032BD10B5D9
-S31508003B7004001D480068FFF747FF002806D11A48C9
-S31508003B80006800F064FD2070012000E0002010BDF0
-S31508003B9038B50400012514480068FFF727FF0028F8
-S31508003BA001D000201FE0E4B2210089B20E48006867
-S31508003BB000F033FDFEF7BEFC10F10A040A4800685F
-S31508003BC0FFF71AFFC00506D4FFF702FCFEF7B2FCA2
-S31508003BD08442F3D200254FF4807103480068FFF74A
-S31508003BE010FF2800C0B232BD8880FE1F044F0008AF
-S31508003BF0A691FE1F0490FE1F6891FE1FA591FE1F49
-S31508003C000590FE1F72B6704762B6704780B500F021
-S31508003C102AFE10F0010002BD5FF0FF30DFF8B8148D
-S31508003C2008605FF0FF30DFF8B4140860704770B5BD
-S31508003C3006000C001500300000F054FA0600DFF804
-S31508003C40A004D0F89C00DFF89814D1F8A010081842
-S31508003C50401E801B611E884201D2002024E03000ED
-S31508003C6000F0EEF9FF2805D0A019401E00F0E8F98B
-S31508003C70FF2801D1002017E0B00A4FF480614843BD
-S31508003C80DFF85C140968884207D123002A0031004E
-S31508003C90DFF8480400F0FBF806E023002A003100AC
-S31508003CA0DFF8340400F0F3F870BD70B505000C00B9
-S31508003CB0280000F017FA0500DFF82404D0F89C0065
-S31508003CC0DFF81C14D1F8A0100818401E401B611E0E
-S31508003CD0884201D2002015E0280000F0B1F906005C
-S31508003CE06019401E00F0ACF9F6B2FF2E02D0C0B241
-S31508003CF0FF2801D1002005E00100C9B23000C0B29A
-S31508003D0000F051F970BD80B500200090DFF8CC03B3
-S31508003D10006810F1010F01D1012035E00098DFF8A5
-S31508003D20BC134968081800900098DFF8B013896832
-S31508003D30081800900098DFF8A413C96808180090BE
-S31508003D400098DFF898130969081800900098DFF8BA
-S31508003D508C134969081800900098DFF88013896960
-S31508003D60081800900098DFF87413C96908180090BD
-S31508003D700098C04300906A460421DFF8640300688F
-S31508003D8010F50070FFF753FF02BD0020DFF850134F
-S31508003D90096809680818DFF848130968091D0968D9
-S31508003DA00818DFF83C130968083109680818CC496F
-S31508003DB009680C3109680818C94909681031096881
-S31508003DC00818C7490968143109680818C4490968F0
-S31508003DD0183109680818C043C149096811F5007106
-S31508003DE00968884201D1012000E00020704780B5AB
-S31508003DF0BA48006810F1010F06D0B84800F08AF8F2
-S31508003E00002801D100200CE0B348006810F1010F2A
-S31508003E1006D0B14800F07EF8002801D1002000E065
-S31508003E20012002BDAE480068704780B58A0501D0FA
-S31508003E3000200BE002688A4201D1012006E00160F9
-S31508003E404FF48062001DFFF70DFC012002BD38B556
-S31508003E5004000D00A148844208D19F4C2900200087
-S31508003E60FFF7E3FF002810D100200FE09C48006808
-S31508003E70854203D1994C9A480568EFE7200000F07F
-S31508003E8049F80028EAD1002000E0200032BD2DE9DB
-S31508003E90F04104000F0015001E00B80A4FF48061B7
-S31508003EA001FB00F8206810F1010F07D141462000F8
-S31508003EB0FFF7BBFF002801D1002029E02068404514
-S31508003EC008D041462000FFF7C2FF0400002C01D1AC
-S31508003ED000201DE02068381A2044071DFFF778FAED
-S31508003EE0201D381AB0F5806F0AD318F580612000B6
-S31508003EF0FFF7ADFF0400002C01D1002008E0271DC4
-S31508003F00287838707F1C6D1C761E002EE6D101209D
-S31508003F10BDE8F0812DE9F0410400206800F090F832
-S31508003F20FF2801D100203CE0002500E06D1C042D8F
-S31508003F3036D2FFF74DFA20684FF4807101FB05066B
-S31508003F404FF4807000FB05F02044071DFEF7F2FAD7
-S31508003F5010F10D083900300000F088FC01E0FFF789
-S31508003F6037FAFFF753FE002805D0FEF7E3FA804537
-S31508003F70F5D2002015E000F076FC30F0100000289D
-S31508003F8001D000200DE0002000E0401CFF28CDD81D
-S31508003F90811909783A5CC9B29142F6D0002000E04E
-S31508003FA00120BDE8F081F8B504000D0028002100C5
-S31508003FB0C0B2C9B2884201D2002040E02000484978
-S31508003FC0097AC0B2884206D3454890F8A400290069
-S31508003FD0C9B2884201D2002031E000E0641C280002
-S31508003FE02100C0B2C9B2884228D3FFF7F1F92000F0
-S31508003FF0C0B200F051F8060016F1010F01D10020F9
-S315080040001DE0FEF797FA00F5C857C837300000F0EC
-S3150800401048FC01E0FFF7DCF9FFF7F8FD002805D0BA
-S31508004020FEF788FA8742F5D2002008E000F01BFC6C
-S3150800403030F020000028D1D0002000E00120F2BD99
-S3150800404038B50400002500E06D1CEDB20E2D21D216
-S31508004050FFF7BEF92248EDB20C2101FB05F14058E5
-S315080040608442F1D31E48EDB20C2101FB05F14058FC
-S315080040701B49EDB20C2202FB05F2114449680818E7
-S315080040808442E1D21648EDB20C2101FB05F1084441
-S31508004090007A00E0FF2032BD70B506005FF0FF34FD
-S315080040A0002500E06D1CEDB20E2D12D2FFF790F937
-S315080040B00B48EDB20C2101FB05F10844007A3100EA
-S315080040C0C9B28842EED10648EDB20C2101FB05F1D2
-S315080040D04458200070BD0000E886FE1FEC8AFE1FCB
-S315080040E05C4E0008010E082901D110F18060704766
-S315080040F012FA01F14160704717490880704780B588
-S31508004100FEF718FA1549096888421CD3144800783E
-S31508004110002808D1012012490870012209211148F6
-S31508004120FFF7E6FF08E000200D4908705FF48032CB
-S3150800413009210C48FFF7DCFFFEF7FCF90649098858
-S3150800414040180649086001BD80B55FF48032092130
-S315080041500448FFF7CDFF01BD9491FE1F5891FE1F3D
-S31508004160A391FE1F00850248D0F8C40110F4407FD1
-S3150800417001D1012000E00020C0B27047C9B2D2B216
-S3150800418051EA0241DBB251EA0361C0F8C411704733
-S31508004190016851F0400101607047016831F0400143
-S315080041A001607047814200D308007047884200D3F7
-S315080041B0080070472DE9F04104000D000C220C227E
-S315080041C0002601275FF00008002042F21071012244
-S315080041D000E0521C412A40D22B685FF00A0C0CFB07
-S315080041E003F3B3FBF2FC6B68BCFBF3F35FF00A0E58
-S315080041F0B3FBFEF80EFB183EBEF1060F05D35FF0C3
-S315080042000A0EB3FBFEF35B1C03E05FF00A0EB3FB7A
-S31508004210FEF3002B06D05FF00A0E0EFB03FEBCFB76
-S31508004220FEFC03E00A23BCFBF3FC0123D5F804E0FB
-S31508004230F44504D3D5F804E0BCEB0E0C03E0D5F83E
-S3150800424004E0BEEB0C0C152BC3D28C45C1D216006C
-S3150800425018006146BCF57A7FBBD242F21071402243
-S3150800426000E0521E032A1BD3531C42F2107C0CFB9F
-S3150800427003F3B3FBF0F3B5F808C0634504D3B5F808
-S3150800428008C0B3EB0C0C03E0B5F808C0BCEB030C94
-S315080042908C4501D217006146B5F808C06345E0D2DF
-S315080042A0C01BB0F101082000FFF772FFB8F101004A
-S315080042B0000310F4E0406989491E890111F0C00124
-S315080042C00843791E090211F470610843711E11F042
-S315080042D03F01084320612000FFF75FFFBDE8F0813A
-S315080042E070B504000D0016002000FFF73DFF0028FA
-S315080042F0FAD06B1CDBB23200D2B202212000FFF7E3
-S315080043003DFF70BD10B50400DFF87402FFF7FAF937
-S31508004310DFF86C02FFF7DEF92068400840002060ED
-S3150800432020688007FCD410BD80B500F065F8012828
-S3150800433002D0022803D005E0FFF7D5F903E000F024
-S31508004340C7FA00E0002002BD2DE9F04104000E0086
-S3150800435015002000FFF7D6FF3100C9B2200000F093
-S3150800436042F82000FFF7E0FF8046B8FBF5F0D0F5ED
-S3150800437080610020FFF716FF40F2FF31FFF716FFB6
-S315080043800600D6F58060B8FBF0F7A8095FEA98182A
-S3150800439040F2FF314FF480625043B0FBF8F0FFF76C
-S315080043A005FF00FB08F1890A8901691AEA1B91428F
-S315080043B001D3012100E00021C9B2002900D106007D
-S315080043C0C9B2002901D0012000E00220E168DFF827
-S315080043D0B4211140E160E168C0B256EA8030084372
-S315080043E0E060BDE8F081D0F8C82112091201C9B20F
-S315080043F01143C0F8C8117047D0F8C80110F00F0073
-S31508004400704710B504002068DFF87C1108184009C9
-S315080044104109000210F4F85050EA413021688968D1
-S3150800442031F47F41226891602168896808432168D0
-S3150800443088606068C0F34070C00704D56068C0F340
-S315080044404070C00736D5207E002802D0207E01287D
-S3150800445030D120202168C8616068C0F34070002808
-S3150800446010D1606810F06040616850EA81402168A8
-S315080044708861A06810F06040A16850EA8140216810
-S31508004480C86005E0606821688861A0682168C8601E
-S31508004490207E012807D1200000F00DF85FF00060AB
-S315080044A02168C86103E04FF400602168C861374895
-S315080044B02168C86110BD0321017E012918D1202178
-S315080044C00268D1610168096831F07061027B1206E1
-S315080044D012F0706211430268116001690268116185
-S315080044E04169026851612A490068C161002100E0FA
-S315080044F003210800C0B2704701210168C969C1F3E8
-S3150800450040110268D269C2F30022002901D10421B0
-S3150800451008E0012A01D1022104E05FF0E0610068A9
-S31508004520C16100210800C0B27047012100210022A4
-S315080045300168C969C1F3C0210268D269C2F3800261
-S31508004540002901D0032118E0012A01D1022114E033
-S315080045500168096901610168496941610168C969B8
-S31508004560C1F380010268D269C2F3C002C9B2002948
-S3150800457002D0D2B2002AEBD100210800C0B270479F
-S3150800458010000010003CFFFF00B0FEB74000A00678
-S3150800459040002800806B10F080007047C1647047A7
-S315080045A070B504000D001026200000F05BF8E879CD
-S315080045B0002800D0EE7932002968200000F07BF848
-S315080045C0A879401EB11CC901090A090251EA40002E
-S315080045D040F4403050F00100E0632879401E0006A0
-S315080045E050F4817060636879002806D0606B697939
-S315080045F0491E50EA0140606305E0606B2979491E4F
-S3150800460050EA014060634FF4A060A0635FF0FF309A
-S31508004610E064B5F90800206470BD38B504000D00E3
-S31508004620D4F8080110F0E06F0DD12000FFF7B2FFB3
-S315080046308028FAD04FF400512000FFF7AFFFADB243
-S31508004640C4F8805002E0ADB2C4F8805131BDD0F84C
-S315080046500C1111F0E06F01D1406D01E0D0F81C019A
-S3150800466080B2704710B504005848844202D05848B2
-S31508004670844203D1574800F088F812E0564884422D
-S3150800468002D05648844203D1554800F07EF808E027
-S315080046905448844202D05448844202D1534800F018
-S315080046A074F80320E060E068C007FCD5206C0009B8
-S315080046B00001206410BDF8B504000E001500642E34
-S315080046C034D3002D32D0FFF70EF86421B0FBF1F198
-S315080046D06420B6FBF0F60123012040F2FF3E40F2CB
-S315080046E0FF3212E002FB01F705FB06FCB7FBFCF7FD
-S315080046F05FEA972CBF05BF0DBCF5806F04D27745DE
-S3150800470002D2BE4660461300521E002AEAD153F46E
-S31508004710004121616169364A11406A1E51EA8221C7
-S31508004720401E51EA00406061002000E00120C0B24E
-S31508004730F2BD30B4D0F8084134F0E064C0F808415E
-S31508004740D0F808412B4D2C4054EA03231943D2B222
-S3150800475051EA0261C0F8081130BC704730B4D0F88D
-S315080047600C4134F0E064C0F80C41D0F80C41224DFD
-S315080047702C4054EA03231943D2B251EA026151F09C
-S315080047808051C0F80C1130BC704780B51149884279
-S3150800479008D14FF40060FEF7B5FF4FF40060FEF74E
-S315080047A099FF12E00E49884206D11448FEF7AAFF7F
-S315080047B01248FEF78FFF08E00C49884205D11048D9
-S315080047C0FEF7A0FF0E48FEF785FF01BD0000034077
-S315080047D000020340080003400000024800020248A5
-S315080047E008000248004002480042024808400248C1
-S315080047F0EF8000FCC0C0FFF8C0C0FFEF80000010CB
-S315080048000001001080B5FEF7E3FDFCE72B485021B8
-S31508004810016070472A4A10602A4A11607047274982
-S31508004820AA220A60284955220A602449A0220A6059
-S315080048300100AA20086070472049AA220A60224976
-S3150800484055220A601D4980220A601C49AA220A606C
-S315080048501D4955220A600100302008607047174834
-S31508004860F5210160704719480068704770B5040063
-S315080048700D00FFF7F4FFFFF7C9FF002607E005EB79
-S315080048808600416855F82600FFF7C4FFB61C402E7F
-S31508004890F5D32000FFF7C3FF0C480068C007FBD418
-S315080048A070BD10B50400FFF7DAFF2000FFF7C4FF5C
-S315080048B006480068C007FBD410BD00005455000C1C
-S315080048C0F055000CF455000CA8AA000C102000584E
-S315080048D000487047001BB70080B566480068C007E7
-S315080048E009D46548006850F00100634908606148CA
-S315080048F00068C007FBD561480068800509D560488F
-S31508004900006850F400705E49086041F64C5000F0AB
-S31508004910EBF85C48006850F400205A49086040F6F5
-S31508004920C41000F0E1F8574800685749084055494F
-S3150800493008605648006810F0300F24D053480068C5
-S315080049405349084051490860FFF7C2FF4F490968B3
-S31508004950504AB0FBF2F0401E51EA00404B4908604D
-S315080049604D480068400840004B49086045480068C3
-S3150800497030F40030434908604848006810F4607015
-S31508004980B0F5607FF8D13F48006850F001003D4916
-S3150800499008603C48006850F010003A4908604048F2
-S315080049A0404908603748006850F0400035490860BB
-S315080049B03448006830F01000324908603148006811
-S315080049C050F480202F490860344800684007FBD51A
-S315080049D02C480068400840002A4908602F480068AB
-S315080049E0C007FBD45FF001102F49086000202F494B
-S315080049F0086000202E49086000202E490860002023
-S31508004A002D49086003202D4908602D482D49086066
-S31508004A102D482E4908601B48006830F040001949A7
-S31508004A2008602B481F4908604FF4166000F05CF8D0
-S31508004A3028481C4908604FF4616000F055F826487C
-S31508004A40184908604FF4965000F04EF82348154967
-S31508004A50086041F2707000F047F821481149086073
-S31508004A604FF4E15000F040F800201E49086000F0BD
-S31508004A7059F801BD0042005004420050004400505D
-S31508004A800844005014470050FDFFFEFF044700503D
-S31508004A90CFFFF0FFA02526001C4700501047005006
-S31508004AA0002F0B01184700500C46005014460050C2
-S31508004AB01046005020460050244600501C46005020
-S31508004AC00500010018460050030020012846005042
-S31508004AD0002F0501002F0301002F0201002F0101FD
-S31508004AE0002F00010446005081B00021009103E028
-S31508004AF000BF0099491C009100998142F8D301B082
-S31508004B007047000010B510225FF00051044C2000D9
-S31508004B10FDF706FB00F054F8FFF7DEFE10BD00BFF8
-S31508004B20B091FE1F80B51F480068C00327D51E48F0
-S31508004B300068C00701D51D4801E0FFF7C9FE1C49FA
-S31508004B400968490713D51B490968C1F30361491C5C
-S31508004B50184A1268C2F30622521C164B1B68C3F386
-S31508004B6006435B1C5943B0FBF1F0504308E011497A
-S31508004B70096811F07F014B1CB0FBF3F000E00B480D
-S31508004B800849096801F0FF01491CB0FBF1F00A4920
-S31508004B90096811F00101491CB0FBF1F007490860EA
-S31508004BA001BD00BF0C4600501C47005000366E0180
-S31508004BB0104700501847005010460050C091FE1F7D
-S31508004BC072B60D480D490860BFF34F8F62B60C48A0
-S31508004BD0006850F470000A4908600A48006830F016
-S31508004BE0080008490860084800680009000150F0F4
-S31508004BF004000549086070470000000808ED00E059
-S31508004C0088ED00E014ED00E014200058026E012340
-S31508004C1013FA01F132EA010101667047C9B200EBE5
-S31508004C208103DB69DB08DB00D2B21A43C9B200EBA9
-S31508004C308100C2617047C268D208D200C9B211F0B9
-S31508004C4007011143C1607047016851F040010160D6
-S31508004C507047016831F040010160704780B5002057
-S31508004C608DF8000000F013F800F06EF800F0DEF89A
-S31508004C706946002000F07CF89DF80000012801D163
-S31508004C80FEF7B6FC00F013F800F0DEF8FCE780B596
-S31508004C90802209212748FEF7A9F900220D21264876
-S31508004CA0FEF7A4F90D212448FFF7B0FF01BD00B5B2
-S31508004CB08DB000208DF818000120079002208DF88D
-S31508004CC0200006AA04211D48FEF72EF990208DF82B
-S31508004CD00C000120049002208DF8140003AA052177
-S31508004CE01648FEF721F9012200211548FFF796FF1D
-S31508004CF000208DF8240009AA0D211048FEF714F9A2
-S31508004D0090208DF800000120019002208DF80800FF
-S31508004D106A460C210948FEF707F90A48FFF794FF87
-S31508004D2002210848FFF787FF0648FFF792FF0DB0F4
-S31508004D3000BD000000850248008F02480081024835
-S31508004D40000003400043014880B500F025F800281C
-S31508004D500DD1344834490860002004E00021324A65
-S31508004D6002441171401C3828F8D300F024F801BD1C
-S31508004D7070B504000D00002600F00EF8002808D0D3
-S31508004D80382C06D2002D04D02748204400792870F4
-S31508004D9001263000C0B270BD10B500242248006854
-S31508004DA02049884204D100F00CF8002800D00124DC
-S31508004DB02000C0B210BD80B500F010F81A498887E7
-S31508004DC001BD10B5002400F009F81749898F80B293
-S31508004DD0884200D101242000C0B210BD002012492B
-S31508004DE0096850FA81F010490968090A50FA81F0F1
-S31508004DF00D490968090C50FA81F00B490968090E32
-S31508004E0050FA81F0002105E0074A0A44127950FA5F
-S31508004E1082F0491C3829F7D380B2C043401C80B2BF
-S31508004E2070470000A2E742CE0080FE1F80B5FEF75D
-S31508004E30EDFBFEF7C9FAFDF75FFBFEF724FCFEF76C
-S31508004E404DFBFDF787FB01BD80B5FEF7C1FAFDF7FF
-S31508004E5067FBFEF751FBFDF786FB01BD0080000CE2
-S31508004E60004000000200000000C0000C00400000E6
-S31508004E70030000000000010C0040000004000000D0
-S31508004E800040010C00400000050000000080010CF5
-S31508004E90004000000600000000C0010C00400000B1
-S31508004EA0070000000000020C0000020008000000D5
-S31508004EB00000040C00000400090000000000080CB3
-S31508004EC0000004000A00000000000C0C00000400AA
-S31508004ED00B0000000000100C000004000C0000008D
-S31508004EE00000140C000004000D0000000000180C5F
-S31508004EF0000004000E00000000001C0C0000040066
-S31508004F000F000000433A5C576F726B5C736F6674F0
-S31508004F10776172655C4F70656E424C545F584D43BD
-S31508004F20343730305F6578747261735C54617267C8
-S31508004F3065745C536F757263655C41524D434D34BD
-S31508004F405F584D43345C756172742E63000000002F
-S31508004F5019E050F8041BCB0744BFA9F101035918FF
-S31508004F60121F0023042A41F8043BF9D25FEA827C27
-S31508004F700B4604D54FF0000CA1F800C09B1CD107C6
-S31508004F8044BF0021197050F8042B002AE1D170475C
-S31508004F9010B450F8041B79B102684368024408301B
-S31508004FA0DC0744BFA9F10104E31852F8044B43F89F
-S31508004FB0044B091FF9D1ECE710BC704710B5074937
-S31508004FC079441831064C7C44163404E00A68081DF6
-S31508004FD0114488470146A142F8D110BD2C000000B3
-S31508004FE0540000004EF68851CEF20001086840F4DD
-S31508004FF070000860BFF34F8FBFF36F8F4FF00070DC
-S31508005000E1EE100A7047000049FFFFFF0C1100008F
-S31508005010A480FE1FA0300000000000200000000051
-S3150800502071FFFFFF64000000580200004080FE1F69
-S315080050300000000000F00BF8002801D0FFF7BEFFC3
-S315080050400020AFF30080FFF709FE00F002F8012008
-S31508005050704700F001B800000746384600F002F82D
-S31508005060FBE7000080B5AFF30080024A1100182064
-S31508005070ABBEFBE726000200DFF808D002488047EF
-S3150800508002480047C899FE1F054B000891500008C2
-S31508005090AFF30080FFF7A6FFFFF7CCFF0100004043
-S315080050A000080000FFFFFFFFFFFF00004F70656E5E
-S315080050B0424C5400ADDE122363825363FFFFFFFFA9
-S315080050C000000000FFFFFFFFFFF7FEBFFFF7FEBF70
-S315080050D0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFF6
-S315080050E0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFE6
-S315080050F0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFD6
-S31508005100FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFC5
-S31508005110FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFB5
-S31508005120FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFA5
-S31508005130FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF95
-S31508005140FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF85
-S31508005150FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF75
-S31508005160FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF65
-S31508005170FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF55
-S31508005180FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF45
-S31508005190FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF35
-S315080051A0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF25
-S315080051B0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF15
-S315080051C0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF05
-S315080051D0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFF5
-S315080051E0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFE5
-S315080051F0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFD5
-S31508005200FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFC4
-S31508005210FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFB4
-S31508005220FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFA4
-S31508005230FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF94
-S31508005240FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF84
-S31508005250FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF74
-S31508005260FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF64
-S31508005270FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF54
-S3150800528000C0005000000000080027695B450000C8
-S31508005290A02F00202030002000000020D01700207A
-S315080052A000000000040400000000000000000000E8
-S315080052B000420148004301480044014800450148AE
-S315080052C00046014800470148000003400002034029
-S315080052D00000024800020248004002480042024814
-S309080052E004010000B7
-S7050800509111
+S31508000170B9A60008BDA60008C1A60008C5A60008BD
+S31508000180C9A60008CDA60008D1A60008D5A600086D
+S31508000190D9A60008DDA60008E1A60008E5A600081D
+S315080001A0E9A60008EDA60008F1A60008F5A60008CD
+S315080001B0F9A60008FDA6000801A7000805A700087B
+S315080001C009A700080DA7000811A7000815A7000829
+S315080001D019A700081DA7000821A7000800000000AD
+S315080001E025A7000829A70008774300082DA70008B7
+S315080001F031A700080000000035A70008000000002D
+S315080002004178007850EA0121080080B27047C17829
+S31508000210827852EA0121427852EA0121007850EAAE
+S315080002200121080070470170401C89B2090A017053
+S31508000230401C70470170401C090A0170401C090ADD
+S315080002400170401C090A0170401C7047002A06D03C
+S315080002500B780370491C401C521E002AF8D17047BF
+S315080002600170401C521E002AFAD1704710B40023B0
+S3150800027003780C781B1B491C401C521E002A01D00F
+S31508000280002BF5D0180010BC704700E0401C02781F
+S31508000290002A02D002788A42F8D100787047F8B569
+S315080002A005000024E878002820D0EE6A01233200F1
+S315080002B015F13001687801F067FF002801D00124A4
+S315080002C014E00020E870286A301AA96988420DD21D
+S315080002D0AF7809E0A86986190123320015F13001C3
+S315080002E0687801F051FF7F1E022FF3D22000C0B2BA
+S315080002F0F2BD70B504000D000026E06A854213D0F1
+S315080003002000FFF7CCFF0600F6B2002E0CD1012321
+S315080003102A0014F13001607801F024FF002802D089
+S315080003205FF0FF350126E5623000C0B270BD38B512
+S3150800033004002000FFF7B3FF0500EDB2002D3FD102
+S315080003402078032834D12079012831D14FF400725E
+S31508000350002114F13000FFF783FF4AF6552104F215
+S315080003602E20FFF760FFDFF8B41714F13000FFF70F
+S3150800037061FFDFF8AC174FF405702044FFF75AFF0A
+S3150800038021694FF406702044FFF754FFE1684FF4E3
+S3150800039007702044FFF74EFFE069401CE062012326
+S315080003A0E26A14F13001607801F0EEFE0020207157
+S315080003B000220021607801F0F9FE002800D001250E
+S315080003C02800C0B232BD891E4269921E914201D3ED
+S315080003D0002003E04289806A02FB010070472DE98C
+S315080003E0F0410C000568022C02D36869844201D3E7
+S315080003F0012656E05FF0FF362878012804D04FD34F
+S3150800040003283BD029D34BE0270017EB5707286A68
+S3150800041010EB57212800FFF76CFF002841D1F8059B
+S31508000420C00D284490F830807F1C286A10EB5721AD
+S315080004302800FFF75EFF002833D1F805C00D2844D1
+S3150800044090F8300058EA0028E00702D55FEA181647
+S3150800045002E05FEA0856360D23E0286A10EB1421FD
+S315080004602800FFF746FF00281BD16000C005C00D15
+S3150800047028443030FFF7C4FE060012E0286A10EB65
+S31508000480D4112800FFF735FF00280AD1A000C005BF
+S31508000490C00D28443030FFF7BAFE20F0704600E061
+S315080004A001263000BDE8F0812DE9F04104000D0079
+S315080004B016000227022D7CD36069854279D22078FE
+S315080004C0012804D075D3032855D03ED371E0A84639
+S315080004D018EB5808206A10EB58212000FFF709FF8F
+S315080004E00700FFB2002F64D15FEAC850C00D204450
+S315080004F0303018F10108E90705D5017811F00F0128
+S3150800050051EA061100E0310001700120E070206A0E
+S3150800051010EB58212000FFF7ECFE0700FFB2002F72
+S3150800052047D15FEAC850C00D20443030E90701D5ED
+S31508000530310906E0017811F0F001320A12F00F02D3
+S31508000540114301700120E07033E0206A10EB152199
+S315080005502000FFF7CEFE0700FFB2002F29D1310099
+S3150800056089B26800C005C00D20443030FFF75BFE35
+S315080005700120E0701DE0206A10EBD5112000FFF77E
+S31508000580B8FE0700FFB2002F13D1A800C005C00DA2
+S3150800059020443030FFF73BFE000F60F31F76310032
+S315080005A0A800C005C00D20443030FFF743FE0120E7
+S315080005B0E0703800C0B2BDE8F081F8B504000F005D
+S315080005C0110000202568022F02D36869874201D3EB
+S315080005D0022035E0002909D05FF0FF322800FFF736
+S315080005E063FFC0B2002801D0C0B229E0390020005C
+S315080005F0FFF7F5FE0600002E21D0012E01D10220BC
+S315080006001EE016F1010F01D1012019E00022390080
+S315080006102800FFF749FFC0B2002801D0C0B20FE09A
+S31508000620286910F1010F06D02869401C286128792D
+S3150800063050F001002871370068698742D6D3002038
+S31508000640F2BD2DE9F04107000C003D68002C0AD1E7
+S31508000650D5F80C80B8F1000F02D06869804511D32F
+S315080006605FF001080EE021003800FFF7B8FE022807
+S3150800067001D2012049E010F1010F46D0696988428C
+S3150800068043D3A0464646761C6869864204D30226AA
+S31508000690B04501D2002038E031003800FFF79FFE50
+S315080006A0002820D15FF0FF3231002800FFF7FCFE5A
+S315080006B0C0B2002806D1002C04D032002100280040
+S315080006C0FFF7F2FEC0B2002817D1EE602869696903
+S315080006D0891E884202D22869401E2861287950F06E
+S315080006E00100287110E0012802D010F1010F00D195
+S315080006F00BE04645C7D1002007E0C0B2012802D169
+S315080007005FF0FF3600E001263000BDE8F0812DE9F4
+S31508000710F04104000D002768B5F5001F02D215F058
+S315080007201F0F01D0022042E02561A668002E03D1E2
+S315080007303878032800DB7E6A002E08D168093989D3
+S31508000740884201D3022032E0786AA0611FE07889E6
+S315080007504FF4007101FB00F801E0B5EB08054545CB
+S3150800076010D331002000FFF73AFE060016F1010FFC
+S3150800077001D101201BE0022E02D378698642ECD310
+S31508000780022014E031003800FFF71DFEA061666103
+S31508000790A069002801D1022009E0A06910EB5520C4
+S315080007A0A061E805C00D38443030E0610020BDE89E
+S315080007B0F0812DE9F04104000E002568206910F14A
+S315080007C02007A069002802D0B7F5001F01D304202E
+S315080007D076E0F8056DD1A069401CA0616069002823
+S315080007E007D178092989884263D30020A0610420AB
+S315080007F066E06889401E10EA572F5AD161692000C1
+S31508000800FFF7EDFD8046B8F1020F01D2022057E04E
+S3150800081018F1010F01D1012052E06869804541D3E2
+S31508000820002E03D10020A061042049E06169200060
+S31508000830FFF707FF8046B8F1000F01D107203FE018
+S31508000840B8F1010F01D102203AE018F1010F01D1E8
+S31508000850012035E02800FFF722FD002801D00120FD
+S315080008602EE04FF40072002115F13000FFF7F8FC76
+S31508000870002641462800FFF7A6FDE86203E0761C3D
+S31508000880E86A401CE8626889864208D20120E87056
+S315080008902800FFF704FD0028F1D0012010E0E86ADF
+S315080008A0801BE862C4F8148041462800FFF78BFDD8
+S315080008B0A0612761F805C00D28443030E0610020AA
+S315080008C0BDE8F081F8B504000D0027680021200076
+S315080008D0FFF71DFFC0B200281BD10026A16938000A
+S315080008E0FFF707FDC0B2002813D1E1690978E529A9
+S315080008F003D0E1690978002903D1761CAE4201D1FB
+S3150800090007E0002601212000FFF753FFC0B20028A8
+S31508000910E4D0C0B2042800D10720C0B2F2BD70B539
+S3150800092004000D0015F11A00FFF76AFC060020788E
+S31508000930032805D115F11400FFF762FC56EA0046B4
+S31508000940300070BD70B504000D001600310089B284
+S3150800095015F11A00FFF767FC2078032805D1310C3A
+S3150800096089B215F11400FFF75EFC70BD2DE9F84356
+S3150800097004000D0015F11A00FFF742FC002801D00B
+S31508000980002044E0287810F03F00401E0D2101FBAE
+S3150800099000F65FF00108002714E0FF2E0ED2484645
+S315080009A080B201F040FC804634F8160001F03BFCAA
+S315080009B0761C1FFA88F880B2804501D0002026E010
+S315080009C0C8467F1C0D2F13D2DFF81C0DC05D2844C6
+S315080009D0FFF716FC81461FFA88F8B8F1000FDCD13C
+S315080009E01FFA89F94FF6FF708145EAD000200EE01C
+S315080009F0287840060AD51FFA88F8B8F1000F05D0FE
+S31508000A0034F81600002801D0002000E00120BDE8D7
+S31508000A10F2832DE9F04104000D0015F11A00FFF7E5
+S31508000A20EFFB002801D0002032E0287810F03F00C4
+S31508000A30401E0D2101FB00F65FF00108002708E0C3
+S31508000A40FF2E01D3002023E0804624F81680761C6A
+S31508000A507F1C0D2F11D2DFF8900CC05D2844FFF7DC
+S31508000A60CFFB1FFA88F8B8F1000FE9D180B24FF62C
+S31508000A70FF718842ECD000200AE02878400606D5A7
+S31508000A80FF2E01D3002003E0002024F816000120E1
+S31508000A90BDE8F0812DE9F84304000D0016006B73DC
+S31508000AA00F20E87200202873002115F11A00FFF7BD
+S31508000AB0BAFBF6B2701E0D2101FB00F95FF00008C3
+S31508000AC01FFA88F847461FFA88F84FF6FF708045E0
+S31508000AD003D034F8198019F10109414689B2DFF8C3
+S31508000AE0080CC05D2844FFF79EFB1FFA88F8B8F18A
+S31508000AF0000F01D14FF6FF787F1C0D2FE3D31FFAA5
+S31508000B0088F84FF6FF70804503D034F8190000289E
+S31508000B1001D156F040062E70BDE8F183525261416C
+S31508000B20727241617CB5040016001D000B2220007C
+S31508000B30FFF78CFB062D16D33088002813D0318892
+S31508000B40B61C00201028F7D289B211F0010212EB68
+S31508000B50450589B24908EA0303D585F4883595F031
+S31508000B602105401CEEE7072015F00F013031C9B208
+S31508000B703A2900DBC91D6A461154401E2D09002D6D
+S31508000B80F2D17E216A461154002100E0491C8142B7
+S31508000B9002D2625C202AF9D10A00511C082803D225
+S31508000BA06B461B5C401C00E02023A3540829F3D3A2
+S31508000BB073BD00210B220B00DBB2C90111EB5301F7
+S31508000BC003785918401C521E002AF4D10800C0B2F6
+S31508000BD070472DE9F84304000E00042527684FF0F6
+S31508000BE0FF084FF0FF09A06900282ED0A169380038
+S31508000BF0FFF77FFB0500EDB2002D26D1E0690078EE
+S31508000C00C0B2002801D104251FE0E169C97A11F0B4
+S31508000C103F01A171C0B2E5280DD0C0B22E280AD076
+S31508000C20C9B231F02002082A01D1012200E00022CF
+S31508000C30D2B2B24212D04FF0FF0800212000FFF7CF
+S31508000C40B8FD0500EDB2002DCDD0EDB2002D01D0D6
+S31508000C500020A0612800C0B2BDE8F283C9B20F29FE
+S31508000C6020D1410607D5E16991F80D9010F0BF0033
+S31508000C708046216961624146C0B2C9B288420ED136
+S31508000C804846E169497BC0B2884208D1E169A06A51
+S31508000C90FFF7BFFE002802D0B8F10108CDE74FF0F4
+S31508000CA0FF08CAE75FFA88F8B8F1000F06D1E069CD
+S31508000CB0FFF77FFF5FFA89F9814502D05FF0FF30C1
+S31508000CC06062C2E72DE9F041040025680021200092
+S31508000CD0FFF71DFD80465FFA88F8B8F1000F02D0CD
+S31508000CE04046C0B271E0FF273E005FF0FF30606209
+S31508000CF0A1692800FFF7FDFA80465FFA88F8B8F17F
+S31508000D00000F60D1E0690078C0B2002802D15FF018
+S31508000D10040858E0E169C97A11F03F01A171C0B22F
+S31508000D20E52804D00A0707D5C9B20F2904D0FF263B
+S31508000D305FF0FF3060623CE0C9B20F2920D1A16A9A
+S31508000D40002936D0410606D5E1694F7B10F0BF0071
+S31508000D500600216961623100C0B2C9B288420DD16C
+S31508000D603800E169497BC0B2884207D1E169A06AC7
+S31508000D70FFF7FCFD002801D0761E1AE0FF2618E0D2
+S31508000D80F6B2002E06D13E00E069FFF712FFF6B272
+S31508000D90864218D0206AC07AC00706D40B22216A78
+S31508000DA0E069FFF763FA00280DD0FF265FF0FF30F1
+S31508000DB0606200212000FFF7FCFC80465FFA88F895
+S31508000DC0B8F1000F94D04046C0B2BDE8F0812DE9D5
+S31508000DD0F04784B004002568276AD4F82880F87A92
+S31508000DE0A021084201D006209BE05FF0000901E03F
+S31508000DF019F1010938F819000028F9D10C2239002F
+S31508000E006846FFF723FA9DF80B00C00728D500208F
+S31508000E10F8720020A0625FF0010A01E01AF1010AE7
+S31508000E20BAF1640F0CD25346424669463800FFF7BA
+S31508000E3079FE2000FFF746FF0600F6B2002EEDD039
+S31508000E40BAF1640F01D107206BE0F6B2042E02D086
+S31508000E503000C0B265E09DF80B00F872C4F828802F
+S31508000E609DF80B00800706D519F10C000D21B0FB83
+S31508000E70F1F0471C00E0012739002000FFF722FDAA
+S31508000E800600F6B2002E2DD17F1E002F2AD020692B
+S31508000E90B0EB47112000FFF73AFC0600F6B2002E29
+S31508000EA020D1206AFFF785FE8046A1692800FFF752
+S31508000EB020FA0600F6B2002E14D14346DBB23A00F9
+S31508000EC0D2B2E169A06AFFF7E5FD0120E8700021CA
+S31508000ED02000FFF76EFC0600F6B2002E02D17F1E38
+S31508000EE0002FE2D1F6B2002E19D1A1692800FFF72A
+S31508000EF000FA0600F6B2002E11D120220021E06980
+S31508000F00FFF7AEF90B22216AE069FFF79FF9206A1D
+S31508000F10C07A10F01800E16908730120E870300003
+S31508000F20C0B204B0BDE8F08770B50400256826692C
+S31508000F30606A10F1010F01D1002003E0616A200008
+S31508000F40FFF7E5FBC0B2002819D1A1692800FFF711
+S31508000F50D0F9C0B200280ED1E521E269117001214D
+S31508000F60E9702169B14206D200212000FFF721FC71
+S31508000F70C0B20028E9D0C0B2042800D10220C0B20D
+S31508000F8070BDF8B504000D000020A875A0690028FA
+S31508000F907BD0606A10F1010F1CD00026A76A03E017
+S31508000FA005EB06018875761C3888BF1C010089B2D6
+S31508000FB000290BD0002180B201F00CF980B200287C
+S31508000FC001D1002602E0FF2EEAD30026002005EB19
+S31508000FD0060188750020060005EB0601897DFFE7F6
+S31508000FE00B2E31D2E269925D761CD2B2202AF7D056
+S31508000FF0D2B2052A00D1E522092E0BD189B20029E1
+S3150800100003D12E2305EB0007BB752E2305EB00073E
+S315080010107B72401C05EB00035A7289B2002911D174
+S31508001020D2B2B2F141031A2B09D2092E01D31023E9
+S3150800103000E00823E7693F7B1F4200D0203205EB1A
+S3150800104000039A75401CCBE789B2002908D1002114
+S3150800105005EB00029175E169097B002900D10020A2
+S31508001060002128444172E069C07A2872E0691C3080
+S31508001070FFF7CDF82860E0691830FFF7C1F8A880B7
+S31508001080E0691630FFF7BCF8E880F1BD2DE9F84FA6
+S3150800109004008846D8F80090A06A0090002635001B
+S315080010A003E0009820F81670761C19F805706D1C78
+S315080010B0BFB2202F05DBBFB22F2F02D0BFB25C2FE5
+S315080010C013D119F805002F2803D019F805005C2854
+S315080010D001D16D1CF5E709EB0500C8F80000BFB2A1
+S315080010E0202F20DA5FF0040821E0FF2E01D3062026
+S315080010F093E007F0FF070121380080B201F06AF893
+S315080011000700BFB2002F01D1062086E0BFB2802FAC
+S31508001110C7DABFB23900DFF82C0CFFF7B6F800289B
+S31508001120BFD0062079E05FF0000800E0761E002EAA
+S315080011300AD0009800EB460030F8027CBFB2202F98
+S31508001140F4D0BFB22E2FF1D00020009921F8160056
+S31508001150002E01D1062060E00B222021206AFFF72D
+S315080011607FF8002500E06D1C009830F8150020284F
+S31508001170F9D0009830F815002E28F4D0002D03D0A9
+S3150800118058F0030800E0761E002E06D0009800EB03
+S31508001190460030F8020C2E28F5D15FF00009CA4641
+S315080011A05FF0080B01E058F00308009830F8157056
+S315080011B06D1CBFB2002F32D1206A0078E52802D113
+S315080011C00520216A0870BBF1080F01D15FEA8A0A77
+S315080011D05FFA8AFA1AF00C000C2805D05FFA8AFA28
+S315080011E01AF00300032801D158F002085FEA887054
+S315080011F00FD45FFA8AFA1AF00300012801D158F0D1
+S3150800120010085FFA8AFA1AF00C00042801D158F07F
+S315080012100808206A80F80B800020BDE8F28FBFB26C
+S31508001220202FC0D0BFB22E2F01D1B542BBD1D94590
+S3150800123001D2B54213D1BBF10B0F02D158F0030806
+S31508001240BAE7B54201D058F00308AE42B4D3350028
+S315080012505FF008095FF00B0B5FEA8A0AA5E7BFB2E1
+S31508001260802F10DB0021380080B200F0B3FF0700A2
+S31508001270BFB2002F05D0DFF8840CBFB2384410F88F
+S31508001280807C58F00208BFB2002F07D0BFB23900E1
+S31508001290DFF86C0CFEF7F9FF002803D05F2758F03B
+S315080012A003080FE0BFB2B7F141001A2802D25AF07C
+S315080012B0020A07E0BFB2B7F161001A2802D25AF053
+S315080012C0010A203F206A00F8097019F101096CE744
+S315080012D073B5040025002E6802E00198401C0190B1
+S315080012E0019800782F28F8D0019800785C28F4D067
+S315080012F00020A86001980078202811D28020216A51
+S31508001300C87200212000FFF702FA25E02069C0050F
+S31508001310C00D304410F130013000FFF700FBA86023
+S3150800132001A92000FFF7B2FEC0B2002814D12000A0
+S31508001330FFF7C8FC216AC97AC0B2002806D0C0B235
+S31508001340042802D1490700D4052005E0490703D43B
+S31508001350A879C006DAD40520C0B276BD10B45FF00D
+S31508001360FF310268002A1BD0036800E05B1C1A786C
+S31508001370202A02D31A783A2AF8D11A783A2A0ED1AC
+S3150800138002681478303C521C0A2C06D29A4204D1C0
+S31508001390002C02D121005B1C0360080001E000213B
+S315080013A0080010BC704710B504000020E0705FF01C
+S315080013B0FF30E0622000FEF79CFF002801D00420E1
+S315080013C022E004F22E20FEF71BFF4AF6552188423A
+S315080013D001D0032018E014F16600FEF718FF20F08C
+S315080013E07F40DFF8741B884201D100200CE014F11D
+S315080013F08200FEF70CFF20F07F40DFF85C1B884276
+S3150800140001D1002000E0022010BDF0B585B00F0024
+S31508001410150000213960FFF7A1FF0600002E01D54F
+S315080014200B205EE1DFF8340B50F82640002C01D182
+S315080014300C2056E13C6015F0FE05207800280DD0FA
+S31508001440607800F082FEC10708D4EDB2002D03D003
+S31508001450400701D50A2044E1002042E1002020701F
+S315080014606670607800F060FEC10701D5032038E198
+S31508001470EDB2002D03D0400701D50A2031E1002541
+S3150800148029002000FFF78FFF0600F6B2022E2AD1A8
+S31508001490002704E00020694641F827007F1C042F36
+S315080014A00BD2380120444FF4F7710844017900291A
+S315080014B0F0D00830FEF7ABFEEDE70027002F00D08E
+S315080014C07F1E684650F82750002D05D029002000B9
+S315080014D0FFF769FF060000E00326F6B2022E02DBDC
+S315080014E07F1C042FEDD3F6B2042E01D10120F8E0BB
+S315080014F0F6B2022E01DB0D20F3E014F13B00FEF7F5
+S315080015007FFEB0F5007F01D00D20EAE014F1460019
+S31508001510FEF776FE0700002F04D114F15400FEF7FB
+S3150800152076FE0700A76194F84000A070A07801280D
+S3150800153004D0A078022801D00D20D2E0A078474335
+S3150800154094F83D0060816089002804D0608961892B
+S31508001550491E084201D00D20C3E014F14100FEF7F0
+S315080015604FFE2081207A0F21084201D00D20B8E0D5
+S3150800157014F14300FEF744FE0600002E04D114F1D0
+S315080015805000FEF744FE060014F13E00FEF738FE52
+S3150800159080B2002801D10D20A3E017FA80F1228934
+S315080015A011EB12118E4201D20D209AE0721A63894C
+S315080015B0B2FBF3F2002A01D10D2092E0012640F693
+S315080015C0F6739A4200D302264FF6F6739A4200D370
+S315080015D00326921C6261E56115FA80F020624819BB
+S315080015E0A062F6B2032E14D114F15A00FEF708FED3
+S315080015F0002801D00D2074E02089002801D00D2094
+S315080016006FE014F15C00FEF702FE6062606980001C
+S3150800161015E02089002801D10D2062E0206A3818DB
+S315080016206062F6B2022E02D16069400007E0606986
+S3150800163003214843217D11F0010111EB5000A169F6
+S3150800164000F2FF10B1EB502F01D20D2049E05FF0F8
+S31508001650FF3020612069E06080202071F6B2032EF9
+S3150800166032D114F16000FEF7CBFD01282CD1691C9C
+S315080016702000FEF73EFE002826D10020207104F245
+S315080016802E20FEF7BDFD4AF6552188421CD114F1DD
+S315080016903000FEF7BCFDDFF89419884214D14FF4E8
+S315080016A005702044FEF7B3FDDFF8841988420BD194
+S315080016B04FF406702044FEF7AAFD20614FF4077028
+S315080016C02044FEF7A4FDE0602670DFF8680900886C
+S315080016D0401CDFF860190880DFF858090088E080A8
+S315080016E0002005B0F0BD0000F0A3000838B50500DD
+S315080016F00C00002D11D0286800280ED02868007824
+S3150800170000280AD02868C088A988884205D1286890
+S31508001710407800F01AFDC00703D500202060092094
+S3150800172002E0286820600020C0B232BD13B582B03E
+S315080017301400039800906846FFF710FE002801D5AC
+S315080017400B2020E0DFF8141851F82010002901D0EA
+S3150800175000220A700299002902D00021029A11700B
+S315080017600299DFF8F82742F820100298002802D0DC
+S31508001770E4B2012C01D0002005E0002202A903A84A
+S31508001780FFF743FEC0B204B010BD2DE9F2418FB099
+S3150800179004001500002C01D10920B0E000202060CB
+S315080017A015F01F052A00D2B269460FA8FFF72DFECD
+S315080017B00600F6B2002E40F0A080009801900CA812
+S315080017C00990DFF874080B900F9901A8FFF780FDC0
+S315080017D00600F6B2002E04D10998C07A000600D594
+S315080017E006261C20054253D0F6B2002E09D0F6B2C2
+S315080017F0042E03D101A8FFF7EAFA060055F00805FA
+S3150800180009E09DF80A001121084201D0072602E0E6
+S31508001810680700D50826F6B2002E49D1280747D50D
+S31508001820DFF81888414608980E30FEF703FD414652
+S3150800183008981630FEF7FEFC20200899C872089909
+S315080018400098FFF76CF80700002208990098FFF740
+S3150800185079F8002108981C30FEF7ECFC0120009965
+S31508001860C870002F24D00098D0F82C8000223900A8
+S3150800187001A8FEF7A2FE0600F6B2002E18D14146D0
+S315080018800098FEF736FD0600781E0099C8600FE03E
+S31508001890F6B2002E0CD19DF80A00C00601D5042622
+S315080018A006E0A80704D59DF80A00C00700D5072654
+S315080018B0F6B2002E08D1280701D555F02005009864
+S315080018C0C06A206208986062F6B2002E15D108999F
+S315080018D00098FFF724F8A06008981C30FEF797FCDC
+S315080018E0E06000206074002060610020E0612574DB
+S315080018F0009820600098C088A0803000C0B210B060
+S31508001900BDE8F0812DE9F04782B0050016001F00FA
+S315080019100C000020386069462800FFF7E7FEC0B2D1
+S31508001920002804D1687C0100C9B2002901D0C0B2E0
+S31508001930BDE0287CC00701D40720B8E0E8686969DB
+S31508001940401AB04220D206001EE0C5F81C9068690D
+S31508001950C005C00DD0F50078464500D2B0464246CF
+S315080019606869C005C00D284410F128012000FEF75B
+S315080019706DFC4444686918EB00006861386818EB28
+S3150800198000003860B6EB0806002E00F08F80686904
+S31508001990C005DCD1686900994989491E11EA5028B1
+S315080019A0B8F1000F16D16869002801D1A86803E0CC
+S315080019B0A9692800FEF713FD022803D202206874DD
+S315080019C0022074E010F1010F03D101206874012090
+S315080019D06DE0A861A9690098FEF7F5FC8146B9F1A2
+S315080019E0000F03D102206874022060E018EB090991
+S315080019F05FEA562ABAF1000F30D0009840891AEBF0
+S31508001A000801884203D200984089B0EB080A534679
+S31508001A104A4621000098407800F0A4FB002803D02D
+S31508001A2001206874012042E0287C400611D5E86947
+S31508001A30B0EB090050450CD24FF4007215F128019D
+S31508001A40E869B0EB09004FF4007358432044FEF7E9
+S31508001A50FDFB4FF4007000FB0AF88AE7E869484581
+S31508001A603FF473AF287C400611D50123EA6915F1C6
+S31508001A7028010098407800F087FB002803D0012051
+S31508001A806874012013E0287C10F0BF002874012335
+S31508001A904A4615F128010098407800F063FB0028B3
+S31508001AA03FF453AF01206874012000E00020BDE830
+S31508001AB0F6872DE9F04782B0050017001E000C00D6
+S31508001AC00020306069462800FFF710FEC0B20028E3
+S31508001AD004D1687C0100C9B2002901D0C0B23BE03C
+S31508001AE0287C800701D4072036E0686938186969B8
+S31508001AF088420CD25FF0FF306969471A07E0E86848
+S31508001B00E860306818EB00003060B7EB0807002F74
+S31508001B101DD06869C00540F0A580686900994989A3
+S31508001B20491E11EA5028B8F1000F29D16869002822
+S31508001B3007D1A868002808D100212800FEF781FDF2
+S31508001B4003E0A9692800FEF77CFD002806D1287C59
+S31508001B5050F0200028740020BDE8F687012803D13C
+S31508001B60022068740220F7E710F1010F03D1012063
+S31508001B7068740120F0E7A861A968002900D1A86067
+S31508001B80287C400611D50123EA6915F12801009839
+S31508001B90407800F0F9FA002803D001206874012083
+S31508001BA0DAE7287C10F0BF002874A9690098FEF7C8
+S31508001BB00AFC8146B9F1000F03D10220687402209D
+S31508001BC0CAE718EB09095FEA572ABAF1000F32D0BB
+S31508001BD0009840891AEB0801884203D20098408988
+S31508001BE0B0EB080A53464A4621000098407800F0B0
+S31508001BF0CBFA002803D0012068740120ACE7E86915
+S31508001C00B0EB0900504511D24FF40072E869B0EB09
+S31508001C1009004FF40071484304EB000115F1280050
+S31508001C20FEF714FB287C10F0BF0028744FF40070F0
+S31508001C3000FB0AF82BE0E869484511D06869E968AD
+S31508001C4088420DD201234A4615F1280100984078AA
+S31508001C5000F088FA002803D00120687401207BE789
+S31508001C60C5F81C906869C005C00DD0F500784745D1
+S31508001C7000D2B846424621006869C005C00D28440E
+S31508001C802830FEF7E3FA287C50F0400028744444D4
+S31508001C90686918EB00006861E86869698842BFF4FA
+S31508001CA02EAF68692CE770B582B00400694620003B
+S31508001CB0FFF71CFDC0B2002841D1217C89063ED51C
+S31508001CC0207C40060FD50123E26914F1280100980B
+S31508001CD0407800F059FA002801D0012030E0207C35
+S31508001CE010F0BF002074DFF85453216A0098FEF7FD
+S31508001CF000FBC0B2002822D1666AF07A50F02000B4
+S31508001D00F072A26831002068FEF71CFEE16816F141
+S31508001D101C00FEF78FFA290016F11600FEF78AFA5C
+S31508001D20002116F11200FEF77EFA01200099C8700C
+S31508001D300098FEF7FCFA217C11F0DF012174C0B28D
+S31508001D4076BD0000C0A4000810B582B004002000CB
+S31508001D50FFF7A9FFC0B2002808D169462000FFF79F
+S31508001D60C5FCC0B2002801D100212160C0B216BD51
+S31508001D702DE9F04182B004000D0069462000FFF706
+S31508001D80B5FC0600F6B2002E04D1667C3000C0B25F
+S31508001D90002802D03000C0B2ADE0E068A84203D205
+S31508001DA0207C800700D4E568606900276761002DFC
+S31508001DB06BD0009949894FF4007202FB01F800289C
+S31508001DC010D0411EB1FBF8F16A1EB2FBF8F28A4246
+S31508001DD008D3401EB8F101018843606160692D1A75
+S31508001DE0A06915E0A068002811D100212000FEF79F
+S31508001DF028FC012803D10220607402207BE010F140
+S31508001E00010F03D101206074012074E0A060A06175
+S31508001E10002807D139E0A061616918EB0101616109
+S31508001E20B5EB0805A84509D2217C890716D5010016
+S31508001E302000FEF706FC002814D14546616969189A
+S31508001E406161E90521D001000098FEF7BCFA070098
+S31508001E50002F18D10220607402204CE001002000F7
+S31508001E60FEF7BDFA10F1010F03D1012060740120BD
+S31508001E7041E0022803D3009949698842CBD302205E
+S31508001E806074022037E017EB55276069C00526D035
+S31508001E90E069874223D0207C400611D50123E269F8
+S31508001EA014F128010098407800F06EF9002803D054
+S31508001EB00120607401201EE0207C10F0BF00207411
+S31508001EC001233A0014F128010098407800F04AF9F5
+S31508001ED0002803D00120607401200CE0E761E06867
+S31508001EE06169884205D26069E060207C50F0200074
+S31508001EF020743000C0B2BDE8F6810000749F000867
+S31508001F002CA5000831B58EB00C00002203A90EA836
+S31508001F10FFF77BFA0500EDB2002D18D168460B9045
+S31508001F20DFF814010D900E9903A8FFF7D1F9050003
+S31508001F30EDB2002D0BD10B98C07A000601D5062507
+S31508001F4005E0002C03D0210003A8FFF71AF82800A3
+S31508001F50C0B20FB030BD000046415400109CFE1FB1
+S31508001F6031B59AB00024022269461AA8FFF74DFA3D
+S31508001F70050000980190EDB2002D53D10CA80990E8
+S31508001F802D480B901A9901A8FFF7A2F90500EDB2A2
+S31508001F90002D47D10998C07A000601D5062504E028
+S31508001FA09DF80A00C00700D50725EDB2002D20D1FF
+S31508001FB008990098FEF7B3FC04009DF80A00C006CD
+S31508001FC017D500980F90119400210FA8FEF79FFBD4
+S31508001FD00500EDB2002D0CD100210FA8FEF7F9FD82
+S31508001FE00500EDB2002D00D10725EDB2042D00D174
+S31508001FF00025EDB2002D15D101A8FEF795FF0500C5
+S31508002000EDB2002D07D1002C05D00022210001A831
+S31508002010FEF7D3FA0500EDB2002D03D10098FEF7BE
+S3150800202086F905002800C0B21BB030BD5252614186
+S3150800203072724161509CFE1FE095FE1F00006148C8
+S315080020402DE9FC4104000F00904600262500FFE715
+S31508002050781E864213DA6B46012201A94046FFF72D
+S3150800206051FC009801280AD19DF80400C0B20D2839
+S31508002070EED028706D1C761CC0B20A28E8D1002064
+S315080020802870002E00D100242000BDE8F68170B526
+S3150800209082B004000D00EDB20A2D03D10D212000F7
+S315080020A0FFF7F5FF6668002E17D404EB06000573E4
+S315080020B0761C3D2E0DDB6B46320014F10C012068B0
+S315080020C0FFF7F7FC0098B04201D1002601E05FF067
+S315080020D0FF366660A068401CA06073BD10B594B05A
+S315080020E004000191002002900298039004E02178F0
+S315080020F001A8FFF7CCFF641C20780028F7D10298C6
+S3150800210000280DD46B46029A04A90198FFF7D1FC62
+S31508002110002805D102980099884201D1039801E068
+S315080021205FF0FF3014B010BD10B50400264800F06B
+S31508002130D5F8E4B2002C01D0032004E0224800F0D0
+S31508002140EEF82249085CC0B210BD80B5C0B20028BE
+S3150800215001D0032004E01C4800F009F91B49085C7B
+S31508002160C0B202BD80B5C0B2002801D0042009E083
+S31508002170002B01D1042005E0DBB2134800F0DFF89C
+S315080021801349085CC0B202BD80B5C0B2002801D0B0
+S31508002190042009E0002B01D1042005E0DBB20A483F
+S315080021A000F0D9F80A49085CC0B202BD80B5C0B2D1
+S315080021B0002801D0042005E0C9B2034800F0E2F87F
+S315080021C00349085CC0B202BD0081FE1F74A5000861
+S315080021D044A5000880B2802801DA010020E0002921
+S315080021E00CD080B2FF2801DD002119E0384980B201
+S315080021F001EB4000B0F58070018811E0002100E095
+S31508002200491C89B2802907DA0200314B89B233F8B2
+S31508002210113092B29A42F3D111F1800000F0FF0119
+S31508002220080080B2704730B480B2B0F5805F01DA3A
+S31508002230284A07E0284A05E089B2002902D1A4B253
+S3150800224002EB44021388921C9BB2002B05D00100B6
+S315080022501C0089B2A4B2A14200D235E01488921CAF
+S31508002260210089B2090A04F0FF0480B2A4B214FA64
+S3150800227083F5A842E0DA89B200290CD0022915D0E4
+S315080022800FD3042916D013D3062917D014D3082937
+S3150800229018D015D318E080B29BB2C01A32F81000D5
+S315080022A012E0C11A11F00101401A0DE010380BE0D6
+S315080022B0203809E0303807E01A3805E0083003E02E
+S315080022C0503801E0B0F5E35080B230BC70470000EA
+S315080022D01C9D0008D09800081C9E000870B50500D3
+S315080022E000240026687B002801D0002414E06868D2
+S315080022F0002801D068688047287B002803D1280079
+S3150800230001F0F1FE0600F6B2002E03D001240020EB
+S31508002310687301E0012068732000C0B270BD10B573
+S3150800232000210124027B002A02D101F0A8FA01004B
+S31508002330C9B2002900D100242000C0B210BD38B5AA
+S315080023400024057B002D03D1DBB201F0DCFE04007E
+S315080023502000C0B232BD38B50024057B002D03D15C
+S31508002360DBB201F000FF04002000C0B232BD80B528
+S31508002370010000200A7B002A02D1080001F07FFD37
+S31508002380C0B202BD2DE9F04389B005000F00160062
+S315080023905FF0000800245FF001096846242101F077
+S315080023A019FF287AC00716D42800FFF7E0FFC0B245
+S315080023B0000714D55FF00508FFB2002F08D0FFB25A
+S315080023C00D2F05D0FFB20E2F02D0FFB2042F06D173
+S315080023D05FF0000903E05FF000095FF003085FFAA9
+S315080023E089F9B9F1000F00F07B81FFB2002F29D0DF
+S315080023F0012F35D0022F2AD0032F44D0042F38D0EE
+S31508002400072F00F04D810A2F46D00B2F4DD00C2FE9
+S3150800241054D00D2F5BD00E2F62D01F2F69D0202FDE
+S3150800242000F08680212F00F0A280222F00F0D180B4
+S31508002430232F00F0ED80242F00F01C81252F00F0BB
+S31508002440228135E1280000F050F9804631E1287BE9
+S31508002450002804D13100280001F097FD040028E186
+S31508002460287B002804D13100280001F051FD040022
+S315080024701FE1287B002805D172683168280001F021
+S31508002480CFFB040015E1287B002804D13100280081
+S3150800249001F080FD04000CE1287B002804D13100FE
+S315080024A0280001F0F0FC040003E1287B002804D191
+S315080024B03100280001F021FD0400FAE0287B0028FD
+S315080024C004D13100280001F0E2FC0400F1E0287B89
+S315080024D0002804D13100280001F00AFD0400E8E0D4
+S315080024E0287B002804D13100280001F07BFD040078
+S315080024F0DFE004208DF8000096F82000112815DA90
+S3150800250096F820008DF801009DF801200DF10207CC
+S315080025103100380001F062FE287B002807D101222D
+S315080025206946280001F010FC040000E00A24C0E017
+S3150800253000208DF8000096F82000112815DA96F884
+S3150800254020008DF801009DF801200DF102073100E9
+S31508002550380001F043FE287B002807D1002269468F
+S31508002560280001F0F1FB040000E00A24A1E00120A4
+S315080025708DF8000096F82000112828DA96F8210030
+S31508002580112824DA96F8200096F8211008188DF8F4
+S31508002590010096F820200DF102073100380001F0FD
+S315080025A01DFE96F8212016F11001684696F820308F
+S315080025B01844861C300001F011FE287B002807D13C
+S315080025C000226946280001F0BFFB040000E00A2447
+S315080025D06FE002208DF8000096F82000112815DA21
+S315080025E096F820008DF801009DF801200DF10207EC
+S315080025F03100380001F0F2FD287B002807D10022BF
+S315080026006946280001F0A0FB040000E00A2450E017
+S3150800261005208DF8000096F82000112828DA96F88B
+S315080026202100112824DA96F8200096F821100818B7
+S315080026308DF8010096F820200DF1020731003800C8
+S3150800264001F0CCFD96F8212016F11001684696F89F
+S3150800265020301844861C300001F0C0FD287B002875
+S3150800266007D101226946280001F06EFB040000E04C
+S315080026700A241EE0287B002804D13100280001F036
+S31508002680D1FB040015E008208DF80000287B0028FF
+S3150800269005D100226946280001F056FB040008E02F
+S315080026A0287B002803D1280001F0D8FC040000E0AC
+S315080026B00A24E4B2002C02D15FF0000810E0E4B26C
+S315080026C00F2C02D15FF002080AE0E4B20A2C02D00D
+S315080026D0E4B2332C02D15FF0040801E05FF0010890
+S315080026E04046C0B209B0BDE8F0830020704700003C
+S315080026F0408E002801D0012000E00020C0B27047BB
+S31508002700808FC0B2084201D0012000E00020C0B28C
+S315080027107047006A704709680162704790F8291087
+S3150800272051F0010180F829107047818D51F001019F
+S3150800273081857047808DC0B2400810F0010070474F
+S31508002740818D4FF6FE72114081857047818D51F05B
+S31508002750040181857047818D4FF6FB721140818592
+S31508002760704790F82F20114380F82F10704790F883
+S315080027702F007047406A10F001007047406A400811
+S3150800278010F001007047406AC0F303500F2801D1CA
+S31508002790012000E00020C0B27047828D02F0FF02DF
+S315080027A0C9B252EA01218185704790F8292012F0B2
+S315080027B0F102C9B24900114380F82910704790F810
+S315080027C02E2012F0F002114380F82E10704790F870
+S315080027D0282012F0DD0280F8282090F828201143DE
+S315080027E080F82810704782894FF6EF731A40C9B2ED
+S315080027F052EA01118181704790F8281051F00401BE
+S3150800280080F82810704790F8281011F0FB0180F81E
+S3150800281028107047F8B504000D0000262900206826
+S315080028200068FFF79EFF01F033FD00F2F51701F08F
+S315080028302FFD874201D22E2607E001F03DFD2068D4
+S315080028400068FFF794FF2842F1D13000C0B2F2BD0C
+S3150800285038B5040030210022206810F12005280030
+S3150800286001F02EFD002060720020216881F85000DA
+S315080028700120216848760120216808760120216810
+S315080028800877012021688876002020722068006871
+S31508002890FFF761FF31BDF8B504000D001A2601F0F7
+S315080028A0F7FC00F2E93701F0F3FC874201D22E2645
+S315080028B00DE001F001FD20680068FFF75FFF0028C2
+S315080028C0F1D120680068FFF755FF0028EBD1206892
+S315080028D00068FFF74FFF00282ED100262888C0F38E
+S315080028E0401080B200280AD12888C0F3052080B29B
+S315080028F00D2804D0287810F00300032816D1206884
+S315080029000068FFF73BFF002801D01B260EE0288849
+S31508002910C0F3401080B2002804D1287810F00300D4
+S31508002920032803D1207A50F020002072002E03D10C
+S31508002930207A50F0100020723000F2BD0268002A9A
+S3150800294001D501220A700268520001D501220A70D7
+S315080029500268920001D501220A700068400101D57B
+S315080029600120087070470268D20001D501220A705A
+S315080029700268120101D501220A700068000401D517
+S315080029800120087070470268920201D501220A7078
+S315080029900268D20201D501220A700068000301D537
+S315080029A001200870704738B50500002400208DF80E
+S315080029B0000069462800FFF7C1FF69462800FFF7AF
+S315080029C0D2FF69462800FFF7DEFF2868C00102D556
+S315080029D001208DF800002868C00302D501208DF873
+S315080029E000002878000702D501208DF800009DF820
+S315080029F00000012800D101242000C0B232BD89019F
+S31508002A0007D592B2032A04D0017A51F0080101725F
+S31508002A1003E0017A11F0F7010172704770B50400FE
+S31508002A200E0000250120216881F8580001F030FCCD
+S31508002A304FF47A71B6FBF1F10818461C01F09BFCBD
+S31508002A4001F026FC864201D22E2505E001F034FC71
+S31508002A502068007A0028F1D00020216808722068D2
+S31508002A60807E1F2801D02068057E2800C0B270BD70
+S31508002A70F0B583B0050016001C0000200090002069
+S31508002A800190002700200888C0F3052080B200289E
+S31508002A9005D00888C0F3052080B20F2801D1002789
+S31508002AA069E028680068006900900888C0F3052274
+S31508002AB092B200992800FFF7A2FFF6B2002E57D06F
+S31508002AC0022E0ED006D3042E41D01AD3062E41D09C
+S31508002AD043D34FE0009820606846FFF764FF07007D
+S31508002AE049E0009820606846FFF75DFF0700FFB2DF
+S31508002AF0002F05D0DFF8481D2800FFF78FFF0700D5
+S31508002B0039E0DFF8400D006800022060241DDFF878
+S31508002B10340D0068000EDFF8301D096850EA012000
+S31508002B202060241DDFF8200D0068000EDFF81C1D4C
+S31508002B30096850EA01202060DFF8100D0068000ED1
+S31508002B40DFF80C1D096850EA0120206013E00098A0
+S31508002B50206010E0009820600DE0009880B2019097
+S31508002B6001A8FFF720FF07000098000C206002E08C
+S31508002B70002700E001273800C0B2FEBDF8B5040002
+S31508002B800D0017001E0001200020216881F8510061
+S31508002B90012021684876012021680876290020004E
+S31508002BA0FFF779FEC0B21B2840D0C0B21A283DD024
+S31508002BB03A0029002068006801F0C8FC01F068FBAB
+S31508002BC000F2E93701F0D7FB01F062FB874205D333
+S31508002BD001F072FB206880790028F3D00020216874
+S31508002BE088712068407E1C2807D1069B3200D2B225
+S31508002BF029002000FFF73CFF18E02068407E0228E5
+S31508002C0007D12888C0F3052080B2082801D1022000
+S31508002C100CE02888C0F3401080B2002803D00120B9
+S31508002C20216881F85100200000F0C0FBC0B2F2BD57
+S31508002C30F0B583B004000127002001900025002686
+S31508002C40206890F85000002802D15FF4801601E051
+S31508002C50DFF8886D01A8009001230022DFF8800DB7
+S31508002C60DFF8801D91F8371000EB41012000FFF7CF
+S31508002C7085FF0700FFB2002F1DD120682030009085
+S31508002C8004233200DFF8580DDFF8581D91F83E107E
+S31508002C9000EB41012000FFF771FF0700FFB2002F8C
+S31508002CA002D0FFB2122F0FD1002744F62061200070
+S31508002CB000F0D0FD00E064252800451C322803D228
+S31508002CC02068006A0028C5D53800C0B2FEBD1CB50C
+S31508002CD004000020019001A8009006234FF4D57245
+S31508002CE0DFF8FC0CDFF8FC1C097A00EB4101200038
+S31508002CF0FFF744FFC0B2002812D1019901F0FF0185
+S31508002D00AA2901D0192014E00199C1F30321012948
+S31508002D1001D019200DE00121226882F8501008E040
+S31508002D202168497E022904D10020216881F85000D3
+S31508002D300020C0B216BD7CB504000D00002001902D
+S31508002D4001A8009001232A00DFF8940CDFF8941CF0
+S31508002D5091F8371000EB41012000FFF70FFF06003E
+S31508002D60206890F85000002802D1F6B2122E02D040
+S31508002D70F6B2002E20D120682030009004232A00C5
+S31508002D80DFF85C0CDFF85C1C91F83E1000EB4101A3
+S31508002D902000FFF7F3FE0600F6B2122E02D0F6B2B6
+S31508002DA0002E09D12000FFF743FF0600F6B2002ED9
+S31508002DB002D1200000F092F83000C0B276BD30B5DE
+S31508002DC083B004000120207A10F00805200000F0E6
+S31508002DD0CEF8C0B200280ED101A8009001234FF406
+S31508002DE00072DFF8FC0BDFF8FC1B097C00EB4101E5
+S31508002DF02000FFF7C3FEC0B2002818D1EDB2002D9F
+S31508002E0015D1200000F019FAC0B2002804D000211C
+S31508002E1020680068FFF7DBFC200000F058FAC0B213
+S31508002E20002804D020680068FFF7EDFC0020C0B237
+S31508002E303EBD30B583B00400002500200090002375
+S31508002E400022DFF89C0BDFF89C1B097800EB410198
+S31508002E502000FFF793FEC0B2002809D12000FFF733
+S31508002E6036FF6D1CEDB2022D02DAC0B21928E4D085
+S31508002E70C0B2002830D12068B0F84C102000FFF707
+S31508002E805AFFC0B2002827D12068243000900323B7
+S31508002E900022DFF84C0BDFF84C1B897800EB410168
+S31508002EA02000FFF76BFEC0B2002815D1200000F005
+S31508002EB04CF8C0B200280FD101A9200000F0B2FFDB
+S31508002EC0C0B2002808D19DF80410012900D12B2092
+S31508002ED0217A11F0FC012172C0B23EBD016891F859
+S31508002EE05010002904D1417A51F0020141720CE0D8
+S31508002EF00168096A490004D5417A51F00C0141720A
+S31508002F0003E0417A51F001014172704710B590B063
+S31508002F1004006846402101F05DF901206946200059
+S31508002F2001F060F8C0B200280CD10099009A120A84
+S31508002F3012F47F4252EA1161090403D0217A51F052
+S31508002F4004012172C0B210B010BD10B582B001687C
+S31508002F504C31009105230022DFF8841ADFF8844AF1
+S31508002F60E47801EB4401FFF709FEC0B216BDF0B5DF
+S31508002F7085B00400002500200290DFF8C80DD0E9CE
+S31508002F800023CDE90323207A10F008062068B0F85C
+S31508002F904C0055EA004520683430009003232A0087
+S31508002FA0DFF83C0ADFF83C1A497A00EB41012000B9
+S31508002FB0FFF7E4FD0700FFB2002F49D1F6B2002E55
+S31508002FC046D12000FFF7A2FF0700FFB2002F48D125
+S31508002FD0607AC00645D4200000F059FB0700FFB20E
+S31508002FE0002F3ED12068B0F84C0055EA004502A8EB
+S31508002FF0009001232A00DFF8E809DFF8E81991F8BC
+S31508003000371000EB41012000FFF7B8FD0700FFB2BB
+S31508003010002F26D1012120680068FFF7E4FB012074
+S31508003020019003A8009008230022DFF8B409DFF80E
+S31508003030B41991F8401000EB4101200000F0A6F801
+S315080030400700DDE9030122684432C2E9000108E00D
+S31508003050200000F01CFB0700012120680068FFF72C
+S31508003060C2FB3800C0B205B0F0BD70B586B004002A
+S315080030700D0016000120002001909BB2029300204B
+S315080030808DF8100000208DF8110002A9206800684C
+S3150800309001F061FA01A800900123320029002000FE
+S315080030A0FFF76CFDC0B206B070BD70B586B00400FF
+S315080030B00D001E0000200190607A000704D42868DD
+S315080030C04FF40071484328604FF400700290039251
+S315080030D022208DF8100001208DF8110002A9206821
+S315080030E0006801F038FA5FF080712068006801F026
+S315080030F0FFF901A8009001232A6831002000FFF794
+S315080031003DFDC0B206B070BD2DE9F04105001600C0
+S3150800311001202A68907632002800FFF7C6FF80460D
+S315080031205FFA88F8B8F1000F2CD1069F079C03E0D8
+S31508003130761E4FF400700744002E0CD08023220020
+S31508003140D2B23900280000F0D3FA80465FFA88F830
+S31508003150B8F1000FECD05FFA88F8B8F1000F11D17A
+S31508003160DFF8DC162800FFF759FC80465FFA88F876
+S31508003170B8F1000F06D12868C07E092802D12800B8
+S3150800318000F0FCFA4046C0B2BDE8F08138B504004C
+S315080031909BB2D81C85089BB22000FFF766FFC0B219
+S315080031A000282AD12B00059A0499200000F0A0FADD
+S315080031B0C0B2002821D101F06BF800F2E93501F020
+S315080031C0DAF801F065F8854201D22E2005E001F013
+S315080031D073F82068007A0028F1D000202168087268
+S315080031E02068807E1F2801D1002006E00120216882
+S315080031F081F85100200000F0D9F8C0B232BD10B5F0
+S3150800320082B00C00694600F00DFEC0B2002812D14B
+S315080032109DF80000012804D1E4B2012C01D1002058
+S3150800322009E09DF80000002804D1E4B2002C01D181
+S31508003230002000E01020C0B216BD7CB504000025B1
+S31508003240012600200190200000F021FA0600F6B2BF
+S31508003250002E39D140212068006801F058F920680D
+S31508003260406C000A400727D52068B0F84C0055EA9C
+S31508003270004501A8009001232A00DFF86407DFF85B
+S31508003280641791F8371000EB41012000FFF776FC30
+S315080032900600F6B2002E0FD101A8009001230222E3
+S315080032A0DFF83C07DFF83C1791F83A1000EB4101CC
+S315080032B02000FFF763FC0600F6B2002E04D10221B7
+S315080032C020680068FFF783FA3000C0B276BD30B5D3
+S315080032D093B0040002A8402100F07CFF0125206875
+S315080032E090F8440010F00F0F29D0200000F0CFF915
+S315080032F00500EDB2002D22D10120019002A8009010
+S315080033004023DFF8542DDFF8D806DFF8D816897978
+S3150800331000EB41012000FFF739FF0500EDB2002D53
+S3150800332006D19DF8180010F00F00012800D00125DD
+S31508003330EDB2002D03D120680068FFF75DFA28007A
+S31508003340C0B213B030BD70B504000E0000250120D0
+S31508003350216881F8580000F09BFF4FF47A71B6FB9C
+S31508003360F1F10818461C01F006F800F091FF8642B4
+S3150800337001D22E2511E000F09FFF206880790128F0
+S315080033800BD02068C079012807D04FF40041206887
+S31508003390006801F0C8F80028E5D100202168887186
+S315080033A000202168C8712800C0B270BD2DE9F0411F
+S315080033B00400DFF82C06DFF82C16097B00EB410623
+S315080033C0252500275FF00008DFF8DC8C41462068D9
+S315080033D0006801F09CF8206800790F21084205D1A1
+S315080033E020680068FFF7C6F9002804D002212000EB
+S315080033F0FFF710FA0500206800797021084205D108
+S3150800340020680068FFF7BAF9002804D004212000D4
+S31508003410FFF700FA0500DFF8948C4146206800683B
+S3150800342001F07DF8206890F85100012833D1002278
+S3150800343031002068006801F089F8DFF804142000DC
+S31508003440FFF781FF0500EDB2002D14D12068006852
+S31508003450FFF74EF900280ED02525390020680068A8
+S3150800346001F05DF841462068006801F058F8062129
+S315080034702000FFF7CFF920680068FFF739F9002820
+S3150800348018D120680068FFF77EF9002801D02425A6
+S3150800349010E025250EE020680068FFF729F90028C6
+S315080034A008D120680068FFF76EF9002801D02425A6
+S315080034B000E0252558F0805841462068006801F04C
+S315080034C017F8206805772800C0B2BDE8F08170B506
+S315080034D004000D000026A8060AD51E2021680876D5
+S315080034E020212068006801F01AF801202168C871B7
+S315080034F0E8060AD51E20216808761021206800688B
+S3150800350001F00DF801202168C871A8070ED51F2003
+S315080035102168887602212068006801F000F8207A80
+S3150800352010F0DF002072012021680872E8070ED526
+S315080035301C202168487601212068006800F0EFFF0A
+S31508003540207A10F0EF00207201202168887130007F
+S31508003550C0B270BD70B504000D00012620688580D4
+S31508003560E8070FD5022021684876207A10F0EF0088
+S3150800357020725FF480312068006800F0D0FF0120D7
+S3150800358021688871A8070FD5032021684876207A14
+S3150800359010F0EF0020725FF400312068006800F038
+S315080035A0BEFF01202168887168070FD504202168AD
+S315080035B04876207A10F0EF0020725FF480212068A8
+S315080035C0006800F0ACFF01202168887128070FD534
+S315080035D0052021684876207A10F0EF0020725FF403
+S315080035E000212068006800F09AFF01202168887190
+S315080035F0E8060FD5062021680876207A10F0DF0045
+S3150800360020725FF480112068006800F088FF0120AE
+S315080036102168C871A8060FD5072021680876207A80
+S3150800362010F0DF0020725FF400112068006800F0D7
+S3150800363076FF01202168C87168060FD50820216821
+S315080036400876207A10F0DF0020725FF48001206887
+S31508003650006800F064FF01202168C871E80513D5E9
+S3150800366009202168C876207A10F0EF002072207AA7
+S3150800367010F0DF0020725FF080712068006800F0AB
+S315080036804EFF0120216888713000C0B270BD30B588
+S3150800369083B0040001200025002001902068B0F8BE
+S315080036A04C0055EA004501A8009001232A00CC48A1
+S315080036B0CC49497B00EB41012000FFF75FFAC0B215
+S315080036C0002813D10198400A10F00E00042801D1F1
+S315080036D000200BE001A8009002232A00C048C14937
+S315080036E0C97900EB41012000FFF748FAC0B23EBD98
+S315080036F02DE9F04104000D0016001F0001205FF0BF
+S31508003700000800F0C5FD00F2E93800F034FE00F0CC
+S31508003710BFFD804501D22E2005E000F0CDFD2068D2
+S31508003720C0790028F1D000202168C8712068007E81
+S315080037301E2819D15FF0000812E0F6B2012E04D156
+S3150800374020680068FEF7E5FF2860F6B2022E04D16D
+S31508003750290020680068FEF7DEFF2D1D18F1010814
+S31508003760B845EAD3002006E00120216881F8510017
+S315080037702000FFF71BFEC0B2BDE8F08130B583B06C
+S31508003780040000250020002001900121206800681F
+S31508003790FEF7B6FF002829D001202068007F2428DC
+S315080037A00ED101A8009001230022DFF80409DFF8F2
+S315080037B00419097B00EB41012000FFF7DFF905003A
+S315080037C0EDB2002D3AD0EDB2252D37D004212000D8
+S315080037D0FFF720F80500EDB2002D2FD180212068D3
+S315080037E00068FEF78DFF002828D127E00221200077
+S315080037F0FFF710F80500EDB2002D1FD101A80090C3
+S3150800380001230022DFF8A808DFF8A818097B00EBD7
+S3150800381041012000FFF7B2F90500EDB2252D0DD0C4
+S3150800382004212000FEF7F6FF0500EDB2002D05D1B4
+S31508003830802120680068FEF763FF002837BD000076
+S3150800384040420F0010C0014814C0014818C0014882
+S315080038501CC0014810B50C002F2000F019FD4FF4CC
+S315080038607A71B4FBF1F10818441C01E000F024FD5C
+S3150800387000F00EFDA042F9D30020C0B210BD70B50D
+S315080038800400012500F004FD00F2E93600F000FD11
+S31508003890864201D22E2507E000F00EFD206800685A
+S315080038A0FEF748FF0028F1D0EDB22E2D21D0206872
+S315080038B00068FEF74BFF20680068FEF72FFF2068B8
+S315080038C090F85A00002814D12000FFF7B2FA050034
+S315080038D0EDB2002D02D0EDB22B2D0AD12000FFF754
+S315080038E06EFA0500EDB2002D03D10120216881F89A
+S315080038F05A002800C0B270BD38B50C00150000216A
+S315080039000091694600F004FBC0B2002804D1009972
+S315080039102A19914200D23320C0B232BDF0B583B025
+S31508003920040015001E00002001900127607A000798
+S3150800393005D44FF4007041434FF40070454301A885
+S31508003940009001230A002648264991F8201000EB2A
+S3150800395041012000FFF712F90700FFB2002F0DD131
+S3150800396001A8009001232A001D481E4991F821103C
+S3150800397000EB41012000FFF701F90700FFB2002F15
+S3150800398028D101A80090022300221548154991F86C
+S31508003990261000EB41012000FFF7F0F8070000F0C1
+S315080039A077FC4FF47A7101FB0600451C00F070FCA9
+S315080039B0854201D22E270DE000F07EFC20680068C3
+S315080039C0FEF7DCFE0028F1D120680068FEF7D2FE7B
+S315080039D00028EBD13800C0B2FEBD00000000104040
+S315080039E0F49F000844A0000838B505002C24287A5E
+S315080039F040063FD401212800FEF70CFF0400E4B27C
+S31508003A00002C37D128680068FEF79AFE012128683D
+S31508003A100068FEF7C2FE28680068FEF786FEF320F7
+S31508003A202968096888864EF2FF0029680968C886E9
+S31508003A3033202968096808874EF2FF002968096853
+S31508003A4048870E2128680068FEF7B9FE072128680E
+S31508003A500068FEF7AAFE287A50F043002872002074
+S31508003A60009002E00098401C00900098DFF8481685
+S31508003A708842F7D32000C0B232BD10B50400012039
+S31508003A80217A490606D52000FEF7E2FE012120002C
+S31508003A90FEF7C0FEC0B210BD74B583B004000D00B9
+S31508003AA01E002A20012122685176012122681176FA
+S31508003AB0012122689176216891F85A1000291BD0B5
+S31508003AC0320003992000FFF717FFC0B2002813D170
+S31508003AD0012120680068FEF786FE01200190009506
+S31508003AE0DFF8CC05DFF8CC15897C00EB4103320002
+S31508003AF003A92000FFF708FBC0B204B070BD7CB56F
+S31508003B0004000D0016002A200122216891F85A1097
+S31508003B10002921D031002000FFF7EEFEC0B20028B0
+S31508003B201AD1607A000702D44FF400704643012187
+S31508003B3020680068FEF757FE0120019000954FF4B3
+S31508003B4000733200DFF86805DFF86815497C00EB7A
+S31508003B5041012000FFF71AFBC0B276BD74B583B0E9
+S31508003B6004000D001E002A20012122685176012139
+S31508003B7022681176012122689176216891F85A10F7
+S31508003B8000291BD0320003992000FFF7B5FEC0B20A
+S31508003B90002813D1002120680068FEF724FE0220C1
+S31508003BA001900095DFF80805DFF80815497E00EB57
+S31508003BB04103320003A92000FFF7A6FAC0B204B0F9
+S31508003BC070BD7CB504000D0016002A20012221686C
+S31508003BD091F85A10002921D031002000FFF78CFEF9
+S31508003BE0C0B200281AD1607A000702D44FF40070D8
+S31508003BF04643002120680068FEF7F5FD0220019083
+S31508003C0000954FF400733200DFF8A404DFF8A4141B
+S31508003C10097E00EB41012000FFF7B8FAC0B276BD75
+S31508003C202DE9F0479AB005000C0016005FF02A0847
+S31508003C30002710A8DFF88414282200F0DFFA0022F3
+S31508003C4000200021002300205FF0000A684640217A
+S31508003C5000F0C0FA5FF000090120296848760120C3
+S31508003C6029680876012029688876287A400702D5C7
+S31508003C705FF00F0854E0301B471C3A00210028006B
+S31508003C80FFF73AFE80465FFA88F8B8F1000F47D189
+S31508003C906946280000F0A6F980465FFA88F8B8F168
+S31508003CA0000F3DD10398000A10F003000399890A12
+S31508003CB011F03F01029A120E9DF80C3003F0FF0333
+S31508003CC053EA0222029B1B0D13F00F03C9B292B2EC
+S31508003CD0B1FBF2F151FA80F910A8DBB250F82300D3
+S31508003CE092B202FB00FA03E01AEB0404B7EB0A07E8
+S31508003CF057450CD34B461AEB040221002800FFF760
+S31508003D000DFE80465FFA88F8B8F1000FECD0002F58
+S31508003D1006D04B46320021002800FFF7FFFD8046FB
+S31508003D2028680068FEF72AFD0028F9D12868006887
+S31508003D30FEF720FD0028F3D14046C0B21AB0BDE810
+S31508003D40F087000054A500082DE9F04184B004006E
+S31508003D500D0016005FF0010800272000FFF797FC0A
+S31508003D6080465FFA88F8B8F1000F56D1002120681E
+S31508003D700068FEF738FD6878401C40084000871C3C
+S31508003D8002A8009001233A00C948CA49097C00EBF9
+S31508003D9041012000FEF7F2FE80465FFA88F8B8F186
+S31508003DA0000F3AD10220019000953B009BB20022F9
+S31508003DB0BF48C04991F82A1000EB41012000FFF7DF
+S31508003DC0E5F9804620680068FEF7D8FC0028F9D196
+S31508003DD002A8009001234FF40072B548B549097C42
+S31508003DE000EB41012000FEF7C9FE80462068006806
+S31508003DF0FEF7C4FC0028F9D120680068FEF7BAFC73
+S31508003E000028F3D15FFA88F8B8F1000F05D1310020
+S31508003E10C9B22000FFF7F3F980464046C0B204B0A5
+S31508003E20BDE8F08130B583B004000D000020019094
+S31508003E30002201202068B0F84C0052EA004201A88E
+S31508003E40009001239A489B49497B00EB41012000D9
+S31508003E50FEF794FEC0B200280FD10199890106D554
+S31508003E6001212970217A51F00801217205E000210B
+S31508003E702970217A11F0F7012172C0B23EBD007A8D
+S31508003E8010F00F007047407A0860002070470268FB
+S31508003E90526A1205120D0A800268926A03685B6A02
+S31508003EA01B0C53EA02424A600268926A120C0A72B2
+S31508003EB00268D26A120E4A720268D26A120C8A72B2
+S31508003EC00268D26A120ACA720268D26A0A73026859
+S31508003ED0926A120E4A730268126B120A8A73026891
+S31508003EE0126BCA730068006B000C087400207047D8
+S31508003EF00068006A08600020704710B50F22006845
+S31508003F0034304C1C0100200000F068F9002010BD78
+S31508003F1070B588B004000D0000200021607A4007C3
+S31508003F2014D567480FC804AE86E80F0004A9200018
+S31508003F30FFF7E3FFC0B2002824D10699059A120CB0
+S31508003F4052EA0141491C890229601BE05D480FC8F5
+S31508003F506E4686E80F0069462000FFF7CEFFC0B21E
+S31508003F6000280FD10199C1F3C231891C029A40F683
+S31508003F70FC7313EA8202019B52EA9372521C12FAEC
+S31508003F8001F12960C0B208B070BD4FF40070088016
+S31508003F900020704770B588B004000D000020607AD4
+S31508003FA040070ED548480FC804AE86E80F0004A996
+S31508003FB02000FFF7A2FF0599C1F3C611491C296025
+S31508003FC00DE042480FC86E4686E80F006946200095
+S31508003FD0FFF793FF0199C1F3C611491C2960C0B2C6
+S31508003FE008B070BD70B584B004000D00002600202E
+S31508003FF0029001202000FFF74AFBC0B2002827D113
+S315080040002068B0F84C0056EA004602A80090012342
+S3150800401032002748274991F8371000EB4101200064
+S31508004020FEF7ACFDC0B2002812D101212068006855
+S31508004030FEF7D9FB012001900095402300221C4879
+S315080040401C4991F83B1000EB41012000FFF79EF850
+S31508004050C0B204B070BD00000100008038B504008D
+S3150800406001250022207A80071AD42068B0F84C006F
+S3150800407052EA00420020009000230D480D49C97BF2
+S3150800408000EB41012000FEF779FD0500EDB2002D99
+S3150800409006D12000FEF7DCFB0020216881F85A00D3
+S315080040A02800C0B232BD00000000FF100080FF00EB
+S315080040B0F49F000844A00008A0860100E4A10008B7
+S315080040C080A4000890A40008A0A40008B0A40008D2
+S315080040D080B501002C200A7A520602D40800FFF7A0
+S315080040E083FCC0B202BD10B504002068006800F069
+S315080040F0EDF9022000F063FA2000FFF7BEFC20006D
+S31508004100FFF7E6FF10BD38B50400207AC50701D5CC
+S31508004110032519E0000701D5052515E0DBB2012BBB
+S3150800412003D12000FFF7EBFC03E0DBB22000FFF72A
+S31508004130B3FCC0B2002801D1002505E0C0B233287F
+S3150800414001D1042500E0012520680068FEF716FB6A
+S315080041500028F9D120680068FEF70CFB0028F3D187
+S315080041602800C0B232BD38B50400207AC50701D58B
+S31508004170032520E0050701D505251CE0400701D5E4
+S31508004180022518E0DBB2012B03D12000FFF719FD49
+S3150800419003E0DBB22000FFF7E1FCC0B2002802D042
+S315080041A0C0B21E2801D1002505E0C0B2332801D1CE
+S315080041B0042500E0012520680068FEF7DFFA0028DC
+S315080041C0F9D120680068FEF7D5FA0028F3D128004F
+S315080041D0C0B232BD002200F00BBA000062B38B07F2
+S315080041E008D0521E11F8013B00F8013B00F024806C
+S315080041F08B07F6D1830740F0208000BF103A07D31B
+S3150800420030B4B1E83810103AA0E83810F9D230BC0A
+S31508004210530724BFB1E80810A0E8081044BF51F8B6
+S31508004220043B40F8043BD20724BF31F8022B20F8A0
+S31508004230022B44BF0B7803707047083A07D3B1E8DE
+S315080042400810083A40F8043B40F804CBF7D2530765
+S31508004250E4E7000080B500F00DF810481049086042
+S3150800426000201049086005200F49086000200F4902
+S31508004270086001BD00200C49086070470A480068BC
+S31508004280C00304D509480068401C084908607047FF
+S3150800429080B5FFF7F3FF0548006802BD7F320200CC
+S315080042A014E000E018E000E010E000E0209CFE1FAB
+S315080042B080B500F0D1F901BD80B500F0D2F901BD95
+S315080042C062F30F2262F31F42401810F0030308D06E
+S315080042D0C91A1FD3DB0748BF00F8012D28BF20F8ED
+S315080042E0022D130030B414461546103928BF20E9AC
+S315080042F03C00FAD8490728BF20E90C0048BF40F817
+S31508004300042D890028BF20F8022D48BF00F8012D8A
+S3150800431030BC7047C91818BF00F8012DCB0728BF55
+S3150800432000F8012D7047000090F8282090F82830F2
+S3150800433012F07F021143194380F82810704790F84D
+S31508004340282090F8283012F0BF021143194380F84C
+S31508004350281070475248006850F00100504908601C
+S3150800436070474F49096831F0F001C0B251EA0010B0
+S315080043704B490860704780B54A4800680068008E57
+S3150800438049490880474800680068408E47490880C0
+S3150800439045480088000404D5444801884148FFF789
+S315080043A0D9F841480088400404D03F4801883D4870
+S315080043B0FFF78DF801BD80B5FFF7CCFF0820FFF7A2
+S315080043C0D0FF3B4882683A4801793948006800F0CE
+S315080043D0CDF937488068027B35480179344800684A
+S315080043E000F04CFA3348826832480179314800684F
+S315080043F000F0BCF92F488068027B2E4801792D48C9
+S31508004400006800F03BFA2C4882682B4801792A4854
+S31508004410006800F0ABF928488068027B26480179D5
+S315080044202548006800F02AFA24488268234801795A
+S315080044302248006800F09AF920488068027B1F48E5
+S3150800444001791E48006800F019FA1D4882681C4860
+S3150800445001791B48006800F089F919488068027BD1
+S31508004460174801791648006800F008FA1548826866
+S31508004470144801791348006800F078F911488068F3
+S31508004480027B104801790F48006800F0F7F980218F
+S315080044900D48FFF749FF40210B48FFF750FF01BDC4
+S315080044A09C4000500081FE1F549CFE1F569CFE1F18
+S315080044B008A5000814A50008D8A40008E4A4000864
+S315080044C0F0A40008FCA4000800C0014880B5034811
+S315080044D000F07AF8014800F05FF801BD40000010CE
+S315080044E0828E0A438286C28E52EA1141C18670477D
+S315080044F038B504000D0029002000FFF7F1FF208FD2
+S3150800450028432087608F50EA1540608731BD028FA7
+S315080045108A430287428F32EA1141418770470186F2
+S31508004520090C41867047B1F5803F06DA008E0842CD
+S3150800453001D0012008E0002006E0408E090C084260
+S3150800454001D0012000E00020C0B2704782600988CF
+S31508004550C181002070470A6882804A68C2808289C1
+S315080045604FF6DF731A400B7A1A4382810A7A002AB9
+S3150800457004D182894FF6FD731A40828182894FF6EB
+S31508004580F3731A40497A52EA810181817047000023
+S31508004590DFF8480000687047010F20F07040DFF828
+S315080045A040200C2359435050704780B5FFF7F0FF61
+S315080045B0DFF83010096811F00101C84002BDC0B229
+S315080045C0DFF8241008607047010F20F07040DFF80C
+S315080045D01C200C235943505070470000849CFE1F32
+S315080045E014440050144600500446005048460050F3
+S315080045F000B500BF130096469446103928BFA0E8B8
+S315080046000C50FAD85FEA417C28BF0CC048BF40F876
+S31508004610042BC90728BF20F8022B48BF00F8012B36
+S3150800462000BD0000406AC84010F001007047D0F88D
+S31508004630140110F440707047C0F81811704780B51F
+S315080046400D214548FFF7EEFF002801D1002002E0C2
+S3150800465000F050F9012002BD80B5642000F022F96F
+S3150800466001BD80B500F021F901BD00B5C7B06846A7
+S315080046704FF48C71FFF7AEFD69463848FDF742FCEA
+S31508004680002808D10098002805D09DF80800C00623
+S3150800469001D4012000E0002047B000BD2F48704734
+S315080046A080B500202E4981F828020A222D492C4877
+S315080046B0FDF76BF8002803D10120294981F8280263
+S315080046C001BD80B5264890F82802012802D1244861
+S315080046D0FDF73AFB2148FDF743FC01BD80B52048AC
+S315080046E090F82802012802D11D48FDF72DFB01BDCF
+S315080046F038B504001A4890F82802012827D1184925
+S315080047002000FDF7EBFC002821D50020144981F88C
+S3150800471028021348FDF718FB19E0217889B21248D8
+S3150800472000F03BF9FFF7B4FD10F10A050E48FFF754
+S315080047307EFFC00505D4FFF7BFFDFFF7A9FD85423B
+S31508004740F4D24FF480710848FFF776FF641C20788E
+S315080047500028E2D131BD0000008F0248C0A300083E
+S31508004760B493FE1F10A400080000034070B4C9B239
+S315080047708B1000EB8303C9B28C1000EB8404246908
+S31508004780F82511F00306F6B2F600B540AC431C61F5
+S31508004790436F03244D00AC40A3434367224B984222
+S315080047A002D0224B984205D1036E01248C40A343C4
+S315080047B0036624E053688B404360C9B2CB1000EB14
+S315080047C08303C9B2CC1000EB8404246C072511F0CE
+S315080047D00706F6B2B600B540AC431C64C9B2CB10A6
+S315080047E000EB8303C9B2CC1000EB8404246C157A61
+S315080047F011F00706F6B2B600B5402C431C64C9B2E0
+S315080048008B1000EB8303C9B28C1000EB840000699F
+S31508004810127811F00301C9B2C90012FA01F108436E
+S31508004820186170BC70470000008E0248008F02486D
+S3150800483070B4C9B28B0800EB8303C9B28C0800EBCD
+S3150800484084042469F82511F00306F6B2F600B5408B
+S31508004850AC431C61C9B28B0800EB8303C9B28C0850
+S3150800486000EB84000069D2B211F00301C9B2C90095
+S3150800487012FA01F10843186170BC704730B4436FEF
+S3150800488003244D00AC40A3434367436FD2B24900AB
+S3150800489012FA01F11943416730BC704712FA01F167
+S315080048A04160704717490880704780B5FFF7F0FCEC
+S315080048B01549096888421CD314480078002808D18D
+S315080048C0012012490870012209211148FFF7E6FF65
+S315080048D008E000200D4908705FF4803209210C4871
+S315080048E0FFF7DCFFFFF7D4FC06490988401806499C
+S315080048F0086001BD80B55FF4803209210448FFF7DE
+S31508004900CDFF01BD529CFE1F149CFE1F669CFE1F18
+S3150800491000850248806B10F080007047C1647047BC
+S3150800492070B504000D001026200000F05BF8E87949
+S31508004930002800D0EE7932002968200000F07BF8C4
+S31508004940A879401EB11CC901090A090251EA4000AA
+S3150800495040F4403050F00100E0632879401E00061C
+S3150800496050F4817060636879002806D0606B6979B5
+S31508004970491E50EA0140606305E0606B2979491ECB
+S3150800498050EA014060634FF4A060A0635FF0FF3017
+S31508004990E064B5F90800206470BD38B504000D0060
+S315080049A0D4F8080110F0E06F0DD12000FFF7B2FF30
+S315080049B08028FAD04FF400512000FFF7AFFFADB2C0
+S315080049C0C4F8805002E0ADB2C4F8805131BDD0F8C9
+S315080049D00C1111F0E06F01D1406D01E0D0F81C0117
+S315080049E080B2704710B504005848844202D058482F
+S315080049F0844203D1574800F088F812E056488442AA
+S31508004A0002D05648844203D1554800F07EF808E0A3
+S31508004A105448844202D05448844202D1534800F094
+S31508004A2074F80320E060E068C007FCD5206C000934
+S31508004A300001206410BDF8B504000E001500642EB0
+S31508004A4034D3002D32D0FFF7B0FD6421B0FBF1F16D
+S31508004A506420B6FBF0F60123012040F2FF3E40F247
+S31508004A60FF3212E002FB01F705FB06FCB7FBFCF779
+S31508004A705FEA972CBF05BF0DBCF5806F04D277455A
+S31508004A8002D2BE4660461300521E002AEAD153F4EB
+S31508004A90004121616169364A11406A1E51EA822144
+S31508004AA0401E51EA00406061002000E00120C0B2CB
+S31508004AB0F2BD30B4D0F8084134F0E064C0F80841DB
+S31508004AC0D0F808412B4D2C4054EA03231943D2B29F
+S31508004AD051EA0261C0F8081130BC704730B4D0F80A
+S31508004AE00C4134F0E064C0F80C41D0F80C41224D7A
+S31508004AF02C4054EA03231943D2B251EA026151F019
+S31508004B008051C0F80C1130BC704780B511498842F5
+S31508004B1008D14FF40060FFF757FD4FF40060FFF728
+S31508004B203BFD12E00E49884206D11448FFF74CFDBA
+S31508004B301248FFF731FD08E00C49884205D11048B4
+S31508004B40FFF742FD0E48FFF727FD01BD00000340B1
+S31508004B500002034008000340000002480002024821
+S31508004B60080002480040024800420248084002483D
+S31508004B70EF8000FCC0C0FFF8C0C0FFEF8000001047
+S31508004B8000010010C2788A18DFF83833DA708378A3
+S31508004B900A0092B2120AD218DFF828339A704278BD
+S31508004BA0DFF820335A700078DFF818231070DFF822
+S31508004BB014038278080080B2000A80B2824212DAB0
+S31508004BC0DFF800034078401CDFF8F8225070DFF861
+S31508004BD0F4024078002806D1DFF8E8020078401C85
+S31508004BE0DFF8E0221070DFF8DC02C07889B201F045
+S31508004BF0FF0188421EDADFF8CC028078401CDFF815
+S31508004C00C4128870DFF8BC028078002812D1DFF859
+S31508004C10B4024078401CDFF8AC124870DFF8A402F2
+S31508004C204078002806D1DFF89C020078401CDFF89F
+S31508004C3094120870704710B492B20A44531E0BE0DF
+S31508004C400A7812024C78121910180400A4B292B20B
+S31508004C50944200D2401C891C9942F1D3994208D14A
+S31508004C6009780A021018010089B292B2914200D25C
+S31508004C70401C80B210BC704780B51422DFF8481279
+S31508004C800020FFF7D8FF80B2002802D14FF6FF7048
+S31508004C9002E080B201F036FA80B202BD10B5DFF844
+S31508004CA02C12097C0902DFF82422527C8918B1F1FA
+S31508004CB0140454FA80F00822DFF8141280B2FFF7C1
+S31508004CC0BAFF220092B2DFF80C1280B2FFF7B3FFE8
+S31508004CD080B2002802D14FF6FF7002E080B201F0E0
+S31508004CE011FA80B210BD80B50620FFF7D7FF02BDC6
+S31508004CF00020DFF8E41108700EE00020DFF8DC1170
+S31508004D00DFF8D421127821F81200DFF8CC010078F8
+S31508004D10401CDFF8C4110870DFF8BC0100780028D1
+S31508004D20EBD000206C4908700CE000206C496A4AF8
+S31508004D30127868235A431144487667480078401C1D
+S31508004D4065490870644800780028EED04FF4806002
+S31508004D50644908800020604908700CE00020624918
+S31508004D605D4A127840235A43114488805A4800788D
+S31508004D70401C59490870584800780028EED07047FA
+S31508004D8070B504000D000CE05748534909784022D5
+S31508004D905143084486885348008801F0B3F986428F
+S31508004DA011D150480088401C4E4908804D4800885B
+S31508004DB0B0F5FA4F03DB4FF480504A4908800020CB
+S31508004DC04549087004E044480078401C4249087088
+S31508004DD0414800780028D7D0002600203E490870B0
+S31508004DE004E03D480078401C3B4908703A48007882
+S31508004DF000280FD13C4838490978402251430844D5
+S31508004E0080880028EDD13848334909784022514333
+S31508004E1000EB0106002E01D1002018E03148008879
+S31508004E203049098889B2090A51EA0020B080F5801C
+S31508004E30002C05D1042100223000FFF741FA03E0D7
+S31508004E40208830806088708040203072300070BDC5
+S31508004E500021214A117004E01F490978491C1E4A9D
+S31508004E6011701D49097800290CD11C491A4A127873
+S31508004E7031F812100029EFD11849174A127821F88B
+S31508004E801200FFE7704780B5010089B2174800682D
+S31508004E900830FFF777FE0B4800781449096808724E
+S31508004EA008484078114909684872064880780F49C9
+S31508004EB0096888720348C0780C490968C87201BD38
+S31508004EC000000000489CFE1F1E81FE1F1081FE1F69
+S31508004ED02A81FE1F3281FE1F6B9CFE1F5C9CFE1FF3
+S31508004EE06499FE1F609CFE1F3C9BFE1F3C9CFE1F98
+S31508004EF010B5DFF8141E0C68C0B2042806D1DFF816
+S31508004F003C0E0088002840F061821DE0DFF8301E64
+S31508004F10DFF8302E1160DFF82C1E0968DFF8282E1E
+S31508004F201160C0B2032818D1607E10F00F00032864
+S31508004F300AD1208A002807D10820DFF8281E087021
+S31508004F4001F0ABF900F0A9BF0020DFF81C1E0880AD
+S31508004F500020DFF8101E087010BDC0B2022840F00D
+S31508004F60D180DFF8080EC078401CDFF8001EC87034
+S31508004F70DFF8F80DC07800281ED1DFF8F00D80782C
+S31508004F80401CDFF8E81D8870DFF8E00D80780028FF
+S31508004F9012D1DFF8D80D4078401CDFF8D01D4870D4
+S31508004FA0DFF8C80D4078002806D1DFF8C00D007874
+S31508004FB0401CDFF8B81D08700020DFF8AC1D08801B
+S31508004FC00020DFF8781D0880607E072802D0607E02
+S31508004FD0052808D1A07E401CA076A07E782801D19D
+S31508004FE000206076B0E7607E0028FBD0208A002883
+S31508004FF07AD0A07E411EA176C0B20028F2D1E07E0A
+S31508005000082808D0607E022802D0607E012810D1C8
+S31508005010E07E05280DD1002060768020DFF8441D4B
+S31508005020087001F03AF91420DFF8B01D81F82F0056
+S31508005030B0E2E07E052801DB042000E0E07E0321E3
+S3150800504011FA00F0A076E07E401CE076607E10F053
+S315080050500F00C0B201280AD0022835D0032839D05B
+S3150800506004283FD006283DD008283BD0BAE71020B0
+S31508005070DFF8681D81F82F00DFF8600D90F82F0023
+S3150800508050F00200DFF8541D81F82F000220DFF8E7
+S315080050904C1D81F836000420DFF8401D81F83700E2
+S315080050A00620DFF8381D81F838000A20DFF82C1DA5
+S315080050B081F839002C20DFF8B01C08806020DFF862
+S315080050C01C1D81F82E006EE20020DFF8101D81F805
+S315080050D02F00D1E70420DFF88C1C087001F0DDF8FA
+S315080050E000F01FBF00F074BE607E10F00F000328AA
+S315080050F07FF478AF0820DFF86C1C087001F0CDF853
+S3150800510000F0CBBEC0B2052826D1DFF8040E006831
+S31508005110808800281FD00020DFF8EC1B0860DFF825
+S31508005120F40DDFF8201C0860DFF8180C0068DFF8BB
+S31508005130181C08600020DFF8041C0880DFF8FC0B48
+S315080051400088DFF8241C08800820DFF8181C08707F
+S3150800515001F05FFCD3E6F7E6DFF8800C807B452894
+S315080051607FF4F2AEDFF8000C0088DFF8701C097CCB
+S315080051700902DFF8682C527C8918884216DBDFF8AA
+S315080051805C0C007C0002DFF8541C497C4018DFF8F0
+S31508005190D81B0880DFF8440C007D3F21084204D163
+S315080051A0DFF8380C407D002801D0CDE6CCE6DFF8E4
+S315080051B0B80D0088DFF8B41D0988884207D1DFF8E2
+S315080051C0A80D4088DFF8A41D4988884210D0DFF86A
+S315080051D00C0CC08BDFF8901D0988884207D1DFF8D0
+S315080051E0FC0B008CDFF8801D4988884200D0ABE6AE
+S315080051F0FFF742FD4FF6FF7188427FF4A5AEDFF850
+S31508005200DC0BC07D062809D1FFF76DFD4FF6FF714F
+S31508005210884240F03D81DFF8584D3BE1DFF8BC0B92
+S31508005220C07D11280CD1DFF8400B00881C38DFF848
+S31508005230381B0880DFF8080EDFF8D41C086048E041
+S31508005240DFF8980BC07D01287FF47EAEDFF88C0B63
+S3150800525090F8220008287FF477AE0020DFF87C1B40
+S3150800526081F82200DFF8740B808C4FF6F7718842BC
+S3150800527007DBDFF8680B808C0930DFF8601B888451
+S3150800528006E0DFF8580B808C0830DFF8501B88845E
+S31508005290DFF8480B408BDFF8441BC883DFF83C0B6C
+S315080052A0808BDFF8381B0884DFF8BC0C0088DFF831
+S315080052B02C1B4883DFF8B00C4088DFF8201B888356
+S315080052C000F019BFDFF8480C00684030DFF8401CD2
+S315080052D00860DFF83C0C0068DFF8681D884274D265
+S315080052E0DFF82C0C006880880028EBD0DFF8EC0A81
+S315080052F0808CDFF81C1C096889888842E2D1DFF8AF
+S31508005300100C0068C08800280FD0DFF8D00A408C3F
+S31508005310DFF8FC1B0968C988884206D0DFF8F00B5D
+S315080053200068C088B0F58A4FCCD1DFF8E40B006876
+S315080053300088DFF8381C0988884208D1DFF8D00BC6
+S3150800534000684088DFF8241C4988884223D0DFF8A3
+S31508005350C00B00680088DFF8A81D0988884208D1B4
+S31508005360DFF8AC0B00684088DFF8941D498888424E
+S3150800537011D0DFF8680A408BDFF8941B09680988A2
+S3150800538088429FD1DFF8540A808BDFF8841B0968AE
+S315080053904988884296D10020DFF86C1908600220F7
+S315080053A0DFF8C0190870DFF86C0BDFF89819086089
+S315080053B0DFF890090068DFF8901908600020DFF828
+S315080053C07C19088001F025FB99E5BDE5DFF86C0935
+S315080053D000881C30DFF890190880DFF88C090088EF
+S315080053E080B2000ADFF8F4190874DFF87C0900882F
+S315080053F0DFF8E8194874DFF8180B0068007ADFF858
+S31508005400DC1988751120DFF8D419C875DFF82C095E
+S3150800541000880830DFF824190988083189B2090A92
+S3150800542051EA0020DFF8B419C8840020DFF8AC1967
+S315080054300885DFF8DC0A00688088DFF8A019488448
+S31508005440DFF8CC0A0068C088DFF890198884DFF88E
+S31508005450180B0088DFF884194883DFF80C0B40889E
+S31508005460DFF878198883DFF8A80A00680088DFF86B
+S315080054706C19C883DFF8980A00684088DFF85C1959
+S315080054800884DFF8BC08DFF8BC18086000F00FBE17
+S315080054905AE56834DFF8D80AA042C0F0DF80607E9B
+S315080054A00028F6D0DFF83409808CA1888842F0D12C
+S315080054B0DFF82809408CE1888842EAD1DFF81C0920
+S315080054C0408B21888842E4D1DFF81009808B6188F7
+S315080054D08842DED1DFF8300804600020DFF884183F
+S315080054E00870DFF8F80890F82F00400700F1CD8221
+S315080054F0DFF8E80890F82E00C0B200098000DFF84F
+S31508005500381C0870DFF860080088DFF82C1C09785A
+S31508005510401A1438DFF850180880607E10F00F0023
+S31508005520022808D1DFF8B40890F82F0010F03F00E1
+S31508005530122800F0B382DFF830080088002807D167
+S31508005540DFF8980890F82F000321084200F0A68299
+S31508005550DFF8880890F82600217A884215D1DFF806
+S315080055607C0890F82700617A88420ED1DFF86C082B
+S3150800557090F82800A17A884207D1DFF8600890F8E9
+S315080055802900E17A884200F089821020DFF84C1859
+S3150800559081F82F002820DFF8D01708805020DFF880
+S315080055A03C1881F82E00207ADFF8301881F82A0096
+S315080055B0607ADFF8281881F82B00A07ADFF81C1823
+S315080055C081F82C00E07ADFF8141881F82D00207B8A
+S315080055D0DFF8081881F82600607BDFF8001881F8E4
+S315080055E02700A07BDFF8F41781F82800E07BDFF8B6
+S315080055F0EC1781F829000620DFF8E017C875A0889F
+S31508005600DFF8D8174884E088DFF8D0178884DFF8F1
+S3150800561058090088DFF8C4174883DFF84C09408822
+S31508005620DFF8B81788832088DFF8B017C883608842
+S31508005630DFF8A8170884607EC00640F111850020AF
+S31508005640DFF8981781F83100DFF8900790F83100F5
+S31508005650DFF8881781F8300000F00ABDDFF87C070C
+S3150800566090F82F0010F03F00022806D0DFF86C07EC
+S3150800567090F82F00400729D566E4DFF86007808C8C
+S31508005680DFF8B81A08800020DFF8AC1A087006E0C0
+S31508005690DFF8A40A0078401CDFF89C1A0870DFF8C7
+S315080056A0980A00780028E1D1DFF8900A0088DFF828
+S315080056B0901ADFF8842A127831F812108842E7D156
+S315080056C000240020DFF8701A0870F0E01420DFF8D4
+S315080056D00C1781F82F002820DFF88C160880502038
+S315080056E0DFF8F81681F82E00DFF8F00690F82900A2
+S315080056F0DFF8441A0870DFF8E40690F82D00DFF8A2
+S31508005700DC1681F82900DFF8300A0078DFF8CC16B5
+S3150800571081F82D00DFF8C40690F82800DFF8181A7B
+S315080057200870DFF8B80690F82C00DFF8B01681F894
+S315080057302800DFF8040A0078DFF8A01681F82C00A4
+S31508005740DFF8980690F82700DFF8EC190870DFF8FC
+S315080057508C0690F82B00DFF8841681F82700DFF80E
+S31508005760D8090078DFF8741681F82B00DFF86C0684
+S3150800577090F82600DFF8C0190870DFF8600690F880
+S315080057802A00DFF8581681F82600DFF8AC090078F9
+S31508005790DFF8481681F82A00DFF8400690F82D0051
+S315080057A0401CDFF8381681F82D00DFF8300690F82F
+S315080057B02D00002826D1DFF8240690F82C00401C7E
+S315080057C0DFF8181681F82C00DFF8100690F82C0080
+S315080057D0002817D1DFF8040690F82B00401CDFF8E4
+S315080057E0FC1581F82B00DFF8F40590F82B0000284B
+S315080057F008D1DFF8E80590F82A00401CDFF8DC1528
+S3150800580081F82A00DFF8D405408CDFF830190880C3
+S31508005810DFF8C805808CDFF8C4154884DFF81C0952
+S315080058200088DFF8B8158884DFF8B005408BDFF804
+S31508005830AC15C883DFF8A405808BDFF8A0150884AB
+S31508005840DFF824070088DFF894154883DFF818077F
+S315080058504088DFF88815888300F00ABCDFF810074F
+S31508005860DFF8D4180978682251430844407E07288F
+S3150800587016D1002C0BD0A07EDFF8F416DFF8B82876
+S31508005880127868235A431144897E884208D2DFF881
+S31508005890E006DFF8A41809786822514300EB0104F2
+S315080058A0DFF894080078401CDFF88C180870DFF8D9
+S315080058B088080078002813D1DFF8B406DFF87818CE
+S315080058C00978682251430844407E0028C6D1DFF88B
+S315080058D0A006DFF8641809786822514300EB010432
+S315080058E0002C3FF431ABDFF8200404600320A076D7
+S315080058F0A07E20760020A0750420E0750020E076C2
+S31508005900DFF8D804808CA080DFF8D004408CE080D3
+S31508005910DFF8C804408B2080DFF8C004808B6080E5
+S3150800592001206076DFF8440400782073DFF83C0431
+S3150800593040786073DFF834048078A073DFF82C04AD
+S31508005940C078E07301202082DFF8900490F82900DF
+S31508005950E072DFF8880490F82800A072DFF87C046B
+S3150800596090F827006072DFF8740490F82600207219
+S315080059700120FFF788FADFF8640490F82E0010F08B
+S31508005980F0005128FFF673AB0020DFF8AC1708705B
+S3150800599006E0DFF8A4070078401CDFF89C170870BB
+S315080059A0DFF894070078DFF8341491F82E10C9B29E
+S315080059B00909C9B2491FB0EB810FBFF658ABDFF82A
+S315080059C01C04DFF874170978084490F83600DFF8E5
+S315080059D074170870DFF86C07007800283FF447ABA7
+S315080059E0DFF8600700780128D3D0DFF85807007879
+S315080059F002282FD1DFF8E403DFF83C1709780844BA
+S31508005A0090F83700042825D1DFF8D003DFF82817E7
+S31508005A100978084490F83800DFF8C013DFF818272B
+S31508005A201278114491F8391051EA0020DFF80C1762
+S31508005A300880DFF80807008840F20B61884202DB1D
+S31508005A4040F20A6002E0DFF8F40600886082A0826D
+S31508005A50FFF70DBBDFF88403DFF8DC160978084486
+S31508005A6090F8370000283FF402ABDFF8CC06007840
+S31508005A70DFF86813DFF8C0261278114491F837105A
+S31508005A800818DFF8B41608708AE700206076202028
+S31508005A90B449087000F001FCFFF756BACF4890F8F1
+S31508005AA02F00C0065FD5208A00285CD0218A14F111
+S31508005AB00C00FFF767F8C94890F82A00DFF888163F
+S31508005AC0097888424FD1C54890F82B00DFF8781638
+S31508005AD04978884247D1C14890F82C00DFF8681603
+S31508005AE0897888423FD1BD4890F82D00DFF85816CE
+S31508005AF0C978884237D1DFF8500600782073DFF876
+S31508005B00480640786073DFF840068078A073DFF8AF
+S31508005B103806C078E073E07E00281DD194F9180095
+S31508005B2094F91A10401AA17DC9B2B0EBD100A17D33
+S31508005B304118A17540B2002801D540B24042E17D26
+S31508005B40C9B2B0EB9100E17D4018E075A07DC0B206
+S31508005B50E17D11EBD0002076012082490870207E75
+S31508005B60A07600202082607E10F00F00C0B20128C7
+S31508005B7013D0C0F07382032800F0FA802ED30528CC
+S31508005B8000F03B82C0F00482072800F05D82C0F076
+S31508005B905D82082800F0F08160E272480078C0074C
+S31508005BA01AD50320607640206E49087000202082AE
+S31508005BB06D480088002809D06A48007850F002002D
+S31508005BC06849087068480088FFF75DF900205B4956
+S31508005BD0088000F062FB60E1FFF7B6B9614800781B
+S31508005BE0C00740F1B3807D4890F82F0010F03F00C1
+S31508005BF0122840F0AB80794890F82E0010F0F0009B
+S31508005C00512827DB0020DFF83015087006E0DFF89A
+S31508005C1028050078401CDFF820150870DFF81805FD
+S31508005C2000786E4991F82E10C9B20909C9B2491F00
+S31508005C30B0EB810F0EDA6948DFF8FC1409780844DE
+S31508005C4090F83600DFF8FC140870DFF8F8040078DE
+S31508005C50002822D103206076604890F8260020723A
+S31508005C605E4890F8270060725C4890F82800A07299
+S31508005C705A4890F82900E0720120FFF704F94220FB
+S31508005C803849087000202082002037490880002003
+S31508005C902A49088000F001FBFFE0DFF8A804007835
+S31508005CA00128B4D0DFF89C04007802282ED14B488E
+S31508005CB0DFF884140978084490F83700042825D1B9
+S31508005CC04648DFF874140978084490F838004349C0
+S31508005CD0DFF864241278114491F8391051EA00204B
+S31508005CE0DFF858140880DFF85404008840F20B6186
+S31508005CF0884202DB40F20A6002E0DFF840040088CE
+S31508005D006082A082A6E700BF3C9CFE1F3348DFF8EE
+S31508005D1028140978084490F8370000289AD0DFF844
+S31508005D20180400782D49DFF810241278114491F8E8
+S31508005D3037100818DFF8001408706FE75A9CFE1F22
+S31508005D404681FE1F349CFE1F389CFE1F20200549F5
+S31508005D50087000F0A2FA0020DFF8F0130968487608
+S31508005D6084E400BF6A9CFE1F589CFE1F449CFE1FCD
+S31508005D701A4890F82F00C00732D5607EC0062FD487
+S31508005D80208A00287FF4E0A8DFF8C4030088401CB6
+S31508005D9080B2FFF778F8DFF8BC03007850F01000FF
+S31508005DA0DFF8B0130870DFF8A8030088002807D0CA
+S31508005DB0DFF8A003007850F00200DFF898130870A7
+S31508005DC000F06BFA01202082082060760020E07639
+S31508005DD01120024981F82F00FFF7DCBB1081FE1F56
+S31508005DE0DFF8740390F82F00800621D5DFF86C03DE
+S31508005DF00068DFF8641391F83410DFF85C2392F832
+S31508005E00352052EA01210844DFF850130860DFF80C
+S31508005E1040030088DFF8401391F83410DFF8382380
+S31508005E2092F8352052EA0121401ADFF82413088037
+S31508005E30DFF81C03008800280CD0607EC00609D451
+S31508005E40C448007850F00200C2490870C04800886B
+S31508005E50FFF719F8C04890F830000002BE4991F8DB
+S31508005E6031104018B5490880A08AB4490988884283
+S31508005E7003D3B2480088002802D1A08AAF49088017
+S31508005E80AE4800886082B34800780321084271D082
+S31508005E900020B349088000F000FAAE480078800672
+S31508005EA00AD50020AE490880002060761420AA4949
+S31508005EB081F82F00FFF76EBBA6480078C0060ED5FE
+S31508005EC00020A7490880012020820420607600204F
+S31508005ED0E0761120A04981F82F00FFF75BBBA048A8
+S31508005EE0008800281BD09B480078C00701D50020F1
+S31508005EF02082208A00280FD1608A99490988884219
+S31508005F0002D2608A9649088095480088208206E071
+S31508005F10409CFE1F3A81FE1F208A91490880002076
+S31508005F20E076904800688D4908608D48008800280A
+S31508005F300CD0208A002809D0208A28308449088075
+S31508005F401820854981F82F00FFF728BB814800787B
+S31508005F5080070FD528207E49088010207E4981F8C1
+S31508005F602F00FFF71BBB00BF289CFE1F7CA500085F
+S31508005F706499FE1FFEF7E8BF76480078C00706D585
+S31508005F800020607610207349087000F086F965E0F5
+S31508005F906F480088002803D06D480088FEF773FF15
+S31508005FA06D4890F82F00C00716D56A480078C007D4
+S31508005FB006D5072060760020A0760020208201E022
+S31508005FC0062060760120FEF75EFF10206149087002
+S31508005FD000F063F9FFF7D9BA5E480078C00705D51F
+S31508005FE00520607600202082FEF7AEBF584800885C
+S31508005FF000287FF4CAAAFEF7A7BF554800880028DC
+S3150800600003D053480088FEF73EFF534890F82F0008
+S31508006010C0070DD5072060760020A0760120FEF780
+S3150800602032FF10204B49087000F037F9FFF7ADBA78
+S315080060304748008800287FF4A8AAFEF785BF00BF56
+S315080060403C9BFE1F7C9BFE1FFFF79FBA41480078CA
+S31508006050C00703D5072060760020A076FEF774BF38
+S3150800606006203D4981F830000A203B4981F8310075
+S315080060704020394988753648008880B2000A364972
+S31508006080087433480088344948740020324981F836
+S315080060903500314890F835002F4981F83400002042
+S315080060A02D494886FEF71FFEC0432B4948864520E2
+S315080060B02949887300202849C8730020264948754D
+S315080060C02548407D2449087527480088401C2649EC
+S315080060D008802548008880B2000A1F49887422482B
+S315080060E000881D49C87400201B490883FEF7C4FDB3
+S315080060F0C04319490883002016490870FEF72CBFCB
+S3150800610078A50008010089B2090A51EA002080B280
+S31508006110704710B501290DDB114A1180114909682C
+S31508006120884207D00E490A880E490C6801002000EB
+S31508006130FEF754F810BD00006B9CFE1F629CFE1F04
+S315080061405C9CFE1F6C9CFE1F489CFE1F3C9CFE1F11
+S31508006150589CFE1F6A9CFE1F1081FE1F349CFE1F62
+S315080061605A9CFE1F389CFE1F5E9CFE1F80B5C548C4
+S315080061700078002856D100F0EFFCFEF789F810F5F4
+S31508006180FA70C1490860FEF783F800F51C50103014
+S31508006190BE490860FEF7ACFD0020ADF800000020FF
+S315080061A0ADF80200BDF80000B9490880BDF8020044
+S315080061B0B74948800020ADF800000020ADF802007D
+S315080061C0BDF80000B3490880BDF80200B14948800F
+S315080061D00020ADF800000020ADF80200BDF8000070
+S315080061E0AD490880BDF80200AB4948804EF6030069
+S315080061F0FEF72EFE00F02AFDA84800F07DFD0621D8
+S31508006200A64800F0E2FB00F008FC00F02BFE42F284
+S315080062101071884203D242F2107000F020FE01206D
+S315080062209F49087001BD80B50020964908709C48B2
+S315080062300078002801D1FFF799FF01BD30B4984ACC
+S315080062401278012A1ED1974A12681C3213685360C5
+S31508006250002306E09BB2C45C9BB202EB03052C72DA
+S315080062605B1C1C000D00EDB2A4B2ADB2AC42F1D37A
+S31508006270C9B2081DA2F84800012082F84A00106831
+S31508006280401C106030BC704780B5854800780128EE
+S3150800629001D100F059F8002002BD10B58148006808
+S315080062A010F11C048048007840060BD501202060B8
+S315080062B00020A4F84800002084F84A00002084F84A
+S315080062C04B0040E078480078C00702D5002084F8E3
+S315080062D04B0075480078400708D594F84B0001280C
+S315080062E004D1B4F84810201DFFF713FF6E48007854
+S315080062F0000712D594F84A0001280ED1002084F828
+S315080063004A00B4F84800002807D0012084F84B005A
+S31508006310B4F84810201DFFF7FCFE63480078800794
+S3150800632011D562480088001F41280CDA94F84B0002
+S31508006330002808D15E4800685C490988091FC9B267
+S31508006340001D00F0CDFD10BD10B500F0E2FC0028E0
+S315080063502DD0564908804FF40060FFF7D3FE554903
+S31508006360898980B281420ED10120FEF7C1FD4F48CE
+S31508006370008800281BD001F019F900F0DEFC002087
+S315080063804A49088013E040F60600FFF7BBFE494974
+S31508006390898980B281420AD101F09EF84348008873
+S315080063A0002804D000F0C9FC002040490880FDF709
+S315080063B06FFF35490968884239D33348006810F5B4
+S315080063C0FA7031490860002415E03B48682101FB52
+S315080063D004F10844334908600220FEF789FD334872
+S315080063E00088002806D001F0E1F800F0A6FC00209D
+S315080063F02E490880641C002CE7D0002415E02F489D
+S31508006400402101FB04F108442D4908600520FEF7E8
+S315080064106FFD26480088002806D001F0C7F800F06E
+S315080064208CFC002021490880641C002CE7D0FDF76D
+S315080064302FFF16490968884208D31448006800F5F2
+S315080064401C5010301149086000F06EFF002415E05A
+S315080064501948682101FB04F1084412490860032021
+S31508006460FEF746FD11480088002806D001F09EF880
+S3150800647000F063FC00200D490880641C002CE7D05E
+S3150800648010BD00009D80FE1F189CFE1F1C9CFE1F51
+S31508006490289CFE1F309CFE1F2C9CFE1FF89BFE1F8F
+S315080064A0679CFE1F3C9CFE1F6A9CFE1F589CFE1F95
+S315080064B0349CFE1F1081FE1F6499FE1F3C9BFE1F25
+S315080064C0409CFE1F35220270401C01220270401CAF
+S315080064D00170401C704710B5040036202070641CFB
+S315080064E004202070641C0422DFF878152000FDF7CC
+S315080064F075FE201D10BD10B5040032202070641CE6
+S3150800650004202070641C0422DFF85C152000FDF7C7
+S3150800651065FE201D10BD37210170401C0321017046
+S31508006520401C01210170401C03210170401C0621FA
+S315080065300170401C7047FF210170401C704738B538
+S3150800654004000120207001206070DFF820058069B2
+S31508006550A0700020E0700422DFF81415251D28001D
+S31508006560FDF73CFE00202081802060810422DFF8B0
+S31508006570041514F10C052800FDF730FE042100224D
+S3150800658014F110052800FDF79BFE0421002214F1E2
+S3150800659014052800FDF794FE0421002214F11805BD
+S315080065A02800FDF78DFEDFF8C4048269DFF8BC0415
+S315080065B0416914F11C052800FDF710FEDFF8AC044C
+S315080065C08069D0F110010022DFF8A0048069204418
+S315080065D010F11C052800FDF773FE4021002214F176
+S315080065E02C052800FDF76CFE8021002214F16C05AD
+S315080065F02800FDF765FE0422DFF87C14EC34200041
+S31508006600FDF7ECFD31BD10B5DFF870040468200015
+S31508006610FFF795FF012114F1F000FFF753FFFFF78D
+S315080066207AFFFFF788FFDFF854140968411ADFF884
+S315080066304C040068FFF76DFD10BD10B5DFF83C048B
+S3150800664004682000FFF77BFF032114F1F000FFF731
+S3150800665039FFFFF740FFFFF74EFFFFF76CFFDFF844
+S315080066601C140968411ADFF814040068FFF751FD85
+S3150800667010BDF8B5060006EB0104002509E0042262
+S31508006680B11CDFF8FC733800FDF7A8FD70783044BC
+S31508006690861CA64234D230780128F0D003280AD0C6
+S315080066A0062810D0332820D0352814D0362814D000
+S315080066B0FF2822D0EAE70422B11CDFF8C8733800A5
+S315080066C0FDF78CFDE2E70422B11CDFF8BC73380045
+S315080066D0FDF784FDDAE7B578D8E70422B11CDFF8C0
+S315080066E084733800FDF77AFDD0E70422B11CDFF881
+S315080066F09C733800FDF772FDC8E72800C0B201E0B8
+S315080067002800C0B2F2BD38B5DFF8700304682078F7
+S31508006710022823D10422DFF85813201D01F028F897
+S3150800672000281BD1DFF844038269DFF8400341697A
+S3150800673014F11C0001F01CF800280FD1042214F1F2
+S315080067401001DFF824532800FDF748FDDFF8400361
+S31508006750018814F1F000FFF78CFF00E0002032BD3D
+S3150800676010B50120DFF804130988002916D040F275
+S315080067700F12891A25D0491E2CD0153960D0491E0A
+S3150800678067D02F3900F0BB80491E00F0C18014394C
+S3150800679000F0DC80491E00F0E28010E10120B349D8
+S315080067A088704FF47A70B1490861FFF72CFFAF483B
+S315080067B00169B84801F00DF8002040F20F11AB4A04
+S315080067C01180C0B2002801D10320FDE04FF4887083
+S315080067D0A6490880B0480078800706D4AD4800F07E
+S315080067E0FFFF002801D10020EEE0AB4800788007C3
+S315080067F007D5FFF788FF022803D102209B49887036
+S315080068000EE09A4800694EF66021884204DA9748F5
+S315080068100069400095490861944880780228C4D1E7
+S315080068204FF47A7091490861FFF707FF8F480169AD
+S31508006830984800F0CEFF002040F225118B4A1180BF
+S31508006840C0B2002801D10320BEE04FF493708749F7
+S31508006850088091480078800706D48E4800F0C0FF6B
+S31508006860002801D10020AFE08B480078800722D5A8
+S31508006870FFF749FF05281ED103207C4988707B480D
+S3150800688000F0DCF87948008CFFF73CFC04047748F4
+S31508006890408CFFF737FC044364084FF47A7000FB1A
+S315080068A004F0B0F1004F1CD24FF47A7000FB04F0EC
+S315080068B06E49086119E06D48006942F21171884213
+S315080068C00ADA6A48006910F57A7068490861674803
+S315080068D080780328A8D1D2E70020644908800020E0
+S315080068E072E07FF0004061490861604801696948C3
+S315080068F000F06FFF002040F255115C4A1180C0B2CB
+S31508006900002801D103205FE04FF4AB705749088097
+S31508006910604800F065FF002801D1002054E00220FD
+S31508006920524988704FF47A705049086100F075F83A
+S3150800693000F0B8F8FFF781FE4C480169554800F0A9
+S3150800694048FF00204FF4B571484A1180C0B20028AC
+S3150800695001D1032038E040F26B10444908804E48C4
+S315080069600078800706D44B4800F03AFF002801D18A
+S31508006970002029E04848007880070AD5FFF7C3FEBB
+S31508006980052806D1032039498870384800F056F89A
+S3150800699078E73648006942F2117188420ADA3348C4
+S315080069A0006910F57A703149086130488078032803
+S315080069B0C0D1EAE700202D490880002004E0002025
+S315080069C000202A490880022010BD80B5274A506158
+S315080069D0264881610020254988704FF6FF70ADF87A
+S315080069E000004FF6FF70ADF802004FF48641684686
+S315080069F0FEF7C6F91D4948601C484068002804D0BF
+S31508006A004FF488401949496888800020174908804A
+S31508006A1001BD80B5FFF7A4FE01BD81B00020ADF829
+S31508006A2000000020ADF80200BDF8000011490880FA
+S31508006A30BDF802000F49488001B07047818C0D4AA5
+S31508006A401180C18C0B4A5180018D144A1180418DE9
+S31508006A50124A5180018E124A1180408E1049488090
+S31508006A6070470000989BFE1FA09BFE1F7C9BFE1F85
+S31508006A706CA50008289CFE1F70A50008349CFE1F04
+S31508006A80A49BFE1FAC9BFE1FA89BFE1F9C9BFE1F84
+S31508006A90589CFE1F849BFE1F6A9CFE1F309CFE1F8F
+S31508006AA02C9CFE1F70470000CF48016070470168A4
+S31508006AB0096831F4801100680160704703681B6833
+S31508006AC033F4904309B2194312B2114300680160C6
+S31508006AD07047416990F8260040010858C00FC0B2B7
+S31508006AE07047016841F21802895851F0020102689C
+S31508006AF041F21803D1500168096851F00401006891
+S31508006B0001607047016841F21802895851F4005132
+S31508006B10026841F21803D1500168096851F008016A
+S31508006B200068016070470221026841F21403D150DF
+S31508006B300021006841F2040281507047416990F8CB
+S31508006B4026004001084480687047426990F826008C
+S31508006B504001104441607047E0B55FF48030019011
+S31508006B6000208DF800006A460921A048FDF7FEFDC1
+S31508006B7000208DF800006A4604219D48FDF7F6FDC1
+S31508006B8000208DF800006A4602219948FDF7EEFDBF
+S31508006B9000208DF800006A4603219548FDF7E6FDBA
+S31508006BA000208DF8080088208DF800006A46052127
+S31508006BB08F48FDF7DBFD00208DF8080088208DF84A
+S31508006BC000006A4608218A48FDF7D0FD00208DF8A6
+S31508006BD0080088208DF800006A4609218448FDF7D8
+S31508006BE0C5FD00208DF800006A4608217F48FDF79C
+S31508006BF0BDFD00208DF8080088208DF800006A4643
+S31508006C0007217B48FDF7B2FD00208DF800006A4693
+S31508006C1000217748FDF7AAFD012200217448FDF7F7
+S31508006C202DFE5FF080618908890031F00C01022091
+S31508006C3060F30921022060F38B2131F440410120E1
+S31508006C4060F397516B48FFF72FFF07BD1CB56948DE
+S31508006C5000F0F9FD6748FFF72AFFFDF719FB00F575
+S31508006C609854883401E0FDF727FB0021614800F0BD
+S31508006C70F2FF002803D1FDF70BFBA042F3D35E4ACF
+S31508006C8000215C4800F09BFF4FF400624FF48041FE
+S31508006C905848FFF713FF5748FFF734FF5548FFF7E3
+S31508006CA020FF08208DF8000000208DF8010027201D
+S31508006CB08DF8020069208DF803005B208DF804002A
+S31508006CC045208DF805009DF800004C4908709DF890
+S31508006CD001004A4948709DF80200484988709DF8A5
+S31508006CE003004649C8709DF80400444908719DF898
+S31508006CF005004249487113BD082101700021417001
+S31508006D00272181706921C1705B210171452141717B
+S31508006D10704738B50024374800F074FE0500002D8A
+S31508006D2009D040F2F550854205D22A003449314847
+S31508006D3000F033FE2C00200032BD80B531480088B3
+S31508006D4000284FD02F48008840F2F551884249D292
+S31508006D502848FFF7BEFE002803D02648FFF7E3FEC3
+S31508006D6040E02448FFF7EAFE002103E0244A525C8B
+S31508006D704254491C234A12889142F7D32148018874
+S31508006D801C48FFF7E2FE1B4890F82600194981F8CF
+S31508006D90280018484069174991F826104901154AEC
+S31508006DA05269144B93F826305B01D25852F00042D0
+S31508006DB04250104890F82600401C0E4981F82600DB
+S31508006DC00C4890F826000B4991F82510884203D103
+S31508006DD00020084981F8260000200649086205486F
+S31508006DE0FFF7A1FE01BD000040400050008F024899
+S31508006DF000820248A080FE1F4CA50008009CFE1FCA
+S31508006E001081FE1F589CFE1F80B501201C49087082
+S31508006E1000F02BF800F001F801BD80B500F0AEFFD8
+S31508006E2001281BD000F0D6FF002817D01448007898
+S31508006E30012813D1FDF72CFA12490968124A12687B
+S31508006E40511811F5FA71884208D300200C490870C8
+S31508006E5000F0C9FF002801D101F0F4FB01BD094982
+S31508006E600860704707480068704780B5044800788E
+S31508006E70012803D1FDF70CFA0349086001BD00009B
+S31508006E80649CFE1F0C9CFE1F089CFE1F0020DFF85A
+S31508006E90781408700020DFF8701488640020DFF882
+S31508006EA0681481F843000020DFF85C14A1F8440058
+S31508006EB00020DFF8541488700020DFF84C1448705E
+S31508006EC07047DFF844040078002801D1002000E06C
+S31508006ED0012070470020DFF8301481F8430070471E
+S31508006EE080B50178FF291ED100F095F8DFF818045F
+S31508006EF090F84300012802D1102000F082F8DFF84C
+S31508006F000804B0F9440001280CDB0120DFF8F81367
+S31508006F1081F84300DFF8F003B0F94410DFF8EC031A
+S31508006F2000F053F801BDDFF8E013097801294BD1C9
+S31508006F300178C92932D0CC293FD0CF293AD0D029D7
+S31508006F402FD0D12933D0D2292ED0F32917D0F4291E
+S31508006F500FD0F5290AD0F6290ED0FA2912D0FC2925
+S31508006F6013D0FD2914D0FE2915D029E000F0DDF84C
+S31508006F70BCE700F0FDF8B9E700F0CCF8B6E700F09A
+S31508006F801DF9B3E700F0AEF8B0E700F0A6F8ADE7F4
+S31508006F9000F08BF8AAE700F07AF8A7E700F041F9C5
+S31508006FA0A4E700F060F9A1E700F01FF99EE700F0FA
+S31508006FB08CF99BE700F09DF998E700F0AFF995E7A3
+S31508006FC0202000F01EF891E7ACE780B589B200F002
+S31508006FD08AFE01BDF8B504000D001600002704E07E
+S31508006FE02078C719641CFDF767F92800451E002894
+S31508006FF0F6D1FFB237600120F2BD0020C2494870C1
+S315080070007047FE21C04AD170BF4908710220BE49A7
+S31508007010A1F84400704780B500F0DCFE002803D1D3
+S315080070201020FFF7EEFF31E0FFF7E7FF0120B64932
+S315080070300870FF20B449C8700020B3490871B248E7
+S31508007040007950F01000B04908710020AE49487127
+S31508007050AD484079AC49487100F066FEAA49887186
+S3150800706000F077FEA849C87100F073FE80B2000AE6
+S31508007070A54908720120A44948720120A2498872CC
+S315080070800820A149A1F8440001F015FB01BD80B50F
+S3150800709000209D490870FFF7B0FFFF209A49C87085
+S315080070A001209949A1F8440001BDFF209649C870FE
+S315080070B00020954908719448407893494871002002
+S315080070C09149887100209049C87100208E4908723C
+S315080070D006208D49A1F84400704780B50020FFF7C7
+S315080070E090FF01BDFF208849C87089488649886491
+S315080070F0002085490871002083494871002082498B
+S31508007100887107208049C1F8070008207E49A1F840
+S3150800711044007047FF217C4AD17040687A498864E8
+S3150800712001207949A1F84400704710B5040000F021
+S31508007130FBFD80B2401E6178884203DA2220FFF701
+S3150800714060FF14E06278734892B26F49896C01F067
+S31508007150A1FAFF206C49C8706B48806C61784018AA
+S31508007160694988646078401C6749A1F8440010BDE5
+S3150800717010B5040000F0D8FD80B2401E6178884240
+S3150800718003DA2220FFF73DFF17E060685E4988644E
+S315080071906278604892B25C49896C01F07BFAFF20FC
+S315080071A05949C8705848806C6178401856498864AF
+S315080071B06078401C5449A1F8440010BD80B5FF21F1
+S315080071C0514AD170544A41684F48806CFFF702FF14
+S315080071D04D49087100204C49487100204A49887178
+S315080071E008204949A1F8440001BD80B5FF20464959
+S315080071F0C87000204449087100204349487100F0CE
+S3150800720093FD4149887100203F49C87100203E49D5
+S31508007210087200203C49487207203B49A1F84400FF
+S3150800722001BD10B5040000F07FFD621C80B2411E4E
+S315080072303548806C01F043FA002803D13120FFF766
+S31508007240E0FE0FE0FF203049C87000F06DFD2E49C2
+S31508007250896C80B2401E40182B49886401202A494F
+S31508007260A1F8440010BD10B5040000F05DFD80B221
+S31508007270801E6178884203DA2220FFF7C2FE23E0E7
+S31508007280FF202149C87001201F49A1F844006078F1
+S31508007290002807D101F023FA002802D13120FFF790
+S315080072A0B0FE11E0A21C61781748806C01F007FA5D
+S315080072B0002803D13120FFF7A4FE05E01248806CB0
+S315080072C0617840181049886410BD80B541680E4839
+S315080072D0806C01F0F8F9002803D13120FFF791FE00
+S315080072E006E0FF200849C87001200749A1F84400B4
+S315080072F001BD80B501F0A6F9FF200349C870012039
+S315080073000149A1F8440001BD2C9AFE1F2F9AFE1FC1
+S3150800731064A50008309AFE1F339AFE1F80B53120F7
+S31508007320FFF76FFE01BD000010B5DFF8FC0300781B
+S31508007330401CDFF8F41308700020DFF8E413087027
+S3150800734020E0DFF8E003DFF8D81309780C22514370
+S3150800735000EB010420886188084300280BD0DFF879
+S31508007360C8030078A17A401A782804DB0421002291
+S315080073702000FCF7A5FFDFF8A8030078401CDFF81B
+S31508007380A0130870DFF8980300780828D9DB10BD29
+S3150800739070B50C00DFF88C530021DFF884231170D8
+S315080073A006E0DFF87C130978491CDFF874231170AE
+S315080073B0DFF86C130978082921DADFF86813DFF893
+S315080073C0602312780C235A4301EB02052988002909
+S315080073D0E7D069880029E4D001882A889142E0D15B
+S315080073E041886A889142DCD106222E1D2100300090
+S315080073F0FCF7F4FEDFF830030078A8726BE0002192
+S31508007400DFF81C23117006E0DFF814130978491C0D
+S31508007410DFF80C231170DFF80813097808290EDA4B
+S31508007420DFF80013DFF8F82212780C235A4301EB31
+S31508007430020529880029E7D169880029E4D1DFF8FF
+S31508007440E0120978082938D10021DFF8E022117006
+S315080074500021DFF8DC2211700021B14A11701DE00D
+S31508007460B049AF4A12780C235A4301EB0205AF49DB
+S315080074700978AD4A1278AB7AD21A914209DAAA4942
+S315080074800978AA7A891AA94A1170A5490978A84AD1
+S315080074901170A3490978491CA14A1170A0490978B5
+S315080074A00829DDDBA24909789D4A11709D499C4A45
+S315080074B012780C235A4301EB020504220100280026
+S315080074C0FCF78CFE06222E1D21003000FCF786FEF6
+S315080074D095480078A87270BD10B5964800882A2885
+S315080074E003D20020934908805FE000209149088074
+S315080074F09148808AB0F5807F03D0B0F5007F44D0EC
+S3150800750053E08D48C08C8D49098888423CD18A4809
+S31508007510008D8A494988884236D189498948FFF7C2
+S3150800752037FF4FF400708449888206228449864CC6
+S315080075302000FCF753FE06228449814C2000FCF704
+S315080075404DFE06228149824C2000FCF747FE0622A2
+S315080075507D49794C2000FCF741FE7748808B7649B7
+S31508007560C8847548C08B7449088574480088724970
+S315080075708883724840887049C8834FF4C1606E4951
+S3150800758088812A206B4908800FE06B48C08C6B49BC
+S315080075900988884209D16848008D6849498888421F
+S315080075A003D167496748FFF7F3FE10BD10B55D487C
+S315080075B06149C98B674A128891420CD15E49098C88
+S315080075C0644A5288914206D1062263495A4C2000E1
+S315080075D0FCF704FE93E05849C98B604A12881140AB
+S315080075E0564A12885D4B1B881A4091420BD1524964
+S315080075F0098C5A4A52881140504A5288574B5B8820
+S315080076001A40914208D056490988564A1180544969
+S315080076104988544A518007E04749C98B514A118025
+S315080076204549098C4F4A518000213D4A117004E0B2
+S315080076303B490978491C3A4A117039490978082999
+S315080076400FDA3848364909780C2251430844454927
+S31508007650098802889142EBD1424949884288914279
+S31508007660E6D12F490978082943D10621FF22324C51
+S315080076702000FCF725FE06210022334C2000FCF7EB
+S315080076801FFE06223149324C2000FCF7A7FD0622D0
+S315080076902E492B4C2000FCF7A1FD324800882649CC
+S315080076A0C8843048408824490885244800882249E7
+S315080076B08883224840882049C8834FF480701E4931
+S315080076C088824FF480701C49C88108201A490882AC
+S315080076D006201949887404201749C8744FF4C160F4
+S315080076E0154988812048214908602A2011490880BF
+S315080076F013E00622011D104C2000FCF76FFD062240
+S315080077001249134C2000FCF769FD08200A498881B4
+S31508007710084800880E300749088010BD00000000A0
+S315080077206D9CFE1FCC99FE1F6F9CFE1F709CFE1F52
+S315080077306E9CFE1F589CFE1F1081FE1F289CFE1F74
+S315080077402681FE1F2C81FE1F3081FE1F009CFE1F16
+S315080077501681FE1F80A500085CA50008309CFE1F48
+S315080077602C9CFE1F4C9CFE1F4681FE1F349CFE1F50
+S315080077700300002013F0030F09D0521E22BF13F88E
+S31508007780010B11F801CBB0EB0C00F3D07047121FB8
+S3150800779022BF53F8040B51F804CB6045F7D0121DED
+S315080077A00AD200BA9CFA8CFCB0EB0C0038BF6FF01A
+S315080077B0000088BF01207047521E22BF13F8010B34
+S315080077C011F801CBB0EB0C00F6D0521C08BF1046DE
+S315080077D0704710B50400616000F08BFF206010BD93
+S315080077E010B5040000F085FF2168401A61688842D8
+S315080077F001DB012000E00020C0B210BD01684FF493
+S315080078008052895851F0010102684FF48053D150D3
+S3150800781001684FF480528958C907F9D4704701683E
+S315080078200B64006842647047DFF810030068DFF8ED
+S315080078301013096811F001018840704780B5FFF7F9
+S31508007840F3FF400802BD38B50400200000F026F911
+S315080078502000FFF7D3FF200000F0EBF80500D4E97D
+S3150800786002232000FFF7DBFF4FF4806021680860E1
+S31508007870802021688861DFF8CC02216841F218026D
+S315080078808850DFF8C40221684FF4805288502000DF
+S3150800789000F021F8200000F052F85FF0FF30216870
+S315080078A041F2140288507FF07C402168C1F810012B
+S315080078B07FF07C402168C1F80C017FF0C020216868
+S315080078C0C1F800024FF402702168C86300202062E4
+S315080078D02800C0B232BD10B4002122E05FF0004299
+S315080078E003694C011A5102694B011A4444F2F453D4
+S315080078F0536002694B011A44836940F2F45404FB4D
+S3150800790001F4234493604A1C90F824309A4200D12B
+S31508007910002203694C012344046952012244DA60B7
+S31508007920491C90F824209142D8D30169026841F293
+S315080079300C03D150002180F8271010BC704710B4F2
+S3150800794000211CE0DFF8042243694C011A51426900
+S315080079504B011A44C36940F2F45404FB01F423446E
+S3150800796093604A1C90F825309A4200D10022436958
+S315080079704C012344446952012244DA60491C90F8B8
+S3150800798025209142DED34169026841F21003D150A5
+S31508007990002180F8261010BC704770B504000E0050
+S315080079A01500206994F827104901084481682A00BF
+S315080079B03000FCF713FC206994F8271049015FF0A2
+S315080079C00042425094F82700401C84F8270094F897
+S315080079D0270094F82410884202D1002084F8270052
+S315080079E0206841F214014058000609D58020216814
+S315080079F041F2140288500020216841F2080288509A
+S31508007A00280070BD0021016990F827004001085838
+S31508007A10002801D500210AE010F40341B1F5407FA2
+S31508007A2002D05FF0FF3102E0C0F30D40011F0800ED
+S31508007A30704710B50400FFF701FF01000020226817
+S31508007A401032DFF80C31994202D20821116023E086
+S31508007A50DFF80031994202D20C2111601CE0DFF8F0
+S31508007A60F830994202D20021116015E0DFF8EC30B7
+S31508007A70994202D2042111600EE0DFF8E4309942FF
+S31508007A8002D21021116007E0DFF8D830994202D2FD
+S31508007A901421116000E00220C0B210BD80B5042098
+S31508007AA0FCF78DFDDFF8C000FCF78EFDDFF8B800A7
+S31508007AB0FCF772FD01BD10B40468246914F03C0497
+S31508007AC0C9B254EAC121D2B251EA821151F0010178
+S31508007AD002681161002102681269D20704D400689D
+S31508007AE040691880002005E0491C4FF6FF72914254
+S31508007AF0F1D3022010BC704710B49BB204686361CE
+S31508007B0003681B6913F03C03C9B253EAC121D2B218
+S31508007B1051EA821151F003010268116100210268DD
+S31508007B201269D20701D4002005E0491C4FF6FF72FE
+S31508007B309142F4D3022010BC70470000849CFE1FBB
+S31508007B401046005004002002802001020000103078
+S31508007B50C10E16020187930301E1F50581D1F008EC
+S31508007B6001C2EB0B81B2E60E0400002038B5040012
+S31508007B700D000DF1020302222900C9B22000FFF709
+S31508007B809AFF002818D16B4603222900C9B22000A3
+S31508007B90FFF791FF00280FD1BDF80200222809D16E
+S31508007BA0BDF800004FF6F0710840B0F5AB5F01D1A3
+S31508007BB0002002E0032000E00420C0B232BD70B508
+S31508007BC004000D0016002900C9B22000FFF7CEFFF9
+S31508007BD0002826D12900C9B2200000F023F8002881
+S31508007BE01FD10023B6F90200B0F5804F01D153F436
+S31508007BF00053B6F90400B0F5006F01D153F4807351
+S31508007C00B079002801D053F48053F079002801D0C8
+S31508007C1053F480439BB200222900C9B22000FFF723
+S31508007C206BFF70BD38B504000D004FF40043002209
+S31508007C302900C9B22000FFF75FFF00280AD16B466A
+S31508007C4000222900C9B22000FFF735FFBDF8001051
+S31508007C500904F4D432BD80B56B460122C9B2FFF7D8
+S31508007C602AFFBDF80000C0B2800810F0010002BD6E
+S31508007C7080B5FFF70BF900F066FD01204949087049
+S31508007C8000F099FE00204749087001BD80B5694695
+S31508007C90454800F03AFE012807D1012041490870FD
+S31508007CA09DF800104048FFF71BF969463E4800F06A
+S31508007CB0DAFE012807D100203A4908709DF800101D
+S31508007CC03948FFF70DF969463748FEF7DDFA012806
+S31508007CD007D10320334908709DF800103248FFF792
+S31508007CE0FFF801BD704738B504000D002D4800782F
+S31508007CF0012804D12900C9B2200000F0DAFD29487C
+S31508007D000078002804D12900C9B2200000F07EFEC0
+S31508007D1024480078032804D12900C9B22000FEF7B8
+S31508007D208DFAFFF7D7F831BD1E480078002805D030
+S31508007D30022807D004D3032806D007E0402006E02F
+S31508007D40082004E0002002E0402000E0402080B245
+S31508007D50704714480078002805D0022807D004D3B5
+S31508007D60032806D007E0402006E0082004E00020AB
+S31508007D7002E0402000E0402080B2704710B50024A1
+S31508007D80FFF79FF8002800D001242000C0B210BDDC
+S31508007D9080B5FEF748FA032002490870FFF765F830
+S31508007DA001BD00009C80FE1FBC9AFE1F80B5002006
+S31508007DB0DFF85C170870002218A1DFF85807F9F7F2
+S31508007DC0B5FCC0B2002804D07721DFF84C0700F0D4
+S31508007DD0E3FE01BDDFF838070078002801D101204D
+S31508007DE000E00020704780B5FFF7C8FF012801D1E1
+S31508007DF0002011E0DFF818070078002801D00020DD
+S31508007E000AE0FCF732FC012805D10120DFF800174B
+S31508007E100870012000E0002002BD0000303A000092
+S31508007E2010B50024DFF8E8060078002800F0728212
+S31508007E30DFF8DC06007801283AD100F03CFCFCF7B4
+S31508007E402FFCDFF8D806FCF753FCDFF8D406FCF75E
+S31508007E504FFCFCF723FC01220100DFF8C806F9F7FE
+S31508007E6094FC00280BD00020DFF8A4160870DFF871
+S31508007E70B806FCF73DFC0120FCF730FC4AE2DFF8C7
+S31508007E80AC06FCF735FCDFF8A806FCF731FCDFF892
+S31508007E90A406FCF72DFC0020DFF89C1608600020DD
+S31508007EA0DFF8941648600220DFF86416087031E29D
+S31508007EB0DFF85C060078022840F06681DFF8642661
+S31508007EC04FF48071DFF87406FAF7BAF8DFF844164B
+S31508007ED091F8411200290FD00020DFF834160870F7
+S31508007EE0DFF84406FCF704FC0220FCF7F7FBDFF892
+S31508007EF03406F9F729FF0DE200281BD00022DFF827
+S31508007F004016DFF8380600F047FA040024B214F1E8
+S31508007F10010F0FD10020DFF8F8150870DFF8080602
+S31508007F20FCF7E6FB0320FCF7D9FBDFF8F805F9F7C1
+S31508007F300BFFEFE124B2012CC0F29580DFF8F805BB
+S31508007F40406800280BD1DFF8F405D0F88001DFF887
+S31508007F50E815086024B2DFF8E005446083E0DFF83E
+S31508007F60DC05D0F88001DFF8D0150968DFF8C825E8
+S31508007F7052685118884208D1DFF8BC05406800FAF3
+S31508007F8084F0DFF8B41548606DE0DFF8A005FCF76B
+S31508007F90AFFBDFF8B005FCF7ABFBDFF8AC15DFF895
+S31508007FA09805406800F00BFBDFF89C05FCF7A0FB82
+S31508007FB0DFF89805FCF79CFBDFF88C15DFF87805E9
+S31508007FC00068000EC0B200F0E8FADFF88415DFF8A2
+S31508007FD068050068000CC0B200F0DFFADFF8741517
+S31508007FE0DFF854050068000AC0B200F0D6FADFF8D8
+S31508007FF06815DFF844050068C0B200F0CEFADFF86D
+S315080080004805FCF775FBC4A0FCF772FBDFF82805EA
+S315080080104168DFF82405006800F055FB00280FD1F9
+S315080080200020DFF8EC140870DFF8FC04FCF760FBAE
+S315080080300520FCF753FBDFF8EC04F9F785FE69E148
+S31508008040DFF8E804FCF754FBDFF8E804FCF750FB1C
+S31508008050DFF8E804D0F88001DFF8DC14086024B201
+S31508008060DFF8D4044460DFF8AC04D0F84402DFF843
+S31508008070A414D1F83C12884201D1012000E0002066
+S31508008080C0B2002800F046810021DFF89804F9F70D
+S315080080906FFE00280FD00020DFF874140870DFF890
+S315080080A08804FCF725FB0420FCF718FBDFF87404AA
+S315080080B0F9F74AFE2EE1DFF88004406800285AD016
+S315080080C0DFF86804FCF714FBDFF87804FCF710FB0C
+S315080080D0DFF87414DFF86004406800F070FADFF81F
+S315080080E06804FCF705FBDFF86404FCF701FBDFF81E
+S315080080F05814DFF844040068000EC0B200F04DFAC8
+S31508008100DFF84C14DFF830040068000CC0B200F049
+S3150800811044FADFF84014DFF820040068000AC0B209
+S3150800812000F03BFADFF83014DFF80C040068C0B240
+S3150800813000F033FADFF81004FCF7DAFA76A0FCF759
+S31508008140D7FADFF8F4034168DFF8EC03006800F0BB
+S31508008150BAFA00280FD10020DFF8B4130870DFF848
+S31508008160C803FCF7C5FA0520FCF7B8FADFF8B4032C
+S31508008170F9F7EAFDCEE0DFF8B403FCF7B9FA032015
+S31508008180DFF88C130870C5E0DFF88403007803284D
+S3150800819040F0C080DFF88C234FF48071DFF89C0331
+S315080081A0F9F74EFFDFF86C1391F8411200290FD04A
+S315080081B00020DFF85C130870DFF8A003FCF798FAD4
+S315080081C00220FCF78BFADFF85C03F9F7BDFDA1E0A6
+S315080081D000281AD0DFF88823DFF86413DFF85C0379
+S315080081E000F0DAF8040024B214F1010F0DD10020D2
+S315080081F0C7490870DFF86C03FCF77AFA0320FCF726
+S315080082006DFAC848F9F7A0FD84E024B2012C4CDBCE
+S31508008210D548FCF76DFACC4924B2200000F0CFF916
+S31508008220C948FCF765FAD148FCF762FAC649C3485B
+S31508008230D0F88001000EC0B200F0AFF9C449BF48BB
+S31508008240D0F88001000CC0B200F0A7F9C149BB48BC
+S31508008250D0F88001000AC0B200F09FF9BE49B748BD
+S31508008260D0F88001C0B200F098F9B748FCF740FA98
+S3150800827029A0FCF73DFABA4A24B22100AF48D0F843
+S31508008280800100F01CFA00280CD10020A0490870D3
+S31508008290A548FCF72DFA0620FCF720FAA148F9F7BD
+S315080082A053FD37E0A148FCF723FA9A48D0F8440270
+S315080082B09849D1F83C12884201D1012000E00020FB
+S315080082C0C0B2002826D0AA48FCF712FA00F007FA2E
+S315080082D000280CD100208E4908709348FCF708FA4C
+S315080082E00720FCF7FBF98F48F9F72EFD12E08F48B7
+S315080082F0FCF7FEF99F48FCF7FBF98A48F9F724FDD5
+S315080083009D48FCF7F5F9002081490870FCF7D9F972
+S3150800831000F098F910BD00002E2E2E0010B50400AE
+S31508008320207800F03DFC532804D1607800F03EFC2C
+S31508008330002801D103200FE06078312801D1002000
+S315080083400AE06078322801D1012005E060783328F8
+S3150800835001D1022000E0032010BD70B504000026FC
+S31508008360A41C200000F044F90500AE19A41C200046
+S3150800837000F03EF986196D1EA41CADB2022DF6DA80
+S31508008380F6B2F643200000F033F9F6B2864201D081
+S31508008390002000E0012070BD2DE9F04107000C0027
+S315080083A015005FF00008002C01D0002F04D140F220
+S315080083B06321594800F0F0FB3800FFF7AFFF0600CD
+S315080083C0F6B2032E01D10020A0E03800FFF7C5FF62
+S315080083D0002802D15FF0FF3098E0F6B2002E03D0F5
+S315080083E0022E58D027D38FE0BF1C380000F000F9C2
+S315080083F00600BF1C380000F0FBF800022060BF1C16
+S31508008400380000F0F5F8216851FA80F02060BF1CAA
+S31508008410B6F10308002D0DD0002406E0380000F060
+S31508008420E7F8A4B22855BF1C641CA4B20FFA88F852
+S315080084304445F3DB68E0BF1C380000F0D9F80600B5
+S31508008440BF1C380000F0D4F800042060BF1C3800B8
+S3150800845000F0CEF82168C0B211EB00202060BF1CE6
+S31508008460380000F0C5F8216851FA80F02060BF1C7A
+S31508008470B6F10408002D0DD0002406E0380000F0FF
+S31508008480B7F8A4B22855BF1C641CA4B20FFA88F822
+S315080084904445F3DB38E0BF1C380000F0A9F80600B5
+S315080084A0BF1C380000F0A4F800062060BF1C380086
+S315080084B000F09EF82168C0B211EB00402060BF1C96
+S315080084C0380000F095F82168C0B211EB0020206052
+S315080084D0BF1C380000F08CF8216851FA80F0206043
+S315080084E0BF1CB6F10508002D0DD0002406E03800A3
+S315080084F000F07EF8A4B22855BF1C641CA4B20FFA7B
+S3150800850088F84445F3DBFFE7404600B2BDE8F08152
+S31508008510659CFE1F5487FE1F04A1000834A20008AC
+S31508008520BCA100088489FE1F34A500083CA50008E4
+S3150800853058A2000834A10008F09BFE1FE097FE1F12
+S315080085406099FE1FCCA40008FC9AFE1F14A300081D
+S31508008550FE9AFE1F009BFE1F029BFE1F7CA20008C0
+S31508008560E098FE1FA0A2000800A4000890A3000837
+S3150800857030A30008A8A3000864A1000880B501007C
+S3150800858011F00F003030C9B20A2901DBC01D02E024
+S31508008590C0B200F005FBC0B202BD38B504000D003C
+S315080085A02000C0B20009FFF7E9FF287014F00F0099
+S315080085B0FFF7E4FF68700020A870280032BD0200AB
+S315080085C0491C0A23B2FBF3F2002AF9D100220A70E9
+S315080085D00200491E0A20B2FBF0F300FB13203030DC
+S315080085E008700A20B2FBF0F2002AF2D108007047A0
+S315080085F070B504000025002609E03038C0B20A2804
+S3150800860000DBC01FEDB2290151FA80F5761CF6B2DF
+S31508008610022E0FDAF6B2A05D00F0C2FAC0B2B0F1CF
+S315080086203001172904D2C0B2B0F13A010729E4D2C1
+S31508008630002001E02800C0B270BD000080B500F03F
+S31508008640BAFA01BD10B500F042F8002802D1FFF7CA
+S315080086509FFB19E0FBF7F3FF002802D1FFF798FB11
+S3150800866012E0FFF73FFBFBF705FE00F034F8074979
+S3150800867008400749086000F02EF8001D046800F05D
+S315080086809CFAA047FFF784FB10BD000080FFFF1F80
+S3150800869008ED00E070B504000D00160005E0287826
+S315080086A020706D1C641CFBF707FE3000461E80B266
+S315080086B00028F4D170BD80B500F088FA01BD80B5F8
+S315080086C000F08FFA02BD80B500F0C9FA02BD80B588
+S315080086D000F035FB02BD80B500F07EFB02BD80B51B
+S315080086E000F0EBFA002801D1002001E000F059FB68
+S315080086F002BD80B5FBF7CCFD02BD0000016851F054
+S31508008700400101607047016831F04001016070471F
+S31508008710016851F001010160704701684908490084
+S31508008720016070470068C06970470068C16170479A
+S31508008730816851F0005181600168C96851F00051A3
+S315080087400068C160704710B584B0FBF72EFF0400BF
+S3150800875002E06400FBF7B0FD80488442F9D3804804
+S31508008760844203D36408FBF7A7FDF8E7220001213A
+S315080087707C4800F087FD00947B4801904FF4FA503E
+S31508008780ADF808000120ADF80A0069467748406848
+S3150800879000F0AEFC75484068FFF7B0FF73484068C4
+S315080087A0FFF7B6FF724873490860022071494968A5
+S315080087B060F39F716F48416040F2E17020F000401D
+S315080087C06C49496860F31C016A4A516069498968BD
+S315080087D060F31C01674881606648406830F00050C5
+S315080087E0644948606348FFF7A3FF08206149087396
+S315080087F0002005E000215F4AC0B202441174401C03
+S3150800880001005C4A127BC9B29142F3D3012059494F
+S315080088100876584800F093FD00220121514800F0DF
+S31508008820FDFC55485549086002205449496860F3DB
+S315080088309F715248416040F2676020F000404F49FE
+S31508008840496860F31C014D4A51604C49896860F3D8
+S315080088501C014A4881604948406830F00050474941
+S3150800886048604648FFF764FF08204449087300201B
+S3150800887005E00021414AC0B202441174401C0100BF
+S315080088803E4A127BC9B29142F3D300203B4908768F
+S315080088903A4800F054FD01220121324800F0BEFC9E
+S315080088A032484068FFF72FFF30484068FFF735FF2A
+S315080088B01FBD10B52F4A1173002106E0C9B2425CEC
+S315080088C02C4BC9B20B441A74491C0A00294B1B7B52
+S315080088D0D2B29A42F2D3274800F08BFD02212548EE
+S315080088E0FFF723FF234800F0A5FDFBF7D1FC10F1A5
+S315080088F032042048FFF716FF800705D5FBF7DCFC96
+S31508008900FBF7C6FC8442F4D210BD70B504000E0015
+S3150800891000251A48FFF706FFC0071BD5174800F0C1
+S31508008920A2FD002812D11548007B3070002007E010
+S315080089301249C0B20144097CC0B221540125401C29
+S3150800894001000E4A127BC9B29142F1D301210B48AC
+S31508008950FFF7EBFE2800C0B270BD0000001BB70091
+S31508008960010E27070040014820A10700D080FE1FFE
+S3150800897000500148B09BFE1F20500148D09BFE1FA7
+S31508008980D0F81401000B10F001007047D0F814015C
+S3150800899010F440707047C0F818117047D0F81401E9
+S315080089A0C00810F001007047016C0909090151F06F
+S315080089B0020101647047E0B54FF461400090082059
+S315080089C08DF8040008208DF8050001208DF80600B2
+S315080089D010208DF807000020ADF8080069466748A2
+S315080089E00068FBF79DFF01230422102163480068F5
+S315080089F0FCF75FF801230422002160480068FCF7B1
+S31508008A006DF85E480068FFF7CFFF07BD70B5040034
+S31508008A100D00EDB2412D03DB7A21594800F0BCF870
+S31508008A202800C0B200F07EF8C0B2012803D07E212B
+S31508008A30534800F0B1F800260DE0FBF73DFCB6B24E
+S31508008A40A05D00F06FF8C0B2012803D087214C481A
+S31508008A5000F0A2F8761C30002900C9B280B289B2AB
+S31508008A608842EAD370BD38B504000D004548007841
+S31508008A70002817D1444800F044F801283FD142485D
+S31508008A80007800283BD040480078412837DAFBF7C1
+S31508008A90FFFB3E49086000203D490870012039491E
+S31508008AA008702CE038483A4909780844401C00F018
+S31508008AB028F8012819D136480078401C344908702E
+S31508008AC03348007830490978884218D13048027806
+S31508008AD092B230492000FFF7DDFD002029490870D1
+S31508008AE02B480078287001200AE0FBF7D1FB2749BC
+S31508008AF009686431814202D20020224908700020A8
+S31508008B0032BD10B504001D480068FFF747FF00286E
+S31508008B1006D11A480068FBF75AFF2070012000E0CA
+S31508008B20002010BD38B50400012514480068FFF779
+S31508008B3027FF002801D000201FE0E4B2210089B2F7
+S31508008B400E480068FBF729FFFBF7A2FB10F10A04A1
+S31508008B500A480068FFF71AFFC00506D4FBF7ACFB06
+S31508008B60FBF796FB8442F3D200254FF48071034845
+S31508008B700068FFF710FF2800C0B232BDE880FE1F6C
+S31508008B80C8A00008699CFE1F789AFE1F249CFE1F39
+S31508008B90689CFE1F799AFE1F80B5FBF78DFBFCE7E4
+S31508008BA0A0F161011A2938BF2038704730380A28E1
+S31508008BB08041C00F704772B6704762B670470000B2
+S31508008BC080B500F0B2FC10F0010002BD5FF0FF3086
+S31508008BD0DFF8B81408605FF0FF30DFF8B4140860F7
+S31508008BE0704770B506000C001500300000F054FA06
+S31508008BF00600DFF8A004D0F89000DFF89814D1F842
+S31508008C0094100818401E801B611E884201D200205D
+S31508008C1024E0300000F0EEF9FF2805D0A019401E28
+S31508008C2000F0E8F9FF2801D1002017E0B00A4FF458
+S31508008C3080614843DFF85C140968884207D123003D
+S31508008C402A003100DFF8480400F0FBF806E02300AC
+S31508008C502A003100DFF8340400F0F3F870BD70B56F
+S31508008C6005000C00280000F017FA0500DFF82404B8
+S31508008C70D0F89000DFF81C14D1F894100818401E9C
+S31508008C80401B611E884201D2002015E0280000F032
+S31508008C90B1F906006019401E00F0ACF9F6B2FF2ED5
+S31508008CA002D0C0B2FF2801D1002005E00100C9B2F8
+S31508008CB03000C0B200F051F970BD80B500200090B8
+S31508008CC0DFF8CC03006810F1010F01D1012035E06F
+S31508008CD00098DFF8BC134968081800900098DFF878
+S31508008CE0B0138968081800900098DFF8A413C968BB
+S31508008CF0081800900098DFF898130969081800907A
+S31508008D000098DFF88C134969081800900098DFF876
+S31508008D1080138969081800900098DFF87413C969E8
+S31508008D20081800900098C04300906A460421DFF8AE
+S31508008D306403006810F50070FFF753FF02BD0020BA
+S31508008D40DFF85013096809680818DFF84813096836
+S31508008D50091D09680818DFF83C130968083109680D
+S31508008D600818CC4909680C3109680818C9490968FE
+S31508008D70103109680818C7490968143109680818BC
+S31508008D80C4490968183109680818C043C1490968FF
+S31508008D9011F500710968884201D1012000E0002020
+S31508008DA0704780B5BA48006810F1010F06D0B84878
+S31508008DB000F08AF8002801D100200CE0B3480068CA
+S31508008DC010F1010F06D0B14800F07EF8002801D155
+S31508008DD0002000E0012002BDAE480068704780B55B
+S31508008DE08A0501D000200BE002688A4201D10120E1
+S31508008DF006E001604FF48062001DFFF74BFC01207E
+S31508008E0002BD38B504000D00A148844208D19F4C24
+S31508008E1029002000FFF7E3FF002810D100200FE00B
+S31508008E209C480068854203D1994C9A480568EFE743
+S31508008E30200000F049F80028EAD1002000E02000D0
+S31508008E4032BD2DE9F04104000F0015001E00B80AD6
+S31508008E504FF4806101FB00F8206810F1010F07D17B
+S31508008E6041462000FFF7BBFF002801D1002029E07A
+S31508008E702068404508D041462000FFF7C2FF04009D
+S31508008E80002C01D100201DE02068381A2044071D57
+S31508008E90FBF712FA201D381AB0F5806F0AD318F5B9
+S31508008EA080612000FFF7ADFF0400002C01D10020EF
+S31508008EB008E0271D287838707F1C6D1C761E002E4A
+S31508008EC0E6D10120BDE8F0812DE9F04104002068D3
+S31508008ED000F090F8FF2801D100203CE0002500E0D2
+S31508008EE06D1C042D36D2FBF7E7F920684FF4807124
+S31508008EF001FB05064FF4807000FB05F02044071DB2
+S31508008F00FBF7C6F910F10D083900300000F010FB28
+S31508008F1001E0FBF7D1F9FFF753FE002805D0FBF770
+S31508008F20B7F98045F5D2002015E000F0FEFA30F0DA
+S31508008F301000002801D000200DE0002000E0401CB1
+S31508008F40FF28CDD8811909783A5CC9B29142F6D082
+S31508008F50002000E00120BDE8F081F8B504000D000E
+S31508008F6028002100C0B2C9B2884201D2002040E0E0
+S31508008F7020004849097AC0B2884206D3454890F885
+S31508008F8098002900C9B2884201D2002031E000E0E9
+S31508008F90641C28002100C0B2C9B2884228D3FBF756
+S31508008FA08BF92000C0B200F051F8060016F1010F47
+S31508008FB001D100201DE0FBF76BF900F5C857C8374B
+S31508008FC0300000F0D0FA01E0FBF776F9FFF7F8FD7C
+S31508008FD0002805D0FBF75CF98742F5D2002008E0A7
+S31508008FE000F0A3FA30F020000028D1D0002000E0DD
+S31508008FF00120F2BD38B50400002500E06D1CEDB275
+S315080090000D2D21D2FBF758F92248EDB20C2101FBB0
+S3150800901005F140588442F1D31E48EDB20C2101FBFC
+S3150800902005F140581B49EDB20C2202FB05F211442A
+S31508009030496808188442E1D21648EDB20C2101FBB2
+S3150800904005F10844007A00E0FF2032BD70B506003D
+S315080090505FF0FF34002500E06D1CEDB20D2D12D235
+S31508009060FBF72AF90B48EDB20C2101FB05F1084480
+S31508009070007A3100C9B28842EED10648EDB20C2119
+S3150800908001FB05F14458200070BD0000AC8BFE1FA3
+S31508009090B08FFE1FD89E0008010E082901D110F1D5
+S315080090A080607047D0F8C40110F4407F01D10120D8
+S315080090B000E00020C0B27047C9B2D2B251EA0241FC
+S315080090C0DBB251EA0361C0F8C4117047016851F078
+S315080090D0400101607047016831F040010160704746
+S315080090E0814200D308007047884200D308007047C1
+S315080090F02DE9F04104000D000C220C220026012760
+S315080091005FF00008002042F21071012200E0521CB4
+S31508009110412A40D22B685FF00A0C0CFB03F3B3FB21
+S31508009120F2FC6B68BCFBF3F35FF00A0EB3FBFEF8C8
+S315080091300EFB183EBEF1060F05D35FF00A0EB3FB11
+S31508009140FEF35B1C03E05FF00A0EB3FBFEF3002B95
+S3150800915006D05FF00A0E0EFB03FEBCFBFEFC03E026
+S315080091600A23BCFBF3FC0123D5F804E0F44504D339
+S31508009170D5F804E0BCEB0E0C03E0D5F804E0BEEB32
+S315080091800C0C152BC3D28C45C1D2160018006146AB
+S31508009190BCF57A7FBBD242F21071402200E0521E23
+S315080091A0032A1BD3531C42F2107C0CFB03F3B3FBBC
+S315080091B0F0F3B5F808C0634504D3B5F808C0B3EBB7
+S315080091C00C0C03E0B5F808C0BCEB030C8C4501D2C7
+S315080091D017006146B5F808C06345E0D2C01BB0F178
+S315080091E001082000FFF772FFB8F10100000310F430
+S315080091F0E0406989491E890111F0C0010843791EBA
+S31508009200090211F470610843711E11F03F01084309
+S3150800921020612000FFF75FFFBDE8F08170B504000C
+S315080092200D0016002000FFF73DFF0028FAD06B1C42
+S31508009230DBB23200D2B202212000FFF73DFF70BD3B
+S3150800924010B50400DFF87402FBF7BEF9DFF86C020C
+S31508009250FBF7A2F9206840084000206020688007D4
+S31508009260FCD410BD80B500F065F8012802D00228AC
+S3150800927003D005E0FBF799F903E000F08BF900E06D
+S31508009280002002BD2DE9F04104000E001500200063
+S31508009290FFF7D6FF3100C9B2200000F042F82000DF
+S315080092A0FFF7E0FF8046B8FBF5F0D0F580610020B7
+S315080092B0FFF716FF40F2FF31FFF716FF0600D6F557
+S315080092C08060B8FBF0F7A8095FEA981840F2FF310A
+S315080092D04FF480625043B0FBF8F0FFF705FF00FB40
+S315080092E008F1890A8901691AEA1B914201D3012109
+S315080092F000E00021C9B2002900D10600C9B2002940
+S3150800930001D0012000E00220E168DFF8B421114015
+S31508009310E160E168C0B256EA80300843E060BDE823
+S31508009320F081D0F8C82112091201C9B21143C0F858
+S31508009330C8117047D0F8C80110F00F00704710B573
+S3150800934004002068DFF87C1108184009410900026A
+S3150800935010F4F85050EA41302168896831F47F41A9
+S315080093602268916021688968084321688860606876
+S31508009370C0F34070C00704D56068C0F34070C007EA
+S3150800938036D5207E002802D0207E012830D1202024
+S315080093902168C8616068C0F34070002810D1606811
+S315080093A010F06040616850EA814021688861A068D1
+S315080093B010F06040A16850EA81402168C86005E065
+S315080093C0606821688861A0682168C860207E0128D5
+S315080093D007D1200000F00DF85FF000602168C86131
+S315080093E003E04FF400602168C86137482168C86106
+S315080093F010BD0321017E012918D120210268D161FF
+S315080094000168096831F07061027B120612F0706219
+S3150800941011430268116001690268116141690268B5
+S3150800942051612A490068C161002100E00321080052
+S31508009430C0B2704701210168C969C1F340110268C9
+S31508009440D269C2F30022002901D1042108E0012AC9
+S3150800945001D1022104E05FF0E0610068C1610021EA
+S315080094600800C0B270470121002100220168C969BD
+S31508009470C1F3C0210268D269C2F38002002901D073
+S31508009480032118E0012A01D1022114E001680969C3
+S3150800949001610168496941610168C969C1F38001CF
+S315080094A00268D269C2F3C002C9B2002902D0D2B298
+S315080094B0002AEBD100210800C0B270471000001046
+S315080094C0003CFFFF00B0FEB74000A00640002800A1
+S315080094D02B485021016070472A4A10602A4A1160B9
+S315080094E070472749AA220A60284955220A60244952
+S315080094F0A0220A600100AA20086070472049AA2213
+S315080095000A60224955220A601D4980220A601C49C0
+S31508009510AA220A601D4955220A6001003020086007
+S3150800952070471748F5210160704719480068704769
+S3150800953070B504000D00FFF7F4FFFFF7C9FF00261A
+S3150800954007E005EB8600416855F82600FFF7C4FFDB
+S31508009550B61C402EF5D32000FFF7C3FF0C48006861
+S31508009560C007FBD470BD10B50400FFF7DAFF200072
+S31508009570FFF7C4FF06480068C007FBD410BD00000B
+S315080095805455000CF055000CF455000CA8AA000C14
+S315080095901020005800487047001BB70080B5664881
+S315080095A00068C00709D46548006850F0010063499F
+S315080095B0086061480068C007FBD5614800688005F7
+S315080095C009D56048006850F400705E49086041F6A5
+S315080095D04C5000F0EBF85C48006850F400205A49FB
+S315080095E0086040F6C41000F0E1F85748006857498B
+S315080095F00840554908605648006810F0300F24D0D6
+S31508009600534800685349084051490860FFF7C2FFAC
+S315080096104F490968504AB0FBF2F0401E51EA004033
+S315080096204B4908604D480068400840004B490860AF
+S315080096304548006830F400304349086048480068E7
+S3150800964010F46070B0F5607FF8D13F48006850F0BC
+S3150800965001003D4908603C48006850F010003A494E
+S3150800966008604048404908603748006850F04000A4
+S31508009670354908603448006830F0100032490860FF
+S315080096803148006850F480202F4908603448006843
+S315080096904007FBD52C480068400840002A49086066
+S315080096A02F480068C007FBD45FF001102F490860F7
+S315080096B000202F49086000202E49086000202E4906
+S315080096C0086000202D49086003202D4908602D48B0
+S315080096D02D4908602D482E4908601B48006830F05F
+S315080096E04000194908602B481F4908604FF4166066
+S315080096F000F05CF828481C4908604FF4616000F0E7
+S3150800970055F82648184908604FF4965000F04EF868
+S3150800971023481549086041F2707000F047F821485F
+S31508009720114908604FF4E15000F040F800201E4946
+S31508009730086000F059F801BD00420050044200508C
+S31508009740004400500844005014470050FDFFFEFF37
+S3150800975004470050CFFFF0FFA02526001C47005005
+S3150800976010470050002F0B01184700500C460050B8
+S31508009770144600501046005020460050244600501B
+S315080097801C46005005000100184600500300200141
+S3150800979028460050002F0501002F0301002F020163
+S315080097A0002F0101002F00010446005081B000215E
+S315080097B0009103E000BF0099491C0091009981427D
+S315080097C0F8D301B07047000010B510225FF00051C1
+S315080097D0044C2000FAF702FD00F054F8FFF7DEFE0D
+S315080097E010BD00BF749CFE1F80B51F480068C003EB
+S315080097F027D51E480068C00701D51D4801E0FFF7B8
+S31508009800C9FE1C490968490713D51B490968C1F3EC
+S315080098100361491C184A1268C2F30622521C164BE9
+S315080098201B68C3F306435B1C5943B0FBF1F0504376
+S3150800983008E01149096811F07F014B1CB0FBF3F0F1
+S3150800984000E00B480849096801F0FF01491CB0FB14
+S31508009850F1F00A49096811F00101491CB0FBF1F061
+S315080098600749086001BD00BF0C4600501C47005060
+S3150800987000366E0110470050184700501046005039
+S31508009880849CFE1F72B60D480D490860BFF34F8FC2
+S3150800989062B60C48006850F470000A4908600A4825
+S315080098A0006830F0080008490860084800680009A0
+S315080098B0000150F0040005490860704700000008E0
+S315080098C008ED00E088ED00E014ED00E014200058F3
+S315080098D061001A03E0001703F8000703FF00010000
+S315080098E078010001300132010601390110014A01EF
+S315080098F02E017901060180014D0043028101820192
+S3150800990082018401840186018701870189018A0110
+S315080099108B018B018D018E018F01900191019101BF
+S3150800992093019401F60196019701980198013D0269
+S315080099309B019C019D0120029F01A001A001A2019B
+S31508009940A201A401A401A601A701A701A901AA01D0
+S31508009950AB01AC01AC01AE01AF01AF01B101B2017F
+S31508009960B301B301B501B501B701B801B801BA0130
+S31508009970BB01BC01BC01BE01F701C001C101C201A6
+S31508009980C301C401C501C401C701C801C701CA0191
+S31508009990CB01CA01CD011001DD0101008E01DE01F6
+S315080099A01201F3010300F101F401F401F8012801A1
+S315080099B0220212013A020900652C3B023B023D02D3
+S315080099C0662C3F0240024102410246020A01530246
+S315080099D0400081018601550289018A0158028F01DA
+S315080099E05A0290015C025D025E025F029301610207
+S315080099F06202940164026502660267029701960193
+S31508009A006A02622C6C026D026E029C01700271027F
+S31508009A109D01730274029F01760277027802790229
+S31508009A207A027B027C02642C7E027F02A6018102F6
+S31508009A308202A9018402850286028702AE014402D7
+S31508009A40B101B20145028D028E028F029002910287
+S31508009A50B7017B030300FD03FE03FF03AC03040009
+S31508009A608603880389038A03B1031103C20302002C
+S31508009A70A303A303C4030803CC0303008C038E03C8
+S31508009A808F03D8031801F2030A00F903F303F4035A
+S31508009A90F503F603F703F703F903FA03FA033004A9
+S31508009AA0200350041007600422018A043601C10409
+S31508009AB00E01CF040100C004D00444016105260448
+S31508009AC000000000026E012313FA01F132EA0101D7
+S31508009AD001667047C9B200EB8103DB69DB08DB006E
+S31508009AE0D2B21A43C9B200EB8100C2617047C2689C
+S31508009AF0D208D200C9B211F007011143C1607047FC
+S31508009B00016851F0400101607047016831F0400179
+S31508009B100160704780B500208DF8000000F013F84A
+S31508009B2000F06EF800F0DEF86946002000F07CF8D8
+S31508009B309DF80000012801D1FEF72AF900F013F874
+S31508009B4000F0E0F8FCE780B5802209212748FAF7FB
+S31508009B506FFE00220D212648FAF76AFE0D212448D9
+S31508009B60FFF7B0FF01BD00B58DB000208DF81800D5
+S31508009B700120079002208DF8200006AA04211D481E
+S31508009B80FAF7F4FD90208DF80C00012004900220CD
+S31508009B908DF8140003AA05211648FAF7E7FD0122F5
+S31508009BA000211548FFF796FF00208DF8240009AA22
+S31508009BB00D211048FAF7DAFD90208DF800000120F3
+S31508009BC0019002208DF808006A460C210948FAF728
+S31508009BD0CDFD0A48FFF794FF02210848FFF787FFE3
+S31508009BE00648FFF792FF0DB000BD00000085024849
+S31508009BF0008F0248008102480000034000430148E4
+S31508009C0080B500F025F800280DD13448344908609D
+S31508009C10002004E00021324A02441171401C382811
+S31508009C20F8D300F024F801BD70B504000D00002635
+S31508009C3000F00EF8002808D0382C06D2002D04D0E3
+S31508009C40274820440079287001263000C0B270BD2C
+S31508009C5010B50024224800682049884204D100F043
+S31508009C600CF8002800D001242000C0B210BD80B531
+S31508009C7000F010F81A49888701BD10B5002400F0D5
+S31508009C8009F81749898F80B2884200D1012420003B
+S31508009C90C0B210BD00201249096850FA81F0104977
+S31508009CA00968090A50FA81F00D490968090C50FA41
+S31508009CB081F00B490968090E50FA81F0002105E088
+S31508009CC0074A0A44127950FA82F0491C3829F7D310
+S31508009CD080B2C043401C80B270470000A2E742CE63
+S31508009CE00080FE1F80B5FEF7A9FCFAF7E1FAFAF73D
+S31508009CF0B1FAFEF7E0FCFEF759F8FDF7B9FFFDF7F4
+S31508009D0083F801BD80B5FAF7D7FAFAF7B7FAFEF77E
+S31508009D1087F8FDF7BBFFFDF780F801BDC700FC001B
+S31508009D20E900E200E400E000E500E700EA00EB00F5
+S31508009D30E800EF00EE00EC00C400C500C900E6002C
+S31508009D40C600F400F600F200FB00F900FF00D6009A
+S31508009D50DC00A200A300A500A7209201E100ED0007
+S31508009D60F300FA00F100D100AA00BA00BF001023E0
+S31508009D70AC00BD00BC00A100AB00BB00912592253C
+S31508009D809325022524256125622556255525632513
+S31508009D90512557255D255C255B2510251425342579
+S31508009DA02C251C2500253C255E255F255A2554258E
+S31508009DB069256625602550256C256725682564254F
+S31508009DC0652559255825522553256B256A251825B5
+S31508009DD00C25882584258C2590258025B103DF0050
+S31508009DE09303C003A303C303B500C403A6039803E0
+S31508009DF0A903B4031E22C603B50329226122B100B2
+S31508009E006522642220232123F7004822B000192264
+S31508009E10B7001A227F20B200A025A0007D1D0100F0
+S31508009E20632C001E9601A01E5A01001F0806101F6B
+S31508009E300606201F0806301F0806401F0606511F83
+S31508009E400700591F521F5B1F541F5D1F561F5F1FB8
+S31508009E50601F0806701F0E00BA1FBB1FC81FC91F48
+S31508009E60CA1FCB1FDA1FDB1FF81FF91FEA1FEB1FDC
+S31508009E70FA1FFB1F801F0806901F0806A01F08066A
+S31508009E80B01F0400B81FB91FB21FBC1FCC1F0100AA
+S31508009E90C31FD01F0206E01F0206E51F0100EC1FC4
+S31508009EA0F21F0100FC1F4E21010032217021100211
+S31508009EB0842101008321D0241A05302C2F04602C1C
+S31508009EC00201672C0601752C0201802C6401002D05
+S31508009ED0260841FF1A03000000C0000C00400000DD
+S31508009EE0030000000000010C004000000400000010
+S31508009EF00040010C00400000050000000080010C35
+S31508009F00004000000600000000C0010C00400000F0
+S31508009F10070000000000020C000002000800000014
+S31508009F200000040C00000400090000000000080CF2
+S31508009F30000004000A00000000000C0C00000400E9
+S31508009F400B0000000000100C000004000C000000CC
+S31508009F500000140C000004000D0000000000180C9E
+S31508009F60000004000E00000000001C0C00000400A5
+S31508009F700F000000809A45418E418F80454545492E
+S31508009F8049498E8F9092924F994F555559999A9B58
+S31508009F909C9D9E9F41494F55A5A5A6A7A8A9AAABD2
+S31508009FA0ACADAEAFB0B1B2B3B4B5B6B7B8B9BABB6B
+S31508009FB0BCBDBEBFC0C1C2C3C4C5C6C7C8C9CACB5B
+S31508009FC0CCCDCECFD0D1D2D3D4D5D6D7D8D9DADB4B
+S31508009FD0DCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEB3B
+S31508009FE0ECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFB2B
+S31508009FF0FCFDFEFF000009021A0300043A061B07CF
+S3150800A0001A080909090A1B0C1A0D000F1A103A1129
+S3150800A0103A123A183A193A1B1A1C1A1D3A1E1A20ED
+S3150800A0201A211B263A2A1A373A381A063A0D3A16C8
+S3150800A0301A1702291A2A3A3312011B051B063A086F
+S3150800A0401A231A2400FF010203FF0405060708FF66
+S3150800A050090AFF0B0C0D0EFFFFFFFFFF0F10FF1184
+S3150800A060121314FF1516FFFFFFFF17FFFFFF18FF58
+S3150800A070FFFFFFFFFFFFFFFFFFFFFF191AFF1B1C74
+S3150800A0801D1E1F202100000019E050F8041BCB07F5
+S3150800A09044BFA9F101035918121F0023042A41F8E5
+S3150800A0A0043BF9D25FEA827C0B4604D54FF0000CDC
+S3150800A0B0A1F800C09B1CD10744BF0021197050F8B5
+S3150800A0C0042B002AE1D17047433A5C576F726B5CE8
+S3150800A0D0736F6674776172655C4F70656E424C5437
+S3150800A0E05C5461726765745C536F757263655C4135
+S3150800A0F0524D434D345F584D43345C756172742E2E
+S3150800A10063000000433A5C576F726B5C736F66744A
+S3150800A110776172655C4F70656E424C545C5461722F
+S3150800A1206765745C536F757263655C66696C652EEA
+S3150800A1306300000050617273696E67206669726D0C
+S3150800A140776172652066696C6520746F2064657432
+S3150800A15065637420657261736520626C6F636B73E7
+S3150800A1602E2E2E004669726D7761726520757064B1
+S3150800A170617465207375636365737366756C6C7952
+S3150800A18020636F6D706C657465640A0D00000000CD
+S3150800A19010B450F8041B79B10268436802440830C9
+S3150800A1A0DC0744BFA9F10104E31852F8044B43F84D
+S3150800A1B0044B091FF9D1ECE710BC70474F70656E68
+S3150800A1C0696E67206669726D776172652066696C6B
+S3150800A1D06520666F722072656164696E672E2E2E21
+S3150800A1E00000000000000000200000004000000001
+S3150800A1F080000000000100000002000000040000CA
+S3150800A20000080000001000000020000010B50749F3
+S3150800A21079441831064C7C44163404E00A68081D53
+S3150800A220114488470146A142F8D110BDBC00000080
+S3150800A230E40000004669726D776172652075706486
+S3150800A24061746520726571756573742064657465DB
+S3150800A250637465640A0D00005374617274696E67ED
+S3150800A260207468652070726F6772616D6D696E67BC
+S3150800A2702073657175656E63650A0D0052656164C4
+S3150800A280696E67206C696E652066726F6D206669F7
+S3150800A2906C652E2E2E4552524F520A0D00000000B4
+S3150800A2A0496E76616C696420636865636B73756D66
+S3150800A2B020666F756E642E2E2E4552524F520A0D29
+S3150800A2C0000000004EF68851CEF20001086840F4FE
+S3150800A2D070000860BFF34F8FBFF36F8F4FF00070A9
+S3150800A2E0E1EE100A70470000A1FDFFFF641B0000A5
+S3150800A2F01081FE1FA03000000000002000000000B2
+S3150800A30091FEFFFFD0000000300400004080FE1FD1
+S3150800A310000000002062797465732066726F6D20F4
+S3150800A3206D656D6F727920617420307800000000C9
+S3150800A33057726974696E672070726F6772616D20F3
+S3150800A340636865636B73756D2E2E2E0000F00BF82F
+S3150800A350002801D0FFF75AFF0020AFF30080FFF76F
+S3150800A360D9FB00F002F80120704700F001B80000A0
+S3150800A3700746384600F002F8FBE7000080B5AFF361
+S3150800A3800080024A11001820ABBEFBE72600020037
+S3150800A39020627974657320746F206D656D6F7279AC
+S3150800A3A02061742030780000436C6F73696E6720F3
+S3150800A3B06669726D776172652066696C650A0D005B
+S3150800A3C02F64656D6F70726F675F786D63343730B1
+S3150800A3D0302E737265630000DFF808D002488047A4
+S3150800A3E00248004788A4FE1FC997000821A500084F
+S3150800A3F001030507090E10121416181C1E0000008A
+S3150800A40050726F6772616D6D696E6720000000009B
+S3150800A4102F626F6F746C6F672E747874000000007B
+S3150800A420800000000000010001000000010000009B
+S3150800A430800000000000010001000000010000008B
+S3150800A440800000000000010001000000010000007B
+S3150800A450800000000000010001000000010000006B
+S3150800A460800000000000010001000000010000005B
+S3150800A470800000000000010001000000010000004B
+S3150800A48000000000000000000000000000000000BE
+S3150800A49000000000000000000000000000000000AE
+S3150800A4A0000000000000000000000000000000009E
+S3150800A4B0000000000000000000000000000000008E
+S3150800A4C0222A3A3C3E3F7C7F0000000045726173B9
+S3150800A4D0696E672000000000008402480000000042
+S3150800A4E020A40008008102480600000030A40008E5
+S3150800A4F0008102480700000040A4000800840248C2
+S3150800A5000100000050A4000800830248050000006E
+S3150800A51060A40008008302480600000070A4000832
+S3150800A520AFF30080FFF7CEFEFFF710FF2B2C3B3D65
+S3150800A5305B5D00004552524F520A0D004F4B0A0D03
+S3150800A54000000000000102030400000001000040B2
+S3150800A550000800000000000000000000FFFFFFFFE9
+S3150800A560FFFF00004F70656E424C5400ADDE1223AB
+S3150800A5706382536300010204FFFFFFFF000000002F
+S3150800A580FFFFFFFFFFF7FEBFFFF7FEBFFFF7FEBFA8
+S3150800A590FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFE1
+S3150800A5A0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFD1
+S3150800A5B0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFC1
+S3150800A5C0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFB1
+S3150800A5D0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFA1
+S3150800A5E0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF91
+S3150800A5F0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF81
+S3150800A600FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF70
+S3150800A610FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF60
+S3150800A620FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF50
+S3150800A630FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF40
+S3150800A640FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF30
+S3150800A650FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF20
+S3150800A660FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF10
+S3150800A670FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF00
+S3150800A680FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFF0
+S3150800A690FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFE0
+S3150800A6A0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFD0
+S3150800A6B0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFC0
+S3150800A6C0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFB0
+S3150800A6D0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFA0
+S3150800A6E0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF90
+S3150800A6F0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF80
+S3150800A700FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF6F
+S3150800A710FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF5F
+S3150800A720FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF4F
+S3150800A730FFF7FEBFFFF7FEBF00C00148000000009C
+S3150800A740000000003F0000000000000000000000BC
+S3150800A75000000000000000000000000000000000EB
+S3150800A76000000000000000000000000000000000DB
+S3150800A77000000000000000000000000000000000CB
+S3150800A78000000000000000000000000000000000BB
+S3150800A790000000000401000000C000500000000096
+S3150800A7A0080027695B450000A02F00202030002004
+S3150800A7B000000020D017002000000000040400005C
+S3150800A7C00000000000000000004201480043014864
+S3150800A7D00044014800450148004601480047014831
+S3150800A7E0000003400002034000000248000202483D
+S3150800A7F000400248004202484080FE1FB743000856
+S3110800A8000300000000000000000000003B
+S7050800A5212C
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/blt_conf.h b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/blt_conf.h
index 05621bc3..317b0f4d 100644
--- a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/blt_conf.h
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/blt_conf.h
@@ -160,6 +160,42 @@
#define BOOT_COM_NET_DEFERRED_INIT_ENABLE (1)
+/****************************************************************************************
+* F I L E S Y S T E M I N T E R F A C E C O N F I G U R A T I O N
+****************************************************************************************/
+/* The file system interface is selected by setting the BOOT_FILE_SYS_ENABLE configurable
+ * to 1. This enables support for firmware updates from a file stored on a locally
+ * attached file system such as an SD-card. Note that this interface can be enabled
+ * together with one of the remote communication interfaces such as UART, CAN or USB.
+ *
+ * Set BOOT_FILE_LOGGING_ENABLE to 1 if you would like log messages to be created during
+ * a firmware update. The hook function FileFirmwareUpdateLogHook() will be called each
+ * time a new string formatted log entry is available. This could be used during testing
+ * by outputting the string on UART or to create a log file on the file system itself.
+ *
+ * Set BOOT_FILE_ERROR_HOOK_ENABLE to 1 if you would like to be informed in case an error
+ * occurs during the firmware update. This could for example be used to turn on an error
+ * LED to inform the user that something went wrong. Inspecting the log messages provides
+ * additional information on the error cause.
+ *
+ * Set BOOT_FILE_STARTED_HOOK_ENABLE to 1 if you would like to be informed when a new
+ * firmware update is started by the bootloader.
+ *
+ * Set BOOT_FILE_COMPLETED_HOOK_ENABLE to 1 if you would like to be informed when a
+ * firmware update is completed by the bootloader.
+ */
+/** \brief Enable/disable support for firmware updates from a locally attached storage.*/
+#define BOOT_FILE_SYS_ENABLE (1)
+/** \brief Enable/disable logging messages during firmware updates. */
+#define BOOT_FILE_LOGGING_ENABLE (1)
+/** \brief Enable/disable a hook function that is called upon detection of an error. */
+#define BOOT_FILE_ERROR_HOOK_ENABLE (1)
+/** \brief Enable/disable a hook function that is called at the start of the update. */
+#define BOOT_FILE_STARTED_HOOK_ENABLE (1)
+/** \brief Enable/disable a hook function that is called at the end of the update. */
+#define BOOT_FILE_COMPLETED_HOOK_ENABLE (1)
+
+
/****************************************************************************************
* B A C K D O O R E N T R Y C O N F I G U R A T I O N
****************************************************************************************/
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/cfg/memory.x b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/cfg/memory.x
index de311232..6ac7d651 100644
--- a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/cfg/memory.x
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/cfg/memory.x
@@ -5,7 +5,7 @@
define symbol __ICFEDIT_intvec_start__ = 0x08000000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_IROM1_start__ = 0x08000000;
-define symbol __ICFEDIT_region_IROM1_end__ = 0x08007FFF;
+define symbol __ICFEDIT_region_IROM1_end__ = 0x0800BFFF;
define symbol __ICFEDIT_region_IROM2_start__ = 0x0;
define symbol __ICFEDIT_region_IROM2_end__ = 0x0;
define symbol __ICFEDIT_region_EROM1_start__ = 0x0;
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/hooks.c b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/hooks.c
index 75910582..5f23db49 100644
--- a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/hooks.c
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/hooks.c
@@ -32,6 +32,7 @@
#include "boot.h" /* bootloader generic header */
#include "led.h" /* LED driver header */
#include "xmc_gpio.h" /* GPIO module */
+#include "xmc_uart.h" /* UART driver header */
/****************************************************************************************
@@ -245,6 +246,194 @@ blt_bool NvmWriteChecksumHook(void)
#endif /* BOOT_NVM_CHECKSUM_HOOKS_ENABLE > 0 */
+/****************************************************************************************
+* F I L E S Y S T E M I N T E R F A C E H O O K F U N C T I O N S
+****************************************************************************************/
+
+#if (BOOT_FILE_SYS_ENABLE > 0)
+
+/****************************************************************************************
+* Constant data declarations
+****************************************************************************************/
+/** \brief Firmware filename. */
+static const blt_char firmwareFilename[] = "/demoprog_xmc4700.srec";
+
+
+/****************************************************************************************
+* Local data declarations
+****************************************************************************************/
+#if (BOOT_FILE_LOGGING_ENABLE > 0)
+/** \brief Data structure for grouping log-file related information. */
+static struct
+{
+ FIL handle; /**< FatFS handle to the log-file. */
+ blt_bool canUse; /**< Flag to indicate if the log-file can be used. */
+} logfile;
+#endif
+
+
+/************************************************************************************//**
+** \brief Callback that gets called to check whether a firmware update from
+** local file storage should be started. This could for example be when
+** a switch is pressed, when a certain file is found on the local file
+** storage, etc.
+** \return BLT_TRUE if a firmware update is requested, BLT_FALSE otherwise.
+**
+****************************************************************************************/
+blt_bool FileIsFirmwareUpdateRequestedHook(void)
+{
+ FILINFO fileInfoObject = { 0 }; /* needs to be zeroed according to f_stat docs */;
+
+ /* Current example implementation looks for a predetermined firmware file on the
+ * SD-card. If the SD-card is accessible and the firmware file was found the firmware
+ * update is started. When successfully completed, the firmware file is deleted.
+ * During the firmware update, progress information is written to a file called
+ * bootlog.txt and additionally outputted on UART @57600 bps for debugging purposes.
+ */
+ /* check if firmware file is present and SD-card is accessible */
+ if (f_stat(firmwareFilename, &fileInfoObject) == FR_OK)
+ {
+ /* check if the filesize is valid and that it is not a directory */
+ if ( (fileInfoObject.fsize > 0) && (!(fileInfoObject.fattrib & AM_DIR)) )
+ {
+ /* all conditions are met to start a firmware update from local file storage */
+ return BLT_TRUE;
+ }
+ }
+ /* still here so no firmware update request is pending */
+ return BLT_FALSE;
+} /*** end of FileIsFirmwareUpdateRequestedHook ***/
+
+
+/************************************************************************************//**
+** \brief Callback to obtain the filename of the firmware file that should be
+** used during the firmware update from the local file storage. This
+** hook function is called at the beginning of the firmware update from
+** local storage sequence.
+** \return valid firmware filename with full path or BLT_NULL.
+**
+****************************************************************************************/
+const blt_char *FileGetFirmwareFilenameHook(void)
+{
+ return firmwareFilename;
+} /*** end of FileGetFirmwareFilenameHook ***/
+
+
+#if (BOOT_FILE_STARTED_HOOK_ENABLE > 0)
+/************************************************************************************//**
+** \brief Callback that gets called to inform the application that a firmware
+** update from local storage just started.
+** \return none.
+**
+****************************************************************************************/
+void FileFirmwareUpdateStartedHook(void)
+{
+ #if (BOOT_FILE_LOGGING_ENABLE > 0)
+ /* create/overwrite the logfile */
+ logfile.canUse = BLT_FALSE;
+ if (f_open(&logfile.handle, "/bootlog.txt", FA_CREATE_ALWAYS | FA_WRITE) == FR_OK)
+ {
+ logfile.canUse = BLT_TRUE;
+ }
+ #endif
+} /*** end of FileFirmwareUpdateStartedHook ***/
+#endif /* BOOT_FILE_STARTED_HOOK_ENABLE > 0 */
+
+
+#if (BOOT_FILE_COMPLETED_HOOK_ENABLE > 0)
+/************************************************************************************//**
+** \brief Callback that gets called to inform the application that a firmware
+** update was successfully completed.
+** \return none.
+**
+****************************************************************************************/
+void FileFirmwareUpdateCompletedHook(void)
+{
+ #if (BOOT_FILE_LOGGING_ENABLE > 0)
+ /* close the log file */
+ if (logfile.canUse == BLT_TRUE)
+ {
+ f_close(&logfile.handle);
+ }
+ #endif
+ /* now delete the firmware file from the disk since the update was successful */
+ f_unlink(firmwareFilename);
+} /*** end of FileFirmwareUpdateCompletedHook ***/
+#endif /* BOOT_FILE_COMPLETED_HOOK_ENABLE > 0 */
+
+
+#if (BOOT_FILE_ERROR_HOOK_ENABLE > 0)
+/************************************************************************************//**
+** \brief Callback that gets called in case an error occurred during a firmware
+** update. Refer to for a list of available error codes.
+** \return none.
+**
+****************************************************************************************/
+void FileFirmwareUpdateErrorHook(blt_int8u error_code)
+{
+ #if (BOOT_FILE_LOGGING_ENABLE > 0)
+ /* error detected which stops the firmware update, so close the log file */
+ if (logfile.canUse == BLT_TRUE)
+ {
+ f_close(&logfile.handle);
+ }
+ #endif
+} /*** end of FileFirmwareUpdateErrorHook ***/
+#endif /* BOOT_FILE_ERROR_HOOK_ENABLE > 0 */
+
+
+#if (BOOT_FILE_LOGGING_ENABLE > 0)
+/************************************************************************************//**
+** \brief Callback that gets called each time new log information becomes
+** available during a firmware update.
+** \param info_string Pointer to a character array with the log entry info.
+** \return none.
+**
+****************************************************************************************/
+void FileFirmwareUpdateLogHook(blt_char *info_string)
+{
+ blt_int32u timeoutTime;
+
+ /* write the string to the log file */
+ if (logfile.canUse == BLT_TRUE)
+ {
+ if (f_puts(info_string, &logfile.handle) < 0)
+ {
+ logfile.canUse = BLT_FALSE;
+ f_close(&logfile.handle);
+ }
+ }
+
+ /* echo all characters in the string on UART */
+ while(*info_string != '\0')
+ {
+ /* write byte to transmit holding register */
+ XMC_UART_CH_Transmit(XMC_UART0_CH0, *info_string);
+ /* set timeout time to wait for transmit completion. */
+ timeoutTime = TimerGet() + 10;
+ /* wait for tx holding register to be empty */
+ while( (XMC_USIC_CH_TXFIFO_GetEvent(XMC_UART0_CH0) & XMC_USIC_CH_TXFIFO_EVENT_STANDARD) == 0)
+ {
+ /* keep the watchdog happy */
+ CopService();
+ /* break loop upon timeout. this would indicate a hardware failure. */
+ if (TimerGet() > timeoutTime)
+ {
+ break;
+ }
+ }
+ /* reset event */
+ XMC_USIC_CH_TXFIFO_ClearEvent(XMC_UART0_CH0, XMC_USIC_CH_TXFIFO_EVENT_STANDARD);
+ /* point to the next character in the string */
+ info_string++;
+ }
+} /*** end of FileFirmwareUpdateLogHook ***/
+#endif /* BOOT_FILE_LOGGING_ENABLE > 0 */
+
+
+#endif /* BOOT_FILE_SYS_ENABLE > 0 */
+
+
/****************************************************************************************
* S E E D / K E Y S E C U R I T Y H O O K F U N C T I O N S
****************************************************************************************/
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/settings/xmc4700.Debug.cspy.bat b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/settings/xmc4700.Debug.cspy.bat
index 6cb8c246..d061ec75 100644
--- a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/settings/xmc4700.Debug.cspy.bat
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/settings/xmc4700.Debug.cspy.bat
@@ -25,7 +25,7 @@ if not "%~1" == "" goto debugFile
@echo on
-"C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.5\common\bin\cspybat" -f "C:\Work\software\OpenBLT_XMC4700_extras\Target\Demo\ARMCM4_XMC4_XMC4700_Relax_Kit_IAR\Boot\ide\settings\xmc4700.Debug.general.xcl" --backend -f "C:\Work\software\OpenBLT_XMC4700_extras\Target\Demo\ARMCM4_XMC4_XMC4700_Relax_Kit_IAR\Boot\ide\settings\xmc4700.Debug.driver.xcl"
+"C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.5\common\bin\cspybat" -f "C:\Work\software\OpenBLT\Target\Demo\ARMCM4_XMC4_XMC4700_Relax_Kit_IAR\Boot\ide\settings\xmc4700.Debug.general.xcl" --backend -f "C:\Work\software\OpenBLT\Target\Demo\ARMCM4_XMC4_XMC4700_Relax_Kit_IAR\Boot\ide\settings\xmc4700.Debug.driver.xcl"
@echo off
goto end
@@ -34,7 +34,7 @@ goto end
@echo on
-"C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.5\common\bin\cspybat" -f "C:\Work\software\OpenBLT_XMC4700_extras\Target\Demo\ARMCM4_XMC4_XMC4700_Relax_Kit_IAR\Boot\ide\settings\xmc4700.Debug.general.xcl" "--debug_file=%~1" --backend -f "C:\Work\software\OpenBLT_XMC4700_extras\Target\Demo\ARMCM4_XMC4_XMC4700_Relax_Kit_IAR\Boot\ide\settings\xmc4700.Debug.driver.xcl"
+"C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.5\common\bin\cspybat" -f "C:\Work\software\OpenBLT\Target\Demo\ARMCM4_XMC4_XMC4700_Relax_Kit_IAR\Boot\ide\settings\xmc4700.Debug.general.xcl" "--debug_file=%~1" --backend -f "C:\Work\software\OpenBLT\Target\Demo\ARMCM4_XMC4_XMC4700_Relax_Kit_IAR\Boot\ide\settings\xmc4700.Debug.driver.xcl"
@echo off
:end
\ No newline at end of file
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/settings/xmc4700.Debug.general.xcl b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/settings/xmc4700.Debug.general.xcl
index 024200de..1b1ee107 100644
--- a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/settings/xmc4700.Debug.general.xcl
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/settings/xmc4700.Debug.general.xcl
@@ -2,7 +2,7 @@
"C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.5\arm\bin\armjlink2.dll"
-"C:\Work\software\OpenBLT_XMC4700_extras\Target\Demo\ARMCM4_XMC4_XMC4700_Relax_Kit_IAR\Boot\bin\openblt_xmc4700.out"
+"C:\Work\software\OpenBLT\Target\Demo\ARMCM4_XMC4_XMC4700_Relax_Kit_IAR\Boot\bin\openblt_xmc4700.out"
--plugin "C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.5\arm\bin\armbat.dll"
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/settings/xmc4700.dbgdt b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/settings/xmc4700.dbgdt
index 66b5ca97..6d96dd92 100644
--- a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/settings/xmc4700.dbgdt
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/settings/xmc4700.dbgdt
@@ -39,7 +39,7 @@
-
+
TabID-6569-18762
@@ -55,7 +55,7 @@
- 0
+ 0
TabID-17318-18765
@@ -67,7 +67,7 @@
- 0
+ 0
TabID-28066-18768
@@ -77,7 +77,7 @@
- 0
+ 0
@@ -90,7 +90,7 @@
- iaridepm.enu1 debuggergui.enu1 armjlink2.enu1 -2 -2 716 374 -2 -2 200 200 104167 198610 195833 713009 -2 -2 716 198 -2 -2 200 200 104167 198610 104167 713009 -2 -2 198 1922 -2 -2 1924 200 1002083 198610 104167 198610
+ iaridepm.enu1 debuggergui.enu1 armjlink2.enu1 -2 -2 716 374 -2 -2 200 200 104167 198610 195833 713009 -2 -2 716 198 -2 -2 200 200 104167 198610 104167 713009 -2 -2 198 1922 -2 -2 1924 200 1002083 198610 104167 198610
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/settings/xmc4700.dni b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/settings/xmc4700.dni
index 334e5f70..b6c9b1e6 100644
--- a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/settings/xmc4700.dni
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/settings/xmc4700.dni
@@ -26,7 +26,7 @@ TraceBufferSize=0x00010000
TraceStallIfFIFOFull=0x00000000
TracePortSize=0x00000004
[DebugChecksum]
-Checksum=1184049083
+Checksum=2017057073
[Exceptions]
StopOnUncaught=_ 0
StopOnThrow=_ 0
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/settings/xmc4700.wsdt b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/settings/xmc4700.wsdt
index eeca9fb3..5f4d4f8f 100644
--- a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/settings/xmc4700.wsdt
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/settings/xmc4700.wsdt
@@ -52,7 +52,7 @@
Workspace
- xmc4700 xmc4700/Boot xmc4700/Boot/lib xmc4700/Boot/lib/uip xmc4700/Output
+ xmc4700 xmc4700/Boot xmc4700/Output xmc4700/Source
@@ -69,7 +69,7 @@
- iaridepm.enu1 -2 -2 962 314 -2 -2 200 200 104167 198610 164583 957299 -2 -2 962 410 -2 -2 1924 247 1002083 245283 214583 957299
+ iaridepm.enu1 -2 -2 962 314 -2 -2 200 200 104167 198610 164583 957299 -2 -2 962 410 -2 -2 1924 247 1002083 245283 214583 957299
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/xmc4700.dep b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/xmc4700.dep
index a221bbe4..49eed439 100644
--- a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/xmc4700.dep
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/xmc4700.dep
@@ -2,517 +2,459 @@
2
- 2318427780
+ 1881597588
Debug
- $PROJ_DIR$\..\lib\xmclib\src\xmc_ccu4.c
- $PROJ_DIR$\..\lib\xmclib\src\xmc_common.c
$PROJ_DIR$\..\lib\xmclib\inc\xmc_ccu4.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_ccu8.c
- $PROJ_DIR$\..\obj\xcp.o
- $PROJ_DIR$\..\obj\xmc_can.o
- $TOOLKIT_DIR$\lib\m7M_tls.a
- $PROJ_DIR$\..\obj\xmc_posif.o
- $PROJ_DIR$\..\obj\openblt_xmc4700.map
- $PROJ_DIR$\..\obj\xmc_usbh.o
- $PROJ_DIR$\..\obj\cpu_comp.__cstat.et
- $PROJ_DIR$\..\obj\led.__cstat.et
- $PROJ_DIR$\..\bin\demoprog_xmc4700.out
- $PROJ_DIR$\..\obj\xmc_common.pbi
- $PROJ_DIR$\..\obj\xmc4_gpio.__cstat.et
- $PROJ_DIR$\..\obj\startup_XMC4700.o
- $PROJ_DIR$\..\obj\xmc_uart.o
- $PROJ_DIR$\..\obj\led.o
- $PROJ_DIR$\..\obj\xmc_i2s.pbi
- $PROJ_DIR$\..\obj\xmc_eth_phy_dp83848.o
- $PROJ_DIR$\..\obj\system_XMC4700.o
- $TOOLKIT_DIR$\inc\c\time.h
- $PROJ_DIR$\..\obj\assert.o
- $PROJ_DIR$\..\obj\xmc_dsd.__cstat.et
- $PROJ_DIR$\..\obj\xmc_eth_phy_ksz8031rnl.o
- $PROJ_DIR$\..\obj\xmc_posif.pbi
- $PROJ_DIR$\..\header.h
- $PROJ_DIR$\..\obj\xmc_eru.__cstat.et
- $PROJ_DIR$\..\obj\xmc_eth_phy_dp83848.pbi
- $PROJ_DIR$\..\obj\xmc_i2s.o
- $PROJ_DIR$\..\obj\xmc4_rtc.__cstat.et
- $PROJ_DIR$\..\obj\xmc_rtc.pbi
- $TOOLKIT_DIR$\inc\c\stddef.h
- $PROJ_DIR$\..\obj\xmc4_flash.pbi
- $PROJ_DIR$\..\obj\xmc4_eru.pbi
- $PROJ_DIR$\..\obj\xmc4_scu.o
- $PROJ_DIR$\..\obj\xmc_dma.o
- $PROJ_DIR$\..\obj\uip.pbi
- $PROJ_DIR$\..\obj\uip_timer.__cstat.et
- $PROJ_DIR$\..\obj\xmc_can.__cstat.et
- $PROJ_DIR$\..\obj\xmc_eru.pbi
- $PROJ_DIR$\..\obj\xmc_vadc.pbi
- $PROJ_DIR$\..\obj\xmc4_rtc.o
- $PROJ_DIR$\..\obj\boot.o
- $PROJ_DIR$\..\obj\uip_timer.o
- $PROJ_DIR$\..\obj\uiplib.o
- $PROJ_DIR$\..\boot.c
- $TOOLKIT_DIR$\inc\c\DLib_Product_string.h
- $PROJ_DIR$\..\obj\dhcpc.__cstat.et
- $PROJ_DIR$\..\obj\uip.o
- $PROJ_DIR$\..\obj\xmc_ebu.o
- $PROJ_DIR$\..\obj\uip_arp.o
- $PROJ_DIR$\..\obj\xmc_ebu.pbi
- $PROJ_DIR$\..\obj\xmc_spi.__cstat.et
- $PROJ_DIR$\..\obj\uip.__cstat.et
- $PROJ_DIR$\..\obj\xmc_fce.pbi
- $PROJ_DIR$\..\obj\xmc4_gpio.pbi
- $PROJ_DIR$\..\obj\xmc_ledts.o
- $PROJ_DIR$\..\obj\uiplib.pbi
- $PROJ_DIR$\..\obj\uip_timer.pbi
- $PROJ_DIR$\..\obj\uip_arp.pbi
- $TOOLKIT_DIR$\inc\c\xlocaleuse.h
- $TOOLKIT_DIR$\inc\c\limits.h
- $PROJ_DIR$\..\obj\xmc_usbd.__cstat.et
- $PROJ_DIR$\..\obj\xmc_ledts.__cstat.et
- $PROJ_DIR$\..\obj\xmc_ccu8.o
- $PROJ_DIR$\..\obj\xmc_eth_mac.__cstat.et
- $TOOLKIT_DIR$\inc\c\xtls.h
- $PROJ_DIR$\..\obj\xmc_eth_phy_ksz8081rnb.pbi
- $PROJ_DIR$\..\obj\xmc_eth_phy_ksz8081rnb.__cstat.et
- $TOOLKIT_DIR$\inc\c\yvals.h
- $PROJ_DIR$\..\obj\flash.pbi
- $PROJ_DIR$\..\obj\flash.o
- $PROJ_DIR$\..\obj\xmc_posif.__cstat.et
- $PROJ_DIR$\..\obj\xmc_gpio.o
- $PROJ_DIR$\..\cfg\memory.x
- $PROJ_DIR$\..\obj\cop.pbi
- $PROJ_DIR$\..\obj\cstart.o
- $PROJ_DIR$\..\obj\xmc_ccu8.pbi
- $PROJ_DIR$\..\obj\xmc_ccu4.o
- $TOOLKIT_DIR$\lib\dl7M_tln.a
- $TOOLKIT_DIR$\inc\c\DLib_Product.h
- $PROJ_DIR$\..\obj\xmc_sdmmc.o
- $PROJ_DIR$\..\obj\xmc4_rtc.pbi
- $PROJ_DIR$\..\obj\xmc_uart.pbi
- $TOOLKIT_DIR$\inc\c\ysizet.h
- $PROJ_DIR$\..\obj\uart.pbi
- $PROJ_DIR$\..\obj\xmc_gpio.__cstat.et
- $PROJ_DIR$\..\obj\boot.__cstat.et
- $TOOLKIT_DIR$\inc\c\stdlib.h
- $PROJ_DIR$\..\obj\xmc_wdt.__cstat.et
- $PROJ_DIR$\..\obj\xmc_i2s.__cstat.et
- $PROJ_DIR$\..\obj\xmc4_scu.pbi
- $PROJ_DIR$\..\obj\xmc_eth_phy_ksz8031rnl.__cstat.et
- $PROJ_DIR$\..\obj\xmc_ccu4.pbi
- $PROJ_DIR$\..\obj\file.__cstat.et
- $PROJ_DIR$\..\bin\openblt_xmc4700.out
- $TOOLKIT_DIR$\inc\c\intrinsics.h
- $PROJ_DIR$\..\obj\xmc_i2c.pbi
- $PROJ_DIR$\..\obj\main.__cstat.et
- $PROJ_DIR$\..\obj\xmc_wdt.o
- $PROJ_DIR$\..\obj\cpu_comp.o
- $PROJ_DIR$\..\obj\xmc_hrpwm.pbi
- $PROJ_DIR$\..\obj\com.o
- $PROJ_DIR$\..\obj\hooks.__cstat.et
- $TOOLKIT_DIR$\inc\c\cmsis_iar.h
- $PROJ_DIR$\..\obj\led.pbi
- $PROJ_DIR$\..\obj\assert.__cstat.et
- $PROJ_DIR$\..\obj\timer.pbi
- $TOOLKIT_DIR$\lib\shb_l.a
- $PROJ_DIR$\..\obj\xmc_sdmmc.pbi
- $PROJ_DIR$\..\obj\xmc_dac.__cstat.et
- $PROJ_DIR$\..\obj\xmc4700.pbd
- $PROJ_DIR$\..\obj\xmc_eth_phy_dp83848.__cstat.et
- $PROJ_DIR$\..\obj\flash.__cstat.et
- $PROJ_DIR$\..\obj\cpu.__cstat.et
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_can.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_can_map.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_ccu4.c
$PROJ_DIR$\..\obj\xmc_usbh.pbi
- $PROJ_DIR$\..\obj\boot.pbi
- $PROJ_DIR$\..\obj\xmc_common.__cstat.et
- $PROJ_DIR$\..\obj\system_XMC4700.__cstat.et
- $PROJ_DIR$\..\obj\nvm.pbi
- $TOOLKIT_DIR$\inc\c\stdint.h
- $PROJ_DIR$\..\obj\net.__cstat.et
- $PROJ_DIR$\..\obj\file.o
- $PROJ_DIR$\..\obj\xmc_gpio.pbi
- $PROJ_DIR$\..\obj\xmc_uart.__cstat.et
- $PROJ_DIR$\..\obj\uart.o
- $PROJ_DIR$\..\obj\xmc_eth_mac.o
- $PROJ_DIR$\..\obj\xmc_can.pbi
- $PROJ_DIR$\..\obj\backdoor.o
- $PROJ_DIR$\..\timer.h
- $TOOLKIT_DIR$\inc\c\DLib_Config_Normal.h
- $PROJ_DIR$\..\obj\xmc_eth_mac.pbi
- $PROJ_DIR$\..\obj\xmc_usbh.__cstat.et
- $TOOLKIT_DIR$\inc\c\string.h
+ $PROJ_DIR$\..\obj\cpu.__cstat.et
$PROJ_DIR$\..\obj\xmc4_eru.o
+ $PROJ_DIR$\..\obj\hooks.__cstat.et
+ $PROJ_DIR$\..\obj\uart.o
+ $PROJ_DIR$\..\obj\net.__cstat.et
+ $PROJ_DIR$\..\obj\assert.__cstat.et
+ $PROJ_DIR$\..\obj\led.pbi
+ $PROJ_DIR$\..\obj\xmc_ccu4.o
+ $PROJ_DIR$\..\obj\xmc_dac.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_sdmmc.pbi
$PROJ_DIR$\..\boot.h
+ $PROJ_DIR$\..\obj\xmc_usbh.__cstat.et
+ $PROJ_DIR$\..\obj\xmc4700.pbd
+ $PROJ_DIR$\..\obj\boot.pbi
+ $PROJ_DIR$\..\obj\xmc_uart.pbi
$PROJ_DIR$\..\obj\can.o
- $PROJ_DIR$\..\obj\xmc_usic.pbi
- $TOOLKIT_DIR$\inc\c\xmtx.h
- $PROJ_DIR$\..\obj\xmc_sdmmc.__cstat.et
- $PROJ_DIR$\..\obj\xmc_ledts.pbi
- $PROJ_DIR$\..\obj\xmc_rtc.o
- $PROJ_DIR$\..\obj\xmc4_gpio.o
- $PROJ_DIR$\..\obj\cop.o
- $PROJ_DIR$\..\obj\xmc_hrpwm.o
- $PROJ_DIR$\..\obj\backdoor.pbi
- $PROJ_DIR$\..\obj\xmc_ccu8.__cstat.et
- $PROJ_DIR$\..\obj\timer.__cstat.et
- $PROJ_DIR$\..\obj\xmc_usbd.pbi
- $TOOLKIT_DIR$\inc\c\ycheck.h
- $PROJ_DIR$\..\obj\xmc_dsd.o
- $PROJ_DIR$\..\obj\xcp.__cstat.et
- $PROJ_DIR$\..\obj\xmc_spi.o
- $PROJ_DIR$\..\obj\xmc4_flash.o
- $PROJ_DIR$\..\obj\xmc4_eru.__cstat.et
- $PROJ_DIR$\..\obj\xmc_ecat.__cstat.et
- $PROJ_DIR$\..\obj\can.__cstat.et
- $PROJ_DIR$\..\obj\netdev.o
- $TOOLKIT_DIR$\inc\c\stdio.h
- $PROJ_DIR$\..\obj\netdev.__cstat.et
- $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\IAR\cstart.s
- $TOOLKIT_DIR$\inc\c\ystdio.h
- $PROJ_DIR$\..\obj\dhcpc.o
- $PROJ_DIR$\..\obj\backdoor.__cstat.et
- $PROJ_DIR$\..\obj\dhcpc.pbi
- $PROJ_DIR$\..\obj\clock-arch.pbi
- $PROJ_DIR$\..\obj\timer.o
- $PROJ_DIR$\..\obj\assert.pbi
- $PROJ_DIR$\..\obj\xmc_usic.__cstat.et
- $PROJ_DIR$\..\obj\clock-arch.__cstat.et
- $PROJ_DIR$\..\obj\xmc_dac.pbi
- $PROJ_DIR$\..\obj\xmc_eth_phy_ksz8081rnb.o
- $PROJ_DIR$\..\obj\system_XMC4700.pbi
- $PROJ_DIR$\..\obj\clock-arch.o
- $PROJ_DIR$\..\obj\xmc_common.o
- $PROJ_DIR$\..\obj\com.pbi
- $TOOLKIT_DIR$\inc\c\stdbool.h
- $PROJ_DIR$\..\obj\uiplib.__cstat.et
- $PROJ_DIR$\..\obj\xmc4_scu.__cstat.et
- $PROJ_DIR$\..\obj\xmc_rtc.__cstat.et
- $PROJ_DIR$\..\obj\uip_arp.__cstat.et
- $PROJ_DIR$\..\obj\xmc_dma.__cstat.et
- $PROJ_DIR$\..\obj\file.pbi
- $PROJ_DIR$\..\obj\netdev.pbi
- $PROJ_DIR$\..\obj\xmc_ebu.__cstat.et
- $PROJ_DIR$\..\obj\xmc_vadc.__cstat.et
- $PROJ_DIR$\..\obj\xmc_i2c.__cstat.et
- $PROJ_DIR$\..\obj\net.o
- $PROJ_DIR$\..\obj\xmc_ecat.pbi
- $PROJ_DIR$\..\obj\can.pbi
- $PROJ_DIR$\..\obj\hooks.pbi
- $TOOLKIT_DIR$\inc\c\wchar.h
+ $PROJ_DIR$\..\obj\nvm.pbi
+ $PROJ_DIR$\..\obj\backdoor.o
+ $TOOLKIT_DIR$\inc\c\stdint.h
+ $PROJ_DIR$\..\obj\xmc_can.pbi
+ $TOOLKIT_DIR$\inc\c\DLib_Config_Normal.h
+ $PROJ_DIR$\..\obj\file.o
+ $PROJ_DIR$\..\timer.h
+ $TOOLKIT_DIR$\lib\shb_l.a
+ $PROJ_DIR$\..\obj\timer.pbi
+ $PROJ_DIR$\..\obj\system_XMC4700.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_eth_mac.o
+ $PROJ_DIR$\..\obj\xmc_gpio.pbi
+ $PROJ_DIR$\..\obj\xmc_eth_mac.pbi
+ $PROJ_DIR$\..\obj\xmc_common.__cstat.et
+ $TOOLKIT_DIR$\inc\c\string.h
+ $TOOLKIT_DIR$\inc\c\DLib_Product.h
+ $PROJ_DIR$\..\obj\xmc_gpio.__cstat.et
+ $PROJ_DIR$\..\obj\xmc4_scu.pbi
+ $PROJ_DIR$\..\obj\xmc4_rtc.pbi
+ $PROJ_DIR$\..\obj\xmc_hrpwm.pbi
+ $PROJ_DIR$\..\bin\openblt_xmc4700.out
+ $PROJ_DIR$\..\obj\xmc_ccu4.pbi
+ $PROJ_DIR$\..\obj\uart.pbi
+ $PROJ_DIR$\..\obj\file.__cstat.et
+ $TOOLKIT_DIR$\inc\c\cmsis_iar.h
+ $TOOLKIT_DIR$\inc\c\intrinsics.h
+ $PROJ_DIR$\..\obj\xmc_ledts.o
+ $PROJ_DIR$\..\obj\xmc_i2s.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_sdmmc.o
+ $PROJ_DIR$\..\obj\uip_arp.o
+ $PROJ_DIR$\..\obj\main.__cstat.et
+ $TOOLKIT_DIR$\lib\dl7M_tln.a
+ $TOOLKIT_DIR$\inc\c\xtls.h
+ $PROJ_DIR$\..\obj\xmc_wdt.o
+ $TOOLKIT_DIR$\inc\c\stdlib.h
+ $TOOLKIT_DIR$\inc\c\ysizet.h
+ $PROJ_DIR$\..\obj\xmc_i2c.pbi
+ $PROJ_DIR$\..\obj\boot.__cstat.et
+ $PROJ_DIR$\..\obj\cpu_comp.o
+ $PROJ_DIR$\..\obj\com.o
+ $PROJ_DIR$\..\obj\xmc_wdt.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_eth_phy_ksz8031rnl.__cstat.et
$PROJ_DIR$\..\obj\hooks.o
- $TOOLKIT_DIR$\lib\rt7M_tl.a
- $TOOLKIT_DIR$\inc\c\xlocale.h
+ $PROJ_DIR$\..\obj\xmc_fce.o
+ $PROJ_DIR$\..\obj\xmc_ecat.pbi
+ $PROJ_DIR$\..\obj\xmc_wdt.pbi
$PROJ_DIR$\..\obj\cpu_comp.pbi
$PROJ_DIR$\..\obj\xmc_usic.o
- $PROJ_DIR$\..\obj\xmc_fce.__cstat.et
- $PROJ_DIR$\..\obj\xmc_dma.pbi
+ $PROJ_DIR$\..\obj\xmc_eth_phy_ksz8031rnl.pbi
+ $PROJ_DIR$\..\obj\cpu.o
$PROJ_DIR$\..\obj\xmc_dac.o
+ $TOOLKIT_DIR$\inc\c\wchar.h
+ $PROJ_DIR$\..\obj\timer.__cstat.et
+ $TOOLKIT_DIR$\inc\c\stdio.h
+ $PROJ_DIR$\..\obj\net.pbi
+ $PROJ_DIR$\..\timer.c
+ $PROJ_DIR$\..\obj\backdoor.pbi
+ $TOOLKIT_DIR$\lib\rt7M_tl.a
+ $PROJ_DIR$\..\obj\net.o
+ $PROJ_DIR$\..\obj\xmc4_flash.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_dsd.pbi
+ $PROJ_DIR$\..\obj\xmc_usbd.o
+ $PROJ_DIR$\..\obj\xmc_ecat.o
+ $PROJ_DIR$\..\obj\xmc4_flash.o
+ $PROJ_DIR$\..\obj\hooks.pbi
+ $PROJ_DIR$\..\bin\openblt_xmc4700.srec
+ $PROJ_DIR$\..\obj\can.pbi
+ $PROJ_DIR$\..\obj\xmc_i2c.o
$PROJ_DIR$\..\obj\nvm.o
$PROJ_DIR$\..\obj\main.pbi
- $PROJ_DIR$\..\timer.c
- $PROJ_DIR$\..\obj\xmc_eth_phy_ksz8031rnl.pbi
- $PROJ_DIR$\..\obj\net.pbi
+ $TOOLKIT_DIR$\inc\c\xlocale.h
+ $PROJ_DIR$\..\obj\xmc_dma.pbi
$PROJ_DIR$\..\obj\xmc_hrpwm.__cstat.et
- $PROJ_DIR$\..\obj\cpu.o
- $PROJ_DIR$\..\obj\com.__cstat.et
- $PROJ_DIR$\..\obj\xmc_fce.o
- $PROJ_DIR$\..\obj\xmc_eru.o
$TOOLKIT_DIR$\inc\c\DLib_Threads.h
- $PROJ_DIR$\..\obj\xmc4_flash.__cstat.et
- $PROJ_DIR$\..\obj\xmc_wdt.pbi
- $PROJ_DIR$\..\lib\uip\netdev.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc4_ccu4_map.h
- $PROJ_DIR$\..\lib\uip\clock-arch.c
- $PROJ_DIR$\..\lib\cmsis\core_cmSimd.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc4_eru.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc4_gpio.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc4_rtc.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc4_rtc.h
+ $PROJ_DIR$\..\obj\xmc_usic.pbi
+ $PROJ_DIR$\..\obj\xcp.__cstat.et
+ $PROJ_DIR$\..\obj\netdev.o
+ $PROJ_DIR$\..\obj\xmc_ecat.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_eth_phy_dp83848.__cstat.et
+ $PROJ_DIR$\..\obj\uart.__cstat.et
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\IAR\cstart.s
+ $PROJ_DIR$\..\obj\xmc_uart.__cstat.et
+ $PROJ_DIR$\..\obj\can.__cstat.et
+ $PROJ_DIR$\..\obj\xmc4_gpio.o
+ $PROJ_DIR$\..\obj\xmc_rtc.o
+ $PROJ_DIR$\..\obj\xmc_ccu4.__cstat.et
+ $PROJ_DIR$\..\obj\cop.o
+ $PROJ_DIR$\..\obj\xmc_ccu8.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_usbd.pbi
+ $PROJ_DIR$\..\obj\xmc_dsd.o
+ $PROJ_DIR$\..\obj\netdev.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_hrpwm.o
+ $PROJ_DIR$\..\obj\xmc_ledts.pbi
+ $PROJ_DIR$\..\obj\flash.__cstat.et
+ $TOOLKIT_DIR$\inc\c\xmtx.h
+ $PROJ_DIR$\..\obj\xmc_spi.o
+ $PROJ_DIR$\..\obj\xmc_sdmmc.__cstat.et
+ $PROJ_DIR$\..\obj\xmc4_eru.__cstat.et
+ $TOOLKIT_DIR$\inc\c\ycheck.h
+ $PROJ_DIR$\..\obj\clock-arch.o
+ $PROJ_DIR$\..\obj\xmc_common.o
+ $PROJ_DIR$\..\obj\clock-arch.__cstat.et
+ $TOOLKIT_DIR$\inc\c\ystdio.h
+ $PROJ_DIR$\..\obj\xmc_ebu.__cstat.et
+ $PROJ_DIR$\..\obj\cpu.pbi
+ $PROJ_DIR$\..\obj\xmc_rtc.__cstat.et
+ $PROJ_DIR$\..\obj\dhcpc.pbi
+ $PROJ_DIR$\..\obj\xmc4_scu.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_usic.__cstat.et
+ $PROJ_DIR$\..\obj\backdoor.__cstat.et
+ $PROJ_DIR$\..\obj\uiplib.__cstat.et
+ $PROJ_DIR$\..\obj\clock-arch.pbi
+ $PROJ_DIR$\..\obj\com.__cstat.et
+ $PROJ_DIR$\..\obj\dhcpc.o
+ $TOOLKIT_DIR$\inc\c\stdbool.h
+ $PROJ_DIR$\..\obj\xmc_dma.__cstat.et
+ $PROJ_DIR$\..\obj\file.pbi
+ $PROJ_DIR$\..\obj\xmc_eth_phy_ksz8081rnb.o
+ $PROJ_DIR$\..\obj\uip_arp.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_fce.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_i2c.__cstat.et
+ $PROJ_DIR$\..\obj\timer.o
+ $PROJ_DIR$\..\obj\com.pbi
+ $PROJ_DIR$\..\obj\xmc_vadc.__cstat.et
+ $TOOLKIT_DIR$\inc\c\xencoding_limits.h
+ $PROJ_DIR$\..\obj\netdev.pbi
+ $PROJ_DIR$\..\obj\system_XMC4700.pbi
+ $PROJ_DIR$\..\obj\assert.pbi
+ $PROJ_DIR$\..\obj\xmc_spi.pbi
+ $PROJ_DIR$\..\obj\xmc_dac.pbi
+ $PROJ_DIR$\..\obj\xmc_eru.o
+ $PROJ_DIR$\..\obj\xmc_uart.o
+ $PROJ_DIR$\..\obj\startup_XMC4700.o
+ $PROJ_DIR$\..\bin\demoprog_xmc4700.srec
+ $PROJ_DIR$\..\obj\xmc_i2s.pbi
+ $PROJ_DIR$\..\obj\main.o
+ $PROJ_DIR$\..\obj\xmc_usbh.o
+ $PROJ_DIR$\..\obj\xcp.o
+ $TOOLKIT_DIR$\inc\c\xlocale_c.h
+ $PROJ_DIR$\..\obj\cop.__cstat.et
+ $PROJ_DIR$\..\obj\shared_params.pbi
+ $PROJ_DIR$\..\obj\xmc_eth_phy_dp83848.o
+ $PROJ_DIR$\..\obj\openblt_xmc4700.map
+ $TOOLKIT_DIR$\inc\c\DLib_Defaults.h
+ $PROJ_DIR$\..\obj\xmc_can.o
+ $PROJ_DIR$\..\obj\led.o
+ $PROJ_DIR$\..\bin\demoprog_xmc4700.out
+ $PROJ_DIR$\..\obj\xmc_common.pbi
+ $PROJ_DIR$\..\obj\shared_params.o
+ $PROJ_DIR$\..\obj\nvm.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_posif.o
+ $PROJ_DIR$\..\obj\cpu_comp.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_vadc.o
+ $PROJ_DIR$\..\obj\xcp.pbi
+ $TOOLKIT_DIR$\inc\c\ctype.h
+ $PROJ_DIR$\..\obj\shared_params.__cstat.et
+ $PROJ_DIR$\..\obj\led.__cstat.et
+ $PROJ_DIR$\..\obj\xmc4_gpio.__cstat.et
+ $PROJ_DIR$\..\obj\xmc4_rtc.o
+ $PROJ_DIR$\..\obj\assert.o
+ $PROJ_DIR$\..\obj\xmc_vadc.pbi
+ $PROJ_DIR$\..\obj\xmc_dsd.__cstat.et
+ $PROJ_DIR$\..\obj\ff.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_eth_phy_ksz8031rnl.o
+ $PROJ_DIR$\..\obj\system_XMC4700.o
+ $PROJ_DIR$\..\obj\xmc_rtc.pbi
+ $PROJ_DIR$\..\obj\mmc.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_i2s.o
+ $PROJ_DIR$\..\obj\boot.o
+ $PROJ_DIR$\..\obj\xmc4_scu.o
+ $TOOLKIT_DIR$\inc\c\stddef.h
+ $PROJ_DIR$\..\boot.c
+ $PROJ_DIR$\..\obj\xmc_eth_phy_dp83848.pbi
+ $PROJ_DIR$\..\obj\xmc_eru.pbi
+ $PROJ_DIR$\..\obj\xmc_can.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_dma.o
+ $PROJ_DIR$\..\obj\uip_timer.__cstat.et
+ $PROJ_DIR$\..\obj\uip_timer.o
+ $TOOLKIT_DIR$\inc\c\time.h
+ $PROJ_DIR$\..\header.h
+ $PROJ_DIR$\..\obj\xmc4_flash.pbi
+ $PROJ_DIR$\..\obj\xmc4_rtc.__cstat.et
+ $PROJ_DIR$\..\obj\uiplib.o
+ $PROJ_DIR$\..\obj\xmc4_eru.pbi
+ $TOOLKIT_DIR$\lib\m7M_tls.a
+ $PROJ_DIR$\..\obj\xmc_posif.pbi
+ $PROJ_DIR$\..\obj\uip.pbi
+ $PROJ_DIR$\..\obj\xmc_eru.__cstat.et
+ $TOOLKIT_DIR$\inc\c\stdarg.h
+ $PROJ_DIR$\..\obj\sdmmc_block_private_sd.__cstat.et
+ $PROJ_DIR$\..\obj\sdmmc_block.o
+ $PROJ_DIR$\..\obj\sdmmc_block_private_sd.pbi
+ $PROJ_DIR$\..\obj\sdmmc_block.pbi
+ $PROJ_DIR$\..\obj\unicode.o
+ $PROJ_DIR$\..\obj\mmc.pbi
+ $PROJ_DIR$\..\obj\sdmmc_block.__cstat.et
+ $PROJ_DIR$\..\obj\sdmmc_block_conf.o
+ $PROJ_DIR$\..\obj\sdmmc_block_private_sd.o
+ $PROJ_DIR$\..\obj\unicode.__cstat.et
+ $PROJ_DIR$\..\obj\sdmmc_block_conf.__cstat.et
+ $PROJ_DIR$\..\obj\sdmmc_block_conf.pbi
+ $PROJ_DIR$\..\obj\ff.o
+ $PROJ_DIR$\..\obj\mmc.o
+ $PROJ_DIR$\..\..\..\..\Source\third_party\fatfs\src\option\ccsbcs.c
+ $PROJ_DIR$\..\obj\unicode.pbi
+ $PROJ_DIR$\..\obj\ff.pbi
$PROJ_DIR$\..\lib\xmclib\inc\xmc4_gpio_map.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc4_scu.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_can_map.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc4_gpio.c
- $PROJ_DIR$\..\lib\xmclib\src\xmc4_scu.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc4_usic_map.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc4_ccu8_map.h
- $PROJ_DIR$\..\lib\uip\uip-conf.h
- $PROJ_DIR$\..\lib\cmsis\core_cm4.h
- $PROJ_DIR$\..\lib\cmsis\core_cmFunc.h
+ $PROJ_DIR$\..\lib\uip\clock-arch.c
$PROJ_DIR$\..\lib\uip\netdev.c
$PROJ_DIR$\..\lib\xmclib\inc\xmc4_eru_map.h
- $PROJ_DIR$\..\lib\cmsis\core_cmInstr.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc4_flash.c
+ $PROJ_DIR$\..\lib\FatFS\SDMMC_BLOCK\sdmmc_block_private_sd.h
$PROJ_DIR$\..\lib\uip\clock-arch.h
+ $PROJ_DIR$\..\lib\FatFS\ffconf.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc4_gpio.c
+ $PROJ_DIR$\..\lib\FatFS\SDMMC_BLOCK\sdmmc_block.c
+ $PROJ_DIR$\..\lib\xmclib\src\xmc4_rtc.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc4_rtc.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc4_scu.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc4_flash.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc4_usic_map.h
+ $PROJ_DIR$\..\lib\FatFS\SDMMC_BLOCK\sdmmc_block_extern.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc4_eru.c
+ $PROJ_DIR$\..\lib\xmclib\src\xmc4_scu.c
+ $PROJ_DIR$\..\lib\cmsis\core_cmSimd.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc4_ccu4_map.h
$PROJ_DIR$\..\lib\xmclib\inc\xmc4_flash.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_can.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_ccu8.h
$PROJ_DIR$\..\lib\xmclib\src\xmc_can.c
+ $PROJ_DIR$\..\lib\FatFS\SDMMC_BLOCK\sdmmc_block.h
+ $PROJ_DIR$\..\lib\FatFS\mmc.c
+ $PROJ_DIR$\..\lib\FatFS\SDMMC_BLOCK\sdmmc_block_conf.c
+ $PROJ_DIR$\..\lib\FatFS\SDMMC_BLOCK\sdmmc_block_private_sd.c
+ $PROJ_DIR$\..\lib\FatFS\SDMMC_BLOCK\sdmmc_block_conf.h
+ $PROJ_DIR$\..\lib\uip\netdev.h
+ $PROJ_DIR$\..\lib\uip\uip-conf.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc4_ccu8_map.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc4_gpio.h
+ $PROJ_DIR$\..\lib\cmsis\core_cm4.h
+ $PROJ_DIR$\..\lib\cmsis\core_cmInstr.h
+ $PROJ_DIR$\..\lib\cmsis\core_cmFunc.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_usbh.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_posif.c
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_usic.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_i2s.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_usic.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_vadc.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_usbd.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_hrpwm.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_fce.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_rtc.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_sdmmc.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_spi.c
$PROJ_DIR$\..\lib\xmclib\src\xmc_gpio.c
$PROJ_DIR$\..\lib\xmclib\inc\xmc_gpio.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_dac.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_vadc_map.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_eth_mac_map.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_dma.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_dma_map.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_dsd.c
- $PROJ_DIR$\..\lib\xmclib\src\xmc_eru.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_eru.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_ebu.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_eth_mac.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_device.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_mac.c
- $PROJ_DIR$\..\lib\xmclib\src\xmc_dma.c
- $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_phy_ksz8081rnb.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_common.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_ecat.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_fce.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_fce.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_hrpwm.c
- $PROJ_DIR$\..\lib\xmclib\src\xmc_ebu.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_flash.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_phy_dp83848.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_dsd.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_eth_phy.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_phy_ksz8031rnl.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_hrpwm.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_ecat.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_dac.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_usbd.c
- $PROJ_DIR$\..\lib\xmclib\src\xmc_rtc.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_i2c.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_i2s.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_uart.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_usbd.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_usbh.c
- $PROJ_DIR$\..\lib\xmclib\src\xmc_usic.c
- $PROJ_DIR$\..\lib\xmclib\src\xmc_posif.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_uart.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_usbd_regs.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_usic.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_i2c.c
- $PROJ_DIR$\..\lib\xmclib\src\xmc_ledts.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_sdmmc.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_vadc.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_vadc.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_scu.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_wdt.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_usbh.h
$PROJ_DIR$\..\lib\xmclib\src\xmc_i2s.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_ledts.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_rtc.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_spi.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_spi.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_sdmmc.c
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_i2c.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_flash.h
$PROJ_DIR$\..\lib\xmclib\inc\xmc_posif.h
- $PROJ_DIR$\..\..\..\..\Source\com.h
- $PROJ_DIR$\..\obj\xmc_usbd.o
- $PROJ_DIR$\..\..\..\..\Source\boot.h
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uiplib.h
- $PROJ_DIR$\..\..\..\..\Source\assert.c
- $PROJ_DIR$\..\..\..\..\Source\backdoor.c
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip_arch.h
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uipopt.h
- $PROJ_DIR$\..\..\..\..\Source\assert.h
- $PROJ_DIR$\..\..\..\..\Source\backdoor.h
- $PROJ_DIR$\..\..\..\..\Source\boot.c
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip_arp.h
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip_arp.c
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip_timer.h
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip_timer.c
- $PROJ_DIR$\..\..\..\..\Source\com.c
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip.h
- $PROJ_DIR$\..\..\..\..\Source\can.h
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uiplib.c
- $PROJ_DIR$\..\main.c
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\lc.h
- $PROJ_DIR$\..\hooks.c
- $PROJ_DIR$\..\lib\system_XMC4700.h
- $PROJ_DIR$\..\led.h
- $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\flash.c
- $PROJ_DIR$\..\startup_XMC4700.s
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_ledts.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_sdmmc.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_spi.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_uart.c
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_hrpwm.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_rtc.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_scu.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_usbd.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_i2c.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_ledts.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_usbd_regs.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_uart.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_usbh.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_dac.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_device.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_dma_map.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_ecat.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_mac.c
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_ccu8.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_ccu8.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_dac.c
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_common.c
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_ebu.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_ebu.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_dma.c
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_phy_dp83848.c
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_phy_ksz8031rnl.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_common.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_eth_phy.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_eru.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_eru.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_dma.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_dsd.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_dsd.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_eth_mac_map.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_phy_ksz8081rnb.c
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_fce.c
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_ecat.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_eth_mac.h
$PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\nvm.c
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip_arch.h
+ $PROJ_DIR$\..\lib\system_XMC4700.h
$PROJ_DIR$\..\blt_conf.h
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\apps\dhcpc\dhcpc.c
- $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\can.c
- $PROJ_DIR$\..\led.c
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\apps\dhcpc\dhcpc.h
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip.c
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\lc-switch.h
- $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\uart.c
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\clock.h
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\pt.h
- $PROJ_DIR$\..\lib\XMC4700.h
- $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\IAR\cpu_comp.c
- $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\flash.h
$PROJ_DIR$\..\lib\system_XMC4700.c
- $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\cpu.c
- $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\types.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_vadc_map.h
+ $PROJ_DIR$\..\lib\XMC4700.h
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\flash.h
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\can.c
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_wdt.c
+ $PROJ_DIR$\..\led.c
$PROJ_DIR$\..\lib\xmclib\inc\xmc_wdt.h
$PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\timer.c
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\lc-addrlabels.h
- $PROJ_DIR$\..\bin\openblt_xmc4700.srec
- $PROJ_DIR$\..\obj\cpu.pbi
- $PROJ_DIR$\..\..\..\..\Source\xcp.h
- $PROJ_DIR$\..\obj\xmc_dsd.pbi
- $PROJ_DIR$\..\..\..\..\Source\usb.h
- $PROJ_DIR$\..\obj\xmc_i2c.o
- $PROJ_DIR$\..\..\..\..\Source\timer.h
- $PROJ_DIR$\..\..\..\..\Source\xcp.c
- $PROJ_DIR$\..\obj\xmc_ecat.o
- $PROJ_DIR$\..\obj\uart.__cstat.et
- $PROJ_DIR$\..\..\..\..\Source\uart.h
- $PROJ_DIR$\..\obj\xmc_ccu4.__cstat.et
- $PROJ_DIR$\..\obj\xmc_vadc.o
- $TOOLKIT_DIR$\inc\c\ctype.h
- $TOOLKIT_DIR$\inc\c\DLib_Defaults.h
- $PROJ_DIR$\..\obj\cop.__cstat.et
- $TOOLKIT_DIR$\inc\c\xencoding_limits.h
- $PROJ_DIR$\..\obj\nvm.__cstat.et
- $PROJ_DIR$\..\obj\xcp.pbi
- $PROJ_DIR$\..\obj\xmc_spi.pbi
- $PROJ_DIR$\..\obj\main.o
- $TOOLKIT_DIR$\inc\c\xlocale_c.h
- $PROJ_DIR$\..\..\..\..\Source\cop.c
- $PROJ_DIR$\..\..\..\..\Source\cpu.h
- $PROJ_DIR$\..\..\..\..\Source\net.c
- $PROJ_DIR$\..\..\..\..\Source\file.h
- $PROJ_DIR$\..\..\..\..\Source\file.c
- $PROJ_DIR$\..\..\..\..\Source\nvm.h
- $PROJ_DIR$\..\..\..\..\Source\plausibility.h
- $PROJ_DIR$\..\..\..\..\Source\cop.h
- $PROJ_DIR$\..\bin\demoprog_xmc4700.srec
- $PROJ_DIR$\..\..\..\..\Source\net.h
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\cpu.c
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\flash.c
+ $PROJ_DIR$\..\hooks.c
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\IAR\cpu_comp.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_vadc.h
$PROJ_DIR$\..\shared_params.h
- $PROJ_DIR$\..\obj\shared_params.__cstat.et
+ $PROJ_DIR$\..\led.h
+ $PROJ_DIR$\..\main.c
$PROJ_DIR$\..\shared_params.c
- $PROJ_DIR$\..\obj\shared_params.o
- $PROJ_DIR$\..\obj\shared_params.pbi
+ $PROJ_DIR$\..\startup_XMC4700.s
+ $PROJ_DIR$\..\..\..\..\Source\third_party\fatfs\src\option\unicode.c
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\clock.h
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\apps\dhcpc\dhcpc.c
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\apps\dhcpc\dhcpc.h
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\lc-addrlabels.h
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\lc-switch.h
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\pt.h
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip.c
+ $PROJ_DIR$\..\..\..\..\Source\third_party\fatfs\src\ff.c
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip.h
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\types.h
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\lc.h
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\uart.c
+ $PROJ_DIR$\..\..\..\..\Source\third_party\fatfs\src\diskio.h
+ $PROJ_DIR$\..\..\..\..\Source\third_party\fatfs\src\ff.h
+ $PROJ_DIR$\..\..\..\..\Source\third_party\fatfs\src\integer.h
+ $PROJ_DIR$\..\..\..\..\Source\assert.h
+ $PROJ_DIR$\..\..\..\..\Source\com.h
+ $PROJ_DIR$\..\..\..\..\Source\uart.h
+ $PROJ_DIR$\..\..\..\..\Source\xcp.c
+ $PROJ_DIR$\..\obj\cop.pbi
+ $PROJ_DIR$\..\..\..\..\Source\com.c
+ $PROJ_DIR$\..\obj\xmc_eth_mac.__cstat.et
+ $PROJ_DIR$\..\..\..\..\Source\cpu.h
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uipopt.h
+ $PROJ_DIR$\..\..\..\..\Source\timer.h
+ $PROJ_DIR$\..\..\..\..\Source\backdoor.h
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip_arp.h
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip_timer.h
+ $PROJ_DIR$\..\..\..\..\Source\boot.c
+ $PROJ_DIR$\..\..\..\..\Source\can.h
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uiplib.c
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip_timer.c
+ $PROJ_DIR$\..\..\..\..\Source\cop.c
+ $PROJ_DIR$\..\..\..\..\Source\file.h
+ $PROJ_DIR$\..\..\..\..\Source\net.c
+ $PROJ_DIR$\..\..\..\..\Source\net.h
+ $PROJ_DIR$\..\..\..\..\Source\nvm.h
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uiplib.h
+ $PROJ_DIR$\..\..\..\..\Source\backdoor.c
+ $PROJ_DIR$\..\..\..\..\Source\file.c
+ $PROJ_DIR$\..\..\..\..\Source\cop.h
+ $PROJ_DIR$\..\..\..\..\Source\plausibility.h
+ $PROJ_DIR$\..\..\..\..\Source\usb.h
+ $PROJ_DIR$\..\..\..\..\Source\xcp.h
+ $PROJ_DIR$\..\..\..\..\Source\assert.c
+ $PROJ_DIR$\..\..\..\..\Source\boot.h
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip_arp.c
+ $PROJ_DIR$\..\obj\xmc_ccu8.pbi
+ $PROJ_DIR$\..\obj\xmc_ebu.pbi
+ $PROJ_DIR$\..\obj\xmc_gpio.o
+ $PROJ_DIR$\..\obj\xmc_ledts.__cstat.et
+ $PROJ_DIR$\..\cfg\memory.x
+ $PROJ_DIR$\..\obj\cstart.o
+ $PROJ_DIR$\..\obj\xmc_posif.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_fce.pbi
+ $TOOLKIT_DIR$\inc\c\limits.h
+ $PROJ_DIR$\..\obj\uip_arp.pbi
+ $TOOLKIT_DIR$\inc\c\DLib_Product_string.h
+ $PROJ_DIR$\..\obj\xmc_ccu8.o
+ $PROJ_DIR$\..\obj\xmc_spi.__cstat.et
+ $PROJ_DIR$\..\obj\uip.o
+ $PROJ_DIR$\..\obj\xmc_ebu.o
+ $PROJ_DIR$\..\obj\dhcpc.__cstat.et
+ $PROJ_DIR$\..\obj\uip_timer.pbi
+ $PROJ_DIR$\..\obj\uip.__cstat.et
+ $PROJ_DIR$\..\obj\flash.o
+ $TOOLKIT_DIR$\inc\c\xlocaleuse.h
+ $PROJ_DIR$\..\obj\xmc_eth_phy_ksz8081rnb.__cstat.et
+ $TOOLKIT_DIR$\inc\c\yvals.h
+ $PROJ_DIR$\..\obj\xmc_usbd.__cstat.et
+ $PROJ_DIR$\..\obj\uiplib.pbi
+ $PROJ_DIR$\..\obj\xmc_eth_phy_ksz8081rnb.pbi
+ $PROJ_DIR$\..\obj\flash.pbi
+ $PROJ_DIR$\..\obj\xmc4_gpio.pbi
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_ccu4.c
-
-
- BICOMP
- 94
-
-
- ICCARM
- 79
-
-
- __cstat
- 355
-
-
-
-
- BICOMP
- 358 150 134 335 81 47 320 288 121 70 360 131 85 231 257 215 32 177 253 211 230 97 2 234 217 105 223
-
-
- ICCARM
- 2 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 215 288 223
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_common.c
-
-
- BICOMP
- 13
-
-
- ICCARM
- 175
-
-
- __cstat
- 118
-
-
-
-
- BICOMP
- 70 121 360 131 150 85 134 358 81 47 335 320 97 32 177 253 211 230 231 257 234 217 105
-
-
- ICCARM
- 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_ccu8.c
-
-
- BICOMP
- 78
-
-
- ICCARM
- 65
-
-
- __cstat
- 147
-
-
-
-
- BICOMP
- 320 81 228 47 134 358 150 335 217 288 257 121 70 360 131 85 32 177 253 211 230 234 105 239 231 97 223
-
-
- ICCARM
- 239 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 228 288 223
-
-
-
[ROOT_NODE]
ILINK
- 96 8
+ 41 163
- $PROJ_DIR$\..\bin\demoprog_xmc4700.out
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_ccu4.c
-
- OBJCOPY
- 374
-
-
-
-
- ILINK
- 75 43 17 364 15 20 167 135 154 143 42 35 5 79 65 175 200 36 151 50 352 210 127 19 24 172 209 74 145 349 29 57 7 142 82 153 16 299 9 197 356 100 109 194 6 80
-
-
-
-
- $PROJ_DIR$\..\boot.c
-
-
- BICOMP
- 117
-
ICCARM
- 43
+ 12
+
+
+ BICOMP
+ 42
__cstat
- 88
+ 106
ICCARM
- 26 325 335 230 121 150 70 358 131 81 360 211 234 105 97 231 217 320 136 321 130 242 257 32 85 177 134 47 253 219 222 280 282 227 238 288 223 224
+ 0 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 245 284 238
+
+
+ BICOMP
+ 164 119 35 323 36 398 319 284 23 409 145 25 56 259 305 245 191 135 292 94 257 46 0 258 244 45 238
@@ -521,744 +463,30 @@
OBJCOPY
- 344
+ 86
ILINK
- 8
+ 163
ILINK
- 75 22 129 43 137 174 103 144 207 101 163 123 72 193 17 364 188 158 201 379 15 20 167 126 49 51 44 45 4 135 154 143 42 35 5 79 65 175 200 36 151 50 352 210 127 19 24 172 209 74 145 349 29 57 7 142 82 153 16 299 9 197 356 100 109 194 6 80
+ 392 180 22 189 20 120 60 107 70 59 134 222 26 406 63 166 156 223 79 97 89 211 217 218 169 153 185 142 8 401 50 198 203 214 158 6 84 104 179 190 165 12 399 121 71 196 110 402 83 151 31 162 184 138 64 390 112 88 188 47 171 105 49 116 152 82 157 68 173 54 28 78 205 52
-
- $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\IAR\cstart.s
-
-
- AARM
- 77
-
-
-
$PROJ_DIR$\..\timer.c
-
- BICOMP
- 108
-
-
- ICCARM
- 167
-
-
- __cstat
- 148
-
-
-
-
- ICCARM
- 26 325 335 230 121 150 70 358 131 81 360 211 234 105 97 231 217 320 136 321 130
-
-
-
-
- $PROJ_DIR$\..\lib\uip\clock-arch.c
-
-
- BICOMP
- 166
-
-
- ICCARM
- 174
-
-
- __cstat
- 170
-
-
-
-
- BICOMP
- 367 340 307 300 325 371 298 236 306 372 373 350 369 346
-
-
- ICCARM
- 236 300 340 306 325 372 367 373 371 350 307 369 298 346
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc4_eru.c
-
-
- BICOMP
- 34
-
-
- ICCARM
- 135
-
-
- __cstat
- 155
-
-
-
-
- BICOMP
- 105 121 70 233 360 131 150 85 134 358 81 47 335 320 234 288 257 32 177 253 211 230 217 250 231 97 223
-
-
- ICCARM
- 250 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 233 288 223
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc4_rtc.c
-
-
- BICOMP
- 83
-
-
- ICCARM
- 42
-
-
- __cstat
- 30
-
-
-
-
- BICOMP
- 70 230 150 177 85 121 257 221 32 253 211 97 288 21 134 358 360 131 81 47 335 320 231 293 234 217 105 223
-
-
- ICCARM
- 293 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 21 221 288 223
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc4_gpio.c
-
-
- BICOMP
- 56
-
-
- ICCARM
- 143
-
-
- __cstat
- 14
-
-
-
-
- BICOMP
- 177 85 150 70 230 217 257 32 253 211 121 219 134 358 360 131 81 47 335 320 234 105 242 231 97 222
-
-
- ICCARM
- 242 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 219 222
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc4_scu.c
-
-
- BICOMP
- 92
-
-
- ICCARM
- 35
-
-
- __cstat
- 179
-
-
-
-
- BICOMP
- 150 335 97 358 134 81 47 320 257 121 70 360 131 85 223 32 177 253 211 230 231 288 234 217 105
-
-
- ICCARM
- 288 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 223
-
-
-
-
- $PROJ_DIR$\..\lib\uip\netdev.c
-
-
- BICOMP
- 184
-
-
- ICCARM
- 158
-
-
- __cstat
- 160
-
-
-
-
- BICOMP
- 257 105 375 298 325 81 230 252 371 334 236 331 314 134 358 150 300 229 340 367 307 346 318 121 70 360 131 234 309 242 266 305 329 306 372 373 350 369 311 333 219 32 177 253 85 211 47 335 320 217 231 97 222 245
-
-
- ICCARM
- 314 305 229 300 340 306 325 372 367 373 371 350 307 369 298 346 375 329 311 333 236 334 318 331 309 242 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 219 222 252 245 266
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc4_flash.c
-
-
- BICOMP
- 33
-
-
- ICCARM
- 154
-
-
- __cstat
- 212
-
-
-
-
- BICOMP
- 211 70 32 121 253 150 257 177 85 230 97 237 134 358 360 131 81 47 335 320 231 263 234 217 105
-
-
- ICCARM
- 263 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 237
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_can.c
-
-
- BICOMP
- 128
-
-
- ICCARM
- 5
-
-
- __cstat
- 39
-
-
-
-
- BICOMP
- 253 224 70 211 150 335 32 47 320 105 257 288 177 85 234 134 121 358 360 131 81 230 217 238 231 97 223
-
-
- ICCARM
- 238 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 288 223 224
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_gpio.c
-
-
- BICOMP
- 124
-
-
- ICCARM
- 74
-
-
- __cstat
- 87
-
-
-
-
- BICOMP
- 85 360 131 150 121 70 217 219 134 358 81 47 335 320 257 32 177 253 211 230 234 105 242 231 97 222
-
-
- ICCARM
- 242 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 219 222
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_dac.c
-
-
- BICOMP
- 171
-
-
- ICCARM
- 200
-
-
- __cstat
- 111
-
-
-
-
- BICOMP
- 134 47 81 320 358 150 335 121 257 70 360 131 85 217 288 32 177 253 211 230 234 105 270 231 97 223
-
-
- ICCARM
- 270 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 288 223
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_dsd.c
-
-
- BICOMP
- 347
-
-
- ICCARM
- 151
-
-
- __cstat
- 23
-
-
-
-
- BICOMP
- 230 257 70 150 177 85 105 288 32 253 211 234 121 134 358 360 131 81 47 335 320 217 265 231 97 223
-
-
- ICCARM
- 265 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 288 223
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_eru.c
-
-
- BICOMP
- 40
-
-
- ICCARM
- 210
-
-
- __cstat
- 27
-
-
-
-
- BICOMP
- 150 360 131 233 85 231 121 70 134 358 81 47 335 320 257 32 177 253 211 230 97 250 234 217 105
-
-
- ICCARM
- 250 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 233
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_mac.c
-
-
- BICOMP
- 132
-
-
- ICCARM
- 127
-
-
- __cstat
- 66
-
-
-
-
- BICOMP
- 245 211 70 253 105 32 150 89 257 177 85 230 234 288 121 134 358 360 131 81 47 335 320 217 252 231 97 223
-
-
- ICCARM
- 252 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 245 89 288 223
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_dma.c
-
-
- BICOMP
- 199
-
-
- ICCARM
- 36
-
-
- __cstat
- 182
-
-
-
-
- BICOMP
- 217 121 70 247 360 131 150 85 288 257 134 358 81 47 335 320 32 177 253 211 230 234 105 246 231 97 223
-
-
- ICCARM
- 246 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 247 288 223
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_phy_ksz8081rnb.c
-
-
- BICOMP
- 68
-
-
- ICCARM
- 172
-
-
- __cstat
- 69
-
-
-
-
- BICOMP
- 121 70 252 360 131 150 85 134 358 81 47 335 320 217 266 257 245 32 177 253 211 230 234 105 231 97
-
-
- ICCARM
- 266 252 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 245
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_fce.c
-
-
- BICOMP
- 55
-
-
- ICCARM
- 209
-
-
- __cstat
- 198
-
-
-
-
- BICOMP
- 131 360 150 85 121 70 105 257 288 134 358 81 47 335 320 234 32 177 253 211 230 217 260 231 97 223
-
-
- ICCARM
- 260 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 288 223
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_hrpwm.c
-
-
- BICOMP
- 102
-
-
- ICCARM
- 145
-
-
- __cstat
- 206
-
-
-
-
- BICOMP
- 253 150 32 211 70 121 257 177 85 230 97 134 358 360 131 81 47 335 320 231 268 234 217 105
-
-
- ICCARM
- 268 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_ebu.c
-
-
- BICOMP
- 52
-
-
- ICCARM
- 50
-
-
- __cstat
- 185
-
-
-
-
- BICOMP
- 177 85 150 70 230 105 257 32 253 211 234 288 121 134 358 360 131 81 47 335 320 217 251 231 97 223
-
-
- ICCARM
- 251 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 288 223
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_phy_dp83848.c
-
-
- BICOMP
- 28
-
-
- ICCARM
- 19
-
-
- __cstat
- 113
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_phy_ksz8031rnl.c
-
-
- BICOMP
- 204
-
-
- ICCARM
- 24
-
-
- __cstat
- 93
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_ecat.c
-
-
- BICOMP
- 189
-
-
- ICCARM
- 352
-
-
- __cstat
- 156
-
-
-
-
- BICOMP
- 253 150 32 211 70 121 257 177 85 230 97 134 358 360 131 81 47 335 320 231 258 234 217 105
-
-
- ICCARM
- 258 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_usbd.c
-
-
- BICOMP
- 149
-
-
- ICCARM
- 299
-
-
- __cstat
- 63
-
-
-
-
- BICOMP
- 257 70 150 85 281 177 231 89 32 253 211 47 335 320 134 288 121 358 360 131 81 230 97 276 234 217 105 223
-
-
- ICCARM
- 276 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 89 281 288 223
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_rtc.c
-
-
- BICOMP
- 31
-
ICCARM
142
-
- __cstat
- 180
-
-
-
BICOMP
- 150 257 221 70 230 105 177 85 223 32 253 211 234 293 121 134 358 360 131 81 47 335 320 217 288 231 97 21
-
-
- ICCARM
- 288 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 223 293 21 221
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_uart.c
-
-
- BICOMP
- 84
-
-
- ICCARM
- 16
-
-
- __cstat
- 125
-
-
-
-
- BICOMP
- 70 253 211 223 257 32 150 231 177 85 230 280 121 134 358 360 131 81 47 335 320 97 288 234 217 105 282 227
-
-
- ICCARM
- 288 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 223 280 282 227
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_usbh.c
-
-
- BICOMP
- 116
-
-
- ICCARM
- 9
-
-
- __cstat
- 133
-
-
-
-
- BICOMP
- 150 32 320 211 70 121 253 335 217 290 288 177 85 257 134 358 360 131 81 47 242 230 234 105 219 231 97 223 222
-
-
- ICCARM
- 121 150 70 358 131 81 360 211 134 85 47 290 257 32 177 253 335 230 234 105 97 231 217 320 288 223 242 219 222
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_usic.c
-
-
- BICOMP
- 138
-
-
- ICCARM
- 197
-
-
- __cstat
- 169
-
-
-
-
- BICOMP
- 227 121 70 360 131 150 85 257 134 358 81 47 335 320 97 288 32 177 253 211 230 231 282 234 217 105 223
-
-
- ICCARM
- 282 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 227 288 223
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_posif.c
-
-
- BICOMP
- 25
-
-
- ICCARM
- 7
+ 29
__cstat
@@ -1266,818 +494,69 @@
-
- BICOMP
- 85 360 131 150 257 121 70 105 288 134 358 81 47 335 320 234 32 177 253 211 230 217 297 231 97 223
-
ICCARM
- 297 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 288 223
+ 200 320 323 257 23 119 409 164 25 36 145 94 258 45 46 259 244 319 15 336 27
- $PROJ_DIR$\..\lib\xmclib\src\xmc_i2c.c
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\IAR\cstart.s
- BICOMP
- 98
+ AARM
+ 393
+
+
+
+ $PROJ_DIR$\..\bin\demoprog_xmc4700.out
+
- ICCARM
- 349
-
-
- __cstat
- 187
+ OBJCOPY
+ 154
- BICOMP
- 282 134 47 81 320 227 358 150 335 217 121 70 360 131 85 257 32 177 253 211 230 234 105 273 231 97
-
-
- ICCARM
- 273 282 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 227
+ ILINK
+ 392 189 166 156 153 185 142 6 84 104 179 190 165 12 399 121 71 196 110 402 83 151 31 162 184 138 64 390 112 88 188 47 171 105 49 116 152 82 157 68 173 54 28 78 205 52
- $PROJ_DIR$\..\lib\xmclib\src\xmc_ledts.c
+ $PROJ_DIR$\..\boot.c
-
- BICOMP
- 141
-
ICCARM
- 57
+ 189
-
- __cstat
- 64
-
-
-
-
- BICOMP
- 150 335 134 358 257 81 47 320 105 288 121 70 360 131 85 234 32 177 253 211 230 217 292 231 97 223
-
-
- ICCARM
- 292 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 288 223
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_vadc.c
-
-
- BICOMP
- 41
-
-
- ICCARM
- 356
-
-
- __cstat
- 186
-
-
-
-
- BICOMP
- 150 335 257 134 358 81 47 320 244 121 70 360 131 85 231 288 32 177 253 211 230 97 223 287 234 217 105
-
-
- ICCARM
- 287 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 288 223 244
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_wdt.c
-
-
- BICOMP
- 213
-
-
- ICCARM
- 100
-
-
- __cstat
- 90
-
-
-
-
- BICOMP
- 253 150 32 211 70 121 257 177 85 230 217 288 134 358 360 131 81 47 335 320 234 105 341 231 97 223
-
-
- ICCARM
- 341 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 288 223
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_i2s.c
-
BICOMP
18
-
- ICCARM
- 29
-
__cstat
- 91
-
-
-
-
- BICOMP
- 81 320 134 47 358 150 335 257 121 70 360 131 85 231 274 223 32 177 253 211 230 97 288 234 217 105 282 227
-
-
- ICCARM
- 288 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 223 274 282 227
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_spi.c
-
-
- BICOMP
- 363
-
-
- ICCARM
- 153
-
-
- __cstat
- 53
-
-
-
-
- BICOMP
- 32 150 257 223 253 211 70 121 177 85 230 97 295 134 358 360 131 81 47 335 320 231 288 234 217 105 282 227
-
-
- ICCARM
- 288 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 223 295 282 227
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_sdmmc.c
-
-
- BICOMP
- 110
-
-
- ICCARM
- 82
-
-
- __cstat
- 140
-
-
-
-
- BICOMP
- 150 335 134 358 81 47 320 121 288 257 70 360 131 85 217 32 177 253 211 230 234 105 285 231 97 223
-
-
- ICCARM
- 285 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 288 223
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\assert.c
-
-
- BICOMP
- 168
-
-
- ICCARM
- 22
-
-
- __cstat
- 107
-
-
-
-
- BICOMP
- 371 325 298 340 367 307 300 306 372 373 350 369 346
-
-
- ICCARM
- 300 340 306 325 372 367 373 371 350 307 369 298 346
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\backdoor.c
-
-
- BICOMP
- 146
-
-
- ICCARM
- 129
-
-
- __cstat
- 164
-
-
-
-
- BICOMP
- 371 325 298 340 367 307 300 306 372 373 350 369 346
-
-
- ICCARM
- 300 340 306 325 372 367 373 371 350 307 369 298 346
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\boot.c
-
-
- BICOMP
- 117
-
-
- ICCARM
- 43
-
-
- __cstat
- 88
-
-
-
-
- BICOMP
- 371 325 298 340 367 307 300 306 372 373 350 369 346
-
-
- ICCARM
- 300 340 306 325 372 367 373 371 350 307 369 298 346
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip_arp.c
-
-
- BICOMP
- 60
-
-
- ICCARM
- 51
-
-
- __cstat
- 181
-
-
-
-
- BICOMP
- 371 375 325 298 70 131 314 229 340 367 307 150 134 305 300 329 306 372 373 350 369 311 333 81 309 346 334 236 318 331 85 47 358 360 211
-
-
- ICCARM
- 309 314 305 229 300 340 306 325 372 367 373 371 350 307 369 298 346 375 329 311 333 236 334 318 331 134 150 70 358 131 81 360 211 85 47
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip_timer.c
-
-
- BICOMP
- 59
-
-
- ICCARM
- 44
-
-
- __cstat
- 38
-
-
-
-
- BICOMP
- 333 311 236
-
-
- ICCARM
- 333 236 311
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\com.c
-
-
- BICOMP
- 176
-
-
- ICCARM
- 103
-
-
- __cstat
- 208
-
-
-
-
- BICOMP
- 371 325 298 340 367 307 300 306 372 373 350 369 346 315 354 375
-
-
- ICCARM
- 300 340 306 325 372 367 373 371 350 307 369 298 346 315 354 375
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uiplib.c
-
-
- BICOMP
58
-
- ICCARM
- 45
-
-
- __cstat
- 178
-
-
- BICOMP
- 371 334 236 331 375 325 298 301 305 229 340 367 307 346 318 314 300 329 306 372 373 350 369 311 333
-
ICCARM
- 314 305 229 300 340 306 325 372 367 373 371 350 307 369 298 346 375 329 311 333 236 334 318 331 301
+ 200 320 323 257 23 119 409 164 25 36 145 94 258 45 46 259 244 319 15 336 27 273 305 191 56 135 35 398 292 256 227 289 264 240 1 284 238 2
- $PROJ_DIR$\..\main.c
+ $PROJ_DIR$\..\lib\uip\clock-arch.c
-
- BICOMP
- 202
-
ICCARM
- 364
-
-
- __cstat
- 99
-
-
-
-
- BICOMP
- 350 150 335 288 253 211 70 376 372 32 47 320 97 222 227 280 306 373 369 219 177 85 121 242 238 340 325 367 371 307 298 346 257 134 358 360 131 81 230 231 282 300 234 217 105 224 223
-
-
- ICCARM
- 300 340 306 325 372 367 373 371 350 307 369 298 346 242 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 219 222 280 282 227 238 288 223 224 376
-
-
-
-
- $PROJ_DIR$\..\hooks.c
-
-
- BICOMP
- 191
-
-
- ICCARM
- 193
-
-
- __cstat
- 104
-
-
-
-
- BICOMP
- 346 257 340 307 32 150 367 253 211 70 217 242 325 371 298 177 85 230 121 321 306 372 373 350 369 219 134 358 360 131 81 47 335 320 234 105 300 231 97 222
-
-
- ICCARM
- 300 340 306 325 372 367 373 371 350 307 369 298 346 321 242 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 219 222
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\flash.c
-
-
- BICOMP
- 71
-
-
- ICCARM
- 72
-
-
- __cstat
- 114
-
-
-
-
- BICOMP
- 150 335 372 358 121 350 237 134 81 47 320 306 373 369 70 360 131 85 97 263 340 325 367 371 307 298 346 257 32 177 253 211 230 231 300 234 217 105
-
-
- ICCARM
- 300 340 306 325 372 367 373 371 350 307 369 298 346 263 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 237
-
-
-
-
- $PROJ_DIR$\..\startup_XMC4700.s
-
-
- AARM
- 15
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\nvm.c
-
-
- BICOMP
120
-
- ICCARM
- 201
-
-
- __cstat
- 361
-
-
-
BICOMP
- 371 325 298 340 367 307 300 306 372 373 350 369 346 337
-
-
- ICCARM
- 300 340 306 325 372 367 373 371 350 307 369 298 346 337
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\apps\dhcpc\dhcpc.c
-
-
- BICOMP
- 165
-
-
- ICCARM
- 163
-
-
- __cstat
- 48
-
-
-
-
- BICOMP
- 70 340 311 150 307 329 85 360 131 229 367 62 334 358 81 375 325 371 298 333 134 314 162 211 47 305 300 306 372 373 350 369 159 346 236 318 331
-
-
- ICCARM
- 159 150 70 358 131 81 360 211 85 162 134 47 62 314 305 229 300 340 306 325 372 367 373 371 350 307 369 298 346 375 329 311 333 236 334 318 331
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\can.c
-
-
- BICOMP
- 190
-
-
- ICCARM
- 137
-
-
- __cstat
- 157
-
-
-
-
- BICOMP
- 306 320 369 32 150 47 257 373 224 253 211 70 335 121 242 372 350 177 85 97 223 238 340 325 367 371 307 298 346 288 134 358 360 131 81 230 231 300 234 217 105 219 222
-
-
- ICCARM
- 300 340 306 325 372 367 373 371 350 307 369 298 346 238 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 288 223 224 242 219 222
-
-
-
-
- $PROJ_DIR$\..\led.c
-
-
- BICOMP
- 106
-
-
- ICCARM
- 17
-
-
- __cstat
- 11
-
-
-
-
- BICOMP
- 325 298 177 85 371 150 70 230 217 242 340 367 307 346 257 32 253 211 121 321 306 372 373 350 369 219 134 358 360 131 81 47 335 320 234 105 300 231 97 222
-
-
- ICCARM
- 300 340 306 325 372 367 373 371 350 307 369 298 346 321 242 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 219 222
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip.c
-
-
- BICOMP
- 37
-
-
- ICCARM
- 49
-
-
- __cstat
- 54
-
-
-
-
- BICOMP
- 85 211 329 70 150 305 372 134 350 300 306 373 369 311 333 47 314 304 229 375 340 325 367 371 307 298 346 334 236 318 331 358 360 131 81
-
-
- ICCARM
- 314 305 229 300 340 306 325 372 367 373 371 350 307 369 298 346 375 329 311 333 236 334 318 331 304 134 150 70 358 131 81 360 211 85 47
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\uart.c
-
-
- BICOMP
- 86
-
-
- ICCARM
- 126
-
-
- __cstat
- 353
-
-
-
-
- BICOMP
- 298 282 227 150 335 325 358 371 134 81 47 320 217 340 367 307 346 121 70 360 131 85 280 306 372 373 350 369 257 32 177 253 211 230 234 105 300 231 97
-
-
- ICCARM
- 300 340 306 325 372 367 373 371 350 307 369 298 346 280 282 257 32 150 70 358 131 81 360 211 85 121 177 134 47 253 335 230 234 105 97 231 217 320 227
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\IAR\cpu_comp.c
-
-
- BICOMP
- 196
-
-
- ICCARM
- 101
-
-
- __cstat
- 10
-
-
-
-
- BICOMP
- 298 325 371 340 367 307 150 97 306 372 373 350 369 346 300
-
-
- ICCARM
- 300 340 306 325 372 367 373 371 350 307 369 298 346 97 150
-
-
-
-
- $PROJ_DIR$\..\lib\system_XMC4700.c
-
-
- BICOMP
- 173
-
-
- ICCARM
- 20
-
-
- __cstat
- 119
-
-
-
-
- BICOMP
- 217 70 211 150 320 230 234 335 85 47 358 360 131 81 121 231 97 134 105
-
-
- ICCARM
- 134 150 70 358 131 81 360 211 85 47 335 230 121 234 105 97 231 217 320
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\cpu.c
-
-
- BICOMP
- 345
-
-
- ICCARM
- 207
-
-
- __cstat
- 115
-
-
-
-
- BICOMP
- 371 325 298 340 367 307 300 306 372 373 350 369 346
-
-
- ICCARM
- 300 340 306 325 372 367 373 371 350 307 369 298 346
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\timer.c
-
-
- BICOMP
- 108
-
-
- ICCARM
- 167
-
-
- __cstat
- 148
-
-
-
-
- BICOMP
- 371 325 298 340 367 307 300 306 372 373 350 369 346
-
-
- ICCARM
- 300 340 306 325 372 367 373 371 350 307 369 298 346
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\xcp.c
-
-
- BICOMP
- 362
-
-
- ICCARM
- 4
-
-
- __cstat
- 152
-
-
-
-
- BICOMP
- 350 372 306 373 369 340 325 367 371 307 298 346 300
-
-
- ICCARM
- 300 340 306 325 372 367 373 371 350 307 369 298 346
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\cop.c
-
-
- BICOMP
- 76
-
-
- ICCARM
- 144
-
-
- __cstat
- 359
-
-
-
-
- BICOMP
- 371 325 298 340 367 307 300 306 372 373 350 369 346
-
-
- ICCARM
- 300 340 306 325 372 367 373 371 350 307 369 298 346
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\net.c
-
-
- BICOMP
- 205
-
-
- ICCARM
- 188
+ 132
__cstat
@@ -2086,39 +565,1315 @@
- BICOMP
- 309 371 214 325 298 329 318 314 340 367 307 346 300 334 236 331 306 372 373 350 369 305 229 375 311 333
+ ICCARM
+ 232 386 350 356 320 382 363 381 377 365 366 374 354 355 233 357 384
- ICCARM
- 300 340 306 325 372 367 373 371 350 307 369 298 346 214 314 305 229 375 329 311 333 236 334 318 331 309
+ BICOMP
+ 365 382 233 356 381 374 384 386 350 320 363 377 366 357 232 354 355
- $PROJ_DIR$\..\..\..\..\Source\file.c
+ $PROJ_DIR$\..\lib\uip\netdev.c
- BICOMP
- 183
+ ICCARM
+ 97
- ICCARM
- 123
+ BICOMP
+ 146
__cstat
- 95
+ 111
- BICOMP
- 307 195 340 346 367 85 360 131 150 365 89 357 325 371 298 47 358 81 70 134 306 372 373 350 369 211 67 61 139 192 300
+ ICCARM
+ 349 364 254 386 350 356 320 382 363 381 377 365 366 374 354 355 233 357 384 376 343 368 341 232 346 351 345 367 273 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 256 227 316 312 306
+
+ BICOMP
+ 45 376 368 357 320 256 135 56 305 316 377 233 341 119 409 386 35 254 350 363 366 191 292 94 398 323 319 258 367 273 306 364 343 356 382 381 365 374 354 355 384 346 232 351 345 349 23 164 145 25 36 257 244 259 46 227 312
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc4_gpio.c
+
ICCARM
- 300 340 306 325 372 367 373 371 350 307 369 298 346 134 150 70 358 131 81 360 211 85 47 357 195 67 139 89 61 365 192
+ 104
+
+
+ BICOMP
+ 414
+
+
+ __cstat
+ 178
+
+
+
+
+ ICCARM
+ 273 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 256 227
+
+
+ BICOMP
+ 135 56 119 409 257 244 305 191 292 94 23 256 35 164 145 25 36 398 323 319 258 45 273 259 46 227
+
+
+
+
+ $PROJ_DIR$\..\lib\FatFS\SDMMC_BLOCK\sdmmc_block.c
+
+
+ ICCARM
+ 211
+
+
+ BICOMP
+ 213
+
+
+ __cstat
+ 216
+
+
+
+
+ ICCARM
+ 248 252 284 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 238 270 273 256 227 241 231
+
+
+ BICOMP
+ 284 409 244 119 56 273 135 241 238 191 292 94 398 323 319 23 305 248 231 252 270 35 164 145 25 36 257 258 45 227 259 46 256
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc4_rtc.c
+
+
+ ICCARM
+ 179
+
+
+ BICOMP
+ 39
+
+
+ __cstat
+ 202
+
+
+
+
+ ICCARM
+ 283 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 199 237 284 238
+
+
+ BICOMP
+ 409 257 119 135 56 23 305 237 191 292 94 46 284 199 35 164 145 25 36 398 323 319 259 283 258 244 45 238
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc4_flash.c
+
+
+ ICCARM
+ 84
+
+
+ BICOMP
+ 201
+
+
+ __cstat
+ 80
+
+
+
+
+ ICCARM
+ 276 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 246
+
+
+ BICOMP
+ 94 409 191 23 292 119 305 135 56 257 46 246 35 164 145 25 36 398 323 319 259 276 258 244 45
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc4_eru.c
+
+
+ ICCARM
+ 6
+
+
+ BICOMP
+ 204
+
+
+ __cstat
+ 118
+
+
+
+
+ ICCARM
+ 307 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 230 284 238
+
+
+ BICOMP
+ 45 23 409 230 145 25 119 56 35 164 36 398 323 319 258 284 305 191 135 292 94 257 244 307 259 46 238
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc4_scu.c
+
+
+ ICCARM
+ 190
+
+
+ BICOMP
+ 38
+
+
+ __cstat
+ 128
+
+
+
+
+ ICCARM
+ 284 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 238
+
+
+ BICOMP
+ 119 323 46 164 35 36 398 319 305 23 409 145 25 56 238 191 135 292 94 257 259 284 258 244 45
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_can.c
+
+
+ ICCARM
+ 165
+
+
+ BICOMP
+ 24
+
+
+ __cstat
+ 195
+
+
+
+
+ ICCARM
+ 1 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 284 238 2
+
+
+ BICOMP
+ 292 2 409 94 119 323 191 398 319 45 305 284 135 56 258 35 23 164 145 25 36 257 244 1 259 46 238
+
+
+
+
+ $PROJ_DIR$\..\lib\FatFS\mmc.c
+
+
+ ICCARM
+ 223
+
+
+ BICOMP
+ 215
+
+
+ __cstat
+ 187
+
+
+
+
+ ICCARM
+ 353 355 386 350 356 320 382 363 381 377 365 366 374 354 233 357 384 248 252 284 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 238 270 273 256 227 241
+
+
+ BICOMP
+ 366 191 119 350 363 241 238 292 94 409 45 305 248 355 320 377 357 233 273 284 135 56 257 258 227 386 356 382 381 365 374 354 384 252 270 23 35 164 145 25 36 398 323 319 244 353 259 46 256
+
+
+
+
+ $PROJ_DIR$\..\lib\FatFS\SDMMC_BLOCK\sdmmc_block_conf.c
+
+
+ ICCARM
+ 217
+
+
+ BICOMP
+ 221
+
+
+ __cstat
+ 220
+
+
+
+
+ ICCARM
+ 248 252 284 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 238 270 273 256 227 241
+
+
+ BICOMP
+ 56 145 25 119 252 305 23 409 45 270 35 164 36 398 323 319 258 227 273 241 284 238 191 135 292 94 257 244 248 259 46 256
+
+
+
+
+ $PROJ_DIR$\..\lib\FatFS\SDMMC_BLOCK\sdmmc_block_private_sd.c
+
+
+ ICCARM
+ 218
+
+
+ BICOMP
+ 212
+
+
+ __cstat
+ 210
+
+
+
+
+ ICCARM
+ 231 35 119 409 164 25 36 145 94 56 398 248 252 284 305 191 23 135 292 323 257 258 45 46 259 244 319 238 270 273 256 227 241 386 350 356 320 382 363 381 377 365 366 374 354 355 233 357 384
+
+
+ BICOMP
+ 244 257 35 357 320 409 94 270 119 23 305 377 233 386 252 258 45 227 350 363 366 231 248 56 398 164 145 25 36 273 241 284 238 191 135 292 323 319 259 46 256 356 382 381 365 374 354 355 384
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_posif.c
+
+
+ ICCARM
+ 171
+
+
+ BICOMP
+ 206
+
+
+ __cstat
+ 394
+
+
+
+
+ ICCARM
+ 277 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 284 238
+
+
+ BICOMP
+ 56 145 25 119 305 23 409 45 284 35 164 36 398 323 319 258 191 135 292 94 257 244 277 259 46 238
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_usic.c
+
+
+ ICCARM
+ 68
+
+
+ BICOMP
+ 95
+
+
+ __cstat
+ 129
+
+
+
+
+ ICCARM
+ 264 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 240 284 238
+
+
+ BICOMP
+ 240 23 409 145 25 119 56 305 35 164 36 398 323 319 46 284 191 135 292 94 257 259 264 258 244 45 238
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_vadc.c
+
+
+ ICCARM
+ 173
+
+
+ BICOMP
+ 181
+
+
+ __cstat
+ 144
+
+
+
+
+ ICCARM
+ 334 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 284 238 322
+
+
+ BICOMP
+ 119 323 305 35 164 36 398 319 322 23 409 145 25 56 259 284 191 135 292 94 257 46 238 334 258 244 45
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_rtc.c
+
+
+ ICCARM
+ 105
+
+
+ BICOMP
+ 186
+
+
+ __cstat
+ 126
+
+
+
+
+ ICCARM
+ 284 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 238 283 199 237
+
+
+ BICOMP
+ 119 305 237 409 257 45 135 56 238 191 292 94 258 283 23 35 164 145 25 36 398 323 319 244 284 259 46 199
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_spi.c
+
+
+ ICCARM
+ 116
+
+
+ BICOMP
+ 149
+
+
+ __cstat
+ 400
+
+
+
+
+ ICCARM
+ 284 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 238 280 264 240
+
+
+ BICOMP
+ 191 119 305 238 292 94 409 23 135 56 257 46 280 35 164 145 25 36 398 323 319 259 284 258 244 45 264 240
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_gpio.c
+
+
+ ICCARM
+ 390
+
+
+ BICOMP
+ 32
+
+
+ __cstat
+ 37
+
+
+
+
+ ICCARM
+ 273 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 256 227
+
+
+ BICOMP
+ 56 145 25 119 23 409 244 256 35 164 36 398 323 319 305 191 135 292 94 257 258 45 273 259 46 227
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_i2s.c
+
+
+ ICCARM
+ 188
+
+
+ BICOMP
+ 155
+
+
+ __cstat
+ 48
+
+
+
+
+ ICCARM
+ 284 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 238 263 264 240
+
+
+ BICOMP
+ 36 319 35 398 164 119 323 305 23 409 145 25 56 259 263 238 191 135 292 94 257 46 284 258 244 45 264 240
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_i2c.c
+
+
+ ICCARM
+ 88
+
+
+ BICOMP
+ 57
+
+
+ __cstat
+ 141
+
+
+
+
+ ICCARM
+ 286 264 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 240
+
+
+ BICOMP
+ 264 35 398 36 319 240 164 119 323 244 23 409 145 25 56 305 191 135 292 94 257 258 45 286 259 46
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_sdmmc.c
+
+
+ ICCARM
+ 49
+
+
+ BICOMP
+ 14
+
+
+ __cstat
+ 117
+
+
+
+
+ ICCARM
+ 270 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 284 238
+
+
+ BICOMP
+ 119 323 35 164 36 398 319 23 284 305 409 145 25 56 244 191 135 292 94 257 258 45 270 259 46 238
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_uart.c
+
+
+ ICCARM
+ 152
+
+
+ BICOMP
+ 19
+
+
+ __cstat
+ 102
+
+
+
+
+ ICCARM
+ 284 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 238 289 264 240
+
+
+ BICOMP
+ 409 292 94 238 305 191 119 259 135 56 257 289 23 35 164 145 25 36 398 323 319 46 284 258 244 45 264 240
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_hrpwm.c
+
+
+ ICCARM
+ 112
+
+
+ BICOMP
+ 40
+
+
+ __cstat
+ 93
+
+
+
+
+ ICCARM
+ 267 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319
+
+
+ BICOMP
+ 292 119 191 94 409 23 305 135 56 257 46 35 164 145 25 36 398 323 319 259 267 258 244 45
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_usbd.c
+
+
+ ICCARM
+ 82
+
+
+ BICOMP
+ 109
+
+
+ __cstat
+ 410
+
+
+
+
+ ICCARM
+ 266 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 55 288 284 238
+
+
+ BICOMP
+ 305 409 119 56 288 135 259 55 191 292 94 398 323 319 35 284 23 164 145 25 36 257 46 266 258 244 45 238
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_ledts.c
+
+
+ ICCARM
+ 47
+
+
+ BICOMP
+ 113
+
+
+ __cstat
+ 391
+
+
+
+
+ ICCARM
+ 278 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 284 238
+
+
+ BICOMP
+ 119 323 35 164 305 36 398 319 45 284 23 409 145 25 56 258 191 135 292 94 257 244 278 259 46 238
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_usbh.c
+
+
+ ICCARM
+ 157
+
+
+ BICOMP
+ 4
+
+
+ __cstat
+ 16
+
+
+
+
+ ICCARM
+ 23 119 409 164 25 36 145 94 35 56 398 260 305 191 135 292 323 257 258 45 46 259 244 319 284 238 273 256 227
+
+
+ BICOMP
+ 119 191 319 94 409 23 292 323 244 260 284 135 56 305 35 164 145 25 36 398 273 257 258 45 256 259 46 238 227
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_mac.c
+
+
+ ICCARM
+ 31
+
+
+ BICOMP
+ 33
+
+
+ __cstat
+ 362
+
+
+
+
+ ICCARM
+ 316 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 312 55 284 238
+
+
+ BICOMP
+ 312 94 409 292 45 191 119 55 305 135 56 257 258 284 23 35 164 145 25 36 398 323 319 244 316 259 46 238
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_ccu8.c
+
+
+ ICCARM
+ 399
+
+
+ BICOMP
+ 388
+
+
+ __cstat
+ 108
+
+
+
+
+ ICCARM
+ 297 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 255 284 238
+
+
+ BICOMP
+ 319 36 255 398 35 164 119 323 244 284 305 23 409 145 25 56 191 135 292 94 257 258 45 297 259 46 238
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_dac.c
+
+
+ ICCARM
+ 71
+
+
+ BICOMP
+ 150
+
+
+ __cstat
+ 13
+
+
+
+
+ ICCARM
+ 291 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 284 238
+
+
+ BICOMP
+ 35 398 36 319 164 119 323 23 305 409 145 25 56 244 284 191 135 292 94 257 258 45 291 259 46 238
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_common.c
+
+
+ ICCARM
+ 121
+
+
+ BICOMP
+ 168
+
+
+ __cstat
+ 34
+
+
+
+
+ ICCARM
+ 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319
+
+
+ BICOMP
+ 409 23 145 25 119 56 35 164 36 398 323 319 46 191 135 292 94 257 259 305 258 244 45
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_ebu.c
+
+
+ ICCARM
+ 402
+
+
+ BICOMP
+ 389
+
+
+ __cstat
+ 124
+
+
+
+
+ ICCARM
+ 301 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 284 238
+
+
+ BICOMP
+ 135 56 119 409 257 45 305 191 292 94 258 284 23 35 164 145 25 36 398 323 319 244 301 259 46 238
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_dma.c
+
+
+ ICCARM
+ 196
+
+
+ BICOMP
+ 92
+
+
+ __cstat
+ 136
+
+
+
+
+ ICCARM
+ 309 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 293 284 238
+
+
+ BICOMP
+ 244 23 409 293 145 25 119 56 284 305 35 164 36 398 323 319 191 135 292 94 257 258 45 309 259 46 238
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_phy_dp83848.c
+
+
+ ICCARM
+ 162
+
+
+ BICOMP
+ 193
+
+
+ __cstat
+ 99
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_phy_ksz8031rnl.c
+
+
+ ICCARM
+ 184
+
+
+ BICOMP
+ 69
+
+
+ __cstat
+ 62
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_eru.c
+
+
+ ICCARM
+ 151
+
+
+ BICOMP
+ 194
+
+
+ __cstat
+ 208
+
+
+
+
+ ICCARM
+ 307 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 230
+
+
+ BICOMP
+ 119 145 25 230 56 259 23 409 35 164 36 398 323 319 305 191 135 292 94 257 46 307 258 244 45
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_dsd.c
+
+
+ ICCARM
+ 110
+
+
+ BICOMP
+ 81
+
+
+ __cstat
+ 182
+
+
+
+
+ ICCARM
+ 310 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 284 238
+
+
+ BICOMP
+ 257 305 409 119 135 56 45 284 191 292 94 258 23 35 164 145 25 36 398 323 319 244 310 259 46 238
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_phy_ksz8081rnb.c
+
+
+ ICCARM
+ 138
+
+
+ BICOMP
+ 412
+
+
+ __cstat
+ 408
+
+
+
+
+ ICCARM
+ 306 316 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 312
+
+
+ BICOMP
+ 23 409 316 145 25 119 56 35 164 36 398 323 319 244 306 305 312 191 135 292 94 257 258 45 259 46
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_fce.c
+
+
+ ICCARM
+ 64
+
+
+ BICOMP
+ 395
+
+
+ __cstat
+ 140
+
+
+
+
+ ICCARM
+ 268 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 284 238
+
+
+ BICOMP
+ 25 145 119 56 23 409 45 305 284 35 164 36 398 323 319 258 191 135 292 94 257 244 268 259 46 238
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_ecat.c
+
+
+ ICCARM
+ 83
+
+
+ BICOMP
+ 65
+
+
+ __cstat
+ 98
+
+
+
+
+ ICCARM
+ 294 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319
+
+
+ BICOMP
+ 292 119 191 94 409 23 305 135 56 257 46 35 164 145 25 36 398 323 319 259 294 258 244 45
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\nvm.c
+
+
+ ICCARM
+ 89
+
+
+ BICOMP
+ 21
+
+
+ __cstat
+ 170
+
+
+
+
+ ICCARM
+ 386 350 356 320 382 363 381 377 365 366 374 354 355 233 357 384 324
+
+
+ BICOMP
+ 381 356 374 354 382 365 324 350 320 363 377 366 357 355 386 233 384
+
+
+
+
+ $PROJ_DIR$\..\lib\system_XMC4700.c
+
+
+ ICCARM
+ 185
+
+
+ BICOMP
+ 147
+
+
+ __cstat
+ 30
+
+
+
+
+ ICCARM
+ 35 119 409 164 25 36 145 94 56 398 323 257 23 258 45 46 259 244 319
+
+
+ BICOMP
+ 244 409 94 119 319 257 258 323 56 398 164 145 25 36 23 259 46 35 45
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\can.c
+
+
+ ICCARM
+ 20
+
+
+ BICOMP
+ 87
+
+
+ __cstat
+ 103
+
+
+
+
+ ICCARM
+ 386 350 356 320 382 363 381 377 365 366 374 354 355 233 357 384 1 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 284 238 2 273 256 227
+
+
+ BICOMP
+ 257 356 36 374 305 381 355 284 35 164 119 23 273 382 365 354 384 409 145 25 46 238 1 350 320 363 377 366 357 233 2 191 135 292 56 94 398 323 319 259 386 258 244 45 256 227
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_wdt.c
+
+
+ ICCARM
+ 54
+
+
+ BICOMP
+ 66
+
+
+ __cstat
+ 61
+
+
+
+
+ ICCARM
+ 328 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 284 238
+
+
+ BICOMP
+ 292 119 191 94 409 23 305 135 56 257 244 284 35 164 145 25 36 398 323 319 258 45 328 259 46 238
+
+
+
+
+ $PROJ_DIR$\..\led.c
+
+
+ ICCARM
+ 166
+
+
+ BICOMP
+ 11
+
+
+ __cstat
+ 177
+
+
+
+
+ ICCARM
+ 386 350 356 320 382 363 381 377 365 366 374 354 355 233 357 384 336 273 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 256 227
+
+
+ BICOMP
+ 320 357 23 409 377 233 145 25 119 56 244 273 350 363 366 256 35 164 36 398 323 319 336 356 382 381 365 374 354 355 384 305 191 135 292 94 257 258 45 386 259 46 227
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\timer.c
+
+
+ ICCARM
+ 142
+
+
+ BICOMP
+ 29
+
+
+ __cstat
+ 73
+
+
+
+
+ ICCARM
+ 386 350 356 320 382 363 381 377 365 366 374 354 355 233 357 384
+
+
+ BICOMP
+ 377 320 357 233 350 363 366 384 356 382 381 365 374 386 354 355
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\cpu.c
+
+
+ ICCARM
+ 70
+
+
+ BICOMP
+ 125
+
+
+ __cstat
+ 5
+
+
+
+
+ ICCARM
+ 386 350 356 320 382 363 381 377 365 366 374 354 355 233 357 384
+
+
+ BICOMP
+ 357 320 377 233 350 363 366 384 356 382 381 365 374 386 354 355
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\flash.c
+
+
+ ICCARM
+ 406
+
+
+ BICOMP
+ 413
+
+
+ __cstat
+ 114
+
+
+
+
+ ICCARM
+ 386 350 356 320 382 363 381 377 365 366 374 354 355 233 357 384 276 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 246
+
+
+ BICOMP
+ 382 354 305 56 23 365 384 135 119 409 257 356 381 374 355 191 292 94 46 276 350 320 363 377 366 357 233 246 35 164 145 25 36 398 323 319 259 386 258 244 45
+
+
+
+
+ $PROJ_DIR$\..\hooks.c
+
+
+ ICCARM
+ 63
+
+
+ BICOMP
+ 85
+
+
+ __cstat
+ 7
+
+
+
+
+ ICCARM
+ 386 350 356 320 382 363 381 377 365 366 374 354 355 233 357 384 336 273 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 256 227 289 264 240
+
+
+ BICOMP
+ 366 398 350 36 319 363 256 35 164 119 323 244 273 320 377 357 233 23 409 145 25 56 336 289 356 382 381 365 374 354 355 384 305 191 135 292 94 257 258 45 386 259 46 227 264 240
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\IAR\cpu_comp.c
+
+
+ ICCARM
+ 59
+
+
+ BICOMP
+ 67
+
+
+ __cstat
+ 172
+
+
+
+
+ ICCARM
+ 386 350 356 320 382 363 381 377 365 366 374 354 355 233 357 384 46 119
+
+
+ BICOMP
+ 357 384 320 377 350 363 366 233 46 356 382 381 365 374 354 355 386 119
+
+
+
+
+ $PROJ_DIR$\..\main.c
+
+
+ ICCARM
+ 156
+
+
+ BICOMP
+ 90
+
+
+ __cstat
+ 51
+
+
+
+
+ ICCARM
+ 386 350 356 320 382 363 381 377 365 366 374 354 355 233 357 384 273 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 256 227 289 264 240 1 284 238 2 335
+
+
+ BICOMP
+ 356 119 145 25 284 374 409 335 381 355 23 46 227 240 289 382 365 354 384 305 35 164 36 257 135 273 1 350 320 363 377 366 357 233 256 191 292 56 94 398 323 319 259 264 386 258 244 45 2 238
@@ -2126,35 +1881,476 @@
$PROJ_DIR$\..\shared_params.c
- BICOMP
- 380
+ ICCARM
+ 169
- ICCARM
- 379
+ BICOMP
+ 161
__cstat
- 377
+ 176
- BICOMP
- 121 70 360 131 376 150 85 358 81 32 211 177
+ ICCARM
+ 191 119 409 164 25 36 145 94 56 335 23 135
+
+ BICOMP
+ 23 409 145 25 335 119 56 164 36 191 94 135
+
+
+
+
+ $PROJ_DIR$\..\startup_XMC4700.s
+
+
+ AARM
+ 153
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\third_party\fatfs\src\option\unicode.c
+
ICCARM
- 32 150 70 358 131 81 360 211 85 376 121 177
+ 214
+
+
+ BICOMP
+ 225
+
+
+ __cstat
+ 219
+
+
+
+
+ ICCARM
+ 354 355 233 224
+
+
+ BICOMP
+ 354 355 224 233
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\apps\dhcpc\dhcpc.c
+
+
+ ICCARM
+ 134
+
+
+ BICOMP
+ 127
+
+
+ __cstat
+ 403
+
+
+
+
+ ICCARM
+ 74 119 409 164 25 36 145 94 56 123 35 398 396 349 364 254 386 350 356 320 382 363 381 377 365 366 374 354 355 233 357 384 376 343 368 341 232 346 351 345
+
+
+ BICOMP
+ 409 376 368 357 343 56 145 25 119 320 396 346 164 36 377 233 341 35 349 123 94 398 254 350 363 366 74 364 386 356 382 381 365 374 354 355 384 232 351 345
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip.c
+
+
+ ICCARM
+ 401
+
+
+ BICOMP
+ 207
+
+
+ __cstat
+ 405
+
+
+
+
+ ICCARM
+ 349 364 254 386 350 356 320 382 363 381 377 365 366 374 354 355 233 357 384 376 343 368 341 232 346 351 345 318 35 119 409 164 25 36 145 94 56 398
+
+
+ BICOMP
+ 94 409 119 254 363 35 350 366 384 364 376 320 377 357 354 346 232 345 349 318 386 343 356 382 381 365 374 355 351 233 368 341 56 398 164 145 25 36
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\third_party\fatfs\src\ff.c
+
+
+ ICCARM
+ 222
+
+
+ BICOMP
+ 226
+
+
+ __cstat
+ 183
+
+
+
+
+ ICCARM
+ 354 355 233 353
+
+
+ BICOMP
+ 119 164 355 233 36 353 145 25 354 209 409 94
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\uart.c
+
+
+ ICCARM
+ 8
+
+
+ BICOMP
+ 43
+
+
+ __cstat
+ 100
+
+
+
+
+ ICCARM
+ 386 350 356 320 382 363 381 377 365 366 374 354 355 233 357 384 289 264 305 191 119 409 164 25 36 145 94 56 23 135 35 398 292 323 257 258 45 46 259 244 319 240
+
+
+ BICOMP
+ 357 320 56 377 233 135 119 409 257 244 350 363 366 305 191 292 94 23 289 356 382 381 365 374 354 355 384 264 240 35 164 145 25 36 398 323 319 258 45 386 259 46
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\xcp.c
+
+
+ ICCARM
+ 158
+
+
+ BICOMP
+ 174
+
+
+ __cstat
+ 96
+
+
+
+
+ ICCARM
+ 386 350 356 320 382 363 381 377 365 366 374 354 355 233 357 384
+
+
+ BICOMP
+ 366 350 233 363 384 320 377 357 386 356 382 381 365 374 354 355
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\com.c
+
+
+ ICCARM
+ 60
+
+
+ BICOMP
+ 143
+
+
+ __cstat
+ 133
+
+
+
+
+ ICCARM
+ 386 350 356 320 382 363 381 377 365 366 374 354 355 233 357 384 370 358 376
+
+
+ BICOMP
+ 356 374 354 358 381 370 382 365 376 350 320 363 377 366 357 355 386 233 384
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\boot.c
+
+
+ ICCARM
+ 189
+
+
+ BICOMP
+ 18
+
+
+ __cstat
+ 58
+
+
+
+
+ ICCARM
+ 386 350 356 320 382 363 381 377 365 366 374 354 355 233 357 384
+
+
+ BICOMP
+ 365 382 233 356 381 374 384 350 320 363 377 366 357 386 354 355
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uiplib.c
+
+
+ ICCARM
+ 203
+
+
+ BICOMP
+ 411
+
+
+ __cstat
+ 131
+
+
+
+
+ ICCARM
+ 349 364 254 386 350 356 320 382 363 381 377 365 366 374 354 355 233 357 384 376 343 368 341 232 346 351 345 378
+
+
+ BICOMP
+ 350 346 366 254 363 354 232 345 376 320 377 357 384 378 364 386 343 356 382 381 365 374 355 351 349 233 368 341
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip_timer.c
+
+
+ ICCARM
+ 198
+
+
+ BICOMP
+ 404
+
+
+ __cstat
+ 197
+
+
+
+
+ ICCARM
+ 341 232 368
+
+
+ BICOMP
+ 341 368 232
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\cop.c
+
+
+ ICCARM
+ 107
+
+
+ BICOMP
+ 360
+
+
+ __cstat
+ 160
+
+
+
+
+ ICCARM
+ 386 350 356 320 382 363 381 377 365 366 374 354 355 233 357 384
+
+
+ BICOMP
+ 366 350 363 233 320 377 357 384 356 382 381 365 374 386 354 355
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\net.c
+
+
+ ICCARM
+ 79
+
+
+ BICOMP
+ 75
+
+
+ __cstat
+ 9
+
+
+
+
+ ICCARM
+ 386 350 356 320 382 363 381 377 365 366 374 354 355 233 357 384 253 349 364 254 376 343 368 341 232 346 351 345 367
+
+
+ BICOMP
+ 365 367 382 354 343 253 356 381 374 355 351 349 350 320 363 377 366 357 233 384 386 346 232 345 364 254 376 368 341
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\backdoor.c
+
+
+ ICCARM
+ 22
+
+
+ BICOMP
+ 77
+
+
+ __cstat
+ 130
+
+
+
+
+ ICCARM
+ 386 350 356 320 382 363 381 377 365 366 374 354 355 233 357 384
+
+
+ BICOMP
+ 374 356 381 233 382 365 384 350 320 363 377 366 357 386 354 355
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\file.c
+
+
+ ICCARM
+ 26
+
+
+ BICOMP
+ 137
+
+
+ __cstat
+ 44
+
+
+
+
+ ICCARM
+ 386 350 356 320 382 363 381 377 365 366 374 354 355 233 357 384 35 119 409 164 25 36 145 94 56 398 175 91 53 115 55 407 159 72
+
+
+ BICOMP
+ 357 119 320 407 409 175 377 233 35 350 363 366 94 53 115 56 72 386 356 382 381 365 374 354 355 384 398 164 145 25 36 91 159 55
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\assert.c
+
+
+ ICCARM
+ 180
+
+
+ BICOMP
+ 148
+
+
+ __cstat
+ 10
+
+
+
+
+ ICCARM
+ 386 350 356 320 382 363 381 377 365 366 374 354 355 233 357 384
+
+
+ BICOMP
+ 382 365 233 356 381 374 384 350 320 363 377 366 357 386 354 355
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip_arp.c
+
+
+ ICCARM
+ 50
+
+
+ BICOMP
+ 397
+
+
+ __cstat
+ 139
+
+
+
+
+ ICCARM
+ 367 349 364 254 386 350 356 320 382 363 381 377 365 366 374 354 355 233 357 384 376 343 368 341 232 346 351 345 35 119 409 164 25 36 145 94 56 398
+
+
+ BICOMP
+ 377 233 119 341 36 376 320 357 368 349 254 350 363 366 409 25 35 364 386 343 356 382 381 365 374 354 355 384 346 232 351 345 56 398 164 145 94 367
- $PROJ_DIR$\..\boot.c
+ $PROJ_DIR$\..\timer.c
ICCARM
- $PROJ_DIR$\..\timer.c
+ $PROJ_DIR$\..\boot.c
ICCARM
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/xmc4700.ewp b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/xmc4700.ewp
index f3b48f3d..87f41d99 100644
--- a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/xmc4700.ewp
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/xmc4700.ewp
@@ -222,7 +222,7 @@
CCDiagSuppress
-
+ Pa082
CCDiagRemark
@@ -316,11 +316,14 @@
$PROJ_DIR$\..\lib\cmsis
$PROJ_DIR$\..\lib\uip
$PROJ_DIR$\..\lib\xmclib\inc
+ $PROJ_DIR$\..\lib\FatFS
+ $PROJ_DIR$\..\lib\FatFS\SDMMC_BLOCK
$PROJ_DIR$\..\..\..\..\Source
$PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4
$PROJ_DIR$\..\..\..\..\Source\ARMCM4_XMC4\IAR
$PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip
$PROJ_DIR$\..\..\..\..\Source\third_party\uip\apps\dhcpc
+ $PROJ_DIR$\..\..\..\..\Source\third_party\fatfs\src
CCStdIncCheck
@@ -1957,6 +1960,36 @@
$PROJ_DIR$\..\lib\cmsis\core_cmSimd.h
+
+ fatfs
+
+ $PROJ_DIR$\..\lib\FatFS\ffconf.h
+
+
+ $PROJ_DIR$\..\lib\FatFS\mmc.c
+
+
+ $PROJ_DIR$\..\lib\FatFS\SDMMC_BLOCK\sdmmc_block.c
+
+
+ $PROJ_DIR$\..\lib\FatFS\SDMMC_BLOCK\sdmmc_block.h
+
+
+ $PROJ_DIR$\..\lib\FatFS\SDMMC_BLOCK\sdmmc_block_conf.c
+
+
+ $PROJ_DIR$\..\lib\FatFS\SDMMC_BLOCK\sdmmc_block_conf.h
+
+
+ $PROJ_DIR$\..\lib\FatFS\SDMMC_BLOCK\sdmmc_block_extern.h
+
+
+ $PROJ_DIR$\..\lib\FatFS\SDMMC_BLOCK\sdmmc_block_private_sd.c
+
+
+ $PROJ_DIR$\..\lib\FatFS\SDMMC_BLOCK\sdmmc_block_private_sd.h
+
+
uip
@@ -2296,6 +2329,24 @@
third_party
+
+ fatfs
+
+ $PROJ_DIR$\..\..\..\..\Source\third_party\fatfs\src\diskio.h
+
+
+ $PROJ_DIR$\..\..\..\..\Source\third_party\fatfs\src\ff.c
+
+
+ $PROJ_DIR$\..\..\..\..\Source\third_party\fatfs\src\ff.h
+
+
+ $PROJ_DIR$\..\..\..\..\Source\third_party\fatfs\src\integer.h
+
+
+ $PROJ_DIR$\..\..\..\..\Source\third_party\fatfs\src\option\unicode.c
+
+
uip
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/xmc4700.ewt b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/xmc4700.ewt
index 601970d6..c3bb1fd7 100644
--- a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/xmc4700.ewt
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/ide/xmc4700.ewt
@@ -2333,6 +2333,36 @@
$PROJ_DIR$\..\lib\cmsis\core_cmSimd.h
+
+ fatfs
+
+ $PROJ_DIR$\..\lib\FatFS\ffconf.h
+
+
+ $PROJ_DIR$\..\lib\FatFS\mmc.c
+
+
+ $PROJ_DIR$\..\lib\FatFS\SDMMC_BLOCK\sdmmc_block.c
+
+
+ $PROJ_DIR$\..\lib\FatFS\SDMMC_BLOCK\sdmmc_block.h
+
+
+ $PROJ_DIR$\..\lib\FatFS\SDMMC_BLOCK\sdmmc_block_conf.c
+
+
+ $PROJ_DIR$\..\lib\FatFS\SDMMC_BLOCK\sdmmc_block_conf.h
+
+
+ $PROJ_DIR$\..\lib\FatFS\SDMMC_BLOCK\sdmmc_block_extern.h
+
+
+ $PROJ_DIR$\..\lib\FatFS\SDMMC_BLOCK\sdmmc_block_private_sd.c
+
+
+ $PROJ_DIR$\..\lib\FatFS\SDMMC_BLOCK\sdmmc_block_private_sd.h
+
+
uip
@@ -2672,6 +2702,24 @@
third_party
+
+ fatfs
+
+ $PROJ_DIR$\..\..\..\..\Source\third_party\fatfs\src\diskio.h
+
+
+ $PROJ_DIR$\..\..\..\..\Source\third_party\fatfs\src\ff.c
+
+
+ $PROJ_DIR$\..\..\..\..\Source\third_party\fatfs\src\ff.h
+
+
+ $PROJ_DIR$\..\..\..\..\Source\third_party\fatfs\src\integer.h
+
+
+ $PROJ_DIR$\..\..\..\..\Source\third_party\fatfs\src\option\unicode.c
+
+
uip
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/lib/FatFS/SDMMC_BLOCK/sdmmc_block.c b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/lib/FatFS/SDMMC_BLOCK/sdmmc_block.c
new file mode 100644
index 00000000..ed5b061e
--- /dev/null
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/lib/FatFS/SDMMC_BLOCK/sdmmc_block.c
@@ -0,0 +1,780 @@
+
+/**
+ * @file sdmmc_block.c
+ * @date 2016-08-24
+ *
+ * NOTE:
+ * This file is generated by DAVE. Any manual modification done to this file will be lost when the code is regenerated.
+ *
+ * @cond
+ ***********************************************************************************************************************
+ * SDMMC_BLOCK v4.0.22 - The SDMMC_BLOCK APP is a generic SD/MMC card block device driver designed to drive SDMMC cards
+ * with all relevant functionalities like writing or reading blocks of data from the card.
+ *
+ * Copyright (c) 2016-2017, Infineon Technologies AG
+ * 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 the copyright holders nor the names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY,OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes
+ * with Infineon Technologies AG (dave@infineon.com).
+ ***********************************************************************************************************************
+ *
+ * Change History
+ * --------------
+ *
+ * 2016-01-20:
+ * - Initial version.
+ *
+ * 2016-02-05:
+ * - RTOS support added.
+ * - Bug fixes done.
+ *
+ * 2016-02-08:
+ * - Help Doc updated.
+ * - Bug fixes done.
+ *
+ * 2016-04-05:
+ * - Remove dead code
+ * - MISRA fixes
+ *
+ * @endcond
+ */
+
+/***********************************************************************************************************************
+ * HEADER FILES
+ **********************************************************************************************************************/
+
+#include "sdmmc_block.h"
+
+#ifdef SDMMC_BLOCK_SD
+# if SDMMC_BLOCK_RTOS_MODE_SELECT
+# include "sdmmc_block_private_sd_rtos.h"
+#else
+# include "sdmmc_block_private_sd.h"
+# endif /* SDMMC_BLOCK_RTOS_MODE_SELECT */
+#endif /* SDMMC_BLOCK_SD */
+
+#ifdef SDMMC_BLOCK_SPI
+# if SDMMC_BLOCK_RTOS_MODE_SELECT
+# include "sdmmc_block_private_spi_rtos.h"
+#else
+# include "sdmmc_block_private_spi.h"
+# endif /* SDMMC_BLOCK_RTOS_MODE_SELECT */
+#endif /* SDMMC_BLOCK_SPI */
+
+/***********************************************************************************************************************
+ * MACROS
+ **********************************************************************************************************************/
+
+#define SDMMC_BLOCK_LOCK (0x4U) /* Lock the card */
+#define SDMMC_BLOCK_UNLOCK (0x0U) /* Unlock the card */
+#define SDMMC_BLOCK_SET_PASSWD (0x1U) /* Set the password for the card */
+#define SDMMC_BLOCK_CLR_PASSWD (0x2U) /* Clears the password */
+#define SDMMC_BLOCK_SET_PASSWD_AND_LOCK (0x5U) /* Set the password and locks the card */
+#define SDMMC_BLOCK_FORCE_ERASE (0x8U) /* Force erase the password data */
+
+/***********************************************************************************************************************
+ * LOCAL DATA
+ **********************************************************************************************************************/
+
+/***********************************************************************************************************************
+ * LOCAL ROUTINES
+ **********************************************************************************************************************/
+
+static SDMMC_BLOCK_STATUS_t SDMMC_BLOCK_lFlushDiskWriteCache(SDMMC_BLOCK_t *obj);
+
+/**********************************************************************************************************************
+ * API IMPLEMENTATION
+ **********************************************************************************************************************/
+
+/* SDMMC_BLOCK initialization function */
+SDMMC_BLOCK_STATUS_t SDMMC_BLOCK_Init(SDMMC_BLOCK_t *const obj)
+{
+ SDMMC_BLOCK_STATUS_t status = SDMMC_BLOCK_STATUS_SUCCESS;
+ SDMMC_BLOCK_MODE_STATUS_t mode_status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+
+ XMC_ASSERT("SDMMC_BLOCK_Init:Null obj is passed as input" , (obj != NULL))
+
+ if (obj->init_flag == 1U)
+ {
+ status = SDMMC_BLOCK_STATUS_SUCCESS;
+ }
+ else
+ {
+ /* Setup pins */
+ if (obj->init_pins != NULL)
+ {
+ obj->init_pins();
+ }
+
+#ifdef SDMMC_BLOCK_SPI
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SPI)
+ {
+ mode_status = SDMMC_BLOCK_SPI_Init(obj);
+ }
+#endif
+
+#ifdef SDMMC_BLOCK_SD
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SD)
+ {
+ mode_status = SDMMC_BLOCK_SD_Init(obj);
+ }
+#endif
+
+ if (mode_status != SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ status = SDMMC_BLOCK_STATUS_FAILURE;
+ obj->init_flag = 0U;
+ }
+ else
+ {
+ obj->init_flag = 1U;
+ }
+ }
+
+ return status;
+}
+
+/* Initialize the card identification process */
+SDMMC_BLOCK_STATUS_t SDMMC_BLOCK_Initialize(SDMMC_BLOCK_t *const obj)
+{
+ SDMMC_BLOCK_MODE_STATUS_t mode_status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ SDMMC_BLOCK_STATUS_t status = SDMMC_BLOCK_STATUS_FAILURE;
+
+ XMC_ASSERT("SDMMC_BLOCK_Initialize:Null obj is passed as input" , (obj != NULL))
+
+#ifdef SDMMC_BLOCK_SPI
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SPI)
+ {
+ mode_status = SDMMC_BLOCK_SPI_CardIdentificationProcess(obj);
+ }
+#endif
+
+#ifdef SDMMC_BLOCK_SD
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SD)
+ {
+ mode_status = SDMMC_BLOCK_SD_CardIdentificationProcess(obj);
+ }
+#endif
+
+ if (mode_status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ status = SDMMC_BLOCK_STATUS_SUCCESS;
+ }
+
+ return status;
+}
+
+/* Read the specified number of sectors of data from the specified address */
+SDMMC_BLOCK_STATUS_t SDMMC_BLOCK_ReadBlock(SDMMC_BLOCK_t *const obj,
+ uint8_t* read_buf,
+ const uint32_t sector_number,
+ const uint8_t sector_count)
+{
+ SDMMC_BLOCK_STATUS_t status = SDMMC_BLOCK_STATUS_SUCCESS;
+
+ XMC_ASSERT("SDMMC_BLOCK_ReadBlock:Null obj is passed as input" , (obj != NULL))
+ XMC_ASSERT("SDMMC_BLOCK_ReadBlock:Read buffer address is invalid" , (read_buf != NULL))
+ XMC_ASSERT("SDMMC_BLOCK_ReadBlock:Sector count to be read is zero" , (sector_count != 0U))
+
+#ifdef SDMMC_BLOCK_SPI
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SPI)
+ {
+ status = SDMMC_BLOCK_SPI_ReadBlock(obj, read_buf, sector_number, (uint32_t)sector_count);
+ }
+#endif
+
+#ifdef SDMMC_BLOCK_SD
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SD)
+ {
+ status = SDMMC_BLOCK_SD_ReadBlock(obj, read_buf, sector_number, sector_count);
+ }
+#endif
+
+ return status;
+}
+
+/* Write the specified number of sectors of data from the specified address */
+SDMMC_BLOCK_STATUS_t SDMMC_BLOCK_WriteBlock(SDMMC_BLOCK_t *const obj,
+ uint8_t* write_buf,
+ const uint32_t sector_number,
+ const uint8_t sector_count)
+{
+ SDMMC_BLOCK_STATUS_t status = SDMMC_BLOCK_STATUS_SUCCESS;
+
+ XMC_ASSERT("SDMMC_BLOCK_WriteBlock:Null obj is passed as input" , (obj != NULL))
+ XMC_ASSERT("SDMMC_BLOCK_WriteBlock:Write buffer address is invalid" , (write_buf != NULL))
+ XMC_ASSERT("SDMMC_BLOCK_WriteBlock:Sector count to be written is zero" , (sector_count != 0U))
+
+#ifdef SDMMC_BLOCK_SPI
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SPI)
+ {
+ status = SDMMC_BLOCK_SPI_WriteBlock(obj, write_buf, sector_number, (uint32_t)sector_count);
+ }
+#endif
+
+#ifdef SDMMC_BLOCK_SD
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SD)
+ {
+ status = SDMMC_BLOCK_SD_WriteBlock(obj, write_buf, sector_number, sector_count);
+ }
+#endif
+
+ return status;
+}
+
+/* Get the current status of the card */
+uint8_t SDMMC_BLOCK_GetStatus(SDMMC_BLOCK_t *const obj)
+{
+ uint8_t disk_status = 0U;
+
+#ifdef SDMMC_BLOCK_SPI
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SPI)
+ {
+ disk_status = SDMMC_BLOCK_SPI_GetState(obj);
+ }
+#endif
+
+#ifdef SDMMC_BLOCK_SD
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SD)
+ {
+ disk_status = SDMMC_BLOCK_SD_GetState(obj);
+ }
+#endif
+
+ return disk_status;
+}
+
+/* I/O control */
+SDMMC_BLOCK_STATUS_t SDMMC_BLOCK_Ioctl(SDMMC_BLOCK_t *const obj, const uint8_t command, void *buffer)
+{
+ SDMMC_BLOCK_STATUS_t status = SDMMC_BLOCK_STATUS_SUCCESS;
+ SDMMC_BLOCK_MODE_STATUS_t mode_status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ uint8_t card_status;
+ bool valid_command = true;
+ SDMMC_BLOCK_ERASE_ADDRESS_t *erase_ptr;
+ SDMMC_BLOCK_LOCK_STRUCTURE_t lock = {0U};
+ const SDMMC_BLOCK_PASSWORD_t *password;
+
+ XMC_ASSERT("SDMMC_BLOCK_WriteBlock:Null obj is passed as input" , (obj != NULL))
+
+ /* If card is not initialized or inserted */
+ if ((obj->card_state & (uint8_t)SDMMC_BLOCK_CARD_STATE_NOT_INITIALIZED) == (uint8_t)0)
+ {
+ card_status = SDMMC_BLOCK_GetStatus(obj);
+
+ if ((card_status & (uint8_t)SDMMC_BLOCK_CARD_STATE_LOCKED) != 0U)
+ {
+ status = SDMMC_BLOCK_STATUS_LOCKED;
+ if ((command == (uint8_t)SDMMC_BLOCK_CTRL_SYNC) ||
+ (command == (uint8_t)SDMMC_BLOCK_MMC_GET_OCR) ||
+ (command == (uint8_t)SDMMC_BLOCK_MMC_GET_SDSTAT) ||
+ (command == (uint8_t)SDMMC_BLOCK_CTRL_TRIM))
+ {
+ valid_command = false;
+ }
+ }
+ }
+ else
+ {
+ valid_command = false;
+ status = SDMMC_BLOCK_STATUS_NOTRDY;
+ }
+
+ if (valid_command == true)
+ {
+ /* Switch to the respective IOCTL command */
+ switch (command)
+ {
+ /*
+ * Control sync
+ */
+ case SDMMC_BLOCK_CTRL_SYNC:
+ status = SDMMC_BLOCK_lFlushDiskWriteCache(obj);
+ break;
+
+ /*
+ * Get sector size
+ */
+ case SDMMC_BLOCK_GET_SECTOR_SIZE:
+#ifdef SDMMC_BLOCK_SPI
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SPI)
+ {
+ mode_status = SDMMC_BLOCK_SPI_GetSectorSize(obj, buffer);
+ }
+#endif
+
+#ifdef SDMMC_BLOCK_SD
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SD)
+ {
+ mode_status = SDMMC_BLOCK_SD_GetSectorSize(obj, buffer);
+ }
+#endif
+
+ break;
+
+ /*
+ * Get sector count
+ */
+ case SDMMC_BLOCK_GET_SECTOR_COUNT:
+#ifdef SDMMC_BLOCK_SPI
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SPI)
+ {
+ mode_status = SDMMC_BLOCK_SPI_GetSectorCount(obj, buffer);
+ }
+#endif
+
+#ifdef SDMMC_BLOCK_SD
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SD)
+ {
+ mode_status = SDMMC_BLOCK_SD_GetSectorCount(obj, buffer);
+ }
+#endif
+ break;
+
+ /*
+ * Control trim. Erase the content in the specified sectors
+ */
+ case SDMMC_BLOCK_CTRL_TRIM:
+ erase_ptr = (SDMMC_BLOCK_ERASE_ADDRESS_t *) buffer;
+#ifdef SDMMC_BLOCK_SPI
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SPI)
+ {
+ mode_status = SDMMC_BLOCK_SPI_EraseBlock(obj, (erase_ptr->start_address), (erase_ptr->end_address));
+ }
+#endif
+
+#ifdef SDMMC_BLOCK_SD
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SD)
+ {
+ mode_status = SDMMC_BLOCK_SD_EraseBlock(obj, (erase_ptr->start_address), (erase_ptr->end_address));
+ }
+#endif
+ break;
+
+ /*
+ * Get block size
+ */
+ case SDMMC_BLOCK_GET_BLOCK_SIZE:
+#ifdef SDMMC_BLOCK_SPI
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SPI)
+ {
+ mode_status = SDMMC_BLOCK_SPI_GetBlockSize(obj, buffer);
+ }
+#endif
+
+#ifdef SDMMC_BLOCK_SD
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SD)
+ {
+ mode_status = SDMMC_BLOCK_SD_GetBlockSize(obj, buffer);
+ }
+#endif
+ break;
+
+ /*
+ * Get the type of the card
+ */
+ case SDMMC_BLOCK_MMC_GET_TYPE:
+#ifdef SDMMC_BLOCK_SPI
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SPI)
+ {
+ mode_status = SDMMC_BLOCK_SPI_GetCardType(obj, buffer);
+ }
+#endif
+
+#ifdef SDMMC_BLOCK_SD
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SD)
+ {
+ mode_status = SDMMC_BLOCK_SD_GetCardType(obj, buffer);
+ }
+#endif
+ break;
+
+ /*
+ * Get CSD
+ */
+ case SDMMC_BLOCK_MMC_GET_CSD:
+#ifdef SDMMC_BLOCK_SPI
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SPI)
+ {
+ mode_status = SDMMC_BLOCK_SPI_GetCsd(obj, buffer);
+ }
+#endif
+
+#ifdef SDMMC_BLOCK_SD
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SD)
+ {
+ mode_status = SDMMC_BLOCK_SD_GetCsd(obj, buffer);
+ }
+#endif
+ break;
+
+ /*
+ * Get CID
+ */
+ case SDMMC_BLOCK_MMC_GET_CID:
+#ifdef SDMMC_BLOCK_SPI
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SPI)
+ {
+ mode_status = SDMMC_BLOCK_SPI_GetCid(obj, buffer);
+ }
+#endif
+
+#ifdef SDMMC_BLOCK_SD
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SD)
+ {
+ mode_status = SDMMC_BLOCK_SD_GetCid(obj, buffer);
+ }
+#endif
+ break;
+
+ /*
+ * Get OCR
+ */
+ case SDMMC_BLOCK_MMC_GET_OCR:
+#ifdef SDMMC_BLOCK_SPI
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SPI)
+ {
+ mode_status = SDMMC_BLOCK_SPI_GetOcr(obj, buffer);
+ }
+#endif
+
+#ifdef SDMMC_BLOCK_SD
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SD)
+ {
+ mode_status = SDMMC_BLOCK_SD_GetOcr(obj, buffer);
+ }
+#endif
+ break;
+
+ /*
+ * Get SD status
+ */
+ case SDMMC_BLOCK_MMC_GET_SDSTAT:
+#ifdef SDMMC_BLOCK_SPI
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SPI)
+ {
+ mode_status = SDMMC_BLOCK_SPI_GetSdStatus(obj, buffer);
+ }
+#endif
+
+#ifdef SDMMC_BLOCK_SD
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SD)
+ {
+ mode_status = SDMMC_BLOCK_SD_GetSdStatus(obj, buffer);
+ }
+#endif
+ break;
+
+ /*
+ * Lock card
+ */
+ case SDMMC_BLOCK_MMC_LOCK_CARD:
+ lock.mode = (uint8_t)SDMMC_BLOCK_LOCK;
+ password = (const SDMMC_BLOCK_PASSWORD_t *)buffer;
+
+ /* Check password length doesn't exceeds the permitted length */
+ if (password->old_pwd_len <= (uint8_t)SDMMC_BLOCK_MAX_PASSWORD_LENGTH)
+ {
+ lock.pwd_len = password->old_pwd_len;
+ memcpy(lock.pwd_data, password->old_pwd, lock.pwd_len);
+
+#ifdef SDMMC_BLOCK_SPI
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SPI)
+ {
+ mode_status = SDMMC_BLOCK_SPI_LockUnlockCard(obj, &lock, SDMMC_BLOCK_CARD_LOCK_STATUS_LOCKED);
+ }
+#endif
+
+#ifdef SDMMC_BLOCK_SD
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SD)
+ {
+ mode_status = SDMMC_BLOCK_SD_LockUnlockCard(obj, &lock, SDMMC_BLOCK_CARD_LOCK_STATUS_LOCKED);
+ }
+#endif
+ }
+ else
+ {
+ mode_status = SDMMC_BLOCK_MODE_STATUS_OUT_OF_RANGE_ERROR;
+ }
+ break;
+
+ /*
+ * Unlock card
+ */
+ case SDMMC_BLOCK_MMC_UNLOCK_CARD:
+ lock.mode = (uint8_t)SDMMC_BLOCK_UNLOCK;
+ password = (const SDMMC_BLOCK_PASSWORD_t *)buffer;
+
+ if (password->old_pwd_len <= (uint8_t)SDMMC_BLOCK_MAX_PASSWORD_LENGTH)
+ {
+ lock.pwd_len = password->old_pwd_len;
+ memcpy(lock.pwd_data, password->old_pwd, lock.pwd_len);
+
+#ifdef SDMMC_BLOCK_SPI
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SPI)
+ {
+ mode_status = SDMMC_BLOCK_SPI_LockUnlockCard(obj, &lock, SDMMC_BLOCK_CARD_LOCK_STATUS_UNLOCKED);
+ }
+#endif
+
+#ifdef SDMMC_BLOCK_SD
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SD)
+ {
+ mode_status = SDMMC_BLOCK_SD_LockUnlockCard(obj, &lock, SDMMC_BLOCK_CARD_LOCK_STATUS_UNLOCKED);
+ }
+#endif
+ }
+ else
+ {
+ mode_status = SDMMC_BLOCK_MODE_STATUS_OUT_OF_RANGE_ERROR;
+ }
+ break;
+
+ /*
+ * Set card password
+ */
+ case SDMMC_BLOCK_MMC_SET_PASSWD:
+ lock.mode = (uint8_t)SDMMC_BLOCK_SET_PASSWD;
+ password = (const SDMMC_BLOCK_PASSWORD_t *)buffer;
+
+ if ((password->old_pwd_len <= (uint8_t)SDMMC_BLOCK_MAX_PASSWORD_LENGTH) &&
+ (password->new_pwd_len <= (uint8_t)SDMMC_BLOCK_MAX_PASSWORD_LENGTH))
+ {
+ lock.pwd_len = password->old_pwd_len + password->new_pwd_len;
+ memcpy(lock.pwd_data, password->old_pwd, password->old_pwd_len);
+ memcpy(&lock.pwd_data[password->old_pwd_len], password->new_pwd, password->new_pwd_len);
+
+ #ifdef SDMMC_BLOCK_SPI
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SPI)
+ {
+ mode_status = SDMMC_BLOCK_SPI_LockUnlockCard(obj, &lock, SDMMC_BLOCK_CARD_LOCK_STATUS_UNLOCKED);
+ }
+ #endif
+
+ #ifdef SDMMC_BLOCK_SD
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SD)
+ {
+ mode_status = SDMMC_BLOCK_SD_LockUnlockCard(obj, &lock, SDMMC_BLOCK_CARD_LOCK_STATUS_UNLOCKED);
+ }
+ #endif
+ }
+ else
+ {
+ mode_status = SDMMC_BLOCK_MODE_STATUS_OUT_OF_RANGE_ERROR;
+ }
+ break;
+
+ /*
+ * Clear card password
+ */
+ case SDMMC_BLOCK_MMC_CLEAR_PASSWD:
+ lock.mode = (uint8_t)SDMMC_BLOCK_CLR_PASSWD;
+ password = (const SDMMC_BLOCK_PASSWORD_t *)buffer;
+ if (password->old_pwd_len <= (uint8_t)SDMMC_BLOCK_MAX_PASSWORD_LENGTH)
+ {
+ lock.pwd_len = password->old_pwd_len;
+ memcpy(lock.pwd_data, password->old_pwd, lock.pwd_len);
+
+#ifdef SDMMC_BLOCK_SPI
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SPI)
+ {
+ mode_status = SDMMC_BLOCK_SPI_LockUnlockCard(obj, &lock, SDMMC_BLOCK_CARD_LOCK_STATUS_UNLOCKED);
+ }
+#endif
+
+#ifdef SDMMC_BLOCK_SD
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SD)
+ {
+ mode_status = SDMMC_BLOCK_SD_LockUnlockCard(obj, &lock, SDMMC_BLOCK_CARD_LOCK_STATUS_UNLOCKED);
+ }
+#endif
+ }
+ else
+ {
+ mode_status = SDMMC_BLOCK_MODE_STATUS_OUT_OF_RANGE_ERROR;
+ }
+ break;
+
+ /*
+ * Set card lock
+ */
+ case SDMMC_BLOCK_MMC_SET_LOCK:
+ lock.mode = (uint8_t)SDMMC_BLOCK_SET_PASSWD_AND_LOCK;
+ password = (const SDMMC_BLOCK_PASSWORD_t *)buffer;
+
+ if ((password->old_pwd_len <= (uint8_t)SDMMC_BLOCK_MAX_PASSWORD_LENGTH) &&
+ (password->new_pwd_len <= (uint8_t)SDMMC_BLOCK_MAX_PASSWORD_LENGTH))
+ {
+ lock.pwd_len = password->old_pwd_len + password->new_pwd_len;
+ memcpy(lock.pwd_data, password->old_pwd, password->old_pwd_len);
+ memcpy(&lock.pwd_data[password->old_pwd_len], password->new_pwd, password->new_pwd_len);
+
+#ifdef SDMMC_BLOCK_SPI
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SPI)
+ {
+ mode_status = SDMMC_BLOCK_SPI_LockUnlockCard(obj, &lock, SDMMC_BLOCK_CARD_LOCK_STATUS_LOCKED);
+ }
+#endif
+
+#ifdef SDMMC_BLOCK_SD
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SD)
+ {
+ mode_status = SDMMC_BLOCK_SD_LockUnlockCard(obj, &lock, SDMMC_BLOCK_CARD_LOCK_STATUS_LOCKED);
+ }
+#endif
+ }
+ else
+ {
+ mode_status = SDMMC_BLOCK_MODE_STATUS_OUT_OF_RANGE_ERROR;
+ }
+ break;
+
+ /*
+ * Read lock status
+ */
+ case SDMMC_BLOCK_MMC_READ_LOCK_STATUS:
+
+#ifdef SDMMC_BLOCK_SPI
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SPI)
+ {
+ mode_status = SDMMC_BLOCK_SPI_GetLockStatus(obj, (SDMMC_BLOCK_CARD_LOCK_STATUS_t *)buffer);
+ }
+#endif
+
+#ifdef SDMMC_BLOCK_SD
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SD)
+ {
+ mode_status = SDMMC_BLOCK_SD_GetLockStatus(obj, (SDMMC_BLOCK_CARD_LOCK_STATUS_t *)buffer);
+ }
+#endif
+ break;
+
+ /*
+ * Force card erase
+ */
+ case SDMMC_BLOCK_MMC_FORCE_ERASE:
+ lock.mode = (uint8_t)SDMMC_BLOCK_FORCE_ERASE;
+#ifdef SDMMC_BLOCK_SPI
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SPI)
+ {
+ mode_status = SDMMC_BLOCK_SPI_LockUnlockCard(obj, &lock, SDMMC_BLOCK_CARD_LOCK_STATUS_UNLOCKED);
+ }
+#endif
+
+#ifdef SDMMC_BLOCK_SD
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SD)
+ {
+ mode_status = SDMMC_BLOCK_SD_LockUnlockCard(obj, &lock, SDMMC_BLOCK_CARD_LOCK_STATUS_UNLOCKED);
+ }
+#endif
+ break;
+
+ /*
+ * Eject card
+ */
+ case SDMMC_BLOCK_CTRL_EJECT:
+#ifdef SDMMC_BLOCK_SPI
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SPI)
+ {
+ mode_status = SDMMC_BLOCK_SPI_EjectCard(obj);
+ }
+#endif
+
+#ifdef SDMMC_BLOCK_SD
+ if (obj->interface_mode == SDMMC_BLOCK_CARD_INTERFACE_SD)
+ {
+ mode_status = SDMMC_BLOCK_SD_EjectCard(obj);
+ }
+#endif
+ break;
+
+ default:
+ mode_status = SDMMC_BLOCK_MODE_STATUS_OUT_OF_RANGE_ERROR;
+ break;
+ }
+
+ if (mode_status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ status = SDMMC_BLOCK_STATUS_SUCCESS;
+ }
+ else if (mode_status == SDMMC_BLOCK_MODE_STATUS_WP_VIOLATION_ERROR)
+ {
+ status = SDMMC_BLOCK_STATUS_WRPRT;
+ }
+ else if ((mode_status == SDMMC_BLOCK_MODE_STATUS_OUT_OF_RANGE_ERROR) ||
+ (mode_status == SDMMC_BLOCK_MODE_STATUS_SECTOR_OUT_OF_BOUND))
+ {
+ status = SDMMC_BLOCK_STATUS_PARERR;
+ }
+ else
+ {
+ status = SDMMC_BLOCK_STATUS_FAILURE;
+ }
+ }
+
+ return status;
+}
+
+#if SDMMC_BLOCK_SD_CARD_DETECTION_SUPPORT
+
+#ifdef SDMMC_BLOCK_SD
+
+/*
+ * Registers the callback function for the card detection
+ * mechanism.
+ */
+SDMMC_BLOCK_STATUS_t SDMMC_BLOCK_RegisterCallback(SDMMC_BLOCK_t *const obj,
+ void (*cb)(SDMMC_BLOCK_SD_INTERRUPT_t))
+{
+ SDMMC_BLOCK_STATUS_t status = SDMMC_BLOCK_STATUS_PARERR;
+
+ /* Check if the callback is not NULL */
+ if (cb != NULL)
+ {
+ obj->sdmmc_sd->callback = cb;
+ status = SDMMC_BLOCK_STATUS_SUCCESS;
+ }
+
+ return status;
+}
+
+#endif /* SDMMC_BLOCK_SD */
+
+#endif /* SDMMC_BLOCK_SD_CARD_DETECTION_SUPPORT */
+
+/***********************************************************************************************************************
+ * LOCAL ROUTINES IMPLEMENTATION
+ **********************************************************************************************************************/
+
+/* Flush disk cache */
+static SDMMC_BLOCK_STATUS_t SDMMC_BLOCK_lFlushDiskWriteCache(SDMMC_BLOCK_t *obj)
+{
+ /*
+ * A flush is generally meant for writing filled buffers/cache to the
+ * media. We're already ensuring that a write block(s) operation completes
+ * before it exits WriteBlock().
+ * So, this function does nothing at the moment. We are simply going to
+ * return success
+ */
+ return SDMMC_BLOCK_STATUS_SUCCESS;
+}
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/lib/FatFS/SDMMC_BLOCK/sdmmc_block.h b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/lib/FatFS/SDMMC_BLOCK/sdmmc_block.h
new file mode 100644
index 00000000..1535dba2
--- /dev/null
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/lib/FatFS/SDMMC_BLOCK/sdmmc_block.h
@@ -0,0 +1,1321 @@
+
+/**
+ * @file sdmmc_block.h
+ * @date 2017-02-14
+ *
+ * NOTE:
+ * This file is generated by DAVE. Any manual modification done to this file will be lost when the code is regenerated.
+ *
+ * @cond
+ ***********************************************************************************************************************
+ * SDMMC_BLOCK v4.0.22 - The SDMMC_BLOCK APP is a generic SD/MMC card block device driver designed to drive SDMMC cards
+ * with all relevant functionalities like writing or reading blocks of data from the card.
+ *
+ * Copyright (c) 2016-2017, Infineon Technologies AG
+ * 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 the copyright holders nor the names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY,OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes
+ * with Infineon Technologies AG (dave@infineon.com).
+ ***********************************************************************************************************************
+ *
+ * Change History
+ * --------------
+ *
+ * 2016-01-20:
+ * - Initial version.
+ *
+ * 2016-02-05:
+ * - RTOS support added.
+ * - Bug fixes done.
+ *
+ * 2016-02-08:
+ * - Help Doc updated.
+ * - Bug fixes done.
+ *
+ * 2016-04-05:
+ * - Remove dead code
+ * - MISRA fixes
+ *
+ * 2017-02-14:
+ * - Update minimum required XMCLib version
+ *
+ * @endcond
+ */
+
+#ifndef SDMMC_BLOCK_H
+#define SDMMC_BLOCK_H
+
+/***********************************************************************************************************************
+ * HEADER FILES
+ **********************************************************************************************************************/
+
+#include "sdmmc_block_conf.h"
+#include "xmc_gpio.h"
+
+#if (!((XMC_LIB_MAJOR_VERSION == 2U) && \
+ (XMC_LIB_MINOR_VERSION >= 1U) && \
+ (XMC_LIB_PATCH_VERSION >= 10U)))
+#error "SDMMC_BLOCK requires XMC Peripheral Library v2.1.10 or higher"
+#endif
+
+/**********************************************************************************************************************
+ * MACROS
+ **********************************************************************************************************************/
+
+#define SDMMC_BLOCK_NORMAL_INT_STATUS_BITS (0x7FFFU) /**< Normal interrupt status bits */
+#define SDMMC_BLOCK_BLOCK_ADDRESSING (8U) /**< Card supports block addressing. It means address will be
+ taken in terms of sector numbers */
+
+#define SDMMC_BLOCK_IN_IDLE_STATE (0x01U) /**< Idle State */
+#define SDMMC_BLOCK_ILLEGAL_COMMAND (0x04U) /**< Illegal Command */
+
+/**< Some Command's static Arguments */
+#define SDMMC_BLOCK_ARGUMENT0 (0x00000000U)
+#define SDMMC_BLOCK_SD_CMD8_ARG (0x000001AAU)
+#define SDMMC_BLOCK_SD_ACMD41_F80_ARG (0x00100000U)
+#define SDMMC_BLOCK_SD_ACMD41_F81_ARG (0x40100000U)
+#define SDMMC_BLOCK_MMC_CMD1_ARG (0x40FF8000U)
+#define SDMMC_BLOCK_MMC_4BUS_WIDTH_ARG (0x03B70100U)
+#define SDMMC_BLOCK_SD_4BUS_WIDTH_ARG (0x00000002U)
+#define SDMMC_BLOCK_MMC_HIGH_SPEED_ARG (0x03B90100U)
+#define SDMMC_BLOCK_SD_HIGH_SPEED_ARG (0x80000001U)
+
+/**< RCA Register */
+#define SDMMC_BLOCK_MMC_DEFAULT_RCA (0x0001U)
+#define SDMMC_BLOCK_ARG_RCA_BITPOS (0x10U)
+
+#define SDMMC_BLOCK_SD_CARD_TYPE_BITMASK (0xFFFFU) /**< Card type mask */
+
+/* SCR Register Bitmask */
+#define SDMMC_BLOCK_SCR_BUS_WIDTH4_BITMASK (0x4U) /**< Bus width mask */
+
+/**< SD Card's CMD8 response R7 bit positions */
+#define SDMMC_BLOCK_SD_CMD8_CHECK_PATTERN_VALUE (0xAAU)
+#define SDMMC_BLOCK_SD_CMD8_CHECK_PATTERN_BITMASK (0xFFU)
+#define SDMMC_BLOCK_SD_CMD8_CHECK_PATTERN_BITPOS (0x00U)
+#define SDMMC_BLOCK_SD_CMD8_VHS_BITPOS (0x8U)
+#define SDMMC_BLOCK_SD_CMD8_VHS_BITMASK (0xFU)
+#define SDMMC_BLOCK_SD_VHS_PATTERN_2_7_3_6_VALUE (0x1U)
+
+/**< Card's OCR register */
+#define SDMMC_BLOCK_OCR_POWER_STATUS_BITMASK (0x80000000U)
+#define SDMMC_BLOCK_OCR_CCS_BITMASK (0x40000000U)
+#define SDMMC_BLOCK_MMC_OCR_ACCESS_MODE_BITMASK (0x60000000U)
+#define SDMMC_BLOCK_MMC_OCR_ACCESS_MODE_BITPOS (0x1DU)
+
+/*
+ * Command code for disk_ioctrl function
+ */
+
+/* Generic command (defined for FatFs) */
+#define SDMMC_BLOCK_CTRL_SYNC (0U) /**< Flush disk cache (for write functions) */
+#define SDMMC_BLOCK_GET_SECTOR_COUNT (1U) /**< Get media size */
+#define SDMMC_BLOCK_GET_SECTOR_SIZE (2U) /**< Get sector size */
+#define SDMMC_BLOCK_GET_BLOCK_SIZE (3U) /**< Get erase block size */
+#define SDMMC_BLOCK_CTRL_TRIM (4U) /**< Inform device that the data on the block of sectors is
+ no longer used. */
+
+/* Generic command */
+#define SDMMC_BLOCK_CTRL_EJECT (7U) /**< Eject media */
+
+/* MMC/SDC specific ioctl command */
+#define SDMMC_BLOCK_MMC_GET_TYPE (10U) /**< Get card type i.e. Standard Capacity v2/v1x or
+ High Capacity card. */
+#define SDMMC_BLOCK_MMC_GET_CSD (11U) /**< Get Card's Specific Data register */
+#define SDMMC_BLOCK_MMC_GET_CID (12U) /**< Get Card's Identification register */
+#define SDMMC_BLOCK_MMC_GET_OCR (13U) /**< Get Card's Operating Condition Register */
+#define SDMMC_BLOCK_MMC_GET_SDSTAT (14U) /**< Get SD card status information. */
+
+/*
+ * NAND specific ioctl command
+ */
+
+/* Create physical format */
+#define SDMMC_BLOCK_NAND_FORMAT (30U)
+#define SDMMC_BLOCK_MMC_LOCK_CARD (31U) /**< Locks the card. */
+#define SDMMC_BLOCK_MMC_UNLOCK_CARD (32U) /**< Unlocks the card. */
+#define SDMMC_BLOCK_MMC_SET_PASSWD (33U) /**< Set/replace the password. */
+#define SDMMC_BLOCK_MMC_CLEAR_PASSWD (34U) /**< Clears the password. */
+#define SDMMC_BLOCK_MMC_SET_LOCK (35U) /**< Sets the password and locks the card,
+ in the same power cycle. */
+#define SDMMC_BLOCK_MMC_READ_LOCK_STATUS (36U) /**< Reads the current lock status of the card. */
+#define SDMMC_BLOCK_MMC_FORCE_ERASE (37U) /**< Force erase the password. It is useful when user forgets
+ the password. */
+
+#define SDMMC_BLOCK_MAX_PASSWORD_LENGTH (16U) /* Max. password length: lock/unlock */
+
+/**********************************************************************************************************************
+ * ENUMERATIONS
+ **********************************************************************************************************************/
+/**
+ * @ingroup SDMMC_BLOCK_enumerations
+ * @{
+ */
+
+/**
+ * @brief Return status of SDMMC_BLOCK APP functions
+ */
+typedef enum SDMMC_BLOCK_MODE_STATUS
+{
+ SDMMC_BLOCK_MODE_STATUS_SUCCESS = 0U, /**< Success */
+ SDMMC_BLOCK_MODE_STATUS_FAILURE, /**< Failure */
+ SDMMC_BLOCK_MODE_STATUS_COMMAND_TIMEOUT_ERROR, /**< Timeout error */
+ SDMMC_BLOCK_MODE_STATUS_COMMAND_CRC_ERROR, /**< CRC error */
+ SDMMC_BLOCK_MODE_STATUS_COMMAND_ENDBIT_ERROR, /**< End bit error */
+ SDMMC_BLOCK_MODE_STATUS_COMMAND_INDEX_ERROR, /**< Command index error */
+ SDMMC_BLOCK_MODE_STATUS_DATA_TIMEOUT_ERROR, /**< Data timeout error */
+ SDMMC_BLOCK_MODE_STATUS_DATA_CRC_ERROR, /**< Data CRC error */
+ SDMMC_BLOCK_MODE_STATUS_DATA_ENDBIT_ERROR, /**< Data end-bit error */
+ SDMMC_BLOCK_MODE_STATUS_ACMD12_ERROR, /**< ACMD12 error */
+ SDMMC_BLOCK_MODE_STATUS_OUT_OF_RANGE_ERROR, /**< Out of range error */
+ SDMMC_BLOCK_MODE_STATUS_ADDRESS_ERROR, /**< Address error */
+ SDMMC_BLOCK_MODE_STATUS_BLOCK_LEN_ERROR, /**< Length error */
+ SDMMC_BLOCK_MODE_STATUS_ERASE_SEQ_ERROR, /**< Sequence error */
+ SDMMC_BLOCK_MODE_STATUS_ERASE_PARAM_ERROR, /**< Erase parameter error */
+ SDMMC_BLOCK_MODE_STATUS_WP_VIOLATION_ERROR, /**< Write protect violation error */
+ SDMMC_BLOCK_MODE_STATUS_LOCK_UNLOCK_ERROR, /**< Lock/Unlock error */
+ SDMMC_BLOCK_MODE_STATUS_COM_CRC_ERROR, /**< Command CRC error */
+ SDMMC_BLOCK_MODE_STATUS_ILLEGAL_COMMAND_ERROR, /**< Illegal command error */
+ SDMMC_BLOCK_MODE_STATUS_CARD_ECC_ERROR, /**< ECC error */
+ SDMMC_BLOCK_MODE_STATUS_CC_ERROR, /**< CC error */
+ SDMMC_BLOCK_MODE_STATUS_UNKNOWN_ERROR, /**< Unknown error */
+ SDMMC_BLOCK_MODE_STATUS_CSD_OVERWRITE, /**< CSD overwrite */
+ SDMMC_BLOCK_MODE_STATUS_WP_ERASE_SKIP_ERROR, /**< Write protect erase skip error */
+ SDMMC_BLOCK_MODE_STATUS_ASK_SEQ_ERROR, /**< Ask sequence error */
+ SDMMC_BLOCK_MODE_STATUS_BAD_RESPONSE, /**< Bad response */
+ SDMMC_BLOCK_MODE_STATUS_CMD_LINE_BUSY, /**< Command line busy */
+ SDMMC_BLOCK_MODE_STATUS_DATA_LINE_BUSY, /**< Data line busy */
+ SDMMC_BLOCK_MODE_STATUS_COMMAND_COMPLETE, /**< Command complete */
+ SDMMC_BLOCK_MODE_STATUS_SENDCOMMAND_ERROR, /**< Send command error */
+ SDMMC_BLOCK_MODE_STATUS_BUFFER_READY, /**< Buffer ready */
+ SDMMC_BLOCK_MODE_STATUS_TRANSFER_COMPLETE, /**< Transfer complete */
+ SDMMC_BLOCK_MODE_STATUS_CARD_IS_LOCKED, /**< Card is locked */
+ SDMMC_BLOCK_MODE_STATUS_CARD_UNLOCKED, /**< Card unlocked */
+ SDMMC_BLOCK_MODE_STATUS_READ_ERROR, /**< Read error */
+ SDMMC_BLOCK_MODE_STATUS_WRITE_ERROR, /**< Write error */
+ SDMMC_BLOCK_MODE_STATUS_RECOVERABLE_ERROR, /**< Recoverable error */
+ SDMMC_BLOCK_MODE_STATUS_NONRECOVERABLE_ERROR, /**< Non-recoverable error */
+ SDMMC_BLOCK_MODE_STATUS_ACMD_CMD_WO_DAT_ERROR, /**< Command without data error */
+ SDMMC_BLOCK_MODE_STATUS_ACMD_BOTH_ERROR, /**< ACMD both error */
+ SDMMC_BLOCK_MODE_STATUS_ACMD_SD_TRANSFER_ERROR, /**< ACMD SD transfer error */
+ SDMMC_BLOCK_MODE_STATUS_ACMD_CMD_WO_DAT_NOT_ISSUED, /**< Command without data not issued */
+ SDMMC_BLOCK_MODE_STATUS_INIT_FAIL, /**< Init failed */
+ SDMMC_BLOCK_MODE_STATUS_INITIALIZED_BUT_LOCKED, /**< Initialized but locked */
+ SDMMC_BLOCK_MODE_STATUS_HOST_CONTROLLER_INITIALIZED, /**< Host controller initialized */
+ SDMMC_BLOCK_MODE_STATUS_NULL_POINTER, /**< NULL pointer */
+ SDMMC_BLOCK_MODE_STATUS_TIMEOUT_OCCURED, /**< Timeout occured */
+ SDMMC_BLOCK_MODE_STATUS_CREATE_TIMER_FAILED, /**< Create timer failed */
+ SDMMC_BLOCK_MODE_STATUS_DELETE_TIMER_FAILED, /**< Delete timer failed */
+ SDMMC_BLOCK_MODE_STATUS_START_TIMER_FAILED, /**< Start timer failed */
+ SDMMC_BLOCK_MODE_STATUS_STOP_TIMER_FAILED, /**< Stop timer failed */
+ SDMMC_BLOCK_MODE_STATUS_SECTOR_OUT_OF_BOUND, /**< Sector out of bound */
+ SDMMC_BLOCK_MODE_STATUS_VOLTAGE_ERROR, /**< Voltage error */
+ SDMMC_BLOCK_MODE_STATUS_PATTERN_ERROR, /**< Pattern error */
+ SDMMC_BLOCK_MODE_STATUS_COMMUNICATION_ERROR /**< Communication error */
+} SDMMC_BLOCK_MODE_STATUS_t;
+
+/**
+ * @brief SDMMC_BLOCK status
+ */
+typedef enum SDMMC_BLOCK_STATUS
+{
+ SDMMC_BLOCK_STATUS_SUCCESS = 0U, /**< Success */
+ SDMMC_BLOCK_STATUS_FAILURE, /**< Failure */
+ SDMMC_BLOCK_STATUS_WRPRT, /**< Write protected */
+ SDMMC_BLOCK_STATUS_NOTRDY, /**< Not ready */
+ SDMMC_BLOCK_STATUS_PARERR, /**< Parameter error */
+ SDMMC_BLOCK_STATUS_LOCKED /**< Locked */
+} SDMMC_BLOCK_STATUS_t;
+
+/**
+ * @brief Card lock/unlock
+ */
+typedef enum SDMMC_BLOCK_CARD_LOCK_STATUS
+{
+ SDMMC_BLOCK_CARD_LOCK_STATUS_UNLOCKED = 0U, /**< Card is not locked */
+ SDMMC_BLOCK_CARD_LOCK_STATUS_LOCKED /**< Card is locked */
+} SDMMC_BLOCK_CARD_LOCK_STATUS_t;
+
+/**
+ * @brief Card types
+ */
+typedef enum SDMMC_BLOCK_CARD_TYPE
+{
+ SDMMC_BLOCK_CARD_TYPE_STANDARD_CAPACITY_V2 = 1U, /**< Capacity V2 */
+ SDMMC_BLOCK_CARD_TYPE_STANDARD_CAPACITY_V1X = 2U, /**< Capacity V1X */
+ SDMMC_BLOCK_CARD_TYPE_HIGH_CAPACITY = 4U, /**< High capacity */
+ SDMMC_BLOCK_CARD_TYPE_BLOCK_ADDRESSING = 8U, /**< Block addressing */
+ SDMMC_BLOCK_CARD_TYPE_MMC = 16U /**< MMC type */
+} SDMMC_BLOCK_CARD_TYPE_t;
+
+/**
+ * @brief Card states
+ */
+typedef enum SDMMC_BLOCK_CARD_STATE
+{
+ SDMMC_BLOCK_CARD_STATE_INITIALIZED = 0U, /**< Card initialized */
+ SDMMC_BLOCK_CARD_STATE_NOT_INITIALIZED = 1U, /**< Card initialized */
+ SDMMC_BLOCK_CARD_STATE_NO_CARD = 2U, /**< No card available */
+ SDMMC_BLOCK_CARD_STATE_WRITE_PROTECTED = 4U, /**< Card write protected */
+ SDMMC_BLOCK_CARD_STATE_LOCKED = 8U, /**< Card locked */
+ SDMMC_BLOCK_CARD_STATE_CMD_ACTIVE = 16U, /**< Command line in use */
+ SDMMC_BLOCK_CARD_STATE_DATA_ACTIVE = 32U, /**< Data line in use */
+ SDMMC_BLOCK_CARD_STATE_HC_INITIALIZED = 64U /**< Host controller initialized */
+} SDMMC_BLOCK_CARD_STATE_t;
+
+/**
+ * @brief Card types
+ */
+typedef enum SDMMC_BLOCK_CARD_CAPACITY
+{
+ SDMMC_BLOCK_CARD_CAPACITY_UNKNOWN = 0U, /**< Unknown */
+ SDMMC_BLOCK_CARD_CAPACITY_MMC = 1U, /**< MMC */
+ SDMMC_BLOCK_CARD_CAPACITY_SD = 2U, /**< SD */
+ SDMMC_BLOCK_CARD_CAPACITY_SDHC = 3U /**< SDHC */
+} SDMMC_BLOCK_CARD_CAPACITY_t;
+
+/**
+ * @brief Card interface (SPI OR native SD?)
+ */
+typedef enum SDMMC_BLOCK_CARD_INTERFACE
+{
+ SDMMC_BLOCK_CARD_INTERFACE_SD = 0U, /**< SD interface */
+ SDMMC_BLOCK_CARD_INTERFACE_SPI = 1U /**< SPI interface */
+} SDMMC_BLOCK_CARD_INTERFACE_t;
+
+/**
+ * @brief RTOS mode
+ */
+typedef enum SDMMC_BLOCK_RTOS_MODE
+{
+ SDMMC_BLOCK_RTOS_MODE_DISABLED = 0U, /**< RTOS mode is not selected */
+ SDMMC_BLOCK_RTOS_MODE_ENABLED = 1U /**< RTOS mode is selected */
+} SDMMC_BLOCK_RTOS_MODE_t;
+
+#ifdef SDMMC_BLOCK_SD
+
+/**
+ * @brief This enumerates some of the SDMMC interrupts
+ */
+typedef enum SDMMC_BLOCK_SD_INTERRUPT
+{
+ SDMMC_BLOCK_SD_INTERRUPT_CARD_REMOVAL = 0U, /**< Card removal interrupt */
+ SDMMC_BLOCK_SD_INTERRUPT_CARD_INSERTION /**< Card insertion interrupt */
+} SDMMC_BLOCK_SD_INTERRUPT_t;
+
+/**
+ * @brief Data transfer direction
+ */
+typedef enum SDMMC_BLOCK_SD_DATA_TRANSFER
+{
+ SDMMC_BLOCK_SD_DATA_TRANSFER_READ_BUFFER = 1U, /**< Read from card */
+ SDMMC_BLOCK_SD_DATA_TRANSFER_WRITE_BUFFER /**< Write to card */
+} SDMMC_BLOCK_SD_DATA_TRANSFER_t;
+
+#endif
+
+typedef void (*SDMMC_BLOCK_Config_Init)(void);
+
+/**
+ * @}
+ */
+/**********************************************************************************************************************
+ * DATA STRUCTURES
+ **********************************************************************************************************************/
+
+/**
+ * @ingroup SDMMC_BLOCK_datastructures
+ * @{
+ */
+
+/**
+ * @brief This structure stores the SD Card's SCR register content.
+ */
+typedef struct SDMMC_BLOCK_SCR
+{
+ uint32_t sd_spec : 4; /**< Physical Layer Specification Version supported by the card */
+ uint32_t scr_structure : 4; /**< SCR version */
+ uint32_t sd_bus_width : 4; /**< DAT bus widths that are supported by card */
+ uint32_t sd_security : 3; /**< CPRM security specification version for each capacity card */
+ uint32_t data_erase_stat : 1; /**< Data status after erase (0 or 1) */
+ uint32_t : 3; /**< Reserved bits */
+ uint32_t ext_security : 4; /**< Extended security */
+ uint32_t sd_spec_3 : 1; /**< SD specification version */
+ uint32_t cmd_support : 2; /**< Support bit of new commands are defined to bit 33-32 of SCR */
+ uint32_t : 6; /**< Reserved bits */
+ uint32_t manuf_resvd : 32; /**< Reserved: Manufacturer's use */
+} SDMMC_BLOCK_SCR_t;
+
+/**
+ * @brief Stores SD card CID register content
+ */
+typedef struct SDMMC_BLOCK_CID
+{
+ uint16_t manufacturing_date; /**< 12 bit Manufacturing date (MDT) */
+ uint32_t product_serial_num; /**< 32 bit serial number (PSN) */
+ uint8_t product_rev; /**< 32 bit Product revision (PRV) */
+ uint8_t product_name[5]; /**< 40 bit product name (PNM) */
+ uint8_t app_oem_id[2]; /**< 16 bit OEM/Application ID (OID) */
+ uint8_t manufacturer_id; /**< 8 bit Manufacturer ID (MID) */
+} SDMMC_BLOCK_CID_t;
+
+/**
+ * @brief Stores SD (v1) card's CSD register content
+ */
+typedef struct SDMMC_BLOCK_SDV1_CSD
+{
+ uint32_t fixed : 1; /**< Always fixed to 1 */
+ uint32_t crc : 7; /**< CRC bits */
+ uint32_t : 2; /**< Reserved bits */
+ uint32_t file_fmt : 2; /**< Indicates file format on the card */
+ uint32_t temp_write_prot : 1; /**< Temporarily protects card content from being overwritten or erased */
+ uint32_t perm_write_prot : 1; /**< Permanently protects card content against overwriting or erasing */
+ uint32_t copy : 1; /**< Defines if content is original (= 0) or has been copied (= 1) */
+ uint32_t file_fmt_grp : 1; /**< Indicates selected group of file formats */
+ uint32_t : 5; /**< Reserved bits */
+ uint32_t write_blk_partial : 1; /**< Defines if partial block sizes can be used in block write commands */
+ uint32_t write_blk_len : 4; /**< Maximum write data block length is computed as 2WRITE_BL_LEN */
+ uint32_t write_speed_factor : 3; /**< Defines typical block program time as a multiple of the read access time */
+ uint32_t : 2; /**< Reserved bits */
+ uint32_t write_prot_grp_en : 1; /**< A value of 0 means no group write protection possible */
+ uint32_t write_prot_grp_size : 7; /**< Size of a write protected group; Indexed from 0 */
+ uint32_t erase_sector_size : 7; /**< Size of an erasable sector */
+ uint32_t erase_blk_en : 1; /**< ERASE_BLK_EN defines granularity of unit size of erasable data */
+ uint32_t dev_size_mult : 3; /**< Multiplier for total size of device (Check C_SIZE) */
+ uint32_t max_write_current : 3; /**< Maximum write current at maximum VDD */
+ uint32_t min_write_current : 3; /**< Maximum write current at minimum VDD */
+ uint32_t max_read_current : 3; /**< Maximum read current at maximum VDD */
+ uint32_t min_read_current : 3; /**< Maximum read current at minimum VDD */
+ uint32_t dev_size_low : 2; /**< Total size of data card */
+ uint32_t dev_size_high : 10;/**< Total size of data card */
+ uint32_t : 2; /**< Reserved bits */
+ uint32_t dsr_imp : 1; /**< Is configurable driver stage is integrated with card? */
+ uint32_t read_blk_misalign : 1; /**< Can read block occupy more than 1 physical block on card? */
+ uint32_t write_blk_misalign : 1; /**< Can written block occupy more than 1 physical block on card? */
+ uint32_t read_blk_partial : 1; /**< Can a block be read partially? : Always valid in SD */
+ uint32_t read_blk_len : 4; /**< Maximum read data block length is computed as 2READ_BL_LEN */
+ uint32_t ccc : 12; /**< Card command class register specifies supported command classes */
+ uint32_t tran_speed : 8; /**< Defines maximum data transfer rate per one data line */
+ uint32_t nsac : 8; /**< Defines worst case for clock-dependent factor of the data access time */
+ uint32_t taac : 8; /**< Defines asynchronous part of data access time */
+ uint32_t : 6; /**< Reserved bits */
+ uint32_t csd_struct : 2; /**< Describes version of the CSD structure */
+} SDMMC_BLOCK_SDV1_CSD_t;
+
+/**
+ * @brief Stores SD (v2) card's CSD register content
+ */
+typedef struct SDMMC_BLOCK_SDV2_CSD
+{
+ uint32_t fixed : 1; /**< Always fixed to 1 */
+ uint32_t crc : 7; /**< CRC bits */
+ uint32_t : 2; /**< Reserved bits */
+ uint32_t file_fmt : 2; /**< Indicates file format on the card */
+ uint32_t temp_write_prot : 1; /**< Temporarily protects card content from being overwritten or erased */
+ uint32_t perm_write_prot : 1; /**< Permanently protects card content against overwriting or erasing */
+ uint32_t copy : 1; /**< Defines if content is original (= 0) or has been copied (= 1) */
+ uint32_t file_fmt_grp : 1; /**< Indicates selected group of file formats */
+ uint32_t : 5; /**< Reserved bits */
+ uint32_t write_blk_partial : 1; /**< Defines if partial block sizes can be used in block write commands */
+ uint32_t write_blk_len : 4; /**< Maximum write data block length is computed as 2WRITE_BL_LEN */
+ uint32_t write_speed_factor : 3; /**< Defines typical block program time as a multiple of the read access time */
+ uint32_t : 2; /**< Reserved bits */
+ uint32_t write_prot_grp_en : 1; /**< A value of 0 means no group write protection possible */
+ uint32_t write_prot_grp_size : 7; /**< Size of a write protected group; Indexed from 0 */
+ uint32_t erase_sector_size : 7; /**< Size of an erasable sector */
+ uint32_t erase_blk_en : 1; /**< If 1, host can erase one or multiple units of 512 bytes */
+ uint32_t : 1; /**< Reserved bits */
+ uint32_t dev_size_low : 16;/**< Total size of data card */
+ uint32_t dev_size_high : 6; /**< Total size of data card */
+ uint32_t : 6; /**< Reserved bits */
+ uint32_t dsr_imp : 1; /**< Is configurable driver stage is integrated with card? */
+ uint32_t read_blk_misalign : 1; /**< When 0, read crossing block boundaries is disabled in high capacity SD cards */
+ uint32_t write_blk_misalign : 1; /**< When 0, write crossing block boundaries is disabled in high capacity SD cards*/
+ uint32_t read_blk_partial : 1; /**< Fixed to 0; Only unit of block access is permitted */
+ uint32_t read_blk_len : 4; /**< Fixed at 0x09; Indicates READ_BL_LEN = 512 bytes */
+ uint32_t ccc : 12; /**< Card command class register specifies supported command classes */
+ uint32_t tran_speed : 8; /**< Defines maximum data transfer rate per one data line */
+ uint32_t nsac : 8; /**< Fixed at 0x00 */
+ uint32_t taac : 8; /**< Fixed at 0x0E; Indicates asynchronous part of data access time as 1 ms */
+ uint32_t : 6; /**< Reserved bits */
+ uint32_t csd_struct : 2; /**< Describes version of the CSD structure */
+} SDMMC_BLOCK_SDV2_CSD_t;
+
+/**
+ * @brief SDMMC_BLOCK GPIO configuration
+ */
+typedef struct SDMMC_BLOCK_GPIO_CONFIG
+{
+ XMC_GPIO_CONFIG_t config; /**< Pin configuration structure */
+ XMC_GPIO_HWCTRL_t hw_control; /**< HW control setting for pins */
+} SDMMC_BLOCK_GPIO_CONFIG_t;
+
+/**
+ * @brief SDMMC pin configuration
+ */
+typedef struct SDMMC_BLOCK_PIN_CONFIG
+{
+ XMC_GPIO_PORT_t *const port; /**< Pointer to the GPIO port base address */
+ const uint8_t pin; /**< Pin number in the port */
+ const SDMMC_BLOCK_GPIO_CONFIG_t *config; /**< Reference to pin configuration structure */
+} SDMMC_BLOCK_PIN_CONFIG_t;
+
+#if SDMMC_BLOCK_RTOS_MODE_SELECT
+
+/**
+ * @brief Resources for SDMMC RTOS mode
+ */
+typedef struct SDMMC_BLOCK_CMSIS_RTOS
+{
+ uint32_t os_mutex_cb_cmd_mut_handle[4]; /**< Command mutex handle */
+ osMutexDef_t os_mutex_def_cmd_mut_handle; /**< Command mutex definition */
+ osMutexId cmd_mut_id; /**< Command mutex id */
+
+ uint32_t os_mutex_cb_data_mut_handle[4]; /**< Data mutex handle */
+ const osMutexDef_t os_mutex_def_data_mut_handle; /**< Data mutex definition */
+ osMutexId data_mut_id; /**< Data mutex id */
+
+ uint32_t os_semaphore_cb_cmd_sem[2]; /**< Semaphore for commands */
+ const osSemaphoreDef_t os_semaphore_def_cmd_sem; /**< Command semaphore definition */
+ osSemaphoreId cmd_sem_id; /**< Command semaphore id */
+ int32_t cmd_sem_index; /**< Command semaphore index */
+
+ uint32_t os_semaphore_cb_data_sem[2]; /**< Semaphore for data */
+ const osSemaphoreDef_t os_semaphore_def_data_sem; /**< Data semaphore definition */
+ osSemaphoreId data_sem_id; /**< Data semaphore id */
+ int32_t data_sem_index; /**< Data semaphore index */
+
+#ifdef SDMMC_BLOCK_SD
+ uint32_t os_semaphore_cb_transfer_sem[2]; /**< Semaphore for transfer */
+ const osSemaphoreDef_t os_semaphore_def_transfer_sem; /**< Transfer semaphore definition */
+ osSemaphoreId transfer_sem_id; /**< Transfer semaphore id */
+ int32_t transfer_sem_index; /**< Transfer semaphore index */
+#endif
+
+#ifdef SDMMC_BLOCK_SPI
+ uint32_t os_mutex_cb_init_mut_handle[4]; /**< Command mutex handle */
+ osMutexDef_t os_mutex_def_init_mut_handle; /**< Command mutex definition */
+ osMutexId init_mut_id; /**< Command mutex id */
+#endif
+
+ bool os_resources_created; /**< Semaphore and mutex created successfully */
+} SDMMC_BLOCK_CMSIS_RTOS_t;
+
+#endif /* #if SDMMC_BLOCK_RTOS_MODE_SELECT */
+
+#ifdef SDMMC_BLOCK_SPI
+/**
+ * @brief This structure stores the card's register content information
+ */
+typedef struct SDMMC_BLOCK_SPI_CARD_INFORMATION
+{
+ uint8_t ocr[4]; /**< OCR register contents */
+ uint8_t cid[16]; /**< CID register contents */
+ uint8_t csd[16]; /**< CSD register contents */
+ SDMMC_BLOCK_SCR_t scr; /**< SCR register content */
+ uint8_t sd_status[64]; /**< SD_STATUS */
+} SDMMC_BLOCK_SPI_CARD_INFORMATION_t;
+
+/**
+ * @brief configuration in SPI mode
+ */
+typedef struct SDMMC_BLOCK_SPI
+{
+ SPI_MASTER_t *spi_master_handle; /**< Pointer to the SPI_MASTER configuration handler */
+ SDMMC_BLOCK_SPI_CARD_INFORMATION_t card_info; /**< Card information */
+#if SDMMC_BLOCK_RTOS_MODE_SELECT
+ SDMMC_BLOCK_CMSIS_RTOS_t *rtos; /**< Resources specific to RTOS mode */
+#endif
+ uint8_t cmd_response; /**< Command response value */
+ bool mode_init_flag; /**< Flag indicating initialization return value */
+} SDMMC_BLOCK_SPI_t;
+
+#endif
+
+#ifdef SDMMC_BLOCK_SD
+
+/**
+ * @brief This structure stores the card's register content information
+ */
+typedef struct SDMMC_BLOCK_SD_CARD_INFORMATION
+{
+ uint32_t ocr; /**< OCR register contents */
+ uint32_t cid[4]; /**< CID register contents */
+ uint32_t csd[4]; /**< CSD register contents */
+ SDMMC_BLOCK_SCR_t scr; /**< SCR register contents */
+ uint16_t rca; /**< Card's relative address */
+} SDMMC_BLOCK_SD_CARD_INFORMATION_t;
+
+/**
+ * @brief This structure stores the Interrupt Context Information.
+ */
+typedef struct SDMMC_BLOCK_INTERRUPT_CONTEXT
+{
+ uint16_t int_status_shadow; /**< Stores interrupt status register status bits */
+ uint8_t cmd_flag; /**< Set when command specific interrupt occurs */
+ uint8_t data_flag; /**< Set when data transfer error interrupt occurs */
+ uint8_t transfer_flag; /**< Set when transfer complete interrupt occurs */
+} SDMMC_BLOCK_INTERRUPT_CONTEXT_t;
+
+/**
+ * @brief configuration in SD mode
+ */
+typedef struct SDMMC_BLOCK_SD
+{
+ XMC_SDMMC_t *sdmmc; /**< Base SDMMC pointer */
+ SDMMC_BLOCK_INTERRUPT_CONTEXT_t isr_context; /**< Interrupt context */
+ uint32_t int_priority; /**< Interrupt priority */
+ uint32_t int_sub_priority; /**< Interrupt sub-priority */
+ uint32_t buf_ready_int; /**< Buffer ready interrupt */
+ SDMMC_BLOCK_MODE_STATUS_t data_int_err; /**< Interrupt error in data transfer */
+ SDMMC_BLOCK_MODE_STATUS_t cmd_int_err; /**< Interrupt error in cmd issuance */
+ SDMMC_BLOCK_MODE_STATUS_t transfer_int_err; /**< Interrupt status if transfer successful */
+ SDMMC_BLOCK_MODE_STATUS_t acmd_int_err; /**< Interrupt status in issuance of ACMD12 Command */
+ SDMMC_BLOCK_MODE_STATUS_t err_recovery_stat; /**< Error recovery status of a failed transaction */
+#if SDMMC_BLOCK_SD_CARD_DETECTION_SUPPORT
+ void (*callback)(SDMMC_BLOCK_SD_INTERRUPT_t); /**< call-back function */
+ uint32_t card_detect_state; /**< Card detect state */
+#endif
+ SDMMC_BLOCK_SD_CARD_INFORMATION_t card_info; /**< Card information */
+ uint8_t f8; /**< Flag used in card initialization to identify card type */
+ uint8_t issue_abort; /**< Issue abort */
+#if !SDMMC_BLOCK_RTOS_MODE_SELECT
+ volatile uint32_t tmr_id; /**< SYSTIMER identifier */
+#endif
+ volatile bool tmr_expire; /**< Timeout (expiration) flag */
+ XMC_SDMMC_DATA_LINES_t bus_width; /**< Bus width */
+ bool mode_init_flag; /**< Flag indicating initialization return value */
+#if SDMMC_BLOCK_RTOS_MODE_SELECT
+ uint32_t *buf; /**< Data buffer */
+ uint32_t block_count; /**< Block count */
+ uint32_t transfer_quad_bytes; /**< Number of quad bytes to transfer */
+ SDMMC_BLOCK_CMSIS_RTOS_t *rtos; /**< Resources specific to RTOS mode */
+#endif
+
+} SDMMC_BLOCK_SD_t;
+
+#endif
+
+/**
+ * @brief Store local lock structure information
+ */
+typedef struct SDMMC_BLOCK_LOCK_STRUCTURE
+{
+ uint8_t mode; /**< 8-bit card lock/unlock mode */
+ uint8_t pwd_len; /**< Password length; Also the length of new and old passwords in case of change */
+ uint8_t pwd_data[SDMMC_BLOCK_MAX_PASSWORD_LENGTH * 2U]; /**< New password OR old + new in case of change */
+} SDMMC_BLOCK_LOCK_STRUCTURE_t;
+
+/**
+ * @brief Password structure
+ */
+typedef struct SDMMC_BLOCK_PASSWORD
+{
+ uint8_t old_pwd[SDMMC_BLOCK_MAX_PASSWORD_LENGTH]; /**< Old password */
+ uint8_t new_pwd[SDMMC_BLOCK_MAX_PASSWORD_LENGTH]; /**< New password */
+ uint8_t old_pwd_len; /**< Old password length */
+ uint8_t new_pwd_len; /**< New password length. Set to 0 if password not set */
+} SDMMC_BLOCK_PASSWORD_t;
+
+/**
+ * @brief Erase Address details.
+ */
+typedef struct SDMMC_BLOCK_ERASE_ADDRESS
+{
+ uint32_t start_address; /**< Erase Block Start Address */
+ uint32_t end_address; /**< Erase Block Start Address */
+} SDMMC_BLOCK_ERASE_ADDRESS_t;
+
+/* Anonymous structure/union guard start */
+#if defined (__CC_ARM)
+# pragma push
+# pragma anon_unions
+#elif defined (__TASKING__)
+# pragma warning 586
+#endif
+
+/**
+ * @brief SDMMC_BLOCK APP instance
+ */
+typedef struct SDMMC_BLOCK
+{
+ union
+ {
+#ifdef SDMMC_BLOCK_SPI
+ SDMMC_BLOCK_SPI_t *sdmmc_spi; /**< SPI instance */
+#endif
+
+#ifdef SDMMC_BLOCK_SD
+ SDMMC_BLOCK_SD_t *sdmmc_sd; /**< SD instance */
+#endif
+ };
+
+# ifdef SDMMC_BLOCK_CARD_WRITE_PROTECT_SIGNAL
+ const SDMMC_BLOCK_PIN_CONFIG_t *sdwc; /**< Card write protect signal */
+# endif
+
+#ifdef SDMMC_BLOCK_SPI
+
+# ifdef SDMMC_BLOCK_SPI_CARD_LED_SIGNAL
+ const SDMMC_BLOCK_PIN_CONFIG_t *led; /**< LED signal, used in SPI mode */
+# endif
+
+#endif /* SDMMC_BLOCK_SPI */
+
+#if SDMMC_BLOCK_RTOS_MODE_SELECT
+ CMSIS_RTOS_t *const cmsis_rtos; /**< specific to RTOS mode */
+#endif /* SDMMC_BLOCK_RTOS_MODE_SELECT */
+
+ SDMMC_BLOCK_Config_Init init_pins; /**< Pins initialization function */
+ uint8_t card_state; /**< Card state */
+ uint8_t card_type; /**< Card type */
+ uint8_t card_capacity; /**< Capacity of the card */
+ SDMMC_BLOCK_RTOS_MODE_t rtos_mode; /**< RTOS mode */
+ SDMMC_BLOCK_CARD_INTERFACE_t interface_mode; /**< Card interface mode */
+ bool init_flag; /**< Flag indicating initialization return value */
+} SDMMC_BLOCK_t;
+
+/**
+ * @}
+ */
+
+/* Anonymous structure/union guard end */
+#if defined (__CC_ARM)
+# pragma pop
+#elif defined (__TASKING__)
+# pragma warning restore
+#endif
+
+/* Support for C++ */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/***********************************************************************************************************************
+ * API PROTOTYPES
+ **********************************************************************************************************************/
+
+/**
+ * @ingroup SDMMC_BLOCK_apidoc
+ * @{
+ */
+
+/**
+ * @brief Initialize the the SDMMC_BLOCK APP with the configuration done in the GUI.
+ * @param obj A pointer to SDMMC_BLOCK_t, pointing to the SDMMC_BLOCK handle configuration
+ * @return SDMMC_BLOCK_STATUS_t: Status of SDMMC_BLOCK APP initialization.\n
+ * SDMMC_BLOCK_STATUS_SUCCESS - on successful initialization.\n
+ * SDMMC_BLOCK_STATUS_FAILURE - if initialization fails.\n
+ *
+ * \parDescription:
+ *
+ * Initialize the Host and port pins in case of the SD mode.
+ * Initialize the SPI channel, ports (if selected) in case of SPI mode
+ * If RTOS mode is selected, the RTOS is initialized
+ *
+ *
+ * Example Usage:
+ * SDMMC_BLOCK_Init() function is called in DAVE_Init(). If SDMMC_BLOCK_Init() is not successful, other
+ * functionalities are not supposed to be called.
+ *
+ * @code
+ * #include
+ * int main(void)
+ * {
+ * DAVE_STATUS_t status;
+ * DAVE_APP_VERSION_t app_version;
+ *
+ * status = DAVE_Init(); // SDMMC_BLOCK_Init() is called from DAVE_Init()
+ *
+ * if(status == DAVE_STATUS_FAILURE)
+ * {
+ * // Placeholder for error handler code. The while loop below can be replaced with an user error handler.
+ * XMC_DEBUG("DAVE APPs initialization failed\n");
+ *
+ * while(1U)
+ * {
+ *
+ * }
+ * }
+ *
+ * // Placeholder for user application code. The while loop below can be replaced with user application code.
+ * while(1U)
+ * {
+ *
+ * }
+ * }
+ * @endcode
+ */
+SDMMC_BLOCK_STATUS_t SDMMC_BLOCK_Init(SDMMC_BLOCK_t *const obj);
+
+/**
+ * @brief Initialize the SD/MMC card and return the initialization status of the card
+ * @param obj A pointer to SDMMC_BLOCK_t, pointing to the SDMMC_BLOCK handle configuration
+ * @return SDMMC_BLOCK_STATUS_t: Status of SDMMC_BLOCK APP initialization.\n
+ * SDMMC_BLOCK_STATUS_SUCCESS: on successful initialization.\n
+ * SDMMC_BLOCK_STATUS_FAILURE: If initialization fails.\n
+ * SDMMC_BLOCK_STATUS_NOTRDY : Card is not available or not initialized\n
+ *
+ * \parDescription:
+ *
+ * Initialize the card and update the card information like card type and card state. Initialization
+ * flag is set to 1 if the card is initialized properly.
+ *
+ *
+ * Example Usage:
+ * This will initialize the card and update the card related properties and returns successful if card is
+ * initialized successfully.
+ *
+ * @code
+ * #include
+ * int main(void)
+ * {
+ * DAVE_STATUS_t status;
+ * DAVE_APP_VERSION_t app_version;
+ * SDMMC_BLOCK_STATUS_t sdmmc_status;
+ *
+ * status = DAVE_Init(); // SDMMC_BLOCK_Init() is called from DAVE_Init()
+ *
+ * sdmmc_status = SDMMC_BLOCK_Initialize(&SDMMC_BLOCK_0);
+ *
+ * if(status == DAVE_STATUS_FAILURE)
+ * {
+ * // Placeholder for error handler code. The while loop below can be replaced with an user error handler.
+ * XMC_DEBUG("DAVE APPs initialization failed\n");
+ *
+ * while(1U)
+ * {
+ *
+ * }
+ * }
+ *
+ * // Placeholder for user application code. The while loop below can be replaced with user application code.
+ * while(1U)
+ * {
+ *
+ * }
+ * }
+ * @endcode
+ */
+SDMMC_BLOCK_STATUS_t SDMMC_BLOCK_Initialize(SDMMC_BLOCK_t *const obj);
+
+/**
+ * @brief Get the card's current status
+ * @param obj A pointer to SDMMC_BLOCK_t, pointing to the SDMMC_BLOCK handle configuration
+ * @return uint8_t \n
+ * * SDMMC_BLOCK_CARD_STATE_INITIALIZED: If initialization is successful without any errors.\n
+ * SDMMC_BLOCK_CARD_STATE_NOT_INITIALIZED: If initialization fails.\n
+ * SDMMC_BLOCK_CARD_STATE_NO_CARD : Card is not available\n
+ * SDMMC_BLOCK_CARD_STATE_WRITE_PROTECTED : Card is write protected\n
+ *
+ * \parDescription:
+ * Card state (initialization state, card availability and write protection state and the like)
+ * is returned as a logically OR'd value indicating various states. The user may then use an
+ * appropriate mask to take measures based on the states.
+ *
+ * Example Usage:
+ * This will initialize the card. Post initialization, the current status of the card is requested.
+ *
+ * @code
+ * #include
+ * int main(void)
+ * {
+ * DAVE_STATUS_t status;
+ * DAVE_APP_VERSION_t app_version;
+ * uint8_t card_status;
+ *
+ * status = DAVE_Init(); // SDMMC_BLOCK_Init() is called from DAVE_Init()
+ *
+ * sdmmc_status = SDMMC_BLOCK_Initialize(&SDMMC_BLOCK_0);
+ *
+ * card_status = SDMMC_BLOCK_GetStatus(&SDMMC_BLOCK_0);
+ *
+ * if(status == DAVE_STATUS_FAILURE)
+ * {
+ * // Placeholder for error handler code. The while loop below can be replaced with an user error handler.
+ * XMC_DEBUG("DAVE APPs initialization failed\n");
+ *
+ * while(1U)
+ * {
+ *
+ * }
+ * }
+ *
+ * // Placeholder for user application code. The while loop below can be replaced with user application code.
+ * while(1U)
+ * {
+ *
+ * }
+ * }
+ * @endcode
+ */
+uint8_t SDMMC_BLOCK_GetStatus(SDMMC_BLOCK_t *const obj);
+
+/**
+ * @brief Reads the specified number of blocks of data from the card
+ * @param obj A pointer to SDMMC_BLOCK_t, pointing to the SDMMC_BLOCK handle configuration
+ * @param read_buf Read aligned buffer pointer to store data read from the card.
+ * @param sector_number Specifies the card sector address from which the read operation has to be started.
+ * @param sector_count Specifies the number of sectors of data that has to be read (1 sector = 512 bytes)
+ * @return SDMMC_BLOCK_STATUS_t: Status of SDMMC_BLOCK APP read operation.\n
+ * SDMMC_BLOCK_STATUS_SUCCESS: on successful read operation.\n
+ * SDMMC_BLOCK_STATUS_FAILURE: If read operation fails.\n
+ * SDMMC_BLOCK_STATUS_NOTRDY : Card is not available or not initialized.\n
+ * SDMMC_BLOCK_STATUS_LOCKED : Card is locked with password.\n
+ * SDMMC_BLOCK_STATUS_WRPRT : Card is write protected.\n
+ * \parDescription:
+ * Block read can be single or multiple blocks. It is mandatory to pass an aligned buffer to store the data read
+ * from the card.
+ *
+ * Example Usage:
+ * This will initialize the card. If initialization is successful data will be written, read and then
+ * erased from the card. Post these functions, the card is finally ejected.
+ *
+ * @code
+ * uint8_t send_data[1024];
+ * uint8_t read_data[1024];
+ * volatile uint32_t count;
+ *
+ * SDMMC_BLOCK_ERASE_ADDRESS_t erase_address =
+ * {
+ * .start_address = 1004U,
+ * .end_address = 1005U
+ * };
+ *
+ * #include
+ * int main(void)
+ * {
+ * DAVE_STATUS_t status;
+ * DAVE_APP_VERSION_t app_version;
+ * SDMMC_BLOCK_CARD_STATE_t card_status;
+ *
+ * status = DAVE_Init(); // SDMMC_BLOCK_Init() is called from DAVE_Init()
+ *
+ * sdmmc_status = SDMMC_BLOCK_Initialize(&SDMMC_BLOCK_0);
+ *
+ * if (sdmmc_status == SDMMC_BLOCK_STATUS_SUCCESS)
+ * {
+ * do
+ * {
+ * send_data[count] = count;
+ * } while (count++ < 1024);
+ *
+ * sdmmc_status = SDMMC_BLOCK_WriteBlock(&SDMMC_BLOCK_0, send_data, 1004U, 2U);
+ *
+ * if (sdmmc_status == SDMMC_BLOCK_STATUS_SUCCESS)
+ * {
+ * sdmmc_status = SDMMC_BLOCK_ReadBlock(&SDMMC_BLOCK_0, read_data, 1004U, 2U);
+ *
+ * for (count = 0; count < 1024; count++)
+ * {
+ * if(read_data[count] != send_data[count])
+ * status = DAVE_STATUS_FAILURE;
+ * }
+ *
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_CTRL_TRIM, &erase_address);
+ *
+ * sdmmc_status = SDMMC_BLOCK_ReadBlock(&SDMMC_BLOCK_0, read_data, 1004U, 2U);
+ *
+ * for (count = 0; count < 1024; count++)
+ * {
+ * if(read_data[count] != 0U)
+ * status = DAVE_STATUS_FAILURE;
+ * }
+ * }
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_CTRL_EJECT, &buffer);
+ * }
+ *
+ * if(status == DAVE_STATUS_FAILURE)
+ * {
+ * // Placeholder for error handler code. The while loop below can be replaced with an user error handler.
+ * XMC_DEBUG("DAVE APPs initialization failed\n");
+ *
+ * while(1U)
+ * {
+ *
+ * }
+ * }
+ *
+ * // Placeholder for user application code. The while loop below can be replaced with user application code.
+ * while(1U)
+ * {
+ *
+ * }
+ * }
+ * @endcode
+ */
+SDMMC_BLOCK_STATUS_t SDMMC_BLOCK_ReadBlock(SDMMC_BLOCK_t *const obj,
+ uint8_t *read_buf,
+ const uint32_t sector_number,
+ const uint8_t sector_count);
+
+/**
+ * @brief Write data blocks onto the card from the host system.
+ * @param obj A pointer to SDMMC_BLOCK_t, pointing to the SDMMC_BLOCK handle configuration
+ * @param write_buf Buffer pointer for the data to be stored into card.
+ * @param sector_number Specifies the card sector address from which the write operation has to be started.
+ * @param sector_count Specifies the number of sectors of data that has to be written. (1 sector = 512 bytes)
+ * @return SDMMC_BLOCK_STATUS_t: Status of SDMMC_BLOCK APP write operation.\n
+ * SDMMC_BLOCK_STATUS_SUCCESS: on successful read operation.\n
+ * SDMMC_BLOCK_STATUS_FAILURE: If read operation fails.\n
+ * SDMMC_BLOCK_STATUS_NOTRDY : Card is not available or not initialized\n
+ * SDMMC_BLOCK_STATUS_LOCKED : Card is locked with password\n
+ * SDMMC_BLOCK_STATUS_WRPRT : Card is write protected.\n
+ *
+ * \parDescription:
+ * Write operation may be for single or multiple blocks.
+ *
+ * Example Usage:
+ * This will initialize the card. If initialization is successful data will be written, read and then
+ * erased from the card. Post these functions, the card is finally ejected.
+ *
+ * @code
+ * uint8_t send_data[1024];
+ * uint8_t read_data[1024];
+ * volatile uint32_t count;
+ *
+ * SDMMC_BLOCK_ERASE_ADDRESS_t erase_address =
+ * {
+ * .start_address = 1004U,
+ * .end_address = 1005U
+ * };
+ *
+ * #include
+ * int main(void)
+ * {
+ * DAVE_STATUS_t status;
+ * DAVE_APP_VERSION_t app_version;
+ * SDMMC_BLOCK_CARD_STATE_t card_status;
+ *
+ * status = DAVE_Init(); // SDMMC_BLOCK_Init() is called from DAVE_Init()
+ *
+ * sdmmc_status = SDMMC_BLOCK_Initialize(&SDMMC_BLOCK_0);
+ *
+ * if (sdmmc_status == SDMMC_BLOCK_STATUS_SUCCESS)
+ * {
+ * do
+ * {
+ * send_data[count] = count;
+ * } while (count++ < 1024);
+ *
+ * sdmmc_status = SDMMC_BLOCK_WriteBlock(&SDMMC_BLOCK_0, send_data, 1004U, 2U);
+ *
+ * if (sdmmc_status == SDMMC_BLOCK_STATUS_SUCCESS)
+ * {
+ * sdmmc_status = SDMMC_BLOCK_ReadBlock(&SDMMC_BLOCK_0, read_data, 1004U, 2U);
+ *
+ * for (count = 0; count < 1024; count++)
+ * {
+ * if(read_data[count] != send_data[count])
+ * status = DAVE_STATUS_FAILURE;
+ * }
+ *
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_CTRL_TRIM, &erase_address);
+ *
+ * sdmmc_status = SDMMC_BLOCK_ReadBlock(&SDMMC_BLOCK_0, read_data, 1004U, 2U);
+ *
+ * for (count = 0; count < 1024; count++)
+ * {
+ * if(read_data[count] != 0U)
+ * status = DAVE_STATUS_FAILURE;
+ * }
+ * }
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_CTRL_EJECT, &buffer);
+ * }
+ *
+ * if(status == DAVE_STATUS_FAILURE)
+ * {
+ * // Placeholder for error handler code. The while loop below can be replaced with an user error handler.
+ * XMC_DEBUG("DAVE APPs initialization failed\n");
+ *
+ * while(1U)
+ * {
+ *
+ * }
+ * }
+ *
+ * // Placeholder for user application code. The while loop below can be replaced with user application code.
+ * while(1U)
+ * {
+ *
+ * }
+ * }
+ * @endcode
+ */
+SDMMC_BLOCK_STATUS_t SDMMC_BLOCK_WriteBlock(SDMMC_BLOCK_t *const obj,
+ uint8_t *write_buf,
+ const uint32_t sector_number,
+ const uint8_t sector_count);
+
+/**
+ * @brief Control the specified SDMMC device features and the miscellaneous device independent functions
+ * other than disk read/write.
+ * @param obj A pointer to SDMMC_BLOCK_t, pointing to the SDMMC_BLOCK handle configuration
+ * @param command Specifies the command code.
+ * @param buffer Pointer to the parameter buffer depends on the command code.\n
+ * When it is not used, specify a NULL pointer.
+ * @return SDMMC_BLOCK_STATUS_t: Status of SDMMC_BLOCK APP operation.\n
+ * SDMMC_BLOCK_STATUS_SUCCESS: on successful operation.\n
+ * SDMMC_BLOCK_STATUS_FAILURE: If the specified operation fails.\n
+ * SDMMC_BLOCK_STATUS_NOTRDY : Card is not available or not initialized\n
+ * SDMMC_BLOCK_STATUS_LOCKED : Card is locked with password\n
+ * SDMMC_BLOCK_STATUS_PARERR : If invalid parameter is passed as argument.\n
+ * SDMMC_BLOCK_STATUS_WRPRT : Card is write protected.\n
+ *
+ * \parDescription:
+ * For Locking features, the user must provide the password information in the SDMMC_BLOCK_PASSWORD_t structure.
+ *
+ * The IOCTL commands used are: \n\n
+ * Generic IOCTL commands: \n\n
+ * SDMMC_BLOCK_CTRL_SYNC: Flush disk cache (for write functions). \n ('buffer' can be NULL). \n\n
+ * SDMMC_BLOCK_GET_SECTOR_COUNT: Get media size. \n ('buffer' must refer to a uint32_t) \n\n
+ * SDMMC_BLOCK_GET_SECTOR_SIZE: Get sector size. \n ('buffer' must refer to a uint32_t) \n\n
+ * SDMMC_BLOCK_GET_BLOCK_SIZE: Get erase block size. \n ('buffer' must refer to a uint32_t) \n\n
+ * SDMMC_BLOCK_CTRL_TRIM: Inform device that the data on the block of sectors is no longer used. \n
+ * ('buffer must refer to a value of type SDMMC_BLOCK_ERASE_ADDRESS_t). \n\n
+ * SDMMC_BLOCK_CTRL_EJECT: Eject media. \n ('buffer' can be NULL). \n\n
+ * MMC/SD card specific IOCTL commands: \n\n
+ * SDMMC_BLOCK_MMC_GET_TYPE: Get card type i.e. Standard Capacity v2/v1x or High Capacity card. \n
+ * ('buffer' must refer to a value of type SDMMC_BLOCK_CARD_TYPE_t). \n\n
+ * SDMMC_BLOCK_MMC_GET_CSD: Get Card's Specific Data register. \n ('buffer' must refer to a value of type SDMMC_BLOCK_SDV2_CSD_t). \n\n
+ * SDMMC_BLOCK_MMC_GET_CID: Get Card's Identification Number. \n ('buffer' must refer to a value of type SDMMC_BLOCK_CID_t). \n\n
+ * SDMMC_BLOCK_MMC_GET_OCR: Get Card's Operating Condition Register \n ('buffer' must refer to a uint32_t). \n\n
+ * SDMMC_BLOCK_MMC_GET_SDSTAT: Get SD bus status information. \n ('buffer' must refer to a uin8_t array of size 64 bytes) \n\n
+ * SDMMC_BLOCK_MMC_LOCK_CARD: Locks the card. \n ('buffer' must refer to a value of type SDMMC_BLOCK_PASSWORD_t). \n\n
+ * SDMMC_BLOCK_MMC_UNLOCK_CARD: Unlocks the card. \n ('buffer' must refer to a value of type SDMMC_BLOCK_PASSWORD_t). \n\n
+ * SDMMC_BLOCK_MMC_SET_PASSWD: Set/replace the password. \n ('buffer' must refer to a value of type SDMMC_BLOCK_PASSWORD_t). \n\n
+ * SDMMC_BLOCK_MMC_CLEAR_PASSWD: Clear the password. \n ('buffer' must refer to a value of type SDMMC_BLOCK_PASSWORD_t). \n\n
+ * SDMMC_BLOCK_MMC_SET_LOCK: Sets the password and locks the card in the same power cycle. \n ('buffer' must refer to a value of type SDMMC_BLOCK_PASSWORD_t). \n\n
+ * SDMMC_BLOCK_MMC_READ_LOCK_STATUS: Reads the current lock status of the card. \n ('buffer' must refer to a value of type SDMMC_BLOCK_CARD_LOCK_STATUS_t). \n\n
+ * SDMMC_BLOCK_MMC_FORCE_ERASE: Force erase the password. It is useful when user forgets the password. \n ('buffer' is NULL). \n\n
+ *
+ *
+ * Example Usage1:
+ * The example initializes the card. If initialization is successful the control then checks for the lock_status.
+ * For a card without any password, the program should indicate that the card is not locked. Then a password of length
+ * 6 is set and the card is locked with the configured password. The lock status is then checked to ensure that it is
+ * locked. Post this operation, the card is unlocked. If the unlock operation is successful, the card should
+ * indicate so. The password is then cleared.
+ * @code
+ * #include //Declarations from DAVE Code Generation (includes SFR declaration)
+ *
+ * SDMMC_BLOCK_PASSWORD_t password =
+ * {
+ * .old_pwd_len = 6U,
+ * .old_pwd = {'p', 'a', 's', 's', 'w', 'd'},
+ * };
+ *
+ * int main(void)
+ * {
+ * DAVE_STATUS_t status;
+ * SDMMC_BLOCK_STATUS_t sdmmc_status;
+ * SDMMC_BLOCK_CARD_LOCK_STATUS_t lock_status;
+ *
+ * status = DAVE_Init(); // Initialization of DAVE APPs
+ *
+ * sdmmc_status = SDMMC_BLOCK_Initialize(&SDMMC_BLOCK_0);
+ *
+ * if (sdmmc_status == SDMMC_BLOCK_STATUS_SUCCESS)
+ * {
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_MMC_READ_LOCK_STATUS, &lock_status);
+ *
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_MMC_SET_PASSWD, &password);
+ *
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_MMC_LOCK_CARD, &password);
+ *
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_MMC_READ_LOCK_STATUS, &lock_status);
+ *
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_MMC_UNLOCK_CARD, &password);
+ *
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_MMC_READ_LOCK_STATUS, &lock_status);
+ *
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_MMC_CLEAR_PASSWD, &password);
+ * }
+ *
+ * if(status == DAVE_STATUS_FAILURE)
+ * {
+ * // Placeholder for error handler code. The while loop below can be replaced with an user error handler.
+ * XMC_DEBUG("DAVE APPs initialization failed\n");
+ *
+ * while(1U)
+ * {
+ *
+ * }
+ * }
+ *
+ * // Placeholder for user application code. The while loop below can be replaced with user application code.
+ * while(1U)
+ * {
+ *
+ * }
+ * }
+ * @endcode
+ *
+ * Example Usage2:
+ * This example demonstrates the procedure to change the existing password of the card and then performs a force erase
+ * of the card.
+ * @code
+ * #include //Declarations from DAVE Code Generation (includes SFR declaration)
+ * #include
+ * SDMMC_BLOCK_PASSWORD_t password =
+ * {
+ * .old_pwd_len = 6U,
+ * .old_pwd = {'p', 'a', 's', 's', 'w', 'd'},
+ * .new_pwd_len = 6U,
+ * .new_pwd = {'s', 'e', 'c', 'r', 'e', 't'},
+ * };
+ *
+ * int main(void)
+ * {
+ * DAVE_STATUS_t status;
+ * SDMMC_BLOCK_STATUS_t sdmmc_status;
+ * SDMMC_BLOCK_CARD_LOCK_STATUS_t lock_status;
+ * uint8_t buffer;
+ *
+ * status = DAVE_Init(); /. Initialization of DAVE APPs
+ *
+ * sdmmc_status = SDMMC_BLOCK_Initialize(&SDMMC_BLOCK_0);
+ *
+ * if (sdmmc_status == SDMMC_BLOCK_STATUS_SUCCESS)
+ * {
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_MMC_READ_LOCK_STATUS, &lock_status);
+ *
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_MMC_SET_PASSWD, &password);
+ *
+ * // Set the old password value with the new one. SO that card can be locked with the password configured.
+ * memcpy(password.old_pwd, password.new_pwd, password.new_pwd_len);
+ * password.old_pwd_len = password.new_pwd_len;
+ * password.new_pwd_len = 0U;
+ *
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_MMC_LOCK_CARD, &password);
+ *
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_MMC_READ_LOCK_STATUS, &lock_status);
+ *
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_MMC_FORCE_ERASE, &buffer);
+ * }
+ *
+ * if(status == DAVE_STATUS_FAILURE)
+ * {
+ * // Placeholder for error handler code. The while loop below can be replaced with an user error handler.
+ * XMC_DEBUG("DAVE APPs initialization failed\n");
+ *
+ * while(1U)
+ * {
+ *
+ * }
+ * }
+ *
+ * // Placeholder for user application code. The while loop below can be replaced with user application code.
+ * while(1U)
+ * {
+ *
+ * }
+ * }
+ * @endcode
+ */
+SDMMC_BLOCK_STATUS_t SDMMC_BLOCK_Ioctl(SDMMC_BLOCK_t *const obj,
+ const uint8_t command,
+ void *buffer);
+
+#if SDMMC_BLOCK_SD_CARD_DETECTION_SUPPORT
+
+#ifdef SDMMC_BLOCK_SD
+
+ /**
+ * @brief Register a callback function
+ * @param obj A pointer to SDMMC_BLOCK_t, pointing to the SDMMC_BLOCK handle configuration
+ * @param cb A pointer to a function accepting ::SDMMC_BLOCK_SD_INTERRUPT_t and returning void
+ * @return SDMMC_BLOCK_STATUS_t: Status of callback function registration.\n
+ * SDMMC_BLOCK_STATUS_SUCCESS - On successful registration.\n
+ * SDMMC_BLOCK_STATUS_PARERR - If registration fails (invalid callback parameter).\n
+ *
+ * \parDescription:
+ * The function can be used to register a callback function to signal a card detection
+ * event. The microcontroller will generate interrupts for a card insertion and a card
+ * removal event. The callback can be used to signal these events.
+ *
+ * Example Usage:
+ * The following example registers a callback function for the card-detect events:
+ * card insertion and removal.
+ * @code
+ * #include
+ *
+ * volatile bool led_status = false;
+ *
+ * void card_detect_callback(SDMMC_BLOCK_SD_INTERRUPT_t card_ins)
+ * {
+ * if (card_ins == SDMMC_BLOCK_SD_INTERRUPT_CARD_INSERTION)
+ * {
+ * // Turn an LED on perhaps? Be sure to configure the LED first.
+ * led_status = true;
+ * }
+ * else
+ * {
+ * // Turn the LED off perhaps?
+ * led_status = false;
+ * }
+ * }
+ *
+ * int main(void)
+ * {
+ * DAVE_STATUS_t status;
+ * SDMMC_BLOCK_STATUS_t sdmmc_status;
+ * SDMMC_BLOCK_CARD_LOCK_STATUS_t lock_status;
+ *
+ * // Register the callback now
+ * sdmmc_status = SDMMC_BLOCK_RegisterCallback(&SDMMC_BLOCK_0, card_detect_callback);
+ *
+ * status = DAVE_Init(); // SDMMC_BLOCK_Init() is called from DAVE_Init()
+ *
+ * sdmmc_status = SDMMC_BLOCK_Initialize(&SDMMC_BLOCK_0);
+ * if (sdmmc_status == SDMMC_BLOCK_STATUS_SUCCESS)
+ * {
+ * sdmmc_status = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, SDMMC_BLOCK_MMC_READ_LOCK_STATUS, &lock_status);
+ * }
+ *
+ * // Placeholder for user application code.
+ * while(1U)
+ * {
+ * }
+ * }
+ * @endcode
+ */
+SDMMC_BLOCK_STATUS_t SDMMC_BLOCK_RegisterCallback(SDMMC_BLOCK_t *const obj,
+ void (*cb)(SDMMC_BLOCK_SD_INTERRUPT_t));
+
+#endif /* #ifdef SDMMC_BLOCK_SD */
+
+#endif /* #if SDMMC_BLOCK_SD_CARD_DETECTION_SUPPORT */
+
+/**
+ * @}
+ */
+
+/* Support for C++ */
+#ifdef __cplusplus
+}
+#endif
+
+#include "sdmmc_block_extern.h"
+
+#endif /* SDMMC_BLOCK_H */
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/lib/FatFS/SDMMC_BLOCK/sdmmc_block_conf.c b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/lib/FatFS/SDMMC_BLOCK/sdmmc_block_conf.c
new file mode 100644
index 00000000..4ecfedee
--- /dev/null
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/lib/FatFS/SDMMC_BLOCK/sdmmc_block_conf.c
@@ -0,0 +1,326 @@
+/*********************************************************************************************************************
+* DAVE APP Name : SDMMC_BLOCK APP Version: 4.0.22
+*
+* NOTE:
+* This file is generated by DAVE. Any manual modification done to this file will be lost when the code is regenerated.
+*********************************************************************************************************************/
+
+/**
+ * @cond
+ ***********************************************************************************************************************
+ * Copyright (c) 2016, Infineon Technologies AG
+ * 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 the copyright holders nor the names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY,OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes
+ * with Infineon Technologies AG (dave@infineon.com).
+ ***********************************************************************************************************************
+ *
+ * Change History
+ * --------------
+ *
+ * 2016-01-20:
+ * - Initial version
+ *
+ * 2016-02-05:
+ * - RTOS support added
+ *
+ * 2016-04-05:
+ * - MISRA fixes.
+ * - Bug fixes done for PR.
+ *
+ * 2016-04-05:
+ * - Code genration fix for XMC4300 device.
+ *
+ * @endcond
+ */
+
+/***********************************************************************************************************************
+ * HEADER FILES
+ **********************************************************************************************************************/
+
+#include "sdmmc_block.h"
+
+/**********************************************************************************************************************
+ * LOCAL ROUTINES
+ **********************************************************************************************************************/
+
+/* SDMMC_BLOCK configuration initialization */
+static void SDMMC_BLOCK_0_Config_Init(void);
+
+
+/**********************************************************************************************************************
+ * EXTERNAL REFERENCES
+ **********************************************************************************************************************/
+
+extern SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_ErrorInterruptHandler(SDMMC_BLOCK_t *const obj,
+ uint16_t int_status);
+
+extern SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_NormalInterruptHandler(SDMMC_BLOCK_t *const obj,
+ uint16_t int_status);
+
+
+/**********************************************************************************************************************
+ * GLOBAL VARIABLES
+ **********************************************************************************************************************/
+
+volatile uint16_t normal_int_status; /* Normal interrupt status */
+volatile uint16_t err_int_status; /* Error interrupt status */
+
+
+/**********************************************************************************************************************
+ * DATA STRUCTURES
+ **********************************************************************************************************************/
+
+
+/* SDMMC_BLOCK Data 0 pin config */
+const SDMMC_BLOCK_GPIO_CONFIG_t SDMMC_BLOCK_0_DATA_0_PIN_CONFIG =
+{
+ .config =
+ {
+ .mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL,
+ .output_strength = XMC_GPIO_OUTPUT_STRENGTH_STRONG_MEDIUM_EDGE,
+ .output_level = XMC_GPIO_OUTPUT_LEVEL_LOW,
+ },
+ .hw_control = XMC_GPIO_HWCTRL_PERIPHERAL1,
+};
+
+/* SDMMC_BLOCK Data 0 pin */
+const SDMMC_BLOCK_PIN_CONFIG_t SDMMC_BLOCK_0_DATA_0 =
+{
+ .port = (XMC_GPIO_PORT_t *)PORT4_BASE,
+ .pin = (uint8_t)0,
+ .config = &SDMMC_BLOCK_0_DATA_0_PIN_CONFIG
+};
+
+
+/* SDMMC_BLOCK Data 1 pin config */
+const SDMMC_BLOCK_GPIO_CONFIG_t SDMMC_BLOCK_0_DATA_1_PIN_CONFIG =
+{
+ .config =
+ {
+ .mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL,
+ .output_strength = XMC_GPIO_OUTPUT_STRENGTH_STRONG_MEDIUM_EDGE,
+ .output_level = XMC_GPIO_OUTPUT_LEVEL_LOW,
+ },
+ .hw_control = XMC_GPIO_HWCTRL_PERIPHERAL1,
+};
+
+/* SDMMC_BLOCK Data 1 pin */
+const SDMMC_BLOCK_PIN_CONFIG_t SDMMC_BLOCK_0_DATA_1 =
+{
+ .port = (XMC_GPIO_PORT_t *)PORT1_BASE,
+ .pin = (uint8_t)6,
+ .config = &SDMMC_BLOCK_0_DATA_1_PIN_CONFIG
+};
+
+
+/* SDMMC_BLOCK Data 2 pin config */
+const SDMMC_BLOCK_GPIO_CONFIG_t SDMMC_BLOCK_0_DATA_2_PIN_CONFIG =
+{
+ .config =
+ {
+ .mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL,
+ .output_strength = XMC_GPIO_OUTPUT_STRENGTH_STRONG_MEDIUM_EDGE,
+ .output_level = XMC_GPIO_OUTPUT_LEVEL_LOW,
+ },
+ .hw_control = XMC_GPIO_HWCTRL_PERIPHERAL1,
+};
+
+/* SDMMC_BLOCK Data 2 pin */
+const SDMMC_BLOCK_PIN_CONFIG_t SDMMC_BLOCK_0_DATA_2 =
+{
+ .port = (XMC_GPIO_PORT_t *)PORT1_BASE,
+ .pin = (uint8_t)7,
+ .config = &SDMMC_BLOCK_0_DATA_2_PIN_CONFIG
+};
+
+
+/* SDMMC_BLOCK Data 3 pin config */
+const SDMMC_BLOCK_GPIO_CONFIG_t SDMMC_BLOCK_0_DATA_3_PIN_CONFIG =
+{
+ .config =
+ {
+ .mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL,
+ .output_strength = XMC_GPIO_OUTPUT_STRENGTH_STRONG_MEDIUM_EDGE,
+ .output_level = XMC_GPIO_OUTPUT_LEVEL_LOW,
+ },
+ .hw_control = XMC_GPIO_HWCTRL_PERIPHERAL1,
+};
+
+/* SDMMC_BLOCK Data 3 pin */
+const SDMMC_BLOCK_PIN_CONFIG_t SDMMC_BLOCK_0_DATA_3 =
+{
+ .port = (XMC_GPIO_PORT_t *)PORT4_BASE,
+ .pin = (uint8_t)1,
+ .config = &SDMMC_BLOCK_0_DATA_3_PIN_CONFIG
+};
+
+
+/* SDMMC_BLOCK Command pin config */
+const SDMMC_BLOCK_GPIO_CONFIG_t SDMMC_BLOCK_0_COMMAND_PIN_CONFIG =
+{
+ .config =
+ {
+ .mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL,
+ .output_strength = XMC_GPIO_OUTPUT_STRENGTH_STRONG_MEDIUM_EDGE,
+ .output_level = XMC_GPIO_OUTPUT_LEVEL_LOW,
+ },
+ .hw_control = XMC_GPIO_HWCTRL_PERIPHERAL1,
+};
+
+/* SDMMC_BLOCK Command pin */
+const SDMMC_BLOCK_PIN_CONFIG_t SDMMC_BLOCK_0_COMMAND =
+{
+ .port = (XMC_GPIO_PORT_t *)PORT3_BASE,
+ .pin = (uint8_t)5,
+ .config = &SDMMC_BLOCK_0_COMMAND_PIN_CONFIG
+};
+
+
+/* SDMMC_BLOCK Clock pin config */
+const SDMMC_BLOCK_GPIO_CONFIG_t SDMMC_BLOCK_0_CLK_PIN_CONFIG =
+{
+ .config =
+ {
+ .mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL,
+ .output_strength = XMC_GPIO_OUTPUT_STRENGTH_STRONG_MEDIUM_EDGE,
+ .output_level = XMC_GPIO_OUTPUT_LEVEL_LOW,
+ },
+ .hw_control = XMC_GPIO_HWCTRL_PERIPHERAL1,
+};
+
+/* SDMMC_BLOCK Clock pin */
+const SDMMC_BLOCK_PIN_CONFIG_t SDMMC_BLOCK_0_CLK =
+{
+ .port = (XMC_GPIO_PORT_t *)PORT3_BASE,
+ .pin = (uint8_t)6,
+ .config = &SDMMC_BLOCK_0_CLK_PIN_CONFIG
+};
+
+
+/* SDMMC SD mode instance */
+SDMMC_BLOCK_SD_t SDMMC_BLOCK_0_SD =
+{
+ .sdmmc = XMC_SDMMC, /* SDMMC instance */
+ .int_priority = 63U, /* Node interrupt priority */
+ .int_sub_priority = 0U, /* Node interrupt sub-priority */
+ .mode_init_flag = false, /* Mode initialization false by default */
+};
+
+/* SDMMC_BLOCK APP instance */
+SDMMC_BLOCK_t SDMMC_BLOCK_0 =
+{
+ .interface_mode = SDMMC_BLOCK_CARD_INTERFACE_SD, /* SD interface */
+ .sdmmc_sd = &SDMMC_BLOCK_0_SD, /* SDMMC_SD instance */
+ .rtos_mode = SDMMC_BLOCK_RTOS_MODE_DISABLED, /* RTOS mose is not used */
+
+ #if SDMMC_BLOCK_RTOS_MODE_SELECT
+ .cmsis_rtos = NULL, /* RTOS mose is not used */
+ #endif /* SDMMC_BLOCK_RTOS_MODE_SELECT */
+
+ .init_pins = SDMMC_BLOCK_0_Config_Init, /* true: Initialized; false: Uninitialized */
+ .init_flag = false, /* true: Initialized; false: Uninitialized */
+ .card_state = ((uint8_t)SDMMC_BLOCK_CARD_STATE_NOT_INITIALIZED |
+ (uint8_t)SDMMC_BLOCK_CARD_STATE_NO_CARD) /* Card state */
+};
+
+/**********************************************************************************************************************
+ * FUNCTION DEFINITIONS
+ **********************************************************************************************************************/
+
+/* SDMMC SD interrupt handler */
+void SDMMC0_0_IRQHandler(void)
+{
+ normal_int_status = SDMMC_BLOCK_0.sdmmc_sd->sdmmc->INT_STATUS_NORM;
+ err_int_status = SDMMC_BLOCK_0.sdmmc_sd->sdmmc->INT_STATUS_ERR;
+
+ if (normal_int_status & SDMMC_INT_STATUS_NORM_ERR_INT_Msk)
+ {
+ SDMMC_BLOCK_SD_ErrorInterruptHandler(&SDMMC_BLOCK_0, err_int_status);
+ }
+
+ if (normal_int_status & SDMMC_BLOCK_NORMAL_INT_STATUS_BITS)
+ {
+ SDMMC_BLOCK_SD_NormalInterruptHandler(&SDMMC_BLOCK_0, normal_int_status);
+ }
+}
+
+/*
+ * Configuration initialization:
+ * For pins and other mode specific settings
+ */
+static void SDMMC_BLOCK_0_Config_Init(void)
+{
+ /* Enable delay on command and data lines */
+ XMC_SDMMC_EnableDelayCmdDatLines();
+
+ /* Set the delay value chosen in the APP user interface */
+ XMC_SDMMC_SetDelay(SDMMC_BLOCK_SD_NUM_DELAY_ELEMENTS);
+
+ XMC_GPIO_Init(SDMMC_BLOCK_0_COMMAND.port,
+ SDMMC_BLOCK_0_COMMAND.pin,
+ &SDMMC_BLOCK_0_COMMAND.config->config);
+ XMC_GPIO_SetHardwareControl(SDMMC_BLOCK_0_COMMAND.port,
+ SDMMC_BLOCK_0_COMMAND.pin,
+ SDMMC_BLOCK_0_COMMAND.config->hw_control);
+
+ XMC_GPIO_Init(SDMMC_BLOCK_0_CLK.port,
+ SDMMC_BLOCK_0_CLK.pin,
+ &SDMMC_BLOCK_0_CLK.config->config);
+ XMC_GPIO_SetHardwareControl(SDMMC_BLOCK_0_CLK.port,
+ SDMMC_BLOCK_0_CLK.pin,
+ SDMMC_BLOCK_0_CLK.config->hw_control);
+
+ XMC_GPIO_Init(SDMMC_BLOCK_0_DATA_0.port,
+ SDMMC_BLOCK_0_DATA_0.pin,
+ &SDMMC_BLOCK_0_DATA_0.config->config);
+ XMC_GPIO_SetHardwareControl(SDMMC_BLOCK_0_DATA_0.port,
+ SDMMC_BLOCK_0_DATA_0.pin,
+ SDMMC_BLOCK_0_DATA_0.config->hw_control);
+
+ XMC_GPIO_Init(SDMMC_BLOCK_0_DATA_1.port,
+ SDMMC_BLOCK_0_DATA_1.pin,
+ &SDMMC_BLOCK_0_DATA_1.config->config);
+ XMC_GPIO_SetHardwareControl(SDMMC_BLOCK_0_DATA_1.port,
+ SDMMC_BLOCK_0_DATA_1.pin,
+ SDMMC_BLOCK_0_DATA_1.config->hw_control);
+
+ XMC_GPIO_Init(SDMMC_BLOCK_0_DATA_2.port,
+ SDMMC_BLOCK_0_DATA_2.pin,
+ &SDMMC_BLOCK_0_DATA_2.config->config);
+ XMC_GPIO_SetHardwareControl(SDMMC_BLOCK_0_DATA_2.port,
+ SDMMC_BLOCK_0_DATA_2.pin,
+ SDMMC_BLOCK_0_DATA_2.config->hw_control);
+
+ XMC_GPIO_Init(SDMMC_BLOCK_0_DATA_3.port,
+ SDMMC_BLOCK_0_DATA_3.pin,
+ &SDMMC_BLOCK_0_DATA_3.config->config);
+ XMC_GPIO_SetHardwareControl(SDMMC_BLOCK_0_DATA_3.port,
+ SDMMC_BLOCK_0_DATA_3.pin,
+ SDMMC_BLOCK_0_DATA_3.config->hw_control);
+
+ XMC_SDMMC_SetCardDetectionSource(XMC_SDMMC, XMC_SDMMC_CD_SOURCE_SW);
+ XMC_SDMMC_SetCardDetectionStatus(XMC_SDMMC, XMC_SDMMC_CD_STATUS_INSERTED);
+}
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/lib/FatFS/SDMMC_BLOCK/sdmmc_block_conf.h b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/lib/FatFS/SDMMC_BLOCK/sdmmc_block_conf.h
new file mode 100644
index 00000000..9380ae74
--- /dev/null
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/lib/FatFS/SDMMC_BLOCK/sdmmc_block_conf.h
@@ -0,0 +1,82 @@
+/*********************************************************************************************************************
+* DAVE APP Name : SDMMC_BLOCK APP Version: 4.0.22
+*
+* NOTE:
+* This file is generated by DAVE. Any manual modification done to this file will be lost when the code is regenerated.
+*********************************************************************************************************************/
+
+/**
+ * @cond
+ ***********************************************************************************************************************
+ * Copyright (c) 2016, Infineon Technologies AG
+ * 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 the copyright holders nor the names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY,OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes
+ * with Infineon Technologies AG (dave@infineon.com).
+ ***********************************************************************************************************************
+ *
+ * Change History
+ * --------------
+ *
+ * 2016-01-20:
+ * - Initial version
+ *
+ * 2016-02-05:
+ * - RTOS support added
+ *
+ * 2016-04-05:
+ * - Bug fixes done for PR.
+ *
+ * @endcond
+ */
+
+#ifndef SDMMC_BLOCK_CONF_H
+#define SDMMC_BLOCK_CONF_H
+
+
+
+/***********************************************************************************************************************
+ * HEADER FILES
+ **********************************************************************************************************************/
+
+#include "xmc_scu.h"
+#include "xmc_sdmmc.h"
+
+
+/**********************************************************************************************************************
+ * MACROS
+ **********************************************************************************************************************/
+
+#define SDMMC_BLOCK_MAJOR_VERSION (4U) /**< Major version */
+#define SDMMC_BLOCK_MINOR_VERSION (0U) /**< Minor version */
+#define SDMMC_BLOCK_PATCH_VERSION (22U) /**< Patch version */
+
+#define SDMMC_BLOCK_SD
+#define SDMMC_BLOCK_SD_NUM_DELAY_ELEMENTS (8U)
+#define SDMMC_BLOCK_SD_SUPPORT_4_BUS_WIDTH (1U)
+#define SDMMC_BLOCK_RTOS_MODE_SELECT (0U)
+
+/* Added configurable to support polling mode operation instead of interrupt driven. */
+#define SDMMC_BLOCK_POLLING_MODE (1U)
+
+#endif /* ifndef SDMMC_BLOCK_CONF_H */
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/lib/FatFS/SDMMC_BLOCK/sdmmc_block_extern.h b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/lib/FatFS/SDMMC_BLOCK/sdmmc_block_extern.h
new file mode 100644
index 00000000..5fb8d1c6
--- /dev/null
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/lib/FatFS/SDMMC_BLOCK/sdmmc_block_extern.h
@@ -0,0 +1,79 @@
+/*********************************************************************************************************************
+* DAVE APP Name : SDMMC_BLOCK APP Version: 4.0.22
+*
+* NOTE:
+* This file is generated by DAVE. Any manual modification done to this file will be lost when the code is regenerated.
+*********************************************************************************************************************/
+
+/**
+ * @cond
+ ***********************************************************************************************************************
+ * Copyright (c) 2016, Infineon Technologies AG
+ * 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 the copyright holders nor the names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY,OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes
+ * with Infineon Technologies AG (dave@infineon.com).
+ ***********************************************************************************************************************
+ *
+ * Change History
+ * --------------
+ *
+ * 2016-01-20:
+ * - Initial version
+ *
+ * 2016-02-05:
+ * - RTOS support added
+ *
+ * 2016-04-05:
+ * - Test hooks is added to emulates the hardware failures.
+ * - Bug fixes done for PR.
+ *
+ * 2016-06-07:
+ * - Fixed code generation error for project folder paths with spaces in between.
+ * @endcond
+ */
+
+#ifndef SDMMC_BLOCK_EXTERN_H
+#define SDMMC_BLOCK_EXTERN_H
+
+/***********************************************************************************************************************
+ * HEADER FILES
+ **********************************************************************************************************************/
+
+/**********************************************************************************************************************
+ * MACROS
+ **********************************************************************************************************************/
+
+/***********************************************************************************************************************
+ * EXTERN DECLARATIONS
+ ***********************************************************************************************************************/
+
+extern SDMMC_BLOCK_t SDMMC_BLOCK_0;
+
+#ifdef SDMMC_BLOCK_TEST_HOOK_ENABLE
+extern uint32_t sdmmc_block_test_hook_expected_command;
+#endif
+
+
+
+#endif /* ifndef SDMMC_BLOCK_EXTERN_H */
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/lib/FatFS/SDMMC_BLOCK/sdmmc_block_private_sd.c b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/lib/FatFS/SDMMC_BLOCK/sdmmc_block_private_sd.c
new file mode 100644
index 00000000..af860567
--- /dev/null
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/lib/FatFS/SDMMC_BLOCK/sdmmc_block_private_sd.c
@@ -0,0 +1,2911 @@
+/**
+ * @file sdmmc_block_private_sd.c
+ * @date 2017-06-08
+ *
+ * NOTE:
+ * This file is generated by DAVE. Any manual modification done to this file will be lost when the code is regenerated.
+ *
+ * @cond
+ ***********************************************************************************************************************
+ * SDMMC_BLOCK v4.0.22 - Configures the SD host to interface with the SDMMC card.
+ *
+ * Copyright (c) 2016-2017, Infineon Technologies AG
+ * 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 the copyright holders nor the names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY,OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes
+ * with Infineon Technologies AG (dave@infineon.com).
+ ***********************************************************************************************************************
+ *
+ * Change History
+ * --------------
+ *
+ * 2016-01-20:
+ * - Initial version.
+ *
+ * 2016-02-08:
+ * - Help Doc updated.
+ * - Bug fixes done.
+ *
+ * 2016-04-05
+ * - Bug fixes for public release, April, 2016
+ * - MISRA fixes
+ * - Add timeout for erase()
+ * - Check write protection in write/erase conditions
+ * - Remove mode_init_flag check for functions invoked in IOCTL
+ *
+ * 2016-07-20:
+ * - lReadResponse(): Fixes in handling XMC_SDMMC_RESPONSE_TYPE_R2
+ *
+ * 2016-08-24:
+ * - Introduce timeout mechanism in SDMMC_BLOCK_SD_lCheckDataCommandLines()
+ *
+ * 2017-06-08
+ * - Fix SDMMC_BLOCK_SD_GetSectorCount() for Standard Capacity cards
+ *
+ * @endcond
+ *
+ */
+
+#include "sdmmc_block_private_sd.h"
+#include "boot.h"
+
+
+#ifdef SDMMC_BLOCK_SD
+
+
+/***********************************************************************************************************************
+ * EXTERNAL ROUTINES
+ **********************************************************************************************************************/
+extern void SDMMC0_0_IRQHandler(void);
+
+
+/***********************************************************************************************************************
+ * LOCAL ROUTINES
+ **********************************************************************************************************************/
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lReset(SDMMC_BLOCK_t *const obj, uint32_t reset);
+
+static void
+SDMMC_BLOCK_SD_lCardCleanUp(SDMMC_BLOCK_t *const obj);
+
+static uint32_t
+SDMMC_BLOCK_SD_lCheckDataCommandLines(SDMMC_BLOCK_t *const obj,
+ const XMC_SDMMC_COMMAND_t *cmd);
+
+static void
+SDMMC_BLOCK_SD_lCheckArgumentError(const uint32_t *card_status, uint8_t *err);
+
+static void
+SDMMC_BLOCK_SD_lCheckEraseError(const uint32_t *card_status, uint8_t *err);
+
+static void
+SDMMC_BLOCK_SD_lCheckCardError(const uint32_t *card_status, uint8_t *err);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lCheckErrorInResponse(const uint32_t *card_status);
+
+static void
+SDMMC_BLOCK_SD_lGetCardLockState(SDMMC_BLOCK_t *const obj, uint32_t card_status, uint16_t cmd_index);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lTransferDelay(SDMMC_BLOCK_t *const obj, uint32_t delay);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lReadResponse(SDMMC_BLOCK_t *const obj,
+ const XMC_SDMMC_COMMAND_t *cmd,
+ XMC_SDMMC_RESPONSE_TYPE_t resp_type,
+ void *resp);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lSendCommand(SDMMC_BLOCK_t *const obj,
+ const XMC_SDMMC_COMMAND_t *cmd,
+ uint32_t arg,
+ XMC_SDMMC_RESPONSE_TYPE_t resp_type,
+ void *resp);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lSetVoltageWindow(SDMMC_BLOCK_t *const obj);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lQueryOperatingCondition(SDMMC_BLOCK_t *const obj);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lQueryVoltage(SDMMC_BLOCK_t *const obj, uint32_t arg);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lAfterCardInitialize(SDMMC_BLOCK_t *const obj);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lInitializeCard(SDMMC_BLOCK_t *const obj);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lGetWriteProtect(SDMMC_BLOCK_t *const obj);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lConfigureSingleBlockTransfer(SDMMC_BLOCK_t *const obj,
+ const XMC_SDMMC_COMMAND_t *cmd,
+ uint32_t arg,
+ uint16_t block_size);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lMultiBlockTransfer(SDMMC_BLOCK_t *const obj,
+ uint32_t *addr,
+ uint32_t num_blocks,
+ const XMC_SDMMC_COMMAND_t *cmd,
+ uint32_t *buf,
+ SDMMC_BLOCK_SD_DATA_TRANSFER_t transfer_mode);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lCheckLockStatus(SDMMC_BLOCK_t *const obj, SDMMC_BLOCK_CARD_LOCK_STATUS_t mode);
+
+#if SDMMC_BLOCK_SD_SUPPORT_4_BUS_WIDTH
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lSwitchBusWidth(SDMMC_BLOCK_t *const obj);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lSwitchSpeed(SDMMC_BLOCK_t *const obj);
+#endif
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lCommandDelay(SDMMC_BLOCK_t *const obj, uint32_t delay);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lSwitchToTransferState(SDMMC_BLOCK_t *const obj);
+
+static void
+SDMMC_BLOCK_SD_lAcmdErrorRecovery(SDMMC_BLOCK_t *const obj);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lCheckSectorBound(SDMMC_BLOCK_t *const obj,
+ uint32_t sector_num,
+ uint32_t sector_count);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lLocalErase(SDMMC_BLOCK_t *const obj,
+ uint32_t start_addr,
+ uint32_t end_addr,
+ uint32_t timeout);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lHostControllerInit(SDMMC_BLOCK_t *const obj);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lHostControllerDeInit(SDMMC_BLOCK_t *const obj);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lCardReadMultipleBlocks(SDMMC_BLOCK_t *const obj,
+ uint32_t *read_buf,
+ uint32_t read_addr,
+ uint32_t num_blocks);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lCardReadSingleBlock(SDMMC_BLOCK_t *const obj,
+ uint32_t *read_buf,
+ uint32_t read_addr);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lCardWriteMultipleBlocks(SDMMC_BLOCK_t *const obj,
+ const uint32_t *write_buf,
+ uint32_t write_addr,
+ uint32_t num_blocks);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lCardWriteSingleBlock(SDMMC_BLOCK_t *const obj,
+ const uint32_t *write_buf,
+ uint32_t write_addr);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lDelay(SDMMC_BLOCK_t *const obj, uint32_t delay);
+
+static void
+SDMMC_BLOCK_SD_lWriteCardType(SDMMC_BLOCK_t *const obj);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lReadRca(SDMMC_BLOCK_t *const obj);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lReadCardRegisters(SDMMC_BLOCK_t *const obj);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lDataTransfer(SDMMC_BLOCK_t *const obj,
+ uint32_t *buf,
+ SDMMC_BLOCK_SD_DATA_TRANSFER_t transfer_mode,
+ uint32_t quad_bytes);
+
+
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lErrorInterruptRecovery(SDMMC_BLOCK_t *const obj);
+
+static SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_lSingleBlockTransfer(SDMMC_BLOCK_t *const obj,
+ const XMC_SDMMC_COMMAND_t *cmd,
+ uint32_t arg,
+ uint16_t block_size,
+ uint32_t *buf,
+ SDMMC_BLOCK_SD_DATA_TRANSFER_t transfer_mode);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_Start(SDMMC_BLOCK_t *const obj);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_NormalInterruptHandler(SDMMC_BLOCK_t *const obj, uint16_t int_status);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_ErrorInterruptHandler(SDMMC_BLOCK_t *const obj, uint16_t int_status);
+
+/***********************************************************************************************************************
+ * MACROS
+ **********************************************************************************************************************/
+
+/***********************************************************************************************************************
+ * DATA STRUCTURES
+ **********************************************************************************************************************/
+
+/* Command Structure defining SD, MMC and Application specific commands */
+const XMC_SDMMC_COMMAND_t sdmmc_block_command[40] =
+{
+ /* Start: SD card commands */
+ {{0U, 0U, 0U, 0U, 0U, SDMMC_BLOCK_GO_IDLE_STATE}}, /* 0 */
+ {{1U, 1U, 0U, 0U, 0U, SDMMC_BLOCK_ALL_SEND_CID}}, /* 1 */
+ {{2U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_SEND_RELATIVE_ADDR}}, /* 2 */
+ {{0U, 0U, 0U, 0U, 0U, SDMMC_BLOCK_SET_DSR}}, /* 3 */
+ {{2U, 1U, 1U, 1U, 0U, SDMMC_BLOCK_SWITCH_FUNC}}, /* 4 */
+ {{3U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_SELECT_DESELECT_CARD}}, /* 5 */
+ {{2U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_SD_SEND_IF_COND}}, /* 6 */
+ {{1U, 1U, 0U, 0U, 0U, SDMMC_BLOCK_SEND_CSD}}, /* 7 */
+ {{1U, 1U, 0U, 0U, 0U, SDMMC_BLOCK_SEND_CID}}, /* 8 */
+ {{3U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_STOP_TRANSMISSION}}, /* 9 */
+ {{2U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_SEND_STATUS}}, /* 10 */
+ {{0U, 0U, 0U, 0U, 0U, SDMMC_BLOCK_GO_INACTIVE_STATE}}, /* 11 */
+ {{2U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_SET_BLOCKLEN}}, /* 12 */
+ {{2U, 1U, 1U, 1U, 0U, SDMMC_BLOCK_READ_SINGLE_BLOCK}}, /* 13 */
+ {{2U, 1U, 1U, 1U, 0U, SDMMC_BLOCK_READ_MULTIPLE_BLOCK}}, /* 14 */
+ {{2U, 1U, 1U, 1U, 0U, SDMMC_BLOCK_WRITE_BLOCK}}, /* 15 */
+ {{2U, 1U, 1U, 1U, 0U, SDMMC_BLOCK_WRITE_MULTIPLE_BLOCK}}, /* 16 */
+ {{2U, 1U, 1U, 1U, 0U, SDMMC_BLOCK_PROGRAM_CSD}}, /* 17 */
+ {{2U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_SET_WRITE_PROT}}, /* 18 */
+ {{2U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_CLR_WRITE_PROT}}, /* 19 */
+ {{2U, 1U, 1U, 1U, 0U, SDMMC_BLOCK_SEND_WRITE_PROT}}, /* 20 */
+ {{2U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_ERASE_WR_BLK_START}}, /* 21 */
+ {{2U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_ERASE_WR_BLK_END}}, /* 22 */
+ {{3U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_ERASE}}, /* 23 */
+ {{2U, 1U, 1U, 1U, 0U, SDMMC_BLOCK_LOCK_UNLOCK}}, /* 24 */
+ {{2U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_APP_CMD}}, /* 25 */
+ {{2U, 1U, 1U, 1U, 0U, SDMMC_BLOCK_GEN_CMD}}, /* 26 */
+ /* Start: application specific commands */
+ {{2U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_SET_BUS_WIDTH}}, /* 27 */
+ {{2U, 1U, 1U, 1U, 0U, SDMMC_BLOCK_SD_STATUS}}, /* 28 */
+ {{2U, 1U, 1U, 1U, 0U, SDMMC_BLOCK_SEND_NUM_WR_BLOCKS}}, /* 29 */
+ {{2U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_SET_WR_BLK_ERASE_COUNT}}, /* 30 */
+ {{2U, 0U, 0U, 0U, 0U, SDMMC_BLOCK_SD_SEND_OP_COND}}, /* 31 */
+ {{2U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_SET_CLR_CARD_DETECT}}, /* 32 */
+ {{2U, 1U, 1U, 1U, 0U, SDMMC_BLOCK_SEND_SCR}}, /* 33 */
+ /* Start of SDMMC_MMC Card specific commands */
+ {{2U, 0U, 1U, 0U, 0U, SDMMC_BLOCK_MMC_SEND_OP_COND}}, /* 34 */
+ {{3U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_MMC_SLEEP_AWAKE}}, /* 35 */
+ {{3U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_SWITCH_FUNC}}, /* 36 */
+ {{2U, 1U, 1U, 1U, 0U, SDMMC_BLOCK_MMC_SEND_EXT_CSD}}, /* 37 */
+ {{2U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_ERASE_GROUP_START}}, /* 38 */
+ {{2U, 1U, 1U, 0U, 0U, SDMMC_BLOCK_ERASE_GROUP_END}} /* 39 */
+};
+
+/*
+ * SD card command index hash table
+ * It contains the index of the command structure
+ *
+ * Array index 0-57 is for general SD commands and array
+ * index 58-64 is for application specific commands.
+ */
+const uint8_t sdmmc_block_sd_hash_table[65] =
+{
+ (uint8_t)0x00, (uint8_t)0xFF, (uint8_t)0x01, (uint8_t)0x02,
+ (uint8_t)0x03, (uint8_t)0xFF, (uint8_t)0x04, (uint8_t)0x05,
+ (uint8_t)0x06, (uint8_t)0x07, (uint8_t)0x08, (uint8_t)0xFF,
+ (uint8_t)0x09, (uint8_t)0x0A, (uint8_t)0xFF, (uint8_t)0x0B,
+ (uint8_t)0x0C, (uint8_t)0x0D, (uint8_t)0x0E, (uint8_t)0xFF,
+ (uint8_t)0xFF, (uint8_t)0xFF, (uint8_t)0xFF, (uint8_t)0xFF,
+ (uint8_t)0x0F, (uint8_t)0x10, (uint8_t)0xFF, (uint8_t)0x11,
+ (uint8_t)0x12, (uint8_t)0x13, (uint8_t)0x14, (uint8_t)0xFF,
+ (uint8_t)0x15, (uint8_t)0x16, (uint8_t)0xFF, (uint8_t)0xFF,
+ (uint8_t)0xFF, (uint8_t)0xFF, (uint8_t)0x17, (uint8_t)0xFF,
+ (uint8_t)0xFF, (uint8_t)0xFF, (uint8_t)0x18, (uint8_t)0xFF,
+ (uint8_t)0xFF, (uint8_t)0xFF, (uint8_t)0xFF, (uint8_t)0xFF,
+ (uint8_t)0xFF, (uint8_t)0xFF, (uint8_t)0xFF, (uint8_t)0xFF,
+ (uint8_t)0xFF, (uint8_t)0xFF, (uint8_t)0xFF, (uint8_t)0x19,
+ (uint8_t)0x1A, (uint8_t)0xFF, (uint8_t)0x1B, (uint8_t)0x1C,
+ (uint8_t)0x1D, (uint8_t)0x1E, (uint8_t)0x1F, (uint8_t)0x20,
+ (uint8_t)0x21
+};
+
+/***********************************************************************************************************************
+ * EXTERNAL REFERENCES
+ **********************************************************************************************************************/
+
+/***********************************************************************************************************************
+ * API DEFINITIONS
+ **********************************************************************************************************************/
+
+/* Resets the Host Controller's register */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lReset(SDMMC_BLOCK_t *const obj, uint32_t reset)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ uint32_t timeoutTime;
+
+ XMC_SDMMC_SetSWReset(obj->sdmmc_sd->sdmmc, reset);
+
+ /* Set timeout time. */
+ timeoutTime = TimerGet() + (SDMMC_BLOCK_RESET_DELAY / 1000u) + 1u;
+
+ do
+ {
+ if (TimerGet() > timeoutTime)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_TIMEOUT_OCCURED;
+ break;
+ }
+ /* Service the watchdog. */
+ CopService();
+ }
+ while (((uint32_t)XMC_SDMMC_GetSWResetStatus(obj->sdmmc_sd->sdmmc)) & (reset));
+
+ return status;
+}
+
+/* Clears card specific structures and stops the SD clock */
+static void SDMMC_BLOCK_SD_lCardCleanUp(SDMMC_BLOCK_t *const obj)
+{
+ memset((void *)&obj->sdmmc_sd->card_info, 0, sizeof(SDMMC_BLOCK_SD_CARD_INFORMATION_t));
+ obj->card_type = (uint8_t)0;
+ obj->sdmmc_sd->f8 = (uint8_t)0;
+ obj->sdmmc_sd->cmd_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ obj->sdmmc_sd->data_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ obj->sdmmc_sd->err_recovery_stat = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ obj->sdmmc_sd->transfer_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ obj->card_state = (uint8_t)0U;
+
+ /* SD clock disable */
+ XMC_SDMMC_SDClockDisable(obj->sdmmc_sd->sdmmc);
+}
+
+/* Check if CMD and DAT lines are free before issuing a command */
+static uint32_t SDMMC_BLOCK_SD_lCheckDataCommandLines(SDMMC_BLOCK_t *const obj, const XMC_SDMMC_COMMAND_t *cmd)
+{
+ uint32_t status = (uint32_t)SDMMC_BLOCK_MODE_STATUS_CMD_LINE_BUSY;
+ uint32_t timeoutTime;
+
+ timeoutTime = TimerGet() + (SDMMC_BLOCK_DELAY_IN_COMMAND / 1000u) + 1u;
+
+ do
+ {
+ if (TimerGet() > timeoutTime)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_TIMEOUT_OCCURED;
+ break;
+ }
+ /* Service the watchdog. */
+ CopService();
+ } while ((XMC_SDMMC_IsDataLineBusy(obj->sdmmc_sd->sdmmc) ||
+ (XMC_SDMMC_IsCommandLineBusy(obj->sdmmc_sd->sdmmc))));
+
+ /* Check if command line is not busy; then proceed */
+ if (XMC_SDMMC_IsCommandLineBusy(obj->sdmmc_sd->sdmmc) == false)
+ {
+ status = (uint32_t)SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ if (((uint32_t)cmd->dat_present_sel == (uint32_t)1U) ||
+ ((uint32_t)cmd->cmd_index == (uint32_t)SDMMC_BLOCK_SEND_STATUS) ||
+ ((uint32_t)cmd->response_type_sel == (uint32_t)3U))
+ {
+ if (XMC_SDMMC_IsDataLineBusy(obj->sdmmc_sd->sdmmc) != false)
+ {
+ status = (uint32_t)SDMMC_BLOCK_MODE_STATUS_DATA_LINE_BUSY;
+ }
+ else
+ {
+ if (((uint32_t)cmd->dat_present_sel == (uint32_t)1U) || ((uint32_t)cmd->response_type_sel == (uint32_t)3U))
+ {
+ /* Update data line state to active */
+ obj->card_state |= (uint8_t)SDMMC_BLOCK_CARD_STATE_DATA_ACTIVE;
+ }
+ }
+ }
+
+ if (status == (uint32_t)SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Update command line state to active */
+ obj->card_state |= (uint8_t)SDMMC_BLOCK_CARD_STATE_CMD_ACTIVE;
+ }
+ }
+
+ return status;
+}
+
+/* Check response error types in command's arguments category */
+static void SDMMC_BLOCK_SD_lCheckArgumentError(const uint32_t *card_status, uint8_t *err)
+{
+ if ((*card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_OUT_OF_RANGE_BITMASK) != (uint32_t)0U)
+ {
+ *err = (uint8_t)1U;
+ XMC_DEBUG("SDMMC_BLOCK_SD_CheckArgumentError: Out of range error");
+ }
+
+ if ((*card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_ADDRESS_ERROR_BITMASK) != (uint32_t)0U)
+ {
+ *err = (uint8_t)1U;
+ XMC_DEBUG("SDMMC_BLOCK_SD_CheckArgumentError: Address error");
+ }
+
+ if ((*card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_BLOCK_LEN_ERROR_BITMASK) != (uint32_t)0U)
+ {
+ *err = (uint8_t)1U;
+ XMC_DEBUG("SDMMC_BLOCK_SD_CheckArgumentError: Block length error");
+ }
+
+ if ((*card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_WP_VIOLATION_BITMASK) != (uint32_t)0U)
+ {
+ *err = (uint8_t)1U;
+ XMC_DEBUG("SDMMC_BLOCK_SD_CheckArgumentError: Write protection violation error");
+ }
+}
+
+/* Checks response error types in erase category */
+static void SDMMC_BLOCK_SD_lCheckEraseError(const uint32_t *card_status, uint8_t *err)
+{
+ /* An error in the sequence of erase commands occurred.*/
+ if ((*card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_ERASE_SEQ_ERROR_BITMASK) != (uint32_t)0)
+ {
+ *err = (uint8_t)1U;
+ XMC_DEBUG("SDMMC_BLOCK_SD_CheckEraseError: Sequential erase error");
+ }
+
+ /* An invalid selection of write-blocks for erase occurred */
+ if ((*card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_ERASE_PARAM_BITMASK) != (uint32_t)0)
+ {
+ *err = (uint8_t)1U;
+ XMC_DEBUG("SDMMC_BLOCK_SD_CheckEraseError: Parameter erase error");
+ }
+
+ /*
+ * Set when only partial address space was erased due to existing
+ * write protected blocks OR the temporary/permanent write protected card
+ * was erased
+ */
+ if ((*card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_WP_ERASE_SKIP_BITMASK) != (uint32_t)0)
+ {
+ *err = (uint8_t)1U;
+ XMC_DEBUG("SDMMC_BLOCK_SD_CheckEraseError: Write protection erase skip error");
+ }
+}
+
+/* Check response error types in card's internal error category */
+static void SDMMC_BLOCK_SD_lCheckCardError(const uint32_t *card_status, uint8_t *err)
+{
+ /* Card internal ECC was applied but failed to correct the data */
+ if ((*card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_CARD_ECC_FAILED_BITMASK) != (uint32_t)0U)
+ {
+ *err = (uint8_t)1U;
+ XMC_DEBUG("SDMMC_BLOCK_SD_CheckCardError: Card ECC error");
+ }
+
+ /* Internal card controller error */
+ if ((*card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_CC_ERROR_BITMASK) != (uint32_t)0)
+ {
+ *err = (uint8_t)1U;
+ XMC_DEBUG("SDMMC_BLOCK_SD_CheckCardError: Internal card controller error");
+ }
+
+ /* A general or an unknown error occurred during the operation */
+ if ((*card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_ERROR_BITMASK) != (uint32_t)0)
+ {
+ *err = (uint8_t)1U;
+ XMC_DEBUG("SDMMC_BLOCK_SD_CheckCardError: Unknown error");
+ }
+}
+
+/* Check for any error in the command's (received) response */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lCheckErrorInResponse(const uint32_t *card_status)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ uint8_t err = (uint8_t)0; /* No error */
+
+ /* Check errors in arguments */
+ SDMMC_BLOCK_SD_lCheckArgumentError(card_status, &err);
+
+ /* Check errors specific to erase operation */
+ SDMMC_BLOCK_SD_lCheckEraseError(card_status, &err);
+
+ /* Check errors specific to the card */
+ SDMMC_BLOCK_SD_lCheckCardError(card_status, &err);
+
+ /*
+ * Set when a sequence or password error has been detected in
+ * lock/unlock card command
+ */
+ if ((*card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_LOCK_UNLOCK_FAILED_BITMASK) != (uint32_t)0)
+ {
+ err = (uint8_t)1;
+ XMC_DEBUG("SDMMC_BLOCK_SD_CheckErrorInResponse: Lock/unlock error");
+ }
+
+ /*
+ * Can be one of the following errors:
+ * 1) The read only section of the CSD does not match the card content
+ * 2) An attempt to reverse the copy or permanent WP bits was made
+ */
+ if ((*card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_CSD_OVERWRITE_BITMASK) != (uint32_t)0)
+ {
+ err = (uint8_t)1;
+ XMC_DEBUG("SDMMC_BLOCK_SD_CheckErrorInResponse: CSD overwrite error");
+ }
+
+ /* Error in the sequence of the authentication process */
+ if ((*card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_ASK_SEQ_ERROR_BITMASK) != (uint32_t)0)
+ {
+ err = (uint8_t)1;
+ XMC_DEBUG("SDMMC_BLOCK_SD_CheckErrorInResponse: Authentication sequence error");
+ }
+
+ /* Some SD cards treat CMD55 as an illegal command */
+ if (err == 1U)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ }
+
+ return status;
+}
+
+/* Check for lock status of SD card */
+static void SDMMC_BLOCK_SD_lGetCardLockState(SDMMC_BLOCK_t *const obj, uint32_t card_status, uint16_t cmd_index)
+{
+ if (((card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_CARD_IS_LOCKED_BITMASK) != (uint32_t)0) &&
+ (cmd_index != (uint32_t)SDMMC_BLOCK_SEND_RELATIVE_ADDR))
+ {
+ obj->card_state |= (uint8_t)SDMMC_BLOCK_CARD_STATE_LOCKED;
+ }
+ else
+ {
+ obj->card_state &= (uint8_t)~(uint8_t)SDMMC_BLOCK_CARD_STATE_LOCKED;
+ }
+}
+
+/* Provide transfer delay */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lTransferDelay(SDMMC_BLOCK_t *const obj, uint32_t delay)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ uint32_t timeoutTime;
+ obj->sdmmc_sd->tmr_expire = (bool)1;
+
+ timeoutTime = TimerGet() + (delay / 1000u) + 1u;
+
+ do
+ {
+#if (SDMMC_BLOCK_POLLING_MODE > 0U)
+ /* Poll for interrupt events. */
+ SDMMC0_0_IRQHandler();
+#endif
+ if (TimerGet() > timeoutTime)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_TIMEOUT_OCCURED;
+ break;
+ }
+ /* Service the watchdog. */
+ CopService();
+ } while (obj->sdmmc_sd->isr_context.transfer_flag == (uint8_t)0U);
+
+ obj->sdmmc_sd->isr_context.transfer_flag = (uint8_t)0U;
+
+ if (obj->sdmmc_sd->transfer_int_err != SDMMC_BLOCK_MODE_STATUS_TRANSFER_COMPLETE)
+ {
+ status = (SDMMC_BLOCK_MODE_STATUS_t)obj->sdmmc_sd->data_int_err;
+ }
+
+ return status;
+}
+
+/* Read response received for the command issued */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lReadResponse(SDMMC_BLOCK_t *const obj,
+ const XMC_SDMMC_COMMAND_t *cmd,
+ XMC_SDMMC_RESPONSE_TYPE_t resp_type,
+ void *resp)
+{
+ uint32_t *ptr;
+ uint32_t card_status = 0U;
+ uint32_t err_status = 0U;
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ /* To mask high byte from response register */
+ uint32_t resp_high_mask = 0;
+
+ /* Check for no-response type commands */
+ if (((uint16_t)cmd->cmd_index == (uint16_t)SDMMC_BLOCK_GO_IDLE_STATE) ||
+ ((uint16_t)cmd->cmd_index == (uint16_t)SDMMC_BLOCK_GO_INACTIVE_STATE))
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ }
+ else
+ {
+ ptr = (uint32_t *)resp;
+ card_status = (uint32_t)obj->sdmmc_sd->sdmmc->RESPONSE[0];
+
+ /* Check Lock Status */
+ SDMMC_BLOCK_SD_lGetCardLockState(obj, card_status, (uint16_t)cmd->cmd_index);
+
+ /* Check response type */
+ switch (resp_type)
+ {
+ /* Response R1 */
+ case XMC_SDMMC_RESPONSE_TYPE_R1:
+ /* check the error bits in the response */
+ *ptr = card_status;
+ status = SDMMC_BLOCK_SD_lCheckErrorInResponse(&card_status);
+ break;
+
+ /* Response R1b */
+ case XMC_SDMMC_RESPONSE_TYPE_R1b:
+ *ptr = card_status;
+
+ status = SDMMC_BLOCK_SD_lCheckErrorInResponse(&card_status);
+ if (status != SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Wait for transfer complete interrupt */
+ status = SDMMC_BLOCK_SD_lTransferDelay(obj, (uint32_t)SDMMC_BLOCK_DELAY_IN_TRANSFER);
+ if (status != SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ XMC_DEBUG("SDMMC_BLOCK_ReadResponse: For R1b, SDMMC_BLOCK_TransferDelay failed");
+ }
+ }
+
+ break;
+
+ /* Response R2: response register R0-R7 */
+ case XMC_SDMMC_RESPONSE_TYPE_R2:
+ *ptr = (uint32_t)((uint32_t)XMC_SDMMC->RESPONSE[0] << 8U); ptr++;
+ resp_high_mask = (uint32_t)(((uint32_t)XMC_SDMMC->RESPONSE[0] & 0xFF000000) >> 24U);
+
+ *ptr = (uint32_t)(((uint32_t)XMC_SDMMC->RESPONSE[1] << 8U) | resp_high_mask); ptr++;
+ resp_high_mask = (uint32_t)(((uint32_t)XMC_SDMMC->RESPONSE[1] & 0xFF000000) >> 24U);
+
+ *ptr = (uint32_t)(((uint32_t)XMC_SDMMC->RESPONSE[2] << 8U) | resp_high_mask);
+ resp_high_mask = (uint32_t)(((uint32_t)XMC_SDMMC->RESPONSE[2] & 0xFF000000) >> 24U);
+
+ *ptr = (uint32_t)(((uint32_t)XMC_SDMMC->RESPONSE[3] << 8U) | resp_high_mask);
+ break;
+
+ /* Responses R3 and R7 */
+ case XMC_SDMMC_RESPONSE_TYPE_R3:
+ *ptr = card_status;
+ break;
+
+ case XMC_SDMMC_RESPONSE_TYPE_R7:
+ *ptr = card_status;
+ break;
+
+ /* Response R6 */
+ case XMC_SDMMC_RESPONSE_TYPE_R6:
+ err_status = card_status & (uint32_t)SDMMC_RESPONSE0_RESPONSE0_Msk;
+ status = SDMMC_BLOCK_SD_lCheckErrorInResponse(&err_status);
+
+ /* Read 16-bit RCA received in response R1 register */
+ *ptr = ((uint32_t)(card_status & (uint32_t)SDMMC_RESPONSE0_RESPONSE1_Msk) >> SDMMC_BLOCK_HC_RESPONSE1_BITPOS);
+ break;
+
+ /* No response */
+ case XMC_SDMMC_RESPONSE_TYPE_NO_RESPONSE:
+ status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ break;
+
+ default:
+ status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ break;
+ }
+ }
+
+ return status;
+}
+
+/* Send command */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lSendCommand(SDMMC_BLOCK_t *const obj,
+ const XMC_SDMMC_COMMAND_t *cmd,
+ uint32_t arg,
+ XMC_SDMMC_RESPONSE_TYPE_t resp_type,
+ void *resp)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ uint32_t timeoutTime;
+
+ obj->sdmmc_sd->issue_abort = (uint8_t)0U;
+ obj->sdmmc_sd->cmd_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ obj->sdmmc_sd->data_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+
+ /* Data or command line free? */
+ status = (SDMMC_BLOCK_MODE_STATUS_t)SDMMC_BLOCK_SD_lCheckDataCommandLines(obj, cmd);
+ if (!((status == SDMMC_BLOCK_MODE_STATUS_DATA_LINE_BUSY) ||
+ (status == SDMMC_BLOCK_MODE_STATUS_CMD_LINE_BUSY)))
+ {
+ /* Send command */
+ (void)XMC_SDMMC_SendCommand(obj->sdmmc_sd->sdmmc, cmd, arg);
+
+ /* Block until any of the bit in the interrupt status register gets set */
+ timeoutTime = TimerGet() + (SDMMC_BLOCK_DELAY_IN_COMMAND / 1000u) + 1u;
+
+ do
+ {
+#if (SDMMC_BLOCK_POLLING_MODE > 0U)
+ /* Poll for interrupt events. */
+ SDMMC0_0_IRQHandler();
+#endif
+
+ if (TimerGet() > timeoutTime)
+ {
+ XMC_DEBUG("SDMMC_BLOCK_SendCommand: Timeout occured");
+ break;
+ }
+ /* Service the watchdog. */
+ CopService();
+ } while ((uint8_t)obj->sdmmc_sd->isr_context.cmd_flag == (uint8_t)0U);
+
+ obj->sdmmc_sd->isr_context.cmd_flag = (uint8_t)0;
+
+ /* Check for possible errors */
+ if ((SDMMC_BLOCK_MODE_STATUS_t)obj->sdmmc_sd->cmd_int_err == SDMMC_BLOCK_MODE_STATUS_COMMAND_COMPLETE)
+ {
+ /* Read response received */
+ status = SDMMC_BLOCK_SD_lReadResponse(obj, cmd, resp_type, resp);
+ }
+ /* For cmd8, check for cmd timeout interrupt */
+ else if (((SDMMC_BLOCK_MODE_STATUS_t)obj->sdmmc_sd->cmd_int_err == SDMMC_BLOCK_MODE_STATUS_COMMAND_TIMEOUT_ERROR) &&
+ ((uint16_t)cmd->cmd_index == (uint16_t)SDMMC_BLOCK_SD_SEND_IF_COND))
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_COMMAND_TIMEOUT_ERROR;
+ }
+ else
+ {
+ if ((uint16_t)cmd->dat_present_sel == (uint16_t)1)
+ {
+ obj->sdmmc_sd->issue_abort = (uint8_t)1;
+ }
+
+ /* Error Recovery for the failed command */
+ status = SDMMC_BLOCK_SD_lErrorInterruptRecovery(obj);
+ }
+ }
+
+ return status;
+}
+
+/* Set voltage window in the OCR register */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lSetVoltageWindow(SDMMC_BLOCK_t *const obj)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ uint32_t card_status = 0U;
+ uint32_t loop_count = 0U;
+ uint32_t arg = 0U;
+
+ if (obj->sdmmc_sd->f8 == (uint8_t)0U)
+ {
+ arg = SDMMC_BLOCK_SD_ACMD41_F80_ARG; /* Set HCS=0 for standard cards */
+ }
+ else
+ {
+ arg = SDMMC_BLOCK_SD_ACMD41_F81_ARG; /* Set HCS=1 for high capacity cards */
+ }
+
+ do
+ {
+ /* Send CMD55 for application specific commands (default RCA: 0) */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(55)),
+ SDMMC_BLOCK_ARGUMENT0,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Send ACMD41 to set card's voltage window */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_SD_COMMAND(62)),
+ arg,
+ XMC_SDMMC_RESPONSE_TYPE_R3,
+ &(obj->sdmmc_sd->card_info.ocr));
+
+ if ((status != SDMMC_BLOCK_MODE_STATUS_SUCCESS) &&
+ (status != SDMMC_BLOCK_MODE_STATUS_ILLEGAL_COMMAND_ERROR))
+ {
+ break;
+ }
+ status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+
+ /* Card takes some time to set power status bit. Card must respond in a second */
+ (void)SDMMC_BLOCK_SD_lDelay(obj, (uint32_t)SDMMC_BLOCK_CARD_POWER_DELAY);
+ }
+ else
+ {
+ loop_count = 100U;
+ }
+ } while (((loop_count++) < (uint32_t)50U) &&
+ (!(((uint32_t)obj->sdmmc_sd->card_info.ocr &
+ (uint32_t)SDMMC_BLOCK_OCR_POWER_STATUS_BITMASK)!= (uint32_t)0UL)));
+
+ return status;
+}
+
+/* Query voltage operating condition of the card */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lQueryOperatingCondition(SDMMC_BLOCK_t *const obj)
+{
+ uint32_t resp_data = 0U;
+ SDMMC_BLOCK_MODE_STATUS_t status;
+
+ /* Query voltage operating condition (cmd8) */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_SD_COMMAND(8)),
+ SDMMC_BLOCK_SD_CMD8_ARG,
+ XMC_SDMMC_RESPONSE_TYPE_R7,
+ &resp_data);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Check if pattern matches in both the argument and response */
+ if (((resp_data >> SDMMC_BLOCK_SD_CMD8_CHECK_PATTERN_BITPOS) & SDMMC_BLOCK_SD_CMD8_CHECK_PATTERN_BITMASK) !=
+ (SDMMC_BLOCK_SD_CMD8_CHECK_PATTERN_VALUE))
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_BAD_RESPONSE;
+ }
+ /* Check if input voltage accepted by the card in the response */
+ else if (((uint8_t)(resp_data >> SDMMC_BLOCK_SD_CMD8_VHS_BITPOS) & SDMMC_BLOCK_SD_CMD8_VHS_BITMASK) !=
+ (SDMMC_BLOCK_SD_VHS_PATTERN_2_7_3_6_VALUE))
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_BAD_RESPONSE;
+ }
+ else
+ {
+ /* Set Flag f8 */
+ obj->sdmmc_sd->f8 = (uint8_t)1U;
+ }
+ }
+ /* Response received; High capacity cards */
+ else
+ {
+ /* No response is received for Standard Capacity SD cards or MMC card. */
+ if (obj->sdmmc_sd->cmd_int_err == SDMMC_BLOCK_MODE_STATUS_COMMAND_TIMEOUT_ERROR)
+ {
+ obj->sdmmc_sd->f8 = (uint8_t)0U;
+ status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ }
+ }
+
+ return status;
+}
+
+/* Query voltage supported from the card */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lQueryVoltage(SDMMC_BLOCK_t *const obj, uint32_t arg)
+{
+ uint32_t card_status = 0U;
+ SDMMC_BLOCK_MODE_STATUS_t status;
+
+ /* Send CMD55 for application specific commands with 0 as the default RCA */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(55)),
+ arg,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+
+ if (((obj->sdmmc_sd->f8 == (uint8_t)0U) && (status == SDMMC_BLOCK_MODE_STATUS_ILLEGAL_COMMAND_ERROR)) ||
+ (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS))
+ {
+ /* Send ACMD41 to query the card's voltage window */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_SD_COMMAND(62)),
+ arg,
+ XMC_SDMMC_RESPONSE_TYPE_R3,
+ &(obj->sdmmc_sd->card_info.ocr));
+
+ if ((status == SDMMC_BLOCK_MODE_STATUS_ILLEGAL_COMMAND_ERROR) ||
+ (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS))
+ {
+ /* Send ACMD41 with voltage window argument set */
+ status = SDMMC_BLOCK_SD_lSetVoltageWindow(obj);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* SD Card Type */
+ SDMMC_BLOCK_SD_lWriteCardType(obj);
+ }
+ }
+ }
+
+ return status;
+}
+
+/* Read card registers after the card initialization */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lAfterCardInitialize(SDMMC_BLOCK_t *const obj)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ uint8_t card_lock = (obj->card_state & (uint8_t)SDMMC_BLOCK_CARD_STATE_LOCKED);
+ uint32_t card_status;
+
+ /* Read CSD & SCR register & card write protection flags */
+ status = SDMMC_BLOCK_SD_lReadCardRegisters(obj);
+
+ /* Explicitly set block size as 512 */
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(16)),
+ 512U,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+ }
+
+ if ((status == SDMMC_BLOCK_MODE_STATUS_SUCCESS) && (card_lock == (uint8_t)0U))
+ {
+#if SDMMC_BLOCK_SD_SUPPORT_4_BUS_WIDTH
+ /* Switch to 4-bit bus width if supported */
+ status = SDMMC_BLOCK_SD_lSwitchBusWidth(obj);
+
+ if (status != SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Switch to default (1-bit) bus width */
+ XMC_SDMMC_SetDataTransferWidth(obj->sdmmc_sd->sdmmc, XMC_SDMMC_DATA_LINES_1);
+ }
+
+ /* Switch to high speed mode */
+ status = SDMMC_BLOCK_SD_lSwitchSpeed(obj);
+ if (status != SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Switch host controller to normal (default) speed mode */
+ XMC_SDMMC_DisableHighSpeed(obj->sdmmc_sd->sdmmc);
+ status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ }
+#endif
+ }
+
+ return status;
+}
+
+/* Initialize the SD card */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lInitializeCard(SDMMC_BLOCK_t *const obj)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status;
+ SDMMC_BLOCK_CARD_LOCK_STATUS_t lock_status;
+ uint8_t count = (uint8_t)0U;
+
+ /* Repeat the below steps 2 times if bad response is received */
+ do
+ {
+ /* Reset the card (CMD0) */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(0)),
+ SDMMC_BLOCK_ARGUMENT0,
+ XMC_SDMMC_RESPONSE_TYPE_NO_RESPONSE,
+ NULL);
+
+ if (status != SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ break;
+ }
+
+ /* Query card's operation condition */
+ status = SDMMC_BLOCK_SD_lQueryOperatingCondition(obj);
+
+ count++;
+ } while ((count < (uint8_t)SDMMC_BLOCK_NUM_CARD_RESET_RETRIES) &&
+ (status == SDMMC_BLOCK_MODE_STATUS_BAD_RESPONSE));
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Query and set voltage window */
+ status = SDMMC_BLOCK_SD_lQueryVoltage(obj, (uint32_t)obj->sdmmc_sd->card_info.rca);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Read CID */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(2)),
+ SDMMC_BLOCK_ARGUMENT0,
+ XMC_SDMMC_RESPONSE_TYPE_R2,
+ (void *)obj->sdmmc_sd->card_info.cid);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Read RCA */
+ status = SDMMC_BLOCK_SD_lReadRca(obj);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Check card lock/unlock status */
+ status = SDMMC_BLOCK_SD_GetLockStatus(obj, &lock_status);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ if (lock_status == SDMMC_BLOCK_CARD_LOCK_STATUS_LOCKED)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_INITIALIZED_BUT_LOCKED;
+ }
+
+ /* Update card initialization status */
+ obj->card_state &= (uint8_t)~((uint8_t)SDMMC_BLOCK_CARD_STATE_NOT_INITIALIZED |
+ (uint8_t)SDMMC_BLOCK_CARD_STATE_NO_CARD);
+ }
+ }
+ }
+ }
+ }
+
+ return status;
+}
+
+
+/* Get card type */
+static void SDMMC_BLOCK_SD_lWriteCardType(SDMMC_BLOCK_t *const obj)
+{
+ /* If F8=0; standard capacity v1 card */
+ if (obj->sdmmc_sd->f8 == (uint8_t)0U)
+ {
+ obj->card_type |= (uint8_t)SDMMC_BLOCK_CARD_TYPE_STANDARD_CAPACITY_V1X;
+ }
+ /* If F8=1; standard capacity v2 or high capacity card */
+ else
+ {
+ /* Check CCS bit in the OCR register; CCS=1 implies a high capacity card */
+ if (((uint32_t)obj->sdmmc_sd->card_info.ocr & (uint32_t)SDMMC_BLOCK_OCR_CCS_BITMASK) != (uint32_t)0U)
+ {
+ obj->card_type |= (uint8_t)((uint8_t)SDMMC_BLOCK_CARD_TYPE_HIGH_CAPACITY |
+ (uint8_t)SDMMC_BLOCK_CARD_TYPE_BLOCK_ADDRESSING);
+ }
+ else
+ {
+ /* CCS=0 implies standard capacity v2 */
+ obj->card_type |= (uint8_t)SDMMC_BLOCK_CARD_TYPE_STANDARD_CAPACITY_V2;
+ }
+ }
+}
+
+/* Check write protection status of card */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lGetWriteProtect(SDMMC_BLOCK_t *const obj)
+{
+ uint32_t sd_status[16] = {0U};
+ uint32_t write_protect;
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+
+ status = SDMMC_BLOCK_SD_GetSdStatus(obj, (void *)&(sd_status[0]));
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Bits 480:495 in the SD status provides write protection information */
+ write_protect = ((sd_status[0] & 0xFF000000U) >> 24U) | (((sd_status[0] & 0x00FF0000U) >> 16U) << 8U);
+ if ((write_protect & SDMMC_BLOCK_SD_CARD_TYPE_BITMASK) != 0U)
+ {
+ obj->card_state |= (uint8_t)SDMMC_BLOCK_CARD_STATE_WRITE_PROTECTED;
+ }
+ }
+
+ return status;
+}
+
+/* Reads RCA (relative card address) of the card */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lReadRca(SDMMC_BLOCK_t *const obj)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status;
+
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(3)),
+ SDMMC_BLOCK_ARGUMENT0,
+ XMC_SDMMC_RESPONSE_TYPE_R6,
+ &(obj->sdmmc_sd->card_info.rca));
+ return status;
+}
+
+/* Read the CSD, SCR and Write protection status of the card */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lReadCardRegisters(SDMMC_BLOCK_t *const obj)
+{
+ uint32_t arg = 0U;
+ uint32_t card_status = 0U;
+ SDMMC_BLOCK_MODE_STATUS_t status;
+ SDMMC_BLOCK_SCR_t scr_content = {0U};
+ uint8_t card_lock = (obj->card_state & (uint8_t)SDMMC_BLOCK_CARD_STATE_LOCKED);
+
+ /* Read CSD Register */
+ arg |= (uint32_t)((uint32_t)obj->sdmmc_sd->card_info.rca << (uint16_t)SDMMC_BLOCK_ARG_RCA_BITPOS);
+
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(9)),
+ arg,
+ XMC_SDMMC_RESPONSE_TYPE_R2,
+ (void *)obj->sdmmc_sd->card_info.csd);
+
+ if ((status == SDMMC_BLOCK_MODE_STATUS_SUCCESS) && (card_lock == (uint8_t)0U))
+ {
+ /* Set write protection flags */
+ status = SDMMC_BLOCK_SD_lGetWriteProtect(obj);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Read SCR register for SD card */
+ if (((uint8_t)obj->card_type & (uint8_t)SDMMC_BLOCK_CARD_TYPE_MMC) == 0U)
+ {
+ /* Switch to Transferring State. */
+ status = SDMMC_BLOCK_SD_lSwitchToTransferState(obj);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Send application specific command CMD55 */
+ arg |= (uint32_t)((uint32_t)obj->sdmmc_sd->card_info.rca << (uint32_t)SDMMC_BLOCK_ARG_RCA_BITPOS);
+
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(55)),
+ arg,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Set direction select bit */
+ XMC_SDMMC_SetDataTransferDirection(obj->sdmmc_sd->sdmmc, XMC_SDMMC_DATA_TRANSFER_CARD_TO_HOST);
+
+ /* Read the transferred SCR data */
+ status = SDMMC_BLOCK_SD_lSingleBlockTransfer(obj,
+ &(SDMMC_BLOCK_SD_COMMAND(64)),
+ (uint32_t)SDMMC_BLOCK_ARGUMENT0,
+ (uint16_t)8U,
+ (uint32_t *)&scr_content,
+ SDMMC_BLOCK_SD_DATA_TRANSFER_READ_BUFFER);
+
+ obj->sdmmc_sd->card_info.scr = scr_content;
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ status = SDMMC_BLOCK_SD_lSwitchToTransferState(obj);
+ XMC_SDMMC_SetDataTransferDirection(obj->sdmmc_sd->sdmmc, XMC_SDMMC_DATA_TRANSFER_CARD_TO_HOST);
+ }
+
+ return status;
+}
+
+/* Configure the registers for a single block transfer */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lConfigureSingleBlockTransfer(SDMMC_BLOCK_t *const obj,
+ const XMC_SDMMC_COMMAND_t *cmd,
+ uint32_t arg,
+ uint16_t block_size)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ uint32_t card_status = 0U;
+ XMC_SDMMC_TRANSFER_MODE_t response;
+
+ response.block_size = block_size;
+ response.type = XMC_SDMMC_TRANSFER_MODE_TYPE_SINGLE;
+ response.auto_cmd = XMC_SDMMC_TRANSFER_MODE_AUTO_CMD_DISABLED;
+
+ XMC_SDMMC_SetDataTransferMode(obj->sdmmc_sd->sdmmc, &response);
+
+ status = SDMMC_BLOCK_SD_lSendCommand(obj, cmd, arg, XMC_SDMMC_RESPONSE_TYPE_R1, &card_status);
+
+ return status;
+}
+
+/* Configure the registers for a multi-block transfer */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lConfigureMultiBlockTransfer(SDMMC_BLOCK_t *const obj,
+ uint32_t *arg,
+ uint32_t num_blocks,
+ const XMC_SDMMC_COMMAND_t *cmd)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status;
+ uint32_t card_status = 0U;
+ XMC_SDMMC_TRANSFER_MODE_t response;
+
+ /* Block addressing */
+ if (((uint8_t)obj->card_type & (uint8_t)SDMMC_BLOCK_CARD_TYPE_BLOCK_ADDRESSING) == (uint8_t)0U)
+ {
+ *arg *= (uint32_t)512U;
+ }
+
+ response.block_size = SDMMC_BLOCK_TX_BLOCK_SIZE_VALUE;
+ response.num_blocks = num_blocks;
+ response.type = XMC_SDMMC_TRANSFER_MODE_TYPE_MULTIPLE;
+ response.auto_cmd = XMC_SDMMC_TRANSFER_MODE_AUTO_CMD_12;
+
+ XMC_SDMMC_SetDataTransferMode(obj->sdmmc_sd->sdmmc, &response);
+
+ /* Enable ACMD 12 interrupt signal */
+ XMC_SDMMC_EnableEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_ACMD_ERR);
+
+ /* Send multiple block transfer command */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj, cmd, *arg, XMC_SDMMC_RESPONSE_TYPE_R1, &card_status);
+
+ return status;
+}
+
+/* Transfer multiple blocks of data */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lMultiBlockTransfer(SDMMC_BLOCK_t *const obj,
+ uint32_t *addr,
+ uint32_t num_blocks,
+ const XMC_SDMMC_COMMAND_t *cmd,
+ uint32_t *buf,
+ SDMMC_BLOCK_SD_DATA_TRANSFER_t transfer_mode)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status;
+ obj->sdmmc_sd->transfer_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+
+ /* Configure registers for Multi block transfer*/
+ status = SDMMC_BLOCK_SD_lConfigureMultiBlockTransfer(obj, addr, (uint32_t)num_blocks, cmd);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Read/write block data */
+ while ((uint32_t)num_blocks > 0U)
+ {
+ /* Perform Transfer */
+ status = SDMMC_BLOCK_SD_lDataTransfer(obj, buf, transfer_mode, SDMMC_BLOCK_NUM_QUADLETS_IN_BLOCK);
+ if (status != SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ break;
+ }
+ /* Decrement number of blocks */
+ num_blocks--;
+ /* Pointer pointing to the next block pointer */
+ buf += (uint32_t)SDMMC_BLOCK_NUM_QUADLETS_IN_BLOCK;
+ }
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Block on transfer complete interrupt */
+ /* Timeout: 5ms */
+ status = SDMMC_BLOCK_SD_lTransferDelay(obj, SDMMC_BLOCK_DELAY_IN_TRANSFER);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Check if transfer happened successfully; Check ACMD status */
+ if ((SDMMC_BLOCK_MODE_STATUS_t)obj->sdmmc_sd->acmd_int_err == SDMMC_BLOCK_MODE_STATUS_ACMD12_ERROR)
+ {
+ /* Call ACMD12 error recovery */
+ SDMMC_BLOCK_SD_lAcmdErrorRecovery(obj);
+ }
+ }
+ }
+ }
+ return status;
+}
+
+/* Performs single block transfer */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lSingleBlockTransfer(SDMMC_BLOCK_t *const obj,
+ const XMC_SDMMC_COMMAND_t *cmd,
+ uint32_t arg,
+ uint16_t block_size,
+ uint32_t *buf,
+ SDMMC_BLOCK_SD_DATA_TRANSFER_t transfer_mode)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status;
+ uint32_t timeoutTime;
+ uint32_t qbytes = (uint32_t)(((((uint32_t)block_size + 3UL) >> 2U) << 2U) >> 2U);
+
+ status = SDMMC_BLOCK_SD_lConfigureSingleBlockTransfer(obj, cmd, arg, block_size);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Perform data transfer */
+ status = SDMMC_BLOCK_SD_lDataTransfer(obj, buf, transfer_mode, qbytes);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Block on transfer complete interrupt */
+ timeoutTime = TimerGet() + (SDMMC_BLOCK_DELAY_IN_TRANSFER / 1000u) + 1u;
+
+ do
+ {
+#if (SDMMC_BLOCK_POLLING_MODE > 0U)
+ /* Poll for interrupt events. */
+ SDMMC0_0_IRQHandler();
+#endif
+
+ if (TimerGet() > timeoutTime)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_TIMEOUT_OCCURED;
+ break;
+ }
+ /* Service the watchdog. */
+ CopService();
+ } while ((uint8_t)obj->sdmmc_sd->isr_context.transfer_flag == (uint8_t)0U);
+
+ obj->sdmmc_sd->isr_context.transfer_flag = (uint8_t)0U;
+
+ /* Check transfer complete status */
+ if ((SDMMC_BLOCK_MODE_STATUS_t)obj->sdmmc_sd->transfer_int_err == SDMMC_BLOCK_MODE_STATUS_TRANSFER_COMPLETE)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ }
+ else
+ {
+ obj->sdmmc_sd->issue_abort = (uint8_t)1U;
+ status = SDMMC_BLOCK_SD_lErrorInterruptRecovery(obj);
+ }
+ }
+ }
+
+ return status;
+}
+
+/* Check lock status */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lCheckLockStatus(SDMMC_BLOCK_t *const obj,
+ SDMMC_BLOCK_CARD_LOCK_STATUS_t mode)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status;
+ SDMMC_BLOCK_CARD_LOCK_STATUS_t lock_status;
+
+ status = SDMMC_BLOCK_SD_GetLockStatus(obj, &lock_status);
+ /* For lock, card state must be "locked" */
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ if ((lock_status == SDMMC_BLOCK_CARD_LOCK_STATUS_LOCKED) && (mode == SDMMC_BLOCK_CARD_LOCK_STATUS_LOCKED))
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ }
+ /* For unlock, card state must be "unlocked" */
+ else if ((lock_status == SDMMC_BLOCK_CARD_LOCK_STATUS_UNLOCKED) && (mode == SDMMC_BLOCK_CARD_LOCK_STATUS_UNLOCKED))
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ }
+ else
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_LOCK_UNLOCK_ERROR;
+ }
+ }
+
+ return status;
+}
+
+#if SDMMC_BLOCK_SD_SUPPORT_4_BUS_WIDTH
+
+/* Switch bus width to 4-bit if supported */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lSwitchBusWidth(SDMMC_BLOCK_t *const obj)
+{
+ uint32_t arg = 0U;
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ uint32_t card_status = 0U;
+
+ /* Switch to transfer state (CMD7) */
+ status = SDMMC_BLOCK_SD_lSwitchToTransferState(obj);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Disable card insertion interrupt */
+ XMC_SDMMC_DisableEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_CARD_INS);
+
+ /* Check data transfer width supported in SCR register */
+ if ((obj->sdmmc_sd->card_info.scr.sd_bus_width & SDMMC_BLOCK_SCR_BUS_WIDTH4_BITMASK))
+ {
+ /* Set the argument */
+ arg |= ((uint32_t)obj->sdmmc_sd->card_info.rca << (uint32_t)SDMMC_BLOCK_ARG_RCA_BITPOS);
+
+ /* Send application specific command */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(55)),
+ arg,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Send ACMD6 to switch the bus width */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_SD_COMMAND(58)),
+ SDMMC_BLOCK_SD_4BUS_WIDTH_ARG,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+ }
+ }
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Set data transfer width */
+ XMC_SDMMC_SetDataTransferWidth(obj->sdmmc_sd->sdmmc, XMC_SDMMC_DATA_LINES_4);
+ }
+ }
+
+ return status;
+}
+
+/* Switch the card speed mode to high speed if supported */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lSwitchSpeed(SDMMC_BLOCK_t *const obj)
+{
+ uint32_t switch_status[16] = {0U};
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+
+ /* Check CMD6 support in SCR register */
+ if (obj->sdmmc_sd->card_info.scr.sd_spec != 0UL)
+ {
+ /* Switch to transfer state (CMD7) */
+ status = SDMMC_BLOCK_SD_lSwitchToTransferState(obj);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /*
+ * Send the Switch function command and read the transferred block of
+ * data from the card
+ */
+ status = SDMMC_BLOCK_SD_lSingleBlockTransfer(obj,
+ &(SDMMC_BLOCK_SD_COMMAND(6)),
+ SDMMC_BLOCK_SD_HIGH_SPEED_ARG,
+ 64U,
+ (uint32_t *)switch_status,
+ SDMMC_BLOCK_SD_DATA_TRANSFER_READ_BUFFER);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ if (((switch_status[4] & (uint32_t)SDMMC_BLOCK_SWITCH_FUNC_GRP1_STATUS_BITMASK) >>
+ (uint32_t)SDMMC_BLOCK_SWITCH_FUNC_GRP1_STATUS_BITPOS) != (uint32_t)1U)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ }
+ }
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Change speed mode (high speed) in the host controller */
+ XMC_SDMMC_EnableHighSpeed(obj->sdmmc_sd->sdmmc);
+ }
+ }
+ }
+
+ return status;
+}
+
+#endif
+
+/* Provides delay in command execution */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lCommandDelay(SDMMC_BLOCK_t *const obj, uint32_t delay)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ uint32_t timeoutTime;
+ obj->sdmmc_sd->tmr_expire = (bool)1U;
+
+ timeoutTime = TimerGet() + (delay / 1000u) + 1u;
+
+ do
+ {
+#if (SDMMC_BLOCK_POLLING_MODE > 0U)
+ /* Poll for interrupt events. */
+ SDMMC0_0_IRQHandler();
+#endif
+
+ if (TimerGet() > timeoutTime)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_TIMEOUT_OCCURED;
+ break;
+ }
+ /* Service the watchdog. */
+ CopService();
+ } while ((!((obj->sdmmc_sd->isr_context.cmd_flag == 1U) ||
+ (obj->sdmmc_sd->isr_context.data_flag == 1U))) &&
+ ((XMC_SDMMC_GetEvent(obj->sdmmc_sd->sdmmc, XMC_SDMMC_CARD_ERR) != 0U)));
+
+ obj->sdmmc_sd->isr_context.cmd_flag = (uint8_t)0U;
+ obj->sdmmc_sd->isr_context.data_flag = (uint8_t)0U;
+
+ return status;
+}
+
+/* Recovery task for error interrupts */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lErrorInterruptRecovery(SDMMC_BLOCK_t *const obj)
+{
+ XMC_SDMMC_COMMAND_t *cmd = (XMC_SDMMC_COMMAND_t *)&(SDMMC_BLOCK_COMMON_COMMAND(12));
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_NONRECOVERABLE_ERROR;
+ uint32_t normal_events = 0U;
+ uint32_t error_events = 0U;
+
+ error_events = ((uint32_t)XMC_SDMMC_CMD_TIMEOUT_ERR) |
+ ((uint32_t)XMC_SDMMC_CMD_CRC_ERR) |
+ ((uint32_t)XMC_SDMMC_CMD_END_BIT_ERR) |
+ ((uint32_t)XMC_SDMMC_CMD_IND_ERR) |
+ ((uint32_t)XMC_SDMMC_DATA_TIMEOUT_ERR) |
+ ((uint32_t)XMC_SDMMC_DATA_CRC_ERR) |
+ ((uint32_t)XMC_SDMMC_DATA_END_BIT_ERR) |
+ ((uint32_t)XMC_SDMMC_CURRENT_LIMIT_ERR) |
+ ((uint32_t)XMC_SDMMC_TARGET_RESP_ERR);
+
+ /* Disable all error events */
+ XMC_SDMMC_DisableEvent(obj->sdmmc_sd->sdmmc, error_events);
+
+ /* Check error interrupt status bits D0-D3 for CMD line errors */
+ if ((((uint32_t)obj->sdmmc_sd->isr_context.int_status_shadow &
+ (uint32_t)SDMMC_BLOCK_ERROR_CMD_STATUS_BITMASK) != (uint32_t)0U) ||
+ (XMC_SDMMC_IsCommandLineBusy(obj->sdmmc_sd->sdmmc) == true))
+ {
+ /* Set software reset for CMD line */
+ status = SDMMC_BLOCK_SD_lReset(obj, (uint32_t)XMC_SDMMC_SW_RST_CMD_LINE);
+ }
+
+ /* Check error interrupt status bits D4-D6 for data line errors */
+ if ((((uint32_t)obj->sdmmc_sd->isr_context.int_status_shadow &
+ (uint32_t)SDMMC_BLOCK_ERROR_DATA_STATUS_BITMASK) != (uint32_t)0U) ||
+ (XMC_SDMMC_IsDataLineBusy(obj->sdmmc_sd->sdmmc) == true))
+ {
+ /* Set software reset for data line */
+ status = SDMMC_BLOCK_SD_lReset(obj, (uint32_t)XMC_SDMMC_SW_RST_DAT_LINE);
+ }
+
+ error_events = ((uint32_t)XMC_SDMMC_CMD_TIMEOUT_ERR) |
+ ((uint32_t)XMC_SDMMC_CMD_CRC_ERR) |
+ ((uint32_t)XMC_SDMMC_CMD_END_BIT_ERR) |
+ ((uint32_t)XMC_SDMMC_CMD_IND_ERR) |
+ ((uint32_t)XMC_SDMMC_DATA_TIMEOUT_ERR) |
+ ((uint32_t)XMC_SDMMC_DATA_CRC_ERR) |
+ ((uint32_t)XMC_SDMMC_DATA_END_BIT_ERR) |
+ ((uint32_t)XMC_SDMMC_CURRENT_LIMIT_ERR) |
+ ((uint32_t)XMC_SDMMC_CARD_ERR);
+
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, error_events);
+
+ if (obj->sdmmc_sd->issue_abort == (uint8_t)1U)
+ {
+ /* Issue abort command. Set argument register */
+ (void)XMC_SDMMC_SendCommand(obj->sdmmc_sd->sdmmc, cmd, SDMMC_BLOCK_ARGUMENT0);
+
+ /* Wait for any interrupt status bit to be set */
+
+ /* Timeout of 5ms */
+ status = SDMMC_BLOCK_SD_lCommandDelay(obj, (uint32_t)SDMMC_BLOCK_DELAY_IN_COMMAND);
+ if ((SDMMC_BLOCK_MODE_STATUS_t)status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* If error status bit is set in the status register */
+ if (XMC_SDMMC_IsAnyErrorEvent(obj->sdmmc_sd->sdmmc) == true)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_NONRECOVERABLE_ERROR;
+
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, normal_events);
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, error_events);
+
+ /* Set software reset for CMD line and data line */
+ (void)SDMMC_BLOCK_SD_lReset(obj, (uint32_t)((uint32_t)XMC_SDMMC_SW_RST_CMD_LINE |
+ (uint32_t)XMC_SDMMC_SW_RST_DAT_LINE));
+ }
+ }
+
+ /* Check Data lines status in present status register */
+ if (XMC_SDMMC_IsAnyErrorEvent(obj->sdmmc_sd->sdmmc) == false)
+ {
+ if (XMC_SDMMC_IsAllDataLinesHigh(obj->sdmmc_sd->sdmmc) == true)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_RECOVERABLE_ERROR;
+ }
+ else
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_NONRECOVERABLE_ERROR;
+ }
+ }
+ }
+ else
+ {
+ if (XMC_SDMMC_IsAnyErrorEvent(obj->sdmmc_sd->sdmmc) == false)
+ {
+ if (XMC_SDMMC_IsAllDataLinesHigh(obj->sdmmc_sd->sdmmc) == true)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_RECOVERABLE_ERROR;
+ }
+ else
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_NONRECOVERABLE_ERROR;
+ }
+ }
+ }
+
+ /* Enable the error interrupt signal */
+ error_events |= (uint32_t)XMC_SDMMC_TARGET_RESP_ERR;
+ XMC_SDMMC_EnableEvent(obj->sdmmc_sd->sdmmc, error_events);
+
+ /* Global error recovery variable */
+ obj->sdmmc_sd->err_recovery_stat = status;
+
+ return status;
+}
+
+/* Handles interrupts in normal interrupt status register */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_NormalInterruptHandler(SDMMC_BLOCK_t *const obj, uint16_t int_status)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+
+#if SDMMC_BLOCK_SD_CARD_DETECTION_SUPPORT
+ bool pstate;
+
+ /* Card removal interrupt */
+ if ((int_status & (uint32_t)XMC_SDMMC_CARD_REMOVAL) != 0U)
+ {
+ obj->sdmmc_sd->card_detect_state |= ((uint32_t)1U << SDMMC_BLOCK_SD_INTERRUPT_CARD_REMOVAL);
+ /* Clear the interrupt status bit */
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_CARD_REMOVAL);
+ }
+
+ /* Card insertion interrupt */
+ if ((int_status & (uint32_t)XMC_SDMMC_CARD_INS) != 0U)
+ {
+ obj->sdmmc_sd->card_detect_state |= ((uint32_t)1U << SDMMC_BLOCK_SD_INTERRUPT_CARD_INSERTION);
+ /* Clear the interrupt status bit */
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_CARD_INS);
+ }
+
+ /* Invoke a callback function if a user has registered one */
+ if ((obj->sdmmc_sd->callback != NULL) && (obj->sdmmc_sd->card_detect_state != 0U))
+ {
+ obj->sdmmc_sd->card_detect_state = 0U;
+ pstate = (bool)(SDMMC_BLOCK_0.sdmmc_sd->sdmmc->PRESENT_STATE & SDMMC_PRESENT_STATE_CARD_INSERTED_Msk);
+ obj->sdmmc_sd->callback((SDMMC_BLOCK_SD_INTERRUPT_t)pstate);
+ }
+ else
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_NULL_POINTER;
+ }
+#endif
+
+ /* Buffer read ready interrupt */
+ if (((uint32_t)int_status & (uint32_t)XMC_SDMMC_BUFFER_READ_READY) != (uint32_t)0)
+ {
+ obj->sdmmc_sd->data_int_err = SDMMC_BLOCK_MODE_STATUS_BUFFER_READY;
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_BUFFER_READ_READY);
+ obj->sdmmc_sd->isr_context.data_flag = (uint8_t)1U;
+ }
+
+ /* Buffer write ready interrupt */
+ if (((uint32_t)int_status & (uint32_t)XMC_SDMMC_BUFFER_WRITE_READY) != (uint32_t)0)
+ {
+ obj->sdmmc_sd->data_int_err = SDMMC_BLOCK_MODE_STATUS_BUFFER_READY;
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_BUFFER_WRITE_READY);
+ obj->sdmmc_sd->isr_context.data_flag = (uint8_t)1U;
+ }
+
+ /* Transfer complete interrupt */
+ if (((uint32_t)int_status & (uint32_t)XMC_SDMMC_TX_COMPLETE) != (uint32_t)0)
+ {
+ obj->sdmmc_sd->transfer_int_err = SDMMC_BLOCK_MODE_STATUS_TRANSFER_COMPLETE;
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_TX_COMPLETE);
+ obj->card_state &= (uint8_t)~(uint8_t)SDMMC_BLOCK_CARD_STATE_DATA_ACTIVE;
+ obj->sdmmc_sd->isr_context.transfer_flag = (uint8_t)1U;
+ }
+
+ /* Command complete interrupt */
+ if (((uint32_t)int_status & (uint32_t)XMC_SDMMC_CMD_COMPLETE) != (uint32_t)0)
+ {
+ obj->sdmmc_sd->cmd_int_err = SDMMC_BLOCK_MODE_STATUS_COMMAND_COMPLETE;
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_CMD_COMPLETE);
+ obj->card_state &= (uint8_t)~(uint8_t)SDMMC_BLOCK_CARD_STATE_CMD_ACTIVE;
+ obj->sdmmc_sd->isr_context.cmd_flag = (uint8_t)1;
+ }
+
+ return status;
+}
+
+/* Handles interrupt in error interrupt status register */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_ErrorInterruptHandler(SDMMC_BLOCK_t *const obj,
+ uint16_t int_status)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ obj->sdmmc_sd->isr_context.int_status_shadow = int_status;
+
+ /* Command timeout error interrupt */
+ if (((uint32_t)int_status & ((uint32_t)XMC_SDMMC_CMD_TIMEOUT_ERR >> 16U)) != (uint32_t)0)
+ {
+ obj->sdmmc_sd->cmd_int_err = SDMMC_BLOCK_MODE_STATUS_COMMAND_TIMEOUT_ERROR;
+ obj->card_state &= (uint8_t)~(uint8_t)SDMMC_BLOCK_CARD_STATE_CMD_ACTIVE;
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_CMD_TIMEOUT_ERR);
+ obj->sdmmc_sd->isr_context.cmd_flag = 1U;
+ }
+
+ /* Command CRC error interrupt */
+ if (((uint32_t)int_status & ((uint32_t)XMC_SDMMC_CMD_CRC_ERR >> 16U)) != (uint32_t)0)
+ {
+ obj->sdmmc_sd->cmd_int_err = SDMMC_BLOCK_MODE_STATUS_COMMAND_CRC_ERROR;
+ obj->card_state &= (uint8_t)~(uint8_t)SDMMC_BLOCK_CARD_STATE_CMD_ACTIVE;
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_CMD_CRC_ERR);
+ obj->sdmmc_sd->isr_context.cmd_flag = 1U;
+ }
+
+ /* Command end bit error interrupt */
+ if (((uint32_t)int_status & ((uint32_t)XMC_SDMMC_CMD_END_BIT_ERR >> 16U)) != (uint32_t)0)
+ {
+ obj->sdmmc_sd->cmd_int_err = SDMMC_BLOCK_MODE_STATUS_COMMAND_ENDBIT_ERROR;
+ obj->card_state &= (uint8_t)~(uint8_t)SDMMC_BLOCK_CARD_STATE_CMD_ACTIVE;
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_CMD_END_BIT_ERR);
+ obj->sdmmc_sd->isr_context.cmd_flag = 1U;
+ }
+
+ /* Command index error interrupt */
+ if (((uint32_t)int_status & ((uint32_t)XMC_SDMMC_CMD_IND_ERR >> 16U)) != (uint32_t)0)
+ {
+ obj->sdmmc_sd->cmd_int_err = SDMMC_BLOCK_MODE_STATUS_COMMAND_INDEX_ERROR;
+ obj->card_state &= (uint8_t)~(uint8_t)SDMMC_BLOCK_CARD_STATE_CMD_ACTIVE;
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_CMD_IND_ERR);
+ obj->sdmmc_sd->isr_context.cmd_flag = 1U;
+ }
+
+ /* Data timeout error interrupt */
+ if (((uint32_t)int_status & ((uint32_t)XMC_SDMMC_DATA_TIMEOUT_ERR >> 16U)) != (uint32_t)0)
+ {
+ obj->sdmmc_sd->data_int_err = SDMMC_BLOCK_MODE_STATUS_DATA_TIMEOUT_ERROR;
+ obj->card_state &= (uint8_t)~(uint8_t)SDMMC_BLOCK_CARD_STATE_DATA_ACTIVE;
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_DATA_TIMEOUT_ERR);
+ obj->sdmmc_sd->isr_context.data_flag = 1U;
+ }
+
+ /* Data CRC error interrupt */
+ if (((uint32_t)int_status & ((uint32_t)XMC_SDMMC_DATA_CRC_ERR >> 16U)) != (uint32_t)0)
+ {
+ obj->sdmmc_sd->data_int_err = SDMMC_BLOCK_MODE_STATUS_DATA_CRC_ERROR;
+ obj->card_state &= (uint8_t)~(uint8_t)SDMMC_BLOCK_CARD_STATE_DATA_ACTIVE;
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_DATA_CRC_ERR);
+ obj->sdmmc_sd->isr_context.data_flag = 1U;
+ }
+
+ /* Data end bit error interrupt */
+ if (((uint32_t)int_status & ((uint32_t)XMC_SDMMC_DATA_END_BIT_ERR >> 16U)) != (uint32_t)0)
+ {
+ obj->sdmmc_sd->data_int_err = SDMMC_BLOCK_MODE_STATUS_DATA_ENDBIT_ERROR;
+ obj->card_state &= (uint8_t)~(uint8_t)SDMMC_BLOCK_CARD_STATE_DATA_ACTIVE;
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_DATA_END_BIT_ERR);
+ obj->sdmmc_sd->isr_context.data_flag = 1U;
+ }
+
+ /* ACMD12 error interrupt */
+ if (((uint32_t)int_status & ((uint32_t)XMC_SDMMC_ACMD_ERR >> 16U)) != (uint32_t)0)
+ {
+ obj->sdmmc_sd->acmd_int_err = SDMMC_BLOCK_MODE_STATUS_ACMD12_ERROR;
+ obj->card_state &= (uint8_t)~(uint8_t)SDMMC_BLOCK_CARD_STATE_CMD_ACTIVE;
+ obj->card_state &= (uint8_t)~(uint8_t)SDMMC_BLOCK_CARD_STATE_DATA_ACTIVE;
+ XMC_SDMMC_ClearEvent(obj->sdmmc_sd->sdmmc, (uint32_t)XMC_SDMMC_ACMD_ERR);
+ obj->sdmmc_sd->isr_context.cmd_flag = 1U;
+ }
+
+ return status;
+}
+
+/* Switch the card state to transferring state if it isn't */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lSwitchToTransferState(SDMMC_BLOCK_t *const obj)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ uint32_t arg = 0UL;
+ uint32_t card_status = 0U;
+
+ /* Check the current state of the card */
+ arg |= (uint32_t)((uint32_t)obj->sdmmc_sd->card_info.rca << (uint32_t)SDMMC_BLOCK_ARG_RCA_BITPOS);
+
+ /* Send CMD13 to read card status */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(13)),
+ arg,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Check if it is in transferring state */
+ if (((card_status & SDMMC_BLOCK_SD_CSR_CURRENT_STATE_BITMASK) >> SDMMC_BLOCK_SD_CSR_CURRENT_STATE_BITPOS) ==
+ SDMMC_BLOCK_SD_CSR_CURRENT_STATE_TRANS_VALUE)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ }
+ else
+ {
+ /* Switch to transfer state (CMD7) */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(7)),
+ arg,
+ XMC_SDMMC_RESPONSE_TYPE_R1b,
+ &card_status);
+ }
+ }
+
+ return status;
+}
+
+/* Do data transfer to OR from card */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lDataTransfer(SDMMC_BLOCK_t *const obj,
+ uint32_t *buf,
+ SDMMC_BLOCK_SD_DATA_TRANSFER_t transfer_mode,
+ uint32_t quad_bytes)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ uint32_t timeoutTime;
+ uint32_t count = 0U;
+
+ /* Block on buffer read/write ready interrupt */
+ timeoutTime = TimerGet() + (SDMMC_BLOCK_RESET_IN_DATA_TRANSFER / 1000u) + 1u;
+
+ do
+ {
+#if (SDMMC_BLOCK_POLLING_MODE > 0U)
+ /* Poll for interrupt events. */
+ SDMMC0_0_IRQHandler();
+#endif
+
+ if (TimerGet() > timeoutTime)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_TIMEOUT_OCCURED;
+ break;
+ }
+ /* Service the watchdog. */
+ CopService();
+ } while (obj->sdmmc_sd->isr_context.data_flag == 0U);
+
+ obj->sdmmc_sd->isr_context.data_flag = (uint8_t)0U;
+
+ /* Check if buffer is ready */
+ if (obj->sdmmc_sd->data_int_err == SDMMC_BLOCK_MODE_STATUS_BUFFER_READY)
+ {
+ /* 4 bytes data transmission in each iteration */
+ for (count = 0U; count < quad_bytes; count++)
+ {
+ if (transfer_mode == SDMMC_BLOCK_SD_DATA_TRANSFER_READ_BUFFER)
+ {
+ *buf = (uint32_t)XMC_SDMMC_ReadFIFO(obj->sdmmc_sd->sdmmc);
+ }
+
+ if (transfer_mode == SDMMC_BLOCK_SD_DATA_TRANSFER_WRITE_BUFFER)
+ {
+ XMC_SDMMC_WriteFIFO(obj->sdmmc_sd->sdmmc, buf);
+ }
+
+ buf++;
+ }
+ status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ }
+ else
+ {
+ obj->sdmmc_sd->issue_abort = (uint8_t)1U;
+ status = SDMMC_BLOCK_SD_lErrorInterruptRecovery(obj);
+ }
+
+ return status;
+}
+
+/* Performs the ACMD error recovery */
+static void SDMMC_BLOCK_SD_lAcmdErrorRecovery(SDMMC_BLOCK_t *const obj)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ uint32_t pcmd_flag = 0U;
+ uint32_t card_status = 0U;
+
+ /* Check ACMD12 "Not executed err" in Auto CMD12 error status register */
+ if (XMC_SDMMC_GetACMDErrStatus(obj->sdmmc_sd->sdmmc, XMC_SDMMC_ACMD12_NOT_EXEC_ERR) == true)
+ {
+ pcmd_flag = 1U;
+ /* Check Return Status of Recovery function of CMD_wo_DAT command */
+ if (obj->sdmmc_sd->err_recovery_stat == SDMMC_BLOCK_MODE_STATUS_RECOVERABLE_ERROR)
+ {
+ /* For recoverable error, issue CMD12 */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(12)),
+ SDMMC_BLOCK_ARGUMENT0,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+ }
+ if ((status != SDMMC_BLOCK_MODE_STATUS_SUCCESS) && (status != SDMMC_BLOCK_MODE_STATUS_NONRECOVERABLE_ERROR))
+ {
+ /* Set software reset for data line */
+ status = SDMMC_BLOCK_SD_lReset(obj, (uint32_t)XMC_SDMMC_SW_RST_DAT_LINE);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Check for XMC_SDMMC_CMD_NOT_ISSUED_BY_ACMD12_ERR */
+ if (XMC_SDMMC_GetACMDErrStatus(obj->sdmmc_sd->sdmmc, XMC_SDMMC_CMD_NOT_ISSUED_BY_ACMD12_ERR) == true)
+ {
+ XMC_DEBUG("SDMMC_BLOCK_ACMDErrorRecovery: SDMMC_BLOCK_ACMD_CMD_wo_DAT_NOT_ISSUED");
+ }
+ else
+ {
+ /*
+ * Check pcmd_flag. If 1, an error occurred in CMD_wo_DAT,
+ * and also in the SD memory transfer
+ */
+ if (pcmd_flag == 1U)
+ {
+ XMC_DEBUG("SDMMC_BLOCK_CheckPCMDFlag: ACMD both error");
+ }
+ else
+ {
+ XMC_DEBUG("SDMMC_BLOCK_CheckPCMDFlag: ACMD SD transfer error");
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ /* Set software reset for CMD line */
+ status = SDMMC_BLOCK_SD_lReset(obj, (uint32_t)XMC_SDMMC_SW_RST_CMD_LINE);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Issue CMD12 */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(12)),
+ SDMMC_BLOCK_ARGUMENT0,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+ if (status != SDMMC_BLOCK_MODE_STATUS_NONRECOVERABLE_ERROR)
+ {
+ /*Set Software Reset for Data line*/
+ status = SDMMC_BLOCK_SD_lReset(obj, (uint32_t)XMC_SDMMC_SW_RST_DAT_LINE);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Check XMC_SDMMC_CMD_NOT_ISSUED_BY_ACMD12_ERR */
+ if (XMC_SDMMC_GetACMDErrStatus(obj->sdmmc_sd->sdmmc, XMC_SDMMC_CMD_NOT_ISSUED_BY_ACMD12_ERR) == true)
+ {
+ XMC_DEBUG("SDMMC_BLOCK_ACMDErrorRecovery: SDMMC_BLOCK_ACMD_CMD_wo_DAT_NOT_ISSUED");
+ }
+ else
+ {
+ /*
+ * Check PCMD flag. If 1, an error occurred in CMD_wo_DAT,
+ * and also in the SD memory transfer
+ */
+ if (pcmd_flag == 1U)
+ {
+ XMC_DEBUG("SDMMC_BLOCK_CheckPCMDFlag: ACMD both error");
+ }
+ else
+ {
+ XMC_DEBUG("SDMMC_BLOCK_CheckPCMDFlag: ACMD SD transfer error");
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+/* Delay function */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lDelay(SDMMC_BLOCK_t *const obj, uint32_t delay)
+{
+ uint32_t timeoutTime;
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_CREATE_TIMER_FAILED;
+
+ /* Set timeout time. */
+ timeoutTime = TimerGet() + (delay / 1000u) + 1u;
+
+ /* Wait for the timer to expire. */
+ while (TimerGet() < timeoutTime)
+ {
+ /* Service the watchdog. */
+ CopService();
+ }
+
+ /* Update the status. */
+ status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+
+ /* Return the status. */
+ return status;
+}
+
+/*
+ * Perform host controller initialization and card initialization.
+ * Also, reading card registers
+ */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_CardIdentificationProcess(SDMMC_BLOCK_t *const obj)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ uint32_t timeoutTime;
+
+ /* Wait until the internal clock is stable */
+ timeoutTime = TimerGet() + (SDMMC_BLOCK_CLOCK_STABLE_DELAY / 1000u) + 1u;
+
+ do
+ {
+ if (TimerGet() > timeoutTime)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_TIMEOUT_OCCURED;
+ break;
+ }
+ /* Service the watchdog. */
+ CopService();
+ } while ((XMC_SDMMC_GetClockStability(obj->sdmmc_sd->sdmmc) == false));
+
+ if (status != SDMMC_BLOCK_MODE_STATUS_TIMEOUT_OCCURED)
+ {
+ /* Enable the SD clock */
+ XMC_SDMMC_SDClockEnable(obj->sdmmc_sd->sdmmc);
+
+ /* Turn the bus power on */
+ XMC_SDMMC_BusPowerOn(obj->sdmmc_sd->sdmmc);
+
+ if (obj->sdmmc_sd->mode_init_flag == false)
+ {
+ status = SDMMC_BLOCK_SD_lInitializeCard(obj);
+ if ((status == SDMMC_BLOCK_MODE_STATUS_SUCCESS) ||
+ (status == SDMMC_BLOCK_MODE_STATUS_INITIALIZED_BUT_LOCKED))
+ {
+ status = SDMMC_BLOCK_SD_lAfterCardInitialize(obj);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ obj->sdmmc_sd->mode_init_flag = 1U;
+ }
+ }
+ }
+ }
+
+ return status;
+}
+
+/* Check if the sector address is out of bound */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lCheckSectorBound(SDMMC_BLOCK_t *const obj,
+ uint32_t sector_num,
+ uint32_t sector_count)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status;
+ uint32_t local_sector_count = 0U;
+
+ /* Get sector count function */
+ status = SDMMC_BLOCK_SD_GetSectorCount(obj, (void *)&local_sector_count);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Check the sector count limit */
+ if ((sector_num + sector_count) > local_sector_count)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_SECTOR_OUT_OF_BOUND;
+ }
+ }
+
+ return status;
+}
+
+/* Perform erase operation */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lLocalErase(SDMMC_BLOCK_t *const obj,
+ uint32_t start_addr,
+ uint32_t end_addr,
+ uint32_t timeout)
+{
+ /* Stores the response received */
+ uint32_t card_status = 0U;
+ uint32_t timeoutTime;
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+
+ if (((uint32_t)obj->card_type & (uint32_t)SDMMC_BLOCK_CARD_TYPE_BLOCK_ADDRESSING) == (uint32_t)0U)
+ {
+ start_addr *= (uint32_t)512U;
+ end_addr *= (uint32_t)512U;
+ }
+
+ /* SD erase start command */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_SD_COMMAND(32)),
+ start_addr,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* SD Erase End Command */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_SD_COMMAND(33)),
+ end_addr,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+ }
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_SD_COMMAND(38)),
+ SDMMC_BLOCK_ARGUMENT0,
+ XMC_SDMMC_RESPONSE_TYPE_R1b,
+ &card_status);
+
+ timeoutTime = TimerGet() + ((timeout * (uint32_t)1000U)) + 1u;
+
+ do
+ {
+ if (TimerGet() > timeoutTime)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_TIMEOUT_OCCURED;
+ break;
+ }
+ /* Service the watchdog. */
+ CopService();
+ } while ((XMC_SDMMC_IsDataLineBusy(obj->sdmmc_sd->sdmmc) ||
+ (XMC_SDMMC_IsCommandLineBusy(obj->sdmmc_sd->sdmmc))));
+
+ }
+
+ return status;
+}
+
+/*
+ * PUBLIC FUNCTIONS
+ */
+
+/* Initialize host controller */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lHostControllerInit(SDMMC_BLOCK_t *const obj)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_HOST_CONTROLLER_INITIALIZED;
+
+ /* Check if host controller is initialized */
+ if (((uint32_t)obj->card_state & (uint32_t)SDMMC_BLOCK_CARD_STATE_HC_INITIALIZED) == (uint32_t)0U)
+ {
+ /* Reset the registers to default values */
+ status = SDMMC_BLOCK_SD_lReset(obj, (uint32_t)XMC_SDMMC_SW_RESET_ALL);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /*
+ * The internal clock should be disabled before
+ * updating frequency clock select (Please see
+ * section 2.2.14 -> Clock Control Register)
+ */
+ XMC_SDMMC_Stop(obj->sdmmc_sd->sdmmc);
+
+ /* Select SD clock frequency */
+ XMC_SDMMC_SDClockFreqSelect(obj->sdmmc_sd->sdmmc, XMC_SDMMC_CLK_DIV_2);
+
+ /* Internal clock enable */
+ XMC_SDMMC_Start(obj->sdmmc_sd->sdmmc);
+
+ /*
+ * Enable all normal interrupt status bits except block-gap
+ * event, card interrupt event, DMA int., ADMA and auto cmd
+ * errors. Enable the status and the events themselves.
+ */
+ obj->sdmmc_sd->sdmmc->EN_INT_STATUS_NORM = SDMMC_BLOCK_NORMAL_INT_STATUS_ENABLE;
+ obj->sdmmc_sd->sdmmc->EN_INT_STATUS_ERR = SDMMC_BLOCK_ERROR_INT_STATUS_ENABLE;
+ obj->sdmmc_sd->sdmmc->EN_INT_SIGNAL_NORM = SDMMC_BLOCK_NORMAL_INT_SIGNAL_ENABLE;
+ obj->sdmmc_sd->sdmmc->EN_INT_SIGNAL_ERR = SDMMC_BLOCK_ERROR_INT_SIGNAL_ENABLE;
+
+#if SDMMC_BLOCK_SD_CARD_DETECTION_SUPPORT
+ XMC_SDMMC_EnableEvent(obj->sdmmc_sd->sdmmc, ((uint32_t)XMC_SDMMC_CARD_REMOVAL) |
+ ((uint32_t)XMC_SDMMC_CARD_INS) |
+ ((uint32_t)XMC_SDMMC_CARD_INT));
+#endif
+
+ /* Set data-line timeout */
+ XMC_SDMMC_SetDataLineTimeout(obj->sdmmc_sd->sdmmc, XMC_SDMMC_DAT_TIMEOUT_COUNTER_2_POW_27);
+
+ /* Set bus voltage in the power control register: flattop 3.3 volts */
+ XMC_SDMMC_SetBusVoltage(obj->sdmmc_sd->sdmmc, XMC_SDMMC_BUS_VOLTAGE_3_3_VOLTS);
+
+ /* Update the state status to card initialized */
+ obj->card_state |= (uint8_t)((uint8_t)SDMMC_BLOCK_CARD_STATE_HC_INITIALIZED |
+ (uint8_t)SDMMC_BLOCK_CARD_STATE_NO_CARD |
+ (uint8_t)SDMMC_BLOCK_CARD_STATE_NOT_INITIALIZED);
+
+ /* A stub of delay for initialization */
+ for (volatile uint32_t i = 0; (uint32_t)i < (uint32_t)100000U; i++)
+ {
+ }
+ }
+ }
+
+ return status;
+}
+
+/* De-initialize the host controller */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lHostControllerDeInit(SDMMC_BLOCK_t *const obj)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+
+ /* Check if the host controller is initialized */
+ if (((uint32_t)obj->card_state & (uint32_t)SDMMC_BLOCK_CARD_STATE_HC_INITIALIZED) != (uint32_t)0U)
+ {
+ /* Cleanup the card */
+ SDMMC_BLOCK_SD_lCardCleanUp(obj);
+
+ /* Reset host controller's registers */
+ status = SDMMC_BLOCK_SD_lReset(obj, (uint32_t)XMC_SDMMC_SW_RESET_ALL);
+ }
+
+ return status;
+}
+
+/* Read multiple blocks of data from the card */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lCardReadMultipleBlocks(SDMMC_BLOCK_t *const obj,
+ uint32_t *read_buf,
+ uint32_t read_addr,
+ uint32_t num_blocks)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_INIT_FAIL;
+ obj->sdmmc_sd->cmd_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ obj->sdmmc_sd->data_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ obj->sdmmc_sd->transfer_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+
+ /* Check if initialization is successful */
+ if (obj->sdmmc_sd->mode_init_flag == true)
+ {
+ /* Ensure that sector number is not out of bound */
+ status = SDMMC_BLOCK_SD_lCheckSectorBound(obj, read_addr, num_blocks);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Set transfer direction select in the Transfer Mode Register */
+ XMC_SDMMC_SetDataTransferDirection(obj->sdmmc_sd->sdmmc, XMC_SDMMC_DATA_TRANSFER_CARD_TO_HOST);
+
+ /* Send Multiple Block Read Command i.e CMD18 */
+ status = SDMMC_BLOCK_SD_lMultiBlockTransfer(obj,
+ &read_addr,
+ num_blocks,
+ &(SDMMC_BLOCK_COMMON_COMMAND(18)),
+ read_buf,
+ SDMMC_BLOCK_SD_DATA_TRANSFER_READ_BUFFER);
+ }
+ }
+
+ return status;
+}
+
+/* Read single block of data from the card */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lCardReadSingleBlock(SDMMC_BLOCK_t *const obj,
+ uint32_t *read_buf,
+ uint32_t read_addr)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_INIT_FAIL;
+ uint32_t sector_count = 1U;
+
+ /* Check if initialization successful */
+ if (obj->sdmmc_sd->mode_init_flag == true)
+ {
+ /* Ensure that the sector number is not out of bound */
+ status = SDMMC_BLOCK_SD_lCheckSectorBound(obj, read_addr, sector_count);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Block addressing or byte addressing */
+ if (((uint32_t)obj->card_type & (uint32_t)SDMMC_BLOCK_CARD_TYPE_BLOCK_ADDRESSING) == (uint32_t)0UL)
+ {
+ read_addr = (uint32_t)(read_addr * 512UL);
+ }
+
+ XMC_SDMMC_SetDataTransferDirection(obj->sdmmc_sd->sdmmc, XMC_SDMMC_DATA_TRANSFER_CARD_TO_HOST);
+ /* SDMMC->TRANSFER_MODE |= (uint16_t)((uint32_t)1U << (uint32_t)SDMMC_TRANSFER_MODE_TX_DIR_SELECT_Pos); */
+
+ /* Perform the Single block transfer operation */
+ status = SDMMC_BLOCK_SD_lSingleBlockTransfer(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(17)),
+ read_addr,
+ (uint16_t)SDMMC_BLOCK_BLOCK_SIZE,
+ read_buf,
+ SDMMC_BLOCK_SD_DATA_TRANSFER_READ_BUFFER);
+ }
+ }
+
+ return status;
+}
+
+/* Write multiple blocks of data on the card */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lCardWriteMultipleBlocks(SDMMC_BLOCK_t *const obj,
+ const uint32_t *write_buf,
+ uint32_t write_addr,
+ uint32_t num_blocks)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_INIT_FAIL;
+
+ obj->sdmmc_sd->cmd_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ obj->sdmmc_sd->data_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ obj->sdmmc_sd->transfer_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+
+ /* Check if initialization is successful */
+ if (obj->sdmmc_sd->mode_init_flag == true)
+ {
+ /* Ensure sector number is not out of bound */
+ status = SDMMC_BLOCK_SD_lCheckSectorBound(obj, write_addr, num_blocks);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Clear transfer direction select in transfer mode register */
+ XMC_SDMMC_SetDataTransferDirection(obj->sdmmc_sd->sdmmc, XMC_SDMMC_DATA_TRANSFER_HOST_TO_CARD);
+
+ /* Send Multiple Block Write Command i.e CMD25 */
+ status = SDMMC_BLOCK_SD_lMultiBlockTransfer(obj,
+ &write_addr,
+ num_blocks,
+ &(SDMMC_BLOCK_COMMON_COMMAND(25)),
+ (uint32_t *)write_buf,
+ SDMMC_BLOCK_SD_DATA_TRANSFER_WRITE_BUFFER);
+ }
+ }
+
+ return status;
+}
+
+/* Write single block of data on the card */
+static SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_lCardWriteSingleBlock(SDMMC_BLOCK_t *const obj,
+ const uint32_t *write_buf,
+ uint32_t write_addr)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_INIT_FAIL;
+ uint32_t sector_count = 1U;
+
+ /* Check if initialization is successful */
+ if (obj->sdmmc_sd->mode_init_flag == true)
+ {
+ /* Check if sector number is not out of bound */
+ status = SDMMC_BLOCK_SD_lCheckSectorBound(obj, write_addr, sector_count);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* If not block addressing, then multiply by 512 bytes */
+ if (((uint32_t)obj->card_type & (uint32_t)SDMMC_BLOCK_CARD_TYPE_BLOCK_ADDRESSING) == (uint32_t)0U)
+ {
+ write_addr = (uint32_t)(write_addr * 512U);
+ }
+
+ /* Clear transfer direction select bit */
+ XMC_SDMMC_SetDataTransferDirection(obj->sdmmc_sd->sdmmc, XMC_SDMMC_DATA_TRANSFER_HOST_TO_CARD);
+
+ /* Single block transfer function */
+ status = SDMMC_BLOCK_SD_lSingleBlockTransfer(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(24)),
+ write_addr,
+ (uint16_t)SDMMC_BLOCK_BLOCK_SIZE,
+ (uint32_t *)write_buf,
+ SDMMC_BLOCK_SD_DATA_TRANSFER_WRITE_BUFFER);
+ }
+ }
+
+ return status;
+}
+
+/* Erase data from the card */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_EraseBlock(SDMMC_BLOCK_t *const obj, uint32_t start_addr, uint32_t end_addr)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_INIT_FAIL;
+ uint32_t tmp_start_addr;
+ uint32_t num_sectors = 0U;
+ /* Allocation unit to no. of sectors in 1 AU table mapping */
+ uint32_t au_to_sectors[10] = {0U, 32U, 64U, 128U, 256U, 512U, 1024U, 2048U, 4096U, 8192U};
+ uint16_t erase_size = (uint16_t)0U;
+ uint8_t erase_offset = (uint8_t)0U;
+ uint8_t erase_timeout = (uint8_t)0U;
+ uint8_t au_size = (uint8_t)0U;
+ uint32_t sectors_in_au = 0U;
+ uint32_t sectors_in_erase_cluster = 0U;
+ /* Read SD status */
+ uint32_t sd_status[16] = {0U};
+ uint32_t erase_timeout_per_cluster = 0UL;
+
+ obj->sdmmc_sd->cmd_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ obj->sdmmc_sd->data_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ obj->sdmmc_sd->transfer_int_err = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+
+ /* If the card is read only or write protected */
+ if ((obj->card_state & (uint8_t)SDMMC_BLOCK_CARD_STATE_WRITE_PROTECTED) != (uint8_t)0U)
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_WP_VIOLATION_ERROR;
+ }
+#ifdef SDMMC_BLOCK_CARD_WRITE_PROTECT_SIGNAL
+ else if ((obj->sdwc != NULL) && (XMC_GPIO_GetInput(obj->sdwc->port, obj->sdwc->pin)))
+ {
+ status = SDMMC_BLOCK_MODE_STATUS_WP_VIOLATION_ERROR;
+ }
+#endif /* SDMMC_BLOCK_CARD_WRITE_PROTECT_SIGNAL */
+ /* Assume initialization is successful: This is invoked from IOCTL */
+ else
+ {
+ tmp_start_addr = start_addr;
+ num_sectors = (end_addr - tmp_start_addr) + 1U;
+ /* Check sector number is not out of bound */
+ status = SDMMC_BLOCK_SD_lCheckSectorBound(obj, tmp_start_addr, num_sectors);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Erase timeout calculation */
+ /* Get SD status */
+ status = SDMMC_BLOCK_SD_GetSdStatus(obj, (void*)&(sd_status[0]));
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Bits 400-401 in SD status: Erase offset */
+ erase_offset = (uint8_t)(((sd_status[3] & 0x00000300UL)) >> 8U);
+
+ /* Bits 402-407: Erase timeout */
+ erase_timeout = (uint8_t)(((sd_status[3] & 0x0000FC00UL)) >> 10UL);
+
+ /* Bits 408-423: Erase size */
+ erase_size = (uint16_t)((((sd_status[2] & 0xFF000000U) >> 24U) << 8U) | (sd_status[3] & 0x000000FFU));
+
+ /* Bits 428-431: Allocation unit size */
+ au_size = (uint8_t)((sd_status[2] & 0x00F00000U) >> 20);
+
+ /* Erase timeout calculations */
+ erase_timeout_per_cluster = ((uint32_t)erase_timeout / (uint32_t)erase_size) + (uint32_t)erase_offset;
+
+ /* Number of sectors in 1 AU */
+ sectors_in_au = au_to_sectors[au_size];
+ sectors_in_erase_cluster = sectors_in_au * erase_size;
+
+ while (num_sectors >= sectors_in_erase_cluster)
+ {
+ status = SDMMC_BLOCK_SD_lLocalErase(obj,
+ tmp_start_addr,
+ (tmp_start_addr + sectors_in_erase_cluster),
+ erase_timeout_per_cluster);
+ if (status != SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ break;
+ }
+ tmp_start_addr = tmp_start_addr + sectors_in_erase_cluster;
+ num_sectors = num_sectors - sectors_in_erase_cluster;
+ }
+
+ if (num_sectors != 0U)
+ {
+ status = SDMMC_BLOCK_SD_lLocalErase(obj, tmp_start_addr, end_addr, erase_timeout_per_cluster);
+ }
+ }
+ }
+ }
+
+ /* Wait for until the command OR data lines aren't busy */
+ while ((XMC_SDMMC_IsDataLineBusy(obj->sdmmc_sd->sdmmc)) || (XMC_SDMMC_IsCommandLineBusy(obj->sdmmc_sd->sdmmc)))
+ {
+ }
+
+ return status;
+}
+
+/* Set, clear password, lock/unlock card */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_LockUnlockCard(SDMMC_BLOCK_t *const obj,
+ SDMMC_BLOCK_LOCK_STRUCTURE_t *lock,
+ SDMMC_BLOCK_CARD_LOCK_STATUS_t operation_mode)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ uint32_t data_length = 0U;
+ uint32_t card_status;
+
+ /* Select the card before proceeding */
+ status = SDMMC_BLOCK_SD_lSwitchToTransferState(obj);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Send CMD42 and write the lock data structure */
+ /* Clear transfer direction select in transfer mode register */
+ XMC_SDMMC_SetDataTransferDirection(obj->sdmmc_sd->sdmmc, XMC_SDMMC_DATA_TRANSFER_HOST_TO_CARD);
+
+ /* Compute password length */
+ data_length = (uint32_t)((((uint32_t)lock->pwd_len + (uint32_t)1U) >> 1U) << 1U) + 2U;
+
+ /* Set block length */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(16)),
+ data_length,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ status = SDMMC_BLOCK_SD_lSingleBlockTransfer(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(42)),
+ (uint32_t)SDMMC_BLOCK_ARGUMENT0,
+ (uint16_t)data_length,
+ (uint32_t *)lock,
+ SDMMC_BLOCK_SD_DATA_TRANSFER_WRITE_BUFFER);
+
+ while (XMC_SDMMC_IsDataLineBusy(obj->sdmmc_sd->sdmmc))
+ {
+ }
+
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(16)),
+ 512U,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+
+ /* Wait for until the command OR data lines aren't busy */
+ while ((XMC_SDMMC_IsDataLineBusy(obj->sdmmc_sd->sdmmc)) ||
+ (XMC_SDMMC_IsCommandLineBusy(obj->sdmmc_sd->sdmmc)))
+ {
+ }
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ status = SDMMC_BLOCK_SD_lCheckLockStatus(obj, operation_mode);
+ }
+ }
+ }
+ return status;
+}
+
+/* Get the lock status from card */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_GetLockStatus(SDMMC_BLOCK_t *const obj,
+ SDMMC_BLOCK_CARD_LOCK_STATUS_t *lock_status)
+{
+ uint32_t card_status = 0UL;
+ uint32_t arg = 0UL;
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+
+ arg |= ((uint32_t)obj->sdmmc_sd->card_info.rca << SDMMC_BLOCK_ARG_RCA_BITPOS);
+
+ /* Send CMD13 to read card status */
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(13)),
+ arg,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Lock/unlock status bit in the CSR register */
+ if (((uint32_t)card_status & (uint32_t)SDMMC_BLOCK_SD_CSR_CARD_IS_LOCKED_BITMASK) != (uint32_t)0)
+ {
+ *lock_status = SDMMC_BLOCK_CARD_LOCK_STATUS_LOCKED;
+ obj->card_state |= (uint8_t)SDMMC_BLOCK_CARD_STATE_LOCKED;
+ }
+ else
+ {
+ *lock_status = SDMMC_BLOCK_CARD_LOCK_STATUS_UNLOCKED;
+ obj->card_state &= (uint8_t)~(uint8_t)(SDMMC_BLOCK_CARD_STATE_LOCKED);
+ }
+ }
+
+ return status;
+}
+
+/* Get card's current state */
+uint8_t SDMMC_BLOCK_SD_GetState(SDMMC_BLOCK_t *obj)
+{
+ return (obj->card_state & 0xFU);
+}
+
+/* Get card type */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_GetCardType(SDMMC_BLOCK_t *const obj, uint32_t *card_type)
+{
+ *card_type = obj->card_type;
+
+ return SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+}
+
+/* Get CID register information of card */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_GetCid(SDMMC_BLOCK_t *const obj, void *buf)
+{
+ SDMMC_BLOCK_CID_t *temp = (SDMMC_BLOCK_CID_t *)buf;
+
+ temp->manufacturing_date = (uint16_t)((obj->sdmmc_sd->card_info.cid[0]) & 0xFFFU);
+ temp->product_serial_num = (obj->sdmmc_sd->card_info.cid[1] << 16U) | (obj->sdmmc_sd->card_info.cid[0] >> 16U);
+ temp->product_rev = (uint8_t)((obj->sdmmc_sd->card_info.cid[1] >> 16U) & 0xFFU);
+ temp->product_name[0] = (uint8_t)((obj->sdmmc_sd->card_info.cid[2] >> 24U) & 0xFFU);
+ temp->product_name[1] = (uint8_t)((obj->sdmmc_sd->card_info.cid[2] >> 16U) & 0xFFU);
+ temp->product_name[2] = (uint8_t)((obj->sdmmc_sd->card_info.cid[2] >> 8U) & 0xFFU);
+ temp->product_name[3] = (uint8_t)((obj->sdmmc_sd->card_info.cid[2] >> 0U) & 0xFFU);
+ temp->product_name[4] = (uint8_t)((obj->sdmmc_sd->card_info.cid[1] >> 24U) & 0xFFU);
+ temp->app_oem_id[0] = (uint8_t)((obj->sdmmc_sd->card_info.cid[3] >> 8U) & 0xFFU);
+ temp->app_oem_id[1] = (uint8_t)((obj->sdmmc_sd->card_info.cid[3]) & 0xFFU);
+ temp->manufacturer_id = (uint8_t)((obj->sdmmc_sd->card_info.cid[3] >> 16U) & 0xFFU);
+
+ return SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+}
+
+/* Get OCR information */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_GetOcr(SDMMC_BLOCK_t *const obj, void *buf)
+{
+ *(uint32_t *)buf = obj->sdmmc_sd->card_info.ocr;
+
+ return SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+}
+
+/* Get CSD information */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_GetCsd(SDMMC_BLOCK_t *const obj, void *buf)
+{
+ /*
+ * CSD Structure includes 7-bit CRC and 1-bit fixed bit
+ * which is not sent by the card. So, skip 1 byte before
+ * copying into the structure.
+ */
+ memcpy(((uint8_t *)buf + 1U), (void *)obj->sdmmc_sd->card_info.csd, 15U);
+
+ return SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+}
+
+/* Get number of sectors present on the card */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_GetSectorCount(SDMMC_BLOCK_t *const obj, void *buf)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+ uint32_t mult = 0U;
+
+ if (((uint32_t)obj->card_type & (uint32_t)SDMMC_BLOCK_CARD_TYPE_HIGH_CAPACITY) != (uint32_t)0U)
+ {
+ SDMMC_BLOCK_SDV2_CSD_t temp_csd_v2 = {0U};
+
+ /* Get CSD function */
+ status = SDMMC_BLOCK_SD_GetCsd(obj, (void *)&temp_csd_v2);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /*
+ * For High Capacity SD card, (C_SIZE field value + 1) * 1024
+ * gives the sector count
+ */
+ *(uint32_t *)buf = (uint32_t)(((((uint32_t)temp_csd_v2.dev_size_high << (uint32_t)16UL) |
+ ((uint32_t)temp_csd_v2.dev_size_low)) + (uint32_t)1UL) << (uint32_t)10UL);
+ }
+ }
+ /*
+ * For Standard SD (and MMC) cards:
+ * Sector Count = (Device Size + 1) * Mult, where Mult = 2 ^ C_SIZE_MULT
+ */
+ else
+ {
+ SDMMC_BLOCK_SDV1_CSD_t temp_csd_v1 = {0U};
+ /* Get CSD function */
+ status = SDMMC_BLOCK_SD_GetCsd(obj, (void *)&temp_csd_v1);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Left shift evaluates 1 * 2 ^ (TmpMmcCsd.DeviceSizeMult + 2) */
+ mult = (uint32_t)((uint32_t)temp_csd_v1.dev_size_mult + 2U);
+
+ /* Sector Count = device_size * mult */
+ *(uint32_t *)buf = (uint32_t)((((uint32_t)temp_csd_v1.dev_size_high << (uint32_t)2UL) |
+ ((uint32_t)temp_csd_v1.dev_size_low)) + (uint32_t)1UL) << mult;
+ }
+ }
+
+ return status;
+}
+
+/* Get sector size info from the card */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_GetSectorSize(SDMMC_BLOCK_t *const obj, void *buf)
+{
+ /* Sector Size is fixed to 512 bytes */
+ *(uint16_t *)buf = (uint16_t)512U;
+
+ return SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+}
+
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_GetBlockSize(SDMMC_BLOCK_t *const obj, void *buf)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_SUCCESS;
+
+ /* SD high capacity card (CSD V2) */
+ if (((uint32_t)obj->card_type & (uint32_t)SDMMC_BLOCK_CARD_TYPE_HIGH_CAPACITY) != (uint32_t)0)
+ {
+ SDMMC_BLOCK_SDV2_CSD_t temp_csd_v2 = {0U};
+ /* Get CSD function */
+ status = SDMMC_BLOCK_SD_GetCsd(obj, (void *)&temp_csd_v2);
+ *(uint32_t *)buf = (uint32_t)((uint32_t)temp_csd_v2.erase_sector_size + (uint32_t)1U);
+ }
+ /* SD standard capacity card (CSD V1) */
+ else
+ {
+ SDMMC_BLOCK_SDV2_CSD_t temp_csd_v1 = {0U};
+ /* Get CSD function */
+ status = SDMMC_BLOCK_SD_GetCsd(obj, (void *)&temp_csd_v1);
+ *(uint32_t *)buf = (uint32_t)((uint32_t)temp_csd_v1.erase_sector_size + (uint32_t)1U);
+ }
+
+ return status;
+}
+
+/* Get SD status information */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_GetSdStatus(SDMMC_BLOCK_t *const obj, void *buf)
+{
+ uint32_t arg = 0U;
+ uint32_t card_status = 0U;
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+
+ /* Select the card (CMD7) */
+ status = SDMMC_BLOCK_SD_lSwitchToTransferState(obj);
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Send CMD55 (application specific command) */
+ arg |= (uint32_t)((uint32_t)obj->sdmmc_sd->card_info.rca << (uint32_t)SDMMC_BLOCK_ARG_RCA_BITPOS);
+
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_COMMON_COMMAND(55)),
+ arg,
+ XMC_SDMMC_RESPONSE_TYPE_R1,
+ &card_status);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Set transfer mode */
+ XMC_SDMMC_SetDataTransferDirection(obj->sdmmc_sd->sdmmc, XMC_SDMMC_DATA_TRANSFER_CARD_TO_HOST);
+
+ /* Read the SD status from the data line */
+ status = SDMMC_BLOCK_SD_lSingleBlockTransfer(obj,
+ &(SDMMC_BLOCK_SD_COMMAND(59)),
+ (uint32_t)SDMMC_BLOCK_ARGUMENT0,
+ (uint16_t)64U,
+ (uint32_t *)buf,
+ SDMMC_BLOCK_SD_DATA_TRANSFER_READ_BUFFER);
+ }
+ }
+
+ return status;
+}
+
+/* Eject SD card */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_EjectCard(SDMMC_BLOCK_t *const obj)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_FAILURE;
+ uint32_t arg = 0U;
+
+ if ((obj->card_state & (uint16_t)SDMMC_BLOCK_CARD_STATE_NO_CARD) == 0U)
+ {
+ /* Send CMD15 to deactivate the card */
+ arg |= (uint32_t)((uint32_t)obj->sdmmc_sd->card_info.rca << (uint32_t)SDMMC_BLOCK_ARG_RCA_BITPOS);
+
+ status = SDMMC_BLOCK_SD_lSendCommand(obj,
+ &(SDMMC_BLOCK_SD_COMMAND(15)),
+ (uint32_t)arg,
+ (XMC_SDMMC_RESPONSE_TYPE_t)XMC_SDMMC_RESPONSE_TYPE_NO_RESPONSE,
+ NULL);
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ /* Card Cleanup */
+ SDMMC_BLOCK_SD_lCardCleanUp(obj);
+ obj->sdmmc_sd->mode_init_flag = false;
+ }
+ }
+
+ return status;
+}
+
+/*
+ * Initialize low level drivers, host controller, the card
+ * and read card registers.
+ */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_Start(SDMMC_BLOCK_t *const obj)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status = SDMMC_BLOCK_MODE_STATUS_HOST_CONTROLLER_INITIALIZED;
+
+ /* Check If host controller is already initialized */
+ if (((uint32_t)obj->card_state & (uint32_t)SDMMC_BLOCK_CARD_STATE_HC_INITIALIZED) == (uint32_t)0U)
+ {
+#if (SDMMC_BLOCK_POLLING_MODE == 0U)
+ /* Enable Interrupt */
+ NVIC_SetPriority(SDMMC0_0_IRQn,
+ NVIC_EncodePriority(NVIC_GetPriorityGrouping(),
+ obj->sdmmc_sd->int_priority,
+ obj->sdmmc_sd->int_sub_priority));
+
+ NVIC_ClearPendingIRQ(SDMMC0_0_IRQn);
+ NVIC_EnableIRQ(SDMMC0_0_IRQn);
+#endif
+
+ /* Host controller initialize */
+ status = SDMMC_BLOCK_SD_lHostControllerInit(obj);
+ }
+
+ return status;
+}
+
+/* De-assert the SDMMC peripheral */
+SDMMC_BLOCK_MODE_STATUS_t SDMMC_BLOCK_SD_Init(SDMMC_BLOCK_t *const obj)
+{
+ /* Enable SDMMC peripheral */
+ XMC_SDMMC_Enable(obj->sdmmc_sd->sdmmc);
+
+ /* Enable SCU clock for SDMMC */
+ XMC_SCU_CLOCK_EnableClock(XMC_SCU_CLOCK_MMC);
+
+ /* De-initialize host controller */
+ (void)SDMMC_BLOCK_SD_lHostControllerDeInit(obj);
+
+ /* Initialize LLD and host controller */
+ return SDMMC_BLOCK_SD_Start(obj);
+}
+
+/* Reads the data from the card */
+SDMMC_BLOCK_STATUS_t SDMMC_BLOCK_SD_ReadBlock(SDMMC_BLOCK_t *const obj,
+ uint8_t *read_buf,
+ uint32_t sector_num,
+ uint8_t sector_count)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status;
+ uint8_t disk_status;
+ SDMMC_BLOCK_STATUS_t res;
+
+ /* Check the status before reading data */
+ disk_status = obj->card_state;
+
+ if ((disk_status & (uint8_t)SDMMC_BLOCK_CARD_STATE_NOT_INITIALIZED) != (uint8_t)0U)
+ {
+ res = SDMMC_BLOCK_STATUS_NOTRDY;
+ }
+ else if ((disk_status & (uint8_t)SDMMC_BLOCK_CARD_STATE_LOCKED) != (uint8_t)0U)
+ {
+ res = SDMMC_BLOCK_STATUS_LOCKED;
+ }
+ else
+ {
+ /* Check for single block read or multiple block read based on sector count */
+ if (sector_count == (uint8_t)1U)
+ {
+ status = SDMMC_BLOCK_SD_lCardReadSingleBlock(obj, (uint32_t *)read_buf, sector_num);
+ }
+ else
+ {
+ status = SDMMC_BLOCK_SD_lCardReadMultipleBlocks(obj, (uint32_t *)read_buf, sector_num, (uint32_t)sector_count);
+ }
+
+ if (status == SDMMC_BLOCK_MODE_STATUS_SUCCESS)
+ {
+ res = SDMMC_BLOCK_STATUS_SUCCESS;
+ }
+ else if (status == SDMMC_BLOCK_MODE_STATUS_SECTOR_OUT_OF_BOUND)
+ {
+ res = SDMMC_BLOCK_STATUS_PARERR;
+ }
+ else
+ {
+ res = SDMMC_BLOCK_STATUS_FAILURE;
+ }
+ }
+
+ /* Wait for until the command OR data lines aren't busy */
+ while ((XMC_SDMMC_IsDataLineBusy(obj->sdmmc_sd->sdmmc)) || (XMC_SDMMC_IsCommandLineBusy(obj->sdmmc_sd->sdmmc)))
+ {
+ }
+
+ return res;
+}
+
+/* Writes the data on the card */
+SDMMC_BLOCK_STATUS_t SDMMC_BLOCK_SD_WriteBlock(SDMMC_BLOCK_t *const obj,
+ const uint8_t *write_buf,
+ uint32_t sector_num,
+ uint8_t sector_count)
+{
+ SDMMC_BLOCK_MODE_STATUS_t status;
+ uint8_t disk_status;
+ SDMMC_BLOCK_STATUS_t res;
+
+ /* Get card state */
+ disk_status = obj->card_state;
+
+ /* If the card is not initialized */
+ if ((disk_status & (uint8_t)SDMMC_BLOCK_CARD_STATE_NOT_INITIALIZED) != (uint8_t)0U)
+ {
+ res = SDMMC_BLOCK_STATUS_NOTRDY;
+ }
+ else if ((disk_status & (uint8_t)SDMMC_BLOCK_CARD_STATE_LOCKED) != (uint8_t)0U)
+ {
+ res = SDMMC_BLOCK_STATUS_LOCKED;
+ }
+ /* If the card is read only or write protected */
+ else if ((disk_status & (uint8_t)SDMMC_BLOCK_CARD_STATE_WRITE_PROTECTED) != (uint8_t)0U)
+ {
+ res = SDMMC_BLOCK_STATUS_WRPRT;
+ }
+#ifdef SDMMC_BLOCK_CARD_WRITE_PROTECT_SIGNAL
+ else if ((obj->sdwc != NULL) && (XMC_GPIO_GetInput(obj->sdwc->port, obj->sdwc->pin)))
+ {
+ res = SDMMC_BLOCK_STATUS_WRPRT;
+ }
+#endif /* SDMMC_BLOCK_CARD_WRITE_PROTECT_SIGNAL */
+ else
+ {
+ /* Check for single block write or multiple block write */
+ if (sector_count == (uint8_t)1U)
+ {
+ status = SDMMC_BLOCK_SD_lCardWriteSingleBlock(obj, (const uint32_t *)write_buf, sector_num);
+ }
+ else
+ {
+ status = SDMMC_BLOCK_SD_lCardWriteMultipleBlocks(obj,
+ (const uint32_t *)write_buf,
+ sector_num,
+ (uint32_t)sector_count);
+ }
+
+ if ((status == SDMMC_BLOCK_MODE_STATUS_SUCCESS) || (status == SDMMC_BLOCK_MODE_STATUS_BUFFER_READY))
+ {
+ res = SDMMC_BLOCK_STATUS_SUCCESS;
+ }
+ else if (status == SDMMC_BLOCK_MODE_STATUS_SECTOR_OUT_OF_BOUND)
+ {
+ res = SDMMC_BLOCK_STATUS_PARERR;
+ }
+ else
+ {
+ res = SDMMC_BLOCK_STATUS_FAILURE;
+ }
+ }
+
+ /* Wait for until the command OR data lines aren't busy */
+ while ((XMC_SDMMC_IsDataLineBusy(obj->sdmmc_sd->sdmmc)) || (XMC_SDMMC_IsCommandLineBusy(obj->sdmmc_sd->sdmmc)))
+ {
+ }
+
+ return res;
+}
+
+#endif /* SDMMC_BLOCK_SD */
+
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/lib/FatFS/SDMMC_BLOCK/sdmmc_block_private_sd.h b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/lib/FatFS/SDMMC_BLOCK/sdmmc_block_private_sd.h
new file mode 100644
index 00000000..6bec7078
--- /dev/null
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/lib/FatFS/SDMMC_BLOCK/sdmmc_block_private_sd.h
@@ -0,0 +1,263 @@
+/**
+ * @file sdmmc_block_private_sd.h
+ * @date 2016-08-24
+ *
+ * NOTE:
+ * This file is generated by DAVE. Any manual modification done to this file will be lost when the code is regenerated.
+ *
+ * @cond
+ ***********************************************************************************************************************
+ * SDMMC_BLOCK v4.0.22 - Configures the SD host to interface with the SDMMC card.
+ *
+ * Copyright (c) 2016-2017, Infineon Technologies AG
+ * 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 the copyright holders nor the names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY,OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes
+ * with Infineon Technologies AG (dave@infineon.com).
+ ***********************************************************************************************************************
+ *
+ * Change History
+ * --------------
+ *
+ * 2016-01-20:
+ * - Initial version.
+ *
+ * 2016-02-08:
+ * - Help Doc updated.
+ * - Bug fixes done.
+ *
+ * 2016-04-05:
+ * - MISRA fixes
+ *
+ * @endcond
+ *
+ */
+
+
+#ifndef SDMMC_BLOCK_SD_H
+#define SDMMC_BLOCK_SD_H
+
+/***********************************************************************************************************************
+ * HEADER FILES
+ **********************************************************************************************************************/
+
+#include
+#include "sdmmc_block.h"
+
+#ifdef SDMMC_BLOCK_SD
+
+/***********************************************************************************************************************
+ * LOCAL DATA
+ **********************************************************************************************************************/
+
+extern const XMC_SDMMC_COMMAND_t sdmmc_block_command[40];
+extern const uint8_t sdmmc_block_sd_hash_table[65];
+
+/***********************************************************************************************************************
+ * MACROS
+ **********************************************************************************************************************/
+
+/**
+ * @brief This structure stores the command register fields.
+ */
+#define SDMMC_BLOCK_COMMON_COMMAND(c) sdmmc_block_command[sdmmc_block_sd_hash_table[c]]
+#define SDMMC_BLOCK_SD_COMMAND(c) SDMMC_BLOCK_COMMON_COMMAND(c)
+
+#define SDMMC_BLOCK_ERROR_CMD_STATUS_BITMASK (0x000FU) /* Command line Int errors status bit-mask */
+#define SDMMC_BLOCK_ERROR_DATA_STATUS_BITMASK (0x0070U) /* Data line Error status bitmask */
+#define SDMMC_BLOCK_TX_BLOCK_SIZE_VALUE (0x0200U) /* Transfer block register */
+#define SDMMC_BLOCK_HC_RESPONSE1_BITPOS (0x10U) /* Response register */
+#define SDMMC_BLOCK_SWITCH_FUNC_GRP1_STATUS_BITMASK (0x0000000FU) /* Switch speed function bit-mask */
+#define SDMMC_BLOCK_SWITCH_FUNC_GRP1_STATUS_BITPOS (0x0U) /* Switch speed function bit-position */
+
+/*
+ * Append by 3 zeros since the SYSTIMER APP takes
+ * time in microseconds
+ */
+#define SDMMC_BLOCK_CARD_POWER_DELAY (20000U) /* Card power delay */
+#define SDMMC_BLOCK_DELAY_IN_TRANSFER (1000000U) /* Transfer delay */
+#define SDMMC_BLOCK_RESET_IN_DATA_TRANSFER (1000000U) /* Reset in data transfer */
+#define SDMMC_BLOCK_DELAY_IN_COMMAND (1000000U) /* Command delay */
+#define SDMMC_BLOCK_RESET_DELAY (500000U) /* Reset delay */
+#define SDMMC_BLOCK_CLOCK_STABLE_DELAY (1000000U) /* Clock stable delay */
+
+#define SDMMC_BLOCK_NUM_CARD_RESET_RETRIES (2U) /* Number of reset retries at card init */
+#define SDMMC_BLOCK_BLOCK_SIZE (512U) /* Block Size in bytes */
+#define SDMMC_BLOCK_NUM_QUADLETS_IN_BLOCK (SDMMC_BLOCK_BLOCK_SIZE >> 2U) /* Block size in quad bytes */
+
+/* Command index */
+#define SDMMC_BLOCK_GO_IDLE_STATE (0x00U) /* CMD0 */
+#define SDMMC_BLOCK_MMC_SEND_OP_COND (0x01U) /* MMC CMD1 */
+#define SDMMC_BLOCK_ALL_SEND_CID (0x02U) /* CMD2 */
+#define SDMMC_BLOCK_SEND_RELATIVE_ADDR (0x03U) /* CMD3 */
+#define SDMMC_BLOCK_SET_DSR (0x04U) /* CMD4 */
+#define SDMMC_BLOCK_MMC_SLEEP_AWAKE (0x05U) /* MMC CMD5 */
+#define SDMMC_BLOCK_SWITCH_FUNC (0x06U) /* CMD6 */
+#define SDMMC_BLOCK_SELECT_DESELECT_CARD (0x07U) /* CMD7 */
+#define SDMMC_BLOCK_SD_SEND_IF_COND (0x08U) /* SD CMD8 */
+#define SDMMC_BLOCK_MMC_SEND_EXT_CSD (0x08U) /* MMC CMD8 */
+#define SDMMC_BLOCK_SEND_CSD (0x09U) /* CMD9 */
+#define SDMMC_BLOCK_SEND_CID (0x0AU) /* CMD10 */
+#define SDMMC_BLOCK_STOP_TRANSMISSION (0x0CU) /* CMD12 */
+#define SDMMC_BLOCK_SEND_STATUS (0x0DU) /* CMD13 */
+#define SDMMC_BLOCK_GO_INACTIVE_STATE (0x0FU) /* CMD15 */
+#define SDMMC_BLOCK_SET_BLOCKLEN (0x10U) /* CMD16 */
+#define SDMMC_BLOCK_READ_SINGLE_BLOCK (0x11U) /* CMD17 */
+#define SDMMC_BLOCK_READ_MULTIPLE_BLOCK (0x12U) /* CMD18 */
+#define SDMMC_BLOCK_WRITE_BLOCK (0x18U) /* CMD24 */
+#define SDMMC_BLOCK_WRITE_MULTIPLE_BLOCK (0x19U) /* CMD25 */
+#define SDMMC_BLOCK_PROGRAM_CSD (0x1BU) /* CMD27 */
+#define SDMMC_BLOCK_SET_WRITE_PROT (0x1CU) /* CMD28 */
+#define SDMMC_BLOCK_CLR_WRITE_PROT (0x1DU) /* CMD29 */
+#define SDMMC_BLOCK_SEND_WRITE_PROT (0x1EU) /* CMD30 */
+#define SDMMC_BLOCK_ERASE_WR_BLK_START (0x20U) /* CMD32 */
+#define SDMMC_BLOCK_ERASE_WR_BLK_END (0x21U) /* CMD33 */
+#define SDMMC_BLOCK_ERASE_GROUP_START (0x23U) /* CMD35 */
+#define SDMMC_BLOCK_ERASE_GROUP_END (0x24U) /* CMD36 */
+#define SDMMC_BLOCK_ERASE (0x26U) /* CMD38 */
+#define SDMMC_BLOCK_LOCK_UNLOCK (0x2AU) /* CMD42 */
+#define SDMMC_BLOCK_APP_CMD (0x37U) /* CMD55 */
+#define SDMMC_BLOCK_GEN_CMD (0x38U) /* CMD56 */
+#define SDMMC_BLOCK_SET_BUS_WIDTH (0x06U) /* ACMD6 */
+#define SDMMC_BLOCK_SD_STATUS (0x0DU) /* ACMD13 */
+#define SDMMC_BLOCK_SEND_NUM_WR_BLOCKS (0x16U) /* ACMD22 */
+#define SDMMC_BLOCK_SET_WR_BLK_ERASE_COUNT (0x17U) /* ACMD23 */
+#define SDMMC_BLOCK_SD_SEND_OP_COND (0x29U) /* ACMD41 */
+#define SDMMC_BLOCK_SET_CLR_CARD_DETECT (0x2AU) /* ACMD42 */
+#define SDMMC_BLOCK_SEND_SCR (0x33U) /* ACMD51 */
+
+/* Start of Card Status Register i.e CSR Error Bits bitmask */
+#define SDMMC_BLOCK_SD_CSR_OUT_OF_RANGE_BITMASK (0x80000000U)
+#define SDMMC_BLOCK_SD_CSR_ADDRESS_ERROR_BITMASK (0x40000000U)
+#define SDMMC_BLOCK_SD_CSR_BLOCK_LEN_ERROR_BITMASK (0x20000000U)
+#define SDMMC_BLOCK_SD_CSR_ERASE_SEQ_ERROR_BITMASK (0x10000000U)
+#define SDMMC_BLOCK_SD_CSR_ERASE_PARAM_BITMASK (0x08000000U)
+#define SDMMC_BLOCK_SD_CSR_WP_VIOLATION_BITMASK (0x04000000U)
+#define SDMMC_BLOCK_SD_CSR_LOCK_UNLOCK_FAILED_BITMASK (0x01000000U)
+#define SDMMC_BLOCK_SD_CSR_COM_CRC_ERROR_BITMASK (0x00800000U)
+#define SDMMC_BLOCK_SD_CSR_ILLEGAL_COMMAND_BITMASK (0x00400000U)
+#define SDMMC_BLOCK_SD_CSR_CARD_ECC_FAILED_BITMASK (0x00200000U)
+#define SDMMC_BLOCK_SD_CSR_CC_ERROR_BITMASK (0x00100000U)
+#define SDMMC_BLOCK_SD_CSR_ERROR_BITMASK (0x00080000U)
+#define SDMMC_BLOCK_SD_CSR_CSD_OVERWRITE_BITMASK (0x00010000U)
+#define SDMMC_BLOCK_SD_CSR_WP_ERASE_SKIP_BITMASK (0x00008000U)
+#define SDMMC_BLOCK_SD_SWITCH_ERROR_BITMASK (0x00000080U)
+#define SDMMC_BLOCK_SD_CSR_ASK_SEQ_ERROR_BITMASK (0x00000008U)
+#define SDMMC_BLOCK_SD_CSR_CARD_IS_LOCKED_BITMASK (0x02000000U)
+#define SDMMC_BLOCK_SD_CSR_CURRENT_STATE_BITMASK (0x00001D00U)
+#define SDMMC_BLOCK_SD_CSR_CURRENT_STATE_BITPOS (0x00000009U)
+#define SDMMC_BLOCK_SD_CSR_CURRENT_STATE_TRANS_VALUE (0x00000004U)
+#define SDMMC_BLOCK_SD_CSR_CARD_IS_LOCKED_BITMASK (0x02000000U)
+
+/* Normal and error interrupt status defines */
+#define SDMMC_BLOCK_NORMAL_INT_STATUS_ENABLE (0x00F3U)
+#define SDMMC_BLOCK_ERROR_INT_STATUS_ENABLE (0xE0FFU)
+#define SDMMC_BLOCK_NORMAL_INT_SIGNAL_ENABLE (0x0033U)
+#define SDMMC_BLOCK_ERROR_INT_SIGNAL_ENABLE (0xE0FFU)
+
+/***********************************************************************************************************************
+ * ENUMS
+ **********************************************************************************************************************/
+
+/***********************************************************************************************************************
+ * DATA STRUCTURES
+ **********************************************************************************************************************/
+
+/***********************************************************************************************************************
+ * API PROTOTYPES
+ **********************************************************************************************************************/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_GetLockStatus(SDMMC_BLOCK_t *const obj, SDMMC_BLOCK_CARD_LOCK_STATUS_t *lock_stat);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_CardIdentificationProcess(SDMMC_BLOCK_t *const obj);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_GetSdStatus(SDMMC_BLOCK_t *const obj, void *buf);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_GetSectorCount(SDMMC_BLOCK_t *const obj, void *buf);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_GetCid(SDMMC_BLOCK_t *const obj, void *buf);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_GetOcr(SDMMC_BLOCK_t *const obj, void *buf);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_GetCsd(SDMMC_BLOCK_t *const obj, void *buf);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_GetCardType(SDMMC_BLOCK_t *const obj, uint32_t *card_type);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_EraseBlock(SDMMC_BLOCK_t *const obj, uint32_t start_addr, uint32_t end_addr);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_GetSectorSize(SDMMC_BLOCK_t *const obj, void *buf);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_GetBlockSize(SDMMC_BLOCK_t *const obj, void *buf);
+
+uint8_t
+SDMMC_BLOCK_SD_GetState(SDMMC_BLOCK_t *const obj);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_Init(SDMMC_BLOCK_t *const obj);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_CheckLockStatus(SDMMC_BLOCK_t *const obj,
+ SDMMC_BLOCK_CARD_LOCK_STATUS_t mode);
+
+SDMMC_BLOCK_STATUS_t
+SDMMC_BLOCK_SD_ReadBlock(SDMMC_BLOCK_t *const obj,
+ uint8_t *read_buf,
+ uint32_t sector_num,
+ uint8_t sector_count);
+
+SDMMC_BLOCK_STATUS_t
+SDMMC_BLOCK_SD_WriteBlock(SDMMC_BLOCK_t *const obj,
+ const uint8_t *write_buf,
+ uint32_t sector_num,
+ uint8_t sector_count);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_LockUnlockCard(SDMMC_BLOCK_t *const obj,
+ SDMMC_BLOCK_LOCK_STRUCTURE_t *lock,
+ SDMMC_BLOCK_CARD_LOCK_STATUS_t mode);
+
+SDMMC_BLOCK_MODE_STATUS_t
+SDMMC_BLOCK_SD_EjectCard(SDMMC_BLOCK_t *const obj);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifdef SDMMC_BLOCK_SD */
+
+#endif /* SDMMC_BLOCK_SD_H */
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/lib/FatFS/ffconf.h b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/lib/FatFS/ffconf.h
new file mode 100644
index 00000000..c51b9383
--- /dev/null
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/lib/FatFS/ffconf.h
@@ -0,0 +1,266 @@
+/*---------------------------------------------------------------------------/
+/ FatFs - FAT file system module configuration file R0.12 (C)ChaN, 2016
+/---------------------------------------------------------------------------*/
+
+#define _FFCONF 88100 /* Revision ID */
+
+/*---------------------------------------------------------------------------/
+/ Function Configurations
+/---------------------------------------------------------------------------*/
+
+#define _FS_READONLY 0
+/* This option switches read-only configuration. (0:Read/Write or 1:Read-only)
+/ Read-only configuration removes writing API functions, f_write(), f_sync(),
+/ f_unlink(), f_mkdir(), f_chmod(), f_rename(), f_truncate(), f_getfree()
+/ and optional writing functions as well. */
+
+
+#define _FS_MINIMIZE 0
+/* This option defines minimization level to remove some basic API functions.
+/
+/ 0: All basic functions are enabled.
+/ 1: f_stat(), f_getfree(), f_unlink(), f_mkdir(), f_truncate() and f_rename()
+/ are removed.
+/ 2: f_opendir(), f_readdir() and f_closedir() are removed in addition to 1.
+/ 3: f_lseek() function is removed in addition to 2. */
+
+
+#define _USE_STRFUNC 2 /* 0:Disable or 1-2:Enable */
+/* This option switches string functions, f_gets(), f_putc(), f_puts() and
+/ f_printf().
+/
+/ 0: Disable string functions.
+/ 1: Enable without LF-CRLF conversion.
+/ 2: Enable with LF-CRLF conversion. */
+
+
+#define _USE_FIND 0
+/* This option switches filtered directory read functions, f_findfirst() and
+/ f_findnext(). (0:Disable, 1:Enable 2:Enable with matching altname[] too) */
+
+
+#define _USE_MKFS 0
+/* This option switches f_mkfs() function. (0:Disable or 1:Enable) */
+
+
+#define _USE_FASTSEEK 0
+/* This option switches fast seek function. (0:Disable or 1:Enable) */
+
+
+#define _USE_EXPAND 0
+/* This option switches f_expand function. (0:Disable or 1:Enable) */
+
+
+#define _USE_CHMOD 0
+/* This option switches attribute manipulation functions, f_chmod() and f_utime().
+/ (0:Disable or 1:Enable) Also _FS_READONLY needs to be 0 to enable this option. */
+
+
+#define _USE_LABEL 0
+/* This option switches volume label functions, f_getlabel() and f_setlabel().
+/ (0:Disable or 1:Enable) */
+
+
+#define _USE_FORWARD 0
+/* This option switches f_forward() function. (0:Disable or 1:Enable)
+/ To enable it, also _FS_TINY need to be 1. */
+
+
+/*---------------------------------------------------------------------------/
+/ Locale and Namespace Configurations
+/---------------------------------------------------------------------------*/
+
+#define _CODE_PAGE 437
+/* This option specifies the OEM code page to be used on the target system.
+/ Incorrect setting of the code page can cause a file open failure.
+/
+/ 1 - ASCII (No extended character. Non-LFN cfg. only)
+/ 437 - U.S.
+/ 720 - Arabic
+/ 737 - Greek
+/ 771 - KBL
+/ 775 - Baltic
+/ 850 - Latin 1
+/ 852 - Latin 2
+/ 855 - Cyrillic
+/ 857 - Turkish
+/ 860 - Portuguese
+/ 861 - Icelandic
+/ 862 - Hebrew
+/ 863 - Canadian French
+/ 864 - Arabic
+/ 865 - Nordic
+/ 866 - Russian
+/ 869 - Greek 2
+/ 932 - Japanese (DBCS)
+/ 936 - Simplified Chinese (DBCS)
+/ 949 - Korean (DBCS)
+/ 950 - Traditional Chinese (DBCS)
+*/
+
+
+#define _USE_LFN 1 /* 0 to 3 */
+#define _MAX_LFN 255
+/* The _USE_LFN switches the support of long file name (LFN).
+/
+/ 0: Disable support of LFN. _MAX_LFN has no effect.
+/ 1: Enable LFN with static working buffer on the BSS. Always NOT thread-safe.
+/ 2: Enable LFN with dynamic working buffer on the STACK.
+/ 3: Enable LFN with dynamic working buffer on the HEAP.
+/
+/ To enable the LFN, Unicode handling functions (option/unicode.c) must be added
+/ to the project. The working buffer occupies (_MAX_LFN + 1) * 2 bytes and
+/ additional 608 bytes at exFAT enabled. _MAX_LFN can be in range from 12 to 255.
+/ It should be set 255 to support full featured LFN operations.
+/ When use stack for the working buffer, take care on stack overflow. When use heap
+/ memory for the working buffer, memory management functions, ff_memalloc() and
+/ ff_memfree(), must be added to the project. */
+
+
+#define _LFN_UNICODE 0
+/* This option switches character encoding on the API. (0:ANSI/OEM or 1:Unicode)
+/ To use Unicode string for the path name, enable LFN and set _LFN_UNICODE = 1.
+/ This option also affects behavior of string I/O functions. */
+
+
+#define _STRF_ENCODE 3
+/* When _LFN_UNICODE == 1, this option selects the character encoding on the file to
+/ be read/written via string I/O functions, f_gets(), f_putc(), f_puts and f_printf().
+/
+/ 0: ANSI/OEM
+/ 1: UTF-16LE
+/ 2: UTF-16BE
+/ 3: UTF-8
+/
+/ This option has no effect when _LFN_UNICODE == 0. */
+
+
+#define _FS_RPATH 0
+/* This option configures support of relative path.
+/
+/ 0: Disable relative path and remove related functions.
+/ 1: Enable relative path. f_chdir() and f_chdrive() are available.
+/ 2: f_getcwd() function is available in addition to 1.
+*/
+
+
+/*---------------------------------------------------------------------------/
+/ Drive/Volume Configurations
+/---------------------------------------------------------------------------*/
+
+#define _VOLUMES 1
+/* Number of volumes (logical drives) to be used. */
+
+
+#define _STR_VOLUME_ID 0
+#define _VOLUME_STRS "RAM","NAND","CF","SD1","SD2","USB1","USB2","USB3"
+/* _STR_VOLUME_ID switches string support of volume ID.
+/ When _STR_VOLUME_ID is set to 1, also pre-defined strings can be used as drive
+/ number in the path name. _VOLUME_STRS defines the drive ID strings for each
+/ logical drives. Number of items must be equal to _VOLUMES. Valid characters for
+/ the drive ID strings are: A-Z and 0-9. */
+
+
+#define _MULTI_PARTITION 0
+/* This option switches support of multi-partition on a physical drive.
+/ By default (0), each logical drive number is bound to the same physical drive
+/ number and only an FAT volume found on the physical drive will be mounted.
+/ When multi-partition is enabled (1), each logical drive number can be bound to
+/ arbitrary physical drive and partition listed in the VolToPart[]. Also f_fdisk()
+/ funciton will be available. */
+
+
+#define _MIN_SS 512
+#define _MAX_SS 512
+/* These options configure the range of sector size to be supported. (512, 1024,
+/ 2048 or 4096) Always set both 512 for most systems, all type of memory cards and
+/ harddisk. But a larger value may be required for on-board flash memory and some
+/ type of optical media. When _MAX_SS is larger than _MIN_SS, FatFs is configured
+/ to variable sector size and GET_SECTOR_SIZE command must be implemented to the
+/ disk_ioctl() function. */
+
+
+#define _USE_TRIM 0
+/* This option switches support of ATA-TRIM. (0:Disable or 1:Enable)
+/ To enable Trim function, also CTRL_TRIM command should be implemented to the
+/ disk_ioctl() function. */
+
+
+#define _FS_NOFSINFO 0
+/* If you need to know correct free space on the FAT32 volume, set bit 0 of this
+/ option, and f_getfree() function at first time after volume mount will force
+/ a full FAT scan. Bit 1 controls the use of last allocated cluster number.
+/
+/ bit0=0: Use free cluster count in the FSINFO if available.
+/ bit0=1: Do not trust free cluster count in the FSINFO.
+/ bit1=0: Use last allocated cluster number in the FSINFO if available.
+/ bit1=1: Do not trust last allocated cluster number in the FSINFO.
+*/
+
+
+
+/*---------------------------------------------------------------------------/
+/ System Configurations
+/---------------------------------------------------------------------------*/
+
+#define _FS_TINY 0
+/* This option switches tiny buffer configuration. (0:Normal or 1:Tiny)
+/ At the tiny configuration, size of the file object (FIL) is reduced _MAX_SS bytes.
+/ Instead of private sector buffer eliminated from the file object, common sector
+/ buffer in the file system object (FATFS) is used for the file data transfer. */
+
+
+#define _FS_EXFAT 0
+/* This option switches support of exFAT file system in addition to the traditional
+/ FAT file system. (0:Disable or 1:Enable) To enable exFAT, also LFN must be enabled.
+/ Note that enabling exFAT discards C89 compatibility. */
+
+
+#define _FS_NORTC 1
+#define _NORTC_MON 3
+#define _NORTC_MDAY 1
+#define _NORTC_YEAR 2016
+/* The option _FS_NORTC switches timestamp functiton. If the system does not have
+/ any RTC function or valid timestamp is not needed, set _FS_NORTC = 1 to disable
+/ the timestamp function. All objects modified by FatFs will have a fixed timestamp
+/ defined by _NORTC_MON, _NORTC_MDAY and _NORTC_YEAR in local time.
+/ To enable timestamp function (_FS_NORTC = 0), get_fattime() function need to be
+/ added to the project to get current time form real-time clock. _NORTC_MON,
+/ _NORTC_MDAY and _NORTC_YEAR have no effect.
+/ These options have no effect at read-only configuration (_FS_READONLY = 1). */
+
+
+#define _FS_LOCK 0
+/* The option _FS_LOCK switches file lock function to control duplicated file open
+/ and illegal operation to open objects. This option must be 0 when _FS_READONLY
+/ is 1.
+/
+/ 0: Disable file lock function. To avoid volume corruption, application program
+/ should avoid illegal open, remove and rename to the open objects.
+/ >0: Enable file lock function. The value defines how many files/sub-directories
+/ can be opened simultaneously under file lock control. Note that the file
+/ lock control is independent of re-entrancy. */
+
+
+#define _FS_REENTRANT 0
+#define _FS_TIMEOUT 1000
+#define _SYNC_t HANDLE
+/* The option _FS_REENTRANT switches the re-entrancy (thread safe) of the FatFs
+/ module itself. Note that regardless of this option, file access to different
+/ volume is always re-entrant and volume control functions, f_mount(), f_mkfs()
+/ and f_fdisk() function, are always not re-entrant. Only file/directory access
+/ to the same volume is under control of this function.
+/
+/ 0: Disable re-entrancy. _FS_TIMEOUT and _SYNC_t have no effect.
+/ 1: Enable re-entrancy. Also user provided synchronization handlers,
+/ ff_req_grant(), ff_rel_grant(), ff_del_syncobj() and ff_cre_syncobj()
+/ function, must be added to the project. Samples are available in
+/ option/syscall.c.
+/
+/ The _FS_TIMEOUT defines timeout period in unit of time tick.
+/ The _SYNC_t defines O/S dependent sync object type. e.g. HANDLE, ID, OS_EVENT*,
+/ SemaphoreHandle_t and etc.. A header file for O/S definitions needs to be
+/ included somewhere in the scope of ff.c. */
+
+
+/*--- End of configuration options ---*/
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/lib/FatFS/mmc.c b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/lib/FatFS/mmc.c
new file mode 100644
index 00000000..9a22012e
--- /dev/null
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/lib/FatFS/mmc.c
@@ -0,0 +1,217 @@
+/*------------------------------------------------------------------------/
+/ MMCv3/SDv1/SDv2 (in SDIO mode) control module
+/-------------------------------------------------------------------------/
+/
+/ Copyright (C) 2013, ChaN, all right reserved.
+/
+/ * This software is a free software and there is NO WARRANTY.
+/ * No restriction on use. You can use, modify and redistribute it for
+/ personal, non-profit or commercial products UNDER YOUR RESPONSIBILITY.
+/ * Redistributions of source code must retain the above copyright notice.
+/
+/-------------------------------------------------------------------------*/
+
+
+/*
+ * This file was modified from a sample available from the FatFs
+ * web site. It was modified to work with a Infineon XMC4700 Relax Kit
+ * evaluation board. It is based on the DAVE 4 SDMMC_BLOCK app, which was modified
+ * to work with an existing timer and for operation in polling mode.
+ *
+ */
+#include "diskio.h"
+#include "boot.h"
+#include "sdmmc_block.h"
+
+
+static volatile
+DSTATUS Stat = STA_NOINIT; /* Disk status */
+
+const
+DRESULT FATFS_errorcodes[5] = {
+ RES_OK ,
+ RES_ERROR,
+ RES_WRPRT,
+ RES_NOTRDY,
+ RES_PARERR
+ };
+const
+DSTATUS FATFS_statuscodes[4] = {
+ (DSTATUS)0,
+ (DSTATUS)STA_NOINIT,
+ (DSTATUS)STA_NODISK,
+ (DSTATUS)STA_PROTECT
+ };
+
+/*--------------------------------------------------------------------------
+
+ Public Functions
+
+---------------------------------------------------------------------------*/
+
+
+/*-----------------------------------------------------------------------*/
+/* Initialize Disk Drive */
+/*-----------------------------------------------------------------------*/
+
+DSTATUS disk_initialize (
+ BYTE pdrv /* Physical drive number (0) */
+)
+{
+ DSTATUS diskstatus;
+ uint32_t status;
+
+ /* Make sure the SDMMC block is initialized. Note that it has a protection
+ * against mutiple initialization.
+ */
+ SDMMC_BLOCK_Init(&SDMMC_BLOCK_0);
+
+ /* If drive number is greater than the maximum drives allowed */
+ if (pdrv > 0)
+ {
+ diskstatus = (DSTATUS)((uint8_t)STA_NODISK | (uint8_t)STA_NOINIT);
+ }
+ else
+ {
+ /* Call the Initialize function. */
+ status = SDMMC_BLOCK_Initialize(&SDMMC_BLOCK_0);
+ /* Fatfs to Device Abstraction Layer Error Code Mapping */
+ diskstatus = FATFS_statuscodes[status];
+ }
+
+ return (diskstatus);
+}
+
+
+
+/*-----------------------------------------------------------------------*/
+/* Get Disk Status */
+/*-----------------------------------------------------------------------*/
+
+DSTATUS disk_status (
+ BYTE pdrv /* Physical drive nmuber (0) */
+)
+{
+ DSTATUS diskstatus;
+ uint32_t status;
+
+ /* If drive number is greater than the maximum drives allowed */
+ if (pdrv > 0)
+ {
+ diskstatus = (DSTATUS)((uint8_t)STA_NODISK | (uint8_t)STA_NOINIT);
+ }
+ else
+ {
+ /* Call the Initialize function.*/
+ status = SDMMC_BLOCK_GetStatus(&SDMMC_BLOCK_0);
+ /* Fatfs to Block Layer Error Code Mapping */
+ diskstatus = FATFS_statuscodes[status];
+ }
+ return (diskstatus);
+}
+
+
+
+/*-----------------------------------------------------------------------*/
+/* Read Sector(s) */
+/*-----------------------------------------------------------------------*/
+
+DRESULT disk_read (
+ BYTE pdrv, /* Physical drive nmuber to identify the drive */
+ BYTE *buff, /* Data buffer to store read data */
+ DWORD sector, /* Sector address in LBA */
+ UINT count /* Number of sectors to read */
+)
+{
+ DRESULT diskresult;
+ uint32_t result;
+
+ /* If drive number is greater than the maximum drives allowed */
+ if (pdrv > 0)
+ {
+ diskresult = RES_PARERR;
+ }
+ /* If sector count is less than 1. Minimum 1 sector is needed*/
+ else if (count < (uint8_t)1)
+ {
+ diskresult = RES_PARERR;
+ }
+ /*Call the ReadBlk function.*/
+ else
+ {
+ result = (uint32_t)SDMMC_BLOCK_ReadBlock(&SDMMC_BLOCK_0, (uint8_t *)buff,
+ (uint32_t)sector, count);
+
+ /* FatFs to Device Abstraction Layer Error Code Mapping */
+ diskresult = FATFS_errorcodes[result];
+ }
+ return (diskresult);
+}
+
+
+
+/*-----------------------------------------------------------------------*/
+/* Write Sector(s) */
+/*-----------------------------------------------------------------------*/
+
+DRESULT disk_write (
+ BYTE pdrv, /* Physical drive nmuber to identify the drive */
+ const BYTE *buff, /* Data to be written */
+ DWORD sector, /* Sector address in LBA */
+ UINT count /* Number of sectors to write */
+)
+{
+ DRESULT diskresult;
+ uint32_t result;
+
+ /* If drive number is greater than the maximum drives allowed */
+ if (pdrv > 0)
+ {
+ diskresult = RES_PARERR;
+ }
+ /* If sector count is less than 1. Minimum 1 sector is needed*/
+ else if (count < (uint8_t)1)
+ {
+ diskresult = RES_PARERR;
+ }
+ /*Call the WriteBlk function.*/
+ else
+ {
+ result = (uint32_t)SDMMC_BLOCK_WriteBlock(&SDMMC_BLOCK_0,(uint8_t *)buff,
+ (uint32_t)sector, count);
+ /* FatFs to Device Abstraction Layer Error Code Mapping */
+ diskresult = FATFS_errorcodes[result];
+ }
+ return (diskresult);
+}
+
+
+
+/*-----------------------------------------------------------------------*/
+/* Miscellaneous Functions */
+/*-----------------------------------------------------------------------*/
+
+DRESULT disk_ioctl (
+ BYTE pdrv, /* Physical drive nmuber (0) */
+ BYTE cmd, /* Control code */
+ void *buff /* Buffer to send/receive data block */
+)
+{
+ DRESULT diskresult;
+ uint32_t result;
+ if (pdrv > 0)
+ {
+ diskresult = RES_PARERR;
+ }
+ /*Call the Ioctl function.*/
+ else
+ {
+ result = SDMMC_BLOCK_Ioctl(&SDMMC_BLOCK_0, cmd, buff);
+ /* FatFs to Block Layer Error Code Mapping */
+ diskresult = FATFS_errorcodes[result];
+ }
+ return (diskresult);
+}
+
+
+
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/main.c b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/main.c
index f4a361a4..5bfa6f52 100644
--- a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/main.c
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Boot/main.c
@@ -108,11 +108,31 @@ void main(void)
****************************************************************************************/
static void Init(void)
{
+#if (BOOT_FILE_LOGGING_ENABLE > 0) && (BOOT_COM_UART_ENABLE == 0)
+ XMC_UART_CH_CONFIG_t uart_config;
+#endif
+
/* initialize LED1 on P5.9 as digital output */
XMC_GPIO_SetMode(P5_9, XMC_GPIO_MODE_OUTPUT_PUSH_PULL);
/* initialize BUTTON1 as digital input. */
XMC_GPIO_SetMode(P15_13, XMC_GPIO_MODE_INPUT_TRISTATE);
XMC_GPIO_EnableDigitalInput(P15_13);
+
+#if (BOOT_FILE_LOGGING_ENABLE > 0) && (BOOT_COM_UART_ENABLE == 0)
+ /* set configuration and initialize UART channel */
+ uart_config.baudrate = BOOT_COM_UART_BAUDRATE;
+ uart_config.data_bits = 8;
+ uart_config.frame_length = 8;
+ uart_config.stop_bits = 1;
+ uart_config.oversampling = 16;
+ uart_config.parity_mode = XMC_USIC_CH_PARITY_MODE_NONE;
+ XMC_UART_CH_Init(XMC_UART0_CH0, &uart_config);
+ /* configure small transmit and receive FIFO */
+ XMC_USIC_CH_TXFIFO_Configure(XMC_UART0_CH0, 16U, XMC_USIC_CH_FIFO_SIZE_16WORDS, 1U);
+ XMC_USIC_CH_RXFIFO_Configure(XMC_UART0_CH0, 0U, XMC_USIC_CH_FIFO_SIZE_16WORDS, 1U);
+ /* start UART */
+ XMC_UART_CH_Start(XMC_UART0_CH0);
+#endif
} /*** end of Init ***/
@@ -124,7 +144,7 @@ static void Init(void)
****************************************************************************************/
static void PostInit(void)
{
-#if (BOOT_COM_UART_ENABLE > 0)
+#if (BOOT_COM_UART_ENABLE > 0) || (BOOT_FILE_LOGGING_ENABLE > 0)
XMC_GPIO_CONFIG_t rx_uart_config;
XMC_GPIO_CONFIG_t tx_uart_config;
#endif
@@ -133,7 +153,7 @@ static void PostInit(void)
XMC_GPIO_CONFIG_t tx_can_config;
#endif
-#if (BOOT_COM_UART_ENABLE > 0)
+#if (BOOT_COM_UART_ENABLE > 0) || (BOOT_FILE_LOGGING_ENABLE > 0)
/* initialize UART Rx pin */
rx_uart_config.mode = XMC_GPIO_MODE_INPUT_TRISTATE;
rx_uart_config.output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH;
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/bin/demoprog_xmc4700.out b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/bin/demoprog_xmc4700.out
index db48c4aa..3629b2be 100644
Binary files a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/bin/demoprog_xmc4700.out and b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/bin/demoprog_xmc4700.out differ
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/bin/demoprog_xmc4700.srec b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/bin/demoprog_xmc4700.srec
index b2d48fa7..ee4b3e31 100644
--- a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/bin/demoprog_xmc4700.srec
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/bin/demoprog_xmc4700.srec
@@ -1,1053 +1,1053 @@
S018000064656D6F70726F675F786D63343730302E737265633D
-S315080080008890FE1F79BF0008C1BF0008C5BF0008D9
-S31508008010C9BF0008CDBF0008D1BF00080000000096
-S31508008020000000000000000000000000D5BF0008A6
-S31508008030D9BF000800000000DDBF000887A40008BB
-S31508008040E1BF0008E5BF0008E9BF0008EDBF00086A
-S31508008050F1BF0008F5BF0008F9BF0008FDBF00081A
-S3150800806001C0000800000000000000000000000039
-S3150800807005C000080000000009C000080DC000087F
-S3150800808011C0000815C0000819C000081DC0000866
-S3150800809021C0000825C0000829C000082DC0000816
-S315080080A031C0000835C0000839C000083DC00008C6
-S315080080B041C0000845C0000849C000084DC0000876
-S315080080C051C0000855C0000859C000085DC0000826
-S315080080D061C0000865C0000869C000086DC00008D6
-S315080080E071C0000875C0000879C000087DC0000886
-S315080080F081C0000885C0000889C000088DC0000836
-S3150800810091C0000895C0000899C000089DC00008E5
-S31508008110A1C00008A5C00008A9C00008ADC0000895
-S31508008120B1C00008B5C00008B9C00008BDC0000845
-S31508008130C1C00008C5C00008C9C00008CDC00008F5
-S31508008140D1C00008D5C00008D9C00008DDC00008A5
-S31508008150E1C00008E5C00008E9C00008EDC0000855
-S315080081600000000000000000000000000000000001
-S31508008170F1C00008F5C00008F9C00008FDC00008F5
-S3150800818001C1000805C1000809C100080DC10008A1
-S3150800819011C1000815C1000819C100081DC1000851
-S315080081A021C1000825C1000829C100082DC1000801
-S315080081B031C1000835C1000839C100083DC10008B1
-S315080081C041C1000845C1000849C100084DC1000861
-S315080081D051C1000855C1000859C100080000000037
-S315080081E05DC1000861C1000865C1000869C10008D1
-S315080081F06DC100080000000071C100080000000001
-S31508008200EE11AA55C2788A18DFF83833DA708378FF
-S315080082100A0092B2120AD218DFF828339A70427806
-S31508008220DFF820335A700078DFF818231070DFF86B
-S3150800823014038278080080B2000A80B2824212DAF9
-S31508008240DFF800034078401CDFF8F8225070DFF8AA
-S31508008250F4024078002806D1DFF8E8020078401CCE
-S31508008260DFF8E0221070DFF8DC02C07889B201F08E
-S31508008270FF0188421EDADFF8CC028078401CDFF85E
-S31508008280C4128870DFF8BC028078002812D1DFF8A3
-S31508008290B4024078401CDFF8AC124870DFF8A4023C
-S315080082A04078002806D1DFF89C020078401CDFF8E9
-S315080082B094120870704710B492B20A44531E0BE029
-S315080082C00A7812024C78121910180400A4B292B255
-S315080082D0944200D2401C891C9942F1D3994208D194
-S315080082E009780A021018010089B292B2914200D2A6
-S315080082F0401C80B210BC704780B51422DFF84812C3
-S315080083000020FFF7D8FF80B2002802D14FF6FF7091
-S3150800831002E080B201F036FA80B202BD10B5DFF88D
-S315080083202C12097C0902DFF82422527C8918B1F143
-S31508008330140454FA80F00822DFF8141280B2FFF70A
-S31508008340BAFF220092B2DFF80C1280B2FFF7B3FF31
-S3150800835080B2002802D14FF6FF7002E080B201F029
-S3150800836011FA80B210BD80B50620FFF7D7FF02BD0F
-S315080083700020DFF8E41108700EE00020DFF8DC11B9
-S31508008380DFF8D421127821F81200DFF8CC01007842
-S31508008390401CDFF8C4110870DFF8BC01007800281B
-S315080083A0EBD000206C4908700CE000206C496A4A42
-S315080083B012781E235A431144487667480078401CB1
-S315080083C065490870644800780028EED04FF480604C
-S315080083D0644908800020604908700CE00020624962
-S315080083E05D4A127840235A43114488805A480078D7
-S315080083F0401C59490870584800780028EED0704744
-S3150800840070B504000D000CE057485349097840221E
-S315080084105143084486885348008801F0B3F98642D8
-S3150800842011D150480088401C4E4908804D480088A4
-S31508008430B0F5FA4F03DB4FF480504A490880002014
-S315080084404549087004E044480078401C42490870D1
-S31508008450414800780028D7D0002600203E490870F9
-S3150800846004E03D480078401C3B4908703A480078CB
-S3150800847000280FD13C48384909784022514308441E
-S3150800848080880028EDD1384833490978402251437D
-S3150800849000EB0106002E01D1002018E031480088C3
-S315080084A03049098889B2090A51EA0020B080F58066
-S315080084B0002C05D104210022300001F097F903E0D1
-S315080084C0208830806088708040203072300070BD0F
-S315080084D00021214A117004E01F490978491C1E4AE7
-S315080084E011701D49097800290CD11C491A4A1278BD
-S315080084F031F812100029EFD11849174A127821F8D5
-S315080085001200FFE7704780B5010089B21748006876
-S315080085100830FFF777FE0B48007814490968087297
-S3150800852008484078114909684872064880780F4912
-S31508008530096888720348C0780C490968C87201BD81
-S31508008540000000005088FE1F7E80FE1F7080FE1F00
-S315080085508A80FE1F9280FE1F6888FE1F5C88FE1FA9
-S31508008560F087FE1F6088FE1F5887FE1F4488FE1F7F
-S3150800857010B5DFF8141E0C68C0B2042806D1DFF85F
-S315080085803C0E0088002840F061821DE0DFF8301EAE
-S31508008590DFF8302E1160DFF82C1E0968DFF8282E68
-S315080085A01160C0B2032818D1607E10F00F000328AE
-S315080085B00AD1208A002807D10820DFF8281E08706B
-S315080085C001F094F900F0A9BF0020DFF81C1E08800E
-S315080085D00020DFF8101E087010BDC0B2022840F057
-S315080085E0D180DFF8080EC078401CDFF8001EC8707E
-S315080085F0DFF8F80DC07800281ED1DFF8F00D807876
-S31508008600401CDFF8E81D8870DFF8E00D8078002848
-S3150800861012D1DFF8D80D4078401CDFF8D01D48701D
-S31508008620DFF8C80D4078002806D1DFF8C00D0078BD
-S31508008630401CDFF8B81D08700020DFF8AC1D088064
-S315080086400020DFF8781D0880607E072802D0607E4B
-S31508008650052808D1A07E401CA076A07E782801D1E6
-S3150800866000206076B0E7607E0028FBD0208A0028CC
-S315080086707AD0A07E411EA176C0B20028F2D1E07E53
-S31508008680082808D0607E022802D0607E012810D112
-S31508008690E07E05280DD1002060768020DFF8441D95
-S315080086A0087001F023F91420DFF8B01D81F82F00B7
-S315080086B0B0E2E07E052801DB042000E0E07E03212D
-S315080086C011FA00F0A076E07E401CE076607E10F09D
-S315080086D00F00C0B201280AD0022835D0032839D0A5
-S315080086E004283FD006283DD008283BD0BAE71020FA
-S315080086F0DFF8681D81F82F00DFF8600D90F82F006D
-S3150800870050F00200DFF8541D81F82F000220DFF830
-S315080087104C1D81F836000420DFF8401D81F837002B
-S315080087200620DFF8381D81F838000A20DFF82C1DEE
-S3150800873081F839002C20DFF8B01C08806020DFF8AB
-S315080087401C1D81F82E006EE20020DFF8101D81F84E
-S315080087502F00D1E70420DFF88C1C087001F0C6F85A
-S3150800876000F01FBF00F074BE607E10F00F000328F3
-S315080087707FF478AF0820DFF86C1C087001F0B6F8B3
-S3150800878000F0CBBEC0B2052826D1DFF8040E00687B
-S31508008790808800281FD00020DFF8EC1B0860DFF86F
-S315080087A0F40DDFF8201C0860DFF8180C0068DFF805
-S315080087B0181C08600020DFF8041C0880DFF8FC0B92
-S315080087C00088DFF8241C08800820DFF8181C0870C9
-S315080087D001F0EBFBD3E6F7E6DFF8800C807B452853
-S315080087E07FF4F2AEDFF8000C0088DFF8701C097C15
-S315080087F00902DFF8682C527C8918884216DBDFF8F4
-S315080088005C0C007C0002DFF8541C497C4018DFF839
-S31508008810D81B0880DFF8440C007D3F21084204D1AC
-S31508008820DFF8380C407D002801D0CDE6CCE6DFF82D
-S31508008830B80D0088DFF8B41D0988884207D1DFF82B
-S31508008840A80D4088DFF8A41D4988884210D0DFF8B3
-S315080088500C0CC08BDFF8901D0988884207D1DFF819
-S31508008860FC0B008CDFF8801D4988884200D0ABE6F7
-S31508008870FFF742FD4FF6FF7188427FF4A5AEDFF899
-S31508008880DC0BC07D062809D1FFF76DFD4FF6FF7199
-S31508008890884240F03D81DFF8584D3BE1DFF8BC0BDC
-S315080088A0C07D11280CD1DFF8400B00881C38DFF892
-S315080088B0381B0880DFF8080EDFF8D41C086048E08B
-S315080088C0DFF8980BC07D01287FF47EAEDFF88C0BAD
-S315080088D090F8220008287FF477AE0020DFF87C1B8A
-S315080088E081F82200DFF8740B808C4FF6F771884206
-S315080088F007DBDFF8680B808C0930DFF8601B88849B
-S3150800890006E0DFF8580B808C0830DFF8501B8884A7
-S31508008910DFF8480B408BDFF8441BC883DFF83C0BB5
-S31508008920808BDFF8381B0884DFF8BC0C0088DFF87A
-S315080089302C1B4883DFF8B00C4088DFF8201B88839F
-S3150800894000F019BFDFF8480C00684030DFF8401C1B
-S315080089500860DFF83C0C0068DFF8681D884274D2AE
-S31508008960DFF82C0C006880880028EBD0DFF8EC0ACA
-S31508008970808CDFF81C1C096889888842E2D1DFF8F8
-S31508008980100C0068C08800280FD0DFF8D00A408C89
-S31508008990DFF8FC1B0968C988884206D0DFF8F00BA7
-S315080089A00068C088B0F58A4FCCD1DFF8E40B0068C0
-S315080089B00088DFF8381C0988884208D1DFF8D00B10
-S315080089C000684088DFF8241C4988884223D0DFF8ED
-S315080089D0C00B00680088DFF8A81D0988884208D1FE
-S315080089E0DFF8AC0B00684088DFF8941D4988884298
-S315080089F011D0DFF8680A408BDFF8941B09680988EC
-S31508008A0088429FD1DFF8540A808BDFF8841B0968F7
-S31508008A104988884296D10020DFF86C190860022040
-S31508008A20DFF8C0190870DFF86C0BDFF898190860D2
-S31508008A30DFF890090068DFF8901908600020DFF871
-S31508008A407C19088001F0B1FA99E5BDE5DFF86C09F3
-S31508008A5000881C30DFF890190880DFF88C09008838
-S31508008A6080B2000ADFF8F4190874DFF87C09008878
-S31508008A70DFF8E8194874DFF8180B0068007ADFF8A1
-S31508008A80DC1988751120DFF8D419C875DFF82C09A8
-S31508008A9000880830DFF824190988083189B2090ADC
-S31508008AA051EA0020DFF8B419C8840020DFF8AC19B1
-S31508008AB00885DFF8DC0A00688088DFF8A019488492
-S31508008AC0DFF8CC0A0068C088DFF890198884DFF8D8
-S31508008AD0180B0088DFF884194883DFF80C0B4088E8
-S31508008AE0DFF878198883DFF8A80A00680088DFF8B5
-S31508008AF06C19C883DFF8980A00684088DFF85C19A3
-S31508008B000884DFF8BC08DFF8BC18086000F00FBE60
-S31508008B105AE51E34DFF8D80AA042C0F0DF80607E2E
-S31508008B200028F6D0DFF83409808CA1888842F0D175
-S31508008B30DFF82809408CE1888842EAD1DFF81C0969
-S31508008B40408B21888842E4D1DFF81009808B618840
-S31508008B508842DED1DFF8300804600020DFF8841888
-S31508008B600870DFF8F80890F82F00400700F1CD826A
-S31508008B70DFF8E80890F82E00C0B200098000DFF898
-S31508008B80381C0870DFF860080088DFF82C1C0978A4
-S31508008B90401A1438DFF850180880607E10F00F006D
-S31508008BA0022808D1DFF8B40890F82F0010F03F002B
-S31508008BB0122800F0B382DFF830080088002807D1B1
-S31508008BC0DFF8980890F82F000321084200F0A682E3
-S31508008BD0DFF8880890F82600217A884215D1DFF850
-S31508008BE07C0890F82700617A88420ED1DFF86C0875
-S31508008BF090F82800A17A884207D1DFF8600890F833
-S31508008C002900E17A884200F089821020DFF84C18A2
-S31508008C1081F82F002820DFF8D01708805020DFF8C9
-S31508008C203C1881F82E00207ADFF8301881F82A00DF
-S31508008C30607ADFF8281881F82B00A07ADFF81C186C
-S31508008C4081F82C00E07ADFF8141881F82D00207BD3
-S31508008C50DFF8081881F82600607BDFF8001881F82D
-S31508008C602700A07BDFF8F41781F82800E07BDFF8FF
-S31508008C70EC1781F829000620DFF8E017C875A088E8
-S31508008C80DFF8D8174884E088DFF8D0178884DFF83B
-S31508008C9058090088DFF8C4174883DFF84C0940886C
-S31508008CA0DFF8B81788832088DFF8B017C88360888C
-S31508008CB0DFF8A8170884607EC00640F111850020F9
-S31508008CC0DFF8981781F83100DFF8900790F831003F
-S31508008CD0DFF8881781F8300000F00ABDDFF87C0756
-S31508008CE090F82F0010F03F00022806D0DFF86C0736
-S31508008CF090F82F00400729D566E4DFF86007808CD6
-S31508008D00DFF8B81A08800020DFF8AC1A087006E009
-S31508008D10DFF8A40A0078401CDFF89C1A0870DFF810
-S31508008D20980A00780028E1D1DFF8900A0088DFF871
-S31508008D30901ADFF8842A127831F812108842E7D19F
-S31508008D4000240020DFF8701A0870F0E01420DFF81D
-S31508008D500C1781F82F002820DFF88C160880502081
-S31508008D60DFF8F81681F82E00DFF8F00690F82900EB
-S31508008D70DFF8441A0870DFF8E40690F82D00DFF8EB
-S31508008D80DC1681F82900DFF8300A0078DFF8CC16FF
-S31508008D9081F82D00DFF8C40690F82800DFF8181AC5
-S31508008DA00870DFF8B80690F82C00DFF8B01681F8DE
-S31508008DB02800DFF8040A0078DFF8A01681F82C00EE
-S31508008DC0DFF8980690F82700DFF8EC190870DFF846
-S31508008DD08C0690F82B00DFF8841681F82700DFF858
-S31508008DE0D8090078DFF8741681F82B00DFF86C06CE
-S31508008DF090F82600DFF8C0190870DFF8600690F8CA
-S31508008E002A00DFF8581681F82600DFF8AC09007842
-S31508008E10DFF8481681F82A00DFF8400690F82D009A
-S31508008E20401CDFF8381681F82D00DFF8300690F878
-S31508008E302D00002826D1DFF8240690F82C00401CC7
-S31508008E40DFF8181681F82C00DFF8100690F82C00C9
-S31508008E50002817D1DFF8040690F82B00401CDFF82D
-S31508008E60FC1581F82B00DFF8F40590F82B00002894
-S31508008E7008D1DFF8E80590F82A00401CDFF8DC1571
-S31508008E8081F82A00DFF8D405408CDFF8301908800D
-S31508008E90DFF8C805808CDFF8C4154884DFF81C099C
-S31508008EA00088DFF8B8158884DFF8B005408BDFF84E
-S31508008EB0AC15C883DFF8A405808BDFF8A0150884F5
-S31508008EC0DFF824070088DFF894154883DFF81807C9
-S31508008ED04088DFF88815888300F00ABCDFF8100799
-S31508008EE0DFF8D41809781E2251430844407E072823
-S31508008EF016D1002C0BD0A07EDFF8F416DFF8B828C0
-S31508008F0012781E235A431144897E884208D2DFF814
-S31508008F10E006DFF8A41809781E22514300EB010485
-S31508008F20DFF894080078401CDFF88C180870DFF822
-S31508008F3088080078002813D1DFF8B406DFF8781817
-S31508008F4009781E2251430844407E0028C6D1DFF81E
-S31508008F50A006DFF8641809781E22514300EB0104C5
-S31508008F60002C3FF431ABDFF8200404600320A07620
-S31508008F70A07E20760020A0750420E0750020E0760B
-S31508008F80DFF8D804808CA080DFF8D004408CE0801D
-S31508008F90DFF8C804408B2080DFF8C004808B60802F
-S31508008FA001206076DFF8440400782073DFF83C047B
-S31508008FB040786073DFF834048078A073DFF82C04F7
-S31508008FC0C078E07301202082DFF8900490F8290029
-S31508008FD0E072DFF8880490F82800A072DFF87C04B5
-S31508008FE090F827006072DFF8740490F82600207263
-S31508008FF00120FFF788FADFF8640490F82E0010F0D5
-S31508009000F0005128FFF673AB0020DFF8AC170870A4
-S3150800901006E0DFF8A4070078401CDFF89C17087004
-S31508009020DFF894070078DFF8341491F82E10C9B2E7
-S315080090300909C9B2491FB0EB810FBFF658ABDFF873
-S315080090401C04DFF874170978084490F83600DFF82E
-S3150800905074170870DFF86C07007800283FF447ABF0
-S31508009060DFF8600700780128D3D0DFF858070078C2
-S3150800907002282FD1DFF8E403DFF83C170978084403
-S3150800908090F83700042825D1DFF8D003DFF8281731
-S315080090900978084490F83800DFF8C013DFF8182775
-S315080090A01278114491F8391051EA0020DFF80C17AC
-S315080090B00880DFF80807008840F20B61884202DB67
-S315080090C040F20A6002E0DFF8F40600886082A082B7
-S315080090D0FFF70DBBDFF88403DFF8DC1609780844D0
-S315080090E090F8370000283FF402ABDFF8CC0600788A
-S315080090F0DFF86813DFF8C0261278114491F83710A4
-S315080091000818DFF8B41608708AE700206076202071
-S31508009110B449087000F0EAFBFFF756BACF4890F852
-S315080091202F00C0065FD5208A00285CD0218A14F15A
-S315080091300C00FFF767F8C94890F82A00DFF8881688
-S31508009140097888424FD1C54890F82B00DFF8781681
-S315080091504978884247D1C14890F82C00DFF868164C
-S31508009160897888423FD1BD4890F82D00DFF8581617
-S31508009170C978884237D1DFF8500600782073DFF8BF
-S31508009180480640786073DFF840068078A073DFF8F9
-S315080091903806C078E073E07E00281DD194F91800DF
-S315080091A094F91A10401AA17DC9B2B0EBD100A17D7D
-S315080091B04118A17540B2002801D540B24042E17D70
-S315080091C0C9B2B0EB9100E17D4018E075A07DC0B250
-S315080091D0E17D11EBD0002076012082490870207EBF
-S315080091E0A07600202082607E10F00F00C0B2012811
-S315080091F013D0C0F07382032800F0FA802ED3052816
-S3150800920000F03B82C0F00482072800F05D82C0F0BF
-S315080092105D82082800F0F08160E272480078C00795
-S315080092201AD50320607640206E49087000202082F7
-S315080092306D480088002809D06A48007850F0020076
-S315080092406849087068480088FFF75DF900205B499F
-S31508009250088000F04BFB60E1FFF7B6B9614800787B
-S31508009260C00740F1B3807D4890F82F0010F03F000A
-S31508009270122840F0AB80794890F82E0010F0F000E4
-S31508009280512827DB0020DFF83015087006E0DFF8E4
-S3150800929028050078401CDFF820150870DFF8180547
-S315080092A000786E4991F82E10C9B20909C9B2491F4A
-S315080092B0B0EB810F0EDA6948DFF8FC140978084428
-S315080092C090F83600DFF8FC140870DFF8F804007828
-S315080092D0002822D103206076604890F82600207284
-S315080092E05E4890F8270060725C4890F82800A072E3
-S315080092F05A4890F82900E0720120FFF704F9422045
-S31508009300384908700020208200203749088000204C
-S315080093102A49088000F0EAFAFFE0DFF8A804007896
-S315080093200128B4D0DFF89C04007802282ED14B48D7
-S31508009330DFF884140978084490F83700042825D102
-S315080093404648DFF874140978084490F83800434909
-S31508009350DFF864241278114491F8391051EA002094
-S31508009360DFF858140880DFF85404008840F20B61CF
-S31508009370884202DB40F20A6002E0DFF84004008817
-S315080093806082A082A6E700BF4488FE1F3348DFF844
-S3150800939028140978084490F8370000289AD0DFF88E
-S315080093A0180400782D49DFF810241278114491F832
-S315080093B037100818DFF8001408706FE75A88FE1F80
-S315080093C0A680FE1F3C88FE1F4088FE1F20200549F8
-S315080093D0087000F08BFA0020DFF8F0130968487669
-S315080093E084E400BF6788FE1F5888FE1F4C88FE1F4E
-S315080093F01A4890F82F00C00732D5607EC0062FD4D1
-S31508009400208A00287FF4E0A8DFF8C4030088401CFF
-S3150800941080B2FFF778F8DFF8BC03007850F0100048
-S31508009420DFF8B0130870DFF8A8030088002807D013
-S31508009430DFF8A003007850F00200DFF898130870F0
-S3150800944000F054FA01202082082060760020E07699
-S315080094501120024981F82F00FFF7DCBB7080FE1F40
-S31508009460DFF8740390F82F00800621D5DFF86C0327
-S315080094700068DFF8641391F83410DFF85C2392F87B
-S31508009480352052EA01210844DFF850130860DFF856
-S3150800949040030088DFF8401391F83410DFF83823CA
-S315080094A092F8352052EA0121401ADFF82413088081
-S315080094B0DFF81C03008800280CD0607EC00609D49B
-S315080094C0C448007850F00200C2490870C0480088B5
-S315080094D0FFF719F8C04890F830000002BE4991F825
-S315080094E031104018B5490880A08AB44909888842CD
-S315080094F003D3B2480088002802D1A08AAF49088061
-S31508009500AE4800886082B34800780321084271D0CB
-S315080095100020B349088000F0E9F9AE4800788006D3
-S315080095200AD50020AE490880002060761420AA4992
-S3150800953081F82F00FFF76EBBA6480078C0060ED547
-S315080095400020A74908800120208204206076002098
-S31508009550E0761120A04981F82F00FFF75BBBA048F1
-S31508009560008800281BD09B480078C00701D500203A
-S315080095702082208A00280FD1608A99490988884262
-S3150800958002D2608A9649088095480088208206E0BB
-S315080095904888FE1F9A80FE1F208A9149088000206D
-S315080095A0E076904800688D4908608D480088002854
-S315080095B00CD0208A002809D0208A283084490880BF
-S315080095C01820854981F82F00FFF728BB81480078C5
-S315080095D080070FD528207E49088010207E4981F80B
-S315080095E02F00FFF71BBB00BF3088FE1FB8BF00085F
-S315080095F0F087FE1FFEF7E8BF76480078C00706D555
-S315080096000020607610207349087000F06FF965E055
-S315080096106F480088002803D06D480088FEF773FF5E
-S315080096206D4890F82F00C00716D56A480078C0071D
-S3150800963006D5072060760020A0760020208201E06B
-S31508009640062060760120FEF75EFF1020614908704B
-S3150800965000F04CF9FFF7D9BA5E480078C00705D57F
-S315080096600520607600202082FEF7AEBF58480088A5
-S3150800967000287FF4CAAAFEF7A7BF55480088002825
-S3150800968003D053480088FEF73EFF534890F82F0052
-S31508009690C0070DD5072060760020A0760120FEF7CA
-S315080096A032FF10204B49087000F020F9FFF7ADBAD9
-S315080096B04748008800287FF4A8AAFEF785BF00BFA0
-S315080096C05887FE1F9887FE1FFFF79FBA4148007804
-S315080096D0C00703D5072060760020A076FEF774BF82
-S315080096E006203D4981F830000A203B4981F83100BF
-S315080096F04020394988753648008880B2000A3649BC
-S31508009700087433480088344948740020324981F87F
-S315080097103500314890F835002F4981F8340000208B
-S315080097202D494886FEF71FFEC0432B49488645202B
-S315080097302949887300202849C87300202649487596
-S315080097402548407D2449087527480088401C264935
-S3150800975008802548008880B2000A1F498874224874
-S3150800976000881D49C87400201B490883FEF7C4FDFC
-S31508009770C04319490883002016490870FEF72CBF14
-S31508009780B4BF0008010089B2090A51EA002080B274
-S31508009790704710B501290DDB114A11801149096876
-S315080097A0884207D00E490A880E490C680100200035
-S315080097B000F046FC10BD00006888FE1F6288FE1F88
-S315080097C05C88FE1F6988FE1F5088FE1F4488FE1F9E
-S315080097D05888FE1F6788FE1F7080FE1F3C88FE1F84
-S315080097E05A88FE1F4088FE1F5E88FE1F62F30F22FE
-S315080097F062F31F42401810F0030308D0C91A1FD39A
-S31508009800DB0748BF00F8012D28BF20F8022D1300FA
-S3150800981030B414461546103928BF20E93C00FAD85A
-S31508009820490728BF20E90C0048BF40F8042D8900E5
-S3150800983028BF20F8022D48BF00F8012D30BC70471C
-S31508009840C91818BF00F8012DCB0728BF00F8012D4D
-S315080098507047000080B500F087FC00F011FE10F597
-S31508009860FA707049086000F00BFE00F51C501030C5
-S315080098706D490860FEF77CFD0020ADF80000002069
-S31508009880ADF80200BDF8000068490880BDF802007E
-S31508009890664948800020ADF800000020ADF80200B7
-S315080098A0BDF8000062490880BDF80200604948809A
-S315080098B00020ADF800000020ADF80200BDF8000059
-S315080098C05C490880BDF802005A4948804EF60300F4
-S315080098D0FEF7FEFD00F0C2FC574800F012FD062117
-S315080098E0554800F03EFB00F064FB01BD80B55348C7
-S315080098F00078400612D45148007880070ED55048A3
-S315080099000068001D0178FF2908D14078002805D194
-S315080099100121002000F0E0FD00F09FFE01BD10B51A
-S3150800992000F0FCFC00282DD0464908804FF4006062
-S31508009930FFF728FF4449898980B281420ED1012068
-S31508009940FEF716FE3F48008800281BD001F048F9AC
-S3150800995000F0F8FC00203B49088013E040F60600BA
-S31508009960FFF710FF3849898980B281420AD101F090
-S31508009970CDF834480088002804D000F0E3FC002025
-S315080099803049088000F07CFD26490968884239D3A9
-S315080099902448006810F5FA7022490860002415E08A
-S315080099A02A481E2101FB04F10844294908600220BF
-S315080099B0FEF7DEFD23480088002806D001F010F9DE
-S315080099C000F0C0FC00201F490880641C002CE7D06A
-S315080099D0002415E01F48402101FB04F108441E49F4
-S315080099E008600520FEF7C4FD16480088002806D042
-S315080099F001F0F6F800F0A6FC002012490880641C65
-S31508009A00002CE7D000F03CFD07490968884208D3D6
-S31508009A100548006800F51C5010300349086000F03E
-S31508009A209DFF10BD2488FE1F2888FE1F3088FE1F54
-S31508009A303888FE1F3488FE1F1088FE1F6788FE1FA1
-S31508009A403C88FE1F5888FE1F7080FE1FF087FE1F89
-S31508009A504488FE1F5887FE1F4888FE1F352202705D
-S31508009A60401C01220270401C0170401C704710B552
-S31508009A70040036202070641C04202070641C042214
-S31508009A80DFF87815200000F0DBFA201D10BD10B5B0
-S31508009A90040032202070641C04202070641C0422F8
-S31508009AA0DFF85C15200000F0CBFA201D10BD372129
-S31508009AB00170401C03210170401C01210170401CEB
-S31508009AC003210170401C06210170401C7047FF21CC
-S31508009AD00170401C704738B5040001202070012031
-S31508009AE06070DFF820058069A0700020E07004220D
-S31508009AF0DFF81415251D280000F0A2FA00202081A1
-S31508009B00802060810422DFF8041514F10C05280072
-S31508009B1000F096FA0421002214F110052800FFF738
-S31508009B2065FE0421002214F114052800FFF75EFEE5
-S31508009B300421002214F118052800FFF757FEDFF864
-S31508009B40C4048269DFF8BC04416914F11C052800C5
-S31508009B5000F076FADFF8AC048069D0F11001002233
-S31508009B60DFF8A0048069204410F11C052800FFF7DF
-S31508009B703DFE4021002214F12C052800FFF736FE91
-S31508009B808021002214F16C052800FFF72FFE04221D
-S31508009B90DFF87C14EC34200000F052FA31BD10B521
-S31508009BA0DFF8700404682000FFF795FF012114F11F
-S31508009BB0F000FFF753FFFFF77AFFFFF788FFDFF89C
-S31508009BC054140968411ADFF84C040068FFF7E1FDF0
-S31508009BD010BD10B5DFF83C0404682000FFF77BFFD2
-S31508009BE0032114F1F000FFF739FFFFF740FFFFF7F5
-S31508009BF04EFFFFF76CFFDFF81C140968411ADFF8FF
-S31508009C0014040068FFF7C5FD10BDF8B5060006EB9D
-S31508009C100104002509E00422B11CDFF8FC733800B2
-S31508009C2000F00EFA70783044861CA64234D230789A
-S31508009C300128F0D003280AD0062810D0332820D0CF
-S31508009C40352814D0362814D0FF2822D0EAE7042273
-S31508009C50B11CDFF8C873380000F0F2F9E2E7042215
-S31508009C60B11CDFF8BC73380000F0EAF9DAE7B5781A
-S31508009C70D8E70422B11CDFF88473380000F0E0F955
-S31508009C80D0E70422B11CDFF89C73380000F0D8F93D
-S31508009C90C8E72800C0B201E02800C0B2F2BD38B556
-S31508009CA0DFF8700304682078022823D10422DFF83D
-S31508009CB05813201D01F076F800281BD1DFF844035D
-S31508009CC08269DFF84003416914F11C0001F06AF863
-S31508009CD000280FD1042214F11001DFF824532800BC
-S31508009CE000F0AEF9DFF84003018814F1F000FFF741
-S31508009CF08CFF00E0002032BD10B50120DFF8041308
-S31508009D000988002916D040F20F12891A25D0491E53
-S31508009D102CD0153960D0491E67D02F3900F0BB808A
-S31508009D20491E00F0C180143900F0DC80491E00F09D
-S31508009D30E28010E10120B34988704FF47A70B14986
-S31508009D400861FFF72CFFAF480169B84801F05BF8D6
-S31508009D50002040F20F11AB4A1180C0B2002801D191
-S31508009D600320FDE04FF48870A6490880B0480078C3
-S31508009D70800706D4AD4801F04DF8002801D100202F
-S31508009D80EEE0AB480078800707D5FFF788FF022882
-S31508009D9003D102209B4988700EE09A4800694EF666
-S31508009DA06021884204DA97480069400095490861AD
-S31508009DB0944880780228C4D14FF47A709149086192
-S31508009DC0FFF707FF8F480169984801F01CF8002043
-S31508009DD040F225118B4A1180C0B2002801D1032018
-S31508009DE0BEE04FF493708749088091480078800751
-S31508009DF006D48E4801F00EF8002801D10020AFE005
-S31508009E008B480078800722D5FFF749FF05281ED121
-S31508009E1003207C4988707B4800F0DCF87948008C80
-S31508009E20FFF7B0FC04047748408CFFF7ABFC04430B
-S31508009E3064084FF47A7000FB04F0B0F1004F1CD2AE
-S31508009E404FF47A7000FB04F06E49086119E06D481A
-S31508009E50006942F2117188420ADA6A48006910F507
-S31508009E607A7068490861674880780328A8D1D2E7DC
-S31508009E70002064490880002072E07FF000406149B4
-S31508009E80086160480169694800F0BDFF002040F29A
-S31508009E9055115C4A1180C0B2002801D103205FE049
-S31508009EA04FF4AB7057490880604800F0B3FF0028AC
-S31508009EB001D1002054E00220524988704FF47A708C
-S31508009EC05049086100F075F800F0B8F8FFF781FE10
-S31508009ED04C480169554800F096FF00204FF4B571CB
-S31508009EE0484A1180C0B2002801D1032038E040F268
-S31508009EF06B10444908804E480078800706D44B48C2
-S31508009F0000F088FF002801D1002029E048480078A1
-S31508009F1080070AD5FFF7C3FE052806D1032039496D
-S31508009F208870384800F056F878E73648006942F2F3
-S31508009F30117188420ADA3348006910F57A70314996
-S31508009F400861304880780328C0D1EAE700202D4907
-S31508009F500880002004E0002000202A49088002200A
-S31508009F6010BD80B5274A50612648816100202549E1
-S31508009F7088704FF6FF70ADF800004FF6FF70ADF829
-S31508009F8002004FF486416846FEF73AFA1D494860D2
-S31508009F901C484068002804D04FF48840194949688D
-S31508009FA0888000201749088001BD80B5FFF7A4FE08
-S31508009FB001BD81B00020ADF800000020ADF8020018
-S31508009FC0BDF8000011490880BDF802000F49488015
-S31508009FD001B07047818C0D4A1180C18C0B4A5180A3
-S31508009FE0018D144A1180418D124A5180018E124A00
-S31508009FF01180408E1049488070470000B487FE1FC4
-S3150800A000BC87FE1F9887FE1FACBF00083088FE1F5E
-S3150800A010B0BF00083C88FE1FC087FE1FC887FE1F0A
-S3150800A020C487FE1FB887FE1F5888FE1FA087FE1F1D
-S3150800A0306788FE1F3888FE1F3488FE1F7047000099
-S3150800A04062B38B0708D0521E11F8013B00F8013B9A
-S3150800A05000F024808B07F6D1830740F0208000BFEC
-S3150800A060103A07D330B4B1E83810103AA0E83810DF
-S3150800A070F9D230BC530724BFB1E80810A0E808108D
-S3150800A08044BF51F8043B40F8043BD20724BF31F8DB
-S3150800A090022B20F8022B44BF0B7803707047083A4E
-S3150800A0A007D3B1E80810083A40F8043B40F804CB57
-S3150800A0B0F7D25307E4E70000CD480160704701680E
-S3150800A0C0096831F4801100680160704703681B68ED
-S3150800A0D033F4904309B2194312B211430068016080
-S3150800A0E07047416990F8260040010858C00FC0B271
-S3150800A0F07047016841F21802895851F00201026856
-S3150800A10041F21803D1500168096851F0040100684A
-S3150800A11001607047016841F21802895851F40051EC
-S3150800A120026841F21803D1500168096851F0080124
-S3150800A1300068016070470221026841F21403D15099
-S3150800A1400021006841F2040281507047416990F885
-S3150800A15026004001084480687047426990F8260046
-S3150800A1604001104441607047E0B55FF480300190CB
-S3150800A17000208DF800006A4609219E4800F058FE26
-S3150800A18000208DF800006A4604219B4800F050FE26
-S3150800A19000208DF800006A460221974800F048FE24
-S3150800A1A000208DF800006A460321934800F040FE1F
-S3150800A1B000208DF8080088208DF800006A460521E1
-S3150800A1C08D4800F035FE00208DF8080088208DF8AF
-S3150800A1D000006A460821884800F02AFE00208DF80B
-S3150800A1E0080088208DF800006A460921824800F098
-S3150800A1F01FFE00208DF800006A4608217D4800F001
-S3150800A20017FE00208DF8080088208DF800006A46A1
-S3150800A2100721794800F00CFE00208DF800006A46F8
-S3150800A2200021754800F004FE01220021724800F062
-S3150800A23087FE5FF080618908890031F00C010220F1
-S3150800A24060F30921022060F38B2131F4404101209B
-S3150800A25060F397516948FFF72FFF07BD1CB567489C
-S3150800A26000F0A3FE6548FFF72AFF00F009F900F59C
-S3150800A270985488340021614801F09FF8002803D1DA
-S3150800A28000F0FEF8A042F5D35D4A00215B4801F0D4
-S3150800A29048F84FF400624FF480415848FFF716FF1C
-S3150800A2A05648FFF737FF5548FFF723FF08208DF874
-S3150800A2B0000000208DF8010027208DF80200692093
-S3150800A2C08DF803005B208DF8040045208DF8050005
-S3150800A2D09DF800004B4908709DF8010049494870EF
-S3150800A2E09DF80200474988709DF803004549C870E3
-S3150800A2F09DF80400434908719DF8050041494871D5
-S3150800A30013BD082101700021417027218170692140
-S3150800A310C1705B21017145214171704738B5002430
-S3150800A320364800F021FF0500002D09D040F2F5500F
-S3150800A330854205D22A003449304800F0E0FE2C0058
-S3150800A340200032BD80B53148008800284FD02F48FC
-S3150800A350008840F2F551884249D22848FFF7C1FEE5
-S3150800A360002803D02548FFF7E6FE40E02348FFF71C
-S3150800A370EDFE002103E0244A525C4254491C234A5C
-S3150800A38012889142F7D3214801881C48FFF7E5FE59
-S3150800A3901A4890F82600194981F828001748406994
-S3150800A3A0164991F826104901144A5269134B93F835
-S3150800A3B026305B01D25852F0004242500F4890F8BE
-S3150800A3C02600401C0D4981F826000C4890F8260006
-S3150800A3D00A4991F82510884203D10020074981F8D7
-S3150800A3E026000020054908620448FFF7A4FE01BDBF
-S3150800A3F040400050008F0248008202484080FE1FFD
-S3150800A4009CBF00081888FE1F7080FE1F5888FE1F14
-S3150800A41040B2002808D589001E4A40B210F00F0045
-S3150800A420104400F8041C03E089001B4A40B211548A
-S3150800A430704780B5411EB1F1807F01D301200EE03F
-S3150800A440401E164908603F215FF0FF30FFF7E0FF26
-S3150800A450002013490860072012490860002002BD41
-S3150800A46080B5114800684FF47A71B0FBF1F0FFF738
-S3150800A470E0FF002000F001F801BD0C4908607047B4
-S3150800A4800A480068704709480068401C0749086080
-S3150800A4907047000018ED00E000E400E014E000E07A
-S3150800A4A018E000E010E000E08088FE1F2C88FE1F00
-S3150800A4B080B500F024F800280DD1334833490860E8
-S3150800A4C0002004E00021314A02441171401C38285A
-S3150800A4D0F8D300F023F801BD70B504000D0000267E
-S3150800A4E000F00DF8002807D0382C05D2274820445C
-S3150800A4F0057100F013F801263000C0B270BD10B522
-S3150800A5000024224800682049884204D100F00CF84B
-S3150800A510002800D001242000C0B210BD80B500F08C
-S3150800A52010F81A49888701BD10B5002400F009F80B
-S3150800A5301649898F80B2884200D101242000C0B212
-S3150800A54010BD00201149096850FA81F00F490968C1
-S3150800A550090A50FA81F00D490968090C50FA81F088
-S3150800A5600A490968090E50FA81F0002105E0074AF0
-S3150800A5700A44127950FA82F0491C3829F7D380B276
-S3150800A580C043401C80B27047A2E742CE0080FE1F3F
-S3150800A590BFF34F8FDFF88803006810F4E060DFF838
-S3150800A5A084130843DFF878130860BFF34F8F00BFA2
-S3150800A5B0FDE7C9B200EB8103DB69DB08DB00D2B239
-S3150800A5C01A43C9B200EB8100C2617047D0F8140182
-S3150800A5D0C00810F001007047016C0909090151F023
-S3150800A5E0020101647047C268D208D200C9B211F0EC
-S3150800A5F007011143C1607047016851F040010160CD
-S3150800A6007047016831F0400101607047016851F0F8
-S3150800A61001010160704701684908490001607047F7
-S3150800A6200068C06970470068C1617047816851F069
-S3150800A630005181600168C96851F000510068C16025
-S3150800A640704780B500F00DF800F0ACF801BD80B594
-S3150800A65000F04FF800F034F901BD80B5FFF798FF18
-S3150800A66001BD00B589B04FF46140009008208DF80F
-S3150800A670040008208DF8050001208DF8060010203A
-S3150800A6808DF807000020ADF808006946A64800F0D6
-S3150800A690A1FE00208DF818000120079002208DF8F1
-S3150800A6A0200006AA0421A14800F0C2FB90208DF8DC
-S3150800A6B00C000120049002208DF8140003AA05213D
-S3150800A6C09A4800F0B5FB012200219748FFF771FF71
-S3150800A6D0012304221021944800F02BFF01230422B1
-S3150800A6E00021914800F03AFF8F48FFF775FF09B03F
-S3150800A6F000BD80B58E480078002817D18D4800F037
-S3150800A70042F801283ED18B48007800283AD089487B
-S3150800A7100078412836DAFFF7B3FE8749086001203A
-S3150800A720834908700020854908702BE081488349D1
-S3150800A73009780844401C00F026F8012818D17F48FB
-S3150800A7400078401C7D4908707C480078794909786A
-S3150800A750884217D100207649087076484078FF2845
-S3150800A76010D17448807800280CD1FFF776FF09E0ED
-S3150800A770FFF786FE704909686431814202D20020DB
-S3150800A7806B49087001BD10B504006748FFF71EFF46
-S3150800A790002805D1644800F05AFE2070012000E028
-S3150800A7A0002010BD10B58AB000F039FF040000E0A3
-S3150800A7B0640063488442FBD36248844201D3640838
-S3150800A7C0FAE722000121604801F03CF800945F484E
-S3150800A7D001904FF4FA50ADF808000120ADF80A00D0
-S3150800A7E069465B4800F064FF5948FFF705FF58487B
-S3150800A7F0FFF70CFF57485849086002205649496830
-S3150800A80060F39F715448416040F2676020F0004051
-S3150800A8105149496860F31C014F4A51604E4989689D
-S3150800A82060F31C014C4881604B48406830F000508A
-S3150800A830494948604848FFF7F9FE08204649087321
-S3150800A840002005E00021444AC0B202441174401CAD
-S3150800A8500100414A127BC9B29142F3D300203E4916
-S3150800A86008763D4801F04BF801220121364800F0F0
-S3150800A870B5FF3748FFF7C5FE3548FFF7CCFE002081
-S3150800A8808DF8180006AA0D21284800F0D1FA902064
-S3150800A8908DF80C000120049002208DF8140003AAFC
-S3150800A8A00C21224800F0C4FA2948FFF7A5FE022128
-S3150800A8B02748FFF798FE2648FFF7A3FE0AB010BD03
-S3150800A8C01CB500242448FFF7ABFEC00719D522485B
-S3150800A8D001F090F8002810D1002008E01E49C0B207
-S3150800A8E00144097C6A46C0B211540124401C010087
-S3150800A8F0194A127BC9B29142F0D301211648FFF7D3
-S3150800A90092FEE4B2012C0AD100249DF80000FF282B
-S3150800A91005D19DF80100002801D1FFF79EFE13BD61
-S3150800A9200CED00E00400FA0500000340008102482F
-S3150800A9306588FE1F1487FE1FCC87FE1F6488FE1FCE
-S3150800A940001BB700010E27070040014820A1070099
-S3150800A9500043014820500148D087FE1F10B5DFF894
-S3150800A960FC030078401CDFF8F41308700020DFF8B9
-S3150800A970E413087020E0DFF8E003DFF8D81309785D
-S3150800A9800C22514300EB0104208861880843002803
-S3150800A9900BD0DFF8C8030078A17A401A782804DBC0
-S3150800A9A0042100222000FEF721FFDFF8A803007823
-S3150800A9B0401CDFF8A0130870DFF898030078082811
-S3150800A9C0D9DB10BD70B50C00DFF88C530021DFF819
-S3150800A9D08423117006E0DFF87C130978491CDFF838
-S3150800A9E074231170DFF86C130978082921DADFF867
-S3150800A9F06813DFF8602312780C235A4301EB02052B
-S3150800AA0029880029E7D069880029E4D001882A889E
-S3150800AA109142E0D141886A889142DCD106222E1DF6
-S3150800AA2021003000FFF70CFBDFF830030078A8722E
-S3150800AA306BE00021DFF81C23117006E0DFF8141321
-S3150800AA400978491CDFF80C231170DFF80813097818
-S3150800AA5008290EDADFF80013DFF8F82212780C233B
-S3150800AA605A4301EB020529880029E7D1698800299C
-S3150800AA70E4D1DFF8E0120978082938D10021DFF897
-S3150800AA80E02211700021DFF8DC2211700021B14AA2
-S3150800AA9011701DE0B049AF4A12780C235A4301EBF6
-S3150800AAA00205AF490978AD4A1278AB7AD21A9142B3
-S3150800AAB009DAAA490978AA7A891AA94A1170A54908
-S3150800AAC00978A84A1170A3490978491CA14A117046
-S3150800AAD0A04909780829DDDBA24909789D4A117041
-S3150800AAE09D499C4A12780C235A4301EB020504221D
-S3150800AAF001002800FFF7A4FA06222E1D21003000C7
-S3150800AB00FFF79EFA95480078A87270BD10B596486A
-S3150800AB1000882A2803D20020934908805FE0002095
-S3150800AB20914908809148808AB0F5807F03D0B0F5B6
-S3150800AB30007F44D053E08D48C08C8D4909888842EF
-S3150800AB403CD18A48008D8A494988884236D1894944
-S3150800AB508948FFF737FF4FF4007084498882062238
-S3150800AB608449864C2000FFF76BFA06228449814CFB
-S3150800AB702000FFF765FA06228149824C2000FFF77C
-S3150800AB805FFA06227D49794C2000FFF759FA774883
-S3150800AB90808B7649C8847548C08B74490885744883
-S3150800ABA0008872498883724840887049C8834FF480
-S3150800ABB0C1606E4988812A206B4908800FE06B487E
-S3150800ABC0C08C6B490988884209D16848008D684954
-S3150800ABD04988884203D167496748FFF7F3FE10BDE5
-S3150800ABE010B55D486149C98B674A128891420CD1F4
-S3150800ABF05E49098C644A5288914206D10622634905
-S3150800AC005A4C2000FFF71CFA93E05849C98B604A52
-S3150800AC1012881140564A12885D4B1B881A40914289
-S3150800AC200BD15249098C5A4A52881140504A5288C7
-S3150800AC30574B5B881A40914208D056490988564AAC
-S3150800AC40118054494988544A518007E04749C98BBD
-S3150800AC50514A11804549098C4F4A518000213D4A85
-S3150800AC60117004E03B490978491C3A4A1170394980
-S3150800AC70097808290FDA3848364909780C225143E9
-S3150800AC8008444549098802889142EBD142494988D6
-S3150800AC9042889142E6D12F490978082943D10621ED
-S3150800ACA0FF22324C2000FEF7A1FD06210022334C7C
-S3150800ACB02000FEF79BFD06223149324C2000FFF7A3
-S3150800ACC0BFF906222E492B4C2000FFF7B9F9324866
-S3150800ACD000882649C884304840882449088524487D
-S3150800ACE0008822498883224840882049C8834FF42F
-S3150800ACF080701E4988824FF480701C49C8810820DC
-S3150800AD001A49088206201949887404201749C87404
-S3150800AD104FF4C160154988812048214908602A20D6
-S3150800AD201149088013E00622011D104C2000FFF788
-S3150800AD3087F906221249134C2000FFF781F90820EB
-S3150800AD400A498881084800880E300749088010BDDE
-S3150800AD50000000006A88FE1FB486FE1F6C88FE1F6E
-S3150800AD606D88FE1F6B88FE1F5888FE1F7080FE1FA9
-S3150800AD703088FE1F8680FE1F8C80FE1F9080FE1F77
-S3150800AD801888FE1F7680FE1FBCBF0008A4BF0008F7
-S3150800AD903888FE1F3488FE1F5488FE1FA680FE1FB3
-S3150800ADA03C88FE1F0300002013F0030F09D0521E33
-S3150800ADB022BF13F8010B11F801CBB0EB0C00F3D04E
-S3150800ADC07047121F22BF53F8040B51F804CB604595
-S3150800ADD0F7D0121D0AD200BA9CFA8CFCB0EB0C0014
-S3150800ADE038BF6FF0000088BF01207047521E22BF8F
-S3150800ADF013F8010B11F801CBB0EB0C00F6D0521C7E
-S3150800AE0008BF1046704710B50400616000F028FEC0
-S3150800AE10206010BD10B5040000F022FE2168401A1B
-S3150800AE206168884201DB012000E00020C0B210BD45
-S3150800AE3070B4C9B28B1000EB8303C9B28C1000EB57
-S3150800AE4084042469F82511F00306F6B2F600B54025
-S3150800AE50AC431C61436F03244D00AC40A3434367D6
-S3150800AE60224B984202D0224B984205D1036E012408
-S3150800AE708C40A343036624E053688B404360C9B201
-S3150800AE80CB1000EB8303C9B2CC1000EB8404246C0E
-S3150800AE90072511F00706F6B2B600B540AC431C64A8
-S3150800AEA0C9B2CB1000EB8303C9B2CC1000EB840403
-S3150800AEB0246C157A11F00706F6B2B600B5402C4395
-S3150800AEC01C64C9B28B1000EB8303C9B28C1000EB6B
-S3150800AED084000069127811F00301C9B2C90012FA98
-S3150800AEE001F10843186170BC70470000008E0248E3
-S3150800AEF0008F024870B4C9B28B0800EB8303C9B24D
-S3150800AF008C0800EB84042469F82511F00306F6B2D0
-S3150800AF10F600B540AC431C61C9B28B0800EB83034D
-S3150800AF20C9B28C0800EB84000069D2B211F00301A3
-S3150800AF30C9B2C90012FA01F10843186170BC70471A
-S3150800AF4030B4436F03244D00AC40A3434367436FBB
-S3150800AF50D2B2490012FA01F11943416730BC704771
-S3150800AF6001684FF48052895851F0010102684FF484
-S3150800AF708053D15001684FF480528958C907F9D4D3
-S3150800AF80704701680B64006842647047DFF8100375
-S3150800AF900068DFF81013096811F00101884070474E
-S3150800AFA080B5FFF7F3FF400802BD38B5040020005E
-S3150800AFB000F026F92000FFF7D3FF200000F0EBF899
-S3150800AFC00500D4E902232000FFF7DBFF4FF4806079
-S3150800AFD021680860802021688861DFF8CC02216832
-S3150800AFE041F218028850DFF8C40221684FF48052F3
-S3150800AFF08850200000F021F8200000F052F85FF099
-S3150800B000FF30216841F2140288507FF07C402168A5
-S3150800B010C1F810017FF07C402168C1F80C017FF06F
-S3150800B020C0202168C1F800024FF402702168C86385
-S3150800B030002020622800C0B232BD10B4002122E0F0
-S3150800B0405FF0004203694C011A5102694B011A4428
-S3150800B05044F2F453536002694B011A44836940F27F
-S3150800B060F45404FB01F4234493604A1C90F82430FA
-S3150800B0709A4200D1002203694C0123440469520113
-S3150800B0802244DA60491C90F824209142D8D30169F9
-S3150800B090026841F20C03D150002180F8271010BC39
-S3150800B0A0704710B400211CE0DFF8042243694C0104
-S3150800B0B01A5142694B011A44C36940F2F45404FB1D
-S3150800B0C001F4234493604A1C90F825309A4200D133
-S3150800B0D0002243694C012344446952012244DA6040
-S3150800B0E0491C90F825209142DED34169026841F255
-S3150800B0F01003D150002180F8261010BC704770B597
-S3150800B10004000E001500206994F827104901084428
-S3150800B11081682A003000FEF793FF206994F827100B
-S3150800B12049015FF00042425094F82700401C84F819
-S3150800B130270094F8270094F82410884202D10020AA
-S3150800B14084F82700206841F214014058000609D502
-S3150800B1508020216841F2140288500020216841F2BB
-S3150800B16008028850280070BD0021016990F8270060
-S3150800B17040010858002801D500210AE010F40341CF
-S3150800B180B1F5407F02D05FF0FF3102E0C0F30D4019
-S3150800B190011F0800704710B50400FFF701FF010002
-S3150800B1A0002022681032DFF80C31994202D20821B9
-S3150800B1B0116023E0DFF80031994202D20C211160B8
-S3150800B1C01CE0DFF8F830994202D20021116015E040
-S3150800B1D0DFF8EC30994202D2042111600EE0DFF864
-S3150800B1E0E430994202D21021116007E0DFF8D83026
-S3150800B1F0994202D21421116000E00220C0B210BDAB
-S3150800B20080B5042000F015FADFF8C00000F016FA41
-S3150800B210DFF8B80000F0FAF901BD10B40468246933
-S3150800B22014F03C04C9B254EAC121D2B251EA8211DF
-S3150800B23051F0010102681161002102681269D20702
-S3150800B24004D4006840691880002005E0491C4FF6C0
-S3150800B250FF729142F1D3022010BC704710B49BB222
-S3150800B2600468636103681B6913F03C03C9B253EAB7
-S3150800B270C121D2B251EA821151F00301026811616B
-S3150800B280002102681269D20701D4002005E0491C92
-S3150800B2904FF6FF729142F4D3022010BC70470000AB
-S3150800B2A08088FE1F104600500400200280200102FC
-S3150800B2B000001030C10E16020187930301E1F5055F
-S3150800B2C081D1F00801C2EB0B81B2E60E0400002022
-S3150800B2D038B504000D000DF1020302222900C9B297
-S3150800B2E02000FFF79AFF002818D16B460322290091
-S3150800B2F0C9B22000FFF791FF00280FD1BDF8020060
-S3150800B300222809D1BDF800004FF6F0710840B0F5C3
-S3150800B310AB5F01D1002002E0032000E00420C0B2A8
-S3150800B32032BD70B504000D0016002900C9B2200010
-S3150800B330FFF7CEFF002826D12900C9B2200000F069
-S3150800B34023F800281FD10023B6F90200B0F5804F74
-S3150800B35001D153F40053B6F90400B0F5006F01D1DA
-S3150800B36053F48073B079002801D053F48053F079F0
-S3150800B370002801D053F480439BB200222900C9B2A9
-S3150800B3802000FFF76BFF70BD38B504000D004FF4C1
-S3150800B390004300222900C9B22000FFF75FFF0028FA
-S3150800B3A00AD16B4600222900C9B22000FFF735FFF3
-S3150800B3B0BDF800100904F4D432BD80B56B460122ED
-S3150800B3C0C9B2FFF72AFFBDF80000C0B2800810F026
-S3150800B3D0010002BD70B504000D001026200000F023
-S3150800B3E041F8E879002800D0EE7932002968200073
-S3150800B3F000F061F8A879401EB11CC901090A0902C2
-S3150800B40051EA400040F4403050F00100E0632879EA
-S3150800B410401E000650F4817060636879002806D0E3
-S3150800B420606B6979491E50EA0140606305E0606B0C
-S3150800B4302979491E50EA014060634FF4A060A06371
-S3150800B4405FF0FF30E064B5F90800206470BDD0F8FD
-S3150800B4500C1111F0E06F01D1406D01E0D0F81C012C
-S3150800B46080B2704710B504005848844202D0584844
-S3150800B470844203D1574800F088F812E056488442BF
-S3150800B48002D05648844203D1554800F07EF808E0B9
-S3150800B4905448844202D05448844202D1534800F0AA
-S3150800B4A074F80320E060E068C007FCD5206C00094A
-S3150800B4B00001206410BDF8B504000E001500642EC6
-S3150800B4C034D3002D32D000F0AAF86421B0FBF1F194
-S3150800B4D06420B6FBF0F60123012040F2FF3E40F25D
-S3150800B4E0FF3212E002FB01F705FB06FCB7FBFCF78F
-S3150800B4F05FEA972CBF05BF0DBCF5806F04D2774570
-S3150800B50002D2BE4660461300521E002AEAD153F400
-S3150800B510004121616169364A11406A1E51EA822159
-S3150800B520401E51EA00406061002000E00120C0B2E0
-S3150800B530F2BD30B4D0F8084134F0E064C0F80841F0
-S3150800B540D0F808412B4D2C4054EA03231943D2B2B4
-S3150800B55051EA0261C0F8081130BC704730B4D0F81F
-S3150800B5600C4134F0E064C0F80C41D0F80C41224D8F
-S3150800B5702C4054EA03231943D2B251EA026151F02E
-S3150800B5808051C0F80C1130BC704780B5114988420B
-S3150800B59008D14FF4006000F051F84FF4006000F055
-S3150800B5A035F812E00E49884206D1144800F046F8EC
-S3150800B5B0124800F02BF808E00C49884205D11048DB
-S3150800B5C000F03CF80E4800F021F801BD00000340E9
-S3150800B5D00002034008000340000002480002024837
-S3150800B5E00800024800400248004202480840024853
-S3150800B5F0EF8000FCC0C0FFF8C0C0FFEF800000105D
-S3150800B60000010010DFF8480000687047010F20F0BD
-S3150800B6107040DFF840200C2359435050704780B5DE
-S3150800B620FFF7F0FFDFF83010096811F00101C84094
-S3150800B63002BDC0B2DFF8241008607047010F20F081
-S3150800B6407040DFF81C200C23594350507047000007
-S3150800B6508088FE1F144400501446005004460050CB
-S3150800B66048460050D0F8C40110F4407F01D10120AB
-S3150800B67000E00020C0B27047C9B2D2B251EA024116
-S3150800B680DBB251EA0361C0F8C4117047016851F092
-S3150800B690400101607047016831F040010160704760
-S3150800B6A0814200D308007047884200D308007047DB
-S3150800B6B02DE9F04104000D000C220C22002601277A
-S3150800B6C05FF00008002042F21071012200E0521CCF
-S3150800B6D0412A40D22B685FF00A0C0CFB03F3B3FB3C
-S3150800B6E0F2FC6B68BCFBF3F35FF00A0EB3FBFEF8E3
-S3150800B6F00EFB183EBEF1060F05D35FF00A0EB3FB2C
-S3150800B700FEF35B1C03E05FF00A0EB3FBFEF3002BAF
-S3150800B71006D05FF00A0E0EFB03FEBCFBFEFC03E040
-S3150800B7200A23BCFBF3FC0123D5F804E0F44504D353
-S3150800B730D5F804E0BCEB0E0C03E0D5F804E0BEEB4C
-S3150800B7400C0C152BC3D28C45C1D2160018006146C5
-S3150800B750BCF57A7FBBD242F21071402200E0521E3D
-S3150800B760032A1BD3531C42F2107C0CFB03F3B3FBD6
-S3150800B770F0F3B5F808C0634504D3B5F808C0B3EBD1
-S3150800B7800C0C03E0B5F808C0BCEB030C8C4501D2E1
-S3150800B79017006146B5F808C06345E0D2C01BB0F192
-S3150800B7A001082000FFF772FFB8F10100000310F44A
-S3150800B7B0E0406989491E890111F0C0010843791ED4
-S3150800B7C0090211F470610843711E11F03F01084324
-S3150800B7D020612000FFF75FFFBDE8F08170B5040027
-S3150800B7E00D0016002000FFF73DFF0028FAD06B1C5D
-S3150800B7F0DBB23200D2B202212000FFF73DFF70BD56
-S3150800B80010B50400DFF84402FFF718FFDFF83C0222
-S3150800B810FFF7FCFE2068400840002060206880078B
-S3150800B820FCD410BD80B500F065F8012802D00228C6
-S3150800B83003D005E0FFF7F3FE03E000F015F900E09A
-S3150800B840002002BD2DE9F04104000E00150020007D
-S3150800B850FFF7D6FF3100C9B2200000F042F82000F9
-S3150800B860FFF7E0FF8046B8FBF5F0D0F580610020D1
-S3150800B870FFF716FF40F2FF31FFF716FF0600D6F571
-S3150800B8808060B8FBF0F7A8095FEA981840F2FF3124
-S3150800B8904FF480625043B0FBF8F0FFF705FF00FB5A
-S3150800B8A008F1890A8901691AEA1B914201D3012123
-S3150800B8B000E00021C9B2002900D10600C9B200295A
-S3150800B8C001D0012000E00220E168DFF88421114060
-S3150800B8D0E160E168C0B256EA80300843E060BDE83E
-S3150800B8E0F081D0F8C82112091201C9B21143C0F873
-S3150800B8F0C8117047D0F8C80110F00F00704710B58E
-S3150800B90004002068DFF84C110818400941090002B4
-S3150800B91010F4F85050EA41302168896831F47F41C3
-S3150800B9202268916021688968084321688860606890
-S3150800B930C0F34070C00704D56068C0F34070C00704
-S3150800B94036D5207E002802D0207E012830D120203E
-S3150800B9502168C8616068C0F34070002810D160682B
-S3150800B96010F06040616850EA814021688861A068EB
-S3150800B97010F06040A16850EA81402168C86005E07F
-S3150800B980606821688861A0682168C860207E0128EF
-S3150800B99007D1200000F00DF85FF000602168C8614B
-S3150800B9A003E04FF400602168C8612B482168C8612C
-S3150800B9B010BD0321017E012918D120210268D16119
-S3150800B9C00168096831F07061027B120612F0706234
-S3150800B9D011430268116001690268116141690268D0
-S3150800B9E051611E490068C161002100E00321080079
-S3150800B9F0C0B270470121002100220168C969C1F35C
-S3150800BA00C0210268D269C2F38002002901D003214D
-S3150800BA1018E0012A01D1022114E0016809690161CF
-S3150800BA200168496941610168C969C1F38001026811
-S3150800BA30D269C2F3C002C9B2002902D0D2B2002A22
-S3150800BA40EBD100210800C0B27047000010000010BA
-S3150800BA50003CFFFF00B0FEB74000A00640002800EB
-S3150800BA6080B5FEF70DFD02BD00487047001BB70004
-S3150800BA7080B566480068C00709D46548006850F074
-S3150800BA8001006349086061480068C007FBD5614842
-S3150800BA900068800509D56048006850F400705E4962
-S3150800BAA0086041F64C5000F0EBF85C48006850F42A
-S3150800BAB000205A49086040F6C41000F0E1F85748DB
-S3150800BAC0006857490840554908605648006810F00C
-S3150800BAD0300F24D05348006853490840514908603C
-S3150800BAE0FFF7C2FF4F490968504AB0FBF2F0401E03
-S3150800BAF051EA00404B4908604D480068400840003C
-S3150800BB004B4908604548006830F4003043490860EE
-S3150800BB104848006810F46070B0F5607FF8D13F4877
-S3150800BB20006850F001003D4908603C48006850F044
-S3150800BB3010003A490860404840490860374800689C
-S3150800BB4050F04000354908603448006830F010006D
-S3150800BB50324908603148006850F480202F4908604F
-S3150800BB60344800684007FBD52C4800684008400068
-S3150800BB702A4908602F480068C007FBD45FF0011007
-S3150800BB802F49086000202F49086000202E490860C8
-S3150800BB9000202E49086000202D49086003202D4901
-S3150800BBA008602D482D4908602D482E4908601B4815
-S3150800BBB0006830F04000194908602B481F490860A2
-S3150800BBC04FF4166000F05CF828481C4908604FF4EA
-S3150800BBD0616000F055F82648184908604FF49650F9
-S3150800BBE000F04EF823481549086041F2707000F0DD
-S3150800BBF047F82148114908604FF4E15000F040F831
-S3150800BC0000201E49086000F059F801BD00420050A6
-S3150800BC1004420050004400500844005014470050A5
-S3150800BC20FDFFFEFF04470050CFFFF0FFA0252600CA
-S3150800BC301C47005010470050002F0B0118470050B2
-S3150800BC400C4600501446005010460050204600503E
-S3150800BC50244600501C4600500500010018460050B6
-S3150800BC600300200128460050002F0501002F03017C
-S3150800BC70002F0201002F0101002F00010446005089
-S3150800BC8081B00021009103E000BF0099491C009192
-S3150800BC9000998142F8D301B07047000010B5102210
-S3150800BCA05FF00051044C2000FEF7CAF900F054F882
-S3150800BCB0FFF7DEFE10BD00BF7088FE1F80B51F4867
-S3150800BCC00068C00327D51E480068C00701D51D486F
-S3150800BCD001E0FFF7C9FE1C490968490713D51B4946
-S3150800BCE00968C1F30361491C184A1268C2F306229F
-S3150800BCF0521C164B1B68C3F306435B1C5943B0FB27
-S3150800BD00F1F0504308E01149096811F07F014B1C16
-S3150800BD10B0FBF3F000E00B480849096801F0FF01A1
-S3150800BD20491CB0FBF1F00A49096811F00101491CE8
-S3150800BD30B0FBF1F00749086001BD00BF0C46005092
-S3150800BD401C47005000366E01104700501847005037
-S3150800BD50104600508088FE1F72B60D480D490860CF
-S3150800BD60BFF34F8F62B60C48006850F470000A495A
-S3150800BD7008600A48006830F0080008490860084862
-S3150800BD8000680009000150F0040005490860704782
-S3150800BD900080000808ED00E088ED00E014ED00E002
-S3150800BDA01420005812FA01F14160704780B58022CC
-S3150800BDB008211648FFF79EF85FF4803208211348D9
-S3150800BDC0FFF7F0FF01BD10B5FEF75AFB0400104857
-S3150800BDD00068201AB0F5FA7F17D30E4800780028B5
-S3150800BDE008D101200B490870012208210748FFF7EE
-S3150800BDF0D9FF08E00020074908705FF4803208215F
-S3150800BE000248FFF7CFFF0248046010BD00850248CC
-S3150800BE102088FE1F6688FE1F19E050F8041BCB0712
-S3150800BE2044BFA9F101035918121F0023042A41F837
-S3150800BE30043BF9D25FEA827C0B4604D54FF0000C2E
-S3150800BE40A1F800C09B1CD10744BF0021197050F807
-S3150800BE50042B002AE1D1704780B500F011F8FEF7EF
-S3150800BE6027FBFDF7F7FCFEF7ECFB00210020FEF7A9
-S3150800BE7033FBFFF7A8FFFDF752FDFEF7E8FBF8E7EF
-S3150800BE8080B5FFF71BFFFFF791FFFEF7E9FA01BD43
-S3150800BE9010B450F8041B79B10268436802440830AC
-S3150800BEA0DC0744BFA9F10104E31852F8044B43F830
-S3150800BEB0044B091FF9D1ECE710BC704710B50749C8
-S3150800BEC079441831064C7C44163404E00A68081D87
-S3150800BED0114488470146A142F8D110BD2C00000044
-S3150800BEE0540000004EF68851CEF20001086840F46E
-S3150800BEF070000860BFF34F8FBFF36F8F4FF000706D
-S3150800BF00E1EE100A7047000011FFFFFF000800006D
-S3150800BF107080FE1FA0300000000000200000000016
-S3150800BF2071FFFFFF300000004C0200004080FE1F3A
-S3150800BF300000000000F00BF8002801D0FFF7BEFF54
-S3150800BF400020AFF30080FFF787FF00F002F801201A
-S3150800BF50704700F001B800000746384600F002F8BE
-S3150800BF60FBE7000080B5AFF30080024A11001820F5
-S3150800BF70ABBEFBE726000200DFF808D00248804780
-S3150800BF80024800478890FE1F9DBC000891BF000824
-S3150800BF90AFF30080FFF7A6FFFFF7CCFF01000040D4
-S3150800BFA000080000FFFFFFFFFFFF0000ADDE1223C1
-S3150800BFB063825363FFFFFFFF00000000FFFFFFFFE0
-S3150800BFC0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF97
-S3150800BFD0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF87
-S3150800BFE0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF77
-S3150800BFF0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF67
-S3150800C000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF56
-S3150800C010FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF46
-S3150800C020FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF36
-S3150800C030FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF26
-S3150800C040FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF16
-S3150800C050FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF06
-S3150800C060FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFF6
-S3150800C070FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFE6
-S3150800C080FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFD6
-S3150800C090FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFC6
-S3150800C0A0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFB6
-S3150800C0B0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFA6
-S3150800C0C0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF96
-S3150800C0D0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF86
-S3150800C0E0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF76
-S3150800C0F0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF66
-S3150800C100FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF55
-S3150800C110FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF45
-S3150800C120FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF35
-S3150800C130FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF25
-S3150800C140FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF15
-S3150800C150FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF05
-S3150800C160FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFF5
-S3150800C170FFF7FEBF00C00050000000000800276956
-S3150800C1805B450000A02F0020203000200000002082
-S3150800C190D017002000000000040400000000000082
-S3090800C1A0000000008D
-S7050800BF91A2
+S3150800C0008890FE1F79FF0008C1FF0008C5FF0008D9
+S3150800C010C9FF0008CDFF0008D1FF00080000000096
+S3150800C020000000000000000000000000D5FF000826
+S3150800C030D9FF000800000000DDFF000887E40008BB
+S3150800C040E1FF0008E5FF0008E9FF0008EDFF00082A
+S3150800C050F1FF0008F5FF0008F9FF0008FDFF0008DA
+S3150800C06001000108000000000000000000000000B8
+S3150800C0700500010800000000090001080D0001087C
+S3150800C0801100010815000108190001081D00010822
+S3150800C0902100010825000108290001082D000108D2
+S3150800C0A03100010835000108390001083D00010882
+S3150800C0B04100010845000108490001084D00010832
+S3150800C0C05100010855000108590001085D000108E2
+S3150800C0D06100010865000108690001086D00010892
+S3150800C0E07100010875000108790001087D00010842
+S3150800C0F08100010885000108890001088D000108F2
+S3150800C1009100010895000108990001089D000108A1
+S3150800C110A1000108A5000108A9000108AD00010851
+S3150800C120B1000108B5000108B9000108BD00010801
+S3150800C130C1000108C5000108C9000108CD000108B1
+S3150800C140D1000108D5000108D9000108DD00010861
+S3150800C150E1000108E5000108E9000108ED00010811
+S3150800C16000000000000000000000000000000000C1
+S3150800C170F1000108F5000108F9000108FD000108B1
+S3150800C1800101010805010108090101080D0101085D
+S3150800C1901101010815010108190101081D0101080D
+S3150800C1A02101010825010108290101082D010108BD
+S3150800C1B03101010835010108390101083D0101086D
+S3150800C1C04101010845010108490101084D0101081D
+S3150800C1D05101010855010108590101080000000034
+S3150800C1E05D0101086101010865010108690101088D
+S3150800C1F06D0101080000000071010108000000003F
+S3150800C200EE11AA55C2788A18DFF83833DA708378BF
+S3150800C2100A0092B2120AD218DFF828339A704278C6
+S3150800C220DFF820335A700078DFF818231070DFF82B
+S3150800C23014038278080080B2000A80B2824212DAB9
+S3150800C240DFF800034078401CDFF8F8225070DFF86A
+S3150800C250F4024078002806D1DFF8E8020078401C8E
+S3150800C260DFF8E0221070DFF8DC02C07889B201F04E
+S3150800C270FF0188421EDADFF8CC028078401CDFF81E
+S3150800C280C4128870DFF8BC028078002812D1DFF863
+S3150800C290B4024078401CDFF8AC124870DFF8A402FC
+S3150800C2A04078002806D1DFF89C020078401CDFF8A9
+S3150800C2B094120870704710B492B20A44531E0BE0E9
+S3150800C2C00A7812024C78121910180400A4B292B215
+S3150800C2D0944200D2401C891C9942F1D3994208D154
+S3150800C2E009780A021018010089B292B2914200D266
+S3150800C2F0401C80B210BC704780B51422DFF8481283
+S3150800C3000020FFF7D8FF80B2002802D14FF6FF7051
+S3150800C31002E080B201F036FA80B202BD10B5DFF84D
+S3150800C3202C12097C0902DFF82422527C8918B1F103
+S3150800C330140454FA80F00822DFF8141280B2FFF7CA
+S3150800C340BAFF220092B2DFF80C1280B2FFF7B3FFF1
+S3150800C35080B2002802D14FF6FF7002E080B201F0E9
+S3150800C36011FA80B210BD80B50620FFF7D7FF02BDCF
+S3150800C3700020DFF8E41108700EE00020DFF8DC1179
+S3150800C380DFF8D421127821F81200DFF8CC01007802
+S3150800C390401CDFF8C4110870DFF8BC0100780028DB
+S3150800C3A0EBD000206C4908700CE000206C496A4A02
+S3150800C3B012781E235A431144487667480078401C71
+S3150800C3C065490870644800780028EED04FF480600C
+S3150800C3D0644908800020604908700CE00020624922
+S3150800C3E05D4A127840235A43114488805A48007897
+S3150800C3F0401C59490870584800780028EED0704704
+S3150800C40070B504000D000CE05748534909784022DE
+S3150800C4105143084486885348008801F0B3F9864298
+S3150800C42011D150480088401C4E4908804D48008864
+S3150800C430B0F5FA4F03DB4FF480504A4908800020D4
+S3150800C4404549087004E044480078401C4249087091
+S3150800C450414800780028D7D0002600203E490870B9
+S3150800C46004E03D480078401C3B4908703A4800788B
+S3150800C47000280FD13C4838490978402251430844DE
+S3150800C48080880028EDD1384833490978402251433D
+S3150800C49000EB0106002E01D1002018E03148008883
+S3150800C4A03049098889B2090A51EA0020B080F58026
+S3150800C4B0002C05D104210022300001F097F903E091
+S3150800C4C0208830806088708040203072300070BDCF
+S3150800C4D00021214A117004E01F490978491C1E4AA7
+S3150800C4E011701D49097800290CD11C491A4A12787D
+S3150800C4F031F812100029EFD11849174A127821F895
+S3150800C5001200FFE7704780B5010089B21748006836
+S3150800C5100830FFF777FE0B48007814490968087257
+S3150800C52008484078114909684872064880780F49D2
+S3150800C530096888720348C0780C490968C87201BD41
+S3150800C540000000005088FE1F7E80FE1F7080FE1FC0
+S3150800C5508A80FE1F9280FE1F6888FE1F5C88FE1F69
+S3150800C560F087FE1F6088FE1F5887FE1F4488FE1F3F
+S3150800C57010B5DFF8141E0C68C0B2042806D1DFF81F
+S3150800C5803C0E0088002840F061821DE0DFF8301E6E
+S3150800C590DFF8302E1160DFF82C1E0968DFF8282E28
+S3150800C5A01160C0B2032818D1607E10F00F0003286E
+S3150800C5B00AD1208A002807D10820DFF8281E08702B
+S3150800C5C001F094F900F0A9BF0020DFF81C1E0880CE
+S3150800C5D00020DFF8101E087010BDC0B2022840F017
+S3150800C5E0D180DFF8080EC078401CDFF8001EC8703E
+S3150800C5F0DFF8F80DC07800281ED1DFF8F00D807836
+S3150800C600401CDFF8E81D8870DFF8E00D8078002808
+S3150800C61012D1DFF8D80D4078401CDFF8D01D4870DD
+S3150800C620DFF8C80D4078002806D1DFF8C00D00787D
+S3150800C630401CDFF8B81D08700020DFF8AC1D088024
+S3150800C6400020DFF8781D0880607E072802D0607E0B
+S3150800C650052808D1A07E401CA076A07E782801D1A6
+S3150800C66000206076B0E7607E0028FBD0208A00288C
+S3150800C6707AD0A07E411EA176C0B20028F2D1E07E13
+S3150800C680082808D0607E022802D0607E012810D1D2
+S3150800C690E07E05280DD1002060768020DFF8441D55
+S3150800C6A0087001F023F91420DFF8B01D81F82F0077
+S3150800C6B0B0E2E07E052801DB042000E0E07E0321ED
+S3150800C6C011FA00F0A076E07E401CE076607E10F05D
+S3150800C6D00F00C0B201280AD0022835D0032839D065
+S3150800C6E004283FD006283DD008283BD0BAE71020BA
+S3150800C6F0DFF8681D81F82F00DFF8600D90F82F002D
+S3150800C70050F00200DFF8541D81F82F000220DFF8F0
+S3150800C7104C1D81F836000420DFF8401D81F83700EB
+S3150800C7200620DFF8381D81F838000A20DFF82C1DAE
+S3150800C73081F839002C20DFF8B01C08806020DFF86B
+S3150800C7401C1D81F82E006EE20020DFF8101D81F80E
+S3150800C7502F00D1E70420DFF88C1C087001F0C6F81A
+S3150800C76000F01FBF00F074BE607E10F00F000328B3
+S3150800C7707FF478AF0820DFF86C1C087001F0B6F873
+S3150800C78000F0CBBEC0B2052826D1DFF8040E00683B
+S3150800C790808800281FD00020DFF8EC1B0860DFF82F
+S3150800C7A0F40DDFF8201C0860DFF8180C0068DFF8C5
+S3150800C7B0181C08600020DFF8041C0880DFF8FC0B52
+S3150800C7C00088DFF8241C08800820DFF8181C087089
+S3150800C7D001F0EBFBD3E6F7E6DFF8800C807B452813
+S3150800C7E07FF4F2AEDFF8000C0088DFF8701C097CD5
+S3150800C7F00902DFF8682C527C8918884216DBDFF8B4
+S3150800C8005C0C007C0002DFF8541C497C4018DFF8F9
+S3150800C810D81B0880DFF8440C007D3F21084204D16C
+S3150800C820DFF8380C407D002801D0CDE6CCE6DFF8ED
+S3150800C830B80D0088DFF8B41D0988884207D1DFF8EB
+S3150800C840A80D4088DFF8A41D4988884210D0DFF873
+S3150800C8500C0CC08BDFF8901D0988884207D1DFF8D9
+S3150800C860FC0B008CDFF8801D4988884200D0ABE6B7
+S3150800C870FFF742FD4FF6FF7188427FF4A5AEDFF859
+S3150800C880DC0BC07D062809D1FFF76DFD4FF6FF7159
+S3150800C890884240F03D81DFF8584D3BE1DFF8BC0B9C
+S3150800C8A0C07D11280CD1DFF8400B00881C38DFF852
+S3150800C8B0381B0880DFF8080EDFF8D41C086048E04B
+S3150800C8C0DFF8980BC07D01287FF47EAEDFF88C0B6D
+S3150800C8D090F8220008287FF477AE0020DFF87C1B4A
+S3150800C8E081F82200DFF8740B808C4FF6F7718842C6
+S3150800C8F007DBDFF8680B808C0930DFF8601B88845B
+S3150800C90006E0DFF8580B808C0830DFF8501B888467
+S3150800C910DFF8480B408BDFF8441BC883DFF83C0B75
+S3150800C920808BDFF8381B0884DFF8BC0C0088DFF83A
+S3150800C9302C1B4883DFF8B00C4088DFF8201B88835F
+S3150800C94000F019BFDFF8480C00684030DFF8401CDB
+S3150800C9500860DFF83C0C0068DFF8681D884274D26E
+S3150800C960DFF82C0C006880880028EBD0DFF8EC0A8A
+S3150800C970808CDFF81C1C096889888842E2D1DFF8B8
+S3150800C980100C0068C08800280FD0DFF8D00A408C49
+S3150800C990DFF8FC1B0968C988884206D0DFF8F00B67
+S3150800C9A00068C088B0F58A4FCCD1DFF8E40B006880
+S3150800C9B00088DFF8381C0988884208D1DFF8D00BD0
+S3150800C9C000684088DFF8241C4988884223D0DFF8AD
+S3150800C9D0C00B00680088DFF8A81D0988884208D1BE
+S3150800C9E0DFF8AC0B00684088DFF8941D4988884258
+S3150800C9F011D0DFF8680A408BDFF8941B09680988AC
+S3150800CA0088429FD1DFF8540A808BDFF8841B0968B7
+S3150800CA104988884296D10020DFF86C190860022000
+S3150800CA20DFF8C0190870DFF86C0BDFF89819086092
+S3150800CA30DFF890090068DFF8901908600020DFF831
+S3150800CA407C19088001F0B1FA99E5BDE5DFF86C09B3
+S3150800CA5000881C30DFF890190880DFF88C090088F8
+S3150800CA6080B2000ADFF8F4190874DFF87C09008838
+S3150800CA70DFF8E8194874DFF8180B0068007ADFF861
+S3150800CA80DC1988751120DFF8D419C875DFF82C0968
+S3150800CA9000880830DFF824190988083189B2090A9C
+S3150800CAA051EA0020DFF8B419C8840020DFF8AC1971
+S3150800CAB00885DFF8DC0A00688088DFF8A019488452
+S3150800CAC0DFF8CC0A0068C088DFF890198884DFF898
+S3150800CAD0180B0088DFF884194883DFF80C0B4088A8
+S3150800CAE0DFF878198883DFF8A80A00680088DFF875
+S3150800CAF06C19C883DFF8980A00684088DFF85C1963
+S3150800CB000884DFF8BC08DFF8BC18086000F00FBE20
+S3150800CB105AE51E34DFF8D80AA042C0F0DF80607EEE
+S3150800CB200028F6D0DFF83409808CA1888842F0D135
+S3150800CB30DFF82809408CE1888842EAD1DFF81C0929
+S3150800CB40408B21888842E4D1DFF81009808B618800
+S3150800CB508842DED1DFF8300804600020DFF8841848
+S3150800CB600870DFF8F80890F82F00400700F1CD822A
+S3150800CB70DFF8E80890F82E00C0B200098000DFF858
+S3150800CB80381C0870DFF860080088DFF82C1C097864
+S3150800CB90401A1438DFF850180880607E10F00F002D
+S3150800CBA0022808D1DFF8B40890F82F0010F03F00EB
+S3150800CBB0122800F0B382DFF830080088002807D171
+S3150800CBC0DFF8980890F82F000321084200F0A682A3
+S3150800CBD0DFF8880890F82600217A884215D1DFF810
+S3150800CBE07C0890F82700617A88420ED1DFF86C0835
+S3150800CBF090F82800A17A884207D1DFF8600890F8F3
+S3150800CC002900E17A884200F089821020DFF84C1862
+S3150800CC1081F82F002820DFF8D01708805020DFF889
+S3150800CC203C1881F82E00207ADFF8301881F82A009F
+S3150800CC30607ADFF8281881F82B00A07ADFF81C182C
+S3150800CC4081F82C00E07ADFF8141881F82D00207B93
+S3150800CC50DFF8081881F82600607BDFF8001881F8ED
+S3150800CC602700A07BDFF8F41781F82800E07BDFF8BF
+S3150800CC70EC1781F829000620DFF8E017C875A088A8
+S3150800CC80DFF8D8174884E088DFF8D0178884DFF8FB
+S3150800CC9058090088DFF8C4174883DFF84C0940882C
+S3150800CCA0DFF8B81788832088DFF8B017C88360884C
+S3150800CCB0DFF8A8170884607EC00640F111850020B9
+S3150800CCC0DFF8981781F83100DFF8900790F83100FF
+S3150800CCD0DFF8881781F8300000F00ABDDFF87C0716
+S3150800CCE090F82F0010F03F00022806D0DFF86C07F6
+S3150800CCF090F82F00400729D566E4DFF86007808C96
+S3150800CD00DFF8B81A08800020DFF8AC1A087006E0C9
+S3150800CD10DFF8A40A0078401CDFF89C1A0870DFF8D0
+S3150800CD20980A00780028E1D1DFF8900A0088DFF831
+S3150800CD30901ADFF8842A127831F812108842E7D15F
+S3150800CD4000240020DFF8701A0870F0E01420DFF8DD
+S3150800CD500C1781F82F002820DFF88C160880502041
+S3150800CD60DFF8F81681F82E00DFF8F00690F82900AB
+S3150800CD70DFF8441A0870DFF8E40690F82D00DFF8AB
+S3150800CD80DC1681F82900DFF8300A0078DFF8CC16BF
+S3150800CD9081F82D00DFF8C40690F82800DFF8181A85
+S3150800CDA00870DFF8B80690F82C00DFF8B01681F89E
+S3150800CDB02800DFF8040A0078DFF8A01681F82C00AE
+S3150800CDC0DFF8980690F82700DFF8EC190870DFF806
+S3150800CDD08C0690F82B00DFF8841681F82700DFF818
+S3150800CDE0D8090078DFF8741681F82B00DFF86C068E
+S3150800CDF090F82600DFF8C0190870DFF8600690F88A
+S3150800CE002A00DFF8581681F82600DFF8AC09007802
+S3150800CE10DFF8481681F82A00DFF8400690F82D005A
+S3150800CE20401CDFF8381681F82D00DFF8300690F838
+S3150800CE302D00002826D1DFF8240690F82C00401C87
+S3150800CE40DFF8181681F82C00DFF8100690F82C0089
+S3150800CE50002817D1DFF8040690F82B00401CDFF8ED
+S3150800CE60FC1581F82B00DFF8F40590F82B00002854
+S3150800CE7008D1DFF8E80590F82A00401CDFF8DC1531
+S3150800CE8081F82A00DFF8D405408CDFF830190880CD
+S3150800CE90DFF8C805808CDFF8C4154884DFF81C095C
+S3150800CEA00088DFF8B8158884DFF8B005408BDFF80E
+S3150800CEB0AC15C883DFF8A405808BDFF8A0150884B5
+S3150800CEC0DFF824070088DFF894154883DFF8180789
+S3150800CED04088DFF88815888300F00ABCDFF8100759
+S3150800CEE0DFF8D41809781E2251430844407E0728E3
+S3150800CEF016D1002C0BD0A07EDFF8F416DFF8B82880
+S3150800CF0012781E235A431144897E884208D2DFF8D4
+S3150800CF10E006DFF8A41809781E22514300EB010445
+S3150800CF20DFF894080078401CDFF88C180870DFF8E2
+S3150800CF3088080078002813D1DFF8B406DFF87818D7
+S3150800CF4009781E2251430844407E0028C6D1DFF8DE
+S3150800CF50A006DFF8641809781E22514300EB010485
+S3150800CF60002C3FF431ABDFF8200404600320A076E0
+S3150800CF70A07E20760020A0750420E0750020E076CB
+S3150800CF80DFF8D804808CA080DFF8D004408CE080DD
+S3150800CF90DFF8C804408B2080DFF8C004808B6080EF
+S3150800CFA001206076DFF8440400782073DFF83C043B
+S3150800CFB040786073DFF834048078A073DFF82C04B7
+S3150800CFC0C078E07301202082DFF8900490F82900E9
+S3150800CFD0E072DFF8880490F82800A072DFF87C0475
+S3150800CFE090F827006072DFF8740490F82600207223
+S3150800CFF00120FFF788FADFF8640490F82E0010F095
+S3150800D000F0005128FFF673AB0020DFF8AC17087064
+S3150800D01006E0DFF8A4070078401CDFF89C170870C4
+S3150800D020DFF894070078DFF8341491F82E10C9B2A7
+S3150800D0300909C9B2491FB0EB810FBFF658ABDFF833
+S3150800D0401C04DFF874170978084490F83600DFF8EE
+S3150800D05074170870DFF86C07007800283FF447ABB0
+S3150800D060DFF8600700780128D3D0DFF85807007882
+S3150800D07002282FD1DFF8E403DFF83C1709780844C3
+S3150800D08090F83700042825D1DFF8D003DFF82817F1
+S3150800D0900978084490F83800DFF8C013DFF8182735
+S3150800D0A01278114491F8391051EA0020DFF80C176C
+S3150800D0B00880DFF80807008840F20B61884202DB27
+S3150800D0C040F20A6002E0DFF8F40600886082A08277
+S3150800D0D0FFF70DBBDFF88403DFF8DC160978084490
+S3150800D0E090F8370000283FF402ABDFF8CC0600784A
+S3150800D0F0DFF86813DFF8C0261278114491F8371064
+S3150800D1000818DFF8B41608708AE700206076202031
+S3150800D110B449087000F0EAFBFFF756BACF4890F812
+S3150800D1202F00C0065FD5208A00285CD0218A14F11A
+S3150800D1300C00FFF767F8C94890F82A00DFF8881648
+S3150800D140097888424FD1C54890F82B00DFF8781641
+S3150800D1504978884247D1C14890F82C00DFF868160C
+S3150800D160897888423FD1BD4890F82D00DFF85816D7
+S3150800D170C978884237D1DFF8500600782073DFF87F
+S3150800D180480640786073DFF840068078A073DFF8B9
+S3150800D1903806C078E073E07E00281DD194F918009F
+S3150800D1A094F91A10401AA17DC9B2B0EBD100A17D3D
+S3150800D1B04118A17540B2002801D540B24042E17D30
+S3150800D1C0C9B2B0EB9100E17D4018E075A07DC0B210
+S3150800D1D0E17D11EBD0002076012082490870207E7F
+S3150800D1E0A07600202082607E10F00F00C0B20128D1
+S3150800D1F013D0C0F07382032800F0FA802ED30528D6
+S3150800D20000F03B82C0F00482072800F05D82C0F07F
+S3150800D2105D82082800F0F08160E272480078C00755
+S3150800D2201AD50320607640206E49087000202082B7
+S3150800D2306D480088002809D06A48007850F0020036
+S3150800D2406849087068480088FFF75DF900205B495F
+S3150800D250088000F04BFB60E1FFF7B6B9614800783B
+S3150800D260C00740F1B3807D4890F82F0010F03F00CA
+S3150800D270122840F0AB80794890F82E0010F0F000A4
+S3150800D280512827DB0020DFF83015087006E0DFF8A4
+S3150800D29028050078401CDFF820150870DFF8180507
+S3150800D2A000786E4991F82E10C9B20909C9B2491F0A
+S3150800D2B0B0EB810F0EDA6948DFF8FC1409780844E8
+S3150800D2C090F83600DFF8FC140870DFF8F8040078E8
+S3150800D2D0002822D103206076604890F82600207244
+S3150800D2E05E4890F8270060725C4890F82800A072A3
+S3150800D2F05A4890F82900E0720120FFF704F9422005
+S3150800D300384908700020208200203749088000200C
+S3150800D3102A49088000F0EAFAFFE0DFF8A804007856
+S3150800D3200128B4D0DFF89C04007802282ED14B4897
+S3150800D330DFF884140978084490F83700042825D1C2
+S3150800D3404648DFF874140978084490F838004349C9
+S3150800D350DFF864241278114491F8391051EA002054
+S3150800D360DFF858140880DFF85404008840F20B618F
+S3150800D370884202DB40F20A6002E0DFF840040088D7
+S3150800D3806082A082A6E700BF4488FE1F3348DFF804
+S3150800D39028140978084490F8370000289AD0DFF84E
+S3150800D3A0180400782D49DFF810241278114491F8F2
+S3150800D3B037100818DFF8001408706FE75A88FE1F40
+S3150800D3C0A680FE1F3C88FE1F4088FE1F20200549B8
+S3150800D3D0087000F08BFA0020DFF8F0130968487629
+S3150800D3E084E400BF6788FE1F5888FE1F4C88FE1F0E
+S3150800D3F01A4890F82F00C00732D5607EC0062FD491
+S3150800D400208A00287FF4E0A8DFF8C4030088401CBF
+S3150800D41080B2FFF778F8DFF8BC03007850F0100008
+S3150800D420DFF8B0130870DFF8A8030088002807D0D3
+S3150800D430DFF8A003007850F00200DFF898130870B0
+S3150800D44000F054FA01202082082060760020E07659
+S3150800D4501120024981F82F00FFF7DCBB7080FE1F00
+S3150800D460DFF8740390F82F00800621D5DFF86C03E7
+S3150800D4700068DFF8641391F83410DFF85C2392F83B
+S3150800D480352052EA01210844DFF850130860DFF816
+S3150800D49040030088DFF8401391F83410DFF838238A
+S3150800D4A092F8352052EA0121401ADFF82413088041
+S3150800D4B0DFF81C03008800280CD0607EC00609D45B
+S3150800D4C0C448007850F00200C2490870C048008875
+S3150800D4D0FFF719F8C04890F830000002BE4991F8E5
+S3150800D4E031104018B5490880A08AB449098888428D
+S3150800D4F003D3B2480088002802D1A08AAF49088021
+S3150800D500AE4800886082B34800780321084271D08B
+S3150800D5100020B349088000F0E9F9AE480078800693
+S3150800D5200AD50020AE490880002060761420AA4952
+S3150800D53081F82F00FFF76EBBA6480078C0060ED507
+S3150800D5400020A74908800120208204206076002058
+S3150800D550E0761120A04981F82F00FFF75BBBA048B1
+S3150800D560008800281BD09B480078C00701D50020FA
+S3150800D5702082208A00280FD1608A99490988884222
+S3150800D58002D2608A9649088095480088208206E07B
+S3150800D5904888FE1F9A80FE1F208A9149088000202D
+S3150800D5A0E076904800688D4908608D480088002814
+S3150800D5B00CD0208A002809D0208A2830844908807F
+S3150800D5C01820854981F82F00FFF728BB8148007885
+S3150800D5D080070FD528207E49088010207E4981F8CB
+S3150800D5E02F00FFF71BBB00BF3088FE1FB8FF0008DF
+S3150800D5F0F087FE1FFEF7E8BF76480078C00706D515
+S3150800D6000020607610207349087000F06FF965E015
+S3150800D6106F480088002803D06D480088FEF773FF1E
+S3150800D6206D4890F82F00C00716D56A480078C007DD
+S3150800D63006D5072060760020A0760020208201E02B
+S3150800D640062060760120FEF75EFF1020614908700B
+S3150800D65000F04CF9FFF7D9BA5E480078C00705D53F
+S3150800D6600520607600202082FEF7AEBF5848008865
+S3150800D67000287FF4CAAAFEF7A7BF554800880028E5
+S3150800D68003D053480088FEF73EFF534890F82F0012
+S3150800D690C0070DD5072060760020A0760120FEF78A
+S3150800D6A032FF10204B49087000F020F9FFF7ADBA99
+S3150800D6B04748008800287FF4A8AAFEF785BF00BF60
+S3150800D6C05887FE1F9887FE1FFFF79FBA41480078C4
+S3150800D6D0C00703D5072060760020A076FEF774BF42
+S3150800D6E006203D4981F830000A203B4981F831007F
+S3150800D6F04020394988753648008880B2000A36497C
+S3150800D700087433480088344948740020324981F83F
+S3150800D7103500314890F835002F4981F8340000204B
+S3150800D7202D494886FEF71FFEC0432B4948864520EB
+S3150800D7302949887300202849C87300202649487556
+S3150800D7402548407D2449087527480088401C2649F5
+S3150800D75008802548008880B2000A1F498874224834
+S3150800D76000881D49C87400201B490883FEF7C4FDBC
+S3150800D770C04319490883002016490870FEF72CBFD4
+S3150800D780B4FF0008010089B2090A51EA002080B2F4
+S3150800D790704710B501290DDB114A11801149096836
+S3150800D7A0884207D00E490A880E490C6801002000F5
+S3150800D7B000F046FC10BD00006888FE1F6288FE1F48
+S3150800D7C05C88FE1F6988FE1F5088FE1F4488FE1F5E
+S3150800D7D05888FE1F6788FE1F7080FE1F3C88FE1F44
+S3150800D7E05A88FE1F4088FE1F5E88FE1F62F30F22BE
+S3150800D7F062F31F42401810F0030308D0C91A1FD35A
+S3150800D800DB0748BF00F8012D28BF20F8022D1300BA
+S3150800D81030B414461546103928BF20E93C00FAD81A
+S3150800D820490728BF20E90C0048BF40F8042D8900A5
+S3150800D83028BF20F8022D48BF00F8012D30BC7047DC
+S3150800D840C91818BF00F8012DCB0728BF00F8012D0D
+S3150800D8507047000080B500F087FC00F011FE10F557
+S3150800D860FA707049086000F00BFE00F51C50103085
+S3150800D8706D490860FEF77CFD0020ADF80000002029
+S3150800D880ADF80200BDF8000068490880BDF802003E
+S3150800D890664948800020ADF800000020ADF8020077
+S3150800D8A0BDF8000062490880BDF80200604948805A
+S3150800D8B00020ADF800000020ADF80200BDF8000019
+S3150800D8C05C490880BDF802005A4948804EF60300B4
+S3150800D8D0FEF7FEFD00F0C2FC574800F012FD0621D7
+S3150800D8E0554800F03EFB00F064FB01BD80B5534887
+S3150800D8F00078400612D45148007880070ED5504863
+S3150800D9000068001D0178FF2908D14078002805D154
+S3150800D9100121002000F0E0FD00F09FFE01BD10B5DA
+S3150800D92000F0FCFC00282DD0464908804FF4006022
+S3150800D930FFF728FF4449898980B281420ED1012028
+S3150800D940FEF716FE3F48008800281BD001F048F96C
+S3150800D95000F0F8FC00203B49088013E040F606007A
+S3150800D960FFF710FF3849898980B281420AD101F050
+S3150800D970CDF834480088002804D000F0E3FC0020E5
+S3150800D9803049088000F07CFD26490968884239D369
+S3150800D9902448006810F5FA7022490860002415E04A
+S3150800D9A02A481E2101FB04F108442949086002207F
+S3150800D9B0FEF7DEFD23480088002806D001F010F99E
+S3150800D9C000F0C0FC00201F490880641C002CE7D02A
+S3150800D9D0002415E01F48402101FB04F108441E49B4
+S3150800D9E008600520FEF7C4FD16480088002806D002
+S3150800D9F001F0F6F800F0A6FC002012490880641C25
+S3150800DA00002CE7D000F03CFD07490968884208D396
+S3150800DA100548006800F51C5010300349086000F0FE
+S3150800DA209DFF10BD2488FE1F2888FE1F3088FE1F14
+S3150800DA303888FE1F3488FE1F1088FE1F6788FE1F61
+S3150800DA403C88FE1F5888FE1F7080FE1FF087FE1F49
+S3150800DA504488FE1F5887FE1F4888FE1F352202701D
+S3150800DA60401C01220270401C0170401C704710B512
+S3150800DA70040036202070641C04202070641C0422D4
+S3150800DA80DFF87815200000F0DBFA201D10BD10B570
+S3150800DA90040032202070641C04202070641C0422B8
+S3150800DAA0DFF85C15200000F0CBFA201D10BD3721E9
+S3150800DAB00170401C03210170401C01210170401CAB
+S3150800DAC003210170401C06210170401C7047FF218C
+S3150800DAD00170401C704738B50400012020700120F1
+S3150800DAE06070DFF820058069A0700020E0700422CD
+S3150800DAF0DFF81415251D280000F0A2FA0020208161
+S3150800DB00802060810422DFF8041514F10C05280032
+S3150800DB1000F096FA0421002214F110052800FFF7F8
+S3150800DB2065FE0421002214F114052800FFF75EFEA5
+S3150800DB300421002214F118052800FFF757FEDFF824
+S3150800DB40C4048269DFF8BC04416914F11C05280085
+S3150800DB5000F076FADFF8AC048069D0F110010022F3
+S3150800DB60DFF8A0048069204410F11C052800FFF79F
+S3150800DB703DFE4021002214F12C052800FFF736FE51
+S3150800DB808021002214F16C052800FFF72FFE0422DD
+S3150800DB90DFF87C14EC34200000F052FA31BD10B5E1
+S3150800DBA0DFF8700404682000FFF795FF012114F1DF
+S3150800DBB0F000FFF753FFFFF77AFFFFF788FFDFF85C
+S3150800DBC054140968411ADFF84C040068FFF7E1FDB0
+S3150800DBD010BD10B5DFF83C0404682000FFF77BFF92
+S3150800DBE0032114F1F000FFF739FFFFF740FFFFF7B5
+S3150800DBF04EFFFFF76CFFDFF81C140968411ADFF8BF
+S3150800DC0014040068FFF7C5FD10BDF8B5060006EB5D
+S3150800DC100104002509E00422B11CDFF8FC73380072
+S3150800DC2000F00EFA70783044861CA64234D230785A
+S3150800DC300128F0D003280AD0062810D0332820D08F
+S3150800DC40352814D0362814D0FF2822D0EAE7042233
+S3150800DC50B11CDFF8C873380000F0F2F9E2E70422D5
+S3150800DC60B11CDFF8BC73380000F0EAF9DAE7B578DA
+S3150800DC70D8E70422B11CDFF88473380000F0E0F915
+S3150800DC80D0E70422B11CDFF89C73380000F0D8F9FD
+S3150800DC90C8E72800C0B201E02800C0B2F2BD38B516
+S3150800DCA0DFF8700304682078022823D10422DFF8FD
+S3150800DCB05813201D01F076F800281BD1DFF844031D
+S3150800DCC08269DFF84003416914F11C0001F06AF823
+S3150800DCD000280FD1042214F11001DFF8245328007C
+S3150800DCE000F0AEF9DFF84003018814F1F000FFF701
+S3150800DCF08CFF00E0002032BD10B50120DFF80413C8
+S3150800DD000988002916D040F20F12891A25D0491E13
+S3150800DD102CD0153960D0491E67D02F3900F0BB804A
+S3150800DD20491E00F0C180143900F0DC80491E00F05D
+S3150800DD30E28010E10120B34988704FF47A70B14946
+S3150800DD400861FFF72CFFAF480169B84801F05BF896
+S3150800DD50002040F20F11AB4A1180C0B2002801D151
+S3150800DD600320FDE04FF48870A6490880B048007883
+S3150800DD70800706D4AD4801F04DF8002801D10020EF
+S3150800DD80EEE0AB480078800707D5FFF788FF022842
+S3150800DD9003D102209B4988700EE09A4800694EF626
+S3150800DDA06021884204DA974800694000954908616D
+S3150800DDB0944880780228C4D14FF47A709149086152
+S3150800DDC0FFF707FF8F480169984801F01CF8002003
+S3150800DDD040F225118B4A1180C0B2002801D10320D8
+S3150800DDE0BEE04FF493708749088091480078800711
+S3150800DDF006D48E4801F00EF8002801D10020AFE0C5
+S3150800DE008B480078800722D5FFF749FF05281ED1E1
+S3150800DE1003207C4988707B4800F0DCF87948008C40
+S3150800DE20FFF7B0FC04047748408CFFF7ABFC0443CB
+S3150800DE3064084FF47A7000FB04F0B0F1004F1CD26E
+S3150800DE404FF47A7000FB04F06E49086119E06D48DA
+S3150800DE50006942F2117188420ADA6A48006910F5C7
+S3150800DE607A7068490861674880780328A8D1D2E79C
+S3150800DE70002064490880002072E07FF00040614974
+S3150800DE80086160480169694800F0BDFF002040F25A
+S3150800DE9055115C4A1180C0B2002801D103205FE009
+S3150800DEA04FF4AB7057490880604800F0B3FF00286C
+S3150800DEB001D1002054E00220524988704FF47A704C
+S3150800DEC05049086100F075F800F0B8F8FFF781FED0
+S3150800DED04C480169554800F096FF00204FF4B5718B
+S3150800DEE0484A1180C0B2002801D1032038E040F228
+S3150800DEF06B10444908804E480078800706D44B4882
+S3150800DF0000F088FF002801D1002029E04848007861
+S3150800DF1080070AD5FFF7C3FE052806D1032039492D
+S3150800DF208870384800F056F878E73648006942F2B3
+S3150800DF30117188420ADA3348006910F57A70314956
+S3150800DF400861304880780328C0D1EAE700202D49C7
+S3150800DF500880002004E0002000202A4908800220CA
+S3150800DF6010BD80B5274A50612648816100202549A1
+S3150800DF7088704FF6FF70ADF800004FF6FF70ADF8E9
+S3150800DF8002004FF486416846FEF73AFA1D49486092
+S3150800DF901C484068002804D04FF48840194949684D
+S3150800DFA0888000201749088001BD80B5FFF7A4FEC8
+S3150800DFB001BD81B00020ADF800000020ADF80200D8
+S3150800DFC0BDF8000011490880BDF802000F494880D5
+S3150800DFD001B07047818C0D4A1180C18C0B4A518063
+S3150800DFE0018D144A1180418D124A5180018E124AC0
+S3150800DFF01180408E1049488070470000B487FE1F84
+S3150800E000BC87FE1F9887FE1FACFF00083088FE1FDE
+S3150800E010B0FF00083C88FE1FC087FE1FC887FE1F8A
+S3150800E020C487FE1FB887FE1F5888FE1FA087FE1FDD
+S3150800E0306788FE1F3888FE1F3488FE1F7047000059
+S3150800E04062B38B0708D0521E11F8013B00F8013B5A
+S3150800E05000F024808B07F6D1830740F0208000BFAC
+S3150800E060103A07D330B4B1E83810103AA0E838109F
+S3150800E070F9D230BC530724BFB1E80810A0E808104D
+S3150800E08044BF51F8043B40F8043BD20724BF31F89B
+S3150800E090022B20F8022B44BF0B7803707047083A0E
+S3150800E0A007D3B1E80810083A40F8043B40F804CB17
+S3150800E0B0F7D25307E4E70000CD48016070470168CE
+S3150800E0C0096831F4801100680160704703681B68AD
+S3150800E0D033F4904309B2194312B211430068016040
+S3150800E0E07047416990F8260040010858C00FC0B231
+S3150800E0F07047016841F21802895851F00201026816
+S3150800E10041F21803D1500168096851F0040100680A
+S3150800E11001607047016841F21802895851F40051AC
+S3150800E120026841F21803D1500168096851F00801E4
+S3150800E1300068016070470221026841F21403D15059
+S3150800E1400021006841F2040281507047416990F845
+S3150800E15026004001084480687047426990F8260006
+S3150800E1604001104441607047E0B55FF4803001908B
+S3150800E17000208DF800006A4609219E4800F058FEE6
+S3150800E18000208DF800006A4604219B4800F050FEE6
+S3150800E19000208DF800006A460221974800F048FEE4
+S3150800E1A000208DF800006A460321934800F040FEDF
+S3150800E1B000208DF8080088208DF800006A460521A1
+S3150800E1C08D4800F035FE00208DF8080088208DF86F
+S3150800E1D000006A460821884800F02AFE00208DF8CB
+S3150800E1E0080088208DF800006A460921824800F058
+S3150800E1F01FFE00208DF800006A4608217D4800F0C1
+S3150800E20017FE00208DF8080088208DF800006A4661
+S3150800E2100721794800F00CFE00208DF800006A46B8
+S3150800E2200021754800F004FE01220021724800F022
+S3150800E23087FE5FF080618908890031F00C010220B1
+S3150800E24060F30921022060F38B2131F4404101205B
+S3150800E25060F397516948FFF72FFF07BD1CB567485C
+S3150800E26000F0A3FE6548FFF72AFF00F009F900F55C
+S3150800E270985488340021614801F09FF8002803D19A
+S3150800E28000F0FEF8A042F5D35D4A00215B4801F094
+S3150800E29048F84FF400624FF480415848FFF716FFDC
+S3150800E2A05648FFF737FF5548FFF723FF08208DF834
+S3150800E2B0000000208DF8010027208DF80200692053
+S3150800E2C08DF803005B208DF8040045208DF80500C5
+S3150800E2D09DF800004B4908709DF8010049494870AF
+S3150800E2E09DF80200474988709DF803004549C870A3
+S3150800E2F09DF80400434908719DF805004149487195
+S3150800E30013BD082101700021417027218170692100
+S3150800E310C1705B21017145214171704738B50024F0
+S3150800E320364800F021FF0500002D09D040F2F550CF
+S3150800E330854205D22A003449304800F0E0FE2C0018
+S3150800E340200032BD80B53148008800284FD02F48BC
+S3150800E350008840F2F551884249D22848FFF7C1FEA5
+S3150800E360002803D02548FFF7E6FE40E02348FFF7DC
+S3150800E370EDFE002103E0244A525C4254491C234A1C
+S3150800E38012889142F7D3214801881C48FFF7E5FE19
+S3150800E3901A4890F82600194981F828001748406954
+S3150800E3A0164991F826104901144A5269134B93F8F5
+S3150800E3B026305B01D25852F0004242500F4890F87E
+S3150800E3C02600401C0D4981F826000C4890F82600C6
+S3150800E3D00A4991F82510884203D10020074981F897
+S3150800E3E026000020054908620448FFF7A4FE01BD7F
+S3150800E3F040400050008F0248008202484080FE1FBD
+S3150800E4009CFF00081888FE1F7080FE1F5888FE1F94
+S3150800E41040B2002808D589001E4A40B210F00F0005
+S3150800E420104400F8041C03E089001B4A40B211544A
+S3150800E430704780B5411EB1F1807F01D301200EE0FF
+S3150800E440401E164908603F215FF0FF30FFF7E0FFE6
+S3150800E450002013490860072012490860002002BD01
+S3150800E46080B5114800684FF47A71B0FBF1F0FFF7F8
+S3150800E470E0FF002000F001F801BD0C490860704774
+S3150800E4800A480068704709480068401C0749086040
+S3150800E4907047000018ED00E000E400E014E000E03A
+S3150800E4A018E000E010E000E08088FE1F2C88FE1FC0
+S3150800E4B080B500F024F800280DD1334833490860A8
+S3150800E4C0002004E00021314A02441171401C38281A
+S3150800E4D0F8D300F023F801BD70B504000D0000263E
+S3150800E4E000F00DF8002807D0382C05D2274820441C
+S3150800E4F0057100F013F801263000C0B270BD10B5E2
+S3150800E5000024224800682049884204D100F00CF80B
+S3150800E510002800D001242000C0B210BD80B500F04C
+S3150800E52010F81A49888701BD10B5002400F009F8CB
+S3150800E5301649898F80B2884200D101242000C0B2D2
+S3150800E54010BD00201149096850FA81F00F49096881
+S3150800E550090A50FA81F00D490968090C50FA81F048
+S3150800E5600A490968090E50FA81F0002105E0074AB0
+S3150800E5700A44127950FA82F0491C3829F7D380B236
+S3150800E580C043401C80B27047A2E742CE0080FE1FFF
+S3150800E590BFF34F8FDFF88803006810F4E060DFF8F8
+S3150800E5A084130843DFF878130860BFF34F8F00BF62
+S3150800E5B0FDE7C9B200EB8103DB69DB08DB00D2B2F9
+S3150800E5C01A43C9B200EB8100C2617047D0F8140142
+S3150800E5D0C00810F001007047016C0909090151F0E3
+S3150800E5E0020101647047C268D208D200C9B211F0AC
+S3150800E5F007011143C1607047016851F0400101608D
+S3150800E6007047016831F0400101607047016851F0B8
+S3150800E61001010160704701684908490001607047B7
+S3150800E6200068C06970470068C1617047816851F029
+S3150800E630005181600168C96851F000510068C160E5
+S3150800E640704780B500F00DF800F0ACF801BD80B554
+S3150800E65000F04FF800F034F901BD80B5FFF798FFD8
+S3150800E66001BD00B589B04FF46140009008208DF8CF
+S3150800E670040008208DF8050001208DF806001020FA
+S3150800E6808DF807000020ADF808006946A64800F096
+S3150800E690A1FE00208DF818000120079002208DF8B1
+S3150800E6A0200006AA0421A14800F0C2FB90208DF89C
+S3150800E6B00C000120049002208DF8140003AA0521FD
+S3150800E6C09A4800F0B5FB012200219748FFF771FF31
+S3150800E6D0012304221021944800F02BFF0123042271
+S3150800E6E00021914800F03AFF8F48FFF775FF09B0FF
+S3150800E6F000BD80B58E480078002817D18D4800F0F7
+S3150800E70042F801283ED18B48007800283AD089483B
+S3150800E7100078412836DAFFF7B3FE874908600120FA
+S3150800E720834908700020854908702BE08148834991
+S3150800E73009780844401C00F026F8012818D17F48BB
+S3150800E7400078401C7D4908707C480078794909782A
+S3150800E750884217D100207649087076484078FF2805
+S3150800E76010D17448807800280CD1FFF776FF09E0AD
+S3150800E770FFF786FE704909686431814202D200209B
+S3150800E7806B49087001BD10B504006748FFF71EFF06
+S3150800E790002805D1644800F05AFE2070012000E0E8
+S3150800E7A0002010BD10B58AB000F039FF040000E063
+S3150800E7B0640063488442FBD36248844201D36408F8
+S3150800E7C0FAE722000121604801F03CF800945F480E
+S3150800E7D001904FF4FA50ADF808000120ADF80A0090
+S3150800E7E069465B4800F064FF5948FFF705FF58483B
+S3150800E7F0FFF70CFF574858490860022056494968F0
+S3150800E80060F39F715448416040F2676020F0004011
+S3150800E8105149496860F31C014F4A51604E4989685D
+S3150800E82060F31C014C4881604B48406830F000504A
+S3150800E830494948604848FFF7F9FE082046490873E1
+S3150800E840002005E00021444AC0B202441174401C6D
+S3150800E8500100414A127BC9B29142F3D300203E49D6
+S3150800E86008763D4801F04BF801220121364800F0B0
+S3150800E870B5FF3748FFF7C5FE3548FFF7CCFE002041
+S3150800E8808DF8180006AA0D21284800F0D1FA902024
+S3150800E8908DF80C000120049002208DF8140003AABC
+S3150800E8A00C21224800F0C4FA2948FFF7A5FE0221E8
+S3150800E8B02748FFF798FE2648FFF7A3FE0AB010BDC3
+S3150800E8C01CB500242448FFF7ABFEC00719D522481B
+S3150800E8D001F090F8002810D1002008E01E49C0B2C7
+S3150800E8E00144097C6A46C0B211540124401C010047
+S3150800E8F0194A127BC9B29142F0D301211648FFF793
+S3150800E90092FEE4B2012C0AD100249DF80000FF28EB
+S3150800E91005D19DF80100002801D1FFF79EFE13BD21
+S3150800E9200CED00E00400FA050000034000810248EF
+S3150800E9306588FE1F1487FE1FCC87FE1F6488FE1F8E
+S3150800E940001BB700010E27070040014820A1070059
+S3150800E9500043014820500148D087FE1F10B5DFF854
+S3150800E960FC030078401CDFF8F41308700020DFF879
+S3150800E970E413087020E0DFF8E003DFF8D81309781D
+S3150800E9800C22514300EB01042088618808430028C3
+S3150800E9900BD0DFF8C8030078A17A401A782804DB80
+S3150800E9A0042100222000FEF721FFDFF8A8030078E3
+S3150800E9B0401CDFF8A0130870DFF8980300780828D1
+S3150800E9C0D9DB10BD70B50C00DFF88C530021DFF8D9
+S3150800E9D08423117006E0DFF87C130978491CDFF8F8
+S3150800E9E074231170DFF86C130978082921DADFF827
+S3150800E9F06813DFF8602312780C235A4301EB0205EB
+S3150800EA0029880029E7D069880029E4D001882A885E
+S3150800EA109142E0D141886A889142DCD106222E1DB6
+S3150800EA2021003000FFF70CFBDFF830030078A872EE
+S3150800EA306BE00021DFF81C23117006E0DFF81413E1
+S3150800EA400978491CDFF80C231170DFF808130978D8
+S3150800EA5008290EDADFF80013DFF8F82212780C23FB
+S3150800EA605A4301EB020529880029E7D1698800295C
+S3150800EA70E4D1DFF8E0120978082938D10021DFF857
+S3150800EA80E02211700021DFF8DC2211700021B14A62
+S3150800EA9011701DE0B049AF4A12780C235A4301EBB6
+S3150800EAA00205AF490978AD4A1278AB7AD21A914273
+S3150800EAB009DAAA490978AA7A891AA94A1170A549C8
+S3150800EAC00978A84A1170A3490978491CA14A117006
+S3150800EAD0A04909780829DDDBA24909789D4A117001
+S3150800EAE09D499C4A12780C235A4301EB02050422DD
+S3150800EAF001002800FFF7A4FA06222E1D2100300087
+S3150800EB00FFF79EFA95480078A87270BD10B596482A
+S3150800EB1000882A2803D20020934908805FE0002055
+S3150800EB20914908809148808AB0F5807F03D0B0F576
+S3150800EB30007F44D053E08D48C08C8D4909888842AF
+S3150800EB403CD18A48008D8A494988884236D1894904
+S3150800EB508948FFF737FF4FF40070844988820622F8
+S3150800EB608449864C2000FFF76BFA06228449814CBB
+S3150800EB702000FFF765FA06228149824C2000FFF73C
+S3150800EB805FFA06227D49794C2000FFF759FA774843
+S3150800EB90808B7649C8847548C08B74490885744843
+S3150800EBA0008872498883724840887049C8834FF440
+S3150800EBB0C1606E4988812A206B4908800FE06B483E
+S3150800EBC0C08C6B490988884209D16848008D684914
+S3150800EBD04988884203D167496748FFF7F3FE10BDA5
+S3150800EBE010B55D486149C98B674A128891420CD1B4
+S3150800EBF05E49098C644A5288914206D106226349C5
+S3150800EC005A4C2000FFF71CFA93E05849C98B604A12
+S3150800EC1012881140564A12885D4B1B881A40914249
+S3150800EC200BD15249098C5A4A52881140504A528887
+S3150800EC30574B5B881A40914208D056490988564A6C
+S3150800EC40118054494988544A518007E04749C98B7D
+S3150800EC50514A11804549098C4F4A518000213D4A45
+S3150800EC60117004E03B490978491C3A4A1170394940
+S3150800EC70097808290FDA3848364909780C225143A9
+S3150800EC8008444549098802889142EBD14249498896
+S3150800EC9042889142E6D12F490978082943D10621AD
+S3150800ECA0FF22324C2000FEF7A1FD06210022334C3C
+S3150800ECB02000FEF79BFD06223149324C2000FFF763
+S3150800ECC0BFF906222E492B4C2000FFF7B9F9324826
+S3150800ECD000882649C884304840882449088524483D
+S3150800ECE0008822498883224840882049C8834FF4EF
+S3150800ECF080701E4988824FF480701C49C88108209C
+S3150800ED001A49088206201949887404201749C874C4
+S3150800ED104FF4C160154988812048214908602A2096
+S3150800ED201149088013E00622011D104C2000FFF748
+S3150800ED3087F906221249134C2000FFF781F90820AB
+S3150800ED400A498881084800880E300749088010BD9E
+S3150800ED50000000006A88FE1FB486FE1F6C88FE1F2E
+S3150800ED606D88FE1F6B88FE1F5888FE1F7080FE1F69
+S3150800ED703088FE1F8680FE1F8C80FE1F9080FE1F37
+S3150800ED801888FE1F7680FE1FBCFF0008A4FF000837
+S3150800ED903888FE1F3488FE1F5488FE1FA680FE1F73
+S3150800EDA03C88FE1F0300002013F0030F09D0521EF3
+S3150800EDB022BF13F8010B11F801CBB0EB0C00F3D00E
+S3150800EDC07047121F22BF53F8040B51F804CB604555
+S3150800EDD0F7D0121D0AD200BA9CFA8CFCB0EB0C00D4
+S3150800EDE038BF6FF0000088BF01207047521E22BF4F
+S3150800EDF013F8010B11F801CBB0EB0C00F6D0521C3E
+S3150800EE0008BF1046704710B50400616000F028FE80
+S3150800EE10206010BD10B5040000F022FE2168401ADB
+S3150800EE206168884201DB012000E00020C0B210BD05
+S3150800EE3070B4C9B28B1000EB8303C9B28C1000EB17
+S3150800EE4084042469F82511F00306F6B2F600B540E5
+S3150800EE50AC431C61436F03244D00AC40A343436796
+S3150800EE60224B984202D0224B984205D1036E0124C8
+S3150800EE708C40A343036624E053688B404360C9B2C1
+S3150800EE80CB1000EB8303C9B2CC1000EB8404246CCE
+S3150800EE90072511F00706F6B2B600B540AC431C6468
+S3150800EEA0C9B2CB1000EB8303C9B2CC1000EB8404C3
+S3150800EEB0246C157A11F00706F6B2B600B5402C4355
+S3150800EEC01C64C9B28B1000EB8303C9B28C1000EB2B
+S3150800EED084000069127811F00301C9B2C90012FA58
+S3150800EEE001F10843186170BC70470000008E0248A3
+S3150800EEF0008F024870B4C9B28B0800EB8303C9B20D
+S3150800EF008C0800EB84042469F82511F00306F6B290
+S3150800EF10F600B540AC431C61C9B28B0800EB83030D
+S3150800EF20C9B28C0800EB84000069D2B211F0030163
+S3150800EF30C9B2C90012FA01F10843186170BC7047DA
+S3150800EF4030B4436F03244D00AC40A3434367436F7B
+S3150800EF50D2B2490012FA01F11943416730BC704731
+S3150800EF6001684FF48052895851F0010102684FF444
+S3150800EF708053D15001684FF480528958C907F9D493
+S3150800EF80704701680B64006842647047DFF8100335
+S3150800EF900068DFF81013096811F00101884070470E
+S3150800EFA080B5FFF7F3FF400802BD38B5040020001E
+S3150800EFB000F026F92000FFF7D3FF200000F0EBF859
+S3150800EFC00500D4E902232000FFF7DBFF4FF4806039
+S3150800EFD021680860802021688861DFF8CC022168F2
+S3150800EFE041F218028850DFF8C40221684FF48052B3
+S3150800EFF08850200000F021F8200000F052F85FF059
+S3150800F000FF30216841F2140288507FF07C40216865
+S3150800F010C1F810017FF07C402168C1F80C017FF02F
+S3150800F020C0202168C1F800024FF402702168C86345
+S3150800F030002020622800C0B232BD10B4002122E0B0
+S3150800F0405FF0004203694C011A5102694B011A44E8
+S3150800F05044F2F453536002694B011A44836940F23F
+S3150800F060F45404FB01F4234493604A1C90F82430BA
+S3150800F0709A4200D1002203694C01234404695201D3
+S3150800F0802244DA60491C90F824209142D8D30169B9
+S3150800F090026841F20C03D150002180F8271010BCF9
+S3150800F0A0704710B400211CE0DFF8042243694C01C4
+S3150800F0B01A5142694B011A44C36940F2F45404FBDD
+S3150800F0C001F4234493604A1C90F825309A4200D1F3
+S3150800F0D0002243694C012344446952012244DA6000
+S3150800F0E0491C90F825209142DED34169026841F215
+S3150800F0F01003D150002180F8261010BC704770B557
+S3150800F10004000E001500206994F8271049010844E8
+S3150800F11081682A003000FEF793FF206994F82710CB
+S3150800F12049015FF00042425094F82700401C84F8D9
+S3150800F130270094F8270094F82410884202D100206A
+S3150800F14084F82700206841F214014058000609D5C2
+S3150800F1508020216841F2140288500020216841F27B
+S3150800F16008028850280070BD0021016990F8270020
+S3150800F17040010858002801D500210AE010F403418F
+S3150800F180B1F5407F02D05FF0FF3102E0C0F30D40D9
+S3150800F190011F0800704710B50400FFF701FF0100C2
+S3150800F1A0002022681032DFF80C31994202D2082179
+S3150800F1B0116023E0DFF80031994202D20C21116078
+S3150800F1C01CE0DFF8F830994202D20021116015E000
+S3150800F1D0DFF8EC30994202D2042111600EE0DFF824
+S3150800F1E0E430994202D21021116007E0DFF8D830E6
+S3150800F1F0994202D21421116000E00220C0B210BD6B
+S3150800F20080B5042000F015FADFF8C00000F016FA01
+S3150800F210DFF8B80000F0FAF901BD10B404682469F3
+S3150800F22014F03C04C9B254EAC121D2B251EA82119F
+S3150800F23051F0010102681161002102681269D207C2
+S3150800F24004D4006840691880002005E0491C4FF680
+S3150800F250FF729142F1D3022010BC704710B49BB2E2
+S3150800F2600468636103681B6913F03C03C9B253EA77
+S3150800F270C121D2B251EA821151F00301026811612B
+S3150800F280002102681269D20701D4002005E0491C52
+S3150800F2904FF6FF729142F4D3022010BC704700006B
+S3150800F2A08088FE1F104600500400200280200102BC
+S3150800F2B000001030C10E16020187930301E1F5051F
+S3150800F2C081D1F00801C2EB0B81B2E60E04000020E2
+S3150800F2D038B504000D000DF1020302222900C9B257
+S3150800F2E02000FFF79AFF002818D16B460322290051
+S3150800F2F0C9B22000FFF791FF00280FD1BDF8020020
+S3150800F300222809D1BDF800004FF6F0710840B0F583
+S3150800F310AB5F01D1002002E0032000E00420C0B268
+S3150800F32032BD70B504000D0016002900C9B22000D0
+S3150800F330FFF7CEFF002826D12900C9B2200000F029
+S3150800F34023F800281FD10023B6F90200B0F5804F34
+S3150800F35001D153F40053B6F90400B0F5006F01D19A
+S3150800F36053F48073B079002801D053F48053F079B0
+S3150800F370002801D053F480439BB200222900C9B269
+S3150800F3802000FFF76BFF70BD38B504000D004FF481
+S3150800F390004300222900C9B22000FFF75FFF0028BA
+S3150800F3A00AD16B4600222900C9B22000FFF735FFB3
+S3150800F3B0BDF800100904F4D432BD80B56B460122AD
+S3150800F3C0C9B2FFF72AFFBDF80000C0B2800810F0E6
+S3150800F3D0010002BD70B504000D001026200000F0E3
+S3150800F3E041F8E879002800D0EE7932002968200033
+S3150800F3F000F061F8A879401EB11CC901090A090282
+S3150800F40051EA400040F4403050F00100E0632879AA
+S3150800F410401E000650F4817060636879002806D0A3
+S3150800F420606B6979491E50EA0140606305E0606BCC
+S3150800F4302979491E50EA014060634FF4A060A06331
+S3150800F4405FF0FF30E064B5F90800206470BDD0F8BD
+S3150800F4500C1111F0E06F01D1406D01E0D0F81C01EC
+S3150800F46080B2704710B504005848844202D0584804
+S3150800F470844203D1574800F088F812E0564884427F
+S3150800F48002D05648844203D1554800F07EF808E079
+S3150800F4905448844202D05448844202D1534800F06A
+S3150800F4A074F80320E060E068C007FCD5206C00090A
+S3150800F4B00001206410BDF8B504000E001500642E86
+S3150800F4C034D3002D32D000F0AAF86421B0FBF1F154
+S3150800F4D06420B6FBF0F60123012040F2FF3E40F21D
+S3150800F4E0FF3212E002FB01F705FB06FCB7FBFCF74F
+S3150800F4F05FEA972CBF05BF0DBCF5806F04D2774530
+S3150800F50002D2BE4660461300521E002AEAD153F4C0
+S3150800F510004121616169364A11406A1E51EA822119
+S3150800F520401E51EA00406061002000E00120C0B2A0
+S3150800F530F2BD30B4D0F8084134F0E064C0F80841B0
+S3150800F540D0F808412B4D2C4054EA03231943D2B274
+S3150800F55051EA0261C0F8081130BC704730B4D0F8DF
+S3150800F5600C4134F0E064C0F80C41D0F80C41224D4F
+S3150800F5702C4054EA03231943D2B251EA026151F0EE
+S3150800F5808051C0F80C1130BC704780B511498842CB
+S3150800F59008D14FF4006000F051F84FF4006000F015
+S3150800F5A035F812E00E49884206D1144800F046F8AC
+S3150800F5B0124800F02BF808E00C49884205D110489B
+S3150800F5C000F03CF80E4800F021F801BD00000340A9
+S3150800F5D000020340080003400000024800020248F7
+S3150800F5E00800024800400248004202480840024813
+S3150800F5F0EF8000FCC0C0FFF8C0C0FFEF800000101D
+S3150800F60000010010DFF8480000687047010F20F07D
+S3150800F6107040DFF840200C2359435050704780B59E
+S3150800F620FFF7F0FFDFF83010096811F00101C84054
+S3150800F63002BDC0B2DFF8241008607047010F20F041
+S3150800F6407040DFF81C200C235943505070470000C7
+S3150800F6508088FE1F1444005014460050044600508B
+S3150800F66048460050D0F8C40110F4407F01D101206B
+S3150800F67000E00020C0B27047C9B2D2B251EA0241D6
+S3150800F680DBB251EA0361C0F8C4117047016851F052
+S3150800F690400101607047016831F040010160704720
+S3150800F6A0814200D308007047884200D3080070479B
+S3150800F6B02DE9F04104000D000C220C22002601273A
+S3150800F6C05FF00008002042F21071012200E0521C8F
+S3150800F6D0412A40D22B685FF00A0C0CFB03F3B3FBFC
+S3150800F6E0F2FC6B68BCFBF3F35FF00A0EB3FBFEF8A3
+S3150800F6F00EFB183EBEF1060F05D35FF00A0EB3FBEC
+S3150800F700FEF35B1C03E05FF00A0EB3FBFEF3002B6F
+S3150800F71006D05FF00A0E0EFB03FEBCFBFEFC03E000
+S3150800F7200A23BCFBF3FC0123D5F804E0F44504D313
+S3150800F730D5F804E0BCEB0E0C03E0D5F804E0BEEB0C
+S3150800F7400C0C152BC3D28C45C1D216001800614685
+S3150800F750BCF57A7FBBD242F21071402200E0521EFD
+S3150800F760032A1BD3531C42F2107C0CFB03F3B3FB96
+S3150800F770F0F3B5F808C0634504D3B5F808C0B3EB91
+S3150800F7800C0C03E0B5F808C0BCEB030C8C4501D2A1
+S3150800F79017006146B5F808C06345E0D2C01BB0F152
+S3150800F7A001082000FFF772FFB8F10100000310F40A
+S3150800F7B0E0406989491E890111F0C0010843791E94
+S3150800F7C0090211F470610843711E11F03F010843E4
+S3150800F7D020612000FFF75FFFBDE8F08170B50400E7
+S3150800F7E00D0016002000FFF73DFF0028FAD06B1C1D
+S3150800F7F0DBB23200D2B202212000FFF73DFF70BD16
+S3150800F80010B50400DFF84402FFF718FFDFF83C02E2
+S3150800F810FFF7FCFE2068400840002060206880074B
+S3150800F820FCD410BD80B500F065F8012802D0022886
+S3150800F83003D005E0FFF7F3FE03E000F015F900E05A
+S3150800F840002002BD2DE9F04104000E00150020003D
+S3150800F850FFF7D6FF3100C9B2200000F042F82000B9
+S3150800F860FFF7E0FF8046B8FBF5F0D0F58061002091
+S3150800F870FFF716FF40F2FF31FFF716FF0600D6F531
+S3150800F8808060B8FBF0F7A8095FEA981840F2FF31E4
+S3150800F8904FF480625043B0FBF8F0FFF705FF00FB1A
+S3150800F8A008F1890A8901691AEA1B914201D30121E3
+S3150800F8B000E00021C9B2002900D10600C9B200291A
+S3150800F8C001D0012000E00220E168DFF88421114020
+S3150800F8D0E160E168C0B256EA80300843E060BDE8FE
+S3150800F8E0F081D0F8C82112091201C9B21143C0F833
+S3150800F8F0C8117047D0F8C80110F00F00704710B54E
+S3150800F90004002068DFF84C11081840094109000274
+S3150800F91010F4F85050EA41302168896831F47F4183
+S3150800F9202268916021688968084321688860606850
+S3150800F930C0F34070C00704D56068C0F34070C007C4
+S3150800F94036D5207E002802D0207E012830D12020FE
+S3150800F9502168C8616068C0F34070002810D16068EB
+S3150800F96010F06040616850EA814021688861A068AB
+S3150800F97010F06040A16850EA81402168C86005E03F
+S3150800F980606821688861A0682168C860207E0128AF
+S3150800F99007D1200000F00DF85FF000602168C8610B
+S3150800F9A003E04FF400602168C8612B482168C861EC
+S3150800F9B010BD0321017E012918D120210268D161D9
+S3150800F9C00168096831F07061027B120612F07062F4
+S3150800F9D01143026811600169026811614169026890
+S3150800F9E051611E490068C161002100E00321080039
+S3150800F9F0C0B270470121002100220168C969C1F31C
+S3150800FA00C0210268D269C2F38002002901D003210D
+S3150800FA1018E0012A01D1022114E00168096901618F
+S3150800FA200168496941610168C969C1F380010268D1
+S3150800FA30D269C2F3C002C9B2002902D0D2B2002AE2
+S3150800FA40EBD100210800C0B270470000100000107A
+S3150800FA50003CFFFF00B0FEB74000A00640002800AB
+S3150800FA6080B5FEF70DFD02BD00487047001BB700C4
+S3150800FA7080B566480068C00709D46548006850F034
+S3150800FA8001006349086061480068C007FBD5614802
+S3150800FA900068800509D56048006850F400705E4922
+S3150800FAA0086041F64C5000F0EBF85C48006850F4EA
+S3150800FAB000205A49086040F6C41000F0E1F857489B
+S3150800FAC0006857490840554908605648006810F0CC
+S3150800FAD0300F24D0534800685349084051490860FC
+S3150800FAE0FFF7C2FF4F490968504AB0FBF2F0401EC3
+S3150800FAF051EA00404B4908604D48006840084000FC
+S3150800FB004B4908604548006830F4003043490860AE
+S3150800FB104848006810F46070B0F5607FF8D13F4837
+S3150800FB20006850F001003D4908603C48006850F004
+S3150800FB3010003A490860404840490860374800685C
+S3150800FB4050F04000354908603448006830F010002D
+S3150800FB50324908603148006850F480202F4908600F
+S3150800FB60344800684007FBD52C4800684008400028
+S3150800FB702A4908602F480068C007FBD45FF00110C7
+S3150800FB802F49086000202F49086000202E49086088
+S3150800FB9000202E49086000202D49086003202D49C1
+S3150800FBA008602D482D4908602D482E4908601B48D5
+S3150800FBB0006830F04000194908602B481F49086062
+S3150800FBC04FF4166000F05CF828481C4908604FF4AA
+S3150800FBD0616000F055F82648184908604FF49650B9
+S3150800FBE000F04EF823481549086041F2707000F09D
+S3150800FBF047F82148114908604FF4E15000F040F8F1
+S3150800FC0000201E49086000F059F801BD0042005066
+S3150800FC100442005000440050084400501447005065
+S3150800FC20FDFFFEFF04470050CFFFF0FFA02526008A
+S3150800FC301C47005010470050002F0B011847005072
+S3150800FC400C460050144600501046005020460050FE
+S3150800FC50244600501C460050050001001846005076
+S3150800FC600300200128460050002F0501002F03013C
+S3150800FC70002F0201002F0101002F00010446005049
+S3150800FC8081B00021009103E000BF0099491C009152
+S3150800FC9000998142F8D301B07047000010B51022D0
+S3150800FCA05FF00051044C2000FEF7CAF900F054F842
+S3150800FCB0FFF7DEFE10BD00BF7088FE1F80B51F4827
+S3150800FCC00068C00327D51E480068C00701D51D482F
+S3150800FCD001E0FFF7C9FE1C490968490713D51B4906
+S3150800FCE00968C1F30361491C184A1268C2F306225F
+S3150800FCF0521C164B1B68C3F306435B1C5943B0FBE7
+S3150800FD00F1F0504308E01149096811F07F014B1CD6
+S3150800FD10B0FBF3F000E00B480849096801F0FF0161
+S3150800FD20491CB0FBF1F00A49096811F00101491CA8
+S3150800FD30B0FBF1F00749086001BD00BF0C46005052
+S3150800FD401C47005000366E011047005018470050F7
+S3150800FD50104600508088FE1F72B60D480D4908608F
+S3150800FD60BFF34F8F62B60C48006850F470000A491A
+S3150800FD7008600A48006830F0080008490860084822
+S3150800FD8000680009000150F0040005490860704742
+S3150800FD9000C0000808ED00E088ED00E014ED00E082
+S3150800FDA01420005812FA01F14160704780B580228C
+S3150800FDB008211648FFF79EF85FF480320821134899
+S3150800FDC0FFF7F0FF01BD10B5FEF75AFB0400104817
+S3150800FDD00068201AB0F5FA7F17D30E480078002875
+S3150800FDE008D101200B490870012208210748FFF7AE
+S3150800FDF0D9FF08E00020074908705FF4803208211F
+S3150800FE000248FFF7CFFF0248046010BD008502488C
+S3150800FE102088FE1F6688FE1F19E050F8041BCB07D2
+S3150800FE2044BFA9F101035918121F0023042A41F8F7
+S3150800FE30043BF9D25FEA827C0B4604D54FF0000CEE
+S3150800FE40A1F800C09B1CD10744BF0021197050F8C7
+S3150800FE50042B002AE1D1704780B500F011F8FEF7AF
+S3150800FE6027FBFDF7F7FCFEF7ECFB00210020FEF769
+S3150800FE7033FBFFF7A8FFFDF752FDFEF7E8FBF8E7AF
+S3150800FE8080B5FFF71BFFFFF791FFFEF7E9FA01BD03
+S3150800FE9010B450F8041B79B102684368024408306C
+S3150800FEA0DC0744BFA9F10104E31852F8044B43F8F0
+S3150800FEB0044B091FF9D1ECE710BC704710B5074988
+S3150800FEC079441831064C7C44163404E00A68081D47
+S3150800FED0114488470146A142F8D110BD2C00000004
+S3150800FEE0540000004EF68851CEF20001086840F42E
+S3150800FEF070000860BFF34F8FBFF36F8F4FF000702D
+S3150800FF00E1EE100A7047000011FFFFFF000800002D
+S3150800FF107080FE1FA03000000000002000000000D6
+S3150800FF2071FFFFFF300000004C0200004080FE1FFA
+S3150800FF300000000000F00BF8002801D0FFF7BEFF14
+S3150800FF400020AFF30080FFF787FF00F002F80120DA
+S3150800FF50704700F001B800000746384600F002F87E
+S3150800FF60FBE7000080B5AFF30080024A11001820B5
+S3150800FF70ABBEFBE726000200DFF808D00248804740
+S3150800FF80024800478890FE1F9DFC000891FF000864
+S3150800FF90AFF30080FFF7A6FFFFF7CCFF0100004094
+S3150800FFA000080000FFFFFFFFFFFF0000ADDE122381
+S3150800FFB063825363FFFFFFFF00000000FFFFFFFFA0
+S3150800FFC0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF57
+S3150800FFD0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF47
+S3150800FFE0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF37
+S3150800FFF0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF27
+S31508010000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF15
+S31508010010FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF05
+S31508010020FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFF5
+S31508010030FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFE5
+S31508010040FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFD5
+S31508010050FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFC5
+S31508010060FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFB5
+S31508010070FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFA5
+S31508010080FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF95
+S31508010090FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF85
+S315080100A0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF75
+S315080100B0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF65
+S315080100C0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF55
+S315080100D0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF45
+S315080100E0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF35
+S315080100F0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF25
+S31508010100FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF14
+S31508010110FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF04
+S31508010120FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFF4
+S31508010130FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFE4
+S31508010140FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFD4
+S31508010150FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFC4
+S31508010160FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFB4
+S31508010170FFF7FEBF00C00050000000000800276915
+S315080101805B450000A02F0020203000200000002041
+S31508010190D017002000000000040400000000000041
+S309080101A0000000004C
+S7050800FF9162
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/cfg/memory.x b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/cfg/memory.x
index 1e5e3fa4..a5b8ee03 100644
--- a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/cfg/memory.x
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/cfg/memory.x
@@ -2,9 +2,9 @@
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_1.xml" */
/*-Specials-*/
-define symbol __ICFEDIT_intvec_start__ = 0x08008000;
+define symbol __ICFEDIT_intvec_start__ = 0x0800C000;
/*-Memory Regions-*/
-define symbol __ICFEDIT_region_IROM1_start__ = 0x08008000;
+define symbol __ICFEDIT_region_IROM1_start__ = 0x0800C000;
define symbol __ICFEDIT_region_IROM1_end__ = 0x081FFFFF;
define symbol __ICFEDIT_region_IROM2_start__ = 0x0;
define symbol __ICFEDIT_region_IROM2_end__ = 0x0;
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/ide/settings/xmc4700.Debug.cspy.bat b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/ide/settings/xmc4700.Debug.cspy.bat
index 1950be8a..d5e1b947 100644
--- a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/ide/settings/xmc4700.Debug.cspy.bat
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/ide/settings/xmc4700.Debug.cspy.bat
@@ -25,7 +25,7 @@ if not "%~1" == "" goto debugFile
@echo on
-"C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.5\common\bin\cspybat" -f "C:\Work\software\OpenBLT_XMC4700_extras\Target\Demo\ARMCM4_XMC4_XMC4700_Relax_Kit_IAR\Prog\ide\settings\xmc4700.Debug.general.xcl" --backend -f "C:\Work\software\OpenBLT_XMC4700_extras\Target\Demo\ARMCM4_XMC4_XMC4700_Relax_Kit_IAR\Prog\ide\settings\xmc4700.Debug.driver.xcl"
+"C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.5\common\bin\cspybat" -f "C:\Work\software\OpenBLT\Target\Demo\ARMCM4_XMC4_XMC4700_Relax_Kit_IAR\Prog\ide\settings\xmc4700.Debug.general.xcl" --backend -f "C:\Work\software\OpenBLT\Target\Demo\ARMCM4_XMC4_XMC4700_Relax_Kit_IAR\Prog\ide\settings\xmc4700.Debug.driver.xcl"
@echo off
goto end
@@ -34,7 +34,7 @@ goto end
@echo on
-"C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.5\common\bin\cspybat" -f "C:\Work\software\OpenBLT_XMC4700_extras\Target\Demo\ARMCM4_XMC4_XMC4700_Relax_Kit_IAR\Prog\ide\settings\xmc4700.Debug.general.xcl" "--debug_file=%~1" --backend -f "C:\Work\software\OpenBLT_XMC4700_extras\Target\Demo\ARMCM4_XMC4_XMC4700_Relax_Kit_IAR\Prog\ide\settings\xmc4700.Debug.driver.xcl"
+"C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.5\common\bin\cspybat" -f "C:\Work\software\OpenBLT\Target\Demo\ARMCM4_XMC4_XMC4700_Relax_Kit_IAR\Prog\ide\settings\xmc4700.Debug.general.xcl" "--debug_file=%~1" --backend -f "C:\Work\software\OpenBLT\Target\Demo\ARMCM4_XMC4_XMC4700_Relax_Kit_IAR\Prog\ide\settings\xmc4700.Debug.driver.xcl"
@echo off
:end
\ No newline at end of file
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/ide/settings/xmc4700.Debug.general.xcl b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/ide/settings/xmc4700.Debug.general.xcl
index 7693d7ac..d00252ed 100644
--- a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/ide/settings/xmc4700.Debug.general.xcl
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/ide/settings/xmc4700.Debug.general.xcl
@@ -2,7 +2,7 @@
"C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.5\arm\bin\armjlink2.dll"
-"C:\Work\software\OpenBLT_XMC4700_extras\Target\Demo\ARMCM4_XMC4_XMC4700_Relax_Kit_IAR\Prog\bin\demoprog_xmc4700.out"
+"C:\Work\software\OpenBLT\Target\Demo\ARMCM4_XMC4_XMC4700_Relax_Kit_IAR\Prog\bin\demoprog_xmc4700.out"
--plugin "C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.5\arm\bin\armbat.dll"
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/ide/settings/xmc4700.wsdt b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/ide/settings/xmc4700.wsdt
index 7beea39d..91a62e36 100644
--- a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/ide/settings/xmc4700.wsdt
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/ide/settings/xmc4700.wsdt
@@ -28,7 +28,7 @@
-
+
TabID-16961-13040
@@ -44,7 +44,7 @@
TabID-8639-16881 Find in Files Find-in-Files
- 0
+ 0
TabID-27710-13044
@@ -56,20 +56,20 @@
- 0
+ 0
- TextEditor $WS_DIR$\..\main.c 0 0 0 0 0 24 2884 2884 TextEditor $WS_DIR$\..\net.c 0 0 0 0 0 135 6630 6630 1 0 1000000 1000000 1
+ TextEditor $WS_DIR$\..\main.c 0 0 0 0 0 24 2884 2884 0 0 1000000 1000000 1
- iaridepm.enu1 -2 -2 962 475 -2 -2 200 200 104167 198610 248438 957299 -2 -2 962 376 -2 -2 1924 211 1002083 209533 196875 957299
+ iaridepm.enu1 -2 -2 962 475 -2 -2 200 200 104167 198610 248438 957299 -2 -2 962 376 -2 -2 1924 211 1002083 209533 196875 957299
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/ide/xmc4700.dep b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/ide/xmc4700.dep
index bff3925e..b917c551 100644
--- a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/ide/xmc4700.dep
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/ide/xmc4700.dep
@@ -2,493 +2,329 @@
2
- 1650499025
+ 648779066
Debug
- $PROJ_DIR$\..\lib\xmclib\src\xmc_common.c
- $PROJ_DIR$\..\lib\xmclib\src\xmc_ccu8.c
- $PROJ_DIR$\..\lib\xmclib\src\xmc_ccu4.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_ccu4.h
- $PROJ_DIR$\..\obj\xmc_gpio.__cstat.et
- $PROJ_DIR$\..\obj\xmc_eth_mac.pbi
- $PROJ_DIR$\..\obj\xmc_uart.o
- $PROJ_DIR$\..\obj\xmc_gpio.o
- $PROJ_DIR$\..\obj\xmc4_gpio.pbi
- $PROJ_DIR$\..\obj\xmc_rtc.o
- $PROJ_DIR$\..\obj\xmc_vadc.o
- $PROJ_DIR$\..\obj\xmc_spi.o
- $PROJ_DIR$\..\obj\xmc4_eru.pbi
- $PROJ_DIR$\..\obj\led.__cstat.et
- $PROJ_DIR$\..\obj\xmc_ecat.pbi
- $PROJ_DIR$\..\obj\xmc_ccu4.pbi
- $PROJ_DIR$\..\obj\xmc_usbd.__cstat.et
- $PROJ_DIR$\..\obj\xmc_rtc.__cstat.et
- $PROJ_DIR$\..\obj\xmc_eth_mac.__cstat.et
- $PROJ_DIR$\..\obj\xmc_dac.__cstat.et
- $PROJ_DIR$\..\..\Boot\blt_conf.h
- $PROJ_DIR$\..\obj\xmc_eth_phy_dp83848.o
- $PROJ_DIR$\..\obj\xmc_usic.o
$TOOLKIT_DIR$\inc\c\ysizet.h
- $PROJ_DIR$\..\obj\xmc_dsd.pbi
- $PROJ_DIR$\..\obj\timer.__cstat.et
- $TOOLKIT_DIR$\lib\shb_l.a
+ $PROJ_DIR$\..\obj\xmc_usbd.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_ecat.pbi
+ $PROJ_DIR$\..\..\Boot\blt_conf.h
+ $PROJ_DIR$\..\obj\xmc_eth_mac.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_ccu4.pbi
$PROJ_DIR$\..\obj\xmc_posif.__cstat.et
- $PROJ_DIR$\..\obj\xmc_common.__cstat.et
- $PROJ_DIR$\..\obj\xmc_ebu.pbi
- $TOOLKIT_DIR$\inc\c\stdlib.h
- $PROJ_DIR$\..\obj\xmc_ccu8.__cstat.et
- $TOOLKIT_DIR$\inc\c\stddef.h
- $PROJ_DIR$\..\obj\xmc4_gpio.__cstat.et
- $PROJ_DIR$\..\obj\xmc_eth_phy_ksz8081rnb.pbi
- $PROJ_DIR$\..\obj\xmc4_rtc.o
- $PROJ_DIR$\..\obj\xmc4_gpio.o
- $PROJ_DIR$\..\obj\xmc4_rtc.pbi
- $PROJ_DIR$\..\obj\xmc_hrpwm.o
- $PROJ_DIR$\..\obj\system_XMC4700.__cstat.et
- $PROJ_DIR$\..\obj\xmc4_scu.pbi
- $PROJ_DIR$\..\obj\xmc_sdmmc.o
- $PROJ_DIR$\..\obj\xmc_ebu.o
- $TOOLKIT_DIR$\inc\c\string.h
- $PROJ_DIR$\..\obj\xmc_posif.pbi
- $PROJ_DIR$\..\obj\startup_XMC4700.o
- $PROJ_DIR$\..\obj\boot.o
- $TOOLKIT_DIR$\inc\c\xencoding_limits.h
- $TOOLKIT_DIR$\inc\c\DLib_Product_string.h
- $PROJ_DIR$\..\obj\system_XMC4700.o
- $PROJ_DIR$\..\obj\xmc_common.pbi
- $PROJ_DIR$\..\obj\xmc_posif.o
- $PROJ_DIR$\..\obj\xmc_ledts.o
- $PROJ_DIR$\..\obj\led.o
- $PROJ_DIR$\..\obj\xmc_ccu8.pbi
- $PROJ_DIR$\..\obj\timer.o
- $PROJ_DIR$\..\obj\xmc_ecat.__cstat.et
- $PROJ_DIR$\..\obj\xmc_spi.__cstat.et
- $PROJ_DIR$\..\obj\xmc4_flash.pbi
- $PROJ_DIR$\..\obj\xmc_dac.pbi
- $PROJ_DIR$\..\obj\xmc_dsd.__cstat.et
- $PROJ_DIR$\..\obj\xmc_can.pbi
- $PROJ_DIR$\..\obj\xmc_fce.pbi
- $PROJ_DIR$\..\obj\xmc_dma.o
- $PROJ_DIR$\..\obj\uip_arp.o
- $PROJ_DIR$\..\obj\dhcpc.o
- $PROJ_DIR$\..\obj\uip_timer.pbi
- $TOOLKIT_DIR$\lib\dl7M_tln.a
- $TOOLKIT_DIR$\inc\c\stdio.h
- $PROJ_DIR$\..\obj\uiplib.o
- $PROJ_DIR$\..\obj\timer.pbi
- $PROJ_DIR$\..\obj\net.__cstat.et
- $PROJ_DIR$\..\obj\netdev.__cstat.et
- $PROJ_DIR$\..\obj\xmc_usbh.o
- $TOOLKIT_DIR$\inc\c\ystdio.h
- $PROJ_DIR$\..\obj\uip_timer.__cstat.et
- $TOOLKIT_DIR$\lib\m7M_tls.a
- $PROJ_DIR$\..\obj\clock-arch.__cstat.et
- $PROJ_DIR$\..\obj\dhcpc.__cstat.et
- $PROJ_DIR$\..\obj\xmc_i2s.o
- $PROJ_DIR$\..\obj\uiplib.__cstat.et
- $PROJ_DIR$\..\obj\xmc_ccu8.o
- $PROJ_DIR$\..\obj\uip.__cstat.et
- $PROJ_DIR$\..\obj\uip.o
- $TOOLKIT_DIR$\inc\c\DLib_Config_Normal.h
- $PROJ_DIR$\..\obj\dhcpc.pbi
- $PROJ_DIR$\..\obj\uip_arp.__cstat.et
- $TOOLKIT_DIR$\inc\c\limits.h
- $PROJ_DIR$\..\obj\uip_timer.o
- $PROJ_DIR$\..\obj\uip.pbi
- $PROJ_DIR$\..\obj\boot.pbi
- $PROJ_DIR$\..\obj\uip_arp.pbi
- $PROJ_DIR$\..\obj\uiplib.pbi
- $TOOLKIT_DIR$\inc\c\DLib_Defaults.h
- $PROJ_DIR$\..\obj\xmc_wdt.pbi
- $PROJ_DIR$\..\obj\demoprog_xmc4700.map
- $PROJ_DIR$\..\obj\xmc_eth_mac.o
- $TOOLKIT_DIR$\inc\c\stdbool.h
- $TOOLKIT_DIR$\inc\c\yvals.h
- $PROJ_DIR$\..\bin\demoprog_xmc4700.srec
- $PROJ_DIR$\..\obj\boot.__cstat.et
- $PROJ_DIR$\..\obj\xmc4_scu.__cstat.et
- $PROJ_DIR$\..\obj\xmc_i2c.pbi
- $PROJ_DIR$\..\obj\xmc_i2c.__cstat.et
- $PROJ_DIR$\..\obj\main.o
- $PROJ_DIR$\..\obj\xmc_usbh.pbi
- $PROJ_DIR$\..\obj\xmc_ledts.pbi
- $PROJ_DIR$\..\obj\xmc4700.pbd
+ $PROJ_DIR$\..\obj\xmc4_gpio.pbi
+ $PROJ_DIR$\..\obj\xmc_eth_phy_dp83848.o
+ $PROJ_DIR$\..\obj\xmc_spi.o
$PROJ_DIR$\..\obj\main.pbi
- $PROJ_DIR$\..\obj\xmc4_eru.__cstat.et
- $PROJ_DIR$\..\obj\xmc_fce.o
- $PROJ_DIR$\..\obj\xmc_eru.pbi
- $PROJ_DIR$\..\obj\xmc_sdmmc.__cstat.et
- $PROJ_DIR$\..\obj\xmc_ccu4.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_gpio.o
+ $PROJ_DIR$\..\obj\xmc_common.__cstat.et
+ $PROJ_DIR$\..\obj\led.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_uart.o
$PROJ_DIR$\..\obj\xmc_hrpwm.pbi
- $TOOLKIT_DIR$\lib\rt7M_tl.a
+ $PROJ_DIR$\..\obj\xmc_eth_mac.pbi
+ $PROJ_DIR$\..\obj\xmc_usic.o
+ $PROJ_DIR$\..\obj\xmc_fce.o
$TOOLKIT_DIR$\inc\c\stdint.h
- $PROJ_DIR$\..\obj\xmc_ledts.__cstat.et
- $PROJ_DIR$\..\obj\xmc_eth_phy_dp83848.pbi
- $TOOLKIT_DIR$\inc\c\DLib_Threads.h
- $PROJ_DIR$\..\obj\xmc_usic.pbi
- $PROJ_DIR$\..\obj\xmc4_eru.o
- $PROJ_DIR$\..\obj\xmc_uart.pbi
- $PROJ_DIR$\..\obj\led.pbi
- $PROJ_DIR$\..\obj\xmc_sdmmc.pbi
- $PROJ_DIR$\..\obj\xmc_vadc.pbi
- $PROJ_DIR$\..\obj\xmc_i2s.pbi
- $PROJ_DIR$\..\obj\xmc_dsd.o
- $PROJ_DIR$\..\obj\xmc_eru.o
- $PROJ_DIR$\..\obj\xmc_wdt.o
- $PROJ_DIR$\..\obj\xmc_eth_phy_ksz8031rnl.o
- $PROJ_DIR$\..\obj\xmc_i2c.o
- $PROJ_DIR$\..\obj\xmc_dac.o
- $PROJ_DIR$\..\obj\xmc_dma.pbi
- $PROJ_DIR$\..\obj\xmc4_flash.__cstat.et
- $PROJ_DIR$\..\obj\xmc_usbh.__cstat.et
- $PROJ_DIR$\..\obj\xmc_usbd.o
- $PROJ_DIR$\..\obj\xmc4_scu.o
- $PROJ_DIR$\..\bin\demoprog_xmc4700.out
- $PROJ_DIR$\..\obj\xmc_eth_phy_dp83848.__cstat.et
- $PROJ_DIR$\..\obj\xmc_ecat.o
- $PROJ_DIR$\..\obj\xmc_dma.__cstat.et
- $PROJ_DIR$\..\obj\xmc_vadc.__cstat.et
- $TOOLKIT_DIR$\inc\c\cmsis_iar.h
- $PROJ_DIR$\..\obj\xmc4_flash.o
+ $PROJ_DIR$\..\obj\timer.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_eth_mac.o
+ $PROJ_DIR$\..\obj\xmc4_eru.pbi
+ $PROJ_DIR$\..\obj\xmc_dac.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_ebu.pbi
+ $PROJ_DIR$\..\obj\xmc_gpio.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_rtc.o
+ $PROJ_DIR$\..\obj\xmc_dsd.pbi
+ $PROJ_DIR$\..\obj\xmc_rtc.__cstat.et
+ $TOOLKIT_DIR$\inc\c\stdlib.h
+ $TOOLKIT_DIR$\lib\shb_l.a
+ $PROJ_DIR$\..\obj\xmc_vadc.o
+ $PROJ_DIR$\..\obj\xmc4700.pbd
+ $PROJ_DIR$\..\cfg\memory.x
+ $TOOLKIT_DIR$\inc\c\limits.h
+ $PROJ_DIR$\..\obj\dhcpc.pbi
+ $TOOLKIT_DIR$\inc\c\ycheck.h
+ $PROJ_DIR$\..\obj\system_XMC4700.pbi
+ $PROJ_DIR$\..\obj\uip.pbi
+ $PROJ_DIR$\..\obj\uip_timer.pbi
+ $PROJ_DIR$\..\obj\dhcpc.o
+ $PROJ_DIR$\..\obj\timer.pbi
+ $PROJ_DIR$\..\obj\xmc_dsd.__cstat.et
+ $PROJ_DIR$\..\obj\uip_timer.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_ccu8.o
+ $TOOLKIT_DIR$\lib\m7M_tls.a
+ $PROJ_DIR$\..\obj\uiplib.__cstat.et
+ $PROJ_DIR$\..\obj\uiplib.o
+ $PROJ_DIR$\..\obj\uip.o
+ $PROJ_DIR$\..\obj\xmc_dma.o
+ $PROJ_DIR$\..\obj\xmc_i2s.o
+ $PROJ_DIR$\..\obj\xmc_dac.pbi
+ $PROJ_DIR$\..\obj\uip_arp.o
+ $PROJ_DIR$\..\obj\uip_arp.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_can.pbi
+ $PROJ_DIR$\..\obj\uip.__cstat.et
+ $PROJ_DIR$\..\obj\clock-arch.o
+ $PROJ_DIR$\..\obj\xmc4_flash.pbi
+ $TOOLKIT_DIR$\inc\c\ystdio.h
+ $PROJ_DIR$\..\obj\uip_timer.o
+ $PROJ_DIR$\..\obj\xmc_wdt.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_eth_phy_ksz8081rnb.__cstat.et
+ $PROJ_DIR$\..\obj\net.__cstat.et
+ $PROJ_DIR$\..\obj\dhcpc.__cstat.et
+ $TOOLKIT_DIR$\inc\c\stdio.h
+ $PROJ_DIR$\..\obj\timer.o
+ $PROJ_DIR$\..\obj\xmc_hrpwm.o
+ $PROJ_DIR$\..\obj\xmc_ledts.o
+ $PROJ_DIR$\..\obj\xmc_posif.o
+ $PROJ_DIR$\..\obj\xmc4_gpio.o
+ $TOOLKIT_DIR$\inc\c\DLib_Config_Normal.h
+ $PROJ_DIR$\..\obj\startup_XMC4700.o
+ $TOOLKIT_DIR$\inc\c\stddef.h
+ $PROJ_DIR$\..\obj\xmc_usbh.o
+ $PROJ_DIR$\..\obj\system_XMC4700.o
+ $PROJ_DIR$\..\obj\xmc4_rtc.o
+ $PROJ_DIR$\..\obj\clock-arch.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_eth_phy_ksz8081rnb.pbi
+ $PROJ_DIR$\..\obj\xmc_fce.pbi
+ $PROJ_DIR$\..\obj\xmc_ebu.o
+ $PROJ_DIR$\..\obj\xmc_posif.pbi
+ $PROJ_DIR$\..\obj\xmc4_scu.pbi
+ $PROJ_DIR$\..\obj\xmc_ccu8.__cstat.et
+ $TOOLKIT_DIR$\lib\dl7M_tln.a
+ $PROJ_DIR$\..\obj\xmc4_rtc.pbi
+ $PROJ_DIR$\..\obj\led.o
+ $TOOLKIT_DIR$\inc\c\DLib_Product_string.h
+ $PROJ_DIR$\..\obj\xmc_common.pbi
+ $PROJ_DIR$\..\obj\xmc_spi.__cstat.et
+ $PROJ_DIR$\..\obj\netdev.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_ccu8.pbi
+ $PROJ_DIR$\..\obj\xmc_ecat.__cstat.et
$PROJ_DIR$\..\obj\xmc_fce.__cstat.et
$PROJ_DIR$\..\obj\xmc_can.__cstat.et
- $PROJ_DIR$\..\obj\xmc_eth_phy_ksz8031rnl.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_usic.pbi
+ $PROJ_DIR$\..\obj\system_XMC4700.__cstat.et
+ $PROJ_DIR$\..\obj\xmc4_eru.o
+ $PROJ_DIR$\..\obj\xmc4_gpio.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_ledts.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_vadc.pbi
+ $PROJ_DIR$\..\obj\xmc4_flash.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_eth_phy_dp83848.__cstat.et
+ $TOOLKIT_DIR$\inc\c\string.h
+ $PROJ_DIR$\..\obj\xmc_dsd.o
+ $PROJ_DIR$\..\obj\xmc_dac.o
+ $PROJ_DIR$\..\obj\xmc_sdmmc.o
+ $PROJ_DIR$\..\obj\boot.o
$PROJ_DIR$\..\obj\xmc_usic.__cstat.et
- $PROJ_DIR$\..\obj\xmc_i2s.__cstat.et
- $PROJ_DIR$\..\obj\xmc_eru.__cstat.et
- $PROJ_DIR$\..\obj\xmc_rtc.pbi
- $PROJ_DIR$\..\lib\uip\clock-arch.c
- $PROJ_DIR$\..\lib\xmclib\src\xmc4_scu.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc4_scu.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_can_map.h
- $PROJ_DIR$\..\lib\cmsis\core_cmFunc.h
+ $TOOLKIT_DIR$\inc\c\xencoding_limits.h
+ $PROJ_DIR$\..\obj\xmc_usbd.o
+ $PROJ_DIR$\..\obj\xmc_ecat.o
+ $PROJ_DIR$\..\obj\xmc_dma.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_eth_phy_dp83848.pbi
+ $PROJ_DIR$\..\obj\xmc_dma.pbi
+ $PROJ_DIR$\..\obj\xmc_wdt.o
+ $PROJ_DIR$\..\obj\xmc_vadc.__cstat.et
+ $TOOLKIT_DIR$\inc\c\cmsis_iar.h
+ $PROJ_DIR$\..\obj\xmc_i2s.pbi
+ $PROJ_DIR$\..\obj\xmc_i2c.o
+ $PROJ_DIR$\..\obj\xmc4_scu.o
+ $PROJ_DIR$\..\obj\xmc_uart.pbi
+ $PROJ_DIR$\..\obj\xmc_sdmmc.pbi
+ $TOOLKIT_DIR$\inc\c\DLib_Threads.h
+ $PROJ_DIR$\..\obj\xmc_eth_phy_ksz8031rnl.o
+ $PROJ_DIR$\..\obj\xmc4_flash.o
+ $PROJ_DIR$\..\obj\demoprog_xmc4700.map
+ $PROJ_DIR$\..\obj\boot.pbi
+ $PROJ_DIR$\..\obj\xmc_usbh.pbi
+ $PROJ_DIR$\..\obj\xmc_wdt.pbi
+ $PROJ_DIR$\..\bin\demoprog_xmc4700.srec
+ $PROJ_DIR$\..\obj\xmc_usbh.__cstat.et
+ $PROJ_DIR$\..\obj\main.o
+ $PROJ_DIR$\..\obj\led.pbi
+ $TOOLKIT_DIR$\inc\c\DLib_Defaults.h
+ $PROJ_DIR$\..\obj\xmc_ledts.pbi
+ $PROJ_DIR$\..\obj\xmc_ccu4.__cstat.et
+ $TOOLKIT_DIR$\inc\c\yvals.h
+ $PROJ_DIR$\..\obj\xmc_eth_phy_ksz8031rnl.__cstat.et
+ $PROJ_DIR$\..\obj\uiplib.pbi
+ $PROJ_DIR$\..\obj\boot.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_i2c.pbi
+ $PROJ_DIR$\..\obj\xmc_i2c.__cstat.et
+ $PROJ_DIR$\..\obj\uip_arp.pbi
+ $PROJ_DIR$\..\obj\xmc4_scu.__cstat.et
+ $TOOLKIT_DIR$\lib\rt7M_tl.a
+ $PROJ_DIR$\..\bin\demoprog_xmc4700.out
+ $PROJ_DIR$\..\obj\xmc_eru.o
+ $PROJ_DIR$\..\obj\xmc4_eru.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_sdmmc.__cstat.et
+ $TOOLKIT_DIR$\inc\c\stdbool.h
+ $PROJ_DIR$\..\obj\xmc_eru.pbi
$PROJ_DIR$\..\lib\xmclib\inc\xmc4_ccu4_map.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc4_eru.c
- $PROJ_DIR$\..\lib\xmclib\src\xmc4_gpio.c
- $PROJ_DIR$\..\lib\cmsis\core_cmInstr.h
- $PROJ_DIR$\..\lib\cmsis\core_cmSimd.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc4_ccu8_map.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc4_eru_map.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc4_usic_map.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc4_flash.h
- $PROJ_DIR$\..\lib\cmsis\core_cm4.h
- $PROJ_DIR$\..\lib\uip\clock-arch.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc4_rtc.h
- $PROJ_DIR$\..\lib\uip\netdev.c
$PROJ_DIR$\..\lib\uip\netdev.h
- $PROJ_DIR$\..\lib\uip\uip-conf.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc4_ccu8_map.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc4_gpio.c
+ $PROJ_DIR$\..\lib\cmsis\core_cmSimd.h
+ $PROJ_DIR$\..\lib\uip\clock-arch.c
$PROJ_DIR$\..\lib\xmclib\src\xmc4_flash.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc4_gpio.h
$PROJ_DIR$\..\lib\xmclib\inc\xmc4_gpio_map.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc4_rtc.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_can.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_ccu8.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc4_scu.h
$PROJ_DIR$\..\lib\xmclib\src\xmc_can.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_scu.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_usbd.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_gpio.c
- $PROJ_DIR$\..\lib\xmclib\src\xmc_ledts.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_spi.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_usbh.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_hrpwm.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_uart.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_ledts.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_rtc.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_sdmmc.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_i2s.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_sdmmc.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_spi.c
- $PROJ_DIR$\..\lib\xmclib\src\xmc_uart.c
- $PROJ_DIR$\..\lib\xmclib\src\xmc_usbd.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_usbd_regs.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_usbh.c
- $PROJ_DIR$\..\lib\xmclib\src\xmc_usic.c
- $PROJ_DIR$\..\lib\xmclib\src\xmc_posif.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_usic.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_posif.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_vadc.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_vadc.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_wdt.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_gpio.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_hrpwm.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_i2c.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_i2s.c
- $PROJ_DIR$\..\lib\xmclib\src\xmc_i2c.c
- $PROJ_DIR$\..\lib\xmclib\src\xmc_rtc.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_can.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc4_rtc.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_ccu4.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc4_eru.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc4_flash.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc4_usic_map.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_can_map.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc4_rtc.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc4_gpio.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_ccu8.c
+ $PROJ_DIR$\..\lib\uip\clock-arch.h
+ $PROJ_DIR$\..\lib\uip\netdev.c
+ $PROJ_DIR$\..\lib\uip\uip-conf.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc4_eru_map.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_ccu4.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_ccu8.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_common.c
$PROJ_DIR$\..\lib\xmclib\inc\xmc_common.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_dma.c
- $PROJ_DIR$\..\lib\xmclib\src\xmc_dsd.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_ecat.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc4_scu.c
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_dac.c
+ $PROJ_DIR$\..\lib\cmsis\core_cmInstr.h
+ $PROJ_DIR$\..\lib\cmsis\core_cm4.h
+ $PROJ_DIR$\..\lib\cmsis\core_cmFunc.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_dma_map.h
$PROJ_DIR$\..\lib\xmclib\src\xmc_fce.c
- $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_phy_ksz8031rnl.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_dsd.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_mac.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_dac.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_eru.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_phy_dp83848.c
- $PROJ_DIR$\..\lib\xmclib\src\xmc_eru.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_fce.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_device.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_eth_mac.h
$PROJ_DIR$\..\lib\xmclib\inc\xmc_flash.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_vadc_map.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_gpio.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_hrpwm_map.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_fce.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_i2c.c
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_ecat.c
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_phy_ksz8031rnl.c
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_phy_dp83848.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_hrpwm.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_mac.c
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_phy_ksz8081rnb.c
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_dsd.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_ecat_map.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_i2c.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_dsd.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_eru.c
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_ledts.c
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_ebu.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_i2s.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_ledts.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_eth_mac.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_ecat.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_gpio.c
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_hrpwm.c
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_i2s.c
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_posif.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_eru.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_ebu.h
$PROJ_DIR$\..\lib\xmclib\inc\xmc_eth_mac_map.h
$PROJ_DIR$\..\lib\xmclib\inc\xmc_eth_phy.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_dac.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_dma.h
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_dma_map.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_ecat.c
- $PROJ_DIR$\..\lib\xmclib\src\xmc_ebu.c
- $PROJ_DIR$\..\lib\xmclib\inc\xmc_ebu.h
- $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_phy_ksz8081rnb.c
- $PROJ_DIR$\..\startup_XMC4700.s
- $PROJ_DIR$\..\lib\system_XMC4700.c
- $PROJ_DIR$\..\net.h
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip_arch.h
- $PROJ_DIR$\..\timer.c
- $PROJ_DIR$\..\timer.h
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_usbd.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_usic.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_vadc.h
$PROJ_DIR$\..\lib\xmclib\inc\xmc_wdt.h
- $PROJ_DIR$\..\lib\XMC4700.h
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\lc.h
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\pt.h
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\apps\dhcpc\dhcpc.c
+ $PROJ_DIR$\..\lib\system_XMC4700.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_scu.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_uart.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_usbh.c
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_wdt.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_posif.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_sdmmc.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_usbh.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_vadc.c
$PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\clock.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_rtc.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_spi.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_uart.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_sdmmc.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_usbd.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_usbd_regs.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_usic.c
+ $PROJ_DIR$\..\lib\system_XMC4700.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_rtc.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_vadc_map.h
+ $PROJ_DIR$\..\lib\XMC4700.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_spi.c
+ $PROJ_DIR$\..\obj\net.o
+ $PROJ_DIR$\..\obj\xmc_eth_phy_ksz8081rnb.o
+ $PROJ_DIR$\..\obj\xmc_rtc.pbi
+ $PROJ_DIR$\..\obj\xmc_gpio.pbi
+ $TOOLKIT_DIR$\inc\c\DLib_Product.h
+ $PROJ_DIR$\..\obj\main.__cstat.et
+ $PROJ_DIR$\..\obj\xmc4_rtc.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_i2s.__cstat.et
+ $PROJ_DIR$\..\timer.c
+ $PROJ_DIR$\..\obj\xmc_hrpwm.__cstat.et
+ $TOOLKIT_DIR$\inc\c\time.h
+ $PROJ_DIR$\..\shared_params.h
+ $PROJ_DIR$\..\obj\shared_params.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_ccu4.o
+ $PROJ_DIR$\..\obj\xmc_common.o
+ $PROJ_DIR$\..\shared_params.c
+ $PROJ_DIR$\..\timer.h
+ $PROJ_DIR$\..\obj\netdev.pbi
+ $PROJ_DIR$\..\obj\xmc_usbd.pbi
+ $PROJ_DIR$\..\obj\clock-arch.pbi
+ $TOOLKIT_DIR$\inc\c\intrinsics.h
+ $PROJ_DIR$\..\obj\netdev.o
+ $PROJ_DIR$\..\obj\xmc_spi.pbi
+ $PROJ_DIR$\..\obj\xmc_uart.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_ebu.__cstat.et
+ $PROJ_DIR$\..\obj\net.pbi
+ $PROJ_DIR$\..\obj\shared_params.o
+ $PROJ_DIR$\..\obj\shared_params.pbi
+ $PROJ_DIR$\..\startup_XMC4700.s
+ $PROJ_DIR$\..\obj\xmc_eth_phy_ksz8031rnl.pbi
+ $PROJ_DIR$\..\obj\xmc_eru.__cstat.et
+ $PROJ_DIR$\..\obj\xmc_can.o
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\pt.h
+ $PROJ_DIR$\..\net.c
+ $PROJ_DIR$\..\net.h
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\lc.h
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip_timer.h
+ $PROJ_DIR$\..\header.h
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\lc-addrlabels.h
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip_arch.h
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip_arp.c
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uipopt.h
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\apps\dhcpc\dhcpc.h
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip.c
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip_arp.h
+ $PROJ_DIR$\..\boot.c
+ $PROJ_DIR$\..\led.c
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\lc-switch.h
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip.h
$PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip_timer.c
$PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uiplib.h
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uipopt.h
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\apps\dhcpc\dhcpc.c
- $PROJ_DIR$\..\lib\system_XMC4700.h
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uiplib.c
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\apps\dhcpc\dhcpc.h
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip_arp.h
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip_timer.h
$PROJ_DIR$\..\boot.h
- $PROJ_DIR$\..\main.c
- $PROJ_DIR$\..\header.h
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip.c
$PROJ_DIR$\..\led.h
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip_arp.c
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\lc-switch.h
- $PROJ_DIR$\..\led.c
- $PROJ_DIR$\..\boot.c
- $PROJ_DIR$\..\net.c
- $TOOLKIT_DIR$\inc\c\ycheck.h
- $TOOLKIT_DIR$\inc\c\DLib_Product.h
- $PROJ_DIR$\..\obj\net.o
- $PROJ_DIR$\..\obj\xmc_wdt.__cstat.et
- $PROJ_DIR$\..\obj\xmc4_rtc.__cstat.et
- $PROJ_DIR$\..\obj\netdev.o
- $TOOLKIT_DIR$\inc\c\intrinsics.h
- $TOOLKIT_DIR$\inc\c\time.h
- $PROJ_DIR$\..\obj\xmc_usbd.pbi
- $PROJ_DIR$\..\obj\xmc_spi.pbi
- $PROJ_DIR$\..\obj\clock-arch.pbi
- $PROJ_DIR$\..\obj\xmc_uart.__cstat.et
- $PROJ_DIR$\..\obj\xmc_hrpwm.__cstat.et
- $PROJ_DIR$\..\cfg\memory.x
- $PROJ_DIR$\..\obj\xmc_ccu4.o
- $PROJ_DIR$\..\obj\xmc_gpio.pbi
- $PROJ_DIR$\..\obj\xmc_ebu.__cstat.et
- $PROJ_DIR$\..\obj\xmc_eth_phy_ksz8081rnb.o
- $PROJ_DIR$\..\obj\xmc_eth_phy_ksz8081rnb.__cstat.et
- $PROJ_DIR$\..\obj\xmc_common.o
- $PROJ_DIR$\..\obj\clock-arch.o
- $PROJ_DIR$\..\obj\main.__cstat.et
- $PROJ_DIR$\..\obj\system_XMC4700.pbi
- $PROJ_DIR$\..\obj\net.pbi
- $PROJ_DIR$\..\obj\netdev.pbi
- $PROJ_DIR$\..\obj\xmc_can.o
- $PROJ_DIR$\..\obj\xmc_eth_phy_ksz8031rnl.pbi
- $PROJ_DIR$\..\obj\shared_params.pbi
- $PROJ_DIR$\..\shared_params.h
- $PROJ_DIR$\..\shared_params.c
- $PROJ_DIR$\..\obj\shared_params.o
- $PROJ_DIR$\..\obj\shared_params.__cstat.et
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uiplib.c
+ $PROJ_DIR$\..\main.c
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_dma.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_dac.h
+ $PROJ_DIR$\..\lib\xmclib\inc\xmc_device.h
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_dma.c
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_common.c
-
-
- BICOMP
- 50
-
-
- ICCARM
- 286
-
-
- __cstat
- 28
-
-
-
-
- BICOMP
- 98 116 47 84 267 23 43 93 268 48 244 252 273 32 97 223 119 166 156 210 160 161 143
-
-
- ICCARM
- 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_ccu8.c
-
-
- BICOMP
- 54
-
-
- ICCARM
- 81
-
-
- __cstat
- 31
-
-
-
-
- ICCARM
- 177 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 162 179 154
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_ccu4.c
-
-
- BICOMP
- 15
-
-
- ICCARM
- 281
-
-
- __cstat
- 113
-
-
-
-
- BICOMP
- 93 267 43 244 268 48 252 179 116 98 47 84 23 156 210 157 32 97 223 119 166 273 3 160 161 143 154
-
-
- ICCARM
- 3 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 157 179 154
-
-
-
-
- [ROOT_NODE]
-
-
- ILINK
- 138 95
-
-
-
$PROJ_DIR$\..\bin\demoprog_xmc4700.out
+
+ ILINK
+ 125
+
OBJCOPY
- 99
-
-
- ILINK
- 95
+ 129
ILINK
- 280 46 287 65 53 104 269 272 297 45 49 55 83 64 88 69 121 144 36 35 137 292 281 81 286 132 63 127 42 140 128 96 21 130 284 110 7 38 131 79 52 51 9 41 11 6 136 73 22 10 129 26 115 76 67
-
-
-
-
- $PROJ_DIR$\..\lib\uip\clock-arch.c
-
-
- BICOMP
- 277
-
-
- ICCARM
- 287
-
-
- __cstat
- 77
-
-
-
-
- BICOMP
- 238 244 252 261 161 47 119 273 116 167 20 257 241 295 166 160 267 93 98 259 156 84 268 143 97
-
-
- ICCARM
- 259 20 244 166 116 267 98 93 84 268 47 119 160 143 273 156 161 252 257 261 241 238 295 97 167
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc4_scu.c
-
-
- BICOMP
- 40
-
-
- ICCARM
- 137
-
-
- __cstat
- 101
-
-
-
-
- BICOMP
- 267 244 273 93 43 268 48 252 210 116 98 47 84 23 154 32 97 223 119 166 156 179 160 161 143
-
-
- ICCARM
- 179 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 154
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc4_eru.c
-
-
- BICOMP
- 12
-
-
- ICCARM
- 121
-
-
- __cstat
- 109
-
-
-
-
- BICOMP
- 143 116 98 163 47 84 267 23 43 93 268 48 244 252 160 179 210 32 97 223 119 166 161 219 156 273 154
-
-
- ICCARM
- 219 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 163 179 154
+ 33 106 56 40 85 131 243 264 269 71 74 65 48 52 59 47 96 124 69 75 119 274 256 44 257 104 49 103 79 110 146 21 8 123 244 18 11 66 118 50 67 68 26 105 9 14 109 73 17 31 114 30 144 45 83
@@ -496,1122 +332,1028 @@
$PROJ_DIR$\..\lib\xmclib\src\xmc4_gpio.c
- BICOMP
- 8
+ ICCARM
+ 69
- ICCARM
- 36
+ BICOMP
+ 7
__cstat
- 33
+ 97
- BICOMP
- 97 23 267 98 166 161 210 32 223 119 116 173 43 93 47 84 268 48 244 252 160 143 204 156 273 174
+ ICCARM
+ 187 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 169 158
- ICCARM
- 204 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 173 174
+ BICOMP
+ 149 0 36 136 182 155 178 72 300 122 19 169 102 133 108 70 247 86 241 238 181 116 187 183 263 158
- $PROJ_DIR$\..\lib\uip\netdev.c
+ $PROJ_DIR$\..\lib\uip\clock-arch.c
- BICOMP
- 291
+ ICCARM
+ 56
- ICCARM
- 272
+ BICOMP
+ 262
__cstat
- 72
+ 76
- BICOMP
- 166 223 116 47 84 210 224 261 267 255 43 244 238 273 250 254 32 98 242 204 228 20 257 241 295 252 156 93 268 259 256 247 173 97 23 160 161 119 143 171 246 167 245 263 48 174 227
+ ICCARM
+ 280 3 241 182 19 36 136 133 70 247 108 122 181 116 263 183 155 238 294 295 259 277 254 149 171
- ICCARM
- 259 20 244 166 116 267 98 93 84 268 47 119 160 143 273 156 161 252 257 261 241 238 295 97 242 250 171 254 256 247 167 246 245 263 255 204 210 32 23 43 48 223 173 174 224 227 228
+ BICOMP
+ 182 277 241 295 155 108 122 263 19 171 3 294 259 254 238 181 36 133 136 280 183 70 247 116 149
$PROJ_DIR$\..\lib\xmclib\src\xmc4_flash.c
-
- BICOMP
- 58
-
ICCARM
- 144
-
-
- __cstat
- 134
-
-
-
-
- BICOMP
- 119 98 32 116 223 267 210 97 23 166 273 165 43 93 47 84 268 48 244 252 156 225 160 161 143
-
-
- ICCARM
- 225 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 165
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc4_rtc.c
-
-
- BICOMP
- 37
-
-
- ICCARM
- 35
-
-
- __cstat
- 271
-
-
-
-
- BICOMP
- 98 166 267 97 23 116 210 168 32 223 119 273 179 274 43 93 47 84 268 48 244 252 156 188 160 161 143 154
-
-
- ICCARM
- 188 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 274 168 179 154
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_can.c
-
-
- BICOMP
- 61
-
-
- ICCARM
- 292
-
-
- __cstat
- 146
-
-
-
-
- BICOMP
- 223 155 98 119 267 244 32 48 252 143 210 179 97 23 160 43 116 93 47 84 268 166 161 176 156 273 154
-
-
- ICCARM
- 176 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 179 154 155
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_gpio.c
-
-
- BICOMP
- 282
-
-
- ICCARM
- 7
-
-
- __cstat
- 4
-
-
-
-
- BICOMP
- 23 47 84 267 116 98 161 173 43 93 268 48 244 252 210 32 97 223 119 166 160 143 204 156 273 174
-
-
- ICCARM
- 204 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 173 174
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_ledts.c
-
-
- BICOMP
- 106
-
-
- ICCARM
- 52
-
-
- __cstat
- 117
-
-
-
-
- BICOMP
- 267 244 43 93 210 268 48 252 143 179 116 98 47 84 23 160 32 97 223 119 166 161 187 156 273 154
-
-
- ICCARM
- 187 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 179 154
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_hrpwm.c
-
-
- BICOMP
- 114
-
-
- ICCARM
- 38
-
-
- __cstat
- 279
-
-
-
-
- BICOMP
- 223 267 32 119 98 116 210 97 23 166 273 43 93 47 84 268 48 244 252 156 205 160 161 143
-
-
- ICCARM
- 205 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_sdmmc.c
-
-
- BICOMP
124
-
- ICCARM
- 41
-
-
- __cstat
- 112
-
-
-
BICOMP
- 267 244 43 93 268 48 252 116 179 210 98 47 84 23 161 32 97 223 119 166 160 143 191 156 273 154
-
-
- ICCARM
- 191 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 179 154
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_spi.c
-
-
- BICOMP
- 276
-
-
- ICCARM
- 11
-
-
- __cstat
57
-
-
-
- BICOMP
- 32 267 210 154 223 119 98 116 97 23 166 273 183 43 93 47 84 268 48 244 252 156 179 160 161 143 199 164
-
-
- ICCARM
- 179 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 154 183 199 164
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_uart.c
-
-
- BICOMP
- 122
-
-
- ICCARM
- 6
-
-
- __cstat
- 278
-
-
-
-
- BICOMP
- 98 223 119 154 210 32 267 156 97 23 166 186 116 43 93 47 84 268 48 244 252 273 179 160 161 143 199 164
-
-
- ICCARM
- 179 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 154 186 199 164
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_usbd.c
-
-
- BICOMP
- 275
-
-
- ICCARM
- 136
-
-
- __cstat
- 16
-
-
-
-
- BICOMP
- 210 98 267 23 195 97 156 30 32 223 119 48 244 252 43 179 116 93 47 84 268 166 273 180 160 161 143 154
-
-
- ICCARM
- 180 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 30 195 179 154
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_usbh.c
-
-
- BICOMP
- 105
-
-
- ICCARM
- 73
-
-
- __cstat
- 135
-
-
-
-
- BICOMP
- 267 32 252 119 98 116 223 244 161 184 179 97 23 210 43 93 47 84 268 48 204 166 160 143 173 156 273 154 174
-
-
- ICCARM
- 116 267 98 93 84 268 47 119 43 23 48 184 210 32 97 223 244 166 160 143 273 156 161 252 179 154 204 173 174
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_usic.c
-
-
- BICOMP
- 120
-
-
- ICCARM
- 22
-
-
- __cstat
- 148
-
-
-
-
- BICOMP
- 164 116 98 47 84 267 23 210 43 93 268 48 244 252 273 179 32 97 223 119 166 156 199 160 161 143 154
-
-
- ICCARM
- 199 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 164 179 154
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_posif.c
-
-
- BICOMP
- 44
-
-
- ICCARM
- 51
-
-
- __cstat
- 27
-
-
-
-
- BICOMP
- 23 47 84 267 210 116 98 143 179 43 93 268 48 244 252 160 32 97 223 119 166 161 200 156 273 154
-
-
- ICCARM
- 200 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 179 154
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_vadc.c
-
-
- BICOMP
- 125
-
-
- ICCARM
- 10
-
-
- __cstat
- 142
-
-
-
-
- BICOMP
- 267 244 210 43 93 268 48 252 226 116 98 47 84 23 156 179 32 97 223 119 166 273 154 202 160 161 143
-
-
- ICCARM
- 202 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 179 154 226
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_wdt.c
-
-
- BICOMP
- 94
-
-
- ICCARM
- 129
-
-
- __cstat
- 270
-
-
-
-
- BICOMP
- 223 267 32 119 98 116 210 97 23 166 161 179 43 93 47 84 268 48 244 252 160 143 243 156 273 154
-
-
- ICCARM
- 243 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 179 154
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_i2s.c
-
-
- BICOMP
- 126
-
-
- ICCARM
- 79
-
-
- __cstat
- 149
-
-
-
-
- BICOMP
- 268 252 43 48 93 267 244 210 116 98 47 84 23 156 190 154 32 97 223 119 166 273 179 160 161 143 199 164
-
-
- ICCARM
- 179 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 154 190 199 164
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_i2c.c
-
-
- BICOMP
- 102
-
-
- ICCARM
- 131
-
-
- __cstat
- 103
-
-
-
-
- BICOMP
- 199 43 48 268 252 164 93 267 244 161 116 98 47 84 23 210 32 97 223 119 166 160 143 206 156 273
-
-
- ICCARM
- 206 199 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 164
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_rtc.c
-
-
- BICOMP
- 151
-
-
- ICCARM
- 9
-
-
- __cstat
- 17
-
-
-
-
- BICOMP
- 267 210 168 98 166 143 97 23 154 32 223 119 160 188 116 43 93 47 84 268 48 244 252 161 179 156 273 274
-
-
- ICCARM
- 179 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 154 188 274 168
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_dma.c
-
-
- BICOMP
- 133
-
-
- ICCARM
- 63
-
-
- __cstat
- 141
-
-
-
-
- BICOMP
- 161 116 98 231 47 84 267 23 179 210 43 93 268 48 244 252 32 97 223 119 166 160 143 230 156 273 154
-
-
- ICCARM
- 230 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 231 179 154
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_dsd.c
-
-
- BICOMP
- 24
-
-
- ICCARM
- 127
-
-
- __cstat
- 60
-
-
-
-
- BICOMP
- 166 210 98 267 97 23 143 179 32 223 119 160 116 43 93 47 84 268 48 244 252 161 216 156 273 154
-
-
- ICCARM
- 216 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 179 154
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_fce.c
-
-
- BICOMP
- 62
-
-
- ICCARM
- 110
-
-
- __cstat
- 145
-
-
-
-
- BICOMP
- 84 47 267 23 116 98 143 210 179 43 93 268 48 244 252 160 32 97 223 119 166 161 222 156 273 154
-
-
- ICCARM
- 222 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 179 154
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_phy_ksz8031rnl.c
-
-
- BICOMP
- 293
-
-
- ICCARM
- 130
-
-
- __cstat
- 147
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_mac.c
-
-
- BICOMP
- 5
-
-
- ICCARM
- 96
-
-
- __cstat
- 18
-
-
-
-
- BICOMP
- 227 119 98 223 143 32 267 30 210 97 23 166 160 179 116 43 93 47 84 268 48 244 252 161 224 156 273 154
-
-
- ICCARM
- 224 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 227 30 179 154
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_phy_dp83848.c
-
-
- BICOMP
- 118
-
-
- ICCARM
- 21
-
-
- __cstat
- 139
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_eru.c
-
-
- BICOMP
- 111
-
-
- ICCARM
- 128
-
-
- __cstat
- 150
-
-
-
-
- BICOMP
- 267 47 84 163 23 156 116 98 43 93 268 48 244 252 210 32 97 223 119 166 273 219 160 161 143
-
-
- ICCARM
- 219 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 163
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_dac.c
-
-
- BICOMP
- 59
-
-
- ICCARM
- 132
-
-
- __cstat
- 19
-
-
-
-
- BICOMP
- 43 48 268 252 93 267 244 116 210 98 47 84 23 161 179 32 97 223 119 166 160 143 218 156 273 154
-
-
- ICCARM
- 218 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 179 154
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_ecat.c
-
-
- BICOMP
- 14
-
-
- ICCARM
- 140
-
-
- __cstat
- 56
-
-
-
-
- BICOMP
- 223 267 32 119 98 116 210 97 23 166 273 43 93 47 84 268 48 244 252 156 213 160 161 143
-
-
- ICCARM
- 213 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_ebu.c
-
-
- BICOMP
- 29
-
-
- ICCARM
- 42
-
-
- __cstat
- 283
-
-
-
-
- BICOMP
- 97 23 267 98 166 143 210 32 223 119 160 179 116 43 93 47 84 268 48 244 252 161 234 156 273 154
-
-
- ICCARM
- 234 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 179 154
-
-
-
-
- $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_phy_ksz8081rnb.c
-
-
- BICOMP
- 34
-
-
- ICCARM
- 284
-
-
- __cstat
- 285
-
-
-
-
- BICOMP
- 116 98 224 47 84 267 23 43 93 268 48 244 252 161 228 210 227 32 97 223 119 166 160 143 156 273
-
-
- ICCARM
- 228 224 210 32 267 98 93 84 268 47 119 23 116 97 43 48 223 244 166 160 143 273 156 161 252 227
-
-
-
-
- $PROJ_DIR$\..\startup_XMC4700.s
-
-
- AARM
- 45
-
-
-
-
- $PROJ_DIR$\..\lib\system_XMC4700.c
-
-
- BICOMP
- 289
-
-
- ICCARM
- 49
-
-
- __cstat
- 39
-
-
-
-
- BICOMP
- 161 98 119 267 252 166 160 244 23 48 93 47 84 268 116 156 273 43 143
-
-
- ICCARM
- 43 267 98 93 84 268 47 119 23 48 244 166 116 160 143 273 156 161 252
-
-
-
-
- $PROJ_DIR$\..\timer.c
-
-
- BICOMP
- 70
-
-
- ICCARM
- 55
-
-
- __cstat
- 25
-
-
-
-
- BICOMP
- 98 238 156 244 84 116 261 166 267 20 257 241 252 268 143 259 160 161 93 47 119 273
-
-
- ICCARM
- 259 20 244 166 116 267 98 93 84 268 47 119 160 143 273 156 161 252 257 261 241 238 295 97
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip_timer.c
-
-
- BICOMP
- 66
-
-
- ICCARM
- 88
-
-
- __cstat
- 75
-
-
-
-
- BICOMP
- 247 256 167
-
-
- ICCARM
- 247 167 256
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\apps\dhcpc\dhcpc.c
-
-
- BICOMP
- 85
-
-
- ICCARM
- 65
-
-
- __cstat
- 78
-
-
-
-
- BICOMP
- 267 23 47 84 171 166 256 254 98 261 116 273 87 246 93 268 238 244 247 43 242 74 119 48 250 259 20 257 241 295 252 156 68 160 161 143 97 167 245 263
-
-
- ICCARM
- 68 267 98 93 84 268 47 119 23 74 43 48 87 242 250 171 259 20 244 166 116 160 143 273 156 161 252 257 261 241 238 295 97 254 256 247 167 246 245 263
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uiplib.c
-
-
- BICOMP
- 92
-
-
- ICCARM
- 69
-
-
- __cstat
- 80
-
-
-
-
- BICOMP
- 295 160 143 246 254 257 167 263 259 20 241 252 98 267 249 250 171 238 244 261 166 161 119 116 97 245 242 156 93 47 84 268 273 256 247
-
-
- ICCARM
- 242 250 171 259 20 244 166 116 267 98 93 84 268 47 119 160 143 273 156 161 252 257 261 241 238 295 97 254 256 247 167 246 245 263 249
-
-
-
-
- $PROJ_DIR$\..\main.c
-
-
- BICOMP
- 108
-
-
- ICCARM
- 104
-
-
- __cstat
- 288
-
-
-
-
- BICOMP
- 98 156 257 84 116 20 241 252 267 244 261 238 166 268 143 259 160 161 93 47 119 273
-
-
- ICCARM
- 259 20 244 166 116 267 98 93 84 268 47 119 160 143 273 156 161 252 257 261 241 238 295 97
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip.c
-
-
- BICOMP
- 89
-
-
- ICCARM
- 83
-
-
- __cstat
- 82
-
-
-
-
- BICOMP
- 167 257 267 263 43 250 254 295 160 143 246 242 259 20 241 252 98 239 171 238 244 261 166 161 119 116 97 245 156 93 47 84 268 273 256 247 23 48
-
-
- ICCARM
- 242 250 171 259 20 244 166 116 267 98 93 84 268 47 119 160 143 273 156 161 252 257 261 241 238 295 97 254 256 247 167 246 245 263 239 43 23 48
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip_arp.c
-
-
- BICOMP
- 91
-
-
- ICCARM
- 64
-
-
- __cstat
- 86
-
-
-
-
- BICOMP
- 254 295 116 257 156 93 267 98 242 259 20 241 252 268 43 250 171 238 244 261 166 47 84 273 256 247 255 160 161 119 143 97 246 167 245 263 23 48
-
-
- ICCARM
- 255 242 250 171 259 20 244 166 116 267 98 93 84 268 47 119 160 143 273 156 161 252 257 261 241 238 295 97 254 256 247 167 246 245 263 43 23 48
-
-
-
-
- $PROJ_DIR$\..\led.c
-
-
- BICOMP
- 123
-
-
- ICCARM
- 53
-
-
- __cstat
- 13
-
-
-
-
- BICOMP
- 252 273 261 244 238 116 267 47 84 97 23 98 204 20 257 241 166 156 93 268 210 32 223 259 160 161 119 143 173 43 48 174
-
-
- ICCARM
- 259 20 244 166 116 267 98 93 84 268 47 119 160 143 273 156 161 252 257 261 241 238 295 97 204 210 32 23 43 48 223 173 174
-
-
-
-
- $PROJ_DIR$\..\boot.c
-
-
- BICOMP
- 90
-
-
- ICCARM
- 46
-
__cstat
100
-
- BICOMP
- 241 116 199 20 252 156 93 267 98 23 43 210 186 257 295 268 204 176 244 261 238 166 47 84 273 48 174 164 179 259 160 161 119 143 97 173 32 223 155 154
-
ICCARM
- 259 20 244 166 116 267 98 93 84 268 47 119 160 143 273 156 161 252 257 261 241 238 295 97 204 210 32 23 43 48 223 173 174 186 199 164 176 179 154 155
+ 186 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 165
- $PROJ_DIR$\..\net.c
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_can.c
- BICOMP
- 290
+ ICCARM
+ 274
- ICCARM
- 269
+ BICOMP
+ 54
__cstat
- 71
+ 93
- BICOMP
- 267 171 241 98 20 143 242 257 166 160 250 245 170 255 244 261 238 252 161 119 116 246 167 263 259 156 93 47 84 268 273 254 256 247
+ ICCARM
+ 161 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 222 159 167
+
+ BICOMP
+ 300 167 136 122 36 241 72 86 238 116 178 222 149 0 181 102 19 133 108 70 247 182 155 161 183 263 159
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc4_rtc.c
+
ICCARM
- 259 20 244 166 116 267 98 93 84 268 47 119 160 143 273 156 161 252 257 261 241 238 295 97 170 242 250 171 254 256 247 167 246 245 263 255
+ 75
+
+
+ BICOMP
+ 84
+
+
+ __cstat
+ 249
+
+
+
+
+ ICCARM
+ 231 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 253 168 222 159
+
+
+ BICOMP
+ 136 182 36 149 0 19 178 168 72 300 122 263 222 253 102 133 108 70 247 86 241 238 183 231 181 155 116 159
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc4_eru.c
+
+
+ ICCARM
+ 96
+
+
+ BICOMP
+ 22
+
+
+ __cstat
+ 147
+
+
+
+
+ ICCARM
+ 212 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 174 222 159
+
+
+ BICOMP
+ 116 19 136 174 108 70 36 0 102 133 247 86 241 238 181 222 178 72 149 300 122 182 155 212 183 263 159
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_ccu8.c
+
+
+ ICCARM
+ 44
+
+
+ BICOMP
+ 90
+
+
+ __cstat
+ 82
+
+
+
+
+ ICCARM
+ 176 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 153 222 159
+
+
+ BICOMP
+ 238 247 153 86 102 133 36 241 155 222 178 19 136 108 70 0 72 149 300 122 182 181 116 176 183 263 159
+
+
+
+
+ $PROJ_DIR$\..\lib\uip\netdev.c
+
+
+ ICCARM
+ 264
+
+
+ BICOMP
+ 260
+
+
+ __cstat
+ 89
+
+
+
+
+ ICCARM
+ 280 3 241 182 19 36 136 133 70 247 108 122 181 116 263 183 155 238 294 295 259 277 254 149 291 284 173 285 279 230 171 275 278 290 287 187 178 72 0 102 86 300 169 158 206 214 215
+
+
+ BICOMP
+ 300 19 108 70 178 206 295 36 287 102 241 277 238 263 284 285 72 136 291 187 215 3 294 259 254 182 183 133 247 280 279 230 169 149 0 181 155 122 116 173 275 171 278 290 86 158 214
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_ccu4.c
+
+
+ ICCARM
+ 256
+
+
+ BICOMP
+ 5
+
+
+ __cstat
+ 135
+
+
+
+
+ ICCARM
+ 163 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 151 222 159
+
+
+ BICOMP
+ 133 36 102 241 247 86 238 222 19 136 108 70 0 183 178 151 72 149 300 122 182 263 163 181 155 116 159
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_common.c
+
+
+ ICCARM
+ 257
+
+
+ BICOMP
+ 87
+
+
+ __cstat
+ 12
+
+
+
+
+ ICCARM
+ 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238
+
+
+ BICOMP
+ 136 19 108 70 36 0 102 133 247 86 241 238 263 72 149 300 122 182 183 178 181 155 116
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc4_scu.c
+
+
+ ICCARM
+ 119
+
+
+ BICOMP
+ 81
+
+
+ __cstat
+ 143
+
+
+
+
+ ICCARM
+ 222 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 159
+
+
+ BICOMP
+ 36 241 263 133 102 247 86 238 178 19 136 108 70 0 159 72 149 300 122 182 183 222 181 155 116
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_dac.c
+
+
+ ICCARM
+ 104
+
+
+ BICOMP
+ 51
+
+
+ __cstat
+ 23
+
+
+
+
+ ICCARM
+ 299 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 222 159
+
+
+ BICOMP
+ 102 86 247 238 133 36 241 19 178 136 108 70 0 155 222 72 149 300 122 182 181 116 299 183 263 159
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_fce.c
+
+
+ ICCARM
+ 18
+
+
+ BICOMP
+ 78
+
+
+ __cstat
+ 92
+
+
+
+
+ ICCARM
+ 189 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 222 159
+
+
+ BICOMP
+ 70 108 36 0 19 136 116 178 222 102 133 247 86 241 238 181 72 149 300 122 182 155 189 183 263 159
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_i2c.c
+
+
+ ICCARM
+ 118
+
+
+ BICOMP
+ 140
+
+
+ __cstat
+ 141
+
+
+
+
+ ICCARM
+ 199 217 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 166
+
+
+ BICOMP
+ 217 102 86 247 238 166 133 36 241 155 19 136 108 70 0 178 72 149 300 122 182 181 116 199 183 263
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_ecat.c
+
+
+ ICCARM
+ 110
+
+
+ BICOMP
+ 2
+
+
+ __cstat
+ 91
+
+
+
+
+ ICCARM
+ 207 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238
+
+
+ BICOMP
+ 300 36 72 122 136 19 178 149 0 182 263 102 133 108 70 247 86 241 238 183 207 181 155 116
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_phy_ksz8031rnl.c
+
+
+ ICCARM
+ 123
+
+
+ BICOMP
+ 272
+
+
+ __cstat
+ 137
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_phy_dp83848.c
+
+
+ ICCARM
+ 8
+
+
+ BICOMP
+ 112
+
+
+ __cstat
+ 101
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_mac.c
+
+
+ ICCARM
+ 21
+
+
+ BICOMP
+ 16
+
+
+ __cstat
+ 4
+
+
+
+
+ ICCARM
+ 206 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 214 29 222 159
+
+
+ BICOMP
+ 214 122 136 300 116 72 36 29 178 149 0 182 181 222 19 102 133 108 70 247 86 241 238 155 206 183 263 159
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_eth_phy_ksz8081rnb.c
+
+
+ ICCARM
+ 244
+
+
+ BICOMP
+ 77
+
+
+ __cstat
+ 61
+
+
+
+
+ ICCARM
+ 215 206 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 214
+
+
+ BICOMP
+ 19 136 206 108 70 36 0 102 133 247 86 241 238 155 215 178 214 72 149 300 122 182 181 116 183 263
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_dsd.c
+
+
+ ICCARM
+ 103
+
+
+ BICOMP
+ 27
+
+
+ __cstat
+ 42
+
+
+
+
+ ICCARM
+ 200 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 222 159
+
+
+ BICOMP
+ 182 178 136 36 149 0 116 222 72 300 122 181 19 102 133 108 70 247 86 241 238 155 200 183 263 159
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_eru.c
+
+
+ ICCARM
+ 146
+
+
+ BICOMP
+ 150
+
+
+ __cstat
+ 273
+
+
+
+
+ ICCARM
+ 212 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 174
+
+
+ BICOMP
+ 36 108 70 174 0 183 19 136 102 133 247 86 241 238 178 72 149 300 122 182 263 212 181 155 116
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_ledts.c
+
+
+ ICCARM
+ 67
+
+
+ BICOMP
+ 134
+
+
+ __cstat
+ 98
+
+
+
+
+ ICCARM
+ 205 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 222 159
+
+
+ BICOMP
+ 36 241 102 133 178 247 86 238 116 222 19 136 108 70 0 181 72 149 300 122 182 155 205 183 263 159
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_ebu.c
+
+
+ ICCARM
+ 79
+
+
+ BICOMP
+ 24
+
+
+ __cstat
+ 267
+
+
+
+
+ ICCARM
+ 213 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 222 159
+
+
+ BICOMP
+ 149 0 36 136 182 116 178 72 300 122 181 222 19 102 133 108 70 247 86 241 238 155 213 183 263 159
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_gpio.c
+
+
+ ICCARM
+ 11
+
+
+ BICOMP
+ 246
+
+
+ __cstat
+ 25
+
+
+
+
+ ICCARM
+ 187 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 169 158
+
+
+ BICOMP
+ 0 108 70 36 19 136 155 169 102 133 247 86 241 238 178 72 149 300 122 182 181 116 187 183 263 158
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_hrpwm.c
+
+
+ ICCARM
+ 66
+
+
+ BICOMP
+ 15
+
+
+ __cstat
+ 252
+
+
+
+
+ ICCARM
+ 194 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238
+
+
+ BICOMP
+ 300 36 72 122 136 19 178 149 0 182 263 102 133 108 70 247 86 241 238 183 194 181 155 116
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_i2s.c
+
+
+ ICCARM
+ 50
+
+
+ BICOMP
+ 117
+
+
+ __cstat
+ 250
+
+
+
+
+ ICCARM
+ 222 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 159 204 217 166
+
+
+ BICOMP
+ 247 238 102 86 133 36 241 178 19 136 108 70 0 183 204 159 72 149 300 122 182 263 222 181 155 116 217 166
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_posif.c
+
+
+ ICCARM
+ 68
+
+
+ BICOMP
+ 80
+
+
+ __cstat
+ 6
+
+
+
+
+ ICCARM
+ 226 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 222 159
+
+
+ BICOMP
+ 0 108 70 36 178 19 136 116 222 102 133 247 86 241 238 181 72 149 300 122 182 155 226 183 263 159
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_usbd.c
+
+
+ ICCARM
+ 109
+
+
+ BICOMP
+ 261
+
+
+ __cstat
+ 1
+
+
+
+
+ ICCARM
+ 235 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 29 236 222 159
+
+
+ BICOMP
+ 178 136 36 0 236 149 183 29 72 300 122 86 241 238 102 222 19 133 108 70 247 182 263 235 181 155 116 159
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\apps\dhcpc\dhcpc.c
+
+
+ ICCARM
+ 40
+
+
+ BICOMP
+ 35
+
+
+ __cstat
+ 63
+
+
+
+
+ ICCARM
+ 64 36 136 133 70 247 108 122 0 58 102 86 34 291 284 173 280 3 241 182 19 181 116 263 183 155 238 294 295 259 277 254 149 285 279 230 171 275 278 290
+
+
+ BICOMP
+ 36 0 108 70 173 182 279 285 136 295 19 263 34 275 133 247 277 241 230 102 291 58 122 86 284 280 3 294 259 254 238 183 64 181 155 116 149 171 278 290
+
+
+
+
+ $PROJ_DIR$\..\lib\system_XMC4700.c
+
+
+ ICCARM
+ 74
+
+
+ BICOMP
+ 37
+
+
+ __cstat
+ 95
+
+
+
+
+ ICCARM
+ 102 36 136 133 70 247 108 122 0 86 241 182 19 181 116 263 183 155 238
+
+
+ BICOMP
+ 155 136 122 36 238 182 181 241 0 86 133 108 70 247 19 183 263 102 116
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_usbh.c
+
+
+ ICCARM
+ 73
+
+
+ BICOMP
+ 127
+
+
+ __cstat
+ 130
+
+
+
+
+ ICCARM
+ 19 36 136 133 70 247 108 122 102 0 86 228 178 72 149 300 241 182 181 116 263 183 155 238 222 159 187 169 158
+
+
+ BICOMP
+ 36 72 238 122 136 19 300 241 155 228 222 149 0 178 102 133 108 70 247 86 187 182 181 116 169 183 263 159 158
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_wdt.c
+
+
+ ICCARM
+ 114
+
+
+ BICOMP
+ 128
+
+
+ __cstat
+ 60
+
+
+
+
+ ICCARM
+ 219 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 222 159
+
+
+ BICOMP
+ 300 36 72 122 136 19 178 149 0 182 155 222 102 133 108 70 247 86 241 238 181 116 219 183 263 159
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_sdmmc.c
+
+
+ ICCARM
+ 105
+
+
+ BICOMP
+ 121
+
+
+ __cstat
+ 148
+
+
+
+
+ ICCARM
+ 234 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 222 159
+
+
+ BICOMP
+ 36 241 102 133 247 86 238 19 222 178 136 108 70 0 155 72 149 300 122 182 181 116 234 183 263 159
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_vadc.c
+
+
+ ICCARM
+ 31
+
+
+ BICOMP
+ 99
+
+
+ __cstat
+ 115
+
+
+
+
+ ICCARM
+ 218 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 222 159 240
+
+
+ BICOMP
+ 36 241 178 102 133 247 86 238 240 19 136 108 70 0 183 222 72 149 300 122 182 263 159 218 181 155 116
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_uart.c
+
+
+ ICCARM
+ 14
+
+
+ BICOMP
+ 120
+
+
+ __cstat
+ 266
+
+
+
+
+ ICCARM
+ 222 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 159 223 217 166
+
+
+ BICOMP
+ 136 300 122 159 178 72 36 183 149 0 182 223 19 102 133 108 70 247 86 241 238 263 222 181 155 116 217 166
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_usic.c
+
+
+ ICCARM
+ 17
+
+
+ BICOMP
+ 94
+
+
+ __cstat
+ 107
+
+
+
+
+ ICCARM
+ 217 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 166 222 159
+
+
+ BICOMP
+ 166 19 136 108 70 36 0 178 102 133 247 86 241 238 263 222 72 149 300 122 182 183 217 181 155 116 159
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_rtc.c
+
+
+ ICCARM
+ 26
+
+
+ BICOMP
+ 245
+
+
+ __cstat
+ 28
+
+
+
+
+ ICCARM
+ 222 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 159 231 253 168
+
+
+ BICOMP
+ 36 178 168 136 182 116 149 0 159 72 300 122 181 231 19 102 133 108 70 247 86 241 238 155 222 183 263 253
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_spi.c
+
+
+ ICCARM
+ 9
+
+
+ BICOMP
+ 265
+
+
+ __cstat
+ 88
+
+
+
+
+ ICCARM
+ 222 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 159 232 217 166
+
+
+ BICOMP
+ 72 36 178 159 300 122 136 19 149 0 182 263 232 102 133 108 70 247 86 241 238 183 222 181 155 116 217 166
+
+
+
+
+ $PROJ_DIR$\..\timer.c
+
+
+ ICCARM
+ 65
+
+
+ BICOMP
+ 41
+
+
+ __cstat
+ 20
+
+
+
+
+ ICCARM
+ 280 3 241 182 19 36 136 133 70 247 108 122 181 116 263 183 155 238 294 295 259 277 254 149
+
+
+ BICOMP
+ 136 277 183 241 70 19 295 182 36 3 294 259 238 247 116 280 181 155 133 108 122 263
@@ -1619,22 +1361,283 @@
$PROJ_DIR$\..\shared_params.c
- BICOMP
- 294
+ ICCARM
+ 269
- ICCARM
- 297
+ BICOMP
+ 270
__cstat
- 298
+ 255
ICCARM
- 32 267 98 93 84 268 47 119 23 295 116 97
+ 72 36 136 133 70 247 108 122 0 254 19 149
+
+
+
+
+ $PROJ_DIR$\..\startup_XMC4700.s
+
+
+ AARM
+ 71
+
+
+
+
+ $PROJ_DIR$\..\net.c
+
+
+ ICCARM
+ 243
+
+
+ BICOMP
+ 268
+
+
+ __cstat
+ 62
+
+
+
+
+ ICCARM
+ 280 3 241 182 19 36 136 133 70 247 108 122 181 116 263 183 155 238 294 295 259 277 254 149 152 291 284 173 285 279 230 171 275 278 290 287
+
+
+ BICOMP
+ 36 173 259 136 3 116 291 294 182 181 284 278 152 287 241 295 277 238 155 122 19 275 171 290 280 183 133 108 70 247 263 285 279 230
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip_arp.c
+
+
+ ICCARM
+ 52
+
+
+ BICOMP
+ 142
+
+
+ __cstat
+ 53
+
+
+
+
+ ICCARM
+ 287 291 284 173 280 3 241 182 19 36 136 133 70 247 108 122 181 116 263 183 155 238 294 295 259 277 254 149 285 279 230 171 275 278 290 102 0 86
+
+
+ BICOMP
+ 285 254 19 294 183 133 36 136 291 280 3 259 238 247 102 284 173 277 241 295 182 108 70 263 279 230 287 181 155 122 116 149 275 171 278 290 0 86
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip.c
+
+
+ ICCARM
+ 48
+
+
+ BICOMP
+ 38
+
+
+ __cstat
+ 55
+
+
+
+
+ ICCARM
+ 291 284 173 280 3 241 182 19 36 136 133 70 247 108 122 181 116 263 183 155 238 294 295 259 277 254 149 285 279 230 171 275 278 290 282 102 0 86
+
+
+ BICOMP
+ 171 294 36 290 102 284 285 254 181 116 275 291 280 3 259 238 136 282 173 277 241 295 182 155 122 19 149 278 183 133 108 70 247 263 279 230 0 86
+
+
+
+
+ $PROJ_DIR$\..\boot.c
+
+
+ ICCARM
+ 106
+
+
+ BICOMP
+ 126
+
+
+ __cstat
+ 139
+
+
+
+
+ ICCARM
+ 280 3 241 182 19 36 136 133 70 247 108 122 181 116 263 183 155 238 294 295 259 277 254 149 187 178 72 0 102 86 300 169 158 223 217 166 161 222 159 167
+
+
+ BICOMP
+ 259 19 217 3 238 183 133 36 136 0 102 178 223 294 254 247 187 161 241 295 277 182 108 70 263 86 158 166 222 280 181 155 122 116 149 169 72 300 167 159
+
+
+
+
+ $PROJ_DIR$\..\led.c
+
+
+ ICCARM
+ 85
+
+
+ BICOMP
+ 132
+
+
+ __cstat
+ 13
+
+
+
+
+ ICCARM
+ 280 3 241 182 19 36 136 133 70 247 108 122 181 116 263 183 155 238 294 295 259 277 254 149 187 178 72 0 102 86 300 169 158
+
+
+ BICOMP
+ 238 263 295 241 277 19 36 108 70 149 0 136 187 3 294 259 182 183 133 247 178 72 300 280 181 155 122 116 169 102 86 158
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uip_timer.c
+
+
+ ICCARM
+ 59
+
+
+ BICOMP
+ 39
+
+
+ __cstat
+ 43
+
+
+
+
+ ICCARM
+ 230 171 279
+
+
+ BICOMP
+ 230 279 171
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\third_party\uip\uip\uiplib.c
+
+
+ ICCARM
+ 47
+
+
+ BICOMP
+ 138
+
+
+ __cstat
+ 46
+
+
+
+
+ ICCARM
+ 291 284 173 280 3 241 182 19 36 136 133 70 247 108 122 181 116 263 183 155 238 294 295 259 277 254 149 285 279 230 171 275 278 290 293
+
+
+ BICOMP
+ 254 181 116 275 285 294 171 290 280 3 259 238 136 36 293 284 173 277 241 295 182 155 122 19 149 278 291 183 133 108 70 247 263 279 230
+
+
+
+
+ $PROJ_DIR$\..\main.c
+
+
+ ICCARM
+ 131
+
+
+ BICOMP
+ 10
+
+
+ __cstat
+ 248
+
+
+
+
+ ICCARM
+ 280 3 241 182 19 36 136 133 70 247 108 122 181 116 263 183 155 238 294 295 259 277 254 149
+
+
+ BICOMP
+ 136 183 294 70 19 3 259 238 36 241 295 277 182 247 116 280 181 155 133 108 122 263
+
+
+
+
+ [ROOT_NODE]
+
+
+ ILINK
+ 145 125
+
+
+
+
+ $PROJ_DIR$\..\lib\xmclib\src\xmc_dma.c
+
+
+ ICCARM
+ 49
+
+
+ BICOMP
+ 113
+
+
+ __cstat
+ 111
+
+
+
+
+ ICCARM
+ 298 178 72 36 136 133 70 247 108 122 0 19 149 102 86 300 241 182 181 116 263 183 155 238 184 222 159
+
+
+ BICOMP
+ 155 19 136 184 108 70 36 0 222 178 102 133 247 86 241 238 72 149 300 122 182 181 116 298 183 263 159
diff --git a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/ide/xmc4700.ewp b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/ide/xmc4700.ewp
index f6ed2c16..4e32ef79 100644
--- a/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/ide/xmc4700.ewp
+++ b/Target/Demo/ARMCM4_XMC4_XMC4700_Relax_Kit_IAR/Prog/ide/xmc4700.ewp
@@ -222,7 +222,7 @@
CCDiagSuppress
-
+ Pa082
CCDiagRemark
diff --git a/Target/Source/ARMCM4_XMC4/flash.c b/Target/Source/ARMCM4_XMC4/flash.c
index fba6a859..aee8a3c1 100644
--- a/Target/Source/ARMCM4_XMC4/flash.c
+++ b/Target/Source/ARMCM4_XMC4/flash.c
@@ -177,7 +177,7 @@ static const tFlashSector flashLayout[] =
*/
/* { 0x0c000000, 0x04000, 0}, flash sector 0 - reserved for bootloader */
/* { 0x0c004000, 0x04000, 1}, flash sector 1 - reserved for bootloader */
- { 0x0c008000, 0x04000, 2}, /* flash sector 2 - 16kb */
+ /* { 0x0c008000, 0x04000, 2}, flash sector 2 - reserved for bootloader */
{ 0x0c00c000, 0x04000, 3}, /* flash sector 3 - 16kb */
{ 0x0c010000, 0x04000, 4}, /* flash sector 4 - 16kb */
{ 0x0c014000, 0x04000, 5}, /* flash sector 5 - 16kb */