From d79ae7abf4df39016463e0dbd1395b24ca7866e0 Mon Sep 17 00:00:00 2001 From: abazlaev Date: Fri, 3 Feb 2023 18:51:35 +0700 Subject: [PATCH] Enabled Ethernet MAC and PHY --- FreeRTOS/source/FreeRTOS_IP_Utils.c | 2 +- .../board_family/NetworkInterface.c | 147 +++++++-- PHY/PHY_DP83848C.c | 305 ++++++++++++++++++ PHY/PHY_DP83848C.h | 201 ++++++++++++ RTE/_Target_1/RTE_Components.h | 2 - Test_project_for_GD32107C-EVAL.uvguix.right | 214 +++++++----- Test_project_for_GD32107C-EVAL.uvoptx | 141 +++++--- Test_project_for_GD32107C-EVAL.uvprojx | 187 +---------- main.c | 8 +- 9 files changed, 868 insertions(+), 339 deletions(-) create mode 100644 PHY/PHY_DP83848C.c create mode 100644 PHY/PHY_DP83848C.h diff --git a/FreeRTOS/source/FreeRTOS_IP_Utils.c b/FreeRTOS/source/FreeRTOS_IP_Utils.c index 2283c67..002d8b0 100644 --- a/FreeRTOS/source/FreeRTOS_IP_Utils.c +++ b/FreeRTOS/source/FreeRTOS_IP_Utils.c @@ -364,7 +364,7 @@ void prvProcessNetworkDownEvent( void ) else { /* Set remaining time to 0 so it will become active immediately. */ - #if ipconfigUSE_DHCP == 1 + #if (ipconfigUSE_DHCP == 1) { /* The network is not up until DHCP has completed. */ vDHCPProcess( pdTRUE, eInitialWait ); diff --git a/FreeRTOS/source/portable/NetworkInterface/board_family/NetworkInterface.c b/FreeRTOS/source/portable/NetworkInterface/board_family/NetworkInterface.c index a593efc..faa73fb 100644 --- a/FreeRTOS/source/portable/NetworkInterface/board_family/NetworkInterface.c +++ b/FreeRTOS/source/portable/NetworkInterface/board_family/NetworkInterface.c @@ -1439,10 +1439,14 @@ #include "NetworkBufferManagement.h" #include "NetworkInterface.h" -//#include "Driver_ETH.h" +#include "Driver_ETH.h" #include "Driver_ETH_MAC.h" #include "Driver_ETH_PHY.h" #include "gd32f10x_enet.h" +//#include "RTE_Components.h" +//#ifdef RTE_Drivers_PHY_DP83848C /* Driver PHY DP83848C */ + +//#endif static void receiveHandlerTask( void *pvParameters ); static TaskHandle_t receiveHandler = NULL; @@ -1453,6 +1457,9 @@ static ARM_ETH_MAC_CAPABILITIES capabilities; //#define Driver_ETH_MAC0 ARM_Driver_ETH_MAC_(0) //extern ARM_DRIVER_ETH_MAC Driver_ETH_MAC0; +extern ARM_DRIVER_ETH_PHY ARM_Driver_ETH_PHY_(0); +#define Driver_ETH_PHY0 ARM_Driver_ETH_PHY_(0) + /** \fn ARM_DRIVER_VERSION ARM_ETH_MAC_GetVersion (void) \brief Get driver version. @@ -1482,7 +1489,7 @@ ARM_ETH_MAC_CAPABILITIES ARM_ETH_MAC_GetCapabilities (void) 1, ///< 1 = UDP payload checksum generated on transmit 1, ///< 1 = TCP payload checksum generated on transmit 1, ///< 1 = ICMP payload checksum generated on transmit - 0, ///< 0, 1, 2, 3, Ethernet Media Interface type + ARM_ETH_INTERFACE_RMII, ///< 0, 1, 2, 3, Ethernet Media Interface type 1, ///< 1 = driver provides initial valid MAC address 1, ///< 1 = callback event \ref ARM_ETH_MAC_EVENT_RX_FRAME generated 1, ///< 1 = callback event \ref ARM_ETH_MAC_EVENT_TX_FRAME generated @@ -1502,7 +1509,9 @@ ARM_ETH_MAC_CAPABILITIES ARM_ETH_MAC_GetCapabilities (void) int32_t ARM_ETH_MAC_Initialize (ARM_ETH_MAC_SignalEvent_t cb_event) { - ErrStatus xResult = enet_init(ENET_AUTO_NEGOTIATION, ENET_AUTOCHECKSUM_DROP_FAILFRAMES, ENET_RECEIVEALL); + ErrStatus xResult = ARM_DRIVER_ERROR; + if (SUCCESS == enet_init(ENET_AUTO_NEGOTIATION, ENET_AUTOCHECKSUM_DROP_FAILFRAMES, ENET_RECEIVEALL)) + xResult = ARM_DRIVER_OK; //enet_ptp_start(int32_t updatemethod, uint32_t init_sec, uint32_t init_subsec, uint32_t carry_cfg, uint32_t accuracy_cfg) return xResult; @@ -1520,7 +1529,7 @@ int32_t ARM_ETH_MAC_Initialize (ARM_ETH_MAC_SignalEvent_t cb_event) int32_t ARM_ETH_MAC_Uninitialize (void) { enet_deinit(); - return pdTRUE; + return ARM_DRIVER_OK; } /** @@ -1530,8 +1539,9 @@ int32_t ARM_ETH_MAC_Uninitialize (void) \return \ref execution_status */ int32_t ARM_ETH_MAC_PowerControl (ARM_POWER_STATE state) -{ - return pdTRUE; +{ + + return ARM_DRIVER_OK; } /** \fn int32_t ARM_ETH_MAC_GetMacAddress (ARM_ETH_MAC_ADDR *ptr_addr) @@ -1544,9 +1554,9 @@ int32_t ARM_ETH_MAC_GetMacAddress (ARM_ETH_MAC_ADDR *ptr_addr) if (ptr_addr != NULL) { enet_mac_address_get(ENET_MAC_ADDRESS0, (uint8_t*)ptr_addr->b); - return pdPASS; + return ARM_DRIVER_OK; } - else return pdFAIL; + else return ARM_DRIVER_ERROR_PARAMETER; } /** @@ -1560,9 +1570,9 @@ int32_t ARM_ETH_MAC_SetMacAddress (const ARM_ETH_MAC_ADDR *ptr_addr) if (ptr_addr != NULL) { enet_mac_address_set(ENET_MAC_ADDRESS0, (uint8_t*)ptr_addr->b); - return pdPASS; + return ARM_DRIVER_OK; } - else return pdFAIL; + else return ARM_DRIVER_ERROR_PARAMETER; } /** @@ -1575,14 +1585,17 @@ int32_t ARM_ETH_MAC_SetMacAddress (const ARM_ETH_MAC_ADDR *ptr_addr) */ int32_t ARM_ETH_MAC_SetAddressFilter (const ARM_ETH_MAC_ADDR *ptr_addr, uint32_t num_addr) { - +#ifdef DEBUG + printf("ARM_ETH_MAC_SetAddressFilter\n"); + __asm volatile("BKPT #0\n") ; +#endif enet_address_filter_config(ENET_MAC_ADDRESS0, ENET_ADDRESS_MASK_BYTE0, ENET_ADDRESS_FILTER_SA); enet_address_filter_config(ENET_MAC_ADDRESS0, ENET_ADDRESS_MASK_BYTE1, ENET_ADDRESS_FILTER_SA); enet_address_filter_config(ENET_MAC_ADDRESS0, ENET_ADDRESS_MASK_BYTE2, ENET_ADDRESS_FILTER_SA); enet_address_filter_config(ENET_MAC_ADDRESS0, ENET_ADDRESS_MASK_BYTE3, ENET_ADDRESS_FILTER_SA); enet_address_filter_config(ENET_MAC_ADDRESS0, ENET_ADDRESS_MASK_BYTE4, ENET_ADDRESS_FILTER_SA); enet_address_filter_config(ENET_MAC_ADDRESS0, ENET_ADDRESS_MASK_BYTE5, ENET_ADDRESS_FILTER_SA); - return pdTRUE; + return ARM_DRIVER_OK; } /** @@ -1595,10 +1608,18 @@ int32_t ARM_ETH_MAC_SetAddressFilter (const ARM_ETH_MAC_ADDR *ptr_addr, uint32_t */ int32_t ARM_ETH_MAC_SendFrame (const uint8_t *frame, uint32_t len, uint32_t flags) { +#ifdef DEBUG + printf("ARM_ETH_MAC_SendFrame\n"); +// __asm volatile("BKPT #0\n") ; +#endif if (frame != NULL & len > 0) - return enet_frame_transmit((uint8_t*)frame, len); - else - return pdFAIL; + { + if (SUCCESS == enet_frame_transmit((uint8_t*)frame, len)) + return ARM_DRIVER_OK; + else + return ARM_DRIVER_ERROR; + }else + return ARM_DRIVER_ERROR_PARAMETER; } /** @@ -1612,10 +1633,18 @@ int32_t ARM_ETH_MAC_SendFrame (const uint8_t *frame, uint32_t len, uint32_t flag */ int32_t ARM_ETH_MAC_ReadFrame (uint8_t *frame, uint32_t len) { +#ifdef DEBUG + printf("ARM_ETH_MAC_ReadFrame\n"); +// __asm volatile("BKPT #0\n") ; +#endif if (frame != NULL & len > 0) - return enet_frame_receive(frame, len); - else - return pdFAIL; + { + if (SUCCESS == enet_frame_receive(frame, len)) + return ARM_DRIVER_OK; + else + return ARM_DRIVER_ERROR; + }else + return ARM_DRIVER_ERROR_PARAMETER; } /** @@ -1636,12 +1665,16 @@ uint32_t ARM_ETH_MAC_GetRxFrameSize (void) */ int32_t ARM_ETH_MAC_GetRxFrameTime (ARM_ETH_MAC_TIME *time) { +#ifdef DEBUG + printf("ARM_ETH_MAC_GetRxFrameTime\n"); +// __asm volatile("BKPT #0\n") ; +#endif //if ENET_RXTX_TIMESTAMP bit set in ENET_PTP_TSCTL register (enet_ptp_start(int32_t updatemethod, uint32_t init_sec, uint32_t init_subsec, uint32_t carry_cfg, uint32_t accuracy_cfg);) enet_ptp_systime_struct systime_struct; enet_ptp_system_time_get(&systime_struct); time->sec = systime_struct.second; time->ns = systime_struct.nanosecond; - return pdPASS; + return ARM_DRIVER_OK; } /** @@ -1652,12 +1685,16 @@ int32_t ARM_ETH_MAC_GetRxFrameTime (ARM_ETH_MAC_TIME *time) */ int32_t ARM_ETH_MAC_GetTxFrameTime (ARM_ETH_MAC_TIME *time) { +#ifdef DEBUG + printf("ARM_ETH_MAC_GetTxFrameTime\n"); +// __asm volatile("BKPT #0\n") ; +#endif //if ENET_RXTX_TIMESTAMP bit set in ENET_PTP_TSCTL register (enet_ptp_timestamp_function_config(ENET_PTP_SYSTIME_INIT);) enet_ptp_systime_struct systime_struct; enet_ptp_system_time_get(&systime_struct); time->sec = systime_struct.second; time->ns = systime_struct.nanosecond; - return pdPASS; + return ARM_DRIVER_OK; } /** @@ -1669,7 +1706,18 @@ int32_t ARM_ETH_MAC_GetTxFrameTime (ARM_ETH_MAC_TIME *time) */ int32_t ARM_ETH_MAC_Control (uint32_t control, uint32_t arg) { - return pdPASS; +#ifdef DEBUG + printf("ARM_ETH_MAC_Control\n"); +// __asm volatile("BKPT #0\n") ; +#endif + if((control >= 0) & (arg >= 0)) + { + if(SUCCESS == enet_phy_write_read(ENET_PHY_WRITE, PHY_ADDRESS, control, (uint16_t*)&arg)) + return ARM_DRIVER_OK; + else + return ARM_DRIVER_ERROR; + }else + return ARM_DRIVER_ERROR_PARAMETER; } /** @@ -1681,7 +1729,18 @@ int32_t ARM_ETH_MAC_Control (uint32_t control, uint32_t arg) */ int32_t ARM_ETH_MAC_ControlTimer (uint32_t control, ARM_ETH_MAC_TIME *time) { - return pdPASS; +#ifdef DEBUG + printf("ARM_ETH_MAC_ControlTimer\n"); +// __asm volatile("BKPT #0\n") ; +#endif + if((control >= 0) & (time != NULL)) + { + if(SUCCESS == enet_phy_write_read(ENET_PHY_WRITE, PHY_ADDRESS, control, (uint16_t*)time)) + return ARM_DRIVER_OK; + else + return ARM_DRIVER_ERROR; + }else + return ARM_DRIVER_ERROR_PARAMETER; } /** @@ -1694,7 +1753,22 @@ int32_t ARM_ETH_MAC_ControlTimer (uint32_t control, ARM_ETH_MAC_TIME *time) */ int32_t ARM_ETH_MAC_PHY_Read (uint8_t phy_addr, uint8_t reg_addr, uint16_t *data) { - return pdPASS; + if((phy_addr >= 0) & (reg_addr >= 0x00) & data >= 0x0000) + { + if(SUCCESS == enet_phy_write_read(ENET_PHY_READ, phy_addr, reg_addr, data)) + return ARM_DRIVER_OK; + else + { +#ifdef DEBUG + printf("ARM_ETH_MAC_PHY_Read_ERROR\n"); +#endif + return ARM_DRIVER_ERROR; + } + }else +#ifdef DEBUG + printf("ARM_ETH_MAC_PHY_Read_ERROR_PARAMETER\n"); +#endif + return ARM_DRIVER_ERROR_PARAMETER; } /** @@ -1707,7 +1781,22 @@ int32_t ARM_ETH_MAC_PHY_Read (uint8_t phy_addr, uint8_t reg_addr, uint16_t *data */ int32_t ARM_ETH_MAC_PHY_Write (uint8_t phy_addr, uint8_t reg_addr, uint16_t data) { - return pdPASS; + if((phy_addr >= 0) & (reg_addr >= 0x00) & data >= 0x0000) + { + if(SUCCESS == enet_phy_write_read(ENET_PHY_WRITE, phy_addr, reg_addr, &data)) + return ARM_DRIVER_OK; + else + { +#ifdef DEBUG + printf("ARM_ETH_MAC_PHY_Write_ERROR\n"); +#endif + return ARM_DRIVER_ERROR; + } + }else +#ifdef DEBUG + printf("ARM_ETH_MAC_PHY_Write_ERROR_PARAMETER\n"); +#endif + return ARM_DRIVER_ERROR_PARAMETER; } /** @@ -1715,7 +1804,9 @@ int32_t ARM_ETH_MAC_PHY_Write (uint8_t phy_addr, uint8_t reg_addr, uint16_t data \brief Callback function that signals a Ethernet Event. \param[in] event event notification mask \return none -*/ +*/ + + ARM_DRIVER_ETH_MAC Driver_ETH_MAC0 = {ARM_ETH_MAC_GetVersion, ARM_ETH_MAC_GetCapabilities, ARM_ETH_MAC_Initialize, @@ -1733,12 +1824,10 @@ ARM_DRIVER_ETH_MAC Driver_ETH_MAC0 = {ARM_ETH_MAC_GetVersion, ARM_ETH_MAC_Control, ARM_ETH_MAC_PHY_Read, ARM_ETH_MAC_PHY_Write}; + - - -extern ARM_DRIVER_ETH_PHY ARM_Driver_ETH_PHY_(0); -#define Driver_ETH_PHY0 ARM_Driver_ETH_PHY_(0) + /*callback function for ARM_ETH_MAC_SignalEvent_t*/ void ethernet_mac_notify (uint32_t event) { diff --git a/PHY/PHY_DP83848C.c b/PHY/PHY_DP83848C.c new file mode 100644 index 0000000..c49c9ac --- /dev/null +++ b/PHY/PHY_DP83848C.c @@ -0,0 +1,305 @@ +/* + * Copyright (c) 2013-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * ----------------------------------------------------------------------- + * + * $Date: 25. May 2018 + * $Revision: V6.2 + * + * Driver: Driver_ETH_PHYn (default: Driver_ETH_PHY0) + * Project: Ethernet Physical Layer Transceiver (PHY) + * Driver for DP83848C + * ----------------------------------------------------------------------- + * Use the following configuration settings in the middleware component + * to connect to this driver. + * + * Configuration Setting Value + * --------------------- ----- + * Connect to hardware via Driver_ETH_PHY# = n (default: 0) + * -------------------------------------------------------------------- */ + +/* History: + * Version 6.2 + * Updated for ARM compiler 6 + * Version 6.1 + * Added driver flow control flags + * Version 6.0 + * Based on API V2.00 + * Version 5.1 + * Based on API V1.10 (namespace prefix ARM_ added) + * Version 5.0 + * Initial release + */ + +#include "PHY_DP83848C.h" + +#define ARM_ETH_PHY_DRV_VERSION ARM_DRIVER_VERSION_MAJOR_MINOR(6,2) /* driver version */ + + +#ifndef ETH_PHY_NUM +#define ETH_PHY_NUM 0 /* Default driver number */ +#endif + +#ifndef ETH_PHY_ADDR +#define ETH_PHY_ADDR 0x01 /* Default device address */ +#endif + + +/* Driver Version */ +static const ARM_DRIVER_VERSION DriverVersion = { + ARM_ETH_PHY_API_VERSION, + ARM_ETH_PHY_DRV_VERSION +}; + +/* Ethernet PHY control structure */ +static PHY_CTRL PHY = { NULL, NULL, 0, 0, 0 }; + + +/** + \fn ARM_DRIVER_VERSION GetVersion (void) + \brief Get driver version. + \return \ref ARM_DRIVER_VERSION +*/ +static ARM_DRIVER_VERSION GetVersion (void) { + return DriverVersion; +} + + +/** + \fn int32_t Initialize (ARM_ETH_PHY_Read_t fn_read, + ARM_ETH_PHY_Write_t fn_write) + \brief Initialize Ethernet PHY Device. + \param[in] fn_read Pointer to \ref ARM_ETH_MAC_PHY_Read + \param[in] fn_write Pointer to \ref ARM_ETH_MAC_PHY_Write + \return \ref execution_status +*/ +static int32_t Initialize (ARM_ETH_PHY_Read_t fn_read, ARM_ETH_PHY_Write_t fn_write) { + + if ((fn_read == NULL) || (fn_write == NULL)) { return ARM_DRIVER_ERROR_PARAMETER; } + + if ((PHY.flags & PHY_INIT) == 0U) { + /* Register PHY read/write functions. */ + PHY.reg_rd = fn_read; + PHY.reg_wr = fn_write; + + PHY.bmcr = 0U; + PHY.flags = PHY_INIT; + } + + return ARM_DRIVER_OK; +} + +/** + \fn int32_t Uninitialize (void) + \brief De-initialize Ethernet PHY Device. + \return \ref execution_status +*/ +static int32_t Uninitialize (void) { + + PHY.reg_rd = NULL; + PHY.reg_wr = NULL; + PHY.bmcr = 0U; + PHY.flags = 0U; + + return ARM_DRIVER_OK; +} + +/** + \fn int32_t PowerControl (ARM_POWER_STATE state) + \brief Control Ethernet PHY Device Power. + \param[in] state Power state + \return \ref execution_status +*/ +static int32_t PowerControl (ARM_POWER_STATE state) { + uint16_t val; + + switch ((int32_t)state) { + case ARM_POWER_OFF: + if ((PHY.flags & PHY_INIT) == 0U) { + /* Initialize must provide register access function pointers */ + return ARM_DRIVER_ERROR; + } + + PHY.flags &= ~PHY_POWER; + PHY.bmcr = BMCR_POWER_DOWN; + + return (PHY.reg_wr(ETH_PHY_ADDR, REG_BMCR, PHY.bmcr)); + + case ARM_POWER_FULL: + if ((PHY.flags & PHY_INIT) == 0U) { + return ARM_DRIVER_ERROR; + } + if (PHY.flags & PHY_POWER) { + return ARM_DRIVER_OK; + } + + /* Check Device Identification. */ + PHY.reg_rd(ETH_PHY_ADDR, REG_PHYIDR1, &val); + + if (val != PHY_ID1) { + /* Invalid PHY ID */ + return ARM_DRIVER_ERROR_UNSUPPORTED; + } + + PHY.reg_rd(ETH_PHY_ADDR, REG_PHYIDR2, &val); + + if ((val & 0xFFF0) != PHY_ID2) { + /* Invalid PHY ID */ + return ARM_DRIVER_ERROR_UNSUPPORTED; + } + + PHY.bmcr = 0U; + + if (PHY.reg_wr(ETH_PHY_ADDR, REG_BMCR, PHY.bmcr) != ARM_DRIVER_OK) { + return ARM_DRIVER_ERROR; + } + + PHY.flags |= PHY_POWER; + + return ARM_DRIVER_OK; + + case ARM_POWER_LOW: + default: + return ARM_DRIVER_ERROR_UNSUPPORTED; + } +} + +/** + \fn int32_t SetInterface (uint32_t interface) + \brief Set Ethernet Media Interface. + \param[in] interface Media Interface type + \return \ref execution_status +*/ +static int32_t SetInterface (uint32_t interface) { + uint16_t val; + + if ((PHY.flags & PHY_POWER) == 0U) { return ARM_DRIVER_ERROR; } + + switch (interface) { + case ARM_ETH_INTERFACE_MII: + val = 0x0001; + break; + case ARM_ETH_INTERFACE_RMII: + val = RBR_RMII_MODE | 0x0001; + break; + default: + return ARM_DRIVER_ERROR_UNSUPPORTED; + } + + return (PHY.reg_wr(ETH_PHY_ADDR, REG_RBR, val)); +} + +/** + \fn int32_t SetMode (uint32_t mode) + \brief Set Ethernet PHY Device Operation mode. + \param[in] mode Operation Mode + \return \ref execution_status +*/ +static int32_t SetMode (uint32_t mode) { + uint16_t val; + + if ((PHY.flags & PHY_POWER) == 0U) { return ARM_DRIVER_ERROR; } + + val = PHY.bmcr & BMCR_POWER_DOWN; + + switch (mode & ARM_ETH_PHY_SPEED_Msk) { + case ARM_ETH_PHY_SPEED_10M: + break; + case ARM_ETH_PHY_SPEED_100M: + val |= BMCR_SPEED_SEL; + break; + default: + return ARM_DRIVER_ERROR_UNSUPPORTED; + } + + switch (mode & ARM_ETH_PHY_DUPLEX_Msk) { + case ARM_ETH_PHY_DUPLEX_HALF: + break; + case ARM_ETH_PHY_DUPLEX_FULL: + val |= BMCR_DUPLEX; + break; + default: + return ARM_DRIVER_ERROR_UNSUPPORTED; + } + + if (mode & ARM_ETH_PHY_AUTO_NEGOTIATE) { + val |= BMCR_ANEG_EN; + } + + if (mode & ARM_ETH_PHY_LOOPBACK) { + val |= BMCR_LOOPBACK; + } + + if (mode & ARM_ETH_PHY_ISOLATE) { + val |= BMCR_ISOLATE; + } + + PHY.bmcr = val; + + return (PHY.reg_wr(ETH_PHY_ADDR, REG_BMCR, PHY.bmcr)); +} + +/** + \fn ARM_ETH_LINK_STATE GetLinkState (void) + \brief Get Ethernet PHY Device Link state. + \return current link status \ref ARM_ETH_LINK_STATE +*/ +static ARM_ETH_LINK_STATE GetLinkState (void) { + ARM_ETH_LINK_STATE state; + uint16_t val = 0U; + + if (PHY.flags & PHY_POWER) { + PHY.reg_rd(ETH_PHY_ADDR, REG_BMSR, &val); + } + state = (val & BMSR_LINK_STAT) ? ARM_ETH_LINK_UP : ARM_ETH_LINK_DOWN; + + return (state); +} + +/** + \fn ARM_ETH_LINK_INFO GetLinkInfo (void) + \brief Get Ethernet PHY Device Link information. + \return current link parameters \ref ARM_ETH_LINK_INFO +*/ +static ARM_ETH_LINK_INFO GetLinkInfo (void) { + ARM_ETH_LINK_INFO info; + uint16_t val = 0U; + + if (PHY.flags & PHY_POWER) { + PHY.reg_rd(ETH_PHY_ADDR, REG_PHYSTS, &val); + } + + info.speed = (val & PHYSTS_SPEED) ? ARM_ETH_SPEED_10M : ARM_ETH_SPEED_100M; + info.duplex = (val & PHYSTS_DUPLEX) ? ARM_ETH_DUPLEX_FULL : ARM_ETH_DUPLEX_HALF; + + return (info); +} + + +/* PHY Driver Control Block */ +extern +ARM_DRIVER_ETH_PHY ARM_Driver_ETH_PHY_(ETH_PHY_NUM); +ARM_DRIVER_ETH_PHY ARM_Driver_ETH_PHY_(ETH_PHY_NUM) = { + GetVersion, + Initialize, + Uninitialize, + PowerControl, + SetInterface, + SetMode, + GetLinkState, + GetLinkInfo +}; diff --git a/PHY/PHY_DP83848C.h b/PHY/PHY_DP83848C.h new file mode 100644 index 0000000..b8680f2 --- /dev/null +++ b/PHY/PHY_DP83848C.h @@ -0,0 +1,201 @@ +/* + * Copyright (c) 2013-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * ----------------------------------------------------------------------- + * + * $Date: 25. May 2018 + * $Revision: V6.2 + * + * Project: Ethernet Physical Layer Transceiver (PHY) + * Definitions for DP83848C + * -------------------------------------------------------------------- */ + +#ifndef __PHY_DP83848C_H +#define __PHY_DP83848C_H + +#include "Driver_ETH_PHY.h" + +/* Basic Registers */ +#define REG_BMCR 0x00 /* Basic Mode Control Register */ +#define REG_BMSR 0x01 /* Basic Mode Status Register */ +#define REG_PHYIDR1 0x02 /* PHY Identifier 1 */ +#define REG_PHYIDR2 0x03 /* PHY Identifier 2 */ +#define REG_ANAR 0x04 /* Auto-Negotiation Advertisement */ +#define REG_ANLPAR 0x05 /* Auto-Neg. Link Partner Abitily */ +#define REG_ANER 0x06 /* Auto-Neg. Expansion Register */ +#define REG_ANNPTR 0x07 /* Auto-Neg. Next Page TX */ + +/* Extended Registers */ +#define REG_PHYSTS 0x10 /* Status Register */ +#define REG_MICR 0x11 /* MII Interrupt Control Register */ +#define REG_MISR 0x12 /* MII Interrupt Status Register */ +#define REG_FCSCR 0x14 /* False Carrier Sense Counter */ +#define REG_RECR 0x15 /* Receive Error Counter */ +#define REG_PCSR 0x16 /* PCS Sublayer Config. and Status */ +#define REG_RBR 0x17 /* RMII and Bypass Register */ +#define REG_LEDCR 0x18 /* LED Direct Control Register */ +#define REG_PHYCR 0x19 /* PHY Control Register */ +#define REG_BTSCR 0x1A /* 10Base-T Status/Control Register */ +#define REG_CDBR1 0x1B /* CD Test Control and BIST Extens. */ +#define REG_EDCR 0x1D /* Energy Detect Control Register */ + +/* Basic Mode Control Register */ +#define BMCR_RESET 0x8000 /* Software Reset */ +#define BMCR_LOOPBACK 0x4000 /* Loopback mode */ +#define BMCR_SPEED_SEL 0x2000 /* Speed Select (1=100Mb/s) */ +#define BMCR_ANEG_EN 0x1000 /* Auto Negotiation Enable */ +#define BMCR_POWER_DOWN 0x0800 /* Power Down */ +#define BMCR_ISOLATE 0x0400 /* Isolate Media interface */ +#define BMCR_REST_ANEG 0x0200 /* Restart Auto Negotiation */ +#define BMCR_DUPLEX 0x0100 /* Duplex Mode (1=Full duplex) */ +#define BMCR_COL_TEST 0x0080 /* Collision Test */ + +/* Basic Mode Status Register */ +#define BMSR_100B_T4 0x8000 /* 100BASE-T4 Capable */ +#define BMSR_100B_TX_FD 0x4000 /* 100BASE-TX Full Duplex Capable */ +#define BMSR_100B_TX_HD 0x2000 /* 100BASE-TX Half Duplex Capable */ +#define BMSR_10B_T_FD 0x1000 /* 10BASE-T Full Duplex Capable */ +#define BMSR_10B_T_HD 0x0800 /* 10BASE-T Half Duplex Capable */ +#define BMSR_MF_PRE_SUP 0x0040 /* Preamble suppression Capable */ +#define BMSR_ANEG_COMPL 0x0020 /* Auto Negotiation Complete */ +#define BMSR_REM_FAULT 0x0010 /* Remote Fault */ +#define BMSR_ANEG_ABIL 0x0008 /* Auto Negotiation Ability */ +#define BMSR_LINK_STAT 0x0004 /* Link Status (1=established) */ +#define BMSR_JABBER_DET 0x0002 /* Jaber Detect */ +#define BMSR_EXT_CAPAB 0x0001 /* Extended Capability */ + +/* PHY Identifier Registers */ +#define PHY_ID1 0x2000 /* DP83848C Device Identifier MSB */ +#define PHY_ID2 0x5C90 /* DP83848C Device Identifier LSB */ + +/* PHY Status Register */ +#define PHYSTS_MDI_X 0x4000 /* MDI-X mode enabled by Auto-Negot. */ +#define PHYSTS_REC_ERR 0x2000 /* Receive Error Latch */ +#define PHYSTS_POL_STAT 0x1000 /* Polarity Status */ +#define PHYSTS_FC_SENSE 0x0800 /* False Carrier Sense Latch */ +#define PHYSTS_SIG_DET 0x0400 /* 100Base-TX Signal Detect */ +#define PHYSTS_DES_LOCK 0x0200 /* 100Base-TX Descrambler Lock */ +#define PHYSTS_PAGE_REC 0x0100 /* Link Code Word Page Received */ +#define PHYSTS_MII_INT 0x0080 /* MII Interrupt Pending */ +#define PHYSTS_REM_FAULT 0x0040 /* Remote Fault */ +#define PHYSTS_JABBER_DET 0x0020 /* Jabber Detect */ +#define PHYSTS_ANEG_COMPL 0x0010 /* Auto Negotiation Complete */ +#define PHYSTS_LOOPBACK 0x0008 /* Loopback Status */ +#define PHYSTS_DUPLEX 0x0004 /* Duplex Status (1=Full duplex) */ +#define PHYSTS_SPEED 0x0002 /* Speed10 Status (1=10MBit/s) */ +#define PHYSTS_LINK_STAT 0x0001 /* Link Status (1=established) */ + +/* MII Interrupt Control Register */ +#define MICR_TINT 0x0004 /* Test Interrupt */ +#define MICR_INTEN 0x0002 /* Interrupt Enable */ +#define MICR_INT_OE 0x0001 /* Interrupt Output Enable */ + +/* MII Interrupt Status Register */ +#define MISR_ED_INT 0x4000 /* Energy Detect Interrupt */ +#define MISR_LINK_INT 0x2000 /* Link Status Change Interrupt */ +#define MISR_SPD_INT 0x1000 /* Speed Status Change Interrupt */ +#define MISR_DUP_INT 0x0800 /* Duplex Status Change Interrupt */ +#define MISR_ANC_INT 0x0400 /* Auto Negotiation Complete Interr. */ +#define MISR_FHF_INT 0x0200 /* False Carrier Counter HF Interrupt*/ +#define MISR_RHF_INT 0x0100 /* Receive Error Counter HF Interrupt*/ +#define MISR_ED_INT_EN 0x0040 /* Endrgy Detect Int.Enable */ +#define MISR_LINK_INT_EN 0x0020 /* Link Status Change Int.Enable */ +#define MISR_SPD_INT_EN 0x0010 /* Speed Status Change Int.Enable */ +#define MISR_DUP_INT_EN 0x0008 /* Duplex Status Change Int.Enable */ +#define MISR_ANC_INT_EN 0x0004 /* Auto Negotiation Complete Int.Ena.*/ +#define MISR_FHF_INT_EN 0x0002 /* False Carrier Count.HF Int.Enable */ +#define MISR_RHF_INT_EN 0x0001 /* Receive Error Count.HF Int.Enable */ + +/* 100Mb/s PCS Configuration and Status Register */ +#define PCSR_TQ_EN 0x0400 /* 100Mbs True Quiet Mode Enable */ +#define PCSR_SD_FORCE_PMA 0x0200 /* Signal Detect Force PMA */ +#define PCSR_SD_OPTION 0x0100 /* Signal Detect Option */ +#define PCSR_DESC_TIME 0x0080 /* Descrambler Timeout */ +#define PCSR_FORCE_100_OK 0x0020 /* Force 100Mb/s Good Link */ +#define PCSR_NRZI_BYPASS 0x0004 /* NRZI Bypass Enable */ + +/* RMII and Bypass Register */ +#define RBR_RMII_MODE 0x0020 /* Reduced MII Mode */ +#define RBR_RMII_REV1_0 0x0010 /* Reduced MII Revision 1.0 */ +#define RBR_RX_OVF_STS 0x0008 /* RX FIFO Overflow Status */ +#define RBR_RX_UNF_STS 0x0004 /* RX FIFO Underflow Status */ +#define RBR_ELAST_BUF 0x0003 /* Receive Elasticity Buffer */ + +/* LED Direct Control Register */ +#define LEDCR_DRV_SPDLED 0x0020 /* Drive SPDLED bit to LED_SPD output*/ +#define LEDCR_DRV_LNKLED 0x0010 /* Drive LNKLED bit to LED_LNK output*/ +#define LEDCR_DRV_ACTLED 0x0008 /* Drive ACTLED bit to LED_ACT output*/ +#define LEDCR_SPDLED 0x0004 /* Value to force on LED_SPD output */ +#define LEDCR_LNKLED 0x0002 /* Value to force on LED_LNK output */ +#define LEDCR_ACTLED 0x0001 /* Value to force on LED_ACT output */ + +/* PHY Control Register */ +#define PHYCR_MDIX_EN 0x8000 /* Auto MDIX Enable */ +#define PHYCR_FORCE_MDIX 0x4000 /* Force MDIX */ +#define PHYCR_PAUSE_RX 0x2000 /* Pause Receive Negotiated */ +#define PHYCR_PAUSE_TX 0x1000 /* Pause Transmit Negotiated */ +#define PHYCR_BIST_FE 0x0800 /* BIST Force Error */ +#define PHYCR_PSR_15 0x0400 /* BIST Sequence select */ +#define PHYCR_BIST_STATUS 0x0200 /* BIST Test Status */ +#define PHYCR_BIST_START 0x0100 /* BIST Start */ +#define PHYCR_BP_STRETCH 0x0080 /* Bypass LED Stretching */ +#define PHYCR_LED_CNFG 0x0060 /* LEDs Configuration */ +#define PHYCR_PHYADDR 0x001F /* PHY Address for port */ + +/* 10Base-T Status/Control Register */ +#define BTSCR_10BT_SER 0x8000 /* 10Base-T Serial Mode */ +#define BTSCR_SQUELCH 0x0E00 /* Squelch Configuration */ +#define BTSCR_LOOPB10_DIS 0x0100 /* Loopback 10Base-T Disable */ +#define BTSCR_LP_DIS 0x0080 /* Normal Link Pulse Disable */ +#define BTSCR_FORCE_LNK10 0x0040 /* Force 10Mbs Good Link */ +#define BTSCR_POLARITY 0x0010 /* 10Mbs Polarity Status */ +#define BTSCR_HEARTB_DIS 0x0002 /* Heartbeat Disable */ +#define BTSCR_JABBER_DIS 0x0001 /* Jabber Disable */ + +/* CD Test and BIST Extensions Register */ +#define CDBR1_BIST_ERR_CNTR 0xFF00 /* BIST ERROR Counter */ +#define CDBR1_BIST_CONT_MD 0x0020 /* Packet BIST Continuous Mode */ +#define CDBR1_CDPATEN10 0x0010 /* CD Pattern Enable for 10Mbs */ +#define CDBR1_10MEG_PAT_GAP 0x0004 /* Defines gap between data or NLP */ +#define CDBR1_CDPATTSEL 0x0003 /* CD Pattern Select */ + +/* Energy Detect Control */ +#define EDCR_ED_EN 0x8000 /* Energy Detect Enable */ +#define EDCR_ED_AUTO_UP 0x4000 /* Energy Detect Automatic Power Up */ +#define EDCR_ED_AUTO_DOWN 0x2000 /* Energy Detect Automatic Power Down*/ +#define EDCR_ED_MAN 0x1000 /* Energy Detect Manual Power Up/Down*/ +#define EDCR_ED_BURST_DIS 0x0800 /* Energy Detect Burst Disable */ +#define EDCR_ED_PWR_STATE 0x0400 /* Energy Detect Power State */ +#define EDCR_ED_ERR_MET 0x0200 /* Energy Detect Error Threshold Met */ +#define EDCR_ED_DATA_MET 0x0100 /* Energy Detect Data Threshold Met */ +#define EDCR_ED_ERR_CNT 0x00F0 /* Energy Detect Error Threshold */ +#define EDCR_ED_DATA_CNT 0x000F /* Energy Detect Data Threshold */ + +/* PHY Driver State Flags */ +#define PHY_INIT 0x01U /* Driver initialized */ +#define PHY_POWER 0x02U /* Driver power is on */ + +/* PHY Driver Control Structure */ +typedef struct phy_ctrl { + ARM_ETH_PHY_Read_t reg_rd; /* PHY register read function */ + ARM_ETH_PHY_Write_t reg_wr; /* PHY register write function */ + uint16_t bmcr; /* BMCR register value */ + uint8_t flags; /* Control flags */ + uint8_t rsvd; /* Reserved */ +} PHY_CTRL; + +#endif /* __PHY_DP83848C_H */ diff --git a/RTE/_Target_1/RTE_Components.h b/RTE/_Target_1/RTE_Components.h index b0ae4b4..8b4d588 100644 --- a/RTE/_Target_1/RTE_Components.h +++ b/RTE/_Target_1/RTE_Components.h @@ -46,8 +46,6 @@ /* Keil.ARM Compiler::Compiler:I/O:STDOUT:User:1.2.0 */ #define RTE_Compiler_IO_STDOUT /* Compiler I/O: STDOUT */ #define RTE_Compiler_IO_STDOUT_User /* Compiler I/O: STDOUT User */ -/* Keil::CMSIS Driver:Ethernet PHY:DP83848C:6.2.0 */ -#define RTE_Drivers_PHY_DP83848C /* Driver PHY DP83848C */ #endif /* RTE_COMPONENTS_H */ diff --git a/Test_project_for_GD32107C-EVAL.uvguix.right b/Test_project_for_GD32107C-EVAL.uvguix.right index 2d3881e..033137f 100644 --- a/Test_project_for_GD32107C-EVAL.uvguix.right +++ b/Test_project_for_GD32107C-EVAL.uvguix.right @@ -15,17 +15,17 @@ 38003 Registers - 194 116 + 263 155 346 Code Coverage - 1404 266 + 1404 158 204 Performance Analyzer - 1564 234 234 100 + 994 234 234 100 @@ -58,7 +58,7 @@ 1935 Call Stack + Locals - 200 133 133 + 360 133 133 2506 @@ -110,8 +110,8 @@ 0 - 1000 - 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000600000000000000010000004C443A5C55736572735C72696768745C446F63756D656E74735C4B65696C5C50726F6A656374735C546573745F70726F6A6563745F666F725F47443332313037432D4556414C5C6D61696E2E6300000000066D61696E2E6300000000EAD6A300FFFFFFFF71443A5C55736572735C72696768745C446F63756D656E74735C4B65696C5C50726F6A656374735C546573745F70726F6A6563745F666F725F47443332313037432D4556414C5C5254455C4465766963655C474433324631303756435C737461727475705F67643332663130785F636C2E730000000015737461727475705F67643332663130785F636C2E7300000000BECEA100FFFFFFFF6D443A5C55736572735C72696768745C446F63756D656E74735C4B65696C5C50726F6A656374735C546573745F70726F6A6563745F666F725F47443332313037432D4556414C5C5254455C4465766963655C474433324631303756435C73797374656D5F67643332663130782E63000000001173797374656D5F67643332663130782E6300000000F0A0A100FFFFFFFF6A443A5C55736572735C72696768745C446F63756D656E74735C4B65696C5C50726F6A656374735C546573745F70726F6A6563745F666F725F47443332313037432D4556414C5C5254455C4465766963655C474433324631303756435C67643332663130785F7263752E63000000000E67643332663130785F7263752E6300000000BCA8E100FFFFFFFF73433A5C55736572735C557365725C417070446174615C4C6F63616C5C41726D5C5061636B735C476967614465766963655C47443332463130785F4446505C322E302E335C4465766963655C4669726D776172655C5065726970686572616C735C696E635C67643332663130785F6770696F2E68000000000F67643332663130785F6770696F2E68000000009CC1B600FFFFFFFF72433A5C55736572735C557365725C417070446174615C4C6F63616C5C41726D5C5061636B735C476967614465766963655C47443332463130785F4446505C322E302E335C4465766963655C4669726D776172655C5065726970686572616C735C696E635C67643332663130785F7263752E68000000000E67643332663130785F7263752E6800000000F7B88600FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000008B01000081000000000A000021040000 + 1669 + 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000B00000006000000010000004C443A5C55736572735C72696768745C446F63756D656E74735C4B65696C5C50726F6A656374735C546573745F70726F6A6563745F666F725F47443332313037432D4556414C5C6D61696E2E6300000000066D61696E2E6300000000EAD6A300FFFFFFFF71443A5C55736572735C72696768745C446F63756D656E74735C4B65696C5C50726F6A656374735C546573745F70726F6A6563745F666F725F47443332313037432D4556414C5C5254455C4465766963655C474433324631303756435C737461727475705F67643332663130785F636C2E730000000015737461727475705F67643332663130785F636C2E7300000000BCA8E100FFFFFFFF65443A5C55736572735C72696768745C446F63756D656E74735C4B65696C5C50726F6A656374735C546573745F70726F6A6563745F666F725F47443332313037432D4556414C5C44656D6F5461736B735C53696D706C655443504563686F5365727665722E63000000001553696D706C655443504563686F5365727665722E6300000000F7B88600FFFFFFFF68443A5C55736572735C72696768745C446F63756D656E74735C4B65696C5C50726F6A656374735C546573745F70726F6A6563745F666F725F47443332313037432D4556414C5C4672656552544F535C736F757263655C4672656552544F535F536F636B6574732E6300000000124672656552544F535F536F636B6574732E6300000000A5C2D700FFFFFFFF63443A5C55736572735C72696768745C446F63756D656E74735C4B65696C5C50726F6A656374735C546573745F70726F6A6563745F666F725F47443332313037432D4556414C5C4672656552544F535C736F757263655C4672656552544F535F49502E63000000000D4672656552544F535F49502E6300000000A5C2D700FFFFFFFF65443A5C55736572735C72696768745C446F63756D656E74735C4B65696C5C50726F6A656374735C546573745F70726F6A6563745F666F725F47443332313037432D4556414C5C4672656552544F535C736F757263655C4672656552544F535F444843502E63000000000F4672656552544F535F444843502E6300000000B3A6BE00FFFFFFFF69443A5C55736572735C72696768745C446F63756D656E74735C4B65696C5C50726F6A656374735C546573745F70726F6A6563745F666F725F47443332313037432D4556414C5C4672656552544F535C736F757263655C4672656552544F535F49505F5574696C732E6300000000134672656552544F535F49505F5574696C732E6300000000B3A6BE00FFFFFFFF78443A5C55736572735C72696768745C446F63756D656E74735C4B65696C5C50726F6A656374735C546573745F70726F6A6563745F666F725F47443332313037432D4556414C5C4672656552544F535C736F757263655C696E636C7564655C4672656552544F534950436F6E66696744656661756C74732E68000000001A4672656552544F534950436F6E66696744656661756C74732E6800000000D9ADC200FFFFFFFF71443A5C55736572735C72696768745C446F63756D656E74735C4B65696C5C50726F6A656374735C546573745F70726F6A6563745F666F725F47443332313037432D4556414C5C4672656552544F535C736F757263655C696E636C7564655C4672656552544F535F49505F5574696C732E6800000000134672656552544F535F49505F5574696C732E6800000000A5C2D700FFFFFFFF6D443A5C55736572735C72696768745C446F63756D656E74735C4B65696C5C50726F6A656374735C546573745F70726F6A6563745F666F725F47443332313037432D4556414C5C4672656552544F535C736F757263655C696E636C7564655C4672656552544F535F444843502E68000000000F4672656552544F535F444843502E6800000000B3A6BE00FFFFFFFF4E433A5C55736572735C557365725C417070446174615C4C6F63616C5C41726D5C5061636B735C41524D5C434D5349532D4672656552544F535C31302E352E315C536F757263655C7461736B732E6300000000077461736B732E6300000000EAD6A300FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000007001000081000000000A000021040000 @@ -130,11 +130,11 @@ 0 16 - 000000005F00000087010000FF030000 + 000000005F0000006C010000FF030000 16 - 00000000810000008701000021040000 + 00000000810000006C01000021040000 @@ -150,7 +150,7 @@ 0 16 - 030000008300000084010000DC030000 + 030000008300000069010000DC030000 16 @@ -170,7 +170,7 @@ 0 16 - 030000008300000084010000DC030000 + 030000008300000069010000DC030000 16 @@ -450,7 +450,7 @@ 0 16 - 030000008300000084010000DC030000 + 030000008300000069010000DC030000 16 @@ -470,7 +470,7 @@ 0 16 - 030000008300000084010000DC030000 + 030000008300000069010000DC030000 16 @@ -1150,7 +1150,7 @@ 0 16 - 030000008300000084010000DC030000 + 030000008300000069010000DC030000 16 @@ -1710,7 +1710,7 @@ 0 16 - 0000000000000000E003000020000000 + 0100000000000000E103000020000000 16 @@ -1798,15 +1798,15 @@ - 3369 - 000000000B000000000000000010000001000000FFFFFFFFFFFFFFFF870100005F0000008B010000FF03000001000000020000100400000001000000000000000000000000000000000000000000000001000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000FFFF02000B004354616262656450616E65001000000100000000000000810000008701000021040000000000005F00000087010000FF0300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF0200000000000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000020000000000000FFFFFFFFFFFFFFFF440100001D0100006A07000021010000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D6010000458900000180002000000000000044010000810000006A0700003F010000440100005F0000006A0700001D0100000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF260600005F0000002A060000D7020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000002A060000810000006A070000F90200002A0600005F0000006A070000D702000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000080000000000000FFFFFFFFFFFFFFFF00000000B60200006A070000BA02000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000000000000DC0200006A070000BB03000000000000BA0200006A0700009903000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFB5030000BA020000B90300009903000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000FF030000000A0000030400000100000001000010040000000100000008FDFFFFC301000000000000000000000000000001000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF01000077940000018000800000010000000000000025040000000A0000470500000000000003040000000A0000250500000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF1F416C6C205265666572656E636573206F6620275243555F454E45545253542701000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + 3370 + 000000000B000000000000000010000001000000FFFFFFFFFFFFFFFF6C0100005F00000070010000FF03000001000000020000100400000001000000F3FCFFFFE806000000000000000000000000000001000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000FFFF02000B004354616262656450616E65001000000100000000000000810000006C01000021040000000000005F0000006C010000FF0300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF0200000000000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000020000000000000FFFFFFFFFFFFFFFF440100001D0100006A07000021010000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D6010000458900000180002000000000000044010000810000006A0700003F010000440100005F0000006A0700001D0100000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF260600005F0000002A060000D7020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000002A060000810000006A070000F90200002A0600005F0000006A070000D702000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000080000000000000FFFFFFFFFFFFFFFF00000000B60200006A070000BA02000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000000000000DC0200006A070000BB03000000000000BA0200006A0700009903000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFB5030000BA020000B90300009903000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000FF030000000A0000030400000100000001000010040000000100000008FDFFFFC301000000000000000000000000000001000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF01000077940000018000800000010000000000000025040000000A0000470500000000000003040000000A0000250500000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF20416C6C205265666572656E636573206F662027764448435050726F636573732701000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF0400000000000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 59392 File - 3000 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000001773797374656D5F636C6F636B5F3130386D5F687874616C960000000000000014001773797374656D5F636C6F636B5F3130386D5F687874616C105243555F464C41475F504C4C32535442065243555F41460F4750494F5F4D4F44455F41465F50500366726D001641524D5F4554485F4D41435F47657456657273696F6E0F4765744361706162696C69746965731241524D5F4452495645525F4554485F4D41430F4472697665725F4554485F4D4143302E42617365547970655F7420784E6574776F726B496E74657266616365496E697469616C6973652820766F6964202905737461746517656E65745F64657363726970746F72735F7374727563741448414C5F4554485F5374617465547970654465661B23646566696E65204554485F5479706544656620202020766F69640B4554485F547970654465660478455448114554485F48616E646C655479706544656611784765745068794C696E6B53746174757325764E6574776F726B496E74657266616365416C6C6F6361746552414D546F427566666572730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65F1010000 + 2984 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000106970636F6E6669675553455F4448435096000000000000001400106970636F6E6669675553455F444843501E6970636F6E6669675553455F4E4554574F524B5F4556454E545F484F4F4B104652454552544F535F41465F494E45541773797374656D5F636C6F636B5F3130386D5F687874616C105243555F464C41475F504C4C32535442065243555F41460F4750494F5F4D4F44455F41465F50500366726D001641524D5F4554485F4D41435F47657456657273696F6E0F4765744361706162696C69746965731241524D5F4452495645525F4554485F4D41430F4472697665725F4554485F4D4143302E42617365547970655F7420784E6574776F726B496E74657266616365496E697469616C6973652820766F6964202905737461746517656E65745F64657363726970746F72735F7374727563741448414C5F4554485F5374617465547970654465661B23646566696E65204554485F5479706544656620202020766F69640B4554485F5479706544656604784554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65F1010000 1423 @@ -1822,7 +1822,7 @@ Build 976 - 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008546172676574203196000000000000000100085461726765742031000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C642F010000 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008546172676574203196000000000000000100085461726765742031000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C642F010000 583 @@ -1838,7 +1838,7 @@ Debug 2373 - 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756747010000 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756747010000 898 @@ -1871,11 +1871,11 @@ 0 16 - 440100005F000000D407000026010000 + B00100005F000000D40700001F020000 16 - 4401000081000000D407000048010000 + B001000081000000D407000000010000 @@ -1891,7 +1891,7 @@ 0 16 - 03000000830000003D01000050040000 + 0300000083000000A90100001F040000 16 @@ -1911,7 +1911,7 @@ 0 16 - 03000000830000003D01000050040000 + 0300000083000000A90100001F040000 16 @@ -1927,7 +1927,7 @@ 0 32767 0 - 32768 + 16384 0 16 @@ -1947,7 +1947,7 @@ 0 32767 0 - 32768 + 16384 0 16 @@ -1967,7 +1967,7 @@ 0 32767 0 - 32768 + 16384 0 16 @@ -1987,7 +1987,7 @@ 0 32767 0 - 32768 + 16384 0 16 @@ -2031,7 +2031,7 @@ 0 16 - 4701000083000000D107000003010000 + B301000083000000D1070000BB000000 16 @@ -2047,7 +2047,7 @@ 0 32767 0 - 32768 + 16384 0 16 @@ -2067,7 +2067,7 @@ 0 32767 0 - 32768 + 16384 0 16 @@ -2087,7 +2087,7 @@ 0 32767 0 - 32768 + 16384 0 16 @@ -2107,7 +2107,7 @@ 0 32767 0 - 32768 + 16384 0 16 @@ -2127,7 +2127,7 @@ 0 32767 0 - 32768 + 16384 0 16 @@ -2147,7 +2147,7 @@ 0 32767 0 - 32768 + 16384 0 16 @@ -2167,7 +2167,7 @@ 0 32767 0 - 32768 + 16384 0 16 @@ -2191,7 +2191,7 @@ 0 16 - 03000000830000003D01000050040000 + 0300000083000000A90100001F040000 16 @@ -2211,7 +2211,7 @@ 0 16 - 03000000830000003D01000050040000 + 0300000083000000A90100001F040000 16 @@ -2231,7 +2231,7 @@ 0 16 - 030000009B040000D107000002050000 + 030000006A040000D107000002050000 16 @@ -2271,7 +2271,7 @@ 0 16 - 030000009B040000D107000002050000 + 030000006A040000D107000002050000 16 @@ -2291,7 +2291,7 @@ 0 16 - 4401000080000000D407000026010000 + B001000080000000D40700001F020000 16 @@ -2311,7 +2311,7 @@ 0 16 - 4701000083000000D107000003010000 + B301000083000000D1070000BB000000 16 @@ -2367,7 +2367,7 @@ 0 32767 0 - 32768 + 16384 0 16 @@ -2391,7 +2391,7 @@ 0 16 - 4701000083000000D107000003010000 + B301000083000000D1070000BB000000 16 @@ -2411,7 +2411,7 @@ 0 16 - 4701000083000000D107000003010000 + B301000083000000D1070000BB000000 16 @@ -2431,7 +2431,7 @@ 0 16 - 4701000083000000D107000003010000 + B301000083000000D1070000BB000000 16 @@ -2451,7 +2451,7 @@ 0 16 - 4701000083000000D107000003010000 + B301000083000000D1070000BB000000 16 @@ -2891,7 +2891,7 @@ 0 16 - 03000000830000003D01000050040000 + 0300000083000000A90100001F040000 16 @@ -2911,7 +2911,7 @@ 0 16 - 030000009B040000D107000002050000 + 030000006A040000D107000002050000 16 @@ -2931,7 +2931,7 @@ 0 16 - 030000009B040000D107000002050000 + 030000006A040000D107000002050000 16 @@ -2947,7 +2947,7 @@ 0 32767 0 - 32768 + 16384 0 16 @@ -2967,7 +2967,7 @@ 0 32767 0 - 32768 + 16384 0 16 @@ -2991,7 +2991,7 @@ 0 16 - 0000000098040000D407000025050000 + 0000000067040000D407000025050000 16 @@ -3011,7 +3011,7 @@ 0 16 - 030000009B040000D107000002050000 + 030000006A040000D107000002050000 16 @@ -3031,7 +3031,7 @@ 0 16 - 4701000083000000D107000003010000 + B301000083000000D1070000BB000000 16 @@ -3511,7 +3511,7 @@ 2 16 - 00000000200000009202000040000000 + 05000000200000009702000040000000 16 @@ -3527,7 +3527,7 @@ 0 32767 0 - 32768 + 16384 0 16 @@ -3539,15 +3539,15 @@ - 3363 - 000000000B000000000000000020000001000000FFFFFFFFFFFFFFFF4401000026010000D40700002A010000010000000100001004000000010000000CFFFFFFA8020000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E6500200000010000004401000081000000D407000048010000440100005F000000D4070000260100000000000040280056080000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF260600005F0000002A060000D7020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000002A060000810000006A070000F90200002A0600005F0000006A070000D702000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF400100005F0000004401000073040000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000000000000810000004001000095040000000000005F00000040010000730400000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF04000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF0000000073040000D4070000770400000100000001000010040000000100000029FDFFFF1901000000000000000000000000000001000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF01000077940000018000800000010000000000000099040000D4070000470500000000000077040000D4070000250500000000000040820056060000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF2E416C6C205265666572656E636573206F66202770727650726F636573734E6574776F726B446F776E4576656E742701000000CF01000001000000FFFFFFFFFFFFFFFF0642726F777365000000007794000001000000FFFFFFFFFFFFFFFF0400000000000000C600000002000000000000000000000002000000FFFFFFFF0000000082040000D40700008604000000000000010000000400000000000000000000000000000000000000000000000000000002000000FFFFFFFFC5000000C600000001000000C600000001000000FFFFFFFFC5000000000000000040000001000000FFFFFFFFFFFFFFFFD40700005F000000D807000025050000010000000200001004000000010000006AFAFFFF1B03000000000000000000000000000001000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800040000001000000D807000081000000000A000047050000D80700005F000000000A00002505000000000000404100560F0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203201000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF0A00000000000000000000000000000000000000000000000000000001000000FFFFFFFF8F07000001000000FFFFFFFF8F070000000000000000000000000000 + 3353 + 000000000B000000000000000020000001000000FFFFFFFFFFFFFFFFB00100001F020000D4070000230200000100000001000010040000000100000083FFFFFF5B030000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000001000000B001000081000000D407000000010000B00100005F000000D40700001F0200000000000040280056080000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF260600005F0000002A060000D7020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000002A060000810000006A070000F90200002A0600005F0000006A070000D702000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFAC0100005F000000B00100004204000001000000020000100400000001000000EAFDFFFFB3050000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000081000000AC01000064040000000000005F000000AC010000420400000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF0000000042040000D40700004604000001000000010000100400000001000000C0FDFFFFB001000000000000000000000000000001000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF01000077940000018000800000010000000000000068040000D4070000470500000000000046040000D4070000250500000000000040820056060000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF24416C6C205265666572656E636573206F6620276970636F6E6669675553455F444843502701000000CF01000001000000FFFFFFFFFFFFFFFF0642726F777365000000007794000001000000FFFFFFFFFFFFFFFF0400000000000000C600000002000000000000000000000002000000FFFFFFFF0000000082040000D40700008604000000000000010000000400000000000000000000000000000000000000000000000000000002000000FFFFFFFFC5000000C600000001000000C600000001000000FFFFFFFFC5000000000000000040000001000000FFFFFFFFFFFFFFFFD40700005F000000D807000025050000010000000200001004000000010000006AFAFFFF1B03000000000000000000000000000001000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800040000001000000D807000081000000000A000047050000D80700005F000000000A00002505000000000000404100560F0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203201000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000001000000FFFFFFFF8F07000001000000FFFFFFFF8F070000000000000000000000000000 59392 File - 3000 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000001773797374656D5F636C6F636B5F3130386D5F687874616C960000000000000014001773797374656D5F636C6F636B5F3130386D5F687874616C105243555F464C41475F504C4C32535442065243555F41460F4750494F5F4D4F44455F41465F50500366726D001641524D5F4554485F4D41435F47657456657273696F6E0F4765744361706162696C69746965731241524D5F4452495645525F4554485F4D41430F4472697665725F4554485F4D4143302E42617365547970655F7420784E6574776F726B496E74657266616365496E697469616C6973652820766F6964202905737461746517656E65745F64657363726970746F72735F7374727563741448414C5F4554485F5374617465547970654465661B23646566696E65204554485F5479706544656620202020766F69640B4554485F547970654465660478455448114554485F48616E646C655479706544656611784765745068794C696E6B53746174757325764E6574776F726B496E74657266616365416C6C6F6361746552414D546F427566666572730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000300150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65D5030000 + 2984 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000106970636F6E6669675553455F4448435096000000000000001400106970636F6E6669675553455F444843501E6970636F6E6669675553455F4E4554574F524B5F4556454E545F484F4F4B104652454552544F535F41465F494E45541773797374656D5F636C6F636B5F3130386D5F687874616C105243555F464C41475F504C4C32535442065243555F41460F4750494F5F4D4F44455F41465F50500366726D001641524D5F4554485F4D41435F47657456657273696F6E0F4765744361706162696C69746965731241524D5F4452495645525F4554485F4D41430F4472697665725F4554485F4D4143302E42617365547970655F7420784E6574776F726B496E74657266616365496E697469616C6973652820766F6964202905737461746517656E65745F64657363726970746F72735F7374727563741448414C5F4554485F5374617465547970654465661B23646566696E65204554485F5479706544656620202020766F69640B4554485F5479706544656604784554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000300150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000000180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65D5030000 1423 @@ -3563,7 +3563,7 @@ Build 955 - 00200000000000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000000002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050FFFFFFFF00960000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000000240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64E1010000 + 00200000000000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000000002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050FFFFFFFF00960000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000000240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64E1010000 583 @@ -3579,7 +3579,7 @@ Debug 2362 - 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000004002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020000002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756787020000 + 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020000002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756787020000 898 @@ -3603,12 +3603,12 @@ 0 100 - 0 + 6 .\main.c - 53 - 198 - 214 + 0 + 284 + 295 1 0 @@ -3623,37 +3623,82 @@ 0 - RTE/Device/GD32F107VC/system_gd32f10x.c - 41 - 859 - 791 + .\DemoTasks\SimpleTCPEchoServer.c + 31 + 129 + 142 1 0 - RTE/Device/GD32F107VC/gd32f10x_rcu.c - 9 - 93 - 123 + .\FreeRTOS\source\FreeRTOS_Sockets.c + 28 + 1276 + 1288 1 0 - C:\Users\User\AppData\Local\Arm\Packs\GigaDevice\GD32F10x_DFP\2.0.3\Device\Firmware\Peripherals\inc\gd32f10x_gpio.h + .\FreeRTOS\source\FreeRTOS_IP.c + 0 + 365 + 393 + 1 + + 0 + + + .\FreeRTOS\source\FreeRTOS_DHCP.c + 0 + 576 + 587 + 1 + + 0 + + + .\FreeRTOS\source\FreeRTOS_IP_Utils.c + 23 + 344 + 370 + 1 + + 0 + + + FreeRTOS\source\include\FreeRTOSIPConfigDefaults.h 12 - 41 - 73 + 531 + 559 1 0 - C:\Users\User\AppData\Local\Arm\Packs\GigaDevice\GD32F10x_DFP\2.0.3\Device\Firmware\Peripherals\inc\gd32f10x_rcu.h - 8 - 66 - 351 + FreeRTOS\source\include\FreeRTOS_IP_Utils.h + 6 + 43 + 64 + 1 + + 0 + + + FreeRTOS\source\include\FreeRTOS_DHCP.h + 6 + 30 + 44 + 1 + + 0 + + + C:/Users/User/AppData/Local/Arm/Packs/ARM/CMSIS-FreeRTOS/10.5.1/Source/tasks.c + 0 + 1205 + 1216 1 0 @@ -3676,7 +3721,6 @@ .\FreeRTOS\source\FreeRTOS_Sockets.c 907 .\FreeRTOS\source\FreeRTOS_Sockets.c 909 .\FreeRTOS\source\FreeRTOS_Sockets.c 919 - .\FreeRTOS\source\FreeRTOS_Sockets.c 1287 .\FreeRTOS\source\FreeRTOS_Sockets.c 1613 .\FreeRTOS\source\FreeRTOS_Sockets.c 1615 .\FreeRTOS\source\FreeRTOS_Sockets.c 2891 @@ -3702,8 +3746,8 @@ .\FreeRTOS\source\FreeRTOS_DHCP.c 1245 .\FreeRTOS\source\FreeRTOS_DHCP.c 1246 .\FreeRTOS\source\FreeRTOS_DHCP.c 1271 - RTE/Device/GD32F107VC/gd32f10x_enet.c 3070 - .\main.c 199 + .\PHY\PHY_DP83848C.c 166 + .\PHY\PHY_DP83848C.c 193 diff --git a/Test_project_for_GD32107C-EVAL.uvoptx b/Test_project_for_GD32107C-EVAL.uvoptx index d68e007..d9e743a 100644 --- a/Test_project_for_GD32107C-EVAL.uvoptx +++ b/Test_project_for_GD32107C-EVAL.uvoptx @@ -153,7 +153,40 @@ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0GD32F10x_CL -FS08000000 -FL040000 -FP0($$Device:GD32F107VC$Flash\GD32F10x_CL.FLM)) - + + + 0 + 0 + 391 + 1 +
0
+ 0 + 0 + 0 + 0 + 0 + 0 + .\FreeRTOS\source\FreeRTOS_IP.c + + +
+ + 1 + 0 + 406 + 1 +
0
+ 0 + 0 + 0 + 0 + 0 + 0 + .\FreeRTOS\source\FreeRTOS_IP.c + + +
+
0 @@ -170,15 +203,41 @@ 1 mac + + 3 + 1 + PHY + 1 0 - 0x40011000 + 0x40028014 0 + + + 2 + 0 + 0x20001FCC + 0 + + + + + 3 + 0 + reg + 0 + + + + C:\Users\User\AppData\Local\Arm\Packs\ARM\CMSIS-FreeRTOS\10.5.1\CMSIS\RTOS2\FreeRTOS\FreeRTOS.scvd + ARM.CMSIS-FreeRTOS.10.5.1 + 1 + 0 @@ -278,6 +337,18 @@ 0 0 + + 1 + 5 + 1 + 1 + 0 + 0 + .\PHY\PHY_DP83848C.c + PHY_DP83848C.c + 0 + 0 + @@ -288,7 +359,7 @@ 0 2 - 5 + 6 1 0 0 @@ -300,7 +371,7 @@ 2 - 6 + 7 1 0 0 @@ -312,7 +383,7 @@ 2 - 7 + 8 1 0 0 @@ -324,7 +395,7 @@ 2 - 8 + 9 1 0 0 @@ -336,7 +407,7 @@ 2 - 9 + 10 1 0 0 @@ -348,7 +419,7 @@ 2 - 10 + 11 1 0 0 @@ -360,7 +431,7 @@ 2 - 11 + 12 1 0 0 @@ -372,7 +443,7 @@ 2 - 12 + 13 1 0 0 @@ -384,7 +455,7 @@ 2 - 13 + 14 1 0 0 @@ -396,7 +467,7 @@ 2 - 14 + 15 1 0 0 @@ -408,7 +479,7 @@ 2 - 15 + 16 1 0 0 @@ -420,7 +491,7 @@ 2 - 16 + 17 1 0 0 @@ -432,7 +503,7 @@ 2 - 17 + 18 1 0 0 @@ -444,7 +515,7 @@ 2 - 18 + 19 1 0 0 @@ -456,7 +527,7 @@ 2 - 19 + 20 1 0 0 @@ -468,7 +539,7 @@ 2 - 20 + 21 1 0 0 @@ -480,7 +551,7 @@ 2 - 21 + 22 1 0 0 @@ -492,7 +563,7 @@ 2 - 22 + 23 1 0 0 @@ -504,7 +575,7 @@ 2 - 23 + 24 1 0 0 @@ -516,7 +587,7 @@ 2 - 24 + 25 1 0 0 @@ -528,7 +599,7 @@ 2 - 25 + 26 1 0 0 @@ -540,7 +611,7 @@ 2 - 26 + 27 1 0 0 @@ -552,7 +623,7 @@ 2 - 27 + 28 1 0 0 @@ -564,7 +635,7 @@ 2 - 28 + 29 1 0 0 @@ -602,22 +673,6 @@ ::Device - 0 - 0 - 0 - 1 - - - - ::FreeRTOS - 0 - 0 - 0 - 1 - - - - ::RTOS 1 0 0 @@ -625,7 +680,7 @@ - ::Security + ::RTOS 0 0 0 diff --git a/Test_project_for_GD32107C-EVAL.uvprojx b/Test_project_for_GD32107C-EVAL.uvprojx index 257c5f2..a88460f 100644 --- a/Test_project_for_GD32107C-EVAL.uvprojx +++ b/Test_project_for_GD32107C-EVAL.uvprojx @@ -341,7 +341,7 @@ -D DEBUG -Wno-pragma-pack -Wno-macro-redefined - .\FreeRTOS\source\portable\NetworkInterface\include;.\FreeRTOS\source\include;.\FreeRTOS\source\portable\Compiler\Keil;C:\Users\User\AppData\Local\Arm\Packs\Arm-Packs\PKCS11\1.0.0\include;.\DemoTasks\include + .\FreeRTOS\source\portable\NetworkInterface\include;.\FreeRTOS\source\include;.\FreeRTOS\source\portable\Compiler\Keil;.\DemoTasks\include @@ -405,6 +405,11 @@ 1 .\DemoTasks\TCPEchoClient_SingleTasks.c + + PHY_DP83848C.c + 1 + .\PHY\PHY_DP83848C.c + @@ -613,78 +618,6 @@ ::Device - - ::FreeRTOS - - - 0 - 0 - 0 - 0 - 0 - 0 - 2 - 2 - 2 - 2 - 11 - - - 1 - - - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 - - - - - - - - - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - - - - - - - - - - ::RTOS @@ -757,78 +690,6 @@ - - ::Security - - - 0 - 0 - 0 - 0 - 0 - 0 - 2 - 2 - 2 - 2 - 11 - - - 1 - - - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 - - - - - - - - - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - - - - - - - - - - @@ -930,6 +791,12 @@ + + + + + + @@ -942,30 +809,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - @@ -1044,12 +887,6 @@ - - - - - - diff --git a/main.c b/main.c index 695dfb3..e530990 100644 --- a/main.c +++ b/main.c @@ -55,9 +55,9 @@ #define TEST_RUNNER_TASK_STACK_SIZE 512 -#define mainCREATE_SIMPLE_UDP_CLIENT_SERVER_TASKS 1 +#define mainCREATE_SIMPLE_UDP_CLIENT_SERVER_TASKS 0 #define mainCREATE_TCP_ECHO_TASKS_SINGLE 0 -#define mainCREATE_TCP_ECHO_SERVER_TASK 0 +#define mainCREATE_TCP_ECHO_SERVER_TASK 1 /* Simple UDP client and server task parameters. */ #define mainSIMPLE_UDP_CLIENT_SERVER_TASK_PRIORITY ( tskIDLE_PRIORITY ) @@ -219,7 +219,7 @@ static void vInitMCU(void) gpio_init(RMII_MDC_PORT, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, RMII_MDC); gpio_init(RMII_MDIO_PORT, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, RMII_MDIO); - gpio_init(RMII_INT_PORT, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, RMII_INT); + gpio_init(RMII_INT_PORT, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, RMII_INT); gpio_init(RMII_REF_CLK_PORT, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, RMII_MCO); @@ -300,7 +300,7 @@ int main(void) xTaskCreate( vTaskToggleLed, "ToggleLed", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY+1, NULL); xTaskCreate( vTaskHelloWorld, "HelloWorld", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY+1, NULL); FreeRTOS_IPInit( ucIPAddress, ucNetMask, ucGatewayAddress, ucDNSServerAddress, ucMACAddress ); - vStartSimpleTCPServerTasks( configMINIMAL_STACK_SIZE*2, tskIDLE_PRIORITY+1 ); +// vStartSimpleTCPServerTasks( configMINIMAL_STACK_SIZE*2, tskIDLE_PRIORITY+1 ); vTaskStartScheduler(); while(1); }