diff --git a/.gitmodules b/.gitmodules index 30c18d7b712..16e21e0708b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,7 +1,3 @@ -[submodule "http-parser"] - path = libraries/3rdparty/http_parser - url = https://github.com/nodejs/http-parser.git - branch = v2.9.2 [submodule "unity"] path = libraries/3rdparty/unity url = https://github.com/ThrowTheSwitch/Unity.git @@ -45,3 +41,18 @@ [submodule "libraries/device_shadow_for_aws"] path = libraries/device_shadow_for_aws url = https://github.com/aws/device-shadow-for-aws-iot-embedded-sdk.git +[submodule "libraries/coreHTTP"] + path = libraries/coreHTTP + url = https://github.com/FreeRTOS/coreHTTP.git +[submodule "libraries/jobs_for_aws"] + path = libraries/jobs_for_aws + url = https://github.com/aws/jobs-for-aws-iot-embedded-sdk.git +[submodule "libraries/device_defender_for_aws"] + path = libraries/device_defender_for_aws + url = https://github.com/aws/device-defender-for-aws-iot-embedded-sdk.git +[submodule "libraries/abstractions/backoff_algorithm"] + path = libraries/abstractions/backoff_algorithm + url = https://github.com/FreeRTOS/backoffAlgorithm.git +[submodule "tools/litani"] + path = tools/litani + url = https://github.com/awslabs/aws-build-accumulator diff --git a/CHANGELOG.md b/CHANGELOG.md index 192fa89894e..3d4a15813d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,81 @@ # Change Log This repository contains the `FreeRTOS AWS Reference Integrations`, which are pre-integrated FreeRTOS projects that demonstrate connectivity with AWS IoT. The repository contains projects for many different microcontroller evaluation boards. +## 202012.00 December 2020 + +### New Features + +#### coreHTTP v2.0.0 + +- The coreHTTP (https://github.com/FreeRTOS/coreHTTP) library provides the ability to establish an HTTP connection with a server over a customer-implemented transport layer, which can either be a secure channel like a TLS session (mutually authenticated or server-only authentication) or a non-secure channel like a plaintext TCP connection. The HTTP connection can be used to make "GET" (include range requests), "PUT", "POST" and "HEAD" requests. The library provides a mechanism to register a customer-defined callback for receiving parsed header fields in an HTTP response. The library has been refactored for memory optimization, and is a client implementation of a subset of the HTTP/1.1 (https://tools.ietf.org/html/rfc2616) standard. +- See memory requirements for the latest release here (https://docs.aws.amazon.com/embedded-csdk/202011.00/lib-ref/libraries/standard/coreHTTP/docs/doxygen/output/html/index.html#http_memory_requirements). + +#### backoffAlgorithm v1.0.0 + +- The backoffAlgorithm (https://github.com/FreeRTOS/backoffAlgorithm) library is a utility library to calculate backoff period for network operation retries (like failed network connection with server) using an exponential backoff with jitter algorithm. This library uses the "Full Jitter" strategy for the exponential backoff with jitter algorithm. More information about the algorithm can be seen in the Exponential Backoff and Jitter (https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/) AWS blog. +- Exponential backoff with jitter is typically used when retrying a failed connection or network operation with the server. An exponential backoff with jitter helps to mitigate the request failures made to servers, that are caused due to network congestion or high load on the server, by spreading out retry requests across multiple devices. Besides, in an environment with poor connectivity, a client can get disconnected at any time. A backoff strategy helps the client to conserve battery by not repeatedly attempting reconnections when they are unlikely to succeed. +- The backoffAlgorithm library has no dependencies on libraries other than the standard C library. + +#### AWS IoT Device Defender v1.0.1 + +- The AWS IoT Device Defender (https://github.com/aws/device-defender-for-aws-iot-embedded-sdk) library enables you to interact with the AWS IoT Device Defender service to continuously monitor security metrics from devices for deviations from what you have defined as appropriate behavior for each device. If something doesn’t look right, AWS IoT Device Defender sends out an alert so you can take action to remediate the issue. More details about Device Defender can be found in AWS IoT Device Defender documentation (https://docs.aws.amazon.com/iot/latest/developerguide/device-defender.html). +- The AWS IoT Device Defender library has no dependencies on additional libraries other than the standard C library. It also doesn’t have any platform dependencies, such as threading or synchronization. It can be used with any MQTT library and any JSON library (see demos (https://github.com/aws/amazon-freertos/tree/master/demos/device_defender_for_aws) with coreMQTT and coreJSON). +- See memory requirements for the latest release here (https://docs.aws.amazon.com/embedded-csdk/202011.00/lib-ref/libraries/aws/device-defender-for-aws-iot-embedded-sdk/docs/doxygen/output/html/index.html#defender_memory_requirements). + +#### AWS IoT Jobs v1.0.0 + +- The AWS IoT Jobs (https://github.com/aws/jobs-for-aws-iot-embedded-sdk) library enables you to interact with the AWS IoT Jobs service which notifies one or more connected devices of a pending “Job”. A Job can be used to manage your fleet of devices, update firmware and security certificates on your devices, or perform administrative tasks such as restarting devices and performing diagnostics. For documentation of the service, please see the AWS IoT Developer Guide (https://docs.aws.amazon.com/iot/latest/developerguide/iot-jobs.html). Interactions with the Jobs service use the MQTT protocol. This library provides an API to compose and recognize the MQTT topic strings used by the Jobs service. +- The AWS IoT Jobs library has no dependencies on additional libraries other than the standard C library. It also doesn’t have any platform dependencies, such as threading or synchronization. It can be used with any MQTT library and any JSON library (see demos (https://github.com/aws/amazon-freertos/tree/master/demos/jobs_for_aws) with coreMQTT and coreJSON). +- See memory requirements for the latest release (https://docs.aws.amazon.com/embedded-csdk/202011.00/lib-ref/libraries/aws/jobs-for-aws-iot-embedded-sdk/docs/doxygen/output/html/index.html#jobs_memory_requirements)here (https://docs.aws.amazon.com/embedded-csdk/202011.00/lib-ref/libraries/aws/jobs-for-aws-iot-embedded-sdk/docs/doxygen/output/html/index.html#jobs_memory_requirements). + +#### HTTP Compatibility Layer v1.2.0 + +- The HTTP Compatibility Layer provides backwards compatibility from coreHTTP library to HTTPS V1.x.x APIs. In addition, the HTTP Compatibility Layer maintains the dependency of the network abstraction and linear containers from the HTTPS V1.x.x library. The task pool dependency is removed in order to allow the user to allocate tasks on the stack rather than exclusively on the heap. +- Configuration settings using C preprocessor constants, for the HTTP Compatibility Layer, are available in addition to the original configurations of the HTTPS V1.x.x library (https://docs.aws.amazon.com/freertos/latest/lib-ref/html2/https/https_config.html). They can be set with a #define in the config file (iot_config.h) or by using a compiler option such as -D in gcc. If a configuration setting is not defined, the HTTP Compatibility Layer will use a "sensible" default value (unless otherwise noted). Because they are compile-time constants, this HTTP Compatibility Layer must be rebuilt if a configuration setting is changed. + - IOT_HTTPS_DISPATCH_QUEUE_SIZE - The number of requests in the queue that are ready to be sent to the HTTP server. + - IOT_HTTPS_DISPATCH_TASK_COUNT - The number of tasks that are responsible for sending requests from the dispatch queue. + - IOT_HTTPS_DISPATCH_TASK_STACK_SIZE - The stack size of each dispatch task, sized appropriately for each board. + - IOT_HTTPS_DISPATCH_USE_STATIC_MEMORY - If set to 1, the memory used by the dispatch task will be allocated statically by the library. Otherwise, memory will be allocated on the heap. + - IOT_HTTPS_DISPATCH_TASK_PRIORITY - The priority of each dispatch task. This priority is deliberately chosen to match the original taskpool's priority. Doing so prevents starvation of the network-receive task and tasks potentially used by other libraries. +- See memory requirements for the latest release (https://docs.aws.amazon.com/embedded-csdk/202011.00/lib-ref/libraries/aws/jobs-for-aws-iot-embedded-sdk/docs/doxygen/output/html/index.html#jobs_memory_requirements) here (https://github.com/aws/amazon-freertos/blob/master/libraries/c_sdk/standard/https/CODESIZE.md). + +### Updates + +#### FreeRTOS kernel V10.4.3 + +- Includes FreeRTOS kernel V10.4.3 +- Additional details can be found here: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/V10.4.3-kernel-only/History.txt + +#### FreeRTOS-Plus-TCP v2.3.2 + +- When a protocol error occurs during the SYN-phase of a TCP connection, a child socket will now be closed (calling FreeRTOS_closesocket() ), instead of being given the eCLOSE_WAIT status. A client socket, which calls connect() to establish a connection, will receive the eCLOSE_WAIT status, just like before. + +#### coreMQTT v1.1.0 + +- Update logs and format specifiers to use standard C types. +- Add dependence on stdbool.h +- Introduce two new configuration macros for setting the timeout for transport reads and sends. + +#### coreJSON v3.0.0 + +- Added an API function to iterate over a collection in a JSON document. + +#### corePKCS11 v3.0.0 + +- Updated xFindObjectWithLabelAndClass to include a size parameter to allow passing in the size of the label, in order to avoid calling strlen in the library code. +- Added CBMC memory proofs for all functions. +- Removed threading_alt.h from corePKCS11. +- Restructured third party folder in order to align with other core repositories. Folders located in “corePKCS11/3rdparty” are now in “corePKCS11/source/dependency/3rdparty”. +- Updated logs and format specifiers to use standard C types. + +#### AWS IoT Device Shadow v1.0.2 + +- Update logs and format specifiers to use standard C types. + +#### MQTT Compatibility Layer v2.3.1 + +- Fixes for compiler warnings by removing unused functions and variables. + ## 202011.00 November 2020 ### New Features diff --git a/CMakeLists.txt b/CMakeLists.txt index 7dfbe2a41a2..5d004fc2324 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,8 +6,8 @@ if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}") endif() project(amazon-freertos) -set(PROJECT_VERSION "202011.00") -set(PROJECT_VERSION_MAJOR "202011") +set(PROJECT_VERSION "202012.00") +set(PROJECT_VERSION_MAJOR "202012") set(PROJECT_VERSION_MINOR "00") # Import global configurations. diff --git a/checksums.json b/checksums.json index b079368b976..f1b4b99eb9d 100644 --- a/checksums.json +++ b/checksums.json @@ -3,5115 +3,4639 @@ "optional_components": [ { "checksums": { - "freertos_kernel/portable/ARMClang/Use-the-GCC-ports.txt": "3c39fa98b62e8a40560cb283f011411ad850c9f521e8b635af7f81a37d5a13cc", - "freertos_kernel/portable/ARMv8M/ReadMe.txt": "f8ee247fe57cc51b810fdd571f04252213a1deb77ef87053afe7320b9fe3a069", - "freertos_kernel/portable/ARMv8M/copy_files.py": "8c8746488aa83b1e803b25ad786416b86d9895641b55f14745ca630488928e49", - "freertos_kernel/portable/ARMv8M/non_secure/ReadMe.txt": "5f7390107fc6c25c53594f63b82655ed2558bf34df857b9b94025141bd05e14d", - "freertos_kernel/portable/ARMv8M/non_secure/port.c": "07d2286023754e9ac344088a278e4694e221960309a177afa4f7c29d0afe5736", - "freertos_kernel/portable/ARMv8M/non_secure/portable/GCC/ARM_CM23/portasm.c": "5b1e60a32388bd0e564a1fb4d6f2a62787511823fe88496d9cb2159c8b1794ed", - "freertos_kernel/portable/ARMv8M/non_secure/portable/GCC/ARM_CM23/portmacro.h": "6812b0f9fbf3ef18e80f3322fec6f34482488bd79d0654f8ca899da941129b02", - "freertos_kernel/portable/ARMv8M/non_secure/portable/GCC/ARM_CM23_NTZ/portasm.c": "dde49ced7de20b4d13d065ff4cb7161ac3ca4feca29486f4946a98bfab8d25dc", - "freertos_kernel/portable/ARMv8M/non_secure/portable/GCC/ARM_CM23_NTZ/portmacro.h": "6812b0f9fbf3ef18e80f3322fec6f34482488bd79d0654f8ca899da941129b02", - "freertos_kernel/portable/ARMv8M/non_secure/portable/GCC/ARM_CM33/portasm.c": "3b541eee7340b4b65241367b7437bd52787fb32869c848dde46959caff2bac26", - "freertos_kernel/portable/ARMv8M/non_secure/portable/GCC/ARM_CM33/portmacro.h": "c101e361220d8042cce538b894e2a07884135007bb7dea554759035c33c33a36", - "freertos_kernel/portable/ARMv8M/non_secure/portable/GCC/ARM_CM33_NTZ/portasm.c": "c048a5a6c1bb1829c843a4b8e48208772347c732f0ef3188ad2060b242c2ee44", - "freertos_kernel/portable/ARMv8M/non_secure/portable/GCC/ARM_CM33_NTZ/portmacro.h": "c101e361220d8042cce538b894e2a07884135007bb7dea554759035c33c33a36", - "freertos_kernel/portable/ARMv8M/non_secure/portable/IAR/ARM_CM23/portasm.s": "2ac3a2ce4b166a6143c46b202ec6a449c058a1fee503b58f9acd5e785c7606ce", - "freertos_kernel/portable/ARMv8M/non_secure/portable/IAR/ARM_CM23/portmacro.h": "dd9c3f9a38d432f13d9ed2cb33ade69ca823062ffa8d9128473f56faa4e41d98", - "freertos_kernel/portable/ARMv8M/non_secure/portable/IAR/ARM_CM23_NTZ/portasm.s": "a790b8ba5baf9252f3a17db84542170fcfff946cd7f01a0070845204fef1c8eb", - "freertos_kernel/portable/ARMv8M/non_secure/portable/IAR/ARM_CM23_NTZ/portmacro.h": "88bf43629dc4fc00e41af1bcb6d7e06e4fbbf26f069b4d771b633d7ed52c1994", - "freertos_kernel/portable/ARMv8M/non_secure/portable/IAR/ARM_CM33/portasm.s": "951e6f3a3ef09bb2bde77b6e3c20b78762939250daf9123cd00a8c3254a847d0", - "freertos_kernel/portable/ARMv8M/non_secure/portable/IAR/ARM_CM33/portmacro.h": "4b88d10017de817469888093b1a689ee6da7b33edb5e3006839b238a9bb88513", - "freertos_kernel/portable/ARMv8M/non_secure/portable/IAR/ARM_CM33_NTZ/portasm.s": "b7cf4bc30a7be99813aa9c3490f51f2c1df2a9e4f3dc050036238b2a9690765d", - "freertos_kernel/portable/ARMv8M/non_secure/portable/IAR/ARM_CM33_NTZ/portmacro.h": "4b88d10017de817469888093b1a689ee6da7b33edb5e3006839b238a9bb88513", - "freertos_kernel/portable/ARMv8M/non_secure/portasm.h": "ca3ceed67f82e3d66da035078959714c43397abfd1e77d0fa4e8d30bd4f02da6", - "freertos_kernel/portable/ARMv8M/secure/ReadMe.txt": "f8ee247fe57cc51b810fdd571f04252213a1deb77ef87053afe7320b9fe3a069", - "freertos_kernel/portable/ARMv8M/secure/context/portable/GCC/ARM_CM23/secure_context_port.c": "e3d2c9965e634804294e8373039cfe49db78ae7cf431d074d363f603e3e5c0be", - "freertos_kernel/portable/ARMv8M/secure/context/portable/GCC/ARM_CM33/secure_context_port.c": "f3d402dc906f5a02c09ab8fa0e2b2b160c31c3648ecd5ddcf0e041b80fe2e1f5", - "freertos_kernel/portable/ARMv8M/secure/context/portable/IAR/ARM_CM23/secure_context_port.c": "48d5e08258bacc13c0a4679eb673be334c548a6aa433bbfb823fe2698093fa94", - "freertos_kernel/portable/ARMv8M/secure/context/portable/IAR/ARM_CM23/secure_context_port_asm.s": "18683a26371509e9d65d1be3b3d8d29e39f48b1a78cbeae5c8e897bb628f1cca", - "freertos_kernel/portable/ARMv8M/secure/context/portable/IAR/ARM_CM33/secure_context_port.c": "48d5e08258bacc13c0a4679eb673be334c548a6aa433bbfb823fe2698093fa94", - "freertos_kernel/portable/ARMv8M/secure/context/portable/IAR/ARM_CM33/secure_context_port_asm.s": "d1bce7b173f724a7b0e97ffb2841ce19b15d0469bd49bbf9109db735629f844b", - "freertos_kernel/portable/ARMv8M/secure/context/secure_context.c": "7943ce53070eca8060d91beaa5639cd707437ad212e48eacdcd4c5a0a2ab7248", - "freertos_kernel/portable/ARMv8M/secure/context/secure_context.h": "2bb41a95f1bd1643943b8e8fe85bc47faa2dabb53b85682925bf90cf26c47f9d", - "freertos_kernel/portable/ARMv8M/secure/heap/secure_heap.c": "54bcf2164dd0652183cf58d0e4eb1ff325e9f114dd7b008a51b983c672188ec3", - "freertos_kernel/portable/ARMv8M/secure/heap/secure_heap.h": "966d538a419dce23c7855870a02f91bf3adc018a108b791705b69a6cf08514e6", - "freertos_kernel/portable/ARMv8M/secure/init/secure_init.c": "4f1e26736d6b2e59c67b560565f691ebaf2d28cd241d0a385d3a981f9f3a42de", - "freertos_kernel/portable/ARMv8M/secure/init/secure_init.h": "ce593b2b690c85871375c156d059042445cc043777efd2802d31007ab87d210e", - "freertos_kernel/portable/ARMv8M/secure/macros/secure_port_macros.h": "e9a5753528ea62296e0633cc1121df015ab48e645ac04369722a56e608078ce9", - "freertos_kernel/portable/BCC/16BitDOS/Flsh186/port.c": "b2cfbc487383c458b8a4917c37411cc8c7bce4e0307f2a49ecfc87e074de0133", - "freertos_kernel/portable/BCC/16BitDOS/Flsh186/prtmacro.h": "1ba45ef4d18c234a06d6f2b39286ee004e9ab4dd0e4fd4891f2839818874a8df", - "freertos_kernel/portable/BCC/16BitDOS/PC/port.c": "ee835fe9d7d82c59d5726cefe2f1897627befc09262f0efc9cb894b2d6300251", - "freertos_kernel/portable/BCC/16BitDOS/PC/prtmacro.h": "5432a211a07bca76156f81dc8445e85aab850db7b2240f162da89dc0339a9e11", - "freertos_kernel/portable/BCC/16BitDOS/common/portasm.h": "b056e7426978e86513c25dc8af54a9263d63addb56a36a5112c72d0395eb0ac2", - "freertos_kernel/portable/BCC/16BitDOS/common/portcomn.c": "8e764f8a04b3758d80cee490fe824d258e6922780cda734842e86efb62b09de5", - "freertos_kernel/portable/CCS/ARM_CM3/port.c": "ca94d8c6999d1c536e4a923db87a0e1d11c948deaaf9cf6749380c0402ae58bb", - "freertos_kernel/portable/CCS/ARM_CM3/portasm.asm": "cc945829f9534cf7f638e871be787230875f0a8f8e802598654305cd87568454", - "freertos_kernel/portable/CCS/ARM_CM3/portmacro.h": "0c115bf1dda94954600a8164958744a5ff9f65b28ca14245f829e2e78ec2ab75", - "freertos_kernel/portable/CCS/ARM_CM4F/port.c": "f0792c3b574e8d28d73e2752c91d85b0c690798af7cccaf27e9c1a1522b2ec27", - "freertos_kernel/portable/CCS/ARM_CM4F/portasm.asm": "ebe51d4cc6fc0b950314e09c575f8016762f043c44f5cbfbd189b0e49b8c70c2", - "freertos_kernel/portable/CCS/ARM_CM4F/portmacro.h": "c86e7368f7badc18a61a8526aa335ed85478da46e40227a14827ef63617a6530", - "freertos_kernel/portable/CCS/ARM_Cortex-R4/port.c": "4ed5757b71717a7b6fcfc981d72a212e40d793647742ed950d6603c450e585eb", - "freertos_kernel/portable/CCS/ARM_Cortex-R4/portASM.asm": "e1cf3f1ff687d670c576373f7db6257135c96ba3f43253fa2852c2308302d251", - "freertos_kernel/portable/CCS/ARM_Cortex-R4/portmacro.h": "4cba98776c5fbe27c32d700a51c955a464a67d5a1453e7b12b40548e27500436", - "freertos_kernel/portable/CCS/MSP430X/data_model.h": "4379bf2ce155a0df68d20a76c7ba2e49a8263dbc7db6f3ea103026993c198df5", - "freertos_kernel/portable/CCS/MSP430X/port.c": "41ba85141315c5a1aca42bbd00a0a688baaa613c3d99e20d08b100c203504770", - "freertos_kernel/portable/CCS/MSP430X/portext.asm": "39f2e81ab2cb9f152e6714742d042e19df49a6b941b7d969cdcd150a45e324be", - "freertos_kernel/portable/CCS/MSP430X/portmacro.h": "5a86852caca3e3a84cecf73bd94e3751a63b4aa7494b241712e00476beccb1b9", - "freertos_kernel/portable/CodeWarrior/ColdFire_V1/port.c": "a816a3697688dbb8dc1b1f6afc2b88a83144ff00954838637f918d98b0d48f55", - "freertos_kernel/portable/CodeWarrior/ColdFire_V1/portasm.S": "925115791b26cf10238f8354780bd789be2614038f02d1d0fa18420723a892c5", - "freertos_kernel/portable/CodeWarrior/ColdFire_V1/portmacro.h": "cc89257508946c139be0c1999ccd9b372990ecc00af524bd31febde8785b07fe", - "freertos_kernel/portable/CodeWarrior/ColdFire_V2/port.c": "f29a985c10460f808e2d4c5af79764d16cffb3effd52156abf092bce2298c23e", - "freertos_kernel/portable/CodeWarrior/ColdFire_V2/portasm.S": "24de526c381e7e6674681ac94198db35ea77dc2d1bd1111828811a56349066e8", - "freertos_kernel/portable/CodeWarrior/ColdFire_V2/portmacro.h": "47b90ec02ecaa74b5d214c71ba26339a936036ba67886e0ec32b39cbc4029eb0", - "freertos_kernel/portable/CodeWarrior/HCS12/port.c": "e31bffd2634633f491ac01cd1a524c3e45fe3349bceb9ad317d38808e92c3fd9", - "freertos_kernel/portable/CodeWarrior/HCS12/portmacro.h": "115b2e6c897fc59784fdc31fa816c8645ce190c1516e7a51b2d933f9d0335628", - "freertos_kernel/portable/Common/mpu_wrappers.c": "079d6eaadef34584dd09a7ba69bab0ba3eaafb8d7949f83813f83adef4a56f64", - "freertos_kernel/portable/GCC/ARM7_AT91FR40008/port.c": "87b1ec4b83ea67895bf68b03d566b48705003144ba09e755f1ee7658e465acfa", - "freertos_kernel/portable/GCC/ARM7_AT91FR40008/portISR.c": "6a731ae7b664533ddeeb511a99777a09377d2ebeb68fdfd5182187a531bd6219", - "freertos_kernel/portable/GCC/ARM7_AT91FR40008/portmacro.h": "9ca675c58fb8cdd09fad52e9460dd7187080688de3e26365fc4b06b4f38139bf", - "freertos_kernel/portable/GCC/ARM7_AT91SAM7S/AT91SAM7X256.h": "f3a274db2d037202effc40451f7c6679ce51fd2959a2a69780d449470e8ebda4", - "freertos_kernel/portable/GCC/ARM7_AT91SAM7S/ioat91sam7x256.h": "cfa4b00ec025e4678791d72f66beeaf82df64a58b17447bef3ab0e2e418d4978", - "freertos_kernel/portable/GCC/ARM7_AT91SAM7S/lib_AT91SAM7X256.c": "054a9c450cdddd0c60f7996d10e86ba2111f0ceb4fe6b612b25d6f7ddc11a5b7", - "freertos_kernel/portable/GCC/ARM7_AT91SAM7S/lib_AT91SAM7X256.h": "4e2476e3b3e0d28bcdd7ecbabaef96808a47835d5070dea1b1104635724fe6ac", - "freertos_kernel/portable/GCC/ARM7_AT91SAM7S/port.c": "941abb185d12f9de02536949c9227619f2e2ee838273cb3de0e8df49a17a68a9", - "freertos_kernel/portable/GCC/ARM7_AT91SAM7S/portISR.c": "2b80170bf074f3eb53cd73bb41d3f945e37de1003314c330b11321d8a94545d1", - "freertos_kernel/portable/GCC/ARM7_AT91SAM7S/portmacro.h": "b4eef658470ce9057d7e4cf84eeacbec9a891d165a31b5517d965c97e97cfb95", - "freertos_kernel/portable/GCC/ARM7_LPC2000/port.c": "dcf77b08d9fbcc00a0be524c265b638e5a3c9c2a3d16ffc254eb00287472c340", - "freertos_kernel/portable/GCC/ARM7_LPC2000/portISR.c": "690e56d182931b9b950d67a5752a74a0d6ac91cf7b010d2e406d15aac6e32d3e", - "freertos_kernel/portable/GCC/ARM7_LPC2000/portmacro.h": "19521af3436b295ea47658e803d51fa67e0359dc87c7763d06a52ef8552cd60f", - "freertos_kernel/portable/GCC/ARM7_LPC23xx/port.c": "a0d49cd2c3028bc53cd35b3b662cc9cdf6aae2376968acf4253317cab643c8b8", - "freertos_kernel/portable/GCC/ARM7_LPC23xx/portISR.c": "899052dab47c7608279e136d94ab4ae3e3e57d4030ec5b6959b3476c327613a1", - "freertos_kernel/portable/GCC/ARM7_LPC23xx/portmacro.h": "514639b82d6cc059867c7a79e9f43d1859af774a9844c621f0352352932bed53", - "freertos_kernel/portable/GCC/ARM_CA53_64_BIT/port.c": "706c3da3cbabbddea8acf0cb3b905ddbc98d5807be0a7208b44a88ef06cd75b7", - "freertos_kernel/portable/GCC/ARM_CA53_64_BIT/portASM.S": "30fbb16f34e11505c92bebea3f5589d9247c7d1fdddf1799003a484497fbacfb", - "freertos_kernel/portable/GCC/ARM_CA53_64_BIT/portmacro.h": "504dbf2a15447b74247a9ca3b335d0e372e294e70dbf3242fb4a6ba74a5d350d", - "freertos_kernel/portable/GCC/ARM_CA9/port.c": "87ab054cefb36c8cb01c6d5166d75f51a0f33a700fb90c14f8f489e16f065303", - "freertos_kernel/portable/GCC/ARM_CA9/portASM.S": "871bd240456057a388bce802d5bafc7eb6b55c8f2ebde9cc5f0bc378dc1dfa9b", - "freertos_kernel/portable/GCC/ARM_CA9/portmacro.h": "73bb83ab8b3d2b19369d87eb8a69fb040cfb06113d3b180aa96510c3d57f810a", - "freertos_kernel/portable/GCC/ARM_CM0/port.c": "92995b0b3a40b264181bd9d3f930666c6a85f6b854764ddf00b7d0134f26ad00", - "freertos_kernel/portable/GCC/ARM_CM0/portmacro.h": "a3e56406be77b2c5d68143ba4e9d488d69b9f1ddfcb7c6f30edf078cb2789e40", - "freertos_kernel/portable/GCC/ARM_CM23/non_secure/port.c": "f564963bdb26c2733528e474ca0c1ef7547c1d700c92943d0248dbe58bc67a72", - "freertos_kernel/portable/GCC/ARM_CM23/non_secure/portasm.c": "5b1e60a32388bd0e564a1fb4d6f2a62787511823fe88496d9cb2159c8b1794ed", - "freertos_kernel/portable/GCC/ARM_CM23/non_secure/portasm.h": "ca3ceed67f82e3d66da035078959714c43397abfd1e77d0fa4e8d30bd4f02da6", - "freertos_kernel/portable/GCC/ARM_CM23/non_secure/portmacro.h": "6812b0f9fbf3ef18e80f3322fec6f34482488bd79d0654f8ca899da941129b02", - "freertos_kernel/portable/GCC/ARM_CM23/secure/secure_context.c": "7943ce53070eca8060d91beaa5639cd707437ad212e48eacdcd4c5a0a2ab7248", - "freertos_kernel/portable/GCC/ARM_CM23/secure/secure_context.h": "2bb41a95f1bd1643943b8e8fe85bc47faa2dabb53b85682925bf90cf26c47f9d", - "freertos_kernel/portable/GCC/ARM_CM23/secure/secure_context_port.c": "e3d2c9965e634804294e8373039cfe49db78ae7cf431d074d363f603e3e5c0be", - "freertos_kernel/portable/GCC/ARM_CM23/secure/secure_heap.c": "54bcf2164dd0652183cf58d0e4eb1ff325e9f114dd7b008a51b983c672188ec3", - "freertos_kernel/portable/GCC/ARM_CM23/secure/secure_heap.h": "966d538a419dce23c7855870a02f91bf3adc018a108b791705b69a6cf08514e6", - "freertos_kernel/portable/GCC/ARM_CM23/secure/secure_init.c": "4f1e26736d6b2e59c67b560565f691ebaf2d28cd241d0a385d3a981f9f3a42de", - "freertos_kernel/portable/GCC/ARM_CM23/secure/secure_init.h": "ce593b2b690c85871375c156d059042445cc043777efd2802d31007ab87d210e", - "freertos_kernel/portable/GCC/ARM_CM23/secure/secure_port_macros.h": "e9a5753528ea62296e0633cc1121df015ab48e645ac04369722a56e608078ce9", - "freertos_kernel/portable/GCC/ARM_CM23_NTZ/non_secure/port.c": "ba5cf2a45f113ca3b27f8f36abb8209af1cf5e33552ca8dfe076a2706bfdd337", - "freertos_kernel/portable/GCC/ARM_CM23_NTZ/non_secure/portasm.c": "dde49ced7de20b4d13d065ff4cb7161ac3ca4feca29486f4946a98bfab8d25dc", - "freertos_kernel/portable/GCC/ARM_CM23_NTZ/non_secure/portasm.h": "ca3ceed67f82e3d66da035078959714c43397abfd1e77d0fa4e8d30bd4f02da6", - "freertos_kernel/portable/GCC/ARM_CM23_NTZ/non_secure/portmacro.h": "6812b0f9fbf3ef18e80f3322fec6f34482488bd79d0654f8ca899da941129b02", - "freertos_kernel/portable/GCC/ARM_CM3/port.c": "7793ef2ade8733e6df6ec4f227a70cdbcca9af96f9483fb5228ed2979d42d04e", - "freertos_kernel/portable/GCC/ARM_CM3/portmacro.h": "ece2256bfd7550a32defda90b122c00573e4ca13d82070f72336209643f20c67", - "freertos_kernel/portable/GCC/ARM_CM33/non_secure/port.c": "1d4463f72117cd8af6948cc3dab7c946d3f62d8d27c2d68047cfe2514314dd68", - "freertos_kernel/portable/GCC/ARM_CM33/non_secure/portasm.c": "3b541eee7340b4b65241367b7437bd52787fb32869c848dde46959caff2bac26", - "freertos_kernel/portable/GCC/ARM_CM33/non_secure/portasm.h": "ca3ceed67f82e3d66da035078959714c43397abfd1e77d0fa4e8d30bd4f02da6", - "freertos_kernel/portable/GCC/ARM_CM33/non_secure/portmacro.h": "c101e361220d8042cce538b894e2a07884135007bb7dea554759035c33c33a36", - "freertos_kernel/portable/GCC/ARM_CM33/secure/secure_context.c": "7943ce53070eca8060d91beaa5639cd707437ad212e48eacdcd4c5a0a2ab7248", - "freertos_kernel/portable/GCC/ARM_CM33/secure/secure_context.h": "2bb41a95f1bd1643943b8e8fe85bc47faa2dabb53b85682925bf90cf26c47f9d", - "freertos_kernel/portable/GCC/ARM_CM33/secure/secure_context_port.c": "f3d402dc906f5a02c09ab8fa0e2b2b160c31c3648ecd5ddcf0e041b80fe2e1f5", - "freertos_kernel/portable/GCC/ARM_CM33/secure/secure_heap.c": "54bcf2164dd0652183cf58d0e4eb1ff325e9f114dd7b008a51b983c672188ec3", - "freertos_kernel/portable/GCC/ARM_CM33/secure/secure_heap.h": "966d538a419dce23c7855870a02f91bf3adc018a108b791705b69a6cf08514e6", - "freertos_kernel/portable/GCC/ARM_CM33/secure/secure_init.c": "4f1e26736d6b2e59c67b560565f691ebaf2d28cd241d0a385d3a981f9f3a42de", - "freertos_kernel/portable/GCC/ARM_CM33/secure/secure_init.h": "ce593b2b690c85871375c156d059042445cc043777efd2802d31007ab87d210e", - "freertos_kernel/portable/GCC/ARM_CM33/secure/secure_port_macros.h": "e9a5753528ea62296e0633cc1121df015ab48e645ac04369722a56e608078ce9", - "freertos_kernel/portable/GCC/ARM_CM33_NTZ/non_secure/port.c": "cd70d2c5e5c9dcc619bafd40b514b1f31db74e0e2e414afdfba1f0bee677c7c9", - "freertos_kernel/portable/GCC/ARM_CM33_NTZ/non_secure/portasm.c": "c048a5a6c1bb1829c843a4b8e48208772347c732f0ef3188ad2060b242c2ee44", - "freertos_kernel/portable/GCC/ARM_CM33_NTZ/non_secure/portasm.h": "ca3ceed67f82e3d66da035078959714c43397abfd1e77d0fa4e8d30bd4f02da6", - "freertos_kernel/portable/GCC/ARM_CM33_NTZ/non_secure/portmacro.h": "c101e361220d8042cce538b894e2a07884135007bb7dea554759035c33c33a36", - "freertos_kernel/portable/GCC/ARM_CM3_MPU/port.c": "25517474a4d5124042a7c6e435bf67f89eb4133febd89ae01f08c9b404e1f96d", - "freertos_kernel/portable/GCC/ARM_CM3_MPU/portmacro.h": "687608f08007b3373cd2efdc3567e778e04fadd459d23ab27fd6a1fc49d96bbe", - "freertos_kernel/portable/GCC/ARM_CM4F/port.c": "f2bc8c291a55d8357431cc7b5514e877e5243c1027586a51c2858b67ef7060f2", - "freertos_kernel/portable/GCC/ARM_CM4F/portmacro.h": "8089268eb59e36ab32c907c2b1d84833ee2a7655103dc06dd7fab48d421dd92f", - "freertos_kernel/portable/GCC/ARM_CM4_MPU/port.c": "11e55b5b0948d34b730094c5deae31467016453139414641ac063b43518c20a9", - "freertos_kernel/portable/GCC/ARM_CM4_MPU/portmacro.h": "85d77484deb8311b81195e2bfce33e66206aa59dd3e5a05e8260f4643c2042f7", - "freertos_kernel/portable/GCC/ARM_CM7/ReadMe.txt": "4061394a651eb7e4624abad4ec719148e153bd8eae666d0530319d83f9b39aa7", - "freertos_kernel/portable/GCC/ARM_CM7/r0p1/port.c": "c802960033bf8f34348ff6698a83fdc97c6e985b24cea092fc2301a275807e8c", - "freertos_kernel/portable/GCC/ARM_CM7/r0p1/portmacro.h": "7b11ca2bc021cf39c5ef0c55260886665b60d0615373ed1e37fb287c383a72da", - "freertos_kernel/portable/GCC/ARM_CR5/port.c": "c5a983a04a18945ecd2c7b0f53fbf9c66b41c71274c323a12dcb0678f5699844", - "freertos_kernel/portable/GCC/ARM_CR5/portASM.S": "6df2f65a2f3f9538564dacec4c0e3313a3917a13fb72d8a127b91de8af9d6483", - "freertos_kernel/portable/GCC/ARM_CR5/portmacro.h": "1d722786bea1c0fbcc9794069eb17cb069d6d184f4cb52635090fd80017a6eb8", - "freertos_kernel/portable/GCC/ARM_CRx_No_GIC/port.c": "d1be2fa20efb74189c920b98ecf3dcd858e6fa63a8aa40bc187df1b8e6ecb7d2", - "freertos_kernel/portable/GCC/ARM_CRx_No_GIC/portASM.S": "e8392c994282f0042bf9d16984151685ade74751db68a0b70b8fb4680061f9e6", - "freertos_kernel/portable/GCC/ARM_CRx_No_GIC/portmacro.h": "8c4ec3b81d4ba58014a1599e24cfb8dc729d67fbb670d2d2dd1c6f3a93133226", - "freertos_kernel/portable/GCC/ATMega323/port.c": "3633b3ed13d91c831b5333359689d2599bb02add609a7a7cb4e9adb12dffc2c0", - "freertos_kernel/portable/GCC/ATMega323/portmacro.h": "59c55d0c4c7d2dbbee266a2e17400fd55f9c01d9e91f277396f133b2ed5c4794", - "freertos_kernel/portable/GCC/AVR32_UC3/exception.S": "8f3d945d526ff31d6e4303bd6b2bb55c85e2c2498c08194f95740e516c2c433d", - "freertos_kernel/portable/GCC/AVR32_UC3/port.c": "450773207dcc4127572bc8715eb5bf208d6606721b05e211f80a8845045836e3", - "freertos_kernel/portable/GCC/AVR32_UC3/portmacro.h": "b17a1eeda12864e656a630dcce130968613df2a660bc2747ddcf0fcc0744f38c", - "freertos_kernel/portable/GCC/AVR_AVRDx/port.c": "07d94f52710c44e99ba596c494997eb5d2477114cc3e5cfc367b545b76cb8090", - "freertos_kernel/portable/GCC/AVR_AVRDx/porthardware.h": "3b64b4d72e6f95c048b6822a92ae00cb600ce9d9e32bc72abbe32889cf822028", - "freertos_kernel/portable/GCC/AVR_AVRDx/portmacro.h": "a3a174262c97fc02d9b36955f338068faa161fca93a0bdb4ee1b8fb02ba6ff8a", - "freertos_kernel/portable/GCC/AVR_Mega0/port.c": "8196169776ccb527151620c0c2d866ce2c6d17bea9b9804d7a9a14d6a0e4f984", - "freertos_kernel/portable/GCC/AVR_Mega0/porthardware.h": "d267a6b2518f4ba3dcf211a592cc293490fff1b85cc7168db75ffdde129c0510", - "freertos_kernel/portable/GCC/AVR_Mega0/portmacro.h": "6ef9c2fd0acd927ab81993f6c5d8c9ad8d39a091d146e67eebb1a057b48b954f", - "freertos_kernel/portable/GCC/CORTUS_APS3/port.c": "66d14f28e24596dc884754ea5a967555f7f67b2c7e2cfcd9e53c95153e24d3da", - "freertos_kernel/portable/GCC/CORTUS_APS3/portmacro.h": "ff856e0df26a2f2deb8f9486f3febfb2004326f44256f6fbdf12ab662aaef9b5", - "freertos_kernel/portable/GCC/ColdFire_V2/port.c": "3caeae4a7b7f7bde11d39d6be26661d21e96c3eb7bb663962dcb1afd68bd4fe8", - "freertos_kernel/portable/GCC/ColdFire_V2/portasm.S": "1259af92433a6ca95c565fd7267ce8702977abacd393bbb9830ebf685f96243a", - "freertos_kernel/portable/GCC/ColdFire_V2/portmacro.h": "fe11a9562b68666783b619a35221aeb98bf2bcc585341c5fb3c02dbabeacfceb", - "freertos_kernel/portable/GCC/H8S2329/port.c": "8accf58ec857aee1efa5b7c2aaf5df212211e386942a7e2c34d037ae4398d59e", - "freertos_kernel/portable/GCC/H8S2329/portmacro.h": "229c7bf7bd487cb4aec03e031387128d8e49e14ab69942537bdb24eb8ddb391c", - "freertos_kernel/portable/GCC/HCS12/port.c": "701207bd63a531c4d53791e622bd33124fdca56413900501f14f742c7b1f1de1", - "freertos_kernel/portable/GCC/HCS12/portmacro.h": "d6ec0a5204c5500a6755df01b955c762ea025b127cbf12b7c6f8db8549b320be", - "freertos_kernel/portable/GCC/IA32_flat/ISR_Support.h": "ed35d0e82bc123d378765da15d5d96ec9607fd8642a2041da3e737a44fdd5fb6", - "freertos_kernel/portable/GCC/IA32_flat/port.c": "37a2626f94c6ebad2201fe96c1c3fb0914e519640d5889e954f20bb9753b8e12", - "freertos_kernel/portable/GCC/IA32_flat/portASM.S": "fe8918b6d290fd2e121caa9b6a66800ee7219536c803a41373fd011cb1aef938", - "freertos_kernel/portable/GCC/IA32_flat/portmacro.h": "5fb1a258991e8069ef9d994ee090b429073019d83639e7a583bcb82820462fa0", - "freertos_kernel/portable/GCC/MCF5235/port.c": "c05e7609e30ce09e89fd372609361967ca7cf0a13140d48a6f3c21b4b79463c4", - "freertos_kernel/portable/GCC/MCF5235/portmacro.h": "69aa3ee2d7123a25dc0e3ad529bf5df24f5be379a7c7ad16ff454a84c93b4ee2", - "freertos_kernel/portable/GCC/MSP430F449/port.c": "82b855ae0086c13d57765d47140f42296ff85cf4a0715719f7a6ea66f9b6947b", - "freertos_kernel/portable/GCC/MSP430F449/portmacro.h": "e69a6c6c2afd9cbed3ece372500a10ec6fbe7ae548ae855dc0b6e7fa882ee761", - "freertos_kernel/portable/GCC/MicroBlaze/port.c": "8c2279ce114a258c70d90a51cc7911d3c1233bff4cd5f25c866ce4c141238d1c", - "freertos_kernel/portable/GCC/MicroBlaze/portasm.s": "cc1fed684ba895af0b9b1e0c9743fed11aba4b4e0251361c8aa0952b45bc8b16", - "freertos_kernel/portable/GCC/MicroBlaze/portmacro.h": "a7adc7103bf53929bc4644fc1e6100757b7956ea5e409a245acced5bd3cd2b44", - "freertos_kernel/portable/GCC/MicroBlazeV8/port.c": "cc439fbbc5457026f1f84a9163ecb9655ab1b70f10ea257628f3ed9f85efb2ba", - "freertos_kernel/portable/GCC/MicroBlazeV8/port_exceptions.c": "61a9a7af514b64eafacc3b4beff985c32aa1d49a6b4c94690d7b69b47aea1605", - "freertos_kernel/portable/GCC/MicroBlazeV8/portasm.S": "1e612a85ae641d4107ed95511726f596fc9d2f23ae0a935e95d8c8e06d80aa50", - "freertos_kernel/portable/GCC/MicroBlazeV8/portmacro.h": "760f4dd9ab64baa463fb0f791c748f4de113f17ec5211323c7ef7d378b15594c", - "freertos_kernel/portable/GCC/MicroBlazeV9/port.c": "847e157e8eed34c3504e3f3cdc3bddf573fde56d06aa4f5851d6767e5c872865", - "freertos_kernel/portable/GCC/MicroBlazeV9/port_exceptions.c": "61a9a7af514b64eafacc3b4beff985c32aa1d49a6b4c94690d7b69b47aea1605", - "freertos_kernel/portable/GCC/MicroBlazeV9/portasm.S": "1e612a85ae641d4107ed95511726f596fc9d2f23ae0a935e95d8c8e06d80aa50", - "freertos_kernel/portable/GCC/MicroBlazeV9/portmacro.h": "760f4dd9ab64baa463fb0f791c748f4de113f17ec5211323c7ef7d378b15594c", - "freertos_kernel/portable/GCC/NiosII/port.c": "5d3e1971e26541280605b2c4eb6b577a91743281b3c915f4aff7db3dee1042e0", - "freertos_kernel/portable/GCC/NiosII/port_asm.S": "3d423d27ff6cc155dccbc5db2ba8b487e3ef18e92d14f31079fffb05bbd73975", - "freertos_kernel/portable/GCC/NiosII/portmacro.h": "c0f9bfdaa9d6b66d93ef9a12eaf712e7a17fbc61d3eb7ee6308a7d1d2c8bdb53", - "freertos_kernel/portable/GCC/PPC405_Xilinx/FPU_Macros.h": "be22f1f109c3355301a03b0184c343458565cdec603d9b0e385229526a9ea96d", - "freertos_kernel/portable/GCC/PPC405_Xilinx/port.c": "74e6591ecc964fa38bcdfac4ae65a4fb0ef4462692dd230912c8f31cf9c61cf5", - "freertos_kernel/portable/GCC/PPC405_Xilinx/portasm.S": "c90ea7372c0492db6d559387e7f8b8a9caf406fcc6d9d48e54be0f60d0913bcb", - "freertos_kernel/portable/GCC/PPC405_Xilinx/portmacro.h": "3d899cf04983841336173955fcf5be87991020b914146d120a1d2c255d3bc1cf", - "freertos_kernel/portable/GCC/PPC440_Xilinx/FPU_Macros.h": "be22f1f109c3355301a03b0184c343458565cdec603d9b0e385229526a9ea96d", - "freertos_kernel/portable/GCC/PPC440_Xilinx/port.c": "ca2736bae9d328533c336005d5a02fa7688e2b3e4b9de72e1b4d59cc615bf2f5", - "freertos_kernel/portable/GCC/PPC440_Xilinx/portasm.S": "c90ea7372c0492db6d559387e7f8b8a9caf406fcc6d9d48e54be0f60d0913bcb", - "freertos_kernel/portable/GCC/PPC440_Xilinx/portmacro.h": "3d899cf04983841336173955fcf5be87991020b914146d120a1d2c255d3bc1cf", - "freertos_kernel/portable/GCC/RISC-V/Documentation.url": "03b58eac9262370ca618c78e81f36deca511ab3ff9142d719bae84afd9c9e865", - "freertos_kernel/portable/GCC/RISC-V/chip_specific_extensions/Pulpino_Vega_RV32M1RM/freertos_risc_v_chip_specific_extensions.h": "292f0bfef370cd3de0ed168806631a4a2f09142b98c30eaf945f0d4a3aacdf36", - "freertos_kernel/portable/GCC/RISC-V/chip_specific_extensions/RV32I_CLINT_no_extensions/freertos_risc_v_chip_specific_extensions.h": "9166936c60cfaa3100599d90749310a4c55c1917641dc871b7a04a605514b985", - "freertos_kernel/portable/GCC/RISC-V/chip_specific_extensions/readme.txt": "9df008f8587b6faaaa48ef37ce9e38f89639290d636c06f5eefb09848ac318d1", - "freertos_kernel/portable/GCC/RISC-V/port.c": "db01b279f64f194cecdae6e8c21623bc926207ef916e1ee5b9c6a256ef293496", - "freertos_kernel/portable/GCC/RISC-V/portASM.S": "478247b226cfc3b3810f1ff128f294f9d0d48d06171a7628b8924c2fbc1cbb4f", - "freertos_kernel/portable/GCC/RISC-V/portmacro.h": "15187808935bfd2b6f2b63acd6e032779fd076c8474f30899960ca7eb90dcd47", - "freertos_kernel/portable/GCC/RISC-V/readme.txt": "9df008f8587b6faaaa48ef37ce9e38f89639290d636c06f5eefb09848ac318d1", - "freertos_kernel/portable/GCC/RL78/isr_support.h": "e818dd39c7ac371ba27207a5d7115267d3495eaa7deddba83b64d5e694845a9a", - "freertos_kernel/portable/GCC/RL78/port.c": "2e6aa4036211a247dc567f3c84f68069079cc605ac47987152c32d86d828daee", - "freertos_kernel/portable/GCC/RL78/portasm.S": "a7860c1ea3b8bba936ff5dc813006790ce40a707d7f3b02d65da8e9d01e5a107", - "freertos_kernel/portable/GCC/RL78/portmacro.h": "b2fd1d923bd5f6fadf872e713f2a7317a1fb18c07fa66433dbe789135d011c8e", - "freertos_kernel/portable/GCC/RX100/port.c": "9f00968b7a99decf21d8485284edfb91d0e28d4860492fd9748f65b09e2e2aa7", - "freertos_kernel/portable/GCC/RX100/portmacro.h": "5ebba1ed254fea861323e76e30236e801f721f763a32fcb016da9abe648ceee6", - "freertos_kernel/portable/GCC/RX100/readme.txt": "d6ea169fd33ff4a4795bbcce927793fbe9177e1788af89cc6a705d64a7106e8b", - "freertos_kernel/portable/GCC/RX200/port.c": "859c00c0a7bda428a57beaac7dcc57cf5fbb853c02e432314f03fd39dd6da469", - "freertos_kernel/portable/GCC/RX200/portmacro.h": "00bbc2b4b30d79c78a3af490a1b92e2461a36d731f220c571a5d172df3a3ce21", - "freertos_kernel/portable/GCC/RX600/port.c": "01e83cab090a3589102ee12c69476d7df6e84390e181a7d10c46eb22df4b933b", - "freertos_kernel/portable/GCC/RX600/portmacro.h": "c7d88615a1bab1813a82919523c40c8cdc0a3c09d24b0c150c28906e4a89764b", - "freertos_kernel/portable/GCC/RX600/readme.txt": "d6ea169fd33ff4a4795bbcce927793fbe9177e1788af89cc6a705d64a7106e8b", - "freertos_kernel/portable/GCC/RX600v2/port.c": "2d71e306ff19e399a0c9e193aa88deba20b58bb979cca912d063d059cfaf9ef7", - "freertos_kernel/portable/GCC/RX600v2/portmacro.h": "c7d88615a1bab1813a82919523c40c8cdc0a3c09d24b0c150c28906e4a89764b", - "freertos_kernel/portable/GCC/RX600v2/readme.txt": "d6ea169fd33ff4a4795bbcce927793fbe9177e1788af89cc6a705d64a7106e8b", - "freertos_kernel/portable/GCC/RX700v3_DPFPU/port.c": "192047efa55b4bcccec2c1ea7e90fa0070a364d1c6b1d460fd4a65dbe448eadc", - "freertos_kernel/portable/GCC/RX700v3_DPFPU/portmacro.h": "82872dc32a0515792a515fd27971e9802067d5246a3c35c73fd1bfc8d1e383cc", - "freertos_kernel/portable/GCC/RX700v3_DPFPU/readme.txt": "d6ea169fd33ff4a4795bbcce927793fbe9177e1788af89cc6a705d64a7106e8b", - "freertos_kernel/portable/GCC/STR75x/port.c": "10fd21848d81708b08278eac3840e5bef537276355655d13e2c0cfc293b39033", - "freertos_kernel/portable/GCC/STR75x/portISR.c": "62121cc706a6b41a1bccb6d5119a215a8be9e00f40eb6284e8b0d2d45de3ab77", - "freertos_kernel/portable/GCC/STR75x/portmacro.h": "60d4a5d94734a5d12927313f2507894754bbe48afaf9963f338bffc9a22f1799", - "freertos_kernel/portable/GCC/TriCore_1782/port.c": "c12018e7a130c97579b05368204edd6f7d232ea893bbb35b875314c35f87d05e", - "freertos_kernel/portable/GCC/TriCore_1782/portmacro.h": "fc7b0aba6494df8964e2ebbb0665e84de15efc8645c43dfb797876ae9479c5e2", - "freertos_kernel/portable/GCC/TriCore_1782/porttrap.c": "6352e6e78bcb3fbf1dd58326a8b9edd9ca29115b2987479de0b20372bfb159e0", - "freertos_kernel/portable/IAR/78K0R/ISR_Support.h": "33345e9a3bf2865c1077405dbc5e7e077edc73c4c36ab2d4fc32934213968f3c", - "freertos_kernel/portable/IAR/78K0R/port.c": "62aa6abc54f531570867e9d1bd01f98ef90f618ba02d8b5dbb7a134c13791840", - "freertos_kernel/portable/IAR/78K0R/portasm.s26": "ce4664d1d019083eea4af873904e645d26556fd38a4b6f26bababe290b89e40e", - "freertos_kernel/portable/IAR/78K0R/portmacro.h": "2b0162d6b6c3f69a024de30a59866cdfe322234f7dd779cfb36481f0f504aa58", - "freertos_kernel/portable/IAR/ARM_CA5_No_GIC/port.c": "726672928f53c872f1fba4947df0479f3402988762198bccee138bb625fe0960", - "freertos_kernel/portable/IAR/ARM_CA5_No_GIC/portASM.h": "a2dd9f22eec784394599074373b3bba6c352fbdb3a342e9bda918bfccea29949", - "freertos_kernel/portable/IAR/ARM_CA5_No_GIC/portASM.s": "54f862fa94a6bb309b6d936d10cb5cd2e243b04a6d319d99a49df20fc7029e9c", - "freertos_kernel/portable/IAR/ARM_CA5_No_GIC/portmacro.h": "1020093c0f18a045c70e5e8424db89c03a10b5d68896c611e9923331c0c55412", - "freertos_kernel/portable/IAR/ARM_CA9/port.c": "23d2ae9d9e63646a24b9077c0b165b5a4cda8389eadd1a6f82652bb92317a85b", - "freertos_kernel/portable/IAR/ARM_CA9/portASM.h": "d7caea9baab3e4d7f1440079cf00f647f6546935aae390844057ea5262f19d93", - "freertos_kernel/portable/IAR/ARM_CA9/portASM.s": "d33a025a856cfea029b90bb647b678ce929a0d43e9d8d6576d9be391ef23cb67", - "freertos_kernel/portable/IAR/ARM_CA9/portmacro.h": "4f8d459715527913cae7898a9dcece73732d00bab37656b9236f087cdc3f8353", - "freertos_kernel/portable/IAR/ARM_CM0/port.c": "c8abf4493d3927d0c989e3937176a4ac2d3a9e34354d04f92ca6204ab3bfc115", - "freertos_kernel/portable/IAR/ARM_CM0/portasm.s": "18d3f190c5cb19c02df278cb640707947dc637102619f0211a63c9803e1dbb0f", - "freertos_kernel/portable/IAR/ARM_CM0/portmacro.h": "f14e707e0e2abd3bf9c320dfa272c7fcbebffd67ffd072f44aba7205917dc168", - "freertos_kernel/portable/IAR/ARM_CM23/non_secure/port.c": "1d4463f72117cd8af6948cc3dab7c946d3f62d8d27c2d68047cfe2514314dd68", - "freertos_kernel/portable/IAR/ARM_CM23/non_secure/portasm.h": "ca3ceed67f82e3d66da035078959714c43397abfd1e77d0fa4e8d30bd4f02da6", - "freertos_kernel/portable/IAR/ARM_CM23/non_secure/portasm.s": "2ac3a2ce4b166a6143c46b202ec6a449c058a1fee503b58f9acd5e785c7606ce", - "freertos_kernel/portable/IAR/ARM_CM23/non_secure/portmacro.h": "dd9c3f9a38d432f13d9ed2cb33ade69ca823062ffa8d9128473f56faa4e41d98", - "freertos_kernel/portable/IAR/ARM_CM23/secure/secure_context.c": "7943ce53070eca8060d91beaa5639cd707437ad212e48eacdcd4c5a0a2ab7248", - "freertos_kernel/portable/IAR/ARM_CM23/secure/secure_context.h": "2bb41a95f1bd1643943b8e8fe85bc47faa2dabb53b85682925bf90cf26c47f9d", - "freertos_kernel/portable/IAR/ARM_CM23/secure/secure_context_port.c": "48d5e08258bacc13c0a4679eb673be334c548a6aa433bbfb823fe2698093fa94", - "freertos_kernel/portable/IAR/ARM_CM23/secure/secure_context_port_asm.s": "18683a26371509e9d65d1be3b3d8d29e39f48b1a78cbeae5c8e897bb628f1cca", - "freertos_kernel/portable/IAR/ARM_CM23/secure/secure_heap.c": "54bcf2164dd0652183cf58d0e4eb1ff325e9f114dd7b008a51b983c672188ec3", - "freertos_kernel/portable/IAR/ARM_CM23/secure/secure_heap.h": "966d538a419dce23c7855870a02f91bf3adc018a108b791705b69a6cf08514e6", - "freertos_kernel/portable/IAR/ARM_CM23/secure/secure_init.c": "4f1e26736d6b2e59c67b560565f691ebaf2d28cd241d0a385d3a981f9f3a42de", - "freertos_kernel/portable/IAR/ARM_CM23/secure/secure_init.h": "ce593b2b690c85871375c156d059042445cc043777efd2802d31007ab87d210e", - "freertos_kernel/portable/IAR/ARM_CM23/secure/secure_port_macros.h": "e9a5753528ea62296e0633cc1121df015ab48e645ac04369722a56e608078ce9", - "freertos_kernel/portable/IAR/ARM_CM23_NTZ/non_secure/port.c": "1d4463f72117cd8af6948cc3dab7c946d3f62d8d27c2d68047cfe2514314dd68", - "freertos_kernel/portable/IAR/ARM_CM23_NTZ/non_secure/portasm.h": "ca3ceed67f82e3d66da035078959714c43397abfd1e77d0fa4e8d30bd4f02da6", - "freertos_kernel/portable/IAR/ARM_CM23_NTZ/non_secure/portasm.s": "a790b8ba5baf9252f3a17db84542170fcfff946cd7f01a0070845204fef1c8eb", - "freertos_kernel/portable/IAR/ARM_CM23_NTZ/non_secure/portmacro.h": "88bf43629dc4fc00e41af1bcb6d7e06e4fbbf26f069b4d771b633d7ed52c1994", - "freertos_kernel/portable/IAR/ARM_CM3/port.c": "e6003fa8f10e1a52594c0cac006326eb39045d4b60861324bab68213376b06ea", - "freertos_kernel/portable/IAR/ARM_CM3/portasm.s": "9b31b9b90b160e1a5972dcef0530ba4909b6ed2e2a086557e51ec510cc95f3e0", - "freertos_kernel/portable/IAR/ARM_CM3/portmacro.h": "de104b76cd55aefad35179a232737ea1eb3b0b810c1d286f984f6bc9d393a78e", - "freertos_kernel/portable/IAR/ARM_CM33/non_secure/port.c": "1d4463f72117cd8af6948cc3dab7c946d3f62d8d27c2d68047cfe2514314dd68", - "freertos_kernel/portable/IAR/ARM_CM33/non_secure/portasm.h": "ca3ceed67f82e3d66da035078959714c43397abfd1e77d0fa4e8d30bd4f02da6", - "freertos_kernel/portable/IAR/ARM_CM33/non_secure/portasm.s": "951e6f3a3ef09bb2bde77b6e3c20b78762939250daf9123cd00a8c3254a847d0", - "freertos_kernel/portable/IAR/ARM_CM33/non_secure/portmacro.h": "4b88d10017de817469888093b1a689ee6da7b33edb5e3006839b238a9bb88513", - "freertos_kernel/portable/IAR/ARM_CM33/secure/secure_context.c": "7943ce53070eca8060d91beaa5639cd707437ad212e48eacdcd4c5a0a2ab7248", - "freertos_kernel/portable/IAR/ARM_CM33/secure/secure_context.h": "2bb41a95f1bd1643943b8e8fe85bc47faa2dabb53b85682925bf90cf26c47f9d", - "freertos_kernel/portable/IAR/ARM_CM33/secure/secure_context_port.c": "48d5e08258bacc13c0a4679eb673be334c548a6aa433bbfb823fe2698093fa94", - "freertos_kernel/portable/IAR/ARM_CM33/secure/secure_context_port_asm.s": "d1bce7b173f724a7b0e97ffb2841ce19b15d0469bd49bbf9109db735629f844b", - "freertos_kernel/portable/IAR/ARM_CM33/secure/secure_heap.c": "54bcf2164dd0652183cf58d0e4eb1ff325e9f114dd7b008a51b983c672188ec3", - "freertos_kernel/portable/IAR/ARM_CM33/secure/secure_heap.h": "966d538a419dce23c7855870a02f91bf3adc018a108b791705b69a6cf08514e6", - "freertos_kernel/portable/IAR/ARM_CM33/secure/secure_init.c": "4f1e26736d6b2e59c67b560565f691ebaf2d28cd241d0a385d3a981f9f3a42de", - "freertos_kernel/portable/IAR/ARM_CM33/secure/secure_init.h": "ce593b2b690c85871375c156d059042445cc043777efd2802d31007ab87d210e", - "freertos_kernel/portable/IAR/ARM_CM33/secure/secure_port_macros.h": "e9a5753528ea62296e0633cc1121df015ab48e645ac04369722a56e608078ce9", - "freertos_kernel/portable/IAR/ARM_CM33_NTZ/non_secure/port.c": "1d4463f72117cd8af6948cc3dab7c946d3f62d8d27c2d68047cfe2514314dd68", - "freertos_kernel/portable/IAR/ARM_CM33_NTZ/non_secure/portasm.h": "ca3ceed67f82e3d66da035078959714c43397abfd1e77d0fa4e8d30bd4f02da6", - "freertos_kernel/portable/IAR/ARM_CM33_NTZ/non_secure/portasm.s": "b7cf4bc30a7be99813aa9c3490f51f2c1df2a9e4f3dc050036238b2a9690765d", - "freertos_kernel/portable/IAR/ARM_CM33_NTZ/non_secure/portmacro.h": "4b88d10017de817469888093b1a689ee6da7b33edb5e3006839b238a9bb88513", - "freertos_kernel/portable/IAR/ARM_CM4F/port.c": "eaebb3d1fea18d5b1412b0311d3142b7cbe5f3f0c378a0263de6dee19baca06b", - "freertos_kernel/portable/IAR/ARM_CM4F/portasm.s": "c2cb4c19b4b70451f49b3039fe216a8ff09852635feb7e5b6251553f26d3d5c1", - "freertos_kernel/portable/IAR/ARM_CM4F/portmacro.h": "70de7a35236baa99e3f9e44321b4921b5d9a09418e2bfcbe0d9404cfbbe29280", - "freertos_kernel/portable/IAR/ARM_CM4F_MPU/port.c": "97ebb798babf943181b8db9a4b104dc7e9c22bca75d8b3b86a08cce8c03b796a", - "freertos_kernel/portable/IAR/ARM_CM4F_MPU/portasm.s": "d45d83a6a2dd14e6eccf832d3248dabc6cf945190061a2533d5b2e2714d5f558", - "freertos_kernel/portable/IAR/ARM_CM4F_MPU/portmacro.h": "fdfbaabea3435ec9ed9cd578c87a49f9fa307c58c25933da76e5755eb6cf190b", - "freertos_kernel/portable/IAR/ARM_CM7/ReadMe.txt": "9991c375912b69f89d97fd3451459a4980f97787c6cb5c21d64e520bfb7c688e", - "freertos_kernel/portable/IAR/ARM_CM7/r0p1/port.c": "5728daa731db10de8b0f6514dd537d9cb6392656fefa964e90057e01a2577647", - "freertos_kernel/portable/IAR/ARM_CM7/r0p1/portasm.s": "dabfb6b88e5c4b263d681de025860c331eeb173624a4cd1227ee5e9c6f3f590c", - "freertos_kernel/portable/IAR/ARM_CM7/r0p1/portmacro.h": "14b90e50d8893160f9238bf704e299a0935a2e23535e9c79b8fd53a1375ecaf4", - "freertos_kernel/portable/IAR/ARM_CRx_No_GIC/port.c": "768989276d33283882c804bfc9d0b06fb2cd8847313ed94bf07f904930b1be0b", - "freertos_kernel/portable/IAR/ARM_CRx_No_GIC/portASM.s": "b451157f8867229eaeb4bd23ab1ea061845934716076ab5f94d2292942f05b45", - "freertos_kernel/portable/IAR/ARM_CRx_No_GIC/portmacro.h": "4b63939368c7256cf8f677c1f1e8f74a341ffc437b8462fe1178c015502f059b", - "freertos_kernel/portable/IAR/ATMega323/port.c": "a95ad2d5355f81cec2ea944e5889ce70840cee184a656661b14c2e2271d5f850", - "freertos_kernel/portable/IAR/ATMega323/portmacro.h": "8b6614db28af088dc13ff1f609f5a56f01277731e806971af71e841396ba10bb", - "freertos_kernel/portable/IAR/ATMega323/portmacro.s90": "deee80a4ee54773f471e821cc58d066e9fb9bf5cb8459cd167d3ba068dd7dadb", - "freertos_kernel/portable/IAR/AVR32_UC3/exception.s82": "b51ccec0ffabcfed5003f0c96a8124a2050c94a5d5dbfc0a0eb11e58d9ca0176", - "freertos_kernel/portable/IAR/AVR32_UC3/port.c": "2d84868e6d72b685867ce27266d4b4bbfbe60b1be263437913af6649bed57fac", - "freertos_kernel/portable/IAR/AVR32_UC3/portmacro.h": "6efe20b626bd3f3a91b8b15e3a681a9956206a5470deca80d8884c279d64aea9", - "freertos_kernel/portable/IAR/AVR32_UC3/read.c": "07b6384e325351be59fe01133c233180002e059fc4c084a2d8ece4f989c06aa8", - "freertos_kernel/portable/IAR/AVR32_UC3/write.c": "49735b1d2fa89c09f15859dcd26aa7e3899736df65a4f98770300de01243dacb", - "freertos_kernel/portable/IAR/AVR_AVRDx/port.c": "e46d2d4f471103e40a11a2ef2d5d17582ce09b541ed172612dc489fcc941be9c", - "freertos_kernel/portable/IAR/AVR_AVRDx/porthardware.h": "02a304f91a8b029872dc79719e33c9b6f6dde539ba3e7ef798804e9aa4a8ab25", - "freertos_kernel/portable/IAR/AVR_AVRDx/portmacro.h": "b98a8e8e5c1f26dc8652e3622337e8f37e10cadd4b56a8aca9fcb28b27b1c395", - "freertos_kernel/portable/IAR/AVR_AVRDx/portmacro.s90": "de80d5a92f39ce52191ebe8d187d6e6e7444c159ea3f94203d3cf5aab0f69997", - "freertos_kernel/portable/IAR/AVR_Mega0/port.c": "ce56eee46a0620c89203c1f575c1514efcbd8383e494384f3bde60beb7c7c158", - "freertos_kernel/portable/IAR/AVR_Mega0/porthardware.h": "2c2edbc3d4bc6a1d0b5c60df5c297d65fdd9053217795a423adf6bfc12803ed3", - "freertos_kernel/portable/IAR/AVR_Mega0/portmacro.h": "b98a8e8e5c1f26dc8652e3622337e8f37e10cadd4b56a8aca9fcb28b27b1c395", - "freertos_kernel/portable/IAR/AVR_Mega0/portmacro.s90": "f8e3444424ae3ec81cd0c32d4a866b85b3325d6cbf276e5543d766f756ed5760", - "freertos_kernel/portable/IAR/AtmelSAM7S64/AT91SAM7S64.h": "8f3f98a3f183dd173a22541819cf794565f6bd35d4db4b664a8f35f05fbf6063", - "freertos_kernel/portable/IAR/AtmelSAM7S64/AT91SAM7S64_inc.h": "1544c69c8783880a35cee8ffa24e3e65e289f596c03d8b9f35a31a3eb7b025f1", - "freertos_kernel/portable/IAR/AtmelSAM7S64/AT91SAM7X128.h": "ee7d97e30cfb971f74db814397bfef83f028e0c7e55c990438cfe33e6765c0dd", - "freertos_kernel/portable/IAR/AtmelSAM7S64/AT91SAM7X128_inc.h": "361996a9bed51f37cb9b0a2bda0e4544dc4e4cd44d75c5788e1074cfe17cd56e", - "freertos_kernel/portable/IAR/AtmelSAM7S64/AT91SAM7X256.h": "f49159a259b685e876d394efb010eb1d06cb0346118715f054e252725d981702", - "freertos_kernel/portable/IAR/AtmelSAM7S64/AT91SAM7X256_inc.h": "2c6ca0cd41436c8c5ecaaa461084cd1675a7e24d58c6ace888927fca5e262bc9", - "freertos_kernel/portable/IAR/AtmelSAM7S64/ISR_Support.h": "d99b80f6ebd4c76b65f23aa195ca66dae1673b783fe0300cb387ec45287d376b", - "freertos_kernel/portable/IAR/AtmelSAM7S64/lib_AT91SAM7S64.h": "46d53b158ebe5cffa94bc80c9d6b0fafb1790bb741c5be562775f630bdb55dbe", - "freertos_kernel/portable/IAR/AtmelSAM7S64/lib_AT91SAM7X128.h": "a1068f757db5c02d2725a76f4e2ba8cd79aa288be3ed5fc2804f0cde9f4a0169", - "freertos_kernel/portable/IAR/AtmelSAM7S64/lib_AT91SAM7X256.h": "2c4e3aef15483db5c6ec459c275b8ed06eb14e484484f1215139dba779b10a11", - "freertos_kernel/portable/IAR/AtmelSAM7S64/port.c": "99052ac9aaf68b9b3ffe039061d1b04366b10260c842393029d5355e463aef62", - "freertos_kernel/portable/IAR/AtmelSAM7S64/portasm.s79": "8278559af1632a3f0278b2dbcaadaf9e81feb04b583ee7cfdb58510bcb3deba7", - "freertos_kernel/portable/IAR/AtmelSAM7S64/portmacro.h": "08b5d86a7d0241ea38b2a525530acdf189d4a560a4f22d14aa3121150e9a334f", - "freertos_kernel/portable/IAR/AtmelSAM9XE/ISR_Support.h": "85dc8f5d2615969b89ffbf48c42ae3dce8145742dd7d8d3e886f91e3863ce7cb", - "freertos_kernel/portable/IAR/AtmelSAM9XE/port.c": "523f23d549dbd12d9d95a3a9141f642ebb3c30c1e9f0d1eea2d3454fb96cd185", - "freertos_kernel/portable/IAR/AtmelSAM9XE/portasm.s79": "1cb65e6f59c63aefb1e030a9a564ce76b9237ba542c2559f6cfe69aeffd47d42", - "freertos_kernel/portable/IAR/AtmelSAM9XE/portmacro.h": "3a2ab8f7bdbd2dde627d622018ce4fedcf0a00cbecfde8e805f98c797941db8c", - "freertos_kernel/portable/IAR/LPC2000/ISR_Support.h": "d99b80f6ebd4c76b65f23aa195ca66dae1673b783fe0300cb387ec45287d376b", - "freertos_kernel/portable/IAR/LPC2000/port.c": "03436ed2f91f967659a47ce635b4757ef2cae905f847ad1c6c0f2cb674ea21f5", - "freertos_kernel/portable/IAR/LPC2000/portasm.s79": "8d7f386ee60796dfae0b4820e12fc493257298cffd09545242259857ab3eb047", - "freertos_kernel/portable/IAR/LPC2000/portmacro.h": "0ca0c313f993471fde5c189c5d14b53229236225359de7d2fcce273eb7086998", - "freertos_kernel/portable/IAR/MSP430/port.c": "ce506fea18eb69ec2b7aeb2018c9f9e2572cf9d9e7de71ca3189495c8d5062ab", - "freertos_kernel/portable/IAR/MSP430/portasm.h": "2dcb89141409c4b704d5696c999634ab1d9c9275657a23a24b313f1b94998315", - "freertos_kernel/portable/IAR/MSP430/portext.s43": "989907542d6cc5319a4e30058a7fd10b1894c9a5d28d3b070e9b0bf7361aa6a1", - "freertos_kernel/portable/IAR/MSP430/portmacro.h": "6667fc72c1142771149624d0ad28de36bd0ab20111e47ea4b0002443996d7d77", - "freertos_kernel/portable/IAR/MSP430X/data_model.h": "dae4840ca9a6c1a35c571e4152016f8bd0488096fffd721b88f87a15215047b8", - "freertos_kernel/portable/IAR/MSP430X/port.c": "aa0681bc6eb9096f27699150d917b9f91d9363290d06ab5a0aa781142cafc8f1", - "freertos_kernel/portable/IAR/MSP430X/portext.s43": "7a878fa5ffe44644a1fca8382d5125a38fd3bfcc69b1cd7c1a9fac5b156b8940", - "freertos_kernel/portable/IAR/MSP430X/portmacro.h": "a5607ce6d0ce3dc9cecd29740e22fa8086eeaa920b9a444dec7234ca5264cbd0", - "freertos_kernel/portable/IAR/RISC-V/Documentation.url": "03b58eac9262370ca618c78e81f36deca511ab3ff9142d719bae84afd9c9e865", - "freertos_kernel/portable/IAR/RISC-V/chip_specific_extensions/RV32I_CLINT_no_extensions/freertos_risc_v_chip_specific_extensions.h": "8876576dcf8171bcf8ac2e364673465e5ab555ac7441919c36d05c71e74c08e4", - "freertos_kernel/portable/IAR/RISC-V/chip_specific_extensions/readme.txt": "9df008f8587b6faaaa48ef37ce9e38f89639290d636c06f5eefb09848ac318d1", - "freertos_kernel/portable/IAR/RISC-V/port.c": "4c7d0454b66ac0ec089bf216eb2b6e02338701c63e9c290c1f8d411d6d40c804", - "freertos_kernel/portable/IAR/RISC-V/portASM.s": "11b0afcf74e526a0bcaae944113b9d0d2829789dbfcd88b58b02f00be85f5173", - "freertos_kernel/portable/IAR/RISC-V/portmacro.h": "3422d85c46a7ffbda82c18208bbd8f73aa42b809f09da7ab0abeb8f0a1cd9c0b", - "freertos_kernel/portable/IAR/RISC-V/readme.txt": "9df008f8587b6faaaa48ef37ce9e38f89639290d636c06f5eefb09848ac318d1", - "freertos_kernel/portable/IAR/RL78/ISR_Support.h": "686a382d24eafbad53e2c86e88e171dedf9699be1dab65567714ee48d5b65e03", - "freertos_kernel/portable/IAR/RL78/port.c": "3854232d463981ad4b868268ef92944e9624f2734d247fd8349b381d5283cb35", - "freertos_kernel/portable/IAR/RL78/portasm.s87": "ba24bafe0c1e7b577fb689fc515ea458a58a6c859f9ad7f4f66687424e482c59", - "freertos_kernel/portable/IAR/RL78/portmacro.h": "a4262356906010cafea76b28f375ad50807aaaf98aaf95e720945e30d34a5649", - "freertos_kernel/portable/IAR/RX100/port.c": "0f2005eb07d4cfae2920968af7ed04670458684919ac5c38c8ee6a522f79bdc8", - "freertos_kernel/portable/IAR/RX100/port_asm.s": "05dcc7163343676007d0cfaf2217f2822f5236020bc0f5f2d0d8f64efc94f78c", - "freertos_kernel/portable/IAR/RX100/portmacro.h": "38ab0cad591fc435d1a87acfa9d9bdb5227420b05e3e081b6a534271679e4a57", - "freertos_kernel/portable/IAR/RX100/readme.txt": "d6ea169fd33ff4a4795bbcce927793fbe9177e1788af89cc6a705d64a7106e8b", - "freertos_kernel/portable/IAR/RX600/port.c": "345a724795a1fb4d0c9501f26625e7395a6d16b06ec6c2447e4a80a249da2ab8", - "freertos_kernel/portable/IAR/RX600/port_asm.s": "bf9ec5e263f0aa633f1cc931f926cf5c89584131fbb987e28b46b8e83423747e", - "freertos_kernel/portable/IAR/RX600/portmacro.h": "2ab9cd26880065ac60ea34569d7866524b488649e3f0ee4c5cb1fdb2a83bb223", - "freertos_kernel/portable/IAR/RX600/readme.txt": "d6ea169fd33ff4a4795bbcce927793fbe9177e1788af89cc6a705d64a7106e8b", - "freertos_kernel/portable/IAR/RX700v3_DPFPU/port.c": "467226e1bda60648d6e5bad20fc9ed2931b4d2e9ee6b154727d9cde38c6546a1", - "freertos_kernel/portable/IAR/RX700v3_DPFPU/portmacro.h": "9d179bbc3f1ab63b11b787a312115cc9177d3d62635e5b241ab0f41d95c82bf5", - "freertos_kernel/portable/IAR/RX700v3_DPFPU/readme.txt": "d6ea169fd33ff4a4795bbcce927793fbe9177e1788af89cc6a705d64a7106e8b", - "freertos_kernel/portable/IAR/RXv2/port.c": "66b01c394e607e1c395e13c75484454c523717b23922ef7e9cdd6aea43ff278a", - "freertos_kernel/portable/IAR/RXv2/port_asm.s": "596ecc677d1c35857bcb98a468288df8d4f71b8fe7f07d99470034fd3a7e4477", - "freertos_kernel/portable/IAR/RXv2/portmacro.h": "7ffd0c08913be18e6fe9a442fd1ac5ba24565024b2508b9f3eb82d15bf16f933", - "freertos_kernel/portable/IAR/RXv2/readme.txt": "d6ea169fd33ff4a4795bbcce927793fbe9177e1788af89cc6a705d64a7106e8b", - "freertos_kernel/portable/IAR/STR71x/ISR_Support.h": "d99b80f6ebd4c76b65f23aa195ca66dae1673b783fe0300cb387ec45287d376b", - "freertos_kernel/portable/IAR/STR71x/port.c": "c1703de710a603adad57a6380d9cf6ad964de099177f3408fa7f03e91f6e0b0a", - "freertos_kernel/portable/IAR/STR71x/portasm.s79": "2fca10aaf1bd08bc6a28d8c1714bc16e175b5e37d9bab228c3692b564516c37b", - "freertos_kernel/portable/IAR/STR71x/portmacro.h": "5cb67a3ada195735f6a5eb6e5c0ce80504e639dcc2cbbdd8fc96eaff2ccb704e", - "freertos_kernel/portable/IAR/STR75x/ISR_Support.h": "d99b80f6ebd4c76b65f23aa195ca66dae1673b783fe0300cb387ec45287d376b", - "freertos_kernel/portable/IAR/STR75x/port.c": "81edf61298c27a9cf2d848dccf10e0e488a42c6dfc065e7b15e3be5b588e2b9c", - "freertos_kernel/portable/IAR/STR75x/portasm.s79": "bec53b22e5ead048953280827ef3f3dd35ffa554402f0eae7a587bd891716c1e", - "freertos_kernel/portable/IAR/STR75x/portmacro.h": "caa40117399ab78429b696d683eab04bea4aa4a7b02bf2b7bc2aded8c38ab1e6", - "freertos_kernel/portable/IAR/STR91x/ISR_Support.h": "87c92bb698699dec561005dd09ef3d3e305cfdea1e24a258e7a5e40ed4c555be", - "freertos_kernel/portable/IAR/STR91x/port.c": "3b294716334eb80b3641d5079b100895599bddc4dffaeb6ee95bed071aa8791f", - "freertos_kernel/portable/IAR/STR91x/portasm.s79": "3ad9dcc9263ebb9205fcdd1033687527e87933b1830d072c572fe3a9c7379219", - "freertos_kernel/portable/IAR/STR91x/portmacro.h": "84bd0186307934a828b45e0454ab6a26b518bebf569eadc921e9f3dca113ebea", - "freertos_kernel/portable/IAR/V850ES/ISR_Support.h": "ed379d0f4f75462764dd96930bddf387764efb508403539da97846883006f6c1", - "freertos_kernel/portable/IAR/V850ES/port.c": "94055bcb67382470f2a5bf059132b6bbf1a25309fdf97c7f65485587b19fa5c6", - "freertos_kernel/portable/IAR/V850ES/portasm.s85": "6c9afe1e953b16fc389713c28e55fb56d6420b8e201d9407eaf45364b18d3352", - "freertos_kernel/portable/IAR/V850ES/portasm_Fx3.s85": "0c1fb3ac164cfe6d12a6df1a4d7e70b7c81491d4c358b4e511274d9e9f2b5b60", - "freertos_kernel/portable/IAR/V850ES/portasm_Hx2.s85": "af3102f3eb8dd0a4f54eb57a2b593201c4ac62cb218623ec4060f93050ff46c4", - "freertos_kernel/portable/IAR/V850ES/portmacro.h": "69ed29ab45b528a1cb25de4fa06927d84b5448047fdc091378535e553043ebcd", - "freertos_kernel/portable/Keil/See-also-the-RVDS-directory.txt": "d872e8e4176213ea84ebc76d8fb621c31b4ca116fd0a51258813e804fe110ca4", - "freertos_kernel/portable/MPLAB/PIC18F/port.c": "12d2b354f309b315dd075acd358fb88d01529eb9ae0f9d9d7cd0b12874b86deb", - "freertos_kernel/portable/MPLAB/PIC18F/portmacro.h": "fd76391a30ada8b580037b9d23f50b0cb4f15bef462b0eca8fa4f959e9c77f4a", - "freertos_kernel/portable/MPLAB/PIC18F/stdio.h": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "freertos_kernel/portable/MPLAB/PIC24_dsPIC/port.c": "9d35b32f2ae14d4c0374b83b1240effdd2389ad433d45f7906bb4ee7cec8968a", - "freertos_kernel/portable/MPLAB/PIC24_dsPIC/portasm_PIC24.S": "76eee6615d4a33cd04e7f8cf77131c00abac59e74d2baf943e962eb55990fea7", - "freertos_kernel/portable/MPLAB/PIC24_dsPIC/portasm_dsPIC.S": "04391195d2dfb8ab4242a5ec1e567209d2236ac26d5ddc69b3642bdb1d4dd9f8", - "freertos_kernel/portable/MPLAB/PIC24_dsPIC/portmacro.h": "3b922fd9deb66b0a0cc9a318f28b99008ef9b01fb67735a2112d844be544ec12", - "freertos_kernel/portable/MPLAB/PIC32MEC14xx/ISR_Support.h": "1cee96104f7b956215bb5ad76a7f9b8e51ff558135de2f18b8d092eb7fcbd4b5", - "freertos_kernel/portable/MPLAB/PIC32MEC14xx/port.c": "0e3b4a9fd8b9403a24221f6c9f9ac0feb012f32eac3a1353108eef128d1353b9", - "freertos_kernel/portable/MPLAB/PIC32MEC14xx/port_asm.S": "45cb1460e25498aa5c00f6e6c2a6b44b387b41ed1bb03da6dccb9c0d083880bb", - "freertos_kernel/portable/MPLAB/PIC32MEC14xx/portmacro.h": "11da275f715eec577187497dbc85dfedcb3089c2dc890f161bed4f1cba486616", - "freertos_kernel/portable/MPLAB/PIC32MX/ISR_Support.h": "3a6c9eb9f7b48ed3f959a325ce9ff3c1ed4b619025e2216df785d33a7441463b", - "freertos_kernel/portable/MPLAB/PIC32MX/port.c": "27d5ab4932397536b9e535bf4bd43204cfa26f4b8b28709692c4d0650e39c14b", - "freertos_kernel/portable/MPLAB/PIC32MX/port_asm.S": "6a5ca6ec2230a48af19f6f391ef3efe0b14199a66b0affc6adf8e7c2436800a7", - "freertos_kernel/portable/MPLAB/PIC32MX/portmacro.h": "d69744def6b3e80ea3bb47a4097be1c8f1d43d4a5d3711d4a607df07885c6791", - "freertos_kernel/portable/MPLAB/PIC32MZ/ISR_Support.h": "5e96ec9df6807594d0beb6d0eebbcd5056b15270d21cb3693fcbe68616e67051", - "freertos_kernel/portable/MPLAB/PIC32MZ/port.c": "7d0cb6e8b05eefa790f04ff8096cf0197390080e3a33b54df36acede4085105b", - "freertos_kernel/portable/MPLAB/PIC32MZ/port_asm.S": "c4ac38a3441364e8b86f670c4afed94da87dd8364f349e3b2bcff6f57800950b", - "freertos_kernel/portable/MPLAB/PIC32MZ/portmacro.h": "18d2bc2c5f87743d729f34a6a5472af4f66bf2b3ca482474855e1d4678dc001a", - "freertos_kernel/portable/MSVC-MingW/port.c": "a8d561a9cffeeb8535276e1da2d6a6ec9493c4bdbc25bd1ce5b88ba8da0f3253", - "freertos_kernel/portable/MSVC-MingW/portmacro.h": "49372304c17a2fbffabeb29230cc45002e219e4379ee342012e3492fa739e4bb", - "freertos_kernel/portable/MemMang/ReadMe.url": "c44abcb1837584d65d00768bde7c1471dbf3fe316275ccbb6922998c6f11ddc9", - "freertos_kernel/portable/MemMang/heap_1.c": "54536cceea4248cf740f2afdcd2e210072b6974f2c1270e398011da01015eff3", - "freertos_kernel/portable/MemMang/heap_2.c": "334c329b09c83c1fad63ebf34ffa0e27d15a6479acd603c0987f34db81304fdb", - "freertos_kernel/portable/MemMang/heap_3.c": "5fd7f17083bc740103b9a63c6627b41c5f9e6fafa8e5e352209099ab5fdee471", - "freertos_kernel/portable/MemMang/heap_4.c": "f467e45a7754d75815233de0860d94cbc4bae1eef5fa8aeea3671d130f306317", - "freertos_kernel/portable/MemMang/heap_5.c": "05f766f108cbad95f563ecb67d489dc97db45cdaa96417819beb3dee95953d4f", - "freertos_kernel/portable/MikroC/ARM_CM4F/port.c": "1a9786b270ae8b3d2f31f1be267ecdde0ccac23e9968e6aa5e7e130ef97b80e0", - "freertos_kernel/portable/MikroC/ARM_CM4F/portmacro.h": "f8b30e9e1bc2cdafc896dbcf2fc85dfc31c22db6867906007b94333d049acc6c", - "freertos_kernel/portable/Paradigm/Tern_EE/large_untested/port.c": "357cef45230ab30a60f5c4120f21c54a12a89c183f0523c61873d5ff7f515492", - "freertos_kernel/portable/Paradigm/Tern_EE/large_untested/portasm.h": "bd3304c8e34bb12b76e4809facd1f3c3a9b7eb4d8ffd18571d12a4d17df2ce80", - "freertos_kernel/portable/Paradigm/Tern_EE/large_untested/portmacro.h": "08c7cb621544bf4e766adc78790a2236c1a4de15937d9c4be60be8b4b457f4aa", - "freertos_kernel/portable/Paradigm/Tern_EE/small/port.c": "1ed0288c4e94a45bf34cc2842e340133307744cf03cef563f9922f610e896955", - "freertos_kernel/portable/Paradigm/Tern_EE/small/portasm.h": "a641909e0eb02e2fa520f5a59f15df7abe2fbb1eff92cdab3db0d876080d5cd5", - "freertos_kernel/portable/Paradigm/Tern_EE/small/portmacro.h": "08e6efe80ce4404f236ba9aa29ac5b9b305a3ffd5423be554c223111d4891e0f", - "freertos_kernel/portable/RVDS/ARM7_LPC21xx/port.c": "000d916886087c22931548c208467d8895fbbfcf99052eb9101d0ead34ff552a", - "freertos_kernel/portable/RVDS/ARM7_LPC21xx/portASM.s": "edcbad1a57df64a8b3966800050a33d06717cf796032923f0226bfdbb373a887", - "freertos_kernel/portable/RVDS/ARM7_LPC21xx/portmacro.h": "717d850f08874d392d713f98824f507d7292cd60f8fec19d970a45a605a57cf5", - "freertos_kernel/portable/RVDS/ARM7_LPC21xx/portmacro.inc": "4f23a44436612dc46202ca741eae31eca67d275db4a6e468a042e0ab62c7bb0f", - "freertos_kernel/portable/RVDS/ARM_CA9/port.c": "3ac80344c4fa0f8bdae4c2ab911d50a656461b35578f0e1ed705deea101978ce", - "freertos_kernel/portable/RVDS/ARM_CA9/portASM.s": "8c97c0e43b91e5de88dc23c0b23653775f74a9fb6d8447d8856982ff4994d1cd", - "freertos_kernel/portable/RVDS/ARM_CA9/portmacro.h": "aaf9d9677dbd7ca99a426263347f1899f0036215bccf2a9974c6daffcc29d450", - "freertos_kernel/portable/RVDS/ARM_CA9/portmacro.inc": "2a72dd28deca5c41c6c60dcb2b4745676a89a6312d30d5f454180143861cb2df", - "freertos_kernel/portable/RVDS/ARM_CM0/port.c": "77c5823b4e1dd0c769cfd8aa13416db15dfb2caaa298771ca0f68b02ee17e134", - "freertos_kernel/portable/RVDS/ARM_CM0/portmacro.h": "7942820385b379dc0b7c9cb0a400d2a9f556c34fdfd5c85853766bab2ef640ba", - "freertos_kernel/portable/RVDS/ARM_CM3/port.c": "c5fb69b9f96902135af3a495a1207691b79027fc197df368a7830ee261144381", - "freertos_kernel/portable/RVDS/ARM_CM3/portmacro.h": "29fd98a939493579d53c8c43cb34a0237bb6d881b8a89b8fd099dcadf76d9f80", - "freertos_kernel/portable/RVDS/ARM_CM4F/port.c": "73965e16d5a2cfa3016668d928d4e0c7ba9400ccac19386fa970ed6c8dd23d87", - "freertos_kernel/portable/RVDS/ARM_CM4F/portmacro.h": "3480aa7356c18bf046ab818536ae2598cc2843f372c74ac865cfc689cab01fd6", - "freertos_kernel/portable/RVDS/ARM_CM4_MPU/port.c": "7e80a8e3ec8d3663d4328e5229097538462bc815fdc180628f6c3c79d7cda273", - "freertos_kernel/portable/RVDS/ARM_CM4_MPU/portmacro.h": "e2ca8e4429f2f297b01b08c918d0fb2f22721f98d9f7b24601d78cab3586b190", - "freertos_kernel/portable/RVDS/ARM_CM7/ReadMe.txt": "713e476f526189b6e505b019c8053cfb6c49d3e921ba7345d59413bd0c35815f", - "freertos_kernel/portable/RVDS/ARM_CM7/r0p1/port.c": "0e73531a5582e8606e792cf0bed7473b73391c054fd18238fcffd1828dfa5771", - "freertos_kernel/portable/RVDS/ARM_CM7/r0p1/portmacro.h": "012e87f3c58b5dda618594ea295ae1f0ae85e638cc3596821d8da26e5644638a", - "freertos_kernel/portable/Renesas/RX100/port.c": "35164a232ccca30b5f8c3d42f6632c89d50d5849ed967297f37fd2d32aa2fcf5", - "freertos_kernel/portable/Renesas/RX100/port_asm.src": "24139832eb5b234e3b04feb67116e67c1e9d9432fca0628a46fa8d068e46a58b", - "freertos_kernel/portable/Renesas/RX100/portmacro.h": "8970e293f3baf5622c385dac9b31199d74c17cb7226f2f88c61ece56cc31fd0d", - "freertos_kernel/portable/Renesas/RX100/readme.txt": "d6ea169fd33ff4a4795bbcce927793fbe9177e1788af89cc6a705d64a7106e8b", - "freertos_kernel/portable/Renesas/RX200/port.c": "631bf7e9fc4302a519e4daca8cdffd5be0b0f50f5c55a19592d4e8075873c7f1", - "freertos_kernel/portable/Renesas/RX200/port_asm.src": "24139832eb5b234e3b04feb67116e67c1e9d9432fca0628a46fa8d068e46a58b", - "freertos_kernel/portable/Renesas/RX200/portmacro.h": "1030dd1b97f02e1a0b29f1cabeca189d5a528ddcff68ba2b19dc4d6d73c38e00", - "freertos_kernel/portable/Renesas/RX200/readme.txt": "d6ea169fd33ff4a4795bbcce927793fbe9177e1788af89cc6a705d64a7106e8b", - "freertos_kernel/portable/Renesas/RX600/port.c": "4286656748fa319083217d88882e2f8ff700cb4885e03037bff84d2120f429b6", - "freertos_kernel/portable/Renesas/RX600/port_asm.src": "24139832eb5b234e3b04feb67116e67c1e9d9432fca0628a46fa8d068e46a58b", - "freertos_kernel/portable/Renesas/RX600/portmacro.h": "d556b336f9967991f9f578aea527297a06566f38787dac134a191e7ebe2213dd", - "freertos_kernel/portable/Renesas/RX600/readme.txt": "d6ea169fd33ff4a4795bbcce927793fbe9177e1788af89cc6a705d64a7106e8b", - "freertos_kernel/portable/Renesas/RX600v2/port.c": "871474ea64f23c1122785cea65c0db6923b4042e5070bbba653b31c926942579", - "freertos_kernel/portable/Renesas/RX600v2/port_asm.src": "659d86327e4f0eb619ee359e7fc2573bec3efd985182359d336f27e1ff3898f1", - "freertos_kernel/portable/Renesas/RX600v2/portmacro.h": "d1c1a804975d417644403a4567b7200ab91760e49c37e343779ead0ada25606c", - "freertos_kernel/portable/Renesas/RX600v2/readme.txt": "d6ea169fd33ff4a4795bbcce927793fbe9177e1788af89cc6a705d64a7106e8b", - "freertos_kernel/portable/Renesas/RX700v3_DPFPU/port.c": "47370d9fb0ea28bcb8ebd237376bc6b3b970100151746dd81bcf658ef02abd63", - "freertos_kernel/portable/Renesas/RX700v3_DPFPU/port_asm.src": "659d86327e4f0eb619ee359e7fc2573bec3efd985182359d336f27e1ff3898f1", - "freertos_kernel/portable/Renesas/RX700v3_DPFPU/portmacro.h": "8fb33d40cc920fd4293adc8cb5dffe0d23abb2600179bdc1e5b7b7e47b471902", - "freertos_kernel/portable/Renesas/RX700v3_DPFPU/readme.txt": "d6ea169fd33ff4a4795bbcce927793fbe9177e1788af89cc6a705d64a7106e8b", - "freertos_kernel/portable/Renesas/SH2A_FPU/ISR_Support.inc": "79dbf7cc2c1081dce55646f1c0b872cb43a323c755d62245229d23fe616ff69e", - "freertos_kernel/portable/Renesas/SH2A_FPU/port.c": "9d92450836b0dc6450510b938cf5c7daf20667004389d037cdf064742f59bc70", - "freertos_kernel/portable/Renesas/SH2A_FPU/portasm.src": "c71f4a4ffc142800e467288c7e77760a2a54e12d267e4379e1ae55278c3e1223", - "freertos_kernel/portable/Renesas/SH2A_FPU/portmacro.h": "a4daddd97828d321cde3f362d8bf1d47e5aea4f926cf4cb1dd901ef3ab9590db", - "freertos_kernel/portable/Rowley/ARM7/readme.txt": "84a1379723e3ca3cb47a540622ed62e9900410ce65ea0584ce22426cbaf6745b", - "freertos_kernel/portable/Rowley/MSP430F449/port.c": "2af1ba1ec72b6582fa7d840d8e6e396fe3ec26049cd2fb90423723b96f8efa7f", - "freertos_kernel/portable/Rowley/MSP430F449/portasm.h": "51f3b0a04cd0c2766f005ed0145fc10e5dd83601a0d96c40553e980130a99f23", - "freertos_kernel/portable/Rowley/MSP430F449/portext.asm": "1c210e51fce8084e80c8f0efe1bb10925186ee222de226aeaa345c83d50a57fe", - "freertos_kernel/portable/Rowley/MSP430F449/portmacro.h": "fc377a281a6612fce58d122cf765d5531c13d0828c7f58918cefce066bd4a2b4", - "freertos_kernel/portable/SDCC/Cygnal/port.c": "b5f82aa391383ecdfc26c368871396ca4389969d0d29d435e8c94a9f326ef3ac", - "freertos_kernel/portable/SDCC/Cygnal/portmacro.h": "5309324b979c3c4436bc1079fcd8af18ba54c784cfbb2474ed415079645a60ff", - "freertos_kernel/portable/Softune/MB91460/__STD_LIB_sbrk.c": "92debca0c186966aaef800acd2a8f7cfdbddff1dca9eedc32fa28ecb473780ba", - "freertos_kernel/portable/Softune/MB91460/port.c": "cfc47c67c9d21431844f6744c9f5ea5fad97e1279b99473ec58e5676de7f9a9d", - "freertos_kernel/portable/Softune/MB91460/portmacro.h": "38d864faddb5ca5a6ec0f2816e9e95b0d4b3a93d73f6783ca7216b2c4c314d7b", - "freertos_kernel/portable/Softune/MB96340/__STD_LIB_sbrk.c": "70c748e9ded5a641b171124480225a336bb8b043c94bc13dc38e7574e59ad324", - "freertos_kernel/portable/Softune/MB96340/port.c": "d95febc65d4d325032bf5a5663be1d4da700086039c3b498ad8dbe77911c45bc", - "freertos_kernel/portable/Softune/MB96340/portmacro.h": "5b5b289631b86a732fc398219079ca25de11a3bd59697ee9b3297f0897db98df", - "freertos_kernel/portable/Tasking/ARM_CM4F/port.c": "e43bb64d51aa6e759091ef8af913eb7ff44a7bc81d96c8b937b9f2b32a454d12", - "freertos_kernel/portable/Tasking/ARM_CM4F/port_asm.asm": "a6786348a2bd721a6900f50f747a3dc43379972c3dd7828c1a5c0a91b2af19ee", - "freertos_kernel/portable/Tasking/ARM_CM4F/portmacro.h": "abc3d7fded2c07b7f797e6cdd4b2cdb382e040f87de87a1d9d8d143316e9f1d5", - "freertos_kernel/portable/ThirdParty/CDK/T-HEAD_CK802/port.c": "c40c3e54391a3fdb2902aa21eff8b77cbf46658a3917a968d0d912a914daa5d3", - "freertos_kernel/portable/ThirdParty/CDK/T-HEAD_CK802/portasm.S": "6db273fb79cfb3b9fa6bf69b15c72b2e462047a4ebdc70e08af5e62296c13f48", - "freertos_kernel/portable/ThirdParty/CDK/T-HEAD_CK802/portmacro.h": "5b94cbc518978e9cd356fb95c9cd5ade37c1ff307f0621146473d2e69ed8f6ff", - "freertos_kernel/portable/ThirdParty/GCC/ARC_EM_HS/arc_freertos_exceptions.c": "8b0ef852cb7bff2c95aa91209a09797e3b4c332bf2786cde63ce1a1283d3c6f8", - "freertos_kernel/portable/ThirdParty/GCC/ARC_EM_HS/arc_freertos_exceptions.h": "f03bf54223ba7ebb1a4f7cbf8821b6c919e12ba50cd1c029624bd0bea8dbc70b", - "freertos_kernel/portable/ThirdParty/GCC/ARC_EM_HS/arc_support.s": "079b763c328307f0e0dd376e62f8df22667788050faf126682fe63782f54e336", - "freertos_kernel/portable/ThirdParty/GCC/ARC_EM_HS/freertos_tls.c": "786005ed937789d473588f3e68fe288f584afb33e15f599ca61a7232f84ea281", - "freertos_kernel/portable/ThirdParty/GCC/ARC_EM_HS/port.c": "d3bed4c2dadd9db69c968ba21208c0378d3f5b85140b7541c0d3ac670a4ccf4a", - "freertos_kernel/portable/ThirdParty/GCC/ARC_EM_HS/portmacro.h": "8edd8802176739de4c8ac8f7a8674502c9dcf3c9625cb3a24a20050920bf5de7", - "freertos_kernel/portable/ThirdParty/GCC/ARC_v1/arc_freertos_exceptions.c": "8b0ef852cb7bff2c95aa91209a09797e3b4c332bf2786cde63ce1a1283d3c6f8", - "freertos_kernel/portable/ThirdParty/GCC/ARC_v1/arc_freertos_exceptions.h": "f03bf54223ba7ebb1a4f7cbf8821b6c919e12ba50cd1c029624bd0bea8dbc70b", - "freertos_kernel/portable/ThirdParty/GCC/ARC_v1/arc_support.s": "8d00960eacfd0786b2ebf57382ea9e114ca214556bc21c53902f6ae8cb9b3365", - "freertos_kernel/portable/ThirdParty/GCC/ARC_v1/port.c": "d9cb238df48449c57b84b3e4dca15f55230c413a31ff61b7f130d76e5b1b9a2b", - "freertos_kernel/portable/ThirdParty/GCC/ARC_v1/portmacro.h": "9775d5d8d152c06dc63d606cddaa8178ff11d1260d507b101fc2d666e0882977", - "freertos_kernel/portable/ThirdParty/GCC/ARM_CM33_TFM/README.md": "5ef03f6137a0d76ea2eaf353bc1bba01d226f7b6c83138ffd6f26b45baecdf9e", - "freertos_kernel/portable/ThirdParty/GCC/ARM_CM33_TFM/os_wrapper_freertos.c": "c982e5b278797178f627213a52d0f8ee1ede312d26fc78d7721e684f3044fa51", - "freertos_kernel/portable/ThirdParty/GCC/ATmega/port.c": "77d786428254f8f82993acb36eb7269eb2b9bbed73364ab7236b541d2d56f73e", - "freertos_kernel/portable/ThirdParty/GCC/ATmega/portmacro.h": "f576b2cc25ce38764fae3d923fe13c130e163c1098e341d0d834a815c181dead", - "freertos_kernel/portable/ThirdParty/GCC/ATmega/readme.md": "f219267f64c4cb262bc08de164d801509d27bccb7e77881a1fe18ab4ae289c3a", - "freertos_kernel/portable/ThirdParty/GCC/Posix/FreeRTOS-simulator-for-Linux.url": "79fbc2c019622ca13d55d76c41d600a1bf52d31bc5348597dfc0164957520939", - "freertos_kernel/portable/ThirdParty/GCC/Posix/port.c": "e00385440fbc53ce1e673ec803623a5c7a74c49117f7bf6425a59971690a0e05", - "freertos_kernel/portable/ThirdParty/GCC/Posix/portmacro.h": "5e22d659a7c9dd9974e3523de14b5606be319dd26c58b0920473fbb7541bfe00", - "freertos_kernel/portable/ThirdParty/GCC/Posix/utils/wait_for_event.c": "1ddfc0eb3b6428a2e247f97427ecf0685be8d2a88c55d9cf02f59f8b2d38bcbb", - "freertos_kernel/portable/ThirdParty/GCC/Posix/utils/wait_for_event.h": "b60bc7226d152b654e5aa3644c99cb46943288ff268e12d84a9d7f1fe147815a", - "freertos_kernel/portable/ThirdParty/GCC/RISC-V/README-for-info-on-official-MIT-license-port.txt": "84f2893ac61214ea73c695911a13b27bda63a7e6d58e0bf90587bd369d214d17", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/FreeRTOS-openocd.c": "04439bc16c9e004f0bc9d194741d5fec816e2dd1f5e1c4c3963538921eea5dff", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/include/portbenchmark.h": "dcfdac565c63234879de523170b862604850cc0336ca7c6cb5430945f40fdb8b", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/include/portmacro.h": "b7004272e01e10c7a34f845fef5a6fcb680f8af2e2b7f5fd4cccf85f361a5793", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/include/xtensa_api.h": "ca9a563740926f8e7f4c9416d839fb2b01850969860f4ed46b6c18c88b6b99fd", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/include/xtensa_config.h": "bb279022f7498d5a34e71198ffc8c7df5ef1b5a02a47b4bfee77e07679376035", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/include/xtensa_context.h": "691ecd4526fd59eb13b6ab5636b429d1e85bc93de21ec3aba0094c92d57a2786", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/include/xtensa_rtos.h": "d9b8a4388d73a8b91fe6b37436c5ce8e9e1846c17391dcfbda1791ce2ca69ff7", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/include/xtensa_timer.h": "445c8a982fd4234143da61ca0c7a622bbf5929d76fc1e971398c8ecaba4bc3f7", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/port.c": "71e33de0f0680e1ffcae2a62d7d20112466a4b37b3ccb8b8aa31ae127b3cb221", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/portasm.S": "23286f7351106a181324a918a57f560373e2b5f0bb7fa3e101db0a50ae6eb7bb", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/portmux_impl.h": "5cbf3188e197f82a93f456c0f75e4aba54b6312e0f9dd510c2f4323839ca25f7", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/portmux_impl.inc.h": "c1e451823cc388152f0d034e9ca3103eb106d6e763fa27d0d2156aabc8cd81f0", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/xtensa_context.S": "b9d8c64d04b26831a1d15d73647d14f8cd37a3132200c3442ddbcd78692addf9", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/xtensa_init.c": "ddc16959787fdd6487855103a5f1fc6cf0f606b14bc7a2baad99c210afbaf21b", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/xtensa_intr.c": "c8bfbc77c9ba4f7e952578a103874ccd8b5b33ddd87af11d6bb2222dfd7e244d", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/xtensa_intr_asm.S": "c8e9e144c40182f486f1a02057d37fe6619f710812a6b7e53c6881ad592eb96f", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/xtensa_loadstore_handler.S": "f20aa8a42bdcbec471278a2e8a26592997e4b04965668694d504e073c08f1bb8", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/xtensa_overlay_os_hook.c": "171fc98a4981b0f468560b5cc81affe92589c087ff76745576577820b99840aa", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/xtensa_vector_defaults.S": "c5abcdff7fda5b3c50cbcae88d3acb7eacf2f3fb6da1699d4cc4655494449347", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/xtensa_vectors.S": "47ca2b6631fdc803e338d80c4b7e13d80e0ca50b9918cecbc06e44098c0338c3", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/FreeRTOS-openocd.c": "04439bc16c9e004f0bc9d194741d5fec816e2dd1f5e1c4c3963538921eea5dff", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/include/portbenchmark.h": "dcfdac565c63234879de523170b862604850cc0336ca7c6cb5430945f40fdb8b", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/include/portmacro.h": "11729a32654ea53404566903477acdf073a439efe637d93997241e15a40ccc88", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/include/xtensa_api.h": "ca9a563740926f8e7f4c9416d839fb2b01850969860f4ed46b6c18c88b6b99fd", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/include/xtensa_config.h": "bb279022f7498d5a34e71198ffc8c7df5ef1b5a02a47b4bfee77e07679376035", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/include/xtensa_context.h": "691ecd4526fd59eb13b6ab5636b429d1e85bc93de21ec3aba0094c92d57a2786", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/include/xtensa_rtos.h": "d9b8a4388d73a8b91fe6b37436c5ce8e9e1846c17391dcfbda1791ce2ca69ff7", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/include/xtensa_timer.h": "445c8a982fd4234143da61ca0c7a622bbf5929d76fc1e971398c8ecaba4bc3f7", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/port.c": "168dfdc0132b95b0b126db4da5d8a6223bf4065be6b6da203079f349ecc22a34", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/portasm.S": "e18c0feda7daa2a5abb31ff41180b9fd6fe57918743f1f0dfb2a0a99b255432a", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/portmux_impl.h": "5cbf3188e197f82a93f456c0f75e4aba54b6312e0f9dd510c2f4323839ca25f7", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/portmux_impl.inc.h": "c1e451823cc388152f0d034e9ca3103eb106d6e763fa27d0d2156aabc8cd81f0", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/xtensa_context.S": "b9d8c64d04b26831a1d15d73647d14f8cd37a3132200c3442ddbcd78692addf9", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/xtensa_init.c": "a2bef365b2bb4f0ca8ca6cbe869b6f729b764f8f94e63c5dee3daf6d6cfbee96", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/xtensa_intr.c": "86322a1638250a182a10f31982e940c5c375d2e956b3f0e2638981bac4069479", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/xtensa_intr_asm.S": "c8e9e144c40182f486f1a02057d37fe6619f710812a6b7e53c6881ad592eb96f", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/xtensa_loadstore_handler.S": "f20aa8a42bdcbec471278a2e8a26592997e4b04965668694d504e073c08f1bb8", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/xtensa_overlay_os_hook.c": "171fc98a4981b0f468560b5cc81affe92589c087ff76745576577820b99840aa", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/xtensa_vector_defaults.S": "d3f4e09fc2db0ffee54eecbc1c63132fe291a0841a9e390acd3440e453d1e9c0", - "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/xtensa_vectors.S": "f314d7f21b6e1986a5b6dea85a24a9dc3d57178c81618e6b438c726617195bed", - "freertos_kernel/portable/ThirdParty/XCC/Xtensa/Makefile": "62018ea2713263c1d80b4e67812100e057e014b5d87d4d539131e37d1e6f9d06", - "freertos_kernel/portable/ThirdParty/XCC/Xtensa/port.c": "322f55c5a37bd4b8382b3715309a7973d7d3eff44715d147ce33575fa0e81f68", - "freertos_kernel/portable/ThirdParty/XCC/Xtensa/portasm.S": "898cf46ea426e0b0218b3045b28a0783990208fa100eb43b2adab0880f7d9853", - "freertos_kernel/portable/ThirdParty/XCC/Xtensa/portbenchmark.h": "69400a05d9c47211fc10781f5967c55e4d6476d6df940204b2fbbd455bceefee", - "freertos_kernel/portable/ThirdParty/XCC/Xtensa/portclib.c": "4209f60ed2909c3e41485981d6be308c8a3c31145d4a9f2a99cbae187cf95f0b", - "freertos_kernel/portable/ThirdParty/XCC/Xtensa/portmacro.h": "25f22e1999911c656deb9a76b0c9ac8400ff47002915f0cf7d569323963422e8", - "freertos_kernel/portable/ThirdParty/XCC/Xtensa/porttrace.h": "9c9097ff31d12b4dc627df17576ac8187bda6b6a20c2df7eac75c4b36159a908", - "freertos_kernel/portable/ThirdParty/XCC/Xtensa/readme_xtensa.txt": "051e57e3bce362384d01200b41bafe895b933be0c7686534e623405853374fae", - "freertos_kernel/portable/ThirdParty/XCC/Xtensa/xtensa_api.h": "b0de2bf6b2a24b19353189bca391df89b8a53f455dde46c97ea7685f76d61e23", - "freertos_kernel/portable/ThirdParty/XCC/Xtensa/xtensa_config.h": "caa8552f8beac3ffd619e99d0d11cd3d9baa67356d18693dda2df95a15c62cf4", - "freertos_kernel/portable/ThirdParty/XCC/Xtensa/xtensa_context.S": "90a79a5187cf5b7249e7fea665bd8a14d9d3f010c7357b13a74118f44eab3409", - "freertos_kernel/portable/ThirdParty/XCC/Xtensa/xtensa_context.h": "dec667e4afa0f7d80cff7fa803a70947328a86fec6c3bedc590edbe433367328", - "freertos_kernel/portable/ThirdParty/XCC/Xtensa/xtensa_init.c": "bab8cb718be58ec77896514063706c0d92530962becd7217dd2fb168b0dc1a06", - "freertos_kernel/portable/ThirdParty/XCC/Xtensa/xtensa_intr.c": "bc1b4d1487e472294f54aa5274f056d9fa37a68ce155973c63e4e4cf6849b156", - "freertos_kernel/portable/ThirdParty/XCC/Xtensa/xtensa_intr_asm.S": "fa4fc88cb8fa69aa16eec52c809e28504e58f675498ed7fa1117f4bc928c3c86", - "freertos_kernel/portable/ThirdParty/XCC/Xtensa/xtensa_overlay_os_hook.c": "562662e7df519a1408ce68fb295223fa66fa871d72e124dc620b1bc987e0f858", - "freertos_kernel/portable/ThirdParty/XCC/Xtensa/xtensa_rtos.h": "b578b18489c7519a0286d9497cded9dc49e4c6e9d98a3b59593dd627e7aeed5c", - "freertos_kernel/portable/ThirdParty/XCC/Xtensa/xtensa_timer.h": "5380b8b46d8b03ef5c54d74727190d908fe1732b306adb91dfd3befb5934135e", - "freertos_kernel/portable/ThirdParty/XCC/Xtensa/xtensa_vectors.S": "bf8719c48506db41ab1385046ab78b23477656b3eba0135e203df8779e4c3555", - "freertos_kernel/portable/WizC/PIC18/Drivers/Tick/Tick.c": "86637b723f4b27377696175138f99da993daad689d2f99d9cd72330f476f4ec5", - "freertos_kernel/portable/WizC/PIC18/Drivers/Tick/isrTick.c": "41c9a92b628beea55f28004fccce7c6ac6f717bae67eb36177443277fe5df3ea", - "freertos_kernel/portable/WizC/PIC18/Install.bat": "38cc1f0ec2d0af3ae1c7bb4b12d137914114cc8e278b9f8a32deb4c463f9834b", - "freertos_kernel/portable/WizC/PIC18/addFreeRTOS.h": "9122bc1aabbd8f0b1179f5dfc451932d35ec288d404fd83576ddb714b946ad2c", - "freertos_kernel/portable/WizC/PIC18/port.c": "0318283026e1678a08e07cade52166a5284a4e8f18eb7e9994e5a39b6945323c", - "freertos_kernel/portable/WizC/PIC18/portmacro.h": "c8b9fd5c4572bb927dc174ca8cc324c6a43543c8599750a13bf1eb45057a8ef2", - "freertos_kernel/portable/oWatcom/16BitDOS/Flsh186/port.c": "6af37bc7e28f228f0c643a688b357dad5060c79bab0e2c0fd62e2873bc5b26fc", - "freertos_kernel/portable/oWatcom/16BitDOS/Flsh186/portmacro.h": "5422ae6957a88d59c79dc3aef13cf76413fd3b49c183e76830cbfd8018657dff", - "freertos_kernel/portable/oWatcom/16BitDOS/PC/port.c": "f8ba6c5a14b0755e9b629f11cfd0f338f328e8b99fcff1497a723462bd6c9e2b", - "freertos_kernel/portable/oWatcom/16BitDOS/PC/portmacro.h": "78c1b85b627ffdb66f549808e211caaea334726ec05e26faf4a763383ec2bb01", - "freertos_kernel/portable/oWatcom/16BitDOS/common/portasm.h": "1f6bb8f4a1855b22791bf1ba58b916cff671f365b8071a6708d5f65e04590b1d", - "freertos_kernel/portable/oWatcom/16BitDOS/common/portcomn.c": "0720d9d6be73c5607344533700c65a9cdaf8b1f5001037355ef5b732ece59bb9", + "freertos_kernel/portable/ARMClang/Use-the-GCC-ports.txt": "3c39fa98b62e8a40560cb283f011411ad850c9f521e8b635af7f81a37d5a13cc", + "freertos_kernel/portable/ARMv8M/ReadMe.txt": "f8ee247fe57cc51b810fdd571f04252213a1deb77ef87053afe7320b9fe3a069", + "freertos_kernel/portable/ARMv8M/copy_files.py": "09de5ce44f1996326cab4ddae531eb125fd80dd857af5a8e03b9e73ff9b05a53", + "freertos_kernel/portable/ARMv8M/non_secure/ReadMe.txt": "5f7390107fc6c25c53594f63b82655ed2558bf34df857b9b94025141bd05e14d", + "freertos_kernel/portable/ARMv8M/non_secure/port.c": "9254d35345746f17ae47766e793c77d9594edc6243579b7d8157a93a0910c9d0", + "freertos_kernel/portable/ARMv8M/non_secure/portable/GCC/ARM_CM23/portasm.c": "53da47570f50f8b45d26b7a35997975022c8dfa852185a3b4ff3358e6c11c371", + "freertos_kernel/portable/ARMv8M/non_secure/portable/GCC/ARM_CM23/portmacro.h": "ddb6a7ed46eb95b466ddddb0534b638f9cae3831e907a3bbc248a9bb66e28d30", + "freertos_kernel/portable/ARMv8M/non_secure/portable/GCC/ARM_CM23_NTZ/portasm.c": "859a06c4c21607959a1faabd7fe0148cc7e0cb624bdc05dac9eaacb8476db125", + "freertos_kernel/portable/ARMv8M/non_secure/portable/GCC/ARM_CM23_NTZ/portmacro.h": "ddb6a7ed46eb95b466ddddb0534b638f9cae3831e907a3bbc248a9bb66e28d30", + "freertos_kernel/portable/ARMv8M/non_secure/portable/GCC/ARM_CM33/portasm.c": "91baafcd1489f9a5bf3ddb182d22e950fc376ae5c217680ce537520dbd604ea8", + "freertos_kernel/portable/ARMv8M/non_secure/portable/GCC/ARM_CM33/portmacro.h": "cc8b860d88403def6e05e30867056ed1ac0a993e4129c94733dd1fd767a7dd19", + "freertos_kernel/portable/ARMv8M/non_secure/portable/GCC/ARM_CM33_NTZ/portasm.c": "c1beb1d1e88c3859adfd6d13e2b0dc478abc144924caef37a63d6b674aa77ae8", + "freertos_kernel/portable/ARMv8M/non_secure/portable/GCC/ARM_CM33_NTZ/portmacro.h": "cc8b860d88403def6e05e30867056ed1ac0a993e4129c94733dd1fd767a7dd19", + "freertos_kernel/portable/ARMv8M/non_secure/portable/IAR/ARM_CM23/portasm.s": "05b44efce09dcf8b9bc78d0a8e4223a1aaf1477585e1eb9c202d8deb06db903b", + "freertos_kernel/portable/ARMv8M/non_secure/portable/IAR/ARM_CM23/portmacro.h": "ecf7789333d2eae4dffa36cadd312dddcaed2db135ab0ed60f80064bf75e35a2", + "freertos_kernel/portable/ARMv8M/non_secure/portable/IAR/ARM_CM23_NTZ/portasm.s": "99e2d5762155e1d4f4ea426ca32c8daaa3135606345b69ec67cabefbdba0597a", + "freertos_kernel/portable/ARMv8M/non_secure/portable/IAR/ARM_CM23_NTZ/portmacro.h": "2aedeeb50a4c2e57278cc5e85fa80ac1afb4d00fd6f34449f94822808a7bb96d", + "freertos_kernel/portable/ARMv8M/non_secure/portable/IAR/ARM_CM33/portasm.s": "1559d8a1be13c51a6af0e94fce8f960c286bb22ef7ad21202d627aff03f4473f", + "freertos_kernel/portable/ARMv8M/non_secure/portable/IAR/ARM_CM33/portmacro.h": "0d0cdb539f5c681aa83f5a78e2395fa776a3f48e312a404f134efb903f88cbd2", + "freertos_kernel/portable/ARMv8M/non_secure/portable/IAR/ARM_CM33_NTZ/portasm.s": "42ca7bcd0f3f0119ee957ffd69b8fd5f4f97eff8b94aeb4ac9454468f88dd481", + "freertos_kernel/portable/ARMv8M/non_secure/portable/IAR/ARM_CM33_NTZ/portmacro.h": "0d0cdb539f5c681aa83f5a78e2395fa776a3f48e312a404f134efb903f88cbd2", + "freertos_kernel/portable/ARMv8M/non_secure/portasm.h": "eb63e885f48f5d45b649ead271bfce54c81d82fd42e0355072375e5af6d16c0c", + "freertos_kernel/portable/ARMv8M/secure/ReadMe.txt": "f8ee247fe57cc51b810fdd571f04252213a1deb77ef87053afe7320b9fe3a069", + "freertos_kernel/portable/ARMv8M/secure/context/portable/GCC/ARM_CM23/secure_context_port.c": "d38a8f3b8983613ac00ee0e506ec881c35b028ecf2512662cf3a09fbee8ab524", + "freertos_kernel/portable/ARMv8M/secure/context/portable/GCC/ARM_CM33/secure_context_port.c": "8dcf437f45daf7524eecabf60a13816c4bdf14f43a9dfe4215203c61fd5edaa7", + "freertos_kernel/portable/ARMv8M/secure/context/portable/IAR/ARM_CM23/secure_context_port.c": "c713b3a7c72b12ae6c6c0dea892d6ffeba6db514e8e2dd7d52404273d9262934", + "freertos_kernel/portable/ARMv8M/secure/context/portable/IAR/ARM_CM23/secure_context_port_asm.s": "f465c2aca32ba9fc79850599422baa1b78a86e8cb182099e8f73298c835fef8e", + "freertos_kernel/portable/ARMv8M/secure/context/portable/IAR/ARM_CM33/secure_context_port.c": "c713b3a7c72b12ae6c6c0dea892d6ffeba6db514e8e2dd7d52404273d9262934", + "freertos_kernel/portable/ARMv8M/secure/context/portable/IAR/ARM_CM33/secure_context_port_asm.s": "b3a7ea032cbc07f0cef45c2dceb9643c3c6c25cf15689fb0509a31b2a6ee2d84", + "freertos_kernel/portable/ARMv8M/secure/context/secure_context.c": "ca7338fa111e73eccf63059be2907542c788a3aa83365bdb94e207e1a0461116", + "freertos_kernel/portable/ARMv8M/secure/context/secure_context.h": "2ce8be6ad0b523eb28b43eec91aba7213434c2393ac6b2192b1c5fbf9b43c2ac", + "freertos_kernel/portable/ARMv8M/secure/heap/secure_heap.c": "15519a6878bec08878c8348e04cd271a3a520c031581663176fc0744369a0c9b", + "freertos_kernel/portable/ARMv8M/secure/heap/secure_heap.h": "97405b4c849d2b049989debb1f8fc57e9667736290a8afbffe29e633de6c27fe", + "freertos_kernel/portable/ARMv8M/secure/init/secure_init.c": "a5974925bf9d6a3e6c95f13133266fc96acdd0cd9b8bc2e4be58187f06f71160", + "freertos_kernel/portable/ARMv8M/secure/init/secure_init.h": "ed955f1e93779ad64b03873c63b45feec9fb145fcb0bcb8fa0869748f6f96744", + "freertos_kernel/portable/ARMv8M/secure/macros/secure_port_macros.h": "4b3d4543b6abb076c4a07da977eef326bf5b8c205142861c5e8c2ddb2d5f511f", + "freertos_kernel/portable/BCC/16BitDOS/Flsh186/port.c": "134f034c055259d1f68b39d2e68fa9da4a4eee10769698a03f2cd17f4688a25c", + "freertos_kernel/portable/BCC/16BitDOS/Flsh186/prtmacro.h": "d8a6e99b42b2ceef170f704c8e353fa0f2fe02d0b23ec06ccd1d5e6b6d9f6ae4", + "freertos_kernel/portable/BCC/16BitDOS/PC/port.c": "f606e0fa1a0d7c9f1b17b1aebf2ed3ddfa2c6600506cb0d548aae51d94f80db0", + "freertos_kernel/portable/BCC/16BitDOS/PC/prtmacro.h": "0a41ae6fdd4f3d8f0484d3a49c8bbff72816a2909d5349adf45c0a6a711817d6", + "freertos_kernel/portable/BCC/16BitDOS/common/portasm.h": "b614399210a24ec52b92a8814a546356fd602ad394919eeb5942e0ed5f8fe0a2", + "freertos_kernel/portable/BCC/16BitDOS/common/portcomn.c": "7aa2e611bd124742d6ab7d64e129652ed024f115a7c80b7854adda396967d699", + "freertos_kernel/portable/CCS/ARM_CM3/port.c": "e3299b3d1a7782618a2eaa5df04a123d4568f84cf25634fe0d014970e17468cf", + "freertos_kernel/portable/CCS/ARM_CM3/portasm.asm": "f9bba2b1cd5dc846b38cde1bdd5457e3c3ab102d4e89aa1e745133a4df3726a3", + "freertos_kernel/portable/CCS/ARM_CM3/portmacro.h": "96b0ef81209f69aeac54f12565ecda858bb663e516b4e378c0a0a6395488f65a", + "freertos_kernel/portable/CCS/ARM_CM4F/port.c": "c6155b913e0677392179fff5b898ec9acef2fc02dd3b925b211c9a7f2b65d4ab", + "freertos_kernel/portable/CCS/ARM_CM4F/portasm.asm": "d15f6288c9d80b2f76c4bc4575026c296f5296f6a50612ecc3a51ef3972ff683", + "freertos_kernel/portable/CCS/ARM_CM4F/portmacro.h": "bdac5e0002707af8b7820e7c4d0fb2f16027ac7ab53a266e0400ecc0a01638c3", + "freertos_kernel/portable/CCS/ARM_Cortex-R4/port.c": "1a3187606562fe7c34f125c0c8ad5e0df6a368f86f2fbdc745e0679f6c9d32b2", + "freertos_kernel/portable/CCS/ARM_Cortex-R4/portASM.asm": "a845348f24b019b01ce9390d358c91339988828b583398c940785e2d5bcdb777", + "freertos_kernel/portable/CCS/ARM_Cortex-R4/portmacro.h": "1a14c0a55baebd5dde05a8de9b8ee8876c4907f723795b836862e0138197c16e", + "freertos_kernel/portable/CCS/MSP430X/data_model.h": "349494ad579806942d82fb0b909aa0cde4f0ae998a57ee994bcd2bac3dcb8e93", + "freertos_kernel/portable/CCS/MSP430X/port.c": "33b4c07d761dc0c511848b6d7f4aad7c4be5808cd8892e53a8b277ac7ff4ee34", + "freertos_kernel/portable/CCS/MSP430X/portext.asm": "a540fa52834eca1f8badb903f9eef39b67970d9f409e71104fa5bdebca9c0e44", + "freertos_kernel/portable/CCS/MSP430X/portmacro.h": "486df65918c7f50ce3bebee0b6807225fdae77b2f4d9071ed39ed3102759c66a", + "freertos_kernel/portable/CodeWarrior/ColdFire_V1/port.c": "0c89f62e61f7f4456d80c6214efc617030c9ddc3f67eb35352ef050f7d3f7b5d", + "freertos_kernel/portable/CodeWarrior/ColdFire_V1/portasm.S": "0f51f8dc89ee69cf89018bf471cef4f6aee56d08fc4081d2f59315f810ec4b81", + "freertos_kernel/portable/CodeWarrior/ColdFire_V1/portmacro.h": "59a5ede0fd79c9fdef3290637097893704acc81ec3d7db96261e3382be3a4791", + "freertos_kernel/portable/CodeWarrior/ColdFire_V2/port.c": "192ae95e9d8dfed6d17e362904160e69b7745cc984ce3eb23dd743a376fb4aa9", + "freertos_kernel/portable/CodeWarrior/ColdFire_V2/portasm.S": "b7ad8bda3903e7091f69958016f7db13050c6055006df0a912a6f3799e0d5033", + "freertos_kernel/portable/CodeWarrior/ColdFire_V2/portmacro.h": "b473815c9f96b05afb83383db211d926e816db092a00473e0829a3353f6d9af3", + "freertos_kernel/portable/CodeWarrior/HCS12/port.c": "513fc16c267a24141adb8249778341666602525ea390c0c82ef392cc84229a9b", + "freertos_kernel/portable/CodeWarrior/HCS12/portmacro.h": "f77a65503e98ca5534a813d270a73664ffb523b85272810bd7d1c49ed9a29ce2", + "freertos_kernel/portable/Common/mpu_wrappers.c": "8d565e54fea7142f4e1016be0d30feca581ace2f5a023c97c71cf617cfe1b0be", + "freertos_kernel/portable/GCC/ARM7_AT91FR40008/port.c": "fdcc5b6b9b7bdc2c7909fb92ca1b6af8146e1c4441eca32e257db585cb6f57c3", + "freertos_kernel/portable/GCC/ARM7_AT91FR40008/portISR.c": "26b331cb3243008df0d289cb60e1e3c4910f9ae71cc80162fec8d1d22871b8f9", + "freertos_kernel/portable/GCC/ARM7_AT91FR40008/portmacro.h": "8d0681762c2fc98bf7fb7859d547f3b1291421d09e90be9b4cf28e8e2b847852", + "freertos_kernel/portable/GCC/ARM7_AT91SAM7S/AT91SAM7X256.h": "f3a274db2d037202effc40451f7c6679ce51fd2959a2a69780d449470e8ebda4", + "freertos_kernel/portable/GCC/ARM7_AT91SAM7S/ioat91sam7x256.h": "cfa4b00ec025e4678791d72f66beeaf82df64a58b17447bef3ab0e2e418d4978", + "freertos_kernel/portable/GCC/ARM7_AT91SAM7S/lib_AT91SAM7X256.c": "054a9c450cdddd0c60f7996d10e86ba2111f0ceb4fe6b612b25d6f7ddc11a5b7", + "freertos_kernel/portable/GCC/ARM7_AT91SAM7S/lib_AT91SAM7X256.h": "4e2476e3b3e0d28bcdd7ecbabaef96808a47835d5070dea1b1104635724fe6ac", + "freertos_kernel/portable/GCC/ARM7_AT91SAM7S/port.c": "7dfaf49394cb3514be2a3b0ba2dba65651976701b183fb6fef52dae6e9785c88", + "freertos_kernel/portable/GCC/ARM7_AT91SAM7S/portISR.c": "8c8fc571f6a602cd87559259b4ebaa8f1901169306d9e363a4593a5ee022f34a", + "freertos_kernel/portable/GCC/ARM7_AT91SAM7S/portmacro.h": "db665ca13ff6c874acfa06a9c7973cf18ed1c814b688e8b47e77f241aace91a5", + "freertos_kernel/portable/GCC/ARM7_LPC2000/port.c": "9e0881db0570eaf4b1ccef4ba985f922cf91d6e262a4d1dc3fba5f025606976a", + "freertos_kernel/portable/GCC/ARM7_LPC2000/portISR.c": "2742d0a79cfc60b83c6dbdf035f374e804a5cb5336564cbe385b20a6460cf7f2", + "freertos_kernel/portable/GCC/ARM7_LPC2000/portmacro.h": "ee7190ae11c036eb94aa2c9879100076385576dc707029f925c92f93d9964f5f", + "freertos_kernel/portable/GCC/ARM7_LPC23xx/port.c": "9770750b95861361f302b0d888612cb0b7aad7da8401474ceb8ed2d0355d0f6b", + "freertos_kernel/portable/GCC/ARM7_LPC23xx/portISR.c": "341c6699ddbf041c88cee6e81b4b17135fbba34573c969f22d37ce030a3ac68e", + "freertos_kernel/portable/GCC/ARM7_LPC23xx/portmacro.h": "e77935a4c141bb323a0456718453357c4df0933be3114b4c14f508c92b8e90d3", + "freertos_kernel/portable/GCC/ARM_CA53_64_BIT/port.c": "b62b2791059727ad3f774c83092479f8a680b076f1389fc9992ab1d9c5e56274", + "freertos_kernel/portable/GCC/ARM_CA53_64_BIT/portASM.S": "9689feb34adbb119bc3605c8f52b82fefc1278a12209d00f8012d520a224630c", + "freertos_kernel/portable/GCC/ARM_CA53_64_BIT/portmacro.h": "4929d7a55018ea9310dc5b148e0c129d36d3777c3e93fb851314a6cddd4fe88f", + "freertos_kernel/portable/GCC/ARM_CA9/port.c": "4531766976f80a4ccbc86cf0c4b2bc7520c6e42f73d7057628e80ce90bf377d8", + "freertos_kernel/portable/GCC/ARM_CA9/portASM.S": "f2f8f2fcb0240c29e342bd0d92d9fc439730c270343934aba6c0bdb6b6acb61c", + "freertos_kernel/portable/GCC/ARM_CA9/portmacro.h": "b3f6003d9e1978072e78c8b771d45832abc592665fb7dff34cc8bc3968c7d50b", + "freertos_kernel/portable/GCC/ARM_CM0/port.c": "805f6ae5eccc15787d9569b7e62de2bf97288a02baeff063ff9c27bc4d2a20b8", + "freertos_kernel/portable/GCC/ARM_CM0/portmacro.h": "41e68243d464f7b0ad900fec300519ea820041e2a4cebddb5cb42e291fdf60bd", + "freertos_kernel/portable/GCC/ARM_CM23/non_secure/port.c": "9254d35345746f17ae47766e793c77d9594edc6243579b7d8157a93a0910c9d0", + "freertos_kernel/portable/GCC/ARM_CM23/non_secure/portasm.c": "53da47570f50f8b45d26b7a35997975022c8dfa852185a3b4ff3358e6c11c371", + "freertos_kernel/portable/GCC/ARM_CM23/non_secure/portasm.h": "eb63e885f48f5d45b649ead271bfce54c81d82fd42e0355072375e5af6d16c0c", + "freertos_kernel/portable/GCC/ARM_CM23/non_secure/portmacro.h": "ddb6a7ed46eb95b466ddddb0534b638f9cae3831e907a3bbc248a9bb66e28d30", + "freertos_kernel/portable/GCC/ARM_CM23/secure/secure_context.c": "ca7338fa111e73eccf63059be2907542c788a3aa83365bdb94e207e1a0461116", + "freertos_kernel/portable/GCC/ARM_CM23/secure/secure_context.h": "2ce8be6ad0b523eb28b43eec91aba7213434c2393ac6b2192b1c5fbf9b43c2ac", + "freertos_kernel/portable/GCC/ARM_CM23/secure/secure_context_port.c": "d38a8f3b8983613ac00ee0e506ec881c35b028ecf2512662cf3a09fbee8ab524", + "freertos_kernel/portable/GCC/ARM_CM23/secure/secure_heap.c": "15519a6878bec08878c8348e04cd271a3a520c031581663176fc0744369a0c9b", + "freertos_kernel/portable/GCC/ARM_CM23/secure/secure_heap.h": "97405b4c849d2b049989debb1f8fc57e9667736290a8afbffe29e633de6c27fe", + "freertos_kernel/portable/GCC/ARM_CM23/secure/secure_init.c": "a5974925bf9d6a3e6c95f13133266fc96acdd0cd9b8bc2e4be58187f06f71160", + "freertos_kernel/portable/GCC/ARM_CM23/secure/secure_init.h": "ed955f1e93779ad64b03873c63b45feec9fb145fcb0bcb8fa0869748f6f96744", + "freertos_kernel/portable/GCC/ARM_CM23/secure/secure_port_macros.h": "4b3d4543b6abb076c4a07da977eef326bf5b8c205142861c5e8c2ddb2d5f511f", + "freertos_kernel/portable/GCC/ARM_CM23_NTZ/non_secure/port.c": "9254d35345746f17ae47766e793c77d9594edc6243579b7d8157a93a0910c9d0", + "freertos_kernel/portable/GCC/ARM_CM23_NTZ/non_secure/portasm.c": "859a06c4c21607959a1faabd7fe0148cc7e0cb624bdc05dac9eaacb8476db125", + "freertos_kernel/portable/GCC/ARM_CM23_NTZ/non_secure/portasm.h": "eb63e885f48f5d45b649ead271bfce54c81d82fd42e0355072375e5af6d16c0c", + "freertos_kernel/portable/GCC/ARM_CM23_NTZ/non_secure/portmacro.h": "ddb6a7ed46eb95b466ddddb0534b638f9cae3831e907a3bbc248a9bb66e28d30", + "freertos_kernel/portable/GCC/ARM_CM3/port.c": "3eb252945ac532ddb85e73ff6ff371fe957dd43845787bb4bea350e6dcab6089", + "freertos_kernel/portable/GCC/ARM_CM3/portmacro.h": "2a29494e0b8c237cfe853d4a2e7a9b2a86cd05fc20a2be1ba46184c663477c9d", + "freertos_kernel/portable/GCC/ARM_CM33/non_secure/port.c": "9254d35345746f17ae47766e793c77d9594edc6243579b7d8157a93a0910c9d0", + "freertos_kernel/portable/GCC/ARM_CM33/non_secure/portasm.c": "91baafcd1489f9a5bf3ddb182d22e950fc376ae5c217680ce537520dbd604ea8", + "freertos_kernel/portable/GCC/ARM_CM33/non_secure/portasm.h": "eb63e885f48f5d45b649ead271bfce54c81d82fd42e0355072375e5af6d16c0c", + "freertos_kernel/portable/GCC/ARM_CM33/non_secure/portmacro.h": "cc8b860d88403def6e05e30867056ed1ac0a993e4129c94733dd1fd767a7dd19", + "freertos_kernel/portable/GCC/ARM_CM33/secure/secure_context.c": "ca7338fa111e73eccf63059be2907542c788a3aa83365bdb94e207e1a0461116", + "freertos_kernel/portable/GCC/ARM_CM33/secure/secure_context.h": "2ce8be6ad0b523eb28b43eec91aba7213434c2393ac6b2192b1c5fbf9b43c2ac", + "freertos_kernel/portable/GCC/ARM_CM33/secure/secure_context_port.c": "8dcf437f45daf7524eecabf60a13816c4bdf14f43a9dfe4215203c61fd5edaa7", + "freertos_kernel/portable/GCC/ARM_CM33/secure/secure_heap.c": "15519a6878bec08878c8348e04cd271a3a520c031581663176fc0744369a0c9b", + "freertos_kernel/portable/GCC/ARM_CM33/secure/secure_heap.h": "97405b4c849d2b049989debb1f8fc57e9667736290a8afbffe29e633de6c27fe", + "freertos_kernel/portable/GCC/ARM_CM33/secure/secure_init.c": "a5974925bf9d6a3e6c95f13133266fc96acdd0cd9b8bc2e4be58187f06f71160", + "freertos_kernel/portable/GCC/ARM_CM33/secure/secure_init.h": "ed955f1e93779ad64b03873c63b45feec9fb145fcb0bcb8fa0869748f6f96744", + "freertos_kernel/portable/GCC/ARM_CM33/secure/secure_port_macros.h": "4b3d4543b6abb076c4a07da977eef326bf5b8c205142861c5e8c2ddb2d5f511f", + "freertos_kernel/portable/GCC/ARM_CM33_NTZ/non_secure/port.c": "9254d35345746f17ae47766e793c77d9594edc6243579b7d8157a93a0910c9d0", + "freertos_kernel/portable/GCC/ARM_CM33_NTZ/non_secure/portasm.c": "c1beb1d1e88c3859adfd6d13e2b0dc478abc144924caef37a63d6b674aa77ae8", + "freertos_kernel/portable/GCC/ARM_CM33_NTZ/non_secure/portasm.h": "eb63e885f48f5d45b649ead271bfce54c81d82fd42e0355072375e5af6d16c0c", + "freertos_kernel/portable/GCC/ARM_CM33_NTZ/non_secure/portmacro.h": "cc8b860d88403def6e05e30867056ed1ac0a993e4129c94733dd1fd767a7dd19", + "freertos_kernel/portable/GCC/ARM_CM3_MPU/port.c": "14f2ed29b3c658c566191c5ee995c4ecdcb4c74a5fac996fc2f97a98be456858", + "freertos_kernel/portable/GCC/ARM_CM3_MPU/portmacro.h": "b5f990b832b5407dda4952cc6ac33b105ba2bcd29cc3ee322fca5fea3ab0104f", + "freertos_kernel/portable/GCC/ARM_CM4F/port.c": "057f2e1d6abd50188f1f8d001ff0337deb60d6cec9a6f86999b1f1a88eea447a", + "freertos_kernel/portable/GCC/ARM_CM4F/portmacro.h": "f1f1a07b0345074533318e69678421c938bbb864de750c01017ec3a252ee853f", + "freertos_kernel/portable/GCC/ARM_CM4_MPU/port.c": "a0338a4aadad31eb91a536e89c1abe150e03aa1b966dd2595e7ef3712d0bfb77", + "freertos_kernel/portable/GCC/ARM_CM4_MPU/portmacro.h": "435b4b56ed7640cbea4719affc66e5b446d6d54a0e64b9ec1b731d527d437f54", + "freertos_kernel/portable/GCC/ARM_CM7/ReadMe.txt": "4061394a651eb7e4624abad4ec719148e153bd8eae666d0530319d83f9b39aa7", + "freertos_kernel/portable/GCC/ARM_CM7/r0p1/port.c": "9f22ac414d370340b2f8014989ade1f7e4dc1da10b25b544e30de1414917993b", + "freertos_kernel/portable/GCC/ARM_CM7/r0p1/portmacro.h": "fa291ede5ede1c8f7a70412c0ff1e40cae2aec1a5efba38b1d2d81e76b168508", + "freertos_kernel/portable/GCC/ARM_CR5/port.c": "b53d5efe6ecdef6fc4a0c9eaf6f66c45053fa1d9210495580c21c1f17b462de9", + "freertos_kernel/portable/GCC/ARM_CR5/portASM.S": "24373bfd9349d20b94b8e050cd4a66acbfaaf157eaf200089a586a1f90be80ab", + "freertos_kernel/portable/GCC/ARM_CR5/portmacro.h": "c904fd0410b6c5ee0af155b8530041d56c198dc1511e3ee897fcea1c78e0cb58", + "freertos_kernel/portable/GCC/ARM_CRx_No_GIC/port.c": "9c62f8a08abbb11a878ecf934093f9edd98c721f05c60512a75926ca71c6f4b4", + "freertos_kernel/portable/GCC/ARM_CRx_No_GIC/portASM.S": "cc809e9a9aebfaff4a9b8e30f2ef5f9371ce4a1cc5d6e701bac584c6c1b82ad7", + "freertos_kernel/portable/GCC/ARM_CRx_No_GIC/portmacro.h": "cb7bcd78648505473048f21966cea33e8bb923904c19175b4ab82ac740a8973a", + "freertos_kernel/portable/GCC/ATMega323/port.c": "1079ff281e0bc22670aec7f46fe004beaae679d8ffd44dfd2f50a15fec6c677d", + "freertos_kernel/portable/GCC/ATMega323/portmacro.h": "dfd23076fc989fa1afa01c10c085fa72150b518a7c2c6cd382ef1332eda9122e", + "freertos_kernel/portable/GCC/AVR32_UC3/exception.S": "8f3d945d526ff31d6e4303bd6b2bb55c85e2c2498c08194f95740e516c2c433d", + "freertos_kernel/portable/GCC/AVR32_UC3/port.c": "6a8fb77834ae5a4732a51da3013e5f78b5cf85fab469278b2e9a5c933530fb3b", + "freertos_kernel/portable/GCC/AVR32_UC3/portmacro.h": "296f3ab0d72fb275c2ca11c6506d1ad323213d3d3ca5a9caf0fbb6fe4bc016bc", + "freertos_kernel/portable/GCC/AVR_AVRDx/port.c": "782632583ad4a3a4a8a1a52c0284703a1644249c3aa4d4ec2a15ce72e68d2fe6", + "freertos_kernel/portable/GCC/AVR_AVRDx/porthardware.h": "3b64b4d72e6f95c048b6822a92ae00cb600ce9d9e32bc72abbe32889cf822028", + "freertos_kernel/portable/GCC/AVR_AVRDx/portmacro.h": "7691e593f41573d86568ca0a8c0860c527b1de51f2c5b15c9738e2cc28ac623c", + "freertos_kernel/portable/GCC/AVR_Mega0/port.c": "219956cb72450f417332d070bbfa20f3ce45e56c6a06f329887e03b293112f82", + "freertos_kernel/portable/GCC/AVR_Mega0/porthardware.h": "d267a6b2518f4ba3dcf211a592cc293490fff1b85cc7168db75ffdde129c0510", + "freertos_kernel/portable/GCC/AVR_Mega0/portmacro.h": "66747480f4f3c3077612ec5828ef1be5c6826081a6802d7d22098b06a56b0289", + "freertos_kernel/portable/GCC/CORTUS_APS3/port.c": "a70ec824dc632ead2396a41e7dafd0b2a8b3ac387cad1941754e2559c58b2ce6", + "freertos_kernel/portable/GCC/CORTUS_APS3/portmacro.h": "4bfa1c21e7dde156eacfdbb5d441d4de82b33f4f541e7b0e1e0a1922f0900007", + "freertos_kernel/portable/GCC/ColdFire_V2/port.c": "2518bcc1c5539052565a7ea22fbf2c856658afb7bb952dff0e9a7df5c5875bf8", + "freertos_kernel/portable/GCC/ColdFire_V2/portasm.S": "5149a5ba7a2ab179f79d4a46fb767aeae4b9aceef6ceca70e18381412f1ec705", + "freertos_kernel/portable/GCC/ColdFire_V2/portmacro.h": "f1941b9d877019c0689d70c992c4105e8b9db5ce24f52dc29d8dfe117b1b1431", + "freertos_kernel/portable/GCC/H8S2329/port.c": "c84ad89fdb43a1580417060b452f75ee0f7720b7a1acd29c0db6eb7d71b34d46", + "freertos_kernel/portable/GCC/H8S2329/portmacro.h": "d92a290ab90896c2a83f4b93d175631284630ac93a9a89eb2d83878462c741ca", + "freertos_kernel/portable/GCC/HCS12/port.c": "a7d9e4bdbc95e3c53707a3d4d0bda79c56d962b65e617491f12deeb7ce76d427", + "freertos_kernel/portable/GCC/HCS12/portmacro.h": "1398b281344d83637014836a45743d5b030ca6524b34a283652a5a9e7cc1cf0f", + "freertos_kernel/portable/GCC/IA32_flat/ISR_Support.h": "c862f470b1a5a66e2d9a5f89ee5d1e41c37281d86e8b1db61e54cf208afa9ced", + "freertos_kernel/portable/GCC/IA32_flat/port.c": "fe9d01965578754f6813715485755fa8ff307addd97bdf0592a1b28d8e91572a", + "freertos_kernel/portable/GCC/IA32_flat/portASM.S": "a31f94401a6c1d90047500cfd2d191172727af3eca825e82880301db64afa953", + "freertos_kernel/portable/GCC/IA32_flat/portmacro.h": "0da3639ad46d6cdf01d1bed3ff58cb1d960a8b9b67ed1b66b471458abb806463", + "freertos_kernel/portable/GCC/MCF5235/port.c": "c05e7609e30ce09e89fd372609361967ca7cf0a13140d48a6f3c21b4b79463c4", + "freertos_kernel/portable/GCC/MCF5235/portmacro.h": "69aa3ee2d7123a25dc0e3ad529bf5df24f5be379a7c7ad16ff454a84c93b4ee2", + "freertos_kernel/portable/GCC/MSP430F449/port.c": "3e9cddb8e1fe03cd49ed46662f7775fae1e1366469f5734b071b107e6a8a14c5", + "freertos_kernel/portable/GCC/MSP430F449/portmacro.h": "d0c21f91f3cb0aa4cb7182a3482baad5e86821261b668df7210ffb4bbc75bf7d", + "freertos_kernel/portable/GCC/MicroBlaze/port.c": "ab8d58a9aa7f97788c76c9e5d116cf4c6b10583a94ddae2de322edd9429acabe", + "freertos_kernel/portable/GCC/MicroBlaze/portasm.s": "be8c3729ce41a1f85bfb5d7733b5d3cd270cb342f89de4b24ac75da16dc8f3f7", + "freertos_kernel/portable/GCC/MicroBlaze/portmacro.h": "95320776eec571a83688724fb5f8270df4ea5eb5c8d099c5cd3e71b29723445c", + "freertos_kernel/portable/GCC/MicroBlazeV8/port.c": "df3ec3641eb0083b872cfe0d7dc7e272bdaa933ff959da7cef72d3930ea442dc", + "freertos_kernel/portable/GCC/MicroBlazeV8/port_exceptions.c": "efb92d1f5836cff3f20b894f04d4ef102a07f8330677f225932242a21863c30b", + "freertos_kernel/portable/GCC/MicroBlazeV8/portasm.S": "c62ab0e7050d8636d5e390bba3307322331d0b9b9c27b44303860e5172bf2d72", + "freertos_kernel/portable/GCC/MicroBlazeV8/portmacro.h": "169f3581a718ae4ecce02a4dd475c7f032b83c018831e461ed7bca30c0515119", + "freertos_kernel/portable/GCC/MicroBlazeV9/port.c": "1b6f8cbd89c030cd3678d132168ff64e1d4ba4a44e10cebdf9570b4febc4d037", + "freertos_kernel/portable/GCC/MicroBlazeV9/port_exceptions.c": "efb92d1f5836cff3f20b894f04d4ef102a07f8330677f225932242a21863c30b", + "freertos_kernel/portable/GCC/MicroBlazeV9/portasm.S": "c62ab0e7050d8636d5e390bba3307322331d0b9b9c27b44303860e5172bf2d72", + "freertos_kernel/portable/GCC/MicroBlazeV9/portmacro.h": "169f3581a718ae4ecce02a4dd475c7f032b83c018831e461ed7bca30c0515119", + "freertos_kernel/portable/GCC/NiosII/port.c": "ea3ca4821f1dca55aa659dba2b63f9fca4de08d7e344322feef8b5d586e01c0d", + "freertos_kernel/portable/GCC/NiosII/port_asm.S": "a4f47e2f7d20b79274c43a1e312d189459d9fc98d55478aa0d47a8a21b58b247", + "freertos_kernel/portable/GCC/NiosII/portmacro.h": "9ce152893ad1845097c01f4a2cd8a0f9b967891e212efa5d783ad1e2b85390af", + "freertos_kernel/portable/GCC/PPC405_Xilinx/FPU_Macros.h": "663bd22588b69a380ea4c6a6b3134229b38a7c718b8c3c107b3b6f4b3bac71b7", + "freertos_kernel/portable/GCC/PPC405_Xilinx/port.c": "1e3bcfc61ced3009a81882a412e5b6bc6662eda2bfa8e78b417c38959c3442d3", + "freertos_kernel/portable/GCC/PPC405_Xilinx/portasm.S": "44b28d81c73c782bb7cbc03f826bd886a196081abb292b9cf6a7969e02add68c", + "freertos_kernel/portable/GCC/PPC405_Xilinx/portmacro.h": "04fc50d27d9e81bd98ad399e6bfd1b59ca27824afb285b3d7fddf3e9f528aff0", + "freertos_kernel/portable/GCC/PPC440_Xilinx/FPU_Macros.h": "663bd22588b69a380ea4c6a6b3134229b38a7c718b8c3c107b3b6f4b3bac71b7", + "freertos_kernel/portable/GCC/PPC440_Xilinx/port.c": "5b5ee01e9183d29e3bd8aa00d5a96533d60da6d8d9f20f499a97e4cae19d4528", + "freertos_kernel/portable/GCC/PPC440_Xilinx/portasm.S": "44b28d81c73c782bb7cbc03f826bd886a196081abb292b9cf6a7969e02add68c", + "freertos_kernel/portable/GCC/PPC440_Xilinx/portmacro.h": "04fc50d27d9e81bd98ad399e6bfd1b59ca27824afb285b3d7fddf3e9f528aff0", + "freertos_kernel/portable/GCC/RISC-V/Documentation.url": "03b58eac9262370ca618c78e81f36deca511ab3ff9142d719bae84afd9c9e865", + "freertos_kernel/portable/GCC/RISC-V/chip_specific_extensions/Pulpino_Vega_RV32M1RM/freertos_risc_v_chip_specific_extensions.h": "547cf38fd46e6b036860cd4e1c733cefafee91022e77dad2b34cdc2dbbe03c64", + "freertos_kernel/portable/GCC/RISC-V/chip_specific_extensions/RV32I_CLINT_no_extensions/freertos_risc_v_chip_specific_extensions.h": "8e0502a75ec1d25669a0a0e9e955f4522e53773282b41ca68355aed58e4574b8", + "freertos_kernel/portable/GCC/RISC-V/chip_specific_extensions/readme.txt": "9df008f8587b6faaaa48ef37ce9e38f89639290d636c06f5eefb09848ac318d1", + "freertos_kernel/portable/GCC/RISC-V/port.c": "7246d147706001999968d014a36c0d0fd2894bfb21512b668ae91af60a78ca2e", + "freertos_kernel/portable/GCC/RISC-V/portASM.S": "4dd985e3e1b68890fe06c6c9edf8bd5cae853fadcdc2bc18e2c94a418692ad5e", + "freertos_kernel/portable/GCC/RISC-V/portmacro.h": "cced653f2a223b5d705f3973a66d6e43d420ea28389369e78a378f0a2893a2ba", + "freertos_kernel/portable/GCC/RISC-V/readme.txt": "9df008f8587b6faaaa48ef37ce9e38f89639290d636c06f5eefb09848ac318d1", + "freertos_kernel/portable/GCC/RL78/isr_support.h": "ea1329df2360210274ab1d2e92d92f437c3f891a735f8ac21c66fcfb210c56e4", + "freertos_kernel/portable/GCC/RL78/port.c": "88681a7183c76ab8c8d0bc4e5497d64bc2a560bb4cd1499058ea700150e09ebf", + "freertos_kernel/portable/GCC/RL78/portasm.S": "fcbb7d9951ca0fec1aa2e5e8e9e87e54eb89f4ef55e261eefaaa3b1873959570", + "freertos_kernel/portable/GCC/RL78/portmacro.h": "47537e01d6b360fdd2da59aa9d2dc11d5a8a3091a40bdb26724f0090106b4d1a", + "freertos_kernel/portable/GCC/RX100/port.c": "89789084faa0afe64481c92594f26888db2fbb281cff53ba6b0538cee1144bde", + "freertos_kernel/portable/GCC/RX100/portmacro.h": "739b9b5650ed293f35270afa4a15c7379b5c962bff1b4f131cc97a3fcbc46de6", + "freertos_kernel/portable/GCC/RX100/readme.txt": "d6ea169fd33ff4a4795bbcce927793fbe9177e1788af89cc6a705d64a7106e8b", + "freertos_kernel/portable/GCC/RX200/port.c": "d4d63479be41c24b3c453e71d29f1caac3f42ec1b0de4f15470d1fea33d6cf6a", + "freertos_kernel/portable/GCC/RX200/portmacro.h": "fe9c886b2c63cb6bdcbfd00207cc18dacd59435f95a3e56c3638260be1956f1d", + "freertos_kernel/portable/GCC/RX600/port.c": "2b8a969a480033f49bdbea734e955ac4cade7a1bed04af06ed90093355e3abd7", + "freertos_kernel/portable/GCC/RX600/portmacro.h": "7c20830e3fa18f69b5193d759cf254360ca2c9ce84f3e01eefae9da643c39e12", + "freertos_kernel/portable/GCC/RX600/readme.txt": "d6ea169fd33ff4a4795bbcce927793fbe9177e1788af89cc6a705d64a7106e8b", + "freertos_kernel/portable/GCC/RX600v2/port.c": "fded6df2a8362893090d427b14f7acbead0e8deb4f268828299c9acc9fc0aab3", + "freertos_kernel/portable/GCC/RX600v2/portmacro.h": "7c20830e3fa18f69b5193d759cf254360ca2c9ce84f3e01eefae9da643c39e12", + "freertos_kernel/portable/GCC/RX600v2/readme.txt": "d6ea169fd33ff4a4795bbcce927793fbe9177e1788af89cc6a705d64a7106e8b", + "freertos_kernel/portable/GCC/RX700v3_DPFPU/port.c": "89ffd8ac4f9d0528b96dfbf5ba057f68996d8b34af7e21b7e728bce545baafb4", + "freertos_kernel/portable/GCC/RX700v3_DPFPU/portmacro.h": "8a8eece97eba36688e497b2104b034f851cd60d4b5689f79d36baae273a34265", + "freertos_kernel/portable/GCC/RX700v3_DPFPU/readme.txt": "d6ea169fd33ff4a4795bbcce927793fbe9177e1788af89cc6a705d64a7106e8b", + "freertos_kernel/portable/GCC/STR75x/port.c": "2a42d65c944433c256a9e0366092b0df052fddd40d35d3067b105b627f2b5cf3", + "freertos_kernel/portable/GCC/STR75x/portISR.c": "dec4fe09c32fc03d014f8868934874018f43c99bf6977a22f3ba973e24ce4532", + "freertos_kernel/portable/GCC/STR75x/portmacro.h": "7f6c4f054889e8310f5263b3c2ff7c0ad7a0b98cbdc4ee3b290a68f8437b71b3", + "freertos_kernel/portable/GCC/TriCore_1782/port.c": "a6198bcbe394eb0943aad0d1c59c373bf3223e0fcc8acc8c1d376551f5406260", + "freertos_kernel/portable/GCC/TriCore_1782/portmacro.h": "f731dfb32c867d302493c9e18ea49a590ba7f0ba2496a376961b79f130ece0e1", + "freertos_kernel/portable/GCC/TriCore_1782/porttrap.c": "e6df9eb9c6dce84a50ffbb37cac26337bab08415facd76ceead1c643727a6316", + "freertos_kernel/portable/IAR/78K0R/ISR_Support.h": "49c4fa21cb6bb8f7cc1b92a914cf97dc302e652ea38a60ce99f362aea6bbc913", + "freertos_kernel/portable/IAR/78K0R/port.c": "dddf260ccba67c1d0e34b3dc8d5a045b270086acd5bf663f3c50b3d607a54021", + "freertos_kernel/portable/IAR/78K0R/portasm.s26": "18401f53bc6514ede283dac8b2ce91e0b8523fd4f67a93f7b69dcc6958bc5e1c", + "freertos_kernel/portable/IAR/78K0R/portmacro.h": "b5995e64de5d88ec3e62b54fdf6f5b84d8f3defc648959c7708c8896f97c3b88", + "freertos_kernel/portable/IAR/ARM_CA5_No_GIC/port.c": "6a5e26065161b051259b2cd1d81f1f2d914d1e8e338618b802080802b02dfd7c", + "freertos_kernel/portable/IAR/ARM_CA5_No_GIC/portASM.h": "d92f9da4a2f5d9f3d8977995683ef97797ca3444805273ac3884a55cf6b223df", + "freertos_kernel/portable/IAR/ARM_CA5_No_GIC/portASM.s": "789aeb05b0f0a0007b51e5d8aed838968a2d70cb4a82f7adc82c9c8f3fe7dffe", + "freertos_kernel/portable/IAR/ARM_CA5_No_GIC/portmacro.h": "3ffdb387d178093088ee0e50c2b839c61c583beec8a3a1fb34ed59b771330759", + "freertos_kernel/portable/IAR/ARM_CA9/port.c": "3555f85dd7e442789e3b75fb93ae44877ea9060356614050144de5dc88ae6240", + "freertos_kernel/portable/IAR/ARM_CA9/portASM.h": "ab5873837e5f5e52dff3f35fb1a2982a3bbf84d0743cab22ea89f45af054f648", + "freertos_kernel/portable/IAR/ARM_CA9/portASM.s": "bbfc5a61d6c94560591ca69717dcabf770f3da9f8d1c21b3b81b0a44d8a2e3a5", + "freertos_kernel/portable/IAR/ARM_CA9/portmacro.h": "fde5514437f5de407ed792b5ab6f6de91d2d343005ef20d252a72deeb29c660d", + "freertos_kernel/portable/IAR/ARM_CM0/port.c": "44a338445d511022fca618e4802c8dc9d7ab799873beb795ff4d17f81c8fae2d", + "freertos_kernel/portable/IAR/ARM_CM0/portasm.s": "e92b1aee884b8d1ce3aeaf56c520fa6b1a5cd5b4f4a6e76d55332b034f5056fe", + "freertos_kernel/portable/IAR/ARM_CM0/portmacro.h": "d9f513c0764293112dd601064de6d4c3cd1b5997603b0f67a6ca1f47e14dad61", + "freertos_kernel/portable/IAR/ARM_CM23/non_secure/port.c": "9254d35345746f17ae47766e793c77d9594edc6243579b7d8157a93a0910c9d0", + "freertos_kernel/portable/IAR/ARM_CM23/non_secure/portasm.h": "eb63e885f48f5d45b649ead271bfce54c81d82fd42e0355072375e5af6d16c0c", + "freertos_kernel/portable/IAR/ARM_CM23/non_secure/portasm.s": "05b44efce09dcf8b9bc78d0a8e4223a1aaf1477585e1eb9c202d8deb06db903b", + "freertos_kernel/portable/IAR/ARM_CM23/non_secure/portmacro.h": "ecf7789333d2eae4dffa36cadd312dddcaed2db135ab0ed60f80064bf75e35a2", + "freertos_kernel/portable/IAR/ARM_CM23/secure/secure_context.c": "ca7338fa111e73eccf63059be2907542c788a3aa83365bdb94e207e1a0461116", + "freertos_kernel/portable/IAR/ARM_CM23/secure/secure_context.h": "2ce8be6ad0b523eb28b43eec91aba7213434c2393ac6b2192b1c5fbf9b43c2ac", + "freertos_kernel/portable/IAR/ARM_CM23/secure/secure_context_port.c": "c713b3a7c72b12ae6c6c0dea892d6ffeba6db514e8e2dd7d52404273d9262934", + "freertos_kernel/portable/IAR/ARM_CM23/secure/secure_context_port_asm.s": "f465c2aca32ba9fc79850599422baa1b78a86e8cb182099e8f73298c835fef8e", + "freertos_kernel/portable/IAR/ARM_CM23/secure/secure_heap.c": "15519a6878bec08878c8348e04cd271a3a520c031581663176fc0744369a0c9b", + "freertos_kernel/portable/IAR/ARM_CM23/secure/secure_heap.h": "97405b4c849d2b049989debb1f8fc57e9667736290a8afbffe29e633de6c27fe", + "freertos_kernel/portable/IAR/ARM_CM23/secure/secure_init.c": "a5974925bf9d6a3e6c95f13133266fc96acdd0cd9b8bc2e4be58187f06f71160", + "freertos_kernel/portable/IAR/ARM_CM23/secure/secure_init.h": "ed955f1e93779ad64b03873c63b45feec9fb145fcb0bcb8fa0869748f6f96744", + "freertos_kernel/portable/IAR/ARM_CM23/secure/secure_port_macros.h": "4b3d4543b6abb076c4a07da977eef326bf5b8c205142861c5e8c2ddb2d5f511f", + "freertos_kernel/portable/IAR/ARM_CM23_NTZ/non_secure/port.c": "9254d35345746f17ae47766e793c77d9594edc6243579b7d8157a93a0910c9d0", + "freertos_kernel/portable/IAR/ARM_CM23_NTZ/non_secure/portasm.h": "eb63e885f48f5d45b649ead271bfce54c81d82fd42e0355072375e5af6d16c0c", + "freertos_kernel/portable/IAR/ARM_CM23_NTZ/non_secure/portasm.s": "99e2d5762155e1d4f4ea426ca32c8daaa3135606345b69ec67cabefbdba0597a", + "freertos_kernel/portable/IAR/ARM_CM23_NTZ/non_secure/portmacro.h": "2aedeeb50a4c2e57278cc5e85fa80ac1afb4d00fd6f34449f94822808a7bb96d", + "freertos_kernel/portable/IAR/ARM_CM3/port.c": "ab3ca84d8c3596865978d15835e5764268c33eaed9b860441c8a7b32d7b7757f", + "freertos_kernel/portable/IAR/ARM_CM3/portasm.s": "c55ce3368add7bb5027b1c05e4e781b811217f6680e05100fcb2a57e579a543c", + "freertos_kernel/portable/IAR/ARM_CM3/portmacro.h": "91a78cffde945daf74cea1f21c96638e4e35c5a36ea0049e161afc4b62a104c7", + "freertos_kernel/portable/IAR/ARM_CM33/non_secure/port.c": "9254d35345746f17ae47766e793c77d9594edc6243579b7d8157a93a0910c9d0", + "freertos_kernel/portable/IAR/ARM_CM33/non_secure/portasm.h": "eb63e885f48f5d45b649ead271bfce54c81d82fd42e0355072375e5af6d16c0c", + "freertos_kernel/portable/IAR/ARM_CM33/non_secure/portasm.s": "1559d8a1be13c51a6af0e94fce8f960c286bb22ef7ad21202d627aff03f4473f", + "freertos_kernel/portable/IAR/ARM_CM33/non_secure/portmacro.h": "0d0cdb539f5c681aa83f5a78e2395fa776a3f48e312a404f134efb903f88cbd2", + "freertos_kernel/portable/IAR/ARM_CM33/secure/secure_context.c": "ca7338fa111e73eccf63059be2907542c788a3aa83365bdb94e207e1a0461116", + "freertos_kernel/portable/IAR/ARM_CM33/secure/secure_context.h": "2ce8be6ad0b523eb28b43eec91aba7213434c2393ac6b2192b1c5fbf9b43c2ac", + "freertos_kernel/portable/IAR/ARM_CM33/secure/secure_context_port.c": "c713b3a7c72b12ae6c6c0dea892d6ffeba6db514e8e2dd7d52404273d9262934", + "freertos_kernel/portable/IAR/ARM_CM33/secure/secure_context_port_asm.s": "b3a7ea032cbc07f0cef45c2dceb9643c3c6c25cf15689fb0509a31b2a6ee2d84", + "freertos_kernel/portable/IAR/ARM_CM33/secure/secure_heap.c": "15519a6878bec08878c8348e04cd271a3a520c031581663176fc0744369a0c9b", + "freertos_kernel/portable/IAR/ARM_CM33/secure/secure_heap.h": "97405b4c849d2b049989debb1f8fc57e9667736290a8afbffe29e633de6c27fe", + "freertos_kernel/portable/IAR/ARM_CM33/secure/secure_init.c": "a5974925bf9d6a3e6c95f13133266fc96acdd0cd9b8bc2e4be58187f06f71160", + "freertos_kernel/portable/IAR/ARM_CM33/secure/secure_init.h": "ed955f1e93779ad64b03873c63b45feec9fb145fcb0bcb8fa0869748f6f96744", + "freertos_kernel/portable/IAR/ARM_CM33/secure/secure_port_macros.h": "4b3d4543b6abb076c4a07da977eef326bf5b8c205142861c5e8c2ddb2d5f511f", + "freertos_kernel/portable/IAR/ARM_CM33_NTZ/non_secure/port.c": "9254d35345746f17ae47766e793c77d9594edc6243579b7d8157a93a0910c9d0", + "freertos_kernel/portable/IAR/ARM_CM33_NTZ/non_secure/portasm.h": "eb63e885f48f5d45b649ead271bfce54c81d82fd42e0355072375e5af6d16c0c", + "freertos_kernel/portable/IAR/ARM_CM33_NTZ/non_secure/portasm.s": "42ca7bcd0f3f0119ee957ffd69b8fd5f4f97eff8b94aeb4ac9454468f88dd481", + "freertos_kernel/portable/IAR/ARM_CM33_NTZ/non_secure/portmacro.h": "0d0cdb539f5c681aa83f5a78e2395fa776a3f48e312a404f134efb903f88cbd2", + "freertos_kernel/portable/IAR/ARM_CM4F/port.c": "58b89174a266658ca133f94d5c2bed8de67b57ef8e7d3317a972d675941bdf51", + "freertos_kernel/portable/IAR/ARM_CM4F/portasm.s": "9ea6203a65789bfb3c2498782ffa15de6ed958d4690f0aea976900c60e2cbbd0", + "freertos_kernel/portable/IAR/ARM_CM4F/portmacro.h": "c3bec472b026fc62b86399462e26c1ef3ba46861d4c16460ddb80e583758c26e", + "freertos_kernel/portable/IAR/ARM_CM4F_MPU/port.c": "058c0b23102494dbe584f6e2f3b0f99dea814f44a28c0e04e3f4ccfdae3792b0", + "freertos_kernel/portable/IAR/ARM_CM4F_MPU/portasm.s": "66cebd2925938fc66130dda373b1f4d20edfc87abfbe6ed82273d1b62e7b190c", + "freertos_kernel/portable/IAR/ARM_CM4F_MPU/portmacro.h": "63dc9ffc2bc7b8a5dac4ecf5260da45639c260fb91b65a61742bd4a496008324", + "freertos_kernel/portable/IAR/ARM_CM7/ReadMe.txt": "9991c375912b69f89d97fd3451459a4980f97787c6cb5c21d64e520bfb7c688e", + "freertos_kernel/portable/IAR/ARM_CM7/r0p1/port.c": "fa48cc7c3ef3162f8fad0e69157dc7e87bfc975af01374f9d7e7e2b6e9f241a2", + "freertos_kernel/portable/IAR/ARM_CM7/r0p1/portasm.s": "497e1e18e63810d9eb8920335ea034031267d9a5860e9ca0bdd394fa65521c48", + "freertos_kernel/portable/IAR/ARM_CM7/r0p1/portmacro.h": "394f8cf9701b3c0e8dacfdd3d1c069dea214e9c009a5331f96c21bc48dd4c3c5", + "freertos_kernel/portable/IAR/ARM_CRx_No_GIC/port.c": "3cb0e101d2cee2f5072e1d352e19896b1b139bcf455130f7cd778a57b72f895f", + "freertos_kernel/portable/IAR/ARM_CRx_No_GIC/portASM.s": "c19388cd0e6b4e20c4f35176e5f6905b0d2d712ec5ce55f83762e12261fc9260", + "freertos_kernel/portable/IAR/ARM_CRx_No_GIC/portmacro.h": "5550db9f1b5f9f55c08ab53aaf8b4a5788fcd3c6b8a4280cf0753afc5f0a21e3", + "freertos_kernel/portable/IAR/ATMega323/port.c": "f0eb947e65001716aba9e9bbd9f1038806cf204533c03881f2527b3050356697", + "freertos_kernel/portable/IAR/ATMega323/portmacro.h": "fbdf5ebbb79bdd704a76dd251a8ded037edc8d639ec871300709c45b49f60053", + "freertos_kernel/portable/IAR/ATMega323/portmacro.s90": "0827ce04165aea404a125460e334ed80f4929fdbf57453c4cdedf725435942bb", + "freertos_kernel/portable/IAR/AVR32_UC3/exception.s82": "b51ccec0ffabcfed5003f0c96a8124a2050c94a5d5dbfc0a0eb11e58d9ca0176", + "freertos_kernel/portable/IAR/AVR32_UC3/port.c": "42356698b922d2f0fd1fdbb39e39e5c1b86bafaa332dfed90407e71494614aab", + "freertos_kernel/portable/IAR/AVR32_UC3/portmacro.h": "4c1e556d050bbbd667ac0ce936964e57afc0e0476c142c227af109fb75d19e56", + "freertos_kernel/portable/IAR/AVR32_UC3/read.c": "07b6384e325351be59fe01133c233180002e059fc4c084a2d8ece4f989c06aa8", + "freertos_kernel/portable/IAR/AVR32_UC3/write.c": "49735b1d2fa89c09f15859dcd26aa7e3899736df65a4f98770300de01243dacb", + "freertos_kernel/portable/IAR/AVR_AVRDx/port.c": "845c13e95199e0735f7ee2e44570f0ddb7f397861c9dcd065ad5b8f5430483ef", + "freertos_kernel/portable/IAR/AVR_AVRDx/porthardware.h": "02a304f91a8b029872dc79719e33c9b6f6dde539ba3e7ef798804e9aa4a8ab25", + "freertos_kernel/portable/IAR/AVR_AVRDx/portmacro.h": "d29af5ea7336cb7665ba3b4799f988c57f20dad2f2c757930ac7d012bab9d356", + "freertos_kernel/portable/IAR/AVR_AVRDx/portmacro.s90": "8356cb427a2df08c7cc8ce59417e5a959f4ffd7bb8328fc8d6e0b82c71158900", + "freertos_kernel/portable/IAR/AVR_Mega0/port.c": "5b94af6f8ea91259048a7acd4ae78d548a3954506abb73065ca8387c94393380", + "freertos_kernel/portable/IAR/AVR_Mega0/porthardware.h": "2c2edbc3d4bc6a1d0b5c60df5c297d65fdd9053217795a423adf6bfc12803ed3", + "freertos_kernel/portable/IAR/AVR_Mega0/portmacro.h": "d29af5ea7336cb7665ba3b4799f988c57f20dad2f2c757930ac7d012bab9d356", + "freertos_kernel/portable/IAR/AVR_Mega0/portmacro.s90": "319f42d18038b2e6b9f76807d812b964a7089ef4a4bb689fb45cadc1cd9707dd", + "freertos_kernel/portable/IAR/AtmelSAM7S64/AT91SAM7S64.h": "8f3f98a3f183dd173a22541819cf794565f6bd35d4db4b664a8f35f05fbf6063", + "freertos_kernel/portable/IAR/AtmelSAM7S64/AT91SAM7S64_inc.h": "1544c69c8783880a35cee8ffa24e3e65e289f596c03d8b9f35a31a3eb7b025f1", + "freertos_kernel/portable/IAR/AtmelSAM7S64/AT91SAM7X128.h": "ee7d97e30cfb971f74db814397bfef83f028e0c7e55c990438cfe33e6765c0dd", + "freertos_kernel/portable/IAR/AtmelSAM7S64/AT91SAM7X128_inc.h": "361996a9bed51f37cb9b0a2bda0e4544dc4e4cd44d75c5788e1074cfe17cd56e", + "freertos_kernel/portable/IAR/AtmelSAM7S64/AT91SAM7X256.h": "f49159a259b685e876d394efb010eb1d06cb0346118715f054e252725d981702", + "freertos_kernel/portable/IAR/AtmelSAM7S64/AT91SAM7X256_inc.h": "2c6ca0cd41436c8c5ecaaa461084cd1675a7e24d58c6ace888927fca5e262bc9", + "freertos_kernel/portable/IAR/AtmelSAM7S64/ISR_Support.h": "add4c3b80e0922e4ca573e712311ca9e7a47ce93ef3ff6bc5251ba67894cb4b6", + "freertos_kernel/portable/IAR/AtmelSAM7S64/lib_AT91SAM7S64.h": "46d53b158ebe5cffa94bc80c9d6b0fafb1790bb741c5be562775f630bdb55dbe", + "freertos_kernel/portable/IAR/AtmelSAM7S64/lib_AT91SAM7X128.h": "a1068f757db5c02d2725a76f4e2ba8cd79aa288be3ed5fc2804f0cde9f4a0169", + "freertos_kernel/portable/IAR/AtmelSAM7S64/lib_AT91SAM7X256.h": "2c4e3aef15483db5c6ec459c275b8ed06eb14e484484f1215139dba779b10a11", + "freertos_kernel/portable/IAR/AtmelSAM7S64/port.c": "358fb4b0b2c2629fe8476e7cda2b1d796cf4eebc21e8098b88d15c592cf72422", + "freertos_kernel/portable/IAR/AtmelSAM7S64/portasm.s79": "de60896a04d8ca00ada31fcc3496eee2bd5e08e254ec261a6a9a5164942b82b8", + "freertos_kernel/portable/IAR/AtmelSAM7S64/portmacro.h": "950091c804f35743f9009bf4e82dcf2cb9812d537fd17dfa80984864100a7940", + "freertos_kernel/portable/IAR/AtmelSAM9XE/ISR_Support.h": "85dc8f5d2615969b89ffbf48c42ae3dce8145742dd7d8d3e886f91e3863ce7cb", + "freertos_kernel/portable/IAR/AtmelSAM9XE/port.c": "a9cf6f6d87a6d4df0afad8239c8f8cabc0361dd73f5abc47ce3fd0410c401f26", + "freertos_kernel/portable/IAR/AtmelSAM9XE/portasm.s79": "1cb65e6f59c63aefb1e030a9a564ce76b9237ba542c2559f6cfe69aeffd47d42", + "freertos_kernel/portable/IAR/AtmelSAM9XE/portmacro.h": "be214f5b9102c1e5b042075b11529769665c8078a3ca472a066b059b15760110", + "freertos_kernel/portable/IAR/LPC2000/ISR_Support.h": "add4c3b80e0922e4ca573e712311ca9e7a47ce93ef3ff6bc5251ba67894cb4b6", + "freertos_kernel/portable/IAR/LPC2000/port.c": "1f37f95032aaa5362205938fa0dd615e06ae51b62a8945bf2c17a8714a513d02", + "freertos_kernel/portable/IAR/LPC2000/portasm.s79": "61cbaa6c7bf636d698d014de1c70adb2caa488843184918557ee88fd1b1ef738", + "freertos_kernel/portable/IAR/LPC2000/portmacro.h": "c2e50768defe621f05d3ea1f4e92457f325bd52e969f3c442ae26c14f15d8689", + "freertos_kernel/portable/IAR/MSP430/port.c": "989a17561d6880e7f32fb829ab631a0d2c81b7d07739b42b445a0bad17218e6d", + "freertos_kernel/portable/IAR/MSP430/portasm.h": "d7dc1118a347859ad24cf928e57c024827d603c5a0af43a171502058f5c04f0b", + "freertos_kernel/portable/IAR/MSP430/portext.s43": "03e035bf8143bb3b7cb80d363a53b344dc528ef2a615429d12ea8b6385fa92ed", + "freertos_kernel/portable/IAR/MSP430/portmacro.h": "1f5e395c30da4e5755e60dcc5fe002a1b6dcc0515438405ec20dc23b4e990ae3", + "freertos_kernel/portable/IAR/MSP430X/data_model.h": "93ba6d2b721e3ff7867fbbf95827c04832c2a128aabca0ab36d0944c994c48e0", + "freertos_kernel/portable/IAR/MSP430X/port.c": "ae82c9f9cc6fba7c08230e239b964253b925aae0b41ac3b680b0a6ee143e6300", + "freertos_kernel/portable/IAR/MSP430X/portext.s43": "9dd2c5e57642e79679ccb5254f846ea815c01fc4570c63e7266e0acf202602df", + "freertos_kernel/portable/IAR/MSP430X/portmacro.h": "9c02699a8d2280703df0f1f424b2d0729a0c9386e9d2ecab2187eabdb6658cbf", + "freertos_kernel/portable/IAR/RISC-V/Documentation.url": "03b58eac9262370ca618c78e81f36deca511ab3ff9142d719bae84afd9c9e865", + "freertos_kernel/portable/IAR/RISC-V/chip_specific_extensions/RV32I_CLINT_no_extensions/freertos_risc_v_chip_specific_extensions.h": "2ee09f9af6419a1aa2a3bdd270f54a1123a1ae1a211d9d73ed8300995c19bea8", + "freertos_kernel/portable/IAR/RISC-V/chip_specific_extensions/readme.txt": "9df008f8587b6faaaa48ef37ce9e38f89639290d636c06f5eefb09848ac318d1", + "freertos_kernel/portable/IAR/RISC-V/port.c": "66b2aaa1439abca011d4597851c356b36b34d86c42dff72af2ae08a23158417f", + "freertos_kernel/portable/IAR/RISC-V/portASM.s": "d7e7e5a5ab45ac277bdcbdb7f1b320208a4cc032a8d652247678e6f55ccc175b", + "freertos_kernel/portable/IAR/RISC-V/portmacro.h": "a8a89b0c110601e158f6e6f3f17ac2222cad3f9429360cff304058946a9f3da9", + "freertos_kernel/portable/IAR/RISC-V/readme.txt": "9df008f8587b6faaaa48ef37ce9e38f89639290d636c06f5eefb09848ac318d1", + "freertos_kernel/portable/IAR/RL78/ISR_Support.h": "e008f96483eb3d83104b1cfff05373f8dea88cfde36ca6d546a8736043efaf54", + "freertos_kernel/portable/IAR/RL78/port.c": "5f0c1551c45b548844e622c660bbbff06b1cbef7bb3136197db8c896e8c4a9be", + "freertos_kernel/portable/IAR/RL78/portasm.s87": "8794a885bed97a12facf098530c518830f727b09a109891b1eca86471806071d", + "freertos_kernel/portable/IAR/RL78/portmacro.h": "7148b2e24fb081cdf6c47044a887c639628349ff77f43b9326d44701d5fa2b04", + "freertos_kernel/portable/IAR/RX100/port.c": "f20a403caf13a3920ab8a56d2c2cdcc0719bd42916638ccd720de1af124ff61f", + "freertos_kernel/portable/IAR/RX100/port_asm.s": "9771fba1048b00c1f546427d18457bedecb6bcf4e9b87161fc82e4a00ad7d832", + "freertos_kernel/portable/IAR/RX100/portmacro.h": "62da25ed1615c747a20b2de2f6b36da049a3415309365ae9e243fe07ed0499ab", + "freertos_kernel/portable/IAR/RX100/readme.txt": "d6ea169fd33ff4a4795bbcce927793fbe9177e1788af89cc6a705d64a7106e8b", + "freertos_kernel/portable/IAR/RX600/port.c": "bcf665fe9aeadcdd6ec28606f5982bf9d68c48835ecb6c29532d56055793ff9b", + "freertos_kernel/portable/IAR/RX600/port_asm.s": "8869f2e43d1c9351894ab7940db9f7bf347de1e8ae7397c66c2db20df73e8f1e", + "freertos_kernel/portable/IAR/RX600/portmacro.h": "276b27f599b6a926a9ebc2224f09b6f9662d86ce8cd0d50967b07951e96740f6", + "freertos_kernel/portable/IAR/RX600/readme.txt": "d6ea169fd33ff4a4795bbcce927793fbe9177e1788af89cc6a705d64a7106e8b", + "freertos_kernel/portable/IAR/RX700v3_DPFPU/port.c": "e6ece452249a334b7e60ab7c4ab2486782dbebd153943b1146d97453b19dbc09", + "freertos_kernel/portable/IAR/RX700v3_DPFPU/portmacro.h": "eb17d2bd787cf1658ea3a3e59086e69f32cc102220b484145a73f0f91749f6e2", + "freertos_kernel/portable/IAR/RX700v3_DPFPU/readme.txt": "d6ea169fd33ff4a4795bbcce927793fbe9177e1788af89cc6a705d64a7106e8b", + "freertos_kernel/portable/IAR/RXv2/port.c": "0638d6d85e5a71d2d475ea33bbd2c19d994a88cac0aa0afd479ea028bf7044b9", + "freertos_kernel/portable/IAR/RXv2/port_asm.s": "1755cdaf7f77322637473a4330c2c68d4ddb4f646c3f626e93f91d36790bd6ad", + "freertos_kernel/portable/IAR/RXv2/portmacro.h": "6a587f64626a6d115b65cdece034a43a4a17aa576062ba47e87d7b0eb9cd2704", + "freertos_kernel/portable/IAR/RXv2/readme.txt": "d6ea169fd33ff4a4795bbcce927793fbe9177e1788af89cc6a705d64a7106e8b", + "freertos_kernel/portable/IAR/STR71x/ISR_Support.h": "add4c3b80e0922e4ca573e712311ca9e7a47ce93ef3ff6bc5251ba67894cb4b6", + "freertos_kernel/portable/IAR/STR71x/port.c": "8cb9a0fdd4bd1a6957300777a2f95431cd921004b03f34991c05edf59a272268", + "freertos_kernel/portable/IAR/STR71x/portasm.s79": "01ac09e0bccc05614f73d1d98d3f39a817fdde08ba1ba5fcab50e7e3f1caca0a", + "freertos_kernel/portable/IAR/STR71x/portmacro.h": "481a38d4329d3424db62230c44d822c161eb07425c3703788c811822882bd2e3", + "freertos_kernel/portable/IAR/STR75x/ISR_Support.h": "add4c3b80e0922e4ca573e712311ca9e7a47ce93ef3ff6bc5251ba67894cb4b6", + "freertos_kernel/portable/IAR/STR75x/port.c": "2f4b0911cfbee7aaabb57bb6c430b0d448f68997db9c3befbabf9fc66f6823de", + "freertos_kernel/portable/IAR/STR75x/portasm.s79": "a4da47642e9a8fdf34091f1fadab85a4257063873982886389ba97fef2d841d1", + "freertos_kernel/portable/IAR/STR75x/portmacro.h": "9cee353805475007f6230c5a0cfa3ca2381d23d07763750b5783e4a2ab543d66", + "freertos_kernel/portable/IAR/STR91x/ISR_Support.h": "8881773e0bc4fcd3ee841be5c73bc93ec28585848b2e05183d576deae228f285", + "freertos_kernel/portable/IAR/STR91x/port.c": "2cbc370d6fba697e758e0b7a923e25b76a8f0ebf6a26f9225338de94c717ede5", + "freertos_kernel/portable/IAR/STR91x/portasm.s79": "7933ceeaeb21063f50f571621108741c5d497514474b83e0d8349228a9e4ff27", + "freertos_kernel/portable/IAR/STR91x/portmacro.h": "dae23d9be190af232de3db2b0b02136fe7c68fdbbbde37a56bb8ab81e91852a8", + "freertos_kernel/portable/IAR/V850ES/ISR_Support.h": "ed05648fad710f756aed5d67eb1ea074339f3fe3e27eeb2629814c16cbcf8b7f", + "freertos_kernel/portable/IAR/V850ES/port.c": "3d916bc4fd1179346d020d6932d0b5a2745d6e8c2fd5b841f9d29da17a5e96ce", + "freertos_kernel/portable/IAR/V850ES/portasm.s85": "6279eb11a42af766f4f6ea8846a8172b1b46f7cf7e6b018e1affd05c393cb9cf", + "freertos_kernel/portable/IAR/V850ES/portasm_Fx3.s85": "47b395d22e8269ed79bdf80f352838fd911430517ab947c7ff39046776144fdf", + "freertos_kernel/portable/IAR/V850ES/portasm_Hx2.s85": "cb18f8b4b1da5469613c9979fa258fd4083f0a500623481acafa10dec2e3c509", + "freertos_kernel/portable/IAR/V850ES/portmacro.h": "f85a898944430b45724e284b7e689966284f994401a2cbf55ec406d70815a9fa", + "freertos_kernel/portable/Keil/See-also-the-RVDS-directory.txt": "d872e8e4176213ea84ebc76d8fb621c31b4ca116fd0a51258813e804fe110ca4", + "freertos_kernel/portable/MPLAB/PIC18F/port.c": "491002fc37e9801b0014d3ff772abf445e4cc2508eccef630d2e42160f582ce1", + "freertos_kernel/portable/MPLAB/PIC18F/portmacro.h": "c278df8a3a0bf2cd1cc70ac0790ffe62f7f4c2e06a1d38822caaa932d41010ac", + "freertos_kernel/portable/MPLAB/PIC18F/stdio.h": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "freertos_kernel/portable/MPLAB/PIC24_dsPIC/port.c": "2bdd28da57d2fa6999fa2f59c8f21f5ea62f36583c1d40324d2dcf9494897326", + "freertos_kernel/portable/MPLAB/PIC24_dsPIC/portasm_PIC24.S": "2bd05a5dcf3d277007bc4ee1e97802b5c24f3a4fbc7803730da895fabff58ed6", + "freertos_kernel/portable/MPLAB/PIC24_dsPIC/portasm_dsPIC.S": "974250f6b45968976372e54511bd6535f16a2a7285bf86e22e63b9ad8c838a26", + "freertos_kernel/portable/MPLAB/PIC24_dsPIC/portmacro.h": "21e4ed57b6eaeb970873889e7394f67a94b67bdc9c7b02807da80fbe91e06dfc", + "freertos_kernel/portable/MPLAB/PIC32MEC14xx/ISR_Support.h": "766c40397d453ed8971ed89557d84274d097d8b685a354f563ed1b47dbea6e2b", + "freertos_kernel/portable/MPLAB/PIC32MEC14xx/port.c": "e7b4b4b9aa471ae2468fba83d8b5392ef21543e27c5a3f7a0b8a2d53fd6d8952", + "freertos_kernel/portable/MPLAB/PIC32MEC14xx/port_asm.S": "464c91c49dbf9dd66cd6d08b83e2dcd0681261a0ab0f279e1cd514d4659cd4ad", + "freertos_kernel/portable/MPLAB/PIC32MEC14xx/portmacro.h": "fa2717c38d51c630c4e5f3db51b309ba16092c37fe64975fdc94297770f95511", + "freertos_kernel/portable/MPLAB/PIC32MX/ISR_Support.h": "fe19583bc3d3dbb0361eb27fa4420e227146417e0104f00f176a281c3dc8290f", + "freertos_kernel/portable/MPLAB/PIC32MX/port.c": "99de2064584b2716062b690b05109af4cd209f109a03f70a7f4a2fbfb02cd413", + "freertos_kernel/portable/MPLAB/PIC32MX/port_asm.S": "4f722672dd8f7bc2fd98d6d5eb4bfd70e1425c61ddae35453661d647a1267c3d", + "freertos_kernel/portable/MPLAB/PIC32MX/portmacro.h": "bea1af28d2086922b16228cb994935cc661694471b963556be96acd422b5850b", + "freertos_kernel/portable/MPLAB/PIC32MZ/ISR_Support.h": "6849aa04c3c7346b06876487841f2bb8ccb79e5da3ccb17ba32202706fdf62a5", + "freertos_kernel/portable/MPLAB/PIC32MZ/port.c": "86c3c01593b7c72fed03c708ec37a949cf01c8ac12b16c9481bfbae5eed5af38", + "freertos_kernel/portable/MPLAB/PIC32MZ/port_asm.S": "a3459454016cdd169083799218837402368a732351ad1b3ce7c367d995c92ac8", + "freertos_kernel/portable/MPLAB/PIC32MZ/portmacro.h": "638ff0815b6c32bb344224c3da01ae6edb43be67a60ccd1140bb0d28d52227d5", + "freertos_kernel/portable/MSVC-MingW/port.c": "806397b20853428c47d0803c56a633d929654a79802a225fad8457225661604c", + "freertos_kernel/portable/MSVC-MingW/portmacro.h": "f5b415ea227339d70f3651bbad18bfa5ce9d88afbbdcfe42a3526373bb485889", + "freertos_kernel/portable/MemMang/ReadMe.url": "c44abcb1837584d65d00768bde7c1471dbf3fe316275ccbb6922998c6f11ddc9", + "freertos_kernel/portable/MemMang/heap_1.c": "6e8a3fa2316ac964a3df68dbee80bd5df0c72af2d36d884ff7e420abeb05cf16", + "freertos_kernel/portable/MemMang/heap_2.c": "9b1757a23e930354b711303356fb89964a75c62199719c40bc2abcec5bf71349", + "freertos_kernel/portable/MemMang/heap_3.c": "7ea069f198d4c417465803d78a7acaeb142cb900d8ba15ec05ff2eb8809ec8d4", + "freertos_kernel/portable/MemMang/heap_4.c": "fbffb85f8f74fd2f57492e513b9abee0836e89390b0acccd5fcb45a0a0c08fa9", + "freertos_kernel/portable/MemMang/heap_5.c": "56dbe256ddffbb7c4d23c2fa716714017fc0eceab691f5fafdbc8988932d1c6a", + "freertos_kernel/portable/MikroC/ARM_CM4F/port.c": "077d8d71c6e0a15bd819bc1f9568a3dac45aab5171eef05b54ccfc9524fd57d3", + "freertos_kernel/portable/MikroC/ARM_CM4F/portmacro.h": "cc813c61b853b5db5d5371cb661c9ee5292e3f4ed1b01bb6b4b15587d772f31d", + "freertos_kernel/portable/Paradigm/Tern_EE/large_untested/port.c": "4aec8b8c47cacfcbc0ef943cd116ca3dbdd1e68ed83ce4ffbe90309294da9585", + "freertos_kernel/portable/Paradigm/Tern_EE/large_untested/portasm.h": "c37b5bc133887bb6467df3ad74610ed84b519466104e6a37bc0fb8eda2f5b457", + "freertos_kernel/portable/Paradigm/Tern_EE/large_untested/portmacro.h": "e208c41815c5387956e0ad2e1eca6f3d65faef53b15db562e120555aadace691", + "freertos_kernel/portable/Paradigm/Tern_EE/small/port.c": "a8d64a685c51bc0f877abcdf70425a0bf66b1a3b9a34f86d217d0b6492547f58", + "freertos_kernel/portable/Paradigm/Tern_EE/small/portasm.h": "bfc0be9a564b5e27fcb98f83cd0840bfae9cd57c9c895bafafc0a20d6d742561", + "freertos_kernel/portable/Paradigm/Tern_EE/small/portmacro.h": "0c8cf2ad450334282f8d98b56293fe1a0bfd959d466770a6c6572210433dd33d", + "freertos_kernel/portable/RVDS/ARM7_LPC21xx/port.c": "2c0dde68b8adc93c5d115d4ef5e1212260c3fb860735913e668f106c5127808d", + "freertos_kernel/portable/RVDS/ARM7_LPC21xx/portASM.s": "15900a3578fbc52bd1e6ff3423004a67146aca83e9271b2633f7d3455e21ed3c", + "freertos_kernel/portable/RVDS/ARM7_LPC21xx/portmacro.h": "39ccdd5e4e07c7d0f499fd341d2e0b34ba79af20a867053ae50241b9af7ddf84", + "freertos_kernel/portable/RVDS/ARM7_LPC21xx/portmacro.inc": "ff4e33fb48e1b6f3068644ce8c529abcbfaaadf87164bff6d88d794a219e9baf", + "freertos_kernel/portable/RVDS/ARM_CA9/port.c": "f44cc391da616b1bc5f01346d9f99ad37af0d78be50e33bac50a14a0748971b8", + "freertos_kernel/portable/RVDS/ARM_CA9/portASM.s": "302bc8f0fd647e42fa472c173f91cb58238ef1c6b8b9924578b89765fb49a202", + "freertos_kernel/portable/RVDS/ARM_CA9/portmacro.h": "b4d45e0be784fc52455c7bb0223e57b03f188220a8ed946e7e65c01116a47ba0", + "freertos_kernel/portable/RVDS/ARM_CA9/portmacro.inc": "9dba275f7c5eefd1e69bb63d048f42c9391027782fbe2fd440e719ebcf9b3cc2", + "freertos_kernel/portable/RVDS/ARM_CM0/port.c": "e44da16e24f70754ee46d27982456c7668c19c86471331e10a0eb75aca36bf25", + "freertos_kernel/portable/RVDS/ARM_CM0/portmacro.h": "0a2f9a3e6177e25d4ad45205fa2a45beff73c8a15e604ec2c093733eea14edaf", + "freertos_kernel/portable/RVDS/ARM_CM3/port.c": "ccf8fe8dc8d34cc838a13a30ced0ba62c11baf36200d08178deb31f85f7a94bf", + "freertos_kernel/portable/RVDS/ARM_CM3/portmacro.h": "0f8ea70dcefb51d933d7ee67dfbf4a57fea6fe597bc5e923a5ad63f99f8d1bc1", + "freertos_kernel/portable/RVDS/ARM_CM4F/port.c": "cb8fccbec5d87a9fdf9d55cd81cfe851e6848e44e54fb86c085cd842670f9c2d", + "freertos_kernel/portable/RVDS/ARM_CM4F/portmacro.h": "c6dcd3614d43ffdf80b803f8d5bef04e14ce9f5b12731a7b15fdf79837b858a8", + "freertos_kernel/portable/RVDS/ARM_CM4_MPU/port.c": "a2250862d16684b9957aef343b9b93fbae0fc135cdebc4cba765f6398a8a12b9", + "freertos_kernel/portable/RVDS/ARM_CM4_MPU/portmacro.h": "2f92ec48c9db3f6d00e41997eaedb34e19dbfecdd6b140509638e07145781b27", + "freertos_kernel/portable/RVDS/ARM_CM7/ReadMe.txt": "713e476f526189b6e505b019c8053cfb6c49d3e921ba7345d59413bd0c35815f", + "freertos_kernel/portable/RVDS/ARM_CM7/r0p1/port.c": "3a442338cdf026594c6a10abf49b013c70143819fe0b5e5fe7d724370b871d3f", + "freertos_kernel/portable/RVDS/ARM_CM7/r0p1/portmacro.h": "56c8f8aba8345bf20aefe61817f3a078ab063d01de8b109050197797fdccb37c", + "freertos_kernel/portable/Renesas/RX100/port.c": "83e6a8dfef7edf9258ee43f472412af0995cfcd926d128b9c3da5038d3bcbda8", + "freertos_kernel/portable/Renesas/RX100/port_asm.src": "1bc123bc8a9c21dee027439e124d51a9d0a2e8de1d8908e10db8975ffd81b223", + "freertos_kernel/portable/Renesas/RX100/portmacro.h": "376f88542e8b09b4ee82f9d6c5a6259a58f101d72b5dfa98297a56918273692a", + "freertos_kernel/portable/Renesas/RX100/readme.txt": "d6ea169fd33ff4a4795bbcce927793fbe9177e1788af89cc6a705d64a7106e8b", + "freertos_kernel/portable/Renesas/RX200/port.c": "e4ea5f4dd562bb0708353d43bb4cddc5f3746833dbc9be8aa4c87ddb7157d8c3", + "freertos_kernel/portable/Renesas/RX200/port_asm.src": "1bc123bc8a9c21dee027439e124d51a9d0a2e8de1d8908e10db8975ffd81b223", + "freertos_kernel/portable/Renesas/RX200/portmacro.h": "68d7c64cb25337a9751e8b49eda3c0a7ec249238b250900bd50b13a1ca46626a", + "freertos_kernel/portable/Renesas/RX200/readme.txt": "d6ea169fd33ff4a4795bbcce927793fbe9177e1788af89cc6a705d64a7106e8b", + "freertos_kernel/portable/Renesas/RX600/port.c": "4e00da3fc7958dadd89e8b21d92b3a7eb2f8d45b56de8248fb18e08ea0c8a426", + "freertos_kernel/portable/Renesas/RX600/port_asm.src": "1bc123bc8a9c21dee027439e124d51a9d0a2e8de1d8908e10db8975ffd81b223", + "freertos_kernel/portable/Renesas/RX600/portmacro.h": "8fe1670362bf1e6bcf83a61c70496e3c77e37f369bc26c5e5cc7f937b159b767", + "freertos_kernel/portable/Renesas/RX600/readme.txt": "d6ea169fd33ff4a4795bbcce927793fbe9177e1788af89cc6a705d64a7106e8b", + "freertos_kernel/portable/Renesas/RX600v2/port.c": "f5cb4f40f01e3f2ab3435b46df2b60122681010de6b7f804352e612540f82bae", + "freertos_kernel/portable/Renesas/RX600v2/port_asm.src": "6cec79c3c7f8c776dc544a0f3ccc0bb2aee0c53c1c56a3254e3322372bd1ca7d", + "freertos_kernel/portable/Renesas/RX600v2/portmacro.h": "0fb064ecb09e784f4707b7977a5c1e96249472234d69c30fbafc506b0da8c96c", + "freertos_kernel/portable/Renesas/RX600v2/readme.txt": "d6ea169fd33ff4a4795bbcce927793fbe9177e1788af89cc6a705d64a7106e8b", + "freertos_kernel/portable/Renesas/RX700v3_DPFPU/port.c": "ba5bfe651ea80c98e95016e028736259ebba2e8fc9b0705a74be5945a68e263a", + "freertos_kernel/portable/Renesas/RX700v3_DPFPU/port_asm.src": "6cec79c3c7f8c776dc544a0f3ccc0bb2aee0c53c1c56a3254e3322372bd1ca7d", + "freertos_kernel/portable/Renesas/RX700v3_DPFPU/portmacro.h": "f0fe4f391223c5ea3b38acadb8adae025d0cf79032d5cc05a5ed12bc0b6d2076", + "freertos_kernel/portable/Renesas/RX700v3_DPFPU/readme.txt": "d6ea169fd33ff4a4795bbcce927793fbe9177e1788af89cc6a705d64a7106e8b", + "freertos_kernel/portable/Renesas/SH2A_FPU/ISR_Support.inc": "048a871fbf88a965ee51e742532fadecbff657d865fdfdaba142c69910513e94", + "freertos_kernel/portable/Renesas/SH2A_FPU/port.c": "11a3997f49ba5c95d416c80b1c67fa8f6fed810a31e00af500b9ff90ea119c45", + "freertos_kernel/portable/Renesas/SH2A_FPU/portasm.src": "02eafbd8e6aa9f4ef38b5211fb5a9348463faffe79a2c9549d2aaf7a292b16ce", + "freertos_kernel/portable/Renesas/SH2A_FPU/portmacro.h": "ffa4c3800e8c2a06496eb5d077ac0ba5b4911a71eae435716e59dbb6e5b4a431", + "freertos_kernel/portable/Rowley/ARM7/readme.txt": "84a1379723e3ca3cb47a540622ed62e9900410ce65ea0584ce22426cbaf6745b", + "freertos_kernel/portable/Rowley/MSP430F449/port.c": "021a4732bea5d55b68078ef9814275da7141752e37382f307223119e26f8282c", + "freertos_kernel/portable/Rowley/MSP430F449/portasm.h": "3344acd67fac5e8cc9f686e904788fe33c9ea37c996f0b867f3938568aa84e57", + "freertos_kernel/portable/Rowley/MSP430F449/portext.asm": "a4a33905c370eb247a53034b67dc756ce94c10764c1c9a3e40ffe2018ad798ad", + "freertos_kernel/portable/Rowley/MSP430F449/portmacro.h": "ebe69afe0b854a46b7790f886feb4d6d47a171a7b7105e5f17ac237f7f04e497", + "freertos_kernel/portable/SDCC/Cygnal/port.c": "a9626e4a1defca32bf9bc6b3bb5325b100f82379b35b15be2d8609db191af259", + "freertos_kernel/portable/SDCC/Cygnal/portmacro.h": "ee89c6de1ef5c5bf6921c77459573fbd6be3a07a8a4dae8f02dc2394e595ed31", + "freertos_kernel/portable/Softune/MB91460/__STD_LIB_sbrk.c": "92debca0c186966aaef800acd2a8f7cfdbddff1dca9eedc32fa28ecb473780ba", + "freertos_kernel/portable/Softune/MB91460/port.c": "e92751bcfd883fcfdcaff47045bf8c40fe6da2f4319049ca9ee067f798899bd7", + "freertos_kernel/portable/Softune/MB91460/portmacro.h": "7921ebc2f459c0441f8c6f073443a672529ee8e1134d216d38eb91c3fe43f9eb", + "freertos_kernel/portable/Softune/MB96340/__STD_LIB_sbrk.c": "70c748e9ded5a641b171124480225a336bb8b043c94bc13dc38e7574e59ad324", + "freertos_kernel/portable/Softune/MB96340/port.c": "f4f45dfdc3195309a9dad120093a61bf0452b374587104b776e9d42b0865a9e8", + "freertos_kernel/portable/Softune/MB96340/portmacro.h": "19aad7f7a8377b1e7467b53c688f1bb84ee30dbe6d697d3854d08ab906785dc6", + "freertos_kernel/portable/Tasking/ARM_CM4F/port.c": "171332de6d8fbf8a277129869460ca5a8879389f815e1d7ab2692f7370051c1d", + "freertos_kernel/portable/Tasking/ARM_CM4F/port_asm.asm": "8424f07f8caa1137772fcc6dd6045dffe846777c236b3c6fc21d230187de0a50", + "freertos_kernel/portable/Tasking/ARM_CM4F/portmacro.h": "62039eef1f2db61bf3bc54f2aecd72b88364e923a9844d28118cd32d1c9ecdac", + "freertos_kernel/portable/ThirdParty/CDK/T-HEAD_CK802/port.c": "c40c3e54391a3fdb2902aa21eff8b77cbf46658a3917a968d0d912a914daa5d3", + "freertos_kernel/portable/ThirdParty/CDK/T-HEAD_CK802/portasm.S": "6db273fb79cfb3b9fa6bf69b15c72b2e462047a4ebdc70e08af5e62296c13f48", + "freertos_kernel/portable/ThirdParty/CDK/T-HEAD_CK802/portmacro.h": "5b94cbc518978e9cd356fb95c9cd5ade37c1ff307f0621146473d2e69ed8f6ff", + "freertos_kernel/portable/ThirdParty/GCC/ARC_EM_HS/arc_freertos_exceptions.c": "514db0072d69bdb2bdb69ccf7f6468069b18744adac8ede36ac996142473bf60", + "freertos_kernel/portable/ThirdParty/GCC/ARC_EM_HS/arc_freertos_exceptions.h": "7d0aeda3ff36d41f5cf9cfe5ef0c1a0b94e35876bee15b19e4b2998c64261776", + "freertos_kernel/portable/ThirdParty/GCC/ARC_EM_HS/arc_support.s": "6bdde99b3e9ad896b74f5c9ee2ff29bfa66aa41a6267926d149ca0941d9c6343", + "freertos_kernel/portable/ThirdParty/GCC/ARC_EM_HS/freertos_tls.c": "33c3e48ebfc051f9d8704b560448766d48886e7a4da6271e6860f643f64b7c3a", + "freertos_kernel/portable/ThirdParty/GCC/ARC_EM_HS/port.c": "348d3a6737d428d31eb3c48faea9f9d5323601e533d9e209c7cd87042de2c5fb", + "freertos_kernel/portable/ThirdParty/GCC/ARC_EM_HS/portmacro.h": "bc28b0cf17e2bf45629ec786cd03c7d03fc714e3427ba4c03111a4b7ee22cc2f", + "freertos_kernel/portable/ThirdParty/GCC/ARC_v1/arc_freertos_exceptions.c": "514db0072d69bdb2bdb69ccf7f6468069b18744adac8ede36ac996142473bf60", + "freertos_kernel/portable/ThirdParty/GCC/ARC_v1/arc_freertos_exceptions.h": "7d0aeda3ff36d41f5cf9cfe5ef0c1a0b94e35876bee15b19e4b2998c64261776", + "freertos_kernel/portable/ThirdParty/GCC/ARC_v1/arc_support.s": "9efd05da2a30fee6314761283cfa0fade930038577371adfcc6d156f46d3a036", + "freertos_kernel/portable/ThirdParty/GCC/ARC_v1/port.c": "9eb2d28534fe8650b659e964742a0c41289121b0a580d1ce0bbd1005b7d5cc5f", + "freertos_kernel/portable/ThirdParty/GCC/ARC_v1/portmacro.h": "340f2ebd074cc64dd4c7afd7b775bf123840d3b58714c3b7c7805b1312b42d93", + "freertos_kernel/portable/ThirdParty/GCC/ARM_CM33_TFM/README.md": "5ef03f6137a0d76ea2eaf353bc1bba01d226f7b6c83138ffd6f26b45baecdf9e", + "freertos_kernel/portable/ThirdParty/GCC/ARM_CM33_TFM/os_wrapper_freertos.c": "c982e5b278797178f627213a52d0f8ee1ede312d26fc78d7721e684f3044fa51", + "freertos_kernel/portable/ThirdParty/GCC/ATmega/port.c": "fdb1dfcef9aeec51e9a7ab1511d7c36686bb306a3311aceaeca83a166d8dc05b", + "freertos_kernel/portable/ThirdParty/GCC/ATmega/portmacro.h": "23fa1599ec51e8df67629495fc787d2c77623479a47d860c16baf409a8c5fcd5", + "freertos_kernel/portable/ThirdParty/GCC/ATmega/readme.md": "f219267f64c4cb262bc08de164d801509d27bccb7e77881a1fe18ab4ae289c3a", + "freertos_kernel/portable/ThirdParty/GCC/Posix/FreeRTOS-simulator-for-Linux.url": "79fbc2c019622ca13d55d76c41d600a1bf52d31bc5348597dfc0164957520939", + "freertos_kernel/portable/ThirdParty/GCC/Posix/port.c": "8de47ed3c654e2a87e189a389e22cb763d0eb6de880a48a50928823eca56de60", + "freertos_kernel/portable/ThirdParty/GCC/Posix/portmacro.h": "a7013de63af5cfe2aea4864a7b9b734e91e7f0390c36803a1a3020a8a75d22fe", + "freertos_kernel/portable/ThirdParty/GCC/Posix/utils/wait_for_event.c": "1ddfc0eb3b6428a2e247f97427ecf0685be8d2a88c55d9cf02f59f8b2d38bcbb", + "freertos_kernel/portable/ThirdParty/GCC/Posix/utils/wait_for_event.h": "b60bc7226d152b654e5aa3644c99cb46943288ff268e12d84a9d7f1fe147815a", + "freertos_kernel/portable/ThirdParty/GCC/RISC-V/README-for-info-on-official-MIT-license-port.txt": "84f2893ac61214ea73c695911a13b27bda63a7e6d58e0bf90587bd369d214d17", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/FreeRTOS-openocd.c": "04439bc16c9e004f0bc9d194741d5fec816e2dd1f5e1c4c3963538921eea5dff", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/include/portbenchmark.h": "dcfdac565c63234879de523170b862604850cc0336ca7c6cb5430945f40fdb8b", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/include/portmacro.h": "b7004272e01e10c7a34f845fef5a6fcb680f8af2e2b7f5fd4cccf85f361a5793", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/include/xtensa_api.h": "ca9a563740926f8e7f4c9416d839fb2b01850969860f4ed46b6c18c88b6b99fd", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/include/xtensa_config.h": "bb279022f7498d5a34e71198ffc8c7df5ef1b5a02a47b4bfee77e07679376035", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/include/xtensa_context.h": "691ecd4526fd59eb13b6ab5636b429d1e85bc93de21ec3aba0094c92d57a2786", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/include/xtensa_rtos.h": "d9b8a4388d73a8b91fe6b37436c5ce8e9e1846c17391dcfbda1791ce2ca69ff7", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/include/xtensa_timer.h": "445c8a982fd4234143da61ca0c7a622bbf5929d76fc1e971398c8ecaba4bc3f7", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/port.c": "71e33de0f0680e1ffcae2a62d7d20112466a4b37b3ccb8b8aa31ae127b3cb221", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/portasm.S": "23286f7351106a181324a918a57f560373e2b5f0bb7fa3e101db0a50ae6eb7bb", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/portmux_impl.h": "5cbf3188e197f82a93f456c0f75e4aba54b6312e0f9dd510c2f4323839ca25f7", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/portmux_impl.inc.h": "c1e451823cc388152f0d034e9ca3103eb106d6e763fa27d0d2156aabc8cd81f0", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/xtensa_context.S": "b9d8c64d04b26831a1d15d73647d14f8cd37a3132200c3442ddbcd78692addf9", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/xtensa_init.c": "ddc16959787fdd6487855103a5f1fc6cf0f606b14bc7a2baad99c210afbaf21b", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/xtensa_intr.c": "c8bfbc77c9ba4f7e952578a103874ccd8b5b33ddd87af11d6bb2222dfd7e244d", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/xtensa_intr_asm.S": "c8e9e144c40182f486f1a02057d37fe6619f710812a6b7e53c6881ad592eb96f", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/xtensa_loadstore_handler.S": "f20aa8a42bdcbec471278a2e8a26592997e4b04965668694d504e073c08f1bb8", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/xtensa_overlay_os_hook.c": "171fc98a4981b0f468560b5cc81affe92589c087ff76745576577820b99840aa", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/xtensa_vector_defaults.S": "c5abcdff7fda5b3c50cbcae88d3acb7eacf2f3fb6da1699d4cc4655494449347", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32/xtensa_vectors.S": "47ca2b6631fdc803e338d80c4b7e13d80e0ca50b9918cecbc06e44098c0338c3", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/FreeRTOS-openocd.c": "04439bc16c9e004f0bc9d194741d5fec816e2dd1f5e1c4c3963538921eea5dff", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/include/portbenchmark.h": "dcfdac565c63234879de523170b862604850cc0336ca7c6cb5430945f40fdb8b", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/include/portmacro.h": "11729a32654ea53404566903477acdf073a439efe637d93997241e15a40ccc88", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/include/xtensa_api.h": "ca9a563740926f8e7f4c9416d839fb2b01850969860f4ed46b6c18c88b6b99fd", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/include/xtensa_config.h": "bb279022f7498d5a34e71198ffc8c7df5ef1b5a02a47b4bfee77e07679376035", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/include/xtensa_context.h": "691ecd4526fd59eb13b6ab5636b429d1e85bc93de21ec3aba0094c92d57a2786", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/include/xtensa_rtos.h": "d9b8a4388d73a8b91fe6b37436c5ce8e9e1846c17391dcfbda1791ce2ca69ff7", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/include/xtensa_timer.h": "445c8a982fd4234143da61ca0c7a622bbf5929d76fc1e971398c8ecaba4bc3f7", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/port.c": "168dfdc0132b95b0b126db4da5d8a6223bf4065be6b6da203079f349ecc22a34", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/portasm.S": "e18c0feda7daa2a5abb31ff41180b9fd6fe57918743f1f0dfb2a0a99b255432a", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/portmux_impl.h": "5cbf3188e197f82a93f456c0f75e4aba54b6312e0f9dd510c2f4323839ca25f7", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/portmux_impl.inc.h": "c1e451823cc388152f0d034e9ca3103eb106d6e763fa27d0d2156aabc8cd81f0", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/xtensa_context.S": "b9d8c64d04b26831a1d15d73647d14f8cd37a3132200c3442ddbcd78692addf9", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/xtensa_init.c": "a2bef365b2bb4f0ca8ca6cbe869b6f729b764f8f94e63c5dee3daf6d6cfbee96", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/xtensa_intr.c": "86322a1638250a182a10f31982e940c5c375d2e956b3f0e2638981bac4069479", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/xtensa_intr_asm.S": "c8e9e144c40182f486f1a02057d37fe6619f710812a6b7e53c6881ad592eb96f", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/xtensa_loadstore_handler.S": "f20aa8a42bdcbec471278a2e8a26592997e4b04965668694d504e073c08f1bb8", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/xtensa_overlay_os_hook.c": "171fc98a4981b0f468560b5cc81affe92589c087ff76745576577820b99840aa", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/xtensa_vector_defaults.S": "d3f4e09fc2db0ffee54eecbc1c63132fe291a0841a9e390acd3440e453d1e9c0", + "freertos_kernel/portable/ThirdParty/GCC/Xtensa_ESP32_IDF3/xtensa_vectors.S": "f314d7f21b6e1986a5b6dea85a24a9dc3d57178c81618e6b438c726617195bed", + "freertos_kernel/portable/ThirdParty/XCC/Xtensa/Makefile": "62018ea2713263c1d80b4e67812100e057e014b5d87d4d539131e37d1e6f9d06", + "freertos_kernel/portable/ThirdParty/XCC/Xtensa/port.c": "6b570a2250aaa914b6e79626e257d3c32baea3eeb95f229c8d30c99c2c42e488", + "freertos_kernel/portable/ThirdParty/XCC/Xtensa/portasm.S": "898cf46ea426e0b0218b3045b28a0783990208fa100eb43b2adab0880f7d9853", + "freertos_kernel/portable/ThirdParty/XCC/Xtensa/portbenchmark.h": "69400a05d9c47211fc10781f5967c55e4d6476d6df940204b2fbbd455bceefee", + "freertos_kernel/portable/ThirdParty/XCC/Xtensa/portclib.c": "4209f60ed2909c3e41485981d6be308c8a3c31145d4a9f2a99cbae187cf95f0b", + "freertos_kernel/portable/ThirdParty/XCC/Xtensa/portmacro.h": "f7872eecdc8ab83a6fc10c8d3613b1995d6362141791175757c65e08e2f5fe1e", + "freertos_kernel/portable/ThirdParty/XCC/Xtensa/porttrace.h": "9c9097ff31d12b4dc627df17576ac8187bda6b6a20c2df7eac75c4b36159a908", + "freertos_kernel/portable/ThirdParty/XCC/Xtensa/readme_xtensa.txt": "051e57e3bce362384d01200b41bafe895b933be0c7686534e623405853374fae", + "freertos_kernel/portable/ThirdParty/XCC/Xtensa/xtensa_api.h": "b0de2bf6b2a24b19353189bca391df89b8a53f455dde46c97ea7685f76d61e23", + "freertos_kernel/portable/ThirdParty/XCC/Xtensa/xtensa_config.h": "caa8552f8beac3ffd619e99d0d11cd3d9baa67356d18693dda2df95a15c62cf4", + "freertos_kernel/portable/ThirdParty/XCC/Xtensa/xtensa_context.S": "90a79a5187cf5b7249e7fea665bd8a14d9d3f010c7357b13a74118f44eab3409", + "freertos_kernel/portable/ThirdParty/XCC/Xtensa/xtensa_context.h": "dec667e4afa0f7d80cff7fa803a70947328a86fec6c3bedc590edbe433367328", + "freertos_kernel/portable/ThirdParty/XCC/Xtensa/xtensa_init.c": "bab8cb718be58ec77896514063706c0d92530962becd7217dd2fb168b0dc1a06", + "freertos_kernel/portable/ThirdParty/XCC/Xtensa/xtensa_intr.c": "bc1b4d1487e472294f54aa5274f056d9fa37a68ce155973c63e4e4cf6849b156", + "freertos_kernel/portable/ThirdParty/XCC/Xtensa/xtensa_intr_asm.S": "fa4fc88cb8fa69aa16eec52c809e28504e58f675498ed7fa1117f4bc928c3c86", + "freertos_kernel/portable/ThirdParty/XCC/Xtensa/xtensa_overlay_os_hook.c": "562662e7df519a1408ce68fb295223fa66fa871d72e124dc620b1bc987e0f858", + "freertos_kernel/portable/ThirdParty/XCC/Xtensa/xtensa_rtos.h": "b578b18489c7519a0286d9497cded9dc49e4c6e9d98a3b59593dd627e7aeed5c", + "freertos_kernel/portable/ThirdParty/XCC/Xtensa/xtensa_timer.h": "5380b8b46d8b03ef5c54d74727190d908fe1732b306adb91dfd3befb5934135e", + "freertos_kernel/portable/ThirdParty/XCC/Xtensa/xtensa_vectors.S": "bf8719c48506db41ab1385046ab78b23477656b3eba0135e203df8779e4c3555", + "freertos_kernel/portable/WizC/PIC18/Drivers/Tick/Tick.c": "026a596ebdaebb0bf9d3a66f9a70f80ae60a90758330f82df8aae4be1de82a5c", + "freertos_kernel/portable/WizC/PIC18/Drivers/Tick/isrTick.c": "6fe71f48ecc05bc823a306181c18c8e3e27ecf63fd6279c52d59e5c2065041f7", + "freertos_kernel/portable/WizC/PIC18/Install.bat": "38cc1f0ec2d0af3ae1c7bb4b12d137914114cc8e278b9f8a32deb4c463f9834b", + "freertos_kernel/portable/WizC/PIC18/addFreeRTOS.h": "30313e6d6194453d22a294ddaa15ef28c7ada2419f00dee1b2785fe833743d34", + "freertos_kernel/portable/WizC/PIC18/port.c": "286159abf90fdd253dd6ebe8edd5050c07e097cbf26d4cd1175ecd8294fe22bc", + "freertos_kernel/portable/WizC/PIC18/portmacro.h": "8d2783c3893d5dc15ebf25650d1562b41a2e2167114b93da3ed9e1111cc7c4b7", + "freertos_kernel/portable/oWatcom/16BitDOS/Flsh186/port.c": "0518429e9028599b7a703d8113a166cf13725686375cae43546715c6620a3c81", + "freertos_kernel/portable/oWatcom/16BitDOS/Flsh186/portmacro.h": "7e9f410c73b9f4faae2c46edf91650f66c1bfa075b10d1143cb4351b69f4dfb1", + "freertos_kernel/portable/oWatcom/16BitDOS/PC/port.c": "80eff294e3d0502206151b82936c59e80a18c2a07699e101bce964224deee490", + "freertos_kernel/portable/oWatcom/16BitDOS/PC/portmacro.h": "9680d012c3646bb3ac060b3a652b3a72f8d2f526464f0add3b4a6b704e09b4db", + "freertos_kernel/portable/oWatcom/16BitDOS/common/portasm.h": "f8694b255ade04e05ce286eada59a6cd2e1ec7a48b971c2c31b22f6c5581625d", + "freertos_kernel/portable/oWatcom/16BitDOS/common/portcomn.c": "d10a2e5f6f4377bfaf30403e15acf5a24bf80755a3a280657793fa239bd71aae", "freertos_kernel/portable/readme.txt": "e8738d9630ac5218f576a6bd51b64052966e26d87b61c4673eef963767f43048" - }, + }, "location": "freertos_kernel/portable" } - ], + ], "required_files": { - "demos/CMakeLists.txt": "e1a11a664dc54b5a09d340094e09b36ef47f3b49200f22a527676a77ac3ad167", - "demos/README.md": "e1cca6698cc63794a4f8d02a181e880abffdf436fc1f6ca264d32fee6522a809", - "demos/ble/README.md": "7afc1253b4286497f499cbf32cb9c683d9487bb6251eba37c0d8a77a54dd6780", - "demos/ble/gatt_server/CMakeLists.txt": "152eeb517a01301fbea83c736f0271fe9b632dceb2157038ac08bdbddce93dee", - "demos/ble/gatt_server/aws_ble_gatt_server_demo.c": "e2a609607ae8c79f32a49ed73ac336e7a839aab7ddc567ef1352f636a5175dfa", - "demos/ble/mqtt_ble/CMakeLists.txt": "4f90e24641015772c80219a4d1ef4597c38cc7abd89ce36d737f02a6d879076b", - "demos/ble/mqtt_ble/mqtt_demo_ble_transport.c": "ab620a734d5edde9b5bab23d6bc6e5bd1b61cbaca68248826d4833ae16c25e4c", - "demos/ble/numeric_comparison/CMakeLists.txt": "35998f0a565000bb3158f0c63164aad7685dd4d6d7dcc4b2782f6b9af64c5589", - "demos/ble/numeric_comparison/iot_ble_numericComparison.c": "b7dab338b69058ec780c7ff56b0856be0c6023aa244f603651328f6c5211c03f", - "demos/ble/shadow_ble/CMakeLists.txt": "ef375f456597e61b844287be7ae3c6498fd0d66e30df1623de3db05a59f944d1", - "demos/ble/shadow_ble/shadow_demo_ble_transport.c": "e6416b0b6a0679e27669873cd5a0e7f5b3f33c5bdbf484587894eed4be17da1c", - "demos/cli/CMakeLists.txt": "39a38609feffe4b42f70c14aaefa2a04df3be45aed9cfb32c7621e2aa64becde", - "demos/cli/README.md": "03c46cacf4eb8ab860f1a337454c36c45d75d560a2852ac8d3132fb1bce0e222", - "demos/cli/cli_uart_demo.c": "0327cb0583dc562f71ccd3f54af2c6da085952e5656a53c1a2c9f2f2d208960b", - "demos/coreMQTT/CMakeLists.txt": "f9f2741f9f7f4c4d90c2b842aa0d6f79987b282d4630c64f909396e9b502de2c", - "demos/coreMQTT/mqtt_demo_connection_sharing.c": "840f43642dea234fa6209e0f547ba7c7d8dfefe8206456b50d03826d34124441", - "demos/coreMQTT/mqtt_demo_mutual_auth.c": "93914b9d3ce72bfcff3dfa49bbbfa3bc4b1a683d76d863983b41af1ded6fa53d", - "demos/defender/CMakeLists.txt": "b3f4010fd23f131d054f5167aba38f466bc360b351e16ba2add61be2451d5357", - "demos/defender/aws_iot_demo_defender.c": "52a6bc764c600945cfff17028ced469605146e574d22655044d65c25cff4defa", - "demos/demo_runner/aws_demo.c": "a3b07e2ce3a49e2479a49cda2284d4b57729a25425d6056fed61d29e1f107d86", - "demos/demo_runner/aws_demo_network_addr.c": "a0e5f2c4ec43ec26eed8862e512518dcf7db1a96dc8e93bdb3043a9818e26232", - "demos/demo_runner/aws_demo_version.c": "ac90c8d8b97312db96c0c181adda62493da688da6ad43d92648192e122a2e184", - "demos/demo_runner/iot_demo_freertos.c": "2288b0d8c8cc761b38365dc16b39fbdbc89d63f5a6065f9e1c64899c352372ac", - "demos/demo_runner/iot_demo_runner.c": "3ce4a1cbfb49cd48422f37a89ad5d82470792f7dde38e6016299af93dd03ead2", - "demos/dev_mode_key_provisioning/CMakeLists.txt": "9f72c9c400638e5125b2a40fa70a783bb5f29196a673f3221c39d54f2a69222c", - "demos/dev_mode_key_provisioning/README.md": "ac9cdb2605b93dd736045006af72e9504fd3fa98bf968ae9d413ecfcb45fe3e3", - "demos/dev_mode_key_provisioning/include/aws_dev_mode_key_provisioning.h": "079763fcc863252808a888af5f98f001d06483ec4ddc7d6bb2b1a8b7bdd0fe57", - "demos/dev_mode_key_provisioning/src/aws_dev_mode_key_provisioning.c": "baa153ca7487377fe36c6ce1a60144420549e42908454cf6cec8afa5c27ea293", - "demos/device_shadow_for_aws/CMakeLists.txt": "e404d8259a1ad94404d14b4a8f55d4f67707ec342d82c1848b44cb43d4db3ba7", - "demos/device_shadow_for_aws/shadow_demo_helpers.c": "241b0c8d4bcd923a83fc804668f7358a59562e001349087770ef939ee8f78f6b", - "demos/device_shadow_for_aws/shadow_demo_helpers.h": "85af530c5502e3bac44b0c78b0678fb61a13ac38274918ef87c9ef20d1ab0767", - "demos/device_shadow_for_aws/shadow_demo_main.c": "b69d3c269a2505f2728777fde7f90b3649ac368c3c702811df7473338efe74ba", - "demos/directories.txt": "f830aa514024f3db8fa561be02901f07f46e4277b5c2f788e1224e5d0b12ad10", - "demos/greengrass_connectivity/CMakeLists.txt": "384633cdeea4ef23a740409dd969d7d426ec4539c2430f627c11181fc8a0ccc1", - "demos/greengrass_connectivity/README.md": "f698c41b63b8404fefaa80f41f5888fe99ae107fee5843ee56de7422a993d252", - "demos/greengrass_connectivity/aws_greengrass_discovery_demo.c": "17e0e128b80f1700c154ef8950e6542fa32a694b807dc2e222cb6f69558eb4bd", - "demos/https/CMakeLists.txt": "2aa4d11c37faa8d86897dd8a4403fb9982c91674491e693cf0256f8958aa20ed", - "demos/https/README.md": "8a6e9a40781b23892063f3cc347ae0f019589fb26a3e61bdbf2a1887ab5b54b2", - "demos/https/iot_demo_https_common.c": "148f69647db2682a17f9c64cfdf11811cf32581cba02979766681c939bc700d7", - "demos/https/iot_demo_https_common.h": "5f52600b639f626679c3fdc9233a0529e57faadbc76d73235e67a11804d63d29", - "demos/https/iot_demo_https_s3_download_async.c": "f1c77bac71bf0ccbafd72c59bbfded79151802a4b0efa7a535ccb773e3952310", - "demos/https/iot_demo_https_s3_download_sync.c": "ebbe88d338ae8fee90201dedad4270cd2ea52f86a06c4ad2c87c126bd3fbb44b", - "demos/https/iot_demo_https_s3_upload_async.c": "22723d1d86daf9ccb462eae933489273787c0061fd7c77251ee32a23d17c035a", - "demos/https/iot_demo_https_s3_upload_sync.c": "56de76659944f9cf8259fdeb31b569d609be8dc7723776fbc8ef3f4d0cc6f85c", - "demos/https/presigned_urls_gen.py": "7df741ff279df79dc8b44ada50c1736f0b14119752875db47812390b342e0fae", - "demos/include/aws_application_version.h": "7238b599867ee1f37fde3d8d8eb254529841e1e0f3e76f77a5d119023c39d77b", - "demos/include/aws_ble_gatt_server_demo.h": "3c220709c44bc0c9a6760af0f0a2c23f90a87a6624fdb8dc14b233800c604401", - "demos/include/aws_clientcredential.h": "f8bd45820b938329df1beef5ef70b043575df566ca87d208f17285550ec92c5b", - "demos/include/aws_clientcredential_keys.h": "120c7bc6ac30819f02381ee298b3c6dfe9f07878cac2a49642e6fb9ad74837e4", - "demos/include/aws_demo.h": "f3b856f28e3f82867abcfcfcbb4cd7cf74dbea47b5858fddb9f08cf22ffa5468", - "demos/include/aws_iot_demo_network.h": "5c13143d6b54f69e0ffd2867f83457cfbbba2c38e64f7367dfca185802189563", - "demos/include/aws_ota_codesigner_certificate.h": "16906143a64341c1615a57a7e617f8fec2287fd814092324005e3cc73d44be93", - "demos/include/aws_wifi_connect_task.h": "89ffc96084438fe75bc5b15a71ed79fa672e6a8e13a7c35d0793d41860cc9f11", - "demos/include/iot_ble_numericComparison.h": "fde6a2b673c62e4117752cbfac454b9b56856aacfc50b85a38380d55778297b7", - "demos/include/iot_config_common.h": "512acdefb6d3975bbdf0a8d107044af7326a64b6004c52802f2558a5422c36dd", - "demos/include/iot_demo_logging.h": "b6609bd75506b4227730a0ac77c6632162c48fe37dcfb7b7c44e5ca124c6e322", - "demos/include/iot_demo_runner.h": "abebde33c41b901c9b73bc73d877016b115461951a4c1bc4da333fe95c8b9d8b", - "demos/network_manager/aws_iot_demo_network.c": "1aa99906d14e3d226f9e4999392dee429e4fdf0632234e7d97f77375d69216c0", - "demos/network_manager/aws_iot_network_manager.c": "b5f6cb531f4e298afebc33addf7addc4dc44b456811fd331528f27cca9f3557d", - "demos/network_manager/iot_network_manager_private.h": "805841f41e3f2868162c5cde0ccaa52f6c3581c5c82e4d4488d719a4fc28924c", - "demos/ota/CMakeLists.txt": "97eb17c125e3b60bcebf1d5230cbd9da2ffe11d245ba642dd128c8c52965e89b", - "demos/ota/aws_iot_ota_update_demo.c": "5bb65ac3e2c40a3d18140eeab11233491e4e0ffd94a100c63bce3a8f1bde2012", - "demos/posix/CMakeLists.txt": "2ebbf9aac42e713a1b851c61fa9307be255528911ab3067e62064257a5ba6dc0", - "demos/posix/aws_posix_demo.c": "ef40251daf4d2123b1a9ac2c02d9deb2b3690f38bf5fbd7538231da6a68b8fe3", - "demos/tcp/CMakeLists.txt": "99e72686738645dc71be2b6f87ff5ed5e7ac320c3a2073e8be9598c5bd9110e4", - "demos/tcp/aws_tcp_echo_client_single_task.c": "8324894526a831a092cc08555af5e133e9df67525f7c7c70e81523993839f791", - "demos/tcp/aws_tcp_echo_client_single_tasks.h": "e9d899a96c10e49cd1a28df66cc8b9fc9c2a12db5942de1bfbbd8ff6e1758709", - "demos/wifi_provisioning/CMakeLists.txt": "daf58d954ac6f1bcdba29c56cdf51d79af41b17279a93f5602465363008b156b", - "demos/wifi_provisioning/README.md": "8cf1fa67aa68ff85ed13aa8aef5316af2c31b6552c2044f2e618a0c0472a6e3a", - "demos/wifi_provisioning/aws_wifi_connect_task.c": "3c50288b9f334210e0c44c29da36ac15b3a0eb6a49e5f9d8ebd1d3c528a3408a", - "freertos_kernel/GitHub-FreeRTOS-Kernel-Home.url": "29a615679aaf977693b52195bbbd531b884a82f3170e532c79c88faa026839c6", - "freertos_kernel/History.txt": "3e24a378f7e039b05fb0c9a7c52b61a3929cb5a6e0c2acfa9c993eeb30f7af16", - "freertos_kernel/LICENSE.md": "508a77d2e7b51d98adeed32648ad124b7b30241a8e70b2e72c99f92d8e5874d1", - "freertos_kernel/Quick_Start_Guide.url": "367a817538b81e233c897edfaeb14a4650fecd2e090a0d4d285f057d2466390f", - "freertos_kernel/README.md": "5cbdd937c3cb7128a4663a80e6107ce75bb941dff635ec4ad436fcee6ac8094b", - "freertos_kernel/croutine.c": "ad7ec113a490076fe62b688257e27b30a500f0738c3c2984bc60425e02f00694", - "freertos_kernel/event_groups.c": "9e8af735c1502d7eadc69b3f0c77b095410bd628d1fb27a2b347122056882aad", - "freertos_kernel/include/FreeRTOS.h": "4ee5a895b0143a6d995497452f1a7c7fc1828151f6c0b19fed7a2054f4af0de0", - "freertos_kernel/include/StackMacros.h": "4b0c603af5971d0dc90b3449adc5e090293484b0edd7e90dde0aa9c56b060949", - "freertos_kernel/include/atomic.h": "7b627530107df3dc17efc845e5e63e920efa581adb56e3f36e53837319f88906", - "freertos_kernel/include/croutine.h": "681e9d3b54cf99eb77ecf809034b6a04b7e8d00a0f5a27409b129549c3e3a5e5", - "freertos_kernel/include/deprecated_definitions.h": "2ca05c478a903dfbd79d1229871994e2459cf67d4d5d3854254a3a5d622780a1", - "freertos_kernel/include/event_groups.h": "9b95cac84d003f12e82e97cc8d5616d88a2bb8724848c7d9f18ca852097a2b1a", - "freertos_kernel/include/list.h": "bfbaa359e018b8c21c9cb710e09d2674653c0b67d14ab0f301590a6d79f212d6", - "freertos_kernel/include/message_buffer.h": "076449d6a0bf5d5d63aeb9700e2cb6635ec69ee3a4d33fc0de6def534b222783", - "freertos_kernel/include/mpu_prototypes.h": "843220c8b133daacafb6f5daceb2127831a189353dd9111a2b1c8687e1386af6", - "freertos_kernel/include/mpu_wrappers.h": "d2b47890d8b286b00698cc64c803b26537382408def236e16e373cc5b90da48b", - "freertos_kernel/include/portable.h": "b71fc2ccbc10e0585188e887792c132b2991bd9493212d797ecde3d1d8922cd6", - "freertos_kernel/include/projdefs.h": "2cdf8610198e10342add28aab387de4055f643b2f89169b4faadf9553d292df3", - "freertos_kernel/include/queue.h": "5dbac622e7dcce903e7eaeaf7cd87ecb288c63a0f68db6c4eb4e7e563639f7e6", - "freertos_kernel/include/semphr.h": "bbf07f34de41367aa6ff8586294a6106171c6664d49a06fc0d09c6b73e57b39a", - "freertos_kernel/include/stack_macros.h": "eb79efaf46576c2be56f477939857e6ae52d78e92f83958e14b40e946ee5c051", - "freertos_kernel/include/stdint.readme": "337d3b5bde204f72bae8d27acbdd314fbfd3ab996c04b7297cbdc1e11d603f0a", - "freertos_kernel/include/stream_buffer.h": "f1c8e22f45abe9399b85f7ac2e5b09551fbaccd1255d14a2c3363ead28624608", - "freertos_kernel/include/task.h": "493d0d3bd70f8dafd917e99b279a81d43281523f5aa92d95872df7596351f481", - "freertos_kernel/include/timers.h": "c49b4724af6ad2600611b38f4f314f8347799e7517483cfc5b53e95f02bd8f63", - "freertos_kernel/list.c": "11c561910c1f4cff67fb911abf610e7bde778b4332cad2d0c1dfd08ebeb97a24", - "freertos_kernel/queue.c": "dcbee5df000e67ad8e065d0031b077eafe4ddb8385e0a6aa065d8e27e91478e0", - "freertos_kernel/stream_buffer.c": "006048fd490221987456092c181f187e7fb1aa1b411946f6d02eb3f187861bda", - "freertos_kernel/tasks.c": "26d396a9384e462638ffa1208ab6c2d8d25e6dccc54cd4f4c44fb5cb9ac0cb7f", - "freertos_kernel/timers.c": "6ad8c4fee9fb46bc5109df5a74b1f752f35f01a05a1273785fb8284fdccf67d6", - "libraries/3rdparty/CMakeLists.txt": "ba87b46ee4601ec3d49e605feae7b45555a4a7485516e8c2a71cfbc07ddb3485", - "libraries/3rdparty/CMock/Gemfile": "4694d0e0e82570ff1a0dfa45307e3fa6706738c9e7e387a89788f8da589d4bac", - "libraries/3rdparty/CMock/LICENSE.txt": "a228c2871b9a779a6542a49470c5b567f2806dddcbcf90af861bb4d39291626c", - "libraries/3rdparty/CMock/README.md": "7e5eda88c3a355bad26c706daa6350186c89fe1db148697192be99fcb38aa142", - "libraries/3rdparty/CMock/config/production_environment.rb": "f349586d2ebd6d949653f283e0d634776f5c669990b1dfc3fe2c009a401ff3a4", - "libraries/3rdparty/CMock/config/test_environment.rb": "e3e267cc37e6473ae3bd4e47326d0374762930ff101b82cc1b9c2fd607d77456", - "libraries/3rdparty/CMock/docs/CMock_Summary.md": "52b9bbc61b36b9e89e67556390d577e438d3bc503cc4bb13cfc0758d7d602c91", - "libraries/3rdparty/CMock/docs/ThrowTheSwitchCodingStandard.md": "a1838b8c9e20ac3c15bf96742b716b6621c0607c9273ae0f92a6769e3aa45f41", - "libraries/3rdparty/CMock/examples/make_example/Makefile": "4180bf84b4a71086dcdd9e5f622c63be705981f8e98e311d7ecceb44940c3ea8", - "libraries/3rdparty/CMock/examples/make_example/src/foo.c": "0bec016ce8f7d6033049664c12cfcc5c0099e638fc6395e753b4d36ea2808d72", - "libraries/3rdparty/CMock/examples/make_example/src/foo.h": "e987f3bf49f430e2a9cb70bdd7105f8945e028d1598f361b30fe87a0585d97a3", - "libraries/3rdparty/CMock/examples/make_example/src/main.c": "23c00ca8f9cd5d89107f26d0804e1a2a6f8840941462ddd616f0fa33da7dd0c1", - "libraries/3rdparty/CMock/examples/make_example/test/test_foo.c": "6d2fe8d7ece7f0f8426fe684896c8bf76d15ea35e56add62d59558b47ee32347", - "libraries/3rdparty/CMock/examples/make_example/test/test_main.c": "73baf6160697615a9af98a184479a28e92d42fb82c0f310efea1b105910a3b0b", - "libraries/3rdparty/CMock/examples/temp_sensor/gcc.yml": "5c5d558eba12c2c31432472acf7e90559bbd351632f4cb80c3ee621e4e65969a", - "libraries/3rdparty/CMock/examples/temp_sensor/iar_v4.yml": "f5722f968d75bbe9af61c0ad0f01b6b98afa1a08185526ae49ba121bac937ce7", - "libraries/3rdparty/CMock/examples/temp_sensor/iar_v5.yml": "bcf8ab60e79e586b628e8c0aff5c50011dd3db2695468b2ca6b8c25d3783e506", - "libraries/3rdparty/CMock/examples/temp_sensor/rakefile.rb": "2d74c10170bd68d2d064b6504893a9a5e73f878a2a699979fe8fccd1a70535f1", - "libraries/3rdparty/CMock/examples/temp_sensor/rakefile_helper.rb": "98100d1e2fb44baa2ec47f7ac61d1190438e42e4fc9994f6b9590c952e1a7336", - "libraries/3rdparty/CMock/examples/temp_sensor/src/AT91SAM7X256.h": "284e49294ecd18da7c0b4abbf825cf8edb0f68884d334167c1f755b8528b34f8", - "libraries/3rdparty/CMock/examples/temp_sensor/src/AdcConductor.c": "b14eb5f4196976d82c9501184c0496ac5c071ca9a993ddab0779faea95810f44", - "libraries/3rdparty/CMock/examples/temp_sensor/src/AdcConductor.h": "961bcc853beb286a6ed95ccaf1b48337e1e36b8e543ebb60ce9a56b80238d8e9", - "libraries/3rdparty/CMock/examples/temp_sensor/src/AdcHardware.c": "e9aabd8f076c0d1738d6ea6294c0e16f15643ba19483b1ba6eee861f02cbb9e7", - "libraries/3rdparty/CMock/examples/temp_sensor/src/AdcHardware.h": "af2841747b2659b183891c9c4c00a2b7c065b51a8b958c35d4a6be8564326e10", - "libraries/3rdparty/CMock/examples/temp_sensor/src/AdcHardwareConfigurator.c": "06b303aab471c751073c25170c8b4bc5f52cd89eb52a29a0db32946975bafa6f", - "libraries/3rdparty/CMock/examples/temp_sensor/src/AdcHardwareConfigurator.h": "2ac7b673358582f4df15beb5956cb9f66b8c56882ddb1f8508314d96459aebf7", - "libraries/3rdparty/CMock/examples/temp_sensor/src/AdcModel.c": "885c0a3df693def8de467cc9d9cbb503ba795ffe379d65de02409f8fca2fe360", - "libraries/3rdparty/CMock/examples/temp_sensor/src/AdcModel.h": "3ea12eb954305556617507aa8983f26fe0cb7afb7c8afc71341056e6d8ca23dd", - "libraries/3rdparty/CMock/examples/temp_sensor/src/AdcTemperatureSensor.c": "301cb0b59970bc21f85b068d103732e4dcb55cdbb74536a242a2c45ea8151610", - "libraries/3rdparty/CMock/examples/temp_sensor/src/AdcTemperatureSensor.h": "2fddbdb25206928f3c016ef362174caaf735d683da8e246f8d01f191d3926b73", - "libraries/3rdparty/CMock/examples/temp_sensor/src/Executor.c": "0cdf97b9afa1e7f2da8580b93a19fc536ad83ff4ff5ad1e42013e795af5db025", - "libraries/3rdparty/CMock/examples/temp_sensor/src/Executor.h": "11a373abf8479822f68c5ba2c244c922df6366047531c7953b1a257833075a7f", - "libraries/3rdparty/CMock/examples/temp_sensor/src/IntrinsicsWrapper.c": "95796f352948558443ea6000f9b1237d5b961d2275d12d7b4d33c6d05a4b90d6", - "libraries/3rdparty/CMock/examples/temp_sensor/src/IntrinsicsWrapper.h": "89354ee37181c2effe24d952bd3e4c7f44f7e02f8a85fe08debc64b4fdef3a4d", - "libraries/3rdparty/CMock/examples/temp_sensor/src/Main.c": "23b5e3b20efbe81415f4a8c21a47c767d6560e05e59b1a6b0220e5e4ae2503d4", - "libraries/3rdparty/CMock/examples/temp_sensor/src/Main.h": "6cbfb303c81f28a5e0b5cbb1fc44a860310af5f9c83fd5391b81c61ea4c6203f", - "libraries/3rdparty/CMock/examples/temp_sensor/src/Model.c": "8d62e7a6d628d609ffcda11085b09ee0f8fe18a1c527d8fcad54810a879cb705", - "libraries/3rdparty/CMock/examples/temp_sensor/src/Model.h": "409578c18146e8a728d4a0da93ed34d65880fc96dac39c2786a442e6ff47bb31", - "libraries/3rdparty/CMock/examples/temp_sensor/src/ModelConfig.h": "118773cc1bbaf51497b9e56fb3a65de4479944973565283223241e73abb34fed", - "libraries/3rdparty/CMock/examples/temp_sensor/src/TaskScheduler.c": "ccfda6443fa3c524f00d5810dfa48fa23e12608cf8e6dde46e5bf10293de717c", - "libraries/3rdparty/CMock/examples/temp_sensor/src/TaskScheduler.h": "b6e6f8c61bdd97ee32efe3a5b130c68379978ac126dc9695681de1a4393b0e14", - "libraries/3rdparty/CMock/examples/temp_sensor/src/TemperatureCalculator.c": "8ffc3c06a3449fd560275736c5cc3202137f00d0513e651304c836fd78128a56", - "libraries/3rdparty/CMock/examples/temp_sensor/src/TemperatureCalculator.h": "bfee490f7a59b6eedcd357c99cbff6be20b33b4aa96d54789aa420f69f3ceb33", - "libraries/3rdparty/CMock/examples/temp_sensor/src/TemperatureFilter.c": "fb6997e829daeefe1fa89a5febeb8aab8c9a9adfafb5739f60f786c69b57a3ea", - "libraries/3rdparty/CMock/examples/temp_sensor/src/TemperatureFilter.h": "0731c950b85d436e651737cca0ecff430edea68d62599e27167e7c5a2a57d983", - "libraries/3rdparty/CMock/examples/temp_sensor/src/TimerConductor.c": "b10f5485f4a884019257dcd143dddfda528af77b1f8b005a40b2443020ef67a5", - "libraries/3rdparty/CMock/examples/temp_sensor/src/TimerConductor.h": "53deff5a2ce521b48c69e1d85641e2c7da7d0bdbd1de48f622cc1a7df5efd177", - "libraries/3rdparty/CMock/examples/temp_sensor/src/TimerConfigurator.c": "145397008f450ec09b8bd010b02430c3becddc92a7fcbe31c06a5baf99e32105", - "libraries/3rdparty/CMock/examples/temp_sensor/src/TimerConfigurator.h": "55e7e6f42f76dc2c9c60137be3b4a4bfd3e9e96e4ce41c2300221bcf8fab24b9", - "libraries/3rdparty/CMock/examples/temp_sensor/src/TimerHardware.c": "5085266579205f2be126cc0e5f34c443469a3e5da53efd0fa2d95a7653a98803", - "libraries/3rdparty/CMock/examples/temp_sensor/src/TimerHardware.h": "abddafeeb43ee8cdc31389263b8826f3ccf6a20573ca4702dfeb537b00a04104", - "libraries/3rdparty/CMock/examples/temp_sensor/src/TimerInterruptConfigurator.c": "596665665389de910b1dbd15c292f141a8e64a2c4a0164a7959121bed2467645", - "libraries/3rdparty/CMock/examples/temp_sensor/src/TimerInterruptConfigurator.h": "5a7adb509ada4640fdccf739be3de8abb470b41bcddb9a9834e9b238a9fabd02", - "libraries/3rdparty/CMock/examples/temp_sensor/src/TimerInterruptHandler.c": "7fab66be3e4d5c430a1dfddee56559ba55ab4cd0d448c583637072e9dc9f10da", - "libraries/3rdparty/CMock/examples/temp_sensor/src/TimerInterruptHandler.h": "5cc7ecbd35069059f0fb2d516f8b63929e0a4d0fa00e53b593f0827d5f637d29", - "libraries/3rdparty/CMock/examples/temp_sensor/src/TimerModel.c": "315b80af627d601b85c203ad389f455d5a010806ea113fc410c9bb5566cb7966", - "libraries/3rdparty/CMock/examples/temp_sensor/src/TimerModel.h": "8946208aac57141bc8078bae72461ce1b0afcf9509eb7c9dd52d7643bf3c99da", - "libraries/3rdparty/CMock/examples/temp_sensor/src/Types.h": "342e458d2f13f4b2f42ac03133f005635bd4002ae446f5aa5006c73f4160a3d3", - "libraries/3rdparty/CMock/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.c": "a0a5c91867bd150cff7d8d1a25e5e3355a780421715afa1b9b7ea747612b8fd3", - "libraries/3rdparty/CMock/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.h": "cfe9a2cd19135f1c1058748f6c82be18331e35a7796a8801103458b2c36912e7", - "libraries/3rdparty/CMock/examples/temp_sensor/src/UsartConductor.c": "3536b396eddfd8d605ac050c18fd150764031ed873e18362fb0ebc34d9d7dc3c", - "libraries/3rdparty/CMock/examples/temp_sensor/src/UsartConductor.h": "58ce401a82e272c72f0d9cc81310a103d6bebd9565d8ba783d8a99a014a17aad", - "libraries/3rdparty/CMock/examples/temp_sensor/src/UsartConfigurator.c": "d4805a5c993e1c0227442f926bd9a28dd1d8af59fdb93c35fa707e14d77baf09", - "libraries/3rdparty/CMock/examples/temp_sensor/src/UsartConfigurator.h": "95eeabe4b7a99b54cf49531930b0a4be7fe812420c53dc1b730dec7f08e2d1c0", - "libraries/3rdparty/CMock/examples/temp_sensor/src/UsartHardware.c": "97db4fe3c762e48593838b8ff9ba20e08ce02ceb39bffa592b8691d850ecfe0f", - "libraries/3rdparty/CMock/examples/temp_sensor/src/UsartHardware.h": "99fa878f31c0b2f5d91cc7646ef25823c38a5c78a747a780d4c25754f448af0e", - "libraries/3rdparty/CMock/examples/temp_sensor/src/UsartModel.c": "36d389273df8ac7d3b28a3490a511c1be2c117d73d9f7a26dd7d34af5c6cd5a7", - "libraries/3rdparty/CMock/examples/temp_sensor/src/UsartModel.h": "c367f4aab51341ba2dd1780bad6b7cf59c344009505695b608b734b4711592b3", - "libraries/3rdparty/CMock/examples/temp_sensor/src/UsartPutChar.c": "2b2aab187d2b818ab28750a0676298205a7f7938ebffa440aaff99f3bc37002c", - "libraries/3rdparty/CMock/examples/temp_sensor/src/UsartPutChar.h": "557610200557eb94f1a7f5d7a1a7d26bd0827f5e2b06749353dfa4fae73d4439", - "libraries/3rdparty/CMock/examples/temp_sensor/src/UsartTransmitBufferStatus.c": "7924adbc923cd9eb3bcea5877defbacb3ec16a03de29e7327ff064304a914505", - "libraries/3rdparty/CMock/examples/temp_sensor/src/UsartTransmitBufferStatus.h": "955b1a7e0f4de642f8bb6083b8fa8c3f4d75bdc4c378794aac6dde049410d42f", - "libraries/3rdparty/CMock/examples/temp_sensor/test/TestAdcConductor.c": "9d22203689e18bdb6daf3a8aee7d17438028deb1d924731a0597c13743616d88", - "libraries/3rdparty/CMock/examples/temp_sensor/test/TestAdcHardware.c": "b3b05e87ac62d463ef489eb2e8aca41d2b6829ef8edaab27622c9c4889a59dba", - "libraries/3rdparty/CMock/examples/temp_sensor/test/TestAdcHardwareConfigurator.c": "58333e4681ca8a34e98b11129deebc653e44e3587b03b6b7f523a80ace169225", - "libraries/3rdparty/CMock/examples/temp_sensor/test/TestAdcModel.c": "dcf55240bd2ce74f8e3bcc28a98ed8037d51375ade9ebb1d61e882b41e11a9b6", - "libraries/3rdparty/CMock/examples/temp_sensor/test/TestAdcTemperatureSensor.c": "f5178bbb8605872e09608baff9b049cc826afa278bc1a125389255e786131f8f", - "libraries/3rdparty/CMock/examples/temp_sensor/test/TestExecutor.c": "db1bc8f44e9183b2a7909c0c0b8fac6b25b37d4aee0f47c9ab181500cf384ac9", - "libraries/3rdparty/CMock/examples/temp_sensor/test/TestMain.c": "67944d7590384483ecb8b1c06cdc9426e4c78bdfa99886f4d24f9d07e2aa84c0", - "libraries/3rdparty/CMock/examples/temp_sensor/test/TestModel.c": "1720d2acf16537a03ff8b6e800f04c46312c9f17985d856f3cb3f64309a869f0", - "libraries/3rdparty/CMock/examples/temp_sensor/test/TestTaskScheduler.c": "4efcd2cc31f7c3737f8a0143faf05f370466cb7acf75f0d15f7d661f9303472c", - "libraries/3rdparty/CMock/examples/temp_sensor/test/TestTemperatureCalculator.c": "f0b725debcc365c16a055371f3f48534d3f30bac75804cc9c5838850a8bb91c9", - "libraries/3rdparty/CMock/examples/temp_sensor/test/TestTemperatureFilter.c": "ffc624388daa2322ce339cff9445abf37cd2372534db356f57821b9e49874761", - "libraries/3rdparty/CMock/examples/temp_sensor/test/TestTimerConductor.c": "7d2d58e797a65e44698e30cdb79cac7e94fb96c8e95623c3ab8f9ec0f9078809", - "libraries/3rdparty/CMock/examples/temp_sensor/test/TestTimerConfigurator.c": "51748b3199379ebd5797c4da7bdefed444aed398ae36508c098c3f00a2a4416c", - "libraries/3rdparty/CMock/examples/temp_sensor/test/TestTimerHardware.c": "7ab489c8cdf7d8d0421482a1a6ef7b1f8663e38453a140e9a5550d1c67844170", - "libraries/3rdparty/CMock/examples/temp_sensor/test/TestTimerInterruptConfigurator.c": "7f8eb3100b9091d2996c8f75459659e8ae0c5a75f0d5ee08e3649b17f3394cce", - "libraries/3rdparty/CMock/examples/temp_sensor/test/TestTimerInterruptHandler.c": "0000e221012abd79eaf668188923275b7e7e12ef297b15b2165e35440c0f1eac", - "libraries/3rdparty/CMock/examples/temp_sensor/test/TestTimerModel.c": "cee4214bb0cf367910562488f448014bc802274d2894bc87ad9fa49098a99add", - "libraries/3rdparty/CMock/examples/temp_sensor/test/TestUsartBaudRateRegisterCalculator.c": "729c0d4162bd09ac4514e2de1f70e1b0b4fb05ee125dcfb91314aa40986e8235", - "libraries/3rdparty/CMock/examples/temp_sensor/test/TestUsartConductor.c": "ab351f7a74ba445200ccf3d851122fb86531e8511d8cbbbfd1d70b9ccd4a93a4", - "libraries/3rdparty/CMock/examples/temp_sensor/test/TestUsartConfigurator.c": "719758e045571b2c532007e37cfe9939eddcc850e069481524f5d4b17d9d399e", - "libraries/3rdparty/CMock/examples/temp_sensor/test/TestUsartHardware.c": "c29fa69264fd62d7a466a95de9c927e94119b366ecb1d333be47c60de6183fa1", - "libraries/3rdparty/CMock/examples/temp_sensor/test/TestUsartModel.c": "5ab9a684792f271e587d4e861de5c3dc90439dcc4670d7a06da8bd078161a2df", - "libraries/3rdparty/CMock/examples/temp_sensor/test/TestUsartPutChar.c": "cde5d54b2acf09a6caf86e360c9a2fd40fb6ccdc8fcfe78d4b10ca7c34d95e9e", - "libraries/3rdparty/CMock/examples/temp_sensor/test/TestUsartTransmitBufferStatus.c": "d66b41fefa7200f926652c67cc3797b6143b321e7be5eefb099caaa4cfe2af37", - "libraries/3rdparty/CMock/lib/cmock.rb": "2db133af7e8c2782b955c5727fe806149e29e1f6f6c24f0edb06bf0e8fb990ce", - "libraries/3rdparty/CMock/lib/cmock_config.rb": "d1f169fd7570f897c7025f90b69a3b563a0053013c6bf9701dce79c66fd8b0c7", - "libraries/3rdparty/CMock/lib/cmock_file_writer.rb": "00952d06256e5c4f15d12798124d1924cdd9ddc0767f8849bd4fdd5da27a0796", - "libraries/3rdparty/CMock/lib/cmock_generator.rb": "efcad21dc935182dfaad8798b5311c73457e6ec7289990d60273ccf8b49f9e88", - "libraries/3rdparty/CMock/lib/cmock_generator_plugin_array.rb": "cf79e99a143bbffa19513c552427758151dbf5bc4498872d55240a301cf81e62", - "libraries/3rdparty/CMock/lib/cmock_generator_plugin_callback.rb": "af43da2e2327b72cc5c4acf54f2acaa851e050dd0fdc295328b04f0daad5e738", - "libraries/3rdparty/CMock/lib/cmock_generator_plugin_cexception.rb": "7ea5018ce83d734f587e16754f09508d98a6d7ee9e35ae4d77f795c64d817091", - "libraries/3rdparty/CMock/lib/cmock_generator_plugin_expect.rb": "24e589d18c6adf83d9efb6fb466aaa6936566ac8f3c8fddbdd4031c015013be9", - "libraries/3rdparty/CMock/lib/cmock_generator_plugin_expect_any_args.rb": "8156d254e07315f04e7ae692bc6e90fa0f3418122e4048fe888ca2a08a5e2506", - "libraries/3rdparty/CMock/lib/cmock_generator_plugin_ignore.rb": "040a49d79fa8a39a215105b5e1333ace4e858d84db305e7d2addd71fbbfa3645", - "libraries/3rdparty/CMock/lib/cmock_generator_plugin_ignore_arg.rb": "85bb085311132867f962969f4757346b950497bf1ef0fc6bf856b30fa76d879d", - "libraries/3rdparty/CMock/lib/cmock_generator_plugin_return_thru_ptr.rb": "1de81b18418f28c42c3cece2cdac389f0ca106bb6aff0cd148e60e3666017161", - "libraries/3rdparty/CMock/lib/cmock_generator_utils.rb": "ab582b61a17547a861f2623c13a22b2db5c985bbb2d280b4036978f490550ecf", - "libraries/3rdparty/CMock/lib/cmock_header_parser.rb": "88e194b0f99b8ed412840d564d89e8f9f87f6b81e81998e64f37e512e39e4eac", - "libraries/3rdparty/CMock/lib/cmock_plugin_manager.rb": "ea1f967c58ad0b7c4d5770f73a1c8a0e2b2c3316222007ce47975ea12037ab1e", - "libraries/3rdparty/CMock/lib/cmock_unityhelper_parser.rb": "9c345fb34efc38ee37787cf6d33b161a10e819b18e1f8f88ab855a58b1bda1eb", - "libraries/3rdparty/CMock/meson.build": "f476d259cf456982649c5dba0c88070257da77a71316eb3403002a7d50139239", - "libraries/3rdparty/CMock/scripts/create_makefile.rb": "c03914eea03a12c2086ab042e5ea60f3375ae2742b32fb98812493e8ca015d77", - "libraries/3rdparty/CMock/scripts/create_mock.rb": "995d1551fc08f789e8d036ac378014ab1fbce43aebd4d84e18d7c66585571f65", - "libraries/3rdparty/CMock/scripts/create_runner.rb": "7fe06ce7115cc57a07a2dfac985dc29ffffbefdd94ef57e560b78d22a0628c23", - "libraries/3rdparty/CMock/scripts/test_summary.rb": "345e9fb68e4b3c49c36022a7e17d0b704ce1dc0a9adfde7bd0281084c6db4bee", - "libraries/3rdparty/CMock/src/cmock.c": "5bdc4ba9861d73b950646a3f5ce6ed15e7cdbe67a17c3c625316979236ab1e49", - "libraries/3rdparty/CMock/src/cmock.h": "1e80437b68da381104b8f6df528fa5a136917a35e45ff0eaac117f2a22ae8fea", - "libraries/3rdparty/CMock/src/cmock_internals.h": "4df4b62d2b13a0b6541d986100b9ec6b261b882741834ef2ab0d51a0afa34e00", - "libraries/3rdparty/CMock/src/meson.build": "a04202d0f04fadfb7a766d041f92fbe0b858d5b2c7e1aab03c7538d77ee2b823", - "libraries/3rdparty/CMock/test/c/TestCMockC.c": "7beed4e807a064045a2f00bb149af817483fc70331aedfaa0d2934d3b94f993f", - "libraries/3rdparty/CMock/test/c/TestCMockC.yml": "7457da36df8102d71c336ca384702879161097ff542380bed78cb5446984ae4c", - "libraries/3rdparty/CMock/test/c/TestCMockCDynamic.c": "eeaac501c9e65e166ebd11b90c5275c67597e81e6c9c3156faf006751023495b", - "libraries/3rdparty/CMock/test/c/TestCMockCDynamic.yml": "4755d85389465ac56733780ec7da93965dccf5eba935195acbbb7de251c6048a", - "libraries/3rdparty/CMock/test/c/TestCMockCDynamic_Runner.c": "ba26744cbf8c4f1ea7de6ca7254700bf1e16ae57682270dc4d94393ccd501588", - "libraries/3rdparty/CMock/test/c/TestCMockC_Runner.c": "465d91fe9d981509a92267d0471fbb3e412a88b6f7d50437fe91e47ef6d69e8f", - "libraries/3rdparty/CMock/test/iar/iar_v4/Resource/SAM7_FLASH.mac": "8ac360d36256589216b144c525d510af24457ef763becd14b137f63e953cc17d", - "libraries/3rdparty/CMock/test/iar/iar_v4/Resource/SAM7_RAM.mac": "df15f8e476e1ca1b8d3141cfe0c801881939e70cefca237a98d804742cccdcfe", - "libraries/3rdparty/CMock/test/iar/iar_v4/Resource/SAM7_SIM.mac": "6177e42e1a0a493976fb4d196b65cb1257e045db281ad48569b4b9ee6d9f37bc", - "libraries/3rdparty/CMock/test/iar/iar_v4/Resource/at91SAM7X256_FLASH.xcl": "8594f9522b6ae41e96ab7b848dd7e4024876f7882d95f60a8bb6577ffd154605", - "libraries/3rdparty/CMock/test/iar/iar_v4/Resource/at91SAM7X256_RAM.xcl": "713104cf6bf984663d5227b3ea6fe1d045413630b5a71404b2a2a7156346ae9b", - "libraries/3rdparty/CMock/test/iar/iar_v4/Resource/ioat91sam7x256.ddf": "f23d06dcacffa6d544f4a560a4692bdaba7b918b488b810db928b418a4bbfd88", - "libraries/3rdparty/CMock/test/iar/iar_v4/cmock_demo.dep": "5157f2a91a7169b63aa30424a220053a8983194e6145d14f3a39bfa2e63175ac", - "libraries/3rdparty/CMock/test/iar/iar_v4/cmock_demo.ewd": "176d8abee2d57ee30575952da2aa2bfa4dc851b908e44df728b6a4a2c222fd8c", - "libraries/3rdparty/CMock/test/iar/iar_v4/cmock_demo.ewp": "ffacbcc9ee4b092f01af22ee7bdcd34bff44043cd3c903ff9530912b0d4eaf0a", - "libraries/3rdparty/CMock/test/iar/iar_v4/cmock_demo.eww": "7b5fe1867f77d1c6a09c591e3c4705a20ec0102a10e5049aa3fdb1989596e23b", - "libraries/3rdparty/CMock/test/iar/iar_v4/incIAR/AT91SAM7X-EK.h": "41b4cd1cbc547b10818daf44adeb335a7dcd6846b229195c156be0be9b1cc056", - "libraries/3rdparty/CMock/test/iar/iar_v4/incIAR/AT91SAM7X256.inc": "5f7c307376baf65d6ae5e16bb23b7d9374b713c7a8bd963240418dd026f5cd79", - "libraries/3rdparty/CMock/test/iar/iar_v4/incIAR/AT91SAM7X256.rdf": "f7a13e637d12010564f884cb25ca152909f5cf056fbd87b8f837e6e999305411", - "libraries/3rdparty/CMock/test/iar/iar_v4/incIAR/AT91SAM7X256.tcl": "959dfe614a39ca1c47aa5e42d10979bb939c4c0464cc01f3d395a17baa2759f8", - "libraries/3rdparty/CMock/test/iar/iar_v4/incIAR/AT91SAM7X256_inc.h": "cf75fa42dbdac6d2e055ee6a1b4be6c3fda982bca36832167dbb3338c2529ea0", - "libraries/3rdparty/CMock/test/iar/iar_v4/incIAR/ioat91sam7x256.h": "df4353041f1daef07fff13afedf5c82b6502ec3f27af4b7943a409dbf27bcdc4", - "libraries/3rdparty/CMock/test/iar/iar_v4/incIAR/lib_AT91SAM7X256.h": "d500574f73b3e2c0e026d600f9949f680270aa9e78c82b0250276c75edbd79b1", - "libraries/3rdparty/CMock/test/iar/iar_v4/settings/cmock_demo.cspy.bat": "0b95a0e1455c0947578eb48f8e77dc4303c672208d92a29883061115dfd4740a", - "libraries/3rdparty/CMock/test/iar/iar_v4/settings/cmock_demo.dbgdt": "16333ca6fc95ee3c09e1d65fb546fd714e1039a2d83a7ab88d5113f7b92e89de", - "libraries/3rdparty/CMock/test/iar/iar_v4/settings/cmock_demo.dni": "36b4ad5d2c76a305040b922a7b27d4d36f68e3ffaa13ca327db77b7f82280e6b", - "libraries/3rdparty/CMock/test/iar/iar_v4/settings/cmock_demo.wsdt": "1502e8d1c367c132f62906a92a931ced79057ef818fdc502900ab6fa092681a7", - "libraries/3rdparty/CMock/test/iar/iar_v4/srcIAR/Cstartup.s79": "73b3a3034252453843ce316daae1cc691d8289a6943105718c04e5864b384110", - "libraries/3rdparty/CMock/test/iar/iar_v4/srcIAR/Cstartup_SAM7.c": "15857d19064c45c733ffc3c3de66b9f987bdd44b8e1d29b3ae17a355faaa3472", - "libraries/3rdparty/CMock/test/iar/iar_v5/Resource/SAM7_FLASH.mac": "8ac360d36256589216b144c525d510af24457ef763becd14b137f63e953cc17d", - "libraries/3rdparty/CMock/test/iar/iar_v5/Resource/SAM7_RAM.mac": "df15f8e476e1ca1b8d3141cfe0c801881939e70cefca237a98d804742cccdcfe", - "libraries/3rdparty/CMock/test/iar/iar_v5/Resource/SAM7_SIM.mac": "6177e42e1a0a493976fb4d196b65cb1257e045db281ad48569b4b9ee6d9f37bc", - "libraries/3rdparty/CMock/test/iar/iar_v5/Resource/at91SAM7X256_FLASH.icf": "d37f75919b1793bac86891e7fa9a9142ae83de351d5ef169af909ce770ae6d01", - "libraries/3rdparty/CMock/test/iar/iar_v5/Resource/at91SAM7X256_RAM.icf": "170c34f5e702138b2b20cb696a482886936cdad8eaddb18c6c84abc5facf0a17", - "libraries/3rdparty/CMock/test/iar/iar_v5/cmock_demo.dep": "0a869be5fc1a6ba0991c5012d8d4bf21ecdaf35ce23ff2207bbe35fc72b7acc2", - "libraries/3rdparty/CMock/test/iar/iar_v5/cmock_demo.ewd": "5ebda13f0da843a1a4343bdb77c728d72ffcf8356a48eb6e3d5527428f6a1ba4", - "libraries/3rdparty/CMock/test/iar/iar_v5/cmock_demo.ewp": "019d8fe92e6206e06b9fc46938e2ac19d9b8d9e27186f4ed05bc9f1f4ffca31b", - "libraries/3rdparty/CMock/test/iar/iar_v5/cmock_demo.eww": "252dbeae342d9ad0c34d7f4a622dec74a5f400c08ad931771dc418dcc8aea7c3", - "libraries/3rdparty/CMock/test/iar/iar_v5/incIAR/AT91SAM7X-EK.h": "41b4cd1cbc547b10818daf44adeb335a7dcd6846b229195c156be0be9b1cc056", - "libraries/3rdparty/CMock/test/iar/iar_v5/incIAR/AT91SAM7X256_inc.h": "7fbf38b71f042bd3130dd7a0cc6e55130eae320e4fe705e078e5f9144c6e03b1", - "libraries/3rdparty/CMock/test/iar/iar_v5/incIAR/lib_AT91SAM7X256.h": "405c0c979b5c39e520624e0b5da725690c69f220d5985c6129b1be0bde3ff4a1", - "libraries/3rdparty/CMock/test/iar/iar_v5/incIAR/project.h": "431c8cdd8373916c97b6555fd0df183b4eed8799fe61397c5b9458d71e194edf", - "libraries/3rdparty/CMock/test/iar/iar_v5/settings/BasicInterrupt_SAM7X.cspy.bat": "2e1acdf2e55863b5e33588ee350d4ea8325a79aef8f143a1d1e4dc9a20894ebe", - "libraries/3rdparty/CMock/test/iar/iar_v5/settings/BasicInterrupt_SAM7X.dbgdt": "1967e4e174ca97638a540915477a6cbc829cf2d19bb4ad6046ebb43cef922619", - "libraries/3rdparty/CMock/test/iar/iar_v5/settings/BasicInterrupt_SAM7X.dni": "e7db4742adcbe78483a5a2bd0510ef338a2ddddcca3b4587d493c54fec22a722", - "libraries/3rdparty/CMock/test/iar/iar_v5/settings/BasicInterrupt_SAM7X.wsdt": "bfd819154f05571882a5c70fa8e47aaf4a6be521b9ce321b086ecc8b3fad2fe9", - "libraries/3rdparty/CMock/test/iar/iar_v5/settings/BasicInterrupt_SAM7X_FLASH_Debug.jlink": "94a14185b32946b9295be7a4230afb5f71ddf87bff3e9f279ce4d82feabe98f9", - "libraries/3rdparty/CMock/test/iar/iar_v5/settings/cmock_demo.cspy.bat": "98d3f600ca83fc5e0e141e27f17c92b52b28997445a64d7f63cb4312f490a580", - "libraries/3rdparty/CMock/test/iar/iar_v5/settings/cmock_demo.dbgdt": "942572f2cb503a36b9e633642c54e72dc8bc929a41a9430fe62837ea3eb837c0", - "libraries/3rdparty/CMock/test/iar/iar_v5/settings/cmock_demo.dni": "35f715df5935f7b03aae4126e33e296bd36df32f86aa00d425a09e65ce1fb66c", - "libraries/3rdparty/CMock/test/iar/iar_v5/settings/cmock_demo.wsdt": "b5f6a167aa78028b09a439565dede111bf8119403c9f290367163356008807f5", - "libraries/3rdparty/CMock/test/iar/iar_v5/settings/cmock_demo_Binary.jlink": "94a14185b32946b9295be7a4230afb5f71ddf87bff3e9f279ce4d82feabe98f9", - "libraries/3rdparty/CMock/test/iar/iar_v5/settings/cmock_demo_FLASH_Debug.jlink": "94a14185b32946b9295be7a4230afb5f71ddf87bff3e9f279ce4d82feabe98f9", - "libraries/3rdparty/CMock/test/iar/iar_v5/settings/cmock_demo_RAM_Debug.jlink": "94a14185b32946b9295be7a4230afb5f71ddf87bff3e9f279ce4d82feabe98f9", - "libraries/3rdparty/CMock/test/iar/iar_v5/srcIAR/Cstartup.s": "f01a69400b4d52ad0202134d4d1eb2b2afb8b5b90f19cab527ef2c63354725a6", - "libraries/3rdparty/CMock/test/iar/iar_v5/srcIAR/Cstartup_SAM7.c": "ffffb70bb3424fb7537c766bfa1d0831154bbc455b10a7085ddfe6e5a51cd8e3", - "libraries/3rdparty/CMock/test/rakefile": "4076929f99d8fea975aa2311bf348a806c440e1e25d6eb38b0eb16af7bfccb7a", - "libraries/3rdparty/CMock/test/rakefile_helper.rb": "b9196d105d59f0794a18f7cefadde56bd791e8a5180be7aeba0a183137d380fd", - "libraries/3rdparty/CMock/test/system/systest_generator.rb": "f0dfa97acb5355b013f632459d91d8f8ceb0bff07e78a2b62c0f8955aa9fda77", - "libraries/3rdparty/CMock/test/system/test_compilation/callingconv.h": "f0d451838c94b20cb9df40827b1667e82719adf34bc7f848ce1ab330a95f5ece", - "libraries/3rdparty/CMock/test/system/test_compilation/config.yml": "55da291e818f575aaec65bfd678b9bc92badc2775bd012ea465d124bb03f6874", - "libraries/3rdparty/CMock/test/system/test_compilation/const.h": "452666930532c934d30c06081a1207422064421e2111ef3d774f60801c8d0298", - "libraries/3rdparty/CMock/test/system/test_compilation/inline.h": "faae36b96040414ffbbd8c9cd0ddcf1d918b5431ad81c12e391fe8b283ae915f", - "libraries/3rdparty/CMock/test/system/test_compilation/osek.h": "6283a1ba1ce53af3c73e246ec073497aec8d5da7e573f8474a45e1ccaf72730c", - "libraries/3rdparty/CMock/test/system/test_compilation/parsing.h": "f6f31c9b303aaf2948ed48cd6e8dcc0d7cef5bacc91b5746b11d432701911bd4", - "libraries/3rdparty/CMock/test/system/test_interactions/all_plugins_but_other_limits.yml": "23512e99944a08a4517037fddc6f13451118a23a19327270e7f0cde0a882643e", - "libraries/3rdparty/CMock/test/system/test_interactions/all_plugins_coexist.yml": "2fa3f85fa5bcfd432d7e82be741d3e4bce969182d3b3c4335ab2bac494a8b3e2", - "libraries/3rdparty/CMock/test/system/test_interactions/array_and_pointer_handling.yml": "afd7b725c51a0268b2fe582416b59e303c611a86af8359627a10483ccf4ac3dc", - "libraries/3rdparty/CMock/test/system/test_interactions/basic_expect_and_return.yml": "188b82892feac0f148d9b8d1edf9929e4145d8adb7ffc0b2752be3dfe5c620d8", - "libraries/3rdparty/CMock/test/system/test_interactions/const_primitives_handling.yml": "2610282b06d4b05f3f7e9b22254278648a29dcf1808f8206ac92d183ed7c7ebd", - "libraries/3rdparty/CMock/test/system/test_interactions/doesnt_leave_details_behind.yml": "5d39bdb3fb162c3664ed180754c6b8042c12ad7e29ccc65b42c312ccfeed322a", - "libraries/3rdparty/CMock/test/system/test_interactions/enforce_strict_ordering.yml": "85f9cc7ce2eb22b0da825ca8d6e38a05bffb69dab0e66c0e516753b74fcfe10b", - "libraries/3rdparty/CMock/test/system/test_interactions/expect_and_return_custom_types.yml": "361e10a02795595bf45c64b2026d9342fff1e4d0308fb5202413bffb84bd3b10", - "libraries/3rdparty/CMock/test/system/test_interactions/expect_and_return_treat_as.yml": "6601ab58a7b0719e26124b40d3aed2272a032f4ff3ae45da241b0b39bdf03ce9", - "libraries/3rdparty/CMock/test/system/test_interactions/expect_and_throw.yml": "18eb54309f69744598138a5b3f8ef4b898bbc3fb46b1a42306016d6ed566c1d3", - "libraries/3rdparty/CMock/test/system/test_interactions/expect_any_args.yml": "1348aa720acf85e117c6c23353f205b3438eac30baee86efeacbdc04f2645d27", - "libraries/3rdparty/CMock/test/system/test_interactions/fancy_pointer_handling.yml": "a3033a4e31bcfbf66126059476d9fdc7bdaa197a8b6568a382c93e373110abb4", - "libraries/3rdparty/CMock/test/system/test_interactions/function_pointer_handling.yml": "85c81773cf1dcf80dc84ccb433d8442aabde1b8635292819315287e828b93f63", - "libraries/3rdparty/CMock/test/system/test_interactions/ignore_and_return.yml": "4300c43c2e59a39111809e3e4571484e45146344a20d706a2c0c8618159fa2ad", - "libraries/3rdparty/CMock/test/system/test_interactions/ignore_strict_mock_calling.yml": "08c69a141af52960e0e9043d717ff5df442f7889edcd145898c0cade3fcc3e72", - "libraries/3rdparty/CMock/test/system/test_interactions/newer_standards_stuff1.yml": "f2073b808f4cc2d918612ff1c910fbc4a8ead998b12fcbc7608d430fe71d8eb9", - "libraries/3rdparty/CMock/test/system/test_interactions/nonstandard_parsed_stuff_1.yml": "23db82fdbc1643ed58a58c20a4154e75b8559509a3f827fb43e9c5965103e4f6", - "libraries/3rdparty/CMock/test/system/test_interactions/nonstandard_parsed_stuff_2.yml": "f51bae36303d532e357105195369615ab17560234efb1f0141973c2794ac0693", - "libraries/3rdparty/CMock/test/system/test_interactions/out_of_memory.yml": "4b4509e9c368fdec539be90daa164185175849afcf39c2d0a9c4d9ff9e423191", - "libraries/3rdparty/CMock/test/system/test_interactions/parsing_challenges.yml": "6f9a0d35489a6e6435211923ea43349e17cb68fc9652cb98511be8f74a78a079", - "libraries/3rdparty/CMock/test/system/test_interactions/return_thru_ptr_and_expect_any_args.yml": "64915233c5cb94bdff20cf89f650de58f278a214417bacf52129b67d67208cc0", - "libraries/3rdparty/CMock/test/system/test_interactions/return_thru_ptr_ignore_arg.yml": "cde16df22f47d782043ce85063cd7d53dcb3473eebd25631bbd18d7d87c38db0", - "libraries/3rdparty/CMock/test/system/test_interactions/struct_union_enum_expect_and_return.yml": "c926cca48cce1932fd57dc871187073cf3e35d12569369695a18a4a6fb7be3f8", - "libraries/3rdparty/CMock/test/system/test_interactions/struct_union_enum_expect_and_return_with_plugins.yml": "29f087a7f1217b3724517523dbf122bfe07277505549c465b1821df926b75c6e", - "libraries/3rdparty/CMock/test/system/test_interactions/stubs_with_callbacks.yml": "5e2cf62796105fa958e9528d3a30cff3a83c4f9d23385ab75a5939841647c486", - "libraries/3rdparty/CMock/test/system/test_interactions/unity_64bit_support.yml": "91a78d7f1216c1c18388116c169d2da0994351e61155fa6bb622bf16b635838e", - "libraries/3rdparty/CMock/test/system/test_interactions/unity_ignores.yml": "f6e9193481c9f0a5c5ab50833fea66da7bc34977b35a176fd613130ec883bf92", - "libraries/3rdparty/CMock/test/system/test_interactions/unity_void_pointer_compare.yml": "b92f86081c7771eca83efad7e38e071ee5bf8ce2e1a410df7d7af9c392486e6e", - "libraries/3rdparty/CMock/test/targets/clang_strict.yml": "4d477d7d7c1ffe0ce9175b89d4812119c7a0a79e924290e59c3dbd46b0975de3", - "libraries/3rdparty/CMock/test/targets/gcc.yml": "f012ab43326a37713fb72f33c0e03771fbbf4347e549de6cfdb476cda0ad9118", - "libraries/3rdparty/CMock/test/targets/gcc_64.yml": "0c0df186d99f01666f0d8145289179d86298c3671cdd7083c5e3c4a41625d5d2", - "libraries/3rdparty/CMock/test/targets/gcc_tiny.yml": "c9b57fd070a3e98fc3c237c9b3b99b31d0cf01cc0565b81812f57f68ca340714", - "libraries/3rdparty/CMock/test/targets/iar_arm_v4.yml": "fe0f205df28d23f4a940c1efce9e74ddd227427eaa55a70a283d8ff0722e45f4", - "libraries/3rdparty/CMock/test/targets/iar_arm_v5.yml": "7649d656896a709b2124b232bbe2d4911ae141617ccdd947e1f1541f23615bed", - "libraries/3rdparty/CMock/test/test_helper.rb": "7561fd77c8b7c6ec581d2e946db129893dd842d813801bd5ff6dfb42eb98cb19", - "libraries/3rdparty/CMock/test/unit/cmock_config_test.rb": "25ba1146b5fdf8ceca1c3fe385dd4a20f6e51a5a8b5ba83c8dbc935d9fa570ad", - "libraries/3rdparty/CMock/test/unit/cmock_config_test.yml": "2b1460d832657fe5f69b70b92a7bcd40edd42346aea4bab20043ffecd43719e4", - "libraries/3rdparty/CMock/test/unit/cmock_file_writer_test.rb": "88cf580634a0907f12b8068f1deefe7e90a14b0111d55da6d413f3827347b9d6", - "libraries/3rdparty/CMock/test/unit/cmock_generator_main_test.rb": "dececdef4bbc98f3fc6aaf40f10c3af850b03ac6e3fa627bd6e7350a96a41075", - "libraries/3rdparty/CMock/test/unit/cmock_generator_plugin_array_test.rb": "560f97841377b5ae6704cd4363e0d21c8883abcb7f5d2907608e6c0aa68c3518", - "libraries/3rdparty/CMock/test/unit/cmock_generator_plugin_callback_test.rb": "4d941ccc21ba7c3963697ae1266e24d565c887bc536fa639edb42dd58c287aa2", - "libraries/3rdparty/CMock/test/unit/cmock_generator_plugin_cexception_test.rb": "4a4bdfa48a17829dd1c3d58cfd4da6769bfde6bd592b55afc2685d24a667fec1", - "libraries/3rdparty/CMock/test/unit/cmock_generator_plugin_expect_a_test.rb": "a9e543df7153bb147b90a94b09b7a54182d8f3f54effb9cff15a0fd58aae4937", - "libraries/3rdparty/CMock/test/unit/cmock_generator_plugin_expect_any_args_test.rb": "56c461cd0c0dbd14dfe0eaaf55989077c04067e70c13e561e27634d027da90ae", - "libraries/3rdparty/CMock/test/unit/cmock_generator_plugin_expect_b_test.rb": "6c4179cb40ae3cc3d7565d8fac5d0396854000fe435b64d85b5efda87e49ecef", - "libraries/3rdparty/CMock/test/unit/cmock_generator_plugin_ignore_arg_test.rb": "c433e1db36e15ec882c9b555b7de2901d6f5e316887b2224d71f72e0a841b855", - "libraries/3rdparty/CMock/test/unit/cmock_generator_plugin_ignore_test.rb": "163ba76164e27a44b773a41bf99a898e29b4532f79c157f8994dd4e354dd1265", - "libraries/3rdparty/CMock/test/unit/cmock_generator_plugin_return_thru_ptr_test.rb": "62a488259440c6b8ae34ad9265bc2c9b2741498d0d0ed7f408ecb39935aa989b", - "libraries/3rdparty/CMock/test/unit/cmock_generator_utils_test.rb": "5cfb64fde1d437bbb70c35745a9c95ad5f1093eee2017b3db77b096526b0eedf", - "libraries/3rdparty/CMock/test/unit/cmock_header_parser_test.rb": "7c8e84c06144ae72ae3c5c70c148f3557c81440e4a3662283a0b77f120051197", - "libraries/3rdparty/CMock/test/unit/cmock_plugin_manager_test.rb": "510fe651508db42d428539b63fbf2aa5c2601ac4b5f1fe0d5d756ba4f03f08e5", - "libraries/3rdparty/CMock/test/unit/cmock_unityhelper_parser_test.rb": "e77b10af099223b17e9c524d0e6520a8d90ef878f9326d8729a3d0cab437d172", - "libraries/3rdparty/CMock/vendor/behaviors/Manifest.txt": "f6def0d4d599a6d17c7b0a6e5cc65824ba9312a85c4d9640f9f40f3a65fe6e39", - "libraries/3rdparty/CMock/vendor/behaviors/Rakefile": "be9b1156744f3cf65e64c075ae5385313ce59e5ac4178ed8c63371bc817d214f", - "libraries/3rdparty/CMock/vendor/behaviors/lib/behaviors.rb": "c818cb720cce5d3da2b1a1e09601f2329f8889cccfdaf4e7ad7482d2524609d0", - "libraries/3rdparty/CMock/vendor/behaviors/lib/behaviors/reporttask.rb": "6abac47d73976e719ef3b2e47ffde7e048a08044e807b8d5b3eca7ab18c3acd8", - "libraries/3rdparty/CMock/vendor/behaviors/test/behaviors_tasks_test.rb": "04ef3a3e45cd62bc102267a2919240a9a021438e0dafccf2d817234104426ba9", - "libraries/3rdparty/CMock/vendor/behaviors/test/behaviors_test.rb": "4240fa9b7f31dcff3c5509827ebed298d2c388f55b8701221874300e815d76e0", - "libraries/3rdparty/CMock/vendor/behaviors/test/tasks_test/Rakefile": "0c9e136971e8aeb54404b4827de1b85cabb5512a8aaf8f36929e052339144638", - "libraries/3rdparty/CMock/vendor/behaviors/test/tasks_test/lib/user.rb": "b5527ab1ec2cde94b51b84e785840a076ceb4df87f8c71a52eb9119a1785f1d5", - "libraries/3rdparty/CMock/vendor/behaviors/test/tasks_test/test/user_test.rb": "e12e02edcc9868ad43634427fef9873e7e6a03a6144d59ed302d1f40beab18d6", - "libraries/3rdparty/CMock/vendor/c_exception/Gemfile": "cb78daa14792e77465dd161b635ba85f7a143bf30e003cd8fb16b01b7a166f6d", - "libraries/3rdparty/CMock/vendor/c_exception/Gemfile.lock": "15f6fce88a07c7d1c88ca17351debad274a78337fe6149e84c1d098ba5afd8a1", - "libraries/3rdparty/CMock/vendor/c_exception/LICENSE.txt": "4a7d2fd8c1a6b383df443b91d716cca25809e901fdc2f473026c17f00a02bb5d", - "libraries/3rdparty/CMock/vendor/c_exception/README.md": "9420da200b2d36c4948268b25f82cac4a71d66c5e4ede3012d714d2ce30d230f", - "libraries/3rdparty/CMock/vendor/c_exception/docs/CException.md": "70fb5bb5fd31b2f2a3414f67dc55544af51afd2a16c00a50db2ca74f1c55df6b", - "libraries/3rdparty/CMock/vendor/c_exception/docs/ThrowTheSwitchCodingStandard.md": "a1838b8c9e20ac3c15bf96742b716b6621c0607c9273ae0f92a6769e3aa45f41", - "libraries/3rdparty/CMock/vendor/c_exception/lib/CException.c": "02ded3b989fe1828ba78ede51a3b8f0624fd886da7d714deab3919938a8e205e", - "libraries/3rdparty/CMock/vendor/c_exception/lib/CException.h": "7feecde43aa33b8c2d22cc49fb51cf7cf8e1af04d8ec3be80d469d3e19cb7a33", - "libraries/3rdparty/CMock/vendor/c_exception/project.yml": "a40754c9266fa0905e42dd4dfd67e8248a26714d7f9bcd46a9dd2f5f497fc1bb", - "libraries/3rdparty/CMock/vendor/c_exception/test/TestException.c": "08979f5df6d14e827a261103543f70d0ede73d801ec3b343058f812600f01d4d", - "libraries/3rdparty/CMock/vendor/c_exception/test/support/CExceptionConfig.h": "f3f9e263f9dc8779684e0171241597d583888f971b0c224e92c02665eca8bc98", - "libraries/3rdparty/CMock/vendor/unity/CMakeLists.txt": "7028a7282b2e5703e9222c7608a8d3e6ff5ee901b911614d8f993eb3006a4f54", - "libraries/3rdparty/CMock/vendor/unity/LICENSE.txt": "3ed9b51da86f52c729c96cc99fdde6444b2297c788a9cf4ad1d3649dc34c4985", - "libraries/3rdparty/CMock/vendor/unity/README.md": "0a81a08645acbaf71afff965d0c7474a6a31af9d46cc156b78f7e35687802322", - "libraries/3rdparty/CMock/vendor/unity/auto/colour_prompt.rb": "2f879fa491913d5c32312353c2df6288fbdae11d78f43264078eab4c561f6c34", - "libraries/3rdparty/CMock/vendor/unity/auto/colour_reporter.rb": "2e6fbc6a1718d1f755378a934526a5b4fe11ef045302ac1e1c251e927477d697", - "libraries/3rdparty/CMock/vendor/unity/auto/generate_config.yml": "85c5702a168e366148e8ec89df416eae888278a526c79459162c0f37641a02fe", - "libraries/3rdparty/CMock/vendor/unity/auto/generate_module.rb": "ee6d57c2470555f987fd3cdc368ac193458366653dca363f088ba1ccb43a0c87", - "libraries/3rdparty/CMock/vendor/unity/auto/generate_test_runner.rb": "11edb8f93baa042ff543cb8c1d06c7f87672cc172318c13f9c2d675dfd0bc7e6", - "libraries/3rdparty/CMock/vendor/unity/auto/parse_output.rb": "ad1910bfff4d778f1fc53c111588238ee003809eb60717fde6dce7cf854879c6", - "libraries/3rdparty/CMock/vendor/unity/auto/run_test.erb": "d281f5070bc3627e69b515be4d5be243d2d96ec84857deb84ae8c97fd6e4e6ef", - "libraries/3rdparty/CMock/vendor/unity/auto/stylize_as_junit.rb": "fd0c45171391cbd0bc63cd5d4499e89eb51d087cf9c6c5ac2d4127e3d56bd9eb", - "libraries/3rdparty/CMock/vendor/unity/auto/test_file_filter.rb": "a69a44fccafbb504635163793799aa59809035951d7f258547d64d4145131a60", - "libraries/3rdparty/CMock/vendor/unity/auto/type_sanitizer.rb": "ecc5677ac9820f343aca50893463602fca940c24daf07a4784b4e9e0801c3f4b", - "libraries/3rdparty/CMock/vendor/unity/auto/unity_test_summary.py": "e46350b7132f04a7bb339d47bcef11ae0cb9e74c2050d0d75697b33c253c2895", - "libraries/3rdparty/CMock/vendor/unity/auto/unity_test_summary.rb": "721818505aab3199a712e4d6f964c84b07720f84a8fcf504349b586f05e8cd2b", - "libraries/3rdparty/CMock/vendor/unity/auto/unity_to_junit.py": "0743f26b5ae67af204981293337f9cc9a8cb46c90aaa3f46f31fd9658ab65990", - "libraries/3rdparty/CMock/vendor/unity/docs/ThrowTheSwitchCodingStandard.md": "f0f000eb1fc32b3a6684da894ed816d09ba077ad85e65e44f1f7998da47ef178", - "libraries/3rdparty/CMock/vendor/unity/docs/UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf": "28e8687d90c111ee8c249a7748495a0bfe00a3f35231b026ac73eed01d32eb34", - "libraries/3rdparty/CMock/vendor/unity/docs/UnityAssertionsReference.md": "6024576af0c49ffdec47ae174d22314848a175052d9b7f89fc82794757eecb93", - "libraries/3rdparty/CMock/vendor/unity/docs/UnityConfigurationGuide.md": "493d4860d561e583d992367df0f0efba226961c1dba8fd2bb4d2889a7308224d", - "libraries/3rdparty/CMock/vendor/unity/docs/UnityGettingStartedGuide.md": "54193aa975c291e62682c65fe088b7f960bedf4b58e2ce63e2dc1696a8ca3f6f", - "libraries/3rdparty/CMock/vendor/unity/docs/UnityHelperScriptsGuide.md": "f8b89d36c0b901265fd3366f0a93045218c03adf501c240a5570bc68e22ceaac", - "libraries/3rdparty/CMock/vendor/unity/examples/example_1/makefile": "a6b1cba50764fa8f18ef16dd11f4f1e7cd90e614d14bfe7dc22239245751cb6a", - "libraries/3rdparty/CMock/vendor/unity/examples/example_1/readme.txt": "4d72d51f1a385cd4aeb594e4485ca2439d5b86247523cd2d2b89acc2173d8a24", - "libraries/3rdparty/CMock/vendor/unity/examples/example_1/src/ProductionCode.c": "9d6b0ae761f7dfc008d6547031ff92de63976f5621b6feef2a29614cec51b357", - "libraries/3rdparty/CMock/vendor/unity/examples/example_1/src/ProductionCode.h": "25cfcc42b79140f4c399363e0ef10a6e518a1831e10c61cc138d6d9a230425ce", - "libraries/3rdparty/CMock/vendor/unity/examples/example_1/src/ProductionCode2.c": "c2cc0a76cb2ea145d3861bd9ccc467ac45ad3e8230d5075ed174ce3a5cd50a76", - "libraries/3rdparty/CMock/vendor/unity/examples/example_1/src/ProductionCode2.h": "d4db1a4eea2bee3d668a203d4953f415f23be64a826c5a73059ef221f61b3882", - "libraries/3rdparty/CMock/vendor/unity/examples/example_1/test/TestProductionCode.c": "33e4b165d437c376f2393da59be0b22a3a458ebbe94cc2b340159b71f2d8bb74", - "libraries/3rdparty/CMock/vendor/unity/examples/example_1/test/TestProductionCode2.c": "11387f2ecdc97ee3344c0df42123e73cae899702b348d5597e09e9760db267aa", - "libraries/3rdparty/CMock/vendor/unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c": "2c84d6b954a6810a7c509dc861ee0c18a562dd23a5dd7747ea524f0c1467d9a4", - "libraries/3rdparty/CMock/vendor/unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c": "b6ec7bb984eddea80c178ecb30f6f772325a745ff9812a5e3f41f236c43e19e0", - "libraries/3rdparty/CMock/vendor/unity/examples/example_2/makefile": "da2bf7ebba3456dec77ef500884654fdcffeb514ecbb84dc9cf930821ec2e9ec", - "libraries/3rdparty/CMock/vendor/unity/examples/example_2/readme.txt": "a03bf4ac2d294a037189b42f7bf8fdff0bf50524857e3f8933eba76085f22f04", - "libraries/3rdparty/CMock/vendor/unity/examples/example_2/src/ProductionCode.c": "75136eec7a43d0dbe980dea19ec46f6e16c0da92093686e59f6143d8ae8b5bb7", - "libraries/3rdparty/CMock/vendor/unity/examples/example_2/src/ProductionCode.h": "25cfcc42b79140f4c399363e0ef10a6e518a1831e10c61cc138d6d9a230425ce", - "libraries/3rdparty/CMock/vendor/unity/examples/example_2/src/ProductionCode2.c": "a929e7ef393ec5ccc53e3f885d663a1c8fbe5cc5f72a0fcad5c0d2f6cbc8b210", - "libraries/3rdparty/CMock/vendor/unity/examples/example_2/src/ProductionCode2.h": "d4db1a4eea2bee3d668a203d4953f415f23be64a826c5a73059ef221f61b3882", - "libraries/3rdparty/CMock/vendor/unity/examples/example_2/test/TestProductionCode.c": "7db7b7d9e7216fdc0814ff8bbecc37f40e573006207b47cfd8954469ebc9b502", - "libraries/3rdparty/CMock/vendor/unity/examples/example_2/test/TestProductionCode2.c": "332f23e940a9676504c84dc92d1a6cf72cd9204afe7f664c16b58ee7dbff312d", - "libraries/3rdparty/CMock/vendor/unity/examples/example_2/test/test_runners/TestProductionCode2_Runner.c": "14aef95de310f1e1381feaaf256ea94d0905a538311b5e3fdc944f927e75b287", - "libraries/3rdparty/CMock/vendor/unity/examples/example_2/test/test_runners/TestProductionCode_Runner.c": "a782491bcd8dd857b26a62df58e8671f1cb7641d6c0fe7f7853c079732ccd8e9", - "libraries/3rdparty/CMock/vendor/unity/examples/example_2/test/test_runners/all_tests.c": "fe5c0418201d70dc696b0db6acf60b2ea0069d74fa94fb96d7169b8752e00d17", - "libraries/3rdparty/CMock/vendor/unity/examples/example_3/helper/UnityHelper.c": "091c2466d25deffd8958332ad03d393ca1ec1b1f6150c16626d57d5901eb1b21", - "libraries/3rdparty/CMock/vendor/unity/examples/example_3/helper/UnityHelper.h": "a95bb6d3704c51637bb0855787236b41229e3836601ba97e88768f95779f3d4d", - "libraries/3rdparty/CMock/vendor/unity/examples/example_3/rakefile.rb": "7b3b7d271caeb7af887b08986c9922ec331c8515d654ffb3e200833aa9be809f", - "libraries/3rdparty/CMock/vendor/unity/examples/example_3/rakefile_helper.rb": "bfc4aca33ed7bf68ffebf686790ec0c9e7a7bd23527147e81c10f4fd2dc38be0", - "libraries/3rdparty/CMock/vendor/unity/examples/example_3/readme.txt": "2af5e731fb1db0ddf5c739f0b08fb2724e4acc7efb7ee0a02fe474a3e69d284a", - "libraries/3rdparty/CMock/vendor/unity/examples/example_3/src/ProductionCode.c": "75136eec7a43d0dbe980dea19ec46f6e16c0da92093686e59f6143d8ae8b5bb7", - "libraries/3rdparty/CMock/vendor/unity/examples/example_3/src/ProductionCode.h": "25cfcc42b79140f4c399363e0ef10a6e518a1831e10c61cc138d6d9a230425ce", - "libraries/3rdparty/CMock/vendor/unity/examples/example_3/src/ProductionCode2.c": "a929e7ef393ec5ccc53e3f885d663a1c8fbe5cc5f72a0fcad5c0d2f6cbc8b210", - "libraries/3rdparty/CMock/vendor/unity/examples/example_3/src/ProductionCode2.h": "d4db1a4eea2bee3d668a203d4953f415f23be64a826c5a73059ef221f61b3882", - "libraries/3rdparty/CMock/vendor/unity/examples/example_3/target_gcc_32.yml": "2e61fc6bc7930929985f1ea1ec5d0019fe1d133c01555c86b01b20145fb6aaa4", - "libraries/3rdparty/CMock/vendor/unity/examples/example_3/test/TestProductionCode.c": "b0e815e2285b1730d7dcd24b400d15b4efccfe5e4776d96248a2165c2f0caec6", - "libraries/3rdparty/CMock/vendor/unity/examples/example_3/test/TestProductionCode2.c": "895f437abd40bd461fd86a3b8ed6bc02c5c283fc3926aafe53b473e477fa0a5a", - "libraries/3rdparty/CMock/vendor/unity/examples/example_4/meson.build": "673e6c3c44d3e9933df54d13f27d1b90526ec2c990709aabc0e62a40fb20bf86", - "libraries/3rdparty/CMock/vendor/unity/examples/example_4/readme.txt": "d16faba668694cacde12746c58ec512de301218543217a9644e4e269bee8ab0c", - "libraries/3rdparty/CMock/vendor/unity/examples/example_4/src/ProductionCode.c": "9d6b0ae761f7dfc008d6547031ff92de63976f5621b6feef2a29614cec51b357", - "libraries/3rdparty/CMock/vendor/unity/examples/example_4/src/ProductionCode.h": "25cfcc42b79140f4c399363e0ef10a6e518a1831e10c61cc138d6d9a230425ce", - "libraries/3rdparty/CMock/vendor/unity/examples/example_4/src/ProductionCode2.c": "c2cc0a76cb2ea145d3861bd9ccc467ac45ad3e8230d5075ed174ce3a5cd50a76", - "libraries/3rdparty/CMock/vendor/unity/examples/example_4/src/ProductionCode2.h": "d4db1a4eea2bee3d668a203d4953f415f23be64a826c5a73059ef221f61b3882", - "libraries/3rdparty/CMock/vendor/unity/examples/example_4/src/meson.build": "61880caad3c43396a16c5b6bd5a856480c55c129bf1fc282b874a99c87ab6af0", - "libraries/3rdparty/CMock/vendor/unity/examples/example_4/subprojects/unity.wrap": "59d1f20c0ada120ee62ef1baf30be51ebaaf40d30b16e4da014f9d58023b7a8a", - "libraries/3rdparty/CMock/vendor/unity/examples/example_4/test/TestProductionCode.c": "f3a8fa16e599d6aa7a0c9cf604ea1d42ff5466244372e00543fc3b2e116f0d41", - "libraries/3rdparty/CMock/vendor/unity/examples/example_4/test/TestProductionCode2.c": "26c0ee5fabc061cfd32ae891ab16f4b985f306dfea1a939d00e89a3c1ae6f25e", - "libraries/3rdparty/CMock/vendor/unity/examples/example_4/test/meson.build": "0e5be2e9c4406bf144f41b04c56ab62872b5e1c60c47c1ec81679b3b65a6236a", - "libraries/3rdparty/CMock/vendor/unity/examples/example_4/test/test_runners/TestProductionCode2_Runner.c": "2c84d6b954a6810a7c509dc861ee0c18a562dd23a5dd7747ea524f0c1467d9a4", - "libraries/3rdparty/CMock/vendor/unity/examples/example_4/test/test_runners/TestProductionCode_Runner.c": "b6ec7bb984eddea80c178ecb30f6f772325a745ff9812a5e3f41f236c43e19e0", - "libraries/3rdparty/CMock/vendor/unity/examples/example_4/test/test_runners/meson.build": "a3552bd0a1d0ddd01dc5a70effa8582b1f1bf07b706cea47da4b512b040b06e2", - "libraries/3rdparty/CMock/vendor/unity/examples/unity_config.h": "a7038b3cd217dc3d9534ce8d4d58c842912ee63ac35718d4917a605635eb941b", - "libraries/3rdparty/CMock/vendor/unity/extras/eclipse/error_parsers.txt": "67e309b5e803a22ba22c347aa5123cbbe73edcbfe9950aa0fd74576a4add1a12", - "libraries/3rdparty/CMock/vendor/unity/extras/fixture/rakefile.rb": "7392cb66dfa0de3c644934adf64f4e03ff0a2a2128fd10f9df5600e9a991d764", - "libraries/3rdparty/CMock/vendor/unity/extras/fixture/rakefile_helper.rb": "8ff10722c9808c465e02b83f062d24ad47371cb09be32965d2ec455742b5e3f7", - "libraries/3rdparty/CMock/vendor/unity/extras/fixture/readme.md": "6a2e59367724a64ae4fcda3de28158006c72a0d4b30b9abeac15ba415fe9f145", - "libraries/3rdparty/CMock/vendor/unity/extras/fixture/src/unity_fixture.c": "c0ccd5532ff2f73c15eef21533d6bf292b2b6173bb6133e2308ab24c222ea8dc", - "libraries/3rdparty/CMock/vendor/unity/extras/fixture/src/unity_fixture.h": "73854da3d615a041ab114be64bb98debfa8b186ac9741682f3de4cabc153100b", - "libraries/3rdparty/CMock/vendor/unity/extras/fixture/src/unity_fixture_internals.h": "adf665b853438b5e35ffc72e6d0f1bd404a09188fbd4fc7c64c2eb30b25781ea", - "libraries/3rdparty/CMock/vendor/unity/extras/fixture/test/Makefile": "f61e0e71da2aa1e38d4ba244178ef7ddd976447bc57332e17ac62319e1765ee3", - "libraries/3rdparty/CMock/vendor/unity/extras/fixture/test/main/AllTests.c": "b90030dde0bdea78a78df99e177bba1aa6a162a21527027920e01abbe991e8f5", - "libraries/3rdparty/CMock/vendor/unity/extras/fixture/test/template_fixture_tests.c": "3ca4c500397fc3dd7370b419e7d4f7abb3a8b05deacaf72a4e2ccb396669003a", - "libraries/3rdparty/CMock/vendor/unity/extras/fixture/test/unity_fixture_Test.c": "6edfe13bd81264856f4bbe3d421ab40f1f47529e0a57f7b95b1b13155d51db24", - "libraries/3rdparty/CMock/vendor/unity/extras/fixture/test/unity_fixture_TestRunner.c": "cabed04e1b026bd8ae2b47f54e8777899c3564cae952e62fc59965d2117a3215", - "libraries/3rdparty/CMock/vendor/unity/extras/memory/rakefile.rb": "9f53e177b9066458d30e94c31e8ef8bb6f66b2eba7c86137d20ebbdab8e42787", - "libraries/3rdparty/CMock/vendor/unity/extras/memory/rakefile_helper.rb": "bf752945bdbc26c9d9bb4acfbe3bd4210c6d1e7b811af755024b9000f0edf035", - "libraries/3rdparty/CMock/vendor/unity/extras/memory/readme.md": "5cc935c39537f3a403a80b82c1ba24d6ba895275927a6b5db8362e233438a97a", - "libraries/3rdparty/CMock/vendor/unity/extras/memory/src/unity_memory.c": "7bc202de8e950466f713b2c3918beb824a10d33cd7df43058dd4676573fc2645", - "libraries/3rdparty/CMock/vendor/unity/extras/memory/src/unity_memory.h": "85ea1b5fa55bd59f03901fad4272a938a33696d9f0821d085ba6fc5463fb391b", - "libraries/3rdparty/CMock/vendor/unity/extras/memory/test/Makefile": "4530559b0cf8de81a35d3e5901aa3b5bdfb523cba3458bac37e1beebedde0e63", - "libraries/3rdparty/CMock/vendor/unity/extras/memory/test/unity_memory_Test.c": "64e492cafc7da28265299706ee3c663db66edf3c5556cb27f06039d1876f63d8", - "libraries/3rdparty/CMock/vendor/unity/extras/memory/test/unity_memory_TestRunner.c": "8265bf36612d73d5286303a4259b444e7e86ed011551c3be9f43be6a1804a781", - "libraries/3rdparty/CMock/vendor/unity/extras/memory/test/unity_output_Spy.c": "c18d6d3034a751915b3deb137b098eee14498a06b4f7bf8a8a59ffe4d260d4a7", - "libraries/3rdparty/CMock/vendor/unity/extras/memory/test/unity_output_Spy.h": "20f9beac9acaf917cbf2011fbae1e5b919c6876646ca48e02379b72a12f7f971", - "libraries/3rdparty/CMock/vendor/unity/meson.build": "96c3a2e5f3817783e7ed0a6fead1bdbd6e486d89da020a9071a4fd57efd809f3", - "libraries/3rdparty/CMock/vendor/unity/src/CMakeLists.txt": "d142a855d72394a3b5bbac8ec8162d64fa4705bd546ec2c95f82d19de862d8ec", - "libraries/3rdparty/CMock/vendor/unity/src/meson.build": "8323ce6255874c200d74a2dc6057c099b056084a59f679733ecdbec89d465ac7", - "libraries/3rdparty/CMock/vendor/unity/src/unity.c": "0fe7ab63c9ccde2a797a84d2f458a9981583e9c5ae702a3b4a1d521e97eee210", - "libraries/3rdparty/CMock/vendor/unity/src/unity.h": "cc15d99a35b6488fd3434bd60db51b99cc22fd98975991d3ec247eb31ff98cb5", - "libraries/3rdparty/CMock/vendor/unity/src/unity_internals.h": "90657c9162b5e5f8381806639a0071958bb9b3d42622ebef1a0857c9caf0ca9a", - "libraries/3rdparty/CMock/vendor/unity/test/Makefile": "7c04243c305b1edf102bde8b209a192d93ee7e4442b9a46c232e8ff20c5c522e", - "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_cmd.c": "832ec9c8c30fd374adea6620dd38c19c689047bdad0513984066e525eefc0723", - "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_def.c": "246d3d9bc73ccef28f7a70b8748d95cd31eb85b9874e6972d30be1f74000fb8c", - "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_head1.c": "ed31f2c63e4bb7ba015a5388429b34287ecefa098551e55ae5864b883c3cdad4", - "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_head1.h": "fc279a298e45f70a559d05132ae888973c8f5aad913c0b2d6d8425ccbde5c998", - "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_mock_cmd.c": "b826f44458088555058b6c3b9c7ef15c2a5528c8efe01034d0f1debee06a739e", - "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_mock_def.c": "1016f1162a3ea3be49dffd824e529493d2845860d1139cb44cc32f0fe0a0701f", - "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_mock_head1.c": "cb7b253cefa315d7b4edaa386bffb63a728f3b33c869bf55ecfcd53d1e47eaaf", - "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_mock_head1.h": "9cb779d98b40e5dfcf70db57f7d3deae6310cac80547140c972ecde585f56c18", - "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_mock_new1.c": "4e5d73972dce4276dc688016eeb310e93ef96ea7beee0e6839092f0459798856", - "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_mock_new2.c": "74418cfefe544ac366a043972648c31742b2a4652155507c93a1a2a38471a5eb", - "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_mock_param.c": "6a8edda1c9b5a56d38e705d2d0341232ca9a55f1fb7383171475cb972c9b6c18", - "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_mock_run1.c": "4e5d73972dce4276dc688016eeb310e93ef96ea7beee0e6839092f0459798856", - "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_mock_run2.c": "74418cfefe544ac366a043972648c31742b2a4652155507c93a1a2a38471a5eb", - "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_mock_yaml.c": "763d37bc5a5edc7566bf6625dd38878aed8cc94a5cec8f6e23aee16e30bdaad6", - "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_new1.c": "983abee21894ba9fb5d667a69b046558867f9f16eaf546d259671f54dd4be626", - "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_new2.c": "9726bdaec7a5c8e99b4e6bbfc41b91c8687665bbafdb617be4514eadc30b023c", - "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_param.c": "7ab6834f8376908625b9999a4c5dad32ad65c8f3fd852e78b6d9c3bc871fc639", - "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_run1.c": "983abee21894ba9fb5d667a69b046558867f9f16eaf546d259671f54dd4be626", - "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_run2.c": "9726bdaec7a5c8e99b4e6bbfc41b91c8687665bbafdb617be4514eadc30b023c", - "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_yaml.c": "17714f87e28c7723608fdc832189965482404e3540e3f3ec55afa7f07054e0a7", - "libraries/3rdparty/CMock/vendor/unity/test/rakefile": "5dc9eb1c3ba23e040a3b413d613f252ab2b475ed741fa3690ecbce765e339156", - "libraries/3rdparty/CMock/vendor/unity/test/rakefile_helper.rb": "b3cfef74c49503599d02c4ca75a7fe72622b97c2ac217ebc853a9d545b419405", - "libraries/3rdparty/CMock/vendor/unity/test/spec/generate_module_existing_file_spec.rb": "41d0b6bf8255f97e4fbf6c4f5fb2dcc61d846d2ddaf2cad763c1f500b8a68727", - "libraries/3rdparty/CMock/vendor/unity/test/targets/ansi.yml": "371ad9aaf2dc447000f8d575b3c6372444cc318e890bb968e331a9d990d8aebe", - "libraries/3rdparty/CMock/vendor/unity/test/targets/clang_file.yml": "afbb70db8cc433aca8e6ea3d04d2f5142cc8bd1a8f6e421006038c9601222d32", - "libraries/3rdparty/CMock/vendor/unity/test/targets/clang_strict.yml": "336cc5344beccd0c3a6c83227b764c8945193b464600ba56ade14c3c44c98b27", - "libraries/3rdparty/CMock/vendor/unity/test/targets/gcc_32.yml": "734debdb4392b83942cdccfb31ca724a43b923617a8b45d86bf6a1fefa86a7e6", - "libraries/3rdparty/CMock/vendor/unity/test/targets/gcc_64.yml": "530851623a24956399add9f0c0fe18719eb6dc428c1bec03ae6b255a9d0ae972", - "libraries/3rdparty/CMock/vendor/unity/test/targets/gcc_auto_limits.yml": "fbd96dc8a94c4de70dae87ff378312b3ee07cb8219d6290af17d36e3b34d0f6e", - "libraries/3rdparty/CMock/vendor/unity/test/targets/gcc_auto_stdint.yml": "c9ec9f61987603d059d4509f4befe0744f5fa99a137d95be359ddd2c71443281", - "libraries/3rdparty/CMock/vendor/unity/test/targets/gcc_manual_math.yml": "3bd8b0d4eb9fa693f4cf74fdaf61e31183b85351c4e957577bc8497cdc8f15a0", - "libraries/3rdparty/CMock/vendor/unity/test/targets/hitech_picc18.yml": "7b2a4ea56f3125fd75bb7d8e9baf1f26706b206f98c6f88e4d4b4091361fc546", - "libraries/3rdparty/CMock/vendor/unity/test/targets/iar_arm_v4.yml": "3df93ad02fd4e1cc17d28a63f824881eee4f73e1db54e43ff36909dd2f5eabaf", - "libraries/3rdparty/CMock/vendor/unity/test/targets/iar_arm_v5.yml": "bb6f961bbf3cf2c4651a33bf415818726b4d609c05cb9fdeabe6dc7a94d47e6b", - "libraries/3rdparty/CMock/vendor/unity/test/targets/iar_arm_v5_3.yml": "bb6f961bbf3cf2c4651a33bf415818726b4d609c05cb9fdeabe6dc7a94d47e6b", - "libraries/3rdparty/CMock/vendor/unity/test/targets/iar_armcortex_LM3S9B92_v5_4.yml": "8835f98e84e75b920fb9e27c0ebcc9c11f14bff768b382441099a01cbf7a129d", - "libraries/3rdparty/CMock/vendor/unity/test/targets/iar_cortexm3_v5.yml": "70ba518b050162526cf5cfd3cdc90a00a6aad0d0ef65558612d384c855513d52", - "libraries/3rdparty/CMock/vendor/unity/test/targets/iar_msp430.yml": "527ef25ba8d5056a8b44fce38302895a1a8ed342331edeed69db067b831c8e7b", - "libraries/3rdparty/CMock/vendor/unity/test/targets/iar_sh2a_v6.yml": "b99162afd271d76014220cabda53ff3951aae6595b198520eba36ef095e57746", - "libraries/3rdparty/CMock/vendor/unity/test/testdata/CException.h": "1d815018f2b5c5973982e9e13c9534bb5cd96e6deea5b1f29b531233f476e843", - "libraries/3rdparty/CMock/vendor/unity/test/testdata/Defs.h": "9c7988c8f87c13251880be27117c9cd5d7078990bef9d34200a342cf26911bd7", - "libraries/3rdparty/CMock/vendor/unity/test/testdata/cmock.h": "ae873ab649d7ea46f2e23ee13cbac383c527d5935bc40b31dced6969fb4d235d", - "libraries/3rdparty/CMock/vendor/unity/test/testdata/mockMock.h": "bbf1b3aaddf02a21cdb52b7b58d2f74927d586d013ca923e25eb93b121bdcf47", - "libraries/3rdparty/CMock/vendor/unity/test/testdata/testRunnerGenerator.c": "721d2a8bef4daf1d4a61e30f8bf8bf1d263377c9f763f9129218d638ddac65d8", - "libraries/3rdparty/CMock/vendor/unity/test/testdata/testRunnerGeneratorSmall.c": "f32a9a46a78102474346c7516bdb0401fabef9ee8616d033237a4bc658e3357a", - "libraries/3rdparty/CMock/vendor/unity/test/testdata/testRunnerGeneratorWithMocks.c": "ea6887c98c35906e04e492cc06618294fef70f0bbbc9ca0cf1dd2ac3c14fe72d", - "libraries/3rdparty/CMock/vendor/unity/test/tests/test_generate_test_runner.rb": "841d599bc5addfc2f89c425031428c67ea7d32d09eee0fb9ce86bac6b12f8bf6", - "libraries/3rdparty/CMock/vendor/unity/test/tests/testparameterized.c": "76ea3bd9cd68cb88a0a3a5098b37f4669e382065f9f372ca9510c525609176a7", - "libraries/3rdparty/CMock/vendor/unity/test/tests/testunity.c": "26709a643b37d7a93310ceace6589cbdc3506638e83e411a77bcdbbb3dce3316", - "libraries/3rdparty/http_parser/AUTHORS": "d1a15fcf0453796ee31e900dd5edff35ae86fb6ae4375c2afda8bde0f6fd2f03", - "libraries/3rdparty/http_parser/LICENSE-MIT": "79e6ba8b687cb54786207342b9b6fcee0ac10218453ed9009b84d949b2233cc0", - "libraries/3rdparty/http_parser/Makefile": "b8290bcb23cbf9d139863d3f11be53597f49cc88bc9ee0deb07d50f3955d2af5", - "libraries/3rdparty/http_parser/README.md": "ced31a1d4f05a548195205f35330c1915953b5f9c91d9b78eb27432ba6906a83", - "libraries/3rdparty/http_parser/bench.c": "e64bfe50494d661794e515aad502f0154e888fbf6458fb8a18252ad0b5667c84", - "libraries/3rdparty/http_parser/contrib/parsertrace.c": "e3d5f53fa3f6b26bf1cefc359eeadec35beaf61c6db863d2338cbac278d3a5ee", - "libraries/3rdparty/http_parser/contrib/url_parser.c": "ecc24f95707866de11b4b6588cbd0bb0728b1def6e95387cedbef98a73a0acf2", - "libraries/3rdparty/http_parser/http_parser.c": "66acdda5c3704b85073fb49566dcca4ce6aa6054636fed2ea4246554d8851bc6", - "libraries/3rdparty/http_parser/http_parser.gyp": "ca7cc55cc2a81c5a5b3795171e3a953e5c7b10ec2923ec1560e60f914ca18ece", - "libraries/3rdparty/http_parser/http_parser.h": "2dfe487f6ee48b3e5e0a88efc775c092840eee94fdc107bceeaaad84fadff418", - "libraries/3rdparty/http_parser/test.c": "7da1cc958549fb257a2685661bf2d14468350104127a205b85a198d3d6488f1f", - "libraries/3rdparty/jsmn/jsmn.c": "f91533b8c65ffe13d3389f18e6f74a09aec61c23bc44318f40135bc004b075fa", - "libraries/3rdparty/jsmn/jsmn.h": "f24904f8e9df0be61cd26430851f026ebbf7d85a4c856ef2c975e85f1cb304b7", - "libraries/3rdparty/lwip/BUILDING": "0a1c749c1f6f5f0ec6ad414cb7e591269519ae43246877fe509f1a5829e36e35", - "libraries/3rdparty/lwip/CHANGELOG": "20b9468a181659c87502589c5af5d47799f981971485d17d51fc0137d09c4c9f", - "libraries/3rdparty/lwip/CMakeLists.txt": "af867862797d65753179f66d3e8ee9cc3aa0cb75d29569cdc907614761ce89b6", - "libraries/3rdparty/lwip/COPYING": "8fb15ebdb19eb669e1d37fcd8e57a44c477fcc0e93a9ab0d181760965f94d5ed", - "libraries/3rdparty/lwip/FEATURES": "39a76615b5fc94b8fcc9236969f17b5b0589de89cf16dab88d0352e2a03fe196", - "libraries/3rdparty/lwip/FILES": "8cab124b0bfd686958adeb1e36e7f485b2c0411b75fecb28590cfd8c98bf00c6", - "libraries/3rdparty/lwip/README": "4df2502ceaad651baeab18f8a0a42600abf6958a42eb2a9bb9a8a00c6bf7a9cd", - "libraries/3rdparty/lwip/UPGRADING": "26796743baf56c6076c44a09785927bb123af20a5e86343f1dd4c1dfd083be0e", - "libraries/3rdparty/lwip/contrib/Coverity/coverity.c": "3eb4a92d33ab70f452c03348ce3b633fe218fe805886faccdcd95797eef5232e", - "libraries/3rdparty/lwip/contrib/Filelists.cmake": "590fc51ddb0af575d8c022ee8188df8e8651944f88bbd424c94f2ab11c508c8a", - "libraries/3rdparty/lwip/contrib/Filelists.mk": "ea49ada77ac4343f92ff36c199427cd40d1f5a04f84f19ff1b50d0cec65f096a", - "libraries/3rdparty/lwip/contrib/addons/ipv6_static_routing/README": "975561ddbdb26be17bbdc2d12fb6caffd82c215985f2a09463c366bf155321be", - "libraries/3rdparty/lwip/contrib/addons/ipv6_static_routing/ip6_route_table.c": "afa0fb5045d1b6fec69e158b6d5a04853061be9cd141e42e86e491bcb4762872", - "libraries/3rdparty/lwip/contrib/addons/ipv6_static_routing/ip6_route_table.h": "902a7b7cdbf0d232b8df1456fb4809cbeb36db0263c52ddbe3758a9682faa667", - "libraries/3rdparty/lwip/contrib/addons/netconn/external_resolve/dnssd.c": "94e43cfeea372e722b89f6856bbed669482141e27b654a1ae07e8017b426ff90", - "libraries/3rdparty/lwip/contrib/addons/netconn/external_resolve/dnssd.h": "c083f26803984773cbcf71ca83c2a6ab55abced7160ab7a29c4541c2c965e9d7", - "libraries/3rdparty/lwip/contrib/addons/tcp_isn/tcp_isn.c": "1cad9712add2b8b460f5d8da6fa811b86fdd3a565ccad0c589e8b7a50c5261c1", - "libraries/3rdparty/lwip/contrib/addons/tcp_isn/tcp_isn.h": "5593cb63e92665c4fc5380d84525990db565112d85f5c5b0118a1c09f678d5b9", - "libraries/3rdparty/lwip/contrib/addons/tcp_md5/README": "151eaff01b88ed8664e270dacdde434881e8c8040ea37b7f091340084a955a0d", - "libraries/3rdparty/lwip/contrib/addons/tcp_md5/tcp_md5.c": "f9e0f2d1e421eb97c869821cfb698d6728a318dda51433291e7efcfe9419e818", - "libraries/3rdparty/lwip/contrib/addons/tcp_md5/tcp_md5.h": "33a7897465b0a58309742912a55cb983d624cfe4824389072dbfdd6ad674867c", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/CCodeGeneration.csproj": "08be7ff6c6932c2a9cfe6e97557d4ef843dcaa9ca10facde33b1cea1e3a9ea9b", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/CFile.cs": "71f885b98cd0ba2ca6632ceb547d85b4a29763dcfd67771395722a6e665f91ed", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/CGenerator.cs": "f5b6aaea1ed850d8aac63b3617fad4fd6114638ea86e54da306d7d36b6bd8dce", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/Code.cs": "bb4c67f7b00d77ecf82e63989ded1f89df66ef351866a4de5ef3bdd05651bed2", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/CodeContainerBase.cs": "ee8281ce892530b2597441004f99409f1602a7ddd711d6d23582ac47b3f5500b", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/CodeElement.cs": "7c813f6a24fdc8cace9d659028c7580965a5731dc5248f5ad94308d0994916a2", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/Comment.cs": "c0d3e30a6e66a522f03e5c5eafaf7767104fa11b11b1db636c20ae207e80ab69", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/EmptyLine.cs": "ce23bfc251324526950e1b499cb7e1ba0e51bdcc43da9c311c6da9bc39a3e5ab", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/Function.cs": "2a86f450b1a3e7c228892508466d19fba7815fb7a4fbff9164f0899bb0f43c7d", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/FunctionDeclaration.cs": "81af456dd2a181184a5f4765087a69231cb1c41c968e560544bf6a3a072e126a", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/IfThenElse.cs": "33a6b618fd5adf44c4603493d479ef5bb0c0fc4528ce9788ade96eade936050e", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/PP_If.cs": "a93397190469c79e4a1ab6f7ca86be5fa34a63bf622545211d6d2670c329f17d", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/PP_Ifdef.cs": "dcc2ec42684fdf33941c422580ba4fb672eaf72af4ee22768720ba939b23c586", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/PP_Include.cs": "4e6f18a41be22b75ebe01ce73c61fc00148fe9af1d23bd024ae9e7cf70a93e68", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/PP_Macro.cs": "b10ee1a33ab13c70f22474718512ed554482f2e87617d6fe5ab99eaf8691b9d1", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/PlainText.cs": "9f6230df9d06345f6c76c2d2aeb7631ad91085f5fec03721d2c0724709bc026e", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/Properties/AssemblyInfo.cs": "37599227bf85cd5fbf21d695c5d5b4156c08e968310270bdb69ccadeeb890c27", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/Switch.cs": "89a17fcd8638ba1939e90d654ebea0fb289116f32cdf85e7b6c1bf96ca4b984e", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/VariableDeclaration.cs": "0908049f20bace0fedf39854620aff86d39039c8c7f2da2859ae00f755496699", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/VariablePrototype.cs": "362858ef52f27562968f2d07cb7f6ca7c1a5e04eb2a96eae866fc192ea168fd9", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/VariableType.cs": "4155b469af638550ff8226eaa71b9d43160c2be9515e227e2954ff73a2235a5d", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipMibCompiler.sln": "0fb1b4c5838afaf26e2084aa358551c07aa60eee8293beeb5c5777be7db074dc", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipMibCompiler/LwipMibCompiler.csproj": "3e1ccbbc10ba31bf28e61e9f08916457cf249a6f55084d8a965d3a2b0b9b72f1", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipMibCompiler/Program.cs": "510a7695e81c42d2d38c25a6ce0519b450b1806d864ae47095d5c9b8fe6efbef", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipMibCompiler/Properties/AssemblyInfo.cs": "1b81fead7f0f8ce1324c33244a2b4881de5e868fa7c44680f4bdd416aefe1eb2", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipMibCompiler/app.config": "49f0226c179b7f7a5d1f4b7a2d01bcc6752e80944fd96927b60d773bd77075dd", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/IRestriction.cs": "4ce9b1841c83203f4f32135c8731879ddf51f26253a62282b7ceb2bfa1d08e46", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/LwipSnmp.cs": "fe3911d9575cea5567a1d2f8c00c304e87988a2e389bf3da2c568d3ace89ebae", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/LwipSnmpCodeGeneration.csproj": "bb073c52d2b1b424b17632fe5e0d94716f971361dcecf6deeb12af777880703b", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/MibCFile.cs": "b7a8974e02597d285fc730f944cfb4583f6c48b5d8f36e70fb06abdf799063c8", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/MibHeaderFile.cs": "3b13376b6ac40784485d23b1ef3bdda5f9143210a69ea100079a385efcc8d7ab", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/Properties/AssemblyInfo.cs": "154b6c0382a258ab328b6799a8bc55acef5defc114e0651e39e0926c544fda78", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpMib.cs": "be5945d415c3f484ba3679f73446c5e0a1949ee156d095e5c543ed1b6842273c", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpNode.cs": "817531e1d8cc234d96bdd7a3598fb8d1840ab2ba75b61c96cd13c9757fb00819", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpScalarAggregationNode.cs": "ea220467112678069cad418a7c7d984d2da9cfc4bf0dd8b6e00cfd3aa3083e2b", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpScalarArrayNode.cs": "a81138b14b2a06425e000d2a4b2e83c183d2c1b39530fa415ac8172279218c3b", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpScalarNode.cs": "e5564a84d5cb1fa1eacc5551141b76ac737b82a1cae9ba79e40bf359c443fb46", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpScalarNodeBits.cs": "a273a64f770443e0b26d53aed1a380f831bf3e1938396b570d691908338dfa2f", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpScalarNodeCounter64.cs": "6b061892e424c4e8237adae632676993faa567d3bdb3b59f0d43024d75c4934e", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpScalarNodeInt.cs": "e2c9c697e09e1b85dd6b4e21af10588c72cfceb495656f5089c3002dd279e5c0", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpScalarNodeObjectIdentifier.cs": "adcca7908d7ee6374f08ab6106abf52c1d55810f7266fe7d12eece011e46e76e", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpScalarNodeOctetString.cs": "5a3879a0d44aba0e26400d53fee40ac0fd42a51a0f32440e248a220a09b511a9", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpScalarNodeTruthValue.cs": "d092cae1b5eeb4c662868c178e1491adb832932b0cdcb627d6fa21cb56679c96", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpScalarNodeUint.cs": "716fcc054c0048615e0a9cbde400106c87e0f55dcda3f9f0f62f727f3c5bcdef", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpTableNode.cs": "aae98581aa5205e4742febb20536670ac45537eda5e48c553d879f074508417f", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpTreeNode.cs": "c2892b28d3c9fab25bab2d713c7fbb3b9c716d94561cbf84cd979f98fadbc798", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/MibViewer/FormMain.Designer.cs": "900f7135ced78b538ac59b43ce85f0fef6dbab6144d1c98b9e05ea5e64cb4de3", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/MibViewer/FormMain.cs": "60ae71b9f5ca42038a790f33eb0c31616a32f24148d86a653fea286d958b2b51", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/MibViewer/FormMain.resx": "b8ae1de569c06e8da5f0c1cbec88a9232382ba51b8558563353e4d648dd990b2", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/MibViewer/MibViewer.csproj": "2c2755db20fbe372e0b8a58dbc24039a8b0de9b03b4a3f7ba9800bd104acc405", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/MibViewer/Program.cs": "582d27447362b96d1bac405154d4a137a1eb729234e4c55ab0920823135fc97a", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/MibViewer/Properties/AssemblyInfo.cs": "dd2295c56779339b5a04082f5f5acfb428e67a4cc30a48fb0ab5596c2e3adc63", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/MibViewer/Properties/Resources.Designer.cs": "10f36528404675f98ca302c8d2f47d4cd914e3cbb1287bdd9c670ca930deed5b", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/MibViewer/Properties/Resources.resx": "4e124f5a7694ffe813c60601b1b73c53e47536b1f1c0e798d4d55bfc2ca3774f", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/MibViewer/Properties/Settings.Designer.cs": "f18a13fee4b93e15bdcc288ca2b102ad916618abbf6c0b8ef22d8078138cd913", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/MibViewer/Properties/Settings.settings": "baba99193fc1787141063b135424b476ff4151beb833883fcb594631f17c0147", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/MibViewer/app.config": "49f0226c179b7f7a5d1f4b7a2d01bcc6752e80944fd96927b60d773bd77075dd", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/IANA-ADDRESS-FAMILY-NUMBERS-MIB": "74aecf2da295c9929c1c20935d48dab929c4c48b4ec70dd84ea054207b001045", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/IANA-CHARSET-MIB": "171318805f951e9468683bea1fe7bea37491488a917030a51dffc5eba02b7908", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/IANA/IANA-ITU-ALARM-TC-MIB": "2171d34e8d8e742424f0c6adbc60b163b1dae5928a8d9e9eb8ea504995d694e9", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/IANA/IANA-LANGUAGE-MIB": "d0ae6af35e45722a22c7069523ff589eff0f050b539dcf47b855c3cfc9b1dc13", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/IANA/IANA-MALLOC-MIB": "5ce4b4857e936ca970478b2ef5ff2354ea1bd1baab511983fb3666cd9ae03133", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/IANA/IANA-MAU-MIB": "e28c569d8fe395a5cb3177a5df2adfeb8c57e84c4a9462e7dddd4e42902132e7", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/IANA/IANA-PRINTER-MIB": "954427ef5c22b525cec3ff2550b994afecdd84769b4f232871af0ff38effa559", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/IANA/IANA-RTPROTO-MIB": "c1906c8a2a42b3f2cb6eab0dbb14608c59661bd02998dcc0a28fe4ac0797868e", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/IANA/IANATn3270eTC-MIB": "007a32634e83244600ff3a9cf5d891732126550f06257f5d2fec700cdcd4589c", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/IANA/IANAifType-MIB": "511af70e38b199868babf6a1dbb64347daa3a76801a10227098775525179b7a1", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/IF-MIB": "6377ddb359e4e16cecdc2a8fa95b7f32dc571f8670b22e2f8aaa243b5637d5c6", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/INET-ADDRESS-MIB": "db97536a82d2dc39daae4879a54095d5caa30761698f29231576046f8a51239d", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/IP-MIB": "14ac0dbb9254e4b8007f6f8d50b3f9faba0e20857cf5ab6c68ec71c804f76dd8", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/RFC-1212": "86b7136171cd3efd16909125a99a4892fd7d859d671391588b8e30fc0b942cd1", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/RFC-1215": "c96ea7bc5b2b05c361f69ce4dd637a7d8d5b97d60b4b7694539998a1a1c2ef57", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/RFC1065-SMI": "8094e15c0e24740830291d0203fbbb62b9c7fc47c3efed6a0cc10030609f11bc", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/RFC1155-SMI": "4e4c178793aa234504fde442ad527bc66ffface448b35f12e062e73c47d0f3a4", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/RFC1158-MIB": "5b437e2b5ad18d3db7c336446cd5c1fb1906ce21ff8967150e99c28e33fdde3d", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/RFC1213-MIB": "e9fef1a36e6c4200853a3e908bb0c991b2f8c5302dceff2b069a6597ce9215bc", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/SNMPv2-CONF": "b96bd8fceb39587f126eb30248eaf4b9769a5e35714f1ee21ecc478d80272dda", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/SNMPv2-MIB": "7fb972a35dae3e6bbcb9228b707a8eee3582719c8d11c4fcbd4c621fbc63e40c", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/SNMPv2-SMI": "bdf7c016a12095cc429d8ef631178b940e2d27dd762ecc8ab601db74bfbe927e", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/SNMPv2-TC": "0fbdb5e54efa9b5f5ee5ef19fd2106a2217927f00477d53d6ba9df16a632bd05", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/SNMPv2-TM": "d2d09410594400a287eea430466962d83d656cf609e5d31392ad898a44435c7f", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/TCP-MIB": "e26faa91ce7d356cb6d83aa5a9daa47ed38e8ed94ef7208bf8b3cc6fca016554", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/UDP-MIB": "c8de41eba6600414b492e0a513b99c37da4b0e20469fe35d5e8425e5bce0a47e", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/DisplayHint.cs": "b3f24f6953819d1db3db200899770988434b02e372d2d2a563edfbc3dad19978", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Entities/AgentCapabilities.cs": "1eab4cc1c092d0339a6872ac3454fd1d8e0dcc1c5782f7b91c64262a6f12afc2", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Entities/EntityBase.cs": "321a1ec630fb65757109fee736396b9245a80a7f5dd151fa0328dbdba6332854", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Entities/IEntity.cs": "7232dbdc007bb45a8f8dea614ddff1c1e8494ef746bdd52b07ab64bba71e9fac", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Entities/ModuleCompliance.cs": "628c0b0d90b1328bac86823b95ce078510409f2286d513ae6cded76d5d5d71a0", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Entities/ModuleIdentity.cs": "5d7342d3905740369d09d0d18a9ed9fa06dd59014bcf08dce25ccfce7ffcaea4", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Entities/NotificationGroup.cs": "39ffcd81f7ba9802fdb05a486b2396683fe60e3227b9e5e2e8066f4513ed122e", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Entities/NotificationType.cs": "6ef1826c956e893376038a8a743b7e78c75a06e9d069e7e4255db53c768862e3", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Entities/ObjectGroup.cs": "6574a6e4056f9fbed518f584a0d0f9ecb2631eed9224ba52e40bcab318e0bfdc", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Entities/ObjectIdentity.cs": "904638f353d6488e2a1fbddb5a6c3bd76a874f17108efb212c0832e46af1a5a7", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Entities/ObjectType.cs": "c3b54e130db6ea88d1c304fae1bb9cd79b30746ec5904775673c878cb18ffd14", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Entities/OidValueAssignment.cs": "7ce81e1289eef3ec2d4fbaa2cf84fc5d1d55355e31fc4cda4924598c55c55470", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Exports.cs": "5ed3a5d9fabe8cde938ecf6c9ad77a26136e239eef3e6fede4043e9633ba3fbd", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/IDeclaration.cs": "06c6f371bb6ec960f4d48ba24d75f65e827c705ff34779a42bae288b59e88e8a", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/IElement.cs": "f106b41766d2bbd43213758c9ad45515dd55261e398773635a2d5f0a12eb9659", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/ITypeReferrer.cs": "64f67129913339054225d6423596537033890a9b6b7ef8e547770a6007c1540a", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Imports.cs": "f125d095d6f80c60b9d329e22241b133bdfaf67a9abb50dfa47d2f0d99527007", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/ImportsFrom.cs": "9d509b7cd576c3e0a9c7215d6f254bfe77af6e1aa5077985fecfd1c84fc8cd19", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/TrapType.cs": "61db3f0a2c75f61bf8e7bc05f1b4c43b3ea638c0de8112f795b19c66aedf20bf", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/BaseType.cs": "93a432e574ebe2b418ac219c257243ca93444c965cc3bd98cdc15a680e00a872", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/BitsType.cs": "cb2280707ace8c7cf1ace5f3479bdf6ff7bd0f530401d7346167984ff5c7a4ab", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/Choice.cs": "8293714e9114900371790ed8d466c44ed9421752f9d13d70a92332232d35b982", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/ITypeAssignment.cs": "110095915035ff4da95e82631a1b9720c8aec98220954d2ad977f2d713f75b78", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/IntegerType.cs": "b82a91052415366bf55db02e07285e70d94c57e2338b469342969a7b3ddda7df", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/IpAddressType.cs": "6b84597c58cf981694d096a158dfe0f7f6378d9b491b39e8c368f4cc850af07a", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/Macro.cs": "922993e939e435a0c8c7169382368084988fe5efb0b766a62df66a603fab95ba", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/ObjectIdentifierType.cs": "1cc6cbbf4a55e5d1c50ef7d31d6b65c0ead2544e19438433461785cf039299fb", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/OctetStringType.cs": "1d87f07140c978e6161cd3f5f6ec332330eb680401298ecef87698140b36cb73", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/OpaqueType.cs": "98d2a78598d798b1f30734ff5ac38906fe3f8b694732bae8a99f5c4caf6e75eb", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/Sequence.cs": "dd213d0b822a7b42f486f9da1c5b5558ef1894cd0d62e1779555b1a3a94fe6e6", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/SequenceOf.cs": "bd61d745bb1cf6ffc690fd367cb8917bed82e6a10ed5410ef973b9e3758e495c", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/TextualConvention.cs": "21259663b0c38aea4a5d15bdcea4ea67cd247c92d5bbc17372de9e0e323f3905", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/TypeAssignment.cs": "4ceec51fd4ea8c19d7d4302812c66153abb7bfe4ae7619d40ebe897043f8de67", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/UnsignedType.cs": "b87b9fd790d32d9b228b71701af968bd623f5681f7e776e79abd8ed49289f7b9", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/IModule.cs": "a0111c3a29ce0a798caebf7176d52bccdce4d5a2c6df0c0bfab59ed161275544", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/ISymbolEnumerator.cs": "ea45429a2f94a10369a2dc4ba4ac803d3b8d081b11c23eca1c1eab497faf2d7f", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Lexer.cs": "f9a8718339d55a167c4642c86e685856eec852f3e01a4aee032481c8f1576b94", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/MaxAccess.cs": "f794a432573645b44938cda3894399ffe67da8d5e647e47abf80c83ebcd726d5", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/MibDocument.cs": "2e3ecbb52164913350151f012a8e1df822cfc6ff3262913a303237c122f65bb3", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/MibException.cs": "38b6f9de34b2495000f23d2cf5240575a1aa192f812a27dc645fa7ab341383b6", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/MibModule.cs": "8ed64591aecdbc369c0d37a1e237a2f5137ed293429b0a53ad57c16d20089f39", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/MibResolver.cs": "3302296c58b993cc345eb5dcaf4154d9bc9b1247e2aa5da8f0cca9ca074a36f4", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/MibTree.cs": "26365eeb22893f16fd20e73bb3c9046fe55b4707360c3f2859d97e28ff20aa2d", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/MibTreeNode.cs": "5f172090c3f0454b2d6f85545d582c1e55ed44eb28b96e94b893bf621462da6a", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/MibTypesResolver.cs": "b5820e2bd4396a16573c8ddcf0310c2e5f3505b489abecc161297d0a4759b10e", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/ObjectIdentifier.cs": "d1fc1048bb47d156f837fc7a7046a5b6b115d52c3b06118b6a35430f7323f6cd", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Status.cs": "18275342fc0e42915146fbe80dae09e61db3301815091d3b0f56a69dde833cdc", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Symbol.cs": "a22cc72e0518f5b8ac985a25103fccf3973de0c266a654481b47f74c89725ee5", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/SymbolList.cs": "900c1076b5a930244ab96f8794c4f24d6b99898b4bcfd7182f8e0ca7ce8451ba", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/ValueMap.cs": "65fb378b6d830ff07891ace8a744eab54aa1dc32450a8d06460ab0e4c6006585", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/ValueRange.cs": "5933376fec0fbc309baed04b3e79f2fa7ca11f9f02b53564faacc39ed17c9b3d", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Properties/AssemblyInfo.cs": "fb2f6e53df317f25617e2f6c24b30d02e2b70c434aec88989f468b12870ac013", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Properties/Resources.Designer.cs": "fb1e10e6b121eb4b14c98c1ddf28b1071584e7977dcd0970747ee5fd30180b45", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Properties/Resources.resx": "cbe7a23cf57abea4beca57ac456d81e11a2967d92ecffbceb7e3d7eda012789c", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/SharpSnmpLib.Mib.csproj": "4427bc8ded4f2509d31bd2ff00db32393cd300399efddcf7131c244b72b8d89a", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/license.txt": "ef1f7505cfdff240e72602bc50ef1cdba37c681c84611cdf30e4371320c70942", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/sharpsnmplib.snk": "0421beb05de86fc121b4e64eb3d0e6f698299bd7e80ea4d5f6fc0c630b61b7f6", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/example/compile_udp_mib.cmd": "5533bbcdce1d5ade93f05145cb2e6bd6b915fd36e06586c55da3e159a2f31fd2", - "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/example/compile_udp_mib.sh": "7496cdd8391196eaee063595dfb9a0d258c954825a748014556f93b53790458c", - "libraries/3rdparty/lwip/contrib/apps/chargen/README": "09b2017bcb4b99b712e3d803e76745afcadf1b3255361999129d0118c0a7cd2e", - "libraries/3rdparty/lwip/contrib/apps/chargen/chargen.c": "07444ca66879f803a304276f2e3cbd8d5863f7a705c91a741f9a84030f514238", - "libraries/3rdparty/lwip/contrib/apps/chargen/chargen.h": "265a136e0d8ba43970e3010640e31d62ea2a8df48711b3382d961fc134dda1df", - "libraries/3rdparty/lwip/contrib/apps/httpserver/README": "b2f76ca884fe0b4f59a2fb5f6c4debe03cc1fd0d5139a7bc9121b104dd83d3f5", - "libraries/3rdparty/lwip/contrib/apps/httpserver/httpserver-netconn.c": "4c83cb2c47044d9505b3295b2b0f2c5f5211e62f92327c6924d5e2c178bf1b60", - "libraries/3rdparty/lwip/contrib/apps/httpserver/httpserver-netconn.h": "b4d31cb3f85b7d671e1830b05e8e25858dc96300e94a92f04f4535bb7ac0ffdc", - "libraries/3rdparty/lwip/contrib/apps/netio/netio.c": "60e802a9ad9bdf747d1965e3a2e3cd465b0093d979b9c5a8f0ef50d4cedd06a9", - "libraries/3rdparty/lwip/contrib/apps/netio/netio.h": "74ae01b5361c9d2a448c32a5630d5dd24237aee743c5b0c9417befb29f0c8baf", - "libraries/3rdparty/lwip/contrib/apps/ping/ping.c": "f61accaf3c98435d9a00b2ffbaff14cb7d87229800a160316399b8addbf0fa39", - "libraries/3rdparty/lwip/contrib/apps/ping/ping.h": "b8738e6e4bc51b3f4dbdc6fd1671ac8af6f08243ac4f583518f86d7f63942cf4", - "libraries/3rdparty/lwip/contrib/apps/rtp/rtp.c": "2a902722a62af0e6b9dd6477ec24bec33b0cb26b0a3d9dace3698df93e5f197d", - "libraries/3rdparty/lwip/contrib/apps/rtp/rtp.h": "2e885934e7e92fda70db21ef7ab9995ad66d9d7a363aa8ebafb94b9c087550fc", - "libraries/3rdparty/lwip/contrib/apps/rtp/rtpdata.h": "ebb17e7bd13ec5d1a56e0ae1e17b481533028b6370446e72e9695ef3f0cd987f", - "libraries/3rdparty/lwip/contrib/apps/shell/shell.c": "a2246c5a6daeaca2fae2a325841c4bbab5ddde88d86b7d81f14bc110bbc7fc99", - "libraries/3rdparty/lwip/contrib/apps/shell/shell.h": "79f1ab8a52f397b0e20f7971848be468880d6a1c746ba9172b955d918cefb990", - "libraries/3rdparty/lwip/contrib/apps/socket_examples/socket_examples.c": "da28597bbdb0d157bbfc54025294cef76e3d5118a28e0e2ce3c87e6977cc2131", - "libraries/3rdparty/lwip/contrib/apps/socket_examples/socket_examples.h": "8b14fa347e738b6460ab249a439962072007c3d12008f0678aeacc5e65ddbe1e", - "libraries/3rdparty/lwip/contrib/apps/tcpecho/tcpecho.c": "99c3940d34eec794507448f52cafdb9704e952c8e4f5cfd172cacc60a0cf5591", - "libraries/3rdparty/lwip/contrib/apps/tcpecho/tcpecho.h": "443f85d08d310618d91b3d8b6e8205d74bf937ff08179457be6c8185a7bd0fe2", - "libraries/3rdparty/lwip/contrib/apps/tcpecho_raw/tcpecho_raw.c": "25364252e960ac1a32fb87da3b1005bdf5180991dd55a6dac783c4a99c07da09", - "libraries/3rdparty/lwip/contrib/apps/tcpecho_raw/tcpecho_raw.h": "544e404db6e6f2648e214c0ebe7c3a53c8361d1056d3b8270f9b858b5a2da7aa", - "libraries/3rdparty/lwip/contrib/apps/udpecho/udpecho.c": "af56f1b2b0627348fa1fe7b4a3ff0e2f3af9b363d04ae84ae689889764aa7072", - "libraries/3rdparty/lwip/contrib/apps/udpecho/udpecho.h": "541163b86e464dcbd1407fb9534b3ab65e94ad142d68b7cb20ad5bc0bf185c26", - "libraries/3rdparty/lwip/contrib/apps/udpecho_raw/udpecho_raw.c": "892368020c5e2cb57f27d995b0c9f661a7bf9ae91f9dfd9756bcf31f67e4c395", - "libraries/3rdparty/lwip/contrib/apps/udpecho_raw/udpecho_raw.h": "01bdd71bec8cf505abcf47ed0904893d29c301914aa6a16587e81bb34f562a93", - "libraries/3rdparty/lwip/contrib/examples/ethernetif/ethernetif.c": "2c5c2f73a3b18593d62d6657d697cf89b8fb99290b58c5dd345f8e6b6e01da06", - "libraries/3rdparty/lwip/contrib/examples/example_app/default_netif.h": "665f2be9a25016ba51d66f3358cf00f5e7237e66958e053947ea3566dfae5df0", - "libraries/3rdparty/lwip/contrib/examples/example_app/lwipcfg.h.example": "c348378390aab1d69f62711907c939a712cbb7b8221bd678f24b5511a3a73080", - "libraries/3rdparty/lwip/contrib/examples/example_app/lwipcfg.h.travis": "32d3301fbf2edf774262247a3d35cb6f524b2439a99cfb9d2f6b73240989890f", - "libraries/3rdparty/lwip/contrib/examples/example_app/lwipopts.h": "069714ec7c67b92600b430ef4256556396ed7cd7f9afd77959615b57ab27cd5e", - "libraries/3rdparty/lwip/contrib/examples/example_app/lwippools.h": "e4c0a1c8a6ae920a4f228397ccb6f57e59273a712f36881f73575a4176465e63", - "libraries/3rdparty/lwip/contrib/examples/example_app/ppp_settings.h": "aa1d53e47fd9010de46b31ea844f1797a762703ff72bc209b7ff378bc86275b7", - "libraries/3rdparty/lwip/contrib/examples/example_app/test.c": "ed602b6a250d834336a4016065a00766918ae4e7c43f72c7435f39466969ca0b", - "libraries/3rdparty/lwip/contrib/examples/example_app/test_configs/opt_default.h": "f9b773c5befe36171b2206d4768abdebb443051bb67216a56bd85064ce279131", - "libraries/3rdparty/lwip/contrib/examples/example_app/test_configs/opt_dualstack.h": "ab97d0142ee95361976f70a0736cf4bbcff5f29b67b38f8f5c192aa2f9814f68", - "libraries/3rdparty/lwip/contrib/examples/example_app/test_configs/opt_ipv4only.h": "6536e85472a2fe6add8203c782bcb699c9b13640d407c3e61caa3e3aafe76979", - "libraries/3rdparty/lwip/contrib/examples/example_app/test_configs/opt_ipv6only.h": "fc73ac500fce4b0f824f0826b9644dec856d629ed33b67272464d10f8b5918a6", - "libraries/3rdparty/lwip/contrib/examples/example_app/test_configs/opt_no_tcp_dualstack.h": "c7ccfbb7c1bf3c7c2936cc07f3d0907dede5854c4b360cf35518df2de1638f44", - "libraries/3rdparty/lwip/contrib/examples/example_app/test_configs/opt_no_tcp_ipv4only.h": "b90fe348deda454521f8483b983e90e1a1b56fd99c280b23136cb2f0c6b01065", - "libraries/3rdparty/lwip/contrib/examples/example_app/test_configs/opt_no_tcp_ipv6only.h": "7694d824d5e09b3f0540437c329ea66fbdd2b0d2242097b420563f0a0f79bb77", - "libraries/3rdparty/lwip/contrib/examples/example_app/test_configs/opt_no_udp_dualstack.h": "e7e5605fdf155743f3a3b028dea20d75172dd5ff8804cc8f5532cdc7d6a4e108", - "libraries/3rdparty/lwip/contrib/examples/example_app/test_configs/opt_no_udp_ipv4only.h": "f42856c44980f6bc22fab73a93dcab9b1296d394eba9050d1892e6df4ff0b332", - "libraries/3rdparty/lwip/contrib/examples/example_app/test_configs/opt_no_udp_ipv6only.h": "dfb09369b0301ebf8e9ef70835c993c2035dfddbc652f97df71d723ec94a2e9d", - "libraries/3rdparty/lwip/contrib/examples/example_app/test_configs/opt_none.h": "f7458f019ade1e717f25bafc95dba6dd01650f5fc1d9c1ca78d9187247c67cd7", - "libraries/3rdparty/lwip/contrib/examples/example_app/test_configs/opt_nosys_dual.h": "e6ea4019b9a6befd66881c6b1c0e1ef866718735144bf500f133c4be13b60495", - "libraries/3rdparty/lwip/contrib/examples/example_app/test_configs/opt_nosys_ipv4.h": "a7f185d5efd1bdbc086b2566c0707ec8878e690a151f81aeeafd2f12fea65c7f", - "libraries/3rdparty/lwip/contrib/examples/example_app/test_configs/opt_nosys_ipv6.h": "760417b8349d2cf80b008ae946be9997eeb8b87b265e149772409c7e2b6080a9", - "libraries/3rdparty/lwip/contrib/examples/httpd/cgi_example/cgi_example.c": "7e96c5dfcb11e3fccd5f09a4b2a082ffdf0c28e1acbae0ed05aa375d4d89c935", - "libraries/3rdparty/lwip/contrib/examples/httpd/cgi_example/cgi_example.h": "4de91340505d6a16af89efb369a19dd78a1c70b6e68281b2282034dce3996820", - "libraries/3rdparty/lwip/contrib/examples/httpd/examples_fs/404.html": "093f7768e78b045d8bee613880ada36c5af27e738ce906e5ab35bde33ad2c55b", - "libraries/3rdparty/lwip/contrib/examples/httpd/examples_fs/img/sics.gif": "3b4eb378fdefac1e7dd6dbb6c84db20e1512463457626f5d991bf7c1ccb7cf63", - "libraries/3rdparty/lwip/contrib/examples/httpd/examples_fs/index.html": "d34254865305f1f175294b4b1591f1f4a54145c28937f4e3fcb7f771d0a5e9a7", - "libraries/3rdparty/lwip/contrib/examples/httpd/examples_fs/login.html": "ceb987842f3e0b0390951f2b163ab6158f9b56851a29a85e1fe41198bc2d11a5", - "libraries/3rdparty/lwip/contrib/examples/httpd/examples_fs/loginfail.html": "f327434741033801152fbc8957e5205346ff40fc5423aad1a9eedee764488338", - "libraries/3rdparty/lwip/contrib/examples/httpd/examples_fs/session.html": "d2a447b85ccfd0665801c84e50481284e99222aa2e375cd32a119e36eead8678", - "libraries/3rdparty/lwip/contrib/examples/httpd/examples_fs/ssi.shtml": "66af689acda23a61b558e3b0a474637dc93642abd09ff7f8259cae1d82d2c714", - "libraries/3rdparty/lwip/contrib/examples/httpd/examples_fsdata.c": "d232e6c54e0d953562b7a3f10e1be77c29f464480d53f392c19089e29c6cd949", - "libraries/3rdparty/lwip/contrib/examples/httpd/fs_example/fs_example.c": "83c272e37c215b5066f50acfde4b3ef82f7bceeddbe9af42af8ec15f450fa7b8", - "libraries/3rdparty/lwip/contrib/examples/httpd/fs_example/fs_example.h": "d6a5c86ee4a7cfab6b2c264fe46513c3b4198c569257313b7015107051bccbb0", - "libraries/3rdparty/lwip/contrib/examples/httpd/genfiles_example/genfiles_example.c": "6f64d995dab998ff93bc99eea4732f0f7a6cbd0bb298a6e287e710afb756d1c2", - "libraries/3rdparty/lwip/contrib/examples/httpd/genfiles_example/genfiles_example.h": "95f91a4c206c61a087602b6b6467c7843bc16ecaa1519e7a89a7af4a0680d85b", - "libraries/3rdparty/lwip/contrib/examples/httpd/https_example/https_example.c": "e5162ea135194df8c7f568150d1c4e27fe2c1bfc7b8d313267c7c3ab7e3e3b1e", - "libraries/3rdparty/lwip/contrib/examples/httpd/https_example/https_example.h": "c33fa5640d3a57b08d24438f689a9926a3a4f9dad638087ffb2ebdf486e664f9", - "libraries/3rdparty/lwip/contrib/examples/httpd/post_example/post_example.c": "afeca9d71f2d4c38c440e33cabc755d074dc6fae6acb620a15d153b69b860b22", - "libraries/3rdparty/lwip/contrib/examples/httpd/ssi_example/ssi_example.c": "43c3a9b2eee6862cbf664b02be787904fe271b9d8072c463c6f37fce8494aba6", - "libraries/3rdparty/lwip/contrib/examples/httpd/ssi_example/ssi_example.h": "24f5a96c12ebd03cbe57cd51361b03b16fde215ddd71fc6e84b9f9d715db6d0e", - "libraries/3rdparty/lwip/contrib/examples/lwiperf/lwiperf_example.c": "0c0573f71a0054d39259dc183c70e9cf13334da0c96e42d747c414813da4179b", - "libraries/3rdparty/lwip/contrib/examples/lwiperf/lwiperf_example.h": "bae2a72cd8ea69bb9edbec916aac623fdcb9014fa526cf5782892362e9a782e7", - "libraries/3rdparty/lwip/contrib/examples/mdns/mdns_example.c": "3dc0334bcf02df4985acc01295e18d8cf5e06323d563b893ab03dbb3b7f94370", - "libraries/3rdparty/lwip/contrib/examples/mdns/mdns_example.h": "81dbc1fabad8400e8656187d3d95b38f24dbbdf09615cc23cc57d5c7c7f9b209", - "libraries/3rdparty/lwip/contrib/examples/mqtt/mqtt_example.c": "1ba382439e356525964a554d073e98e504542799a539ed0c51d21955fc174c30", - "libraries/3rdparty/lwip/contrib/examples/mqtt/mqtt_example.h": "879c0f1adc062e7aef8ad74f5878db45caf215e37605009b95b09addfa428579", - "libraries/3rdparty/lwip/contrib/examples/ppp/pppos_example.c": "f6fff7881756a568b8dcd14d00ea31da6fdb1053e387c284ea62f990dde26c70", - "libraries/3rdparty/lwip/contrib/examples/ppp/pppos_example.h": "420338e076895dcde27c1a82c9f49859a9fff9f2de6b9bec67205e340a0ed02f", - "libraries/3rdparty/lwip/contrib/examples/snmp/snmp_example.c": "212d5b982d925546218bba71f345dc276206eed4e5e79dc248bfbf86a05a49ca", - "libraries/3rdparty/lwip/contrib/examples/snmp/snmp_example.h": "0d4b04fc829cfbdfd70f814465ab078fa0681d8b2e66930ff6c8aace057057fd", - "libraries/3rdparty/lwip/contrib/examples/snmp/snmp_private_mib/lwip_prvmib.c": "b6fa62af506a8f289fd3f497b2330e10df2c1292d8b6943399d418926eca7184", - "libraries/3rdparty/lwip/contrib/examples/snmp/snmp_private_mib/private_mib.h": "82f435e21bd31c391eb98ba54bf3fe7302765f8a0ce878f3d08ee72888d0ffa1", - "libraries/3rdparty/lwip/contrib/examples/snmp/snmp_v3/snmpv3_dummy.c": "a244ad2d8b4edc25a535532edf149515e0c4432a0297d97a569e4e4ae4d92c1e", - "libraries/3rdparty/lwip/contrib/examples/snmp/snmp_v3/snmpv3_dummy.h": "b9141ab62dba28d06fc60871142a1ba76ea587ff52ac80f6a6d35be22e040217", - "libraries/3rdparty/lwip/contrib/examples/sntp/sntp_example.c": "3e9ed5205335be228a68138724c76ea1edb5352bdc7fb0431676abd45d868522", - "libraries/3rdparty/lwip/contrib/examples/sntp/sntp_example.h": "c2f0cd2b9b4b66eb66768106b1f1044150fa2a1492aa41c28c455084f2a82fcb", - "libraries/3rdparty/lwip/contrib/examples/tftp/tftp_example.c": "d3f03976207e246c2fc805b7af8f5e2ce8747b9f47ef9418898058b33304491e", - "libraries/3rdparty/lwip/contrib/examples/tftp/tftp_example.h": "b31f68d059a53a7706b52d70e20581d0357233a279fd252c8f1addaf5cb01b73", - "libraries/3rdparty/lwip/contrib/ports/CMakeCommon.cmake": "6239bc22cac63209eda9dc963dda2ef6521a31810643557679a30c46a5cbe18f", - "libraries/3rdparty/lwip/contrib/ports/Common.allports.mk": "b5403e85c25cde53176ec5d07a51cca9126a740e86ec8edcc3b280a5d916d52b", - "libraries/3rdparty/lwip/contrib/ports/freertos/include/arch/sys_arch.h": "4ad62d7eb8ac49482dff4423084c16136eaaa6bdc866624f327a9cdaf8253386", - "libraries/3rdparty/lwip/contrib/ports/freertos/sys_arch.c": "3b2d57360324ae1bf4d05ee9f665e8e79ba013dece0bb5ecae1e39ef53092b03", - "libraries/3rdparty/lwip/contrib/ports/unix/Common.mk": "23ceba07dccc4216ab2e24e5551c3174e0a4218927e4dede5e230ad035c76062", - "libraries/3rdparty/lwip/contrib/ports/unix/Filelists.cmake": "e3da6dbc6e546de190efce5b72ff406136760574b9867581815271ca47cbf87b", - "libraries/3rdparty/lwip/contrib/ports/unix/README": "46e93c0e43a42fc501971d55a0c30a9bd3aebb717b981542453ee0304a161e2f", - "libraries/3rdparty/lwip/contrib/ports/unix/check/CMakeLists.txt": "02cd198908ae4acb2f59d69e96e085f5a03cdf828bbeef0f1f00aa36c0e1ea25", - "libraries/3rdparty/lwip/contrib/ports/unix/check/Makefile": "0d499df19f471bed11318952826ba93fb05a9b8ac3b2c8d3d6b2f4122466dca2", - "libraries/3rdparty/lwip/contrib/ports/unix/check/README": "2ea7ec20655072c5ddf35c19d979f9d0f3499ba088aef7f9c2567c7b839293f5", - "libraries/3rdparty/lwip/contrib/ports/unix/check/config.h": "def89e5147dc4085b7e87e02db5e09325a22299c579c693ab160cb7a9382c0f1", - "libraries/3rdparty/lwip/contrib/ports/unix/example_app/CMakeLists.txt": "553a751a9ba61905aa44f30562e3a1afe4b4b86c6f360ea6abf6cdbe439137f9", - "libraries/3rdparty/lwip/contrib/ports/unix/example_app/Makefile": "d41510732b8f316b57e5955f018658e0fe3c672852e21b5a88b99b20ac1efdad", - "libraries/3rdparty/lwip/contrib/ports/unix/example_app/default_netif.c": "c468c28efc19869aa507e7d7d650cecbc6c6bae84ed5b3dd5946fde49e8ba254", - "libraries/3rdparty/lwip/contrib/ports/unix/example_app/iteropts.sh": "7b79dccb7238618d1c4b13c4ecb02a04dc520c5db546bcd65a5a5c1892b884ca", - "libraries/3rdparty/lwip/contrib/ports/unix/lib/CMakeLists.txt": "abdea1102dc51c0177a5df9bfa0a6f44723241290f7605be8699a78221af10f7", - "libraries/3rdparty/lwip/contrib/ports/unix/lib/README": "3a98da8c3a5c024565725a6153a500b5bbc779d6a6aec147c24efe733469d224", - "libraries/3rdparty/lwip/contrib/ports/unix/lib/lwipopts.h": "a00b9de59e0433344838928892b2e121d1633fb7dac660dd0e27dc00f05e9cb5", - "libraries/3rdparty/lwip/contrib/ports/unix/port/include/arch/cc.h": "87ca52825c775a18d1a8f5d6c2d747dd6739ca1784b39e34952d3151379722cb", - "libraries/3rdparty/lwip/contrib/ports/unix/port/include/arch/perf.h": "9c170fada00f4f1c98762aab95a0ce2a28399e7ddc0177515fb35cb41763ac31", - "libraries/3rdparty/lwip/contrib/ports/unix/port/include/arch/sys_arch.h": "e9e06bafa5d614223b2b1a90908abffae3234b715aa904e9cb41d10f099d36df", - "libraries/3rdparty/lwip/contrib/ports/unix/port/include/netif/fifo.h": "6019f26220b706579656977a469f76b252b55ffd80bc7a1f0c9196e75dd81e79", - "libraries/3rdparty/lwip/contrib/ports/unix/port/include/netif/list.h": "6543fd9607041979170f8f5a94ee4033562048d5614dd472eec590c9145c782b", - "libraries/3rdparty/lwip/contrib/ports/unix/port/include/netif/pcapif.h": "60a0a33bc0237a4cb5c153385946c07f3904cfab9c0e5c0eb00400d3f0f24be0", - "libraries/3rdparty/lwip/contrib/ports/unix/port/include/netif/sio.h": "ddea825927d4fdf7c8d3eed5773013d36fef11f395025cce7420366c5831e8ee", - "libraries/3rdparty/lwip/contrib/ports/unix/port/include/netif/tapif.h": "d238b3d91165a00e1b3bf7757d073a4e4dcc4865f8188ae380ae3bd26de87152", - "libraries/3rdparty/lwip/contrib/ports/unix/port/netif/fifo.c": "784d147f4b67617dd04f66ac368cd6173d7d4e4e811980da465eee3af5223747", - "libraries/3rdparty/lwip/contrib/ports/unix/port/netif/list.c": "f13548f5dd67df2f9a26a1e693866c0679ac7489ee4d4c0f690890e31dfc554a", - "libraries/3rdparty/lwip/contrib/ports/unix/port/netif/pcapif.c": "8b1f7ff5d8b50de16284ec4ea5d41519da45d1b6ce47c53aa2541e7d59cfefee", - "libraries/3rdparty/lwip/contrib/ports/unix/port/netif/sio.c": "b712bb07d7675ae0b46d4a41ab2e25e9b08a025e037da4da6dd771a2ec04144f", - "libraries/3rdparty/lwip/contrib/ports/unix/port/netif/tapif.c": "1063ad29acfd2791724906ae027d4ad2c631ab05a7b45d112bac861f231e0fc9", - "libraries/3rdparty/lwip/contrib/ports/unix/port/perf.c": "53aa582030c38f3ce657545165a08c96d79fa0f4a51713347afc455a2e6d7b6b", - "libraries/3rdparty/lwip/contrib/ports/unix/port/sys_arch.c": "69ea0f747767e9882c295b89361c9591548be0e0ccd56e12d008163b78153570", - "libraries/3rdparty/lwip/contrib/ports/unix/setup-tapif": "ebc504a3c9ea4066927984556b7cf877e86991379d30c97f650330f7fa8d736a", - "libraries/3rdparty/lwip/contrib/ports/win32/Common.mk": "125f92a764ea01ab3a7b930146a530d9e5397c3c09584468334213968ba087c5", - "libraries/3rdparty/lwip/contrib/ports/win32/Filelists.cmake": "ec2eef7b170a1131530b6a0a31e43cd90caac4886010f0c744ca5de671479ac1", - "libraries/3rdparty/lwip/contrib/ports/win32/check/check_stdint.h": "6dfd316c7768ca286bc36dbd5c26a870cbdaae81c95ed41955af0ffc777a1d00", - "libraries/3rdparty/lwip/contrib/ports/win32/check/config.h": "6508f04b8d148dba8c30e805bd9204519e9ca540d71342df3531f6f62722c6a5", - "libraries/3rdparty/lwip/contrib/ports/win32/check/stdbool.h": "fc341d8b377004ef43ceb4c032c3028578dd24be7280be0f4b0da16abc213d55", - "libraries/3rdparty/lwip/contrib/ports/win32/check/sys/time.h": "5af2327d51ef0e3fcf6b1baedf94650ebd02f532d3535a63dc71cc23b23976af", - "libraries/3rdparty/lwip/contrib/ports/win32/check/time.c": "deabd310fc35ff3e2522b9576d7831d4b5289ab8a35b01a36bf8a2462fa64c6d", - "libraries/3rdparty/lwip/contrib/ports/win32/check/unistd.h": "44c5982f2057234bb630714bf4b72b77baed93a8d34ae4b490055d9ee4bf593c", - "libraries/3rdparty/lwip/contrib/ports/win32/example_app/CMakeLists.txt": "c9f74e74a6e2830a68215138c0aa42b8f3d84117210ed0545b253bef5a1bc15e", - "libraries/3rdparty/lwip/contrib/ports/win32/example_app/Makefile": "ff08d73a3ec755ee05d58d01e2bf3384e595e0543649f6160ced2feea62e552f", - "libraries/3rdparty/lwip/contrib/ports/win32/example_app/default_netif.c": "30d0de74b2668a58825c3a67249292fc655965041111705f99a77bb8c46a4621", - "libraries/3rdparty/lwip/contrib/ports/win32/include/arch/bpstruct.h": "2bc6a0eedb9cb3cfd0a593deaf06d52fd4359275ac9f136ba6e94a7da19048f1", - "libraries/3rdparty/lwip/contrib/ports/win32/include/arch/cc.h": "b54d6c7ee3d893acb7fe2f8426f15d487d4146415be8e4514aed2b159d3a079d", - "libraries/3rdparty/lwip/contrib/ports/win32/include/arch/epstruct.h": "962c890c81ed4c2467086be787b5daa10023eac09a6d9953f25c28e7e2346f19", - "libraries/3rdparty/lwip/contrib/ports/win32/include/arch/perf.h": "8854a0e22cb2b980f95c92fafd1f0f5293ca4621f841e86fec0112aebedf6c02", - "libraries/3rdparty/lwip/contrib/ports/win32/include/arch/sys_arch.h": "77320f24c243a19ea97c45ecfc2a1bfec9e1d4a23353a8fbdf546d87cd1809fa", - "libraries/3rdparty/lwip/contrib/ports/win32/msvc/build_coverity.cmd": "b6a430ac998b4abebc9bb4b0303cb50c285050c9d4f582c8a9f4bc87da373c53", - "libraries/3rdparty/lwip/contrib/ports/win32/msvc/libcheck.vcxproj": "5456fd66266a384bbc9f720f37db626aa3ee69fdf7fd1d593877e44fc7abb3ff", - "libraries/3rdparty/lwip/contrib/ports/win32/msvc/libcheck.vcxproj.filters": "3419e9d81bf7020fd0bb2d5ef83afcfa62fa6841a9dfa88cf747744bba0c93aa", - "libraries/3rdparty/lwip/contrib/ports/win32/msvc/lwIP.vcxproj": "8e804d504676855f987aa14dae40ce3bbe7d40f0147a70e6d23ea1e3c85483cb", - "libraries/3rdparty/lwip/contrib/ports/win32/msvc/lwIP.vcxproj.filters": "44c772b1f2f6e3a972f18c3ae8b201c21b86c1c96f4f2521eb1943d050b61556", - "libraries/3rdparty/lwip/contrib/ports/win32/msvc/lwIP_Test.sln": "bdbe2d92dcb53276477d49bbcc97bc37cb6bf4ba8cc04c9fe726f89991d66643", - "libraries/3rdparty/lwip/contrib/ports/win32/msvc/lwIP_Test.vcxproj": "c15807dac7ae4523a5bbdd89e018e56a5557c97dc8850fd251080df4a42c7e4e", - "libraries/3rdparty/lwip/contrib/ports/win32/msvc/lwIP_Test.vcxproj.filters": "436cd664d2cff5d2bfe183014612080c5db31baf391f48abaedbc2c1a2a3778b", - "libraries/3rdparty/lwip/contrib/ports/win32/msvc/lwIP_pcapif.vcxproj": "71dd4e10a28aedc4a94374dfcc111479eb592a3689a35b660c694a63016b268d", - "libraries/3rdparty/lwip/contrib/ports/win32/msvc/lwIP_pcapif.vcxproj.filters": "da07818456b7c0200576013510cc1b1572946446eea7e8b4b36c6fa95d7c04ed", - "libraries/3rdparty/lwip/contrib/ports/win32/msvc/lwIP_unittests.sln": "eae7eb889df8e3c82fdacc84de7e25854f23bbe4659f255381399423415aae71", - "libraries/3rdparty/lwip/contrib/ports/win32/msvc/lwip_unittests.vcxproj": "404a46e5f20505743126a197616c21601a6dbc9b75c028cf6b26fb94a7a59226", - "libraries/3rdparty/lwip/contrib/ports/win32/msvc/lwip_unittests.vcxproj.filters": "68aafaf14d827a55daebf4d1dfe5524ae0cacfa1a74196ba41b9c29421ba4ba2", - "libraries/3rdparty/lwip/contrib/ports/win32/msvc/makefsdata.vcxproj": "a48080a571420e1a5d80287ee48e36a4a76d72e2b7edc221c5edc75331822d56", - "libraries/3rdparty/lwip/contrib/ports/win32/msvc/makefsdata.vcxproj.filters": "607321cc4880ab4f3abf764cc0c5ff68ab4aa70ac493ddf9182ba7658b064db9", - "libraries/3rdparty/lwip/contrib/ports/win32/pcapif.c": "29e053329bff40164faec9b7f7a8c241ea3f2d98e29c2591550a315b6581ef08", - "libraries/3rdparty/lwip/contrib/ports/win32/pcapif.h": "a19fe4f3aa7928d00c2c2800a8fd4ed85a3cb33db8dcf01d3243683c43817d10", - "libraries/3rdparty/lwip/contrib/ports/win32/pcapif_helper.c": "68e2456c98f67ae98a4001c20c2f8ed2dd55427d48087bf13ef88c00fcf07ac7", - "libraries/3rdparty/lwip/contrib/ports/win32/pcapif_helper.h": "2c5693fba9a2db77704cfa4a062675e2bddb6844f8187c28c4a93dc95d362752", - "libraries/3rdparty/lwip/contrib/ports/win32/readme.txt": "829c6e4c86389fb33116d765531ef74b7514569c4c87b613ed5bde5940d9352a", - "libraries/3rdparty/lwip/contrib/ports/win32/sio.c": "305985ed399195d0e7e3a8813bbedb112f9f6cf523f484610fb7b6ad093cb6bb", - "libraries/3rdparty/lwip/contrib/ports/win32/sys_arch.c": "1ffc55af07e4293c35a206d9af3c0269e005f733c9a0d6fc1c45da08767c9ebd", - "libraries/3rdparty/lwip/doc/FILES": "7e411f98dd0b535f78f1cc4ca81bbd596ce704a233c24933c247d11eb4a07662", - "libraries/3rdparty/lwip/doc/NO_SYS_SampleCode.c": "0dc59b5572d2d9576f74ffe0f62791e055839e948ea174ec75ae617742c5b6e6", - "libraries/3rdparty/lwip/doc/ZeroCopyRx.c": "cbabf596cfa079b493582ec1431d9885c68bb2adf5c2cb897730d7ed03ce852a", - "libraries/3rdparty/lwip/doc/contrib.txt": "7a032f6f39a904b822791001f7091fc759bdae67659b39424d46382293450220", - "libraries/3rdparty/lwip/doc/doxygen/generate.bat": "edc28fe50dc150fe0ddba1369f05511a5437a4b873233d75677a9930dbf580be", - "libraries/3rdparty/lwip/doc/doxygen/generate.sh": "d5134949019de866042b12d7855892036790036b5f12a3d53ea477babc3e8a7b", - "libraries/3rdparty/lwip/doc/doxygen/lwip.Doxyfile": "448e81969aeb8c95163560a9ada25965df9e508afd3ac15f1220bd1ee48e0f95", - "libraries/3rdparty/lwip/doc/doxygen/lwip.Doxyfile.cmake.in": "c08e8f9b8c60bd528a5ed3162708e4e3cf052c7497417602ba2fb36426e587ef", - "libraries/3rdparty/lwip/doc/doxygen/main_page.h": "5520224df4911884cd57757dc146e4c1289365e1b4c24c4fa6755392188c3371", - "libraries/3rdparty/lwip/doc/doxygen/output/index.html": "65219746dcce33cff1833a9629610bcce0ce9aa100ec5d54fc808d143f54ba2c", - "libraries/3rdparty/lwip/doc/mdns.txt": "230cf15e5613c676dc7035bf1b61d9294a92e2ff31419904dfacab7dc93ac7c3", - "libraries/3rdparty/lwip/doc/mqtt_client.txt": "af683b0d30f5896ae89cf003962e39cd3dac04e8b4802ae39e9cb143d345b357", - "libraries/3rdparty/lwip/doc/ppp.txt": "a7b55cc1c17b4177bc43bd0769ad5a0a795046c4ef5717fd63655229eb9100ea", - "libraries/3rdparty/lwip/doc/savannah.txt": "f895abd236a811a976d182b36e2c18cfb657078df74b50d2f98cfadd35ad192b", - "libraries/3rdparty/lwip/src/FILES": "05faeb3c86d87e76ba9366ea01db86c00977e5d811c57c6dde081ca9ec6fec2e", - "libraries/3rdparty/lwip/src/Filelists.cmake": "b1bedb02aeb601f36ed5b3dbc20606d9697db4427167cce788936b4233871512", - "libraries/3rdparty/lwip/src/Filelists.mk": "a750091212a64e856461256dc27fd749f7851780bf70ca3b67751afe36f2699e", - "libraries/3rdparty/lwip/src/api/api_lib.c": "c39b73d197e840ab1648710530595ad1fbf234872d89b327b2bc259b74252e69", - "libraries/3rdparty/lwip/src/api/api_msg.c": "cc903062accd85a9f5ff849e9d059e1cdc06d536109ef0ed1fb31e53fdb7908f", - "libraries/3rdparty/lwip/src/api/err.c": "5dd20e93a89f5cf4492e6cc3de49a5b6de6a9b15136963cef2a08a5e411a1f15", - "libraries/3rdparty/lwip/src/api/if_api.c": "eb6c944f66d0daf48306b308c5dff528b167f1284edbfbd87930c48d2deeba7b", - "libraries/3rdparty/lwip/src/api/netbuf.c": "07170f98220de0017468b552e59f16d184d32ebc502dfc819ca2e7e4deb56a1a", - "libraries/3rdparty/lwip/src/api/netdb.c": "6f0211709009d8562fee260ebdb958f12693eb490d3ef8837b0e8dba6d4a1095", - "libraries/3rdparty/lwip/src/api/netifapi.c": "d8426d620c4556c1f8cfc68aba0e91c8e7bbe214a13fb877f364041f9bf8ec34", - "libraries/3rdparty/lwip/src/api/sockets.c": "1b861f167324ad671ba3548cf55caecb01e355eae4eef3e6e58a6f6346d83235", - "libraries/3rdparty/lwip/src/api/tcpip.c": "826705504f016884a70c903b86c988335dfae963556664688ddfc1191d9e416b", - "libraries/3rdparty/lwip/src/apps/altcp_tls/altcp_tls_mbedtls.c": "1ec063ce024bc31ce247906a2d6e89a9c6e6c4c65a0960a0f7094c08615a8335", - "libraries/3rdparty/lwip/src/apps/altcp_tls/altcp_tls_mbedtls_mem.c": "45a0cd3bb15895dfdbfc5723d31e268549a89b1b730666e13f0f9ecdafbde9a8", - "libraries/3rdparty/lwip/src/apps/altcp_tls/altcp_tls_mbedtls_mem.h": "e145466f175096ce419c0e6e267353b3f8af174c0135a1485305ee79c71ac9ab", - "libraries/3rdparty/lwip/src/apps/altcp_tls/altcp_tls_mbedtls_structs.h": "51238ee0fdc56828904a777ace9864f907790c1bfa29be847b146b6b58f55fb8", - "libraries/3rdparty/lwip/src/apps/http/altcp_proxyconnect.c": "e9fe1a344f0faa9814ccd8a17b8cd69cc7be90a74fba6d8643045eb6198acdb6", - "libraries/3rdparty/lwip/src/apps/http/fs.c": "91cee1c0dd66b171e7459ab2d5d3d89483d13f9fb5d5fa77acba80bd68cd8534", - "libraries/3rdparty/lwip/src/apps/http/fs/404.html": "093f7768e78b045d8bee613880ada36c5af27e738ce906e5ab35bde33ad2c55b", - "libraries/3rdparty/lwip/src/apps/http/fs/img/sics.gif": "3b4eb378fdefac1e7dd6dbb6c84db20e1512463457626f5d991bf7c1ccb7cf63", - "libraries/3rdparty/lwip/src/apps/http/fs/index.html": "d34254865305f1f175294b4b1591f1f4a54145c28937f4e3fcb7f771d0a5e9a7", - "libraries/3rdparty/lwip/src/apps/http/fsdata.c": "71eeb2b3435f2d46200bdd64fbea09301ea56f41ee64660740d893a2621ad192", - "libraries/3rdparty/lwip/src/apps/http/fsdata.h": "44df92ed526d0d6b1c374fdd97a96b3f5eb188c7d1084e32fcf420a8a23e3d0f", - "libraries/3rdparty/lwip/src/apps/http/http_client.c": "767525ee96ebfe467e3cf71a1e947d9e2e15f8ec4bbad5c2a353c2f31da418b5", - "libraries/3rdparty/lwip/src/apps/http/httpd.c": "0c83baecd0a5418decdc8577bd719f8bceff3b6a2475bf52af800e54e0dd0583", - "libraries/3rdparty/lwip/src/apps/http/httpd_structs.h": "392cc349b27b067284a51bf767e0685ca4ec8787485d10f2740128364660e4a0", - "libraries/3rdparty/lwip/src/apps/http/makefsdata/makefsdata": "660649c3cd0b5fa548baba63db7c8218aa13269825d3cdec0d4ad577d1338b20", - "libraries/3rdparty/lwip/src/apps/http/makefsdata/makefsdata.c": "1c1bb5c514ebff1e8da8d24967fa00ddde1be219298e67e4a77e399c21f25c53", - "libraries/3rdparty/lwip/src/apps/http/makefsdata/readme.txt": "033f3db7c66384b1da4c0f3251b6f7e21342655a9a3996edbc0fe87d37296838", - "libraries/3rdparty/lwip/src/apps/http/makefsdata/tinydir.h": "0d1716fa784db3441d241ddec4f75c2dbfe5d6aaea2f091eec7fe070c18d443c", - "libraries/3rdparty/lwip/src/apps/lwiperf/lwiperf.c": "e13887dfc67f0bf9034531165d635979833785aa6d1e4aaf983fc819df1499c6", - "libraries/3rdparty/lwip/src/apps/mdns/mdns.c": "c48c2cac0c08afe239f1e716db48b9c77287a0228a7fb69cfbf55ec823cccd7b", - "libraries/3rdparty/lwip/src/apps/mdns/mdns_domain.c": "fd8663f64e25bb9367451a39ac6c6d8b216d25f5e6c6087d541ec2d64dc21685", - "libraries/3rdparty/lwip/src/apps/mdns/mdns_out.c": "64069a359a63fa144462c5579f275ef3a6e338de3b52a13008429c2d12a7f28d", - "libraries/3rdparty/lwip/src/apps/mqtt/mqtt.c": "a99dfb19dc99160dfb19e6be8a43d4ffdce01a6279dbf88ffc047becc2c77e52", - "libraries/3rdparty/lwip/src/apps/netbiosns/netbiosns.c": "49c51ffdfc4e410761ecf3fe7eb3e0139f1a655a25c069d1b2d2afbdc7860e2a", - "libraries/3rdparty/lwip/src/apps/smtp/smtp.c": "9d4043f779d2f594423298c8408b02fc187640ff7f0fe5e902f53a61b76d2120", - "libraries/3rdparty/lwip/src/apps/snmp/snmp_asn1.c": "d8bab135914260bc8cb3810be04bb17dd6dc58abfb46a063cd2930f5dfcb9a92", - "libraries/3rdparty/lwip/src/apps/snmp/snmp_asn1.h": "87bc7b07c8c510b17134ab05a22ee675c9c48450169dc99e600be2f331a27f54", - "libraries/3rdparty/lwip/src/apps/snmp/snmp_core.c": "e5677cad8ef17bdc5b38a134756accc1821fe079a1cd8e83283f08b3d4b52080", - "libraries/3rdparty/lwip/src/apps/snmp/snmp_core_priv.h": "e486ddc80307a3399c3547855adc05c9ff9040b0b9be237c0af232db6bd00abb", - "libraries/3rdparty/lwip/src/apps/snmp/snmp_mib2.c": "1695042f8e26a8c2a830c6c7df35ef7b084fb184b84638e56eef46c4faa3386f", - "libraries/3rdparty/lwip/src/apps/snmp/snmp_mib2_icmp.c": "1072cf5d410a39b540ecd09554e98b264488a26f90628f67ccdc9368d3b5a179", - "libraries/3rdparty/lwip/src/apps/snmp/snmp_mib2_interfaces.c": "4998987c9ba42a8808b317dc4a67dd8dd761371d358f3ad4a43fd704b6cbb330", - "libraries/3rdparty/lwip/src/apps/snmp/snmp_mib2_ip.c": "e4121927b1b42e2f8ecd6ff4b72449a9ce2fb6750ffaeb63598b719920ea3406", - "libraries/3rdparty/lwip/src/apps/snmp/snmp_mib2_snmp.c": "bb5d3ced0dbd9b11cef0bc337791cd2cc4c06f7562e1d4b351e0043388a5c816", - "libraries/3rdparty/lwip/src/apps/snmp/snmp_mib2_system.c": "e4454c37018aa43bf95368dd5abbb0a18306be4639d79af0c4e2247697483b36", - "libraries/3rdparty/lwip/src/apps/snmp/snmp_mib2_tcp.c": "31829ddc6f5ad49e1f4c5b4bee0c51911a3fbbfba2553fb601e30ff4a7d0c5f1", - "libraries/3rdparty/lwip/src/apps/snmp/snmp_mib2_udp.c": "490f18bce9e02d6350b978adbc882323d7ab43100c0072656dab15fb18033318", - "libraries/3rdparty/lwip/src/apps/snmp/snmp_msg.c": "23d3488c435784fc9ec9bb196da4e0dfb2ecce4a8c28a0358273571e417d12a6", - "libraries/3rdparty/lwip/src/apps/snmp/snmp_msg.h": "1ddd054f74cea2c6c595b22228461578114d381fe82f86c96c9cf85cf5dc8dee", - "libraries/3rdparty/lwip/src/apps/snmp/snmp_netconn.c": "2c44422bf05bbbd8aa7705d0fd408f7e9afd8e1a67b366af403e34257e9c42e6", - "libraries/3rdparty/lwip/src/apps/snmp/snmp_pbuf_stream.c": "9d2dc736dc4d30db370f4f0e0d02ab78b57c240cecda6b77796017ff56bdcb20", - "libraries/3rdparty/lwip/src/apps/snmp/snmp_pbuf_stream.h": "22630a24db7edbcaf482b7975765e7df0860f141e9bd9c48083e00af0b7eeba7", - "libraries/3rdparty/lwip/src/apps/snmp/snmp_raw.c": "2c5eedb6d972f6313575f837d0e9c33e129fcc43498d180eef6c80c8c4a85c73", - "libraries/3rdparty/lwip/src/apps/snmp/snmp_scalar.c": "065919819cd402d35c925e80f7732c70872d78faf69f77964e6b75c26be7563d", - "libraries/3rdparty/lwip/src/apps/snmp/snmp_snmpv2_framework.c": "9e0e7a9bee3cd1e55da9398f16e47f5e83395e8979221f0d64809f06c1230994", - "libraries/3rdparty/lwip/src/apps/snmp/snmp_snmpv2_usm.c": "b1825260c0a4b860d33a258f4d6eec789876c62a167bdf63b67d0edcc6c0c5c3", - "libraries/3rdparty/lwip/src/apps/snmp/snmp_table.c": "72546d138df585ada6fb1d854b65f7d54d81e98bed5dcdeab79c8c043704e116", - "libraries/3rdparty/lwip/src/apps/snmp/snmp_threadsync.c": "8acbd0cab2bc51e0c8afe971ad1f670a6766217f9bd3b72a712adbcd7848809a", - "libraries/3rdparty/lwip/src/apps/snmp/snmp_traps.c": "de7a680466a50fe625bae6bc37f051c3b2a01c0a21b3bb907966838c34e778a0", - "libraries/3rdparty/lwip/src/apps/snmp/snmpv3.c": "9dec4ef75e29632234089a5593cbd27f9dea972f0829f07bd15c84a14f947ba7", - "libraries/3rdparty/lwip/src/apps/snmp/snmpv3_mbedtls.c": "7dace5c3961dbdbf6b2085c4403e83aa6666d0ba1a8d0c70709873af5c6609f3", - "libraries/3rdparty/lwip/src/apps/snmp/snmpv3_priv.h": "f7027abe4f437bbd639ec6703cc9549ce6f0881cee0e44c461de686feef02d2b", - "libraries/3rdparty/lwip/src/apps/sntp/sntp.c": "5130700b19c4ef61a578c5c19ceb3b18e81f7b1349d0511577552789dd8116ed", - "libraries/3rdparty/lwip/src/apps/tftp/tftp.c": "1bc301146ca1b3824b0d2e56ea75753df2201777d653e6b2ce3d6e93461e9765", - "libraries/3rdparty/lwip/src/core/altcp.c": "3c6653588772a62efdd11ceeffa760847f95d8ec98889c7551e9a1eb8326f8cd", - "libraries/3rdparty/lwip/src/core/altcp_alloc.c": "90db26c801a4a6466e188e8b5a6b8d2aac2e6f39b4ceeb0f825e7b35ae1786c7", - "libraries/3rdparty/lwip/src/core/altcp_tcp.c": "786830cd6edb63dc0c18a34db6e539058ca499f74fa9020d0808df7f07d232cc", - "libraries/3rdparty/lwip/src/core/def.c": "43723472fe2eacb50102403d7410f3c99c1dba7a37406a761c6a384e3a231ebc", - "libraries/3rdparty/lwip/src/core/dns.c": "94db6c8cd89d6f99189eb19817bf69959a5b2dee25bd0cb5d7bb5250901ed799", - "libraries/3rdparty/lwip/src/core/inet_chksum.c": "9f73e859881dd5f24ed5fbb5099bb041aa7d93dacbc7b28e3ae23c0cad5dcc92", - "libraries/3rdparty/lwip/src/core/init.c": "4b9d5a1d04e5937b49d98e23908821e09ca6308f6e8e4cde384adc22e72a4ec1", - "libraries/3rdparty/lwip/src/core/ip.c": "82d0fc6b45c6d1af88bdece3229fc9821274263c261369de4f81b8d6c80751e7", - "libraries/3rdparty/lwip/src/core/ipv4/acd.c": "c793e2cf2ea9a1c4a6bcc0e2b4ec05766c7fe0c153d1bd19b25d6a56b711ac40", - "libraries/3rdparty/lwip/src/core/ipv4/autoip.c": "225b55a6533ec9cf741be0bfcfa947da7ef7dd20b9fd6597bdcb40d7d0ae668f", - "libraries/3rdparty/lwip/src/core/ipv4/dhcp.c": "6841841a9d11133387f9d879aabbdc2c710b5a22e5604526d4ced605845e4d10", - "libraries/3rdparty/lwip/src/core/ipv4/etharp.c": "b391a21bd5d7b69a185c20ad220d52fcd3b4ca7b5452f69089a9258780ce86ac", - "libraries/3rdparty/lwip/src/core/ipv4/icmp.c": "3072098d2bdcc364a1ff79493c5bb6c26470226d3dea98c6a8bb15269a3df0ec", - "libraries/3rdparty/lwip/src/core/ipv4/igmp.c": "7e541cb6884e4cd1605e7edc8652596b7edbafb5430487720fe4eae2ee3bc1a4", - "libraries/3rdparty/lwip/src/core/ipv4/ip4.c": "b22c7f868b3c19c3e187260cf47cfe06d254191f3c2c051f0e934151e5d86e70", - "libraries/3rdparty/lwip/src/core/ipv4/ip4_addr.c": "44d5dabfeda2558860fe831107040148f111b20bf372dfedaa370086e0aa588f", - "libraries/3rdparty/lwip/src/core/ipv4/ip4_frag.c": "dd03b42a7d02f00a1c9fafa8c83548a8b2aab19dfaa136451120ad10d964b68b", - "libraries/3rdparty/lwip/src/core/ipv6/dhcp6.c": "1bd204acd3d3ea0c01ffc0476c6aa4cf3fda7b862561ab4c31ec4b185fc3d0ba", - "libraries/3rdparty/lwip/src/core/ipv6/ethip6.c": "548b460688f824015b5b30401cf907828f1dc088a8442d8ee43e4049c1e1401d", - "libraries/3rdparty/lwip/src/core/ipv6/icmp6.c": "59fac03d674da3806b091bc2b285d8276378e3f9ff6ab2cc0c2cbe3241d5e350", - "libraries/3rdparty/lwip/src/core/ipv6/inet6.c": "3f7676e46413586fc3d07438b51c0dcd46bb3ba24644892362cf47f84fc15390", - "libraries/3rdparty/lwip/src/core/ipv6/ip6.c": "2496b4b1f5a5bdcf158141c10a216ec11c3ef0bdc7b01c82eb59cc7c08d6be84", - "libraries/3rdparty/lwip/src/core/ipv6/ip6_addr.c": "fb4be0a5b3b048bc4b9ad1b4a18ff18f56c80c0337bd4a88fcca5f029872f46c", - "libraries/3rdparty/lwip/src/core/ipv6/ip6_frag.c": "762b56b9e8f5cfa47129b74189ee9dcca53f4fa6a8e3c801896fa017185a7653", - "libraries/3rdparty/lwip/src/core/ipv6/mld6.c": "14a863d902369370ba5c66777e6241f6f8a5be5c54892dd8904fdc6daa4491cc", - "libraries/3rdparty/lwip/src/core/ipv6/nd6.c": "ee4f3c86ccd433d502bd405b6dd8d82cb8cd3e38ec49361e980ab95b3371af2d", - "libraries/3rdparty/lwip/src/core/mem.c": "b15257ccf032eca75ab4bc885cd26181120efcc9503912e5505c025f40af20b4", - "libraries/3rdparty/lwip/src/core/memp.c": "91ca3a00487d61849324ae571ac9ede550a879365c557aba38667ace122b6c00", - "libraries/3rdparty/lwip/src/core/netif.c": "f3cdece0a08a768949dcc756c4556d4ce495fd5ed9e571704834996471191642", - "libraries/3rdparty/lwip/src/core/pbuf.c": "1a73a2dba7a2a39571c1a55918eec3a1437568002f96bd59d3d8c85e5c4d7542", - "libraries/3rdparty/lwip/src/core/raw.c": "59a74c74b9ad47da73b1d1f5d64729f6a74d55194022f914e9fbc0acdad922c5", - "libraries/3rdparty/lwip/src/core/stats.c": "a18b76cde437213ca9f00137bdb61adb00f6f931fe28c40c81f811a5e674caea", - "libraries/3rdparty/lwip/src/core/sys.c": "86e336dedec36e042aadaebe93c8be944675210841ccabf180200e82c91b0f8d", - "libraries/3rdparty/lwip/src/core/tcp.c": "1a3629a48a20e647cb795bfe78914d7179d7336bc5148bec69c5d50c2e98cb60", - "libraries/3rdparty/lwip/src/core/tcp_in.c": "66ce1fb10e6d63c2e2db8b1d39149ecc9a20a27fcea53b6d88672d24b8eb86ba", - "libraries/3rdparty/lwip/src/core/tcp_out.c": "f18c88265cbefe20123ecaa30afcb423559805793e8f4a911e50adbd06d6e411", - "libraries/3rdparty/lwip/src/core/timeouts.c": "930bcfaf5b12b97f975fca7b8c2f7ab999cffa37f7c840ea91b340aa4ef62115", - "libraries/3rdparty/lwip/src/core/udp.c": "8e9a31ae52ca28eadb76c131a84d9a84443badcf38eb1dec52473ff5cc578f49", - "libraries/3rdparty/lwip/src/include/compat/posix/arpa/inet.h": "8b3edc25121de40cd1c3338d5d68be93091f0713ee8a23eba9789f14d41e0f6d", - "libraries/3rdparty/lwip/src/include/compat/posix/net/if.h": "b1cc52bb828e7cc23f070269a60a6ea33f3fd828190b0248f4cd589f06fcab6e", - "libraries/3rdparty/lwip/src/include/compat/posix/netdb.h": "ec3cb99596ef6bf11b39870541bf6607a7cff6011cfef99bf5d53f2abed05948", - "libraries/3rdparty/lwip/src/include/compat/posix/sys/socket.h": "8b3edc25121de40cd1c3338d5d68be93091f0713ee8a23eba9789f14d41e0f6d", - "libraries/3rdparty/lwip/src/include/compat/stdc/errno.h": "9fdac7c52c9fe0cfdf50f96eae29c5f341a9afde5a56166d21500c656a8a0728", - "libraries/3rdparty/lwip/src/include/lwip/acd.h": "234774b46c5e5dd152d2374aa6e570201a71662c0b0a940eae1e96f5321f6355", - "libraries/3rdparty/lwip/src/include/lwip/altcp.h": "03f1df1b3e703b4717a272d272ed32b8f0949ca1dd2f1e3f91fdc9d9ff4fc8f6", - "libraries/3rdparty/lwip/src/include/lwip/altcp_tcp.h": "e6b325b516d9e2af49b3187e01cd324066ef2c6508a2d9c06016fc0570148d43", - "libraries/3rdparty/lwip/src/include/lwip/altcp_tls.h": "be69627d2d3809dbb791e89cd551f13b8d0ebfbdfa9ffc3d74a00bf3b9f81ce2", - "libraries/3rdparty/lwip/src/include/lwip/api.h": "39a93870e9151ab0a4a70c007c931cf3b642b0704eee43aa662aba9cb9d14f4a", - "libraries/3rdparty/lwip/src/include/lwip/apps/FILES": "1baacff539b72c79be4fb5491be4963f0103557286405b3b4b4dd3396bdb0196", - "libraries/3rdparty/lwip/src/include/lwip/apps/altcp_proxyconnect.h": "c4b47d012ce46a6aa25d4038ecfe0844b0f3cdfe40e6234d622de298aa48ab13", - "libraries/3rdparty/lwip/src/include/lwip/apps/altcp_tls_mbedtls_opts.h": "7fb4fef6a302f23316bad885be4d108a9227377c00948df5be82c9a49fefb0b9", - "libraries/3rdparty/lwip/src/include/lwip/apps/fs.h": "e99ffa827fe8179b4c14c43e352aa88eb635eacf4c8ae40d227211bffd72f927", - "libraries/3rdparty/lwip/src/include/lwip/apps/http_client.h": "54c304f5f3264f555af454f0e14a7ea8610d7cdf4d1424bb79dd7f5159838bbe", - "libraries/3rdparty/lwip/src/include/lwip/apps/httpd.h": "4a5c1213fe0fd2082a8aed3084f4d282b8c51c3c464d140306cdce0f21c30b9e", - "libraries/3rdparty/lwip/src/include/lwip/apps/httpd_opts.h": "597f594dfe74f60b54f94956e18881ba80001c2717e7a96a73bac41344bbc7fa", - "libraries/3rdparty/lwip/src/include/lwip/apps/lwiperf.h": "ac35572131e102c96feffba4bf2788b841f0d162cde1af3d9b7914e11540b9b9", - "libraries/3rdparty/lwip/src/include/lwip/apps/mdns.h": "f0727b65bc6d136e5bee1c5ac52aeaeebdbe2f79a555d73ec19fe541eca93583", - "libraries/3rdparty/lwip/src/include/lwip/apps/mdns_domain.h": "6fd124cb463e07bf6ee81aa816db0cc86204c739f57e98be2f31691fea9bc456", - "libraries/3rdparty/lwip/src/include/lwip/apps/mdns_opts.h": "fc2060b24e899671a57343e83e2f116a179e64bfe3b83555c01929d7f4eeef37", - "libraries/3rdparty/lwip/src/include/lwip/apps/mdns_out.h": "2bff804ddd536e3b1daa97d6322a5279aac56288851de1f277c9c131f16dc365", - "libraries/3rdparty/lwip/src/include/lwip/apps/mdns_priv.h": "6c7fc358681e2ab448e045651157acf898bcfca72ab28646c375881d2c2971e4", - "libraries/3rdparty/lwip/src/include/lwip/apps/mqtt.h": "2fa1c2440833a82f07a5a362616833372f09a9006c7b099e813a48f12631599c", - "libraries/3rdparty/lwip/src/include/lwip/apps/mqtt_opts.h": "b8bb920a04472488f3fa1371cbb9c934bfead7cc8ba7f06316da4bdb2e354feb", - "libraries/3rdparty/lwip/src/include/lwip/apps/mqtt_priv.h": "e4903b34c12c941650045977e2629d41b1ca8407e48dc28d9ba36382825bb2d9", - "libraries/3rdparty/lwip/src/include/lwip/apps/netbiosns.h": "438a8e5cb80794959e0ebb0989a8d0615dc8d2d737fa97c231b10d4040e8f715", - "libraries/3rdparty/lwip/src/include/lwip/apps/netbiosns_opts.h": "c4dcff3906dc65cbe88d4fd6488f24a4eb1659d11fc7ec8cf7eef7eb3599b82c", - "libraries/3rdparty/lwip/src/include/lwip/apps/smtp.h": "61d670c0c914cc4d39f6c9e4661a1ac5e2b3cdfc45bb972b35cbf7ad3ea3d569", - "libraries/3rdparty/lwip/src/include/lwip/apps/smtp_opts.h": "6f3e0517c42b198078615074a72d8d158304264c8fa56a1dea79636bdd1898be", - "libraries/3rdparty/lwip/src/include/lwip/apps/snmp.h": "ae5a3b816e4920b0cbb4f79bd7b82a1dbc21378c834f15709db32282dccf898f", - "libraries/3rdparty/lwip/src/include/lwip/apps/snmp_core.h": "226888829e92f37f5e34e04f8472c2bc00f16817f41253288b7746eb1afeeb7a", - "libraries/3rdparty/lwip/src/include/lwip/apps/snmp_mib2.h": "dbc21ede7c6c4ac282b845aaf40961993a94b3ddb80a85e8aea66c9f6c5cae03", - "libraries/3rdparty/lwip/src/include/lwip/apps/snmp_opts.h": "fcd7d37a9418f6b25fc367ad1252c193a62915099b5bbc9f6693f0526d915bd4", - "libraries/3rdparty/lwip/src/include/lwip/apps/snmp_scalar.h": "f88ed96f2010bb383af723c50f8e0b93a9a5d566599ef0f35c11102124805c09", - "libraries/3rdparty/lwip/src/include/lwip/apps/snmp_snmpv2_framework.h": "8397074e6d74aceb6430e077537eff4330f6c712d00647a13f2832093a7f9eeb", - "libraries/3rdparty/lwip/src/include/lwip/apps/snmp_snmpv2_usm.h": "ddd777bac19a3f0c6823854f121e52e1c16a9f788540e1f172920b45a01713bc", - "libraries/3rdparty/lwip/src/include/lwip/apps/snmp_table.h": "1d0ef0508b2a00f55e6a90c27d484e526a2db5cde41c13b2aafcc6f2c8d7e25b", - "libraries/3rdparty/lwip/src/include/lwip/apps/snmp_threadsync.h": "cca3712f8a796bc481ca8be54c61407f5be5661acc10c95234ba4c31ef6a4996", - "libraries/3rdparty/lwip/src/include/lwip/apps/snmpv3.h": "7d1be4c7469ae8108d3657433f965c8884e66475178fee2a474fbbf01aee3fe0", - "libraries/3rdparty/lwip/src/include/lwip/apps/sntp.h": "c7b56e4653387585d4d5073c1917f93114027ccae13ef842880441477b471653", - "libraries/3rdparty/lwip/src/include/lwip/apps/sntp_opts.h": "e19e34bbe7f97d3f626b5975d1182771683cec15957b3415d4d674ef9489ada8", - "libraries/3rdparty/lwip/src/include/lwip/apps/tftp_client.h": "afe8265f9b7c7746c5bf86b5a739e1eae6c064c7af7e116959a7b52c66064ed3", - "libraries/3rdparty/lwip/src/include/lwip/apps/tftp_common.h": "76b2fb20cbe1212c6e691e9216ced22cc959f602ce76e0fed06dd3c474fb6f31", - "libraries/3rdparty/lwip/src/include/lwip/apps/tftp_opts.h": "185e13e074f0ca14271e187fe15fbe8411de355d55ec6cd4fbb5b271776f8479", - "libraries/3rdparty/lwip/src/include/lwip/apps/tftp_server.h": "627e19deb28320005781f9052d090aa6fc7d5785ccb0a4315c50beee4180d0c8", - "libraries/3rdparty/lwip/src/include/lwip/arch.h": "eaeacbe7eedb71d3d72ebd50075a3d8658c98a6e3d896626e77fb77bd489a89f", - "libraries/3rdparty/lwip/src/include/lwip/autoip.h": "754d9d41176e55a09124b09fa19fa3bac9b60332fd2d80e05bc03670d8fd2e0a", - "libraries/3rdparty/lwip/src/include/lwip/debug.h": "23a140dd9efdf8ddb8fa3e97697f09670d8d23ea2f1b58f1b45ca639e0f6f515", - "libraries/3rdparty/lwip/src/include/lwip/def.h": "cc272d004c7273c8919ece52759c3142f9a74d0560f15790b698b927020af383", - "libraries/3rdparty/lwip/src/include/lwip/dhcp.h": "f7e032cfb3cd931b73205069fc4cd42ff9429fe9a4f6c5175e1dcd4e89a07209", - "libraries/3rdparty/lwip/src/include/lwip/dhcp6.h": "dbac3f610e3e76547691af73a667bd5fd6564a7fbfa5ac382ef77604938d4afa", - "libraries/3rdparty/lwip/src/include/lwip/dns.h": "962c462c90afd41ed010b961f539c11b2baba3e8a6bfe584f331a5e4d43c1b05", - "libraries/3rdparty/lwip/src/include/lwip/err.h": "af26b573fc5c6a31877fdcde35e15382ac0c8b01f35af3f5a4429f9cf5dd323d", - "libraries/3rdparty/lwip/src/include/lwip/errno.h": "79dc6e03887ccf301e01a5129d1a732e21fb05308a8e38f04ada44e0928c075a", - "libraries/3rdparty/lwip/src/include/lwip/etharp.h": "bd50bec728d92dbd790a1504e52f42e4e1bdd018380c2b116f0dd8d3ed44e3f9", - "libraries/3rdparty/lwip/src/include/lwip/ethip6.h": "7a7e744ae373a720261be3651adaa0f35ff00ebb1bcf38e5330e371ddfd162b7", - "libraries/3rdparty/lwip/src/include/lwip/icmp.h": "84f63c9fbc6f6d66ef437f834279c25c20bfa78834eb0ee347c70377f7f8d8c8", - "libraries/3rdparty/lwip/src/include/lwip/icmp6.h": "f790cd444ecbe2e605b2f1a1deab3e6e9662ba6e87fd47b401912c5a118ee836", - "libraries/3rdparty/lwip/src/include/lwip/if_api.h": "6f6945cccbf0721180ddc7ff589d9f7b47f825ce62ae8b3cf6c186f5d2750822", - "libraries/3rdparty/lwip/src/include/lwip/igmp.h": "abf5ff1e19ec61690b6e8d55c8ee11afd1556b77c8b0fc452d5eb490810cc27f", - "libraries/3rdparty/lwip/src/include/lwip/inet.h": "2b8eb02e6708f3725d8c09967d316940ce82fc5e05042b9ce42e2d0530fe17c3", - "libraries/3rdparty/lwip/src/include/lwip/inet_chksum.h": "df6720f78e47afde2315d6a9dee1bb5b26f76692ce3e040c574409493435c933", - "libraries/3rdparty/lwip/src/include/lwip/init.h": "0696eeb90c80b8e1e47c03a90de54f25a116c0a93a2c0e6118ad68d427eb365e", - "libraries/3rdparty/lwip/src/include/lwip/init.h.cmake.in": "38df819f1ae753f240e9adb27398c14d6cf3e2e9065547a8ceb7694a9d132216", - "libraries/3rdparty/lwip/src/include/lwip/ip.h": "8b27813c2810b0564585ec06b1e1124f7dca28436c64125df15d496b1bf5627e", - "libraries/3rdparty/lwip/src/include/lwip/ip4.h": "188a62765c765fb07cda26a695f17c9c1674c0da7539c71e4d8f79b3f6f6ba21", - "libraries/3rdparty/lwip/src/include/lwip/ip4_addr.h": "373faa87a644cedd25874acfbaeea0349b34448fc2dafa5d0853d945e46a6fe8", - "libraries/3rdparty/lwip/src/include/lwip/ip4_frag.h": "8b0bb67655cba6da8cddc360e655c711553ad35e6306dbae618637e80be9911c", - "libraries/3rdparty/lwip/src/include/lwip/ip6.h": "7681c2948f700aa565c387ca20654f7322991ca15de7fd4e8f342a8ce44abe57", - "libraries/3rdparty/lwip/src/include/lwip/ip6_addr.h": "1dbc5e8ddd4c379303d4a3416f628063f0814814d365cc20dad5d89e0baa4070", - "libraries/3rdparty/lwip/src/include/lwip/ip6_frag.h": "3ab1bdb9220a3c87c8187fb26b1150cd03c4401b0a0c6db2ea4a22674141dd3b", - "libraries/3rdparty/lwip/src/include/lwip/ip6_zone.h": "951a5aeae08562dfc4a3bcc72de9952ac0045126a1cef9eedf9c6881ecb91a03", - "libraries/3rdparty/lwip/src/include/lwip/ip_addr.h": "9c309963b0679348d102e23665ced46740dda427dc23916d6f0434dd6170ae0b", - "libraries/3rdparty/lwip/src/include/lwip/mem.h": "416f961f338a0cba460494ebfe2527b7cc1fc5c18f489711e66af7dd76b7a223", - "libraries/3rdparty/lwip/src/include/lwip/memp.h": "79dfd019219330cf08deb1360483eb7d1da7a1a7a304034ef65ad52feefba1ef", - "libraries/3rdparty/lwip/src/include/lwip/mld6.h": "026348d23012aa1c2210ae53f2a5ddf3a273cf004ef597a1861266a01d4ca86e", - "libraries/3rdparty/lwip/src/include/lwip/nd6.h": "79fa57b4bded6763d38f5e4fa56aa2fac8117bf76ffc69869e05357af88951d6", - "libraries/3rdparty/lwip/src/include/lwip/netbuf.h": "1aa92014d8919c5073b5123c92881e00b0c507ca485667ccdebbf31afa214ff3", - "libraries/3rdparty/lwip/src/include/lwip/netdb.h": "582518497fefd57cd1d227947965c71b1dc16846add471af0fddfbb461c7aca0", - "libraries/3rdparty/lwip/src/include/lwip/netif.h": "cf6f1092f7c2748ae5aac89952e3a88903d43efecd040c9b479ba633386bf971", - "libraries/3rdparty/lwip/src/include/lwip/netifapi.h": "2c087eac81246ac74e3ba2c3922de0612890587f0cca7c1360f379a57ab45518", - "libraries/3rdparty/lwip/src/include/lwip/opt.h": "e411d94f8f45ea91aafec5e6ecfa198ad579e704de5a9e553e17f9a161584fd1", - "libraries/3rdparty/lwip/src/include/lwip/pbuf.h": "a4c632569405474706546d58f4ff044abab958e3fbc9d479f637066022f37d7a", - "libraries/3rdparty/lwip/src/include/lwip/priv/altcp_priv.h": "8b1c271129eea8f8d125ee8e653e143d5099683c2fddb9bc64524fcfdadcabd1", - "libraries/3rdparty/lwip/src/include/lwip/priv/api_msg.h": "e2458063868f0813bc26f41709bbf78d994760e72667b646b88f15e16e235f48", - "libraries/3rdparty/lwip/src/include/lwip/priv/mem_priv.h": "c90c9b64c8ea95c05d5b8b10d706acb53b6cc124166e8dd85b397698679f7920", - "libraries/3rdparty/lwip/src/include/lwip/priv/memp_priv.h": "37aff2894bbe25f1888e43b96be80f4c1a43a24867c0fc9aceb4093328682937", - "libraries/3rdparty/lwip/src/include/lwip/priv/memp_std.h": "86cdf1d80f2716a07011dc763e5fa614cd2b555382cb7d6750176116def67a0f", - "libraries/3rdparty/lwip/src/include/lwip/priv/nd6_priv.h": "0cd4756c17109d6d01c07ef35cbc527954a1cd926065432a715578590b8dfddb", - "libraries/3rdparty/lwip/src/include/lwip/priv/raw_priv.h": "0b2b019a55fab8eed89d668f13402778835117fe472464046472cd04b93c2bb2", - "libraries/3rdparty/lwip/src/include/lwip/priv/sockets_priv.h": "2efcf39c42b1a7055628461915d42521a4df3cb285b6f5635a5c6a961aff4f93", - "libraries/3rdparty/lwip/src/include/lwip/priv/tcp_priv.h": "547929dbf334d846444094ecb363680bf90320b198ac1e49027fda4049c07233", - "libraries/3rdparty/lwip/src/include/lwip/priv/tcpip_priv.h": "13fb2e7159ebcafc4ddda4961a9d70b2f8182f9e201aa990cb9148d8897bf598", - "libraries/3rdparty/lwip/src/include/lwip/prot/acd.h": "25ef5a9bfe37edbe5fbaed0a985c2ac0b4e928cd90b69941b46c533e7765cf7b", - "libraries/3rdparty/lwip/src/include/lwip/prot/autoip.h": "a0b78c818f6642e68c1d9c0b5c3ad12fc6595b66ac5ae41724c52decc6de760c", - "libraries/3rdparty/lwip/src/include/lwip/prot/dhcp.h": "bc74edb6abff7b5182e04e2e588292401ecba3875bb6673156b026a5c391dbc4", - "libraries/3rdparty/lwip/src/include/lwip/prot/dhcp6.h": "72c645a6153694229ca535f044af2d1520ebc7860baa98121747218a08c2b74b", - "libraries/3rdparty/lwip/src/include/lwip/prot/dns.h": "34049c0f7f489aaec12d0589dc51ecfb24408dba422f605d8deb207c44d02b8f", - "libraries/3rdparty/lwip/src/include/lwip/prot/etharp.h": "55164c0d047f1279982fef9681491c8811f8482976aff7fab9b63a9a589ded76", - "libraries/3rdparty/lwip/src/include/lwip/prot/ethernet.h": "42fbc05a563d3ad242663b7d82601bbae6c6d9c16a6da5b35b51a02799206303", - "libraries/3rdparty/lwip/src/include/lwip/prot/iana.h": "745c2d70a5d4839e3df5a34f7e37b83bcc7fe58f39eba1d2f5e238242d74c878", - "libraries/3rdparty/lwip/src/include/lwip/prot/icmp.h": "931d46a3e775efcd6076263e23eb564b612913b7c11f7b5d009e94fefeb20f28", - "libraries/3rdparty/lwip/src/include/lwip/prot/icmp6.h": "8d3bcb5d37b0ad3f73102ed2ab3c2b52a42492508d012d41d5b2233827232fdd", - "libraries/3rdparty/lwip/src/include/lwip/prot/ieee.h": "ec85a505aba178178743b34429f463a41ac43d3750d63901c7e1273dcd0a2ba6", - "libraries/3rdparty/lwip/src/include/lwip/prot/igmp.h": "9adb3a0b03feff302b057020aa860fd958f6ef4528225014c104bd4175ebdff7", - "libraries/3rdparty/lwip/src/include/lwip/prot/ip.h": "eb5371e5ac58467253d813bc58726e317f91abadb10336497de0d64645ec01cd", - "libraries/3rdparty/lwip/src/include/lwip/prot/ip4.h": "033570c0b7657f5475959f7b74d9e23c6f8e81498495d5b23d8c2eeb0640d7a7", - "libraries/3rdparty/lwip/src/include/lwip/prot/ip6.h": "c0514e97f153f2e5cf514e6f1f4350fd2cbcb7073ebc05495b436c638bd32109", - "libraries/3rdparty/lwip/src/include/lwip/prot/mld6.h": "9601cee67b48c4b7cadb75caf3d83c05f5409d367341af70af7e7e4f46f173f8", - "libraries/3rdparty/lwip/src/include/lwip/prot/nd6.h": "50cff239fdb433defe12f7e35c4f2964e42ad7bfeab15d3b274a59142c4d558e", - "libraries/3rdparty/lwip/src/include/lwip/prot/tcp.h": "db67bb5ea0517a8cd9e30ebf655743f69ce05e77ca6e4a113e8c60e69bd7c48a", - "libraries/3rdparty/lwip/src/include/lwip/prot/udp.h": "b56daa8ff1e8e52cdd4f720297f07af2a96feea254db86768e20e157d7ce2784", - "libraries/3rdparty/lwip/src/include/lwip/raw.h": "e9efc60e31f2ff39a98b1367968ac724fc91ecdc115a74fc44813b761f02caf7", - "libraries/3rdparty/lwip/src/include/lwip/sio.h": "b6555ae90164d0b66e2772ec3444ebba0133927e4f47b512b570819b66912ce3", - "libraries/3rdparty/lwip/src/include/lwip/snmp.h": "1f90da65829c29545e9562ce5355d1799ea36cd901ed8ea9faa8e1ef3d7c2ece", - "libraries/3rdparty/lwip/src/include/lwip/sockets.h": "7962d403d886cc9342ca66f4696bcada1bf2ee4c49e1cf7196f8525710368cf2", - "libraries/3rdparty/lwip/src/include/lwip/stats.h": "295e3f2f9be188c05a90c2bb7e57a250a07e5ca7c54bdd31a50309da82cc5874", - "libraries/3rdparty/lwip/src/include/lwip/sys.h": "8ae6002810cddab1b112cbe886f331f5019c8bd43d98446f644621ef907f9f60", - "libraries/3rdparty/lwip/src/include/lwip/tcp.h": "eb514477b21ed78dd4d527f4aea3bed5585200e285b85c666689b9c43b77a89a", - "libraries/3rdparty/lwip/src/include/lwip/tcpbase.h": "cf4b048f3bc228ab364cde15eb6be5eca961fab09036c699c2c4b1437ab90aff", - "libraries/3rdparty/lwip/src/include/lwip/tcpip.h": "c772dbff8e46a86ffa65ec62e5b304e75525b6bcfef94917fb7de1045449f603", - "libraries/3rdparty/lwip/src/include/lwip/timeouts.h": "a383b43e3ba021d06ff3791d223db46cb3385e8dcdfcec0221ef2a006243c022", - "libraries/3rdparty/lwip/src/include/lwip/udp.h": "f9783bca6b68b10c229185559e0ae7e79bb793e1d6c244c7b26408516187f1f8", - "libraries/3rdparty/lwip/src/include/netif/bridgeif.h": "39d409d880187e2a7b372ddae2b1cfc004b88a0dd786dbe9070945420b8e42c8", - "libraries/3rdparty/lwip/src/include/netif/bridgeif_opts.h": "bc6e5f0677c621a5a8adb315e1cdb06210e1391efea6d308684103fd38edfe66", - "libraries/3rdparty/lwip/src/include/netif/etharp.h": "2e1ab81eced65420cdee5940d2e547cae7b0fa70088f452692363676ecfc66dc", - "libraries/3rdparty/lwip/src/include/netif/ethernet.h": "1dd88263e583593e47f7c891680d67838287160551b8c06562c9feca1ddee443", - "libraries/3rdparty/lwip/src/include/netif/ieee802154.h": "02f21d8b3e143fa77d8fa3f0d3db9ac1683507436ab441a61d5012ddb6037699", - "libraries/3rdparty/lwip/src/include/netif/lowpan6.h": "538ac2429cedf9193b6538998f3ba5bdd003fbf0840fd03b46d4ad5bcfaa4c20", - "libraries/3rdparty/lwip/src/include/netif/lowpan6_ble.h": "5c40e2a9640810cebaa8a0e501913cae093368da21f1226e9476b078f34f247f", - "libraries/3rdparty/lwip/src/include/netif/lowpan6_common.h": "eed0a8f45ea6e62ba4238d6bc139a1bef5fe625ec7527b52856fbf885c12f8ba", - "libraries/3rdparty/lwip/src/include/netif/lowpan6_opts.h": "fc57628292ff0ccece9770a9c101b992f350c55088af2bb364246fbcf6f3f024", - "libraries/3rdparty/lwip/src/include/netif/ppp/ccp.h": "b6e681ffe6855a6772c6d0a9077f144676c30db0c9ec0ea461e816f7647d6d43", - "libraries/3rdparty/lwip/src/include/netif/ppp/chap-md5.h": "f67cd93664262575ded862c17bac7c1003e2eb690224b89ba2b0cdd221c2f725", - "libraries/3rdparty/lwip/src/include/netif/ppp/chap-new.h": "f7bfb4e194fedcd1e6d499320826ecca7f14add5170c8fb7d4832b8e831bc2ac", - "libraries/3rdparty/lwip/src/include/netif/ppp/chap_ms.h": "77316bd6366248a0d0715e19e231667c1564f3ef081dc3ba839cd673a5d4984e", - "libraries/3rdparty/lwip/src/include/netif/ppp/eap.h": "42589e98b4ff8470c0e9a1cecc45fa30e79e2c1c3452fc46e2a88b6ac617dfe8", - "libraries/3rdparty/lwip/src/include/netif/ppp/ecp.h": "4936fccc29a900ced5b67906f97f192ea634642b6a003605dc1cb40d65d011f6", - "libraries/3rdparty/lwip/src/include/netif/ppp/eui64.h": "fc79081c31fd7333b0e2b3cf61c870727a3b066d82482c894b02c81cdbf464c7", - "libraries/3rdparty/lwip/src/include/netif/ppp/fsm.h": "8751104f5cdeb3ace720744016431ee2d704983e8a94de7add0830e63dfdef0e", - "libraries/3rdparty/lwip/src/include/netif/ppp/ipcp.h": "60bb47d15951954c865393be49b64f6daecc966f7146aeee187530a111d9008a", - "libraries/3rdparty/lwip/src/include/netif/ppp/ipv6cp.h": "69de1cc233f9ec05312a6cd4d5b558d91d04e39626ad6f9e0fbc4ee61a5709d0", - "libraries/3rdparty/lwip/src/include/netif/ppp/lcp.h": "0278457347c50aeaa4636124d0265fb8064511f461de2b3ff7fa51e3dacb0345", - "libraries/3rdparty/lwip/src/include/netif/ppp/magic.h": "b19a254f135449982830685df31b948e0d5c7e44ac5875efc8d1a3ef20a3aff7", - "libraries/3rdparty/lwip/src/include/netif/ppp/mppe.h": "8dd28c994f67ca45b11586ecc195fabedd5d51efa0bd99872336d82886477c9f", - "libraries/3rdparty/lwip/src/include/netif/ppp/polarssl/arc4.h": "970bc9075bf7aef36f4a225ba8a3dcb89c16a1948016f3521ca4a7609b7ba284", - "libraries/3rdparty/lwip/src/include/netif/ppp/polarssl/des.h": "f0a3ea812ead16f7d8fba08115429b5bd7deed1d9ffc6dddf66ec44b1d95ef0a", - "libraries/3rdparty/lwip/src/include/netif/ppp/polarssl/md4.h": "d1982ff627c1176d03c60fa8ae307af09626a2655e08525a146019276edb9058", - "libraries/3rdparty/lwip/src/include/netif/ppp/polarssl/md5.h": "1962ff0d88f8a7efbb6c8592eb13154129cfc7012c8cc22be7981df35e3c8ba4", - "libraries/3rdparty/lwip/src/include/netif/ppp/polarssl/sha1.h": "2951ad6ae5b5797112ae1899cd814536c445334bf59cbd91bf5414db0613980d", - "libraries/3rdparty/lwip/src/include/netif/ppp/ppp.h": "58175d5f9fda4d88bdaab4f1da12da692dd9e732ee0c51d94319b3461edd01c2", - "libraries/3rdparty/lwip/src/include/netif/ppp/ppp_impl.h": "9a216f46049edfb333551cb4e7213ad537b0570c3211f0029b32bcd0c39cf62e", - "libraries/3rdparty/lwip/src/include/netif/ppp/ppp_opts.h": "ea99faa10a07d3e414696465ca06ba420c585cb9a683e20e8f3f24f80e03fe5c", - "libraries/3rdparty/lwip/src/include/netif/ppp/pppapi.h": "f1520293792605ad0f0c78c93a5907d478affbebea8d6be1b0f8a8bdc9c4b427", - "libraries/3rdparty/lwip/src/include/netif/ppp/pppcrypt.h": "954943c6c1286c707c0f1182428eb514dc8cf87a704a4e8f26a926553f260d58", - "libraries/3rdparty/lwip/src/include/netif/ppp/pppdebug.h": "fab025981023c13721fac50978c5416ce2c9a0f40db200ef78ce4cd36d3b9b63", - "libraries/3rdparty/lwip/src/include/netif/ppp/pppoe.h": "fb57591c5679950f4af58b17427271aa3554b9f8e49cc59d913f79de0bf07363", - "libraries/3rdparty/lwip/src/include/netif/ppp/pppol2tp.h": "ae9a819aaf816ae4ff25c35bddaf7c10654a54b95451b247fd5d2824229d3cf7", - "libraries/3rdparty/lwip/src/include/netif/ppp/pppos.h": "c225fffa8f85bc170992cef05d8d7350c86d2b3ae3d55951d71e35c9fcc2390d", - "libraries/3rdparty/lwip/src/include/netif/ppp/upap.h": "7cf555545ed20e7d7897ed935c6333e77d629b1862e4e2136df87ebebfcb3907", - "libraries/3rdparty/lwip/src/include/netif/ppp/vj.h": "d6c9da89224974d8486dfa0082ecca0d487715df65a37088db55e7e51c745a14", - "libraries/3rdparty/lwip/src/include/netif/slipif.h": "f58cc6842251be4358904b2475021fc2da592de3756fbb358b615b0173efd791", - "libraries/3rdparty/lwip/src/include/netif/zepif.h": "7b3a4c9094483c14eb3c4da651874aca325e3927fde02eb28e226040deef4714", - "libraries/3rdparty/lwip/src/netif/FILES": "10564ef1c25f4ca37518cc705b3cb27b206cfea82db6a9601ad416aeffe560dd", - "libraries/3rdparty/lwip/src/netif/bridgeif.c": "863a91f68fad44e603ead49d9398b1ffe3137588324c762fcb332c0e47ba85c9", - "libraries/3rdparty/lwip/src/netif/bridgeif_fdb.c": "dcbd424f88425943409f2aa54a93fa09afa19473444d005a6bdbe3aad85503f5", - "libraries/3rdparty/lwip/src/netif/ethernet.c": "e1c1b7ceabe5ab707e6cea7565384fad597c1035ff17883a8a8ff443473f89d3", - "libraries/3rdparty/lwip/src/netif/lowpan6.c": "895c236b64b09f113ee6b5b1513df69005a4405d8fa403df9c31b73080912cca", - "libraries/3rdparty/lwip/src/netif/lowpan6_ble.c": "813e98990f440b14ea66282d1b490447812b66268ecda7097a265a6ec78f5ef5", - "libraries/3rdparty/lwip/src/netif/lowpan6_common.c": "94372df9235c9fe1b08778c3c31234181e27d16e60e7e542d7005181108a7fe6", - "libraries/3rdparty/lwip/src/netif/ppp/PPPD_FOLLOWUP": "d4e0485a2936de3201dca8dc10068534fff399f8eadbd31684f36babc4b094b7", - "libraries/3rdparty/lwip/src/netif/ppp/auth.c": "fe2afed36bdba441463e4e5211395614e9d7685eb1760d5d84137baf58a42dc7", - "libraries/3rdparty/lwip/src/netif/ppp/ccp.c": "88165e63b1a7b6c56f4e952544a2375c6033ac4c2e0ec4779d145322d951ee94", - "libraries/3rdparty/lwip/src/netif/ppp/chap-md5.c": "9f099cddf6fa7931b962fda6dc1d1df5eecf8c94881eda29a63d1abafe317ec2", - "libraries/3rdparty/lwip/src/netif/ppp/chap-new.c": "658070df33b3242b150efce6059a9998c15f5f9192ae06b4cd5e7cffa55384a8", - "libraries/3rdparty/lwip/src/netif/ppp/chap_ms.c": "d3940e2add91c8a721b32f1e04bbc88add012d7146dda03744608f31ba6666ec", - "libraries/3rdparty/lwip/src/netif/ppp/demand.c": "b07dc6e971fffe70cd73f4ff6733655989e34dbee3fc6c2dfa164fadb6578975", - "libraries/3rdparty/lwip/src/netif/ppp/eap.c": "74d26511e05f8b39b4b5fa04722da2bb620e661ec630a5c8d7cc433b5bef702a", - "libraries/3rdparty/lwip/src/netif/ppp/ecp.c": "b6736696754a289ea5464f7386d05790365b873c0ed0123692bebc4ebb18e6eb", - "libraries/3rdparty/lwip/src/netif/ppp/eui64.c": "531be9bfa9c33e0abc4452b976ca4ab60f8f0ecc92d9af91121551250810cd4b", - "libraries/3rdparty/lwip/src/netif/ppp/fsm.c": "fe71b4b142a07c13ef69ff3e344ee3508b44c0471a62c47ec6ec585f250fc940", - "libraries/3rdparty/lwip/src/netif/ppp/ipcp.c": "9ea7ec074416030a39589392d62adc451ab2c78c61c506cec7674436f085fa90", - "libraries/3rdparty/lwip/src/netif/ppp/ipv6cp.c": "707b3687113f9e8fdf4230a1a750be60aa05deb081e0ece81317cd49b718831f", - "libraries/3rdparty/lwip/src/netif/ppp/lcp.c": "dc39acf562d7df70fb1eac8d7f8218dfb9d592498638325e9fcd4d206f97eb06", - "libraries/3rdparty/lwip/src/netif/ppp/magic.c": "aad196f6945d3b80b158b5011d4eb216a3e1766b73abcd9c19728bb8b8e3e3bb", - "libraries/3rdparty/lwip/src/netif/ppp/mppe.c": "f209f08e59f0e9ed5d4b736a7534e6c0df726b2d14cac07dee311017fa2a0a41", - "libraries/3rdparty/lwip/src/netif/ppp/multilink.c": "78920d813d0b638e287e5f15527886cfd53d5ea9a61cb6b325b6f8b3841e4bc5", - "libraries/3rdparty/lwip/src/netif/ppp/polarssl/README": "242dd0f7c45dd7fafc37e2caa4b1e0609e1cd9a61512d7772d58c41f7a7e7c95", - "libraries/3rdparty/lwip/src/netif/ppp/polarssl/arc4.c": "7d844ec4f6e88a788e17419d4525a07611851fe793e0bb52c7e24a1db5d2d6df", - "libraries/3rdparty/lwip/src/netif/ppp/polarssl/des.c": "4b2c48659036ad89adb2d08a2b54dc30fba73759a6a5ce810e9c794f7b4aacf4", - "libraries/3rdparty/lwip/src/netif/ppp/polarssl/md4.c": "9110b56e9b926edf560933b76d1bb1ca7e9532134773ddcb04bbd57db646e209", - "libraries/3rdparty/lwip/src/netif/ppp/polarssl/md5.c": "9bd07f764f9104538474c69838de131538f0a500952b8b24f32b758e23d91b4d", - "libraries/3rdparty/lwip/src/netif/ppp/polarssl/sha1.c": "844114b4c45f689aaef64df2bf8b445e6dcea9c52bb4cb485c18d0fb68e04d5b", - "libraries/3rdparty/lwip/src/netif/ppp/ppp.c": "c585c38d73eb2a2c27905acbc553acfad2d267e95e921f34295d2c344da677f4", - "libraries/3rdparty/lwip/src/netif/ppp/pppapi.c": "269bade48fe467119d59b3c33f8f42423c1b162d9e4cdb4c4da36bd87bcbd246", - "libraries/3rdparty/lwip/src/netif/ppp/pppcrypt.c": "02b12e7626078be9591237fe84ae000514a2cfd6f0653c890b7b75ce20cada8b", - "libraries/3rdparty/lwip/src/netif/ppp/pppoe.c": "7d658e3a24ed904c9ad9d393eb890f31326ae1fe8411ad7a036a0550e635fdbe", - "libraries/3rdparty/lwip/src/netif/ppp/pppol2tp.c": "18e83285eedf633c840db6a55077ce2cc902f19ab143c323c659c85ad25b8695", - "libraries/3rdparty/lwip/src/netif/ppp/pppos.c": "aff653829d77edb3e2ee197f1e4b3ff5e392e2f8e81a09a366576ab77a627e0d", - "libraries/3rdparty/lwip/src/netif/ppp/upap.c": "6944042740a916f6375d57437803e65839efbc901ebbb6cddc42c0a22c1eb33e", - "libraries/3rdparty/lwip/src/netif/ppp/utils.c": "fbc12cf311073c72d872ad5b382133c69144100b720c222e5331031ab30b6cec", - "libraries/3rdparty/lwip/src/netif/ppp/vj.c": "f70c1ac07ddaacf59f6b7ad28b1b657d645c5357ad8c4a7c449157d186fabefa", - "libraries/3rdparty/lwip/src/netif/slipif.c": "6e33b2aa2794b9baf67e8776b2c6e61b5e92725ee679067a71494dcb00071f34", - "libraries/3rdparty/lwip/src/netif/zepif.c": "374cbd2d942ed680a66bf6f36080ba2e7313bcd037a3380d6a7a53dfa3d75099", - "libraries/3rdparty/lwip/test/fuzz/Makefile": "0276ff5837ca4fe0178786ff2b1e1ec1c1ded76116c1800be97102c55780b3e2", - "libraries/3rdparty/lwip/test/fuzz/README": "e0aa244211046d73ed11c7150a8429b020f7ca958f4f45e61bdeb41c27663d2c", - "libraries/3rdparty/lwip/test/fuzz/config.h": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "libraries/3rdparty/lwip/test/fuzz/fuzz.c": "743d5ae304d1fa2f1e93fc858e2f97c8e822c266a236cc104b9dbb567fe1c98b", - "libraries/3rdparty/lwip/test/fuzz/inputs/arp/arp_req.bin": "90136462593149d9a7367a3ff8224baed060c562464aed70fd73a3a2eb56e054", - "libraries/3rdparty/lwip/test/fuzz/inputs/icmp/icmp_ping.bin": "8b136902714d3318066a465c6bbb659fb53290ffde7b4e44ce91cb51f8457cf3", - "libraries/3rdparty/lwip/test/fuzz/inputs/ipv6/neighbor_solicitation.bin": "2c4c8e93785f654e678a9309d7f8f142df493b5d923fc1d9770da99143e7166f", - "libraries/3rdparty/lwip/test/fuzz/inputs/ipv6/router_adv.bin": "efe0fa3a120d28ef1f8242fbf6e32722f072922cdf323268c7563c6f553192f1", - "libraries/3rdparty/lwip/test/fuzz/inputs/tcp/tcp_syn.bin": "f45051b6f9215e7c539982b1f3ada384c5d87da7f98aabc891c4aa069cc8fc73", - "libraries/3rdparty/lwip/test/fuzz/inputs/udp/udp_port_5000.bin": "1f061bca04aed291a4cc2212f925804c59fa1f0a4057931ae1b909b5723e27d7", - "libraries/3rdparty/lwip/test/fuzz/lwipopts.h": "f172aa424517abfffe32d789948126d4af82c588e7528d3f81a118ba32f4e103", - "libraries/3rdparty/lwip/test/fuzz/output_to_pcap.sh": "3ada800dd24ae2cf4cb41f0065aca8a78c29c6ae21271129ad8fe8fcf7f9dd25", - "libraries/3rdparty/lwip/test/sockets/sockets_stresstest.c": "a4f9ef34fa16d6afc0055ea68aeb9224ca2d0702adac56ec3dc0523544e4cb0a", - "libraries/3rdparty/lwip/test/sockets/sockets_stresstest.h": "b0f0b91e41ad2f86fbb0c889d9d0d38d6a3bd258d2dd5e0a3c5ac8a1ab7ac024", - "libraries/3rdparty/lwip/test/unit/Filelists.cmake": "3320870eff853e33d137578eb6fbae190e4e45b0fcef6f67ca30a881f569c00c", - "libraries/3rdparty/lwip/test/unit/Filelists.mk": "161801b0b6cf9decd2b2715e8d52e4697c6e969bb2e0cc95020eb233817429d4", - "libraries/3rdparty/lwip/test/unit/api/test_sockets.c": "57c81dfc3d13443232a95eeb4bbf7c8015b420e2e234e3448cfa747d798540a9", - "libraries/3rdparty/lwip/test/unit/api/test_sockets.h": "a9d4ea42dfdd6b976481eb6924b07f296b07c664ddf001b279609c7ffdf4e753", - "libraries/3rdparty/lwip/test/unit/arch/sys_arch.c": "b2e5944a75afb79466b993bccb2b554889ee9a1a48c0117749972199fca548e6", - "libraries/3rdparty/lwip/test/unit/arch/sys_arch.h": "8620ba7c2497f07926dd9b829753027ed477029e101a2c36079e506442b9e033", - "libraries/3rdparty/lwip/test/unit/core/test_def.c": "9df928c75ce8055b16642f53435a8cbcde5821916a3012e66caab98f305b9ebd", - "libraries/3rdparty/lwip/test/unit/core/test_def.h": "60e5dd455f893eaa2365fd2c5ad01d7adfcbd6ae4459a975a9abcb1e54746db4", - "libraries/3rdparty/lwip/test/unit/core/test_mem.c": "6f3e9d6a5c2e79b87d49bf17b068ce9f9965adb17be74355e25ac843b5f0ca1d", - "libraries/3rdparty/lwip/test/unit/core/test_mem.h": "54e2e3a94257fdfdbb31dbd686aff96032976894f9002188c3817f14d2ca1d00", - "libraries/3rdparty/lwip/test/unit/core/test_netif.c": "034ce07a28143aa81f6472f5ef8b22bab2d1dc3b358c8b831104a67ac1306593", - "libraries/3rdparty/lwip/test/unit/core/test_netif.h": "66ea5e6b4b2d405fa9492f044eb84e5043c399919b8b6b06d712e7ef5750e791", - "libraries/3rdparty/lwip/test/unit/core/test_pbuf.c": "7b3da0e82a0b44414c30e65a5c976ae58f57cbb01c7c7011fe1af3298e7543d9", - "libraries/3rdparty/lwip/test/unit/core/test_pbuf.h": "5eb3d4655112e690f0f1ccf1f7e7dcdde85a87d28fc903a1d89c8df14e738e73", - "libraries/3rdparty/lwip/test/unit/core/test_timers.c": "ab9cb9ebb9c1fbe4970a11453dfa1f29bd5fd90dc93b8561135713eff9394424", - "libraries/3rdparty/lwip/test/unit/core/test_timers.h": "56be4e53bb381b3fa2b9a28c57bbdfcdec04de3b441636b6688345198a42d48c", - "libraries/3rdparty/lwip/test/unit/dhcp/test_dhcp.c": "bed979fae13fc0698800b0b31d40c549175d60911aabc676793b85774421d022", - "libraries/3rdparty/lwip/test/unit/dhcp/test_dhcp.h": "8a2dac3d647bb143830666306cd87761c32f2ff033e11a58faff86a8e9a09a41", - "libraries/3rdparty/lwip/test/unit/etharp/test_etharp.c": "6b03c7393a9fae73ea757dc979cebea892c6367385a6eeb460f55085802d9b0f", - "libraries/3rdparty/lwip/test/unit/etharp/test_etharp.h": "b146eedd105d24070de6c9c42520120922cec7ed31e1b7c93305b471b9f9dcd8", - "libraries/3rdparty/lwip/test/unit/ip4/test_ip4.c": "f71eafadc1ebd8bfd90c5bec2cec9b423c838933e35212ddc25574935284269c", - "libraries/3rdparty/lwip/test/unit/ip4/test_ip4.h": "7638fa112bc0b0557aa87f5877b86d60c08a6675e456c834d67a579e9d8b372a", - "libraries/3rdparty/lwip/test/unit/ip6/test_ip6.c": "7f8add480419442841f8de72abe1346a2810d7e13cb0fea777b48154e3ccb6f9", - "libraries/3rdparty/lwip/test/unit/ip6/test_ip6.h": "1f4d745b8767e8f376e7b54a5b732e8ab4a19c1327b9484f25989159eb0a7320", - "libraries/3rdparty/lwip/test/unit/lwip_check.h": "9891cac2ce125e4e9e9459fcb9508bb58c6d0bed1caefabb188745230b9d4dd6", - "libraries/3rdparty/lwip/test/unit/lwip_unittests.c": "34718e3db1c2787ff462b5b64795c08b3d2d5f196f2ace46b041718ccecaca4b", - "libraries/3rdparty/lwip/test/unit/lwipopts.h": "143de1b8d885467b9690cc0756433b1a5b91150267922c997dc61492ed7a213c", - "libraries/3rdparty/lwip/test/unit/mdns/test_mdns.c": "ba2188e3d21678d88453e29a6c3324bb41f8aff218cb75283ad8673c702e4448", - "libraries/3rdparty/lwip/test/unit/mdns/test_mdns.h": "4226b64bfb4d48147cfa72df6dde6be9bd4a8e5e6a8e9aac8969840bdb9f87a9", - "libraries/3rdparty/lwip/test/unit/mqtt/test_mqtt.c": "491b11cfe15ec6a201d335cb0c07e70775793adcfb8d5966e1272dce389453ab", - "libraries/3rdparty/lwip/test/unit/mqtt/test_mqtt.h": "30cfa02308c9535517042384f8d15a0024760fd953d232e6562c99c8270fde92", - "libraries/3rdparty/lwip/test/unit/tcp/tcp_helper.c": "ad57ad66ed726f3aba92dc745b97fc5bca83ded304a4b3b2e41d22ab1bca9b21", - "libraries/3rdparty/lwip/test/unit/tcp/tcp_helper.h": "11f779ec9985e65d1048d4dfed44e3ea322aab50d720ac428be4d515e2850f52", - "libraries/3rdparty/lwip/test/unit/tcp/test_tcp.c": "486e68152c03aa0470e3a9c650e7a683cef328721d402b5af5c8f72cbd019b16", - "libraries/3rdparty/lwip/test/unit/tcp/test_tcp.h": "831ecc56ea4f5d6a4af9ae1e38fececcce696a51557c4a88618ca935fdac9690", - "libraries/3rdparty/lwip/test/unit/tcp/test_tcp_oos.c": "eed061425068f48f097378a46a36e1a10a9371e0bc0dba9de3880b15803e82c4", - "libraries/3rdparty/lwip/test/unit/tcp/test_tcp_oos.h": "219807f25b0116f12b3c852c8ad5d00c52b2920a220555a3388880b3a20220fa", - "libraries/3rdparty/lwip/test/unit/udp/test_udp.c": "8a34d49579c87b0aad6b0c5251ddec2d4e9d28c05cb3c437c9a6a74be4e9b403", - "libraries/3rdparty/lwip/test/unit/udp/test_udp.h": "6d311b4a541280aa4573fd0483556d9f3b05c20907a0b297d1e3a6de1f945563", - "libraries/3rdparty/lwip/travis.sh": "79cc9d98bd2beb37dee0b43fdb4c480d81c2b87f9968382a95fcd44217f4ba83", - "libraries/3rdparty/lwip_osal/include/arch/cc.h": "54bd7fbdc6d58a07710d31dcdbb3374b7fe49bb746e8d2a56515e98597a5200e", - "libraries/3rdparty/lwip_osal/include/arch/perf.h": "ee864fcb154cf5c938ebb77583ce7bdf69e56fa29c79098831815d022a2617ec", - "libraries/3rdparty/lwip_osal/include/arch/sys_arch.h": "b2798f66afa193bb065e73333b7cdeffc4ff7e37fa97a0cc6b9436fcc99defcd", - "libraries/3rdparty/lwip_osal/include/lwipopts_freertos.h": "7956aec019f851740b7ffbf7f365da2c075f112791d04cb1268ff6af5091a5ab", - "libraries/3rdparty/lwip_osal/src/sys_arch.c": "a133503424469c4dca161d79b668573983874ce87d1e26e563d49baac59dfd64", - "libraries/3rdparty/mbedtls/CMakeLists.txt": "dee4be32fde393a778af301f0408e52b5170678d6e41f02d5c0ee3627dbd5fd2", - "libraries/3rdparty/mbedtls/CONTRIBUTING.md": "2c1db90523cdc83b6a997fc9ba031db30da38fff2f0ee71923eb1a19d0470778", - "libraries/3rdparty/mbedtls/ChangeLog": "2e522b69da00e32c6b352bfe769e029a759d22e30358a1181d56ab5ce55bd909", - "libraries/3rdparty/mbedtls/ChangeLog.d/00README.md": "b53130f5c90c487805fd17066c312c6635e3bb75b4bcc8fe2f58924e01953ae2", - "libraries/3rdparty/mbedtls/DartConfiguration.tcl": "8e988a7b3b90bfb02dae6e8b584f4ec4d2cfb08d567e06de50ba576170925442", - "libraries/3rdparty/mbedtls/LICENSE": "93ffdf17d6585eada49caa2429d21d192f8a7894e57e00c7432953cf07bae44a", - "libraries/3rdparty/mbedtls/Makefile": "49cbae34739c746bfe88ae74195dba13d4dc61f4989cccb80248d759bb3d92fd", - "libraries/3rdparty/mbedtls/README.md": "91779fd2c549520291afe07d3d76ca9f87d597399039a50885c1c5270c20bd59", - "libraries/3rdparty/mbedtls/apache-2.0.txt": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30", - "libraries/3rdparty/mbedtls/configs/README.txt": "689a82e35eca542b4a7ae6954d39ab41830edd8b7d6fea29990bba40a2b97a9a", - "libraries/3rdparty/mbedtls/configs/config-ccm-psk-tls1_2.h": "17cd4f272bf4e642509190b26d4f05a7e6b779a4c7925ef3ce5dde2584085d22", - "libraries/3rdparty/mbedtls/configs/config-mini-tls1_1.h": "195a84aaf9df7e7b1d0c637bcaab59e1ef3f415e9f6cf7529dfa24b7a8841643", - "libraries/3rdparty/mbedtls/configs/config-no-entropy.h": "796c70839805147b6d558704d2bdd63715aeb81e7bb028411ad443620f9dbf50", - "libraries/3rdparty/mbedtls/configs/config-suite-b.h": "4e08827ff19a0320623db6452dd216027d121b6d736e7ca56768fdeb34fb77cf", - "libraries/3rdparty/mbedtls/configs/config-thread.h": "6006363562eb48d203eace4ef6f081d8062d1372bc7d4044690365c121c14c5e", - "libraries/3rdparty/mbedtls/dco.txt": "53a0a460f8eccb279580aa16013c5f98936eba73554d267632f5ea83d8e890b1", - "libraries/3rdparty/mbedtls/doxygen/input/doc_encdec.h": "dc7ce45660ff78bc0df0649cee3933746b20aff0cccc03adfc087c2ad607bdea", - "libraries/3rdparty/mbedtls/doxygen/input/doc_hashing.h": "d8e1c36434ef523226b3accc24789f28832ef2fb14c39542b0e4d832199d8751", - "libraries/3rdparty/mbedtls/doxygen/input/doc_mainpage.h": "308d2c0d3a7c886b9e1eeb3eda428873b9b38316ce7f8d64e80969eae240fa9b", - "libraries/3rdparty/mbedtls/doxygen/input/doc_rng.h": "73604d2736b96ba379c5137c71f6ed8d48990f1b62f1cf39a4efb6e3949b115b", - "libraries/3rdparty/mbedtls/doxygen/input/doc_ssltls.h": "954bd3c8ee0e02162b703bac98b8762d6f4f6c32722f2394b9c590aff07ac563", - "libraries/3rdparty/mbedtls/doxygen/input/doc_tcpip.h": "62c48fc7bd84be5fa7b4afb3143cdf0a505e7bafb7eded854bc463c7adcab139", - "libraries/3rdparty/mbedtls/doxygen/input/doc_x509.h": "208b9e370322f5d0bd86931a80727df00e531ac07e6b2cbaac4219c3cc294074", - "libraries/3rdparty/mbedtls/doxygen/mbedtls.doxyfile": "b280ec7299d796f58e5fbaab268d43bde848896d6384172067984b1723c1b3f4", - "libraries/3rdparty/mbedtls/gpl-2.0.txt": "8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643", - "libraries/3rdparty/mbedtls/include/CMakeLists.txt": "8b33005b219df3410d10c8354b6f2032559669a7e1ae0dc2e2e768d7d8c6ca34", - "libraries/3rdparty/mbedtls/include/mbedtls/aes.h": "afe879a45b4777dc048cfd031a7cdb23dbff6f4d3fa33bd95b36e7308a5cbad5", - "libraries/3rdparty/mbedtls/include/mbedtls/aesni.h": "d3edc71b465aec7282da21939ea30993d9e11bd708f141a3ace007a53d41ebd9", - "libraries/3rdparty/mbedtls/include/mbedtls/arc4.h": "085e0735863b42f5e07d85fdf8c7b0ff0d2eca923338d28aaa8752d3984d044e", - "libraries/3rdparty/mbedtls/include/mbedtls/aria.h": "a57f8a8ee2d566c917d1ff829591680e10c26d50ae52bf19e4e816f04ee98770", - "libraries/3rdparty/mbedtls/include/mbedtls/asn1.h": "8a9664fc53c831357498d8ce0bef2369aa54568a178adb6304ce44722921c950", - "libraries/3rdparty/mbedtls/include/mbedtls/asn1write.h": "bde4ce9456f06efeeeb0ec00484cba52bc5cd529737d4d3da4a86b09d71f53ae", - "libraries/3rdparty/mbedtls/include/mbedtls/base64.h": "bc0d4d9a7d9cf93067270cbd7c40e78555305bef808128548357318bb69d34c0", - "libraries/3rdparty/mbedtls/include/mbedtls/bignum.h": "d8fecfb2b7a680496943dd69cc5d24f644087e9899624a34d3a90c45c3964e93", - "libraries/3rdparty/mbedtls/include/mbedtls/blowfish.h": "0f0397bedb92cf2a18e6377d96ec5ff0d5463e364a5f6ea7511175b59c53b3f4", - "libraries/3rdparty/mbedtls/include/mbedtls/bn_mul.h": "0decf2f87eca52b0298d463b7727d645ab0474243948ff363e200bb4a42cb700", - "libraries/3rdparty/mbedtls/include/mbedtls/camellia.h": "837815e834c054206decffcd1b8f6e7da66ed0d13bac1b33d55b9ff8a64dd0d6", - "libraries/3rdparty/mbedtls/include/mbedtls/ccm.h": "0be6743fc288b4c4a662dfbe7a88803a9ba3e5edde0417d180448db1f99fa339", - "libraries/3rdparty/mbedtls/include/mbedtls/certs.h": "c21b771ccea08030595d2d626a76d92c3333b0ff2310863d298ae3c36bd12748", - "libraries/3rdparty/mbedtls/include/mbedtls/chacha20.h": "bb636ce04b9f415b29f5bfc8a2640463b4c92e5d96e796aeef829cf91e8b4e88", - "libraries/3rdparty/mbedtls/include/mbedtls/chachapoly.h": "f957183bda10fbdc0e47d0b4ffd6a16eb70b53be2e257e3cc31f2758b174b588", - "libraries/3rdparty/mbedtls/include/mbedtls/check_config.h": "0734be691cacb9eef35854c3a1920d7b96cae0247c1f6e6d7a69727c21d4f145", - "libraries/3rdparty/mbedtls/include/mbedtls/cipher.h": "d84b8a5351e29e0660849c4c06f9cda2a950536932378562fef99d170ac00a23", - "libraries/3rdparty/mbedtls/include/mbedtls/cipher_internal.h": "1c1aecc1d4615c8c7493afb0bf28298b8e297c4749d5c129ba002b3bbf6a367c", - "libraries/3rdparty/mbedtls/include/mbedtls/cmac.h": "a6173e959969ceda1b5b2d1876190bd115eabc08a8cdcaf67f29fbed1bf66c47", - "libraries/3rdparty/mbedtls/include/mbedtls/compat-1.3.h": "7c99033d89833c9deceff34e3696dd97f356d20c70fa77e11fcacc19581d45c8", - "libraries/3rdparty/mbedtls/include/mbedtls/config.h": "8ed7c7121f225a2369fd2a9fee1a5ebd72cb2bf55dffa1c6d783f5a52f79d536", - "libraries/3rdparty/mbedtls/include/mbedtls/ctr_drbg.h": "bdd4bcdc67aebb1cc914ef4619424c0708b1f6ba4583152c2dd9cd26ffc27883", - "libraries/3rdparty/mbedtls/include/mbedtls/debug.h": "87282e3299ab2aa3cc7d1b51d7376e51dec55f7fc0bfc9114fc7b69723fb94b7", - "libraries/3rdparty/mbedtls/include/mbedtls/des.h": "a76bd9f372379c4c4380519504c3f0ba3ac85ce2544cf3ad7d6d420325e96fdd", - "libraries/3rdparty/mbedtls/include/mbedtls/dhm.h": "10fb937d5f760ce8115a16e628c329e14c6a161c33c6b2687b948d30bdc1d2ed", - "libraries/3rdparty/mbedtls/include/mbedtls/ecdh.h": "45fe53a83a6371b726c44750e8daf09bad46acdb6c5d5a27708784098c5ac09b", - "libraries/3rdparty/mbedtls/include/mbedtls/ecdsa.h": "a1977a2670f9373da4e525a78262910b733516a250e8ae2146c2112511d6cf0f", - "libraries/3rdparty/mbedtls/include/mbedtls/ecjpake.h": "577582b5ed14e4cfbcb7f84c8d0ea10b383e6811849889d6f0dccf06e410f03d", - "libraries/3rdparty/mbedtls/include/mbedtls/ecp.h": "4d6eb93618209c48a4147814dc4a8b151387198bd2957858e0a044b119363fdf", - "libraries/3rdparty/mbedtls/include/mbedtls/ecp_internal.h": "cb5bd5834222fcf5ebda17867d034f3b3ee0cb6a01ae05e24150d7d7da9b9056", - "libraries/3rdparty/mbedtls/include/mbedtls/entropy.h": "d15e7d90bce63253e5c5c1238659d0ee917a8502246b920ce942b3797dbe327a", - "libraries/3rdparty/mbedtls/include/mbedtls/entropy_poll.h": "a6b0c4a9d45b7fb2e535ac070da0c8fdcb7ddca7d3c221966b9223d601cc2770", - "libraries/3rdparty/mbedtls/include/mbedtls/error.h": "f8fb48cc215dee818166dc5d960961e62f822d8a4ea59540c5e36fdbfa5895a2", - "libraries/3rdparty/mbedtls/include/mbedtls/gcm.h": "28df84fc052aa6ba9bd8aac7e5d88d20b719e4ac31cc98107c09fc320d457648", - "libraries/3rdparty/mbedtls/include/mbedtls/havege.h": "5736439257a124ae54a1278635d8ed377af6b67ce1bf923bbd90ca051a35ad78", - "libraries/3rdparty/mbedtls/include/mbedtls/hkdf.h": "594d8ab95a102b92c716d8858217769d49db34d00d9b45a77443787fe8edebe9", - "libraries/3rdparty/mbedtls/include/mbedtls/hmac_drbg.h": "488f5b8c997c5ebfc0a6eda725157a9ffb7c0a833079d1b00bed86ae3ec31bdd", - "libraries/3rdparty/mbedtls/include/mbedtls/md.h": "d6e92adaf9be894f23db4c9b33ee99e42ec5c7aaeb9c542840385346f2ae1070", - "libraries/3rdparty/mbedtls/include/mbedtls/md2.h": "e5ba12832916893a33d3ac31bfb3479e9fa04ec17924dd0eda42490822bc017f", - "libraries/3rdparty/mbedtls/include/mbedtls/md4.h": "9dcb47bd1bfba5c29fd725460c41156cb844efcc528d9055b5721c7f55fa6e6e", - "libraries/3rdparty/mbedtls/include/mbedtls/md5.h": "62237ef21805f7096cfb1a85bd477d9fc2f8d693c00e8b7731d48cdca39a004f", - "libraries/3rdparty/mbedtls/include/mbedtls/md_internal.h": "b502fdd7d71adad3d0b5a4e44d773c1c00115a90364127fae247c5f6b9f89a78", - "libraries/3rdparty/mbedtls/include/mbedtls/memory_buffer_alloc.h": "33c023938684f17e4cbae1bc373c13a128a733b8d26d26e2a94ba381eceab080", - "libraries/3rdparty/mbedtls/include/mbedtls/net.h": "1b02c8a4566d032837d979b9e7d321289d396fe8af79ab6d848117e82d79e924", - "libraries/3rdparty/mbedtls/include/mbedtls/net_sockets.h": "4e470ea94c8e1ff165d73fffc82b70431e74b755d7fb6f3911b49b9ca84566aa", - "libraries/3rdparty/mbedtls/include/mbedtls/nist_kw.h": "2e29d722b60a7672a0327024e105967569e6bee398c17fab5ed5c06dbfc9d919", - "libraries/3rdparty/mbedtls/include/mbedtls/oid.h": "b2d36fe414b36a0a7389b0d38f038a2fd755457924d735a6c7972c568694222a", - "libraries/3rdparty/mbedtls/include/mbedtls/padlock.h": "d57ac9ffe314c169d8d418c4f61af0ac7a399a8c3c8929e240761dad04c4ba0b", - "libraries/3rdparty/mbedtls/include/mbedtls/pem.h": "8784957cb6512857cccc7d5ef986ae76c7f2cbb4a794efb98e92e7c0e87eeab8", - "libraries/3rdparty/mbedtls/include/mbedtls/pk.h": "53379ac98abd79587fbc19a52bb4df5dc0cc43acbadf3e15094c89e20d6bd91c", - "libraries/3rdparty/mbedtls/include/mbedtls/pk_internal.h": "99aa7f920b6f814d39e1a181079cd187d2fdea7bc9b614dd7a47297b9820a4a8", - "libraries/3rdparty/mbedtls/include/mbedtls/pkcs11.h": "bf6e84c4dc79dd2c06d4118aafb5747bf0ff3e5235de380fb4b336def147888b", - "libraries/3rdparty/mbedtls/include/mbedtls/pkcs12.h": "001d788141f5662a2b94239108ae3c47b0c9371c9f7b74a5df48c29fa0f38cf9", - "libraries/3rdparty/mbedtls/include/mbedtls/pkcs5.h": "c99933a513bc276664bf9ae1deb5fe246b1f68f70c4fc9cc1cc322f50b0218e7", - "libraries/3rdparty/mbedtls/include/mbedtls/platform.h": "b4a6e5d57fe86db1c1d095708845e0c672ff7a477049a6d3ed1d051bf1983d42", - "libraries/3rdparty/mbedtls/include/mbedtls/platform_time.h": "4d1720c2450ea4ad25300d9d6f4594b1866a9548d536a8d76ea9b58344b53e51", - "libraries/3rdparty/mbedtls/include/mbedtls/platform_util.h": "a33e1009eb1fd54b07a85b1472f6c2b1e9b292169661f5be5dcb23b1a4fc4e19", - "libraries/3rdparty/mbedtls/include/mbedtls/poly1305.h": "7656d74786e7cdaa8a59f50e70f99787432aa4d9e474a3b2a17932351c762259", - "libraries/3rdparty/mbedtls/include/mbedtls/ripemd160.h": "0ded6338aeac3feae27877cd3afe681d8a39c6f71421596d7dd455ade5e9296a", - "libraries/3rdparty/mbedtls/include/mbedtls/rsa.h": "cc737a6c76d0761d6d7c83efeb24c1d71328c062f7dcffd981571f365692dd17", - "libraries/3rdparty/mbedtls/include/mbedtls/rsa_internal.h": "af3f06e7b2b97ff7933a1514bb792dd62bebdd6675904d8cf7773ff950698d9d", - "libraries/3rdparty/mbedtls/include/mbedtls/sha1.h": "8c3a4c80e666a29826d879452703d263b2e62beed8c53e629ca526d0e899b524", - "libraries/3rdparty/mbedtls/include/mbedtls/sha256.h": "f814b5f1a6c5e8cec0815516d5b90d78bc008d8066f10537585a43a85f0614c8", - "libraries/3rdparty/mbedtls/include/mbedtls/sha512.h": "da3c21d6a24dc9dad572af9a77c9badc78746e5d839b72a47272b32b8a8783e3", - "libraries/3rdparty/mbedtls/include/mbedtls/ssl.h": "a4bf39c2fd17de235b9d0f5a99e2c532d938867350d5cb2d760118bc451771bd", - "libraries/3rdparty/mbedtls/include/mbedtls/ssl_cache.h": "b9c520e99b305cba100f67e5bcc876ef5a76b22187cd66359e83cb0e63b64ab8", - "libraries/3rdparty/mbedtls/include/mbedtls/ssl_ciphersuites.h": "7b05415e913dda6de714ef6626404837b93b13f33f0bdad2d5b1121b0066dbfd", - "libraries/3rdparty/mbedtls/include/mbedtls/ssl_cookie.h": "0a8daefcff1065c08d56d996cf72467d55c741be03972edac76dd7f946ab02d1", - "libraries/3rdparty/mbedtls/include/mbedtls/ssl_internal.h": "1cf923bd9226d7a43445b4b811e8d99ceca3882952717b96978b992a4a89a08f", - "libraries/3rdparty/mbedtls/include/mbedtls/ssl_ticket.h": "90f71f93fe2dbe4473ca61fca9244178af8bf6c2e17ee1e2a10c8f9f8bd91fb4", - "libraries/3rdparty/mbedtls/include/mbedtls/threading.h": "facbd8ea4a2fdfffdf0f6a8f62d950e32e2195e5b0969531001db5603885c76c", - "libraries/3rdparty/mbedtls/include/mbedtls/timing.h": "5b7ea9cde317563fbb096e358df110b334c7cf4140315e39ee21ed664f309fb3", - "libraries/3rdparty/mbedtls/include/mbedtls/version.h": "b565609959075c6002c1a41b2313b7dca626997108d3b2b4a51f167dd96d41a7", - "libraries/3rdparty/mbedtls/include/mbedtls/x509.h": "46bb20a5fabb9796b6ef0f8bd7d05be822175f2170282adf723eb05645efae0f", - "libraries/3rdparty/mbedtls/include/mbedtls/x509_crl.h": "917edd8a8f601620e3bcf81812c447a9ac569b31d6f31c87eeb92f0c3d35ed6a", - "libraries/3rdparty/mbedtls/include/mbedtls/x509_crt.h": "76e2c7883d145a8e28f2266b86ff4d59ff675d05a21b5d00ba2165590aa9f426", - "libraries/3rdparty/mbedtls/include/mbedtls/x509_csr.h": "9fba654b535fda22f1536f1fc8dfb9315d0f0a9f0ffd573836b462aa2308922d", - "libraries/3rdparty/mbedtls/include/mbedtls/xtea.h": "a8d4f19d9a4a697a0b64abe0ff6fbd67ea4edd711042c96fb29827c5efdd48c6", - "libraries/3rdparty/mbedtls/library/CMakeLists.txt": "a8ce844760611a9f8ee0f818d8fbe9ffae91eb0116a7673e8f7271ca11106785", - "libraries/3rdparty/mbedtls/library/Makefile": "fc602ac24e6bf784399d4b65ceb26b55b442878d5f6d340fe632c41b8321f3db", - "libraries/3rdparty/mbedtls/library/aes.c": "4288fa23a5979c8c57d4df396fc95a14c0c2a11c28a6476b17a1c3dad701112d", - "libraries/3rdparty/mbedtls/library/aesni.c": "a4c2cdddc15fcba198134651f5c291f7e57156823ba530fb8dc686d7ecdc3c30", - "libraries/3rdparty/mbedtls/library/arc4.c": "8857548e90924c9ab082c65bb4a997a9475d79c3497fffb523b70d61fa37aa75", - "libraries/3rdparty/mbedtls/library/aria.c": "8ebc8a8beed52d2ceeb869c8988b5366611ca7b96e234ca4dadd8667ffef23a1", - "libraries/3rdparty/mbedtls/library/asn1parse.c": "0a4aa2abcff3959e39fbccb16d145ce945f5bc5c95bc74dc591feaaa58be99f2", - "libraries/3rdparty/mbedtls/library/asn1write.c": "eafa624d131d994e903e7cca49475a2745d8eba0ac49d774a7dcfb8740aca051", - "libraries/3rdparty/mbedtls/library/base64.c": "182a41b5fff7be8fe584e092bba447cca9e0d712000a058668ba61075cbecee4", - "libraries/3rdparty/mbedtls/library/bignum.c": "defde21b0ed83fc210f1ccd87b1273826eb5f9e9787f87c8c69fb9245e0a1fb7", - "libraries/3rdparty/mbedtls/library/blowfish.c": "9bea5b2b05297123ce707192a349570b5c27dc549f472138b68554e3842b8e6f", - "libraries/3rdparty/mbedtls/library/camellia.c": "df18194fa3f9d3297312d511de43bc0f02b555d37fe24bbcd5fbb197c87f5dc2", - "libraries/3rdparty/mbedtls/library/ccm.c": "b263c34eba5832c33c4e2d09d73d73a2984169c9c048bc0fb9e12f07174fcd68", - "libraries/3rdparty/mbedtls/library/certs.c": "2178d5a922f92374bc1af0cc6a16dd97b6de872ea79afac4250f496d122a7ab2", - "libraries/3rdparty/mbedtls/library/chacha20.c": "33f955bd6872432912645c577725b14a6e513ac984347f3f8970a726b425df05", - "libraries/3rdparty/mbedtls/library/chachapoly.c": "34b37b2b02d17e86b63bd04e661c3448365344bb86b51cc3845ed1c761d55eb7", - "libraries/3rdparty/mbedtls/library/cipher.c": "bf2c957f5ad6e1cee14d0e69ee377ec84ffdaa1a2e7f02366a35c7776a26a8fc", - "libraries/3rdparty/mbedtls/library/cipher_wrap.c": "453c1e854cdf198c7aa661c9009bae89d4c01e81fde078e4e7deef8e6d2084b6", - "libraries/3rdparty/mbedtls/library/cmac.c": "b3c0ef2a64ffab706789e2037f8096c2504d9c0c28560dd996490fb2f8b75704", - "libraries/3rdparty/mbedtls/library/ctr_drbg.c": "fd0ac72baa6ab437be735dbaa02a3345d8ecb24dd8eebf9c0b575cde0d405c5c", - "libraries/3rdparty/mbedtls/library/debug.c": "78472dd80e0848e51a13de98c45d2e14060c1d5e2ff992d94f24988a7a065c92", - "libraries/3rdparty/mbedtls/library/des.c": "2061c8155e25ad8193c0fb209aae0cbd5a870cb64b604acdad9c79a4c761b3cc", - "libraries/3rdparty/mbedtls/library/dhm.c": "f3937f90752fe8cce08bcadb4f20f255684af8edd76632d27b9057cb8c4526d4", - "libraries/3rdparty/mbedtls/library/ecdh.c": "492122e6d15860ed9b0740b3ecc15dccec77c981d6cf9c319e3029d503f14568", - "libraries/3rdparty/mbedtls/library/ecdsa.c": "eb152dd835353cb7458cae1ddf80aa80a5d99e86d34ed4d0e3e7fc125f7f93fe", - "libraries/3rdparty/mbedtls/library/ecjpake.c": "f469f34c65278b30e4dd39c47fc82a105158f0eb07cdea5c33a02e60095d80f8", - "libraries/3rdparty/mbedtls/library/ecp.c": "39762c9f571179332e0b9412cf7c4772fcc2c9b6d2f07c7a6ffccc72bcb74f84", - "libraries/3rdparty/mbedtls/library/ecp_curves.c": "2475a5f0b2fd848c8c86366a0df11c1dd8228f532ccfb454518e1dfd43d5bf8c", - "libraries/3rdparty/mbedtls/library/entropy.c": "933a22f938ef9d3bf1d782b264358e480b9d37e2ee9088fca4fb1b86fba1a828", - "libraries/3rdparty/mbedtls/library/entropy_poll.c": "0a88fe1c876ad3b086569517f275e9b5d4ed7bcb646416517aed44fe2600d910", - "libraries/3rdparty/mbedtls/library/error.c": "fb2c8f00f5ad85f8d8e109adea9228d029fc7ddffb54afdbc013c963f3161ac7", - "libraries/3rdparty/mbedtls/library/gcm.c": "50b47d680006b95bc3bcfeecc01d8d67531ef1c33f15f9ae2b2961ac7a1407b7", - "libraries/3rdparty/mbedtls/library/havege.c": "1cb6a90ed86fc2fca20b5116f3a1a31efa8ca627cb60e53bb80e2145ea5d8602", - "libraries/3rdparty/mbedtls/library/hkdf.c": "c08d6825b64bc78d042a8f01494b708757e44636719e17f260362f15146bbff4", - "libraries/3rdparty/mbedtls/library/hmac_drbg.c": "ca8eef1422406a1098fb9e85b39075db0c742ed7add762365668cf3668a2f810", - "libraries/3rdparty/mbedtls/library/md.c": "cbb194d941c0793bec8903a79b37ca4e1df8f3c2e1d744dfb75a4005071b2eb9", - "libraries/3rdparty/mbedtls/library/md2.c": "8a94a7f0b8e218f24bb0c9c75b7b97c9708525abe0e6367e95f19575efadf77f", - "libraries/3rdparty/mbedtls/library/md4.c": "9913e7e79624592bb95b9596c46865beb1863c3e434bb926ec25a4f26e8c7b44", - "libraries/3rdparty/mbedtls/library/md5.c": "d22e001ad3ac40571ee8ccd6a28534b3a717b85ac3f957736f625650055f01af", - "libraries/3rdparty/mbedtls/library/md_wrap.c": "58f3d626cc386ad4fa460299fa6d1e6038ba17110f4a4832a5a6228dbda42f9c", - "libraries/3rdparty/mbedtls/library/memory_buffer_alloc.c": "12cb517af657889e1ba674f29e06f074f487b1a7ed3cd8b73901431c5c7a08af", - "libraries/3rdparty/mbedtls/library/net_sockets.c": "a068a43b8237298dee876ca04c766eee6821c0dbea29dc8ae94fa1f21773ee46", - "libraries/3rdparty/mbedtls/library/nist_kw.c": "207e85cf70628bdff639648a6598882b5d03c7b0ec52ae3ecfeced1976f6b7ae", - "libraries/3rdparty/mbedtls/library/oid.c": "b4556e0bd537526dcc1ee5cd2dacfad5779094c56be58260acf4d7e7b139c3a7", - "libraries/3rdparty/mbedtls/library/padlock.c": "10a9521ca248e65a725a7af981ebb6cab79577105476fe872b69c3e743d2faa8", - "libraries/3rdparty/mbedtls/library/pem.c": "248ca954d52ac579d710879adbb51f0809b5f8f0e422c0c86adbed42fa51658e", - "libraries/3rdparty/mbedtls/library/pk.c": "32fe9ef24ed691e8ccafda68b97b5f89fe02a71448bf7a28cf120b4110b05b9f", - "libraries/3rdparty/mbedtls/library/pk_wrap.c": "99ed73e81a582dae47aa9bffb36dba44a9aa66616ef63de57811163654491fef", - "libraries/3rdparty/mbedtls/library/pkcs11.c": "8e1b5602b7ef1b7e26e07de027f4a0286842a99dad48f4b13e251b0d6167b10a", - "libraries/3rdparty/mbedtls/library/pkcs12.c": "cb02bffaa8196a9c237a09c7e3d24965c96dc6408dccd6bc544b85f3864802f1", - "libraries/3rdparty/mbedtls/library/pkcs5.c": "3a0ebf774dad943fe26adddd2e9868b947b91c946a7551eae8046a70467b97a5", - "libraries/3rdparty/mbedtls/library/pkparse.c": "e71ff552184fab608af6d56575dce97cf9ecaabdd538b86d0e953b76fa4dc3c6", - "libraries/3rdparty/mbedtls/library/pkwrite.c": "8430dce4584f33cfa22f3964000c1fbfa0542dc8b1cd70609585e0bd98508a25", - "libraries/3rdparty/mbedtls/library/platform.c": "e4f3ceca9b62a91e8d66a9f96190714de3f34b1601e37c6a5e89d340c9e97ff7", - "libraries/3rdparty/mbedtls/library/platform_util.c": "cc2effcae747df6da0dd13b4544f2e285b800a800b99b0f051769be89fa12f44", - "libraries/3rdparty/mbedtls/library/poly1305.c": "8a586ed4fbf51f9af83fbf2d916cb777bbd0d715d697ed1cec65529a365e6a62", - "libraries/3rdparty/mbedtls/library/ripemd160.c": "d017586c9f1151db9092f0e60fb7359fbb268860b9eb16b26a87c129214178b9", - "libraries/3rdparty/mbedtls/library/rsa.c": "8dab05d8fb547fbf74994f113bab1596986b0ede99c979fbd197fdc28397f985", - "libraries/3rdparty/mbedtls/library/rsa_internal.c": "eefbf7959d243da766be010948fdebaa2977a95e61fa09affd7193cf24992687", - "libraries/3rdparty/mbedtls/library/sha1.c": "6231c521eb5616169e23a0fd42aa663e3e49d3594a298560cb36c1ffff248d2b", - "libraries/3rdparty/mbedtls/library/sha256.c": "ff9d0a3df9e100efb6ba6106668b8a01aca1a602890dceeecd55e40ab29b4ea5", - "libraries/3rdparty/mbedtls/library/sha512.c": "b151586e8847454378b0d82207602f6937d022aa1d13e3e6d69e67a18f227c5a", - "libraries/3rdparty/mbedtls/library/ssl_cache.c": "1ad5d0fea8b1bce083a2ad96ff247f6b16925bb53516b104d806a6e65aad4f43", - "libraries/3rdparty/mbedtls/library/ssl_ciphersuites.c": "a9efaf43f2fc044307f9635f4ec32fd03bd6760453b76c12cae616209bc3d93b", - "libraries/3rdparty/mbedtls/library/ssl_cli.c": "b4d3241fe384c481d4b48c94ea0101fec0ad83fed3301d3b7fc10be3949d5952", - "libraries/3rdparty/mbedtls/library/ssl_cookie.c": "8b54041acfb97d5b345829fa488b307dc9a4a6ff83fdf330832599b6c3f9d3cd", - "libraries/3rdparty/mbedtls/library/ssl_srv.c": "cf15d011fe5b0ae8776cc6e289bb56f082fa76bce32744ad761aef0b83bc0311", - "libraries/3rdparty/mbedtls/library/ssl_ticket.c": "f948963c63f2bb90226833f23727be77a787e45abe9f2d52de11bf74f60a6392", - "libraries/3rdparty/mbedtls/library/ssl_tls.c": "23d3d1ca67cde6195e6dd662b86c6ddbba38d9038c17503bf076b35b63110286", - "libraries/3rdparty/mbedtls/library/threading.c": "b11bc522e0b1d45783d4d3d5ec31390cadffaca662dddbb44de7113292d0deb1", - "libraries/3rdparty/mbedtls/library/timing.c": "f516ce5e42b8ca5cffa36232323c8c6a7e594ce0641942810dda6534e41793d5", - "libraries/3rdparty/mbedtls/library/version.c": "5b567a3354bd2f3a56e618eb7b2c4606a151d3a469fb4293d47fe9b6645259ee", - "libraries/3rdparty/mbedtls/library/version_features.c": "a409a8a52bd3780837448a27fc1495878b745d96057cbd3af2ce2c71f6864494", - "libraries/3rdparty/mbedtls/library/x509.c": "4d0883ab99fd117d196bf666fef23742b6149be882a9567ff6deb728e8a2ff0b", - "libraries/3rdparty/mbedtls/library/x509_create.c": "c11f48a5df30ff6db074af8d3ac11277e021eb5da8169512571933d69944378b", - "libraries/3rdparty/mbedtls/library/x509_crl.c": "3f4338fd6920eee4b615108ae1d3bc7387fc4131a8cd7f297a6e0bcc57f7f08e", - "libraries/3rdparty/mbedtls/library/x509_crt.c": "9758f8a5dd1f2f1a952d169bcb7175886e11c9138ba8fa937bf71eea098539c4", - "libraries/3rdparty/mbedtls/library/x509_csr.c": "3949dc1f20dde7e8b484452fe4902bb58ebea3745f7a46eb0b59514d17fd4c36", - "libraries/3rdparty/mbedtls/library/x509write_crt.c": "7476466c419a3af8d68bfedebbcb71fe05cf20fba164f0cac31b83b6ed67f95a", - "libraries/3rdparty/mbedtls/library/x509write_csr.c": "642ca33facc02e2296c5514a79650df10aff717b306c6b6cb8e5f52455237cf7", - "libraries/3rdparty/mbedtls/library/xtea.c": "27e37318e767f4d44d0b94aa29c981bdeff6466350448d841a5219b6ae3035b0", - "libraries/3rdparty/mbedtls/programs/CMakeLists.txt": "528503fbcec620728a53e987437e5f04f34f9b604a6d7e559156aaab2a8502a4", - "libraries/3rdparty/mbedtls/programs/Makefile": "30cc7e78c989ba44369e47654e111271ffc331e9f79c85e391336a0ad161c7e4", - "libraries/3rdparty/mbedtls/programs/README.md": "12ae86078bd2791074cec4dff2652165a027fa9191413e92d06e7f9ad7b0ab81", - "libraries/3rdparty/mbedtls/programs/aes/CMakeLists.txt": "fdd4153e4a452b98eec8fe330cee8766412d6931858938704bb808a1fb722980", - "libraries/3rdparty/mbedtls/programs/aes/aescrypt2.c": "07fb23a1012f9bec71eddce863841588ed4d3bff81aaa425a26c76170958e10b", - "libraries/3rdparty/mbedtls/programs/aes/crypt_and_hash.c": "d149964a671a06e2292a8102b7af9f4341e86528ba9f5e4f990eb8db8fca2b76", - "libraries/3rdparty/mbedtls/programs/hash/CMakeLists.txt": "e969c3ae5259aefeeeaee32b21b401484dff7f651450da1e765fdee2c96b6daf", - "libraries/3rdparty/mbedtls/programs/hash/generic_sum.c": "8ba66f37d4f77b445f3a2c45fba89b79b1df35f9fe6e90e8e1bea7955af464f7", - "libraries/3rdparty/mbedtls/programs/hash/hello.c": "453c9cbaf91147be405488b27bd237c99abcebdc5a71798efd7655aa0172075b", - "libraries/3rdparty/mbedtls/programs/pkey/CMakeLists.txt": "76525ce3dcf9b683076bad9e69baa6fafed3f8076e3c42596175dc55ed2c27f1", - "libraries/3rdparty/mbedtls/programs/pkey/dh_client.c": "37f820445864fc8b1a68654ca6f91724b0603957331e4bfacb097be5c746c1f6", - "libraries/3rdparty/mbedtls/programs/pkey/dh_genprime.c": "915cc30c8da0c190f04caad436b9890cbbcfb4b589162c65f6378fa0f8020070", - "libraries/3rdparty/mbedtls/programs/pkey/dh_prime.txt": "26f568b6b7e200f0c8f6726cd869e5a529d22bdcc7b33a9cf0bb6c0f4acd65a5", - "libraries/3rdparty/mbedtls/programs/pkey/dh_server.c": "7226eb0e9d33612677de7a6f4c8ab201e5ea5a32ac5595541f8907dad93d877e", - "libraries/3rdparty/mbedtls/programs/pkey/ecdh_curve25519.c": "ef83d50a3fa09279ace35b15898b98eac7ffa21eb8c61766053733a89b38cee0", - "libraries/3rdparty/mbedtls/programs/pkey/ecdsa.c": "3e8d188bb157d5d5062663863d712f50b2bcec674f5652bdf6d17813b774d69d", - "libraries/3rdparty/mbedtls/programs/pkey/gen_key.c": "5ac3aaa1d6af7b158d3a9abb40a2e63c6f3969479da3bc78c58c98e63aa36663", - "libraries/3rdparty/mbedtls/programs/pkey/key_app.c": "e95bebe5a6fda6e52e78ee5470e952d920d0fe860dd6283b63cd2ae65943057c", - "libraries/3rdparty/mbedtls/programs/pkey/key_app_writer.c": "7f3c6557a2af4424aec05f6a1b5a4290a28a272c97f016b4836b667995b7e93e", - "libraries/3rdparty/mbedtls/programs/pkey/mpi_demo.c": "af0877b749d4f568a2adbd64537585a726b02b343152fb3e8f5ab9c320328e72", - "libraries/3rdparty/mbedtls/programs/pkey/pk_decrypt.c": "ab47d6b8604d55cb56da97217bc1bddc2e4834800e93321c2b9847fae71c7a5a", - "libraries/3rdparty/mbedtls/programs/pkey/pk_encrypt.c": "0b73cff0c70fe30f1282a07ebf31f45081b215282efe9c7919b4e60b0365e12e", - "libraries/3rdparty/mbedtls/programs/pkey/pk_sign.c": "999c552ee3551661812167b84a94631bf1181a5a5b7c99bff2df0cd672349fca", - "libraries/3rdparty/mbedtls/programs/pkey/pk_verify.c": "e0dbe1ec0a03feded597a0595ebe9c44cf99afff76161635f8ec6fe3ff3a5ae5", - "libraries/3rdparty/mbedtls/programs/pkey/rsa_decrypt.c": "cb6445efb6fefe8ea0685dc89eda7d828b2c26d2aa13a03ec85c7cf7c79a135c", - "libraries/3rdparty/mbedtls/programs/pkey/rsa_encrypt.c": "71bf473bd2c82d6bf2978df35b943674e293a180f211d952b1a7c6f267432adf", - "libraries/3rdparty/mbedtls/programs/pkey/rsa_genkey.c": "0b4fd5ed309a07386aa1c7f71fa55453f18e36c469f00a87caef16129a3d0006", - "libraries/3rdparty/mbedtls/programs/pkey/rsa_priv.txt": "53507af9612ca19196c322d264ca42b65ac4ed92ba9e2f43cd68cd2db51c083e", - "libraries/3rdparty/mbedtls/programs/pkey/rsa_pub.txt": "bbfea547c88fd479235e5c6342742850e9586afb028b44bb298f5e81e3e57f70", - "libraries/3rdparty/mbedtls/programs/pkey/rsa_sign.c": "7699ffe49744c2009ae2d631f37feaaf5b722c52c9965b260ec08cf409422101", - "libraries/3rdparty/mbedtls/programs/pkey/rsa_sign_pss.c": "d5045b2c3ea8e6b9d83c2afeb975e1947dd8f37e5b7e658625020241152c182f", - "libraries/3rdparty/mbedtls/programs/pkey/rsa_verify.c": "56a5896170c30c30bd48f56aebb4ff617b43383738c5df0eb6b671ddca88a40c", - "libraries/3rdparty/mbedtls/programs/pkey/rsa_verify_pss.c": "c35e2f3f49e09623ecfb3eba0abb6b14637c00225df8ffcb9adf48d21dc7e04a", - "libraries/3rdparty/mbedtls/programs/random/CMakeLists.txt": "724c3964776475b96c439cdc33c67586c05c67b340eab391f940478fc29844f4", - "libraries/3rdparty/mbedtls/programs/random/gen_entropy.c": "f4737f38560b09b86c90920b7e3eb2e3f4db679fafd115932fd1f3a0eaf35381", - "libraries/3rdparty/mbedtls/programs/random/gen_random_ctr_drbg.c": "975bc5af04cd4627fda64ceac00683eb2dc409703cb602e5d9d1016b9180b371", - "libraries/3rdparty/mbedtls/programs/random/gen_random_havege.c": "cd37f67973f6e45f82694271f711b01f5edec459b5cf3e391b2b52205f4984bf", - "libraries/3rdparty/mbedtls/programs/ssl/CMakeLists.txt": "677057e1f24c7e0024bd05457014e3b99bc3ac6331f561dd94e481de45663b43", - "libraries/3rdparty/mbedtls/programs/ssl/dtls_client.c": "6ddc5fa57080d881fe1fa02b4d3a8702a1c300ff2cd9b98b6361d5660e335dbf", - "libraries/3rdparty/mbedtls/programs/ssl/dtls_server.c": "a1b6dd4214442c0e141248e278e71895ec903981b2042f28e1b703c3cf6c4ed4", - "libraries/3rdparty/mbedtls/programs/ssl/mini_client.c": "115cdcfffbd5388b3e6e0407781d315808e377cc682b368888cf408d43910bba", - "libraries/3rdparty/mbedtls/programs/ssl/query_config.c": "efe88fbc301d1dd35b8894a11a6e8971d99684815341aa729caecc7811924d55", - "libraries/3rdparty/mbedtls/programs/ssl/ssl_client1.c": "6f05a7f847950f4bf76eda14cacb14ddf645c38d642efa6ab4b0265e09cc3af4", - "libraries/3rdparty/mbedtls/programs/ssl/ssl_client2.c": "f2f0623ffe362b497157e4fa18c6913893e2d7726ee143d7985226d503935644", - "libraries/3rdparty/mbedtls/programs/ssl/ssl_fork_server.c": "8a4f1b22ddb878f1ad53c1a2947057c90eed9517221fb555cf6096c6bbc737b7", - "libraries/3rdparty/mbedtls/programs/ssl/ssl_mail_client.c": "b54e75773e923e4ebf48ec0ea89d7e4b4a1ef0db0f35a7621c2710a4932892e6", - "libraries/3rdparty/mbedtls/programs/ssl/ssl_pthread_server.c": "ffce413b900cdc0b5583d81382a85976796ea6ef60843e661e950bf15c88d428", - "libraries/3rdparty/mbedtls/programs/ssl/ssl_server.c": "5b3a413da632bec17f02940630bdb81000fff45143c77c581d42c62d183e7e6a", - "libraries/3rdparty/mbedtls/programs/ssl/ssl_server2.c": "471da8a6185b4c862cf7e468803c58b1dbcf609d9c15db1bfedf5bd6633f5a5d", - "libraries/3rdparty/mbedtls/programs/test/CMakeLists.txt": "54e985b61218cc5839e244563cae4e8aa1f99524266024d7ba01e5fb203766b9", - "libraries/3rdparty/mbedtls/programs/test/benchmark.c": "ad617ca373dfeab4ad2ffe66373f1ae58940d5a54e6d1461072930c8630caefc", - "libraries/3rdparty/mbedtls/programs/test/cpp_dummy_build.cpp": "698ccc1d8d12fe15ca8121b309ae098fe54299f4cbd9acfe97f7aa1bbc0382a9", - "libraries/3rdparty/mbedtls/programs/test/query_compile_time_config.c": "be5c728ab539767b2a26ce16a7efa87af4bc2e675571dd35f30e5e451b74af12", - "libraries/3rdparty/mbedtls/programs/test/selftest.c": "82ec5c01212ef1e2637ccdbd4f3fb44186d2f09962ba0e9657e330c456200efd", - "libraries/3rdparty/mbedtls/programs/test/udp_proxy.c": "54dd04cd48fdfc8324e1b238bce7e21400c85ef021ac3c32d168fbe2e20882cc", - "libraries/3rdparty/mbedtls/programs/test/udp_proxy_wrapper.sh": "a04ac0c08a0de9b716a6cded205a70825129088a2ca3510e0d1f5660c230d9ca", - "libraries/3rdparty/mbedtls/programs/test/zeroize.c": "8e48487f88e64c421ffd547ec8823a51b1e6f164a9f4c5ffcc8264b86462ff05", - "libraries/3rdparty/mbedtls/programs/util/CMakeLists.txt": "ea1ba02324edbbbecddc8bd1ac421a2d43c886c1cab1a01e1cd912ee27faa944", - "libraries/3rdparty/mbedtls/programs/util/pem2der.c": "501aff1215277aa2f63a8bd25430ff14ee9295e06f8fc2939022b700bb4242cd", - "libraries/3rdparty/mbedtls/programs/util/strerror.c": "a17425f629beb5261526799c5a3c6a27646956f6dd879a1beb5b7e8511aac32c", - "libraries/3rdparty/mbedtls/programs/wince_main.c": "806fe561b03ad9728a9f4423f0400d599c98a057276472d1490a6905c605a208", - "libraries/3rdparty/mbedtls/programs/x509/CMakeLists.txt": "4b68032428176f68769fd51f6856f3da57758fbbf532dcd6359f47001efaef41", - "libraries/3rdparty/mbedtls/programs/x509/cert_app.c": "456fbf1a459ed0f7fa5c7ab9e324a31171441c7209567d3cf61d623dbfe0c60d", - "libraries/3rdparty/mbedtls/programs/x509/cert_req.c": "e4c3aa98d15294115142ee621dc7e1e80dfcd629b9b171b9a262f16e01d4889c", - "libraries/3rdparty/mbedtls/programs/x509/cert_write.c": "cce5c3cda9df4e824b91508bdf170ec5af74b756892efaae0a982d3e5ad529b4", - "libraries/3rdparty/mbedtls/programs/x509/crl_app.c": "4de4afca0e83b78d135a8da399d132414c7122b10f298c7188818ec149ff6b6e", - "libraries/3rdparty/mbedtls/programs/x509/req_app.c": "cdfcbf7ef0eca953642ebe0505456b613c0ccc9a721861d83d28d9f84e16c8d8", - "libraries/3rdparty/mbedtls/scripts/abi_check.py": "e83df5c3bb791a7a855082b4c16dfcaf85393c59aeeb307e290d4e49c6535c38", - "libraries/3rdparty/mbedtls/scripts/apidoc_full.sh": "40fdeb98dde820cd3ad45ee8adbb69c6e8de3ef1861943054b2a573c0db62783", - "libraries/3rdparty/mbedtls/scripts/assemble_changelog.py": "5baba802fd04d2c7d2d070cfbd8dc1172fdae60e14dc2c79bb60807195273bb9", - "libraries/3rdparty/mbedtls/scripts/bump_version.sh": "800dd8c11a883058bf7dcaa01130736c21a4183202075b99d3977a5c558fe600", - "libraries/3rdparty/mbedtls/scripts/config.pl": "b6189d7c5bf3d61b86feacb73903cc2b2a7ca1af35f53d2b2a208e315750bb71", - "libraries/3rdparty/mbedtls/scripts/data_files/error.fmt": "da9c7207db0d53c7f65a5adc4f3d5b182e6bb52ebfb56b23c2ac3032aad4790d", - "libraries/3rdparty/mbedtls/scripts/data_files/query_config.fmt": "66aee385189e99ee5de28eb157e226660cc658d9b122dca896d07b39e5c73a2a", - "libraries/3rdparty/mbedtls/scripts/data_files/rename-1.3-2.0.txt": "2366f726f5f76d66158a187633ba24187f06fc6126af1685b16ef26965a29d11", - "libraries/3rdparty/mbedtls/scripts/data_files/version_features.fmt": "791235bbfd7737683a4c462388a31f0204a716562c9bb4c19fc33d6a68496187", - "libraries/3rdparty/mbedtls/scripts/data_files/vs2010-app-template.vcxproj": "70eaa8c071a05964f866abb19547f178d03a017d09546c191f93b33bcfc48d2a", - "libraries/3rdparty/mbedtls/scripts/data_files/vs2010-main-template.vcxproj": "2aeb88995c4db9539137130d44e7f712e03741465205d41be68d429c0868b769", - "libraries/3rdparty/mbedtls/scripts/data_files/vs2010-sln-template.sln": "f6ccbb56dcd55c1002967c379d07e9af4c8137bc5d4e25b1b48fad1102bc063e", - "libraries/3rdparty/mbedtls/scripts/data_files/vs6-app-template.dsp": "71e0444b6ab5ab8fe016622063b72392eb29f2255a6f4b527308f03a14fd63d1", - "libraries/3rdparty/mbedtls/scripts/data_files/vs6-main-template.dsp": "32d89bf331081f828e4008a2a1853688dc63fc2b3018f527fd2e221d31c8d111", - "libraries/3rdparty/mbedtls/scripts/data_files/vs6-workspace-template.dsw": "5ee39f91104b06bbbe9014b59d53f30f0cee435aa6edd225eaa49942d141afe9", - "libraries/3rdparty/mbedtls/scripts/ecc-heap.sh": "e50d98a5b3b49024b7c060b3d3b9cdf77cae88b7e05dcc93914a5e33deb2e40b", - "libraries/3rdparty/mbedtls/scripts/find-mem-leak.cocci": "1676446b4832d534795b4338b08261fc570fb3a66de328a05da1976769a626f8", - "libraries/3rdparty/mbedtls/scripts/footprint.sh": "0c96cf5e5e51695b85507203a90780e5555a4406abc729793d029c32e9115f57", - "libraries/3rdparty/mbedtls/scripts/generate_errors.pl": "4f551a92b6507c32bf63758c7e037e261762d2ff3ec5b99b7031f18f5956cdea", - "libraries/3rdparty/mbedtls/scripts/generate_features.pl": "351e88f3affe5420d7bd579d2224c2d7c60ee7bc707b58ecd0cb92dbaa4fb09e", - "libraries/3rdparty/mbedtls/scripts/generate_query_config.pl": "4fb047403424badcfb2b2427aaab2a160330f1aee8281e00e18988183afa4c2a", - "libraries/3rdparty/mbedtls/scripts/generate_visualc_files.pl": "5947fa422abd780e5b28be0670a62d5839e1e8d2b6bb5f073d6de8ac91f7be53", - "libraries/3rdparty/mbedtls/scripts/massif_max.pl": "2cee4491ee2ad543bf9bd3750039a74b865ebe4bb1564f3f08c40c20b3438f98", - "libraries/3rdparty/mbedtls/scripts/memory.sh": "0538949b51fb715ec37f6c68fdfa0abe7484f334d9f5ae221f51ade08cf46011", - "libraries/3rdparty/mbedtls/scripts/output_env.sh": "b370d9067b47164afb47ed57adfb7c6f1d1ee4868f172bec432e29e7cd5f02a3", - "libraries/3rdparty/mbedtls/scripts/rename.pl": "9629332866733098f5b92fdf63ec6eb3a98a57e974742e1d4dff922e42ca79c2", - "libraries/3rdparty/mbedtls/scripts/rm-calloc-cast.cocci": "6333b31d5e254449cf8e9127da47cbc5cdd341c14e93d06aa485952ac7987d29", - "libraries/3rdparty/mbedtls/scripts/tmp_ignore_makefiles.sh": "fc2fd053da9c0d55f854d9bfa60e4ae783155993e42c9d2af2c53bd8ecb54d55", - "libraries/3rdparty/mbedtls/scripts/windows_msbuild.bat": "3a8e5605e23fedf7abbc3d4efe42c9cad06f919a590b94a2e578ea29a5a5fe65", - "libraries/3rdparty/mbedtls/tests/CMakeLists.txt": "753aeaf0e7c2e94960cddda69e11b33e571247e79fd1b25428278df9136c5078", - "libraries/3rdparty/mbedtls/tests/Descriptions.txt": "946e61cc0c477b1866d977ca0c8989b84c062015e38879d4cb0b91a24504732c", - "libraries/3rdparty/mbedtls/tests/Makefile": "2eb90437d5ab9fd430122f72321fd420d77e107a12e7ca0cceb3c46034310384", - "libraries/3rdparty/mbedtls/tests/compat.sh": "af6980efa632ede84a5a63fea52ee1012e021ad0a315017d290798ae66fab322", - "libraries/3rdparty/mbedtls/tests/configs/config-wrapper-malloc-0-null.h": "a9935dbfc19cfa41c4460a0abeec578c02dad79d50a583235ef22625698be165", - "libraries/3rdparty/mbedtls/tests/data_files/Makefile": "ad5990d3bbcf29521e7f630c7b8cb20aafd10c9786ccaa027514df0cddcd37cf", - "libraries/3rdparty/mbedtls/tests/data_files/Readme-x509.txt": "8d472178fccae62cb49fd37c5e4792d48277f58aef9d7415a8db335e7dad8360", - "libraries/3rdparty/mbedtls/tests/data_files/bitstring-in-dn.pem": "a56cb4555c1b735454efe2ad7fe080ba9df5df0119aa6b3ba385ff6148ba895e", - "libraries/3rdparty/mbedtls/tests/data_files/cert_example_multi.crt": "7e197f7d2400a69059756db678f0ededc07566fbb3f0b25f235a496827e1cd5a", - "libraries/3rdparty/mbedtls/tests/data_files/cert_example_multi_nocn.crt": "70d06e5a114da637d37d1f733f7f7b1ea99d2ef4743d02c3710fe6d81089d699", - "libraries/3rdparty/mbedtls/tests/data_files/cert_example_wildcard.crt": "2716a0cc21c9a5678b0ad5075ba1a211d7e3e2b621444e3156f901cafad027f6", - "libraries/3rdparty/mbedtls/tests/data_files/cert_md2.crt": "dca8fddabcfba841a9c02e2ef71f2f0b8e553531e8342bb37a47bf723710d4ee", - "libraries/3rdparty/mbedtls/tests/data_files/cert_md4.crt": "c8cd9e7909929678b60d9cfed28b8a71d56e2c8ac05f7be4da480722fd8d086e", - "libraries/3rdparty/mbedtls/tests/data_files/cert_md5.crt": "6b58c44889984514f7f18583138d831a8748ab0b193dabfed9e23bcd2962a3c8", - "libraries/3rdparty/mbedtls/tests/data_files/cert_sha1.crt": "d09400b2d5f1d189ad1c1745a5dcbfbf0c9e8223e57ed02522bc87ce3d092528", - "libraries/3rdparty/mbedtls/tests/data_files/cert_sha224.crt": "fb968a970027efd0317e94b50e2fe9e515a0404dcd73ba7ff86cfcd1d60adbd8", - "libraries/3rdparty/mbedtls/tests/data_files/cert_sha256.crt": "ffe3451b0aab5d89707e3dd706538c7df268609821f9ac71fbae804fae9ad74a", - "libraries/3rdparty/mbedtls/tests/data_files/cert_sha384.crt": "34c4d6e82b7ddaa6ba01cd9b6f0c3caf3dbaff320b47f770b6e939524d99e5d4", - "libraries/3rdparty/mbedtls/tests/data_files/cert_sha512.crt": "576836345a9ef43b29f33eaeb64de06f9bf95b052ac72463e7f1f77f6f9be0fb", - "libraries/3rdparty/mbedtls/tests/data_files/cert_v1_with_ext.crt": "441bbf74490e5e3c271770ba6907ceb8315ba3b3880203ae9ffb6c345b4f56a0", - "libraries/3rdparty/mbedtls/tests/data_files/cli-rsa-sha1.crt": "866a735d2f8e4913cbffd83d7f566f243e122ae4589f7440a8fe44da35b1cda8", - "libraries/3rdparty/mbedtls/tests/data_files/cli-rsa-sha256.crt": "0c9f037835a71595ce7e450b2b478852a3faf8f20ad8c680c9475d7f5c82355c", - "libraries/3rdparty/mbedtls/tests/data_files/cli-rsa-sha256.crt.der": "54583e3f6b904cc7d15940b84510df367493e85b74e273b0c7fa06e9cbdf762a", - "libraries/3rdparty/mbedtls/tests/data_files/cli-rsa-sha256.key.der": "c9af85bb77cb430f57ee1012b3af2aaebe8ae7263a618f19236a09b686e5b615", - "libraries/3rdparty/mbedtls/tests/data_files/cli-rsa.key": "660d13287799f69599adf0aff1db46ee42b4c492b0f153f620f89a639dcb8f7d", - "libraries/3rdparty/mbedtls/tests/data_files/cli-rsa.key.der": "c9af85bb77cb430f57ee1012b3af2aaebe8ae7263a618f19236a09b686e5b615", - "libraries/3rdparty/mbedtls/tests/data_files/cli.opensslconf": "93f28a0072b7049e317380f80080256d336381b5dde799b6560edf5b9fda4bc3", - "libraries/3rdparty/mbedtls/tests/data_files/cli2.crt": "e36c9f3a7036f6f5c7853c772a6b519f03c285f7e533af20ab2b95721c2179fe", - "libraries/3rdparty/mbedtls/tests/data_files/cli2.crt.der": "d2ae3024ffc46e785163539a421eb7eaa046126505212937863d510493e6dcbc", - "libraries/3rdparty/mbedtls/tests/data_files/cli2.key": "f3c47ba835345e9072b0f79628f2d1f539f79749b85afb92bfade5761fbd6757", - "libraries/3rdparty/mbedtls/tests/data_files/cli2.key.der": "557e06381c7e6448cd0d98c664172f6c143dd93cbc0e0d54561bac06fe86c62d", - "libraries/3rdparty/mbedtls/tests/data_files/crl-ec-sha1.pem": "28e158dd3910193eab15911cc39694544a8b0f5bc766e3e1da67f4ac434f9392", - "libraries/3rdparty/mbedtls/tests/data_files/crl-ec-sha224.pem": "907bd1ee58240b7c072e91676f0ebc9702a04d433bffd2384e69c05f6a2879f9", - "libraries/3rdparty/mbedtls/tests/data_files/crl-ec-sha256.pem": "929e7b1adee89d708c200ede454138ad787ebaf7b6de476e1d4faf3b1298dea4", - "libraries/3rdparty/mbedtls/tests/data_files/crl-ec-sha384.pem": "acba589402ef11c7e0cc2dada88d280770644029253b864779fdc5993ec4504e", - "libraries/3rdparty/mbedtls/tests/data_files/crl-ec-sha512.pem": "5e375a364c072b4ecefa09bdead1688a246ba0564be8dc87cd95d23d4876a4b0", - "libraries/3rdparty/mbedtls/tests/data_files/crl-future.pem": "c5c94eae1aca9509707811469e93f3acb7aac48847a2a0e2d9e74b56bb2e43ba", - "libraries/3rdparty/mbedtls/tests/data_files/crl-futureRevocationDate.pem": "9b87e8301b06cafdb544c6c5ff4a2736608ce6d2653e315c67e25272e3b5fcc6", - "libraries/3rdparty/mbedtls/tests/data_files/crl-idp.pem": "5de822f1b4f62cf742ae8b1a93acf160b988e8ba50450999d967ef3871b83a13", - "libraries/3rdparty/mbedtls/tests/data_files/crl-idpnc.pem": "ee36535dd23db1177ed5a52a409aeebbd9931d69da353e35f71e41bedfac52e7", - "libraries/3rdparty/mbedtls/tests/data_files/crl-malformed-trailing-spaces.pem": "93a6e9fde6b830aec66889e35af36c7a2b6d835992ac463ef73deb28fa5c54a6", - "libraries/3rdparty/mbedtls/tests/data_files/crl-rsa-pss-sha1-badsign.pem": "129c391ec45028057e8138f036e9864ec32a0189ab7432efb08478bee5f73880", - "libraries/3rdparty/mbedtls/tests/data_files/crl-rsa-pss-sha1.pem": "edc1bffec8a145087e6f66360584897b060a0fd3582f0143576f643ce0fff637", - "libraries/3rdparty/mbedtls/tests/data_files/crl-rsa-pss-sha224.pem": "637b7a8d60309f66f89a9ed9201ffe7618aa939d66fe630540f17e1704b923d4", - "libraries/3rdparty/mbedtls/tests/data_files/crl-rsa-pss-sha256.pem": "a1912cb8804562ae2dbca1ae10db45b4180bd70f56fb1134534b396234e5b247", - "libraries/3rdparty/mbedtls/tests/data_files/crl-rsa-pss-sha384.pem": "5d9144f238c0aefc2d0bf5293c3ab09203ab12919fb6173ed634d8e42bfdbb54", - "libraries/3rdparty/mbedtls/tests/data_files/crl-rsa-pss-sha512.pem": "7df28c03ec8286a8d00e3dcfa545a02d7885266dbd349c3c57e29a000478c6bf", - "libraries/3rdparty/mbedtls/tests/data_files/crl.pem": "07de7d8ec2532782314fef2d0fe7874df39afe551307873dc9acf862775c5bce", - "libraries/3rdparty/mbedtls/tests/data_files/crl_cat_ec-rsa.pem": "35249d4f945676d93b16bd9f15c7456ce9d774b52b524792497dab97b0432cd9", - "libraries/3rdparty/mbedtls/tests/data_files/crl_cat_ecfut-rsa.pem": "a62d024a1b8d82fc4011c4b3cf12b19598d8be72d4a10927f38f14da7710965d", - "libraries/3rdparty/mbedtls/tests/data_files/crl_cat_rsa-ec.pem": "a5fad1b53645e107a3295471cfa65631abc2718e0cac775cf97f519fe31a4c1c", - "libraries/3rdparty/mbedtls/tests/data_files/crl_cat_rsabadpem-ec.pem": "9b930fb641b1f042f873cc141eee7d29595aa2260116795af4d73517ad62aae6", - "libraries/3rdparty/mbedtls/tests/data_files/crl_expired.pem": "1c84a41b8da15aa1124f6479adfa6cbf111cf8a391a0dc7a2a9a940c30d3a5ef", - "libraries/3rdparty/mbedtls/tests/data_files/crl_md2.pem": "63f35ba431a5b98a8cccff50370f2a983052c0db8a244cc04ef37e4fca85e2fa", - "libraries/3rdparty/mbedtls/tests/data_files/crl_md4.pem": "b685416723dbad577b8e42b6bfa10f980be09805ca591c69c64d1b8a09b177e8", - "libraries/3rdparty/mbedtls/tests/data_files/crl_md5.pem": "8a3d0a4a56a6f8543f50059a6ac0d7a7d0c3fa3525d5f82bf68861e59f57f3f3", - "libraries/3rdparty/mbedtls/tests/data_files/crl_sha1.pem": "f98c02f1ec6a5a2f63fda160f8a7128021bf8b791b460d3404b171a57224051e", - "libraries/3rdparty/mbedtls/tests/data_files/crl_sha224.pem": "1dd5ee3c9d4efe7aacd278b933c613b901bf35c9d9fccad7b928a3ac1b3a301c", - "libraries/3rdparty/mbedtls/tests/data_files/crl_sha256.pem": "6003430f0ae6b4338aca8d19d431b5f7e1e7168f55d02b55b81597eadcf5286f", - "libraries/3rdparty/mbedtls/tests/data_files/crl_sha384.pem": "95cd5a37e5bcf335efa400e13b50cf0c4c2baa470501bda1110624b805fbdf82", - "libraries/3rdparty/mbedtls/tests/data_files/crl_sha512.pem": "091fe29daa3919c518c0590a48f86d690b3f1aa24b3650d58347c00dde61acd4", - "libraries/3rdparty/mbedtls/tests/data_files/crt_cat_rsaexp-ec.pem": "9d7b3df09c803ca77f07720a9dbef99c0bf76ef00212e75fe7f9fdfdb30c3f94", - "libraries/3rdparty/mbedtls/tests/data_files/dh.1000.pem": "e5fa5946d438a33a41573170681d5edd37028ab561774d3cc141fe6962aa4c2b", - "libraries/3rdparty/mbedtls/tests/data_files/dh.optlen.pem": "0a3b1ad06c9aa232f407da2c9557ebb252e35e8df7fa8b01d67be96633182e6e", - "libraries/3rdparty/mbedtls/tests/data_files/dhparams.pem": "93108f830ce1ffc74ccc5c0c45d74d29e2f4e0257bdde8b7d48875eefc12a1ab", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/00.crt": "558609858840dc17a9da804634afbf99424edb8db59ad99dce3687691785be67", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/00.key": "cd88d1232e351058359b9aafa390509951c1a0c6b00b7da285009d910e83ce1d", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/01.crt": "d5a0f0ff62316c2704cce682a6640c78792325d224fd41241dc11960a2a9688e", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/01.key": "c20a5c6eb77c8cf63543107c06dcdae2b49f01622e2d10ce6dc09e59397dcbeb", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/02.crt": "1869b8a995dd86666cabbf176e522db7757193f98543effdf188fd5fe569fa17", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/02.key": "14e626f8c189a5ff349d8efe35d7c357b75c59c1c267526fcac878743aa53d78", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/03.crt": "f3be18625e10235fef73c6de3c4fe1d62a207a2826f87d02749f2b3ea3aa858d", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/03.key": "a04dcc41508c378372d26098665de22c83a63a76ccd1c2533eebe1bf1b9555a1", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/04.crt": "de78b79629f7a6ab401a48d61339d6aedd2f6a553ae4c8c36268f71b0d24f9e7", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/04.key": "28befb1d41f11edfff3c447914acf25d2f620009c184ecd75c6a1a120b24f76a", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/05.crt": "af5679a5655a6db92618c0b103d2e69e869e6effc917df13600754a2cfa2c259", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/05.key": "39e58ffd6ccad062dcbd4b4e3cb1ac31aa27eb378fea6e302de2785c0becd276", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/06.crt": "aaba17838cd6669deef4cca0f0e0b504e8fcaf57e54d19d501a9edf9d8361884", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/06.key": "4c48922433ed3ecd9df09a530a094eefcf61aed3a979c50c138a260a9fcba808", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/07.crt": "9ec6ff17c6f0c030cc25712329f31d0ec3fb7f887ee10ae130ab888693ec6c1f", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/07.key": "54e16d5b34cef77bbc747ea32cdea3a512ddfd0c97e0a2856f2e9fbb8224d3b2", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/08.crt": "2570b5067bee9ab0ac87a7a49d9460120e5e06d85204472a973c1e2d748b5e18", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/08.key": "eb9dc2fb50847a846ad4f36e87c8aab98964e3c4cd3cb5a270158a2352022ee8", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/09.crt": "dcc49f4d753060f11ac645a661e2fafe122f33646acc808d472678ac824ae167", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/09.key": "ea99373ba8ef0158a51790aeac4a17fc02929be89a2a41b509c1be7fd6cc7310", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/10.crt": "094319da4d3a8702483b88ff111fef9bbbf9ea6452deb2421820ac0408aae81e", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/10.key": "74414a3cebefd13ab9d5d6a3b0c2895c39f04deedece9e9b564041d448b49a71", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/11.crt": "16a2d5c046d9953e6782cf6c1fb9f12e4c2e5af2be0b45aeb95292e36b2782ed", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/11.key": "a969b40ed5608775d422fd77636b57c8ae7f7445aeaee4bc36171d37287d6232", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/12.crt": "83def2adceffbce4e823b26d30aece634f65234ff30da599327866180a5dc21e", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/12.key": "86213c8881730842dd39b5beb18eed0bc359576faebfd9a3284e82c9b917985b", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/13.crt": "61d4ecefc25b47d22907effb3b2777db2a92fe74a5da1e45982593de0462c37c", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/13.key": "3adcac5db34bac9243e241cd3d411c408c40c072a0640736e641b2f5770fa22b", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/14.crt": "f69c6bdc9f951170183aeb916efc9b33a6f4c393c3431c014b2cf066f0d4ef73", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/14.key": "e2be9d236ea1d90882d8bbb1863544a3e765ac0916870ded784d89a660d35f42", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/15.crt": "e7ff71176744b78d63e305d665f9bda2ce6a052bc774c72e59473da94e86a687", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/15.key": "25f574ba3a37d6edb1b05352976cea0f8e5d42dd222fe86d30fc640daed78c86", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/16.crt": "95dc0c5c32c7b8cec9f3adfe98838b7de74187ba79f7e228e0b8088d85e01b45", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/16.key": "f78786f4534f25e2effd19746c481f8c795347eb700bf0584a046354054430e8", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/17.crt": "c07d3fa651f1b8e3b0fd9c3841ffeabab1a17f8a76f735b45c1c14dcf2f2f7e8", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/17.key": "cc1e209a9cda5fdff62cf61628cdfff437a7301e483ff0bb339c544d6a420b26", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/18.crt": "4ece74c31247ec25e9275064db5a9438b2d134b48318f0a2b2b0b9a49ac85982", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/18.key": "fc91156511ae0f490825d3c170a2a708f2b0c8107124bc0fa703dd19c12695a6", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/19.crt": "8cb73807d9c53caee9487e713232ac69694092ad5a6d51ff8db37bb9dd56cde2", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/19.key": "5ceabbe6c1af30a28ec8d0d58a4911ab557304e5fb84a90e7a1cc48a33f576f3", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/20.crt": "09bb73126d3698ab939d469f075b425b4172d45b160743cfc50c137f876a6cd7", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/20.key": "a7fc55a3a918fd5b46d9ec2c166a226c361e1e6bc5ac39a33e97c1d664a17715", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/Readme.txt": "89a5cf249f1f1db829a748a9e051ecd9014d448f1f6083000f7a63ce7e7006b0", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c00.pem": "558609858840dc17a9da804634afbf99424edb8db59ad99dce3687691785be67", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c01.pem": "fe9151449a7925f644a2de6d4c242bacdd4e01f0182805a3a09fbdb5a887230d", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c02.pem": "5d259cda21032c86b9dd371264577a4ec6b8f0d652729ba0aeefe99ee8cd59fe", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c03.pem": "0f7bf5e1070c69e6dbf1755889f62b92a329e67233f91407cef9bf934d8cd224", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c04.pem": "45a06b9e7cbf5e5a83725f5e524cf905bd8710dc6e20beabb3ccd5212fdb5232", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c05.pem": "f73789e296878cb979abfb9c0829da492b4729cdd3d28ae2c06b6e7976ca0154", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c06.pem": "07077d1c4a9a444e187e4a9b00cce1acd5ac8135ffe8bce9ca03e334f680692f", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c07.pem": "a417f92841ad64c79207afe8f858d8d4acf44a658451869b2b700cfe4c80a0c7", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c08.pem": "14171c21db9d34cc0984f1f865cfe6cbda9ce3743df4dd2d159767e8532fb016", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c09.pem": "5912ee75858880857a48f1b4b1f5f5bcebe0fe41642198ae0a0853d56c8e9157", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c10.pem": "cbe574373c7d1989baa1b67249ddbd467f1f0882fe68c61191160ced32b607f3", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c11.pem": "8194cd820d069233b2ff62126d19e0e2704030acf20b8f424b39bbc8470d7fa7", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c12.pem": "338b7d86776b4e92e14fa9fa59e2eba86c8f7cc35b0fb79c1d0530088440c9e8", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c13.pem": "389cc52f557cb4fb23926dcbdb4f905ea8cf241f7807321caa90f1c11f919aa5", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c14.pem": "b9acf4c1a26e4a88fe206300987f4a377770e74cc6e524f36a46313f48cd896b", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c15.pem": "703fc1e8838a0fff288d2c079c01d63724ffa3a65aba80e3a985bf8768f5e462", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c16.pem": "569fbf14527ef2ae42de5834d7b210539b040603bee91422b06167843a0e6729", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c17.pem": "c1f325141c11a37292eafcde2a310c5cefecb1062a5e282376105d90851debf4", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c18.pem": "e16bd5f39ef8013b0c48843db8334a450154f75dc3bca0c36021cc752369db38", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c19.pem": "f7896c40eaf4afa3781757083f2aae5239e9ba164da488bff63cac87ad2417e8", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c20.pem": "18a64222ea63f7b80b3b3a844a61065552712fd528edcbcd4f1cb8076a928ac8", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/int.opensslconf": "5db05d936789d8a7433abdab86a8925679b1467a23ebaaa6293f1f3287c53766", - "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/long.sh": "86c14d0a1b264c69e5bac26fab7904d91146842eb7c0c7d71257fb32265afe86", - "libraries/3rdparty/mbedtls/tests/data_files/dir1/test-ca.crt": "d123b3e7e890c87fd8c7db00b464ca70755bb7aea105432f32e0d4e7724ae4e2", - "libraries/3rdparty/mbedtls/tests/data_files/dir2/test-ca.crt": "d123b3e7e890c87fd8c7db00b464ca70755bb7aea105432f32e0d4e7724ae4e2", - "libraries/3rdparty/mbedtls/tests/data_files/dir2/test-ca2.crt": "69ccb7250fc0fbc1b479dccd70d2561e33255086a0f4e4a8672f92e0cc8e754d", - "libraries/3rdparty/mbedtls/tests/data_files/dir3/Readme": "fac09c08823cd79f534a5f5ce76e05ebda64be718f6457d44e84928231f17225", - "libraries/3rdparty/mbedtls/tests/data_files/dir3/test-ca.crt": "d123b3e7e890c87fd8c7db00b464ca70755bb7aea105432f32e0d4e7724ae4e2", - "libraries/3rdparty/mbedtls/tests/data_files/dir3/test-ca2.crt": "69ccb7250fc0fbc1b479dccd70d2561e33255086a0f4e4a8672f92e0cc8e754d", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/Readme": "2bbd3bb85c7080f5745b528ce02b75b5a64aadfcde3cabcf06e7cf068b5f9246", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert11.crt": "d4f47ec1c0d4839eeae9ee8046bda1245b4f714f1a4753eed290efb4a6fa9903", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert12.crt": "e72d7bec40aa781c3c32af83ddfa072b0b0d2bd94a592754b1b05ebe34ec439d", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert13.crt": "55cc6168c43c0b72c7d01248b700a87cb08deea3b35e0e23930606e717b5e5ab", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert14.crt": "92d0c971e08161ca0ee52d3acc16287e31d24d1d3f2697490ef1f902588f3385", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert21.crt": "2d6c5926bf8f606b39933d88f95c3542c6cb7376af2201910c6aeff3e53224c1", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert22.crt": "8cf8a7f8e55e7f533988f4dbb0fcfef8b42f75c94a5fe06371b6cecaf5efd1e6", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert23.crt": "1d7dd79328c314c46169974f94269305263f4f3953e611f6965c510987a05516", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert31.crt": "09ae249d2d0f85a2d7cbdbd7ada36ed1b211ba009d3e48a82596f753c89fcac2", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert32.crt": "8cf8a7f8e55e7f533988f4dbb0fcfef8b42f75c94a5fe06371b6cecaf5efd1e6", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert33.crt": "e9aea2a62046c54110003c435c42454898ad6d3172e86be5c15fbdf845b047a7", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert34.crt": "5d8e5d9b45730b99ad6f0a695290996253fd09cadee34e6d093ed22b575b5d7f", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert41.crt": "80b0b7c00c4ed0e6281406b0182ae723ee28d0ac83ab916cff5a1bf40fef3634", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert42.crt": "5fbef827479243ee08633a600e8c14dc43d0454b2475e506aabea78f5a68d57d", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert43.crt": "e9aea2a62046c54110003c435c42454898ad6d3172e86be5c15fbdf845b047a7", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert44.crt": "bc1d4a8da29b153ba628b442901a08ea844040a3226f197162fae6b42a35efe7", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert45.crt": "3f38723bb879d875f42fe7e9d798e5618b0e7f90fa0df85e47b0f8b04b92bfa5", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert51.crt": "80b0b7c00c4ed0e6281406b0182ae723ee28d0ac83ab916cff5a1bf40fef3634", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert52.crt": "5fbef827479243ee08633a600e8c14dc43d0454b2475e506aabea78f5a68d57d", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert53.crt": "e9aea2a62046c54110003c435c42454898ad6d3172e86be5c15fbdf845b047a7", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert54.crt": "8f94e2b812adb33986cf91b4efbd064755518b76d3814ca1bcdb9f5e0dfe2690", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert61.crt": "09ae249d2d0f85a2d7cbdbd7ada36ed1b211ba009d3e48a82596f753c89fcac2", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert62.crt": "8cf8a7f8e55e7f533988f4dbb0fcfef8b42f75c94a5fe06371b6cecaf5efd1e6", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert63.crt": "6fdac8688e057f8531bc120b3ab9d6e288cfdf19f4d7d982746aa92c634e4b7f", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert71.crt": "09ae249d2d0f85a2d7cbdbd7ada36ed1b211ba009d3e48a82596f753c89fcac2", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert72.crt": "8cf8a7f8e55e7f533988f4dbb0fcfef8b42f75c94a5fe06371b6cecaf5efd1e6", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert73.crt": "0de79dfdf640b6cc736061799f6c1fa1a7d8aee09eeba43e11285375f7a15fc9", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert74.crt": "93de8e5ac8d25beaef072a43e5fd1767e6937831d745c62345dd8d6efb301154", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert81.crt": "0f4c48d44ef2863bb063e76c25608250a2817aa3270161e6c5cda322a43b3919", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert82.crt": "9de3b7854f7f803d98703f98b47dcfd0022359be5bb8fb4ba4f09cb68afb50a7", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert83.crt": "cd92f55a61ed691c23cc268faf7f4d6070a8a03cd3989f915453a6e51542eb19", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert91.crt": "6e4b75377ad27118072f6fe98239f609fad9f97b3de5b333a917e95c9e59028d", - "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert92.crt": "e5cbf36cda413d2659ff53121cf1163099b4275fd3f77c3ce6427a9f0eadf1ea", - "libraries/3rdparty/mbedtls/tests/data_files/ec_224_prv.pem": "2c5f6e9a1466fd74a1ee2eb5f185abe903bbd67633a3bb3425ff951a5a17e181", - "libraries/3rdparty/mbedtls/tests/data_files/ec_224_pub.pem": "21679b5df0af750c766616866c695e8dcb93db4501d19a6febac7ff599d88ec1", - "libraries/3rdparty/mbedtls/tests/data_files/ec_256_long_prv.pem": "edbb78411c53e20a480854bd1c55e26668310d1729a0d7ce448138abe51dd763", - "libraries/3rdparty/mbedtls/tests/data_files/ec_256_prv.pem": "0405a70b26333c2555e31ae665c0a5f37c6cd0e38edf5695afe3638743bdd903", - "libraries/3rdparty/mbedtls/tests/data_files/ec_256_pub.pem": "77b4f55e6a1ea1db4c72a71efb973892ac4a2015a65be470d274da811d9d6cc6", - "libraries/3rdparty/mbedtls/tests/data_files/ec_384_prv.pem": "ed3a69ca0c5f4c62fa2c7b64951a11d1378abb72c3a3e439d7e06a9ec82c2075", - "libraries/3rdparty/mbedtls/tests/data_files/ec_384_pub.pem": "436ec39c20378dd1ae41765df9937e0138f4d724beec8062d4834e03da8cdb1d", - "libraries/3rdparty/mbedtls/tests/data_files/ec_521_prv.pem": "ecb4bed1990396b35f4cc0d3e2fa99b4e3876c89bdd05b691e0c02ad4b43b73d", - "libraries/3rdparty/mbedtls/tests/data_files/ec_521_pub.pem": "20eb17b9dba162bbb2e6055da194b23c91ec71caa47bc022f74f239eb8c0d711", - "libraries/3rdparty/mbedtls/tests/data_files/ec_521_short_prv.pem": "f82aecefacddd06e07012fca5751cdca618487c0b97ade4354e082900cc061c2", - "libraries/3rdparty/mbedtls/tests/data_files/ec_bp256_prv.pem": "0777db4161e8fd9cfcb0833486ea2992f1e173c22b53520e60799a905b05121d", - "libraries/3rdparty/mbedtls/tests/data_files/ec_bp256_pub.pem": "6fdc2e11f20df144d0b30a8227efddc13c13bc75a8ee7c3cb0d39a6dc7bdf9b8", - "libraries/3rdparty/mbedtls/tests/data_files/ec_bp384_prv.pem": "a72bd58d95029d0d6ab68219a29a25f107e235feb0543df7867e28e2a94f881f", - "libraries/3rdparty/mbedtls/tests/data_files/ec_bp384_pub.pem": "f68679ce7aa4e93e9f3acecfa9458fdc6f87a8895d0ea22c477db93c53226723", - "libraries/3rdparty/mbedtls/tests/data_files/ec_bp512_prv.pem": "9873530d30669de09947d05a9a111a38cd81376e2f97726c42250b958c6a1a0f", - "libraries/3rdparty/mbedtls/tests/data_files/ec_bp512_pub.pem": "31659f83a80457d707177c9436a46b4154ccd1c01f01c9de4685a7f8b59245cb", - "libraries/3rdparty/mbedtls/tests/data_files/ec_prv.pk8.der": "fd7e1a365af2323008b0195ec77a95ed9e59104fdbfef1639cb7022ee09c9a01", - "libraries/3rdparty/mbedtls/tests/data_files/ec_prv.pk8.pem": "c6bbe5affbf9a953c8d2124cb80fb48c2e9344b796d328e8c385a1aea5edde64", - "libraries/3rdparty/mbedtls/tests/data_files/ec_prv.pk8.pw.der": "a1e9f7ca94578cb5d21b71292c3a56a6e147751924b67820dd9aad9249b5ab47", - "libraries/3rdparty/mbedtls/tests/data_files/ec_prv.pk8.pw.pem": "d58913cbb587fca417bcbd8c2ec09c858206cee88de3a1351aa8601791066c82", - "libraries/3rdparty/mbedtls/tests/data_files/ec_prv.pk8nopub.der": "22d2162c7b342417c33034ac3aa56f79c01b9874a2df694db9ebd95542380ae9", - "libraries/3rdparty/mbedtls/tests/data_files/ec_prv.pk8nopub.pem": "9587d1d0e4c45c1601faa4384e1bd5634a37f4a86ba4fd85fbd7fc85ad110d20", - "libraries/3rdparty/mbedtls/tests/data_files/ec_prv.pk8nopubparam.der": "2a3381bab277bbca12f4b909335f7a1c13e46c19419c03b18a93be671bc6fe55", - "libraries/3rdparty/mbedtls/tests/data_files/ec_prv.pk8nopubparam.pem": "729ada4d58b82f741acfe7af2649b456c6b2c9f7297d202b83a0680ba4004685", - "libraries/3rdparty/mbedtls/tests/data_files/ec_prv.pk8param.der": "c4352a035ff6e0afce8f8b5f8358e10a871c373f93f3fef3b247245d8ba4d509", - "libraries/3rdparty/mbedtls/tests/data_files/ec_prv.pk8param.pem": "609315a12cb3e58ab934a59c30bef3c835e835bc44244fb640d659f66b82dd8f", - "libraries/3rdparty/mbedtls/tests/data_files/ec_prv.sec1.der": "c5eca7361e00be801678a707c5ca3c3b0dd588fbdfde82f1d29a410868f1c5c5", - "libraries/3rdparty/mbedtls/tests/data_files/ec_prv.sec1.pem": "e4717c4b0e7e29eda161a63f5d778ce42e87e99e2ce8c440d209949f8fa49647", - "libraries/3rdparty/mbedtls/tests/data_files/ec_prv.sec1.pw.pem": "23052547d6b30dfdd3831b5b38c5b11be5bfc90afabe5638b7799a1fc6c67d01", - "libraries/3rdparty/mbedtls/tests/data_files/ec_prv.specdom.der": "4ac48937c8eea09c6f541e8b27b6576276224301ff1c6a6781f3636604540286", - "libraries/3rdparty/mbedtls/tests/data_files/ec_pub.der": "f1b8c5f2626c5a823450e704ad8f7e47efbb3bc648855e0e3ecc471e6c7ff0a8", - "libraries/3rdparty/mbedtls/tests/data_files/ec_pub.pem": "85c0df2b3eb7e7149ea7ea1cc614f7c6acde945ca5264c2d5ec48a23a3c25419", - "libraries/3rdparty/mbedtls/tests/data_files/enco-ca-prstr.pem": "9d6be316630c2d1b2af5f07a0484b39b3ea0d001e2152436e0d3d6881809ba49", - "libraries/3rdparty/mbedtls/tests/data_files/enco-cert-utf8str.pem": "83a7513ea4c9e312e624d151ec1cb2c8cac2ae0db46d5bce813ec5b5d734d6dd", - "libraries/3rdparty/mbedtls/tests/data_files/format_gen.key": "dca1b0916b165817b00f17cca5baabb6cec36da42915d10dc1cfef66e8956c36", - "libraries/3rdparty/mbedtls/tests/data_files/format_gen.pub": "76b4975658959d263f2d4a4dfdd234151bbaa986dd0fb3127e30d67bb3d5db47", - "libraries/3rdparty/mbedtls/tests/data_files/format_pkcs12.fmt": "faf2b10722fe00c42cf53ecb3f73a926237da099f488dac79beeac62d45e4051", - "libraries/3rdparty/mbedtls/tests/data_files/format_rsa.key": "4be0c523a0e7e848d00bfd0f14df939cad57cd23fddbc88f637b8dcef84844d9", - "libraries/3rdparty/mbedtls/tests/data_files/hash_file_1": "975d0c620d3936886f8a3665e585a3e84aa0501f4225bf53029710242823e391", - "libraries/3rdparty/mbedtls/tests/data_files/hash_file_2": "11fcbf1baa36ca45745f10cc5467aee86f066f80ba2c46806d876bf783022ad2", - "libraries/3rdparty/mbedtls/tests/data_files/hash_file_3": "9ae4b369f9f4f03b86505b46a5469542e00aaff7cf7417a71af6d6d0aba3b70c", - "libraries/3rdparty/mbedtls/tests/data_files/hash_file_4": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "libraries/3rdparty/mbedtls/tests/data_files/hash_file_5": "cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0", - "libraries/3rdparty/mbedtls/tests/data_files/keyUsage.decipherOnly.crt": "b704f88c55cca613eb99d8669eec61d5ccd8d17d79b3873497fc9819869a9289", - "libraries/3rdparty/mbedtls/tests/data_files/mpi_10": "a8a8e03559b9d8bd1ab263ed74f56cfdc255bb1f4d68c6d75740574aff1d47ea", - "libraries/3rdparty/mbedtls/tests/data_files/mpi_too_big": "1df9e1532ab98dc1592bad8cdc8ddb439820ee7be4fdd5bf66e809f04dd50702", - "libraries/3rdparty/mbedtls/tests/data_files/passwd.psk": "ced9f110932d025ad3b20f9f8a711eba701f83d4b776888b2f310b9a15566cbd", - "libraries/3rdparty/mbedtls/tests/data_files/print_c.pl": "ede2a97f4090ecba0574cf6259b8a7ac14ee72582a7f9d3818d4618e76ba737f", - "libraries/3rdparty/mbedtls/tests/data_files/rsa4096_prv.pem": "fe1368dfb5816c1697ff7842aa4da44fa0961aac16dea803f7b0b1af922f692f", - "libraries/3rdparty/mbedtls/tests/data_files/rsa4096_pub.pem": "e3afcd3274efeb06a3354eb8346a20f3cbcb58025b8a11cb485e896507c4fc64", - "libraries/3rdparty/mbedtls/tests/data_files/rsa512.key": "799d813958afdbab03c10fb91df109f7d7ee0d9affd2282cf050600d50b97d44", - "libraries/3rdparty/mbedtls/tests/data_files/rsa521.key": "4bc698df7312e5ea0a9bda75bc876d16a25a30dbd6d34483b3252ce8224ddf2d", - "libraries/3rdparty/mbedtls/tests/data_files/rsa522.key": "aa458ff31c66c8f7af7c6f07418ac9479bc9aad4d8d1e5128f2d7455ca52eeed", - "libraries/3rdparty/mbedtls/tests/data_files/rsa528.key": "614f9aec7348a481cb5477c47c3bf76d6af8f4a5f21cc875a8efd026c3bdb085", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_1024_3des.pem": "2c387321062ad20d5eff5ec30ba57cde1b1788253e315cf3fef64d896dc6141b", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_1024_aes128.pem": "5032455d9ae5bd96fec4a14b409d122101ad3f074a29b6af28f67c7081a82366", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_1024_aes192.pem": "2628892185635e4f459444f7f5d17dc9f3b0009095d12a11c634bd3a333e4aed", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_1024_aes256.pem": "5dae5ea1714082b515a073ec930d9ffb3294ca2a12a66d131cfb5b35489aca78", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_1024_clear.pem": "0112d73365e459106014ed440d6ca6d45f234370939790e21e9267bfb073bdb4", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_1024_des.pem": "08e9aa7dbf581581131532213ede5f76222efb3c5df3e1d8e9d21f77ffe97be4", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_2048_3des.pem": "7576eec37b28007c0fecc1023ffc0cdd51c5b0964f9d02aa1955774ba9f06fcb", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_2048_aes128.pem": "ee8bcbff13d7f58c5bab527d72b793fbf2085a568ea25af446017f214531dd17", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_2048_aes192.pem": "d24c88836bc1c4cd35734e9fc252ce95f07cf4ef3eb45726ada77b82e3177bc0", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_2048_aes256.pem": "182681da70e9eeb1d1508ef4746763fcf14da6eebd414bea090717c0f830e52d", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_2048_clear.pem": "3e79c3cb57eb569c4271f69b90b3f9475b02d32b835c91f29786a02d5c04a510", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_2048_des.pem": "42183ce524fc60c316f9eac695c30e758d295a0c8013788053c6c43a6ac7fd36", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_2048_public.der": "f9020011c92bc526c75ec849ed15ca63c12d64129cd6b3fcbc5e4fbd9df9b810", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_2048_public.pem": "3c28eea66473c3d3ba126da0c8d7af98e00d1d2f8e7d00a7c55e9a2c5119a850", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_4096_3des.pem": "a5314e0d8e9ae1e34afe514d9219d507c1f018156bbbcd9ec36a5a935f8186bb", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_4096_aes128.pem": "7d544b8d1a6f552c90e4db19d84744b316469d8d6a4eb31e6ce9c6abd8e87e57", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_4096_aes192.pem": "1a05e9f1f7152126eb08dffba59841ee525319b46861ee3ed526c687195bc95c", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_4096_aes256.pem": "cc66bcd61806a601f33ad93a47a53f4785470e2fcb3ded30a77611b1876cd05f", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_4096_clear.pem": "c6ecb3e03f0920f35453d72490e1139f11ecc38a19bd6a1cd89e9004779a372d", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_4096_des.pem": "cf6d0a97cd7750310bedd61e505ca57cbe585c33f6f649426e661551a37ea44b", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_1024_public.der": "e0e4deb81619f62ce2f76795a2f1c49c53c641775c66ae5fbbfdfca7f459442d", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_2048_public.der": "b6cc4647b75d49cfdf45b23ce11aa981f122bc37dfedb0c34cd9cae1835a865f", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_2048_public.pem": "484598e3aebb140471ac33f1b7ad5b404b2264565c0bc3da4d0a5a2018efe004", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_1024_2des.der": "1528b3dba6da80e638cdba8f5b6c078d2012a478e7bd46b6337b2fd362afebcf", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_1024_2des.pem": "7af1096ceca43dae032b481d883e553fba9f222fea125144add0be3b990ee190", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_1024_3des.der": "07a45d24466d4451387f3c11631fee2a7a569d799b6bad4a6ddf8f833e75699c", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_1024_3des.pem": "1971878eef033bd7848c08b815398671a58e8daad5ed01c4afb13205199126d9", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_1024_rc4_128.der": "e37a91a67712970039dc97fef17d876e98095a42f98022624d1acbc7109dd84d", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_1024_rc4_128.pem": "80171741dd3fabb400c2b3e913c1ef2ad24e542f40ee8cc789c41a82958ba969", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_2048_2des.der": "5408d3b730a49b89454651bb2fa431b67215fcdacd8548af5914f1ed0bb786cf", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_2048_2des.pem": "50c2f177ca4d72d06bef23514df39c1d59ac317b7905eff5d73452f22b5fcde2", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_2048_3des.der": "20f9635cd74121e7f40099585ed44e3df6fad7d27b594b71e4a4cb7f931802c0", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_2048_3des.pem": "cde352fa9773ed8fd8888f9bb69d33a1b9dd13dab18f58620f9106b27d603c7a", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_2048_rc4_128.der": "993453b973c65b34d97e7bb1179f9d53e05def19ae6ff1bd33f1cbd85b8d44a3", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_2048_rc4_128.pem": "9fd1378fff6967d5fb74c26cfe5e311e9f1ecd3d8041bc195b1f94caa8ea003d", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_4096_2des.der": "0135bf69430620321b84534a898ae23ca651318a2fbf4f847ee4d8a98511e5e3", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_4096_2des.pem": "7577944396863a97be6fae436361303947778616d165b687b319f9353e80d4dd", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_4096_3des.der": "14900c8e0500418775322e7d7ee4d666c0dac142630479fc9b3788c9c899968d", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_4096_3des.pem": "9a37049edb24ddbdaa1a65cd374068bca32d0049048e88c8c6e38094924213d6", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_4096_rc4_128.der": "a0b2115bb99a823eeb0e0c9e29786bd426c2e4ab192680030cf36866f7300ff0", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_4096_rc4_128.pem": "83e49de7ad3ae1b312f3473a435e14448b5627c5bd0e029ce8917693d878acff", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des.der": "377485165326983aa5a84efeafbaa2ab2bfc6b2ef26b7d0cb0ac62a6e76c4333", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des.pem": "4a89853da284ffc3faa351fd7590af5cf161818c1751140317c63dcd66e759d3", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.der": "c7595eb54ad5ee1124767a49156fc1279d3bd63d1745f16666e0df2c88c82612", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.pem": "085440d612122680999baf05e4efe8a196f5c39422a2a6c97093e49ddd93f911", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.der": "420f7d15d7123478b22d2a0cdfbca16a65809e9e98c4daa1bcf168f348e7f971", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.pem": "0c9768289c6b43939c29b864bb984b42c9011c88fa8494f3856ad284fa5edf88", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.der": "212264f9eef95b72eeb5777b95e0a042e78180d6749f79938c58bc70d928cdd8", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.pem": "740a53af16f5499b17a9b2e59e839f2b95b3669238d631ef06aed63cf8135725", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.der": "47905380c77231834a773dccdf06c376fc294a1e13b59f6727196db570f4319b", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.pem": "7533d5a146e37001dc57d1f53e8a38182e3925747bf02a1667331332f584709a", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des.der": "09ce34140f0fca9c73c786a90c883351dcf2c22713538dd70af33024c0af0860", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des.pem": "708e7466c2c45ba4681528d62b598a708480eb8fe8b28025e53cf340bd12c55a", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.der": "9172bd5c29dff754d8b2dc094fb402c0db98445f77beb99865513badee29ebd2", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.pem": "7c80e405d73324a7145ce944f1101275ccdaa2d33dc67d5a5c8e0ad53299709a", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.der": "aebdbc8324265dab166be334ff9fa2d4201bfd5c8b70d0907878451ad4d8fdcf", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.pem": "98162c6a985e733250cdb9a717c57560ea48ae804800020b997bb9cc633f81fa", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.der": "fcf617efcdabb117988a32e5ec0291bfca9116212412d0343bfdd077aefd7a65", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.pem": "8653bc8407ef8d9f96b46b1ee6342210234eaf4b5a947acb7807d9f79853a3f5", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.der": "1459b5d3cbce943f56f01d69ee2ad2f40877638be699486c8805e7ccd01cf8fc", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.pem": "2d7a6c0e119bce4a94717956ea740989866046bf318454c5ea501975e2c16094", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des.der": "6cf06096fc2e23a82f4f70a7197efaf8f148e02ad450cc8ac7a9f3dc4334d85b", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des.pem": "d15cba2d636473deca31d86aeecb0197c966f179910b3b86e92736227146752c", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.der": "95bff3dc143382f6c5de5baf2f72e3f41a0da2ef308f613b25312034c3740cab", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.pem": "a14337e04dc979d9a3bf67a7c14376568b158249cfd904b91f863f821d811415", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.der": "2d502dda0c522d92ccb5b946ea29b8733e682cc4298cf4a6eeb5f0edae0e2109", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.pem": "f2c46ab52e1f0d2eea7b99dcce07fef029472bd43444dec83a24da7517616fcb", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.der": "5f9b98613a34b6637f556c963bd6bdcde74bddfabf0a6dac048109f63c0d75ac", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.pem": "df6de7e2ed97fd20b4476d15e849ba8a03449b2baf8984c4660fbc45e2fc3154", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.der": "036c8d1d5a030658232b2ec50f68f97824543bccfe7d7216283ccca076eced8e", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.pem": "948f06fc1775e2ef3ffa518bef5b047801cd0c6ad5515285451704ecd873280b", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des.der": "715566f5d9b2734d7713d563907733bcb6464108d9d3acf2f8cbb7c85de5fa3a", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des.pem": "8d94de2021aea75f8c2be923b10dc2dde5ae20611ac59d11e1a33d020c656ef5", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.der": "d277d326771d241ed17154ad594359c0228cc350863b876a4c6b15ffcafaf97f", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.pem": "65cfceefaf228bcdcd2c4132b27bf14f59bc006dbb00e6cc315340b971f03a10", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.der": "6fabb1625c1548fb83f9b4a0fa4556c4c558a7a361453f1a700c2182fee3d5a3", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.pem": "87a64aef803b3f878b21441d4363bd92d339f67c3cb0018dafd3a1d2d01935b1", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.der": "5f409c99efa3c088f97b01e5db813ef9d87ab2d014a6c2921dfc4b2ef673e0cd", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.pem": "68955f866f9fd9b804d128d862a5180e64903bba63b36184ebcd61215078bee1", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.der": "a51ad7c84591007089e60fdbb05d8cb164a107bbabaac40ee948d9bafe4c7e34", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.pem": "f6bc393737cd3757742966fb7db6912f1e817c2fabdef1f812828c2d5f374387", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des.der": "4b3d847ceb28e1527398013d84b7e7a3ee4fc0225bf6d91ae170f376b4a759a8", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des.pem": "9736c1fd60bdcb63665cb2903a6eec86df2f72c59c82d54eddcc7bb58f4b6e5a", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.der": "066799f295a92258bbf8299612ed784127b66ca64ca112231c6cc7b2397038d3", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.pem": "d905f3b6b08e38c7d303c90648917da59e0bb03ed7fcbb25b9093f8b2cb1ae41", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.der": "2d1c28777ed1b84414d8c17e0be1a667cd46c98e8d10dfa6aead383c503688a0", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.pem": "f1523efc7496c198189d9f37298dda2e410ce28af16281e851d4c39a9ba49668", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.der": "46c062c7390225dbf7a8ed6f2837a8a37e724986b82c1e64490acf49ce783ff3", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.pem": "c899858881141168e0daf871d54e201ce659548fe76efda6cbf8be8c43a75dc5", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.der": "9c5b6f7b10e2a73a7bdff474cda5301a6b04ad4858268d2d37b36e24925e0b94", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.pem": "7380b0697efe46ee612f70660d9465831e38aef10d1264d55b9b615373b1e282", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des.der": "d1397b7bbc76dad97529e3b1c59923a732e19cc3c7caf099149adbb57536d0a2", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des.pem": "0d6a32350b7caf5e179cc7acfa18a1918897494cd617f1de067bc0d250a00f38", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.der": "e83c88036a7d70d2721db82c98d4737dc3cb7fa7550b0afdfd3313e6ba36ea9e", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.pem": "94fed3e23676ac1d14652e6c9c9238fecade01cc1838fc8f2abffe15e53ef160", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.der": "d1a828ac6fd4a259887053f315cea37e9324b789c8c6263cf73df6480cbfacb1", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.pem": "b583d5be7de2d3a854527436ac421da0f10ce1307be213e5eb0c24fcf814a826", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.der": "80186b3273d329fb9b48aa970011c9c6eed4082727b273c5c84561e315c89eb5", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.pem": "ef178d8836c7f8b6d5e24b495d1b2ee842b22eed17f55a51b8186ccd8eab7ef0", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.der": "f39817b0f863684080545ada28a90bc6c59fee310c36f69b083ff53dff1b570a", - "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.pem": "8778569cfdb0b38397064f2f01a64e0e3168a70f28dacf7a0e43b39714545e58", - "libraries/3rdparty/mbedtls/tests/data_files/secp521r1_prv.der": "d5575481be80df94b1ec0361cdb142239dd3fb04100247d78934d5a66b5083f2", - "libraries/3rdparty/mbedtls/tests/data_files/server1-ms.req.sha256": "eb6640edc8144b2300988f9dad2b5c0b1c6a7d429bbe8bab31aac8a7b5cad62d", - "libraries/3rdparty/mbedtls/tests/data_files/server1-nospace.crt": "a62cb8ce57a683677156ec67e8a6cd95892cac5d67851f29b3b7cce2be39451b", - "libraries/3rdparty/mbedtls/tests/data_files/server1-v1.crt": "b3c2327c7758342520e9cb485d788d0f475373dbad95790aaee5a4eb5126886e", - "libraries/3rdparty/mbedtls/tests/data_files/server1.cert_type.crt": "5fbedc50290f06c2c68b4e9df688670cb43b129b8f1289dc7a6d69160ff34bf0", - "libraries/3rdparty/mbedtls/tests/data_files/server1.cert_type.crt.openssl.v3_ext": "9c3314a4b2070dcf77c74ce90f5dc5928dd4e608900eb24097e1c1647daf5790", - "libraries/3rdparty/mbedtls/tests/data_files/server1.cert_type_noauthid.crt": "d557ca07706519d45aba576e8f2a4d306918b8d7df05c094411d9a38263db7a3", - "libraries/3rdparty/mbedtls/tests/data_files/server1.crt": "65daee0ad2689c420de31254b1a4d2cfb3805523bc8115eca806758c3995b7f1", - "libraries/3rdparty/mbedtls/tests/data_files/server1.crt.der": "672eab1bdf7167c5f00dd4be04137d22af719ebd3d9f58e3af8974e878c7a700", - "libraries/3rdparty/mbedtls/tests/data_files/server1.crt.openssl.v3_ext": "4f2671d996028c6f498feb04696c6634457bdfa89cfe297dd984c5e35955e042", - "libraries/3rdparty/mbedtls/tests/data_files/server1.csr": "1def45bcdca8b2e73533a8e11fbf79e54ebebbe7e2bef2802f3d080f5a7232fd", - "libraries/3rdparty/mbedtls/tests/data_files/server1.der": "fbd74fde74fb949bc221997ce1a557364f02217bb0a21e7ddbb9b3f29b26c491", - "libraries/3rdparty/mbedtls/tests/data_files/server1.ext_ku.crt": "cf7fd376acb30711d50f3c1f6235c93cd290ba2e839d5115ff4c34d9f29c694b", - "libraries/3rdparty/mbedtls/tests/data_files/server1.key": "469e1de4e72db7ddea4f5f56db4974a612da0f403a8a35464e52d53c60fd61bf", - "libraries/3rdparty/mbedtls/tests/data_files/server1.key_usage.crt": "de236ad3db13eb4eaced13d19df87b6b764425c33e832c631b4398b232a5977a", - "libraries/3rdparty/mbedtls/tests/data_files/server1.key_usage.crt.openssl.v3_ext": "82e5e7d5c89136c6e52683b12507fe6009aa293f6cc700bb3ab863db5538b2b9", - "libraries/3rdparty/mbedtls/tests/data_files/server1.key_usage_noauthid.crt": "1bdb38d82ab5621c270cd38b70b60c29020102a7eee4e681888b347e81552623", - "libraries/3rdparty/mbedtls/tests/data_files/server1.noauthid.crt": "69b3d572084b8f571aa6dc1111cd80089216a1b91c150fde8ba6dcb4bf5ab931", - "libraries/3rdparty/mbedtls/tests/data_files/server1.pubkey": "1079e8fd1cbdd5fdb58009c8370aff59fd60e25bf747f96bff48f2efb562489e", - "libraries/3rdparty/mbedtls/tests/data_files/server1.req.cert_type": "164c2ec94c93ee5c14cbe6dd5f801de7564671a982f0d63bfd710e68df1db18e", - "libraries/3rdparty/mbedtls/tests/data_files/server1.req.cert_type_empty": "c6966374ba5e05cbc9c37631d9e0cf4f97bf287f74baa346345257627a1e21a7", - "libraries/3rdparty/mbedtls/tests/data_files/server1.req.key_usage": "b98a58030a1018b879c2e09fb8fb60f1b4c00cafd09127f1c9fe41140214ab26", - "libraries/3rdparty/mbedtls/tests/data_files/server1.req.key_usage_empty": "f570adcdc5fb07fdec4160d7a9e487994b5934ae30f4c9c0ebe36ca0c08182f8", - "libraries/3rdparty/mbedtls/tests/data_files/server1.req.ku-ct": "a1726757d49c144be980a5298af76f9ef3f885818b748f1afe1d0a642deccf62", - "libraries/3rdparty/mbedtls/tests/data_files/server1.req.md4": "c714030bc56714e45b9b8ffaa7538f4c357de2ae6bbea3c4419f65753a8a6300", - "libraries/3rdparty/mbedtls/tests/data_files/server1.req.md5": "be709c92fbed76cc46ae4e2b12ff1b07bde09372debc92108c6202c19a555eed", - "libraries/3rdparty/mbedtls/tests/data_files/server1.req.sha1": "4d8864469be7a1ff0577a864266d16ccbd1a894ea0836f8b634e62385a499b6e", - "libraries/3rdparty/mbedtls/tests/data_files/server1.req.sha224": "f8e0827e76f1c3662b76ba5d9666613eef410227838ce490cacdc56b0d2acb47", - "libraries/3rdparty/mbedtls/tests/data_files/server1.req.sha256": "a567556759ee5eb2d5885c04542b316676263179a7a1a2c86c4264bf32edbcdc", - "libraries/3rdparty/mbedtls/tests/data_files/server1.req.sha384": "a4416ad2b88b5698deec33882b31f40afe34ddaf77779966cbdd59c2ff6f410f", - "libraries/3rdparty/mbedtls/tests/data_files/server1.req.sha512": "c88adc24936119330d1e505789e7d9b35172343343b36785f982ba8219fc73af", - "libraries/3rdparty/mbedtls/tests/data_files/server1.v1.crt": "6517ab0cd96cd21c5013127ba7f259898c3f81aa75b7b6cbfa9f28db1630fc4a", - "libraries/3rdparty/mbedtls/tests/data_files/server10-badsign.crt": "45095f812487f755d770a39b79232c8e89ff7f6a090345f961bd3639ae284ecf", - "libraries/3rdparty/mbedtls/tests/data_files/server10-bs_int3.pem": "922cae9082d65b87c7e1e5f9f54981addc185de960a01a0c61b1047ba7cb7eda", - "libraries/3rdparty/mbedtls/tests/data_files/server10.crt": "9d39025aa8aa0f7148ca6c7ae16fd89a44e4b51621848deee20b54c76d4ad891", - "libraries/3rdparty/mbedtls/tests/data_files/server10.key": "603c53edfff74463bfa4f9e195377224f6980aef4f86c4428a4b119bb440277f", - "libraries/3rdparty/mbedtls/tests/data_files/server10_int3-bs.pem": "5284c74b547da5d8a09a99a8d2a18836ab514c6ab7670dea2eda9ed66b4d5fb7", - "libraries/3rdparty/mbedtls/tests/data_files/server10_int3_int-ca2.crt": "958c6953649d3315a942ef358615ba7a1bc6fc5414f7f1d17b90d889ef05293a", - "libraries/3rdparty/mbedtls/tests/data_files/server10_int3_int-ca2_ca.crt": "9da80f4918ea65e1667953ab1cce6d9191d26062cfdd401309bd8ace9ee1abab", - "libraries/3rdparty/mbedtls/tests/data_files/server10_int3_spurious_int-ca2.crt": "8505ad8872067838ccde5769ad744b1cb5a32f9299f1c34b309c4367788b56e1", - "libraries/3rdparty/mbedtls/tests/data_files/server1_ca.crt": "1b7ef4238b3f2b42e28ac470cbfe3039d77fa2f857b3503b4816cef7d4d57b79", - "libraries/3rdparty/mbedtls/tests/data_files/server1_csr.opensslconf": "58419c7a63d6f55ba0aabb18b6171c07d8a0ebaa0922eb9a709706ef08be2f18", - "libraries/3rdparty/mbedtls/tests/data_files/server1_pathlen_int_max-1.crt": "f115fe091d7615e1953d51767d1b1a4516aed46c419a059534c1def4dbf381a3", - "libraries/3rdparty/mbedtls/tests/data_files/server1_pathlen_int_max.crt": "841a694f5f1860ec2f6fa597fb16d5f0cca451ee8cd9e657e976bed6cf12b2cd", - "libraries/3rdparty/mbedtls/tests/data_files/server2-badsign.crt": "58b06c4846bf41d63dc20575398c53614cf00f5e688ad6d39e1bdacc51394c5c", - "libraries/3rdparty/mbedtls/tests/data_files/server2-sha256.crt": "91ea0c42112d1b04db1a912fd4cfe97f5e3fe19aca98572030463e57e926a12a", - "libraries/3rdparty/mbedtls/tests/data_files/server2-sha256.crt.der": "80cbc316aa58f8be722fd26b3026f077e61c82398599f9f719eade4bcd98173e", - "libraries/3rdparty/mbedtls/tests/data_files/server2-v1-chain.crt": "49e6698e16cf96a54148d9a0c26644d9854690542c2af01eca25ef23b4c8c8e0", - "libraries/3rdparty/mbedtls/tests/data_files/server2-v1.crt": "c906914b53a430b9fc1e91fcb825f6f4d362cdb59e262fb36e63f958a7dd412d", - "libraries/3rdparty/mbedtls/tests/data_files/server2.crt": "fa79509dfeee01f07bae293374f6e85754489a9e2b10411b94b436dd7121e750", - "libraries/3rdparty/mbedtls/tests/data_files/server2.crt.der": "ec410cf1ce5137ad9d36e78606fd8bae6f01afdd7fd461d04bc4a4bd7d82b063", - "libraries/3rdparty/mbedtls/tests/data_files/server2.der": "ec410cf1ce5137ad9d36e78606fd8bae6f01afdd7fd461d04bc4a4bd7d82b063", - "libraries/3rdparty/mbedtls/tests/data_files/server2.key": "5d061d8e92c246e465654ea6eef75b0667cc49cfb8f76d3b4c2f2517861f8b1e", - "libraries/3rdparty/mbedtls/tests/data_files/server2.key.der": "1820853c99779f8e6b847a9ad7fceba765515f1e6ce991a96b7420d0299334fe", - "libraries/3rdparty/mbedtls/tests/data_files/server2.ku-ds.crt": "8310936407cf3431caf33434d46150c64671a6772a7c029b709c454b36bb392a", - "libraries/3rdparty/mbedtls/tests/data_files/server2.ku-ds_ke.crt": "2efab0f798baddbb50dd74494bca3a3caf873b274cfe21ddc8f9e289c5bfdc91", - "libraries/3rdparty/mbedtls/tests/data_files/server2.ku-ka.crt": "37de57e68c4368c507a9fb73e1c63c9d4e2aa37fb768b4dda3ebba00c30f31ad", - "libraries/3rdparty/mbedtls/tests/data_files/server2.ku-ke.crt": "d1e6a649f41bd76c065bfd17197b4ccc01ded1699a4985017c35bf6573a892a4", - "libraries/3rdparty/mbedtls/tests/data_files/server3.crt": "c63b6a289040359e7403a0a93c20438f24839224b50c229f10c704b553d6387e", - "libraries/3rdparty/mbedtls/tests/data_files/server3.key": "2a67c4daedc10b0f4bad16f06a30ab5b9f401a541fb61aa4451e23479bb75d7c", - "libraries/3rdparty/mbedtls/tests/data_files/server4.crt": "00f8a69ef60c9f8d58b4803905dcc90bdfb7b8c08e3afbb5e0c942ff7085d263", - "libraries/3rdparty/mbedtls/tests/data_files/server4.key": "ed155b755deaee3b5b8dcf271b4c82368f6b143ede5a0699d4442214c0be7361", - "libraries/3rdparty/mbedtls/tests/data_files/server5-badsign.crt": "cdb30a275aa4c2e523cdac2e586a6290bd25601e09b2106648dffd651b28fe72", - "libraries/3rdparty/mbedtls/tests/data_files/server5-der0.crt": "e234e102cd8de90e258906d253157aeb7699a3c6df0c4e79e05d01801999dcb5", - "libraries/3rdparty/mbedtls/tests/data_files/server5-der1a.crt": "558f71b5b97986f1a01980d7f048139d2d0fd2644e417c17445651705d6bde43", - "libraries/3rdparty/mbedtls/tests/data_files/server5-der1b.crt": "2d839fed289ed103741b6f167672435908a6a65a0c6fb5d379678c7db7e272ef", - "libraries/3rdparty/mbedtls/tests/data_files/server5-der2.crt": "833a6dabab7e34b432e3cef2571a3592944325ba3c0c8c4999ded1e4d6e1b8da", - "libraries/3rdparty/mbedtls/tests/data_files/server5-der4.crt": "2acb5b3303360adefc566ba49475a8fd4cfee3b210e42dff654aecea892fb46f", - "libraries/3rdparty/mbedtls/tests/data_files/server5-der8.crt": "3c0ad673bba53faa3b0fc08b80f8c544afec08edc108093154b0bc716aaba28e", - "libraries/3rdparty/mbedtls/tests/data_files/server5-der9.crt": "1f85bdc8ebcd356b1721104c28154a3eb25a4fa8a659d7d9e608845a895d3792", - "libraries/3rdparty/mbedtls/tests/data_files/server5-expired.crt": "c74d074aaffbdc1cef6317e75972967108a5c1a01bdff20bf2c1a2b197515310", - "libraries/3rdparty/mbedtls/tests/data_files/server5-future.crt": "da9311feb63e909fdec49a1e0f6b77776e913c4bb12c064efaa1e28274426b1c", - "libraries/3rdparty/mbedtls/tests/data_files/server5-selfsigned.crt": "599f9beeda983e34e4ee133a9b3f4acf2a7d46dbaedf1b09feb2d3e4e50bca8b", - "libraries/3rdparty/mbedtls/tests/data_files/server5-sha1.crt": "011601f71e5332a28e4fc5149ff728dea7f125381a3d3d90d674d0099abdb3f0", - "libraries/3rdparty/mbedtls/tests/data_files/server5-sha224.crt": "372aaaa32a6852f364c0469b98ee71ff0d09ff70d50ace53f8013c3459160672", - "libraries/3rdparty/mbedtls/tests/data_files/server5-sha384.crt": "98143dac0386ec2fa472763c9c91c4395f54150a229fdf60e6d0bd12965f55df", - "libraries/3rdparty/mbedtls/tests/data_files/server5-sha512.crt": "b4c3ab59b7441ac6795009876df225a6472f7058f381d45be6c18bf94b17484c", - "libraries/3rdparty/mbedtls/tests/data_files/server5-ss-expired.crt": "34134401a22e37243d82873772b1e1ab56cba406df1ebbed9410416bf0fafbbb", - "libraries/3rdparty/mbedtls/tests/data_files/server5-ss-forgeca.crt": "4c1bc4f3305b3c115c7426c15b8f8f3a481650619aa91f779ae181c46589d7b4", - "libraries/3rdparty/mbedtls/tests/data_files/server5-tricky-ip-san.crt": "629ec9d2ca7cac0cb01affb7ffc29684060119a01fce81873d302e1b5e69fdb9", - "libraries/3rdparty/mbedtls/tests/data_files/server5.crt": "4dd04599f24f848cb8ffefa86d3f0452cf32b5471755ba569cd78150e8da960d", - "libraries/3rdparty/mbedtls/tests/data_files/server5.crt.der": "e234e102cd8de90e258906d253157aeb7699a3c6df0c4e79e05d01801999dcb5", - "libraries/3rdparty/mbedtls/tests/data_files/server5.eku-cli.crt": "2dfad57fc6830ad24fd5d5515398f58a5f78303130a122cb50c49225f5123ef8", - "libraries/3rdparty/mbedtls/tests/data_files/server5.eku-cs.crt": "b292617d34dc97975a3e598b56ca430c58b599d96cd2b67450cc5b2c79db052d", - "libraries/3rdparty/mbedtls/tests/data_files/server5.eku-cs_any.crt": "9ff857aac63ad4cfc0462e803394f246b506fa8174e3d9331cc169f91b0af99c", - "libraries/3rdparty/mbedtls/tests/data_files/server5.eku-srv.crt": "13701edcd8ae8d9835c7600415630d62fa492e6d89aa3a2552eb81e483ab5b0f", - "libraries/3rdparty/mbedtls/tests/data_files/server5.eku-srv_cli.crt": "2c70618c65d92d0185bb38cc182297e286b4926def85edab3e317d282b075e21", - "libraries/3rdparty/mbedtls/tests/data_files/server5.key": "dc05ad588945ee5771ea24f4970b79e020acfb9c45c6de9d7975b440394f4938", - "libraries/3rdparty/mbedtls/tests/data_files/server5.key.der": "916591fe3a480392ece0f0259cae9cdbc4178acd63863dfb5e8a135e5aa5fed3", - "libraries/3rdparty/mbedtls/tests/data_files/server5.ku-ds.crt": "0ecf0110cb4ffecf3de743a5effa1cbdc26fb3dc9a1bc41746f1eeddfc1712db", - "libraries/3rdparty/mbedtls/tests/data_files/server5.ku-ka.crt": "b8189aab81f627ff45c0d88445a019d7267b0a3b0b44e75a8c7de8e729333034", - "libraries/3rdparty/mbedtls/tests/data_files/server5.ku-ke.crt": "f72f8d5333e73048ee506e1b3c76f6f8cc06158871a409ba93a15788da867171", - "libraries/3rdparty/mbedtls/tests/data_files/server5.req.ku.sha1": "fc5f1a4d33ade85706572ffe9c6d3e3d3084b7f68f82d1a2626b94349b059987", - "libraries/3rdparty/mbedtls/tests/data_files/server5.req.sha1": "4e252af88001daf597ba2bbbe7f5d0f2d0d0d958df49aba6ceb8595406fb536b", - "libraries/3rdparty/mbedtls/tests/data_files/server5.req.sha224": "e89fd34106cd5505befd4a0df08efa72605770d12d9592de71995f0d258929c9", - "libraries/3rdparty/mbedtls/tests/data_files/server5.req.sha256": "3067b803538b7310eceabbe2588d4a3630461b324cfab9e8462cc6e6be7f9ffa", - "libraries/3rdparty/mbedtls/tests/data_files/server5.req.sha384": "3422248ca366da250d91c237b48281ee186dc4ff1ab2865c870346bf41c36601", - "libraries/3rdparty/mbedtls/tests/data_files/server5.req.sha512": "264839b2aec27ccb1f4ed1770c10e4cc8f849f6d1098196e966691b55b9a3e15", - "libraries/3rdparty/mbedtls/tests/data_files/server6-ss-child.crt": "dc7646970447182dff4e8fcf030d649bef0d9eb3300fb0cd3f4909cc6621365e", - "libraries/3rdparty/mbedtls/tests/data_files/server6.crt": "e0f621487e85868e8377a2f41e4cd6fd135ff43c7ad36806c2edb9f1322f3fad", - "libraries/3rdparty/mbedtls/tests/data_files/server6.key": "2c6ba41ff6fa21bd12f3905eae7e39a7c45f26dc35b14e7761342dc50589ea6e", - "libraries/3rdparty/mbedtls/tests/data_files/server7-badsign.crt": "da4e459260611030752aa4edc491e3522d431566183fda7a14adcb1df1bb5f07", - "libraries/3rdparty/mbedtls/tests/data_files/server7-expired.crt": "c89a494df24636a1a78e74c1ba95cbb4bd15e7995b12a443565c7c4c0df22d5b", - "libraries/3rdparty/mbedtls/tests/data_files/server7-future.crt": "4e7c3c756e04e1b125920b9d1ac768205080e329b68e865861af0bcba59fd4bf", - "libraries/3rdparty/mbedtls/tests/data_files/server7.crt": "16a50e25755765652cb577f39fd20b90c48cb1ffef614826d97c16a9bb9834d5", - "libraries/3rdparty/mbedtls/tests/data_files/server7.key": "603c53edfff74463bfa4f9e195377224f6980aef4f86c4428a4b119bb440277f", - "libraries/3rdparty/mbedtls/tests/data_files/server7_all_space.crt": "9176e45bdbc71a9e3305d4aa723bfd577109732294894fe474d581daf9a9978d", - "libraries/3rdparty/mbedtls/tests/data_files/server7_int-ca-exp.crt": "88be293184fe59904bd35049c82c5cdcccc3ea49c3d8067a5908ceb52d1808ea", - "libraries/3rdparty/mbedtls/tests/data_files/server7_int-ca.crt": "ced5f0929905dd533928c1ca10c725e230e265b099a737c6dc108b5cd4efc272", - "libraries/3rdparty/mbedtls/tests/data_files/server7_int-ca_ca2.crt": "5550b67bd40ece1b08e197e32905fbec81ba858e1490af374684636db0eef6a2", - "libraries/3rdparty/mbedtls/tests/data_files/server7_pem_space.crt": "5b9a16ae6767cbc8f9aca55bc1c47f9146c10f8d6a1b602526cf93a40c0058a2", - "libraries/3rdparty/mbedtls/tests/data_files/server7_spurious_int-ca.crt": "8f1c815e02fe3a53f6b460271cb9562858e5cf6013d155c939974ca852974720", - "libraries/3rdparty/mbedtls/tests/data_files/server7_trailing_space.crt": "b82ed11055d227c7bc0a0714312279879ca63230eb3f1fd8117dca9c90d3cd69", - "libraries/3rdparty/mbedtls/tests/data_files/server8.crt": "3b86f7b1212e67691abba3aab02b69b91e2061e92c1c88df6d6404b6dd748ba3", - "libraries/3rdparty/mbedtls/tests/data_files/server8.key": "e8dfd0a91df11fc13499c9a63ab457861283667c44682c2ed10329b0e406c460", - "libraries/3rdparty/mbedtls/tests/data_files/server8_int-ca2.crt": "737c208b5a67aa359c7e87834847974ca6aee747a70f5ea1b41a78689865c08f", - "libraries/3rdparty/mbedtls/tests/data_files/server9-bad-mgfhash.crt": "b943fb9e78c9ca61cbc69b2f00498916594612d998e407def1245e82fa1a7b11", - "libraries/3rdparty/mbedtls/tests/data_files/server9-bad-saltlen.crt": "7f96c87d95cc483303109653f2f678ed9a20afef6eb2e20dc8e06d35294b4ca6", - "libraries/3rdparty/mbedtls/tests/data_files/server9-badsign.crt": "b03ad81eb75230a5d415ba3294306bed0e5ee9c0752f4fe50a547cf579f92a65", - "libraries/3rdparty/mbedtls/tests/data_files/server9-defaults.crt": "10d1418f03ec088cd9dd0eda38613f1b8aec31fc1789a98784e827311a6217d7", - "libraries/3rdparty/mbedtls/tests/data_files/server9-sha224.crt": "1cb614d26ea2c106ddc50a63d25464b5f731105e1c038107ffa1a8d0113c1ffa", - "libraries/3rdparty/mbedtls/tests/data_files/server9-sha256.crt": "1d479c40bdd65a551bf29ddd30d681e04ea55467e7c39cc762767b64ebd9dfce", - "libraries/3rdparty/mbedtls/tests/data_files/server9-sha384.crt": "2e22374c8a68ebbbe5df9abb61cf3b57ced80f600bbc51b1480b4f46a6fc22c9", - "libraries/3rdparty/mbedtls/tests/data_files/server9-sha512.crt": "9500e7d5a18f802c0ac070ae5a0be82e84c33b54f27ff096cc18174952157044", - "libraries/3rdparty/mbedtls/tests/data_files/server9-with-ca.crt": "6668d0e32f88b35ed05646b35aa04a56afb5121528e1cac22b01641bf253e192", - "libraries/3rdparty/mbedtls/tests/data_files/server9.crt": "8d3a4319e7c4009461ff3a1fb013bef98872d05c714651e04d470220d9f1268e", - "libraries/3rdparty/mbedtls/tests/data_files/server9.key": "41227afd38ca676c904ae59589943b5f57576e72b72c98d8f503f57c8ce70552", - "libraries/3rdparty/mbedtls/tests/data_files/server9.req.sha1": "0711bf87fa40e92fe655f4ca17a11b712e2f31da7b7ad4b4745114db520fecd7", - "libraries/3rdparty/mbedtls/tests/data_files/server9.req.sha224": "6adc1a5b3460980248f4a0291456c61e9045a07458c3aabeee6487dc2740a19b", - "libraries/3rdparty/mbedtls/tests/data_files/server9.req.sha256": "e46e01e6fa8ce9c758b1138286ee6b766d0332283fcaf69395aa606c96ba64f2", - "libraries/3rdparty/mbedtls/tests/data_files/server9.req.sha384": "b767dd39d999e3f07325521e7b0b0a5024e9b69fc0dac6bb1840dc302223f06a", - "libraries/3rdparty/mbedtls/tests/data_files/server9.req.sha512": "1a94e92f3d6a284f1c5a7ff48c31b496a85c0867eda5e5111ed6df150515afce", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca-alt-good.crt": "409b7203b6d92795221b303e79bc734894edb065987d57583da537da03732141", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca-alt.crt": "f788c9127699eb9430855561870d6392e5d6c7906e5e8cb6c216b8bf82501442", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca-alt.csr": "a4e161b4492641d2cbbb83254640e244ff0f47b4aabe175f96a8605d1012bf2c", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca-alt.key": "f3a266be97499730ffc421332f58ccd4819993a882a30e55519927cb25c4488c", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca-good-alt.crt": "7e3b5d9ef012b53937f4035023b6edbf308452ec0c064fa8aaf1df46076e4ad2", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca-sha1.crt": "b9b77eabdfa7a0d01e7949778e4c2852f387e4cdc163420c3967d46fac6aeb94", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca-sha1.crt.der": "d2d3e6d9d8f19ad1511dfbcf3847217c5a3f3b42837d1eadfe75485fca944fce", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca-sha256.crt": "e103df1a2629fab1f0811f7ac64f03900a697e8e7a84dd69deaeed18d74340b4", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca-sha256.crt.der": "1ccfd719021988e76a7f5f5425b802302f910dc5a19045ee4096ab7c5e7ff633", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca-v1.crt": "c20e614640b774846bf8362715f8bee134d330c6ef17278386d265fd02c7c895", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca.crt": "b9b77eabdfa7a0d01e7949778e4c2852f387e4cdc163420c3967d46fac6aeb94", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca.crt.der": "a34cc17e86a8ea89113cd1b193adc2ba80559a8158bdf52c7186ebda8cbaf3c8", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca.der": "d2d3e6d9d8f19ad1511dfbcf3847217c5a3f3b42837d1eadfe75485fca944fce", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca.key": "ea70a2d032b80892abf2fee8676258701fe47a78c31e379fc73542925a783f06", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca.key.der": "77ffe88a785127deb761570bf12fe72fb52bb791e9e4fd5a821b92737d814ee5", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca.opensslconf": "00e1ca126a65a76d040ee79ec865b37316010c6a777c6d39b1f4630a42f15c3e", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca.server1.db": "486b555d2ce9c6d70ccb875c08c87a5fd4bf3dd8d0a268a662715b71db03553d", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca.server1.future-crl.db": "edf89dc30010a965cdf2e80eec29bfaeece5f878c16e4874e9f786f70c0a8864", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca.server1.future-crl.opensslconf": "a4a23cc77fe57f28fe36d4cc613c9d8ab267677f108ec2a70850971627a063b5", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca.server1.opensslconf": "4c84429c44ca052fa17128e689edcdb73072c37ec683fb9d305d60b5c3c10ac1", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca2-expired.crt": "84a47b1a228e8195e7880bda80e41e5f5e56a138f63b6f385c16b4438cbadbdd", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca2.crt": "e75fcd2da099aae03c1f6f5b6e96e3a3b635dea7303a7271803b4ca2f263e9da", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca2.crt.der": "529e5ae24dfcb7f56e6388d6c4be7f9db2e4282c475f622493b1ac777dae0760", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca2.key": "72769bdc9f54e0f2c4a8856bcc4545fcc769ccd77d26f7e35fb3f64419a7df35", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca2.key.der": "d6a5d0b3c94857d0a42032fc9ccc3dc8056403d6c893298f99541972238986f8", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca2.key.enc": "18b93a1c675861bef54a47c044d4431133b5e92c54e433e1d114fbc43871ef08", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca2.ku-crl.crt": "0058d9988640708360c03342a06868b9f0111ee5c8d31bde3f6c163208918042", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca2.ku-crt.crt": "5d529c056aea0bc219f0ea9b7c0deced33571dc0b7939c86b995134f3db19b52", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca2.ku-crt_crl.crt": "2b63ebb849edfd60f449bdf8e334341f2db337f9a8b7cfe21912e01aa4ca05be", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca2.ku-ds.crt": "4a98027dd3b7fbbd5b593a5fdf44e8aaeb476fe4078ca789015965f26b91f710", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca2_cat-future-invalid.crt": "0c61f7c05dc549c8007140d2329488d49966145a023fd19969675eff7df13a5b", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca2_cat-future-present.crt": "83e58e6f98aa25dea60db91ff4c5973cf01fa14f282fb66e11e725cebba456f5", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca2_cat-past-invalid.crt": "f65a2b4cb1c4fceaf26afa3177de2bd21bfc5ab075566f1ea13e81889539bec8", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca2_cat-past-present.crt": "8edfcb79e78122a953bebf1dfa78c69798d0fabd7835cb499fc12b9eb7edb839", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca2_cat-present-future.crt": "b39592be0ea2f71b8a36f197001cef05ecf9455e0f3a85abe1267ecb37b00290", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca2_cat-present-past.crt": "40ed90361d82c9dd008b5eb7dfc909c6a3bb9d42c86833e41a582d4ee12fec35", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca_cat12.crt": "ce16edacc0ff4c43d20005b8c31590a487dcb6bc725be87f83a14fa431f47025", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca_cat21.crt": "a52cbc806866c3f738c8bceed914877b1527c2f006727d7953f7960a367e9454", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca_printable.crt": "5aab65196cafdd30de7d537d9d6b99d98afa0d3492bef1c4f1f166dfbc3ac029", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca_uppercase.crt": "9df5f9ea50c0199e3e138ad4dbfb6f06c0867347a2c1f64230806455f073aa68", - "libraries/3rdparty/mbedtls/tests/data_files/test-ca_utf8.crt": "dc8b6956c671569dae6923c19cf743868fff67ad61f81d3eebdb73e4b40f5ba1", - "libraries/3rdparty/mbedtls/tests/data_files/test-int-ca-exp.crt": "a589337c4557cf2b2363df7a6af92cfa942b4ea00b7a17ea549e21159052fbe5", - "libraries/3rdparty/mbedtls/tests/data_files/test-int-ca.crt": "0c4225974cf3819eea282d0352387629070479b0d7182f4407920984e82b895d", - "libraries/3rdparty/mbedtls/tests/data_files/test-int-ca.key": "c9ce39dd7a23fbf4f10368519fa23bd4a34f32d6015dde5c4042ba477410133a", - "libraries/3rdparty/mbedtls/tests/data_files/test-int-ca2.crt": "62a6a1e32f2d1d25d9757acdaa1c24694ad257f23becb5c2e628e52aa26d4312", - "libraries/3rdparty/mbedtls/tests/data_files/test-int-ca2.key": "97ae364e686400105ed7ce07168ba7d64b7797e27b577ce6e1952e01f3ebcb0d", - "libraries/3rdparty/mbedtls/tests/data_files/test-int-ca3-badsign.crt": "e76023d311aab1e0882e36764789f1dc6f007d0220fc455fb282e96c46744997", - "libraries/3rdparty/mbedtls/tests/data_files/test-int-ca3.crt": "75575083759249bcfa4fd2a562b72b2503c0be2bd7dc1df22f9cee9d2bfd8ad5", - "libraries/3rdparty/mbedtls/tests/data_files/test-int-ca3.key": "8f54c3d71e1669ec7f3f2a1fa835a96b215ff69fae9a7e7081780569ba8e10a9", - "libraries/3rdparty/mbedtls/tests/git-scripts/README.md": "5cb58f97bbf4d2600ebcfd9fe31d7db5f85f346fcaad052f36a09bc3d31000de", - "libraries/3rdparty/mbedtls/tests/git-scripts/pre-commit.sh": "f23674694149984f480e253528d208f192f7f4459472f8ae11ef0f0ac753b06c", - "libraries/3rdparty/mbedtls/tests/git-scripts/pre-push.sh": "13958629764dbd9ae9ac2c02f50c1f9e135b6c3f273ca90c74025c9efdb65389", - "libraries/3rdparty/mbedtls/tests/scripts/all.sh": "071a164010e99f1fd94894071f89680c33082d82afafeb21b5042aa78e5108a1", - "libraries/3rdparty/mbedtls/tests/scripts/basic-build-test.sh": "f948f4c0a39e6542880a9a16f1b9140545475224a2ec792058fc82749c235411", - "libraries/3rdparty/mbedtls/tests/scripts/check-doxy-blocks.pl": "c4748b2bde10d25554a0cbc0fa255d2b46a7dc9846b9ead54cd1e6c4bf2a09aa", - "libraries/3rdparty/mbedtls/tests/scripts/check-generated-files.sh": "e6c811fd663403a6aa9067def43f6f3a5335999a14fd4991bd2b3c891c3e66e1", - "libraries/3rdparty/mbedtls/tests/scripts/check-names.sh": "4298cf33adf30b25e022a213a279aaa5cb74d25da7be3660c89e02c91658c217", - "libraries/3rdparty/mbedtls/tests/scripts/check-python-files.sh": "f6e4aff8d6441fb67671a2578ab6f1d5ce14f404fc094f0233e82220ca467ec6", - "libraries/3rdparty/mbedtls/tests/scripts/check_files.py": "2b1057d5942e9642cb51cdc768f886d26a1670d8d3cd8c936b52f98dfd4e497e", - "libraries/3rdparty/mbedtls/tests/scripts/curves.pl": "4ea7fe6fbaa6ce45b6d57df5f2b308457b1f534e75d5d85c89fa8ae2a0770e52", - "libraries/3rdparty/mbedtls/tests/scripts/depends-hashes.pl": "f70f078e9bbe7deee7fe21b9852137ede88757765b7e01ec683a949fa7a9d6ab", - "libraries/3rdparty/mbedtls/tests/scripts/depends-pkalgs.pl": "f0683ac4044eb07846cc34c321a48fbdbf3e379666c1d7730575fe8867a32c03", - "libraries/3rdparty/mbedtls/tests/scripts/doxygen.sh": "338d23b928bb53b59004360e8b9e7c78fadf1fca23e4a76346ad8dff99f1f1c0", - "libraries/3rdparty/mbedtls/tests/scripts/gen_ctr_drbg.pl": "903d8741d2ee28840ea72eafd428a9c7676efe52ff96e1643f85714a7a353c08", - "libraries/3rdparty/mbedtls/tests/scripts/gen_gcm_decrypt.pl": "8f9e3dae4a67e4d58f86d31c19f3a0826f97c35893aa61a40acc173d19f760ac", - "libraries/3rdparty/mbedtls/tests/scripts/gen_gcm_encrypt.pl": "2287646833c199f3bb873e8737d82f9e270826401c15bc346e6804ea100401fa", - "libraries/3rdparty/mbedtls/tests/scripts/gen_pkcs1_v21_sign_verify.pl": "3605d8b88c1efaf4242a63400d6e0cebed207028d455e3d18d29e94bf3da7ab0", - "libraries/3rdparty/mbedtls/tests/scripts/generate-afl-tests.sh": "ed67c9051896567d42a343a412e4b1be6e644d5174cee0c6fa0ae73ba232db15", - "libraries/3rdparty/mbedtls/tests/scripts/generate_test_code.py": "e024916298f748d4df2f11b00aa8fe3678769b51d37618636d96e092f7e363d5", - "libraries/3rdparty/mbedtls/tests/scripts/key-exchanges.pl": "36daa81f400913d98a25da9fe672ee9db85569c6e1b35de98e9d89950f711c8e", - "libraries/3rdparty/mbedtls/tests/scripts/list-enum-consts.pl": "de80aa6219ad68e81dd36c23d77a06ea28396238e05cb0a8a4b9160109d4202d", - "libraries/3rdparty/mbedtls/tests/scripts/list-identifiers.sh": "b820d00a5c939c6d4bbbd808833fb443a0239abd4e1baffd6e0c878276b8acbc", - "libraries/3rdparty/mbedtls/tests/scripts/list-macros.sh": "ff23c7e511cc2e64a68d6bb7a37b02d2aca869fa547502866e4412489bd929a0", - "libraries/3rdparty/mbedtls/tests/scripts/list-symbols.sh": "641d6e6413ed422785b8f52e49f53f5fb3939569152bdaaaacdebad8fa67d0c9", - "libraries/3rdparty/mbedtls/tests/scripts/mbedtls_test.py": "5df6c85e0620fea1d0d6c87c15e46dcf58b8fef9904ccb0f4838d9c86da6038d", - "libraries/3rdparty/mbedtls/tests/scripts/recursion.pl": "b7024fc95493f9ebce6cf2cd017c8756a7da0566fcc23a46425fc88f7e9528cb", - "libraries/3rdparty/mbedtls/tests/scripts/run-test-suites.pl": "12bcb8320609a55ea8942480ef7e9e73b5a640eda594547c751c85c0fe6d208f", - "libraries/3rdparty/mbedtls/tests/scripts/tcp_client.pl": "2b03f0835a0aafbd6d50f1014f9ff57fba53c538590081b52ece9e52cf78544b", - "libraries/3rdparty/mbedtls/tests/scripts/test-ref-configs.pl": "1c8e34ab3666901668cbb89f5d5be876cebbee6e5aee2f7d57dc08c2333ed64f", - "libraries/3rdparty/mbedtls/tests/scripts/test_generate_test_code.py": "0d8b6ff7553eba6b17c1085a30e8b6a376388e7091541feca5c48ea10144096c", - "libraries/3rdparty/mbedtls/tests/scripts/test_zeroize.gdb": "517e0ee83bd5a2cf1fe848d7d7d0284e47f4719cc468688deac2a6cac91e6b3f", - "libraries/3rdparty/mbedtls/tests/scripts/travis-log-failure.sh": "9e9bd2f57c0ce56393060559ea70ec3b16465a6af0eb152aefac8f226830bc51", - "libraries/3rdparty/mbedtls/tests/ssl-opt.sh": "ca3e4e1c05cc3621cb16c00a0b6ac198f6e079db3beb5c011e017caef6d949dd", - "libraries/3rdparty/mbedtls/tests/suites/helpers.function": "9d8ea2040ba123bfaf8e5c63b3462d905c3bfc33172174a5033c2ba793ca291b", - "libraries/3rdparty/mbedtls/tests/suites/host_test.function": "a033ae4aa02551ce619af1ed070e32b37e13bfc99e5d9ef9476e96f977ea790b", - "libraries/3rdparty/mbedtls/tests/suites/main_test.function": "4af28424403a3a1e0b2fc7f1cf51e8c015658b87296d2adcde863178a70dc4a3", - "libraries/3rdparty/mbedtls/tests/suites/target_test.function": "ef13abb504d8c88266c0d453a3f918daf2a275bf523d1258c5f2cefdc51b96fa", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_aes.cbc.data": "48b7bd70a700c75132cfe1b67fcc93e0d27c7da5cc16903ab67036c58d7d72a3", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_aes.cfb.data": "446c03b719b839834d92996a3dc3d85c0909b079fd7fc48eab1a74ea025de5bb", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_aes.ecb.data": "790180492878f22a4741e57bd4a397d6ab0130c420b4433a3dc53ba8c62d99e2", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_aes.function": "814609d814566e6b67112d3ff3103932366113fb390bc81f3933a28368b26763", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_aes.ofb.data": "5a1aa338d7dd051378c7d44074b29bc1c709d373b89dc856d3d7a345feff2830", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_aes.rest.data": "8886e8458eadf180667a0f46b0b1d4f420ee4b7bf6065420bc5da0d10dca8aba", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_aes.xts.data": "7b0275e8c85574740cd7e8e343ac39933a4220567a6a4fd601ad92906104a5cb", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_arc4.data": "578845eae4e63591029996b54e83aee7ac3212813ea3ed2e3dd095682f074ed9", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_arc4.function": "6d51696599caed1e3d3959c7b4dbe0f571f944a80d2dbacbe63c70e7906d1898", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_aria.data": "07824eaf3ee8b8f61a3df6d45b38210b0a8219ece1eb46094e600abc2fcfef71", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_aria.function": "898e11e4f5b0530d2e2c7e4acbbcf6a25ad59734e3f7c5839c11cd1d92f6736c", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_asn1write.data": "b11c47017d072c185357e1359403fabedb32c0727be8ee3d96b5b0602fd04c25", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_asn1write.function": "ee6eeff25f9410382cad38e6eeaeaa5eff90f9136e1bdebb1afa360c6b4fde97", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_base64.data": "871b00c72061ca46f850be9b9df546c18b69e5c18e4eb7b6183bc63723998bd4", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_base64.function": "e7f0fd3148a3cb82e0fed0bd91113a42cd2200fb816fe79e5d719ef3eb9388c8", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_blowfish.data": "6610609da22905fccfc33ceed0dd7621cdf692f95a9b5d1ba7608eecec4a28eb", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_blowfish.function": "8a59bed4711b3820f725210b6e8b0a0061c1c7bb2c49d9c2aef37da969a89a47", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_camellia.data": "3d38d77a108a94bbfa676f471d02cf99d05fb56b735a3470b28bbdf434bbeba5", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_camellia.function": "371c06424aa04b098667611fbcab3a8f177f7e11ae7cd5245fef3fa84bb4a466", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_ccm.data": "4cb0c0a5071230f38627bd90fb2002508449d178854ca227c59118d6d205ea62", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_ccm.function": "f8128164e537a07c5c4013c2d7a2b3e21a77b9b5cdf100c45e19a34690741209", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_chacha20.data": "8163769ce72adeea70077290eb57d3cb5b0ca20a8998c67b692588850b827099", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_chacha20.function": "7595481d6a34b66791357923dfe0981f552cff27ab2b4385efc1ecc91de15c67", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_chachapoly.data": "c6099c13799bec5a7a802c9ac405b020aca50c4e98d6e8fa3c3b68d8120fcac5", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_chachapoly.function": "6659143a685668d432415c0803cbe9cf27030024fadaea1af5b81b16bd87579b", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_cipher.aes.data": "7b6631fd7727a53a6f3c264a1fcdbf99e62551b1a9f36cd68ee10b15eaa889c6", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_cipher.arc4.data": "80d8a4a33618ff66ec39cc9a73c02021142d4efa444d8c9f86b8223e198d238c", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_cipher.blowfish.data": "04a5fef9e21db1c64e8436028d2ec2db5bc46d9e2fb3dbac9416287b40d200a6", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_cipher.camellia.data": "314abe489a8bb4b944e158dc3c730b63d52078c8c9db2b974dfaec818f7584fa", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_cipher.ccm.data": "cde33abc7ae2aab86b3a08cfa1b2e96f306f01d276b9ad2df879b7dc992bd3ca", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_cipher.chacha20.data": "6e31de18006c045b6718b2b40911036fbda16f2d1e62f21c986aeebbac5194ed", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_cipher.chachapoly.data": "24688dd7cc2ff0c16bd22dd07124c1b7ecbba3e9509cb91eb566644351dbfde1", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_cipher.des.data": "06a94dcd718688eb443999f3374e4da1f00150ea64aad5ad8c2179b26249161f", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_cipher.function": "bd5fe38e886e705b6ffc0abf3ef479f6d94497a68a82022becac44131d0401c5", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_cipher.gcm.data": "32da5ca9431f8f98f47d3dc48cff64863dd85e8858637fdfe14ec58d611c395f", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_cipher.misc.data": "68bc609d5bfba474629274cad78555a198233100c045a828bb44f764a8902594", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_cipher.null.data": "426b27e3a22860b47c05c919749b80d08934160da3dc51867f293718292d5b7d", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_cipher.padding.data": "c1f9824657b118e8e797db09b3f7833eb1444b82a287e0d4b9f22a99d79ed776", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_cmac.data": "947b56d2b8ab4e11faa5248f764634173e4ea02f1a9b2d2b10a957d7e38c9ce0", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_cmac.function": "c6629890da1216133a6baf3d14b4d4f72082e156fb41f047d0bf99c066a26239", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_ctr_drbg.data": "76d866177700768f84ee5f5fd2e844834137205ca7d51d788b5bdb6f42ce35f5", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_ctr_drbg.function": "e1e6998d762340945f60a772e213743ec283b4588254e166160844ae172ce57e", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_debug.data": "d2203e242b911715b3a13c9ff60f09a52aeb8947d5d012962262c041fd0f426a", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_debug.function": "18f43709e2a31b7e871cd1de2d4914a47be901f684627e60b47fce6e14f249e9", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_des.data": "99b98d62dd402a10916164d05b963d868b27fc4e61c324f3d183a6e95a6c6ee2", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_des.function": "471881a2baf2de59882234adb3fe0c3f089a43b71802bf7f89f3fc6ec50d778c", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_dhm.data": "9028eefe36def9c04484c4e8ac1f58b5e5dec97505d8e497162ca2d3447c3680", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_dhm.function": "e2de1a546db80b8690aaeb9e5dbd389961464aa1d3021e9eb847763876468ee9", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_ecdh.data": "d57d20ae4d9ac83eeaa79056b0d19fcc1cedb9eccb0c752bf69cb9ee132fa932", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_ecdh.function": "e823742ad8764e178f68c38bc246c9ff07d798b83191a77a4066fd6a99b4b299", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_ecdsa.data": "999f237e9c80dedf3ab1857a6091ebc4ca7590ade23284e047e11d7900cc4469", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_ecdsa.function": "825ca556f1c278cbfe8fd14d61da2ef1394becd0831f0630ca0a8ad3fd42f9fd", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_ecjpake.data": "75c1f08c6f47401c222ea7dbe5ecefe738fbcde941f2322ebdbc7dc764bbac42", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_ecjpake.function": "541c3ae8847f680443ca7a3900ea188b26b3698d8c99fa0a63d7cfa21bf5a050", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_ecp.data": "d9f2b23fee390e4c5f3305f793e51e6994b155b22be9fa34808525c06a56f327", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_ecp.function": "8e643a6cb9e2e6f004ce10fbbfcae7be257ce2b56fb06ac888cdc9f326708cd4", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_entropy.data": "744ba90615f31418d5f450a61dffe38dcceee80222db9a1db7b789e199fa244f", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_entropy.function": "166f24440b92410c0ff58440e4ee172ae03adce2be711aded189f7dbc7fb328d", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_error.data": "52dcf2be05c9a615b859e0328cfc142b109bebdf5de499ee167f41bd02885cd4", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_error.function": "36e0e8637fc05a1a5efc1ad227e042e4e95d2ea1141b5739ebd97016e45e8ee1", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_gcm.aes128_de.data": "1efc1051eb12466eb65428af634140e9a41ac5acf5ec4cc3b5b8ae0e3589e300", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_gcm.aes128_en.data": "2dc4d3ce56e613e6169d481a9b26fffddb1b763ec9fba78f446300e658b5294e", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_gcm.aes192_de.data": "5cbdead079fc4c269ef4322623179b2e60ddfb1b4390cabf5a43576fb614792b", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_gcm.aes192_en.data": "3877cc2a6f10824214508427d824493ac6b8df3ef26143bf2ad95356f49df46b", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_gcm.aes256_de.data": "b581d09e17f5db4914a8678b41ca3611e9c887358a0d8b0b3cd11df1167591a8", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_gcm.aes256_en.data": "fce4bf28915e0c3009b0b4b74da0155b6c2e2cd7aa16b1087bffadcc3e33981e", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_gcm.camellia.data": "4aba96c85717d9e7504f4664b55f47bf8703d5066518d76946f70a6ab3831afa", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_gcm.function": "9fe71a7f00bd7110beaebf3d5c0380d70c40a9ca353bc38eb79956e7473017d4", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_gcm.misc.data": "0b41ffc8013b88064041ec52ee71b346a1f596797d325be23fe88ad6cde6ae0a", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_hkdf.data": "3670baeb5ba65736d7bc42e010c9a58743f6088a5b5c792a10dc1636e5e613c1", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_hkdf.function": "d473ce6532e44d37a45cad36d0f1b071bd9e8eb526740b3fa367eb86496a8a87", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_hmac_drbg.function": "53fb9dc095657edeef3be66e5e1862258f267c99a7a0d340119f65d43f09e0b8", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_hmac_drbg.misc.data": "fb7d852effb65f797c59f9f169cd54226389bb0ebd8836e969b095b4a2ca40f6", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_hmac_drbg.no_reseed.data": "f87612071538230adf2cb2eadbd169032c870c86d7ad321287947da4b0cbfd3a", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_hmac_drbg.nopr.data": "ea197b2bea57bd7715ae41212c2c09904c3d6a95ff150e64a8d93ec5a2db7866", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_hmac_drbg.pr.data": "d23eb1828c7db2a2fe39790bfbf04198c215822280bc3708c186769cb6a65e83", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_md.data": "c54e26c6922d0730e2e7096c3575c0b2001999932b2e0edf6c53ae4d81e32e01", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_md.function": "21b374bece408f3ca6f6202fb9a480dd06279e11101648827abd9908cf9c0033", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_mdx.data": "dfe8fea65aa67aee073e4475ed847be8793b72878bf68ebcd3107cf74de162d0", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_mdx.function": "97f071e3024351a1a440b9699c8618b2c0d74b3e3d8275b32ff052d884b296ac", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_memory_buffer_alloc.data": "c03d0445d0d702b8bdc178e67b14479b09e7ddbf89884e64d3b557ed9f08e770", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_memory_buffer_alloc.function": "3b23941d18171c2a0d2ad8d0baafdd4616df7f05ec102d6cd2f9463cd327d7c9", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_mpi.data": "825de92647ae59dc2813896dd2386c0cb4b29ff1725736ee04c465be0578665f", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_mpi.function": "2f9f034e65fae011818ca834655b52fb7494c4e480ad3778b338ffa74b8062ee", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_nist_kw.data": "c6ca21ade49eeb1577efd2c0e97f13a150bdeac7fe7c078cac869dc3eac324c3", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_nist_kw.function": "778b0257d8dba1a0b3e23d8c1cd2af8c0f27241f90c927b0a979c21a4baa57cf", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_pem.data": "68aabb6911a63e45181ac774cfd0b3830874f4122ae26dedc1b7ae58860a597c", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_pem.function": "a4f8e7937f721c6987672c451b853891dbd1e1a7916a5ba9d8289be920c38b12", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_pk.data": "4bf2ee81b7786e7a0cfa0f2458c309cae4e57359be8f2762a6a285bee630412e", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_pk.function": "d737a0b4314c3f0b827949088d632a46c206ec9961b924ba42cfe521aba60643", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_pkcs1_v15.data": "0567ec6c611cb0fce56b5de4d872070fd83c4d0a69f7c6c8ae1379b59bbbbcd6", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_pkcs1_v15.function": "018ae0c21a5bd71403109f327a53db3c65e3b510074615299af0366a94f74b31", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_pkcs1_v21.data": "b744ee7b5a9ee3aaff33beba47966c481a3e04a13a141e0597918d41aba2e65b", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_pkcs1_v21.function": "742e6aec71efff5d1e7dc959ec2c99b9ce6982684c9fb236fcd8dd433fd4c503", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_pkcs5.data": "e07bfc8f3a1d4b64d7ec48817271a9e8efb15fc7afd38fc2d113e3cca6ff2324", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_pkcs5.function": "b270e4910766fef26639d55a46bacebf835f81722d1aebb87e0e96896522d314", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_pkparse.data": "724b70c9cb88ae8a0340de7bd0fce0a375d1110fcc55a8f91c34b5ce6c01eec1", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_pkparse.function": "2923568d57d5b9035c07d35b2680f33995f0bb680d95e4bf051c15d99481df87", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_pkwrite.data": "f8a8298c71f150c92cbb03e1d4f1d3e44f9250830254ae9d53ea60190ca7c00a", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_pkwrite.function": "8173093c4a9304683c04b153a1a859b6864617990d5993cc0a6a89e4d1442b82", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_poly1305.data": "8400f29de180cb267c3d859751a5fcacb7229ad74d01f4f3510b816c31cbe28e", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_poly1305.function": "1d11c12b107ff5a5fedc17f884319ed2448dfd7653c1a75539b501557004e20a", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_rsa.data": "0dab4e56d6a60853b51ffa68f3877ff837158540af482653552142628566141d", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_rsa.function": "9d9de755301c97415442bc4c04eb6f218afbb0c7ae3bb823787da7d357350989", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_shax.data": "3cb81f31f418afbb599ba2a4ebba448118258529b54dad4efc4ada9a572f4071", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_shax.function": "42bf445bb76dc2a4d670ada1c6f596f9af021ac91cdb289013098eb8aa7e7b6e", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_ssl.data": "b1efce35b0a401eea4efa281a45adde4990cbc7842115e45764b04634fc23b80", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_ssl.function": "e2cf91110ab2c874f92145f930fd14cf6e2b85012f9b2f842698214eba989fcb", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_timing.data": "993181c28e523e656551f6609a01e84147eb38860acb9390f0a6e3335043652b", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_timing.function": "0b011ca1d13031e56211afb7dfb55ea4e8a1f9a0e46797dbe47dc12b9426b4d5", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_version.data": "d0a5d0fa4b0ab50162d7b59c6f54fc4957be0826653320a02bf0c82612c42ffd", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_version.function": "8b98758e5787c5f515673b17aad2f472b9068b6763ac9aadd8e0bf834c327f78", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_x509parse.data": "5ab86242589441ab2c39fe18b20b0fb0154d83820312dd9cf8d70466c4e8786e", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_x509parse.function": "1eac39f6b7be1f527fc4fea4cdb92bd4d67a3141311ea766a43ea276a32f7d43", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_x509write.data": "e60de9c4eae061cf290becd9d18b41fdd481eff89ce881eb0e3b7a8609568390", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_x509write.function": "f3b3fbcd616ea3e236d2f9356898a28c7cd5cbbf39744b9c8ceda1965e8c5be5", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_xtea.data": "017f8dd2c0679813a57da016c74cb64885e30b8e77407a2943404fad7088f8b9", - "libraries/3rdparty/mbedtls/tests/suites/test_suite_xtea.function": "f66b9841ed246d5eb49127bdbd987c872bdce3528a11898a5910015f908e856c", - "libraries/3rdparty/mbedtls/visualc/VS2010/aescrypt2.vcxproj": "043417123026fb4ecf7feb7fab9e0de963267db1e99a2f84377e32f237b8045b", - "libraries/3rdparty/mbedtls/visualc/VS2010/benchmark.vcxproj": "34cee46f91829888dae67a0bad640021ae3dabbed980e48e8f44b06d243c74fe", - "libraries/3rdparty/mbedtls/visualc/VS2010/cert_app.vcxproj": "9580c3f083cd393a5e2226e7fde83ded1bba1d4e8808cc28d31d2eed572cd9f4", - "libraries/3rdparty/mbedtls/visualc/VS2010/cert_req.vcxproj": "bca5bd8f551c2e14e1acbaab71c19158d40f2d5f3e9db3098574941445480c11", - "libraries/3rdparty/mbedtls/visualc/VS2010/cert_write.vcxproj": "65e112c3cb0b0faeec340038348ca5e00129855ef5a368276b98532fc4169f9c", - "libraries/3rdparty/mbedtls/visualc/VS2010/crl_app.vcxproj": "dde58959d674e5207bf466f17d8e1dab12c6576c876afb460e262d65bd94d211", - "libraries/3rdparty/mbedtls/visualc/VS2010/crypt_and_hash.vcxproj": "be8bca3061c6a08afb42d28955b900ec657f3eee992b3f6cf1466d3de530598e", - "libraries/3rdparty/mbedtls/visualc/VS2010/dh_client.vcxproj": "23b585cead69c28cd5f5d8f2422ce1303fc3d5d9cef4c8ff5369bb4a47380a58", - "libraries/3rdparty/mbedtls/visualc/VS2010/dh_genprime.vcxproj": "b68c83f7806600023c07f99b55d96b78c28e1da33084ee8c7761a09254aac871", - "libraries/3rdparty/mbedtls/visualc/VS2010/dh_server.vcxproj": "7668df571d04ac9f506d81dcedcc7989e4fb37b53c671022f5e1ed2142406935", - "libraries/3rdparty/mbedtls/visualc/VS2010/dtls_client.vcxproj": "cd0e324e374771c8fd81d1b712bd9746907d4adb2a0306f41083cd5233646400", - "libraries/3rdparty/mbedtls/visualc/VS2010/dtls_server.vcxproj": "aee3d1aa6d02766251abda965cd1e7d319f89b28857c51cd52b6dcfd56cafe18", - "libraries/3rdparty/mbedtls/visualc/VS2010/ecdh_curve25519.vcxproj": "cfefecf91e435b351c1827359c66288b552b8d718f559ee1232315b4e2939d13", - "libraries/3rdparty/mbedtls/visualc/VS2010/ecdsa.vcxproj": "c7e955ac8bbd73184fe2b780a037f332939f16f82f4a4fe80f2e7c35680f8fca", - "libraries/3rdparty/mbedtls/visualc/VS2010/gen_entropy.vcxproj": "aee08d42d11354169db4d4ced618439152eabcc463245599ffabf99ee415827f", - "libraries/3rdparty/mbedtls/visualc/VS2010/gen_key.vcxproj": "61ff766c46b082fe2d67278758c1d660cd77e1ec3794302b6753e7e878ff4f25", - "libraries/3rdparty/mbedtls/visualc/VS2010/gen_random_ctr_drbg.vcxproj": "29faff037f31c0b46ad6b27bb7a3f7655a22f9d4c9d217851b929c3b8c88d289", - "libraries/3rdparty/mbedtls/visualc/VS2010/gen_random_havege.vcxproj": "2d2beea10745cdc4e30a344ef9e45685a06178ed1d1941b71dbea7a070329b0b", - "libraries/3rdparty/mbedtls/visualc/VS2010/generic_sum.vcxproj": "7fd50ca75ef487a1ed27104ef13c904ad004c2b8bbc02d36797d926eca0394df", - "libraries/3rdparty/mbedtls/visualc/VS2010/hello.vcxproj": "01909abbd4aa403ab94e7b90d2a06a3386ee0477f90f3758014e4b3efacdb46f", - "libraries/3rdparty/mbedtls/visualc/VS2010/key_app.vcxproj": "596766dd8fc0b019fbb13401d9440a8aadd9829aad005a17c3d4d0c1c9eb0be8", - "libraries/3rdparty/mbedtls/visualc/VS2010/key_app_writer.vcxproj": "df9075ea39ade11af038a75b5ce028c1700509efb2045be029f0ee770293a11f", - "libraries/3rdparty/mbedtls/visualc/VS2010/mbedTLS.sln": "7441c19db10b4a8d5103c8d7d80d08561787b559dc07e2c7021526951c24cb12", - "libraries/3rdparty/mbedtls/visualc/VS2010/mbedTLS.vcxproj": "bb229c5d7f7c7b9251402659b893aa9ffc467b89f17ba25d18f2a42c61ad401a", - "libraries/3rdparty/mbedtls/visualc/VS2010/mini_client.vcxproj": "32465df45b9ae4f08cf61060171ca5937210479a05a3de0e23f879e727855357", - "libraries/3rdparty/mbedtls/visualc/VS2010/mpi_demo.vcxproj": "27ed3a0fa397ab79b6caf824f560a0915615e51249813b5ecccd72b779c757fb", - "libraries/3rdparty/mbedtls/visualc/VS2010/pem2der.vcxproj": "ed28151a49e03835ed5fc94d15df5473bbdaf05ea382e13a247d7e4631115666", - "libraries/3rdparty/mbedtls/visualc/VS2010/pk_decrypt.vcxproj": "2f21f6eb55916f2ae34786f7fa4cf0fc67d9ed5a070bcf690feb5e126c30423f", - "libraries/3rdparty/mbedtls/visualc/VS2010/pk_encrypt.vcxproj": "59a5ac8fda4823a2bc0a18e2f44f9ca9c16c1a4677dd393c34fa276f0988c6c3", - "libraries/3rdparty/mbedtls/visualc/VS2010/pk_sign.vcxproj": "074e424d129819722963606b7ae22a9ce156f98c3c73e8b711dd0d10bb3a5ffe", - "libraries/3rdparty/mbedtls/visualc/VS2010/pk_verify.vcxproj": "42bc1c83134a2b9c4d6e82cb86d6690b27aad36bc63734dc2b7ccb6923f33a21", - "libraries/3rdparty/mbedtls/visualc/VS2010/query_compile_time_config.vcxproj": "24fe4c0e40eea1dc83caf05cf6b21aba63f852d06eebf2148ecd22bee036cba8", - "libraries/3rdparty/mbedtls/visualc/VS2010/req_app.vcxproj": "77d1008065a894f9e7cf2b66119e6fa25109d670987d9dfede21ddd51493e3ad", - "libraries/3rdparty/mbedtls/visualc/VS2010/rsa_decrypt.vcxproj": "042f0dd2e60edd7f93ea561430e685691d917039639968e28a5911214763cbed", - "libraries/3rdparty/mbedtls/visualc/VS2010/rsa_encrypt.vcxproj": "90c6fb6ec43949f0c5046b9b6f5b1e096b848f1dcfa39b8f2422f772797cb65b", - "libraries/3rdparty/mbedtls/visualc/VS2010/rsa_genkey.vcxproj": "1f1c10d55bfdb19df26e142746c57764d1cd33a6cdc9633421e7a74a2af3c0c0", - "libraries/3rdparty/mbedtls/visualc/VS2010/rsa_sign.vcxproj": "a52f6dfee4063e6019de15aad3e80afaf12cf8a3802b4cb6a228bdbee765dfa4", - "libraries/3rdparty/mbedtls/visualc/VS2010/rsa_sign_pss.vcxproj": "0aa419945b0e791d9a52832c4994d09a763db3f69e0b7438b104d72524626565", - "libraries/3rdparty/mbedtls/visualc/VS2010/rsa_verify.vcxproj": "be38b7d95906fec9e03c1edd94696964d5b19cc07e7225d856f11c827a8a997b", - "libraries/3rdparty/mbedtls/visualc/VS2010/rsa_verify_pss.vcxproj": "1cd735720dfc3d49fcd73266d6415450552e8849cfeae92a6c3b69976defe7f8", - "libraries/3rdparty/mbedtls/visualc/VS2010/selftest.vcxproj": "3cd55a43710848fe4fb93f9100aafee8a9b55b9ad2c3fc5cb7fd55c8f28259e8", - "libraries/3rdparty/mbedtls/visualc/VS2010/ssl_client1.vcxproj": "2ac345d74bacc5571ae3ae589cfd4eb4c014de9bbea70a6ecd4247147f768073", - "libraries/3rdparty/mbedtls/visualc/VS2010/ssl_client2.vcxproj": "8d149c88bb194d9f58f36e6fc4c75a9c1506e41583c77c30522205d76e080c84", - "libraries/3rdparty/mbedtls/visualc/VS2010/ssl_fork_server.vcxproj": "084f8a23607a2ab7ad8287c666a4d9dc4bf64a587aae161112cee1386cffe8ec", - "libraries/3rdparty/mbedtls/visualc/VS2010/ssl_mail_client.vcxproj": "6e745dc8d478c49096fb69ba23c93a90509af3290bae804732cbb537e735c929", - "libraries/3rdparty/mbedtls/visualc/VS2010/ssl_server.vcxproj": "e7915db39ed4e284ff456dc480e06553714d5675ac705dfe6579174db5be83cd", - "libraries/3rdparty/mbedtls/visualc/VS2010/ssl_server2.vcxproj": "9ad201669aedeb9cccb9ea637785711a40c12f11c7d9af3381a09a490e4079fa", - "libraries/3rdparty/mbedtls/visualc/VS2010/strerror.vcxproj": "fe12f430b31f3ead1fd255bdb8be4c5d52d514a45368ee7031a2a5830648b716", - "libraries/3rdparty/mbedtls/visualc/VS2010/udp_proxy.vcxproj": "f2b043d5c3cbb825ffedb24cb67142bb3476aa1bb0e5c945499938a393364f44", - "libraries/3rdparty/mbedtls/visualc/VS2010/zeroize.vcxproj": "e2897300a0d3391be518af3fde0cad4ffae8664837f357cb0186843d20de7f13", - "libraries/3rdparty/mbedtls_config/README.md": "dec5f4f70730361ebe2e653ac748bda384760382f7d7afb8dd70876113c5dba5", - "libraries/3rdparty/mbedtls_config/aws_mbedtls_config.h": "9d61ed03d900438108379718d3429771377913119e0f23b19ec2249ebd2bd00b", - "libraries/3rdparty/mbedtls_utils/README.md": "e330a21d504573dae72d764abde401f6378db3852d67be4e8bae291d6ef1a99b", - "libraries/3rdparty/mbedtls_utils/mbedtls_error.c": "906e1e5d8f464f2c8827fb83f7a249785de36ed1f034d225370a3ba211c2cf5b", - "libraries/3rdparty/mbedtls_utils/mbedtls_error.h": "ed6e816433e7e9aad9614cf1a2c04a92e081f803fc1665485a1c56caf06587e9", - "libraries/3rdparty/mbedtls_utils/mbedtls_utils.c": "e6eb0721fdb03edd8345cf5639b21d724fd05acac3bb5ef945e3cb5e158781a6", - "libraries/3rdparty/pkcs11/CONTRIBUTING.md": "400098f5776f8d6289aaa5517f2d33fbc28d98d9612ccf3d4cfc85713d674d95", - "libraries/3rdparty/pkcs11/LICENSE.md": "9bcb0c0cb10c9dbe5090ea05b35ac12160a295c2704b178b2c661c10acfb96e8", - "libraries/3rdparty/pkcs11/README.md": "0e2538782b336a90335524fd19be0e2e21cbd197f161a2aa8f0fc82993eb1609", - "libraries/3rdparty/pkcs11/pkcs11.h": "8bb7aa1aeaa328b6a39913070d6f3d2bdeb9f2c92baf27f714fbb4cbefdf4054", - "libraries/3rdparty/pkcs11/pkcs11f.h": "a85adad038bfc9dad9c71377f3ed3b049ba2ac9b3f37198a372f211d210c6057", - "libraries/3rdparty/pkcs11/pkcs11t.h": "5b58736b6d23f12b4d9492cd24b06b9d11056c3153afc4e89b1fe564749e71a2", - "libraries/3rdparty/tinycbor/src/LICENSE": "3c6ba0b5bfa7830505301ffb336a17b0748e0d61c4d34216e9dc98f10e40395e", - "libraries/3rdparty/tinycbor/src/README.md": "6d6489fb7bfb247f44438f1e73e2f24db38ac3d4b586eeb31d60091a2a6b830f", - "libraries/3rdparty/tinycbor/src/cbor.h": "0fb03658e551dda420c7bfc54cc029c1dea0c9cd906aa23c79a112934f3c5a53", - "libraries/3rdparty/tinycbor/src/cborencoder.c": "bb6539de51904920d2dbf9fc46881a7c7f1f1b27dbf0031ce4873fcefa1627ac", - "libraries/3rdparty/tinycbor/src/cborencoder_close_container_checked.c": "fee715bd5a28e19d7451ef973bd20d08fff8d82a5e59efe6aa89cc738368bf32", - "libraries/3rdparty/tinycbor/src/cborerrorstrings.c": "d2c611466a5702fae92c459844bf9495d90a2fffc1efcd847f188a06feded5b6", - "libraries/3rdparty/tinycbor/src/cborinternal_p.h": "5a58680dc3e1b58220f9e76e18b446caec57f1af75c765116700d60ec105c055", - "libraries/3rdparty/tinycbor/src/cborparser.c": "1decbbb7145a322de9dffd82e7319ac18b84fd0a4c480b8b36f1459aacdb1693", - "libraries/3rdparty/tinycbor/src/cborparser_dup_string.c": "95cbbfe5d49ad5afc8684df17cee7c0b016118da659be49a0230c2a7938cae5a", - "libraries/3rdparty/tinycbor/src/cborpretty.c": "04663de61f37618a25d7509a518e3da4764353b666aab42148181ac83af07406", - "libraries/3rdparty/tinycbor/src/cborpretty_stdio.c": "d5a3178cee64625fa418f36970a666e8eee83e92c395acbd2b89220db93de6fd", - "libraries/3rdparty/tinycbor/src/cborvalidation.c": "53aea74b993f99365260fe25f51071c1b4be95c987a47518e3d26dd56c23b531", - "libraries/3rdparty/tinycbor/src/compilersupport_p.h": "3401cb759b3783bdcf4c8566e99010b364d7348a3f267b15f5f635f09960bab6", - "libraries/3rdparty/tinycbor/src/tinycbor-version.h": "77fc28859af9c24b7dc37aee0a73a07c0c90e7500b73e51c2d4a76c709ad5978", - "libraries/3rdparty/tinycbor/src/utf8_p.h": "b0efa3c4b2b04c4db2809989a86206f9277de5a79ade4838df9bbfb3e17db4bb", - "libraries/3rdparty/tinycrypt/AUTHORS": "478b050e66ce46564c1d081590edc7f3db7fcf1894430d20a9b6b550029d4ab8", - "libraries/3rdparty/tinycrypt/LICENSE": "b2d451fcba3577b118741d733d37ebd15bdd0b6b381e554a7345bdbfa3743108", - "libraries/3rdparty/tinycrypt/Makefile": "7c3c3e1913882fbc6e9ef5c567505704fbe7f12cf55a842eca5b19df8c868ef5", - "libraries/3rdparty/tinycrypt/README": "d795d171058c36cdb8ce718fd615846f345815465efe011aa0b215df86e53a38", - "libraries/3rdparty/tinycrypt/VERSION": "283571d2642fc7b3befd294f45d53b896a1d54d34c86235b13151192b380606a", - "libraries/3rdparty/tinycrypt/asn1/asn1.h": "89499b4d992a8a347ac4805fe01af0c5977ce6237ccb628589b6f885b2e1423a", - "libraries/3rdparty/tinycrypt/asn1/asn1parse.c": "fa021fe9c65c28090e841387b71f59484f62abebf5cafceb0fb555c0dcd572da", - "libraries/3rdparty/tinycrypt/config.mk": "ce91366509d78906308eb30de2f85bfb894b48146ea01d644c734e1a8ca346d1", - "libraries/3rdparty/tinycrypt/documentation/tinycrypt.rst": "8d5716676abf2f0036d58ee7691da44953d8efe97020ed4a5edd4afbea5c054d", - "libraries/3rdparty/tinycrypt/lib/Makefile": "b6bde2680a639927714b1db0cab6c038101d0432d45a08fa6da157aaeff21ec1", - "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/aes.h": "bd9e1ea99ec9717aa68f8c2b9b8844c11a7557017dde19c0ea7ca9599ce28c8e", - "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/cbc_mode.h": "9d04a528294793b47541cb70fe4e83f5c0a70b4c550fb49bce90a22dc863a191", - "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/ccm_mode.h": "79347427c642f708ae10f24784236a5e5a328f807b100a5b0fe90db70bc6432e", - "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/cmac_mode.h": "6f9727d78078f9ae016f18b2ec420f3e6f8afc60e0ea5fa0fbc8e8a646e8f53d", - "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/constants.h": "89c80a6d5f468ebde82fb525a6dd72685cb27720fd385da6e3f3f2a19fba48ec", - "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/ctr_mode.h": "1f3fe4a524a86e9c659643e608e81287b4e898e58316f28ca51b19c212e4bd72", - "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/ctr_prng.h": "8d0f25e6cf23cdd8634778fcba10af888d24fd0d11c496f1b9a0440cd45b2509", - "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/ecc.h": "ab1904e162dc994ef0b0174dcee9e708d57d58828dc5d819ba71713ac443fee4", - "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/ecc_dh.h": "1e8bda76ea0f2673d371a752ea57f3e5da621a3007fd891fa28d4ed555227185", - "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/ecc_dsa.h": "c6545de8ba4490efbde181189b999938b43c36cc1e905d0a12decf1b526b4769", - "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/ecc_platform_specific.h": "ed890b375c177e7abad7b188ac0a737e87d43224325cd1ed944bad3d25c470cf", - "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/hmac.h": "c981663602ae9c4df8f7c2fe5d6e1d2cb1132fc0b90beb4e4eef536d9f54b82b", - "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/hmac_prng.h": "c7d780c4bf3fb23f45ec1225f31f0c8a851c5693f47adf76fb76b7f140ce136a", - "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/sha256.h": "90eb15d8cd82f81ba163c53b199c04eb9e5fda52a41901bb380dd80097f57902", - "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/utils.h": "c5c169e0ae15e394588d7d6797a28af9ab251b1ed1169b3207625752d8d8fc8a", - "libraries/3rdparty/tinycrypt/lib/source/aes_decrypt.c": "edad5e3570012bcc1da57869fdb2bc4e0c6e733fb67f7b362bcc71f88d0af017", - "libraries/3rdparty/tinycrypt/lib/source/aes_encrypt.c": "90957c91a22214b18653bae4ef4abeca8bc6674051c48fe0c97c413a6d65e555", - "libraries/3rdparty/tinycrypt/lib/source/cbc_mode.c": "e09c83712a618ba08a60fef3e5ba2ed5bf712fa6b8c79a074cbf5731665f7ffa", - "libraries/3rdparty/tinycrypt/lib/source/ccm_mode.c": "089fb37565150785cf67c20457fb95409d860cb0b572348148fb09d3d11ac6fd", - "libraries/3rdparty/tinycrypt/lib/source/cmac_mode.c": "67e2a2ac539ed72bd5ee80cd377b1b5f5148f6c743bd8c89904a393d39a5a8d7", - "libraries/3rdparty/tinycrypt/lib/source/ctr_mode.c": "30ce4835f928dc331ed74f86de26b9839ae50e703e6086434edaf3ba5a87473a", - "libraries/3rdparty/tinycrypt/lib/source/ctr_prng.c": "c0a2de479ae4bb72b89236a44058d387e14670f24e114298ee14173c41bd5315", - "libraries/3rdparty/tinycrypt/lib/source/ecc.c": "1c56234ff29708c712d07f864ed498eb6b0ab8475b5b5824079ed0c77070ea1b", - "libraries/3rdparty/tinycrypt/lib/source/ecc_dh.c": "bf6a6ba824721d9fa781b594ade96cbb97d47f65dd7fe5b431dc0ac6eaf335a1", - "libraries/3rdparty/tinycrypt/lib/source/ecc_dsa.c": "f80751d74bc9be544308f5b7495492b68e552b7283540cd50f9d0f295df13591", - "libraries/3rdparty/tinycrypt/lib/source/ecc_platform_specific.c": "17f454ecc206f2ac532c517b13beb56ff730e71efb93eb70b20ee71617a8eb7b", - "libraries/3rdparty/tinycrypt/lib/source/hmac.c": "6c9141de8af68822f611b4213801eda5a8695ece071b3bef34dbb6e52ffdd709", - "libraries/3rdparty/tinycrypt/lib/source/hmac_prng.c": "3a64017e98bd7b25f33819cbcd597d48e9ae00478201a68a485cf7e04f400274", - "libraries/3rdparty/tinycrypt/lib/source/sha256.c": "a8ad4bb2c09e31e4ab86c1b4f8fa073937a42e2694afb4dde6cb1b3c7a4b5ffd", - "libraries/3rdparty/tinycrypt/lib/source/utils.c": "2cf7cd3ee3b48d05b925dc005c1b12ead098f3939e948f55e278e16c180e8d8d", - "libraries/3rdparty/tinycrypt/tests/Makefile": "5d72dc2308dc2cdf16a6565b700d931a9b2ab72550af58a890993f301002c6f2", - "libraries/3rdparty/tinycrypt/tests/include/test_ecc_utils.h": "f793eb6066f90db4222a4d95d47e5f6b2e480bc07e1766e05cd091ccf8cc565c", - "libraries/3rdparty/tinycrypt/tests/include/test_utils.h": "bf74d9342f08637b56652c599b2956a21c56d32e80ec1e9d74b4909bd12b4122", - "libraries/3rdparty/tinycrypt/tests/pseudo-random-data.bin": "87944d1d1787ad21685f9289a5f5e365d7582f395d9d2dd9b122b837b30d1c61", - "libraries/3rdparty/tinycrypt/tests/test_aes.c": "27060817b7a6b0646aa5c4d55bf51586b976326bf165ae9ebdde7f5b26cf5f6b", - "libraries/3rdparty/tinycrypt/tests/test_cbc_mode.c": "59dfe4f51a60b38bb5d6cbc0be5db9ae795c993e58663e58f5fd9998e71f88aa", - "libraries/3rdparty/tinycrypt/tests/test_ccm_mode.c": "32249f37c22a339f6e1b0140fdee83402226a70726fb7beeab225a0989120073", - "libraries/3rdparty/tinycrypt/tests/test_cmac_mode.c": "1b48ae8a493e009e09d9ea9829353a4b90a71c21a297373c242215a67f2b683a", - "libraries/3rdparty/tinycrypt/tests/test_ctr_mode.c": "be4ae7b236ea863937b6091aa1f3717df196a333fbf39ff922d7da0c8eacc512", - "libraries/3rdparty/tinycrypt/tests/test_ctr_prng.c": "f745a4d272810460c85f8c1781da7977e7fdcf02e02d25f34e363b60c8291c9e", - "libraries/3rdparty/tinycrypt/tests/test_ecc_dh.c": "28d253afaa2f1e329ba5ccd4266b34d45346e77235fecc593a78a360ef6195e9", - "libraries/3rdparty/tinycrypt/tests/test_ecc_dsa.c": "55533e65df9e3c7e2e792c92ca5a567b692b92c289c21f12b3cfd75b385fef93", - "libraries/3rdparty/tinycrypt/tests/test_ecc_utils.c": "4ff6a5f2f5465f485ab2333cc4dd15b2244ca875cc016b6e646510d218ba3be8", - "libraries/3rdparty/tinycrypt/tests/test_hmac.c": "c0bca5221fbb587f5c29477fa062d7e30297914c1010102b5f6f47f2cb37e143", - "libraries/3rdparty/tinycrypt/tests/test_hmac_prng.c": "bbdabde91a268dc6b3a20f0efdff63e2d099848a013edfa7e956358ef3a9caf8", - "libraries/3rdparty/tinycrypt/tests/test_sha256.c": "b154011602efffd7319ca8eb6a0a04b9476efe2c1abb42f09748c3ed766197bc", - "libraries/3rdparty/tracealyzer_recorder/Include/aws_secure_sockets.tzext.h": "7a32f358eb66e499cfd083206ef4c7c5da6e1be9374cf50f3e5e286997a9c1b4", - "libraries/3rdparty/tracealyzer_recorder/Include/aws_wifi.tzext.h": "77cda4235e4436878fb5cc5a850075a6ac658b00269fa831d71983f9c0d43137", - "libraries/3rdparty/tracealyzer_recorder/Include/trcExtensions.h": "4750f0f01b17b0b989b59d0d3db673a67de759162d896a3dd89a8b2a9cc43940", - "libraries/3rdparty/tracealyzer_recorder/Include/trcHardwarePort.h": "b22ec1a829e1370154dd9217fae634d714b1bd8765dbeb36dde4529454d98f1c", - "libraries/3rdparty/tracealyzer_recorder/Include/trcKernelPort.h": "4e0a7fd011a2f5acb912f51ff0c1349ffc7a82805ed027a41d3f78737ca20716", - "libraries/3rdparty/tracealyzer_recorder/Include/trcPortDefines.h": "bcbd866a94a9bb5696481eb7e8540101d78dd82d963b2bdb56626a3dd51fa15f", - "libraries/3rdparty/tracealyzer_recorder/Include/trcRecorder.h": "c1e4d5e4ae87b38240e351aa3c93b570e153ad6f326666acd9067ed5e0953fad", - "libraries/3rdparty/tracealyzer_recorder/ReadMe.url": "3fbfd84c715d8e6d3df562c3019b2892139b098641d42d3f5b91781704bf2bfb", - "libraries/3rdparty/tracealyzer_recorder/config/trcConfig.h": "e20d06dbec2b222c6faee3fd940c675028494d0cef41c5d524439e3ba4dccef5", - "libraries/3rdparty/tracealyzer_recorder/config/trcSnapshotConfig.h": "2565df36a1c0c3e50314d3cd10b9a0675f875259da9534b318c7c814ee3ab76a", - "libraries/3rdparty/tracealyzer_recorder/config/trcStreamingConfig.h": "91321655d6de4bbbb05dc2d3d0c36561de70555c627271902c630350e63b8b77", - "libraries/3rdparty/tracealyzer_recorder/readme.txt": "607e810b5ab8d1dcc6101c4af4d5212cb9eb905dec8611361395085198c7becb", - "libraries/3rdparty/tracealyzer_recorder/streamports/AFR_WIFI_LOCAL/Readme-Streamport.txt": "42c43ce0b02c9d7b83ab4786ec246ac359cb034bb694edb2e8b99f16b024d0d3", - "libraries/3rdparty/tracealyzer_recorder/streamports/AFR_WIFI_LOCAL/include/trcStreamingPort.h": "16d3453f41635e9d396537d41d05510662121445a65d8aad713a0612393df71b", - "libraries/3rdparty/tracealyzer_recorder/streamports/AFR_WIFI_LOCAL/trcStreamingPort.c": "ba201fe8d90a15471d06653c4157633c494e467b82e1bfef4d886343868e9cb0", - "libraries/3rdparty/tracealyzer_recorder/streamports/ARM_ITM/Keil-uVision-Tracealyzer-ITM-Exporter.ini": "f115f28d185d7158c6e1b2d7671865aafbbd30bb91f231e69a502173b247d374", - "libraries/3rdparty/tracealyzer_recorder/streamports/ARM_ITM/Readme-ARM_ITM.txt": "9697b415f9559bd5129444f67ffd9283456323b267439399af97bfd9e769b621", - "libraries/3rdparty/tracealyzer_recorder/streamports/ARM_ITM/include/trcStreamingPort.h": "f3a13f5f3e5fdb57a21e9ed8978d25bbbd40176e2f74316f84bb903c79888fe6", - "libraries/3rdparty/tracealyzer_recorder/streamports/ARM_ITM/trcStreamingPort.c": "b8c2dddc68e2976fe7956e679e90e88eb793719b48e1c7b34f7240067915f50d", - "libraries/3rdparty/tracealyzer_recorder/streamports/File/Readme-Streamport.txt": "bab3659daf227c8b13136ce0e9596e5afeffc29de4d156e3040f1535a6f0482b", - "libraries/3rdparty/tracealyzer_recorder/streamports/File/include/trcStreamingPort.h": "6de4cfc1f5305ed7741a541de6f19844ad633cd1376a58e654d5cedbe2120f49", - "libraries/3rdparty/tracealyzer_recorder/streamports/File/trcStreamingPort.c": "459f57c182a7db1242bf713b2e583bea3b6162777becd7e444e7aefb42bb642b", - "libraries/3rdparty/tracealyzer_recorder/streamports/Jlink_RTT/Readme-Streamport.txt": "09c5ddedff88c85b1acb667dd53627f663df8831a710d7d5a62fc7db4db79ded", - "libraries/3rdparty/tracealyzer_recorder/streamports/Jlink_RTT/SEGGER_RTT.c": "7373709c2e587cd1abd221a6f249f9a6e14d8c11ee0b3d75d701b973586f7369", - "libraries/3rdparty/tracealyzer_recorder/streamports/Jlink_RTT/SEGGER_RTT_Printf.c": "ee399915fdbdb91901d825b3c1696f9add8936c354064ff4dc3e69a0dac6ccbe", - "libraries/3rdparty/tracealyzer_recorder/streamports/Jlink_RTT/include/SEGGER_RTT.h": "5da6bbb8b2d11faf2b948b00da9af146bd68dbb51245578e7167a1cb77ef9e5c", - "libraries/3rdparty/tracealyzer_recorder/streamports/Jlink_RTT/include/SEGGER_RTT_Conf.h": "231b7db1562922b395620e05937ebc6438e0f0323bd95057b987294b0872a510", - "libraries/3rdparty/tracealyzer_recorder/streamports/Jlink_RTT/include/trcStreamingPort.h": "83ec42f63402acd8e671d71e6724713b798ebcef792a1a2ff61e6facc34308b4", - "libraries/3rdparty/tracealyzer_recorder/streamports/Jlink_RTT/trcStreamingPort.c": "a33163cb9745dc3670a1bc7d3e60a128005bfc1b0c1734172729542577cd92d2", - "libraries/3rdparty/tracealyzer_recorder/streamports/TCPIP/Readme-Streamport.txt": "1bad876ee3af398df3fafb1f41afa99649bb4a54f5363ef41596df8d51cd8223", - "libraries/3rdparty/tracealyzer_recorder/streamports/TCPIP/include/trcStreamingPort.h": "4423f8db962d42ef503a606acc69758153c870407ce2eea914ed965309a149bd", - "libraries/3rdparty/tracealyzer_recorder/streamports/TCPIP/trcStreamingPort.c": "cd8293c3da466bb9b384d1a40d8f42521edd2941e575aa3095eb6e98e905ce09", - "libraries/3rdparty/tracealyzer_recorder/streamports/TCPIP_Win32/Readme-Streamport.txt": "780fa3af3812a6db0b2f364ba79ea9f53e19e4e8c7a66833e4270d8b4541588a", - "libraries/3rdparty/tracealyzer_recorder/streamports/TCPIP_Win32/include/trcStreamingPort.h": "780f0cd9bee4233e12c07342efc632008315c9e9bd3218e68382e3ded8ac48bf", - "libraries/3rdparty/tracealyzer_recorder/streamports/TCPIP_Win32/trcStreamingPort.c": "2d5a558ce8cbafdf29b186fb27d409622160929d151ef47adfcc18215ade2179", - "libraries/3rdparty/tracealyzer_recorder/streamports/USB_CDC/Readme-Streamport.txt": "a283d5e083e1a231cfb3bc17b30bbc01f4547dc740865d3cd9aa2b5878cbd531", - "libraries/3rdparty/tracealyzer_recorder/streamports/USB_CDC/include/trcStreamingPort.h": "6e7cf9f4d23c569ddb48d2a6cd7101e5266d95104c6a3a02326b89ab94c357b0", - "libraries/3rdparty/tracealyzer_recorder/streamports/USB_CDC/trcStreamingPort.c": "109bf4ca36cef6e364455ca8c4311ae614eb88e3bbfb0d5f0537eb03d65b64a7", - "libraries/3rdparty/tracealyzer_recorder/tracealyzer_readme.txt": "7fbf1589361df83fb3dae0e6ab4705bddfda4e6f5a38c44bfac9d7d408279407", - "libraries/3rdparty/tracealyzer_recorder/trcKernelPort.c": "bf314236cc6eec16119190cc91c96f9892d69f2f3f5887f7c658dda21385dab2", - "libraries/3rdparty/tracealyzer_recorder/trcSnapshotRecorder.c": "12f0c25ae2bd3a287e824d89c840a0e9ce6e3ecd892e830c1b403399a376fded", - "libraries/3rdparty/tracealyzer_recorder/trcStreamingRecorder.c": "a558fcea27ef041cb24615695a39ace3d84f81caa94534d0e7d69baf4d03cace", - "libraries/3rdparty/unity/CMakeLists.txt": "c9af8e56b8815a03197444cc642cfa5f33534efa6363573d94ba2c08c705e668", - "libraries/3rdparty/unity/LICENSE.txt": "3ed9b51da86f52c729c96cc99fdde6444b2297c788a9cf4ad1d3649dc34c4985", - "libraries/3rdparty/unity/README.md": "c4612d859d547fe4fd7a344899d33a6a0b91b65df4b3d90a75e1e766b36462a6", - "libraries/3rdparty/unity/auto/colour_prompt.rb": "e98b5171e72057bcfc19ae252f1c7d74ec93eca16957379ccce49da85712c4a4", - "libraries/3rdparty/unity/auto/colour_reporter.rb": "2e6fbc6a1718d1f755378a934526a5b4fe11ef045302ac1e1c251e927477d697", - "libraries/3rdparty/unity/auto/generate_config.yml": "85c5702a168e366148e8ec89df416eae888278a526c79459162c0f37641a02fe", - "libraries/3rdparty/unity/auto/generate_module.rb": "8d7ca483abf4bbd81b6b6e35628a31db43957b60ffd1fc9f5879976ae49d5676", - "libraries/3rdparty/unity/auto/generate_test_runner.rb": "3b267203eb9bc77ecd495024fedf857b3f7ac882804848a1d616028113ec5888", - "libraries/3rdparty/unity/auto/parse_output.rb": "3f33f2d75d316c767cf22ca59d404ff2287a5c8eeb37ebbe02f4bfe4ce099877", - "libraries/3rdparty/unity/auto/stylize_as_junit.rb": "d1d32f676a7de29b5c6526ddfff0f260f8881a2a2ccd06a31da34e94cca15d7c", - "libraries/3rdparty/unity/auto/test_file_filter.rb": "a69a44fccafbb504635163793799aa59809035951d7f258547d64d4145131a60", - "libraries/3rdparty/unity/auto/type_sanitizer.rb": "ecc5677ac9820f343aca50893463602fca940c24daf07a4784b4e9e0801c3f4b", - "libraries/3rdparty/unity/auto/unity_test_summary.py": "e46350b7132f04a7bb339d47bcef11ae0cb9e74c2050d0d75697b33c253c2895", - "libraries/3rdparty/unity/auto/unity_test_summary.rb": "22f41c7a277cb37895d742829ce9ca7ba65180a3b0011126c1e90c8cb1b37c20", - "libraries/3rdparty/unity/auto/unity_to_junit.py": "0743f26b5ae67af204981293337f9cc9a8cb46c90aaa3f46f31fd9658ab65990", - "libraries/3rdparty/unity/docs/ThrowTheSwitchCodingStandard.md": "f0f000eb1fc32b3a6684da894ed816d09ba077ad85e65e44f1f7998da47ef178", - "libraries/3rdparty/unity/docs/UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf": "28e8687d90c111ee8c249a7748495a0bfe00a3f35231b026ac73eed01d32eb34", - "libraries/3rdparty/unity/docs/UnityAssertionsReference.md": "4a7475082e43c174b8cb6d80d9505da5700d4ffadec7eb6923c813c57988ec56", - "libraries/3rdparty/unity/docs/UnityConfigurationGuide.md": "63008818f574d5a1cf365c484493dedca3763a563efd77f460a60325f30d4c16", - "libraries/3rdparty/unity/docs/UnityGettingStartedGuide.md": "c7eae02ffedd7ad4a112dab2ded25f238aed89f2358dd54bce7e64ae803dd4e2", - "libraries/3rdparty/unity/docs/UnityHelperScriptsGuide.md": "f8b89d36c0b901265fd3366f0a93045218c03adf501c240a5570bc68e22ceaac", - "libraries/3rdparty/unity/examples/example_1/makefile": "367e10ef968648ec5c531f144bb0ee257a619091a76fcc17516c220bf20539e6", - "libraries/3rdparty/unity/examples/example_1/readme.txt": "4d72d51f1a385cd4aeb594e4485ca2439d5b86247523cd2d2b89acc2173d8a24", - "libraries/3rdparty/unity/examples/example_1/src/ProductionCode.c": "9d6b0ae761f7dfc008d6547031ff92de63976f5621b6feef2a29614cec51b357", - "libraries/3rdparty/unity/examples/example_1/src/ProductionCode.h": "25cfcc42b79140f4c399363e0ef10a6e518a1831e10c61cc138d6d9a230425ce", - "libraries/3rdparty/unity/examples/example_1/src/ProductionCode2.c": "c2cc0a76cb2ea145d3861bd9ccc467ac45ad3e8230d5075ed174ce3a5cd50a76", - "libraries/3rdparty/unity/examples/example_1/src/ProductionCode2.h": "d4db1a4eea2bee3d668a203d4953f415f23be64a826c5a73059ef221f61b3882", - "libraries/3rdparty/unity/examples/example_1/test/TestProductionCode.c": "33e4b165d437c376f2393da59be0b22a3a458ebbe94cc2b340159b71f2d8bb74", - "libraries/3rdparty/unity/examples/example_1/test/TestProductionCode2.c": "11387f2ecdc97ee3344c0df42123e73cae899702b348d5597e09e9760db267aa", - "libraries/3rdparty/unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c": "2c84d6b954a6810a7c509dc861ee0c18a562dd23a5dd7747ea524f0c1467d9a4", - "libraries/3rdparty/unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c": "b6ec7bb984eddea80c178ecb30f6f772325a745ff9812a5e3f41f236c43e19e0", - "libraries/3rdparty/unity/examples/example_2/makefile": "9c925a4b80f11ce51cb65fef51f8e1279113dc67838c71b5bc8b0c31009e65bb", - "libraries/3rdparty/unity/examples/example_2/readme.txt": "a03bf4ac2d294a037189b42f7bf8fdff0bf50524857e3f8933eba76085f22f04", - "libraries/3rdparty/unity/examples/example_2/src/ProductionCode.c": "75136eec7a43d0dbe980dea19ec46f6e16c0da92093686e59f6143d8ae8b5bb7", - "libraries/3rdparty/unity/examples/example_2/src/ProductionCode.h": "25cfcc42b79140f4c399363e0ef10a6e518a1831e10c61cc138d6d9a230425ce", - "libraries/3rdparty/unity/examples/example_2/src/ProductionCode2.c": "a929e7ef393ec5ccc53e3f885d663a1c8fbe5cc5f72a0fcad5c0d2f6cbc8b210", - "libraries/3rdparty/unity/examples/example_2/src/ProductionCode2.h": "d4db1a4eea2bee3d668a203d4953f415f23be64a826c5a73059ef221f61b3882", - "libraries/3rdparty/unity/examples/example_2/test/TestProductionCode.c": "7db7b7d9e7216fdc0814ff8bbecc37f40e573006207b47cfd8954469ebc9b502", - "libraries/3rdparty/unity/examples/example_2/test/TestProductionCode2.c": "332f23e940a9676504c84dc92d1a6cf72cd9204afe7f664c16b58ee7dbff312d", - "libraries/3rdparty/unity/examples/example_2/test/test_runners/TestProductionCode2_Runner.c": "14aef95de310f1e1381feaaf256ea94d0905a538311b5e3fdc944f927e75b287", - "libraries/3rdparty/unity/examples/example_2/test/test_runners/TestProductionCode_Runner.c": "a782491bcd8dd857b26a62df58e8671f1cb7641d6c0fe7f7853c079732ccd8e9", - "libraries/3rdparty/unity/examples/example_2/test/test_runners/all_tests.c": "fe5c0418201d70dc696b0db6acf60b2ea0069d74fa94fb96d7169b8752e00d17", - "libraries/3rdparty/unity/examples/example_3/helper/UnityHelper.c": "091c2466d25deffd8958332ad03d393ca1ec1b1f6150c16626d57d5901eb1b21", - "libraries/3rdparty/unity/examples/example_3/helper/UnityHelper.h": "a95bb6d3704c51637bb0855787236b41229e3836601ba97e88768f95779f3d4d", - "libraries/3rdparty/unity/examples/example_3/rakefile.rb": "2bd39eda1eb55bddd65a0a1536f707c2304b70bca3ac6bba6c0790d745a79a45", - "libraries/3rdparty/unity/examples/example_3/rakefile_helper.rb": "cfee16d634da56580eb6e7cdd5fe6fdffe432b21fba11f7262949d94f4622470", - "libraries/3rdparty/unity/examples/example_3/readme.txt": "2af5e731fb1db0ddf5c739f0b08fb2724e4acc7efb7ee0a02fe474a3e69d284a", - "libraries/3rdparty/unity/examples/example_3/src/ProductionCode.c": "75136eec7a43d0dbe980dea19ec46f6e16c0da92093686e59f6143d8ae8b5bb7", - "libraries/3rdparty/unity/examples/example_3/src/ProductionCode.h": "25cfcc42b79140f4c399363e0ef10a6e518a1831e10c61cc138d6d9a230425ce", - "libraries/3rdparty/unity/examples/example_3/src/ProductionCode2.c": "a929e7ef393ec5ccc53e3f885d663a1c8fbe5cc5f72a0fcad5c0d2f6cbc8b210", - "libraries/3rdparty/unity/examples/example_3/src/ProductionCode2.h": "d4db1a4eea2bee3d668a203d4953f415f23be64a826c5a73059ef221f61b3882", - "libraries/3rdparty/unity/examples/example_3/target_gcc_32.yml": "2e61fc6bc7930929985f1ea1ec5d0019fe1d133c01555c86b01b20145fb6aaa4", - "libraries/3rdparty/unity/examples/example_3/test/TestProductionCode.c": "b0e815e2285b1730d7dcd24b400d15b4efccfe5e4776d96248a2165c2f0caec6", - "libraries/3rdparty/unity/examples/example_3/test/TestProductionCode2.c": "895f437abd40bd461fd86a3b8ed6bc02c5c283fc3926aafe53b473e477fa0a5a", - "libraries/3rdparty/unity/examples/example_4/meson.build": "b7ca305825ef9e6bef4e3a3fb4d0fba19882073e1f2c4e755f8044f697b93119", - "libraries/3rdparty/unity/examples/example_4/readme.txt": "d16faba668694cacde12746c58ec512de301218543217a9644e4e269bee8ab0c", - "libraries/3rdparty/unity/examples/example_4/src/ProductionCode.c": "9d6b0ae761f7dfc008d6547031ff92de63976f5621b6feef2a29614cec51b357", - "libraries/3rdparty/unity/examples/example_4/src/ProductionCode.h": "25cfcc42b79140f4c399363e0ef10a6e518a1831e10c61cc138d6d9a230425ce", - "libraries/3rdparty/unity/examples/example_4/src/ProductionCode2.c": "c2cc0a76cb2ea145d3861bd9ccc467ac45ad3e8230d5075ed174ce3a5cd50a76", - "libraries/3rdparty/unity/examples/example_4/src/ProductionCode2.h": "d4db1a4eea2bee3d668a203d4953f415f23be64a826c5a73059ef221f61b3882", - "libraries/3rdparty/unity/examples/example_4/src/meson.build": "46a328e6425249131d7ddc66bfd0b699638efec6d722e7f191621d60d7cb18d6", - "libraries/3rdparty/unity/examples/example_4/subprojects/unity.wrap": "59d1f20c0ada120ee62ef1baf30be51ebaaf40d30b16e4da014f9d58023b7a8a", - "libraries/3rdparty/unity/examples/example_4/test/TestProductionCode.c": "f3a8fa16e599d6aa7a0c9cf604ea1d42ff5466244372e00543fc3b2e116f0d41", - "libraries/3rdparty/unity/examples/example_4/test/TestProductionCode2.c": "26c0ee5fabc061cfd32ae891ab16f4b985f306dfea1a939d00e89a3c1ae6f25e", - "libraries/3rdparty/unity/examples/example_4/test/meson.build": "5b19fa4453b496f7a63de664c470ede7485d17ccd3b88a8e6a4b63d4da5be243", - "libraries/3rdparty/unity/examples/example_4/test/test_runners/TestProductionCode2_Runner.c": "2c84d6b954a6810a7c509dc861ee0c18a562dd23a5dd7747ea524f0c1467d9a4", - "libraries/3rdparty/unity/examples/example_4/test/test_runners/TestProductionCode_Runner.c": "b6ec7bb984eddea80c178ecb30f6f772325a745ff9812a5e3f41f236c43e19e0", - "libraries/3rdparty/unity/examples/example_4/test/test_runners/meson.build": "b8a2bfb8acb2f83d22a74700f1adb4e90474f11272aa341670fad17c7ae5e71e", - "libraries/3rdparty/unity/examples/unity_config.h": "e339e493a19a70352c324e371aba058e8795ef166d7af4f1edd8c49ed9771a70", - "libraries/3rdparty/unity/extras/eclipse/error_parsers.txt": "67e309b5e803a22ba22c347aa5123cbbe73edcbfe9950aa0fd74576a4add1a12", - "libraries/3rdparty/unity/extras/fixture/rakefile.rb": "00806fb140d73e67b0c3b6b944f0ab3197e51c0b88b975e6dd778043f1e7a9ab", - "libraries/3rdparty/unity/extras/fixture/rakefile_helper.rb": "db69f025b23ba4f30a38155a10199082ac45bc2cb49d6fe039365a3fde11c79c", - "libraries/3rdparty/unity/extras/fixture/readme.txt": "5692862a5fbc1910978be7ea4751899bafb6b913ce34cffa5517c0eba1fe40e3", - "libraries/3rdparty/unity/extras/fixture/src/unity_fixture.c": "29c1ed80d563a7b216b0fb4213dfc173094fd4f51d2e1c1ec188e75063386d59", - "libraries/3rdparty/unity/extras/fixture/src/unity_fixture.h": "6ef887747dcea12dcc5e24273aa1e792d90277ac4e32fb187969ed6217bf3131", - "libraries/3rdparty/unity/extras/fixture/src/unity_fixture_internals.h": "56eba22c7fd8c73d4bf8f95639f08abf63573f22efaec4b8061578b604eb556b", - "libraries/3rdparty/unity/extras/fixture/src/unity_fixture_malloc_overrides.h": "446d4a58dd88ce0bceba6e095ac4f26a4c55898e67265d688450fa3aacc7741c", - "libraries/3rdparty/unity/extras/fixture/test/Makefile": "665bba3afaf6ebd289432b039e40b03a24c7fee6f4dde8f82b1a7468fe82a7e7", - "libraries/3rdparty/unity/extras/fixture/test/main/AllTests.c": "1ec0a0e004f8a70d03dc76e28f38f09519bbaf7306d48d17d5bf0573d34c87c0", - "libraries/3rdparty/unity/extras/fixture/test/template_fixture_tests.c": "3ca4c500397fc3dd7370b419e7d4f7abb3a8b05deacaf72a4e2ccb396669003a", - "libraries/3rdparty/unity/extras/fixture/test/unity_fixture_Test.c": "d8d631a1e192b25ae24ea6ecf3bb53e86eff8f0615a1ad7095106d847b847d18", - "libraries/3rdparty/unity/extras/fixture/test/unity_fixture_TestRunner.c": "e739cdf119f943d482fe99b6acec671aa88a78b9cb38bb2b459d946ab962a200", - "libraries/3rdparty/unity/extras/fixture/test/unity_output_Spy.c": "efa0dfae695ba004c67a120c0b0e3d6f93f72cf7a992662bd4ab15d725c3ff45", - "libraries/3rdparty/unity/extras/fixture/test/unity_output_Spy.h": "b5adfe4f07d3c1c4b7cb0178344ccf608c60a08713d768c8b3e073c6f030dde5", - "libraries/3rdparty/unity/meson.build": "78b6c83b22c043c2741e1c63dbdc5477a39ba74566bcfcc704580976d4d79bd5", - "libraries/3rdparty/unity/release/build.info": "d068d6cff7b4f86fea550f0c3a9d37b227c5c18c20da61d2f73553906484999f", - "libraries/3rdparty/unity/release/version.info": "bf2380afad00fc76d9fb76d653c32eca8efe8916cf88f7000fa8920860ded480", - "libraries/3rdparty/unity/src/meson.build": "9e8bba1e59c9ad97365fc322eca8a2ca2a97b5c4e35de0389d3e4c8bdcc83aa9", - "libraries/3rdparty/unity/src/unity.c": "7486d9c33bce48a2ec7967e72407e906d06cb179ed90babf06626f181ea35a6f", - "libraries/3rdparty/unity/src/unity.h": "a1d55805833e8464ac217f7f93d7a6fba59e1b12df05c7517fda8f7717fda31f", - "libraries/3rdparty/unity/src/unity_internals.h": "ae94c9a6908768407f4d29d6b1acd06603e21e7946800dbe4a7bd1a510ce575a", - "libraries/3rdparty/unity/test/Makefile": "da2a6c3820bed28cb3f4f71085daabc80e02b97ab75b59447e18b533d7d572bd", - "libraries/3rdparty/unity/test/expectdata/testsample_cmd.c": "832ec9c8c30fd374adea6620dd38c19c689047bdad0513984066e525eefc0723", - "libraries/3rdparty/unity/test/expectdata/testsample_def.c": "246d3d9bc73ccef28f7a70b8748d95cd31eb85b9874e6972d30be1f74000fb8c", - "libraries/3rdparty/unity/test/expectdata/testsample_head1.c": "ed31f2c63e4bb7ba015a5388429b34287ecefa098551e55ae5864b883c3cdad4", - "libraries/3rdparty/unity/test/expectdata/testsample_head1.h": "fc279a298e45f70a559d05132ae888973c8f5aad913c0b2d6d8425ccbde5c998", - "libraries/3rdparty/unity/test/expectdata/testsample_mock_cmd.c": "b826f44458088555058b6c3b9c7ef15c2a5528c8efe01034d0f1debee06a739e", - "libraries/3rdparty/unity/test/expectdata/testsample_mock_def.c": "1016f1162a3ea3be49dffd824e529493d2845860d1139cb44cc32f0fe0a0701f", - "libraries/3rdparty/unity/test/expectdata/testsample_mock_head1.c": "cb7b253cefa315d7b4edaa386bffb63a728f3b33c869bf55ecfcd53d1e47eaaf", - "libraries/3rdparty/unity/test/expectdata/testsample_mock_head1.h": "9cb779d98b40e5dfcf70db57f7d3deae6310cac80547140c972ecde585f56c18", - "libraries/3rdparty/unity/test/expectdata/testsample_mock_new1.c": "4e5d73972dce4276dc688016eeb310e93ef96ea7beee0e6839092f0459798856", - "libraries/3rdparty/unity/test/expectdata/testsample_mock_new2.c": "74418cfefe544ac366a043972648c31742b2a4652155507c93a1a2a38471a5eb", - "libraries/3rdparty/unity/test/expectdata/testsample_mock_param.c": "6a8edda1c9b5a56d38e705d2d0341232ca9a55f1fb7383171475cb972c9b6c18", - "libraries/3rdparty/unity/test/expectdata/testsample_mock_run1.c": "4e5d73972dce4276dc688016eeb310e93ef96ea7beee0e6839092f0459798856", - "libraries/3rdparty/unity/test/expectdata/testsample_mock_run2.c": "74418cfefe544ac366a043972648c31742b2a4652155507c93a1a2a38471a5eb", - "libraries/3rdparty/unity/test/expectdata/testsample_mock_yaml.c": "763d37bc5a5edc7566bf6625dd38878aed8cc94a5cec8f6e23aee16e30bdaad6", - "libraries/3rdparty/unity/test/expectdata/testsample_new1.c": "983abee21894ba9fb5d667a69b046558867f9f16eaf546d259671f54dd4be626", - "libraries/3rdparty/unity/test/expectdata/testsample_new2.c": "9726bdaec7a5c8e99b4e6bbfc41b91c8687665bbafdb617be4514eadc30b023c", - "libraries/3rdparty/unity/test/expectdata/testsample_param.c": "7ab6834f8376908625b9999a4c5dad32ad65c8f3fd852e78b6d9c3bc871fc639", - "libraries/3rdparty/unity/test/expectdata/testsample_run1.c": "983abee21894ba9fb5d667a69b046558867f9f16eaf546d259671f54dd4be626", - "libraries/3rdparty/unity/test/expectdata/testsample_run2.c": "9726bdaec7a5c8e99b4e6bbfc41b91c8687665bbafdb617be4514eadc30b023c", - "libraries/3rdparty/unity/test/expectdata/testsample_yaml.c": "17714f87e28c7723608fdc832189965482404e3540e3f3ec55afa7f07054e0a7", - "libraries/3rdparty/unity/test/rakefile": "7bdd33e324a46e8e5cb97a052a2d62dae0c0a7e4c33cce9976e34af316d37007", - "libraries/3rdparty/unity/test/rakefile_helper.rb": "57a77ff52e8e79a9fa30c308465cbfbfba9881ee5871de182abbf92682f16477", - "libraries/3rdparty/unity/test/spec/generate_module_existing_file_spec.rb": "41d0b6bf8255f97e4fbf6c4f5fb2dcc61d846d2ddaf2cad763c1f500b8a68727", - "libraries/3rdparty/unity/test/targets/clang_file.yml": "afbb70db8cc433aca8e6ea3d04d2f5142cc8bd1a8f6e421006038c9601222d32", - "libraries/3rdparty/unity/test/targets/clang_strict.yml": "336cc5344beccd0c3a6c83227b764c8945193b464600ba56ade14c3c44c98b27", - "libraries/3rdparty/unity/test/targets/gcc_32.yml": "734debdb4392b83942cdccfb31ca724a43b923617a8b45d86bf6a1fefa86a7e6", - "libraries/3rdparty/unity/test/targets/gcc_64.yml": "530851623a24956399add9f0c0fe18719eb6dc428c1bec03ae6b255a9d0ae972", - "libraries/3rdparty/unity/test/targets/gcc_auto_limits.yml": "fbd96dc8a94c4de70dae87ff378312b3ee07cb8219d6290af17d36e3b34d0f6e", - "libraries/3rdparty/unity/test/targets/gcc_auto_stdint.yml": "c9ec9f61987603d059d4509f4befe0744f5fa99a137d95be359ddd2c71443281", - "libraries/3rdparty/unity/test/targets/gcc_manual_math.yml": "3bd8b0d4eb9fa693f4cf74fdaf61e31183b85351c4e957577bc8497cdc8f15a0", - "libraries/3rdparty/unity/test/targets/hitech_picc18.yml": "7b2a4ea56f3125fd75bb7d8e9baf1f26706b206f98c6f88e4d4b4091361fc546", - "libraries/3rdparty/unity/test/targets/iar_arm_v4.yml": "3df93ad02fd4e1cc17d28a63f824881eee4f73e1db54e43ff36909dd2f5eabaf", - "libraries/3rdparty/unity/test/targets/iar_arm_v5.yml": "bb6f961bbf3cf2c4651a33bf415818726b4d609c05cb9fdeabe6dc7a94d47e6b", - "libraries/3rdparty/unity/test/targets/iar_arm_v5_3.yml": "bb6f961bbf3cf2c4651a33bf415818726b4d609c05cb9fdeabe6dc7a94d47e6b", - "libraries/3rdparty/unity/test/targets/iar_armcortex_LM3S9B92_v5_4.yml": "8835f98e84e75b920fb9e27c0ebcc9c11f14bff768b382441099a01cbf7a129d", - "libraries/3rdparty/unity/test/targets/iar_cortexm3_v5.yml": "70ba518b050162526cf5cfd3cdc90a00a6aad0d0ef65558612d384c855513d52", - "libraries/3rdparty/unity/test/targets/iar_msp430.yml": "527ef25ba8d5056a8b44fce38302895a1a8ed342331edeed69db067b831c8e7b", - "libraries/3rdparty/unity/test/targets/iar_sh2a_v6.yml": "b99162afd271d76014220cabda53ff3951aae6595b198520eba36ef095e57746", - "libraries/3rdparty/unity/test/testdata/CException.h": "3d791048e28a3a83580dc5cb7a03d918323247128bde97b055e1037924a4a3a0", - "libraries/3rdparty/unity/test/testdata/Defs.h": "309f8524e59399b7e9e5f2a02ab7a1a4e21d6f808bdb05730ad41366412b72ea", - "libraries/3rdparty/unity/test/testdata/cmock.h": "f600e74488bfc56862df2daedce1a3525eaad43ed72c6706817f6629b180a1ec", - "libraries/3rdparty/unity/test/testdata/mockMock.h": "f198c43bad6e541c08b5e32c204d894be499ff005032c3ffa25e7ed7ba176001", - "libraries/3rdparty/unity/test/testdata/testRunnerGenerator.c": "b860abcd7d1b06000a6cdac491016c7396fb3da70fe4f04bca557fdf599136a3", - "libraries/3rdparty/unity/test/testdata/testRunnerGeneratorSmall.c": "f32a9a46a78102474346c7516bdb0401fabef9ee8616d033237a4bc658e3357a", - "libraries/3rdparty/unity/test/testdata/testRunnerGeneratorWithMocks.c": "96b3eba183241dd7fe69045e51aac3b76ef1632db13ad2ac058300ac201f6d88", - "libraries/3rdparty/unity/test/tests/test_generate_test_runner.rb": "bbcfbcd8c45d6c8dcd05fc2400914805d965e378297d536a63276cb2760deda3", - "libraries/3rdparty/unity/test/tests/testparameterized.c": "a3759d06ae748456d37e36bc8c44fe74995f95813c9697cd98cf4f0cfa55f6bb", - "libraries/3rdparty/unity/test/tests/testunity.c": "f8c1a7d15941af4299f3870d8a4311dd738f36d288ac82d1469c87837827bb7f", - "libraries/3rdparty/win_pcap/Packet32.h": "91424a5947374de2ea163bff4e0c033e3f6d1a2a789f3999f6e20c95080ffa32", - "libraries/3rdparty/win_pcap/PacketData.h": "4cb0df826837bf82691e5a98a7599671b259efc512b1c4825accca77d0cfc7a1", - "libraries/3rdparty/win_pcap/Win32-Extensions.h": "81117e8c6de61172df09834f50a1b127de721abb960e25dd25dbaef97d9e48fa", - "libraries/3rdparty/win_pcap/bittypes.h": "f895a46f3d528a66a2489850e478123dd1eedc5e62a3a529e626c3ab08cbabe1", - "libraries/3rdparty/win_pcap/ip6_misc.h": "fccef70161c3607d1cf0128013ee00410d477a581b62bb0d337d77a51d43ec05", - "libraries/3rdparty/win_pcap/libwpcap.a": "6082e9aeb725b2836e4f746527630885d1ec4c4004f81cdc9fd8d5a130097207", - "libraries/3rdparty/win_pcap/pcap-bpf.h": "a24e6a99451cc013cb1b891724fb04b4079251557852f5667f998a342d1b6446", - "libraries/3rdparty/win_pcap/pcap-namedb.h": "97afaf663c4ed4710101d5c6053011e0764642ae1adbffdabc9ee0dcf88874e1", - "libraries/3rdparty/win_pcap/pcap-stdinc.h": "937710c6e5412a5d2cf423ccbf4dfc06fefef17a077aa73b1fd4d1d82ead8fce", - "libraries/3rdparty/win_pcap/pcap.h": "c86912e57dc4da38d36ea3ac0e85b1b42c57548be418773c627043bc69ae8181", - "libraries/3rdparty/win_pcap/pcap/bluetooth.h": "b3ef727f506c30e72ed22a8837d737d75d2858cd7427e7022ab63cfe3dd9d844", - "libraries/3rdparty/win_pcap/pcap/bpf.h": "ea7397eaeaac18a0230aa2f3fecfabf387f2d1135e80ddc6a8eaa0e9b88c5408", - "libraries/3rdparty/win_pcap/pcap/namedb.h": "94cc2e21a83e9fc7a3b159f2fa5cd6c478edcbed05fef13cd9ad08d5364217f9", - "libraries/3rdparty/win_pcap/pcap/pcap.h": "43db459d6d64e995f8a42cba0c5d5515ed5c366e7bdb5fc717f8d14df614769e", - "libraries/3rdparty/win_pcap/pcap/sll.h": "08e56e0ac5747bfe919b22463cfbbfb8355288b32b36ce112cb047df58dc795a", - "libraries/3rdparty/win_pcap/pcap/usb.h": "81c16c743d81f8302fa61ab585ec0e2e29d69844d03f65600054269d6c315246", - "libraries/3rdparty/win_pcap/pcap/vlan.h": "196de3fda8473dde90ee24a682d399245da03a5a6106accf80d97da43900fe4d", - "libraries/3rdparty/win_pcap/remote-ext.h": "9f61998150429f80e5e000b1c9cab44372dbae0546174fcae8771e2e578bb46f", - "libraries/3rdparty/win_pcap/wpcap.lib": "0becdc2d0f2f1e7be3e56cedc9f72578dbac35b347cc15bc031276d10f501b49", - "libraries/CMakeLists.txt": "3c763650e1d81fc74e4e2f0ecebaa3602f273fc7745d3c8dfc2e092afd400f60", - "libraries/abstractions/ble_hal/CMakeLists.txt": "1cb8f857cfa06ad053b2724f3e418b81d1dc71ec0647cfe4fb0b706e6fb221ed", - "libraries/abstractions/ble_hal/include/bt_hal_avsrc_profile.h": "d92214761ec8efa7ee86d7804b96f09193006f4aaba672f36476eb455ef57768", - "libraries/abstractions/ble_hal/include/bt_hal_gatt_client.h": "91cd571150e804b11320dce7c8652faac9f7c5aa0ce1f897c7c0120c5f0814b4", - "libraries/abstractions/ble_hal/include/bt_hal_gatt_server.h": "bbc5a583be1f7def664b04d64e470385fb7f4d63bdb3ffcc7e961097fd3e30b7", - "libraries/abstractions/ble_hal/include/bt_hal_gatt_types.h": "5d291bb84617fdc485871710b43edac2a64678ac6352ece3ea858d863213a9a1", - "libraries/abstractions/ble_hal/include/bt_hal_manager.h": "c2e0fa6143dc436c62393ffcbd762ed991db78e783ba9223deb02c6b86aeada2", - "libraries/abstractions/ble_hal/include/bt_hal_manager_adapter_ble.h": "5c93421fd8ea114d82a4b2248c4422efc5c06dceaa09697fc8a94b7e4edb99e4", - "libraries/abstractions/ble_hal/include/bt_hal_manager_adapter_classic.h": "107c84bd346e14271cfb9ea46e438c3ef05d78a28ba762a0e50ab1af8847b0fc", - "libraries/abstractions/ble_hal/include/bt_hal_manager_types.h": "f3640d3ef30ae41070fece9f8a07a65a5ab075f6788e42a1a5524160464167d5", - "libraries/abstractions/common_io/CMakeLists.txt": "f812c17f34c2a06a831a4aa5860f620ce96f65374584c43891bd340478e027a2", - "libraries/abstractions/common_io/include/iot_adc.h": "e20e9a668578b5e037baae0b1bfc0ed3560fe3a01e7d9f1d55985e306ef97699", - "libraries/abstractions/common_io/include/iot_battery.h": "3c12ce4bfcdceb3ee6e0c557d2d2009f0c7c6a9979a3b1cb06874e7fe45ddfe5", - "libraries/abstractions/common_io/include/iot_efuse.h": "3ff895ab5584a0c5769e5a387163e5d4f246cb1d7f217d9f67b01a4c123c7e3c", - "libraries/abstractions/common_io/include/iot_flash.h": "f12759d25adb0a0c1c9bd153386a500551596963c926b5e3614298f976d68429", - "libraries/abstractions/common_io/include/iot_gpio.h": "4c62f0c51782b25698e278cb8fcb4fd6080ce0fe9e7351a36b67f6af2e52cfa8", - "libraries/abstractions/common_io/include/iot_hw.h": "3dbc998b76915ed158da5b56a9f1c4605f7f1955b77c41bcfcd05795e6535f60", - "libraries/abstractions/common_io/include/iot_i2c.h": "2fb1e3d1a192585a6f1b9552355cad3c0f6285e352f1ab2fd38c8a16dde23f06", - "libraries/abstractions/common_io/include/iot_i2s.h": "844e15268abe057130215c499f5d55510106bf2fc0fa9b869c84a9398a3cafd2", - "libraries/abstractions/common_io/include/iot_perfcounter.h": "bc54b82f9d1ded264f2663350a5ecb0d742b01fe3d2662a3a8f208e4994c6615", - "libraries/abstractions/common_io/include/iot_power.h": "6cf68180c451dcf72c522fe3941dbbf3c10bec1add9ece93f6e4acbe744f7a21", - "libraries/abstractions/common_io/include/iot_pwm.h": "e9ac4e6b87f9c42c0d55650fd2500f9db73157cacccf709f4ed286657b8d09bb", - "libraries/abstractions/common_io/include/iot_reset.h": "d2ac9bf76af48dd126f3a29cf644adc7e7601a45c77bbe6dc32d1cf54150c75c", - "libraries/abstractions/common_io/include/iot_rtc.h": "145b95d00cff7addbfb7ba44ee33884b20a94a950ae3b3d9908d5f8196762d28", - "libraries/abstractions/common_io/include/iot_sdio.h": "70b4fbf0bd694cb12563915f0582670ff2f98cb4ac39416280afde9ad0911363", - "libraries/abstractions/common_io/include/iot_spi.h": "1179daa5561523f5ea42a04b47b94724980f3d06e7273b299bf5f8eeeb2ed928", - "libraries/abstractions/common_io/include/iot_timer.h": "ad9b65fedb72dcc9e6ce164b65d527f3fe0ccf894076e128a7ad292afe5be1b0", - "libraries/abstractions/common_io/include/iot_tsensor.h": "33b02f744d454d0c52686c628090f9742d77e7a1682fb7ee149c395c73e4ef2b", - "libraries/abstractions/common_io/include/iot_uart.h": "76c93f7e5978d40cb335db05e1dd04c764fbdbb369a9084ec951707352e8beef", - "libraries/abstractions/common_io/include/iot_usb_device.h": "2f48d26588eb56f98e2565bd8e54042d9522d13015139ccb2c950e0579c6a4ca", - "libraries/abstractions/common_io/include/iot_usb_host.h": "39a28b38fbb9b02ab2659cf14428cf010425b258254d6334ee1e63fad3f7e80b", - "libraries/abstractions/common_io/include/iot_watchdog.h": "b5e8b77ffa2d0f845408d18d30b2f176458b286b207737475d1bafa4bc34d1d9", - "libraries/abstractions/common_io/test/iot_test_common_io.c": "da3e4a3279da4007b25975ada566d97a3e4d83ef70db30b96db5ec8e4c9947e7", - "libraries/abstractions/common_io/test/iot_test_common_io_internal.h": "840700ef7122cf14f2532a398c3e4fd0a5cdd841318b62ea77c518b90330b1fe", - "libraries/abstractions/common_io/test/test_iot_adc.c": "eb0f7fe7b2dca830c08a4c5a6e11508873c704480acd385c66ee1a3f9d4d1b17", - "libraries/abstractions/common_io/test/test_iot_battery.c": "8879c4f625519ccd332286629396b1d8041d7b37c92a519658baa4fef6078c82", - "libraries/abstractions/common_io/test/test_iot_efuse.c": "fa6efc8735490396efe8abaf08817eadb783eaccce075811022ff0098ee8e6ce", - "libraries/abstractions/common_io/test/test_iot_flash.c": "83831bc678d08218e0b8a67b9c12a1acd7b2a962369a08de6a4e0ac78a6c3f39", - "libraries/abstractions/common_io/test/test_iot_gpio.c": "9d099a07da544c83d0dafe88d774cb7b9d0cd9ec16fc3110a01352fa691d3f79", - "libraries/abstractions/common_io/test/test_iot_i2c.c": "2345c067219cdf0f131d040ebef2c258933b743d4d181a2520e8da84128b8967", - "libraries/abstractions/common_io/test/test_iot_i2s.c": "22582a2f9d737fbc9b2d2c460af59ff7cb35b90114616119bdffbed50db99f41", - "libraries/abstractions/common_io/test/test_iot_perfcounter.c": "ef6b558138dfc5cf18b4b13192a15d36958cfea5fccfa836f0740ace58872ef1", - "libraries/abstractions/common_io/test/test_iot_power.c": "fd83859873747d6ff00ef05dfeb4ddb8863f5faa75a009e708c1475a8f4dc8a2", - "libraries/abstractions/common_io/test/test_iot_pwm.c": "fda4dae6586b4b61c1bec78ec5a36791f8b615d679f5ecd050f70abd271f84b2", - "libraries/abstractions/common_io/test/test_iot_reset.c": "bf33cb8b0af7eae1bdef79fb288f1062729b5fc70008172131909af85e3004df", - "libraries/abstractions/common_io/test/test_iot_rtc.c": "bc8918e3205637743faf100e44ec5de2cb72a9f1cf9ac0a3c2af526df457e618", - "libraries/abstractions/common_io/test/test_iot_sdio.c": "99b82d7d7271cf8b1cd51f3454406ab7d00db9faa850ee6082e429ff2b49b755", - "libraries/abstractions/common_io/test/test_iot_spi.c": "02e266d7eca769db5d33e43a6e3fad8e63da0c674de6ea1efc8c2e2636180c7b", - "libraries/abstractions/common_io/test/test_iot_timer.c": "9b35827fb43dd5eec488f4c825ef79f5ab2bb835f6985a6a89b8009540a1aa8f", - "libraries/abstractions/common_io/test/test_iot_tsensor.c": "0dfe023f2f456c922d016d0bfd307cd70d9bd89223e000a9d262cbf8dd8a4656", - "libraries/abstractions/common_io/test/test_iot_uart.c": "fab329bf1a05044af198f69387ba823dfae328d862df69ef001fa4918a2c2bec", - "libraries/abstractions/common_io/test/test_iot_watchdog.c": "93126dc28252854b0c63782e7adfd5f2f192d998d8dfb080fb181b0ab2589089", - "libraries/abstractions/common_io/test/test_scripts/adc/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "libraries/abstractions/common_io/test/test_scripts/adc/test_iot_adc_rp3.py": "1427e623936ad97cef2ab2821a274c13065bd88fdddfdea75200926949252167", - "libraries/abstractions/common_io/test/test_scripts/adc/test_iot_adc_test.py": "2887a7ca6321a91bb00c503fcf0f60eccbdb73b3b9a9dfc82117a523b51cf04b", - "libraries/abstractions/common_io/test/test_scripts/adc/test_iot_runonPI_adc.sh": "86f371f2115d6b359d27c656e22ddc8b308476bf9151ccd23579281c58bcb02d", - "libraries/abstractions/common_io/test/test_scripts/gpio/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "libraries/abstractions/common_io/test/test_scripts/gpio/test_iot_gpio_rp3.py": "5072e819e935d56327155b8b3d32149b52de9d9f12427b6c67aae10f7423f720", - "libraries/abstractions/common_io/test/test_scripts/gpio/test_iot_gpio_test.py": "217d919ab1dcbbc99e5b7cae01569e8219ae79d7bd6edf0764ace38d24b9fa55", - "libraries/abstractions/common_io/test/test_scripts/gpio/test_iot_runonPI_gpio.sh": "9f0d1c9fd4c346c88dde88dd692b7a0e88d5da7665bd364c5180e97162c246f8", - "libraries/abstractions/common_io/test/test_scripts/i2c_master/test_iot_i2c_master_rp3.py": "821c577e2a78ab550310fb4727eec32e619899c7b44a4d3552ab6daff60affe0", - "libraries/abstractions/common_io/test/test_scripts/i2c_master/test_iot_i2c_master_test.py": "d4697e5bc20dab76ad494f4fe36b2fa3f495482beeb7e6eafa82f4e6ddab88b1", - "libraries/abstractions/common_io/test/test_scripts/i2c_master/test_iot_runonPI_i2c_master.sh": "baff23f31e85de8a31567f93da2299ea61e6be6c560b7e2d803b0fe844cd525d", - "libraries/abstractions/common_io/test/test_scripts/pwm/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "libraries/abstractions/common_io/test/test_scripts/pwm/test_iot_pwm_rp3.py": "3cb24d95cdb454b176eb0c6e1a61cf07b95859fdb9f14c4b717244385f1749be", - "libraries/abstractions/common_io/test/test_scripts/pwm/test_iot_pwm_test.py": "c95d993bf8ff7e1425224e955f45eb5c2bfe421cd25966d75f2916a9c481be39", - "libraries/abstractions/common_io/test/test_scripts/pwm/test_iot_runonPI_pwm.sh": "a221cd3c37bdec83070fc5b835191dc0405c631770fbf0d5f228082900e586c6", - "libraries/abstractions/common_io/test/test_scripts/spi_master/test_iot_spi_master_pyb.sh": "990cb65c257fc3fbb97c05286fbf3282214deb056429ed6a23f078da2e44eb22", - "libraries/abstractions/common_io/test/test_scripts/spi_master/test_iot_spi_master_test.py": "b6bb2834b8ec4b5c5be59165458567b5447416261cee321215d98311eb4f1eaf", - "libraries/abstractions/common_io/test/test_scripts/test_iot_assisted_tests.py": "695ad3b1c4aaed689e16b65b03fc686ed4b6f168a93ff5e92f26b9fa8bd35848", - "libraries/abstractions/common_io/test/test_scripts/test_iot_test_template.py": "248f70a233930fbf348fc1a7a55a3f7825e67626a265a2e2d6d4c72181601789", - "libraries/abstractions/common_io/test/test_scripts/tsensor/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "libraries/abstractions/common_io/test/test_scripts/tsensor/test_iot_runonPI_tsensor.sh": "f2bd7476ac5785b29f58de13cfbe7f7a2c1ebf8d7bb0f1bff32e36b6c7dae795", - "libraries/abstractions/common_io/test/test_scripts/tsensor/test_iot_tsensor_rp3.py": "6c44faedb3a712570e7821639587ea9ba52a1ca98dbd51b3866a74569b26c9d5", - "libraries/abstractions/common_io/test/test_scripts/tsensor/test_iot_tsensor_test.py": "e940aa613b1f7ecbe3b71bf863f09bb6b25ba64da406108ca076d9933093a34f", - "libraries/abstractions/common_io/test/test_scripts/uart/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "libraries/abstractions/common_io/test/test_scripts/uart/test_iot_runonPI_uart.sh": "304be0c6c2904d9651d32a442eae21c8a440d90426c7b576fdb70a1e80cec0cd", - "libraries/abstractions/common_io/test/test_scripts/uart/test_iot_uart_rp3.py": "e2a51ada857214ea674da0d5be0808338b00131d03e5d22cc4012f1cdb7e8977", - "libraries/abstractions/common_io/test/test_scripts/uart/test_iot_uart_test.py": "5fa064fe610758e5c460708d9c9e379467637ecaff3eb3c483583e80be961258", - "libraries/abstractions/common_io/test/test_scripts/usb_device/test_iot_usb_device_test.py": "9056bec1ba45998aec3cf8e3ba7c86faebdd39841b7b8817ae616d8ec07f37cb", - "libraries/abstractions/pkcs11/CMakeLists.txt": "f801d0746a68ef39ba421b30067a1d5b0b3eeab92c894ba3745e60ac70e392eb", - "libraries/abstractions/pkcs11/ReadMe.md": "e93cec785840baceb712e9717b1e61b5d16b11e4ef896bdd4248fd550f4f2e7e", - "libraries/abstractions/pkcs11/corePKCS11/3rdparty/mbedtls_utils/mbedtls_error.c": "d6743b465d3bcd0445ac01d35599929db86fa26e12e6e423a746de67e930d0de", - "libraries/abstractions/pkcs11/corePKCS11/3rdparty/mbedtls_utils/mbedtls_error.h": "e4ca81332108f92360fd02e95f6af2b79f95d00b7a07d4f8dfadb3416e9b8f65", - "libraries/abstractions/pkcs11/corePKCS11/3rdparty/mbedtls_utils/mbedtls_utils.c": "9a7734e796aceaac8f6448b9b0ae7effc97d0fe4b508f7587c93e7620eefcd3d", - "libraries/abstractions/pkcs11/corePKCS11/CHANGELOG.md": "7957799a46e10e6266bfdbe152c56b7b906903f25264eab454524b10eec32ff9", - "libraries/abstractions/pkcs11/corePKCS11/CODE_OF_CONDUCT.md": "34b6c98d5c23127ae6769e95e483e5bf6d3704ae1f0d3ae4e69d15f4ede118b6", - "libraries/abstractions/pkcs11/corePKCS11/CONTRIBUTING.md": "b050a75d5f6d2236ed40ad91dc53c4a4b30da184f9298f6f18507beae5fd7cb7", - "libraries/abstractions/pkcs11/corePKCS11/LICENSE": "508a77d2e7b51d98adeed32648ad124b7b30241a8e70b2e72c99f92d8e5874d1", - "libraries/abstractions/pkcs11/corePKCS11/MISRA.md": "f996475ac02f238cb52eca1d0708d220e2a12a35ceacda8ef2806d2cad087de0", - "libraries/abstractions/pkcs11/corePKCS11/README.md": "7ed25a4c5d5766fd09d31a366dfb71bcbe055f2442fa5cfb5632c0ca99067801", - "libraries/abstractions/pkcs11/corePKCS11/docs/doxygen/config.doxyfile": "ea3142f9ddec5f7500a0588c4953e4c665fea690ad509495392d3bd0aa110d46", - "libraries/abstractions/pkcs11/corePKCS11/docs/doxygen/layout.xml": "555a70789f54c525456ad9d30730614fe7119afb8b81dd8f8067af28dd14f66c", - "libraries/abstractions/pkcs11/corePKCS11/docs/doxygen/pages.doxy": "1bbe7f892def707a0fb97d301fd388291233b033fbf54370d63f508eb012c492", - "libraries/abstractions/pkcs11/corePKCS11/docs/doxygen/style.css": "e3d3b4438744aa4d547bcacc6e64f3fcfc5057b476c5237e5107e6bbe0aac72a", - "libraries/abstractions/pkcs11/corePKCS11/docs/images/pkcs11_digest.png": "92b850c3d210841e17fd95c3e9c8f7049ce7379ea0a5f63482a02577e4e6dfa6", - "libraries/abstractions/pkcs11/corePKCS11/docs/images/pkcs11_object_generate.png": "de93f2d18ceccb8cad11e8d6ac0b0a724401ef9900d7c6213321f4d2f04b4a06", - "libraries/abstractions/pkcs11/corePKCS11/docs/images/pkcs11_object_import.png": "ffa297b8cffee9d7e5acd6a1c94449886ede948c1c4291add518d29480e58b97", - "libraries/abstractions/pkcs11/corePKCS11/docs/images/pkcs11_rng.png": "6af00134c0f91c2c5112f8b9517e4c1f705b8f27fd835faf614b7d44914ef6f6", - "libraries/abstractions/pkcs11/corePKCS11/docs/images/pkcs11_sign_verify.png": "8003449a654fe1d051ca1ff289c1dd88009ce1c704962177957238d1557603de", - "libraries/abstractions/pkcs11/corePKCS11/docs/plantuml/pkcs11_digest.pu": "5ee805f82c68f09e901c9dd0b944c5e3ab840ec91df2500bc7f6d85e3305e844", - "libraries/abstractions/pkcs11/corePKCS11/docs/plantuml/pkcs11_object_generate.pu": "f03e0963477c8a37af7333513b72b0f0d83a9a49f724a956049794baea5d4f13", - "libraries/abstractions/pkcs11/corePKCS11/docs/plantuml/pkcs11_object_import.pu": "25e535911e40351e16c58745fca0b714c629ddc74e959d7c85ba8b14fb94a2f5", - "libraries/abstractions/pkcs11/corePKCS11/docs/plantuml/pkcs11_rng.pu": "2d32aeefba3adf3f5e992d8ffdc414b01f7d7dd8f3b5419a604f1194f56eec3f", - "libraries/abstractions/pkcs11/corePKCS11/docs/plantuml/pkcs11_sign_verify.pu": "24024c8acc15496eb28b56306a4688bf0d2ff509a352d70961438c31d2988b81", - "libraries/abstractions/pkcs11/corePKCS11/lexicon.txt": "1daddf92d2673aff5be9723d594eec392a87f55eadc3eba1669f46c71e37394f", - "libraries/abstractions/pkcs11/corePKCS11/manifest.yml": "fdc5bd5d73679b01733cf87da37eebd19b2d4356044033f1e670a3fcc718fdb0", - "libraries/abstractions/pkcs11/corePKCS11/pkcsFilePaths.cmake": "c4c788196d29bf84eee316ef787d024df42766a3b539cafb66d88241b713cde6", - "libraries/abstractions/pkcs11/corePKCS11/source/core_pkcs11.c": "054332414af165b56deb39e0efa9f2944d1778917e46bdd4f2819b7a96f6befb", - "libraries/abstractions/pkcs11/corePKCS11/source/core_pki_utils.c": "0869deb94f99e38247ac997a4a9f46679a2768adbc242c4faf44215473bdc913", - "libraries/abstractions/pkcs11/corePKCS11/source/include/core_pkcs11.h": "a316c64222721ec876a3c44b1404d1f4720ebf7af7bde8d4444ccbd326cca932", - "libraries/abstractions/pkcs11/corePKCS11/source/include/core_pkcs11_pal.h": "b56aff8cf6ee881fe9814c168268487932cbbd14c565f483603f44e5fa07dc34", - "libraries/abstractions/pkcs11/corePKCS11/source/include/core_pki_utils.h": "84aa3211591993ecb5176874ae184258bbe8a6bbe493691b3e4fb032bd5aad8d", - "libraries/abstractions/pkcs11/corePKCS11/test/unit-test/CMakeLists.txt": "8a2b3e6b99a50366f9ca7d3e25f4a0ef94fe0ba85d0ce4a6f13f39bb429e3a09", - "libraries/abstractions/pkcs11/corePKCS11/test/unit-test/cmock_build.cmake": "9dc11afd4003291373290c70c37da6f0e19f5f3ac56fdac9443c50abeeb42ed4", - "libraries/abstractions/pkcs11/corePKCS11/test/unit-test/config/aws_mbedtls_config.h": "6f8482bf11b08377434547dc13aa2e4d1cbac539f667416d7f995057ea9f70bc", - "libraries/abstractions/pkcs11/corePKCS11/test/unit-test/config/core_pkcs11_config.h": "93dd3beaf68e34f5be9c2783ae6f4f3ade04101889ff4abece86a1bfec075902", - "libraries/abstractions/pkcs11/corePKCS11/test/unit-test/config/logging_levels.h": "810b8c4754dffa9677db0313abbd9eac6cd14b67ade45e1441e0aeb91085c31f", - "libraries/abstractions/pkcs11/corePKCS11/test/unit-test/config/logging_stack.h": "2d81f65fd7e27f0b9dc34c7544f8a68e32e9935053a10ee7ec8fdbfcadacda6f", - "libraries/abstractions/pkcs11/corePKCS11/test/unit-test/config/mock_osal.h": "db4ae8bed56ed8f3d6646859326905c7d55651dc8d3cde04dab58b3a14675cb2", - "libraries/abstractions/pkcs11/corePKCS11/test/unit-test/config/threading_alt.h": "363ca48b5e23f61ccee72506dc46e76577f5f458456368684869864c92b331f4", - "libraries/abstractions/pkcs11/corePKCS11/test/unit-test/core_pkcs11_mbedtls_utest.c": "86ab71cf8a3d3eba98ab955999df90756b82a579cc815bbc7047562e021ee20b", - "libraries/abstractions/pkcs11/corePKCS11/test/unit-test/core_pkcs11_utest.c": "2376065bb4e7b1afdd799db842786e2d7f3e22f72e4696e39dafa7393161d9b3", - "libraries/abstractions/pkcs11/corePKCS11/test/unit-test/core_pki_utils_utest.c": "fd0bc2a1e0d8f8213df964b3df819e4ff56c5d5531bf8869943b173a99a33a51", - "libraries/abstractions/pkcs11/corePKCS11/test/unit-test/unit_test_build.cmake": "39f00d0e35a597284f2fe65e2450a37041e966fe5ea40107f1a8c872cb6c28c9", - "libraries/abstractions/pkcs11/corePKCS11/tools/cmock/coverage.cmake": "8ac1ac5e6d5628fc8625d57f74249f15f53eba61f8338813d36d3dfa9dc1cf9b", - "libraries/abstractions/pkcs11/corePKCS11/tools/cmock/create_test.cmake": "9b1832fc7a89a99b191f304fdb65d3e3a84ac1aa89cc5b7fc71abe4ec8d72c6a", - "libraries/abstractions/pkcs11/corePKCS11/tools/cmock/pkcs_mbedtls/project.yml": "6940aa5db415867d18ab27fbaad67136bba87a728af16d3e4a317df29362c351", - "libraries/abstractions/pkcs11/corePKCS11/tools/cmock/pkcs_wrapper/project.yml": "bd664576c8428fd2982b8b8d3bab25511398b38a33f13d51f756ee32fe2c0fba", - "libraries/abstractions/pkcs11/corePKCS11/tools/coverity/misra.config": "6088b758faa011ce7db6ed34d0e48c5e98fdd4ff322adff0caee3fcc5a32e689", - "libraries/abstractions/pkcs11/corePKCS11/tools/spell/README.md": "d4fd9c81461a1a063115ec7c0e01aaeeec8d85896a5899d5357aefcb0786a290", - "libraries/abstractions/pkcs11/corePKCS11/tools/spell/ablexicon": "8331e75031fca289b35dff96a11598ce61b39714b6075953768dce9902955bd1", - "libraries/abstractions/pkcs11/corePKCS11/tools/spell/extract-comments": "34bcc69d8a2d3bba61aa433ac7cc40c9c7a3e78ae3aa7ddf930d4e38debe96dc", - "libraries/abstractions/pkcs11/corePKCS11/tools/spell/find-unknown-comment-words": "b5ec8e2fdfda0e4b1c67d716fc6665be77bd4d4a5cace1d21da9c8932c3e89de", - "libraries/abstractions/pkcs11/corePKCS11/tools/uncrustify.cfg": "55c02144fdaa3d62e03ed97e3e89a54b67d9433a5320ec02ec82e75344b21656", - "libraries/abstractions/pkcs11/ecc608a/atca_cert_chain.c": "8a2fc091ca28cdd2664ab70b95b63a803c21092950a4b2bc779e851d0ab16b26", - "libraries/abstractions/pkcs11/ecc608a/atca_cert_chain.h": "7f131af6adb3203be4b966e85d3e0fd276dd4d061723813e67758135bc4ff6ba", - "libraries/abstractions/pkcs11/ecc608a/core_pkcs11_secure_element.c": "23c3e921cb5e8dd083a8e8d04db2fec47995cb7de394197e3bc0178782b3f1b2", - "libraries/abstractions/pkcs11/psa/License.md": "79147b607b79da7884e49f492f0623ad85f7ad30a991f15fb0ab5022e8d5ae44", - "libraries/abstractions/pkcs11/psa/ReadMe.md": "a32d945bfcf103f4e18042a62be40e91114c9cf0a4edbc49464d6e647a083b41", - "libraries/abstractions/pkcs11/psa/iot_pkcs11_psa.c": "e0793cfccc98473f11e61c9166a3c86c22f16533994a5a98b72d5dea3089bdbe", - "libraries/abstractions/pkcs11/psa/iot_pkcs11_psa_input_format.c": "f45ed6ee4912fc36f09ff05deae11feb85561d6bd72b68e3872f05c5588f4c9c", - "libraries/abstractions/pkcs11/psa/iot_pkcs11_psa_input_format.h": "0c4114b6f1934ae33d27f0a09cef894b8891d73c1c2e327e989b493402c2d515", - "libraries/abstractions/pkcs11/psa/iot_pkcs11_psa_object_management.c": "d8b82c6891df0338d7df67f75b2c1ac6a931e3c5411cd85375755d0487f8f95e", - "libraries/abstractions/pkcs11/psa/iot_pkcs11_psa_object_management.h": "1fdc7288cd54755297752fe584d6a3966a7330583c74acda24691cf374703ab1", - "libraries/abstractions/platform/CMakeLists.txt": "20e44ccb13df778f3f938bb19cb876f1cde3a3b7a5d13ae74a2b536cf54798e6", - "libraries/abstractions/platform/freertos/include/platform/iot_network_ble.h": "3a53d18dc0980b0c70baac980653e2246fc6b47e8c7ebf49bea8f5615015205a", - "libraries/abstractions/platform/freertos/include/platform/iot_network_freertos.h": "6ba06cea2088481bbb5a1f63cd35ba61474d81c61a00cca317750a9d7d3541ce", - "libraries/abstractions/platform/freertos/include/platform/iot_platform_types_freertos.h": "3f1fa78bb0b9a275ef4e83df844d4ffc936a36fd67a8e0e6499fe504e93efe41", - "libraries/abstractions/platform/freertos/iot_clock_freertos.c": "978264f245a2ac646ba11ea18a9152208d51ce554dc4d26fb672a0350cf13f62", - "libraries/abstractions/platform/freertos/iot_metrics.c": "70616385eb4c5eea47a718ea0e95cd7f3dbf4b8f243eba60d9d7a2a0f832874c", - "libraries/abstractions/platform/freertos/iot_network_freertos.c": "704c96b6c1c872d7fabaead8ab39995423bada0de8f7636d1a53db6f59aad9ba", - "libraries/abstractions/platform/freertos/iot_threads_freertos.c": "1af294d45841473f9d47245fd1da299171e26118d0fcae8061dbd23ef7055686", - "libraries/abstractions/platform/include/platform/iot_clock.h": "defa2f5319cfaa15321dd7d950f6001b3e48dee14f2797f98c0bf2edbd49afb0", - "libraries/abstractions/platform/include/platform/iot_metrics.h": "4c7213608554b22554f15eb93bd4b76ce76b2169c3719b07687bc3657f99be63", - "libraries/abstractions/platform/include/platform/iot_network.h": "fb4066ad503762e14439fa9bc88ef82fd67efdf165954eeb7240bc12b3f22c84", - "libraries/abstractions/platform/include/platform/iot_threads.h": "a7a70bf277aeea5e8a480008c06331ffc628717b7bddd017351a41ce39c624c7", - "libraries/abstractions/platform/include/types/iot_platform_types.h": "587bae7e9b6ea955877ebd6ba16dec411f452c10d70f8375280d91d0c521cd5b", - "libraries/abstractions/posix/CMakeLists.txt": "de791cb48fb673efa912fdff73e6a3baa8c0b6b8b04e3bb6bc0db4d48bdf92ec", - "libraries/abstractions/posix/include/FreeRTOS_POSIX/errno.h": "63e28e6669ee2923d2ef6ce8e34630e0d4684805d06392918e18c8c382cc0af2", - "libraries/abstractions/posix/include/FreeRTOS_POSIX/fcntl.h": "c8a72b1167bb503a618003740d9302f9c09d824e88e13a846f1e4d088f70369c", - "libraries/abstractions/posix/include/FreeRTOS_POSIX/mqueue.h": "dc4487732956540662472ebbbdbcb8b484b96c96b520b5e2dc4577a990fd77ab", - "libraries/abstractions/posix/include/FreeRTOS_POSIX/pthread.h": "8ed558699b8333699e133ad8e45683f57aed27930647f963bbce9f75fbebd752", - "libraries/abstractions/posix/include/FreeRTOS_POSIX/sched.h": "a5934933798dd885a42a56086a3392a6d2308f7da050c43d7ead74ed9bd6cc68", - "libraries/abstractions/posix/include/FreeRTOS_POSIX/semaphore.h": "5083acc6f8e4b0665fd2e3dd859695e1275e18d28c31d38fb928653cbc9b0e4a", - "libraries/abstractions/posix/include/FreeRTOS_POSIX/signal.h": "741a1a9c91be63b63ce47067603de2800513270634349b1d2bf04b11f306c42c", - "libraries/abstractions/posix/include/FreeRTOS_POSIX/sys/types.h": "8bf35f1c28ad99dbb69188857a993fba0bd525d5331dcc888267be97a6970a88", - "libraries/abstractions/posix/include/FreeRTOS_POSIX/time.h": "3701373dbc98635ccfc0088cf1d458cea5cd1b66cbfa83ed7b71cd6e0810cbca", - "libraries/abstractions/posix/include/FreeRTOS_POSIX/unistd.h": "910f4d265a487dca969d708f60d1b822030feb31eff8f1f96fd234b299390099", - "libraries/abstractions/posix/include/FreeRTOS_POSIX/utils.h": "237cbdd8c5edeea07b02d60dcda4300f956aec170b8654c4878c2e3e849fec78", - "libraries/abstractions/retry_utils/CMakeLists.txt": "01073da9f8c1d000cb903864889e97ae3307697853943f0615d81d9c09b076dd", - "libraries/abstractions/retry_utils/freertos/retry_utils_freertos.c": "d8c30cbade9314109bdbaf1a6562ad4562cd225f66dfcd859f214ac14b9948c9", - "libraries/abstractions/retry_utils/retry_utils.h": "74af51a758846d263f613b7be921f7b65ac29f734eb55cc7ae687a9115aaee42", - "libraries/abstractions/secure_sockets/CMakeLists.txt": "c63a1272f25d85aece46ffe8244b9defef75ea48c8e5c16c6f0b22a783616e41", - "libraries/abstractions/secure_sockets/freertos_plus_tcp/iot_secure_sockets.c": "1056ea6d041a4874647d14539be9436f4d22568a9c221ca1d18932613ba3153a", - "libraries/abstractions/secure_sockets/include/iot_secure_sockets.h": "166e49a70c3f7e5f17950753fbeb1f4a20a08dbe2052a2796e4c5b3b838e6325", - "libraries/abstractions/secure_sockets/include/iot_secure_sockets_config_defaults.h": "01fc8396c938a471b6fe004d7606e5b8be7d242e3930b6650ae4c5a656fcbc84", - "libraries/abstractions/secure_sockets/include/iot_secure_sockets_wrapper_metrics.h": "bf52d247e676e330730561a7563226de37c92dbc1cb0e427e507e9cccb97e743", - "libraries/abstractions/secure_sockets/lwip/iot_secure_sockets.c": "168baf5419310d2561dcd84b89d98dd82431a62bc5de47b0128b49cbcee48ba8", - "libraries/abstractions/secure_sockets/utest/CMakeLists.txt": "fcf1096bfbf730be2081055b8fec3ad799e1862a46ddbd91587b2c6882255f1b", - "libraries/abstractions/secure_sockets/utest/include/lwipopts.h": "3d60a1130ba4f01bbae96b39b459d7c307325066ecf76b6a4d32b8a78b337018", - "libraries/abstractions/secure_sockets/utest/include/mocked-types.h": "8bf43e1f5161d5d7e743f238ffd96bc2107c71a39280f7731c4ead071d3eead1", - "libraries/abstractions/secure_sockets/utest/project.yml": "384bbbe2c3494178d374752ba3669e1913e5e0db48d5815fd41d45574091ef53", - "libraries/abstractions/secure_sockets/utest/secure_sockets_utest.c": "b3632fcf82a6def6a9bbedff47f7058b6002e7e19e8e2af75deedcf2bc532c8c", - "libraries/abstractions/transport/secure_sockets/transport_secure_sockets.c": "716fbd39e7b86cacaf618ce185535c0a5b66884ee0245d9515ecb42dbb5c142c", - "libraries/abstractions/transport/secure_sockets/transport_secure_sockets.h": "0be0e5d14fe39f6faee76313bbc5673e7a32b23afe17efacf4d380c97683394a", - "libraries/abstractions/transport/transport_interface.cmake": "4df5d353d77c20cfadf6c6c0ebd3bd40a9f9051fbf3aa9490a443aa49e2d20d5", - "libraries/abstractions/transport/transport_interface_secure_sockets.cmake": "d717d8cc736cd536569df63416f01f22c342daffafcc6dfd6c8e96cb7b626232", - "libraries/abstractions/transport/utest/CMakeLists.txt": "5c81c12612af44d53c5a902e2214ab4d52a2769d6beb340dc4ca18c1e57bc185", - "libraries/abstractions/transport/utest/project.yml": "a27ed6ecc7dc19dc73a38b7e938048f4fd17f0e46b362cdb585887504f2a8d16", - "libraries/abstractions/transport/utest/transport_secure_sockets_utest.c": "db86ac12bbc2b0a8048d7658cb5184fe766120fa7b95f7a96e8a5be0f381613a", - "libraries/abstractions/wifi/CMakeLists.txt": "8e74e2f750f62bee0e7386b1c94adb07322fc1ae7dbeaef7d9efb54a0d2efb70", - "libraries/abstractions/wifi/include/iot_wifi.h": "0b025389f33184fe47a2e73dd2f756152de927e41fc5e9bca2ff32275b9e1df9", - "libraries/c_sdk/aws/defender/CMakeLists.txt": "de4952a1be909854af3d47476764f5e6675fed9c7e2fc4abad0fd43eb0ee2726", - "libraries/c_sdk/aws/defender/include/aws_defender.h": "e5988117eabcef3002cdf42eb6410a218c7166ed91bed38121af7a817281e45e", - "libraries/c_sdk/aws/defender/include/aws_iot_defender.h": "206eeb76da21496c898aaefbf949c1e6f35fae7acdee5fcd6c6aa33b4fd878e7", - "libraries/c_sdk/aws/defender/src/aws_iot_defender_api.c": "483243a5b084c2db43028a9c79591ecc5634b9814567dbaa92e8069149a44098", - "libraries/c_sdk/aws/defender/src/aws_iot_defender_collector.c": "cb34c7136e3df523f23bc7e1c0cb54e8a22261c668afd26bb9f437f550b78f7d", - "libraries/c_sdk/aws/defender/src/aws_iot_defender_mqtt.c": "622d99ffe2b1d60eb6a12c3d1034c7e85ac53eb2b812ddcfa10df3ab156f6c53", - "libraries/c_sdk/aws/defender/src/aws_iot_defender_v1.c": "acbcca7d333fc49fb8ae8175b872083163f90f8cf7bd4d88ddd341384309af08", - "libraries/c_sdk/aws/defender/src/private/aws_iot_defender_internal.h": "a75d493354f51380eb12069739e0ccb5ccd24776291a5f52025e25bfb67ec27b", - "libraries/c_sdk/aws/defender/test/system/aws_iot_tests_defender_system.c": "54a21bb5f5e11bcc5b88d085f9f69e8f03d6f68912de8d82e65946231d935c3f", - "libraries/c_sdk/aws/defender/test/unit/aws_iot_tests_defender_unit.c": "f936ff72b4dae4222016da5d41f261252b125ffb38ef762d19234a92b65177c3", - "libraries/c_sdk/aws/shadow/CMakeLists.txt": "cc67e96a38a0417c67bfb7a6e000a56c37c84c26dfe426549ca7cf19e59b6bb4", - "libraries/c_sdk/aws/shadow/include/aws_iot_shadow.h": "108a5d14e73a7fd3a10eb8f6e7ba1b235defcbf58887209a5b4af2a3c460fa4f", - "libraries/c_sdk/aws/shadow/include/aws_shadow.h": "9c0ca2358c7f9e38b40ecea0aec469a26c1a0fa049ebf3d012f01c4ab291eded", - "libraries/c_sdk/aws/shadow/include/types/aws_iot_shadow_types.h": "278ff857e76963a72b229f486a9df0fa55930373312c153dd4165fddc075d39f", - "libraries/c_sdk/aws/shadow/src/aws_iot_shadow_api.c": "db16e46664aaf4ccbba826972624aa542392e2cd01992c11697a8c1b6573fdc2", - "libraries/c_sdk/aws/shadow/src/aws_iot_shadow_operation.c": "8c426b8915dd1f52044d2f7700f6427e6e916e83d0b4a43371a6c75d1f4fec7c", - "libraries/c_sdk/aws/shadow/src/aws_iot_shadow_parser.c": "56f27be23afde3278e45a16cadad654709f9edc515953fbeeb329605450d155f", - "libraries/c_sdk/aws/shadow/src/aws_iot_shadow_static_memory.c": "4b8ef05038cc3d9d7909b610db1be4550304e6242c8fdc3cda842573da80797a", - "libraries/c_sdk/aws/shadow/src/aws_iot_shadow_subscription.c": "2469963ec2a797fc4701a7e263176e84c74d50e8abb33ce02f8e18b83534c261", - "libraries/c_sdk/aws/shadow/src/aws_shadow.c": "ef64825842a1e3e23d0b9067316c6f7d4cfe8818b26cc535467cd5a78c9eb98f", - "libraries/c_sdk/aws/shadow/src/aws_shadow_config_defaults.h": "7fb46ab0e7d7bf9fae1a65f4dae6900ae9c3d3bbe0747ccd05f76931b70bb669", - "libraries/c_sdk/aws/shadow/src/private/aws_iot_shadow_internal.h": "dfa638605fa05eae3b00236cb71401b05a23008ba241810a1033219c56bbed7b", - "libraries/c_sdk/aws/shadow/test/aws_test_shadow.c": "d14e0e53cc54f4385f3b0f89a9a64f2b93885721bd1ba1ebd3076f39b67aebab", - "libraries/c_sdk/aws/shadow/test/system/aws_iot_tests_shadow_system.c": "c7cb61fe273c1a5b0b376c8546167941df711e48705241644a173106e8785cb1", - "libraries/c_sdk/aws/shadow/test/unit/aws_iot_tests_shadow_api.c": "9e0d845a524ecdb036b959f81b748db823b79ce8fabd06d040a5ff7d945b5387", - "libraries/c_sdk/aws/shadow/test/unit/aws_iot_tests_shadow_parser.c": "c6d6d717f9e5bb941319e39dc444ae3d8d5d658f2ce20b73a9ccafa499fc7d9e", - "libraries/c_sdk/standard/ble/CMakeLists.txt": "0f11f84f0ecda360b6495bd06f39776dd29a06ca59342126427bc6bcc882e734", - "libraries/c_sdk/standard/ble/include/iot_ble.h": "d5af99ca247bbd26ca89c230c0e11f1f635dc9eb912c8854e9db134468f681af", - "libraries/c_sdk/standard/ble/include/iot_ble_config_defaults.h": "b7725d70d2a4c2b8ed2515d4003aec13b2021ce2bbec7cf63078ec5e24737ad6", - "libraries/c_sdk/standard/ble/include/iot_ble_data_transfer.h": "51bbcadcfca661328116a9ebc719b1aa4ff7de2c8725b99a3f14a89084ced6c9", - "libraries/c_sdk/standard/ble/include/iot_ble_device_information.h": "490adc5631cca5a7902bea574a0dd00c30d08352185f4d09900f25a535b45c6d", - "libraries/c_sdk/standard/ble/include/iot_ble_mqtt_serialize.h": "ba93bc531e0a9edf83e06396eb6e7b5b8f402545d0caa84241445260b2592598", - "libraries/c_sdk/standard/ble/include/iot_ble_mqtt_transport.h": "604635e6ab30c923b9167b051459593ba845ccc073addf2fef6fb729f08b9d46", - "libraries/c_sdk/standard/ble/include/iot_ble_mqtt_transport_config.h": "b2cabcdd54a9fb05873aeb7dbdb30063b634bb53b75e7eb8d41d8c520b601275", - "libraries/c_sdk/standard/ble/include/iot_ble_wifi_provisioning.h": "900a018fd609063948b5f6fc2395c9ba9a6325e6c387f1ab646bde20873f5d9d", - "libraries/c_sdk/standard/ble/src/iot_ble_gap.c": "c0729d65b549034250c5a055c6709cd063367a95c2805d5929c7998ed8312b93", - "libraries/c_sdk/standard/ble/src/iot_ble_gatt.c": "9c45c461fc3f6757c807591cc4dd9a24933ae876786b7564436cff5f9a4dcd34", - "libraries/c_sdk/standard/ble/src/iot_ble_internal.h": "592901572381ab481ea8e96de24f06342ddb476aae0ce36dc882344891cbff9c", - "libraries/c_sdk/standard/ble/src/services/data_transfer/iot_ble_data_transfer.c": "9f4f5bb1942f7939eaf747c4a19bbde34a3711cf4837ba31056b91c0a66c466d", - "libraries/c_sdk/standard/ble/src/services/device_information/iot_ble_device_information.c": "4addd8491e9b72917cc2fe9f1ac6456ee41ee592b250838a55f717e62bc6e792", - "libraries/c_sdk/standard/ble/src/services/mqtt_ble/iot_ble_mqtt_serialize.c": "46278a662dab57ac35c7163d57a7a720f3777c88678a7da309b34d80e5c89e02", - "libraries/c_sdk/standard/ble/src/services/mqtt_ble/iot_ble_mqtt_transport.c": "41ff2daca4830fc46ce1f3a895dcabc8be357a80f83bcacdf436e273df6f775f", - "libraries/c_sdk/standard/ble/src/services/mqtt_ble/iot_network_ble.c": "84a8cff83ece4744b688319066cf547edd2d9859a46d754b7dfdffb7f015c54a", - "libraries/c_sdk/standard/ble/src/services/wifi_provisioning/iot_ble_wifi_provisioning.c": "5c1dce5b3c17a683901aff691509759a5256705d4777a0fdd735b9f653357590", - "libraries/c_sdk/standard/ble/utest/ble_mqtt_transport/CMakeLists.txt": "f6509158be47e3bd43869e49939abdc36fc325bfd508c26eaf8e034fa2bb13ae", - "libraries/c_sdk/standard/ble/utest/ble_mqtt_transport/iot_ble_mqtt_transport_utest.c": "7f2530809364e3723a576ca57e2e656f9263a2b530ba22ca40071ad6bfec5617", - "libraries/c_sdk/standard/ble/utest/ble_mqtt_transport/project.yml": "1a92f7ef1d78b693b3a09059a713261e9fc769fafd95814ecaa52d2aafbef7c5", - "libraries/c_sdk/standard/ble/utest/data_transfer/CMakeLists.txt": "f2a7b2993767011f69d2aaf3e82aa8434f360163119d50c91db8f4d2bcca392f", - "libraries/c_sdk/standard/ble/utest/data_transfer/iot_ble_data_transfer_utest.c": "072a0265edd9c5bf4214ee8c3bb895ef68200dddb8ffde43d893134a4ca9916a", - "libraries/c_sdk/standard/common/CMakeLists.txt": "e9c38c6e8510540bfc140333ed4c17113d8949fd49a2a9b882881999a1e6778b", - "libraries/c_sdk/standard/common/include/iot_appversion32.h": "7a772fe6be5d5f177dfa77b63c643a972c276da82817cf4ebbaba8c27312a66e", - "libraries/c_sdk/standard/common/include/iot_atomic.h": "5a974d1154b945590472b40d4e4103ef489441e7f8fa2499ac68e4c1171c7440", - "libraries/c_sdk/standard/common/include/iot_init.h": "8412b5f301aebd15bad900e48748beb406092843b99feffe97f43994a3273d97", - "libraries/c_sdk/standard/common/include/iot_linear_containers.h": "084bb3420d1d0876efa9d8ba04355032f6284038d8d90a1e7b54612270766d81", - "libraries/c_sdk/standard/common/include/iot_logging_setup.h": "d44de83fb5e0c002fae577fd2bf441fd747d548dd2a3b2e6fdf29b95db760890", - "libraries/c_sdk/standard/common/include/iot_taskpool.h": "d4e48a78b25c2d5de9b4ddca83e04eea73178cd0c4276ed72aabe27ced3d397a", - "libraries/c_sdk/standard/common/include/private/iot_default_root_certificates.h": "e144532e63d0d37975fb2a42e0ea68b5f964c4123e48169a031d646381fcc64b", - "libraries/c_sdk/standard/common/include/private/iot_doubly_linked_list.h": "890dcba20e326ad6f1cafc8aeb2504fd83cc0b66f65c129a1c403b651b3b3ae2", - "libraries/c_sdk/standard/common/include/private/iot_error.h": "e436377ac6fe9c522ba83042eff8bc0b6cdb1ace19ca5eba744080b250c5239d", - "libraries/c_sdk/standard/common/include/private/iot_lib_init.h": "e40e08941cc0652d55f281556a3febf9ce2c8a96ea6dc15c79ae4e4fd857911a", - "libraries/c_sdk/standard/common/include/private/iot_logging.h": "b10f162b2cbed3774fc509a6b7c6dad7e284b8c34896e849df085ffcb99a870b", - "libraries/c_sdk/standard/common/include/private/iot_static_memory.h": "1eec32535deede978f84fdc6e81745c495a553801a4c0dc4c5b87fda8852acc2", - "libraries/c_sdk/standard/common/include/private/iot_taskpool_internal.h": "66d2aa40f59b652d8650fc748674820fade00ddf7d2bf8d94c835bd1b6192fab", - "libraries/c_sdk/standard/common/include/types/iot_network_types.h": "c4633ad4e316fb09dfdb24a792c7d7826f76d50117034c49ed7ef4059191288f", - "libraries/c_sdk/standard/common/include/types/iot_taskpool_types.h": "964ed18ad220fd0edcffbdf5d72631d53331ad350faf377a69b39fd68dc858ad", - "libraries/c_sdk/standard/common/iot_device_metrics.c": "79bc39fc4dcb46a4a8ec924d5b46ff0bc7e36306ae25c166649ce33d3e8e7491", - "libraries/c_sdk/standard/common/iot_init.c": "54d9433be558894d8c00e280a8adede90bca510f0fedd70e7f9061d7245d5375", - "libraries/c_sdk/standard/common/iot_static_memory_common.c": "0e3d567dbc4f4f9986c8a1839e7396d7c336ed3fcb183ee5f9157d824ebfb906", - "libraries/c_sdk/standard/common/taskpool/iot_taskpool.c": "3510f2130d79f5277b89592930790d13ad3e3f6b9f7d461dba286f79dcc352a5", - "libraries/c_sdk/standard/common/taskpool/iot_taskpool_static_memory.c": "be38b5a6336584f62740ae968fc2679dc81e61b73fd9a8834808cc50c6cfc224", - "libraries/c_sdk/standard/https/CMakeLists.txt": "bd2b0a43265d77407cc60c7e1f5b2f2f27004ee8fa195dcafd89c542e87f1636", - "libraries/c_sdk/standard/https/include/iot_https_client.h": "c1b4150a013edb7757b3a8aa85e97708781b5d2441bc6796faea57efc2082658", - "libraries/c_sdk/standard/https/include/iot_https_utils.h": "1f3469febcfff3278b16afc5515c46c689d8442c738505ae14b1d0312515cd7d", - "libraries/c_sdk/standard/https/include/types/iot_https_types.h": "02eab3f1c38260cd7696be6f046015513ef0091edba16c510e0dcdaea295e7e2", - "libraries/c_sdk/standard/https/src/iot_https_client.c": "515d38726ca9742f2427957e4e8f27a383653f5e807ea6329fdef8d4d8463038", - "libraries/c_sdk/standard/https/src/iot_https_utils.c": "e71496d7d9d33b6ac7c568d9ee0dd96fe8bf57f03d2725f703f0ecca6d9023a4", - "libraries/c_sdk/standard/https/src/private/iot_https_internal.h": "7146f910480ee5a2c628bb87fb009ba46d5f942033bd831008fb20a1e027d1b0", - "libraries/c_sdk/standard/mqtt/CMakeLists.txt": "69f3d607bc4c06d40fdba5afd750b15f30217d5df6cd4969c4123126806f9495", - "libraries/c_sdk/standard/mqtt/README.md": "83eaa68bea6808447db5ded5a357f79519addba0ec43d52d6bad031a695df8f8", - "libraries/c_sdk/standard/mqtt/include/iot_mqtt.h": "3287cba2d8297c52d6b21d9bc9deed19438f622d0013caed4480647a28560fb2", - "libraries/c_sdk/standard/mqtt/include/iot_mqtt_agent.h": "552e7d3e4e54cd1090788bca077e1beaf765eb98f64b19c6278c75276eaf4e25", - "libraries/c_sdk/standard/mqtt/include/iot_mqtt_agent_config_defaults.h": "fd403ba274c904d0c2f74723470ba36bb8d87c13efa55bd18c6ff4a3e419b392", - "libraries/c_sdk/standard/mqtt/include/iot_mqtt_config_defaults.h": "c8874aa0a7f4bded9c5cecea557e1ab6f4c931a111df5cedee840e794abf9d69", - "libraries/c_sdk/standard/mqtt/include/iot_mqtt_lib.h": "9fbc2764e0ea8f53a8896b09db22d29d80066b1b671fb59e0a035ef8dbff291b", - "libraries/c_sdk/standard/mqtt/include/types/iot_mqtt_types.h": "24633a4d5b3e304c95303e2840f1435c9b285c7692c373ad3db35015ef6d984f", - "libraries/c_sdk/standard/mqtt/src/iot_mqtt_agent.c": "b425e8a9ec45a2cd6bf88a008239dc11b86e8447c203a70460551eeb9e78dbe7", - "libraries/c_sdk/standard/mqtt/src/iot_mqtt_api.c": "ff420da868f1d436f871deae1e65bfade349761cf255c77d81f519013f56ce4e", - "libraries/c_sdk/standard/mqtt/src/iot_mqtt_context_connection.c": "68d0ffdf8c6f16431dc3fafa0c1dee813e7a47a0b380a48c901447eab6eeaf72", - "libraries/c_sdk/standard/mqtt/src/iot_mqtt_managed_function_wrapper.c": "ad603702595a6c26a64ab24335d33276c866b7e2f5a0be8abd7679548b9521f9", - "libraries/c_sdk/standard/mqtt/src/iot_mqtt_mutex_wrapper.c": "d21248495ba1ae1c5afde460a0e1b2148505075d48f512fa5c4be267057bb322", - "libraries/c_sdk/standard/mqtt/src/iot_mqtt_network.c": "e99a7cb9dabe6d5d5be10d59dfb5bc05e09b12220030b92ff21772eb973b80bd", - "libraries/c_sdk/standard/mqtt/src/iot_mqtt_operation.c": "340f040e0f9c784a2e792214a471d69ad33c666406099c8b363a9443b207c737", - "libraries/c_sdk/standard/mqtt/src/iot_mqtt_publish_duplicates.c": "209e3e8ed5337dcce7ab61de1916a9682bf7e9a297b31f05c77d4e21c01f7b07", - "libraries/c_sdk/standard/mqtt/src/iot_mqtt_serializer_deserializer_wrapper.c": "a9313cee3fe3266768e85e05defcd116919eaadf24d9996b5ba470a53ee6c1c8", - "libraries/c_sdk/standard/mqtt/src/iot_mqtt_static_memory.c": "5722e931c09a19c09f3efaaa37decdad042d32d8d0062b337ce8fea001566191", - "libraries/c_sdk/standard/mqtt/src/iot_mqtt_subscription.c": "263ba6489a1fbbdf9c674c75251811baa6819e9f98ff2f5853e060e829ff4c4a", - "libraries/c_sdk/standard/mqtt/src/iot_mqtt_subscription_container.c": "39bf732e97066a4c9e2761fd4b807d7bcb9eba135f425b8ef67756d677d9c98a", - "libraries/c_sdk/standard/mqtt/src/iot_mqtt_validate.c": "dfc50e0321c44f4db18ed91056d65f5a54863879f1247245fa19e5d28b8cc35a", - "libraries/c_sdk/standard/mqtt/src/private/iot_mqtt_internal.h": "8f5f21f27646d77c2020c2312189f456e6d3743a263e417e846b1b1575b3841d", - "libraries/c_sdk/standard/serializer/CMakeLists.txt": "dde7183a219ed813b6dad00bdf0423e5cee51c543db53a9365432471da41ad9e", - "libraries/c_sdk/standard/serializer/include/iot_json_utils.h": "5bf1f710e690b9955d90e0df02db2cfabaadea4d750acda4085c25feebbabc4b", - "libraries/c_sdk/standard/serializer/include/iot_serializer.h": "d83dfd2b9cae3df2ce12e1839039d0cbb436a0864b06b0421b2ffa2e3e1ed038", - "libraries/c_sdk/standard/serializer/src/cbor/iot_serializer_tinycbor_decoder.c": "b57282296f0f67cf378fc353a6e93201f6cbc3eb9285370511e9d832a13cdc3b", - "libraries/c_sdk/standard/serializer/src/cbor/iot_serializer_tinycbor_encoder.c": "d9d45720775644c14d3b855c70e77c988bf031c73013101e652edaede696db23", - "libraries/c_sdk/standard/serializer/src/iot_json_utils.c": "31e6f42d53b68ca208463ad9d656343a951618c87053e263cab533448fabc5f6", - "libraries/c_sdk/standard/serializer/src/iot_serializer_static_memory.c": "b29ecc34006e58e985cffc405120941f447ffab98647b5c444937b6c93d0cd88", - "libraries/c_sdk/standard/serializer/src/json/iot_serializer_json_decoder.c": "bd54cf6d88268aef636c4ff52a4c52550dd772181d7967cf0ee27d1c5fd0f541", - "libraries/c_sdk/standard/serializer/src/json/iot_serializer_json_encoder.c": "45d69b8bea3fde62360a18ca10268196931dea88b8ef3ace62af066d5ba67c9c", - "libraries/coreJSON/CHANGELOG.md": "efc83f098daae4516e71a34036cb907a6d14e2fc8dd2cffad19f2b3b2926a94e", - "libraries/coreJSON/LICENSE.md": "508a77d2e7b51d98adeed32648ad124b7b30241a8e70b2e72c99f92d8e5874d1", - "libraries/coreJSON/MISRA.md": "5a014f2acd491402fb2479209fc2b752ebec45ff733089751c62e8e464633152", - "libraries/coreJSON/README.md": "e5690e8c8ca897d2a4c1f82a7176537d18aece2e1348fa4a5541249c8a66c9ef", - "libraries/coreJSON/docs/doxygen/config.doxyfile": "d7e89c5b42917f7b85b9043252e7acee1ed7166c3a3cdf641a53761b8ad89e96", - "libraries/coreJSON/docs/doxygen/layout.xml": "555a70789f54c525456ad9d30730614fe7119afb8b81dd8f8067af28dd14f66c", - "libraries/coreJSON/docs/doxygen/pages.dox": "c099e791c67d820a2bee12b728ddd9f688a684983fabdd9717a95f9c09b5cb98", - "libraries/coreJSON/docs/doxygen/style.css": "e3d3b4438744aa4d547bcacc6e64f3fcfc5057b476c5237e5107e6bbe0aac72a", - "libraries/coreJSON/jsonFilePaths.cmake": "f32f3a92f044c43d37eeb359f23efbdbd428ff643b1778c5381d1fbdc353cf1f", - "libraries/coreJSON/lexicon.txt": "581289ecf01fa8cc600f1596fbd95cc16096d513e1d9352fbdc60f53787d8dc7", - "libraries/coreJSON/manifest.yml": "587f9a37543c0c5453f21de44f1fdb407f80a7140fc81f8bfeb250ec6177b830", - "libraries/coreJSON/security.md": "92134ccc4ed81e5546dd4581be6ddbd3a3a98aafc4c06089ab1d9c1a58df80d5", - "libraries/coreJSON/source/core_json.c": "85e1ea67a8090d455bfa0bf55291a58340aa85f1181db70f0a8bb8f8c0446249", - "libraries/coreJSON/source/include/core_json.h": "0931d76f23e2d53e308b5b56f6e351bc0c1669412d04f7cd809c4c14859beffd", - "libraries/coreJSON/test/CMakeLists.txt": "f22296561886d698c1672c2d5df2e94c34363b8a40d42985fc71abc5640ddcc6", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/CODE_OF_CONDUCT.md": "34b6c98d5c23127ae6769e95e483e5bf6d3704ae1f0d3ae4e69d15f4ede118b6", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/CONTRIBUTING.md": "b050a75d5f6d2236ed40ad91dc53c4a4b30da184f9298f6f18507beae5fd7cb7", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/LICENSE": "09e8a9bcec8067104652c168685ab0931e7868f9c8284b66f5ae6edae5f1130b", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/NOTICE": "d4290ed64c2edd0fce1d84e3f9dfb2881240fe534def76b8cd29ed6af683e287", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/README.md": "d1de02d49f1baf2d8f376777731ca952eda223d23faf6f87ac17ec5f6eec1622", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/scripts/setup-proof.py": "250c684e31390f2831c4833b5bb642fcb9246e14a73e4e71aa64717c866d30ce", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/scripts/setup.py": "15eaf8dc1a3921b6ec647396e504b6f1346ca37aa7aea46a73110e5681211b2a", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/scripts/util.py": "7cc883f38bbe3a34f1be2f78655131f82d89356112dac292edbf9c5ef4de11b8", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-proof/FUNCTION_harness.c": "f2802074ae7080f73b53081f262c7b9f7245b8ef1e4fd4e3dc88262a2453af4d", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-proof/Makefile": "b7311b8cdd2f100da52ed793ddaa77aab0e8943e06cdcd2b29c05953c869e5a3", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-proof/README.md": "9abd31be7593b6de5507a36587f18298e870da24e2c2f2ab1235e9e04464d6c7", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-proof/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-proof/cbmc-viewer.json": "31c095521f43d2b919f96351d52b5900653ef3813af1c055ef88cb01114c57b6", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/include/README.md": "1ebb917adfbfeba5019583d75438c3f745da8a93752e88b1b31bdad351a1ac9d", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/README.md": "dda48722cef39f7482baa20929815222d6cb643541505af7ac0202ab4ea30675", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/assert/Makefile": "8eda2c18734c4e1a2b07bb5cdbd5b7d5974651184a8dd594409e122b52a06416", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/assert/assert_harness.c": "034f86fc93c6cf928500721ba5bcf9b96f327596a2b931b52474ddd66c765941", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/bounds_check/Makefile": "142e70065dfe3d20bfd83d4566a26e60a254d410111d9af072e31e96b6209cd6", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/bounds_check/bounds_check_harness.c": "b1b242ef2cbc76b275951e75d87fe07d181a3538b1fc8c31839883f8eef80a11", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/conversion_check/Makefile": "97ff3a0a72e2ad71f520fb3875cfbbd3a1124df6236a14930948343fd3f219a0", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/conversion_check/conversion_check_harness.c": "89c63b828b051da2e0b0767cd2704419c389d5390178cbdcccfe591940d42da1", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/div_by_zero_check/Makefile": "3367383673bcd9262b9b61fff6c4961abe70aa2ffb3b8e3f59d014d94927b84c", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/div_by_zero_check/div_by_zero_check_harness.c": "d4255afad71ad03efc1729c46bab842f1d3727967eb75c0e41d26add25ae684a", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/float_overflow_check/Makefile": "49ffbdb80bdb47fef8c3f2af3e2445def5a1fe764285f7f28163ff55206e0cf4", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/float_overflow_check/float_overflow_check_harness.c": "0b762450e1abdfdb6eefde48545d0ea51a5699727ca46decb8aa6893dc0bf684", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/float_underflow_check/Makefile": "3a561f39099cc9a6783bfc779c56a68a08b61c336f44cdc3b957868651899354", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/float_underflow_check/float_underflow_check_harness.c": "8b84e5fefef6615ed4518834b9861bf07ebb35db8583a30c26d09f8d04bf4381", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/nan_check/Makefile": "440a4b02b6bcaa94c95c33b900ba5febca83aed17990c30b5dfddce246c9f29e", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/nan_check/nan_check_harness.c": "8376f52bcb36282975be5749f61179bffb5b5ced4161e39c68ef86c3792f09bc", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/pointer_check/Makefile": "ecd0cacef27ec44df5af35549e801aa4c17f4078b3d4b5beb3e73dfc787f54c2", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/pointer_check/pointer_check_harness.c": "662e399061f5c413c8ace57886174b11e755cb66999a90950409bf04d8cfab07", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/pointer_overflow_check/Makefile": "f1875b30dfc83287132387682a13e435a82b11186707526d39a4e10794cebb04", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/pointer_overflow_check/pointer_overflow_check_harness.c": "118c0a62a647d824f98ec779956f89b540b74206c4f81f83298d6440fa1bee16", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/pointer_primitive_check/Makefile": "131b7ee0daed69e68bdb7a949ddb5667f216a3912522ca69019871a81d25f10d", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/pointer_primitive_check/pointer_primitive_check_harness.c": "ca0e47a48fe2a0023f6c5e7e410efd5e90705d39864b3be48322f5ac82f3398d", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/pointer_underflow_check/Makefile": "5208e5e4348a5c4bb983af1c1907d7531b5988b89589ca569fbe74a8f6daff69", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/pointer_underflow_check/pointer_underflow_check_harness.c": "effb8b9837ed060a1b9a1c905afc5003bebe4832a27e7bfec940405b2e6eba52", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/signed_overflow_check/Makefile": "e08765ec88321f8f909a417af4d4e528222c32ae1224bc120a518d851accb3f3", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/signed_overflow_check/signed_overflow_check_harness.c": "1083db8aa4fc4bdcc3b89d3723d0fe58e529c330a21200f3ddc75adaf7ff9956", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/signed_underflow_check/Makefile": "4d970e22f170d34ca5c2b92db785972eb9e0529c1f68217da5eae1b86cbd2944", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/signed_underflow_check/signed_underflow_check_harness.c": "040b507614725741b8bb8d553b12d273aa7e165253fbe17e9e9cd58102d01409", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/undefined_shift_check/Makefile": "da67123ebdd610d48888064339a1180c0ebdc662b7d19c68f97a120c9499f84c", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/undefined_shift_check/undefined_shift_check_harness.c": "0f643a2aad93e70fc540f6aecf3046063a09817e5c4bec735c88ac7820f62ff2", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/unsigned_overflow_check/Makefile": "e90461e92d5257521b9c4766beaa3ff986f35dc2c7dee695f983e88baff8e2aa", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/unsigned_overflow_check/unsigned_overflow_check_harness.c": "b85cfcacd82a28417112248f72e8f734cd7799b1df4360734caf186c775669a5", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/unsigned_underflow_check/Makefile": "03beb64ea16f9748f3d739572b850371444fcafe762a51b4240bb9bbef85fdc1", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/unsigned_underflow_check/unsigned_underflow_check_harness.c": "70f9f7cbe112c6610d9785a425bb43f098e80cefce795a1f79bdda03220d6c06", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/proofs/Makefile-project-defines": "9f1fb40fa45392f32901168bf4e012b78adb71e2daf6864d4a1a7d76b84f6f51", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/proofs/Makefile-project-targets": "d8c3930590646a4a3b5f5ed446758bf2d8b27ffb742dee196efb816ae2f502f6", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/proofs/Makefile-project-testing": "acb51f25870892f177057e7f56e73979e0eeb4967e3280aa160fd33a1a7bb03f", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/proofs/Makefile.common": "e23552ebdfa3fdba1bb158d8c868f139f2411a261c8d88f36bf9e2d6c076a21f", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/proofs/README.md": "142dc28dad300138bed3a174bdb7ce714f1c6a882299440e63552e2bebd2f7d0", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/proofs/prepare.py": "0d50cf7aece2c4f205a058ddb3bf6c1b0c1cfcfa9ea6dca9a145f1bdd7a442f9", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/proofs/run-cbmc-proofs.py": "aedcb62405ffb22af83c4b4cb38a665b57bfa3ecd102d868056b315306a26734", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/sources/README.md": "cfaa166351aeff46c321fd5627d417278accf8e88155481f678702644ce88138", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/stubs/README.md": "a87bfd893269da4a5c95f88369ce394b1e031dc6dbfd09195cd11485b77eac7f", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/training-material/CODING-FOR-VERIFICATION.md": "84c354dc41a70be81f085e6cb75f8328980b83a68333f179bba3fb69fee29bc7", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/training-material/DEBUG-CBMC.md": "d7e3ec89a44e5efcd8c2accac852bc9f261df54445eb4b3d1b4ffe5126abe6d1", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/training-material/FAQ.md": "d298098f6ead244a7d815aae24fe005e0ea09848abe42dd255694d42632769f5", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/training-material/PLANNING.md": "06ffd2048e70658246cba4359d5bcd121868238ca918041a874fddf311c22a8b", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/training-material/PROOF-WRITING.md": "2c037872b6c0994de2e0028cb9e7a8923342cacb2b6e3adc1c6f4ef3971a950d", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/training-material/README.md": "e453beb7cb3e4064bc6c85102c00176bf77b14e705046b8d8138c1614e237b12", - "libraries/coreJSON/test/cbmc/aws-templates-for-cbmc-proofs/training-material/checklist.md": "000710d7ef9e7e716ff58869dfd7efebfa9d7b017672812d089a55698494e52f", - "libraries/coreJSON/test/cbmc/include/README.md": "1ebb917adfbfeba5019583d75438c3f745da8a93752e88b1b31bdad351a1ac9d", - "libraries/coreJSON/test/cbmc/include/core_json_annex.h": "8677edc5f2b496d1b67abdd5f689c96542fbb066619e167ad78222dfc3c2b926", - "libraries/coreJSON/test/cbmc/include/skipGeneric.h": "ff170c08f0cd276d2d41ca915c45a3dfd138cab13a0284984c6359d815766b69", - "libraries/coreJSON/test/cbmc/litani/LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30", - "libraries/coreJSON/test/cbmc/litani/NOTICE": "becc1029d600695c22c6c3dbe3a8b7824b539d9b7ed533b4ecebbb259dce2d8b", - "libraries/coreJSON/test/cbmc/litani/README.md": "f15f69182a049661c0795534e03b6d4e5aa0a8093d5da4421fcb655eb27f7681", - "libraries/coreJSON/test/cbmc/litani/THIRD-PARTY": "83a5fa777a8dfb9127d69e1b0b9d776930530258300c41ac8b2180c5699bd273", - "libraries/coreJSON/test/cbmc/litani/doc/Makefile": "af66c3b302388d09608d2c335cbea6d74398f1f5a8c4d56c86cd705947bc0689", - "libraries/coreJSON/test/cbmc/litani/doc/foot.html": "1694311aa8f471c9904dd4588965bd326173f216e30353e5d65f64371007da1e", - "libraries/coreJSON/test/cbmc/litani/doc/head.html": "76ce1041a11873360e6cda911a970b337d2191c125c5d6910798bc836d4d81b6", - "libraries/coreJSON/test/cbmc/litani/doc/index.md": "83267d5fead2464a853bc29710fd68793d94a32119c280d89802ede900a1dc08", - "libraries/coreJSON/test/cbmc/litani/doc/litani-flow.dot": "bfe01d6fb726571e82beeb4df7751cd72e655b8527edb8ffc4244247537d036b", - "libraries/coreJSON/test/cbmc/litani/lib/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "libraries/coreJSON/test/cbmc/litani/lib/litani.py": "31844ab14bae0b891200331e6ffeced6a5dd26c3c95c86e160b3344dfeb38d8c", - "libraries/coreJSON/test/cbmc/litani/lib/litani_report.py": "9cb5d588df49b4a93c101b674c4c96a3e355654130a88c5fe4dd03703145858b", - "libraries/coreJSON/test/cbmc/litani/lib/ninja_syntax.py": "74cf8d2ba381b447796b4db7933711a1844284b192cca23638bfc7b21a54d4f3", - "libraries/coreJSON/test/cbmc/litani/litani": "975fe534cc3281675d158416f4b5ed79b0b9fa5345d3f0944844ef2227498c84", - "libraries/coreJSON/test/cbmc/litani/litani-progress": "a3c0f0873b06e801587dbbd26aeb9382fdb60b97efffc56b9fbbae9d3627c9fc", - "libraries/coreJSON/test/cbmc/litani/litani-report": "ea9aee104dfc7a73cb89a6b01c8ebb581e7fc6e9b4f30796bb96ee07ae5795be", - "libraries/coreJSON/test/cbmc/litani/templates/dashboard.jinja.html": "224c4855cf8079003e72c57ce2aa7429bca50924f6d9b5ccf27a711a19844798", - "libraries/coreJSON/test/cbmc/litani/templates/file-list.jinja.html": "2151bd3c71559e887d64ba471522f5fc4eeea7f261d118672d390cef3c5fd856", - "libraries/coreJSON/test/cbmc/litani/templates/pipeline.jinja.html": "d22892a6cabbe10c9aa51603cb763492012d2212e142b3404fdcf34bcd4e848b", - "libraries/coreJSON/test/cbmc/litani/templates/runtime-box.jinja.gnu": "ae73382f2cba9ea418fec6f163192fbadab884296d55ca58ff4af86cfa257baf", - "libraries/coreJSON/test/cbmc/litani/test/README.md": "c1e5c0ec6b79a30040e88986dc84d15917712af49a9989aacc1542c725a7f652", - "libraries/coreJSON/test/cbmc/litani/test/run-tests": "0b3af49895a6b7d57e9889139f3ed20c028a7611c140e977583a27b7f4028d50", - "libraries/coreJSON/test/cbmc/litani/test/tests/1/Makefile": "a2ec421ed917ecd59f4c885faa487eeed30b59d3f8f09f863a00d240b2bcb983", - "libraries/coreJSON/test/cbmc/litani/test/tests/1/litani-test.sh": "b1cb5ad8b6c5b640659fddb32988d986b27bded9cf3f1a08fd1ecec87f730e93", - "libraries/coreJSON/test/cbmc/litani/test/tests/2/Makefile": "3531c2a1733b48d064016a34b7582874a87757ae279d1c5099cfd3ba6c5f2f3d", - "libraries/coreJSON/test/cbmc/litani/test/tests/2/litani-test.sh": "b1cb5ad8b6c5b640659fddb32988d986b27bded9cf3f1a08fd1ecec87f730e93", - "libraries/coreJSON/test/cbmc/litani/test/tests/3/Makefile": "3793c6940a452f1db086977f59e648b89c90aee688ff323f5ae597844078cf66", - "libraries/coreJSON/test/cbmc/litani/test/tests/3/litani-test.sh": "c95d186c612c5a62e237ee1613e4a51f830c81f1cbc6db442a2ce5f4f67b1fc7", - "libraries/coreJSON/test/cbmc/litani/test/tests/4/Makefile": "3793c6940a452f1db086977f59e648b89c90aee688ff323f5ae597844078cf66", - "libraries/coreJSON/test/cbmc/litani/test/tests/4/litani-test.sh": "b1cb5ad8b6c5b640659fddb32988d986b27bded9cf3f1a08fd1ecec87f730e93", - "libraries/coreJSON/test/cbmc/proofs/JSON_Search/JSON_Search_harness.c": "9401de48b5baef89737db6458c9713d0f7038d78b6e6d2a64ed34d56b9c2fe97", - "libraries/coreJSON/test/cbmc/proofs/JSON_Search/Makefile": "9d3df3779dc4487191a4958e420b5e17ae7f2a8c72b42b5f828a5fde74aef4e4", - "libraries/coreJSON/test/cbmc/proofs/JSON_Search/README.md": "6e3f49ad385305cd0ec09bd6e9f6d343be784e9a4d6cfde31d839c0fb54a1312", - "libraries/coreJSON/test/cbmc/proofs/JSON_Search/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreJSON/test/cbmc/proofs/JSON_Search/cbmc-viewer.json": "6da77d4bf12527d3e501027861e38907084f4d23c6ce122d4da4d94dcd33a5a3", - "libraries/coreJSON/test/cbmc/proofs/JSON_Validate/JSON_Validate_harness.c": "e3acaa7b37395a1b8658553b8e1cf5e69d9476a5e6a69609c29eb3b2f6540d4c", - "libraries/coreJSON/test/cbmc/proofs/JSON_Validate/Makefile": "517644e63575deaf71c485a6383000b9e948f0dc3148ac746c4ccfbac45643fe", - "libraries/coreJSON/test/cbmc/proofs/JSON_Validate/README.md": "b59f599efc875baf43bec04bbf8b8128035d4029384eef85e791220652556a6e", - "libraries/coreJSON/test/cbmc/proofs/JSON_Validate/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreJSON/test/cbmc/proofs/JSON_Validate/cbmc-viewer.json": "2d3aff70830a307ffd0ea58660969c781f4cec87116de38cc6f39b97ae7aef0e", - "libraries/coreJSON/test/cbmc/proofs/Makefile": "66cadd3793117843a103cd3cedd842f1b05039bb3b70eab1855b1817ee829217", - "libraries/coreJSON/test/cbmc/proofs/Makefile-json.common": "9638337492da33c3892e0b27c238666a44bd14adda49b30a2ff92b632b45387f", - "libraries/coreJSON/test/cbmc/proofs/Makefile-project-defines": "fd69da4e6c6df9b44d9dd5808117deb730a4cc7407a96f84ee7097fc5bbf3b30", - "libraries/coreJSON/test/cbmc/proofs/Makefile-project-targets": "cf0f30169e817afc81cc8d161d4bcc336f369392db04b81c43570fffdb57ca6c", - "libraries/coreJSON/test/cbmc/proofs/Makefile-project-testing": "acb51f25870892f177057e7f56e73979e0eeb4967e3280aa160fd33a1a7bb03f", - "libraries/coreJSON/test/cbmc/proofs/Makefile-template-defines": "50b3687413c3a9a1e42a62954b1007e270fadbfda068fcb8e796b1862563507f", - "libraries/coreJSON/test/cbmc/proofs/Makefile.common": "e23552ebdfa3fdba1bb158d8c868f139f2411a261c8d88f36bf9e2d6c076a21f", - "libraries/coreJSON/test/cbmc/proofs/README.md": "142dc28dad300138bed3a174bdb7ce714f1c6a882299440e63552e2bebd2f7d0", - "libraries/coreJSON/test/cbmc/proofs/run-cbmc-proofs.py": "b37b71fb8ccf4b101ea1ffc65107c857f45fa6e228f1eb9e2041c017efd3319c", - "libraries/coreJSON/test/cbmc/proofs/skipAnyLiteral/Makefile": "bfd696dd9aaf2ce7b0c486c3dae2e181438e83727c76dd1cf34559293bc2e0d8", - "libraries/coreJSON/test/cbmc/proofs/skipAnyLiteral/README.md": "7df172f374b3f15a458a9fa766ba5e79687549f2dcf501d8d7de9aa5290efc2f", - "libraries/coreJSON/test/cbmc/proofs/skipAnyLiteral/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreJSON/test/cbmc/proofs/skipAnyLiteral/cbmc-viewer.json": "fae6047e1eed0cf84842c64e6fb697d295bb4cb3b4c09b8314c306c3fc6462ae", - "libraries/coreJSON/test/cbmc/proofs/skipAnyLiteral/skipAnyLiteral_harness.c": "c7197f766268d4bfc42dd1f974dd47a7355ec05e287cc3a562f3aea3e3b77113", - "libraries/coreJSON/test/cbmc/proofs/skipCollection/Makefile": "0349bae0eadee7229072a5bdeda767e0d85ea4dd56f1829890c7957ea283e0e8", - "libraries/coreJSON/test/cbmc/proofs/skipCollection/README.md": "4314646b3917f891cfb5ca83b7862bb9412434bc7b156f8337dd6deaf4b4751f", - "libraries/coreJSON/test/cbmc/proofs/skipCollection/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreJSON/test/cbmc/proofs/skipCollection/cbmc-viewer.json": "be80ad3ea1285e22419058ed98c05d8159994755fa4c6bafb015d5d63f065128", - "libraries/coreJSON/test/cbmc/proofs/skipCollection/skipCollection_harness.c": "ad4b9ce8661ac3666b3588740e0dbd608b236b1c71a587d2bb8cf56bf57598e0", - "libraries/coreJSON/test/cbmc/proofs/skipEscape/Makefile": "2c355113aec48c5d4c4dbdc16fef7601c174011b61920e1047e6c55487d147da", - "libraries/coreJSON/test/cbmc/proofs/skipEscape/README.md": "3e5425772da09445abb5d976a789941ea1233744a717887165efb7a89f87ba2f", - "libraries/coreJSON/test/cbmc/proofs/skipEscape/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreJSON/test/cbmc/proofs/skipEscape/cbmc-viewer.json": "6318ff51b7058066c99a87b99194b1d65d4a33d77a83da3dc4fad6327778b29f", - "libraries/coreJSON/test/cbmc/proofs/skipEscape/skipEscape_harness.c": "15ed7715eb0f4fd87289d95ae4ccf2a1a54b4f00cb228f0e4cc67268b9f0b94e", - "libraries/coreJSON/test/cbmc/proofs/skipNumber/Makefile": "20ffa32b03006ec004d968f3984567be678ce81b8a4ae85c250f8a3630c12666", - "libraries/coreJSON/test/cbmc/proofs/skipNumber/README.md": "0d4f0d613efe747e39bac8874b639129b74f164fcb017cc8aa1acae9e0da8b0e", - "libraries/coreJSON/test/cbmc/proofs/skipNumber/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreJSON/test/cbmc/proofs/skipNumber/cbmc-viewer.json": "13bd089ecb4de1a6edca24af3bb2d2dbf124681e71a50539bda9cb85c502b16f", - "libraries/coreJSON/test/cbmc/proofs/skipNumber/skipNumber_harness.c": "e4379adf237dec5232fc6219fe8902a7c0852f5e2831279cbc093adb097ce214", - "libraries/coreJSON/test/cbmc/proofs/skipSpace/Makefile": "825e917450aeaf3536995a43b84e6b846191ff976e7e3b789f8cbde804d8e319", - "libraries/coreJSON/test/cbmc/proofs/skipSpace/README.md": "620573816baea73974121fb4415ad4dfca463a38e925152aa3d4e2b04a53d122", - "libraries/coreJSON/test/cbmc/proofs/skipSpace/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreJSON/test/cbmc/proofs/skipSpace/cbmc-viewer.json": "3a3db6ce8ebe463f90a95bb9b984bb9c8c0a8c346dfe3fd9f1e736e12bac8782", - "libraries/coreJSON/test/cbmc/proofs/skipSpace/skipSpace_harness.c": "1161e56d2fb3e366117d746b9739ff4224f35c7a3f8a58e19b4b73c35eef7552", - "libraries/coreJSON/test/cbmc/proofs/skipSpaceAndComma/Makefile": "8759e841c7a053a9117758370b768561e85baa72919bff3ed6aed65178cf8658", - "libraries/coreJSON/test/cbmc/proofs/skipSpaceAndComma/README.md": "acbbf3b27c2f02885f9b5c92f47208f335fb54eb4f730a7b73dad404e7c6305d", - "libraries/coreJSON/test/cbmc/proofs/skipSpaceAndComma/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreJSON/test/cbmc/proofs/skipSpaceAndComma/cbmc-viewer.json": "1de624ce0d5cdfb47f4e60861fad02c9ecad2cb1d825cc4ff7cbe438f32ee2ec", - "libraries/coreJSON/test/cbmc/proofs/skipSpaceAndComma/skipSpaceAndComma_harness.c": "df994cf19cd3f81e5d3ce8bbb256f4661103a4463817f01d88cf047c7608060f", - "libraries/coreJSON/test/cbmc/proofs/skipString/Makefile": "84a027e8b6ab7744bba40d2889dfb218bfc45f3d18aa91595e09557d3d1a24b1", - "libraries/coreJSON/test/cbmc/proofs/skipString/README.md": "1bc095eaac3f4f5945a7dac68dc5baf969dc18a4dee99423da6bbdf779a9387c", - "libraries/coreJSON/test/cbmc/proofs/skipString/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreJSON/test/cbmc/proofs/skipString/cbmc-viewer.json": "2ca367bb82a31b0e2758e773bc28b7360cd54917696fa019b35a1ed401228cbe", - "libraries/coreJSON/test/cbmc/proofs/skipString/skipString_harness.c": "cabdfd74d21689000c9c123e198ae291f989f8ac42ddfd68e179901b076510bc", - "libraries/coreJSON/test/cbmc/proofs/skipUTF8/Makefile": "4fbbea93626213a1782113d1bebb7ed521c03443bccfe0b79f64a1f6552faa96", - "libraries/coreJSON/test/cbmc/proofs/skipUTF8/README.md": "d0224f808e488f9c5d257bf40d465bcef9934b5de5d5cc91a40395d888dd109c", - "libraries/coreJSON/test/cbmc/proofs/skipUTF8/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreJSON/test/cbmc/proofs/skipUTF8/cbmc-viewer.json": "e6c1725d654647bc7bfb06be02406424b554104b42f739f6d3339e99106ecd65", - "libraries/coreJSON/test/cbmc/proofs/skipUTF8/skipUTF8_harness.c": "ae9bfd454f5a9e436414c38efaf29359c499fe9f12267d7853aa1eff37194e53", - "libraries/coreJSON/test/cbmc/sources/README.md": "cfaa166351aeff46c321fd5627d417278accf8e88155481f678702644ce88138", - "libraries/coreJSON/test/cbmc/stubs/README.md": "a87bfd893269da4a5c95f88369ce394b1e031dc6dbfd09195cd11485b77eac7f", - "libraries/coreJSON/test/cbmc/stubs/skipAnyLiteral.c": "1e668f002e46b4f3c79adf10847dcafdbec90cf47c272c7bab1c2ba7adb9eb28", - "libraries/coreJSON/test/cbmc/stubs/skipAnyScalar.c": "bdcce12e27256c6bea976a5c39cccc000692b127ecc0e07944c604171e18ad24", - "libraries/coreJSON/test/cbmc/stubs/skipCollection.c": "49cf4e5cd6eb738c2eb18ca8270ae9e6886918cee65bf88ee9c15db78d18ce44", - "libraries/coreJSON/test/cbmc/stubs/skipDigits.c": "3dd48ccf06cf3c33d28d8869e3ae6913541f47bdc24d3e4067162e9f811e9e85", - "libraries/coreJSON/test/cbmc/stubs/skipEscape.c": "b07b53a10497509a3501382d501a9a47362d21cd338005ec0dc0886a3328d624", - "libraries/coreJSON/test/cbmc/stubs/skipGeneric.c": "f92d0ea5ca2a80d69c73a3784516c5da5703baa9de38a50092130573a11db2de", - "libraries/coreJSON/test/cbmc/stubs/skipNumber.c": "67be362c4b142d8d82e60f279826a341d8e82c15680f8ae43f27240c5e3642d2", - "libraries/coreJSON/test/cbmc/stubs/skipSpace.c": "866455d2ab76ea04d3221a79c35a216e2921dd44078320fd49d07256e7bda465", - "libraries/coreJSON/test/cbmc/stubs/skipSpaceAndComma.c": "1f17de493fc5dafbbd0e421c02d91651aaf63189fd3506dad9f6f3aea34b8993", - "libraries/coreJSON/test/cbmc/stubs/skipString.c": "d7ea329ee82b79262a81767ac0668e7589e6ce5411140713134a7ba3aa96e52c", - "libraries/coreJSON/test/cbmc/stubs/skipUTF8.c": "88dc3cca61ef0ec69fc2ac23ec0d2e709c84101475fa2881bb46f2f32c522346", - "libraries/coreJSON/test/unit-test/CMakeLists.txt": "bb0a488a774d045b9d69078094ab50389b5e6b881cca16b967c69f198206ca5a", - "libraries/coreJSON/test/unit-test/Unity/CMakeLists.txt": "e3f877ac53b976cf8279780dfa84ef790a2d7689f5171329c58f680a25b2b4b7", - "libraries/coreJSON/test/unit-test/Unity/LICENSE.txt": "3ed9b51da86f52c729c96cc99fdde6444b2297c788a9cf4ad1d3649dc34c4985", - "libraries/coreJSON/test/unit-test/Unity/README.md": "3cef66478d170c8173baa5ceb7d43fb4ff2c417547f7896cd86cb32c60544683", - "libraries/coreJSON/test/unit-test/Unity/auto/colour_prompt.rb": "2f879fa491913d5c32312353c2df6288fbdae11d78f43264078eab4c561f6c34", - "libraries/coreJSON/test/unit-test/Unity/auto/colour_reporter.rb": "2e6fbc6a1718d1f755378a934526a5b4fe11ef045302ac1e1c251e927477d697", - "libraries/coreJSON/test/unit-test/Unity/auto/generate_config.yml": "85c5702a168e366148e8ec89df416eae888278a526c79459162c0f37641a02fe", - "libraries/coreJSON/test/unit-test/Unity/auto/generate_module.rb": "152ae9eb4c00a54850099bf325093bd4b40e56100426af0a37b7b9b63c757c39", - "libraries/coreJSON/test/unit-test/Unity/auto/generate_test_runner.rb": "784ec49885e9e88f021bf28d34e37c83c78d1ea60ec751acd90896044abfa8ed", - "libraries/coreJSON/test/unit-test/Unity/auto/parse_output.rb": "ad1910bfff4d778f1fc53c111588238ee003809eb60717fde6dce7cf854879c6", - "libraries/coreJSON/test/unit-test/Unity/auto/run_test.erb": "7b61e8c78300c409e0d58c49f3e6083850033b6b0f9b988859489ea1dc33d82d", - "libraries/coreJSON/test/unit-test/Unity/auto/stylize_as_junit.rb": "fd0c45171391cbd0bc63cd5d4499e89eb51d087cf9c6c5ac2d4127e3d56bd9eb", - "libraries/coreJSON/test/unit-test/Unity/auto/test_file_filter.rb": "a69a44fccafbb504635163793799aa59809035951d7f258547d64d4145131a60", - "libraries/coreJSON/test/unit-test/Unity/auto/type_sanitizer.rb": "ecc5677ac9820f343aca50893463602fca940c24daf07a4784b4e9e0801c3f4b", - "libraries/coreJSON/test/unit-test/Unity/auto/unity_test_summary.py": "e46350b7132f04a7bb339d47bcef11ae0cb9e74c2050d0d75697b33c253c2895", - "libraries/coreJSON/test/unit-test/Unity/auto/unity_test_summary.rb": "721818505aab3199a712e4d6f964c84b07720f84a8fcf504349b586f05e8cd2b", - "libraries/coreJSON/test/unit-test/Unity/auto/unity_to_junit.py": "0743f26b5ae67af204981293337f9cc9a8cb46c90aaa3f46f31fd9658ab65990", - "libraries/coreJSON/test/unit-test/Unity/docs/ThrowTheSwitchCodingStandard.md": "f0f000eb1fc32b3a6684da894ed816d09ba077ad85e65e44f1f7998da47ef178", - "libraries/coreJSON/test/unit-test/Unity/docs/UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf": "28e8687d90c111ee8c249a7748495a0bfe00a3f35231b026ac73eed01d32eb34", - "libraries/coreJSON/test/unit-test/Unity/docs/UnityAssertionsReference.md": "a85c1b770999c51043cd60c8f60691f941cce34724c4034146506c477c9339c9", - "libraries/coreJSON/test/unit-test/Unity/docs/UnityConfigurationGuide.md": "1280dfbbb5169d45bb3822b2e681588413679cf34c0a4967f05f0be9d686659f", - "libraries/coreJSON/test/unit-test/Unity/docs/UnityGettingStartedGuide.md": "54193aa975c291e62682c65fe088b7f960bedf4b58e2ce63e2dc1696a8ca3f6f", - "libraries/coreJSON/test/unit-test/Unity/docs/UnityHelperScriptsGuide.md": "a794fa7886738433f7724ee3b23ebf5e27a3d6136f09fd62ec6199a66e638c08", - "libraries/coreJSON/test/unit-test/Unity/examples/example_1/makefile": "a6b1cba50764fa8f18ef16dd11f4f1e7cd90e614d14bfe7dc22239245751cb6a", - "libraries/coreJSON/test/unit-test/Unity/examples/example_1/readme.txt": "4d72d51f1a385cd4aeb594e4485ca2439d5b86247523cd2d2b89acc2173d8a24", - "libraries/coreJSON/test/unit-test/Unity/examples/example_1/src/ProductionCode.c": "9d6b0ae761f7dfc008d6547031ff92de63976f5621b6feef2a29614cec51b357", - "libraries/coreJSON/test/unit-test/Unity/examples/example_1/src/ProductionCode.h": "25cfcc42b79140f4c399363e0ef10a6e518a1831e10c61cc138d6d9a230425ce", - "libraries/coreJSON/test/unit-test/Unity/examples/example_1/src/ProductionCode2.c": "c2cc0a76cb2ea145d3861bd9ccc467ac45ad3e8230d5075ed174ce3a5cd50a76", - "libraries/coreJSON/test/unit-test/Unity/examples/example_1/src/ProductionCode2.h": "d4db1a4eea2bee3d668a203d4953f415f23be64a826c5a73059ef221f61b3882", - "libraries/coreJSON/test/unit-test/Unity/examples/example_1/test/TestProductionCode.c": "33e4b165d437c376f2393da59be0b22a3a458ebbe94cc2b340159b71f2d8bb74", - "libraries/coreJSON/test/unit-test/Unity/examples/example_1/test/TestProductionCode2.c": "11387f2ecdc97ee3344c0df42123e73cae899702b348d5597e09e9760db267aa", - "libraries/coreJSON/test/unit-test/Unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c": "2c84d6b954a6810a7c509dc861ee0c18a562dd23a5dd7747ea524f0c1467d9a4", - "libraries/coreJSON/test/unit-test/Unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c": "b6ec7bb984eddea80c178ecb30f6f772325a745ff9812a5e3f41f236c43e19e0", - "libraries/coreJSON/test/unit-test/Unity/examples/example_2/makefile": "da2bf7ebba3456dec77ef500884654fdcffeb514ecbb84dc9cf930821ec2e9ec", - "libraries/coreJSON/test/unit-test/Unity/examples/example_2/readme.txt": "a03bf4ac2d294a037189b42f7bf8fdff0bf50524857e3f8933eba76085f22f04", - "libraries/coreJSON/test/unit-test/Unity/examples/example_2/src/ProductionCode.c": "075f25b87aa9f9a4ee0c7b79893ce76a8d6f79d450b5c158bb6fb84aa0ed4d31", - "libraries/coreJSON/test/unit-test/Unity/examples/example_2/src/ProductionCode.h": "25cfcc42b79140f4c399363e0ef10a6e518a1831e10c61cc138d6d9a230425ce", - "libraries/coreJSON/test/unit-test/Unity/examples/example_2/src/ProductionCode2.c": "a929e7ef393ec5ccc53e3f885d663a1c8fbe5cc5f72a0fcad5c0d2f6cbc8b210", - "libraries/coreJSON/test/unit-test/Unity/examples/example_2/src/ProductionCode2.h": "d4db1a4eea2bee3d668a203d4953f415f23be64a826c5a73059ef221f61b3882", - "libraries/coreJSON/test/unit-test/Unity/examples/example_2/test/TestProductionCode.c": "7db7b7d9e7216fdc0814ff8bbecc37f40e573006207b47cfd8954469ebc9b502", - "libraries/coreJSON/test/unit-test/Unity/examples/example_2/test/TestProductionCode2.c": "332f23e940a9676504c84dc92d1a6cf72cd9204afe7f664c16b58ee7dbff312d", - "libraries/coreJSON/test/unit-test/Unity/examples/example_2/test/test_runners/TestProductionCode2_Runner.c": "14aef95de310f1e1381feaaf256ea94d0905a538311b5e3fdc944f927e75b287", - "libraries/coreJSON/test/unit-test/Unity/examples/example_2/test/test_runners/TestProductionCode_Runner.c": "a782491bcd8dd857b26a62df58e8671f1cb7641d6c0fe7f7853c079732ccd8e9", - "libraries/coreJSON/test/unit-test/Unity/examples/example_2/test/test_runners/all_tests.c": "fe5c0418201d70dc696b0db6acf60b2ea0069d74fa94fb96d7169b8752e00d17", - "libraries/coreJSON/test/unit-test/Unity/examples/example_3/helper/UnityHelper.c": "091c2466d25deffd8958332ad03d393ca1ec1b1f6150c16626d57d5901eb1b21", - "libraries/coreJSON/test/unit-test/Unity/examples/example_3/helper/UnityHelper.h": "a95bb6d3704c51637bb0855787236b41229e3836601ba97e88768f95779f3d4d", - "libraries/coreJSON/test/unit-test/Unity/examples/example_3/rakefile.rb": "7b3b7d271caeb7af887b08986c9922ec331c8515d654ffb3e200833aa9be809f", - "libraries/coreJSON/test/unit-test/Unity/examples/example_3/rakefile_helper.rb": "bfc4aca33ed7bf68ffebf686790ec0c9e7a7bd23527147e81c10f4fd2dc38be0", - "libraries/coreJSON/test/unit-test/Unity/examples/example_3/readme.txt": "2af5e731fb1db0ddf5c739f0b08fb2724e4acc7efb7ee0a02fe474a3e69d284a", - "libraries/coreJSON/test/unit-test/Unity/examples/example_3/src/ProductionCode.c": "075f25b87aa9f9a4ee0c7b79893ce76a8d6f79d450b5c158bb6fb84aa0ed4d31", - "libraries/coreJSON/test/unit-test/Unity/examples/example_3/src/ProductionCode.h": "25cfcc42b79140f4c399363e0ef10a6e518a1831e10c61cc138d6d9a230425ce", - "libraries/coreJSON/test/unit-test/Unity/examples/example_3/src/ProductionCode2.c": "a929e7ef393ec5ccc53e3f885d663a1c8fbe5cc5f72a0fcad5c0d2f6cbc8b210", - "libraries/coreJSON/test/unit-test/Unity/examples/example_3/src/ProductionCode2.h": "d4db1a4eea2bee3d668a203d4953f415f23be64a826c5a73059ef221f61b3882", - "libraries/coreJSON/test/unit-test/Unity/examples/example_3/target_gcc_32.yml": "2e61fc6bc7930929985f1ea1ec5d0019fe1d133c01555c86b01b20145fb6aaa4", - "libraries/coreJSON/test/unit-test/Unity/examples/example_3/test/TestProductionCode.c": "b0e815e2285b1730d7dcd24b400d15b4efccfe5e4776d96248a2165c2f0caec6", - "libraries/coreJSON/test/unit-test/Unity/examples/example_3/test/TestProductionCode2.c": "895f437abd40bd461fd86a3b8ed6bc02c5c283fc3926aafe53b473e477fa0a5a", - "libraries/coreJSON/test/unit-test/Unity/examples/example_4/meson.build": "535ea70e1617196a43d38dc5039a7097d6524d9d994714f63cf153818fb409b9", - "libraries/coreJSON/test/unit-test/Unity/examples/example_4/readme.txt": "d16faba668694cacde12746c58ec512de301218543217a9644e4e269bee8ab0c", - "libraries/coreJSON/test/unit-test/Unity/examples/example_4/src/ProductionCode.c": "9d6b0ae761f7dfc008d6547031ff92de63976f5621b6feef2a29614cec51b357", - "libraries/coreJSON/test/unit-test/Unity/examples/example_4/src/ProductionCode.h": "25cfcc42b79140f4c399363e0ef10a6e518a1831e10c61cc138d6d9a230425ce", - "libraries/coreJSON/test/unit-test/Unity/examples/example_4/src/ProductionCode2.c": "c2cc0a76cb2ea145d3861bd9ccc467ac45ad3e8230d5075ed174ce3a5cd50a76", - "libraries/coreJSON/test/unit-test/Unity/examples/example_4/src/ProductionCode2.h": "d4db1a4eea2bee3d668a203d4953f415f23be64a826c5a73059ef221f61b3882", - "libraries/coreJSON/test/unit-test/Unity/examples/example_4/src/meson.build": "94cfe0c2645b58533c4c416e3610835ae1336543e5ab6ae42afc336e817f31bd", - "libraries/coreJSON/test/unit-test/Unity/examples/example_4/subprojects/unity.wrap": "59d1f20c0ada120ee62ef1baf30be51ebaaf40d30b16e4da014f9d58023b7a8a", - "libraries/coreJSON/test/unit-test/Unity/examples/example_4/test/TestProductionCode.c": "f3a8fa16e599d6aa7a0c9cf604ea1d42ff5466244372e00543fc3b2e116f0d41", - "libraries/coreJSON/test/unit-test/Unity/examples/example_4/test/TestProductionCode2.c": "26c0ee5fabc061cfd32ae891ab16f4b985f306dfea1a939d00e89a3c1ae6f25e", - "libraries/coreJSON/test/unit-test/Unity/examples/example_4/test/meson.build": "785bb1c9ed0714a8f7e53bbb808e584cf8c34be90a42a7bbff7de7b7d4ba3889", - "libraries/coreJSON/test/unit-test/Unity/examples/example_4/test/test_runners/TestProductionCode2_Runner.c": "2c84d6b954a6810a7c509dc861ee0c18a562dd23a5dd7747ea524f0c1467d9a4", - "libraries/coreJSON/test/unit-test/Unity/examples/example_4/test/test_runners/TestProductionCode_Runner.c": "b6ec7bb984eddea80c178ecb30f6f772325a745ff9812a5e3f41f236c43e19e0", - "libraries/coreJSON/test/unit-test/Unity/examples/example_4/test/test_runners/meson.build": "4c95601301634554cd6d4de7280a27d703fba081d3b2e2fca4fd5e0fbfbcb942", - "libraries/coreJSON/test/unit-test/Unity/examples/unity_config.h": "63ee0c6ea60845c16545f501d5790f9d3f886723a617960dc018139674d022f7", - "libraries/coreJSON/test/unit-test/Unity/extras/eclipse/error_parsers.txt": "67e309b5e803a22ba22c347aa5123cbbe73edcbfe9950aa0fd74576a4add1a12", - "libraries/coreJSON/test/unit-test/Unity/extras/fixture/readme.md": "2fab9d3b45056588cfdb06a6c745c2d66ed0c0a71709102b0c089b554ea23bc2", - "libraries/coreJSON/test/unit-test/Unity/extras/fixture/src/unity_fixture.c": "090875bd5b4d55966fdd6f9d984aa9883924a395d1a56a78ccbf9885e058a643", - "libraries/coreJSON/test/unit-test/Unity/extras/fixture/src/unity_fixture.h": "73854da3d615a041ab114be64bb98debfa8b186ac9741682f3de4cabc153100b", - "libraries/coreJSON/test/unit-test/Unity/extras/fixture/src/unity_fixture_internals.h": "adf665b853438b5e35ffc72e6d0f1bd404a09188fbd4fc7c64c2eb30b25781ea", - "libraries/coreJSON/test/unit-test/Unity/extras/fixture/test/Makefile": "f61e0e71da2aa1e38d4ba244178ef7ddd976447bc57332e17ac62319e1765ee3", - "libraries/coreJSON/test/unit-test/Unity/extras/fixture/test/main/AllTests.c": "b90030dde0bdea78a78df99e177bba1aa6a162a21527027920e01abbe991e8f5", - "libraries/coreJSON/test/unit-test/Unity/extras/fixture/test/template_fixture_tests.c": "3ca4c500397fc3dd7370b419e7d4f7abb3a8b05deacaf72a4e2ccb396669003a", - "libraries/coreJSON/test/unit-test/Unity/extras/fixture/test/unity_fixture_Test.c": "6edfe13bd81264856f4bbe3d421ab40f1f47529e0a57f7b95b1b13155d51db24", - "libraries/coreJSON/test/unit-test/Unity/extras/fixture/test/unity_fixture_TestRunner.c": "cabed04e1b026bd8ae2b47f54e8777899c3564cae952e62fc59965d2117a3215", - "libraries/coreJSON/test/unit-test/Unity/extras/memory/readme.md": "5cc935c39537f3a403a80b82c1ba24d6ba895275927a6b5db8362e233438a97a", - "libraries/coreJSON/test/unit-test/Unity/extras/memory/src/unity_memory.c": "7bc202de8e950466f713b2c3918beb824a10d33cd7df43058dd4676573fc2645", - "libraries/coreJSON/test/unit-test/Unity/extras/memory/src/unity_memory.h": "85ea1b5fa55bd59f03901fad4272a938a33696d9f0821d085ba6fc5463fb391b", - "libraries/coreJSON/test/unit-test/Unity/extras/memory/test/Makefile": "4530559b0cf8de81a35d3e5901aa3b5bdfb523cba3458bac37e1beebedde0e63", - "libraries/coreJSON/test/unit-test/Unity/extras/memory/test/unity_memory_Test.c": "64e492cafc7da28265299706ee3c663db66edf3c5556cb27f06039d1876f63d8", - "libraries/coreJSON/test/unit-test/Unity/extras/memory/test/unity_memory_TestRunner.c": "8265bf36612d73d5286303a4259b444e7e86ed011551c3be9f43be6a1804a781", - "libraries/coreJSON/test/unit-test/Unity/extras/memory/test/unity_output_Spy.c": "c18d6d3034a751915b3deb137b098eee14498a06b4f7bf8a8a59ffe4d260d4a7", - "libraries/coreJSON/test/unit-test/Unity/extras/memory/test/unity_output_Spy.h": "20f9beac9acaf917cbf2011fbae1e5b919c6876646ca48e02379b72a12f7f971", - "libraries/coreJSON/test/unit-test/Unity/meson.build": "5a676c7d47d469a8c0d3017d03d6db12455948848134f51a7f3fe379904178f9", - "libraries/coreJSON/test/unit-test/Unity/src/meson.build": "ce67ee2e8b146d979199c5e7ad34adb28cc535cac824f8b72869a4222765b59d", - "libraries/coreJSON/test/unit-test/Unity/src/unity.c": "d7a7255e0fc01418a412d01780aa69c10c64fe03eebfce0e8e2be1144c5959c8", - "libraries/coreJSON/test/unit-test/Unity/src/unity.h": "04736e0c4d9958512b2c88ce40ddf8f81129be1c0dded8dcb10236a62e435172", - "libraries/coreJSON/test/unit-test/Unity/src/unity_internals.h": "0a5c780a6316e9c358416c3d55f95c81e6093030d5653ca7f41adb9e6f3f730a", - "libraries/coreJSON/test/unit-test/Unity/test/Makefile": "e9dc822a21971c3c818135c6c0818393b7b29a5044d5c0fac4c3849030387203", - "libraries/coreJSON/test/unit-test/Unity/test/expectdata/testsample_cmd.c": "832ec9c8c30fd374adea6620dd38c19c689047bdad0513984066e525eefc0723", - "libraries/coreJSON/test/unit-test/Unity/test/expectdata/testsample_def.c": "246d3d9bc73ccef28f7a70b8748d95cd31eb85b9874e6972d30be1f74000fb8c", - "libraries/coreJSON/test/unit-test/Unity/test/expectdata/testsample_head1.c": "ed31f2c63e4bb7ba015a5388429b34287ecefa098551e55ae5864b883c3cdad4", - "libraries/coreJSON/test/unit-test/Unity/test/expectdata/testsample_head1.h": "fc279a298e45f70a559d05132ae888973c8f5aad913c0b2d6d8425ccbde5c998", - "libraries/coreJSON/test/unit-test/Unity/test/expectdata/testsample_mock_cmd.c": "b826f44458088555058b6c3b9c7ef15c2a5528c8efe01034d0f1debee06a739e", - "libraries/coreJSON/test/unit-test/Unity/test/expectdata/testsample_mock_def.c": "1016f1162a3ea3be49dffd824e529493d2845860d1139cb44cc32f0fe0a0701f", - "libraries/coreJSON/test/unit-test/Unity/test/expectdata/testsample_mock_head1.c": "cb7b253cefa315d7b4edaa386bffb63a728f3b33c869bf55ecfcd53d1e47eaaf", - "libraries/coreJSON/test/unit-test/Unity/test/expectdata/testsample_mock_head1.h": "9cb779d98b40e5dfcf70db57f7d3deae6310cac80547140c972ecde585f56c18", - "libraries/coreJSON/test/unit-test/Unity/test/expectdata/testsample_mock_new1.c": "4e5d73972dce4276dc688016eeb310e93ef96ea7beee0e6839092f0459798856", - "libraries/coreJSON/test/unit-test/Unity/test/expectdata/testsample_mock_new2.c": "74418cfefe544ac366a043972648c31742b2a4652155507c93a1a2a38471a5eb", - "libraries/coreJSON/test/unit-test/Unity/test/expectdata/testsample_mock_param.c": "6a8edda1c9b5a56d38e705d2d0341232ca9a55f1fb7383171475cb972c9b6c18", - "libraries/coreJSON/test/unit-test/Unity/test/expectdata/testsample_mock_run1.c": "4e5d73972dce4276dc688016eeb310e93ef96ea7beee0e6839092f0459798856", - "libraries/coreJSON/test/unit-test/Unity/test/expectdata/testsample_mock_run2.c": "74418cfefe544ac366a043972648c31742b2a4652155507c93a1a2a38471a5eb", - "libraries/coreJSON/test/unit-test/Unity/test/expectdata/testsample_mock_yaml.c": "763d37bc5a5edc7566bf6625dd38878aed8cc94a5cec8f6e23aee16e30bdaad6", - "libraries/coreJSON/test/unit-test/Unity/test/expectdata/testsample_new1.c": "983abee21894ba9fb5d667a69b046558867f9f16eaf546d259671f54dd4be626", - "libraries/coreJSON/test/unit-test/Unity/test/expectdata/testsample_new2.c": "9726bdaec7a5c8e99b4e6bbfc41b91c8687665bbafdb617be4514eadc30b023c", - "libraries/coreJSON/test/unit-test/Unity/test/expectdata/testsample_param.c": "7ab6834f8376908625b9999a4c5dad32ad65c8f3fd852e78b6d9c3bc871fc639", - "libraries/coreJSON/test/unit-test/Unity/test/expectdata/testsample_run1.c": "983abee21894ba9fb5d667a69b046558867f9f16eaf546d259671f54dd4be626", - "libraries/coreJSON/test/unit-test/Unity/test/expectdata/testsample_run2.c": "9726bdaec7a5c8e99b4e6bbfc41b91c8687665bbafdb617be4514eadc30b023c", - "libraries/coreJSON/test/unit-test/Unity/test/expectdata/testsample_yaml.c": "17714f87e28c7723608fdc832189965482404e3540e3f3ec55afa7f07054e0a7", - "libraries/coreJSON/test/unit-test/Unity/test/rakefile": "26fb64768302e1336cf6abdd2ca8eae49562096518a416f086b8e544bebc9729", - "libraries/coreJSON/test/unit-test/Unity/test/rakefile_helper.rb": "0d0839f4629e3305e6a2fbb8d3c17affaeaa94707cc247c4a972d2f8dbaa8fc0", - "libraries/coreJSON/test/unit-test/Unity/test/spec/generate_module_existing_file_spec.rb": "41d0b6bf8255f97e4fbf6c4f5fb2dcc61d846d2ddaf2cad763c1f500b8a68727", - "libraries/coreJSON/test/unit-test/Unity/test/targets/ansi.yml": "ff3c3e77809d208e398d05502814248e5517b488790f741115673889c9df7d49", - "libraries/coreJSON/test/unit-test/Unity/test/targets/clang_file.yml": "ac73b6b5d94ca4172945d0ec20daf9c69cfb890593d1e3649157e76cef1c68fc", - "libraries/coreJSON/test/unit-test/Unity/test/targets/clang_strict.yml": "94360fbe3b7ad0ed8d935269cbc81867de4068d022e763dd1175d30297b00b77", - "libraries/coreJSON/test/unit-test/Unity/test/targets/gcc_32.yml": "ed830992a0ec5a64f37a0eb310471d97f33ad1fccfad8dce040c5ac10fa76485", - "libraries/coreJSON/test/unit-test/Unity/test/targets/gcc_64.yml": "170bc616bac1b1b766d44797a23c235b47cd18beb4a50abce68c70dcc4ff90d9", - "libraries/coreJSON/test/unit-test/Unity/test/targets/gcc_auto_limits.yml": "d2d24592f1ae926854d869f7c5c15e0a5979622530b85dc38348470e4a0a799d", - "libraries/coreJSON/test/unit-test/Unity/test/targets/gcc_auto_stdint.yml": "0c5ec51bcfb43f4301e2bd4b78836f202674f507c9c23854752ef6dbc0bdf908", - "libraries/coreJSON/test/unit-test/Unity/test/targets/gcc_manual_math.yml": "9c67d40734a9837e79012200a7121d10f002193cf0cf93a3c07696f3eb8fec65", - "libraries/coreJSON/test/unit-test/Unity/test/targets/hitech_picc18.yml": "eebc4afcecf8ebfba6bd0869f860e263d2aaa21647dea002050d30e3c9cd71a5", - "libraries/coreJSON/test/unit-test/Unity/test/targets/iar_arm_v4.yml": "57e3c06db4a429a1b579f909e4ffa22ad1b5c651f5561fb6b69cea6184be6150", - "libraries/coreJSON/test/unit-test/Unity/test/targets/iar_arm_v5.yml": "db2dc6f61e3067f75c2ff25d8240eb2ff17377d211a774cefee05ff5b3b465b8", - "libraries/coreJSON/test/unit-test/Unity/test/targets/iar_arm_v5_3.yml": "db2dc6f61e3067f75c2ff25d8240eb2ff17377d211a774cefee05ff5b3b465b8", - "libraries/coreJSON/test/unit-test/Unity/test/targets/iar_armcortex_LM3S9B92_v5_4.yml": "c09088bcb23f8b7f20315e0e9ea471de64d5ffa3ba2472f8f18ce684f852c30f", - "libraries/coreJSON/test/unit-test/Unity/test/targets/iar_cortexm3_v5.yml": "d6980cc05f2519a6ba9cf3b22416f80f18d3c6f3f5f713fe952739ebdfb753d0", - "libraries/coreJSON/test/unit-test/Unity/test/targets/iar_msp430.yml": "8aeaea8a80e3acc9ddbe7ba60b752cd76963f1d95744700b6913638e958970f2", - "libraries/coreJSON/test/unit-test/Unity/test/targets/iar_sh2a_v6.yml": "a3ab0a230f7632f8154c27421c7d86dc8e3be1edfcae8e0a2dfeca50993ffc34", - "libraries/coreJSON/test/unit-test/Unity/test/testdata/CException.h": "1d815018f2b5c5973982e9e13c9534bb5cd96e6deea5b1f29b531233f476e843", - "libraries/coreJSON/test/unit-test/Unity/test/testdata/Defs.h": "9c7988c8f87c13251880be27117c9cd5d7078990bef9d34200a342cf26911bd7", - "libraries/coreJSON/test/unit-test/Unity/test/testdata/cmock.h": "ae873ab649d7ea46f2e23ee13cbac383c527d5935bc40b31dced6969fb4d235d", - "libraries/coreJSON/test/unit-test/Unity/test/testdata/mockMock.h": "bbf1b3aaddf02a21cdb52b7b58d2f74927d586d013ca923e25eb93b121bdcf47", - "libraries/coreJSON/test/unit-test/Unity/test/testdata/testRunnerGenerator.c": "721d2a8bef4daf1d4a61e30f8bf8bf1d263377c9f763f9129218d638ddac65d8", - "libraries/coreJSON/test/unit-test/Unity/test/testdata/testRunnerGeneratorSmall.c": "f32a9a46a78102474346c7516bdb0401fabef9ee8616d033237a4bc658e3357a", - "libraries/coreJSON/test/unit-test/Unity/test/testdata/testRunnerGeneratorWithMocks.c": "ea6887c98c35906e04e492cc06618294fef70f0bbbc9ca0cf1dd2ac3c14fe72d", - "libraries/coreJSON/test/unit-test/Unity/test/tests/self_assessment_utils.h": "10bdbaac9062a05157f23b55ff0959950db58627a4e597a72457ba0e0a52fad9", - "libraries/coreJSON/test/unit-test/Unity/test/tests/test_generate_test_runner.rb": "aa5973d07defb058f5315bc019be5870cf26ce777b6fdadd096a1295c0dd3a28", - "libraries/coreJSON/test/unit-test/Unity/test/tests/test_unity_arrays.c": "d340ae1c4ee5adc036ae1df3c6cec3b367e377ebc64ff02c304208b45940a8b2", - "libraries/coreJSON/test/unit-test/Unity/test/tests/test_unity_core.c": "cab9f80d420de32861c24d5aad4dfaf33798421435b8d68449c28006c099495e", - "libraries/coreJSON/test/unit-test/Unity/test/tests/test_unity_doubles.c": "0906e71818e5a8587f5e8f14104b1c5bed4771546f1def063916389e0d39ff37", - "libraries/coreJSON/test/unit-test/Unity/test/tests/test_unity_floats.c": "6f5d2f085dd4a6b57fb3a5257c92361d3e7b1e8be852e4ea97350faa3d06f319", - "libraries/coreJSON/test/unit-test/Unity/test/tests/test_unity_integers.c": "7ae4621f827081f4d61184c0430e6e67c2cb2299cf28f095b11f4ff10bd75224", - "libraries/coreJSON/test/unit-test/Unity/test/tests/test_unity_integers_64.c": "1ea47affa74ec83082db084ee008fb32f3eee94b880b60b7cdf86d2662418ca8", - "libraries/coreJSON/test/unit-test/Unity/test/tests/test_unity_memory.c": "a68346b5cb42e18b0e92ab53a60c62f7e5243ea1e105d27a32965db79ede1ac1", - "libraries/coreJSON/test/unit-test/Unity/test/tests/test_unity_parameterized.c": "af59c588f7322ecf035cd87f19affd39ca7315393c4713dd7344432f9542fe12", - "libraries/coreJSON/test/unit-test/Unity/test/tests/test_unity_strings.c": "427545971b1ca377ded2864d7d14a2dd492b4bf92cc3f1bd30148e42b03b0ad3", - "libraries/coreJSON/test/unit-test/Unity/unityConfig.cmake": "addf5bb044d859fda5bf93b7060df91e3950c813c84a460ba65f7eaba0fac561", - "libraries/coreJSON/test/unit-test/catch_assert.h": "de1bfd864b4f994720f3393a4c735b13091270fa22b263d9af1f35a0dc80ce83", - "libraries/coreJSON/test/unit-test/core_json_utest.c": "d1447cb75cf973867bab5a78dac56fc63a2e9a505ea883e609561fbd9a91f36b", - "libraries/coreJSON/test/unit-test/unity_build.cmake": "0bd532c05dac6876647508256c5c50ff87b2c2017ab9e3cb866cf0722edc1ddc", - "libraries/coreJSON/tools/coverity/misra.config": "0937a68953239f2fcd82d515d8c516c33ea30d4dc7719e279076d76df834df30", - "libraries/coreJSON/tools/uncrustify.cfg": "55c02144fdaa3d62e03ed97e3e89a54b67d9433a5320ec02ec82e75344b21656", - "libraries/coreJSON/tools/unity/coverage.cmake": "44684d66e5193f6c54e47c677c1efd3251f4e83c9893e336918dd90e72c922bd", - "libraries/coreJSON/tools/unity/create_test.cmake": "086650d12714429c4130c386417e1aef985421f26c4c82a209ac0d40f71c1cd2", - "libraries/coreJSON/tools/unity/project.yml": "12130e50fcf569eaee1c82ebf43c3accfdc599b0f42064ea6819a49f2089eb2f", - "libraries/coreMQTT/CHANGELOG.md": "c6eb4c75121ec7aee094eec27012323ccfb292619fdc3e0cd0367d01135ede58", - "libraries/coreMQTT/LICENSE": "508a77d2e7b51d98adeed32648ad124b7b30241a8e70b2e72c99f92d8e5874d1", - "libraries/coreMQTT/MISRA.md": "b3a5a2002278248e081dcecf5b4cf10d25ce10cf369be2d23e519cbec4e175b4", - "libraries/coreMQTT/README.md": "797ea7121a4716d27a756c604bf9e6ae20f4fb9755acd9a69d3e16330cdf16ab", - "libraries/coreMQTT/docs/doxygen/config.doxyfile": "ae481bdff8ce9b0583937702e190024332c9434e8655cb800c84c995ef31e00f", - "libraries/coreMQTT/docs/doxygen/layout.xml": "555a70789f54c525456ad9d30730614fe7119afb8b81dd8f8067af28dd14f66c", - "libraries/coreMQTT/docs/doxygen/pages.dox": "ab5b11eaf04d14f5f15b0242a2bb19d2a94bd9b1dd26647dc19f9012fe8c2f6d", - "libraries/coreMQTT/docs/doxygen/porting.dox": "1edb176f2260e8a6d3115286218f5791e664a48f2a939e8e03e9c784cbb42491", - "libraries/coreMQTT/docs/doxygen/style.css": "e3d3b4438744aa4d547bcacc6e64f3fcfc5057b476c5237e5107e6bbe0aac72a", - "libraries/coreMQTT/docs/plantuml/images/mqtt_connect_design.png": "21b94da4fcf887e92a6b69792e0438a2606e084670106bda53ede60d77915b92", - "libraries/coreMQTT/docs/plantuml/images/mqtt_processloop_design.png": "e840f26ce3e411d3eedae32073a9506b000f44b4b328df68d6c854fc423a3e43", - "libraries/coreMQTT/docs/plantuml/images/mqtt_receiveloop_design.png": "cecf49d04c44aee8f69ae2ea5c842db85973e43aba2fd7c3da04da6768931b02", - "libraries/coreMQTT/docs/plantuml/mqtt_connect_design.pu": "58d747147b1bc68565dfb0d64c0f13a3134778465209f3c320232641a915a999", - "libraries/coreMQTT/docs/plantuml/mqtt_processloop_design.pu": "3682c146c15953956cbaf2121c35aac02a4706dcc953841c15c7b0635cdaec42", - "libraries/coreMQTT/docs/plantuml/mqtt_receiveloop_design.pu": "5d271bfa63049501d47af872eb96d0aad770fdb478ab58876ebadcc7b46dd733", - "libraries/coreMQTT/lexicon.txt": "c3d26633ae8ff3e748ba0e269c06d0057b12319070e9a3fdecfa6136f24e4c36", - "libraries/coreMQTT/manifest.yml": "b3f86f6fdfb824520318a2b04895882eb16ffe985a1eb8c5b10c616d86fa18bf", - "libraries/coreMQTT/mqttFilePaths.cmake": "40ee4b2022a23805a8bd4902404e6c3fe32a6ba0981d9ca7d2ac8521859c8d11", - "libraries/coreMQTT/security.md": "8063f29b315032ffdb3d4c37d003292f77ea1177d05ec3896614f257fe931723", - "libraries/coreMQTT/source/core_mqtt.c": "2f0d56264736ce026549b99f991ebff0f602fb289ad8b22a4c94ce7836aad1ca", - "libraries/coreMQTT/source/core_mqtt_serializer.c": "8cb09c807d8aea914a0a3268c46e882ee42951e14ea19abbf96245f814d4b4b2", - "libraries/coreMQTT/source/core_mqtt_state.c": "f3c475d175f0ddad8f32807282a4276f95375bed82a67080dea41ae7cf490c8f", - "libraries/coreMQTT/source/include/core_mqtt.h": "bf37cbe64fcdd3a24a0d0d5c2c5daa69472120f99c9529dacc76a4e10e721a62", - "libraries/coreMQTT/source/include/core_mqtt_config_defaults.h": "60a4e109544b2747acbe34d1438a97e85e55920a960e040cf154373e1ae5f709", - "libraries/coreMQTT/source/include/core_mqtt_serializer.h": "9eb9af54f2c0ca091cd63d7eb3e3fc0313e18219871d172fcb240fd1ebca8898", - "libraries/coreMQTT/source/include/core_mqtt_state.h": "11ea1c958688041d768135c37d6d35fe54c8d4033db5c9421a15cd3b4486e208", - "libraries/coreMQTT/source/interface/transport_interface.h": "3a54afc049708febbbc7d66953041d394143a4775724d0e363492267a6de26fa", - "libraries/coreMQTT/test/CMakeLists.txt": "329fe5c02c29d0daf12236504e13097296b3f10c695fbb710590270ac3fcbb68", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/CODE_OF_CONDUCT.md": "34b6c98d5c23127ae6769e95e483e5bf6d3704ae1f0d3ae4e69d15f4ede118b6", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/CONTRIBUTING.md": "b050a75d5f6d2236ed40ad91dc53c4a4b30da184f9298f6f18507beae5fd7cb7", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/LICENSE": "09e8a9bcec8067104652c168685ab0931e7868f9c8284b66f5ae6edae5f1130b", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/NOTICE": "d4290ed64c2edd0fce1d84e3f9dfb2881240fe534def76b8cd29ed6af683e287", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/README.md": "d1de02d49f1baf2d8f376777731ca952eda223d23faf6f87ac17ec5f6eec1622", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/scripts/setup-proof.py": "250c684e31390f2831c4833b5bb642fcb9246e14a73e4e71aa64717c866d30ce", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/scripts/setup.py": "15eaf8dc1a3921b6ec647396e504b6f1346ca37aa7aea46a73110e5681211b2a", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/scripts/util.py": "7cc883f38bbe3a34f1be2f78655131f82d89356112dac292edbf9c5ef4de11b8", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-proof/FUNCTION_harness.c": "f2802074ae7080f73b53081f262c7b9f7245b8ef1e4fd4e3dc88262a2453af4d", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-proof/Makefile": "b7311b8cdd2f100da52ed793ddaa77aab0e8943e06cdcd2b29c05953c869e5a3", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-proof/README.md": "9abd31be7593b6de5507a36587f18298e870da24e2c2f2ab1235e9e04464d6c7", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-proof/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-proof/cbmc-viewer.json": "31c095521f43d2b919f96351d52b5900653ef3813af1c055ef88cb01114c57b6", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/include/README.md": "1ebb917adfbfeba5019583d75438c3f745da8a93752e88b1b31bdad351a1ac9d", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/README.md": "dda48722cef39f7482baa20929815222d6cb643541505af7ac0202ab4ea30675", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/assert/Makefile": "8eda2c18734c4e1a2b07bb5cdbd5b7d5974651184a8dd594409e122b52a06416", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/assert/assert_harness.c": "034f86fc93c6cf928500721ba5bcf9b96f327596a2b931b52474ddd66c765941", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/bounds_check/Makefile": "142e70065dfe3d20bfd83d4566a26e60a254d410111d9af072e31e96b6209cd6", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/bounds_check/bounds_check_harness.c": "b1b242ef2cbc76b275951e75d87fe07d181a3538b1fc8c31839883f8eef80a11", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/conversion_check/Makefile": "97ff3a0a72e2ad71f520fb3875cfbbd3a1124df6236a14930948343fd3f219a0", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/conversion_check/conversion_check_harness.c": "89c63b828b051da2e0b0767cd2704419c389d5390178cbdcccfe591940d42da1", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/div_by_zero_check/Makefile": "3367383673bcd9262b9b61fff6c4961abe70aa2ffb3b8e3f59d014d94927b84c", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/div_by_zero_check/div_by_zero_check_harness.c": "d4255afad71ad03efc1729c46bab842f1d3727967eb75c0e41d26add25ae684a", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/float_overflow_check/Makefile": "49ffbdb80bdb47fef8c3f2af3e2445def5a1fe764285f7f28163ff55206e0cf4", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/float_overflow_check/float_overflow_check_harness.c": "0b762450e1abdfdb6eefde48545d0ea51a5699727ca46decb8aa6893dc0bf684", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/float_underflow_check/Makefile": "3a561f39099cc9a6783bfc779c56a68a08b61c336f44cdc3b957868651899354", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/float_underflow_check/float_underflow_check_harness.c": "8b84e5fefef6615ed4518834b9861bf07ebb35db8583a30c26d09f8d04bf4381", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/nan_check/Makefile": "440a4b02b6bcaa94c95c33b900ba5febca83aed17990c30b5dfddce246c9f29e", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/nan_check/nan_check_harness.c": "8376f52bcb36282975be5749f61179bffb5b5ced4161e39c68ef86c3792f09bc", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/pointer_check/Makefile": "ecd0cacef27ec44df5af35549e801aa4c17f4078b3d4b5beb3e73dfc787f54c2", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/pointer_check/pointer_check_harness.c": "662e399061f5c413c8ace57886174b11e755cb66999a90950409bf04d8cfab07", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/pointer_overflow_check/Makefile": "f1875b30dfc83287132387682a13e435a82b11186707526d39a4e10794cebb04", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/pointer_overflow_check/pointer_overflow_check_harness.c": "118c0a62a647d824f98ec779956f89b540b74206c4f81f83298d6440fa1bee16", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/pointer_primitive_check/Makefile": "131b7ee0daed69e68bdb7a949ddb5667f216a3912522ca69019871a81d25f10d", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/pointer_primitive_check/pointer_primitive_check_harness.c": "ca0e47a48fe2a0023f6c5e7e410efd5e90705d39864b3be48322f5ac82f3398d", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/pointer_underflow_check/Makefile": "5208e5e4348a5c4bb983af1c1907d7531b5988b89589ca569fbe74a8f6daff69", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/pointer_underflow_check/pointer_underflow_check_harness.c": "effb8b9837ed060a1b9a1c905afc5003bebe4832a27e7bfec940405b2e6eba52", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/signed_overflow_check/Makefile": "e08765ec88321f8f909a417af4d4e528222c32ae1224bc120a518d851accb3f3", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/signed_overflow_check/signed_overflow_check_harness.c": "1083db8aa4fc4bdcc3b89d3723d0fe58e529c330a21200f3ddc75adaf7ff9956", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/signed_underflow_check/Makefile": "4d970e22f170d34ca5c2b92db785972eb9e0529c1f68217da5eae1b86cbd2944", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/signed_underflow_check/signed_underflow_check_harness.c": "040b507614725741b8bb8d553b12d273aa7e165253fbe17e9e9cd58102d01409", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/undefined_shift_check/Makefile": "da67123ebdd610d48888064339a1180c0ebdc662b7d19c68f97a120c9499f84c", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/undefined_shift_check/undefined_shift_check_harness.c": "0f643a2aad93e70fc540f6aecf3046063a09817e5c4bec735c88ac7820f62ff2", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/unsigned_overflow_check/Makefile": "e90461e92d5257521b9c4766beaa3ff986f35dc2c7dee695f983e88baff8e2aa", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/unsigned_overflow_check/unsigned_overflow_check_harness.c": "b85cfcacd82a28417112248f72e8f734cd7799b1df4360734caf186c775669a5", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/unsigned_underflow_check/Makefile": "03beb64ea16f9748f3d739572b850371444fcafe762a51b4240bb9bbef85fdc1", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/unsigned_underflow_check/unsigned_underflow_check_harness.c": "70f9f7cbe112c6610d9785a425bb43f098e80cefce795a1f79bdda03220d6c06", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/proofs/Makefile-project-defines": "9f1fb40fa45392f32901168bf4e012b78adb71e2daf6864d4a1a7d76b84f6f51", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/proofs/Makefile-project-targets": "d8c3930590646a4a3b5f5ed446758bf2d8b27ffb742dee196efb816ae2f502f6", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/proofs/Makefile-project-testing": "acb51f25870892f177057e7f56e73979e0eeb4967e3280aa160fd33a1a7bb03f", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/proofs/Makefile.common": "e23552ebdfa3fdba1bb158d8c868f139f2411a261c8d88f36bf9e2d6c076a21f", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/proofs/README.md": "142dc28dad300138bed3a174bdb7ce714f1c6a882299440e63552e2bebd2f7d0", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/proofs/prepare.py": "0d50cf7aece2c4f205a058ddb3bf6c1b0c1cfcfa9ea6dca9a145f1bdd7a442f9", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/proofs/run-cbmc-proofs.py": "aedcb62405ffb22af83c4b4cb38a665b57bfa3ecd102d868056b315306a26734", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/sources/README.md": "cfaa166351aeff46c321fd5627d417278accf8e88155481f678702644ce88138", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/stubs/README.md": "a87bfd893269da4a5c95f88369ce394b1e031dc6dbfd09195cd11485b77eac7f", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/training-material/CODING-FOR-VERIFICATION.md": "84c354dc41a70be81f085e6cb75f8328980b83a68333f179bba3fb69fee29bc7", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/training-material/DEBUG-CBMC.md": "d7e3ec89a44e5efcd8c2accac852bc9f261df54445eb4b3d1b4ffe5126abe6d1", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/training-material/FAQ.md": "d298098f6ead244a7d815aae24fe005e0ea09848abe42dd255694d42632769f5", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/training-material/PLANNING.md": "06ffd2048e70658246cba4359d5bcd121868238ca918041a874fddf311c22a8b", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/training-material/PROOF-WRITING.md": "2c037872b6c0994de2e0028cb9e7a8923342cacb2b6e3adc1c6f4ef3971a950d", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/training-material/README.md": "e453beb7cb3e4064bc6c85102c00176bf77b14e705046b8d8138c1614e237b12", - "libraries/coreMQTT/test/cbmc/aws-templates-for-cbmc-proofs/training-material/checklist.md": "000710d7ef9e7e716ff58869dfd7efebfa9d7b017672812d089a55698494e52f", - "libraries/coreMQTT/test/cbmc/include/README.md": "1ebb917adfbfeba5019583d75438c3f745da8a93752e88b1b31bdad351a1ac9d", - "libraries/coreMQTT/test/cbmc/include/core_mqtt_config.h": "862bbd75a7f93872530b5b6dd8b359eb85390fccae88bf6a94681973a695e109", - "libraries/coreMQTT/test/cbmc/include/event_callback_stub.h": "ec72f70cee375a9eac97b2af33ab9beeffc43e74d98fe3b6c10bf3b7c3094daf", - "libraries/coreMQTT/test/cbmc/include/get_time_stub.h": "5c2cbfe4bf9765d892c1d058e7ba1f0feb52fe44340ae3c12219238bdc25aaf8", - "libraries/coreMQTT/test/cbmc/include/mqtt_cbmc_state.h": "4b44117452114f105fce584ce292e21f77ec138917b1da96bdefc9e6272d41e6", - "libraries/coreMQTT/test/cbmc/include/network_interface_stubs.h": "9fe618fbf78e39f8a2c37daa5705d0cd92ac401b783791092416fee8773d6fb4", - "libraries/coreMQTT/test/cbmc/litani/LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30", - "libraries/coreMQTT/test/cbmc/litani/NOTICE": "becc1029d600695c22c6c3dbe3a8b7824b539d9b7ed533b4ecebbb259dce2d8b", - "libraries/coreMQTT/test/cbmc/litani/README.md": "f15f69182a049661c0795534e03b6d4e5aa0a8093d5da4421fcb655eb27f7681", - "libraries/coreMQTT/test/cbmc/litani/THIRD-PARTY": "83a5fa777a8dfb9127d69e1b0b9d776930530258300c41ac8b2180c5699bd273", - "libraries/coreMQTT/test/cbmc/litani/doc/Makefile": "af66c3b302388d09608d2c335cbea6d74398f1f5a8c4d56c86cd705947bc0689", - "libraries/coreMQTT/test/cbmc/litani/doc/foot.html": "1694311aa8f471c9904dd4588965bd326173f216e30353e5d65f64371007da1e", - "libraries/coreMQTT/test/cbmc/litani/doc/head.html": "76ce1041a11873360e6cda911a970b337d2191c125c5d6910798bc836d4d81b6", - "libraries/coreMQTT/test/cbmc/litani/doc/index.md": "83267d5fead2464a853bc29710fd68793d94a32119c280d89802ede900a1dc08", - "libraries/coreMQTT/test/cbmc/litani/doc/litani-flow.dot": "bfe01d6fb726571e82beeb4df7751cd72e655b8527edb8ffc4244247537d036b", - "libraries/coreMQTT/test/cbmc/litani/lib/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "libraries/coreMQTT/test/cbmc/litani/lib/litani.py": "31844ab14bae0b891200331e6ffeced6a5dd26c3c95c86e160b3344dfeb38d8c", - "libraries/coreMQTT/test/cbmc/litani/lib/litani_report.py": "9cb5d588df49b4a93c101b674c4c96a3e355654130a88c5fe4dd03703145858b", - "libraries/coreMQTT/test/cbmc/litani/lib/ninja_syntax.py": "74cf8d2ba381b447796b4db7933711a1844284b192cca23638bfc7b21a54d4f3", - "libraries/coreMQTT/test/cbmc/litani/litani": "975fe534cc3281675d158416f4b5ed79b0b9fa5345d3f0944844ef2227498c84", - "libraries/coreMQTT/test/cbmc/litani/litani-progress": "a3c0f0873b06e801587dbbd26aeb9382fdb60b97efffc56b9fbbae9d3627c9fc", - "libraries/coreMQTT/test/cbmc/litani/litani-report": "ea9aee104dfc7a73cb89a6b01c8ebb581e7fc6e9b4f30796bb96ee07ae5795be", - "libraries/coreMQTT/test/cbmc/litani/templates/dashboard.jinja.html": "224c4855cf8079003e72c57ce2aa7429bca50924f6d9b5ccf27a711a19844798", - "libraries/coreMQTT/test/cbmc/litani/templates/file-list.jinja.html": "2151bd3c71559e887d64ba471522f5fc4eeea7f261d118672d390cef3c5fd856", - "libraries/coreMQTT/test/cbmc/litani/templates/pipeline.jinja.html": "d22892a6cabbe10c9aa51603cb763492012d2212e142b3404fdcf34bcd4e848b", - "libraries/coreMQTT/test/cbmc/litani/templates/runtime-box.jinja.gnu": "ae73382f2cba9ea418fec6f163192fbadab884296d55ca58ff4af86cfa257baf", - "libraries/coreMQTT/test/cbmc/litani/test/README.md": "c1e5c0ec6b79a30040e88986dc84d15917712af49a9989aacc1542c725a7f652", - "libraries/coreMQTT/test/cbmc/litani/test/run-tests": "0b3af49895a6b7d57e9889139f3ed20c028a7611c140e977583a27b7f4028d50", - "libraries/coreMQTT/test/cbmc/litani/test/tests/1/Makefile": "a2ec421ed917ecd59f4c885faa487eeed30b59d3f8f09f863a00d240b2bcb983", - "libraries/coreMQTT/test/cbmc/litani/test/tests/1/litani-test.sh": "b1cb5ad8b6c5b640659fddb32988d986b27bded9cf3f1a08fd1ecec87f730e93", - "libraries/coreMQTT/test/cbmc/litani/test/tests/2/Makefile": "3531c2a1733b48d064016a34b7582874a87757ae279d1c5099cfd3ba6c5f2f3d", - "libraries/coreMQTT/test/cbmc/litani/test/tests/2/litani-test.sh": "b1cb5ad8b6c5b640659fddb32988d986b27bded9cf3f1a08fd1ecec87f730e93", - "libraries/coreMQTT/test/cbmc/litani/test/tests/3/Makefile": "3793c6940a452f1db086977f59e648b89c90aee688ff323f5ae597844078cf66", - "libraries/coreMQTT/test/cbmc/litani/test/tests/3/litani-test.sh": "c95d186c612c5a62e237ee1613e4a51f830c81f1cbc6db442a2ce5f4f67b1fc7", - "libraries/coreMQTT/test/cbmc/litani/test/tests/4/Makefile": "3793c6940a452f1db086977f59e648b89c90aee688ff323f5ae597844078cf66", - "libraries/coreMQTT/test/cbmc/litani/test/tests/4/litani-test.sh": "b1cb5ad8b6c5b640659fddb32988d986b27bded9cf3f1a08fd1ecec87f730e93", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Connect/MQTT_Connect_harness.c": "c41c091bfe97783b398b09db18b70946df6599ab318fdf6ccece00b9429bc68d", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Connect/Makefile": "a76f790acb4b9ae3f5fe65cf9b21cad9c989b681c43d16e2f7f18039c50c8269", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Connect/README.md": "56ef61cf1649982459e19664c8388fe891ac22cd9ace86d02e9dc19cc237fb58", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Connect/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Connect/cbmc-viewer.json": "cab584fd42fc0f278ce71342de8d61eaf2d76a29fabb4d20e47bfc23222a28e1", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_DeserializeAck/MQTT_DeserializeAck_harness.c": "cf5a229ea96395f3897935dfbac6f035be072987b1177f4a9ee7b7652b0557ce", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_DeserializeAck/Makefile": "19b8901b34714c2f43dea31f92c8d3d92ebe2bbd3cfc64ddbb8662fb0425255d", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_DeserializeAck/README.md": "7a7d6c9942e7f500d437c5a719f1a34058e359765400dcee5c92f863f4b5a571", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_DeserializeAck/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_DeserializeAck/cbmc-viewer.json": "64303ecfdb4e576970e009599853582974cf2f127e55ec4b8abd022806edad84", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_DeserializePublish/MQTT_DeserializePublish_harness.c": "245fdd42080e0bd1d004ef1dabf6728f00876f8ae497983f73394e9d2e6710a3", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_DeserializePublish/Makefile": "0898d4140cac0be565d0f9d2383efb29956864f55ef17e04151ba09269426815", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_DeserializePublish/README.md": "75cf3eaace92611b83a309ed9dfd488dda51b8f4f4917ba4c502352bb46ce144", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_DeserializePublish/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_DeserializePublish/cbmc-viewer.json": "47e712b26c107b25f7aca63d3b947acf9f056f28bf3a9bea108a591b237cbeed", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Disconnect/MQTT_Disconnect_harness.c": "62a1dcfb08ed8860c47ea7969eb6c48e11eaa8867e937775363d61e9f3eeca1c", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Disconnect/Makefile": "a10513d306d332c8883687913b5d8d1b4fc24c1f550688031455f03be482f3c6", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Disconnect/README.md": "ec8d0fd2765e652ae921480aed0fb834ca7aaeb29732be426c57d1869c310454", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Disconnect/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Disconnect/cbmc-viewer.json": "bf4978a78d0061026ae9f78c03ccae0ee1e6cdcfb39b7350d2aefe68cbd9ac98", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetIncomingPacketTypeAndLength/MQTT_GetIncomingPacketTypeAndLength_harness.c": "e894bb1f6b064a962d2dac824a23dd7602ade177fb16a70e366e45a600aeeebd", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetIncomingPacketTypeAndLength/Makefile": "4423c7597e296f08c0f7cb9de52d945377563ec3e2f02249fcf6d903648dbc9a", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetIncomingPacketTypeAndLength/README.md": "3f5540f0a13298b8f90721fcfe9ba561cda091cdd6797c2c3f8b85b57b0812f2", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetIncomingPacketTypeAndLength/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetIncomingPacketTypeAndLength/cbmc-viewer.json": "97a42a4e5454069192e8d0e654a6805782c587af560b08f17a095682d8d1cd85", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetPacketId/MQTT_GetPacketId_harness.c": "91f91fcc31ea8c9567c3b58ad685e2c1f6cf34e3b77c0e386520024448958ac7", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetPacketId/Makefile": "1ab9da1dacd1a33713a2e2f6848d97252fcc47fb9489633c763a41761af1b025", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetPacketId/README.md": "173028ffc86135f832c5b763987f0cd623b1949d46f94afe6f24ae27578a7a8d", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetPacketId/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetPacketId/cbmc-viewer.json": "ee5d6d6e29ec44fbcf95ba512a32fee52b5b333b6fcf432dc57b8d60f64840a1", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetSubAckStatusCodes/MQTT_GetSubAckStatusCodes_harness.c": "9c52aa70924c19a497e0d4404c3ef199d537292fef39cc3d7da1e609ad0d8839", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetSubAckStatusCodes/Makefile": "fb43e3ef5da978ba636b9b8c94984988fe5ebdf417608cbee901d95135f6b658", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetSubAckStatusCodes/README.md": "2d74b1a9895f27194a11a08d5e2690145ea717267365446f93d676865b4338f9", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetSubAckStatusCodes/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetSubAckStatusCodes/cbmc-viewer.json": "6abd54df401cf3bf8ae26e1515e34e0bf794565d5666b1d8f0c411ae61156157", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Init/MQTT_Init_harness.c": "36631f88308aa32358c9e242c327bc89fd540a20fa9d2907ce23fe4b47083b9a", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Init/Makefile": "55515078de553566bf63b2df808b6e2a3b2fe6edd48069f3d28ecc0d8c79b7a8", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Init/README.md": "ca6a087edcbeb2cd36cee08b509952e2fbaafdaacf5cfeb12016b327dd67d220", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Init/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Init/cbmc-viewer.json": "72a69eeacc6efe57b089a25f951a7427b1985d439812512c92e284c0279add2e", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_MatchTopic/MQTT_MatchTopic_harness.c": "bddac2f9b7d55824919bf371ee80b616548b47d4adaa80e080ffcbddd1a34616", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_MatchTopic/Makefile": "6a167927fee24f423215499a6f810050b54ff0ba96d0ff50f951a8a01f7273a3", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_MatchTopic/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_MatchTopic/cbmc-viewer.json": "b69a5577a7b673b1c40b34949efac35ec6271451079862825401b3d2a128d789", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Ping/MQTT_Ping_harness.c": "fd45cca3a1af84c0349b9285a2edbd745ac0054d88ea38416d535156f89819d3", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Ping/Makefile": "3a84d9afa0cc8ef70f6f4de03f2ccef17eb808c8d929793642e7aef5bd166ca1", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Ping/README.md": "0a93c1b497a1c52a6121e92c071d6e4bb9e168b17555ed1f9c0f6d9053a9b113", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Ping/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Ping/cbmc-viewer.json": "f6c242754a1c117221b01a11f7cdbd0e6438eeeb520a6a0a842e85b6f6f07ef4", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_ProcessLoop/MQTT_ProcessLoop_harness.c": "e656fb0913ef3a598688caf6f54faad4084fe50c40b968d5847e95da62feb1cf", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_ProcessLoop/Makefile": "48b0d57b7f25be04e4407c84bd5da642b76691dc789b26b7e591eddd3fdc46d9", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_ProcessLoop/README.md": "241f1632dac11c88647d93a537e843febe8aa7cdef51a2eb8f222c2ef54d9f14", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_ProcessLoop/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_ProcessLoop/cbmc-viewer.json": "79aec48e68b39c6e4d339247d55b72186f0d8f3ed8baa54d7005899a09f8ec98", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Publish/MQTT_Publish_harness.c": "da56ccc4842acc942c33992ce22fb87c5779aa12592529098f2206a9442cdaf5", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Publish/Makefile": "879840e755a86e9e5b8e75297cd0944e6851c0c0f3b1e7cdb43dbfe53f85b1a3", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Publish/README.md": "020fe4a980704d4ca277ba5f3177131cd4ca17cf8cb50932fc77239270f090f8", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Publish/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Publish/cbmc-viewer.json": "9b69f8a19dac6acdeee2eddfe653599008df1502df115c7ed861d8920ee8a745", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_ReceiveLoop/MQTT_ReceiveLoop_harness.c": "0994de351677a9adeb60cf71976b320ba72de5f8f262df6caaf8e5b75908031c", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_ReceiveLoop/Makefile": "07199912ad091ec8eabb858b1928409962ee62a220e8bc56e437717e165dee85", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_ReceiveLoop/README.md": "e374941c2cfb38a528b50eb6ce77b8642feb4d471c283290ef5bf893e6f6f6be", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_ReceiveLoop/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_ReceiveLoop/cbmc-viewer.json": "8dae172cd3cf76f4857621a32a943815dbc64b767be0dcbdc6f236c1ce73d87a", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeAck/MQTT_SerializeAck_harness.c": "5aa230f88df7faeddd72c9d322d64f20c6bc36865824232f6b09a9a54f383941", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeAck/Makefile": "404d6903622abbee1a5de868d65dc96aa702994899139f91db4825f4226f30c9", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeAck/README.md": "5e6fc8595d1fa6e42e46f89b1c82a699f42776068ef8842d3028b3b5cd930208", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeAck/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeAck/cbmc-viewer.json": "97acbe10b64118abc2c50a2ce9b6d41d20c9636e8eea4eb1f690965e338f3dca", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeConnect/MQTT_SerializeConnect_harness.c": "8c85f48ec818343203782e2f360da69acf4c9d245a8cd2529d6f5f6e807d5eb8", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeConnect/Makefile": "be52f16379b711c424bc9630d52005c3944c5a40a85847c33daaa22282e33656", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeConnect/README.md": "8176a747d19bd17bbc0e318858ba82c9ed1e35007766e79d294ca26e4772bc0a", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeConnect/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeConnect/cbmc-viewer.json": "46d696d30594fe3ad0320f9b3fed7948ec877c87df95f6b48aa92dfccf29f5cf", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeDisconnect/MQTT_SerializeDisconnect_harness.c": "bad51abf8558418c1c3e82d8e8291db29f6f81592f81d00df25e26f022d481b4", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeDisconnect/Makefile": "1b390c0119f425bcfc4eab47e1e89e8dff524892eeeb4b22dc14eb0d3e899e4f", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeDisconnect/README.md": "6cfa4a964cbebddb3273f54787c4fd387517cb7dfa41ad52db1b0d4c831b6a42", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeDisconnect/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeDisconnect/cbmc-viewer.json": "38376b24ad94f9802301d5a2d15aab04cbc83b464756ec8fa6b82090b5f64df8", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePingreq/MQTT_SerializePingreq_harness.c": "f44d78cf518a234912c7ef4d108439e69b40e70abc5d8d7023637719a52a68a5", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePingreq/Makefile": "94f1c85d775e5a90888d9d50ce36c4c701c25c26d110470765fc0a0dc965a33d", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePingreq/README.md": "d6a9f488491dbe597490c3b5534bc230e43f468f7198bc785223303dd55b14ba", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePingreq/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePingreq/cbmc-viewer.json": "eb118ca44d049c8bb9872e3d73601a3643c7fbb4e7939f078be32a6f89d22c52", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePublish/MQTT_SerializePublish_harness.c": "ac1a83426b1553481f2fc4337ab0e43fe6fc1f6626648accf01690a1694cb9e3", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePublish/Makefile": "60798ba1e5074e3e3eba28bb25106304799fee5744760db24274a48648b849c5", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePublish/README.md": "2b7bd481ec1b8ec86339cc9489108660d9565014fe188c3675011fbf35418162", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePublish/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePublish/cbmc-viewer.json": "907873e23c42a57756a18e3e179ad347b7b70210297a0abea7322b1c2f47545d", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePublishHeader/MQTT_SerializePublishHeader_harness.c": "19ddb93e4c2465bdb50487d36fb4f980249a688d3df164e835e42a6d424e6fbf", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePublishHeader/Makefile": "59b6107ce9da982749fd594741776679a178cd0edf9ae01a37dd7083f6fd96db", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePublishHeader/README.md": "bf530b289a27f153bfab861208c39235e68e6e6af7e139a64a60cea749609deb", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePublishHeader/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePublishHeader/cbmc-viewer.json": "80c29042213ab8cc35df703b910864447ffd197a30c8092a3f44afbc980e077d", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeSubscribe/MQTT_SerializeSubscribe_harness.c": "7888d3e662171b2cb0fd4694b0bf25af8fc1d0e6a56dd9c6c45c25c01ac73d1a", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeSubscribe/Makefile": "deedd106c13ce55b92cec98187e9fef8f204aa89dd267c3d75cd4b8593507ef3", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeSubscribe/README.md": "b604ae8cb53c551e05cc34995632bf589ffa4cb6ec423c2222445a3b5b67f8fc", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeSubscribe/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeSubscribe/cbmc-viewer.json": "b2250403fe8c62be92d03a4074d14389adb65c6011dd377024c132cf4b6ca846", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeUnsubscribe/MQTT_SerializeUnsubscribe_harness.c": "170897c6ec216e4e8b7535d29ffcdab8c867423bfae49e453877bd88c6b0c6e1", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeUnsubscribe/Makefile": "518841906dfbd49f5aacf7b6cc8d22a65497c9def47c2ecf2a7b0e3bc6205b5c", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeUnsubscribe/README.md": "d2a2e6132e9813e8115c8456f44d6a47ba0694c164ca5af7d623cc42bbf64cba", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeUnsubscribe/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeUnsubscribe/cbmc-viewer.json": "825c4d6438cc955585f8cc96d1e0db10dfa339b3b8e9affa649ba80290d14bdd", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Subscribe/MQTT_Subscribe_harness.c": "06bc663a1826d95eeb60a46236fcba641511053974be20fc691b464693791da6", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Subscribe/Makefile": "df44df207fb78c123d1f485f69525d94b229c22ed6a9ddc57cdb0893b3aef97a", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Subscribe/README.md": "3030e6395ffdb3ad5e06cb6c4eac7f547b4b449cbff149eca48d0457b16b4a3a", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Subscribe/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Subscribe/cbmc-viewer.json": "9bdd8ffaf8f974098a76bf0ffac325925ada3091a660b0350939762106e267c9", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Unsubscribe/MQTT_Unsubscribe_harness.c": "83c696d3f956ed5f997475e1b28c83aca2c3b328d49927fac853cbc56820516c", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Unsubscribe/Makefile": "d73c02ecab06c21886b82799b5229ccf81da83ab644da39a17d166fdaa1b051a", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Unsubscribe/README.md": "0cea32d7b5aa59d40f68bddb1d67adc4dcbf2f0f8f8a9d8ad4c138bcfbbd77b8", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Unsubscribe/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/coreMQTT/test/cbmc/proofs/MQTT_Unsubscribe/cbmc-viewer.json": "a0869989a2bc70187d7895dddb395904eca58cc2b412d6c623adaefb9be8c6e9", - "libraries/coreMQTT/test/cbmc/proofs/Makefile-project-defines": "76e22aea31f930b26133e16927dc45124186f68f2f4c698e297653966a598d75", - "libraries/coreMQTT/test/cbmc/proofs/Makefile-project-targets": "d8c3930590646a4a3b5f5ed446758bf2d8b27ffb742dee196efb816ae2f502f6", - "libraries/coreMQTT/test/cbmc/proofs/Makefile-project-testing": "acb51f25870892f177057e7f56e73979e0eeb4967e3280aa160fd33a1a7bb03f", - "libraries/coreMQTT/test/cbmc/proofs/Makefile-template-defines": "50b3687413c3a9a1e42a62954b1007e270fadbfda068fcb8e796b1862563507f", - "libraries/coreMQTT/test/cbmc/proofs/Makefile.common": "e23552ebdfa3fdba1bb158d8c868f139f2411a261c8d88f36bf9e2d6c076a21f", - "libraries/coreMQTT/test/cbmc/proofs/README.md": "142dc28dad300138bed3a174bdb7ce714f1c6a882299440e63552e2bebd2f7d0", - "libraries/coreMQTT/test/cbmc/proofs/run-cbmc-proofs.py": "b37b71fb8ccf4b101ea1ffc65107c857f45fa6e228f1eb9e2041c017efd3319c", - "libraries/coreMQTT/test/cbmc/sources/README.md": "cfaa166351aeff46c321fd5627d417278accf8e88155481f678702644ce88138", - "libraries/coreMQTT/test/cbmc/sources/mqtt_cbmc_state.c": "aad4116ee19185306a152f9fcf14c30cedb2363a11640e378c025eed1b1f987a", - "libraries/coreMQTT/test/cbmc/stubs/README.md": "a87bfd893269da4a5c95f88369ce394b1e031dc6dbfd09195cd11485b77eac7f", - "libraries/coreMQTT/test/cbmc/stubs/event_callback_stub.c": "026a3cd17b0feebe1d895b9b377f77b06b6f0d824d1f313345be30cbea74aed9", - "libraries/coreMQTT/test/cbmc/stubs/get_time_stub.c": "1b04d0d801507505aff30409247af2bd6b23ab1feb20115d731fd8511142848b", - "libraries/coreMQTT/test/cbmc/stubs/memcpy.c": "4579fc723b89e9416fb39e9b7bb5efc1d7eaefc766de4cb2f6fbe6f77760a138", - "libraries/coreMQTT/test/cbmc/stubs/network_interface_stubs.c": "9f1d83a07dfc7ab58064a9cb0ff8be2fe366261c3ae48f92306cceadc0a3e683", - "libraries/coreMQTT/test/unit-test/CMakeLists.txt": "a865b6f4641222225eafb212cf50cd2fcc86c1b9054baa803efc28181f46b531", - "libraries/coreMQTT/test/unit-test/CMock/Gemfile": "98249ab9b0a5d95ca03b9b68992d29d944e132c0eb65e71bd6ffed9f0e40d98b", - "libraries/coreMQTT/test/unit-test/CMock/LICENSE.txt": "a228c2871b9a779a6542a49470c5b567f2806dddcbcf90af861bb4d39291626c", - "libraries/coreMQTT/test/unit-test/CMock/README.md": "7e5eda88c3a355bad26c706daa6350186c89fe1db148697192be99fcb38aa142", - "libraries/coreMQTT/test/unit-test/CMock/config/production_environment.rb": "53043c94478f0bc85135849a7ab04da60cb4fe37661550df8b9ad3b0d3936bf8", - "libraries/coreMQTT/test/unit-test/CMock/config/test_environment.rb": "a89de3aa45ddf4759f719421ec227594b8c6dd874e61d0972c771f92f81a8ac0", - "libraries/coreMQTT/test/unit-test/CMock/docs/CMock_Summary.md": "b1950eba2df737fb1a106b15b34a4e92b2fe7a601789ba481d92b6de60e4cfbd", - "libraries/coreMQTT/test/unit-test/CMock/docs/ThrowTheSwitchCodingStandard.md": "a1838b8c9e20ac3c15bf96742b716b6621c0607c9273ae0f92a6769e3aa45f41", - "libraries/coreMQTT/test/unit-test/CMock/examples/make_example/Makefile": "4180bf84b4a71086dcdd9e5f622c63be705981f8e98e311d7ecceb44940c3ea8", - "libraries/coreMQTT/test/unit-test/CMock/examples/make_example/src/foo.c": "0bec016ce8f7d6033049664c12cfcc5c0099e638fc6395e753b4d36ea2808d72", - "libraries/coreMQTT/test/unit-test/CMock/examples/make_example/src/foo.h": "e987f3bf49f430e2a9cb70bdd7105f8945e028d1598f361b30fe87a0585d97a3", - "libraries/coreMQTT/test/unit-test/CMock/examples/make_example/src/main.c": "23c00ca8f9cd5d89107f26d0804e1a2a6f8840941462ddd616f0fa33da7dd0c1", - "libraries/coreMQTT/test/unit-test/CMock/examples/make_example/test/test_foo.c": "6d2fe8d7ece7f0f8426fe684896c8bf76d15ea35e56add62d59558b47ee32347", - "libraries/coreMQTT/test/unit-test/CMock/examples/make_example/test/test_main.c": "73baf6160697615a9af98a184479a28e92d42fb82c0f310efea1b105910a3b0b", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/gcc.yml": "5c5d558eba12c2c31432472acf7e90559bbd351632f4cb80c3ee621e4e65969a", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/iar_v4.yml": "f5722f968d75bbe9af61c0ad0f01b6b98afa1a08185526ae49ba121bac937ce7", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/iar_v5.yml": "bcf8ab60e79e586b628e8c0aff5c50011dd3db2695468b2ca6b8c25d3783e506", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/rakefile.rb": "5e0b4e5ae6dd28e4d882b06f6a2f99e35febe6a799e5103d255b3d44371f6060", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/rakefile_helper.rb": "16770f78c965b0ea1fd29ddb817d8756bd6f8f3020693c5f0a867732b1488ee1", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/AT91SAM7X256.h": "284e49294ecd18da7c0b4abbf825cf8edb0f68884d334167c1f755b8528b34f8", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/AdcConductor.c": "b14eb5f4196976d82c9501184c0496ac5c071ca9a993ddab0779faea95810f44", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/AdcConductor.h": "961bcc853beb286a6ed95ccaf1b48337e1e36b8e543ebb60ce9a56b80238d8e9", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/AdcHardware.c": "e9aabd8f076c0d1738d6ea6294c0e16f15643ba19483b1ba6eee861f02cbb9e7", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/AdcHardware.h": "af2841747b2659b183891c9c4c00a2b7c065b51a8b958c35d4a6be8564326e10", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/AdcHardwareConfigurator.c": "06b303aab471c751073c25170c8b4bc5f52cd89eb52a29a0db32946975bafa6f", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/AdcHardwareConfigurator.h": "2ac7b673358582f4df15beb5956cb9f66b8c56882ddb1f8508314d96459aebf7", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/AdcModel.c": "885c0a3df693def8de467cc9d9cbb503ba795ffe379d65de02409f8fca2fe360", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/AdcModel.h": "3ea12eb954305556617507aa8983f26fe0cb7afb7c8afc71341056e6d8ca23dd", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/AdcTemperatureSensor.c": "301cb0b59970bc21f85b068d103732e4dcb55cdbb74536a242a2c45ea8151610", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/AdcTemperatureSensor.h": "2fddbdb25206928f3c016ef362174caaf735d683da8e246f8d01f191d3926b73", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/Executor.c": "0cdf97b9afa1e7f2da8580b93a19fc536ad83ff4ff5ad1e42013e795af5db025", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/Executor.h": "11a373abf8479822f68c5ba2c244c922df6366047531c7953b1a257833075a7f", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/IntrinsicsWrapper.c": "95796f352948558443ea6000f9b1237d5b961d2275d12d7b4d33c6d05a4b90d6", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/IntrinsicsWrapper.h": "89354ee37181c2effe24d952bd3e4c7f44f7e02f8a85fe08debc64b4fdef3a4d", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/Main.c": "23b5e3b20efbe81415f4a8c21a47c767d6560e05e59b1a6b0220e5e4ae2503d4", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/Main.h": "6cbfb303c81f28a5e0b5cbb1fc44a860310af5f9c83fd5391b81c61ea4c6203f", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/Model.c": "8d62e7a6d628d609ffcda11085b09ee0f8fe18a1c527d8fcad54810a879cb705", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/Model.h": "409578c18146e8a728d4a0da93ed34d65880fc96dac39c2786a442e6ff47bb31", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/ModelConfig.h": "118773cc1bbaf51497b9e56fb3a65de4479944973565283223241e73abb34fed", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/TaskScheduler.c": "ccfda6443fa3c524f00d5810dfa48fa23e12608cf8e6dde46e5bf10293de717c", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/TaskScheduler.h": "b6e6f8c61bdd97ee32efe3a5b130c68379978ac126dc9695681de1a4393b0e14", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/TemperatureCalculator.c": "8ffc3c06a3449fd560275736c5cc3202137f00d0513e651304c836fd78128a56", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/TemperatureCalculator.h": "bfee490f7a59b6eedcd357c99cbff6be20b33b4aa96d54789aa420f69f3ceb33", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/TemperatureFilter.c": "fb6997e829daeefe1fa89a5febeb8aab8c9a9adfafb5739f60f786c69b57a3ea", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/TemperatureFilter.h": "0731c950b85d436e651737cca0ecff430edea68d62599e27167e7c5a2a57d983", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/TimerConductor.c": "b10f5485f4a884019257dcd143dddfda528af77b1f8b005a40b2443020ef67a5", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/TimerConductor.h": "53deff5a2ce521b48c69e1d85641e2c7da7d0bdbd1de48f622cc1a7df5efd177", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/TimerConfigurator.c": "145397008f450ec09b8bd010b02430c3becddc92a7fcbe31c06a5baf99e32105", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/TimerConfigurator.h": "55e7e6f42f76dc2c9c60137be3b4a4bfd3e9e96e4ce41c2300221bcf8fab24b9", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/TimerHardware.c": "5085266579205f2be126cc0e5f34c443469a3e5da53efd0fa2d95a7653a98803", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/TimerHardware.h": "abddafeeb43ee8cdc31389263b8826f3ccf6a20573ca4702dfeb537b00a04104", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/TimerInterruptConfigurator.c": "596665665389de910b1dbd15c292f141a8e64a2c4a0164a7959121bed2467645", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/TimerInterruptConfigurator.h": "5a7adb509ada4640fdccf739be3de8abb470b41bcddb9a9834e9b238a9fabd02", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/TimerInterruptHandler.c": "7fab66be3e4d5c430a1dfddee56559ba55ab4cd0d448c583637072e9dc9f10da", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/TimerInterruptHandler.h": "5cc7ecbd35069059f0fb2d516f8b63929e0a4d0fa00e53b593f0827d5f637d29", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/TimerModel.c": "315b80af627d601b85c203ad389f455d5a010806ea113fc410c9bb5566cb7966", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/TimerModel.h": "8946208aac57141bc8078bae72461ce1b0afcf9509eb7c9dd52d7643bf3c99da", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/Types.h": "342e458d2f13f4b2f42ac03133f005635bd4002ae446f5aa5006c73f4160a3d3", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.c": "a0a5c91867bd150cff7d8d1a25e5e3355a780421715afa1b9b7ea747612b8fd3", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.h": "cfe9a2cd19135f1c1058748f6c82be18331e35a7796a8801103458b2c36912e7", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/UsartConductor.c": "3536b396eddfd8d605ac050c18fd150764031ed873e18362fb0ebc34d9d7dc3c", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/UsartConductor.h": "58ce401a82e272c72f0d9cc81310a103d6bebd9565d8ba783d8a99a014a17aad", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/UsartConfigurator.c": "d4805a5c993e1c0227442f926bd9a28dd1d8af59fdb93c35fa707e14d77baf09", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/UsartConfigurator.h": "95eeabe4b7a99b54cf49531930b0a4be7fe812420c53dc1b730dec7f08e2d1c0", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/UsartHardware.c": "97db4fe3c762e48593838b8ff9ba20e08ce02ceb39bffa592b8691d850ecfe0f", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/UsartHardware.h": "99fa878f31c0b2f5d91cc7646ef25823c38a5c78a747a780d4c25754f448af0e", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/UsartModel.c": "36d389273df8ac7d3b28a3490a511c1be2c117d73d9f7a26dd7d34af5c6cd5a7", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/UsartModel.h": "c367f4aab51341ba2dd1780bad6b7cf59c344009505695b608b734b4711592b3", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/UsartPutChar.c": "2b2aab187d2b818ab28750a0676298205a7f7938ebffa440aaff99f3bc37002c", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/UsartPutChar.h": "557610200557eb94f1a7f5d7a1a7d26bd0827f5e2b06749353dfa4fae73d4439", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/UsartTransmitBufferStatus.c": "7924adbc923cd9eb3bcea5877defbacb3ec16a03de29e7327ff064304a914505", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/src/UsartTransmitBufferStatus.h": "955b1a7e0f4de642f8bb6083b8fa8c3f4d75bdc4c378794aac6dde049410d42f", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/test/TestAdcConductor.c": "9d22203689e18bdb6daf3a8aee7d17438028deb1d924731a0597c13743616d88", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/test/TestAdcHardware.c": "b3b05e87ac62d463ef489eb2e8aca41d2b6829ef8edaab27622c9c4889a59dba", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/test/TestAdcHardwareConfigurator.c": "58333e4681ca8a34e98b11129deebc653e44e3587b03b6b7f523a80ace169225", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/test/TestAdcModel.c": "dcf55240bd2ce74f8e3bcc28a98ed8037d51375ade9ebb1d61e882b41e11a9b6", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/test/TestAdcTemperatureSensor.c": "f5178bbb8605872e09608baff9b049cc826afa278bc1a125389255e786131f8f", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/test/TestExecutor.c": "db1bc8f44e9183b2a7909c0c0b8fac6b25b37d4aee0f47c9ab181500cf384ac9", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/test/TestMain.c": "67944d7590384483ecb8b1c06cdc9426e4c78bdfa99886f4d24f9d07e2aa84c0", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/test/TestModel.c": "1720d2acf16537a03ff8b6e800f04c46312c9f17985d856f3cb3f64309a869f0", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/test/TestTaskScheduler.c": "4efcd2cc31f7c3737f8a0143faf05f370466cb7acf75f0d15f7d661f9303472c", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/test/TestTemperatureCalculator.c": "f0b725debcc365c16a055371f3f48534d3f30bac75804cc9c5838850a8bb91c9", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/test/TestTemperatureFilter.c": "ffc624388daa2322ce339cff9445abf37cd2372534db356f57821b9e49874761", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/test/TestTimerConductor.c": "7d2d58e797a65e44698e30cdb79cac7e94fb96c8e95623c3ab8f9ec0f9078809", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/test/TestTimerConfigurator.c": "51748b3199379ebd5797c4da7bdefed444aed398ae36508c098c3f00a2a4416c", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/test/TestTimerHardware.c": "7ab489c8cdf7d8d0421482a1a6ef7b1f8663e38453a140e9a5550d1c67844170", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/test/TestTimerInterruptConfigurator.c": "7f8eb3100b9091d2996c8f75459659e8ae0c5a75f0d5ee08e3649b17f3394cce", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/test/TestTimerInterruptHandler.c": "0000e221012abd79eaf668188923275b7e7e12ef297b15b2165e35440c0f1eac", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/test/TestTimerModel.c": "cee4214bb0cf367910562488f448014bc802274d2894bc87ad9fa49098a99add", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/test/TestUsartBaudRateRegisterCalculator.c": "729c0d4162bd09ac4514e2de1f70e1b0b4fb05ee125dcfb91314aa40986e8235", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/test/TestUsartConductor.c": "ab351f7a74ba445200ccf3d851122fb86531e8511d8cbbbfd1d70b9ccd4a93a4", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/test/TestUsartConfigurator.c": "719758e045571b2c532007e37cfe9939eddcc850e069481524f5d4b17d9d399e", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/test/TestUsartHardware.c": "c29fa69264fd62d7a466a95de9c927e94119b366ecb1d333be47c60de6183fa1", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/test/TestUsartModel.c": "5ab9a684792f271e587d4e861de5c3dc90439dcc4670d7a06da8bd078161a2df", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/test/TestUsartPutChar.c": "cde5d54b2acf09a6caf86e360c9a2fd40fb6ccdc8fcfe78d4b10ca7c34d95e9e", - "libraries/coreMQTT/test/unit-test/CMock/examples/temp_sensor/test/TestUsartTransmitBufferStatus.c": "d66b41fefa7200f926652c67cc3797b6143b321e7be5eefb099caaa4cfe2af37", - "libraries/coreMQTT/test/unit-test/CMock/lib/cmock.rb": "f0edc4e161d909610f05f5e915b8262efb41afa36e0ac3be131f5626d3c58960", - "libraries/coreMQTT/test/unit-test/CMock/lib/cmock_config.rb": "967100e4f4d602c934d43c00d7f996186a241c6e50f3351e5488039c23891511", - "libraries/coreMQTT/test/unit-test/CMock/lib/cmock_file_writer.rb": "10145593832b79591152a96fe63371c921b0a544a1fa5811d268b520923cb8ae", - "libraries/coreMQTT/test/unit-test/CMock/lib/cmock_generator.rb": "4d3becae94cdd6e22c11e9bb2b925d94cb5dd1db38585963dd41a10b5b212ac9", - "libraries/coreMQTT/test/unit-test/CMock/lib/cmock_generator_plugin_array.rb": "0cb11153bbcc6e2cbaa07c74e9586e3172ce230019bc3f022894520c086f21d6", - "libraries/coreMQTT/test/unit-test/CMock/lib/cmock_generator_plugin_callback.rb": "4119c7f44d9e28264069064e1291589a16274bf93e5a14552e11a620ebb7dbd9", - "libraries/coreMQTT/test/unit-test/CMock/lib/cmock_generator_plugin_cexception.rb": "708f8c4336375acfcfec43e8190154cce8e12728e74737285824fb65944cca1d", - "libraries/coreMQTT/test/unit-test/CMock/lib/cmock_generator_plugin_expect.rb": "6df76c4d83db376ff82bb045c0f3003818f411fa7d9157a3a94e07031faddd22", - "libraries/coreMQTT/test/unit-test/CMock/lib/cmock_generator_plugin_expect_any_args.rb": "a89ff1e3376663d193d43f4d81ced30bf4691415ee98bfc12a29c6cc93cc25b2", - "libraries/coreMQTT/test/unit-test/CMock/lib/cmock_generator_plugin_ignore.rb": "5dd940f4b8ad31ccb94183e3c49a94410d1bdfdeefa33041dfd6de167f874abc", - "libraries/coreMQTT/test/unit-test/CMock/lib/cmock_generator_plugin_ignore_arg.rb": "8b65b5e69deae8a1bfaec78a7fe289ae96da9ecbf5f75bfc927f66326752ee0a", - "libraries/coreMQTT/test/unit-test/CMock/lib/cmock_generator_plugin_ignore_stateless.rb": "035693e7216923faaebee04641328fa470354209a24c2cc1511da76a16eb061a", - "libraries/coreMQTT/test/unit-test/CMock/lib/cmock_generator_plugin_return_thru_ptr.rb": "d9e4becb9f498eda5789f018afce08b7754b7201f839269753233d4a96afa7f5", - "libraries/coreMQTT/test/unit-test/CMock/lib/cmock_generator_utils.rb": "a3a991519847f367060ce0ee9573c3fe198572dc2293b62530d20eade3231acb", - "libraries/coreMQTT/test/unit-test/CMock/lib/cmock_header_parser.rb": "bd3517c139bd3e77b852b5462f2ed3819e3c8a2246edfbe1c3bbc7be96aa0070", - "libraries/coreMQTT/test/unit-test/CMock/lib/cmock_plugin_manager.rb": "c4af08cb8b44fa782c0cc6b5027d5a0001241492bbd67fd3b900c735daff7650", - "libraries/coreMQTT/test/unit-test/CMock/lib/cmock_unityhelper_parser.rb": "35a45f4dbfddf0ae863ddead0b302ee1b6ac51153295be5c07bd26fd9c397787", - "libraries/coreMQTT/test/unit-test/CMock/meson.build": "499a9acba3250bb3654bfb97429e4959d7e919965f80cf2654c095139b9528fd", - "libraries/coreMQTT/test/unit-test/CMock/scripts/create_makefile.rb": "a89601aae619a101901c98fa211c24484ce0f16abb4fdc74339973da630e2de3", - "libraries/coreMQTT/test/unit-test/CMock/scripts/create_mock.rb": "f0ac5b9b046564354f3b1dc548220842936901f1757c0fc80c6a38aca207ec52", - "libraries/coreMQTT/test/unit-test/CMock/scripts/create_runner.rb": "3913d1d40de255a31cc338f52e632d4b4b05e975b30c1a03bbee7d1e3bb95901", - "libraries/coreMQTT/test/unit-test/CMock/scripts/test_summary.rb": "7f782242056d906c3759ec8785c47b4006cb658ae88d5b331fd0b45a546c6e94", - "libraries/coreMQTT/test/unit-test/CMock/src/cmock.c": "6cd73033ba5ad688626bad666169d0869f7978bee7672a098998e0894d9b1287", - "libraries/coreMQTT/test/unit-test/CMock/src/cmock.h": "fb386d093680f1f82fa493d29959e3cc6b195c2738c07fc36a3c33868881a5b2", - "libraries/coreMQTT/test/unit-test/CMock/src/cmock_internals.h": "33176ace775e36ea3aaee1041d5df0967e5f120170f17f68be1ebc54c91f3027", - "libraries/coreMQTT/test/unit-test/CMock/src/meson.build": "29260b081670469c41d6e6fb0d6225aa1323b9857ea9baf7631257f896fa8afa", - "libraries/coreMQTT/test/unit-test/CMock/test/c/TestCMockC.c": "7beed4e807a064045a2f00bb149af817483fc70331aedfaa0d2934d3b94f993f", - "libraries/coreMQTT/test/unit-test/CMock/test/c/TestCMockC.yml": "7457da36df8102d71c336ca384702879161097ff542380bed78cb5446984ae4c", - "libraries/coreMQTT/test/unit-test/CMock/test/c/TestCMockCDynamic.c": "eeaac501c9e65e166ebd11b90c5275c67597e81e6c9c3156faf006751023495b", - "libraries/coreMQTT/test/unit-test/CMock/test/c/TestCMockCDynamic.yml": "4755d85389465ac56733780ec7da93965dccf5eba935195acbbb7de251c6048a", - "libraries/coreMQTT/test/unit-test/CMock/test/c/TestCMockCDynamic_Runner.c": "ba26744cbf8c4f1ea7de6ca7254700bf1e16ae57682270dc4d94393ccd501588", - "libraries/coreMQTT/test/unit-test/CMock/test/c/TestCMockC_Runner.c": "465d91fe9d981509a92267d0471fbb3e412a88b6f7d50437fe91e47ef6d69e8f", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v4/Resource/SAM7_FLASH.mac": "8ac360d36256589216b144c525d510af24457ef763becd14b137f63e953cc17d", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v4/Resource/SAM7_RAM.mac": "df15f8e476e1ca1b8d3141cfe0c801881939e70cefca237a98d804742cccdcfe", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v4/Resource/SAM7_SIM.mac": "6177e42e1a0a493976fb4d196b65cb1257e045db281ad48569b4b9ee6d9f37bc", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v4/Resource/at91SAM7X256_FLASH.xcl": "8594f9522b6ae41e96ab7b848dd7e4024876f7882d95f60a8bb6577ffd154605", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v4/Resource/at91SAM7X256_RAM.xcl": "713104cf6bf984663d5227b3ea6fe1d045413630b5a71404b2a2a7156346ae9b", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v4/Resource/ioat91sam7x256.ddf": "f23d06dcacffa6d544f4a560a4692bdaba7b918b488b810db928b418a4bbfd88", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v4/cmock_demo.dep": "5157f2a91a7169b63aa30424a220053a8983194e6145d14f3a39bfa2e63175ac", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v4/cmock_demo.ewd": "176d8abee2d57ee30575952da2aa2bfa4dc851b908e44df728b6a4a2c222fd8c", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v4/cmock_demo.ewp": "ffacbcc9ee4b092f01af22ee7bdcd34bff44043cd3c903ff9530912b0d4eaf0a", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v4/cmock_demo.eww": "7b5fe1867f77d1c6a09c591e3c4705a20ec0102a10e5049aa3fdb1989596e23b", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v4/incIAR/AT91SAM7X-EK.h": "41b4cd1cbc547b10818daf44adeb335a7dcd6846b229195c156be0be9b1cc056", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v4/incIAR/AT91SAM7X256.inc": "5f7c307376baf65d6ae5e16bb23b7d9374b713c7a8bd963240418dd026f5cd79", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v4/incIAR/AT91SAM7X256.rdf": "f7a13e637d12010564f884cb25ca152909f5cf056fbd87b8f837e6e999305411", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v4/incIAR/AT91SAM7X256.tcl": "959dfe614a39ca1c47aa5e42d10979bb939c4c0464cc01f3d395a17baa2759f8", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v4/incIAR/AT91SAM7X256_inc.h": "cf75fa42dbdac6d2e055ee6a1b4be6c3fda982bca36832167dbb3338c2529ea0", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v4/incIAR/ioat91sam7x256.h": "df4353041f1daef07fff13afedf5c82b6502ec3f27af4b7943a409dbf27bcdc4", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v4/incIAR/lib_AT91SAM7X256.h": "d500574f73b3e2c0e026d600f9949f680270aa9e78c82b0250276c75edbd79b1", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v4/settings/cmock_demo.cspy.bat": "0b95a0e1455c0947578eb48f8e77dc4303c672208d92a29883061115dfd4740a", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v4/settings/cmock_demo.dbgdt": "16333ca6fc95ee3c09e1d65fb546fd714e1039a2d83a7ab88d5113f7b92e89de", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v4/settings/cmock_demo.dni": "36b4ad5d2c76a305040b922a7b27d4d36f68e3ffaa13ca327db77b7f82280e6b", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v4/settings/cmock_demo.wsdt": "1502e8d1c367c132f62906a92a931ced79057ef818fdc502900ab6fa092681a7", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v4/srcIAR/Cstartup.s79": "73b3a3034252453843ce316daae1cc691d8289a6943105718c04e5864b384110", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v4/srcIAR/Cstartup_SAM7.c": "15857d19064c45c733ffc3c3de66b9f987bdd44b8e1d29b3ae17a355faaa3472", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v5/Resource/SAM7_FLASH.mac": "8ac360d36256589216b144c525d510af24457ef763becd14b137f63e953cc17d", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v5/Resource/SAM7_RAM.mac": "df15f8e476e1ca1b8d3141cfe0c801881939e70cefca237a98d804742cccdcfe", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v5/Resource/SAM7_SIM.mac": "6177e42e1a0a493976fb4d196b65cb1257e045db281ad48569b4b9ee6d9f37bc", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v5/Resource/at91SAM7X256_FLASH.icf": "d37f75919b1793bac86891e7fa9a9142ae83de351d5ef169af909ce770ae6d01", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v5/Resource/at91SAM7X256_RAM.icf": "170c34f5e702138b2b20cb696a482886936cdad8eaddb18c6c84abc5facf0a17", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v5/cmock_demo.dep": "0a869be5fc1a6ba0991c5012d8d4bf21ecdaf35ce23ff2207bbe35fc72b7acc2", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v5/cmock_demo.ewd": "5ebda13f0da843a1a4343bdb77c728d72ffcf8356a48eb6e3d5527428f6a1ba4", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v5/cmock_demo.ewp": "019d8fe92e6206e06b9fc46938e2ac19d9b8d9e27186f4ed05bc9f1f4ffca31b", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v5/cmock_demo.eww": "252dbeae342d9ad0c34d7f4a622dec74a5f400c08ad931771dc418dcc8aea7c3", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v5/incIAR/AT91SAM7X-EK.h": "41b4cd1cbc547b10818daf44adeb335a7dcd6846b229195c156be0be9b1cc056", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v5/incIAR/AT91SAM7X256_inc.h": "7fbf38b71f042bd3130dd7a0cc6e55130eae320e4fe705e078e5f9144c6e03b1", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v5/incIAR/lib_AT91SAM7X256.h": "405c0c979b5c39e520624e0b5da725690c69f220d5985c6129b1be0bde3ff4a1", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v5/incIAR/project.h": "431c8cdd8373916c97b6555fd0df183b4eed8799fe61397c5b9458d71e194edf", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v5/settings/BasicInterrupt_SAM7X.cspy.bat": "2e1acdf2e55863b5e33588ee350d4ea8325a79aef8f143a1d1e4dc9a20894ebe", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v5/settings/BasicInterrupt_SAM7X.dbgdt": "1967e4e174ca97638a540915477a6cbc829cf2d19bb4ad6046ebb43cef922619", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v5/settings/BasicInterrupt_SAM7X.dni": "e7db4742adcbe78483a5a2bd0510ef338a2ddddcca3b4587d493c54fec22a722", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v5/settings/BasicInterrupt_SAM7X.wsdt": "bfd819154f05571882a5c70fa8e47aaf4a6be521b9ce321b086ecc8b3fad2fe9", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v5/settings/BasicInterrupt_SAM7X_FLASH_Debug.jlink": "94a14185b32946b9295be7a4230afb5f71ddf87bff3e9f279ce4d82feabe98f9", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v5/settings/cmock_demo.cspy.bat": "98d3f600ca83fc5e0e141e27f17c92b52b28997445a64d7f63cb4312f490a580", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v5/settings/cmock_demo.dbgdt": "942572f2cb503a36b9e633642c54e72dc8bc929a41a9430fe62837ea3eb837c0", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v5/settings/cmock_demo.dni": "35f715df5935f7b03aae4126e33e296bd36df32f86aa00d425a09e65ce1fb66c", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v5/settings/cmock_demo.wsdt": "b5f6a167aa78028b09a439565dede111bf8119403c9f290367163356008807f5", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v5/settings/cmock_demo_Binary.jlink": "94a14185b32946b9295be7a4230afb5f71ddf87bff3e9f279ce4d82feabe98f9", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v5/settings/cmock_demo_FLASH_Debug.jlink": "94a14185b32946b9295be7a4230afb5f71ddf87bff3e9f279ce4d82feabe98f9", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v5/settings/cmock_demo_RAM_Debug.jlink": "94a14185b32946b9295be7a4230afb5f71ddf87bff3e9f279ce4d82feabe98f9", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v5/srcIAR/Cstartup.s": "f01a69400b4d52ad0202134d4d1eb2b2afb8b5b90f19cab527ef2c63354725a6", - "libraries/coreMQTT/test/unit-test/CMock/test/iar/iar_v5/srcIAR/Cstartup_SAM7.c": "ffffb70bb3424fb7537c766bfa1d0831154bbc455b10a7085ddfe6e5a51cd8e3", - "libraries/coreMQTT/test/unit-test/CMock/test/rakefile": "d324d932b8c69438ad43e7fddb4b28ec67e5c842b0dad2acb2554bcbcee7542c", - "libraries/coreMQTT/test/unit-test/CMock/test/rakefile_helper.rb": "7885bdc225c6b35de64317b9c2a6352e8637be6538280c9cb7efb60b76cd9a3a", - "libraries/coreMQTT/test/unit-test/CMock/test/system/systest_generator.rb": "58f80ae3b57314f1ac5ce062a5c8b073e51b69e244347fcd2e0909a0918d4ce5", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_compilation/callingconv.h": "f0d451838c94b20cb9df40827b1667e82719adf34bc7f848ce1ab330a95f5ece", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_compilation/config.yml": "55da291e818f575aaec65bfd678b9bc92badc2775bd012ea465d124bb03f6874", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_compilation/const.h": "452666930532c934d30c06081a1207422064421e2111ef3d774f60801c8d0298", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_compilation/inline.h": "faae36b96040414ffbbd8c9cd0ddcf1d918b5431ad81c12e391fe8b283ae915f", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_compilation/osek.h": "6283a1ba1ce53af3c73e246ec073497aec8d5da7e573f8474a45e1ccaf72730c", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_compilation/parsing.h": "f6f31c9b303aaf2948ed48cd6e8dcc0d7cef5bacc91b5746b11d432701911bd4", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/all_plugins_but_other_limits.yml": "23512e99944a08a4517037fddc6f13451118a23a19327270e7f0cde0a882643e", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/all_plugins_coexist.yml": "2fa3f85fa5bcfd432d7e82be741d3e4bce969182d3b3c4335ab2bac494a8b3e2", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/array_and_pointer_handling.yml": "afd7b725c51a0268b2fe582416b59e303c611a86af8359627a10483ccf4ac3dc", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/basic_expect_and_return.yml": "188b82892feac0f148d9b8d1edf9929e4145d8adb7ffc0b2752be3dfe5c620d8", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/const_primitives_handling.yml": "2610282b06d4b05f3f7e9b22254278648a29dcf1808f8206ac92d183ed7c7ebd", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/doesnt_leave_details_behind.yml": "5d39bdb3fb162c3664ed180754c6b8042c12ad7e29ccc65b42c312ccfeed322a", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/enforce_strict_ordering.yml": "85f9cc7ce2eb22b0da825ca8d6e38a05bffb69dab0e66c0e516753b74fcfe10b", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/expect_and_return_custom_types.yml": "361e10a02795595bf45c64b2026d9342fff1e4d0308fb5202413bffb84bd3b10", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/expect_and_return_treat_as.yml": "6601ab58a7b0719e26124b40d3aed2272a032f4ff3ae45da241b0b39bdf03ce9", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/expect_and_throw.yml": "18eb54309f69744598138a5b3f8ef4b898bbc3fb46b1a42306016d6ed566c1d3", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/expect_any_args.yml": "1348aa720acf85e117c6c23353f205b3438eac30baee86efeacbdc04f2645d27", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/fancy_pointer_handling.yml": "a3033a4e31bcfbf66126059476d9fdc7bdaa197a8b6568a382c93e373110abb4", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/function_pointer_handling.yml": "85c81773cf1dcf80dc84ccb433d8442aabde1b8635292819315287e828b93f63", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/ignore_and_return.yml": "4300c43c2e59a39111809e3e4571484e45146344a20d706a2c0c8618159fa2ad", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/ignore_and_return_stateless.yml": "4f9358583b2f8159251937699441854a41ddbe0bf9b1d8fbf1bebfeb8f32c0c1", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/ignore_strict_mock_calling.yml": "08c69a141af52960e0e9043d717ff5df442f7889edcd145898c0cade3fcc3e72", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/newer_standards_stuff1.yml": "f2073b808f4cc2d918612ff1c910fbc4a8ead998b12fcbc7608d430fe71d8eb9", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/nonstandard_parsed_stuff_1.yml": "23db82fdbc1643ed58a58c20a4154e75b8559509a3f827fb43e9c5965103e4f6", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/nonstandard_parsed_stuff_2.yml": "f51bae36303d532e357105195369615ab17560234efb1f0141973c2794ac0693", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/out_of_memory.yml": "4b4509e9c368fdec539be90daa164185175849afcf39c2d0a9c4d9ff9e423191", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/parsing_challenges.yml": "6f9a0d35489a6e6435211923ea43349e17cb68fc9652cb98511be8f74a78a079", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/return_thru_ptr_and_expect_any_args.yml": "64915233c5cb94bdff20cf89f650de58f278a214417bacf52129b67d67208cc0", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/return_thru_ptr_ignore_arg.yml": "cde16df22f47d782043ce85063cd7d53dcb3473eebd25631bbd18d7d87c38db0", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/skeleton.yml": "569c26fecbd11f185b9e4a5e2a0377306d18b2bf95402d9e04c3865468e1e066", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/skeleton_update.yml": "db55c821e8ea59817cd6d65f69a119bc1b1c75dff14fac1456167a5488b8e96e", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/struct_union_enum_expect_and_return.yml": "c926cca48cce1932fd57dc871187073cf3e35d12569369695a18a4a6fb7be3f8", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/struct_union_enum_expect_and_return_with_plugins.yml": "29f087a7f1217b3724517523dbf122bfe07277505549c465b1821df926b75c6e", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/stubs_with_callbacks.yml": "5e2cf62796105fa958e9528d3a30cff3a83c4f9d23385ab75a5939841647c486", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/unity_64bit_support.yml": "91a78d7f1216c1c18388116c169d2da0994351e61155fa6bb622bf16b635838e", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/unity_ignores.yml": "f6e9193481c9f0a5c5ab50833fea66da7bc34977b35a176fd613130ec883bf92", - "libraries/coreMQTT/test/unit-test/CMock/test/system/test_interactions/unity_void_pointer_compare.yml": "b92f86081c7771eca83efad7e38e071ee5bf8ce2e1a410df7d7af9c392486e6e", - "libraries/coreMQTT/test/unit-test/CMock/test/targets/clang_strict.yml": "4d477d7d7c1ffe0ce9175b89d4812119c7a0a79e924290e59c3dbd46b0975de3", - "libraries/coreMQTT/test/unit-test/CMock/test/targets/gcc.yml": "f012ab43326a37713fb72f33c0e03771fbbf4347e549de6cfdb476cda0ad9118", - "libraries/coreMQTT/test/unit-test/CMock/test/targets/gcc_64.yml": "0c0df186d99f01666f0d8145289179d86298c3671cdd7083c5e3c4a41625d5d2", - "libraries/coreMQTT/test/unit-test/CMock/test/targets/gcc_tiny.yml": "c9b57fd070a3e98fc3c237c9b3b99b31d0cf01cc0565b81812f57f68ca340714", - "libraries/coreMQTT/test/unit-test/CMock/test/targets/iar_arm_v4.yml": "fe0f205df28d23f4a940c1efce9e74ddd227427eaa55a70a283d8ff0722e45f4", - "libraries/coreMQTT/test/unit-test/CMock/test/targets/iar_arm_v5.yml": "7649d656896a709b2124b232bbe2d4911ae141617ccdd947e1f1541f23615bed", - "libraries/coreMQTT/test/unit-test/CMock/test/test_helper.rb": "7561fd77c8b7c6ec581d2e946db129893dd842d813801bd5ff6dfb42eb98cb19", - "libraries/coreMQTT/test/unit-test/CMock/test/unit/cmock_config_test.rb": "a583acc99d07d80cf5cd6ece9765e1f43bd834576d30df342b1769b9889050b5", - "libraries/coreMQTT/test/unit-test/CMock/test/unit/cmock_config_test.yml": "2b1460d832657fe5f69b70b92a7bcd40edd42346aea4bab20043ffecd43719e4", - "libraries/coreMQTT/test/unit-test/CMock/test/unit/cmock_file_writer_test.rb": "88cf580634a0907f12b8068f1deefe7e90a14b0111d55da6d413f3827347b9d6", - "libraries/coreMQTT/test/unit-test/CMock/test/unit/cmock_generator_main_test.rb": "2d51d72ba7d6ccd664556e2c2fe0cfe1aff821e351de70a0a8d0b241bbc5ef73", - "libraries/coreMQTT/test/unit-test/CMock/test/unit/cmock_generator_plugin_array_test.rb": "560f97841377b5ae6704cd4363e0d21c8883abcb7f5d2907608e6c0aa68c3518", - "libraries/coreMQTT/test/unit-test/CMock/test/unit/cmock_generator_plugin_callback_test.rb": "5134242ce1626493fba063b040edcdfb955267374f58dcc0a500c198fb26f51e", - "libraries/coreMQTT/test/unit-test/CMock/test/unit/cmock_generator_plugin_cexception_test.rb": "4a4bdfa48a17829dd1c3d58cfd4da6769bfde6bd592b55afc2685d24a667fec1", - "libraries/coreMQTT/test/unit-test/CMock/test/unit/cmock_generator_plugin_expect_a_test.rb": "4ec2bfdb7c6f35c1b9d1e15748891dd2e823f304892207030265f3769c990d37", - "libraries/coreMQTT/test/unit-test/CMock/test/unit/cmock_generator_plugin_expect_any_args_test.rb": "1b840d79c1630365f47e0a304daf5e52c76d2bd2815d37ca7590b30fd51fbec1", - "libraries/coreMQTT/test/unit-test/CMock/test/unit/cmock_generator_plugin_expect_b_test.rb": "a37304cc8f794c0d70298cd4873701bd5307b0c3827af0e453dff00911e9d47b", - "libraries/coreMQTT/test/unit-test/CMock/test/unit/cmock_generator_plugin_ignore_arg_test.rb": "cc79bf0080a069d76e91c230af75751e32fc86fbf4992b202d4905cf14368aad", - "libraries/coreMQTT/test/unit-test/CMock/test/unit/cmock_generator_plugin_ignore_stateless_test.rb": "dad02980c5efdd1182b4fa45ced2e36a1f0678df19ceaee7719c3c8303f47a9a", - "libraries/coreMQTT/test/unit-test/CMock/test/unit/cmock_generator_plugin_ignore_test.rb": "dc09b360cb2268924a6bc839a3130b9215c813780a3e71e589512015608e300b", - "libraries/coreMQTT/test/unit-test/CMock/test/unit/cmock_generator_plugin_return_thru_ptr_test.rb": "0b7351668087ed19560e963fdca2cdab19c1973e1f9274c0302f18110a7610ee", - "libraries/coreMQTT/test/unit-test/CMock/test/unit/cmock_generator_utils_test.rb": "663b3caa05cf3b0f889b7e7251643f38329bbf6a83c64910b8e3f917a1dca361", - "libraries/coreMQTT/test/unit-test/CMock/test/unit/cmock_header_parser_test.rb": "1c2c7b81d2f1c44b9a10eeef06e70c77fa14947e7dc889a37632dc9b680755dc", - "libraries/coreMQTT/test/unit-test/CMock/test/unit/cmock_plugin_manager_test.rb": "510fe651508db42d428539b63fbf2aa5c2601ac4b5f1fe0d5d756ba4f03f08e5", - "libraries/coreMQTT/test/unit-test/CMock/test/unit/cmock_unityhelper_parser_test.rb": "e77b10af099223b17e9c524d0e6520a8d90ef878f9326d8729a3d0cab437d172", - "libraries/coreMQTT/test/unit-test/CMock/vendor/behaviors/Manifest.txt": "f6def0d4d599a6d17c7b0a6e5cc65824ba9312a85c4d9640f9f40f3a65fe6e39", - "libraries/coreMQTT/test/unit-test/CMock/vendor/behaviors/Rakefile": "be9b1156744f3cf65e64c075ae5385313ce59e5ac4178ed8c63371bc817d214f", - "libraries/coreMQTT/test/unit-test/CMock/vendor/behaviors/lib/behaviors.rb": "c818cb720cce5d3da2b1a1e09601f2329f8889cccfdaf4e7ad7482d2524609d0", - "libraries/coreMQTT/test/unit-test/CMock/vendor/behaviors/lib/behaviors/reporttask.rb": "6abac47d73976e719ef3b2e47ffde7e048a08044e807b8d5b3eca7ab18c3acd8", - "libraries/coreMQTT/test/unit-test/CMock/vendor/behaviors/test/behaviors_tasks_test.rb": "04ef3a3e45cd62bc102267a2919240a9a021438e0dafccf2d817234104426ba9", - "libraries/coreMQTT/test/unit-test/CMock/vendor/behaviors/test/behaviors_test.rb": "4240fa9b7f31dcff3c5509827ebed298d2c388f55b8701221874300e815d76e0", - "libraries/coreMQTT/test/unit-test/CMock/vendor/behaviors/test/tasks_test/Rakefile": "0c9e136971e8aeb54404b4827de1b85cabb5512a8aaf8f36929e052339144638", - "libraries/coreMQTT/test/unit-test/CMock/vendor/behaviors/test/tasks_test/lib/user.rb": "b5527ab1ec2cde94b51b84e785840a076ceb4df87f8c71a52eb9119a1785f1d5", - "libraries/coreMQTT/test/unit-test/CMock/vendor/behaviors/test/tasks_test/test/user_test.rb": "e12e02edcc9868ad43634427fef9873e7e6a03a6144d59ed302d1f40beab18d6", - "libraries/coreMQTT/test/unit-test/cmock_build.cmake": "d73f758fdc599d6abcd447dbbd05331a14615eeb631b22cf5101b8a3d4eeebc2", - "libraries/coreMQTT/test/unit-test/core_mqtt_config.h": "5923a227f7e7caaaa297471b1385de06a5c3d9483778ba845de3d43aa12fd631", - "libraries/coreMQTT/test/unit-test/core_mqtt_serializer_utest.c": "9b8911345a989f41242fa96c646f62857f8a681abe6227209cc9aff1fc24aa7c", - "libraries/coreMQTT/test/unit-test/core_mqtt_state_utest.c": "d844c9e20df0537242486dd6d8ccd3d2f1e496487924d28a3d42745bc56ba66c", - "libraries/coreMQTT/test/unit-test/core_mqtt_utest.c": "3584d46147451d2d7ef82f68d0d697d18069862b3437c0492f8d11fca879a2c2", - "libraries/coreMQTT/tools/cmock/coverage.cmake": "8ac1ac5e6d5628fc8625d57f74249f15f53eba61f8338813d36d3dfa9dc1cf9b", - "libraries/coreMQTT/tools/cmock/create_test.cmake": "41dc66ba43772ccbcc59871e16ebc60b8671875e0e59d9068313be0aac1f25b2", - "libraries/coreMQTT/tools/cmock/project.yml": "805074ab6dcf01b29aac19ab1964b70227d0f7013b5b755dbf5c17ae66e6a0d6", - "libraries/coreMQTT/tools/uncrustify.cfg": "55c02144fdaa3d62e03ed97e3e89a54b67d9433a5320ec02ec82e75344b21656", - "libraries/core_json.cmake": "7251b93e8e604fefdab3569fdde89cda4d191386d03ab9baab158096177ea386", - "libraries/core_mqtt_demo_dependencies.cmake": "da65d2b2dfda0903e36e08a44052cebbfc2e55dbf495ab2261d3dc18d9a2c6a6", - "libraries/device_shadow_demo_dependencies.cmake": "3b98fe1e68a05e5e6380d00f7beb197fe0b9d73e9f5e229d63a06f4252a3da4d", - "libraries/device_shadow_for_aws/CHANGELOG.md": "9fb0045893f2f176a7c38eaa5428ee8f0d94f9230d5fa4764f3ebb4975622734", - "libraries/device_shadow_for_aws/LICENSE": "52f54173fb286e7baa536bab3fb2aef58891af07e96646fb4d80663fabdfdcfb", - "libraries/device_shadow_for_aws/MISRA.md": "83c3eaba6c074f8ecb666c2d9d8c3de156fe47eedaae379494f70fea4653fce0", - "libraries/device_shadow_for_aws/README.md": "1fc9975017dff963dd6fead61ce4f4f37e1e96bc0c1c3adc7675127de46546f5", - "libraries/device_shadow_for_aws/docs/doxygen/config.doxyfile": "fb5f607c28e0bbcadeb70c1fe4e3393bb2feac9c581da205c1a90534f78c2d7b", - "libraries/device_shadow_for_aws/docs/doxygen/layout.xml": "555a70789f54c525456ad9d30730614fe7119afb8b81dd8f8067af28dd14f66c", - "libraries/device_shadow_for_aws/docs/doxygen/pages.dox": "79630b146f50c9da781ddb199ecb63fb2a7089e0b74de9dcd2bcdffe4390f64c", - "libraries/device_shadow_for_aws/docs/doxygen/porting.dox": "57770d46dfc3d9a8ea9dac0495ee057956221981221fe70ddf8fbf6b46a8cfe3", - "libraries/device_shadow_for_aws/docs/doxygen/style.css": "e3d3b4438744aa4d547bcacc6e64f3fcfc5057b476c5237e5107e6bbe0aac72a", - "libraries/device_shadow_for_aws/docs/plantuml/images/shadow_design_operation.png": "be26eeab05864c35a8777eab1ca26255c7c585d88ed88e548f67c86891f210b9", - "libraries/device_shadow_for_aws/docs/plantuml/shadow_design_typicaloperation.pu": "81c9ef7f7e2cd9d56aed1f29e96d6a3677a530eb6c9ada4bb2bf1d3572ae7479", - "libraries/device_shadow_for_aws/lexicon.txt": "633871e3214e52dc9c7f651f589d83602a9998c985d85e1c43163915340efa92", - "libraries/device_shadow_for_aws/manifest.yml": "6e07227fc381b1e2f747fd61a669916c29ad9ada8562fbdd1c6772342fe0eb3f", - "libraries/device_shadow_for_aws/security.md": "92134ccc4ed81e5546dd4581be6ddbd3a3a98aafc4c06089ab1d9c1a58df80d5", - "libraries/device_shadow_for_aws/shadowFilePaths.cmake": "0288a46686c14976f166ba2466ea9dafdb5388fc1563430d88ff989e479c1ce5", - "libraries/device_shadow_for_aws/source/include/shadow.h": "0193cd4fb0127098714f6083db3e68bccdf971a0122240476268783e3c34086b", - "libraries/device_shadow_for_aws/source/include/shadow_config_defaults.h": "96fda86470113b9dd22f78526690795d7ea1ecd7b523515dd194f050c4596726", - "libraries/device_shadow_for_aws/source/shadow.c": "15c5ac7ed8b24b42f8e438b570e2342be7b83b9a561adcaf1b358dd7fe63658e", - "libraries/device_shadow_for_aws/test/CMakeLists.txt": "4f5de7fdcf2cbdf2fd557b569ddc34f405dddc51df66ce95d164fe01ce5a63b0", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/CODE_OF_CONDUCT.md": "34b6c98d5c23127ae6769e95e483e5bf6d3704ae1f0d3ae4e69d15f4ede118b6", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/CONTRIBUTING.md": "b050a75d5f6d2236ed40ad91dc53c4a4b30da184f9298f6f18507beae5fd7cb7", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/LICENSE": "09e8a9bcec8067104652c168685ab0931e7868f9c8284b66f5ae6edae5f1130b", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/NOTICE": "d4290ed64c2edd0fce1d84e3f9dfb2881240fe534def76b8cd29ed6af683e287", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/README.md": "d1de02d49f1baf2d8f376777731ca952eda223d23faf6f87ac17ec5f6eec1622", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/scripts/setup-proof.py": "250c684e31390f2831c4833b5bb642fcb9246e14a73e4e71aa64717c866d30ce", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/scripts/setup.py": "15eaf8dc1a3921b6ec647396e504b6f1346ca37aa7aea46a73110e5681211b2a", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/scripts/util.py": "7cc883f38bbe3a34f1be2f78655131f82d89356112dac292edbf9c5ef4de11b8", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-proof/FUNCTION_harness.c": "f2802074ae7080f73b53081f262c7b9f7245b8ef1e4fd4e3dc88262a2453af4d", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-proof/Makefile": "b7311b8cdd2f100da52ed793ddaa77aab0e8943e06cdcd2b29c05953c869e5a3", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-proof/README.md": "9abd31be7593b6de5507a36587f18298e870da24e2c2f2ab1235e9e04464d6c7", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-proof/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-proof/cbmc-viewer.json": "31c095521f43d2b919f96351d52b5900653ef3813af1c055ef88cb01114c57b6", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/include/README.md": "1ebb917adfbfeba5019583d75438c3f745da8a93752e88b1b31bdad351a1ac9d", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/README.md": "dda48722cef39f7482baa20929815222d6cb643541505af7ac0202ab4ea30675", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/assert/Makefile": "8eda2c18734c4e1a2b07bb5cdbd5b7d5974651184a8dd594409e122b52a06416", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/assert/assert_harness.c": "034f86fc93c6cf928500721ba5bcf9b96f327596a2b931b52474ddd66c765941", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/bounds_check/Makefile": "142e70065dfe3d20bfd83d4566a26e60a254d410111d9af072e31e96b6209cd6", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/bounds_check/bounds_check_harness.c": "b1b242ef2cbc76b275951e75d87fe07d181a3538b1fc8c31839883f8eef80a11", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/conversion_check/Makefile": "97ff3a0a72e2ad71f520fb3875cfbbd3a1124df6236a14930948343fd3f219a0", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/conversion_check/conversion_check_harness.c": "89c63b828b051da2e0b0767cd2704419c389d5390178cbdcccfe591940d42da1", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/div_by_zero_check/Makefile": "3367383673bcd9262b9b61fff6c4961abe70aa2ffb3b8e3f59d014d94927b84c", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/div_by_zero_check/div_by_zero_check_harness.c": "d4255afad71ad03efc1729c46bab842f1d3727967eb75c0e41d26add25ae684a", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/float_overflow_check/Makefile": "49ffbdb80bdb47fef8c3f2af3e2445def5a1fe764285f7f28163ff55206e0cf4", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/float_overflow_check/float_overflow_check_harness.c": "0b762450e1abdfdb6eefde48545d0ea51a5699727ca46decb8aa6893dc0bf684", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/float_underflow_check/Makefile": "3a561f39099cc9a6783bfc779c56a68a08b61c336f44cdc3b957868651899354", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/float_underflow_check/float_underflow_check_harness.c": "8b84e5fefef6615ed4518834b9861bf07ebb35db8583a30c26d09f8d04bf4381", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/nan_check/Makefile": "440a4b02b6bcaa94c95c33b900ba5febca83aed17990c30b5dfddce246c9f29e", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/nan_check/nan_check_harness.c": "8376f52bcb36282975be5749f61179bffb5b5ced4161e39c68ef86c3792f09bc", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/pointer_check/Makefile": "ecd0cacef27ec44df5af35549e801aa4c17f4078b3d4b5beb3e73dfc787f54c2", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/pointer_check/pointer_check_harness.c": "662e399061f5c413c8ace57886174b11e755cb66999a90950409bf04d8cfab07", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/pointer_overflow_check/Makefile": "f1875b30dfc83287132387682a13e435a82b11186707526d39a4e10794cebb04", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/pointer_overflow_check/pointer_overflow_check_harness.c": "118c0a62a647d824f98ec779956f89b540b74206c4f81f83298d6440fa1bee16", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/pointer_primitive_check/Makefile": "131b7ee0daed69e68bdb7a949ddb5667f216a3912522ca69019871a81d25f10d", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/pointer_primitive_check/pointer_primitive_check_harness.c": "ca0e47a48fe2a0023f6c5e7e410efd5e90705d39864b3be48322f5ac82f3398d", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/pointer_underflow_check/Makefile": "5208e5e4348a5c4bb983af1c1907d7531b5988b89589ca569fbe74a8f6daff69", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/pointer_underflow_check/pointer_underflow_check_harness.c": "effb8b9837ed060a1b9a1c905afc5003bebe4832a27e7bfec940405b2e6eba52", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/signed_overflow_check/Makefile": "e08765ec88321f8f909a417af4d4e528222c32ae1224bc120a518d851accb3f3", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/signed_overflow_check/signed_overflow_check_harness.c": "1083db8aa4fc4bdcc3b89d3723d0fe58e529c330a21200f3ddc75adaf7ff9956", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/signed_underflow_check/Makefile": "4d970e22f170d34ca5c2b92db785972eb9e0529c1f68217da5eae1b86cbd2944", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/signed_underflow_check/signed_underflow_check_harness.c": "040b507614725741b8bb8d553b12d273aa7e165253fbe17e9e9cd58102d01409", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/undefined_shift_check/Makefile": "da67123ebdd610d48888064339a1180c0ebdc662b7d19c68f97a120c9499f84c", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/undefined_shift_check/undefined_shift_check_harness.c": "0f643a2aad93e70fc540f6aecf3046063a09817e5c4bec735c88ac7820f62ff2", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/unsigned_overflow_check/Makefile": "e90461e92d5257521b9c4766beaa3ff986f35dc2c7dee695f983e88baff8e2aa", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/unsigned_overflow_check/unsigned_overflow_check_harness.c": "b85cfcacd82a28417112248f72e8f734cd7799b1df4360734caf186c775669a5", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/unsigned_underflow_check/Makefile": "03beb64ea16f9748f3d739572b850371444fcafe762a51b4240bb9bbef85fdc1", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/negative_tests/unsigned_underflow_check/unsigned_underflow_check_harness.c": "70f9f7cbe112c6610d9785a425bb43f098e80cefce795a1f79bdda03220d6c06", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/proofs/Makefile-project-defines": "9f1fb40fa45392f32901168bf4e012b78adb71e2daf6864d4a1a7d76b84f6f51", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/proofs/Makefile-project-targets": "d8c3930590646a4a3b5f5ed446758bf2d8b27ffb742dee196efb816ae2f502f6", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/proofs/Makefile-project-testing": "acb51f25870892f177057e7f56e73979e0eeb4967e3280aa160fd33a1a7bb03f", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/proofs/Makefile.common": "e23552ebdfa3fdba1bb158d8c868f139f2411a261c8d88f36bf9e2d6c076a21f", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/proofs/README.md": "142dc28dad300138bed3a174bdb7ce714f1c6a882299440e63552e2bebd2f7d0", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/proofs/prepare.py": "0d50cf7aece2c4f205a058ddb3bf6c1b0c1cfcfa9ea6dca9a145f1bdd7a442f9", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/proofs/run-cbmc-proofs.py": "aedcb62405ffb22af83c4b4cb38a665b57bfa3ecd102d868056b315306a26734", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/sources/README.md": "cfaa166351aeff46c321fd5627d417278accf8e88155481f678702644ce88138", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/template-for-repository/stubs/README.md": "a87bfd893269da4a5c95f88369ce394b1e031dc6dbfd09195cd11485b77eac7f", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/training-material/CODING-FOR-VERIFICATION.md": "84c354dc41a70be81f085e6cb75f8328980b83a68333f179bba3fb69fee29bc7", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/training-material/DEBUG-CBMC.md": "d7e3ec89a44e5efcd8c2accac852bc9f261df54445eb4b3d1b4ffe5126abe6d1", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/training-material/FAQ.md": "d298098f6ead244a7d815aae24fe005e0ea09848abe42dd255694d42632769f5", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/training-material/PLANNING.md": "06ffd2048e70658246cba4359d5bcd121868238ca918041a874fddf311c22a8b", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/training-material/PROOF-WRITING.md": "2c037872b6c0994de2e0028cb9e7a8923342cacb2b6e3adc1c6f4ef3971a950d", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/training-material/README.md": "e453beb7cb3e4064bc6c85102c00176bf77b14e705046b8d8138c1614e237b12", - "libraries/device_shadow_for_aws/test/cbmc/aws-templates-for-cbmc-proofs/training-material/checklist.md": "000710d7ef9e7e716ff58869dfd7efebfa9d7b017672812d089a55698494e52f", - "libraries/device_shadow_for_aws/test/cbmc/include/README.md": "1ebb917adfbfeba5019583d75438c3f745da8a93752e88b1b31bdad351a1ac9d", - "libraries/device_shadow_for_aws/test/cbmc/include/shadow_cbmc_state.h": "a4434df15b61c8ef2ef5a361fda246b48911da926a9e684d52ee742be8fef11a", - "libraries/device_shadow_for_aws/test/cbmc/litani/LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30", - "libraries/device_shadow_for_aws/test/cbmc/litani/NOTICE": "becc1029d600695c22c6c3dbe3a8b7824b539d9b7ed533b4ecebbb259dce2d8b", - "libraries/device_shadow_for_aws/test/cbmc/litani/README.md": "f15f69182a049661c0795534e03b6d4e5aa0a8093d5da4421fcb655eb27f7681", - "libraries/device_shadow_for_aws/test/cbmc/litani/THIRD-PARTY": "83a5fa777a8dfb9127d69e1b0b9d776930530258300c41ac8b2180c5699bd273", - "libraries/device_shadow_for_aws/test/cbmc/litani/doc/Makefile": "af66c3b302388d09608d2c335cbea6d74398f1f5a8c4d56c86cd705947bc0689", - "libraries/device_shadow_for_aws/test/cbmc/litani/doc/foot.html": "1694311aa8f471c9904dd4588965bd326173f216e30353e5d65f64371007da1e", - "libraries/device_shadow_for_aws/test/cbmc/litani/doc/head.html": "76ce1041a11873360e6cda911a970b337d2191c125c5d6910798bc836d4d81b6", - "libraries/device_shadow_for_aws/test/cbmc/litani/doc/index.md": "83267d5fead2464a853bc29710fd68793d94a32119c280d89802ede900a1dc08", - "libraries/device_shadow_for_aws/test/cbmc/litani/doc/litani-flow.dot": "bfe01d6fb726571e82beeb4df7751cd72e655b8527edb8ffc4244247537d036b", - "libraries/device_shadow_for_aws/test/cbmc/litani/lib/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "libraries/device_shadow_for_aws/test/cbmc/litani/lib/litani.py": "31844ab14bae0b891200331e6ffeced6a5dd26c3c95c86e160b3344dfeb38d8c", - "libraries/device_shadow_for_aws/test/cbmc/litani/lib/litani_report.py": "9cb5d588df49b4a93c101b674c4c96a3e355654130a88c5fe4dd03703145858b", - "libraries/device_shadow_for_aws/test/cbmc/litani/lib/ninja_syntax.py": "74cf8d2ba381b447796b4db7933711a1844284b192cca23638bfc7b21a54d4f3", - "libraries/device_shadow_for_aws/test/cbmc/litani/litani": "975fe534cc3281675d158416f4b5ed79b0b9fa5345d3f0944844ef2227498c84", - "libraries/device_shadow_for_aws/test/cbmc/litani/litani-progress": "a3c0f0873b06e801587dbbd26aeb9382fdb60b97efffc56b9fbbae9d3627c9fc", - "libraries/device_shadow_for_aws/test/cbmc/litani/litani-report": "ea9aee104dfc7a73cb89a6b01c8ebb581e7fc6e9b4f30796bb96ee07ae5795be", - "libraries/device_shadow_for_aws/test/cbmc/litani/templates/dashboard.jinja.html": "224c4855cf8079003e72c57ce2aa7429bca50924f6d9b5ccf27a711a19844798", - "libraries/device_shadow_for_aws/test/cbmc/litani/templates/file-list.jinja.html": "2151bd3c71559e887d64ba471522f5fc4eeea7f261d118672d390cef3c5fd856", - "libraries/device_shadow_for_aws/test/cbmc/litani/templates/pipeline.jinja.html": "d22892a6cabbe10c9aa51603cb763492012d2212e142b3404fdcf34bcd4e848b", - "libraries/device_shadow_for_aws/test/cbmc/litani/templates/runtime-box.jinja.gnu": "ae73382f2cba9ea418fec6f163192fbadab884296d55ca58ff4af86cfa257baf", - "libraries/device_shadow_for_aws/test/cbmc/litani/test/README.md": "c1e5c0ec6b79a30040e88986dc84d15917712af49a9989aacc1542c725a7f652", - "libraries/device_shadow_for_aws/test/cbmc/litani/test/run-tests": "0b3af49895a6b7d57e9889139f3ed20c028a7611c140e977583a27b7f4028d50", - "libraries/device_shadow_for_aws/test/cbmc/litani/test/tests/1/Makefile": "a2ec421ed917ecd59f4c885faa487eeed30b59d3f8f09f863a00d240b2bcb983", - "libraries/device_shadow_for_aws/test/cbmc/litani/test/tests/1/litani-test.sh": "b1cb5ad8b6c5b640659fddb32988d986b27bded9cf3f1a08fd1ecec87f730e93", - "libraries/device_shadow_for_aws/test/cbmc/litani/test/tests/2/Makefile": "3531c2a1733b48d064016a34b7582874a87757ae279d1c5099cfd3ba6c5f2f3d", - "libraries/device_shadow_for_aws/test/cbmc/litani/test/tests/2/litani-test.sh": "b1cb5ad8b6c5b640659fddb32988d986b27bded9cf3f1a08fd1ecec87f730e93", - "libraries/device_shadow_for_aws/test/cbmc/litani/test/tests/3/Makefile": "3793c6940a452f1db086977f59e648b89c90aee688ff323f5ae597844078cf66", - "libraries/device_shadow_for_aws/test/cbmc/litani/test/tests/3/litani-test.sh": "c95d186c612c5a62e237ee1613e4a51f830c81f1cbc6db442a2ce5f4f67b1fc7", - "libraries/device_shadow_for_aws/test/cbmc/litani/test/tests/4/Makefile": "3793c6940a452f1db086977f59e648b89c90aee688ff323f5ae597844078cf66", - "libraries/device_shadow_for_aws/test/cbmc/litani/test/tests/4/litani-test.sh": "b1cb5ad8b6c5b640659fddb32988d986b27bded9cf3f1a08fd1ecec87f730e93", - "libraries/device_shadow_for_aws/test/cbmc/proofs/Makefile-project-defines": "88668a1c0ec1b0b7a944fdcc4997b050e7633f3f33da0fec37f280c11799ac03", - "libraries/device_shadow_for_aws/test/cbmc/proofs/Makefile-project-targets": "d8c3930590646a4a3b5f5ed446758bf2d8b27ffb742dee196efb816ae2f502f6", - "libraries/device_shadow_for_aws/test/cbmc/proofs/Makefile-project-testing": "acb51f25870892f177057e7f56e73979e0eeb4967e3280aa160fd33a1a7bb03f", - "libraries/device_shadow_for_aws/test/cbmc/proofs/Makefile-template-defines": "50b3687413c3a9a1e42a62954b1007e270fadbfda068fcb8e796b1862563507f", - "libraries/device_shadow_for_aws/test/cbmc/proofs/Makefile.common": "e23552ebdfa3fdba1bb158d8c868f139f2411a261c8d88f36bf9e2d6c076a21f", - "libraries/device_shadow_for_aws/test/cbmc/proofs/README.md": "142dc28dad300138bed3a174bdb7ce714f1c6a882299440e63552e2bebd2f7d0", - "libraries/device_shadow_for_aws/test/cbmc/proofs/Shadow_GetTopicString/Makefile": "e78d4425a8651d72d500df887628335b1d5e38b419fdf7f81548ef2f260499cf", - "libraries/device_shadow_for_aws/test/cbmc/proofs/Shadow_GetTopicString/README.md": "accc952272ea78212cf6d4842e274e5212c75b31c4dc3d471fd4c62a0a26f90c", - "libraries/device_shadow_for_aws/test/cbmc/proofs/Shadow_GetTopicString/Shadow_GetTopicString_harness.c": "4ed02d7a350669d75af2f0bb9e892b5b9573e96be7a78c1303f7b10d71684a5b", - "libraries/device_shadow_for_aws/test/cbmc/proofs/Shadow_GetTopicString/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/device_shadow_for_aws/test/cbmc/proofs/Shadow_GetTopicString/cbmc-viewer.json": "76ee8989609434f5d85140cfebad4a10f6094b08c3c9f4fdc6f77b8349998bac", - "libraries/device_shadow_for_aws/test/cbmc/proofs/Shadow_MatchTopic/Makefile": "c3c9494dcce237a07cb4e87c7ec36b0079bdd0999df594d77b063eeac7907e3c", - "libraries/device_shadow_for_aws/test/cbmc/proofs/Shadow_MatchTopic/README.md": "00d47208dd0ae8c71dff2e619d1255b6c73241fb8d9fc3879f9ae879e000b3dc", - "libraries/device_shadow_for_aws/test/cbmc/proofs/Shadow_MatchTopic/Shadow_MatchTopic_harness.c": "c6ad96a0574c3403d0fecd41e15e107bf1dcf97cbfb4eb2c7af6653dea18e2f0", - "libraries/device_shadow_for_aws/test/cbmc/proofs/Shadow_MatchTopic/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", - "libraries/device_shadow_for_aws/test/cbmc/proofs/Shadow_MatchTopic/cbmc-viewer.json": "b596eaf251320594edc10aab35f561c68f847211325565f18b838719bf8644c4", - "libraries/device_shadow_for_aws/test/cbmc/proofs/run-cbmc-proofs.py": "b37b71fb8ccf4b101ea1ffc65107c857f45fa6e228f1eb9e2041c017efd3319c", - "libraries/device_shadow_for_aws/test/cbmc/sources/README.md": "cfaa166351aeff46c321fd5627d417278accf8e88155481f678702644ce88138", - "libraries/device_shadow_for_aws/test/cbmc/sources/shadow_cbmc_state.c": "06f7f712ef1bb96d24fc3140df7323a07d7385457d5e4c05d51bc76c67b539be", - "libraries/device_shadow_for_aws/test/cbmc/stubs/README.md": "a87bfd893269da4a5c95f88369ce394b1e031dc6dbfd09195cd11485b77eac7f", - "libraries/device_shadow_for_aws/test/unit-test/CMakeLists.txt": "3450a4ea7b5cf02588d8f1c577115788d19e4038f1ec6838c56b5e6deb835bb9", - "libraries/device_shadow_for_aws/test/unit-test/CMock/Gemfile": "98249ab9b0a5d95ca03b9b68992d29d944e132c0eb65e71bd6ffed9f0e40d98b", - "libraries/device_shadow_for_aws/test/unit-test/CMock/LICENSE.txt": "a228c2871b9a779a6542a49470c5b567f2806dddcbcf90af861bb4d39291626c", - "libraries/device_shadow_for_aws/test/unit-test/CMock/README.md": "7e5eda88c3a355bad26c706daa6350186c89fe1db148697192be99fcb38aa142", - "libraries/device_shadow_for_aws/test/unit-test/CMock/config/production_environment.rb": "53043c94478f0bc85135849a7ab04da60cb4fe37661550df8b9ad3b0d3936bf8", - "libraries/device_shadow_for_aws/test/unit-test/CMock/config/test_environment.rb": "a89de3aa45ddf4759f719421ec227594b8c6dd874e61d0972c771f92f81a8ac0", - "libraries/device_shadow_for_aws/test/unit-test/CMock/docs/CMock_Summary.md": "b1950eba2df737fb1a106b15b34a4e92b2fe7a601789ba481d92b6de60e4cfbd", - "libraries/device_shadow_for_aws/test/unit-test/CMock/docs/ThrowTheSwitchCodingStandard.md": "a1838b8c9e20ac3c15bf96742b716b6621c0607c9273ae0f92a6769e3aa45f41", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/make_example/Makefile": "4180bf84b4a71086dcdd9e5f622c63be705981f8e98e311d7ecceb44940c3ea8", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/make_example/src/foo.c": "0bec016ce8f7d6033049664c12cfcc5c0099e638fc6395e753b4d36ea2808d72", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/make_example/src/foo.h": "e987f3bf49f430e2a9cb70bdd7105f8945e028d1598f361b30fe87a0585d97a3", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/make_example/src/main.c": "23c00ca8f9cd5d89107f26d0804e1a2a6f8840941462ddd616f0fa33da7dd0c1", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/make_example/test/test_foo.c": "6d2fe8d7ece7f0f8426fe684896c8bf76d15ea35e56add62d59558b47ee32347", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/make_example/test/test_main.c": "73baf6160697615a9af98a184479a28e92d42fb82c0f310efea1b105910a3b0b", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/gcc.yml": "5c5d558eba12c2c31432472acf7e90559bbd351632f4cb80c3ee621e4e65969a", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/iar_v4.yml": "f5722f968d75bbe9af61c0ad0f01b6b98afa1a08185526ae49ba121bac937ce7", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/iar_v5.yml": "bcf8ab60e79e586b628e8c0aff5c50011dd3db2695468b2ca6b8c25d3783e506", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/rakefile.rb": "5e0b4e5ae6dd28e4d882b06f6a2f99e35febe6a799e5103d255b3d44371f6060", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/rakefile_helper.rb": "16770f78c965b0ea1fd29ddb817d8756bd6f8f3020693c5f0a867732b1488ee1", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/AT91SAM7X256.h": "284e49294ecd18da7c0b4abbf825cf8edb0f68884d334167c1f755b8528b34f8", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/AdcConductor.c": "b14eb5f4196976d82c9501184c0496ac5c071ca9a993ddab0779faea95810f44", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/AdcConductor.h": "961bcc853beb286a6ed95ccaf1b48337e1e36b8e543ebb60ce9a56b80238d8e9", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/AdcHardware.c": "e9aabd8f076c0d1738d6ea6294c0e16f15643ba19483b1ba6eee861f02cbb9e7", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/AdcHardware.h": "af2841747b2659b183891c9c4c00a2b7c065b51a8b958c35d4a6be8564326e10", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/AdcHardwareConfigurator.c": "06b303aab471c751073c25170c8b4bc5f52cd89eb52a29a0db32946975bafa6f", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/AdcHardwareConfigurator.h": "2ac7b673358582f4df15beb5956cb9f66b8c56882ddb1f8508314d96459aebf7", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/AdcModel.c": "885c0a3df693def8de467cc9d9cbb503ba795ffe379d65de02409f8fca2fe360", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/AdcModel.h": "3ea12eb954305556617507aa8983f26fe0cb7afb7c8afc71341056e6d8ca23dd", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/AdcTemperatureSensor.c": "301cb0b59970bc21f85b068d103732e4dcb55cdbb74536a242a2c45ea8151610", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/AdcTemperatureSensor.h": "2fddbdb25206928f3c016ef362174caaf735d683da8e246f8d01f191d3926b73", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/Executor.c": "0cdf97b9afa1e7f2da8580b93a19fc536ad83ff4ff5ad1e42013e795af5db025", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/Executor.h": "11a373abf8479822f68c5ba2c244c922df6366047531c7953b1a257833075a7f", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/IntrinsicsWrapper.c": "95796f352948558443ea6000f9b1237d5b961d2275d12d7b4d33c6d05a4b90d6", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/IntrinsicsWrapper.h": "89354ee37181c2effe24d952bd3e4c7f44f7e02f8a85fe08debc64b4fdef3a4d", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/Main.c": "23b5e3b20efbe81415f4a8c21a47c767d6560e05e59b1a6b0220e5e4ae2503d4", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/Main.h": "6cbfb303c81f28a5e0b5cbb1fc44a860310af5f9c83fd5391b81c61ea4c6203f", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/Model.c": "8d62e7a6d628d609ffcda11085b09ee0f8fe18a1c527d8fcad54810a879cb705", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/Model.h": "409578c18146e8a728d4a0da93ed34d65880fc96dac39c2786a442e6ff47bb31", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/ModelConfig.h": "118773cc1bbaf51497b9e56fb3a65de4479944973565283223241e73abb34fed", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/TaskScheduler.c": "ccfda6443fa3c524f00d5810dfa48fa23e12608cf8e6dde46e5bf10293de717c", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/TaskScheduler.h": "b6e6f8c61bdd97ee32efe3a5b130c68379978ac126dc9695681de1a4393b0e14", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/TemperatureCalculator.c": "8ffc3c06a3449fd560275736c5cc3202137f00d0513e651304c836fd78128a56", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/TemperatureCalculator.h": "bfee490f7a59b6eedcd357c99cbff6be20b33b4aa96d54789aa420f69f3ceb33", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/TemperatureFilter.c": "fb6997e829daeefe1fa89a5febeb8aab8c9a9adfafb5739f60f786c69b57a3ea", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/TemperatureFilter.h": "0731c950b85d436e651737cca0ecff430edea68d62599e27167e7c5a2a57d983", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/TimerConductor.c": "b10f5485f4a884019257dcd143dddfda528af77b1f8b005a40b2443020ef67a5", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/TimerConductor.h": "53deff5a2ce521b48c69e1d85641e2c7da7d0bdbd1de48f622cc1a7df5efd177", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/TimerConfigurator.c": "145397008f450ec09b8bd010b02430c3becddc92a7fcbe31c06a5baf99e32105", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/TimerConfigurator.h": "55e7e6f42f76dc2c9c60137be3b4a4bfd3e9e96e4ce41c2300221bcf8fab24b9", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/TimerHardware.c": "5085266579205f2be126cc0e5f34c443469a3e5da53efd0fa2d95a7653a98803", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/TimerHardware.h": "abddafeeb43ee8cdc31389263b8826f3ccf6a20573ca4702dfeb537b00a04104", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/TimerInterruptConfigurator.c": "596665665389de910b1dbd15c292f141a8e64a2c4a0164a7959121bed2467645", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/TimerInterruptConfigurator.h": "5a7adb509ada4640fdccf739be3de8abb470b41bcddb9a9834e9b238a9fabd02", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/TimerInterruptHandler.c": "7fab66be3e4d5c430a1dfddee56559ba55ab4cd0d448c583637072e9dc9f10da", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/TimerInterruptHandler.h": "5cc7ecbd35069059f0fb2d516f8b63929e0a4d0fa00e53b593f0827d5f637d29", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/TimerModel.c": "315b80af627d601b85c203ad389f455d5a010806ea113fc410c9bb5566cb7966", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/TimerModel.h": "8946208aac57141bc8078bae72461ce1b0afcf9509eb7c9dd52d7643bf3c99da", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/Types.h": "342e458d2f13f4b2f42ac03133f005635bd4002ae446f5aa5006c73f4160a3d3", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.c": "a0a5c91867bd150cff7d8d1a25e5e3355a780421715afa1b9b7ea747612b8fd3", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.h": "cfe9a2cd19135f1c1058748f6c82be18331e35a7796a8801103458b2c36912e7", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/UsartConductor.c": "3536b396eddfd8d605ac050c18fd150764031ed873e18362fb0ebc34d9d7dc3c", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/UsartConductor.h": "58ce401a82e272c72f0d9cc81310a103d6bebd9565d8ba783d8a99a014a17aad", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/UsartConfigurator.c": "d4805a5c993e1c0227442f926bd9a28dd1d8af59fdb93c35fa707e14d77baf09", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/UsartConfigurator.h": "95eeabe4b7a99b54cf49531930b0a4be7fe812420c53dc1b730dec7f08e2d1c0", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/UsartHardware.c": "97db4fe3c762e48593838b8ff9ba20e08ce02ceb39bffa592b8691d850ecfe0f", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/UsartHardware.h": "99fa878f31c0b2f5d91cc7646ef25823c38a5c78a747a780d4c25754f448af0e", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/UsartModel.c": "36d389273df8ac7d3b28a3490a511c1be2c117d73d9f7a26dd7d34af5c6cd5a7", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/UsartModel.h": "c367f4aab51341ba2dd1780bad6b7cf59c344009505695b608b734b4711592b3", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/UsartPutChar.c": "2b2aab187d2b818ab28750a0676298205a7f7938ebffa440aaff99f3bc37002c", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/UsartPutChar.h": "557610200557eb94f1a7f5d7a1a7d26bd0827f5e2b06749353dfa4fae73d4439", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/UsartTransmitBufferStatus.c": "7924adbc923cd9eb3bcea5877defbacb3ec16a03de29e7327ff064304a914505", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/src/UsartTransmitBufferStatus.h": "955b1a7e0f4de642f8bb6083b8fa8c3f4d75bdc4c378794aac6dde049410d42f", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/test/TestAdcConductor.c": "9d22203689e18bdb6daf3a8aee7d17438028deb1d924731a0597c13743616d88", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/test/TestAdcHardware.c": "b3b05e87ac62d463ef489eb2e8aca41d2b6829ef8edaab27622c9c4889a59dba", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/test/TestAdcHardwareConfigurator.c": "58333e4681ca8a34e98b11129deebc653e44e3587b03b6b7f523a80ace169225", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/test/TestAdcModel.c": "dcf55240bd2ce74f8e3bcc28a98ed8037d51375ade9ebb1d61e882b41e11a9b6", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/test/TestAdcTemperatureSensor.c": "f5178bbb8605872e09608baff9b049cc826afa278bc1a125389255e786131f8f", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/test/TestExecutor.c": "db1bc8f44e9183b2a7909c0c0b8fac6b25b37d4aee0f47c9ab181500cf384ac9", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/test/TestMain.c": "67944d7590384483ecb8b1c06cdc9426e4c78bdfa99886f4d24f9d07e2aa84c0", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/test/TestModel.c": "1720d2acf16537a03ff8b6e800f04c46312c9f17985d856f3cb3f64309a869f0", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/test/TestTaskScheduler.c": "4efcd2cc31f7c3737f8a0143faf05f370466cb7acf75f0d15f7d661f9303472c", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/test/TestTemperatureCalculator.c": "f0b725debcc365c16a055371f3f48534d3f30bac75804cc9c5838850a8bb91c9", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/test/TestTemperatureFilter.c": "ffc624388daa2322ce339cff9445abf37cd2372534db356f57821b9e49874761", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/test/TestTimerConductor.c": "7d2d58e797a65e44698e30cdb79cac7e94fb96c8e95623c3ab8f9ec0f9078809", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/test/TestTimerConfigurator.c": "51748b3199379ebd5797c4da7bdefed444aed398ae36508c098c3f00a2a4416c", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/test/TestTimerHardware.c": "7ab489c8cdf7d8d0421482a1a6ef7b1f8663e38453a140e9a5550d1c67844170", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/test/TestTimerInterruptConfigurator.c": "7f8eb3100b9091d2996c8f75459659e8ae0c5a75f0d5ee08e3649b17f3394cce", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/test/TestTimerInterruptHandler.c": "0000e221012abd79eaf668188923275b7e7e12ef297b15b2165e35440c0f1eac", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/test/TestTimerModel.c": "cee4214bb0cf367910562488f448014bc802274d2894bc87ad9fa49098a99add", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/test/TestUsartBaudRateRegisterCalculator.c": "729c0d4162bd09ac4514e2de1f70e1b0b4fb05ee125dcfb91314aa40986e8235", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/test/TestUsartConductor.c": "ab351f7a74ba445200ccf3d851122fb86531e8511d8cbbbfd1d70b9ccd4a93a4", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/test/TestUsartConfigurator.c": "719758e045571b2c532007e37cfe9939eddcc850e069481524f5d4b17d9d399e", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/test/TestUsartHardware.c": "c29fa69264fd62d7a466a95de9c927e94119b366ecb1d333be47c60de6183fa1", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/test/TestUsartModel.c": "5ab9a684792f271e587d4e861de5c3dc90439dcc4670d7a06da8bd078161a2df", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/test/TestUsartPutChar.c": "cde5d54b2acf09a6caf86e360c9a2fd40fb6ccdc8fcfe78d4b10ca7c34d95e9e", - "libraries/device_shadow_for_aws/test/unit-test/CMock/examples/temp_sensor/test/TestUsartTransmitBufferStatus.c": "d66b41fefa7200f926652c67cc3797b6143b321e7be5eefb099caaa4cfe2af37", - "libraries/device_shadow_for_aws/test/unit-test/CMock/lib/cmock.rb": "f0edc4e161d909610f05f5e915b8262efb41afa36e0ac3be131f5626d3c58960", - "libraries/device_shadow_for_aws/test/unit-test/CMock/lib/cmock_config.rb": "967100e4f4d602c934d43c00d7f996186a241c6e50f3351e5488039c23891511", - "libraries/device_shadow_for_aws/test/unit-test/CMock/lib/cmock_file_writer.rb": "10145593832b79591152a96fe63371c921b0a544a1fa5811d268b520923cb8ae", - "libraries/device_shadow_for_aws/test/unit-test/CMock/lib/cmock_generator.rb": "4d3becae94cdd6e22c11e9bb2b925d94cb5dd1db38585963dd41a10b5b212ac9", - "libraries/device_shadow_for_aws/test/unit-test/CMock/lib/cmock_generator_plugin_array.rb": "0cb11153bbcc6e2cbaa07c74e9586e3172ce230019bc3f022894520c086f21d6", - "libraries/device_shadow_for_aws/test/unit-test/CMock/lib/cmock_generator_plugin_callback.rb": "4119c7f44d9e28264069064e1291589a16274bf93e5a14552e11a620ebb7dbd9", - "libraries/device_shadow_for_aws/test/unit-test/CMock/lib/cmock_generator_plugin_cexception.rb": "708f8c4336375acfcfec43e8190154cce8e12728e74737285824fb65944cca1d", - "libraries/device_shadow_for_aws/test/unit-test/CMock/lib/cmock_generator_plugin_expect.rb": "6df76c4d83db376ff82bb045c0f3003818f411fa7d9157a3a94e07031faddd22", - "libraries/device_shadow_for_aws/test/unit-test/CMock/lib/cmock_generator_plugin_expect_any_args.rb": "a89ff1e3376663d193d43f4d81ced30bf4691415ee98bfc12a29c6cc93cc25b2", - "libraries/device_shadow_for_aws/test/unit-test/CMock/lib/cmock_generator_plugin_ignore.rb": "5dd940f4b8ad31ccb94183e3c49a94410d1bdfdeefa33041dfd6de167f874abc", - "libraries/device_shadow_for_aws/test/unit-test/CMock/lib/cmock_generator_plugin_ignore_arg.rb": "8b65b5e69deae8a1bfaec78a7fe289ae96da9ecbf5f75bfc927f66326752ee0a", - "libraries/device_shadow_for_aws/test/unit-test/CMock/lib/cmock_generator_plugin_ignore_stateless.rb": "035693e7216923faaebee04641328fa470354209a24c2cc1511da76a16eb061a", - "libraries/device_shadow_for_aws/test/unit-test/CMock/lib/cmock_generator_plugin_return_thru_ptr.rb": "d9e4becb9f498eda5789f018afce08b7754b7201f839269753233d4a96afa7f5", - "libraries/device_shadow_for_aws/test/unit-test/CMock/lib/cmock_generator_utils.rb": "a3a991519847f367060ce0ee9573c3fe198572dc2293b62530d20eade3231acb", - "libraries/device_shadow_for_aws/test/unit-test/CMock/lib/cmock_header_parser.rb": "bd3517c139bd3e77b852b5462f2ed3819e3c8a2246edfbe1c3bbc7be96aa0070", - "libraries/device_shadow_for_aws/test/unit-test/CMock/lib/cmock_plugin_manager.rb": "c4af08cb8b44fa782c0cc6b5027d5a0001241492bbd67fd3b900c735daff7650", - "libraries/device_shadow_for_aws/test/unit-test/CMock/lib/cmock_unityhelper_parser.rb": "35a45f4dbfddf0ae863ddead0b302ee1b6ac51153295be5c07bd26fd9c397787", - "libraries/device_shadow_for_aws/test/unit-test/CMock/meson.build": "499a9acba3250bb3654bfb97429e4959d7e919965f80cf2654c095139b9528fd", - "libraries/device_shadow_for_aws/test/unit-test/CMock/scripts/create_makefile.rb": "a89601aae619a101901c98fa211c24484ce0f16abb4fdc74339973da630e2de3", - "libraries/device_shadow_for_aws/test/unit-test/CMock/scripts/create_mock.rb": "f0ac5b9b046564354f3b1dc548220842936901f1757c0fc80c6a38aca207ec52", - "libraries/device_shadow_for_aws/test/unit-test/CMock/scripts/create_runner.rb": "3913d1d40de255a31cc338f52e632d4b4b05e975b30c1a03bbee7d1e3bb95901", - "libraries/device_shadow_for_aws/test/unit-test/CMock/scripts/test_summary.rb": "7f782242056d906c3759ec8785c47b4006cb658ae88d5b331fd0b45a546c6e94", - "libraries/device_shadow_for_aws/test/unit-test/CMock/src/cmock.c": "6cd73033ba5ad688626bad666169d0869f7978bee7672a098998e0894d9b1287", - "libraries/device_shadow_for_aws/test/unit-test/CMock/src/cmock.h": "fb386d093680f1f82fa493d29959e3cc6b195c2738c07fc36a3c33868881a5b2", - "libraries/device_shadow_for_aws/test/unit-test/CMock/src/cmock_internals.h": "33176ace775e36ea3aaee1041d5df0967e5f120170f17f68be1ebc54c91f3027", - "libraries/device_shadow_for_aws/test/unit-test/CMock/src/meson.build": "29260b081670469c41d6e6fb0d6225aa1323b9857ea9baf7631257f896fa8afa", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/c/TestCMockC.c": "7beed4e807a064045a2f00bb149af817483fc70331aedfaa0d2934d3b94f993f", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/c/TestCMockC.yml": "7457da36df8102d71c336ca384702879161097ff542380bed78cb5446984ae4c", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/c/TestCMockCDynamic.c": "eeaac501c9e65e166ebd11b90c5275c67597e81e6c9c3156faf006751023495b", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/c/TestCMockCDynamic.yml": "4755d85389465ac56733780ec7da93965dccf5eba935195acbbb7de251c6048a", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/c/TestCMockCDynamic_Runner.c": "ba26744cbf8c4f1ea7de6ca7254700bf1e16ae57682270dc4d94393ccd501588", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/c/TestCMockC_Runner.c": "465d91fe9d981509a92267d0471fbb3e412a88b6f7d50437fe91e47ef6d69e8f", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v4/Resource/SAM7_FLASH.mac": "8ac360d36256589216b144c525d510af24457ef763becd14b137f63e953cc17d", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v4/Resource/SAM7_RAM.mac": "df15f8e476e1ca1b8d3141cfe0c801881939e70cefca237a98d804742cccdcfe", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v4/Resource/SAM7_SIM.mac": "6177e42e1a0a493976fb4d196b65cb1257e045db281ad48569b4b9ee6d9f37bc", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v4/Resource/at91SAM7X256_FLASH.xcl": "8594f9522b6ae41e96ab7b848dd7e4024876f7882d95f60a8bb6577ffd154605", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v4/Resource/at91SAM7X256_RAM.xcl": "713104cf6bf984663d5227b3ea6fe1d045413630b5a71404b2a2a7156346ae9b", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v4/Resource/ioat91sam7x256.ddf": "f23d06dcacffa6d544f4a560a4692bdaba7b918b488b810db928b418a4bbfd88", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v4/cmock_demo.dep": "5157f2a91a7169b63aa30424a220053a8983194e6145d14f3a39bfa2e63175ac", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v4/cmock_demo.ewd": "176d8abee2d57ee30575952da2aa2bfa4dc851b908e44df728b6a4a2c222fd8c", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v4/cmock_demo.ewp": "ffacbcc9ee4b092f01af22ee7bdcd34bff44043cd3c903ff9530912b0d4eaf0a", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v4/cmock_demo.eww": "7b5fe1867f77d1c6a09c591e3c4705a20ec0102a10e5049aa3fdb1989596e23b", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v4/incIAR/AT91SAM7X-EK.h": "41b4cd1cbc547b10818daf44adeb335a7dcd6846b229195c156be0be9b1cc056", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v4/incIAR/AT91SAM7X256.inc": "5f7c307376baf65d6ae5e16bb23b7d9374b713c7a8bd963240418dd026f5cd79", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v4/incIAR/AT91SAM7X256.rdf": "f7a13e637d12010564f884cb25ca152909f5cf056fbd87b8f837e6e999305411", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v4/incIAR/AT91SAM7X256.tcl": "959dfe614a39ca1c47aa5e42d10979bb939c4c0464cc01f3d395a17baa2759f8", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v4/incIAR/AT91SAM7X256_inc.h": "cf75fa42dbdac6d2e055ee6a1b4be6c3fda982bca36832167dbb3338c2529ea0", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v4/incIAR/ioat91sam7x256.h": "df4353041f1daef07fff13afedf5c82b6502ec3f27af4b7943a409dbf27bcdc4", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v4/incIAR/lib_AT91SAM7X256.h": "d500574f73b3e2c0e026d600f9949f680270aa9e78c82b0250276c75edbd79b1", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v4/settings/cmock_demo.cspy.bat": "0b95a0e1455c0947578eb48f8e77dc4303c672208d92a29883061115dfd4740a", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v4/settings/cmock_demo.dbgdt": "16333ca6fc95ee3c09e1d65fb546fd714e1039a2d83a7ab88d5113f7b92e89de", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v4/settings/cmock_demo.dni": "36b4ad5d2c76a305040b922a7b27d4d36f68e3ffaa13ca327db77b7f82280e6b", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v4/settings/cmock_demo.wsdt": "1502e8d1c367c132f62906a92a931ced79057ef818fdc502900ab6fa092681a7", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v4/srcIAR/Cstartup.s79": "73b3a3034252453843ce316daae1cc691d8289a6943105718c04e5864b384110", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v4/srcIAR/Cstartup_SAM7.c": "15857d19064c45c733ffc3c3de66b9f987bdd44b8e1d29b3ae17a355faaa3472", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v5/Resource/SAM7_FLASH.mac": "8ac360d36256589216b144c525d510af24457ef763becd14b137f63e953cc17d", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v5/Resource/SAM7_RAM.mac": "df15f8e476e1ca1b8d3141cfe0c801881939e70cefca237a98d804742cccdcfe", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v5/Resource/SAM7_SIM.mac": "6177e42e1a0a493976fb4d196b65cb1257e045db281ad48569b4b9ee6d9f37bc", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v5/Resource/at91SAM7X256_FLASH.icf": "d37f75919b1793bac86891e7fa9a9142ae83de351d5ef169af909ce770ae6d01", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v5/Resource/at91SAM7X256_RAM.icf": "170c34f5e702138b2b20cb696a482886936cdad8eaddb18c6c84abc5facf0a17", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v5/cmock_demo.dep": "0a869be5fc1a6ba0991c5012d8d4bf21ecdaf35ce23ff2207bbe35fc72b7acc2", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v5/cmock_demo.ewd": "5ebda13f0da843a1a4343bdb77c728d72ffcf8356a48eb6e3d5527428f6a1ba4", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v5/cmock_demo.ewp": "019d8fe92e6206e06b9fc46938e2ac19d9b8d9e27186f4ed05bc9f1f4ffca31b", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v5/cmock_demo.eww": "252dbeae342d9ad0c34d7f4a622dec74a5f400c08ad931771dc418dcc8aea7c3", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v5/incIAR/AT91SAM7X-EK.h": "41b4cd1cbc547b10818daf44adeb335a7dcd6846b229195c156be0be9b1cc056", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v5/incIAR/AT91SAM7X256_inc.h": "7fbf38b71f042bd3130dd7a0cc6e55130eae320e4fe705e078e5f9144c6e03b1", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v5/incIAR/lib_AT91SAM7X256.h": "405c0c979b5c39e520624e0b5da725690c69f220d5985c6129b1be0bde3ff4a1", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v5/incIAR/project.h": "431c8cdd8373916c97b6555fd0df183b4eed8799fe61397c5b9458d71e194edf", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v5/settings/BasicInterrupt_SAM7X.cspy.bat": "2e1acdf2e55863b5e33588ee350d4ea8325a79aef8f143a1d1e4dc9a20894ebe", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v5/settings/BasicInterrupt_SAM7X.dbgdt": "1967e4e174ca97638a540915477a6cbc829cf2d19bb4ad6046ebb43cef922619", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v5/settings/BasicInterrupt_SAM7X.dni": "e7db4742adcbe78483a5a2bd0510ef338a2ddddcca3b4587d493c54fec22a722", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v5/settings/BasicInterrupt_SAM7X.wsdt": "bfd819154f05571882a5c70fa8e47aaf4a6be521b9ce321b086ecc8b3fad2fe9", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v5/settings/BasicInterrupt_SAM7X_FLASH_Debug.jlink": "94a14185b32946b9295be7a4230afb5f71ddf87bff3e9f279ce4d82feabe98f9", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v5/settings/cmock_demo.cspy.bat": "98d3f600ca83fc5e0e141e27f17c92b52b28997445a64d7f63cb4312f490a580", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v5/settings/cmock_demo.dbgdt": "942572f2cb503a36b9e633642c54e72dc8bc929a41a9430fe62837ea3eb837c0", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v5/settings/cmock_demo.dni": "35f715df5935f7b03aae4126e33e296bd36df32f86aa00d425a09e65ce1fb66c", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v5/settings/cmock_demo.wsdt": "b5f6a167aa78028b09a439565dede111bf8119403c9f290367163356008807f5", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v5/settings/cmock_demo_Binary.jlink": "94a14185b32946b9295be7a4230afb5f71ddf87bff3e9f279ce4d82feabe98f9", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v5/settings/cmock_demo_FLASH_Debug.jlink": "94a14185b32946b9295be7a4230afb5f71ddf87bff3e9f279ce4d82feabe98f9", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v5/settings/cmock_demo_RAM_Debug.jlink": "94a14185b32946b9295be7a4230afb5f71ddf87bff3e9f279ce4d82feabe98f9", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v5/srcIAR/Cstartup.s": "f01a69400b4d52ad0202134d4d1eb2b2afb8b5b90f19cab527ef2c63354725a6", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/iar/iar_v5/srcIAR/Cstartup_SAM7.c": "ffffb70bb3424fb7537c766bfa1d0831154bbc455b10a7085ddfe6e5a51cd8e3", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/rakefile": "d324d932b8c69438ad43e7fddb4b28ec67e5c842b0dad2acb2554bcbcee7542c", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/rakefile_helper.rb": "7885bdc225c6b35de64317b9c2a6352e8637be6538280c9cb7efb60b76cd9a3a", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/systest_generator.rb": "58f80ae3b57314f1ac5ce062a5c8b073e51b69e244347fcd2e0909a0918d4ce5", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_compilation/callingconv.h": "f0d451838c94b20cb9df40827b1667e82719adf34bc7f848ce1ab330a95f5ece", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_compilation/config.yml": "55da291e818f575aaec65bfd678b9bc92badc2775bd012ea465d124bb03f6874", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_compilation/const.h": "452666930532c934d30c06081a1207422064421e2111ef3d774f60801c8d0298", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_compilation/inline.h": "faae36b96040414ffbbd8c9cd0ddcf1d918b5431ad81c12e391fe8b283ae915f", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_compilation/osek.h": "6283a1ba1ce53af3c73e246ec073497aec8d5da7e573f8474a45e1ccaf72730c", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_compilation/parsing.h": "f6f31c9b303aaf2948ed48cd6e8dcc0d7cef5bacc91b5746b11d432701911bd4", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/all_plugins_but_other_limits.yml": "23512e99944a08a4517037fddc6f13451118a23a19327270e7f0cde0a882643e", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/all_plugins_coexist.yml": "2fa3f85fa5bcfd432d7e82be741d3e4bce969182d3b3c4335ab2bac494a8b3e2", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/array_and_pointer_handling.yml": "afd7b725c51a0268b2fe582416b59e303c611a86af8359627a10483ccf4ac3dc", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/basic_expect_and_return.yml": "188b82892feac0f148d9b8d1edf9929e4145d8adb7ffc0b2752be3dfe5c620d8", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/const_primitives_handling.yml": "2610282b06d4b05f3f7e9b22254278648a29dcf1808f8206ac92d183ed7c7ebd", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/doesnt_leave_details_behind.yml": "5d39bdb3fb162c3664ed180754c6b8042c12ad7e29ccc65b42c312ccfeed322a", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/enforce_strict_ordering.yml": "85f9cc7ce2eb22b0da825ca8d6e38a05bffb69dab0e66c0e516753b74fcfe10b", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/expect_and_return_custom_types.yml": "361e10a02795595bf45c64b2026d9342fff1e4d0308fb5202413bffb84bd3b10", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/expect_and_return_treat_as.yml": "6601ab58a7b0719e26124b40d3aed2272a032f4ff3ae45da241b0b39bdf03ce9", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/expect_and_throw.yml": "18eb54309f69744598138a5b3f8ef4b898bbc3fb46b1a42306016d6ed566c1d3", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/expect_any_args.yml": "1348aa720acf85e117c6c23353f205b3438eac30baee86efeacbdc04f2645d27", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/fancy_pointer_handling.yml": "a3033a4e31bcfbf66126059476d9fdc7bdaa197a8b6568a382c93e373110abb4", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/function_pointer_handling.yml": "85c81773cf1dcf80dc84ccb433d8442aabde1b8635292819315287e828b93f63", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/ignore_and_return.yml": "4300c43c2e59a39111809e3e4571484e45146344a20d706a2c0c8618159fa2ad", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/ignore_and_return_stateless.yml": "4f9358583b2f8159251937699441854a41ddbe0bf9b1d8fbf1bebfeb8f32c0c1", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/ignore_strict_mock_calling.yml": "08c69a141af52960e0e9043d717ff5df442f7889edcd145898c0cade3fcc3e72", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/newer_standards_stuff1.yml": "f2073b808f4cc2d918612ff1c910fbc4a8ead998b12fcbc7608d430fe71d8eb9", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/nonstandard_parsed_stuff_1.yml": "23db82fdbc1643ed58a58c20a4154e75b8559509a3f827fb43e9c5965103e4f6", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/nonstandard_parsed_stuff_2.yml": "f51bae36303d532e357105195369615ab17560234efb1f0141973c2794ac0693", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/out_of_memory.yml": "4b4509e9c368fdec539be90daa164185175849afcf39c2d0a9c4d9ff9e423191", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/parsing_challenges.yml": "6f9a0d35489a6e6435211923ea43349e17cb68fc9652cb98511be8f74a78a079", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/return_thru_ptr_and_expect_any_args.yml": "64915233c5cb94bdff20cf89f650de58f278a214417bacf52129b67d67208cc0", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/return_thru_ptr_ignore_arg.yml": "cde16df22f47d782043ce85063cd7d53dcb3473eebd25631bbd18d7d87c38db0", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/skeleton.yml": "569c26fecbd11f185b9e4a5e2a0377306d18b2bf95402d9e04c3865468e1e066", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/skeleton_update.yml": "db55c821e8ea59817cd6d65f69a119bc1b1c75dff14fac1456167a5488b8e96e", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/struct_union_enum_expect_and_return.yml": "c926cca48cce1932fd57dc871187073cf3e35d12569369695a18a4a6fb7be3f8", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/struct_union_enum_expect_and_return_with_plugins.yml": "29f087a7f1217b3724517523dbf122bfe07277505549c465b1821df926b75c6e", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/stubs_with_callbacks.yml": "5e2cf62796105fa958e9528d3a30cff3a83c4f9d23385ab75a5939841647c486", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/unity_64bit_support.yml": "91a78d7f1216c1c18388116c169d2da0994351e61155fa6bb622bf16b635838e", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/unity_ignores.yml": "f6e9193481c9f0a5c5ab50833fea66da7bc34977b35a176fd613130ec883bf92", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/system/test_interactions/unity_void_pointer_compare.yml": "b92f86081c7771eca83efad7e38e071ee5bf8ce2e1a410df7d7af9c392486e6e", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/targets/clang_strict.yml": "4d477d7d7c1ffe0ce9175b89d4812119c7a0a79e924290e59c3dbd46b0975de3", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/targets/gcc.yml": "f012ab43326a37713fb72f33c0e03771fbbf4347e549de6cfdb476cda0ad9118", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/targets/gcc_64.yml": "0c0df186d99f01666f0d8145289179d86298c3671cdd7083c5e3c4a41625d5d2", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/targets/gcc_tiny.yml": "c9b57fd070a3e98fc3c237c9b3b99b31d0cf01cc0565b81812f57f68ca340714", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/targets/iar_arm_v4.yml": "fe0f205df28d23f4a940c1efce9e74ddd227427eaa55a70a283d8ff0722e45f4", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/targets/iar_arm_v5.yml": "7649d656896a709b2124b232bbe2d4911ae141617ccdd947e1f1541f23615bed", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/test_helper.rb": "7561fd77c8b7c6ec581d2e946db129893dd842d813801bd5ff6dfb42eb98cb19", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/unit/cmock_config_test.rb": "a583acc99d07d80cf5cd6ece9765e1f43bd834576d30df342b1769b9889050b5", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/unit/cmock_config_test.yml": "2b1460d832657fe5f69b70b92a7bcd40edd42346aea4bab20043ffecd43719e4", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/unit/cmock_file_writer_test.rb": "88cf580634a0907f12b8068f1deefe7e90a14b0111d55da6d413f3827347b9d6", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/unit/cmock_generator_main_test.rb": "2d51d72ba7d6ccd664556e2c2fe0cfe1aff821e351de70a0a8d0b241bbc5ef73", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/unit/cmock_generator_plugin_array_test.rb": "560f97841377b5ae6704cd4363e0d21c8883abcb7f5d2907608e6c0aa68c3518", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/unit/cmock_generator_plugin_callback_test.rb": "5134242ce1626493fba063b040edcdfb955267374f58dcc0a500c198fb26f51e", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/unit/cmock_generator_plugin_cexception_test.rb": "4a4bdfa48a17829dd1c3d58cfd4da6769bfde6bd592b55afc2685d24a667fec1", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/unit/cmock_generator_plugin_expect_a_test.rb": "4ec2bfdb7c6f35c1b9d1e15748891dd2e823f304892207030265f3769c990d37", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/unit/cmock_generator_plugin_expect_any_args_test.rb": "1b840d79c1630365f47e0a304daf5e52c76d2bd2815d37ca7590b30fd51fbec1", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/unit/cmock_generator_plugin_expect_b_test.rb": "a37304cc8f794c0d70298cd4873701bd5307b0c3827af0e453dff00911e9d47b", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/unit/cmock_generator_plugin_ignore_arg_test.rb": "cc79bf0080a069d76e91c230af75751e32fc86fbf4992b202d4905cf14368aad", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/unit/cmock_generator_plugin_ignore_stateless_test.rb": "dad02980c5efdd1182b4fa45ced2e36a1f0678df19ceaee7719c3c8303f47a9a", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/unit/cmock_generator_plugin_ignore_test.rb": "dc09b360cb2268924a6bc839a3130b9215c813780a3e71e589512015608e300b", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/unit/cmock_generator_plugin_return_thru_ptr_test.rb": "0b7351668087ed19560e963fdca2cdab19c1973e1f9274c0302f18110a7610ee", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/unit/cmock_generator_utils_test.rb": "663b3caa05cf3b0f889b7e7251643f38329bbf6a83c64910b8e3f917a1dca361", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/unit/cmock_header_parser_test.rb": "1c2c7b81d2f1c44b9a10eeef06e70c77fa14947e7dc889a37632dc9b680755dc", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/unit/cmock_plugin_manager_test.rb": "510fe651508db42d428539b63fbf2aa5c2601ac4b5f1fe0d5d756ba4f03f08e5", - "libraries/device_shadow_for_aws/test/unit-test/CMock/test/unit/cmock_unityhelper_parser_test.rb": "e77b10af099223b17e9c524d0e6520a8d90ef878f9326d8729a3d0cab437d172", - "libraries/device_shadow_for_aws/test/unit-test/CMock/vendor/behaviors/Manifest.txt": "f6def0d4d599a6d17c7b0a6e5cc65824ba9312a85c4d9640f9f40f3a65fe6e39", - "libraries/device_shadow_for_aws/test/unit-test/CMock/vendor/behaviors/Rakefile": "be9b1156744f3cf65e64c075ae5385313ce59e5ac4178ed8c63371bc817d214f", - "libraries/device_shadow_for_aws/test/unit-test/CMock/vendor/behaviors/lib/behaviors.rb": "c818cb720cce5d3da2b1a1e09601f2329f8889cccfdaf4e7ad7482d2524609d0", - "libraries/device_shadow_for_aws/test/unit-test/CMock/vendor/behaviors/lib/behaviors/reporttask.rb": "6abac47d73976e719ef3b2e47ffde7e048a08044e807b8d5b3eca7ab18c3acd8", - "libraries/device_shadow_for_aws/test/unit-test/CMock/vendor/behaviors/test/behaviors_tasks_test.rb": "04ef3a3e45cd62bc102267a2919240a9a021438e0dafccf2d817234104426ba9", - "libraries/device_shadow_for_aws/test/unit-test/CMock/vendor/behaviors/test/behaviors_test.rb": "4240fa9b7f31dcff3c5509827ebed298d2c388f55b8701221874300e815d76e0", - "libraries/device_shadow_for_aws/test/unit-test/CMock/vendor/behaviors/test/tasks_test/Rakefile": "0c9e136971e8aeb54404b4827de1b85cabb5512a8aaf8f36929e052339144638", - "libraries/device_shadow_for_aws/test/unit-test/CMock/vendor/behaviors/test/tasks_test/lib/user.rb": "b5527ab1ec2cde94b51b84e785840a076ceb4df87f8c71a52eb9119a1785f1d5", - "libraries/device_shadow_for_aws/test/unit-test/CMock/vendor/behaviors/test/tasks_test/test/user_test.rb": "e12e02edcc9868ad43634427fef9873e7e6a03a6144d59ed302d1f40beab18d6", - "libraries/device_shadow_for_aws/test/unit-test/cmock_build.cmake": "d73f758fdc599d6abcd447dbbd05331a14615eeb631b22cf5101b8a3d4eeebc2", - "libraries/device_shadow_for_aws/test/unit-test/shadow_utest.c": "64bc9c0222c96ed2e5af10c9e8f543b21d371e7791101554478e7947142bea86", - "libraries/device_shadow_for_aws/tools/cmock/coverage.cmake": "8ac1ac5e6d5628fc8625d57f74249f15f53eba61f8338813d36d3dfa9dc1cf9b", - "libraries/device_shadow_for_aws/tools/cmock/create_test.cmake": "41dc66ba43772ccbcc59871e16ebc60b8671875e0e59d9068313be0aac1f25b2", - "libraries/device_shadow_for_aws/tools/cmock/project.yml": "805074ab6dcf01b29aac19ab1964b70227d0f7013b5b755dbf5c17ae66e6a0d6", - "libraries/device_shadow_for_aws/tools/misra.config": "87445ff3dcb7c836a2f1ed650d751277aec5fd90639a73f43fb699dfff33b15e", - "libraries/device_shadow_for_aws/tools/uncrustify.cfg": "55c02144fdaa3d62e03ed97e3e89a54b67d9433a5320ec02ec82e75344b21656", - "libraries/freertos_plus/aws/greengrass/CMakeLists.txt": "393bd7ea752c2e8cd5c8844ca16ef65f0e511425fc5aa93e685ebf185e108d8e", - "libraries/freertos_plus/aws/greengrass/include/aws_ggd_config_defaults.h": "434b1e4a7fcc217e88275ac039f602e484e5d6b424bb010515d53c7cecc316c2", - "libraries/freertos_plus/aws/greengrass/include/aws_greengrass_discovery.h": "5798efbcec0e5e969cbd169e75c277adfa844b05f8e39ced88ad8d4fbe969d57", - "libraries/freertos_plus/aws/greengrass/src/aws_greengrass_discovery.c": "a314e73563229f862e4b0e104c1aed2a7140a893e69bbb6dda01e7bda4da25bf", - "libraries/freertos_plus/aws/greengrass/src/aws_helper_secure_connect.c": "40e0e21bb6cb1a392e3db33c129f5b3f183948d95605edacfe3e18c02d008514", - "libraries/freertos_plus/aws/greengrass/src/aws_helper_secure_connect.h": "8a71233b2b831488a385f659530907a26adddb8edfe391c0adce7a1497ff5758", - "libraries/freertos_plus/aws/greengrass/test/aws_greengrass_discovery_test_access_declare.h": "45272bea7f9a1018ceb9028e03145aa789fe5b367310b77c4f4e4fc993007f53", - "libraries/freertos_plus/aws/greengrass/test/aws_greengrass_discovery_test_access_define.h": "6bd7b214b1e9936dc7fa4bb9f6604ebb79af66ae7e94891ca2c3948b4137f176", - "libraries/freertos_plus/aws/greengrass/test/aws_test_ggd_system.c": "8dde331777cf0a01864d12003f2e7fe3c2d9ed2d834ff576c793ebb5062eb6de", - "libraries/freertos_plus/aws/greengrass/test/aws_test_ggd_unit.c": "6c0952a26a21ad22eb0ae4786525652ad21a45f4bfb42ff4c9cd20496ec124d8", - "libraries/freertos_plus/aws/greengrass/test/aws_test_helper_secure_connect.c": "99004b85bd8ffffb1fe6113d7a24cac09c394d1250d9d9c58d3858d98f96e472", - "libraries/freertos_plus/aws/ota/CMakeLists.txt": "bbccd996cd384cce21e8a89e8767d0353c434242c7f0eea2cb8899cbc9d77c46", - "libraries/freertos_plus/aws/ota/README.md": "b18ac6726e49fbd1f1ae96f8fc3551b0d9a226cd34d82503e3f2e641bf89b64e", - "libraries/freertos_plus/aws/ota/include/aws_iot_ota_agent.h": "b742809f8ab1e112e3fc43b5666daad95ccaaa10d79c34e69986e438a02b4c22", - "libraries/freertos_plus/aws/ota/include/aws_iot_ota_types.h": "57182b26616084fc42ba2b062e1d6e76466acdfef09f0645cd2a05ab766c8ea1", - "libraries/freertos_plus/aws/ota/src/aws_iot_ota_agent.c": "442ad0fa4d83b3565e9475ba3777e3e592a51b761547febccfaea43ddb2324e0", - "libraries/freertos_plus/aws/ota/src/aws_iot_ota_agent_internal.h": "dfd6ca7fb76631b5d9599070f91339a5ec6e259cd37e7ab912e5a42d4382fd8d", - "libraries/freertos_plus/aws/ota/src/aws_iot_ota_interface.c": "06f304e0659379ca35e293df481923160c1245a001c7343ea613530f9cb10a43", - "libraries/freertos_plus/aws/ota/src/aws_iot_ota_interface.h": "068a154bf5b8fca5b40bbde581839227c27b0c60e9bbaff7bbd3a64a92e07dee", - "libraries/freertos_plus/aws/ota/src/aws_iot_ota_pal.h": "c46e0c47c77368aa6bf23cd67eb5a44bce31552c6dbdf82fa937183439a0c187", - "libraries/freertos_plus/aws/ota/src/http/aws_iot_ota_http.c": "84f903d6f44293df041390a384a2aac2dd224488117ddcc4f0c15245322597b1", - "libraries/freertos_plus/aws/ota/src/http/aws_iot_ota_http.h": "31b163f629af2dcacfac4d2d7006c47a67ae80590e739d5e9ac95131edae2540", - "libraries/freertos_plus/aws/ota/src/mqtt/aws_iot_ota_cbor.c": "d72c60fc721724da9c96e952d326db64510c85bbe7e3622a8a9c218b2a3687c9", - "libraries/freertos_plus/aws/ota/src/mqtt/aws_iot_ota_cbor.h": "2ec1f8fc7211d684f84df8663e03b227bac0fd2c3ec672acf3e9dbbc7b3f7b08", - "libraries/freertos_plus/aws/ota/src/mqtt/aws_iot_ota_cbor_internal.h": "6216ff295ec1bc8462f586e040413e670c528c948fd7c913c94c38738ca0fc8c", - "libraries/freertos_plus/aws/ota/src/mqtt/aws_iot_ota_mqtt.c": "54e002b3f4eb0d786e3c1560c000722ea4ce31680b5a1fedafa578bba58284d5", - "libraries/freertos_plus/aws/ota/src/mqtt/aws_iot_ota_mqtt.h": "8c5875e1bdcc526808cbe568633d93bc91fb97f59abddf14b38c91bc12545044", - "libraries/freertos_plus/standard/crypto/CMakeLists.txt": "481befa1e33d2e1ebbacfd42083ebd9e4241905936132ec0d5f1c6161a9c21d4", - "libraries/freertos_plus/standard/crypto/include/iot_crypto.h": "979b169dd680d14602477c67d22f9827d60740faedbd472db66ffbde2d42d34b", - "libraries/freertos_plus/standard/crypto/src/iot_crypto.c": "c0931523c2818b313332964317ea4426b445fc76bae20859616a15ae85ea6b13", - "libraries/freertos_plus/standard/freertos_plus_cli/CMakeLists.txt": "e00100014f7209e35f71f54f5f8789c136ce62160ca07f6a414c989eca594136", - "libraries/freertos_plus/standard/freertos_plus_cli/include/FreeRTOS_CLI.h": "7de127b16025300d2f54a063aa4e122c464a060890875705e45cdcffdcbca295", - "libraries/freertos_plus/standard/freertos_plus_cli/include/FreeRTOS_CLI_Console.h": "d431af28dbc1110cd58d06a90c317413aa73386c800382647d9de56525940f37", - "libraries/freertos_plus/standard/freertos_plus_cli/include/FreeRTOS_CLI_UART.h": "63e0aaadf729cf0b0ec72457be88e054fec9366a54d2b20e5a1169ce12bee4b8", - "libraries/freertos_plus/standard/freertos_plus_cli/source/FreeRTOS_CLI.c": "702d1f733cc7f2f8ffab9e33c8b117c21a282b81de053e03f17cd9887fe2b517", - "libraries/freertos_plus/standard/freertos_plus_cli/source/FreeRTOS_CLI_Console.c": "cf12352c6959a994185ff186e949cab0736837b6a860e061b55dbf2b51af12a6", - "libraries/freertos_plus/standard/freertos_plus_cli/uart/FreeRTOS_CLI_UART.c": "bfe85e168f474dd85c1b04c25a7c451e86134f54e295179dbdbd650d09407515", - "libraries/freertos_plus/standard/freertos_plus_cli/utest/iot_test_freertos_cli.c": "337521d3f851419fd65b13f79e218728c4c8daa41b2ac801314c513879698441", - "libraries/freertos_plus/standard/freertos_plus_cli/utest/iot_test_freertos_cli_console.c": "af45dad1085f2c8466d751aa74779b86578fc5b3f50379654317716c1e498869", - "libraries/freertos_plus/standard/freertos_plus_posix/CMakeLists.txt": "2d110d1d29d9ef1dd3f73912e38a451f498c24711466787004f5a7624a0b680f", - "libraries/freertos_plus/standard/freertos_plus_posix/doc/Doxyfile": "71907a1ca6b1cae1114f2d16664148b74b6861e6f768c9ac04b1a9052f677105", - "libraries/freertos_plus/standard/freertos_plus_posix/doc/DoxygenLayout.xml": "6f6ef8c521e2943d9b596e7904bcd22a8f2d6253ce70fe206a030831e03fcd32", - "libraries/freertos_plus/standard/freertos_plus_posix/include/FreeRTOS_POSIX.h": "2018f496eb5d0d482c1d00e2881d863b3c3946224ec3165d773eb5448ca94f07", - "libraries/freertos_plus/standard/freertos_plus_posix/include/FreeRTOS_POSIX_internal.h": "fcd06b832232cf783e76f293417b238c97d7ae4b08b9a8feebf03de6521b86e1", - "libraries/freertos_plus/standard/freertos_plus_posix/include/FreeRTOS_POSIX_portable_default.h": "dff9f6642373b9002191f19cebf7c0b42829c28e72df35e239054d43509d62a9", - "libraries/freertos_plus/standard/freertos_plus_posix/include/FreeRTOS_POSIX_types.h": "fc8cf5e542d75add0b383577b5b7fdb8cae57cb3a2c64832c4c94b4b20553346", - "libraries/freertos_plus/standard/freertos_plus_posix/source/FreeRTOS_POSIX_clock.c": "b170317d13ef4ac9badc1d00afaa87655f86e7b94e4bf5064ecb1621b6ee511d", - "libraries/freertos_plus/standard/freertos_plus_posix/source/FreeRTOS_POSIX_mqueue.c": "5f7ea4afb1547c2e5006e873224de3bd69da039066ce4227278a50867ebd9de1", - "libraries/freertos_plus/standard/freertos_plus_posix/source/FreeRTOS_POSIX_pthread.c": "e22feecee2e094755d6dc0aee7be28d1d8dcf72d13d98d5c8922fc407474e446", - "libraries/freertos_plus/standard/freertos_plus_posix/source/FreeRTOS_POSIX_pthread_barrier.c": "43adaafd1338534907f5d0d841950320d8e01bb637b50ac0c765181c888e5892", - "libraries/freertos_plus/standard/freertos_plus_posix/source/FreeRTOS_POSIX_pthread_cond.c": "3c1d23aefa4d415c025a89d0388b53ae6d0d128e34ed23531a450116cddecaf7", - "libraries/freertos_plus/standard/freertos_plus_posix/source/FreeRTOS_POSIX_pthread_mutex.c": "d217516b0ba41c02d9b491d511a81ea3a73780de6cc0a6e527347fda7753064f", - "libraries/freertos_plus/standard/freertos_plus_posix/source/FreeRTOS_POSIX_sched.c": "668a4cac8f3bf0407067db17aef8361a572bc7701421f8a57981f7a607877573", - "libraries/freertos_plus/standard/freertos_plus_posix/source/FreeRTOS_POSIX_semaphore.c": "6479146228437651b99a82c1c0b6d987d1531feea3e9694e9a78642069f397d1", - "libraries/freertos_plus/standard/freertos_plus_posix/source/FreeRTOS_POSIX_timer.c": "fc6f4fa34d4841b8722141f831be0191e33e8dad5b565bd22d5fe365defdece3", - "libraries/freertos_plus/standard/freertos_plus_posix/source/FreeRTOS_POSIX_unistd.c": "803294f5e4d427eddcbe89849aa12981335680d4cbaad1b97fccac37fcf955ec", - "libraries/freertos_plus/standard/freertos_plus_posix/source/FreeRTOS_POSIX_utils.c": "4a67ed8d61577fb4ff56a8b9811a5ce8729780c21cc14cbe9e19a23ec48a1fc3", - "libraries/freertos_plus/standard/freertos_plus_tcp.cmake": "1de04dd7ff790e1814052c328015e1bcea2a55d733326fdcfa821e6b34711c07", - "libraries/freertos_plus/standard/freertos_plus_tcp/FreeRTOS_ARP.c": "4f2c076ec6cf3940cdfe096b4bb8f3217445334ef81ab7e1e072e5f55f4dbb8b", - "libraries/freertos_plus/standard/freertos_plus_tcp/FreeRTOS_DHCP.c": "6b5919c513993634afb9f2181d92dae4329ca406aafb6e74e47096f8b0852fd5", - "libraries/freertos_plus/standard/freertos_plus_tcp/FreeRTOS_DNS.c": "5887ec00a696def4b106ae39a07f41c5de4c920d596f68addcdc1e578a78d457", - "libraries/freertos_plus/standard/freertos_plus_tcp/FreeRTOS_IP.c": "6b9d5cfd3f1b5ab53a42332e8e6e760c3333d5d5dce1c9049b71609f232aeb47", - "libraries/freertos_plus/standard/freertos_plus_tcp/FreeRTOS_Sockets.c": "491767834a08fc0f5f4fe63f82c8e0a68257ec3f41f8b20ee1f17fa7ec93b2bb", - "libraries/freertos_plus/standard/freertos_plus_tcp/FreeRTOS_Stream_Buffer.c": "ca7b92d9b0e955e6822ec041d56490e178a0553100a6f6ca69760c524826d69e", - "libraries/freertos_plus/standard/freertos_plus_tcp/FreeRTOS_TCP_IP.c": "cd4b51b2e2ce8eb5df4a27b532537ba10b8bf8b58919b55ea49e6b8fd6aa52e9", - "libraries/freertos_plus/standard/freertos_plus_tcp/FreeRTOS_TCP_WIN.c": "28014553383bebe318af5521ef1257e55c97e1166604f2bb784f45387907c233", - "libraries/freertos_plus/standard/freertos_plus_tcp/FreeRTOS_UDP_IP.c": "9ec064feefafc0358f6cf47b06298d5ed6f47a99f552e54d29e8fec02dbf99b6", - "libraries/freertos_plus/standard/freertos_plus_tcp/History.txt": "cb4b656bd8d919167aeb0e864b09773d1ef05faff44e03478a8f871d273b312a", - "libraries/freertos_plus/standard/freertos_plus_tcp/LICENSE.md": "508a77d2e7b51d98adeed32648ad124b7b30241a8e70b2e72c99f92d8e5874d1", - "libraries/freertos_plus/standard/freertos_plus_tcp/MISRA.md": "c2f61079e65ad438c7d74550a1bf8958457da9bcd65861aa6820f7ac29395a4d", - "libraries/freertos_plus/standard/freertos_plus_tcp/README.md": "6f0682d3ba2c8bbefd697542d72887fc399b539c8ef1214023bbbe0958faa012", - "libraries/freertos_plus/standard/freertos_plus_tcp/ReadMe.url": "6c821ec481c65c354d181c49e519d0dde0def21bde8e85e7350bdb87a946941f", - "libraries/freertos_plus/standard/freertos_plus_tcp/docs/doxygen/config.doxyfile": "29f6b7911088cf40981258f7f89c55c73ec613eaf9d0bffde3cec7dd37c342b5", - "libraries/freertos_plus/standard/freertos_plus_tcp/docs/doxygen/layout.xml": "555a70789f54c525456ad9d30730614fe7119afb8b81dd8f8067af28dd14f66c", - "libraries/freertos_plus/standard/freertos_plus_tcp/docs/doxygen/style.css": "e3d3b4438744aa4d547bcacc6e64f3fcfc5057b476c5237e5107e6bbe0aac72a", - "libraries/freertos_plus/standard/freertos_plus_tcp/include/FreeRTOSIPConfigDefaults.h": "6e9f2c4e54f34106aa02f7b5a4e9e4bc9e83c8ca094f01ba68fb8e0094d3ea6c", - "libraries/freertos_plus/standard/freertos_plus_tcp/include/FreeRTOS_ARP.h": "5cb783b4c9780bbbe3088f127f01416e60fff55200fdc381cafddd9c301b5ce5", - "libraries/freertos_plus/standard/freertos_plus_tcp/include/FreeRTOS_DHCP.h": "3dfc34f27ea7ab5a983d23bcf70a540b0e43e9eb69a897370f5b102dcfc1699a", - "libraries/freertos_plus/standard/freertos_plus_tcp/include/FreeRTOS_DNS.h": "ee451b87a6cbbfed394949f519e210698ebcbdfa175b28f9ba213ed8c749a79d", - "libraries/freertos_plus/standard/freertos_plus_tcp/include/FreeRTOS_IP.h": "6ef358443a2ab3380512959b48927efc0a65104422b6c93ce2cf1170dab7570a", - "libraries/freertos_plus/standard/freertos_plus_tcp/include/FreeRTOS_IP_Private.h": "529797d2f8c10dfd4a507425b7a34a6715825ba35896e7d24888ed0f5e614c45", - "libraries/freertos_plus/standard/freertos_plus_tcp/include/FreeRTOS_Sockets.h": "3be94b3b9f7d8ad5360eed1bb090e3ed1129773175b98d2ea53fd9aa4ad87da9", - "libraries/freertos_plus/standard/freertos_plus_tcp/include/FreeRTOS_Stream_Buffer.h": "adfddc7e633eb0bfaa52c57a1c8959dbe72752e4e131e8639d612c454eea0ce6", - "libraries/freertos_plus/standard/freertos_plus_tcp/include/FreeRTOS_TCP_IP.h": "53102d240e6db8963fe92439d42883aff53aa2938db67b324e8b7559ad98d212", - "libraries/freertos_plus/standard/freertos_plus_tcp/include/FreeRTOS_TCP_WIN.h": "c4f9823fb869daa7749f926877c279fe630e237a6169d5a6720dc38c8416c176", - "libraries/freertos_plus/standard/freertos_plus_tcp/include/FreeRTOS_UDP_IP.h": "46658ce417e0679a4a6eb7ca9519d7c48faee18ff9ecf88266e41e0c53a772ca", - "libraries/freertos_plus/standard/freertos_plus_tcp/include/FreeRTOS_errno_TCP.h": "bb57d818bdbfd48e029ffc98261ae9550a1a7d0d3c82306ed03300434be413e5", - "libraries/freertos_plus/standard/freertos_plus_tcp/include/IPTraceMacroDefaults.h": "93b8efa7e78f9bfff5cdec36374da624669eb64804867702caa2038eecc9c81e", - "libraries/freertos_plus/standard/freertos_plus_tcp/include/NetworkBufferManagement.h": "8a0966f8bc5b5cadc810f4cbe5642b3a2b358ce65f6cecb8d3b8447a04944765", - "libraries/freertos_plus/standard/freertos_plus_tcp/include/NetworkInterface.h": "41ecf68564c9644e0e0fbeb3716a918d92caf741286d1f5a55eefcb4c6a9547f", - "libraries/freertos_plus/standard/freertos_plus_tcp/manifest.yml": "fc449ed06157bdde04ed0e3539614d0feb382c2d04b1793c8a6debb1ac6ea7bd", - "libraries/freertos_plus/standard/freertos_plus_tcp/readme.txt": "650a32b9db6e75a5bddfded2e44b5e137a9f9ba76124451eadd452b00c3c8010", - "libraries/freertos_plus/standard/freertos_plus_tcp/tools/tcp_utilities/include/tcp_dump_packets.h": "8a1850420f055e211ce0ed8588d3576b004dd857e939d5c4fc9d41c91da99015", - "libraries/freertos_plus/standard/freertos_plus_tcp/tools/tcp_utilities/include/tcp_mem_stats.h": "2c669496405f8105b321e1a145da761c78bd036d1eebfffa0c47d57422d60441", - "libraries/freertos_plus/standard/freertos_plus_tcp/tools/tcp_utilities/include/tcp_netstat.h": "12e17684ea130b1540e58b99e7c767a236d33c740baaaa09f0e4ea668bea9717", - "libraries/freertos_plus/standard/freertos_plus_tcp/tools/tcp_utilities/tcp_dump_packets.c": "16c618091889b2f74a208e3f331ed81fada4f39c8c378f085f25291b3cb40146", - "libraries/freertos_plus/standard/freertos_plus_tcp/tools/tcp_utilities/tcp_dump_packets.md": "b516c055037cb3e626e020569ea017f45f67b2c6a315539670807da107e04e62", - "libraries/freertos_plus/standard/freertos_plus_tcp/tools/tcp_utilities/tcp_mem_stats.c": "85e539a88110f923ede51a85fd514ce0362f363b27384227968bacb700f02f7b", - "libraries/freertos_plus/standard/freertos_plus_tcp/tools/tcp_utilities/tcp_mem_stats.md": "5e3c6c46e2cc64f7fed92c9e4fa3cc06ca9a64ac79c8ee62a3ef9485c7f2b6f1", - "libraries/freertos_plus/standard/freertos_plus_tcp/tools/tcp_utilities/tcp_netstat.c": "7264ef9da59ca8e7e99f239bfc7190a02dc3007dcd67cf0a42a3b20352050874", - "libraries/freertos_plus/standard/freertos_plus_tcp/tools/tcp_utilities/tcp_netstat.md": "a4d43f8c2e5eccf1e8b119b9c2e0152404ff08851f1cfd0d25f48170fed2daca", - "libraries/freertos_plus/standard/freertos_plus_tcp/tools/uncrustify.cfg": "55c02144fdaa3d62e03ed97e3e89a54b67d9433a5320ec02ec82e75344b21656", - "libraries/freertos_plus/standard/tls/CMakeLists.txt": "cf0ef0baf3fa24b73cc492a69a82e6b6f02f1aa0b413aea63e48795c37ea7f77", - "libraries/freertos_plus/standard/tls/include/iot_tls.h": "2bffb5b57ea555a9d3f351d75018468c165ae56239147e495844bde4dedc73b9", - "libraries/freertos_plus/standard/tls/src/iot_tls.c": "f936f93d282e980d3b84dbd2939ae6422d3aa53602b62a0d436983a4e1056a3a", - "libraries/freertos_plus/standard/utils/CMakeLists.txt": "c26d41b8c622dfda9f55c41d6057415a4724ee7c5c569762e3d0297eb1c8472e", - "libraries/freertos_plus/standard/utils/include/iot_system_init.h": "625f3f5949c615e5726a88dc19da2ff64c836e54520d749b6f69acc7684662d3", - "libraries/freertos_plus/standard/utils/src/iot_system_init.c": "a6fd99b93309c8d29dba1165d108716462cc23cd4de4fcdba8963a865f5637fb", - "libraries/logging/CMakeLists.txt": "2c536c9a42538b4866d98854dc8dcb1489f3cd1843d5dd87a6028bbbd39068ae", - "libraries/logging/include/iot_logging_task.h": "4c7b26e1069b21b1261ebc75f9b43b92eadd53e9a40cf3112cce83a452a3d53d", - "libraries/logging/include/logging_levels.h": "810b8c4754dffa9677db0313abbd9eac6cd14b67ade45e1441e0aeb91085c31f", - "libraries/logging/include/logging_stack.h": "5c34145c883e4bdcfc3499526ab6f3a112b7cd0ee7086a71daaa3bc33b5e7f49", - "libraries/logging/iot_logging.c": "b0f69225f30e08ff4735369938cdbbfce430163bf5ef2a594b89e5da1db603ae", - "libraries/logging/iot_logging_task_dynamic_buffers.c": "5222bf2e11b6b768bc1741fea0e841356d04332e5de8af18c1cccb378a31ecc6" + "freertos_kernel/GitHub-FreeRTOS-Kernel-Home.url": "29a615679aaf977693b52195bbbd531b884a82f3170e532c79c88faa026839c6", + "freertos_kernel/History.txt": "ab1c1807466c04b0dd0fcf5b3cda48a0bd8ff65fdf70a5e59e79ffbdbd8423de", + "freertos_kernel/LICENSE.md": "508a77d2e7b51d98adeed32648ad124b7b30241a8e70b2e72c99f92d8e5874d1", + "freertos_kernel/Quick_Start_Guide.url": "367a817538b81e233c897edfaeb14a4650fecd2e090a0d4d285f057d2466390f", + "freertos_kernel/README.md": "5cbdd937c3cb7128a4663a80e6107ce75bb941dff635ec4ad436fcee6ac8094b", + "freertos_kernel/croutine.c": "9ea626b0c7504013abcd0dad620ca51726669cba6298af17534c554280f24855", + "freertos_kernel/event_groups.c": "dbdf182fec562a6bda94d8f557793a43d7c932d06401e75f65f31a2c395a9428", + "freertos_kernel/include/FreeRTOS.h": "ccf4cbe12e86f1a9cf6faab16933f2f0e1db7c4e886e526b05a3fc529af41a83", + "freertos_kernel/include/StackMacros.h": "9f53d26bb4c4919f08663629298ec24217364e9ef385bfc57e8c83c2d37bf1a7", + "freertos_kernel/include/atomic.h": "3e58bb23ca948617cc095e2c42cbb55510704cb46861f31cbb33c1375ff8d480", + "freertos_kernel/include/croutine.h": "6c5c0aa43512d101c88cc21c0d1828ecd6e642bbbb7aa1b6fa1e29d4e72414d4", + "freertos_kernel/include/deprecated_definitions.h": "65660fffd1fc0d9d4d56fdb67ce35ea34a63eab40000e7a460155f8770dc56ee", + "freertos_kernel/include/event_groups.h": "0a21c7c0a10b9f9dc037fc097bbd4bf5a013dfdbfd85d7bc360fc8a8f9e663e1", + "freertos_kernel/include/list.h": "3fdce838fec38d30a53ac4e522dd8e20c8cb2dc5372e547fa7f094a934e36fc7", + "freertos_kernel/include/message_buffer.h": "bb3516838a6b16e63cdd5b2c07cc6950d97ae9eef9767da0fecb7251a984b514", + "freertos_kernel/include/mpu_prototypes.h": "c12eaa119d4627efae78596bcdfbbf5aac86855e6e78256e1feeee7019aa6f22", + "freertos_kernel/include/mpu_wrappers.h": "ed0c05191714cc61faa6e9e3d850f49c47c72e7f8dab1519d07fc61fa47b80f8", + "freertos_kernel/include/portable.h": "459927375c3b204805f9c539987460f322f8cb9948b04245ab4f91a82897407e", + "freertos_kernel/include/projdefs.h": "87c9907a9bc841cbba020246f8e7a1ee823d5c29aebc6c619e31bd13f2c451e4", + "freertos_kernel/include/queue.h": "f39e8f18161d1d7b0040d76946a801f5ccdf1efeb50ecdb473b6bc511747d748", + "freertos_kernel/include/semphr.h": "354e25ebf8564b60b2c796e1ec5c35af67659c9501d7dee8427cbb93dcdaa9b9", + "freertos_kernel/include/stack_macros.h": "a1c840f730026c14c722284d773bca0a06568a752278ee71fc7dffdbdd78c57c", + "freertos_kernel/include/stdint.readme": "2539107ae4d69ccbb106e7742589bc97d3c97e08222a9bef555a006c4de606d2", + "freertos_kernel/include/stream_buffer.h": "db74b388621f5a00da11aabc66e60ccdbdfd779f526fed7b536b5127ea2c9217", + "freertos_kernel/include/task.h": "b734313c3c29ecf83b7dc7d625387e6b442ce6e171d98e1a2b93d18c6980f23d", + "freertos_kernel/include/timers.h": "ef6f2fb0919545e0e8522ea9fe1ed68d1def835b825aada9a1311c213480601c", + "freertos_kernel/list.c": "32f96f5d99d4be5c9b526f2bedd3afeca3be5daaac981e8a862dcb23df566c6c", + "freertos_kernel/queue.c": "5a0a02733555d666dbff70d8d61604fcadade3aa46c8a46913c411cb1c6f051c", + "freertos_kernel/stream_buffer.c": "8f5ba61dcff8f7b1cf0c9d49ce92860c2dc9b01c7bea53c692db778d31685639", + "freertos_kernel/tasks.c": "b7ceb4615978b698a45bb3715080fee61b2887db2ede57b6f70a58c32fd5ebf8", + "freertos_kernel/timers.c": "1be5fd0558212771aae3359deb8f3e602a803bc7ca8400e447358184c7da5d94", + "libraries/3rdparty/CMakeLists.txt": "67a74829d65a7ec82f28fc42ddb04e76f04b8448bc1f54c6d0bb157f2083f42c", + "libraries/3rdparty/CMock/Gemfile": "4694d0e0e82570ff1a0dfa45307e3fa6706738c9e7e387a89788f8da589d4bac", + "libraries/3rdparty/CMock/LICENSE.txt": "a228c2871b9a779a6542a49470c5b567f2806dddcbcf90af861bb4d39291626c", + "libraries/3rdparty/CMock/README.md": "7e5eda88c3a355bad26c706daa6350186c89fe1db148697192be99fcb38aa142", + "libraries/3rdparty/CMock/config/production_environment.rb": "f349586d2ebd6d949653f283e0d634776f5c669990b1dfc3fe2c009a401ff3a4", + "libraries/3rdparty/CMock/config/test_environment.rb": "e3e267cc37e6473ae3bd4e47326d0374762930ff101b82cc1b9c2fd607d77456", + "libraries/3rdparty/CMock/docs/CMock_Summary.md": "52b9bbc61b36b9e89e67556390d577e438d3bc503cc4bb13cfc0758d7d602c91", + "libraries/3rdparty/CMock/docs/ThrowTheSwitchCodingStandard.md": "a1838b8c9e20ac3c15bf96742b716b6621c0607c9273ae0f92a6769e3aa45f41", + "libraries/3rdparty/CMock/examples/make_example/Makefile": "4180bf84b4a71086dcdd9e5f622c63be705981f8e98e311d7ecceb44940c3ea8", + "libraries/3rdparty/CMock/examples/make_example/src/foo.c": "0bec016ce8f7d6033049664c12cfcc5c0099e638fc6395e753b4d36ea2808d72", + "libraries/3rdparty/CMock/examples/make_example/src/foo.h": "e987f3bf49f430e2a9cb70bdd7105f8945e028d1598f361b30fe87a0585d97a3", + "libraries/3rdparty/CMock/examples/make_example/src/main.c": "23c00ca8f9cd5d89107f26d0804e1a2a6f8840941462ddd616f0fa33da7dd0c1", + "libraries/3rdparty/CMock/examples/make_example/test/test_foo.c": "6d2fe8d7ece7f0f8426fe684896c8bf76d15ea35e56add62d59558b47ee32347", + "libraries/3rdparty/CMock/examples/make_example/test/test_main.c": "73baf6160697615a9af98a184479a28e92d42fb82c0f310efea1b105910a3b0b", + "libraries/3rdparty/CMock/examples/temp_sensor/gcc.yml": "5c5d558eba12c2c31432472acf7e90559bbd351632f4cb80c3ee621e4e65969a", + "libraries/3rdparty/CMock/examples/temp_sensor/iar_v4.yml": "f5722f968d75bbe9af61c0ad0f01b6b98afa1a08185526ae49ba121bac937ce7", + "libraries/3rdparty/CMock/examples/temp_sensor/iar_v5.yml": "bcf8ab60e79e586b628e8c0aff5c50011dd3db2695468b2ca6b8c25d3783e506", + "libraries/3rdparty/CMock/examples/temp_sensor/rakefile.rb": "2d74c10170bd68d2d064b6504893a9a5e73f878a2a699979fe8fccd1a70535f1", + "libraries/3rdparty/CMock/examples/temp_sensor/rakefile_helper.rb": "98100d1e2fb44baa2ec47f7ac61d1190438e42e4fc9994f6b9590c952e1a7336", + "libraries/3rdparty/CMock/examples/temp_sensor/src/AT91SAM7X256.h": "284e49294ecd18da7c0b4abbf825cf8edb0f68884d334167c1f755b8528b34f8", + "libraries/3rdparty/CMock/examples/temp_sensor/src/AdcConductor.c": "b14eb5f4196976d82c9501184c0496ac5c071ca9a993ddab0779faea95810f44", + "libraries/3rdparty/CMock/examples/temp_sensor/src/AdcConductor.h": "961bcc853beb286a6ed95ccaf1b48337e1e36b8e543ebb60ce9a56b80238d8e9", + "libraries/3rdparty/CMock/examples/temp_sensor/src/AdcHardware.c": "e9aabd8f076c0d1738d6ea6294c0e16f15643ba19483b1ba6eee861f02cbb9e7", + "libraries/3rdparty/CMock/examples/temp_sensor/src/AdcHardware.h": "af2841747b2659b183891c9c4c00a2b7c065b51a8b958c35d4a6be8564326e10", + "libraries/3rdparty/CMock/examples/temp_sensor/src/AdcHardwareConfigurator.c": "06b303aab471c751073c25170c8b4bc5f52cd89eb52a29a0db32946975bafa6f", + "libraries/3rdparty/CMock/examples/temp_sensor/src/AdcHardwareConfigurator.h": "2ac7b673358582f4df15beb5956cb9f66b8c56882ddb1f8508314d96459aebf7", + "libraries/3rdparty/CMock/examples/temp_sensor/src/AdcModel.c": "885c0a3df693def8de467cc9d9cbb503ba795ffe379d65de02409f8fca2fe360", + "libraries/3rdparty/CMock/examples/temp_sensor/src/AdcModel.h": "3ea12eb954305556617507aa8983f26fe0cb7afb7c8afc71341056e6d8ca23dd", + "libraries/3rdparty/CMock/examples/temp_sensor/src/AdcTemperatureSensor.c": "301cb0b59970bc21f85b068d103732e4dcb55cdbb74536a242a2c45ea8151610", + "libraries/3rdparty/CMock/examples/temp_sensor/src/AdcTemperatureSensor.h": "2fddbdb25206928f3c016ef362174caaf735d683da8e246f8d01f191d3926b73", + "libraries/3rdparty/CMock/examples/temp_sensor/src/Executor.c": "0cdf97b9afa1e7f2da8580b93a19fc536ad83ff4ff5ad1e42013e795af5db025", + "libraries/3rdparty/CMock/examples/temp_sensor/src/Executor.h": "11a373abf8479822f68c5ba2c244c922df6366047531c7953b1a257833075a7f", + "libraries/3rdparty/CMock/examples/temp_sensor/src/IntrinsicsWrapper.c": "95796f352948558443ea6000f9b1237d5b961d2275d12d7b4d33c6d05a4b90d6", + "libraries/3rdparty/CMock/examples/temp_sensor/src/IntrinsicsWrapper.h": "89354ee37181c2effe24d952bd3e4c7f44f7e02f8a85fe08debc64b4fdef3a4d", + "libraries/3rdparty/CMock/examples/temp_sensor/src/Main.c": "23b5e3b20efbe81415f4a8c21a47c767d6560e05e59b1a6b0220e5e4ae2503d4", + "libraries/3rdparty/CMock/examples/temp_sensor/src/Main.h": "6cbfb303c81f28a5e0b5cbb1fc44a860310af5f9c83fd5391b81c61ea4c6203f", + "libraries/3rdparty/CMock/examples/temp_sensor/src/Model.c": "8d62e7a6d628d609ffcda11085b09ee0f8fe18a1c527d8fcad54810a879cb705", + "libraries/3rdparty/CMock/examples/temp_sensor/src/Model.h": "409578c18146e8a728d4a0da93ed34d65880fc96dac39c2786a442e6ff47bb31", + "libraries/3rdparty/CMock/examples/temp_sensor/src/ModelConfig.h": "118773cc1bbaf51497b9e56fb3a65de4479944973565283223241e73abb34fed", + "libraries/3rdparty/CMock/examples/temp_sensor/src/TaskScheduler.c": "ccfda6443fa3c524f00d5810dfa48fa23e12608cf8e6dde46e5bf10293de717c", + "libraries/3rdparty/CMock/examples/temp_sensor/src/TaskScheduler.h": "b6e6f8c61bdd97ee32efe3a5b130c68379978ac126dc9695681de1a4393b0e14", + "libraries/3rdparty/CMock/examples/temp_sensor/src/TemperatureCalculator.c": "8ffc3c06a3449fd560275736c5cc3202137f00d0513e651304c836fd78128a56", + "libraries/3rdparty/CMock/examples/temp_sensor/src/TemperatureCalculator.h": "bfee490f7a59b6eedcd357c99cbff6be20b33b4aa96d54789aa420f69f3ceb33", + "libraries/3rdparty/CMock/examples/temp_sensor/src/TemperatureFilter.c": "fb6997e829daeefe1fa89a5febeb8aab8c9a9adfafb5739f60f786c69b57a3ea", + "libraries/3rdparty/CMock/examples/temp_sensor/src/TemperatureFilter.h": "0731c950b85d436e651737cca0ecff430edea68d62599e27167e7c5a2a57d983", + "libraries/3rdparty/CMock/examples/temp_sensor/src/TimerConductor.c": "b10f5485f4a884019257dcd143dddfda528af77b1f8b005a40b2443020ef67a5", + "libraries/3rdparty/CMock/examples/temp_sensor/src/TimerConductor.h": "53deff5a2ce521b48c69e1d85641e2c7da7d0bdbd1de48f622cc1a7df5efd177", + "libraries/3rdparty/CMock/examples/temp_sensor/src/TimerConfigurator.c": "145397008f450ec09b8bd010b02430c3becddc92a7fcbe31c06a5baf99e32105", + "libraries/3rdparty/CMock/examples/temp_sensor/src/TimerConfigurator.h": "55e7e6f42f76dc2c9c60137be3b4a4bfd3e9e96e4ce41c2300221bcf8fab24b9", + "libraries/3rdparty/CMock/examples/temp_sensor/src/TimerHardware.c": "5085266579205f2be126cc0e5f34c443469a3e5da53efd0fa2d95a7653a98803", + "libraries/3rdparty/CMock/examples/temp_sensor/src/TimerHardware.h": "abddafeeb43ee8cdc31389263b8826f3ccf6a20573ca4702dfeb537b00a04104", + "libraries/3rdparty/CMock/examples/temp_sensor/src/TimerInterruptConfigurator.c": "596665665389de910b1dbd15c292f141a8e64a2c4a0164a7959121bed2467645", + "libraries/3rdparty/CMock/examples/temp_sensor/src/TimerInterruptConfigurator.h": "5a7adb509ada4640fdccf739be3de8abb470b41bcddb9a9834e9b238a9fabd02", + "libraries/3rdparty/CMock/examples/temp_sensor/src/TimerInterruptHandler.c": "7fab66be3e4d5c430a1dfddee56559ba55ab4cd0d448c583637072e9dc9f10da", + "libraries/3rdparty/CMock/examples/temp_sensor/src/TimerInterruptHandler.h": "5cc7ecbd35069059f0fb2d516f8b63929e0a4d0fa00e53b593f0827d5f637d29", + "libraries/3rdparty/CMock/examples/temp_sensor/src/TimerModel.c": "315b80af627d601b85c203ad389f455d5a010806ea113fc410c9bb5566cb7966", + "libraries/3rdparty/CMock/examples/temp_sensor/src/TimerModel.h": "8946208aac57141bc8078bae72461ce1b0afcf9509eb7c9dd52d7643bf3c99da", + "libraries/3rdparty/CMock/examples/temp_sensor/src/Types.h": "342e458d2f13f4b2f42ac03133f005635bd4002ae446f5aa5006c73f4160a3d3", + "libraries/3rdparty/CMock/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.c": "a0a5c91867bd150cff7d8d1a25e5e3355a780421715afa1b9b7ea747612b8fd3", + "libraries/3rdparty/CMock/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.h": "cfe9a2cd19135f1c1058748f6c82be18331e35a7796a8801103458b2c36912e7", + "libraries/3rdparty/CMock/examples/temp_sensor/src/UsartConductor.c": "3536b396eddfd8d605ac050c18fd150764031ed873e18362fb0ebc34d9d7dc3c", + "libraries/3rdparty/CMock/examples/temp_sensor/src/UsartConductor.h": "58ce401a82e272c72f0d9cc81310a103d6bebd9565d8ba783d8a99a014a17aad", + "libraries/3rdparty/CMock/examples/temp_sensor/src/UsartConfigurator.c": "d4805a5c993e1c0227442f926bd9a28dd1d8af59fdb93c35fa707e14d77baf09", + "libraries/3rdparty/CMock/examples/temp_sensor/src/UsartConfigurator.h": "95eeabe4b7a99b54cf49531930b0a4be7fe812420c53dc1b730dec7f08e2d1c0", + "libraries/3rdparty/CMock/examples/temp_sensor/src/UsartHardware.c": "97db4fe3c762e48593838b8ff9ba20e08ce02ceb39bffa592b8691d850ecfe0f", + "libraries/3rdparty/CMock/examples/temp_sensor/src/UsartHardware.h": "99fa878f31c0b2f5d91cc7646ef25823c38a5c78a747a780d4c25754f448af0e", + "libraries/3rdparty/CMock/examples/temp_sensor/src/UsartModel.c": "36d389273df8ac7d3b28a3490a511c1be2c117d73d9f7a26dd7d34af5c6cd5a7", + "libraries/3rdparty/CMock/examples/temp_sensor/src/UsartModel.h": "c367f4aab51341ba2dd1780bad6b7cf59c344009505695b608b734b4711592b3", + "libraries/3rdparty/CMock/examples/temp_sensor/src/UsartPutChar.c": "2b2aab187d2b818ab28750a0676298205a7f7938ebffa440aaff99f3bc37002c", + "libraries/3rdparty/CMock/examples/temp_sensor/src/UsartPutChar.h": "557610200557eb94f1a7f5d7a1a7d26bd0827f5e2b06749353dfa4fae73d4439", + "libraries/3rdparty/CMock/examples/temp_sensor/src/UsartTransmitBufferStatus.c": "7924adbc923cd9eb3bcea5877defbacb3ec16a03de29e7327ff064304a914505", + "libraries/3rdparty/CMock/examples/temp_sensor/src/UsartTransmitBufferStatus.h": "955b1a7e0f4de642f8bb6083b8fa8c3f4d75bdc4c378794aac6dde049410d42f", + "libraries/3rdparty/CMock/examples/temp_sensor/test/TestAdcConductor.c": "9d22203689e18bdb6daf3a8aee7d17438028deb1d924731a0597c13743616d88", + "libraries/3rdparty/CMock/examples/temp_sensor/test/TestAdcHardware.c": "b3b05e87ac62d463ef489eb2e8aca41d2b6829ef8edaab27622c9c4889a59dba", + "libraries/3rdparty/CMock/examples/temp_sensor/test/TestAdcHardwareConfigurator.c": "58333e4681ca8a34e98b11129deebc653e44e3587b03b6b7f523a80ace169225", + "libraries/3rdparty/CMock/examples/temp_sensor/test/TestAdcModel.c": "dcf55240bd2ce74f8e3bcc28a98ed8037d51375ade9ebb1d61e882b41e11a9b6", + "libraries/3rdparty/CMock/examples/temp_sensor/test/TestAdcTemperatureSensor.c": "f5178bbb8605872e09608baff9b049cc826afa278bc1a125389255e786131f8f", + "libraries/3rdparty/CMock/examples/temp_sensor/test/TestExecutor.c": "db1bc8f44e9183b2a7909c0c0b8fac6b25b37d4aee0f47c9ab181500cf384ac9", + "libraries/3rdparty/CMock/examples/temp_sensor/test/TestMain.c": "67944d7590384483ecb8b1c06cdc9426e4c78bdfa99886f4d24f9d07e2aa84c0", + "libraries/3rdparty/CMock/examples/temp_sensor/test/TestModel.c": "1720d2acf16537a03ff8b6e800f04c46312c9f17985d856f3cb3f64309a869f0", + "libraries/3rdparty/CMock/examples/temp_sensor/test/TestTaskScheduler.c": "4efcd2cc31f7c3737f8a0143faf05f370466cb7acf75f0d15f7d661f9303472c", + "libraries/3rdparty/CMock/examples/temp_sensor/test/TestTemperatureCalculator.c": "f0b725debcc365c16a055371f3f48534d3f30bac75804cc9c5838850a8bb91c9", + "libraries/3rdparty/CMock/examples/temp_sensor/test/TestTemperatureFilter.c": "ffc624388daa2322ce339cff9445abf37cd2372534db356f57821b9e49874761", + "libraries/3rdparty/CMock/examples/temp_sensor/test/TestTimerConductor.c": "7d2d58e797a65e44698e30cdb79cac7e94fb96c8e95623c3ab8f9ec0f9078809", + "libraries/3rdparty/CMock/examples/temp_sensor/test/TestTimerConfigurator.c": "51748b3199379ebd5797c4da7bdefed444aed398ae36508c098c3f00a2a4416c", + "libraries/3rdparty/CMock/examples/temp_sensor/test/TestTimerHardware.c": "7ab489c8cdf7d8d0421482a1a6ef7b1f8663e38453a140e9a5550d1c67844170", + "libraries/3rdparty/CMock/examples/temp_sensor/test/TestTimerInterruptConfigurator.c": "7f8eb3100b9091d2996c8f75459659e8ae0c5a75f0d5ee08e3649b17f3394cce", + "libraries/3rdparty/CMock/examples/temp_sensor/test/TestTimerInterruptHandler.c": "0000e221012abd79eaf668188923275b7e7e12ef297b15b2165e35440c0f1eac", + "libraries/3rdparty/CMock/examples/temp_sensor/test/TestTimerModel.c": "cee4214bb0cf367910562488f448014bc802274d2894bc87ad9fa49098a99add", + "libraries/3rdparty/CMock/examples/temp_sensor/test/TestUsartBaudRateRegisterCalculator.c": "729c0d4162bd09ac4514e2de1f70e1b0b4fb05ee125dcfb91314aa40986e8235", + "libraries/3rdparty/CMock/examples/temp_sensor/test/TestUsartConductor.c": "ab351f7a74ba445200ccf3d851122fb86531e8511d8cbbbfd1d70b9ccd4a93a4", + "libraries/3rdparty/CMock/examples/temp_sensor/test/TestUsartConfigurator.c": "719758e045571b2c532007e37cfe9939eddcc850e069481524f5d4b17d9d399e", + "libraries/3rdparty/CMock/examples/temp_sensor/test/TestUsartHardware.c": "c29fa69264fd62d7a466a95de9c927e94119b366ecb1d333be47c60de6183fa1", + "libraries/3rdparty/CMock/examples/temp_sensor/test/TestUsartModel.c": "5ab9a684792f271e587d4e861de5c3dc90439dcc4670d7a06da8bd078161a2df", + "libraries/3rdparty/CMock/examples/temp_sensor/test/TestUsartPutChar.c": "cde5d54b2acf09a6caf86e360c9a2fd40fb6ccdc8fcfe78d4b10ca7c34d95e9e", + "libraries/3rdparty/CMock/examples/temp_sensor/test/TestUsartTransmitBufferStatus.c": "d66b41fefa7200f926652c67cc3797b6143b321e7be5eefb099caaa4cfe2af37", + "libraries/3rdparty/CMock/lib/cmock.rb": "2db133af7e8c2782b955c5727fe806149e29e1f6f6c24f0edb06bf0e8fb990ce", + "libraries/3rdparty/CMock/lib/cmock_config.rb": "d1f169fd7570f897c7025f90b69a3b563a0053013c6bf9701dce79c66fd8b0c7", + "libraries/3rdparty/CMock/lib/cmock_file_writer.rb": "00952d06256e5c4f15d12798124d1924cdd9ddc0767f8849bd4fdd5da27a0796", + "libraries/3rdparty/CMock/lib/cmock_generator.rb": "efcad21dc935182dfaad8798b5311c73457e6ec7289990d60273ccf8b49f9e88", + "libraries/3rdparty/CMock/lib/cmock_generator_plugin_array.rb": "cf79e99a143bbffa19513c552427758151dbf5bc4498872d55240a301cf81e62", + "libraries/3rdparty/CMock/lib/cmock_generator_plugin_callback.rb": "af43da2e2327b72cc5c4acf54f2acaa851e050dd0fdc295328b04f0daad5e738", + "libraries/3rdparty/CMock/lib/cmock_generator_plugin_cexception.rb": "7ea5018ce83d734f587e16754f09508d98a6d7ee9e35ae4d77f795c64d817091", + "libraries/3rdparty/CMock/lib/cmock_generator_plugin_expect.rb": "24e589d18c6adf83d9efb6fb466aaa6936566ac8f3c8fddbdd4031c015013be9", + "libraries/3rdparty/CMock/lib/cmock_generator_plugin_expect_any_args.rb": "8156d254e07315f04e7ae692bc6e90fa0f3418122e4048fe888ca2a08a5e2506", + "libraries/3rdparty/CMock/lib/cmock_generator_plugin_ignore.rb": "040a49d79fa8a39a215105b5e1333ace4e858d84db305e7d2addd71fbbfa3645", + "libraries/3rdparty/CMock/lib/cmock_generator_plugin_ignore_arg.rb": "85bb085311132867f962969f4757346b950497bf1ef0fc6bf856b30fa76d879d", + "libraries/3rdparty/CMock/lib/cmock_generator_plugin_return_thru_ptr.rb": "1de81b18418f28c42c3cece2cdac389f0ca106bb6aff0cd148e60e3666017161", + "libraries/3rdparty/CMock/lib/cmock_generator_utils.rb": "ab582b61a17547a861f2623c13a22b2db5c985bbb2d280b4036978f490550ecf", + "libraries/3rdparty/CMock/lib/cmock_header_parser.rb": "88e194b0f99b8ed412840d564d89e8f9f87f6b81e81998e64f37e512e39e4eac", + "libraries/3rdparty/CMock/lib/cmock_plugin_manager.rb": "ea1f967c58ad0b7c4d5770f73a1c8a0e2b2c3316222007ce47975ea12037ab1e", + "libraries/3rdparty/CMock/lib/cmock_unityhelper_parser.rb": "9c345fb34efc38ee37787cf6d33b161a10e819b18e1f8f88ab855a58b1bda1eb", + "libraries/3rdparty/CMock/meson.build": "f476d259cf456982649c5dba0c88070257da77a71316eb3403002a7d50139239", + "libraries/3rdparty/CMock/scripts/create_makefile.rb": "c03914eea03a12c2086ab042e5ea60f3375ae2742b32fb98812493e8ca015d77", + "libraries/3rdparty/CMock/scripts/create_mock.rb": "995d1551fc08f789e8d036ac378014ab1fbce43aebd4d84e18d7c66585571f65", + "libraries/3rdparty/CMock/scripts/create_runner.rb": "7fe06ce7115cc57a07a2dfac985dc29ffffbefdd94ef57e560b78d22a0628c23", + "libraries/3rdparty/CMock/scripts/test_summary.rb": "345e9fb68e4b3c49c36022a7e17d0b704ce1dc0a9adfde7bd0281084c6db4bee", + "libraries/3rdparty/CMock/src/cmock.c": "5bdc4ba9861d73b950646a3f5ce6ed15e7cdbe67a17c3c625316979236ab1e49", + "libraries/3rdparty/CMock/src/cmock.h": "1e80437b68da381104b8f6df528fa5a136917a35e45ff0eaac117f2a22ae8fea", + "libraries/3rdparty/CMock/src/cmock_internals.h": "4df4b62d2b13a0b6541d986100b9ec6b261b882741834ef2ab0d51a0afa34e00", + "libraries/3rdparty/CMock/src/meson.build": "a04202d0f04fadfb7a766d041f92fbe0b858d5b2c7e1aab03c7538d77ee2b823", + "libraries/3rdparty/CMock/test/c/TestCMockC.c": "7beed4e807a064045a2f00bb149af817483fc70331aedfaa0d2934d3b94f993f", + "libraries/3rdparty/CMock/test/c/TestCMockC.yml": "7457da36df8102d71c336ca384702879161097ff542380bed78cb5446984ae4c", + "libraries/3rdparty/CMock/test/c/TestCMockCDynamic.c": "eeaac501c9e65e166ebd11b90c5275c67597e81e6c9c3156faf006751023495b", + "libraries/3rdparty/CMock/test/c/TestCMockCDynamic.yml": "4755d85389465ac56733780ec7da93965dccf5eba935195acbbb7de251c6048a", + "libraries/3rdparty/CMock/test/c/TestCMockCDynamic_Runner.c": "ba26744cbf8c4f1ea7de6ca7254700bf1e16ae57682270dc4d94393ccd501588", + "libraries/3rdparty/CMock/test/c/TestCMockC_Runner.c": "465d91fe9d981509a92267d0471fbb3e412a88b6f7d50437fe91e47ef6d69e8f", + "libraries/3rdparty/CMock/test/iar/iar_v4/Resource/SAM7_FLASH.mac": "8ac360d36256589216b144c525d510af24457ef763becd14b137f63e953cc17d", + "libraries/3rdparty/CMock/test/iar/iar_v4/Resource/SAM7_RAM.mac": "df15f8e476e1ca1b8d3141cfe0c801881939e70cefca237a98d804742cccdcfe", + "libraries/3rdparty/CMock/test/iar/iar_v4/Resource/SAM7_SIM.mac": "6177e42e1a0a493976fb4d196b65cb1257e045db281ad48569b4b9ee6d9f37bc", + "libraries/3rdparty/CMock/test/iar/iar_v4/Resource/at91SAM7X256_FLASH.xcl": "8594f9522b6ae41e96ab7b848dd7e4024876f7882d95f60a8bb6577ffd154605", + "libraries/3rdparty/CMock/test/iar/iar_v4/Resource/at91SAM7X256_RAM.xcl": "713104cf6bf984663d5227b3ea6fe1d045413630b5a71404b2a2a7156346ae9b", + "libraries/3rdparty/CMock/test/iar/iar_v4/Resource/ioat91sam7x256.ddf": "f23d06dcacffa6d544f4a560a4692bdaba7b918b488b810db928b418a4bbfd88", + "libraries/3rdparty/CMock/test/iar/iar_v4/cmock_demo.dep": "5157f2a91a7169b63aa30424a220053a8983194e6145d14f3a39bfa2e63175ac", + "libraries/3rdparty/CMock/test/iar/iar_v4/cmock_demo.ewd": "176d8abee2d57ee30575952da2aa2bfa4dc851b908e44df728b6a4a2c222fd8c", + "libraries/3rdparty/CMock/test/iar/iar_v4/cmock_demo.ewp": "ffacbcc9ee4b092f01af22ee7bdcd34bff44043cd3c903ff9530912b0d4eaf0a", + "libraries/3rdparty/CMock/test/iar/iar_v4/cmock_demo.eww": "7b5fe1867f77d1c6a09c591e3c4705a20ec0102a10e5049aa3fdb1989596e23b", + "libraries/3rdparty/CMock/test/iar/iar_v4/incIAR/AT91SAM7X-EK.h": "41b4cd1cbc547b10818daf44adeb335a7dcd6846b229195c156be0be9b1cc056", + "libraries/3rdparty/CMock/test/iar/iar_v4/incIAR/AT91SAM7X256.inc": "5f7c307376baf65d6ae5e16bb23b7d9374b713c7a8bd963240418dd026f5cd79", + "libraries/3rdparty/CMock/test/iar/iar_v4/incIAR/AT91SAM7X256.rdf": "f7a13e637d12010564f884cb25ca152909f5cf056fbd87b8f837e6e999305411", + "libraries/3rdparty/CMock/test/iar/iar_v4/incIAR/AT91SAM7X256.tcl": "959dfe614a39ca1c47aa5e42d10979bb939c4c0464cc01f3d395a17baa2759f8", + "libraries/3rdparty/CMock/test/iar/iar_v4/incIAR/AT91SAM7X256_inc.h": "cf75fa42dbdac6d2e055ee6a1b4be6c3fda982bca36832167dbb3338c2529ea0", + "libraries/3rdparty/CMock/test/iar/iar_v4/incIAR/ioat91sam7x256.h": "df4353041f1daef07fff13afedf5c82b6502ec3f27af4b7943a409dbf27bcdc4", + "libraries/3rdparty/CMock/test/iar/iar_v4/incIAR/lib_AT91SAM7X256.h": "d500574f73b3e2c0e026d600f9949f680270aa9e78c82b0250276c75edbd79b1", + "libraries/3rdparty/CMock/test/iar/iar_v4/settings/cmock_demo.cspy.bat": "0b95a0e1455c0947578eb48f8e77dc4303c672208d92a29883061115dfd4740a", + "libraries/3rdparty/CMock/test/iar/iar_v4/settings/cmock_demo.dbgdt": "16333ca6fc95ee3c09e1d65fb546fd714e1039a2d83a7ab88d5113f7b92e89de", + "libraries/3rdparty/CMock/test/iar/iar_v4/settings/cmock_demo.dni": "36b4ad5d2c76a305040b922a7b27d4d36f68e3ffaa13ca327db77b7f82280e6b", + "libraries/3rdparty/CMock/test/iar/iar_v4/settings/cmock_demo.wsdt": "1502e8d1c367c132f62906a92a931ced79057ef818fdc502900ab6fa092681a7", + "libraries/3rdparty/CMock/test/iar/iar_v4/srcIAR/Cstartup.s79": "73b3a3034252453843ce316daae1cc691d8289a6943105718c04e5864b384110", + "libraries/3rdparty/CMock/test/iar/iar_v4/srcIAR/Cstartup_SAM7.c": "15857d19064c45c733ffc3c3de66b9f987bdd44b8e1d29b3ae17a355faaa3472", + "libraries/3rdparty/CMock/test/iar/iar_v5/Resource/SAM7_FLASH.mac": "8ac360d36256589216b144c525d510af24457ef763becd14b137f63e953cc17d", + "libraries/3rdparty/CMock/test/iar/iar_v5/Resource/SAM7_RAM.mac": "df15f8e476e1ca1b8d3141cfe0c801881939e70cefca237a98d804742cccdcfe", + "libraries/3rdparty/CMock/test/iar/iar_v5/Resource/SAM7_SIM.mac": "6177e42e1a0a493976fb4d196b65cb1257e045db281ad48569b4b9ee6d9f37bc", + "libraries/3rdparty/CMock/test/iar/iar_v5/Resource/at91SAM7X256_FLASH.icf": "d37f75919b1793bac86891e7fa9a9142ae83de351d5ef169af909ce770ae6d01", + "libraries/3rdparty/CMock/test/iar/iar_v5/Resource/at91SAM7X256_RAM.icf": "170c34f5e702138b2b20cb696a482886936cdad8eaddb18c6c84abc5facf0a17", + "libraries/3rdparty/CMock/test/iar/iar_v5/cmock_demo.dep": "0a869be5fc1a6ba0991c5012d8d4bf21ecdaf35ce23ff2207bbe35fc72b7acc2", + "libraries/3rdparty/CMock/test/iar/iar_v5/cmock_demo.ewd": "5ebda13f0da843a1a4343bdb77c728d72ffcf8356a48eb6e3d5527428f6a1ba4", + "libraries/3rdparty/CMock/test/iar/iar_v5/cmock_demo.ewp": "019d8fe92e6206e06b9fc46938e2ac19d9b8d9e27186f4ed05bc9f1f4ffca31b", + "libraries/3rdparty/CMock/test/iar/iar_v5/cmock_demo.eww": "252dbeae342d9ad0c34d7f4a622dec74a5f400c08ad931771dc418dcc8aea7c3", + "libraries/3rdparty/CMock/test/iar/iar_v5/incIAR/AT91SAM7X-EK.h": "41b4cd1cbc547b10818daf44adeb335a7dcd6846b229195c156be0be9b1cc056", + "libraries/3rdparty/CMock/test/iar/iar_v5/incIAR/AT91SAM7X256_inc.h": "7fbf38b71f042bd3130dd7a0cc6e55130eae320e4fe705e078e5f9144c6e03b1", + "libraries/3rdparty/CMock/test/iar/iar_v5/incIAR/lib_AT91SAM7X256.h": "405c0c979b5c39e520624e0b5da725690c69f220d5985c6129b1be0bde3ff4a1", + "libraries/3rdparty/CMock/test/iar/iar_v5/incIAR/project.h": "431c8cdd8373916c97b6555fd0df183b4eed8799fe61397c5b9458d71e194edf", + "libraries/3rdparty/CMock/test/iar/iar_v5/settings/BasicInterrupt_SAM7X.cspy.bat": "2e1acdf2e55863b5e33588ee350d4ea8325a79aef8f143a1d1e4dc9a20894ebe", + "libraries/3rdparty/CMock/test/iar/iar_v5/settings/BasicInterrupt_SAM7X.dbgdt": "1967e4e174ca97638a540915477a6cbc829cf2d19bb4ad6046ebb43cef922619", + "libraries/3rdparty/CMock/test/iar/iar_v5/settings/BasicInterrupt_SAM7X.dni": "e7db4742adcbe78483a5a2bd0510ef338a2ddddcca3b4587d493c54fec22a722", + "libraries/3rdparty/CMock/test/iar/iar_v5/settings/BasicInterrupt_SAM7X.wsdt": "bfd819154f05571882a5c70fa8e47aaf4a6be521b9ce321b086ecc8b3fad2fe9", + "libraries/3rdparty/CMock/test/iar/iar_v5/settings/BasicInterrupt_SAM7X_FLASH_Debug.jlink": "94a14185b32946b9295be7a4230afb5f71ddf87bff3e9f279ce4d82feabe98f9", + "libraries/3rdparty/CMock/test/iar/iar_v5/settings/cmock_demo.cspy.bat": "98d3f600ca83fc5e0e141e27f17c92b52b28997445a64d7f63cb4312f490a580", + "libraries/3rdparty/CMock/test/iar/iar_v5/settings/cmock_demo.dbgdt": "942572f2cb503a36b9e633642c54e72dc8bc929a41a9430fe62837ea3eb837c0", + "libraries/3rdparty/CMock/test/iar/iar_v5/settings/cmock_demo.dni": "35f715df5935f7b03aae4126e33e296bd36df32f86aa00d425a09e65ce1fb66c", + "libraries/3rdparty/CMock/test/iar/iar_v5/settings/cmock_demo.wsdt": "b5f6a167aa78028b09a439565dede111bf8119403c9f290367163356008807f5", + "libraries/3rdparty/CMock/test/iar/iar_v5/settings/cmock_demo_Binary.jlink": "94a14185b32946b9295be7a4230afb5f71ddf87bff3e9f279ce4d82feabe98f9", + "libraries/3rdparty/CMock/test/iar/iar_v5/settings/cmock_demo_FLASH_Debug.jlink": "94a14185b32946b9295be7a4230afb5f71ddf87bff3e9f279ce4d82feabe98f9", + "libraries/3rdparty/CMock/test/iar/iar_v5/settings/cmock_demo_RAM_Debug.jlink": "94a14185b32946b9295be7a4230afb5f71ddf87bff3e9f279ce4d82feabe98f9", + "libraries/3rdparty/CMock/test/iar/iar_v5/srcIAR/Cstartup.s": "f01a69400b4d52ad0202134d4d1eb2b2afb8b5b90f19cab527ef2c63354725a6", + "libraries/3rdparty/CMock/test/iar/iar_v5/srcIAR/Cstartup_SAM7.c": "ffffb70bb3424fb7537c766bfa1d0831154bbc455b10a7085ddfe6e5a51cd8e3", + "libraries/3rdparty/CMock/test/rakefile": "4076929f99d8fea975aa2311bf348a806c440e1e25d6eb38b0eb16af7bfccb7a", + "libraries/3rdparty/CMock/test/rakefile_helper.rb": "b9196d105d59f0794a18f7cefadde56bd791e8a5180be7aeba0a183137d380fd", + "libraries/3rdparty/CMock/test/system/systest_generator.rb": "f0dfa97acb5355b013f632459d91d8f8ceb0bff07e78a2b62c0f8955aa9fda77", + "libraries/3rdparty/CMock/test/system/test_compilation/callingconv.h": "f0d451838c94b20cb9df40827b1667e82719adf34bc7f848ce1ab330a95f5ece", + "libraries/3rdparty/CMock/test/system/test_compilation/config.yml": "55da291e818f575aaec65bfd678b9bc92badc2775bd012ea465d124bb03f6874", + "libraries/3rdparty/CMock/test/system/test_compilation/const.h": "452666930532c934d30c06081a1207422064421e2111ef3d774f60801c8d0298", + "libraries/3rdparty/CMock/test/system/test_compilation/inline.h": "faae36b96040414ffbbd8c9cd0ddcf1d918b5431ad81c12e391fe8b283ae915f", + "libraries/3rdparty/CMock/test/system/test_compilation/osek.h": "6283a1ba1ce53af3c73e246ec073497aec8d5da7e573f8474a45e1ccaf72730c", + "libraries/3rdparty/CMock/test/system/test_compilation/parsing.h": "f6f31c9b303aaf2948ed48cd6e8dcc0d7cef5bacc91b5746b11d432701911bd4", + "libraries/3rdparty/CMock/test/system/test_interactions/all_plugins_but_other_limits.yml": "23512e99944a08a4517037fddc6f13451118a23a19327270e7f0cde0a882643e", + "libraries/3rdparty/CMock/test/system/test_interactions/all_plugins_coexist.yml": "2fa3f85fa5bcfd432d7e82be741d3e4bce969182d3b3c4335ab2bac494a8b3e2", + "libraries/3rdparty/CMock/test/system/test_interactions/array_and_pointer_handling.yml": "afd7b725c51a0268b2fe582416b59e303c611a86af8359627a10483ccf4ac3dc", + "libraries/3rdparty/CMock/test/system/test_interactions/basic_expect_and_return.yml": "188b82892feac0f148d9b8d1edf9929e4145d8adb7ffc0b2752be3dfe5c620d8", + "libraries/3rdparty/CMock/test/system/test_interactions/const_primitives_handling.yml": "2610282b06d4b05f3f7e9b22254278648a29dcf1808f8206ac92d183ed7c7ebd", + "libraries/3rdparty/CMock/test/system/test_interactions/doesnt_leave_details_behind.yml": "5d39bdb3fb162c3664ed180754c6b8042c12ad7e29ccc65b42c312ccfeed322a", + "libraries/3rdparty/CMock/test/system/test_interactions/enforce_strict_ordering.yml": "85f9cc7ce2eb22b0da825ca8d6e38a05bffb69dab0e66c0e516753b74fcfe10b", + "libraries/3rdparty/CMock/test/system/test_interactions/expect_and_return_custom_types.yml": "361e10a02795595bf45c64b2026d9342fff1e4d0308fb5202413bffb84bd3b10", + "libraries/3rdparty/CMock/test/system/test_interactions/expect_and_return_treat_as.yml": "6601ab58a7b0719e26124b40d3aed2272a032f4ff3ae45da241b0b39bdf03ce9", + "libraries/3rdparty/CMock/test/system/test_interactions/expect_and_throw.yml": "18eb54309f69744598138a5b3f8ef4b898bbc3fb46b1a42306016d6ed566c1d3", + "libraries/3rdparty/CMock/test/system/test_interactions/expect_any_args.yml": "1348aa720acf85e117c6c23353f205b3438eac30baee86efeacbdc04f2645d27", + "libraries/3rdparty/CMock/test/system/test_interactions/fancy_pointer_handling.yml": "a3033a4e31bcfbf66126059476d9fdc7bdaa197a8b6568a382c93e373110abb4", + "libraries/3rdparty/CMock/test/system/test_interactions/function_pointer_handling.yml": "85c81773cf1dcf80dc84ccb433d8442aabde1b8635292819315287e828b93f63", + "libraries/3rdparty/CMock/test/system/test_interactions/ignore_and_return.yml": "4300c43c2e59a39111809e3e4571484e45146344a20d706a2c0c8618159fa2ad", + "libraries/3rdparty/CMock/test/system/test_interactions/ignore_strict_mock_calling.yml": "08c69a141af52960e0e9043d717ff5df442f7889edcd145898c0cade3fcc3e72", + "libraries/3rdparty/CMock/test/system/test_interactions/newer_standards_stuff1.yml": "f2073b808f4cc2d918612ff1c910fbc4a8ead998b12fcbc7608d430fe71d8eb9", + "libraries/3rdparty/CMock/test/system/test_interactions/nonstandard_parsed_stuff_1.yml": "23db82fdbc1643ed58a58c20a4154e75b8559509a3f827fb43e9c5965103e4f6", + "libraries/3rdparty/CMock/test/system/test_interactions/nonstandard_parsed_stuff_2.yml": "f51bae36303d532e357105195369615ab17560234efb1f0141973c2794ac0693", + "libraries/3rdparty/CMock/test/system/test_interactions/out_of_memory.yml": "4b4509e9c368fdec539be90daa164185175849afcf39c2d0a9c4d9ff9e423191", + "libraries/3rdparty/CMock/test/system/test_interactions/parsing_challenges.yml": "6f9a0d35489a6e6435211923ea43349e17cb68fc9652cb98511be8f74a78a079", + "libraries/3rdparty/CMock/test/system/test_interactions/return_thru_ptr_and_expect_any_args.yml": "64915233c5cb94bdff20cf89f650de58f278a214417bacf52129b67d67208cc0", + "libraries/3rdparty/CMock/test/system/test_interactions/return_thru_ptr_ignore_arg.yml": "cde16df22f47d782043ce85063cd7d53dcb3473eebd25631bbd18d7d87c38db0", + "libraries/3rdparty/CMock/test/system/test_interactions/struct_union_enum_expect_and_return.yml": "c926cca48cce1932fd57dc871187073cf3e35d12569369695a18a4a6fb7be3f8", + "libraries/3rdparty/CMock/test/system/test_interactions/struct_union_enum_expect_and_return_with_plugins.yml": "29f087a7f1217b3724517523dbf122bfe07277505549c465b1821df926b75c6e", + "libraries/3rdparty/CMock/test/system/test_interactions/stubs_with_callbacks.yml": "5e2cf62796105fa958e9528d3a30cff3a83c4f9d23385ab75a5939841647c486", + "libraries/3rdparty/CMock/test/system/test_interactions/unity_64bit_support.yml": "91a78d7f1216c1c18388116c169d2da0994351e61155fa6bb622bf16b635838e", + "libraries/3rdparty/CMock/test/system/test_interactions/unity_ignores.yml": "f6e9193481c9f0a5c5ab50833fea66da7bc34977b35a176fd613130ec883bf92", + "libraries/3rdparty/CMock/test/system/test_interactions/unity_void_pointer_compare.yml": "b92f86081c7771eca83efad7e38e071ee5bf8ce2e1a410df7d7af9c392486e6e", + "libraries/3rdparty/CMock/test/targets/clang_strict.yml": "4d477d7d7c1ffe0ce9175b89d4812119c7a0a79e924290e59c3dbd46b0975de3", + "libraries/3rdparty/CMock/test/targets/gcc.yml": "f012ab43326a37713fb72f33c0e03771fbbf4347e549de6cfdb476cda0ad9118", + "libraries/3rdparty/CMock/test/targets/gcc_64.yml": "0c0df186d99f01666f0d8145289179d86298c3671cdd7083c5e3c4a41625d5d2", + "libraries/3rdparty/CMock/test/targets/gcc_tiny.yml": "c9b57fd070a3e98fc3c237c9b3b99b31d0cf01cc0565b81812f57f68ca340714", + "libraries/3rdparty/CMock/test/targets/iar_arm_v4.yml": "fe0f205df28d23f4a940c1efce9e74ddd227427eaa55a70a283d8ff0722e45f4", + "libraries/3rdparty/CMock/test/targets/iar_arm_v5.yml": "7649d656896a709b2124b232bbe2d4911ae141617ccdd947e1f1541f23615bed", + "libraries/3rdparty/CMock/test/test_helper.rb": "7561fd77c8b7c6ec581d2e946db129893dd842d813801bd5ff6dfb42eb98cb19", + "libraries/3rdparty/CMock/test/unit/cmock_config_test.rb": "25ba1146b5fdf8ceca1c3fe385dd4a20f6e51a5a8b5ba83c8dbc935d9fa570ad", + "libraries/3rdparty/CMock/test/unit/cmock_config_test.yml": "2b1460d832657fe5f69b70b92a7bcd40edd42346aea4bab20043ffecd43719e4", + "libraries/3rdparty/CMock/test/unit/cmock_file_writer_test.rb": "88cf580634a0907f12b8068f1deefe7e90a14b0111d55da6d413f3827347b9d6", + "libraries/3rdparty/CMock/test/unit/cmock_generator_main_test.rb": "dececdef4bbc98f3fc6aaf40f10c3af850b03ac6e3fa627bd6e7350a96a41075", + "libraries/3rdparty/CMock/test/unit/cmock_generator_plugin_array_test.rb": "560f97841377b5ae6704cd4363e0d21c8883abcb7f5d2907608e6c0aa68c3518", + "libraries/3rdparty/CMock/test/unit/cmock_generator_plugin_callback_test.rb": "4d941ccc21ba7c3963697ae1266e24d565c887bc536fa639edb42dd58c287aa2", + "libraries/3rdparty/CMock/test/unit/cmock_generator_plugin_cexception_test.rb": "4a4bdfa48a17829dd1c3d58cfd4da6769bfde6bd592b55afc2685d24a667fec1", + "libraries/3rdparty/CMock/test/unit/cmock_generator_plugin_expect_a_test.rb": "a9e543df7153bb147b90a94b09b7a54182d8f3f54effb9cff15a0fd58aae4937", + "libraries/3rdparty/CMock/test/unit/cmock_generator_plugin_expect_any_args_test.rb": "56c461cd0c0dbd14dfe0eaaf55989077c04067e70c13e561e27634d027da90ae", + "libraries/3rdparty/CMock/test/unit/cmock_generator_plugin_expect_b_test.rb": "6c4179cb40ae3cc3d7565d8fac5d0396854000fe435b64d85b5efda87e49ecef", + "libraries/3rdparty/CMock/test/unit/cmock_generator_plugin_ignore_arg_test.rb": "c433e1db36e15ec882c9b555b7de2901d6f5e316887b2224d71f72e0a841b855", + "libraries/3rdparty/CMock/test/unit/cmock_generator_plugin_ignore_test.rb": "163ba76164e27a44b773a41bf99a898e29b4532f79c157f8994dd4e354dd1265", + "libraries/3rdparty/CMock/test/unit/cmock_generator_plugin_return_thru_ptr_test.rb": "62a488259440c6b8ae34ad9265bc2c9b2741498d0d0ed7f408ecb39935aa989b", + "libraries/3rdparty/CMock/test/unit/cmock_generator_utils_test.rb": "5cfb64fde1d437bbb70c35745a9c95ad5f1093eee2017b3db77b096526b0eedf", + "libraries/3rdparty/CMock/test/unit/cmock_header_parser_test.rb": "7c8e84c06144ae72ae3c5c70c148f3557c81440e4a3662283a0b77f120051197", + "libraries/3rdparty/CMock/test/unit/cmock_plugin_manager_test.rb": "510fe651508db42d428539b63fbf2aa5c2601ac4b5f1fe0d5d756ba4f03f08e5", + "libraries/3rdparty/CMock/test/unit/cmock_unityhelper_parser_test.rb": "e77b10af099223b17e9c524d0e6520a8d90ef878f9326d8729a3d0cab437d172", + "libraries/3rdparty/CMock/vendor/behaviors/Manifest.txt": "f6def0d4d599a6d17c7b0a6e5cc65824ba9312a85c4d9640f9f40f3a65fe6e39", + "libraries/3rdparty/CMock/vendor/behaviors/Rakefile": "be9b1156744f3cf65e64c075ae5385313ce59e5ac4178ed8c63371bc817d214f", + "libraries/3rdparty/CMock/vendor/behaviors/lib/behaviors.rb": "c818cb720cce5d3da2b1a1e09601f2329f8889cccfdaf4e7ad7482d2524609d0", + "libraries/3rdparty/CMock/vendor/behaviors/lib/behaviors/reporttask.rb": "6abac47d73976e719ef3b2e47ffde7e048a08044e807b8d5b3eca7ab18c3acd8", + "libraries/3rdparty/CMock/vendor/behaviors/test/behaviors_tasks_test.rb": "04ef3a3e45cd62bc102267a2919240a9a021438e0dafccf2d817234104426ba9", + "libraries/3rdparty/CMock/vendor/behaviors/test/behaviors_test.rb": "4240fa9b7f31dcff3c5509827ebed298d2c388f55b8701221874300e815d76e0", + "libraries/3rdparty/CMock/vendor/behaviors/test/tasks_test/Rakefile": "0c9e136971e8aeb54404b4827de1b85cabb5512a8aaf8f36929e052339144638", + "libraries/3rdparty/CMock/vendor/behaviors/test/tasks_test/lib/user.rb": "b5527ab1ec2cde94b51b84e785840a076ceb4df87f8c71a52eb9119a1785f1d5", + "libraries/3rdparty/CMock/vendor/behaviors/test/tasks_test/test/user_test.rb": "e12e02edcc9868ad43634427fef9873e7e6a03a6144d59ed302d1f40beab18d6", + "libraries/3rdparty/CMock/vendor/c_exception/Gemfile": "cb78daa14792e77465dd161b635ba85f7a143bf30e003cd8fb16b01b7a166f6d", + "libraries/3rdparty/CMock/vendor/c_exception/Gemfile.lock": "15f6fce88a07c7d1c88ca17351debad274a78337fe6149e84c1d098ba5afd8a1", + "libraries/3rdparty/CMock/vendor/c_exception/LICENSE.txt": "4a7d2fd8c1a6b383df443b91d716cca25809e901fdc2f473026c17f00a02bb5d", + "libraries/3rdparty/CMock/vendor/c_exception/README.md": "9420da200b2d36c4948268b25f82cac4a71d66c5e4ede3012d714d2ce30d230f", + "libraries/3rdparty/CMock/vendor/c_exception/docs/CException.md": "70fb5bb5fd31b2f2a3414f67dc55544af51afd2a16c00a50db2ca74f1c55df6b", + "libraries/3rdparty/CMock/vendor/c_exception/docs/ThrowTheSwitchCodingStandard.md": "a1838b8c9e20ac3c15bf96742b716b6621c0607c9273ae0f92a6769e3aa45f41", + "libraries/3rdparty/CMock/vendor/c_exception/lib/CException.c": "02ded3b989fe1828ba78ede51a3b8f0624fd886da7d714deab3919938a8e205e", + "libraries/3rdparty/CMock/vendor/c_exception/lib/CException.h": "7feecde43aa33b8c2d22cc49fb51cf7cf8e1af04d8ec3be80d469d3e19cb7a33", + "libraries/3rdparty/CMock/vendor/c_exception/project.yml": "a40754c9266fa0905e42dd4dfd67e8248a26714d7f9bcd46a9dd2f5f497fc1bb", + "libraries/3rdparty/CMock/vendor/c_exception/test/TestException.c": "08979f5df6d14e827a261103543f70d0ede73d801ec3b343058f812600f01d4d", + "libraries/3rdparty/CMock/vendor/c_exception/test/support/CExceptionConfig.h": "f3f9e263f9dc8779684e0171241597d583888f971b0c224e92c02665eca8bc98", + "libraries/3rdparty/CMock/vendor/unity/CMakeLists.txt": "7028a7282b2e5703e9222c7608a8d3e6ff5ee901b911614d8f993eb3006a4f54", + "libraries/3rdparty/CMock/vendor/unity/LICENSE.txt": "3ed9b51da86f52c729c96cc99fdde6444b2297c788a9cf4ad1d3649dc34c4985", + "libraries/3rdparty/CMock/vendor/unity/README.md": "0a81a08645acbaf71afff965d0c7474a6a31af9d46cc156b78f7e35687802322", + "libraries/3rdparty/CMock/vendor/unity/auto/colour_prompt.rb": "2f879fa491913d5c32312353c2df6288fbdae11d78f43264078eab4c561f6c34", + "libraries/3rdparty/CMock/vendor/unity/auto/colour_reporter.rb": "2e6fbc6a1718d1f755378a934526a5b4fe11ef045302ac1e1c251e927477d697", + "libraries/3rdparty/CMock/vendor/unity/auto/generate_config.yml": "85c5702a168e366148e8ec89df416eae888278a526c79459162c0f37641a02fe", + "libraries/3rdparty/CMock/vendor/unity/auto/generate_module.rb": "ee6d57c2470555f987fd3cdc368ac193458366653dca363f088ba1ccb43a0c87", + "libraries/3rdparty/CMock/vendor/unity/auto/generate_test_runner.rb": "11edb8f93baa042ff543cb8c1d06c7f87672cc172318c13f9c2d675dfd0bc7e6", + "libraries/3rdparty/CMock/vendor/unity/auto/parse_output.rb": "ad1910bfff4d778f1fc53c111588238ee003809eb60717fde6dce7cf854879c6", + "libraries/3rdparty/CMock/vendor/unity/auto/run_test.erb": "d281f5070bc3627e69b515be4d5be243d2d96ec84857deb84ae8c97fd6e4e6ef", + "libraries/3rdparty/CMock/vendor/unity/auto/stylize_as_junit.rb": "fd0c45171391cbd0bc63cd5d4499e89eb51d087cf9c6c5ac2d4127e3d56bd9eb", + "libraries/3rdparty/CMock/vendor/unity/auto/test_file_filter.rb": "a69a44fccafbb504635163793799aa59809035951d7f258547d64d4145131a60", + "libraries/3rdparty/CMock/vendor/unity/auto/type_sanitizer.rb": "ecc5677ac9820f343aca50893463602fca940c24daf07a4784b4e9e0801c3f4b", + "libraries/3rdparty/CMock/vendor/unity/auto/unity_test_summary.py": "e46350b7132f04a7bb339d47bcef11ae0cb9e74c2050d0d75697b33c253c2895", + "libraries/3rdparty/CMock/vendor/unity/auto/unity_test_summary.rb": "721818505aab3199a712e4d6f964c84b07720f84a8fcf504349b586f05e8cd2b", + "libraries/3rdparty/CMock/vendor/unity/auto/unity_to_junit.py": "0743f26b5ae67af204981293337f9cc9a8cb46c90aaa3f46f31fd9658ab65990", + "libraries/3rdparty/CMock/vendor/unity/docs/ThrowTheSwitchCodingStandard.md": "f0f000eb1fc32b3a6684da894ed816d09ba077ad85e65e44f1f7998da47ef178", + "libraries/3rdparty/CMock/vendor/unity/docs/UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf": "28e8687d90c111ee8c249a7748495a0bfe00a3f35231b026ac73eed01d32eb34", + "libraries/3rdparty/CMock/vendor/unity/docs/UnityAssertionsReference.md": "6024576af0c49ffdec47ae174d22314848a175052d9b7f89fc82794757eecb93", + "libraries/3rdparty/CMock/vendor/unity/docs/UnityConfigurationGuide.md": "493d4860d561e583d992367df0f0efba226961c1dba8fd2bb4d2889a7308224d", + "libraries/3rdparty/CMock/vendor/unity/docs/UnityGettingStartedGuide.md": "54193aa975c291e62682c65fe088b7f960bedf4b58e2ce63e2dc1696a8ca3f6f", + "libraries/3rdparty/CMock/vendor/unity/docs/UnityHelperScriptsGuide.md": "f8b89d36c0b901265fd3366f0a93045218c03adf501c240a5570bc68e22ceaac", + "libraries/3rdparty/CMock/vendor/unity/examples/example_1/makefile": "a6b1cba50764fa8f18ef16dd11f4f1e7cd90e614d14bfe7dc22239245751cb6a", + "libraries/3rdparty/CMock/vendor/unity/examples/example_1/readme.txt": "4d72d51f1a385cd4aeb594e4485ca2439d5b86247523cd2d2b89acc2173d8a24", + "libraries/3rdparty/CMock/vendor/unity/examples/example_1/src/ProductionCode.c": "9d6b0ae761f7dfc008d6547031ff92de63976f5621b6feef2a29614cec51b357", + "libraries/3rdparty/CMock/vendor/unity/examples/example_1/src/ProductionCode.h": "25cfcc42b79140f4c399363e0ef10a6e518a1831e10c61cc138d6d9a230425ce", + "libraries/3rdparty/CMock/vendor/unity/examples/example_1/src/ProductionCode2.c": "c2cc0a76cb2ea145d3861bd9ccc467ac45ad3e8230d5075ed174ce3a5cd50a76", + "libraries/3rdparty/CMock/vendor/unity/examples/example_1/src/ProductionCode2.h": "d4db1a4eea2bee3d668a203d4953f415f23be64a826c5a73059ef221f61b3882", + "libraries/3rdparty/CMock/vendor/unity/examples/example_1/test/TestProductionCode.c": "33e4b165d437c376f2393da59be0b22a3a458ebbe94cc2b340159b71f2d8bb74", + "libraries/3rdparty/CMock/vendor/unity/examples/example_1/test/TestProductionCode2.c": "11387f2ecdc97ee3344c0df42123e73cae899702b348d5597e09e9760db267aa", + "libraries/3rdparty/CMock/vendor/unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c": "2c84d6b954a6810a7c509dc861ee0c18a562dd23a5dd7747ea524f0c1467d9a4", + "libraries/3rdparty/CMock/vendor/unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c": "b6ec7bb984eddea80c178ecb30f6f772325a745ff9812a5e3f41f236c43e19e0", + "libraries/3rdparty/CMock/vendor/unity/examples/example_2/makefile": "da2bf7ebba3456dec77ef500884654fdcffeb514ecbb84dc9cf930821ec2e9ec", + "libraries/3rdparty/CMock/vendor/unity/examples/example_2/readme.txt": "a03bf4ac2d294a037189b42f7bf8fdff0bf50524857e3f8933eba76085f22f04", + "libraries/3rdparty/CMock/vendor/unity/examples/example_2/src/ProductionCode.c": "75136eec7a43d0dbe980dea19ec46f6e16c0da92093686e59f6143d8ae8b5bb7", + "libraries/3rdparty/CMock/vendor/unity/examples/example_2/src/ProductionCode.h": "25cfcc42b79140f4c399363e0ef10a6e518a1831e10c61cc138d6d9a230425ce", + "libraries/3rdparty/CMock/vendor/unity/examples/example_2/src/ProductionCode2.c": "a929e7ef393ec5ccc53e3f885d663a1c8fbe5cc5f72a0fcad5c0d2f6cbc8b210", + "libraries/3rdparty/CMock/vendor/unity/examples/example_2/src/ProductionCode2.h": "d4db1a4eea2bee3d668a203d4953f415f23be64a826c5a73059ef221f61b3882", + "libraries/3rdparty/CMock/vendor/unity/examples/example_2/test/TestProductionCode.c": "7db7b7d9e7216fdc0814ff8bbecc37f40e573006207b47cfd8954469ebc9b502", + "libraries/3rdparty/CMock/vendor/unity/examples/example_2/test/TestProductionCode2.c": "332f23e940a9676504c84dc92d1a6cf72cd9204afe7f664c16b58ee7dbff312d", + "libraries/3rdparty/CMock/vendor/unity/examples/example_2/test/test_runners/TestProductionCode2_Runner.c": "14aef95de310f1e1381feaaf256ea94d0905a538311b5e3fdc944f927e75b287", + "libraries/3rdparty/CMock/vendor/unity/examples/example_2/test/test_runners/TestProductionCode_Runner.c": "a782491bcd8dd857b26a62df58e8671f1cb7641d6c0fe7f7853c079732ccd8e9", + "libraries/3rdparty/CMock/vendor/unity/examples/example_2/test/test_runners/all_tests.c": "fe5c0418201d70dc696b0db6acf60b2ea0069d74fa94fb96d7169b8752e00d17", + "libraries/3rdparty/CMock/vendor/unity/examples/example_3/helper/UnityHelper.c": "091c2466d25deffd8958332ad03d393ca1ec1b1f6150c16626d57d5901eb1b21", + "libraries/3rdparty/CMock/vendor/unity/examples/example_3/helper/UnityHelper.h": "a95bb6d3704c51637bb0855787236b41229e3836601ba97e88768f95779f3d4d", + "libraries/3rdparty/CMock/vendor/unity/examples/example_3/rakefile.rb": "7b3b7d271caeb7af887b08986c9922ec331c8515d654ffb3e200833aa9be809f", + "libraries/3rdparty/CMock/vendor/unity/examples/example_3/rakefile_helper.rb": "bfc4aca33ed7bf68ffebf686790ec0c9e7a7bd23527147e81c10f4fd2dc38be0", + "libraries/3rdparty/CMock/vendor/unity/examples/example_3/readme.txt": "2af5e731fb1db0ddf5c739f0b08fb2724e4acc7efb7ee0a02fe474a3e69d284a", + "libraries/3rdparty/CMock/vendor/unity/examples/example_3/src/ProductionCode.c": "75136eec7a43d0dbe980dea19ec46f6e16c0da92093686e59f6143d8ae8b5bb7", + "libraries/3rdparty/CMock/vendor/unity/examples/example_3/src/ProductionCode.h": "25cfcc42b79140f4c399363e0ef10a6e518a1831e10c61cc138d6d9a230425ce", + "libraries/3rdparty/CMock/vendor/unity/examples/example_3/src/ProductionCode2.c": "a929e7ef393ec5ccc53e3f885d663a1c8fbe5cc5f72a0fcad5c0d2f6cbc8b210", + "libraries/3rdparty/CMock/vendor/unity/examples/example_3/src/ProductionCode2.h": "d4db1a4eea2bee3d668a203d4953f415f23be64a826c5a73059ef221f61b3882", + "libraries/3rdparty/CMock/vendor/unity/examples/example_3/target_gcc_32.yml": "2e61fc6bc7930929985f1ea1ec5d0019fe1d133c01555c86b01b20145fb6aaa4", + "libraries/3rdparty/CMock/vendor/unity/examples/example_3/test/TestProductionCode.c": "b0e815e2285b1730d7dcd24b400d15b4efccfe5e4776d96248a2165c2f0caec6", + "libraries/3rdparty/CMock/vendor/unity/examples/example_3/test/TestProductionCode2.c": "895f437abd40bd461fd86a3b8ed6bc02c5c283fc3926aafe53b473e477fa0a5a", + "libraries/3rdparty/CMock/vendor/unity/examples/example_4/meson.build": "673e6c3c44d3e9933df54d13f27d1b90526ec2c990709aabc0e62a40fb20bf86", + "libraries/3rdparty/CMock/vendor/unity/examples/example_4/readme.txt": "d16faba668694cacde12746c58ec512de301218543217a9644e4e269bee8ab0c", + "libraries/3rdparty/CMock/vendor/unity/examples/example_4/src/ProductionCode.c": "9d6b0ae761f7dfc008d6547031ff92de63976f5621b6feef2a29614cec51b357", + "libraries/3rdparty/CMock/vendor/unity/examples/example_4/src/ProductionCode.h": "25cfcc42b79140f4c399363e0ef10a6e518a1831e10c61cc138d6d9a230425ce", + "libraries/3rdparty/CMock/vendor/unity/examples/example_4/src/ProductionCode2.c": "c2cc0a76cb2ea145d3861bd9ccc467ac45ad3e8230d5075ed174ce3a5cd50a76", + "libraries/3rdparty/CMock/vendor/unity/examples/example_4/src/ProductionCode2.h": "d4db1a4eea2bee3d668a203d4953f415f23be64a826c5a73059ef221f61b3882", + "libraries/3rdparty/CMock/vendor/unity/examples/example_4/src/meson.build": "61880caad3c43396a16c5b6bd5a856480c55c129bf1fc282b874a99c87ab6af0", + "libraries/3rdparty/CMock/vendor/unity/examples/example_4/subprojects/unity.wrap": "59d1f20c0ada120ee62ef1baf30be51ebaaf40d30b16e4da014f9d58023b7a8a", + "libraries/3rdparty/CMock/vendor/unity/examples/example_4/test/TestProductionCode.c": "f3a8fa16e599d6aa7a0c9cf604ea1d42ff5466244372e00543fc3b2e116f0d41", + "libraries/3rdparty/CMock/vendor/unity/examples/example_4/test/TestProductionCode2.c": "26c0ee5fabc061cfd32ae891ab16f4b985f306dfea1a939d00e89a3c1ae6f25e", + "libraries/3rdparty/CMock/vendor/unity/examples/example_4/test/meson.build": "0e5be2e9c4406bf144f41b04c56ab62872b5e1c60c47c1ec81679b3b65a6236a", + "libraries/3rdparty/CMock/vendor/unity/examples/example_4/test/test_runners/TestProductionCode2_Runner.c": "2c84d6b954a6810a7c509dc861ee0c18a562dd23a5dd7747ea524f0c1467d9a4", + "libraries/3rdparty/CMock/vendor/unity/examples/example_4/test/test_runners/TestProductionCode_Runner.c": "b6ec7bb984eddea80c178ecb30f6f772325a745ff9812a5e3f41f236c43e19e0", + "libraries/3rdparty/CMock/vendor/unity/examples/example_4/test/test_runners/meson.build": "a3552bd0a1d0ddd01dc5a70effa8582b1f1bf07b706cea47da4b512b040b06e2", + "libraries/3rdparty/CMock/vendor/unity/examples/unity_config.h": "a7038b3cd217dc3d9534ce8d4d58c842912ee63ac35718d4917a605635eb941b", + "libraries/3rdparty/CMock/vendor/unity/extras/eclipse/error_parsers.txt": "67e309b5e803a22ba22c347aa5123cbbe73edcbfe9950aa0fd74576a4add1a12", + "libraries/3rdparty/CMock/vendor/unity/extras/fixture/rakefile.rb": "7392cb66dfa0de3c644934adf64f4e03ff0a2a2128fd10f9df5600e9a991d764", + "libraries/3rdparty/CMock/vendor/unity/extras/fixture/rakefile_helper.rb": "8ff10722c9808c465e02b83f062d24ad47371cb09be32965d2ec455742b5e3f7", + "libraries/3rdparty/CMock/vendor/unity/extras/fixture/readme.md": "6a2e59367724a64ae4fcda3de28158006c72a0d4b30b9abeac15ba415fe9f145", + "libraries/3rdparty/CMock/vendor/unity/extras/fixture/src/unity_fixture.c": "c0ccd5532ff2f73c15eef21533d6bf292b2b6173bb6133e2308ab24c222ea8dc", + "libraries/3rdparty/CMock/vendor/unity/extras/fixture/src/unity_fixture.h": "73854da3d615a041ab114be64bb98debfa8b186ac9741682f3de4cabc153100b", + "libraries/3rdparty/CMock/vendor/unity/extras/fixture/src/unity_fixture_internals.h": "adf665b853438b5e35ffc72e6d0f1bd404a09188fbd4fc7c64c2eb30b25781ea", + "libraries/3rdparty/CMock/vendor/unity/extras/fixture/test/Makefile": "f61e0e71da2aa1e38d4ba244178ef7ddd976447bc57332e17ac62319e1765ee3", + "libraries/3rdparty/CMock/vendor/unity/extras/fixture/test/main/AllTests.c": "b90030dde0bdea78a78df99e177bba1aa6a162a21527027920e01abbe991e8f5", + "libraries/3rdparty/CMock/vendor/unity/extras/fixture/test/template_fixture_tests.c": "3ca4c500397fc3dd7370b419e7d4f7abb3a8b05deacaf72a4e2ccb396669003a", + "libraries/3rdparty/CMock/vendor/unity/extras/fixture/test/unity_fixture_Test.c": "6edfe13bd81264856f4bbe3d421ab40f1f47529e0a57f7b95b1b13155d51db24", + "libraries/3rdparty/CMock/vendor/unity/extras/fixture/test/unity_fixture_TestRunner.c": "cabed04e1b026bd8ae2b47f54e8777899c3564cae952e62fc59965d2117a3215", + "libraries/3rdparty/CMock/vendor/unity/extras/memory/rakefile.rb": "9f53e177b9066458d30e94c31e8ef8bb6f66b2eba7c86137d20ebbdab8e42787", + "libraries/3rdparty/CMock/vendor/unity/extras/memory/rakefile_helper.rb": "bf752945bdbc26c9d9bb4acfbe3bd4210c6d1e7b811af755024b9000f0edf035", + "libraries/3rdparty/CMock/vendor/unity/extras/memory/readme.md": "5cc935c39537f3a403a80b82c1ba24d6ba895275927a6b5db8362e233438a97a", + "libraries/3rdparty/CMock/vendor/unity/extras/memory/src/unity_memory.c": "7bc202de8e950466f713b2c3918beb824a10d33cd7df43058dd4676573fc2645", + "libraries/3rdparty/CMock/vendor/unity/extras/memory/src/unity_memory.h": "85ea1b5fa55bd59f03901fad4272a938a33696d9f0821d085ba6fc5463fb391b", + "libraries/3rdparty/CMock/vendor/unity/extras/memory/test/Makefile": "4530559b0cf8de81a35d3e5901aa3b5bdfb523cba3458bac37e1beebedde0e63", + "libraries/3rdparty/CMock/vendor/unity/extras/memory/test/unity_memory_Test.c": "64e492cafc7da28265299706ee3c663db66edf3c5556cb27f06039d1876f63d8", + "libraries/3rdparty/CMock/vendor/unity/extras/memory/test/unity_memory_TestRunner.c": "8265bf36612d73d5286303a4259b444e7e86ed011551c3be9f43be6a1804a781", + "libraries/3rdparty/CMock/vendor/unity/extras/memory/test/unity_output_Spy.c": "c18d6d3034a751915b3deb137b098eee14498a06b4f7bf8a8a59ffe4d260d4a7", + "libraries/3rdparty/CMock/vendor/unity/extras/memory/test/unity_output_Spy.h": "20f9beac9acaf917cbf2011fbae1e5b919c6876646ca48e02379b72a12f7f971", + "libraries/3rdparty/CMock/vendor/unity/meson.build": "96c3a2e5f3817783e7ed0a6fead1bdbd6e486d89da020a9071a4fd57efd809f3", + "libraries/3rdparty/CMock/vendor/unity/src/CMakeLists.txt": "d142a855d72394a3b5bbac8ec8162d64fa4705bd546ec2c95f82d19de862d8ec", + "libraries/3rdparty/CMock/vendor/unity/src/meson.build": "8323ce6255874c200d74a2dc6057c099b056084a59f679733ecdbec89d465ac7", + "libraries/3rdparty/CMock/vendor/unity/src/unity.c": "0fe7ab63c9ccde2a797a84d2f458a9981583e9c5ae702a3b4a1d521e97eee210", + "libraries/3rdparty/CMock/vendor/unity/src/unity.h": "cc15d99a35b6488fd3434bd60db51b99cc22fd98975991d3ec247eb31ff98cb5", + "libraries/3rdparty/CMock/vendor/unity/src/unity_internals.h": "90657c9162b5e5f8381806639a0071958bb9b3d42622ebef1a0857c9caf0ca9a", + "libraries/3rdparty/CMock/vendor/unity/test/Makefile": "7c04243c305b1edf102bde8b209a192d93ee7e4442b9a46c232e8ff20c5c522e", + "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_cmd.c": "832ec9c8c30fd374adea6620dd38c19c689047bdad0513984066e525eefc0723", + "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_def.c": "246d3d9bc73ccef28f7a70b8748d95cd31eb85b9874e6972d30be1f74000fb8c", + "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_head1.c": "ed31f2c63e4bb7ba015a5388429b34287ecefa098551e55ae5864b883c3cdad4", + "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_head1.h": "fc279a298e45f70a559d05132ae888973c8f5aad913c0b2d6d8425ccbde5c998", + "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_mock_cmd.c": "b826f44458088555058b6c3b9c7ef15c2a5528c8efe01034d0f1debee06a739e", + "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_mock_def.c": "1016f1162a3ea3be49dffd824e529493d2845860d1139cb44cc32f0fe0a0701f", + "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_mock_head1.c": "cb7b253cefa315d7b4edaa386bffb63a728f3b33c869bf55ecfcd53d1e47eaaf", + "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_mock_head1.h": "9cb779d98b40e5dfcf70db57f7d3deae6310cac80547140c972ecde585f56c18", + "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_mock_new1.c": "4e5d73972dce4276dc688016eeb310e93ef96ea7beee0e6839092f0459798856", + "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_mock_new2.c": "74418cfefe544ac366a043972648c31742b2a4652155507c93a1a2a38471a5eb", + "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_mock_param.c": "6a8edda1c9b5a56d38e705d2d0341232ca9a55f1fb7383171475cb972c9b6c18", + "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_mock_run1.c": "4e5d73972dce4276dc688016eeb310e93ef96ea7beee0e6839092f0459798856", + "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_mock_run2.c": "74418cfefe544ac366a043972648c31742b2a4652155507c93a1a2a38471a5eb", + "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_mock_yaml.c": "763d37bc5a5edc7566bf6625dd38878aed8cc94a5cec8f6e23aee16e30bdaad6", + "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_new1.c": "983abee21894ba9fb5d667a69b046558867f9f16eaf546d259671f54dd4be626", + "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_new2.c": "9726bdaec7a5c8e99b4e6bbfc41b91c8687665bbafdb617be4514eadc30b023c", + "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_param.c": "7ab6834f8376908625b9999a4c5dad32ad65c8f3fd852e78b6d9c3bc871fc639", + "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_run1.c": "983abee21894ba9fb5d667a69b046558867f9f16eaf546d259671f54dd4be626", + "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_run2.c": "9726bdaec7a5c8e99b4e6bbfc41b91c8687665bbafdb617be4514eadc30b023c", + "libraries/3rdparty/CMock/vendor/unity/test/expectdata/testsample_yaml.c": "17714f87e28c7723608fdc832189965482404e3540e3f3ec55afa7f07054e0a7", + "libraries/3rdparty/CMock/vendor/unity/test/rakefile": "5dc9eb1c3ba23e040a3b413d613f252ab2b475ed741fa3690ecbce765e339156", + "libraries/3rdparty/CMock/vendor/unity/test/rakefile_helper.rb": "b3cfef74c49503599d02c4ca75a7fe72622b97c2ac217ebc853a9d545b419405", + "libraries/3rdparty/CMock/vendor/unity/test/spec/generate_module_existing_file_spec.rb": "41d0b6bf8255f97e4fbf6c4f5fb2dcc61d846d2ddaf2cad763c1f500b8a68727", + "libraries/3rdparty/CMock/vendor/unity/test/targets/ansi.yml": "371ad9aaf2dc447000f8d575b3c6372444cc318e890bb968e331a9d990d8aebe", + "libraries/3rdparty/CMock/vendor/unity/test/targets/clang_file.yml": "afbb70db8cc433aca8e6ea3d04d2f5142cc8bd1a8f6e421006038c9601222d32", + "libraries/3rdparty/CMock/vendor/unity/test/targets/clang_strict.yml": "336cc5344beccd0c3a6c83227b764c8945193b464600ba56ade14c3c44c98b27", + "libraries/3rdparty/CMock/vendor/unity/test/targets/gcc_32.yml": "734debdb4392b83942cdccfb31ca724a43b923617a8b45d86bf6a1fefa86a7e6", + "libraries/3rdparty/CMock/vendor/unity/test/targets/gcc_64.yml": "530851623a24956399add9f0c0fe18719eb6dc428c1bec03ae6b255a9d0ae972", + "libraries/3rdparty/CMock/vendor/unity/test/targets/gcc_auto_limits.yml": "fbd96dc8a94c4de70dae87ff378312b3ee07cb8219d6290af17d36e3b34d0f6e", + "libraries/3rdparty/CMock/vendor/unity/test/targets/gcc_auto_stdint.yml": "c9ec9f61987603d059d4509f4befe0744f5fa99a137d95be359ddd2c71443281", + "libraries/3rdparty/CMock/vendor/unity/test/targets/gcc_manual_math.yml": "3bd8b0d4eb9fa693f4cf74fdaf61e31183b85351c4e957577bc8497cdc8f15a0", + "libraries/3rdparty/CMock/vendor/unity/test/targets/hitech_picc18.yml": "7b2a4ea56f3125fd75bb7d8e9baf1f26706b206f98c6f88e4d4b4091361fc546", + "libraries/3rdparty/CMock/vendor/unity/test/targets/iar_arm_v4.yml": "3df93ad02fd4e1cc17d28a63f824881eee4f73e1db54e43ff36909dd2f5eabaf", + "libraries/3rdparty/CMock/vendor/unity/test/targets/iar_arm_v5.yml": "bb6f961bbf3cf2c4651a33bf415818726b4d609c05cb9fdeabe6dc7a94d47e6b", + "libraries/3rdparty/CMock/vendor/unity/test/targets/iar_arm_v5_3.yml": "bb6f961bbf3cf2c4651a33bf415818726b4d609c05cb9fdeabe6dc7a94d47e6b", + "libraries/3rdparty/CMock/vendor/unity/test/targets/iar_armcortex_LM3S9B92_v5_4.yml": "8835f98e84e75b920fb9e27c0ebcc9c11f14bff768b382441099a01cbf7a129d", + "libraries/3rdparty/CMock/vendor/unity/test/targets/iar_cortexm3_v5.yml": "70ba518b050162526cf5cfd3cdc90a00a6aad0d0ef65558612d384c855513d52", + "libraries/3rdparty/CMock/vendor/unity/test/targets/iar_msp430.yml": "527ef25ba8d5056a8b44fce38302895a1a8ed342331edeed69db067b831c8e7b", + "libraries/3rdparty/CMock/vendor/unity/test/targets/iar_sh2a_v6.yml": "b99162afd271d76014220cabda53ff3951aae6595b198520eba36ef095e57746", + "libraries/3rdparty/CMock/vendor/unity/test/testdata/CException.h": "1d815018f2b5c5973982e9e13c9534bb5cd96e6deea5b1f29b531233f476e843", + "libraries/3rdparty/CMock/vendor/unity/test/testdata/Defs.h": "9c7988c8f87c13251880be27117c9cd5d7078990bef9d34200a342cf26911bd7", + "libraries/3rdparty/CMock/vendor/unity/test/testdata/cmock.h": "ae873ab649d7ea46f2e23ee13cbac383c527d5935bc40b31dced6969fb4d235d", + "libraries/3rdparty/CMock/vendor/unity/test/testdata/mockMock.h": "bbf1b3aaddf02a21cdb52b7b58d2f74927d586d013ca923e25eb93b121bdcf47", + "libraries/3rdparty/CMock/vendor/unity/test/testdata/testRunnerGenerator.c": "721d2a8bef4daf1d4a61e30f8bf8bf1d263377c9f763f9129218d638ddac65d8", + "libraries/3rdparty/CMock/vendor/unity/test/testdata/testRunnerGeneratorSmall.c": "f32a9a46a78102474346c7516bdb0401fabef9ee8616d033237a4bc658e3357a", + "libraries/3rdparty/CMock/vendor/unity/test/testdata/testRunnerGeneratorWithMocks.c": "ea6887c98c35906e04e492cc06618294fef70f0bbbc9ca0cf1dd2ac3c14fe72d", + "libraries/3rdparty/CMock/vendor/unity/test/tests/test_generate_test_runner.rb": "841d599bc5addfc2f89c425031428c67ea7d32d09eee0fb9ce86bac6b12f8bf6", + "libraries/3rdparty/CMock/vendor/unity/test/tests/testparameterized.c": "76ea3bd9cd68cb88a0a3a5098b37f4669e382065f9f372ca9510c525609176a7", + "libraries/3rdparty/CMock/vendor/unity/test/tests/testunity.c": "26709a643b37d7a93310ceace6589cbdc3506638e83e411a77bcdbbb3dce3316", + "libraries/3rdparty/jsmn/LICENSE": "4675b94a50d2afe811c52785463c854f1156056632cce17cc7133939eac8ed55", + "libraries/3rdparty/jsmn/jsmn.c": "f91533b8c65ffe13d3389f18e6f74a09aec61c23bc44318f40135bc004b075fa", + "libraries/3rdparty/jsmn/jsmn.h": "f24904f8e9df0be61cd26430851f026ebbf7d85a4c856ef2c975e85f1cb304b7", + "libraries/3rdparty/lwip/BUILDING": "0a1c749c1f6f5f0ec6ad414cb7e591269519ae43246877fe509f1a5829e36e35", + "libraries/3rdparty/lwip/CHANGELOG": "20b9468a181659c87502589c5af5d47799f981971485d17d51fc0137d09c4c9f", + "libraries/3rdparty/lwip/CMakeLists.txt": "af867862797d65753179f66d3e8ee9cc3aa0cb75d29569cdc907614761ce89b6", + "libraries/3rdparty/lwip/COPYING": "8fb15ebdb19eb669e1d37fcd8e57a44c477fcc0e93a9ab0d181760965f94d5ed", + "libraries/3rdparty/lwip/FEATURES": "39a76615b5fc94b8fcc9236969f17b5b0589de89cf16dab88d0352e2a03fe196", + "libraries/3rdparty/lwip/FILES": "8cab124b0bfd686958adeb1e36e7f485b2c0411b75fecb28590cfd8c98bf00c6", + "libraries/3rdparty/lwip/README": "4df2502ceaad651baeab18f8a0a42600abf6958a42eb2a9bb9a8a00c6bf7a9cd", + "libraries/3rdparty/lwip/UPGRADING": "26796743baf56c6076c44a09785927bb123af20a5e86343f1dd4c1dfd083be0e", + "libraries/3rdparty/lwip/contrib/Coverity/coverity.c": "3eb4a92d33ab70f452c03348ce3b633fe218fe805886faccdcd95797eef5232e", + "libraries/3rdparty/lwip/contrib/Filelists.cmake": "590fc51ddb0af575d8c022ee8188df8e8651944f88bbd424c94f2ab11c508c8a", + "libraries/3rdparty/lwip/contrib/Filelists.mk": "ea49ada77ac4343f92ff36c199427cd40d1f5a04f84f19ff1b50d0cec65f096a", + "libraries/3rdparty/lwip/contrib/addons/ipv6_static_routing/README": "975561ddbdb26be17bbdc2d12fb6caffd82c215985f2a09463c366bf155321be", + "libraries/3rdparty/lwip/contrib/addons/ipv6_static_routing/ip6_route_table.c": "afa0fb5045d1b6fec69e158b6d5a04853061be9cd141e42e86e491bcb4762872", + "libraries/3rdparty/lwip/contrib/addons/ipv6_static_routing/ip6_route_table.h": "902a7b7cdbf0d232b8df1456fb4809cbeb36db0263c52ddbe3758a9682faa667", + "libraries/3rdparty/lwip/contrib/addons/netconn/external_resolve/dnssd.c": "94e43cfeea372e722b89f6856bbed669482141e27b654a1ae07e8017b426ff90", + "libraries/3rdparty/lwip/contrib/addons/netconn/external_resolve/dnssd.h": "c083f26803984773cbcf71ca83c2a6ab55abced7160ab7a29c4541c2c965e9d7", + "libraries/3rdparty/lwip/contrib/addons/tcp_isn/tcp_isn.c": "1cad9712add2b8b460f5d8da6fa811b86fdd3a565ccad0c589e8b7a50c5261c1", + "libraries/3rdparty/lwip/contrib/addons/tcp_isn/tcp_isn.h": "5593cb63e92665c4fc5380d84525990db565112d85f5c5b0118a1c09f678d5b9", + "libraries/3rdparty/lwip/contrib/addons/tcp_md5/README": "151eaff01b88ed8664e270dacdde434881e8c8040ea37b7f091340084a955a0d", + "libraries/3rdparty/lwip/contrib/addons/tcp_md5/tcp_md5.c": "f9e0f2d1e421eb97c869821cfb698d6728a318dda51433291e7efcfe9419e818", + "libraries/3rdparty/lwip/contrib/addons/tcp_md5/tcp_md5.h": "33a7897465b0a58309742912a55cb983d624cfe4824389072dbfdd6ad674867c", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/CCodeGeneration.csproj": "08be7ff6c6932c2a9cfe6e97557d4ef843dcaa9ca10facde33b1cea1e3a9ea9b", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/CFile.cs": "71f885b98cd0ba2ca6632ceb547d85b4a29763dcfd67771395722a6e665f91ed", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/CGenerator.cs": "f5b6aaea1ed850d8aac63b3617fad4fd6114638ea86e54da306d7d36b6bd8dce", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/Code.cs": "bb4c67f7b00d77ecf82e63989ded1f89df66ef351866a4de5ef3bdd05651bed2", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/CodeContainerBase.cs": "ee8281ce892530b2597441004f99409f1602a7ddd711d6d23582ac47b3f5500b", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/CodeElement.cs": "7c813f6a24fdc8cace9d659028c7580965a5731dc5248f5ad94308d0994916a2", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/Comment.cs": "c0d3e30a6e66a522f03e5c5eafaf7767104fa11b11b1db636c20ae207e80ab69", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/EmptyLine.cs": "ce23bfc251324526950e1b499cb7e1ba0e51bdcc43da9c311c6da9bc39a3e5ab", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/Function.cs": "2a86f450b1a3e7c228892508466d19fba7815fb7a4fbff9164f0899bb0f43c7d", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/FunctionDeclaration.cs": "81af456dd2a181184a5f4765087a69231cb1c41c968e560544bf6a3a072e126a", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/IfThenElse.cs": "33a6b618fd5adf44c4603493d479ef5bb0c0fc4528ce9788ade96eade936050e", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/PP_If.cs": "a93397190469c79e4a1ab6f7ca86be5fa34a63bf622545211d6d2670c329f17d", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/PP_Ifdef.cs": "dcc2ec42684fdf33941c422580ba4fb672eaf72af4ee22768720ba939b23c586", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/PP_Include.cs": "4e6f18a41be22b75ebe01ce73c61fc00148fe9af1d23bd024ae9e7cf70a93e68", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/PP_Macro.cs": "b10ee1a33ab13c70f22474718512ed554482f2e87617d6fe5ab99eaf8691b9d1", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/PlainText.cs": "9f6230df9d06345f6c76c2d2aeb7631ad91085f5fec03721d2c0724709bc026e", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/Properties/AssemblyInfo.cs": "37599227bf85cd5fbf21d695c5d5b4156c08e968310270bdb69ccadeeb890c27", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/Switch.cs": "89a17fcd8638ba1939e90d654ebea0fb289116f32cdf85e7b6c1bf96ca4b984e", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/VariableDeclaration.cs": "0908049f20bace0fedf39854620aff86d39039c8c7f2da2859ae00f755496699", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/VariablePrototype.cs": "362858ef52f27562968f2d07cb7f6ca7c1a5e04eb2a96eae866fc192ea168fd9", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/CCodeGeneration/VariableType.cs": "4155b469af638550ff8226eaa71b9d43160c2be9515e227e2954ff73a2235a5d", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipMibCompiler.sln": "0fb1b4c5838afaf26e2084aa358551c07aa60eee8293beeb5c5777be7db074dc", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipMibCompiler/LwipMibCompiler.csproj": "3e1ccbbc10ba31bf28e61e9f08916457cf249a6f55084d8a965d3a2b0b9b72f1", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipMibCompiler/Program.cs": "510a7695e81c42d2d38c25a6ce0519b450b1806d864ae47095d5c9b8fe6efbef", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipMibCompiler/Properties/AssemblyInfo.cs": "1b81fead7f0f8ce1324c33244a2b4881de5e868fa7c44680f4bdd416aefe1eb2", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipMibCompiler/app.config": "49f0226c179b7f7a5d1f4b7a2d01bcc6752e80944fd96927b60d773bd77075dd", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/IRestriction.cs": "4ce9b1841c83203f4f32135c8731879ddf51f26253a62282b7ceb2bfa1d08e46", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/LwipSnmp.cs": "fe3911d9575cea5567a1d2f8c00c304e87988a2e389bf3da2c568d3ace89ebae", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/LwipSnmpCodeGeneration.csproj": "bb073c52d2b1b424b17632fe5e0d94716f971361dcecf6deeb12af777880703b", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/MibCFile.cs": "b7a8974e02597d285fc730f944cfb4583f6c48b5d8f36e70fb06abdf799063c8", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/MibHeaderFile.cs": "3b13376b6ac40784485d23b1ef3bdda5f9143210a69ea100079a385efcc8d7ab", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/Properties/AssemblyInfo.cs": "154b6c0382a258ab328b6799a8bc55acef5defc114e0651e39e0926c544fda78", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpMib.cs": "be5945d415c3f484ba3679f73446c5e0a1949ee156d095e5c543ed1b6842273c", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpNode.cs": "817531e1d8cc234d96bdd7a3598fb8d1840ab2ba75b61c96cd13c9757fb00819", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpScalarAggregationNode.cs": "ea220467112678069cad418a7c7d984d2da9cfc4bf0dd8b6e00cfd3aa3083e2b", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpScalarArrayNode.cs": "a81138b14b2a06425e000d2a4b2e83c183d2c1b39530fa415ac8172279218c3b", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpScalarNode.cs": "e5564a84d5cb1fa1eacc5551141b76ac737b82a1cae9ba79e40bf359c443fb46", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpScalarNodeBits.cs": "a273a64f770443e0b26d53aed1a380f831bf3e1938396b570d691908338dfa2f", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpScalarNodeCounter64.cs": "6b061892e424c4e8237adae632676993faa567d3bdb3b59f0d43024d75c4934e", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpScalarNodeInt.cs": "e2c9c697e09e1b85dd6b4e21af10588c72cfceb495656f5089c3002dd279e5c0", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpScalarNodeObjectIdentifier.cs": "adcca7908d7ee6374f08ab6106abf52c1d55810f7266fe7d12eece011e46e76e", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpScalarNodeOctetString.cs": "5a3879a0d44aba0e26400d53fee40ac0fd42a51a0f32440e248a220a09b511a9", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpScalarNodeTruthValue.cs": "d092cae1b5eeb4c662868c178e1491adb832932b0cdcb627d6fa21cb56679c96", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpScalarNodeUint.cs": "716fcc054c0048615e0a9cbde400106c87e0f55dcda3f9f0f62f727f3c5bcdef", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpTableNode.cs": "aae98581aa5205e4742febb20536670ac45537eda5e48c553d879f074508417f", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpTreeNode.cs": "c2892b28d3c9fab25bab2d713c7fbb3b9c716d94561cbf84cd979f98fadbc798", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/MibViewer/FormMain.Designer.cs": "900f7135ced78b538ac59b43ce85f0fef6dbab6144d1c98b9e05ea5e64cb4de3", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/MibViewer/FormMain.cs": "60ae71b9f5ca42038a790f33eb0c31616a32f24148d86a653fea286d958b2b51", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/MibViewer/FormMain.resx": "b8ae1de569c06e8da5f0c1cbec88a9232382ba51b8558563353e4d648dd990b2", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/MibViewer/MibViewer.csproj": "2c2755db20fbe372e0b8a58dbc24039a8b0de9b03b4a3f7ba9800bd104acc405", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/MibViewer/Program.cs": "582d27447362b96d1bac405154d4a137a1eb729234e4c55ab0920823135fc97a", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/MibViewer/Properties/AssemblyInfo.cs": "dd2295c56779339b5a04082f5f5acfb428e67a4cc30a48fb0ab5596c2e3adc63", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/MibViewer/Properties/Resources.Designer.cs": "10f36528404675f98ca302c8d2f47d4cd914e3cbb1287bdd9c670ca930deed5b", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/MibViewer/Properties/Resources.resx": "4e124f5a7694ffe813c60601b1b73c53e47536b1f1c0e798d4d55bfc2ca3774f", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/MibViewer/Properties/Settings.Designer.cs": "f18a13fee4b93e15bdcc288ca2b102ad916618abbf6c0b8ef22d8078138cd913", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/MibViewer/Properties/Settings.settings": "baba99193fc1787141063b135424b476ff4151beb833883fcb594631f17c0147", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/MibViewer/app.config": "49f0226c179b7f7a5d1f4b7a2d01bcc6752e80944fd96927b60d773bd77075dd", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/IANA-ADDRESS-FAMILY-NUMBERS-MIB": "74aecf2da295c9929c1c20935d48dab929c4c48b4ec70dd84ea054207b001045", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/IANA-CHARSET-MIB": "171318805f951e9468683bea1fe7bea37491488a917030a51dffc5eba02b7908", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/IANA/IANA-ITU-ALARM-TC-MIB": "2171d34e8d8e742424f0c6adbc60b163b1dae5928a8d9e9eb8ea504995d694e9", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/IANA/IANA-LANGUAGE-MIB": "d0ae6af35e45722a22c7069523ff589eff0f050b539dcf47b855c3cfc9b1dc13", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/IANA/IANA-MALLOC-MIB": "5ce4b4857e936ca970478b2ef5ff2354ea1bd1baab511983fb3666cd9ae03133", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/IANA/IANA-MAU-MIB": "e28c569d8fe395a5cb3177a5df2adfeb8c57e84c4a9462e7dddd4e42902132e7", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/IANA/IANA-PRINTER-MIB": "954427ef5c22b525cec3ff2550b994afecdd84769b4f232871af0ff38effa559", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/IANA/IANA-RTPROTO-MIB": "c1906c8a2a42b3f2cb6eab0dbb14608c59661bd02998dcc0a28fe4ac0797868e", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/IANA/IANATn3270eTC-MIB": "007a32634e83244600ff3a9cf5d891732126550f06257f5d2fec700cdcd4589c", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/IANA/IANAifType-MIB": "511af70e38b199868babf6a1dbb64347daa3a76801a10227098775525179b7a1", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/IF-MIB": "6377ddb359e4e16cecdc2a8fa95b7f32dc571f8670b22e2f8aaa243b5637d5c6", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/INET-ADDRESS-MIB": "db97536a82d2dc39daae4879a54095d5caa30761698f29231576046f8a51239d", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/IP-MIB": "14ac0dbb9254e4b8007f6f8d50b3f9faba0e20857cf5ab6c68ec71c804f76dd8", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/RFC-1212": "86b7136171cd3efd16909125a99a4892fd7d859d671391588b8e30fc0b942cd1", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/RFC-1215": "c96ea7bc5b2b05c361f69ce4dd637a7d8d5b97d60b4b7694539998a1a1c2ef57", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/RFC1065-SMI": "8094e15c0e24740830291d0203fbbb62b9c7fc47c3efed6a0cc10030609f11bc", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/RFC1155-SMI": "4e4c178793aa234504fde442ad527bc66ffface448b35f12e062e73c47d0f3a4", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/RFC1158-MIB": "5b437e2b5ad18d3db7c336446cd5c1fb1906ce21ff8967150e99c28e33fdde3d", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/RFC1213-MIB": "e9fef1a36e6c4200853a3e908bb0c991b2f8c5302dceff2b069a6597ce9215bc", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/SNMPv2-CONF": "b96bd8fceb39587f126eb30248eaf4b9769a5e35714f1ee21ecc478d80272dda", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/SNMPv2-MIB": "7fb972a35dae3e6bbcb9228b707a8eee3582719c8d11c4fcbd4c621fbc63e40c", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/SNMPv2-SMI": "bdf7c016a12095cc429d8ef631178b940e2d27dd762ecc8ab601db74bfbe927e", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/SNMPv2-TC": "0fbdb5e54efa9b5f5ee5ef19fd2106a2217927f00477d53d6ba9df16a632bd05", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/SNMPv2-TM": "d2d09410594400a287eea430466962d83d656cf609e5d31392ad898a44435c7f", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/TCP-MIB": "e26faa91ce7d356cb6d83aa5a9daa47ed38e8ed94ef7208bf8b3cc6fca016554", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/Mibs/UDP-MIB": "c8de41eba6600414b492e0a513b99c37da4b0e20469fe35d5e8425e5bce0a47e", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/DisplayHint.cs": "b3f24f6953819d1db3db200899770988434b02e372d2d2a563edfbc3dad19978", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Entities/AgentCapabilities.cs": "1eab4cc1c092d0339a6872ac3454fd1d8e0dcc1c5782f7b91c64262a6f12afc2", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Entities/EntityBase.cs": "321a1ec630fb65757109fee736396b9245a80a7f5dd151fa0328dbdba6332854", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Entities/IEntity.cs": "7232dbdc007bb45a8f8dea614ddff1c1e8494ef746bdd52b07ab64bba71e9fac", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Entities/ModuleCompliance.cs": "628c0b0d90b1328bac86823b95ce078510409f2286d513ae6cded76d5d5d71a0", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Entities/ModuleIdentity.cs": "5d7342d3905740369d09d0d18a9ed9fa06dd59014bcf08dce25ccfce7ffcaea4", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Entities/NotificationGroup.cs": "39ffcd81f7ba9802fdb05a486b2396683fe60e3227b9e5e2e8066f4513ed122e", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Entities/NotificationType.cs": "6ef1826c956e893376038a8a743b7e78c75a06e9d069e7e4255db53c768862e3", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Entities/ObjectGroup.cs": "6574a6e4056f9fbed518f584a0d0f9ecb2631eed9224ba52e40bcab318e0bfdc", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Entities/ObjectIdentity.cs": "904638f353d6488e2a1fbddb5a6c3bd76a874f17108efb212c0832e46af1a5a7", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Entities/ObjectType.cs": "c3b54e130db6ea88d1c304fae1bb9cd79b30746ec5904775673c878cb18ffd14", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Entities/OidValueAssignment.cs": "7ce81e1289eef3ec2d4fbaa2cf84fc5d1d55355e31fc4cda4924598c55c55470", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Exports.cs": "5ed3a5d9fabe8cde938ecf6c9ad77a26136e239eef3e6fede4043e9633ba3fbd", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/IDeclaration.cs": "06c6f371bb6ec960f4d48ba24d75f65e827c705ff34779a42bae288b59e88e8a", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/IElement.cs": "f106b41766d2bbd43213758c9ad45515dd55261e398773635a2d5f0a12eb9659", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/ITypeReferrer.cs": "64f67129913339054225d6423596537033890a9b6b7ef8e547770a6007c1540a", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Imports.cs": "f125d095d6f80c60b9d329e22241b133bdfaf67a9abb50dfa47d2f0d99527007", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/ImportsFrom.cs": "9d509b7cd576c3e0a9c7215d6f254bfe77af6e1aa5077985fecfd1c84fc8cd19", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/TrapType.cs": "61db3f0a2c75f61bf8e7bc05f1b4c43b3ea638c0de8112f795b19c66aedf20bf", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/BaseType.cs": "93a432e574ebe2b418ac219c257243ca93444c965cc3bd98cdc15a680e00a872", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/BitsType.cs": "cb2280707ace8c7cf1ace5f3479bdf6ff7bd0f530401d7346167984ff5c7a4ab", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/Choice.cs": "8293714e9114900371790ed8d466c44ed9421752f9d13d70a92332232d35b982", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/ITypeAssignment.cs": "110095915035ff4da95e82631a1b9720c8aec98220954d2ad977f2d713f75b78", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/IntegerType.cs": "b82a91052415366bf55db02e07285e70d94c57e2338b469342969a7b3ddda7df", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/IpAddressType.cs": "6b84597c58cf981694d096a158dfe0f7f6378d9b491b39e8c368f4cc850af07a", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/Macro.cs": "922993e939e435a0c8c7169382368084988fe5efb0b766a62df66a603fab95ba", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/ObjectIdentifierType.cs": "1cc6cbbf4a55e5d1c50ef7d31d6b65c0ead2544e19438433461785cf039299fb", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/OctetStringType.cs": "1d87f07140c978e6161cd3f5f6ec332330eb680401298ecef87698140b36cb73", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/OpaqueType.cs": "98d2a78598d798b1f30734ff5ac38906fe3f8b694732bae8a99f5c4caf6e75eb", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/Sequence.cs": "dd213d0b822a7b42f486f9da1c5b5558ef1894cd0d62e1779555b1a3a94fe6e6", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/SequenceOf.cs": "bd61d745bb1cf6ffc690fd367cb8917bed82e6a10ed5410ef973b9e3758e495c", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/TextualConvention.cs": "21259663b0c38aea4a5d15bdcea4ea67cd247c92d5bbc17372de9e0e323f3905", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/TypeAssignment.cs": "4ceec51fd4ea8c19d7d4302812c66153abb7bfe4ae7619d40ebe897043f8de67", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Elements/Types/UnsignedType.cs": "b87b9fd790d32d9b228b71701af968bd623f5681f7e776e79abd8ed49289f7b9", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/IModule.cs": "a0111c3a29ce0a798caebf7176d52bccdce4d5a2c6df0c0bfab59ed161275544", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/ISymbolEnumerator.cs": "ea45429a2f94a10369a2dc4ba4ac803d3b8d081b11c23eca1c1eab497faf2d7f", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Lexer.cs": "f9a8718339d55a167c4642c86e685856eec852f3e01a4aee032481c8f1576b94", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/MaxAccess.cs": "f794a432573645b44938cda3894399ffe67da8d5e647e47abf80c83ebcd726d5", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/MibDocument.cs": "2e3ecbb52164913350151f012a8e1df822cfc6ff3262913a303237c122f65bb3", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/MibException.cs": "38b6f9de34b2495000f23d2cf5240575a1aa192f812a27dc645fa7ab341383b6", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/MibModule.cs": "8ed64591aecdbc369c0d37a1e237a2f5137ed293429b0a53ad57c16d20089f39", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/MibResolver.cs": "3302296c58b993cc345eb5dcaf4154d9bc9b1247e2aa5da8f0cca9ca074a36f4", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/MibTree.cs": "26365eeb22893f16fd20e73bb3c9046fe55b4707360c3f2859d97e28ff20aa2d", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/MibTreeNode.cs": "5f172090c3f0454b2d6f85545d582c1e55ed44eb28b96e94b893bf621462da6a", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/MibTypesResolver.cs": "b5820e2bd4396a16573c8ddcf0310c2e5f3505b489abecc161297d0a4759b10e", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/ObjectIdentifier.cs": "d1fc1048bb47d156f837fc7a7046a5b6b115d52c3b06118b6a35430f7323f6cd", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Status.cs": "18275342fc0e42915146fbe80dae09e61db3301815091d3b0f56a69dde833cdc", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/Symbol.cs": "a22cc72e0518f5b8ac985a25103fccf3973de0c266a654481b47f74c89725ee5", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/SymbolList.cs": "900c1076b5a930244ab96f8794c4f24d6b99898b4bcfd7182f8e0ca7ce8451ba", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/ValueMap.cs": "65fb378b6d830ff07891ace8a744eab54aa1dc32450a8d06460ab0e4c6006585", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Mib/ValueRange.cs": "5933376fec0fbc309baed04b3e79f2fa7ca11f9f02b53564faacc39ed17c9b3d", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Properties/AssemblyInfo.cs": "fb2f6e53df317f25617e2f6c24b30d02e2b70c434aec88989f468b12870ac013", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Properties/Resources.Designer.cs": "fb1e10e6b121eb4b14c98c1ddf28b1071584e7977dcd0970747ee5fd30180b45", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/Properties/Resources.resx": "cbe7a23cf57abea4beca57ac456d81e11a2967d92ecffbceb7e3d7eda012789c", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/SharpSnmpLib.Mib.csproj": "4427bc8ded4f2509d31bd2ff00db32393cd300399efddcf7131c244b72b8d89a", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/license.txt": "ef1f7505cfdff240e72602bc50ef1cdba37c681c84611cdf30e4371320c70942", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/SharpSnmpLib/sharpsnmplib.snk": "0421beb05de86fc121b4e64eb3d0e6f698299bd7e80ea4d5f6fc0c630b61b7f6", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/example/compile_udp_mib.cmd": "5533bbcdce1d5ade93f05145cb2e6bd6b915fd36e06586c55da3e159a2f31fd2", + "libraries/3rdparty/lwip/contrib/apps/LwipMibCompiler/example/compile_udp_mib.sh": "7496cdd8391196eaee063595dfb9a0d258c954825a748014556f93b53790458c", + "libraries/3rdparty/lwip/contrib/apps/chargen/README": "09b2017bcb4b99b712e3d803e76745afcadf1b3255361999129d0118c0a7cd2e", + "libraries/3rdparty/lwip/contrib/apps/chargen/chargen.c": "07444ca66879f803a304276f2e3cbd8d5863f7a705c91a741f9a84030f514238", + "libraries/3rdparty/lwip/contrib/apps/chargen/chargen.h": "265a136e0d8ba43970e3010640e31d62ea2a8df48711b3382d961fc134dda1df", + "libraries/3rdparty/lwip/contrib/apps/httpserver/README": "b2f76ca884fe0b4f59a2fb5f6c4debe03cc1fd0d5139a7bc9121b104dd83d3f5", + "libraries/3rdparty/lwip/contrib/apps/httpserver/httpserver-netconn.c": "4c83cb2c47044d9505b3295b2b0f2c5f5211e62f92327c6924d5e2c178bf1b60", + "libraries/3rdparty/lwip/contrib/apps/httpserver/httpserver-netconn.h": "b4d31cb3f85b7d671e1830b05e8e25858dc96300e94a92f04f4535bb7ac0ffdc", + "libraries/3rdparty/lwip/contrib/apps/netio/netio.c": "60e802a9ad9bdf747d1965e3a2e3cd465b0093d979b9c5a8f0ef50d4cedd06a9", + "libraries/3rdparty/lwip/contrib/apps/netio/netio.h": "74ae01b5361c9d2a448c32a5630d5dd24237aee743c5b0c9417befb29f0c8baf", + "libraries/3rdparty/lwip/contrib/apps/ping/ping.c": "f61accaf3c98435d9a00b2ffbaff14cb7d87229800a160316399b8addbf0fa39", + "libraries/3rdparty/lwip/contrib/apps/ping/ping.h": "b8738e6e4bc51b3f4dbdc6fd1671ac8af6f08243ac4f583518f86d7f63942cf4", + "libraries/3rdparty/lwip/contrib/apps/rtp/rtp.c": "2a902722a62af0e6b9dd6477ec24bec33b0cb26b0a3d9dace3698df93e5f197d", + "libraries/3rdparty/lwip/contrib/apps/rtp/rtp.h": "2e885934e7e92fda70db21ef7ab9995ad66d9d7a363aa8ebafb94b9c087550fc", + "libraries/3rdparty/lwip/contrib/apps/rtp/rtpdata.h": "ebb17e7bd13ec5d1a56e0ae1e17b481533028b6370446e72e9695ef3f0cd987f", + "libraries/3rdparty/lwip/contrib/apps/shell/shell.c": "a2246c5a6daeaca2fae2a325841c4bbab5ddde88d86b7d81f14bc110bbc7fc99", + "libraries/3rdparty/lwip/contrib/apps/shell/shell.h": "79f1ab8a52f397b0e20f7971848be468880d6a1c746ba9172b955d918cefb990", + "libraries/3rdparty/lwip/contrib/apps/socket_examples/socket_examples.c": "da28597bbdb0d157bbfc54025294cef76e3d5118a28e0e2ce3c87e6977cc2131", + "libraries/3rdparty/lwip/contrib/apps/socket_examples/socket_examples.h": "8b14fa347e738b6460ab249a439962072007c3d12008f0678aeacc5e65ddbe1e", + "libraries/3rdparty/lwip/contrib/apps/tcpecho/tcpecho.c": "99c3940d34eec794507448f52cafdb9704e952c8e4f5cfd172cacc60a0cf5591", + "libraries/3rdparty/lwip/contrib/apps/tcpecho/tcpecho.h": "443f85d08d310618d91b3d8b6e8205d74bf937ff08179457be6c8185a7bd0fe2", + "libraries/3rdparty/lwip/contrib/apps/tcpecho_raw/tcpecho_raw.c": "25364252e960ac1a32fb87da3b1005bdf5180991dd55a6dac783c4a99c07da09", + "libraries/3rdparty/lwip/contrib/apps/tcpecho_raw/tcpecho_raw.h": "544e404db6e6f2648e214c0ebe7c3a53c8361d1056d3b8270f9b858b5a2da7aa", + "libraries/3rdparty/lwip/contrib/apps/udpecho/udpecho.c": "af56f1b2b0627348fa1fe7b4a3ff0e2f3af9b363d04ae84ae689889764aa7072", + "libraries/3rdparty/lwip/contrib/apps/udpecho/udpecho.h": "541163b86e464dcbd1407fb9534b3ab65e94ad142d68b7cb20ad5bc0bf185c26", + "libraries/3rdparty/lwip/contrib/apps/udpecho_raw/udpecho_raw.c": "892368020c5e2cb57f27d995b0c9f661a7bf9ae91f9dfd9756bcf31f67e4c395", + "libraries/3rdparty/lwip/contrib/apps/udpecho_raw/udpecho_raw.h": "01bdd71bec8cf505abcf47ed0904893d29c301914aa6a16587e81bb34f562a93", + "libraries/3rdparty/lwip/contrib/examples/ethernetif/ethernetif.c": "2c5c2f73a3b18593d62d6657d697cf89b8fb99290b58c5dd345f8e6b6e01da06", + "libraries/3rdparty/lwip/contrib/examples/example_app/default_netif.h": "665f2be9a25016ba51d66f3358cf00f5e7237e66958e053947ea3566dfae5df0", + "libraries/3rdparty/lwip/contrib/examples/example_app/lwipcfg.h.example": "c348378390aab1d69f62711907c939a712cbb7b8221bd678f24b5511a3a73080", + "libraries/3rdparty/lwip/contrib/examples/example_app/lwipcfg.h.travis": "32d3301fbf2edf774262247a3d35cb6f524b2439a99cfb9d2f6b73240989890f", + "libraries/3rdparty/lwip/contrib/examples/example_app/lwipopts.h": "069714ec7c67b92600b430ef4256556396ed7cd7f9afd77959615b57ab27cd5e", + "libraries/3rdparty/lwip/contrib/examples/example_app/lwippools.h": "e4c0a1c8a6ae920a4f228397ccb6f57e59273a712f36881f73575a4176465e63", + "libraries/3rdparty/lwip/contrib/examples/example_app/ppp_settings.h": "aa1d53e47fd9010de46b31ea844f1797a762703ff72bc209b7ff378bc86275b7", + "libraries/3rdparty/lwip/contrib/examples/example_app/test.c": "ed602b6a250d834336a4016065a00766918ae4e7c43f72c7435f39466969ca0b", + "libraries/3rdparty/lwip/contrib/examples/example_app/test_configs/opt_default.h": "f9b773c5befe36171b2206d4768abdebb443051bb67216a56bd85064ce279131", + "libraries/3rdparty/lwip/contrib/examples/example_app/test_configs/opt_dualstack.h": "ab97d0142ee95361976f70a0736cf4bbcff5f29b67b38f8f5c192aa2f9814f68", + "libraries/3rdparty/lwip/contrib/examples/example_app/test_configs/opt_ipv4only.h": "6536e85472a2fe6add8203c782bcb699c9b13640d407c3e61caa3e3aafe76979", + "libraries/3rdparty/lwip/contrib/examples/example_app/test_configs/opt_ipv6only.h": "fc73ac500fce4b0f824f0826b9644dec856d629ed33b67272464d10f8b5918a6", + "libraries/3rdparty/lwip/contrib/examples/example_app/test_configs/opt_no_tcp_dualstack.h": "c7ccfbb7c1bf3c7c2936cc07f3d0907dede5854c4b360cf35518df2de1638f44", + "libraries/3rdparty/lwip/contrib/examples/example_app/test_configs/opt_no_tcp_ipv4only.h": "b90fe348deda454521f8483b983e90e1a1b56fd99c280b23136cb2f0c6b01065", + "libraries/3rdparty/lwip/contrib/examples/example_app/test_configs/opt_no_tcp_ipv6only.h": "7694d824d5e09b3f0540437c329ea66fbdd2b0d2242097b420563f0a0f79bb77", + "libraries/3rdparty/lwip/contrib/examples/example_app/test_configs/opt_no_udp_dualstack.h": "e7e5605fdf155743f3a3b028dea20d75172dd5ff8804cc8f5532cdc7d6a4e108", + "libraries/3rdparty/lwip/contrib/examples/example_app/test_configs/opt_no_udp_ipv4only.h": "f42856c44980f6bc22fab73a93dcab9b1296d394eba9050d1892e6df4ff0b332", + "libraries/3rdparty/lwip/contrib/examples/example_app/test_configs/opt_no_udp_ipv6only.h": "dfb09369b0301ebf8e9ef70835c993c2035dfddbc652f97df71d723ec94a2e9d", + "libraries/3rdparty/lwip/contrib/examples/example_app/test_configs/opt_none.h": "f7458f019ade1e717f25bafc95dba6dd01650f5fc1d9c1ca78d9187247c67cd7", + "libraries/3rdparty/lwip/contrib/examples/example_app/test_configs/opt_nosys_dual.h": "e6ea4019b9a6befd66881c6b1c0e1ef866718735144bf500f133c4be13b60495", + "libraries/3rdparty/lwip/contrib/examples/example_app/test_configs/opt_nosys_ipv4.h": "a7f185d5efd1bdbc086b2566c0707ec8878e690a151f81aeeafd2f12fea65c7f", + "libraries/3rdparty/lwip/contrib/examples/example_app/test_configs/opt_nosys_ipv6.h": "760417b8349d2cf80b008ae946be9997eeb8b87b265e149772409c7e2b6080a9", + "libraries/3rdparty/lwip/contrib/examples/httpd/cgi_example/cgi_example.c": "7e96c5dfcb11e3fccd5f09a4b2a082ffdf0c28e1acbae0ed05aa375d4d89c935", + "libraries/3rdparty/lwip/contrib/examples/httpd/cgi_example/cgi_example.h": "4de91340505d6a16af89efb369a19dd78a1c70b6e68281b2282034dce3996820", + "libraries/3rdparty/lwip/contrib/examples/httpd/examples_fs/404.html": "093f7768e78b045d8bee613880ada36c5af27e738ce906e5ab35bde33ad2c55b", + "libraries/3rdparty/lwip/contrib/examples/httpd/examples_fs/img/sics.gif": "3b4eb378fdefac1e7dd6dbb6c84db20e1512463457626f5d991bf7c1ccb7cf63", + "libraries/3rdparty/lwip/contrib/examples/httpd/examples_fs/index.html": "d34254865305f1f175294b4b1591f1f4a54145c28937f4e3fcb7f771d0a5e9a7", + "libraries/3rdparty/lwip/contrib/examples/httpd/examples_fs/login.html": "ceb987842f3e0b0390951f2b163ab6158f9b56851a29a85e1fe41198bc2d11a5", + "libraries/3rdparty/lwip/contrib/examples/httpd/examples_fs/loginfail.html": "f327434741033801152fbc8957e5205346ff40fc5423aad1a9eedee764488338", + "libraries/3rdparty/lwip/contrib/examples/httpd/examples_fs/session.html": "d2a447b85ccfd0665801c84e50481284e99222aa2e375cd32a119e36eead8678", + "libraries/3rdparty/lwip/contrib/examples/httpd/examples_fs/ssi.shtml": "66af689acda23a61b558e3b0a474637dc93642abd09ff7f8259cae1d82d2c714", + "libraries/3rdparty/lwip/contrib/examples/httpd/examples_fsdata.c": "d232e6c54e0d953562b7a3f10e1be77c29f464480d53f392c19089e29c6cd949", + "libraries/3rdparty/lwip/contrib/examples/httpd/fs_example/fs_example.c": "83c272e37c215b5066f50acfde4b3ef82f7bceeddbe9af42af8ec15f450fa7b8", + "libraries/3rdparty/lwip/contrib/examples/httpd/fs_example/fs_example.h": "d6a5c86ee4a7cfab6b2c264fe46513c3b4198c569257313b7015107051bccbb0", + "libraries/3rdparty/lwip/contrib/examples/httpd/genfiles_example/genfiles_example.c": "6f64d995dab998ff93bc99eea4732f0f7a6cbd0bb298a6e287e710afb756d1c2", + "libraries/3rdparty/lwip/contrib/examples/httpd/genfiles_example/genfiles_example.h": "95f91a4c206c61a087602b6b6467c7843bc16ecaa1519e7a89a7af4a0680d85b", + "libraries/3rdparty/lwip/contrib/examples/httpd/https_example/https_example.c": "e5162ea135194df8c7f568150d1c4e27fe2c1bfc7b8d313267c7c3ab7e3e3b1e", + "libraries/3rdparty/lwip/contrib/examples/httpd/https_example/https_example.h": "c33fa5640d3a57b08d24438f689a9926a3a4f9dad638087ffb2ebdf486e664f9", + "libraries/3rdparty/lwip/contrib/examples/httpd/post_example/post_example.c": "afeca9d71f2d4c38c440e33cabc755d074dc6fae6acb620a15d153b69b860b22", + "libraries/3rdparty/lwip/contrib/examples/httpd/ssi_example/ssi_example.c": "43c3a9b2eee6862cbf664b02be787904fe271b9d8072c463c6f37fce8494aba6", + "libraries/3rdparty/lwip/contrib/examples/httpd/ssi_example/ssi_example.h": "24f5a96c12ebd03cbe57cd51361b03b16fde215ddd71fc6e84b9f9d715db6d0e", + "libraries/3rdparty/lwip/contrib/examples/lwiperf/lwiperf_example.c": "0c0573f71a0054d39259dc183c70e9cf13334da0c96e42d747c414813da4179b", + "libraries/3rdparty/lwip/contrib/examples/lwiperf/lwiperf_example.h": "bae2a72cd8ea69bb9edbec916aac623fdcb9014fa526cf5782892362e9a782e7", + "libraries/3rdparty/lwip/contrib/examples/mdns/mdns_example.c": "3dc0334bcf02df4985acc01295e18d8cf5e06323d563b893ab03dbb3b7f94370", + "libraries/3rdparty/lwip/contrib/examples/mdns/mdns_example.h": "81dbc1fabad8400e8656187d3d95b38f24dbbdf09615cc23cc57d5c7c7f9b209", + "libraries/3rdparty/lwip/contrib/examples/mqtt/mqtt_example.c": "1ba382439e356525964a554d073e98e504542799a539ed0c51d21955fc174c30", + "libraries/3rdparty/lwip/contrib/examples/mqtt/mqtt_example.h": "879c0f1adc062e7aef8ad74f5878db45caf215e37605009b95b09addfa428579", + "libraries/3rdparty/lwip/contrib/examples/ppp/pppos_example.c": "f6fff7881756a568b8dcd14d00ea31da6fdb1053e387c284ea62f990dde26c70", + "libraries/3rdparty/lwip/contrib/examples/ppp/pppos_example.h": "420338e076895dcde27c1a82c9f49859a9fff9f2de6b9bec67205e340a0ed02f", + "libraries/3rdparty/lwip/contrib/examples/snmp/snmp_example.c": "212d5b982d925546218bba71f345dc276206eed4e5e79dc248bfbf86a05a49ca", + "libraries/3rdparty/lwip/contrib/examples/snmp/snmp_example.h": "0d4b04fc829cfbdfd70f814465ab078fa0681d8b2e66930ff6c8aace057057fd", + "libraries/3rdparty/lwip/contrib/examples/snmp/snmp_private_mib/lwip_prvmib.c": "b6fa62af506a8f289fd3f497b2330e10df2c1292d8b6943399d418926eca7184", + "libraries/3rdparty/lwip/contrib/examples/snmp/snmp_private_mib/private_mib.h": "82f435e21bd31c391eb98ba54bf3fe7302765f8a0ce878f3d08ee72888d0ffa1", + "libraries/3rdparty/lwip/contrib/examples/snmp/snmp_v3/snmpv3_dummy.c": "a244ad2d8b4edc25a535532edf149515e0c4432a0297d97a569e4e4ae4d92c1e", + "libraries/3rdparty/lwip/contrib/examples/snmp/snmp_v3/snmpv3_dummy.h": "b9141ab62dba28d06fc60871142a1ba76ea587ff52ac80f6a6d35be22e040217", + "libraries/3rdparty/lwip/contrib/examples/sntp/sntp_example.c": "3e9ed5205335be228a68138724c76ea1edb5352bdc7fb0431676abd45d868522", + "libraries/3rdparty/lwip/contrib/examples/sntp/sntp_example.h": "c2f0cd2b9b4b66eb66768106b1f1044150fa2a1492aa41c28c455084f2a82fcb", + "libraries/3rdparty/lwip/contrib/examples/tftp/tftp_example.c": "d3f03976207e246c2fc805b7af8f5e2ce8747b9f47ef9418898058b33304491e", + "libraries/3rdparty/lwip/contrib/examples/tftp/tftp_example.h": "b31f68d059a53a7706b52d70e20581d0357233a279fd252c8f1addaf5cb01b73", + "libraries/3rdparty/lwip/contrib/ports/CMakeCommon.cmake": "6239bc22cac63209eda9dc963dda2ef6521a31810643557679a30c46a5cbe18f", + "libraries/3rdparty/lwip/contrib/ports/Common.allports.mk": "b5403e85c25cde53176ec5d07a51cca9126a740e86ec8edcc3b280a5d916d52b", + "libraries/3rdparty/lwip/contrib/ports/freertos/include/arch/sys_arch.h": "4ad62d7eb8ac49482dff4423084c16136eaaa6bdc866624f327a9cdaf8253386", + "libraries/3rdparty/lwip/contrib/ports/freertos/sys_arch.c": "3b2d57360324ae1bf4d05ee9f665e8e79ba013dece0bb5ecae1e39ef53092b03", + "libraries/3rdparty/lwip/contrib/ports/unix/Common.mk": "23ceba07dccc4216ab2e24e5551c3174e0a4218927e4dede5e230ad035c76062", + "libraries/3rdparty/lwip/contrib/ports/unix/Filelists.cmake": "e3da6dbc6e546de190efce5b72ff406136760574b9867581815271ca47cbf87b", + "libraries/3rdparty/lwip/contrib/ports/unix/README": "46e93c0e43a42fc501971d55a0c30a9bd3aebb717b981542453ee0304a161e2f", + "libraries/3rdparty/lwip/contrib/ports/unix/check/CMakeLists.txt": "02cd198908ae4acb2f59d69e96e085f5a03cdf828bbeef0f1f00aa36c0e1ea25", + "libraries/3rdparty/lwip/contrib/ports/unix/check/Makefile": "0d499df19f471bed11318952826ba93fb05a9b8ac3b2c8d3d6b2f4122466dca2", + "libraries/3rdparty/lwip/contrib/ports/unix/check/README": "2ea7ec20655072c5ddf35c19d979f9d0f3499ba088aef7f9c2567c7b839293f5", + "libraries/3rdparty/lwip/contrib/ports/unix/check/config.h": "def89e5147dc4085b7e87e02db5e09325a22299c579c693ab160cb7a9382c0f1", + "libraries/3rdparty/lwip/contrib/ports/unix/example_app/CMakeLists.txt": "553a751a9ba61905aa44f30562e3a1afe4b4b86c6f360ea6abf6cdbe439137f9", + "libraries/3rdparty/lwip/contrib/ports/unix/example_app/Makefile": "d41510732b8f316b57e5955f018658e0fe3c672852e21b5a88b99b20ac1efdad", + "libraries/3rdparty/lwip/contrib/ports/unix/example_app/default_netif.c": "c468c28efc19869aa507e7d7d650cecbc6c6bae84ed5b3dd5946fde49e8ba254", + "libraries/3rdparty/lwip/contrib/ports/unix/example_app/iteropts.sh": "7b79dccb7238618d1c4b13c4ecb02a04dc520c5db546bcd65a5a5c1892b884ca", + "libraries/3rdparty/lwip/contrib/ports/unix/lib/CMakeLists.txt": "abdea1102dc51c0177a5df9bfa0a6f44723241290f7605be8699a78221af10f7", + "libraries/3rdparty/lwip/contrib/ports/unix/lib/README": "3a98da8c3a5c024565725a6153a500b5bbc779d6a6aec147c24efe733469d224", + "libraries/3rdparty/lwip/contrib/ports/unix/lib/lwipopts.h": "a00b9de59e0433344838928892b2e121d1633fb7dac660dd0e27dc00f05e9cb5", + "libraries/3rdparty/lwip/contrib/ports/unix/port/include/arch/cc.h": "87ca52825c775a18d1a8f5d6c2d747dd6739ca1784b39e34952d3151379722cb", + "libraries/3rdparty/lwip/contrib/ports/unix/port/include/arch/perf.h": "9c170fada00f4f1c98762aab95a0ce2a28399e7ddc0177515fb35cb41763ac31", + "libraries/3rdparty/lwip/contrib/ports/unix/port/include/arch/sys_arch.h": "e9e06bafa5d614223b2b1a90908abffae3234b715aa904e9cb41d10f099d36df", + "libraries/3rdparty/lwip/contrib/ports/unix/port/include/netif/fifo.h": "6019f26220b706579656977a469f76b252b55ffd80bc7a1f0c9196e75dd81e79", + "libraries/3rdparty/lwip/contrib/ports/unix/port/include/netif/list.h": "6543fd9607041979170f8f5a94ee4033562048d5614dd472eec590c9145c782b", + "libraries/3rdparty/lwip/contrib/ports/unix/port/include/netif/pcapif.h": "60a0a33bc0237a4cb5c153385946c07f3904cfab9c0e5c0eb00400d3f0f24be0", + "libraries/3rdparty/lwip/contrib/ports/unix/port/include/netif/sio.h": "ddea825927d4fdf7c8d3eed5773013d36fef11f395025cce7420366c5831e8ee", + "libraries/3rdparty/lwip/contrib/ports/unix/port/include/netif/tapif.h": "d238b3d91165a00e1b3bf7757d073a4e4dcc4865f8188ae380ae3bd26de87152", + "libraries/3rdparty/lwip/contrib/ports/unix/port/netif/fifo.c": "784d147f4b67617dd04f66ac368cd6173d7d4e4e811980da465eee3af5223747", + "libraries/3rdparty/lwip/contrib/ports/unix/port/netif/list.c": "f13548f5dd67df2f9a26a1e693866c0679ac7489ee4d4c0f690890e31dfc554a", + "libraries/3rdparty/lwip/contrib/ports/unix/port/netif/pcapif.c": "8b1f7ff5d8b50de16284ec4ea5d41519da45d1b6ce47c53aa2541e7d59cfefee", + "libraries/3rdparty/lwip/contrib/ports/unix/port/netif/sio.c": "b712bb07d7675ae0b46d4a41ab2e25e9b08a025e037da4da6dd771a2ec04144f", + "libraries/3rdparty/lwip/contrib/ports/unix/port/netif/tapif.c": "1063ad29acfd2791724906ae027d4ad2c631ab05a7b45d112bac861f231e0fc9", + "libraries/3rdparty/lwip/contrib/ports/unix/port/perf.c": "53aa582030c38f3ce657545165a08c96d79fa0f4a51713347afc455a2e6d7b6b", + "libraries/3rdparty/lwip/contrib/ports/unix/port/sys_arch.c": "69ea0f747767e9882c295b89361c9591548be0e0ccd56e12d008163b78153570", + "libraries/3rdparty/lwip/contrib/ports/unix/setup-tapif": "ebc504a3c9ea4066927984556b7cf877e86991379d30c97f650330f7fa8d736a", + "libraries/3rdparty/lwip/contrib/ports/win32/Common.mk": "125f92a764ea01ab3a7b930146a530d9e5397c3c09584468334213968ba087c5", + "libraries/3rdparty/lwip/contrib/ports/win32/Filelists.cmake": "ec2eef7b170a1131530b6a0a31e43cd90caac4886010f0c744ca5de671479ac1", + "libraries/3rdparty/lwip/contrib/ports/win32/check/check_stdint.h": "6dfd316c7768ca286bc36dbd5c26a870cbdaae81c95ed41955af0ffc777a1d00", + "libraries/3rdparty/lwip/contrib/ports/win32/check/config.h": "6508f04b8d148dba8c30e805bd9204519e9ca540d71342df3531f6f62722c6a5", + "libraries/3rdparty/lwip/contrib/ports/win32/check/stdbool.h": "fc341d8b377004ef43ceb4c032c3028578dd24be7280be0f4b0da16abc213d55", + "libraries/3rdparty/lwip/contrib/ports/win32/check/sys/time.h": "5af2327d51ef0e3fcf6b1baedf94650ebd02f532d3535a63dc71cc23b23976af", + "libraries/3rdparty/lwip/contrib/ports/win32/check/time.c": "deabd310fc35ff3e2522b9576d7831d4b5289ab8a35b01a36bf8a2462fa64c6d", + "libraries/3rdparty/lwip/contrib/ports/win32/check/unistd.h": "44c5982f2057234bb630714bf4b72b77baed93a8d34ae4b490055d9ee4bf593c", + "libraries/3rdparty/lwip/contrib/ports/win32/example_app/CMakeLists.txt": "c9f74e74a6e2830a68215138c0aa42b8f3d84117210ed0545b253bef5a1bc15e", + "libraries/3rdparty/lwip/contrib/ports/win32/example_app/Makefile": "ff08d73a3ec755ee05d58d01e2bf3384e595e0543649f6160ced2feea62e552f", + "libraries/3rdparty/lwip/contrib/ports/win32/example_app/default_netif.c": "30d0de74b2668a58825c3a67249292fc655965041111705f99a77bb8c46a4621", + "libraries/3rdparty/lwip/contrib/ports/win32/include/arch/bpstruct.h": "2bc6a0eedb9cb3cfd0a593deaf06d52fd4359275ac9f136ba6e94a7da19048f1", + "libraries/3rdparty/lwip/contrib/ports/win32/include/arch/cc.h": "b54d6c7ee3d893acb7fe2f8426f15d487d4146415be8e4514aed2b159d3a079d", + "libraries/3rdparty/lwip/contrib/ports/win32/include/arch/epstruct.h": "962c890c81ed4c2467086be787b5daa10023eac09a6d9953f25c28e7e2346f19", + "libraries/3rdparty/lwip/contrib/ports/win32/include/arch/perf.h": "8854a0e22cb2b980f95c92fafd1f0f5293ca4621f841e86fec0112aebedf6c02", + "libraries/3rdparty/lwip/contrib/ports/win32/include/arch/sys_arch.h": "77320f24c243a19ea97c45ecfc2a1bfec9e1d4a23353a8fbdf546d87cd1809fa", + "libraries/3rdparty/lwip/contrib/ports/win32/msvc/build_coverity.cmd": "b6a430ac998b4abebc9bb4b0303cb50c285050c9d4f582c8a9f4bc87da373c53", + "libraries/3rdparty/lwip/contrib/ports/win32/msvc/libcheck.vcxproj": "5456fd66266a384bbc9f720f37db626aa3ee69fdf7fd1d593877e44fc7abb3ff", + "libraries/3rdparty/lwip/contrib/ports/win32/msvc/libcheck.vcxproj.filters": "3419e9d81bf7020fd0bb2d5ef83afcfa62fa6841a9dfa88cf747744bba0c93aa", + "libraries/3rdparty/lwip/contrib/ports/win32/msvc/lwIP.vcxproj": "8e804d504676855f987aa14dae40ce3bbe7d40f0147a70e6d23ea1e3c85483cb", + "libraries/3rdparty/lwip/contrib/ports/win32/msvc/lwIP.vcxproj.filters": "44c772b1f2f6e3a972f18c3ae8b201c21b86c1c96f4f2521eb1943d050b61556", + "libraries/3rdparty/lwip/contrib/ports/win32/msvc/lwIP_Test.sln": "bdbe2d92dcb53276477d49bbcc97bc37cb6bf4ba8cc04c9fe726f89991d66643", + "libraries/3rdparty/lwip/contrib/ports/win32/msvc/lwIP_Test.vcxproj": "c15807dac7ae4523a5bbdd89e018e56a5557c97dc8850fd251080df4a42c7e4e", + "libraries/3rdparty/lwip/contrib/ports/win32/msvc/lwIP_Test.vcxproj.filters": "436cd664d2cff5d2bfe183014612080c5db31baf391f48abaedbc2c1a2a3778b", + "libraries/3rdparty/lwip/contrib/ports/win32/msvc/lwIP_pcapif.vcxproj": "71dd4e10a28aedc4a94374dfcc111479eb592a3689a35b660c694a63016b268d", + "libraries/3rdparty/lwip/contrib/ports/win32/msvc/lwIP_pcapif.vcxproj.filters": "da07818456b7c0200576013510cc1b1572946446eea7e8b4b36c6fa95d7c04ed", + "libraries/3rdparty/lwip/contrib/ports/win32/msvc/lwIP_unittests.sln": "eae7eb889df8e3c82fdacc84de7e25854f23bbe4659f255381399423415aae71", + "libraries/3rdparty/lwip/contrib/ports/win32/msvc/lwip_unittests.vcxproj": "404a46e5f20505743126a197616c21601a6dbc9b75c028cf6b26fb94a7a59226", + "libraries/3rdparty/lwip/contrib/ports/win32/msvc/lwip_unittests.vcxproj.filters": "68aafaf14d827a55daebf4d1dfe5524ae0cacfa1a74196ba41b9c29421ba4ba2", + "libraries/3rdparty/lwip/contrib/ports/win32/msvc/makefsdata.vcxproj": "a48080a571420e1a5d80287ee48e36a4a76d72e2b7edc221c5edc75331822d56", + "libraries/3rdparty/lwip/contrib/ports/win32/msvc/makefsdata.vcxproj.filters": "607321cc4880ab4f3abf764cc0c5ff68ab4aa70ac493ddf9182ba7658b064db9", + "libraries/3rdparty/lwip/contrib/ports/win32/pcapif.c": "29e053329bff40164faec9b7f7a8c241ea3f2d98e29c2591550a315b6581ef08", + "libraries/3rdparty/lwip/contrib/ports/win32/pcapif.h": "a19fe4f3aa7928d00c2c2800a8fd4ed85a3cb33db8dcf01d3243683c43817d10", + "libraries/3rdparty/lwip/contrib/ports/win32/pcapif_helper.c": "68e2456c98f67ae98a4001c20c2f8ed2dd55427d48087bf13ef88c00fcf07ac7", + "libraries/3rdparty/lwip/contrib/ports/win32/pcapif_helper.h": "2c5693fba9a2db77704cfa4a062675e2bddb6844f8187c28c4a93dc95d362752", + "libraries/3rdparty/lwip/contrib/ports/win32/readme.txt": "829c6e4c86389fb33116d765531ef74b7514569c4c87b613ed5bde5940d9352a", + "libraries/3rdparty/lwip/contrib/ports/win32/sio.c": "305985ed399195d0e7e3a8813bbedb112f9f6cf523f484610fb7b6ad093cb6bb", + "libraries/3rdparty/lwip/contrib/ports/win32/sys_arch.c": "1ffc55af07e4293c35a206d9af3c0269e005f733c9a0d6fc1c45da08767c9ebd", + "libraries/3rdparty/lwip/doc/FILES": "7e411f98dd0b535f78f1cc4ca81bbd596ce704a233c24933c247d11eb4a07662", + "libraries/3rdparty/lwip/doc/NO_SYS_SampleCode.c": "0dc59b5572d2d9576f74ffe0f62791e055839e948ea174ec75ae617742c5b6e6", + "libraries/3rdparty/lwip/doc/ZeroCopyRx.c": "cbabf596cfa079b493582ec1431d9885c68bb2adf5c2cb897730d7ed03ce852a", + "libraries/3rdparty/lwip/doc/contrib.txt": "7a032f6f39a904b822791001f7091fc759bdae67659b39424d46382293450220", + "libraries/3rdparty/lwip/doc/doxygen/generate.bat": "edc28fe50dc150fe0ddba1369f05511a5437a4b873233d75677a9930dbf580be", + "libraries/3rdparty/lwip/doc/doxygen/generate.sh": "d5134949019de866042b12d7855892036790036b5f12a3d53ea477babc3e8a7b", + "libraries/3rdparty/lwip/doc/doxygen/lwip.Doxyfile": "448e81969aeb8c95163560a9ada25965df9e508afd3ac15f1220bd1ee48e0f95", + "libraries/3rdparty/lwip/doc/doxygen/lwip.Doxyfile.cmake.in": "c08e8f9b8c60bd528a5ed3162708e4e3cf052c7497417602ba2fb36426e587ef", + "libraries/3rdparty/lwip/doc/doxygen/main_page.h": "5520224df4911884cd57757dc146e4c1289365e1b4c24c4fa6755392188c3371", + "libraries/3rdparty/lwip/doc/doxygen/output/index.html": "65219746dcce33cff1833a9629610bcce0ce9aa100ec5d54fc808d143f54ba2c", + "libraries/3rdparty/lwip/doc/mdns.txt": "230cf15e5613c676dc7035bf1b61d9294a92e2ff31419904dfacab7dc93ac7c3", + "libraries/3rdparty/lwip/doc/mqtt_client.txt": "af683b0d30f5896ae89cf003962e39cd3dac04e8b4802ae39e9cb143d345b357", + "libraries/3rdparty/lwip/doc/ppp.txt": "a7b55cc1c17b4177bc43bd0769ad5a0a795046c4ef5717fd63655229eb9100ea", + "libraries/3rdparty/lwip/doc/savannah.txt": "f895abd236a811a976d182b36e2c18cfb657078df74b50d2f98cfadd35ad192b", + "libraries/3rdparty/lwip/src/FILES": "05faeb3c86d87e76ba9366ea01db86c00977e5d811c57c6dde081ca9ec6fec2e", + "libraries/3rdparty/lwip/src/Filelists.cmake": "b1bedb02aeb601f36ed5b3dbc20606d9697db4427167cce788936b4233871512", + "libraries/3rdparty/lwip/src/Filelists.mk": "a750091212a64e856461256dc27fd749f7851780bf70ca3b67751afe36f2699e", + "libraries/3rdparty/lwip/src/api/api_lib.c": "c39b73d197e840ab1648710530595ad1fbf234872d89b327b2bc259b74252e69", + "libraries/3rdparty/lwip/src/api/api_msg.c": "cc903062accd85a9f5ff849e9d059e1cdc06d536109ef0ed1fb31e53fdb7908f", + "libraries/3rdparty/lwip/src/api/err.c": "5dd20e93a89f5cf4492e6cc3de49a5b6de6a9b15136963cef2a08a5e411a1f15", + "libraries/3rdparty/lwip/src/api/if_api.c": "eb6c944f66d0daf48306b308c5dff528b167f1284edbfbd87930c48d2deeba7b", + "libraries/3rdparty/lwip/src/api/netbuf.c": "07170f98220de0017468b552e59f16d184d32ebc502dfc819ca2e7e4deb56a1a", + "libraries/3rdparty/lwip/src/api/netdb.c": "6f0211709009d8562fee260ebdb958f12693eb490d3ef8837b0e8dba6d4a1095", + "libraries/3rdparty/lwip/src/api/netifapi.c": "d8426d620c4556c1f8cfc68aba0e91c8e7bbe214a13fb877f364041f9bf8ec34", + "libraries/3rdparty/lwip/src/api/sockets.c": "1b861f167324ad671ba3548cf55caecb01e355eae4eef3e6e58a6f6346d83235", + "libraries/3rdparty/lwip/src/api/tcpip.c": "826705504f016884a70c903b86c988335dfae963556664688ddfc1191d9e416b", + "libraries/3rdparty/lwip/src/apps/altcp_tls/altcp_tls_mbedtls.c": "1ec063ce024bc31ce247906a2d6e89a9c6e6c4c65a0960a0f7094c08615a8335", + "libraries/3rdparty/lwip/src/apps/altcp_tls/altcp_tls_mbedtls_mem.c": "45a0cd3bb15895dfdbfc5723d31e268549a89b1b730666e13f0f9ecdafbde9a8", + "libraries/3rdparty/lwip/src/apps/altcp_tls/altcp_tls_mbedtls_mem.h": "e145466f175096ce419c0e6e267353b3f8af174c0135a1485305ee79c71ac9ab", + "libraries/3rdparty/lwip/src/apps/altcp_tls/altcp_tls_mbedtls_structs.h": "51238ee0fdc56828904a777ace9864f907790c1bfa29be847b146b6b58f55fb8", + "libraries/3rdparty/lwip/src/apps/http/altcp_proxyconnect.c": "e9fe1a344f0faa9814ccd8a17b8cd69cc7be90a74fba6d8643045eb6198acdb6", + "libraries/3rdparty/lwip/src/apps/http/fs.c": "91cee1c0dd66b171e7459ab2d5d3d89483d13f9fb5d5fa77acba80bd68cd8534", + "libraries/3rdparty/lwip/src/apps/http/fs/404.html": "093f7768e78b045d8bee613880ada36c5af27e738ce906e5ab35bde33ad2c55b", + "libraries/3rdparty/lwip/src/apps/http/fs/img/sics.gif": "3b4eb378fdefac1e7dd6dbb6c84db20e1512463457626f5d991bf7c1ccb7cf63", + "libraries/3rdparty/lwip/src/apps/http/fs/index.html": "d34254865305f1f175294b4b1591f1f4a54145c28937f4e3fcb7f771d0a5e9a7", + "libraries/3rdparty/lwip/src/apps/http/fsdata.c": "71eeb2b3435f2d46200bdd64fbea09301ea56f41ee64660740d893a2621ad192", + "libraries/3rdparty/lwip/src/apps/http/fsdata.h": "44df92ed526d0d6b1c374fdd97a96b3f5eb188c7d1084e32fcf420a8a23e3d0f", + "libraries/3rdparty/lwip/src/apps/http/http_client.c": "767525ee96ebfe467e3cf71a1e947d9e2e15f8ec4bbad5c2a353c2f31da418b5", + "libraries/3rdparty/lwip/src/apps/http/httpd.c": "0c83baecd0a5418decdc8577bd719f8bceff3b6a2475bf52af800e54e0dd0583", + "libraries/3rdparty/lwip/src/apps/http/httpd_structs.h": "392cc349b27b067284a51bf767e0685ca4ec8787485d10f2740128364660e4a0", + "libraries/3rdparty/lwip/src/apps/http/makefsdata/makefsdata": "660649c3cd0b5fa548baba63db7c8218aa13269825d3cdec0d4ad577d1338b20", + "libraries/3rdparty/lwip/src/apps/http/makefsdata/makefsdata.c": "1c1bb5c514ebff1e8da8d24967fa00ddde1be219298e67e4a77e399c21f25c53", + "libraries/3rdparty/lwip/src/apps/http/makefsdata/readme.txt": "033f3db7c66384b1da4c0f3251b6f7e21342655a9a3996edbc0fe87d37296838", + "libraries/3rdparty/lwip/src/apps/http/makefsdata/tinydir.h": "0d1716fa784db3441d241ddec4f75c2dbfe5d6aaea2f091eec7fe070c18d443c", + "libraries/3rdparty/lwip/src/apps/lwiperf/lwiperf.c": "e13887dfc67f0bf9034531165d635979833785aa6d1e4aaf983fc819df1499c6", + "libraries/3rdparty/lwip/src/apps/mdns/mdns.c": "c48c2cac0c08afe239f1e716db48b9c77287a0228a7fb69cfbf55ec823cccd7b", + "libraries/3rdparty/lwip/src/apps/mdns/mdns_domain.c": "fd8663f64e25bb9367451a39ac6c6d8b216d25f5e6c6087d541ec2d64dc21685", + "libraries/3rdparty/lwip/src/apps/mdns/mdns_out.c": "64069a359a63fa144462c5579f275ef3a6e338de3b52a13008429c2d12a7f28d", + "libraries/3rdparty/lwip/src/apps/mqtt/mqtt.c": "a99dfb19dc99160dfb19e6be8a43d4ffdce01a6279dbf88ffc047becc2c77e52", + "libraries/3rdparty/lwip/src/apps/netbiosns/netbiosns.c": "49c51ffdfc4e410761ecf3fe7eb3e0139f1a655a25c069d1b2d2afbdc7860e2a", + "libraries/3rdparty/lwip/src/apps/smtp/smtp.c": "9d4043f779d2f594423298c8408b02fc187640ff7f0fe5e902f53a61b76d2120", + "libraries/3rdparty/lwip/src/apps/snmp/snmp_asn1.c": "d8bab135914260bc8cb3810be04bb17dd6dc58abfb46a063cd2930f5dfcb9a92", + "libraries/3rdparty/lwip/src/apps/snmp/snmp_asn1.h": "87bc7b07c8c510b17134ab05a22ee675c9c48450169dc99e600be2f331a27f54", + "libraries/3rdparty/lwip/src/apps/snmp/snmp_core.c": "e5677cad8ef17bdc5b38a134756accc1821fe079a1cd8e83283f08b3d4b52080", + "libraries/3rdparty/lwip/src/apps/snmp/snmp_core_priv.h": "e486ddc80307a3399c3547855adc05c9ff9040b0b9be237c0af232db6bd00abb", + "libraries/3rdparty/lwip/src/apps/snmp/snmp_mib2.c": "1695042f8e26a8c2a830c6c7df35ef7b084fb184b84638e56eef46c4faa3386f", + "libraries/3rdparty/lwip/src/apps/snmp/snmp_mib2_icmp.c": "1072cf5d410a39b540ecd09554e98b264488a26f90628f67ccdc9368d3b5a179", + "libraries/3rdparty/lwip/src/apps/snmp/snmp_mib2_interfaces.c": "4998987c9ba42a8808b317dc4a67dd8dd761371d358f3ad4a43fd704b6cbb330", + "libraries/3rdparty/lwip/src/apps/snmp/snmp_mib2_ip.c": "e4121927b1b42e2f8ecd6ff4b72449a9ce2fb6750ffaeb63598b719920ea3406", + "libraries/3rdparty/lwip/src/apps/snmp/snmp_mib2_snmp.c": "bb5d3ced0dbd9b11cef0bc337791cd2cc4c06f7562e1d4b351e0043388a5c816", + "libraries/3rdparty/lwip/src/apps/snmp/snmp_mib2_system.c": "e4454c37018aa43bf95368dd5abbb0a18306be4639d79af0c4e2247697483b36", + "libraries/3rdparty/lwip/src/apps/snmp/snmp_mib2_tcp.c": "31829ddc6f5ad49e1f4c5b4bee0c51911a3fbbfba2553fb601e30ff4a7d0c5f1", + "libraries/3rdparty/lwip/src/apps/snmp/snmp_mib2_udp.c": "490f18bce9e02d6350b978adbc882323d7ab43100c0072656dab15fb18033318", + "libraries/3rdparty/lwip/src/apps/snmp/snmp_msg.c": "23d3488c435784fc9ec9bb196da4e0dfb2ecce4a8c28a0358273571e417d12a6", + "libraries/3rdparty/lwip/src/apps/snmp/snmp_msg.h": "1ddd054f74cea2c6c595b22228461578114d381fe82f86c96c9cf85cf5dc8dee", + "libraries/3rdparty/lwip/src/apps/snmp/snmp_netconn.c": "2c44422bf05bbbd8aa7705d0fd408f7e9afd8e1a67b366af403e34257e9c42e6", + "libraries/3rdparty/lwip/src/apps/snmp/snmp_pbuf_stream.c": "9d2dc736dc4d30db370f4f0e0d02ab78b57c240cecda6b77796017ff56bdcb20", + "libraries/3rdparty/lwip/src/apps/snmp/snmp_pbuf_stream.h": "22630a24db7edbcaf482b7975765e7df0860f141e9bd9c48083e00af0b7eeba7", + "libraries/3rdparty/lwip/src/apps/snmp/snmp_raw.c": "2c5eedb6d972f6313575f837d0e9c33e129fcc43498d180eef6c80c8c4a85c73", + "libraries/3rdparty/lwip/src/apps/snmp/snmp_scalar.c": "065919819cd402d35c925e80f7732c70872d78faf69f77964e6b75c26be7563d", + "libraries/3rdparty/lwip/src/apps/snmp/snmp_snmpv2_framework.c": "9e0e7a9bee3cd1e55da9398f16e47f5e83395e8979221f0d64809f06c1230994", + "libraries/3rdparty/lwip/src/apps/snmp/snmp_snmpv2_usm.c": "b1825260c0a4b860d33a258f4d6eec789876c62a167bdf63b67d0edcc6c0c5c3", + "libraries/3rdparty/lwip/src/apps/snmp/snmp_table.c": "72546d138df585ada6fb1d854b65f7d54d81e98bed5dcdeab79c8c043704e116", + "libraries/3rdparty/lwip/src/apps/snmp/snmp_threadsync.c": "8acbd0cab2bc51e0c8afe971ad1f670a6766217f9bd3b72a712adbcd7848809a", + "libraries/3rdparty/lwip/src/apps/snmp/snmp_traps.c": "de7a680466a50fe625bae6bc37f051c3b2a01c0a21b3bb907966838c34e778a0", + "libraries/3rdparty/lwip/src/apps/snmp/snmpv3.c": "9dec4ef75e29632234089a5593cbd27f9dea972f0829f07bd15c84a14f947ba7", + "libraries/3rdparty/lwip/src/apps/snmp/snmpv3_mbedtls.c": "7dace5c3961dbdbf6b2085c4403e83aa6666d0ba1a8d0c70709873af5c6609f3", + "libraries/3rdparty/lwip/src/apps/snmp/snmpv3_priv.h": "f7027abe4f437bbd639ec6703cc9549ce6f0881cee0e44c461de686feef02d2b", + "libraries/3rdparty/lwip/src/apps/sntp/sntp.c": "5130700b19c4ef61a578c5c19ceb3b18e81f7b1349d0511577552789dd8116ed", + "libraries/3rdparty/lwip/src/apps/tftp/tftp.c": "1bc301146ca1b3824b0d2e56ea75753df2201777d653e6b2ce3d6e93461e9765", + "libraries/3rdparty/lwip/src/core/altcp.c": "3c6653588772a62efdd11ceeffa760847f95d8ec98889c7551e9a1eb8326f8cd", + "libraries/3rdparty/lwip/src/core/altcp_alloc.c": "90db26c801a4a6466e188e8b5a6b8d2aac2e6f39b4ceeb0f825e7b35ae1786c7", + "libraries/3rdparty/lwip/src/core/altcp_tcp.c": "786830cd6edb63dc0c18a34db6e539058ca499f74fa9020d0808df7f07d232cc", + "libraries/3rdparty/lwip/src/core/def.c": "43723472fe2eacb50102403d7410f3c99c1dba7a37406a761c6a384e3a231ebc", + "libraries/3rdparty/lwip/src/core/dns.c": "94db6c8cd89d6f99189eb19817bf69959a5b2dee25bd0cb5d7bb5250901ed799", + "libraries/3rdparty/lwip/src/core/inet_chksum.c": "9f73e859881dd5f24ed5fbb5099bb041aa7d93dacbc7b28e3ae23c0cad5dcc92", + "libraries/3rdparty/lwip/src/core/init.c": "4b9d5a1d04e5937b49d98e23908821e09ca6308f6e8e4cde384adc22e72a4ec1", + "libraries/3rdparty/lwip/src/core/ip.c": "82d0fc6b45c6d1af88bdece3229fc9821274263c261369de4f81b8d6c80751e7", + "libraries/3rdparty/lwip/src/core/ipv4/acd.c": "c793e2cf2ea9a1c4a6bcc0e2b4ec05766c7fe0c153d1bd19b25d6a56b711ac40", + "libraries/3rdparty/lwip/src/core/ipv4/autoip.c": "225b55a6533ec9cf741be0bfcfa947da7ef7dd20b9fd6597bdcb40d7d0ae668f", + "libraries/3rdparty/lwip/src/core/ipv4/dhcp.c": "6841841a9d11133387f9d879aabbdc2c710b5a22e5604526d4ced605845e4d10", + "libraries/3rdparty/lwip/src/core/ipv4/etharp.c": "b391a21bd5d7b69a185c20ad220d52fcd3b4ca7b5452f69089a9258780ce86ac", + "libraries/3rdparty/lwip/src/core/ipv4/icmp.c": "3072098d2bdcc364a1ff79493c5bb6c26470226d3dea98c6a8bb15269a3df0ec", + "libraries/3rdparty/lwip/src/core/ipv4/igmp.c": "7e541cb6884e4cd1605e7edc8652596b7edbafb5430487720fe4eae2ee3bc1a4", + "libraries/3rdparty/lwip/src/core/ipv4/ip4.c": "b22c7f868b3c19c3e187260cf47cfe06d254191f3c2c051f0e934151e5d86e70", + "libraries/3rdparty/lwip/src/core/ipv4/ip4_addr.c": "44d5dabfeda2558860fe831107040148f111b20bf372dfedaa370086e0aa588f", + "libraries/3rdparty/lwip/src/core/ipv4/ip4_frag.c": "dd03b42a7d02f00a1c9fafa8c83548a8b2aab19dfaa136451120ad10d964b68b", + "libraries/3rdparty/lwip/src/core/ipv6/dhcp6.c": "1bd204acd3d3ea0c01ffc0476c6aa4cf3fda7b862561ab4c31ec4b185fc3d0ba", + "libraries/3rdparty/lwip/src/core/ipv6/ethip6.c": "548b460688f824015b5b30401cf907828f1dc088a8442d8ee43e4049c1e1401d", + "libraries/3rdparty/lwip/src/core/ipv6/icmp6.c": "59fac03d674da3806b091bc2b285d8276378e3f9ff6ab2cc0c2cbe3241d5e350", + "libraries/3rdparty/lwip/src/core/ipv6/inet6.c": "3f7676e46413586fc3d07438b51c0dcd46bb3ba24644892362cf47f84fc15390", + "libraries/3rdparty/lwip/src/core/ipv6/ip6.c": "2496b4b1f5a5bdcf158141c10a216ec11c3ef0bdc7b01c82eb59cc7c08d6be84", + "libraries/3rdparty/lwip/src/core/ipv6/ip6_addr.c": "fb4be0a5b3b048bc4b9ad1b4a18ff18f56c80c0337bd4a88fcca5f029872f46c", + "libraries/3rdparty/lwip/src/core/ipv6/ip6_frag.c": "762b56b9e8f5cfa47129b74189ee9dcca53f4fa6a8e3c801896fa017185a7653", + "libraries/3rdparty/lwip/src/core/ipv6/mld6.c": "14a863d902369370ba5c66777e6241f6f8a5be5c54892dd8904fdc6daa4491cc", + "libraries/3rdparty/lwip/src/core/ipv6/nd6.c": "ee4f3c86ccd433d502bd405b6dd8d82cb8cd3e38ec49361e980ab95b3371af2d", + "libraries/3rdparty/lwip/src/core/mem.c": "b15257ccf032eca75ab4bc885cd26181120efcc9503912e5505c025f40af20b4", + "libraries/3rdparty/lwip/src/core/memp.c": "91ca3a00487d61849324ae571ac9ede550a879365c557aba38667ace122b6c00", + "libraries/3rdparty/lwip/src/core/netif.c": "f3cdece0a08a768949dcc756c4556d4ce495fd5ed9e571704834996471191642", + "libraries/3rdparty/lwip/src/core/pbuf.c": "1a73a2dba7a2a39571c1a55918eec3a1437568002f96bd59d3d8c85e5c4d7542", + "libraries/3rdparty/lwip/src/core/raw.c": "59a74c74b9ad47da73b1d1f5d64729f6a74d55194022f914e9fbc0acdad922c5", + "libraries/3rdparty/lwip/src/core/stats.c": "a18b76cde437213ca9f00137bdb61adb00f6f931fe28c40c81f811a5e674caea", + "libraries/3rdparty/lwip/src/core/sys.c": "86e336dedec36e042aadaebe93c8be944675210841ccabf180200e82c91b0f8d", + "libraries/3rdparty/lwip/src/core/tcp.c": "1a3629a48a20e647cb795bfe78914d7179d7336bc5148bec69c5d50c2e98cb60", + "libraries/3rdparty/lwip/src/core/tcp_in.c": "66ce1fb10e6d63c2e2db8b1d39149ecc9a20a27fcea53b6d88672d24b8eb86ba", + "libraries/3rdparty/lwip/src/core/tcp_out.c": "f18c88265cbefe20123ecaa30afcb423559805793e8f4a911e50adbd06d6e411", + "libraries/3rdparty/lwip/src/core/timeouts.c": "930bcfaf5b12b97f975fca7b8c2f7ab999cffa37f7c840ea91b340aa4ef62115", + "libraries/3rdparty/lwip/src/core/udp.c": "8e9a31ae52ca28eadb76c131a84d9a84443badcf38eb1dec52473ff5cc578f49", + "libraries/3rdparty/lwip/src/include/compat/posix/arpa/inet.h": "8b3edc25121de40cd1c3338d5d68be93091f0713ee8a23eba9789f14d41e0f6d", + "libraries/3rdparty/lwip/src/include/compat/posix/net/if.h": "b1cc52bb828e7cc23f070269a60a6ea33f3fd828190b0248f4cd589f06fcab6e", + "libraries/3rdparty/lwip/src/include/compat/posix/netdb.h": "ec3cb99596ef6bf11b39870541bf6607a7cff6011cfef99bf5d53f2abed05948", + "libraries/3rdparty/lwip/src/include/compat/posix/sys/socket.h": "8b3edc25121de40cd1c3338d5d68be93091f0713ee8a23eba9789f14d41e0f6d", + "libraries/3rdparty/lwip/src/include/compat/stdc/errno.h": "9fdac7c52c9fe0cfdf50f96eae29c5f341a9afde5a56166d21500c656a8a0728", + "libraries/3rdparty/lwip/src/include/lwip/acd.h": "234774b46c5e5dd152d2374aa6e570201a71662c0b0a940eae1e96f5321f6355", + "libraries/3rdparty/lwip/src/include/lwip/altcp.h": "03f1df1b3e703b4717a272d272ed32b8f0949ca1dd2f1e3f91fdc9d9ff4fc8f6", + "libraries/3rdparty/lwip/src/include/lwip/altcp_tcp.h": "e6b325b516d9e2af49b3187e01cd324066ef2c6508a2d9c06016fc0570148d43", + "libraries/3rdparty/lwip/src/include/lwip/altcp_tls.h": "be69627d2d3809dbb791e89cd551f13b8d0ebfbdfa9ffc3d74a00bf3b9f81ce2", + "libraries/3rdparty/lwip/src/include/lwip/api.h": "39a93870e9151ab0a4a70c007c931cf3b642b0704eee43aa662aba9cb9d14f4a", + "libraries/3rdparty/lwip/src/include/lwip/apps/FILES": "1baacff539b72c79be4fb5491be4963f0103557286405b3b4b4dd3396bdb0196", + "libraries/3rdparty/lwip/src/include/lwip/apps/altcp_proxyconnect.h": "c4b47d012ce46a6aa25d4038ecfe0844b0f3cdfe40e6234d622de298aa48ab13", + "libraries/3rdparty/lwip/src/include/lwip/apps/altcp_tls_mbedtls_opts.h": "7fb4fef6a302f23316bad885be4d108a9227377c00948df5be82c9a49fefb0b9", + "libraries/3rdparty/lwip/src/include/lwip/apps/fs.h": "e99ffa827fe8179b4c14c43e352aa88eb635eacf4c8ae40d227211bffd72f927", + "libraries/3rdparty/lwip/src/include/lwip/apps/http_client.h": "54c304f5f3264f555af454f0e14a7ea8610d7cdf4d1424bb79dd7f5159838bbe", + "libraries/3rdparty/lwip/src/include/lwip/apps/httpd.h": "4a5c1213fe0fd2082a8aed3084f4d282b8c51c3c464d140306cdce0f21c30b9e", + "libraries/3rdparty/lwip/src/include/lwip/apps/httpd_opts.h": "597f594dfe74f60b54f94956e18881ba80001c2717e7a96a73bac41344bbc7fa", + "libraries/3rdparty/lwip/src/include/lwip/apps/lwiperf.h": "ac35572131e102c96feffba4bf2788b841f0d162cde1af3d9b7914e11540b9b9", + "libraries/3rdparty/lwip/src/include/lwip/apps/mdns.h": "f0727b65bc6d136e5bee1c5ac52aeaeebdbe2f79a555d73ec19fe541eca93583", + "libraries/3rdparty/lwip/src/include/lwip/apps/mdns_domain.h": "6fd124cb463e07bf6ee81aa816db0cc86204c739f57e98be2f31691fea9bc456", + "libraries/3rdparty/lwip/src/include/lwip/apps/mdns_opts.h": "fc2060b24e899671a57343e83e2f116a179e64bfe3b83555c01929d7f4eeef37", + "libraries/3rdparty/lwip/src/include/lwip/apps/mdns_out.h": "2bff804ddd536e3b1daa97d6322a5279aac56288851de1f277c9c131f16dc365", + "libraries/3rdparty/lwip/src/include/lwip/apps/mdns_priv.h": "6c7fc358681e2ab448e045651157acf898bcfca72ab28646c375881d2c2971e4", + "libraries/3rdparty/lwip/src/include/lwip/apps/mqtt.h": "2fa1c2440833a82f07a5a362616833372f09a9006c7b099e813a48f12631599c", + "libraries/3rdparty/lwip/src/include/lwip/apps/mqtt_opts.h": "b8bb920a04472488f3fa1371cbb9c934bfead7cc8ba7f06316da4bdb2e354feb", + "libraries/3rdparty/lwip/src/include/lwip/apps/mqtt_priv.h": "e4903b34c12c941650045977e2629d41b1ca8407e48dc28d9ba36382825bb2d9", + "libraries/3rdparty/lwip/src/include/lwip/apps/netbiosns.h": "438a8e5cb80794959e0ebb0989a8d0615dc8d2d737fa97c231b10d4040e8f715", + "libraries/3rdparty/lwip/src/include/lwip/apps/netbiosns_opts.h": "c4dcff3906dc65cbe88d4fd6488f24a4eb1659d11fc7ec8cf7eef7eb3599b82c", + "libraries/3rdparty/lwip/src/include/lwip/apps/smtp.h": "61d670c0c914cc4d39f6c9e4661a1ac5e2b3cdfc45bb972b35cbf7ad3ea3d569", + "libraries/3rdparty/lwip/src/include/lwip/apps/smtp_opts.h": "6f3e0517c42b198078615074a72d8d158304264c8fa56a1dea79636bdd1898be", + "libraries/3rdparty/lwip/src/include/lwip/apps/snmp.h": "ae5a3b816e4920b0cbb4f79bd7b82a1dbc21378c834f15709db32282dccf898f", + "libraries/3rdparty/lwip/src/include/lwip/apps/snmp_core.h": "226888829e92f37f5e34e04f8472c2bc00f16817f41253288b7746eb1afeeb7a", + "libraries/3rdparty/lwip/src/include/lwip/apps/snmp_mib2.h": "dbc21ede7c6c4ac282b845aaf40961993a94b3ddb80a85e8aea66c9f6c5cae03", + "libraries/3rdparty/lwip/src/include/lwip/apps/snmp_opts.h": "fcd7d37a9418f6b25fc367ad1252c193a62915099b5bbc9f6693f0526d915bd4", + "libraries/3rdparty/lwip/src/include/lwip/apps/snmp_scalar.h": "f88ed96f2010bb383af723c50f8e0b93a9a5d566599ef0f35c11102124805c09", + "libraries/3rdparty/lwip/src/include/lwip/apps/snmp_snmpv2_framework.h": "8397074e6d74aceb6430e077537eff4330f6c712d00647a13f2832093a7f9eeb", + "libraries/3rdparty/lwip/src/include/lwip/apps/snmp_snmpv2_usm.h": "ddd777bac19a3f0c6823854f121e52e1c16a9f788540e1f172920b45a01713bc", + "libraries/3rdparty/lwip/src/include/lwip/apps/snmp_table.h": "1d0ef0508b2a00f55e6a90c27d484e526a2db5cde41c13b2aafcc6f2c8d7e25b", + "libraries/3rdparty/lwip/src/include/lwip/apps/snmp_threadsync.h": "cca3712f8a796bc481ca8be54c61407f5be5661acc10c95234ba4c31ef6a4996", + "libraries/3rdparty/lwip/src/include/lwip/apps/snmpv3.h": "7d1be4c7469ae8108d3657433f965c8884e66475178fee2a474fbbf01aee3fe0", + "libraries/3rdparty/lwip/src/include/lwip/apps/sntp.h": "c7b56e4653387585d4d5073c1917f93114027ccae13ef842880441477b471653", + "libraries/3rdparty/lwip/src/include/lwip/apps/sntp_opts.h": "e19e34bbe7f97d3f626b5975d1182771683cec15957b3415d4d674ef9489ada8", + "libraries/3rdparty/lwip/src/include/lwip/apps/tftp_client.h": "afe8265f9b7c7746c5bf86b5a739e1eae6c064c7af7e116959a7b52c66064ed3", + "libraries/3rdparty/lwip/src/include/lwip/apps/tftp_common.h": "76b2fb20cbe1212c6e691e9216ced22cc959f602ce76e0fed06dd3c474fb6f31", + "libraries/3rdparty/lwip/src/include/lwip/apps/tftp_opts.h": "185e13e074f0ca14271e187fe15fbe8411de355d55ec6cd4fbb5b271776f8479", + "libraries/3rdparty/lwip/src/include/lwip/apps/tftp_server.h": "627e19deb28320005781f9052d090aa6fc7d5785ccb0a4315c50beee4180d0c8", + "libraries/3rdparty/lwip/src/include/lwip/arch.h": "eaeacbe7eedb71d3d72ebd50075a3d8658c98a6e3d896626e77fb77bd489a89f", + "libraries/3rdparty/lwip/src/include/lwip/autoip.h": "754d9d41176e55a09124b09fa19fa3bac9b60332fd2d80e05bc03670d8fd2e0a", + "libraries/3rdparty/lwip/src/include/lwip/debug.h": "23a140dd9efdf8ddb8fa3e97697f09670d8d23ea2f1b58f1b45ca639e0f6f515", + "libraries/3rdparty/lwip/src/include/lwip/def.h": "cc272d004c7273c8919ece52759c3142f9a74d0560f15790b698b927020af383", + "libraries/3rdparty/lwip/src/include/lwip/dhcp.h": "f7e032cfb3cd931b73205069fc4cd42ff9429fe9a4f6c5175e1dcd4e89a07209", + "libraries/3rdparty/lwip/src/include/lwip/dhcp6.h": "dbac3f610e3e76547691af73a667bd5fd6564a7fbfa5ac382ef77604938d4afa", + "libraries/3rdparty/lwip/src/include/lwip/dns.h": "962c462c90afd41ed010b961f539c11b2baba3e8a6bfe584f331a5e4d43c1b05", + "libraries/3rdparty/lwip/src/include/lwip/err.h": "af26b573fc5c6a31877fdcde35e15382ac0c8b01f35af3f5a4429f9cf5dd323d", + "libraries/3rdparty/lwip/src/include/lwip/errno.h": "79dc6e03887ccf301e01a5129d1a732e21fb05308a8e38f04ada44e0928c075a", + "libraries/3rdparty/lwip/src/include/lwip/etharp.h": "bd50bec728d92dbd790a1504e52f42e4e1bdd018380c2b116f0dd8d3ed44e3f9", + "libraries/3rdparty/lwip/src/include/lwip/ethip6.h": "7a7e744ae373a720261be3651adaa0f35ff00ebb1bcf38e5330e371ddfd162b7", + "libraries/3rdparty/lwip/src/include/lwip/icmp.h": "84f63c9fbc6f6d66ef437f834279c25c20bfa78834eb0ee347c70377f7f8d8c8", + "libraries/3rdparty/lwip/src/include/lwip/icmp6.h": "f790cd444ecbe2e605b2f1a1deab3e6e9662ba6e87fd47b401912c5a118ee836", + "libraries/3rdparty/lwip/src/include/lwip/if_api.h": "6f6945cccbf0721180ddc7ff589d9f7b47f825ce62ae8b3cf6c186f5d2750822", + "libraries/3rdparty/lwip/src/include/lwip/igmp.h": "abf5ff1e19ec61690b6e8d55c8ee11afd1556b77c8b0fc452d5eb490810cc27f", + "libraries/3rdparty/lwip/src/include/lwip/inet.h": "2b8eb02e6708f3725d8c09967d316940ce82fc5e05042b9ce42e2d0530fe17c3", + "libraries/3rdparty/lwip/src/include/lwip/inet_chksum.h": "df6720f78e47afde2315d6a9dee1bb5b26f76692ce3e040c574409493435c933", + "libraries/3rdparty/lwip/src/include/lwip/init.h": "0696eeb90c80b8e1e47c03a90de54f25a116c0a93a2c0e6118ad68d427eb365e", + "libraries/3rdparty/lwip/src/include/lwip/init.h.cmake.in": "38df819f1ae753f240e9adb27398c14d6cf3e2e9065547a8ceb7694a9d132216", + "libraries/3rdparty/lwip/src/include/lwip/ip.h": "8b27813c2810b0564585ec06b1e1124f7dca28436c64125df15d496b1bf5627e", + "libraries/3rdparty/lwip/src/include/lwip/ip4.h": "188a62765c765fb07cda26a695f17c9c1674c0da7539c71e4d8f79b3f6f6ba21", + "libraries/3rdparty/lwip/src/include/lwip/ip4_addr.h": "373faa87a644cedd25874acfbaeea0349b34448fc2dafa5d0853d945e46a6fe8", + "libraries/3rdparty/lwip/src/include/lwip/ip4_frag.h": "8b0bb67655cba6da8cddc360e655c711553ad35e6306dbae618637e80be9911c", + "libraries/3rdparty/lwip/src/include/lwip/ip6.h": "7681c2948f700aa565c387ca20654f7322991ca15de7fd4e8f342a8ce44abe57", + "libraries/3rdparty/lwip/src/include/lwip/ip6_addr.h": "1dbc5e8ddd4c379303d4a3416f628063f0814814d365cc20dad5d89e0baa4070", + "libraries/3rdparty/lwip/src/include/lwip/ip6_frag.h": "3ab1bdb9220a3c87c8187fb26b1150cd03c4401b0a0c6db2ea4a22674141dd3b", + "libraries/3rdparty/lwip/src/include/lwip/ip6_zone.h": "951a5aeae08562dfc4a3bcc72de9952ac0045126a1cef9eedf9c6881ecb91a03", + "libraries/3rdparty/lwip/src/include/lwip/ip_addr.h": "9c309963b0679348d102e23665ced46740dda427dc23916d6f0434dd6170ae0b", + "libraries/3rdparty/lwip/src/include/lwip/mem.h": "416f961f338a0cba460494ebfe2527b7cc1fc5c18f489711e66af7dd76b7a223", + "libraries/3rdparty/lwip/src/include/lwip/memp.h": "79dfd019219330cf08deb1360483eb7d1da7a1a7a304034ef65ad52feefba1ef", + "libraries/3rdparty/lwip/src/include/lwip/mld6.h": "026348d23012aa1c2210ae53f2a5ddf3a273cf004ef597a1861266a01d4ca86e", + "libraries/3rdparty/lwip/src/include/lwip/nd6.h": "79fa57b4bded6763d38f5e4fa56aa2fac8117bf76ffc69869e05357af88951d6", + "libraries/3rdparty/lwip/src/include/lwip/netbuf.h": "1aa92014d8919c5073b5123c92881e00b0c507ca485667ccdebbf31afa214ff3", + "libraries/3rdparty/lwip/src/include/lwip/netdb.h": "582518497fefd57cd1d227947965c71b1dc16846add471af0fddfbb461c7aca0", + "libraries/3rdparty/lwip/src/include/lwip/netif.h": "cf6f1092f7c2748ae5aac89952e3a88903d43efecd040c9b479ba633386bf971", + "libraries/3rdparty/lwip/src/include/lwip/netifapi.h": "2c087eac81246ac74e3ba2c3922de0612890587f0cca7c1360f379a57ab45518", + "libraries/3rdparty/lwip/src/include/lwip/opt.h": "e411d94f8f45ea91aafec5e6ecfa198ad579e704de5a9e553e17f9a161584fd1", + "libraries/3rdparty/lwip/src/include/lwip/pbuf.h": "a4c632569405474706546d58f4ff044abab958e3fbc9d479f637066022f37d7a", + "libraries/3rdparty/lwip/src/include/lwip/priv/altcp_priv.h": "8b1c271129eea8f8d125ee8e653e143d5099683c2fddb9bc64524fcfdadcabd1", + "libraries/3rdparty/lwip/src/include/lwip/priv/api_msg.h": "e2458063868f0813bc26f41709bbf78d994760e72667b646b88f15e16e235f48", + "libraries/3rdparty/lwip/src/include/lwip/priv/mem_priv.h": "c90c9b64c8ea95c05d5b8b10d706acb53b6cc124166e8dd85b397698679f7920", + "libraries/3rdparty/lwip/src/include/lwip/priv/memp_priv.h": "37aff2894bbe25f1888e43b96be80f4c1a43a24867c0fc9aceb4093328682937", + "libraries/3rdparty/lwip/src/include/lwip/priv/memp_std.h": "86cdf1d80f2716a07011dc763e5fa614cd2b555382cb7d6750176116def67a0f", + "libraries/3rdparty/lwip/src/include/lwip/priv/nd6_priv.h": "0cd4756c17109d6d01c07ef35cbc527954a1cd926065432a715578590b8dfddb", + "libraries/3rdparty/lwip/src/include/lwip/priv/raw_priv.h": "0b2b019a55fab8eed89d668f13402778835117fe472464046472cd04b93c2bb2", + "libraries/3rdparty/lwip/src/include/lwip/priv/sockets_priv.h": "2efcf39c42b1a7055628461915d42521a4df3cb285b6f5635a5c6a961aff4f93", + "libraries/3rdparty/lwip/src/include/lwip/priv/tcp_priv.h": "547929dbf334d846444094ecb363680bf90320b198ac1e49027fda4049c07233", + "libraries/3rdparty/lwip/src/include/lwip/priv/tcpip_priv.h": "13fb2e7159ebcafc4ddda4961a9d70b2f8182f9e201aa990cb9148d8897bf598", + "libraries/3rdparty/lwip/src/include/lwip/prot/acd.h": "25ef5a9bfe37edbe5fbaed0a985c2ac0b4e928cd90b69941b46c533e7765cf7b", + "libraries/3rdparty/lwip/src/include/lwip/prot/autoip.h": "a0b78c818f6642e68c1d9c0b5c3ad12fc6595b66ac5ae41724c52decc6de760c", + "libraries/3rdparty/lwip/src/include/lwip/prot/dhcp.h": "bc74edb6abff7b5182e04e2e588292401ecba3875bb6673156b026a5c391dbc4", + "libraries/3rdparty/lwip/src/include/lwip/prot/dhcp6.h": "72c645a6153694229ca535f044af2d1520ebc7860baa98121747218a08c2b74b", + "libraries/3rdparty/lwip/src/include/lwip/prot/dns.h": "34049c0f7f489aaec12d0589dc51ecfb24408dba422f605d8deb207c44d02b8f", + "libraries/3rdparty/lwip/src/include/lwip/prot/etharp.h": "55164c0d047f1279982fef9681491c8811f8482976aff7fab9b63a9a589ded76", + "libraries/3rdparty/lwip/src/include/lwip/prot/ethernet.h": "42fbc05a563d3ad242663b7d82601bbae6c6d9c16a6da5b35b51a02799206303", + "libraries/3rdparty/lwip/src/include/lwip/prot/iana.h": "745c2d70a5d4839e3df5a34f7e37b83bcc7fe58f39eba1d2f5e238242d74c878", + "libraries/3rdparty/lwip/src/include/lwip/prot/icmp.h": "931d46a3e775efcd6076263e23eb564b612913b7c11f7b5d009e94fefeb20f28", + "libraries/3rdparty/lwip/src/include/lwip/prot/icmp6.h": "8d3bcb5d37b0ad3f73102ed2ab3c2b52a42492508d012d41d5b2233827232fdd", + "libraries/3rdparty/lwip/src/include/lwip/prot/ieee.h": "ec85a505aba178178743b34429f463a41ac43d3750d63901c7e1273dcd0a2ba6", + "libraries/3rdparty/lwip/src/include/lwip/prot/igmp.h": "9adb3a0b03feff302b057020aa860fd958f6ef4528225014c104bd4175ebdff7", + "libraries/3rdparty/lwip/src/include/lwip/prot/ip.h": "eb5371e5ac58467253d813bc58726e317f91abadb10336497de0d64645ec01cd", + "libraries/3rdparty/lwip/src/include/lwip/prot/ip4.h": "033570c0b7657f5475959f7b74d9e23c6f8e81498495d5b23d8c2eeb0640d7a7", + "libraries/3rdparty/lwip/src/include/lwip/prot/ip6.h": "c0514e97f153f2e5cf514e6f1f4350fd2cbcb7073ebc05495b436c638bd32109", + "libraries/3rdparty/lwip/src/include/lwip/prot/mld6.h": "9601cee67b48c4b7cadb75caf3d83c05f5409d367341af70af7e7e4f46f173f8", + "libraries/3rdparty/lwip/src/include/lwip/prot/nd6.h": "50cff239fdb433defe12f7e35c4f2964e42ad7bfeab15d3b274a59142c4d558e", + "libraries/3rdparty/lwip/src/include/lwip/prot/tcp.h": "db67bb5ea0517a8cd9e30ebf655743f69ce05e77ca6e4a113e8c60e69bd7c48a", + "libraries/3rdparty/lwip/src/include/lwip/prot/udp.h": "b56daa8ff1e8e52cdd4f720297f07af2a96feea254db86768e20e157d7ce2784", + "libraries/3rdparty/lwip/src/include/lwip/raw.h": "e9efc60e31f2ff39a98b1367968ac724fc91ecdc115a74fc44813b761f02caf7", + "libraries/3rdparty/lwip/src/include/lwip/sio.h": "b6555ae90164d0b66e2772ec3444ebba0133927e4f47b512b570819b66912ce3", + "libraries/3rdparty/lwip/src/include/lwip/snmp.h": "1f90da65829c29545e9562ce5355d1799ea36cd901ed8ea9faa8e1ef3d7c2ece", + "libraries/3rdparty/lwip/src/include/lwip/sockets.h": "7962d403d886cc9342ca66f4696bcada1bf2ee4c49e1cf7196f8525710368cf2", + "libraries/3rdparty/lwip/src/include/lwip/stats.h": "295e3f2f9be188c05a90c2bb7e57a250a07e5ca7c54bdd31a50309da82cc5874", + "libraries/3rdparty/lwip/src/include/lwip/sys.h": "8ae6002810cddab1b112cbe886f331f5019c8bd43d98446f644621ef907f9f60", + "libraries/3rdparty/lwip/src/include/lwip/tcp.h": "eb514477b21ed78dd4d527f4aea3bed5585200e285b85c666689b9c43b77a89a", + "libraries/3rdparty/lwip/src/include/lwip/tcpbase.h": "cf4b048f3bc228ab364cde15eb6be5eca961fab09036c699c2c4b1437ab90aff", + "libraries/3rdparty/lwip/src/include/lwip/tcpip.h": "c772dbff8e46a86ffa65ec62e5b304e75525b6bcfef94917fb7de1045449f603", + "libraries/3rdparty/lwip/src/include/lwip/timeouts.h": "a383b43e3ba021d06ff3791d223db46cb3385e8dcdfcec0221ef2a006243c022", + "libraries/3rdparty/lwip/src/include/lwip/udp.h": "f9783bca6b68b10c229185559e0ae7e79bb793e1d6c244c7b26408516187f1f8", + "libraries/3rdparty/lwip/src/include/netif/bridgeif.h": "39d409d880187e2a7b372ddae2b1cfc004b88a0dd786dbe9070945420b8e42c8", + "libraries/3rdparty/lwip/src/include/netif/bridgeif_opts.h": "bc6e5f0677c621a5a8adb315e1cdb06210e1391efea6d308684103fd38edfe66", + "libraries/3rdparty/lwip/src/include/netif/etharp.h": "2e1ab81eced65420cdee5940d2e547cae7b0fa70088f452692363676ecfc66dc", + "libraries/3rdparty/lwip/src/include/netif/ethernet.h": "1dd88263e583593e47f7c891680d67838287160551b8c06562c9feca1ddee443", + "libraries/3rdparty/lwip/src/include/netif/ieee802154.h": "02f21d8b3e143fa77d8fa3f0d3db9ac1683507436ab441a61d5012ddb6037699", + "libraries/3rdparty/lwip/src/include/netif/lowpan6.h": "538ac2429cedf9193b6538998f3ba5bdd003fbf0840fd03b46d4ad5bcfaa4c20", + "libraries/3rdparty/lwip/src/include/netif/lowpan6_ble.h": "5c40e2a9640810cebaa8a0e501913cae093368da21f1226e9476b078f34f247f", + "libraries/3rdparty/lwip/src/include/netif/lowpan6_common.h": "eed0a8f45ea6e62ba4238d6bc139a1bef5fe625ec7527b52856fbf885c12f8ba", + "libraries/3rdparty/lwip/src/include/netif/lowpan6_opts.h": "fc57628292ff0ccece9770a9c101b992f350c55088af2bb364246fbcf6f3f024", + "libraries/3rdparty/lwip/src/include/netif/ppp/ccp.h": "b6e681ffe6855a6772c6d0a9077f144676c30db0c9ec0ea461e816f7647d6d43", + "libraries/3rdparty/lwip/src/include/netif/ppp/chap-md5.h": "f67cd93664262575ded862c17bac7c1003e2eb690224b89ba2b0cdd221c2f725", + "libraries/3rdparty/lwip/src/include/netif/ppp/chap-new.h": "f7bfb4e194fedcd1e6d499320826ecca7f14add5170c8fb7d4832b8e831bc2ac", + "libraries/3rdparty/lwip/src/include/netif/ppp/chap_ms.h": "77316bd6366248a0d0715e19e231667c1564f3ef081dc3ba839cd673a5d4984e", + "libraries/3rdparty/lwip/src/include/netif/ppp/eap.h": "42589e98b4ff8470c0e9a1cecc45fa30e79e2c1c3452fc46e2a88b6ac617dfe8", + "libraries/3rdparty/lwip/src/include/netif/ppp/ecp.h": "4936fccc29a900ced5b67906f97f192ea634642b6a003605dc1cb40d65d011f6", + "libraries/3rdparty/lwip/src/include/netif/ppp/eui64.h": "fc79081c31fd7333b0e2b3cf61c870727a3b066d82482c894b02c81cdbf464c7", + "libraries/3rdparty/lwip/src/include/netif/ppp/fsm.h": "8751104f5cdeb3ace720744016431ee2d704983e8a94de7add0830e63dfdef0e", + "libraries/3rdparty/lwip/src/include/netif/ppp/ipcp.h": "60bb47d15951954c865393be49b64f6daecc966f7146aeee187530a111d9008a", + "libraries/3rdparty/lwip/src/include/netif/ppp/ipv6cp.h": "69de1cc233f9ec05312a6cd4d5b558d91d04e39626ad6f9e0fbc4ee61a5709d0", + "libraries/3rdparty/lwip/src/include/netif/ppp/lcp.h": "0278457347c50aeaa4636124d0265fb8064511f461de2b3ff7fa51e3dacb0345", + "libraries/3rdparty/lwip/src/include/netif/ppp/magic.h": "b19a254f135449982830685df31b948e0d5c7e44ac5875efc8d1a3ef20a3aff7", + "libraries/3rdparty/lwip/src/include/netif/ppp/mppe.h": "8dd28c994f67ca45b11586ecc195fabedd5d51efa0bd99872336d82886477c9f", + "libraries/3rdparty/lwip/src/include/netif/ppp/polarssl/arc4.h": "970bc9075bf7aef36f4a225ba8a3dcb89c16a1948016f3521ca4a7609b7ba284", + "libraries/3rdparty/lwip/src/include/netif/ppp/polarssl/des.h": "f0a3ea812ead16f7d8fba08115429b5bd7deed1d9ffc6dddf66ec44b1d95ef0a", + "libraries/3rdparty/lwip/src/include/netif/ppp/polarssl/md4.h": "d1982ff627c1176d03c60fa8ae307af09626a2655e08525a146019276edb9058", + "libraries/3rdparty/lwip/src/include/netif/ppp/polarssl/md5.h": "1962ff0d88f8a7efbb6c8592eb13154129cfc7012c8cc22be7981df35e3c8ba4", + "libraries/3rdparty/lwip/src/include/netif/ppp/polarssl/sha1.h": "2951ad6ae5b5797112ae1899cd814536c445334bf59cbd91bf5414db0613980d", + "libraries/3rdparty/lwip/src/include/netif/ppp/ppp.h": "58175d5f9fda4d88bdaab4f1da12da692dd9e732ee0c51d94319b3461edd01c2", + "libraries/3rdparty/lwip/src/include/netif/ppp/ppp_impl.h": "9a216f46049edfb333551cb4e7213ad537b0570c3211f0029b32bcd0c39cf62e", + "libraries/3rdparty/lwip/src/include/netif/ppp/ppp_opts.h": "ea99faa10a07d3e414696465ca06ba420c585cb9a683e20e8f3f24f80e03fe5c", + "libraries/3rdparty/lwip/src/include/netif/ppp/pppapi.h": "f1520293792605ad0f0c78c93a5907d478affbebea8d6be1b0f8a8bdc9c4b427", + "libraries/3rdparty/lwip/src/include/netif/ppp/pppcrypt.h": "954943c6c1286c707c0f1182428eb514dc8cf87a704a4e8f26a926553f260d58", + "libraries/3rdparty/lwip/src/include/netif/ppp/pppdebug.h": "fab025981023c13721fac50978c5416ce2c9a0f40db200ef78ce4cd36d3b9b63", + "libraries/3rdparty/lwip/src/include/netif/ppp/pppoe.h": "fb57591c5679950f4af58b17427271aa3554b9f8e49cc59d913f79de0bf07363", + "libraries/3rdparty/lwip/src/include/netif/ppp/pppol2tp.h": "ae9a819aaf816ae4ff25c35bddaf7c10654a54b95451b247fd5d2824229d3cf7", + "libraries/3rdparty/lwip/src/include/netif/ppp/pppos.h": "c225fffa8f85bc170992cef05d8d7350c86d2b3ae3d55951d71e35c9fcc2390d", + "libraries/3rdparty/lwip/src/include/netif/ppp/upap.h": "7cf555545ed20e7d7897ed935c6333e77d629b1862e4e2136df87ebebfcb3907", + "libraries/3rdparty/lwip/src/include/netif/ppp/vj.h": "d6c9da89224974d8486dfa0082ecca0d487715df65a37088db55e7e51c745a14", + "libraries/3rdparty/lwip/src/include/netif/slipif.h": "f58cc6842251be4358904b2475021fc2da592de3756fbb358b615b0173efd791", + "libraries/3rdparty/lwip/src/include/netif/zepif.h": "7b3a4c9094483c14eb3c4da651874aca325e3927fde02eb28e226040deef4714", + "libraries/3rdparty/lwip/src/netif/FILES": "10564ef1c25f4ca37518cc705b3cb27b206cfea82db6a9601ad416aeffe560dd", + "libraries/3rdparty/lwip/src/netif/bridgeif.c": "863a91f68fad44e603ead49d9398b1ffe3137588324c762fcb332c0e47ba85c9", + "libraries/3rdparty/lwip/src/netif/bridgeif_fdb.c": "dcbd424f88425943409f2aa54a93fa09afa19473444d005a6bdbe3aad85503f5", + "libraries/3rdparty/lwip/src/netif/ethernet.c": "e1c1b7ceabe5ab707e6cea7565384fad597c1035ff17883a8a8ff443473f89d3", + "libraries/3rdparty/lwip/src/netif/lowpan6.c": "895c236b64b09f113ee6b5b1513df69005a4405d8fa403df9c31b73080912cca", + "libraries/3rdparty/lwip/src/netif/lowpan6_ble.c": "813e98990f440b14ea66282d1b490447812b66268ecda7097a265a6ec78f5ef5", + "libraries/3rdparty/lwip/src/netif/lowpan6_common.c": "94372df9235c9fe1b08778c3c31234181e27d16e60e7e542d7005181108a7fe6", + "libraries/3rdparty/lwip/src/netif/ppp/PPPD_FOLLOWUP": "d4e0485a2936de3201dca8dc10068534fff399f8eadbd31684f36babc4b094b7", + "libraries/3rdparty/lwip/src/netif/ppp/auth.c": "fe2afed36bdba441463e4e5211395614e9d7685eb1760d5d84137baf58a42dc7", + "libraries/3rdparty/lwip/src/netif/ppp/ccp.c": "88165e63b1a7b6c56f4e952544a2375c6033ac4c2e0ec4779d145322d951ee94", + "libraries/3rdparty/lwip/src/netif/ppp/chap-md5.c": "9f099cddf6fa7931b962fda6dc1d1df5eecf8c94881eda29a63d1abafe317ec2", + "libraries/3rdparty/lwip/src/netif/ppp/chap-new.c": "658070df33b3242b150efce6059a9998c15f5f9192ae06b4cd5e7cffa55384a8", + "libraries/3rdparty/lwip/src/netif/ppp/chap_ms.c": "d3940e2add91c8a721b32f1e04bbc88add012d7146dda03744608f31ba6666ec", + "libraries/3rdparty/lwip/src/netif/ppp/demand.c": "b07dc6e971fffe70cd73f4ff6733655989e34dbee3fc6c2dfa164fadb6578975", + "libraries/3rdparty/lwip/src/netif/ppp/eap.c": "74d26511e05f8b39b4b5fa04722da2bb620e661ec630a5c8d7cc433b5bef702a", + "libraries/3rdparty/lwip/src/netif/ppp/ecp.c": "b6736696754a289ea5464f7386d05790365b873c0ed0123692bebc4ebb18e6eb", + "libraries/3rdparty/lwip/src/netif/ppp/eui64.c": "531be9bfa9c33e0abc4452b976ca4ab60f8f0ecc92d9af91121551250810cd4b", + "libraries/3rdparty/lwip/src/netif/ppp/fsm.c": "fe71b4b142a07c13ef69ff3e344ee3508b44c0471a62c47ec6ec585f250fc940", + "libraries/3rdparty/lwip/src/netif/ppp/ipcp.c": "9ea7ec074416030a39589392d62adc451ab2c78c61c506cec7674436f085fa90", + "libraries/3rdparty/lwip/src/netif/ppp/ipv6cp.c": "707b3687113f9e8fdf4230a1a750be60aa05deb081e0ece81317cd49b718831f", + "libraries/3rdparty/lwip/src/netif/ppp/lcp.c": "dc39acf562d7df70fb1eac8d7f8218dfb9d592498638325e9fcd4d206f97eb06", + "libraries/3rdparty/lwip/src/netif/ppp/magic.c": "aad196f6945d3b80b158b5011d4eb216a3e1766b73abcd9c19728bb8b8e3e3bb", + "libraries/3rdparty/lwip/src/netif/ppp/mppe.c": "f209f08e59f0e9ed5d4b736a7534e6c0df726b2d14cac07dee311017fa2a0a41", + "libraries/3rdparty/lwip/src/netif/ppp/multilink.c": "78920d813d0b638e287e5f15527886cfd53d5ea9a61cb6b325b6f8b3841e4bc5", + "libraries/3rdparty/lwip/src/netif/ppp/polarssl/README": "242dd0f7c45dd7fafc37e2caa4b1e0609e1cd9a61512d7772d58c41f7a7e7c95", + "libraries/3rdparty/lwip/src/netif/ppp/polarssl/arc4.c": "7d844ec4f6e88a788e17419d4525a07611851fe793e0bb52c7e24a1db5d2d6df", + "libraries/3rdparty/lwip/src/netif/ppp/polarssl/des.c": "4b2c48659036ad89adb2d08a2b54dc30fba73759a6a5ce810e9c794f7b4aacf4", + "libraries/3rdparty/lwip/src/netif/ppp/polarssl/md4.c": "9110b56e9b926edf560933b76d1bb1ca7e9532134773ddcb04bbd57db646e209", + "libraries/3rdparty/lwip/src/netif/ppp/polarssl/md5.c": "9bd07f764f9104538474c69838de131538f0a500952b8b24f32b758e23d91b4d", + "libraries/3rdparty/lwip/src/netif/ppp/polarssl/sha1.c": "844114b4c45f689aaef64df2bf8b445e6dcea9c52bb4cb485c18d0fb68e04d5b", + "libraries/3rdparty/lwip/src/netif/ppp/ppp.c": "c585c38d73eb2a2c27905acbc553acfad2d267e95e921f34295d2c344da677f4", + "libraries/3rdparty/lwip/src/netif/ppp/pppapi.c": "269bade48fe467119d59b3c33f8f42423c1b162d9e4cdb4c4da36bd87bcbd246", + "libraries/3rdparty/lwip/src/netif/ppp/pppcrypt.c": "02b12e7626078be9591237fe84ae000514a2cfd6f0653c890b7b75ce20cada8b", + "libraries/3rdparty/lwip/src/netif/ppp/pppoe.c": "7d658e3a24ed904c9ad9d393eb890f31326ae1fe8411ad7a036a0550e635fdbe", + "libraries/3rdparty/lwip/src/netif/ppp/pppol2tp.c": "18e83285eedf633c840db6a55077ce2cc902f19ab143c323c659c85ad25b8695", + "libraries/3rdparty/lwip/src/netif/ppp/pppos.c": "aff653829d77edb3e2ee197f1e4b3ff5e392e2f8e81a09a366576ab77a627e0d", + "libraries/3rdparty/lwip/src/netif/ppp/upap.c": "6944042740a916f6375d57437803e65839efbc901ebbb6cddc42c0a22c1eb33e", + "libraries/3rdparty/lwip/src/netif/ppp/utils.c": "fbc12cf311073c72d872ad5b382133c69144100b720c222e5331031ab30b6cec", + "libraries/3rdparty/lwip/src/netif/ppp/vj.c": "f70c1ac07ddaacf59f6b7ad28b1b657d645c5357ad8c4a7c449157d186fabefa", + "libraries/3rdparty/lwip/src/netif/slipif.c": "6e33b2aa2794b9baf67e8776b2c6e61b5e92725ee679067a71494dcb00071f34", + "libraries/3rdparty/lwip/src/netif/zepif.c": "374cbd2d942ed680a66bf6f36080ba2e7313bcd037a3380d6a7a53dfa3d75099", + "libraries/3rdparty/lwip/test/fuzz/Makefile": "0276ff5837ca4fe0178786ff2b1e1ec1c1ded76116c1800be97102c55780b3e2", + "libraries/3rdparty/lwip/test/fuzz/README": "e0aa244211046d73ed11c7150a8429b020f7ca958f4f45e61bdeb41c27663d2c", + "libraries/3rdparty/lwip/test/fuzz/config.h": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "libraries/3rdparty/lwip/test/fuzz/fuzz.c": "743d5ae304d1fa2f1e93fc858e2f97c8e822c266a236cc104b9dbb567fe1c98b", + "libraries/3rdparty/lwip/test/fuzz/inputs/arp/arp_req.bin": "90136462593149d9a7367a3ff8224baed060c562464aed70fd73a3a2eb56e054", + "libraries/3rdparty/lwip/test/fuzz/inputs/icmp/icmp_ping.bin": "8b136902714d3318066a465c6bbb659fb53290ffde7b4e44ce91cb51f8457cf3", + "libraries/3rdparty/lwip/test/fuzz/inputs/ipv6/neighbor_solicitation.bin": "2c4c8e93785f654e678a9309d7f8f142df493b5d923fc1d9770da99143e7166f", + "libraries/3rdparty/lwip/test/fuzz/inputs/ipv6/router_adv.bin": "efe0fa3a120d28ef1f8242fbf6e32722f072922cdf323268c7563c6f553192f1", + "libraries/3rdparty/lwip/test/fuzz/inputs/tcp/tcp_syn.bin": "f45051b6f9215e7c539982b1f3ada384c5d87da7f98aabc891c4aa069cc8fc73", + "libraries/3rdparty/lwip/test/fuzz/inputs/udp/udp_port_5000.bin": "1f061bca04aed291a4cc2212f925804c59fa1f0a4057931ae1b909b5723e27d7", + "libraries/3rdparty/lwip/test/fuzz/lwipopts.h": "f172aa424517abfffe32d789948126d4af82c588e7528d3f81a118ba32f4e103", + "libraries/3rdparty/lwip/test/fuzz/output_to_pcap.sh": "3ada800dd24ae2cf4cb41f0065aca8a78c29c6ae21271129ad8fe8fcf7f9dd25", + "libraries/3rdparty/lwip/test/sockets/sockets_stresstest.c": "a4f9ef34fa16d6afc0055ea68aeb9224ca2d0702adac56ec3dc0523544e4cb0a", + "libraries/3rdparty/lwip/test/sockets/sockets_stresstest.h": "b0f0b91e41ad2f86fbb0c889d9d0d38d6a3bd258d2dd5e0a3c5ac8a1ab7ac024", + "libraries/3rdparty/lwip/test/unit/Filelists.cmake": "3320870eff853e33d137578eb6fbae190e4e45b0fcef6f67ca30a881f569c00c", + "libraries/3rdparty/lwip/test/unit/Filelists.mk": "161801b0b6cf9decd2b2715e8d52e4697c6e969bb2e0cc95020eb233817429d4", + "libraries/3rdparty/lwip/test/unit/api/test_sockets.c": "57c81dfc3d13443232a95eeb4bbf7c8015b420e2e234e3448cfa747d798540a9", + "libraries/3rdparty/lwip/test/unit/api/test_sockets.h": "a9d4ea42dfdd6b976481eb6924b07f296b07c664ddf001b279609c7ffdf4e753", + "libraries/3rdparty/lwip/test/unit/arch/sys_arch.c": "b2e5944a75afb79466b993bccb2b554889ee9a1a48c0117749972199fca548e6", + "libraries/3rdparty/lwip/test/unit/arch/sys_arch.h": "8620ba7c2497f07926dd9b829753027ed477029e101a2c36079e506442b9e033", + "libraries/3rdparty/lwip/test/unit/core/test_def.c": "9df928c75ce8055b16642f53435a8cbcde5821916a3012e66caab98f305b9ebd", + "libraries/3rdparty/lwip/test/unit/core/test_def.h": "60e5dd455f893eaa2365fd2c5ad01d7adfcbd6ae4459a975a9abcb1e54746db4", + "libraries/3rdparty/lwip/test/unit/core/test_mem.c": "6f3e9d6a5c2e79b87d49bf17b068ce9f9965adb17be74355e25ac843b5f0ca1d", + "libraries/3rdparty/lwip/test/unit/core/test_mem.h": "54e2e3a94257fdfdbb31dbd686aff96032976894f9002188c3817f14d2ca1d00", + "libraries/3rdparty/lwip/test/unit/core/test_netif.c": "034ce07a28143aa81f6472f5ef8b22bab2d1dc3b358c8b831104a67ac1306593", + "libraries/3rdparty/lwip/test/unit/core/test_netif.h": "66ea5e6b4b2d405fa9492f044eb84e5043c399919b8b6b06d712e7ef5750e791", + "libraries/3rdparty/lwip/test/unit/core/test_pbuf.c": "7b3da0e82a0b44414c30e65a5c976ae58f57cbb01c7c7011fe1af3298e7543d9", + "libraries/3rdparty/lwip/test/unit/core/test_pbuf.h": "5eb3d4655112e690f0f1ccf1f7e7dcdde85a87d28fc903a1d89c8df14e738e73", + "libraries/3rdparty/lwip/test/unit/core/test_timers.c": "ab9cb9ebb9c1fbe4970a11453dfa1f29bd5fd90dc93b8561135713eff9394424", + "libraries/3rdparty/lwip/test/unit/core/test_timers.h": "56be4e53bb381b3fa2b9a28c57bbdfcdec04de3b441636b6688345198a42d48c", + "libraries/3rdparty/lwip/test/unit/dhcp/test_dhcp.c": "bed979fae13fc0698800b0b31d40c549175d60911aabc676793b85774421d022", + "libraries/3rdparty/lwip/test/unit/dhcp/test_dhcp.h": "8a2dac3d647bb143830666306cd87761c32f2ff033e11a58faff86a8e9a09a41", + "libraries/3rdparty/lwip/test/unit/etharp/test_etharp.c": "6b03c7393a9fae73ea757dc979cebea892c6367385a6eeb460f55085802d9b0f", + "libraries/3rdparty/lwip/test/unit/etharp/test_etharp.h": "b146eedd105d24070de6c9c42520120922cec7ed31e1b7c93305b471b9f9dcd8", + "libraries/3rdparty/lwip/test/unit/ip4/test_ip4.c": "f71eafadc1ebd8bfd90c5bec2cec9b423c838933e35212ddc25574935284269c", + "libraries/3rdparty/lwip/test/unit/ip4/test_ip4.h": "7638fa112bc0b0557aa87f5877b86d60c08a6675e456c834d67a579e9d8b372a", + "libraries/3rdparty/lwip/test/unit/ip6/test_ip6.c": "7f8add480419442841f8de72abe1346a2810d7e13cb0fea777b48154e3ccb6f9", + "libraries/3rdparty/lwip/test/unit/ip6/test_ip6.h": "1f4d745b8767e8f376e7b54a5b732e8ab4a19c1327b9484f25989159eb0a7320", + "libraries/3rdparty/lwip/test/unit/lwip_check.h": "9891cac2ce125e4e9e9459fcb9508bb58c6d0bed1caefabb188745230b9d4dd6", + "libraries/3rdparty/lwip/test/unit/lwip_unittests.c": "34718e3db1c2787ff462b5b64795c08b3d2d5f196f2ace46b041718ccecaca4b", + "libraries/3rdparty/lwip/test/unit/lwipopts.h": "143de1b8d885467b9690cc0756433b1a5b91150267922c997dc61492ed7a213c", + "libraries/3rdparty/lwip/test/unit/mdns/test_mdns.c": "ba2188e3d21678d88453e29a6c3324bb41f8aff218cb75283ad8673c702e4448", + "libraries/3rdparty/lwip/test/unit/mdns/test_mdns.h": "4226b64bfb4d48147cfa72df6dde6be9bd4a8e5e6a8e9aac8969840bdb9f87a9", + "libraries/3rdparty/lwip/test/unit/mqtt/test_mqtt.c": "491b11cfe15ec6a201d335cb0c07e70775793adcfb8d5966e1272dce389453ab", + "libraries/3rdparty/lwip/test/unit/mqtt/test_mqtt.h": "30cfa02308c9535517042384f8d15a0024760fd953d232e6562c99c8270fde92", + "libraries/3rdparty/lwip/test/unit/tcp/tcp_helper.c": "ad57ad66ed726f3aba92dc745b97fc5bca83ded304a4b3b2e41d22ab1bca9b21", + "libraries/3rdparty/lwip/test/unit/tcp/tcp_helper.h": "11f779ec9985e65d1048d4dfed44e3ea322aab50d720ac428be4d515e2850f52", + "libraries/3rdparty/lwip/test/unit/tcp/test_tcp.c": "486e68152c03aa0470e3a9c650e7a683cef328721d402b5af5c8f72cbd019b16", + "libraries/3rdparty/lwip/test/unit/tcp/test_tcp.h": "831ecc56ea4f5d6a4af9ae1e38fececcce696a51557c4a88618ca935fdac9690", + "libraries/3rdparty/lwip/test/unit/tcp/test_tcp_oos.c": "eed061425068f48f097378a46a36e1a10a9371e0bc0dba9de3880b15803e82c4", + "libraries/3rdparty/lwip/test/unit/tcp/test_tcp_oos.h": "219807f25b0116f12b3c852c8ad5d00c52b2920a220555a3388880b3a20220fa", + "libraries/3rdparty/lwip/test/unit/udp/test_udp.c": "8a34d49579c87b0aad6b0c5251ddec2d4e9d28c05cb3c437c9a6a74be4e9b403", + "libraries/3rdparty/lwip/test/unit/udp/test_udp.h": "6d311b4a541280aa4573fd0483556d9f3b05c20907a0b297d1e3a6de1f945563", + "libraries/3rdparty/lwip/travis.sh": "79cc9d98bd2beb37dee0b43fdb4c480d81c2b87f9968382a95fcd44217f4ba83", + "libraries/3rdparty/lwip_osal/include/arch/cc.h": "54bd7fbdc6d58a07710d31dcdbb3374b7fe49bb746e8d2a56515e98597a5200e", + "libraries/3rdparty/lwip_osal/include/arch/perf.h": "ee864fcb154cf5c938ebb77583ce7bdf69e56fa29c79098831815d022a2617ec", + "libraries/3rdparty/lwip_osal/include/arch/sys_arch.h": "b2798f66afa193bb065e73333b7cdeffc4ff7e37fa97a0cc6b9436fcc99defcd", + "libraries/3rdparty/lwip_osal/include/lwipopts_freertos.h": "7956aec019f851740b7ffbf7f365da2c075f112791d04cb1268ff6af5091a5ab", + "libraries/3rdparty/lwip_osal/src/sys_arch.c": "a133503424469c4dca161d79b668573983874ce87d1e26e563d49baac59dfd64", + "libraries/3rdparty/mbedtls/CMakeLists.txt": "dee4be32fde393a778af301f0408e52b5170678d6e41f02d5c0ee3627dbd5fd2", + "libraries/3rdparty/mbedtls/CONTRIBUTING.md": "2c1db90523cdc83b6a997fc9ba031db30da38fff2f0ee71923eb1a19d0470778", + "libraries/3rdparty/mbedtls/ChangeLog": "2e522b69da00e32c6b352bfe769e029a759d22e30358a1181d56ab5ce55bd909", + "libraries/3rdparty/mbedtls/ChangeLog.d/00README.md": "b53130f5c90c487805fd17066c312c6635e3bb75b4bcc8fe2f58924e01953ae2", + "libraries/3rdparty/mbedtls/DartConfiguration.tcl": "8e988a7b3b90bfb02dae6e8b584f4ec4d2cfb08d567e06de50ba576170925442", + "libraries/3rdparty/mbedtls/LICENSE": "93ffdf17d6585eada49caa2429d21d192f8a7894e57e00c7432953cf07bae44a", + "libraries/3rdparty/mbedtls/Makefile": "49cbae34739c746bfe88ae74195dba13d4dc61f4989cccb80248d759bb3d92fd", + "libraries/3rdparty/mbedtls/README.md": "91779fd2c549520291afe07d3d76ca9f87d597399039a50885c1c5270c20bd59", + "libraries/3rdparty/mbedtls/apache-2.0.txt": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30", + "libraries/3rdparty/mbedtls/configs/README.txt": "689a82e35eca542b4a7ae6954d39ab41830edd8b7d6fea29990bba40a2b97a9a", + "libraries/3rdparty/mbedtls/configs/config-ccm-psk-tls1_2.h": "17cd4f272bf4e642509190b26d4f05a7e6b779a4c7925ef3ce5dde2584085d22", + "libraries/3rdparty/mbedtls/configs/config-mini-tls1_1.h": "195a84aaf9df7e7b1d0c637bcaab59e1ef3f415e9f6cf7529dfa24b7a8841643", + "libraries/3rdparty/mbedtls/configs/config-no-entropy.h": "796c70839805147b6d558704d2bdd63715aeb81e7bb028411ad443620f9dbf50", + "libraries/3rdparty/mbedtls/configs/config-suite-b.h": "4e08827ff19a0320623db6452dd216027d121b6d736e7ca56768fdeb34fb77cf", + "libraries/3rdparty/mbedtls/configs/config-thread.h": "6006363562eb48d203eace4ef6f081d8062d1372bc7d4044690365c121c14c5e", + "libraries/3rdparty/mbedtls/dco.txt": "53a0a460f8eccb279580aa16013c5f98936eba73554d267632f5ea83d8e890b1", + "libraries/3rdparty/mbedtls/doxygen/input/doc_encdec.h": "dc7ce45660ff78bc0df0649cee3933746b20aff0cccc03adfc087c2ad607bdea", + "libraries/3rdparty/mbedtls/doxygen/input/doc_hashing.h": "d8e1c36434ef523226b3accc24789f28832ef2fb14c39542b0e4d832199d8751", + "libraries/3rdparty/mbedtls/doxygen/input/doc_mainpage.h": "308d2c0d3a7c886b9e1eeb3eda428873b9b38316ce7f8d64e80969eae240fa9b", + "libraries/3rdparty/mbedtls/doxygen/input/doc_rng.h": "73604d2736b96ba379c5137c71f6ed8d48990f1b62f1cf39a4efb6e3949b115b", + "libraries/3rdparty/mbedtls/doxygen/input/doc_ssltls.h": "954bd3c8ee0e02162b703bac98b8762d6f4f6c32722f2394b9c590aff07ac563", + "libraries/3rdparty/mbedtls/doxygen/input/doc_tcpip.h": "62c48fc7bd84be5fa7b4afb3143cdf0a505e7bafb7eded854bc463c7adcab139", + "libraries/3rdparty/mbedtls/doxygen/input/doc_x509.h": "208b9e370322f5d0bd86931a80727df00e531ac07e6b2cbaac4219c3cc294074", + "libraries/3rdparty/mbedtls/doxygen/mbedtls.doxyfile": "b280ec7299d796f58e5fbaab268d43bde848896d6384172067984b1723c1b3f4", + "libraries/3rdparty/mbedtls/gpl-2.0.txt": "8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643", + "libraries/3rdparty/mbedtls/include/CMakeLists.txt": "8b33005b219df3410d10c8354b6f2032559669a7e1ae0dc2e2e768d7d8c6ca34", + "libraries/3rdparty/mbedtls/include/mbedtls/aes.h": "afe879a45b4777dc048cfd031a7cdb23dbff6f4d3fa33bd95b36e7308a5cbad5", + "libraries/3rdparty/mbedtls/include/mbedtls/aesni.h": "d3edc71b465aec7282da21939ea30993d9e11bd708f141a3ace007a53d41ebd9", + "libraries/3rdparty/mbedtls/include/mbedtls/arc4.h": "085e0735863b42f5e07d85fdf8c7b0ff0d2eca923338d28aaa8752d3984d044e", + "libraries/3rdparty/mbedtls/include/mbedtls/aria.h": "a57f8a8ee2d566c917d1ff829591680e10c26d50ae52bf19e4e816f04ee98770", + "libraries/3rdparty/mbedtls/include/mbedtls/asn1.h": "8a9664fc53c831357498d8ce0bef2369aa54568a178adb6304ce44722921c950", + "libraries/3rdparty/mbedtls/include/mbedtls/asn1write.h": "bde4ce9456f06efeeeb0ec00484cba52bc5cd529737d4d3da4a86b09d71f53ae", + "libraries/3rdparty/mbedtls/include/mbedtls/base64.h": "bc0d4d9a7d9cf93067270cbd7c40e78555305bef808128548357318bb69d34c0", + "libraries/3rdparty/mbedtls/include/mbedtls/bignum.h": "d8fecfb2b7a680496943dd69cc5d24f644087e9899624a34d3a90c45c3964e93", + "libraries/3rdparty/mbedtls/include/mbedtls/blowfish.h": "0f0397bedb92cf2a18e6377d96ec5ff0d5463e364a5f6ea7511175b59c53b3f4", + "libraries/3rdparty/mbedtls/include/mbedtls/bn_mul.h": "0decf2f87eca52b0298d463b7727d645ab0474243948ff363e200bb4a42cb700", + "libraries/3rdparty/mbedtls/include/mbedtls/camellia.h": "837815e834c054206decffcd1b8f6e7da66ed0d13bac1b33d55b9ff8a64dd0d6", + "libraries/3rdparty/mbedtls/include/mbedtls/ccm.h": "0be6743fc288b4c4a662dfbe7a88803a9ba3e5edde0417d180448db1f99fa339", + "libraries/3rdparty/mbedtls/include/mbedtls/certs.h": "c21b771ccea08030595d2d626a76d92c3333b0ff2310863d298ae3c36bd12748", + "libraries/3rdparty/mbedtls/include/mbedtls/chacha20.h": "bb636ce04b9f415b29f5bfc8a2640463b4c92e5d96e796aeef829cf91e8b4e88", + "libraries/3rdparty/mbedtls/include/mbedtls/chachapoly.h": "f957183bda10fbdc0e47d0b4ffd6a16eb70b53be2e257e3cc31f2758b174b588", + "libraries/3rdparty/mbedtls/include/mbedtls/check_config.h": "0734be691cacb9eef35854c3a1920d7b96cae0247c1f6e6d7a69727c21d4f145", + "libraries/3rdparty/mbedtls/include/mbedtls/cipher.h": "d84b8a5351e29e0660849c4c06f9cda2a950536932378562fef99d170ac00a23", + "libraries/3rdparty/mbedtls/include/mbedtls/cipher_internal.h": "1c1aecc1d4615c8c7493afb0bf28298b8e297c4749d5c129ba002b3bbf6a367c", + "libraries/3rdparty/mbedtls/include/mbedtls/cmac.h": "a6173e959969ceda1b5b2d1876190bd115eabc08a8cdcaf67f29fbed1bf66c47", + "libraries/3rdparty/mbedtls/include/mbedtls/compat-1.3.h": "7c99033d89833c9deceff34e3696dd97f356d20c70fa77e11fcacc19581d45c8", + "libraries/3rdparty/mbedtls/include/mbedtls/config.h": "8ed7c7121f225a2369fd2a9fee1a5ebd72cb2bf55dffa1c6d783f5a52f79d536", + "libraries/3rdparty/mbedtls/include/mbedtls/ctr_drbg.h": "bdd4bcdc67aebb1cc914ef4619424c0708b1f6ba4583152c2dd9cd26ffc27883", + "libraries/3rdparty/mbedtls/include/mbedtls/debug.h": "87282e3299ab2aa3cc7d1b51d7376e51dec55f7fc0bfc9114fc7b69723fb94b7", + "libraries/3rdparty/mbedtls/include/mbedtls/des.h": "a76bd9f372379c4c4380519504c3f0ba3ac85ce2544cf3ad7d6d420325e96fdd", + "libraries/3rdparty/mbedtls/include/mbedtls/dhm.h": "10fb937d5f760ce8115a16e628c329e14c6a161c33c6b2687b948d30bdc1d2ed", + "libraries/3rdparty/mbedtls/include/mbedtls/ecdh.h": "45fe53a83a6371b726c44750e8daf09bad46acdb6c5d5a27708784098c5ac09b", + "libraries/3rdparty/mbedtls/include/mbedtls/ecdsa.h": "a1977a2670f9373da4e525a78262910b733516a250e8ae2146c2112511d6cf0f", + "libraries/3rdparty/mbedtls/include/mbedtls/ecjpake.h": "577582b5ed14e4cfbcb7f84c8d0ea10b383e6811849889d6f0dccf06e410f03d", + "libraries/3rdparty/mbedtls/include/mbedtls/ecp.h": "4d6eb93618209c48a4147814dc4a8b151387198bd2957858e0a044b119363fdf", + "libraries/3rdparty/mbedtls/include/mbedtls/ecp_internal.h": "cb5bd5834222fcf5ebda17867d034f3b3ee0cb6a01ae05e24150d7d7da9b9056", + "libraries/3rdparty/mbedtls/include/mbedtls/entropy.h": "d15e7d90bce63253e5c5c1238659d0ee917a8502246b920ce942b3797dbe327a", + "libraries/3rdparty/mbedtls/include/mbedtls/entropy_poll.h": "a6b0c4a9d45b7fb2e535ac070da0c8fdcb7ddca7d3c221966b9223d601cc2770", + "libraries/3rdparty/mbedtls/include/mbedtls/error.h": "f8fb48cc215dee818166dc5d960961e62f822d8a4ea59540c5e36fdbfa5895a2", + "libraries/3rdparty/mbedtls/include/mbedtls/gcm.h": "28df84fc052aa6ba9bd8aac7e5d88d20b719e4ac31cc98107c09fc320d457648", + "libraries/3rdparty/mbedtls/include/mbedtls/havege.h": "5736439257a124ae54a1278635d8ed377af6b67ce1bf923bbd90ca051a35ad78", + "libraries/3rdparty/mbedtls/include/mbedtls/hkdf.h": "594d8ab95a102b92c716d8858217769d49db34d00d9b45a77443787fe8edebe9", + "libraries/3rdparty/mbedtls/include/mbedtls/hmac_drbg.h": "488f5b8c997c5ebfc0a6eda725157a9ffb7c0a833079d1b00bed86ae3ec31bdd", + "libraries/3rdparty/mbedtls/include/mbedtls/md.h": "d6e92adaf9be894f23db4c9b33ee99e42ec5c7aaeb9c542840385346f2ae1070", + "libraries/3rdparty/mbedtls/include/mbedtls/md2.h": "e5ba12832916893a33d3ac31bfb3479e9fa04ec17924dd0eda42490822bc017f", + "libraries/3rdparty/mbedtls/include/mbedtls/md4.h": "9dcb47bd1bfba5c29fd725460c41156cb844efcc528d9055b5721c7f55fa6e6e", + "libraries/3rdparty/mbedtls/include/mbedtls/md5.h": "62237ef21805f7096cfb1a85bd477d9fc2f8d693c00e8b7731d48cdca39a004f", + "libraries/3rdparty/mbedtls/include/mbedtls/md_internal.h": "b502fdd7d71adad3d0b5a4e44d773c1c00115a90364127fae247c5f6b9f89a78", + "libraries/3rdparty/mbedtls/include/mbedtls/memory_buffer_alloc.h": "33c023938684f17e4cbae1bc373c13a128a733b8d26d26e2a94ba381eceab080", + "libraries/3rdparty/mbedtls/include/mbedtls/net.h": "1b02c8a4566d032837d979b9e7d321289d396fe8af79ab6d848117e82d79e924", + "libraries/3rdparty/mbedtls/include/mbedtls/net_sockets.h": "4e470ea94c8e1ff165d73fffc82b70431e74b755d7fb6f3911b49b9ca84566aa", + "libraries/3rdparty/mbedtls/include/mbedtls/nist_kw.h": "2e29d722b60a7672a0327024e105967569e6bee398c17fab5ed5c06dbfc9d919", + "libraries/3rdparty/mbedtls/include/mbedtls/oid.h": "b2d36fe414b36a0a7389b0d38f038a2fd755457924d735a6c7972c568694222a", + "libraries/3rdparty/mbedtls/include/mbedtls/padlock.h": "d57ac9ffe314c169d8d418c4f61af0ac7a399a8c3c8929e240761dad04c4ba0b", + "libraries/3rdparty/mbedtls/include/mbedtls/pem.h": "8784957cb6512857cccc7d5ef986ae76c7f2cbb4a794efb98e92e7c0e87eeab8", + "libraries/3rdparty/mbedtls/include/mbedtls/pk.h": "53379ac98abd79587fbc19a52bb4df5dc0cc43acbadf3e15094c89e20d6bd91c", + "libraries/3rdparty/mbedtls/include/mbedtls/pk_internal.h": "99aa7f920b6f814d39e1a181079cd187d2fdea7bc9b614dd7a47297b9820a4a8", + "libraries/3rdparty/mbedtls/include/mbedtls/pkcs11.h": "bf6e84c4dc79dd2c06d4118aafb5747bf0ff3e5235de380fb4b336def147888b", + "libraries/3rdparty/mbedtls/include/mbedtls/pkcs12.h": "001d788141f5662a2b94239108ae3c47b0c9371c9f7b74a5df48c29fa0f38cf9", + "libraries/3rdparty/mbedtls/include/mbedtls/pkcs5.h": "c99933a513bc276664bf9ae1deb5fe246b1f68f70c4fc9cc1cc322f50b0218e7", + "libraries/3rdparty/mbedtls/include/mbedtls/platform.h": "b4a6e5d57fe86db1c1d095708845e0c672ff7a477049a6d3ed1d051bf1983d42", + "libraries/3rdparty/mbedtls/include/mbedtls/platform_time.h": "4d1720c2450ea4ad25300d9d6f4594b1866a9548d536a8d76ea9b58344b53e51", + "libraries/3rdparty/mbedtls/include/mbedtls/platform_util.h": "a33e1009eb1fd54b07a85b1472f6c2b1e9b292169661f5be5dcb23b1a4fc4e19", + "libraries/3rdparty/mbedtls/include/mbedtls/poly1305.h": "7656d74786e7cdaa8a59f50e70f99787432aa4d9e474a3b2a17932351c762259", + "libraries/3rdparty/mbedtls/include/mbedtls/ripemd160.h": "0ded6338aeac3feae27877cd3afe681d8a39c6f71421596d7dd455ade5e9296a", + "libraries/3rdparty/mbedtls/include/mbedtls/rsa.h": "cc737a6c76d0761d6d7c83efeb24c1d71328c062f7dcffd981571f365692dd17", + "libraries/3rdparty/mbedtls/include/mbedtls/rsa_internal.h": "af3f06e7b2b97ff7933a1514bb792dd62bebdd6675904d8cf7773ff950698d9d", + "libraries/3rdparty/mbedtls/include/mbedtls/sha1.h": "8c3a4c80e666a29826d879452703d263b2e62beed8c53e629ca526d0e899b524", + "libraries/3rdparty/mbedtls/include/mbedtls/sha256.h": "f814b5f1a6c5e8cec0815516d5b90d78bc008d8066f10537585a43a85f0614c8", + "libraries/3rdparty/mbedtls/include/mbedtls/sha512.h": "da3c21d6a24dc9dad572af9a77c9badc78746e5d839b72a47272b32b8a8783e3", + "libraries/3rdparty/mbedtls/include/mbedtls/ssl.h": "a4bf39c2fd17de235b9d0f5a99e2c532d938867350d5cb2d760118bc451771bd", + "libraries/3rdparty/mbedtls/include/mbedtls/ssl_cache.h": "b9c520e99b305cba100f67e5bcc876ef5a76b22187cd66359e83cb0e63b64ab8", + "libraries/3rdparty/mbedtls/include/mbedtls/ssl_ciphersuites.h": "7b05415e913dda6de714ef6626404837b93b13f33f0bdad2d5b1121b0066dbfd", + "libraries/3rdparty/mbedtls/include/mbedtls/ssl_cookie.h": "0a8daefcff1065c08d56d996cf72467d55c741be03972edac76dd7f946ab02d1", + "libraries/3rdparty/mbedtls/include/mbedtls/ssl_internal.h": "1cf923bd9226d7a43445b4b811e8d99ceca3882952717b96978b992a4a89a08f", + "libraries/3rdparty/mbedtls/include/mbedtls/ssl_ticket.h": "90f71f93fe2dbe4473ca61fca9244178af8bf6c2e17ee1e2a10c8f9f8bd91fb4", + "libraries/3rdparty/mbedtls/include/mbedtls/threading.h": "facbd8ea4a2fdfffdf0f6a8f62d950e32e2195e5b0969531001db5603885c76c", + "libraries/3rdparty/mbedtls/include/mbedtls/timing.h": "5b7ea9cde317563fbb096e358df110b334c7cf4140315e39ee21ed664f309fb3", + "libraries/3rdparty/mbedtls/include/mbedtls/version.h": "b565609959075c6002c1a41b2313b7dca626997108d3b2b4a51f167dd96d41a7", + "libraries/3rdparty/mbedtls/include/mbedtls/x509.h": "46bb20a5fabb9796b6ef0f8bd7d05be822175f2170282adf723eb05645efae0f", + "libraries/3rdparty/mbedtls/include/mbedtls/x509_crl.h": "917edd8a8f601620e3bcf81812c447a9ac569b31d6f31c87eeb92f0c3d35ed6a", + "libraries/3rdparty/mbedtls/include/mbedtls/x509_crt.h": "76e2c7883d145a8e28f2266b86ff4d59ff675d05a21b5d00ba2165590aa9f426", + "libraries/3rdparty/mbedtls/include/mbedtls/x509_csr.h": "9fba654b535fda22f1536f1fc8dfb9315d0f0a9f0ffd573836b462aa2308922d", + "libraries/3rdparty/mbedtls/include/mbedtls/xtea.h": "a8d4f19d9a4a697a0b64abe0ff6fbd67ea4edd711042c96fb29827c5efdd48c6", + "libraries/3rdparty/mbedtls/library/CMakeLists.txt": "a8ce844760611a9f8ee0f818d8fbe9ffae91eb0116a7673e8f7271ca11106785", + "libraries/3rdparty/mbedtls/library/Makefile": "fc602ac24e6bf784399d4b65ceb26b55b442878d5f6d340fe632c41b8321f3db", + "libraries/3rdparty/mbedtls/library/aes.c": "4288fa23a5979c8c57d4df396fc95a14c0c2a11c28a6476b17a1c3dad701112d", + "libraries/3rdparty/mbedtls/library/aesni.c": "a4c2cdddc15fcba198134651f5c291f7e57156823ba530fb8dc686d7ecdc3c30", + "libraries/3rdparty/mbedtls/library/arc4.c": "8857548e90924c9ab082c65bb4a997a9475d79c3497fffb523b70d61fa37aa75", + "libraries/3rdparty/mbedtls/library/aria.c": "8ebc8a8beed52d2ceeb869c8988b5366611ca7b96e234ca4dadd8667ffef23a1", + "libraries/3rdparty/mbedtls/library/asn1parse.c": "0a4aa2abcff3959e39fbccb16d145ce945f5bc5c95bc74dc591feaaa58be99f2", + "libraries/3rdparty/mbedtls/library/asn1write.c": "eafa624d131d994e903e7cca49475a2745d8eba0ac49d774a7dcfb8740aca051", + "libraries/3rdparty/mbedtls/library/base64.c": "182a41b5fff7be8fe584e092bba447cca9e0d712000a058668ba61075cbecee4", + "libraries/3rdparty/mbedtls/library/bignum.c": "defde21b0ed83fc210f1ccd87b1273826eb5f9e9787f87c8c69fb9245e0a1fb7", + "libraries/3rdparty/mbedtls/library/blowfish.c": "9bea5b2b05297123ce707192a349570b5c27dc549f472138b68554e3842b8e6f", + "libraries/3rdparty/mbedtls/library/camellia.c": "df18194fa3f9d3297312d511de43bc0f02b555d37fe24bbcd5fbb197c87f5dc2", + "libraries/3rdparty/mbedtls/library/ccm.c": "b263c34eba5832c33c4e2d09d73d73a2984169c9c048bc0fb9e12f07174fcd68", + "libraries/3rdparty/mbedtls/library/certs.c": "2178d5a922f92374bc1af0cc6a16dd97b6de872ea79afac4250f496d122a7ab2", + "libraries/3rdparty/mbedtls/library/chacha20.c": "33f955bd6872432912645c577725b14a6e513ac984347f3f8970a726b425df05", + "libraries/3rdparty/mbedtls/library/chachapoly.c": "34b37b2b02d17e86b63bd04e661c3448365344bb86b51cc3845ed1c761d55eb7", + "libraries/3rdparty/mbedtls/library/cipher.c": "bf2c957f5ad6e1cee14d0e69ee377ec84ffdaa1a2e7f02366a35c7776a26a8fc", + "libraries/3rdparty/mbedtls/library/cipher_wrap.c": "453c1e854cdf198c7aa661c9009bae89d4c01e81fde078e4e7deef8e6d2084b6", + "libraries/3rdparty/mbedtls/library/cmac.c": "b3c0ef2a64ffab706789e2037f8096c2504d9c0c28560dd996490fb2f8b75704", + "libraries/3rdparty/mbedtls/library/ctr_drbg.c": "fd0ac72baa6ab437be735dbaa02a3345d8ecb24dd8eebf9c0b575cde0d405c5c", + "libraries/3rdparty/mbedtls/library/debug.c": "78472dd80e0848e51a13de98c45d2e14060c1d5e2ff992d94f24988a7a065c92", + "libraries/3rdparty/mbedtls/library/des.c": "2061c8155e25ad8193c0fb209aae0cbd5a870cb64b604acdad9c79a4c761b3cc", + "libraries/3rdparty/mbedtls/library/dhm.c": "f3937f90752fe8cce08bcadb4f20f255684af8edd76632d27b9057cb8c4526d4", + "libraries/3rdparty/mbedtls/library/ecdh.c": "492122e6d15860ed9b0740b3ecc15dccec77c981d6cf9c319e3029d503f14568", + "libraries/3rdparty/mbedtls/library/ecdsa.c": "eb152dd835353cb7458cae1ddf80aa80a5d99e86d34ed4d0e3e7fc125f7f93fe", + "libraries/3rdparty/mbedtls/library/ecjpake.c": "f469f34c65278b30e4dd39c47fc82a105158f0eb07cdea5c33a02e60095d80f8", + "libraries/3rdparty/mbedtls/library/ecp.c": "39762c9f571179332e0b9412cf7c4772fcc2c9b6d2f07c7a6ffccc72bcb74f84", + "libraries/3rdparty/mbedtls/library/ecp_curves.c": "2475a5f0b2fd848c8c86366a0df11c1dd8228f532ccfb454518e1dfd43d5bf8c", + "libraries/3rdparty/mbedtls/library/entropy.c": "933a22f938ef9d3bf1d782b264358e480b9d37e2ee9088fca4fb1b86fba1a828", + "libraries/3rdparty/mbedtls/library/entropy_poll.c": "0a88fe1c876ad3b086569517f275e9b5d4ed7bcb646416517aed44fe2600d910", + "libraries/3rdparty/mbedtls/library/error.c": "fb2c8f00f5ad85f8d8e109adea9228d029fc7ddffb54afdbc013c963f3161ac7", + "libraries/3rdparty/mbedtls/library/gcm.c": "50b47d680006b95bc3bcfeecc01d8d67531ef1c33f15f9ae2b2961ac7a1407b7", + "libraries/3rdparty/mbedtls/library/havege.c": "1cb6a90ed86fc2fca20b5116f3a1a31efa8ca627cb60e53bb80e2145ea5d8602", + "libraries/3rdparty/mbedtls/library/hkdf.c": "c08d6825b64bc78d042a8f01494b708757e44636719e17f260362f15146bbff4", + "libraries/3rdparty/mbedtls/library/hmac_drbg.c": "ca8eef1422406a1098fb9e85b39075db0c742ed7add762365668cf3668a2f810", + "libraries/3rdparty/mbedtls/library/md.c": "cbb194d941c0793bec8903a79b37ca4e1df8f3c2e1d744dfb75a4005071b2eb9", + "libraries/3rdparty/mbedtls/library/md2.c": "8a94a7f0b8e218f24bb0c9c75b7b97c9708525abe0e6367e95f19575efadf77f", + "libraries/3rdparty/mbedtls/library/md4.c": "9913e7e79624592bb95b9596c46865beb1863c3e434bb926ec25a4f26e8c7b44", + "libraries/3rdparty/mbedtls/library/md5.c": "d22e001ad3ac40571ee8ccd6a28534b3a717b85ac3f957736f625650055f01af", + "libraries/3rdparty/mbedtls/library/md_wrap.c": "58f3d626cc386ad4fa460299fa6d1e6038ba17110f4a4832a5a6228dbda42f9c", + "libraries/3rdparty/mbedtls/library/memory_buffer_alloc.c": "12cb517af657889e1ba674f29e06f074f487b1a7ed3cd8b73901431c5c7a08af", + "libraries/3rdparty/mbedtls/library/net_sockets.c": "a068a43b8237298dee876ca04c766eee6821c0dbea29dc8ae94fa1f21773ee46", + "libraries/3rdparty/mbedtls/library/nist_kw.c": "207e85cf70628bdff639648a6598882b5d03c7b0ec52ae3ecfeced1976f6b7ae", + "libraries/3rdparty/mbedtls/library/oid.c": "b4556e0bd537526dcc1ee5cd2dacfad5779094c56be58260acf4d7e7b139c3a7", + "libraries/3rdparty/mbedtls/library/padlock.c": "10a9521ca248e65a725a7af981ebb6cab79577105476fe872b69c3e743d2faa8", + "libraries/3rdparty/mbedtls/library/pem.c": "248ca954d52ac579d710879adbb51f0809b5f8f0e422c0c86adbed42fa51658e", + "libraries/3rdparty/mbedtls/library/pk.c": "32fe9ef24ed691e8ccafda68b97b5f89fe02a71448bf7a28cf120b4110b05b9f", + "libraries/3rdparty/mbedtls/library/pk_wrap.c": "99ed73e81a582dae47aa9bffb36dba44a9aa66616ef63de57811163654491fef", + "libraries/3rdparty/mbedtls/library/pkcs11.c": "8e1b5602b7ef1b7e26e07de027f4a0286842a99dad48f4b13e251b0d6167b10a", + "libraries/3rdparty/mbedtls/library/pkcs12.c": "cb02bffaa8196a9c237a09c7e3d24965c96dc6408dccd6bc544b85f3864802f1", + "libraries/3rdparty/mbedtls/library/pkcs5.c": "3a0ebf774dad943fe26adddd2e9868b947b91c946a7551eae8046a70467b97a5", + "libraries/3rdparty/mbedtls/library/pkparse.c": "e71ff552184fab608af6d56575dce97cf9ecaabdd538b86d0e953b76fa4dc3c6", + "libraries/3rdparty/mbedtls/library/pkwrite.c": "8430dce4584f33cfa22f3964000c1fbfa0542dc8b1cd70609585e0bd98508a25", + "libraries/3rdparty/mbedtls/library/platform.c": "e4f3ceca9b62a91e8d66a9f96190714de3f34b1601e37c6a5e89d340c9e97ff7", + "libraries/3rdparty/mbedtls/library/platform_util.c": "cc2effcae747df6da0dd13b4544f2e285b800a800b99b0f051769be89fa12f44", + "libraries/3rdparty/mbedtls/library/poly1305.c": "8a586ed4fbf51f9af83fbf2d916cb777bbd0d715d697ed1cec65529a365e6a62", + "libraries/3rdparty/mbedtls/library/ripemd160.c": "d017586c9f1151db9092f0e60fb7359fbb268860b9eb16b26a87c129214178b9", + "libraries/3rdparty/mbedtls/library/rsa.c": "8dab05d8fb547fbf74994f113bab1596986b0ede99c979fbd197fdc28397f985", + "libraries/3rdparty/mbedtls/library/rsa_internal.c": "eefbf7959d243da766be010948fdebaa2977a95e61fa09affd7193cf24992687", + "libraries/3rdparty/mbedtls/library/sha1.c": "6231c521eb5616169e23a0fd42aa663e3e49d3594a298560cb36c1ffff248d2b", + "libraries/3rdparty/mbedtls/library/sha256.c": "ff9d0a3df9e100efb6ba6106668b8a01aca1a602890dceeecd55e40ab29b4ea5", + "libraries/3rdparty/mbedtls/library/sha512.c": "b151586e8847454378b0d82207602f6937d022aa1d13e3e6d69e67a18f227c5a", + "libraries/3rdparty/mbedtls/library/ssl_cache.c": "1ad5d0fea8b1bce083a2ad96ff247f6b16925bb53516b104d806a6e65aad4f43", + "libraries/3rdparty/mbedtls/library/ssl_ciphersuites.c": "a9efaf43f2fc044307f9635f4ec32fd03bd6760453b76c12cae616209bc3d93b", + "libraries/3rdparty/mbedtls/library/ssl_cli.c": "b4d3241fe384c481d4b48c94ea0101fec0ad83fed3301d3b7fc10be3949d5952", + "libraries/3rdparty/mbedtls/library/ssl_cookie.c": "8b54041acfb97d5b345829fa488b307dc9a4a6ff83fdf330832599b6c3f9d3cd", + "libraries/3rdparty/mbedtls/library/ssl_srv.c": "cf15d011fe5b0ae8776cc6e289bb56f082fa76bce32744ad761aef0b83bc0311", + "libraries/3rdparty/mbedtls/library/ssl_ticket.c": "f948963c63f2bb90226833f23727be77a787e45abe9f2d52de11bf74f60a6392", + "libraries/3rdparty/mbedtls/library/ssl_tls.c": "23d3d1ca67cde6195e6dd662b86c6ddbba38d9038c17503bf076b35b63110286", + "libraries/3rdparty/mbedtls/library/threading.c": "b11bc522e0b1d45783d4d3d5ec31390cadffaca662dddbb44de7113292d0deb1", + "libraries/3rdparty/mbedtls/library/timing.c": "f516ce5e42b8ca5cffa36232323c8c6a7e594ce0641942810dda6534e41793d5", + "libraries/3rdparty/mbedtls/library/version.c": "5b567a3354bd2f3a56e618eb7b2c4606a151d3a469fb4293d47fe9b6645259ee", + "libraries/3rdparty/mbedtls/library/version_features.c": "a409a8a52bd3780837448a27fc1495878b745d96057cbd3af2ce2c71f6864494", + "libraries/3rdparty/mbedtls/library/x509.c": "4d0883ab99fd117d196bf666fef23742b6149be882a9567ff6deb728e8a2ff0b", + "libraries/3rdparty/mbedtls/library/x509_create.c": "c11f48a5df30ff6db074af8d3ac11277e021eb5da8169512571933d69944378b", + "libraries/3rdparty/mbedtls/library/x509_crl.c": "3f4338fd6920eee4b615108ae1d3bc7387fc4131a8cd7f297a6e0bcc57f7f08e", + "libraries/3rdparty/mbedtls/library/x509_crt.c": "9758f8a5dd1f2f1a952d169bcb7175886e11c9138ba8fa937bf71eea098539c4", + "libraries/3rdparty/mbedtls/library/x509_csr.c": "3949dc1f20dde7e8b484452fe4902bb58ebea3745f7a46eb0b59514d17fd4c36", + "libraries/3rdparty/mbedtls/library/x509write_crt.c": "7476466c419a3af8d68bfedebbcb71fe05cf20fba164f0cac31b83b6ed67f95a", + "libraries/3rdparty/mbedtls/library/x509write_csr.c": "642ca33facc02e2296c5514a79650df10aff717b306c6b6cb8e5f52455237cf7", + "libraries/3rdparty/mbedtls/library/xtea.c": "27e37318e767f4d44d0b94aa29c981bdeff6466350448d841a5219b6ae3035b0", + "libraries/3rdparty/mbedtls/programs/CMakeLists.txt": "528503fbcec620728a53e987437e5f04f34f9b604a6d7e559156aaab2a8502a4", + "libraries/3rdparty/mbedtls/programs/Makefile": "30cc7e78c989ba44369e47654e111271ffc331e9f79c85e391336a0ad161c7e4", + "libraries/3rdparty/mbedtls/programs/README.md": "12ae86078bd2791074cec4dff2652165a027fa9191413e92d06e7f9ad7b0ab81", + "libraries/3rdparty/mbedtls/programs/aes/CMakeLists.txt": "fdd4153e4a452b98eec8fe330cee8766412d6931858938704bb808a1fb722980", + "libraries/3rdparty/mbedtls/programs/aes/aescrypt2.c": "07fb23a1012f9bec71eddce863841588ed4d3bff81aaa425a26c76170958e10b", + "libraries/3rdparty/mbedtls/programs/aes/crypt_and_hash.c": "d149964a671a06e2292a8102b7af9f4341e86528ba9f5e4f990eb8db8fca2b76", + "libraries/3rdparty/mbedtls/programs/hash/CMakeLists.txt": "e969c3ae5259aefeeeaee32b21b401484dff7f651450da1e765fdee2c96b6daf", + "libraries/3rdparty/mbedtls/programs/hash/generic_sum.c": "8ba66f37d4f77b445f3a2c45fba89b79b1df35f9fe6e90e8e1bea7955af464f7", + "libraries/3rdparty/mbedtls/programs/hash/hello.c": "453c9cbaf91147be405488b27bd237c99abcebdc5a71798efd7655aa0172075b", + "libraries/3rdparty/mbedtls/programs/pkey/CMakeLists.txt": "76525ce3dcf9b683076bad9e69baa6fafed3f8076e3c42596175dc55ed2c27f1", + "libraries/3rdparty/mbedtls/programs/pkey/dh_client.c": "37f820445864fc8b1a68654ca6f91724b0603957331e4bfacb097be5c746c1f6", + "libraries/3rdparty/mbedtls/programs/pkey/dh_genprime.c": "915cc30c8da0c190f04caad436b9890cbbcfb4b589162c65f6378fa0f8020070", + "libraries/3rdparty/mbedtls/programs/pkey/dh_prime.txt": "26f568b6b7e200f0c8f6726cd869e5a529d22bdcc7b33a9cf0bb6c0f4acd65a5", + "libraries/3rdparty/mbedtls/programs/pkey/dh_server.c": "7226eb0e9d33612677de7a6f4c8ab201e5ea5a32ac5595541f8907dad93d877e", + "libraries/3rdparty/mbedtls/programs/pkey/ecdh_curve25519.c": "ef83d50a3fa09279ace35b15898b98eac7ffa21eb8c61766053733a89b38cee0", + "libraries/3rdparty/mbedtls/programs/pkey/ecdsa.c": "3e8d188bb157d5d5062663863d712f50b2bcec674f5652bdf6d17813b774d69d", + "libraries/3rdparty/mbedtls/programs/pkey/gen_key.c": "5ac3aaa1d6af7b158d3a9abb40a2e63c6f3969479da3bc78c58c98e63aa36663", + "libraries/3rdparty/mbedtls/programs/pkey/key_app.c": "e95bebe5a6fda6e52e78ee5470e952d920d0fe860dd6283b63cd2ae65943057c", + "libraries/3rdparty/mbedtls/programs/pkey/key_app_writer.c": "7f3c6557a2af4424aec05f6a1b5a4290a28a272c97f016b4836b667995b7e93e", + "libraries/3rdparty/mbedtls/programs/pkey/mpi_demo.c": "af0877b749d4f568a2adbd64537585a726b02b343152fb3e8f5ab9c320328e72", + "libraries/3rdparty/mbedtls/programs/pkey/pk_decrypt.c": "ab47d6b8604d55cb56da97217bc1bddc2e4834800e93321c2b9847fae71c7a5a", + "libraries/3rdparty/mbedtls/programs/pkey/pk_encrypt.c": "0b73cff0c70fe30f1282a07ebf31f45081b215282efe9c7919b4e60b0365e12e", + "libraries/3rdparty/mbedtls/programs/pkey/pk_sign.c": "999c552ee3551661812167b84a94631bf1181a5a5b7c99bff2df0cd672349fca", + "libraries/3rdparty/mbedtls/programs/pkey/pk_verify.c": "e0dbe1ec0a03feded597a0595ebe9c44cf99afff76161635f8ec6fe3ff3a5ae5", + "libraries/3rdparty/mbedtls/programs/pkey/rsa_decrypt.c": "cb6445efb6fefe8ea0685dc89eda7d828b2c26d2aa13a03ec85c7cf7c79a135c", + "libraries/3rdparty/mbedtls/programs/pkey/rsa_encrypt.c": "71bf473bd2c82d6bf2978df35b943674e293a180f211d952b1a7c6f267432adf", + "libraries/3rdparty/mbedtls/programs/pkey/rsa_genkey.c": "0b4fd5ed309a07386aa1c7f71fa55453f18e36c469f00a87caef16129a3d0006", + "libraries/3rdparty/mbedtls/programs/pkey/rsa_priv.txt": "53507af9612ca19196c322d264ca42b65ac4ed92ba9e2f43cd68cd2db51c083e", + "libraries/3rdparty/mbedtls/programs/pkey/rsa_pub.txt": "bbfea547c88fd479235e5c6342742850e9586afb028b44bb298f5e81e3e57f70", + "libraries/3rdparty/mbedtls/programs/pkey/rsa_sign.c": "7699ffe49744c2009ae2d631f37feaaf5b722c52c9965b260ec08cf409422101", + "libraries/3rdparty/mbedtls/programs/pkey/rsa_sign_pss.c": "d5045b2c3ea8e6b9d83c2afeb975e1947dd8f37e5b7e658625020241152c182f", + "libraries/3rdparty/mbedtls/programs/pkey/rsa_verify.c": "56a5896170c30c30bd48f56aebb4ff617b43383738c5df0eb6b671ddca88a40c", + "libraries/3rdparty/mbedtls/programs/pkey/rsa_verify_pss.c": "c35e2f3f49e09623ecfb3eba0abb6b14637c00225df8ffcb9adf48d21dc7e04a", + "libraries/3rdparty/mbedtls/programs/random/CMakeLists.txt": "724c3964776475b96c439cdc33c67586c05c67b340eab391f940478fc29844f4", + "libraries/3rdparty/mbedtls/programs/random/gen_entropy.c": "f4737f38560b09b86c90920b7e3eb2e3f4db679fafd115932fd1f3a0eaf35381", + "libraries/3rdparty/mbedtls/programs/random/gen_random_ctr_drbg.c": "975bc5af04cd4627fda64ceac00683eb2dc409703cb602e5d9d1016b9180b371", + "libraries/3rdparty/mbedtls/programs/random/gen_random_havege.c": "cd37f67973f6e45f82694271f711b01f5edec459b5cf3e391b2b52205f4984bf", + "libraries/3rdparty/mbedtls/programs/ssl/CMakeLists.txt": "677057e1f24c7e0024bd05457014e3b99bc3ac6331f561dd94e481de45663b43", + "libraries/3rdparty/mbedtls/programs/ssl/dtls_client.c": "6ddc5fa57080d881fe1fa02b4d3a8702a1c300ff2cd9b98b6361d5660e335dbf", + "libraries/3rdparty/mbedtls/programs/ssl/dtls_server.c": "a1b6dd4214442c0e141248e278e71895ec903981b2042f28e1b703c3cf6c4ed4", + "libraries/3rdparty/mbedtls/programs/ssl/mini_client.c": "115cdcfffbd5388b3e6e0407781d315808e377cc682b368888cf408d43910bba", + "libraries/3rdparty/mbedtls/programs/ssl/query_config.c": "efe88fbc301d1dd35b8894a11a6e8971d99684815341aa729caecc7811924d55", + "libraries/3rdparty/mbedtls/programs/ssl/ssl_client1.c": "6f05a7f847950f4bf76eda14cacb14ddf645c38d642efa6ab4b0265e09cc3af4", + "libraries/3rdparty/mbedtls/programs/ssl/ssl_client2.c": "f2f0623ffe362b497157e4fa18c6913893e2d7726ee143d7985226d503935644", + "libraries/3rdparty/mbedtls/programs/ssl/ssl_fork_server.c": "8a4f1b22ddb878f1ad53c1a2947057c90eed9517221fb555cf6096c6bbc737b7", + "libraries/3rdparty/mbedtls/programs/ssl/ssl_mail_client.c": "b54e75773e923e4ebf48ec0ea89d7e4b4a1ef0db0f35a7621c2710a4932892e6", + "libraries/3rdparty/mbedtls/programs/ssl/ssl_pthread_server.c": "ffce413b900cdc0b5583d81382a85976796ea6ef60843e661e950bf15c88d428", + "libraries/3rdparty/mbedtls/programs/ssl/ssl_server.c": "5b3a413da632bec17f02940630bdb81000fff45143c77c581d42c62d183e7e6a", + "libraries/3rdparty/mbedtls/programs/ssl/ssl_server2.c": "471da8a6185b4c862cf7e468803c58b1dbcf609d9c15db1bfedf5bd6633f5a5d", + "libraries/3rdparty/mbedtls/programs/test/CMakeLists.txt": "54e985b61218cc5839e244563cae4e8aa1f99524266024d7ba01e5fb203766b9", + "libraries/3rdparty/mbedtls/programs/test/benchmark.c": "ad617ca373dfeab4ad2ffe66373f1ae58940d5a54e6d1461072930c8630caefc", + "libraries/3rdparty/mbedtls/programs/test/cpp_dummy_build.cpp": "698ccc1d8d12fe15ca8121b309ae098fe54299f4cbd9acfe97f7aa1bbc0382a9", + "libraries/3rdparty/mbedtls/programs/test/query_compile_time_config.c": "be5c728ab539767b2a26ce16a7efa87af4bc2e675571dd35f30e5e451b74af12", + "libraries/3rdparty/mbedtls/programs/test/selftest.c": "82ec5c01212ef1e2637ccdbd4f3fb44186d2f09962ba0e9657e330c456200efd", + "libraries/3rdparty/mbedtls/programs/test/udp_proxy.c": "54dd04cd48fdfc8324e1b238bce7e21400c85ef021ac3c32d168fbe2e20882cc", + "libraries/3rdparty/mbedtls/programs/test/udp_proxy_wrapper.sh": "a04ac0c08a0de9b716a6cded205a70825129088a2ca3510e0d1f5660c230d9ca", + "libraries/3rdparty/mbedtls/programs/test/zeroize.c": "8e48487f88e64c421ffd547ec8823a51b1e6f164a9f4c5ffcc8264b86462ff05", + "libraries/3rdparty/mbedtls/programs/util/CMakeLists.txt": "ea1ba02324edbbbecddc8bd1ac421a2d43c886c1cab1a01e1cd912ee27faa944", + "libraries/3rdparty/mbedtls/programs/util/pem2der.c": "501aff1215277aa2f63a8bd25430ff14ee9295e06f8fc2939022b700bb4242cd", + "libraries/3rdparty/mbedtls/programs/util/strerror.c": "a17425f629beb5261526799c5a3c6a27646956f6dd879a1beb5b7e8511aac32c", + "libraries/3rdparty/mbedtls/programs/wince_main.c": "806fe561b03ad9728a9f4423f0400d599c98a057276472d1490a6905c605a208", + "libraries/3rdparty/mbedtls/programs/x509/CMakeLists.txt": "4b68032428176f68769fd51f6856f3da57758fbbf532dcd6359f47001efaef41", + "libraries/3rdparty/mbedtls/programs/x509/cert_app.c": "456fbf1a459ed0f7fa5c7ab9e324a31171441c7209567d3cf61d623dbfe0c60d", + "libraries/3rdparty/mbedtls/programs/x509/cert_req.c": "e4c3aa98d15294115142ee621dc7e1e80dfcd629b9b171b9a262f16e01d4889c", + "libraries/3rdparty/mbedtls/programs/x509/cert_write.c": "cce5c3cda9df4e824b91508bdf170ec5af74b756892efaae0a982d3e5ad529b4", + "libraries/3rdparty/mbedtls/programs/x509/crl_app.c": "4de4afca0e83b78d135a8da399d132414c7122b10f298c7188818ec149ff6b6e", + "libraries/3rdparty/mbedtls/programs/x509/req_app.c": "cdfcbf7ef0eca953642ebe0505456b613c0ccc9a721861d83d28d9f84e16c8d8", + "libraries/3rdparty/mbedtls/scripts/abi_check.py": "e83df5c3bb791a7a855082b4c16dfcaf85393c59aeeb307e290d4e49c6535c38", + "libraries/3rdparty/mbedtls/scripts/apidoc_full.sh": "40fdeb98dde820cd3ad45ee8adbb69c6e8de3ef1861943054b2a573c0db62783", + "libraries/3rdparty/mbedtls/scripts/assemble_changelog.py": "5baba802fd04d2c7d2d070cfbd8dc1172fdae60e14dc2c79bb60807195273bb9", + "libraries/3rdparty/mbedtls/scripts/bump_version.sh": "800dd8c11a883058bf7dcaa01130736c21a4183202075b99d3977a5c558fe600", + "libraries/3rdparty/mbedtls/scripts/config.pl": "b6189d7c5bf3d61b86feacb73903cc2b2a7ca1af35f53d2b2a208e315750bb71", + "libraries/3rdparty/mbedtls/scripts/data_files/error.fmt": "da9c7207db0d53c7f65a5adc4f3d5b182e6bb52ebfb56b23c2ac3032aad4790d", + "libraries/3rdparty/mbedtls/scripts/data_files/query_config.fmt": "66aee385189e99ee5de28eb157e226660cc658d9b122dca896d07b39e5c73a2a", + "libraries/3rdparty/mbedtls/scripts/data_files/rename-1.3-2.0.txt": "2366f726f5f76d66158a187633ba24187f06fc6126af1685b16ef26965a29d11", + "libraries/3rdparty/mbedtls/scripts/data_files/version_features.fmt": "791235bbfd7737683a4c462388a31f0204a716562c9bb4c19fc33d6a68496187", + "libraries/3rdparty/mbedtls/scripts/data_files/vs2010-app-template.vcxproj": "70eaa8c071a05964f866abb19547f178d03a017d09546c191f93b33bcfc48d2a", + "libraries/3rdparty/mbedtls/scripts/data_files/vs2010-main-template.vcxproj": "2aeb88995c4db9539137130d44e7f712e03741465205d41be68d429c0868b769", + "libraries/3rdparty/mbedtls/scripts/data_files/vs2010-sln-template.sln": "f6ccbb56dcd55c1002967c379d07e9af4c8137bc5d4e25b1b48fad1102bc063e", + "libraries/3rdparty/mbedtls/scripts/data_files/vs6-app-template.dsp": "71e0444b6ab5ab8fe016622063b72392eb29f2255a6f4b527308f03a14fd63d1", + "libraries/3rdparty/mbedtls/scripts/data_files/vs6-main-template.dsp": "32d89bf331081f828e4008a2a1853688dc63fc2b3018f527fd2e221d31c8d111", + "libraries/3rdparty/mbedtls/scripts/data_files/vs6-workspace-template.dsw": "5ee39f91104b06bbbe9014b59d53f30f0cee435aa6edd225eaa49942d141afe9", + "libraries/3rdparty/mbedtls/scripts/ecc-heap.sh": "e50d98a5b3b49024b7c060b3d3b9cdf77cae88b7e05dcc93914a5e33deb2e40b", + "libraries/3rdparty/mbedtls/scripts/find-mem-leak.cocci": "1676446b4832d534795b4338b08261fc570fb3a66de328a05da1976769a626f8", + "libraries/3rdparty/mbedtls/scripts/footprint.sh": "0c96cf5e5e51695b85507203a90780e5555a4406abc729793d029c32e9115f57", + "libraries/3rdparty/mbedtls/scripts/generate_errors.pl": "4f551a92b6507c32bf63758c7e037e261762d2ff3ec5b99b7031f18f5956cdea", + "libraries/3rdparty/mbedtls/scripts/generate_features.pl": "351e88f3affe5420d7bd579d2224c2d7c60ee7bc707b58ecd0cb92dbaa4fb09e", + "libraries/3rdparty/mbedtls/scripts/generate_query_config.pl": "4fb047403424badcfb2b2427aaab2a160330f1aee8281e00e18988183afa4c2a", + "libraries/3rdparty/mbedtls/scripts/generate_visualc_files.pl": "5947fa422abd780e5b28be0670a62d5839e1e8d2b6bb5f073d6de8ac91f7be53", + "libraries/3rdparty/mbedtls/scripts/massif_max.pl": "2cee4491ee2ad543bf9bd3750039a74b865ebe4bb1564f3f08c40c20b3438f98", + "libraries/3rdparty/mbedtls/scripts/memory.sh": "0538949b51fb715ec37f6c68fdfa0abe7484f334d9f5ae221f51ade08cf46011", + "libraries/3rdparty/mbedtls/scripts/output_env.sh": "b370d9067b47164afb47ed57adfb7c6f1d1ee4868f172bec432e29e7cd5f02a3", + "libraries/3rdparty/mbedtls/scripts/rename.pl": "9629332866733098f5b92fdf63ec6eb3a98a57e974742e1d4dff922e42ca79c2", + "libraries/3rdparty/mbedtls/scripts/rm-calloc-cast.cocci": "6333b31d5e254449cf8e9127da47cbc5cdd341c14e93d06aa485952ac7987d29", + "libraries/3rdparty/mbedtls/scripts/tmp_ignore_makefiles.sh": "fc2fd053da9c0d55f854d9bfa60e4ae783155993e42c9d2af2c53bd8ecb54d55", + "libraries/3rdparty/mbedtls/scripts/windows_msbuild.bat": "3a8e5605e23fedf7abbc3d4efe42c9cad06f919a590b94a2e578ea29a5a5fe65", + "libraries/3rdparty/mbedtls/tests/CMakeLists.txt": "753aeaf0e7c2e94960cddda69e11b33e571247e79fd1b25428278df9136c5078", + "libraries/3rdparty/mbedtls/tests/Descriptions.txt": "946e61cc0c477b1866d977ca0c8989b84c062015e38879d4cb0b91a24504732c", + "libraries/3rdparty/mbedtls/tests/Makefile": "2eb90437d5ab9fd430122f72321fd420d77e107a12e7ca0cceb3c46034310384", + "libraries/3rdparty/mbedtls/tests/compat.sh": "af6980efa632ede84a5a63fea52ee1012e021ad0a315017d290798ae66fab322", + "libraries/3rdparty/mbedtls/tests/configs/config-wrapper-malloc-0-null.h": "a9935dbfc19cfa41c4460a0abeec578c02dad79d50a583235ef22625698be165", + "libraries/3rdparty/mbedtls/tests/data_files/Makefile": "ad5990d3bbcf29521e7f630c7b8cb20aafd10c9786ccaa027514df0cddcd37cf", + "libraries/3rdparty/mbedtls/tests/data_files/Readme-x509.txt": "8d472178fccae62cb49fd37c5e4792d48277f58aef9d7415a8db335e7dad8360", + "libraries/3rdparty/mbedtls/tests/data_files/bitstring-in-dn.pem": "a56cb4555c1b735454efe2ad7fe080ba9df5df0119aa6b3ba385ff6148ba895e", + "libraries/3rdparty/mbedtls/tests/data_files/cert_example_multi.crt": "7e197f7d2400a69059756db678f0ededc07566fbb3f0b25f235a496827e1cd5a", + "libraries/3rdparty/mbedtls/tests/data_files/cert_example_multi_nocn.crt": "70d06e5a114da637d37d1f733f7f7b1ea99d2ef4743d02c3710fe6d81089d699", + "libraries/3rdparty/mbedtls/tests/data_files/cert_example_wildcard.crt": "2716a0cc21c9a5678b0ad5075ba1a211d7e3e2b621444e3156f901cafad027f6", + "libraries/3rdparty/mbedtls/tests/data_files/cert_md2.crt": "dca8fddabcfba841a9c02e2ef71f2f0b8e553531e8342bb37a47bf723710d4ee", + "libraries/3rdparty/mbedtls/tests/data_files/cert_md4.crt": "c8cd9e7909929678b60d9cfed28b8a71d56e2c8ac05f7be4da480722fd8d086e", + "libraries/3rdparty/mbedtls/tests/data_files/cert_md5.crt": "6b58c44889984514f7f18583138d831a8748ab0b193dabfed9e23bcd2962a3c8", + "libraries/3rdparty/mbedtls/tests/data_files/cert_sha1.crt": "d09400b2d5f1d189ad1c1745a5dcbfbf0c9e8223e57ed02522bc87ce3d092528", + "libraries/3rdparty/mbedtls/tests/data_files/cert_sha224.crt": "fb968a970027efd0317e94b50e2fe9e515a0404dcd73ba7ff86cfcd1d60adbd8", + "libraries/3rdparty/mbedtls/tests/data_files/cert_sha256.crt": "ffe3451b0aab5d89707e3dd706538c7df268609821f9ac71fbae804fae9ad74a", + "libraries/3rdparty/mbedtls/tests/data_files/cert_sha384.crt": "34c4d6e82b7ddaa6ba01cd9b6f0c3caf3dbaff320b47f770b6e939524d99e5d4", + "libraries/3rdparty/mbedtls/tests/data_files/cert_sha512.crt": "576836345a9ef43b29f33eaeb64de06f9bf95b052ac72463e7f1f77f6f9be0fb", + "libraries/3rdparty/mbedtls/tests/data_files/cert_v1_with_ext.crt": "441bbf74490e5e3c271770ba6907ceb8315ba3b3880203ae9ffb6c345b4f56a0", + "libraries/3rdparty/mbedtls/tests/data_files/cli-rsa-sha1.crt": "866a735d2f8e4913cbffd83d7f566f243e122ae4589f7440a8fe44da35b1cda8", + "libraries/3rdparty/mbedtls/tests/data_files/cli-rsa-sha256.crt": "0c9f037835a71595ce7e450b2b478852a3faf8f20ad8c680c9475d7f5c82355c", + "libraries/3rdparty/mbedtls/tests/data_files/cli-rsa-sha256.crt.der": "54583e3f6b904cc7d15940b84510df367493e85b74e273b0c7fa06e9cbdf762a", + "libraries/3rdparty/mbedtls/tests/data_files/cli-rsa-sha256.key.der": "c9af85bb77cb430f57ee1012b3af2aaebe8ae7263a618f19236a09b686e5b615", + "libraries/3rdparty/mbedtls/tests/data_files/cli-rsa.key": "660d13287799f69599adf0aff1db46ee42b4c492b0f153f620f89a639dcb8f7d", + "libraries/3rdparty/mbedtls/tests/data_files/cli-rsa.key.der": "c9af85bb77cb430f57ee1012b3af2aaebe8ae7263a618f19236a09b686e5b615", + "libraries/3rdparty/mbedtls/tests/data_files/cli.opensslconf": "93f28a0072b7049e317380f80080256d336381b5dde799b6560edf5b9fda4bc3", + "libraries/3rdparty/mbedtls/tests/data_files/cli2.crt": "e36c9f3a7036f6f5c7853c772a6b519f03c285f7e533af20ab2b95721c2179fe", + "libraries/3rdparty/mbedtls/tests/data_files/cli2.crt.der": "d2ae3024ffc46e785163539a421eb7eaa046126505212937863d510493e6dcbc", + "libraries/3rdparty/mbedtls/tests/data_files/cli2.key": "f3c47ba835345e9072b0f79628f2d1f539f79749b85afb92bfade5761fbd6757", + "libraries/3rdparty/mbedtls/tests/data_files/cli2.key.der": "557e06381c7e6448cd0d98c664172f6c143dd93cbc0e0d54561bac06fe86c62d", + "libraries/3rdparty/mbedtls/tests/data_files/crl-ec-sha1.pem": "28e158dd3910193eab15911cc39694544a8b0f5bc766e3e1da67f4ac434f9392", + "libraries/3rdparty/mbedtls/tests/data_files/crl-ec-sha224.pem": "907bd1ee58240b7c072e91676f0ebc9702a04d433bffd2384e69c05f6a2879f9", + "libraries/3rdparty/mbedtls/tests/data_files/crl-ec-sha256.pem": "929e7b1adee89d708c200ede454138ad787ebaf7b6de476e1d4faf3b1298dea4", + "libraries/3rdparty/mbedtls/tests/data_files/crl-ec-sha384.pem": "acba589402ef11c7e0cc2dada88d280770644029253b864779fdc5993ec4504e", + "libraries/3rdparty/mbedtls/tests/data_files/crl-ec-sha512.pem": "5e375a364c072b4ecefa09bdead1688a246ba0564be8dc87cd95d23d4876a4b0", + "libraries/3rdparty/mbedtls/tests/data_files/crl-future.pem": "c5c94eae1aca9509707811469e93f3acb7aac48847a2a0e2d9e74b56bb2e43ba", + "libraries/3rdparty/mbedtls/tests/data_files/crl-futureRevocationDate.pem": "9b87e8301b06cafdb544c6c5ff4a2736608ce6d2653e315c67e25272e3b5fcc6", + "libraries/3rdparty/mbedtls/tests/data_files/crl-idp.pem": "5de822f1b4f62cf742ae8b1a93acf160b988e8ba50450999d967ef3871b83a13", + "libraries/3rdparty/mbedtls/tests/data_files/crl-idpnc.pem": "ee36535dd23db1177ed5a52a409aeebbd9931d69da353e35f71e41bedfac52e7", + "libraries/3rdparty/mbedtls/tests/data_files/crl-malformed-trailing-spaces.pem": "93a6e9fde6b830aec66889e35af36c7a2b6d835992ac463ef73deb28fa5c54a6", + "libraries/3rdparty/mbedtls/tests/data_files/crl-rsa-pss-sha1-badsign.pem": "129c391ec45028057e8138f036e9864ec32a0189ab7432efb08478bee5f73880", + "libraries/3rdparty/mbedtls/tests/data_files/crl-rsa-pss-sha1.pem": "edc1bffec8a145087e6f66360584897b060a0fd3582f0143576f643ce0fff637", + "libraries/3rdparty/mbedtls/tests/data_files/crl-rsa-pss-sha224.pem": "637b7a8d60309f66f89a9ed9201ffe7618aa939d66fe630540f17e1704b923d4", + "libraries/3rdparty/mbedtls/tests/data_files/crl-rsa-pss-sha256.pem": "a1912cb8804562ae2dbca1ae10db45b4180bd70f56fb1134534b396234e5b247", + "libraries/3rdparty/mbedtls/tests/data_files/crl-rsa-pss-sha384.pem": "5d9144f238c0aefc2d0bf5293c3ab09203ab12919fb6173ed634d8e42bfdbb54", + "libraries/3rdparty/mbedtls/tests/data_files/crl-rsa-pss-sha512.pem": "7df28c03ec8286a8d00e3dcfa545a02d7885266dbd349c3c57e29a000478c6bf", + "libraries/3rdparty/mbedtls/tests/data_files/crl.pem": "07de7d8ec2532782314fef2d0fe7874df39afe551307873dc9acf862775c5bce", + "libraries/3rdparty/mbedtls/tests/data_files/crl_cat_ec-rsa.pem": "35249d4f945676d93b16bd9f15c7456ce9d774b52b524792497dab97b0432cd9", + "libraries/3rdparty/mbedtls/tests/data_files/crl_cat_ecfut-rsa.pem": "a62d024a1b8d82fc4011c4b3cf12b19598d8be72d4a10927f38f14da7710965d", + "libraries/3rdparty/mbedtls/tests/data_files/crl_cat_rsa-ec.pem": "a5fad1b53645e107a3295471cfa65631abc2718e0cac775cf97f519fe31a4c1c", + "libraries/3rdparty/mbedtls/tests/data_files/crl_cat_rsabadpem-ec.pem": "9b930fb641b1f042f873cc141eee7d29595aa2260116795af4d73517ad62aae6", + "libraries/3rdparty/mbedtls/tests/data_files/crl_expired.pem": "1c84a41b8da15aa1124f6479adfa6cbf111cf8a391a0dc7a2a9a940c30d3a5ef", + "libraries/3rdparty/mbedtls/tests/data_files/crl_md2.pem": "63f35ba431a5b98a8cccff50370f2a983052c0db8a244cc04ef37e4fca85e2fa", + "libraries/3rdparty/mbedtls/tests/data_files/crl_md4.pem": "b685416723dbad577b8e42b6bfa10f980be09805ca591c69c64d1b8a09b177e8", + "libraries/3rdparty/mbedtls/tests/data_files/crl_md5.pem": "8a3d0a4a56a6f8543f50059a6ac0d7a7d0c3fa3525d5f82bf68861e59f57f3f3", + "libraries/3rdparty/mbedtls/tests/data_files/crl_sha1.pem": "f98c02f1ec6a5a2f63fda160f8a7128021bf8b791b460d3404b171a57224051e", + "libraries/3rdparty/mbedtls/tests/data_files/crl_sha224.pem": "1dd5ee3c9d4efe7aacd278b933c613b901bf35c9d9fccad7b928a3ac1b3a301c", + "libraries/3rdparty/mbedtls/tests/data_files/crl_sha256.pem": "6003430f0ae6b4338aca8d19d431b5f7e1e7168f55d02b55b81597eadcf5286f", + "libraries/3rdparty/mbedtls/tests/data_files/crl_sha384.pem": "95cd5a37e5bcf335efa400e13b50cf0c4c2baa470501bda1110624b805fbdf82", + "libraries/3rdparty/mbedtls/tests/data_files/crl_sha512.pem": "091fe29daa3919c518c0590a48f86d690b3f1aa24b3650d58347c00dde61acd4", + "libraries/3rdparty/mbedtls/tests/data_files/crt_cat_rsaexp-ec.pem": "9d7b3df09c803ca77f07720a9dbef99c0bf76ef00212e75fe7f9fdfdb30c3f94", + "libraries/3rdparty/mbedtls/tests/data_files/dh.1000.pem": "e5fa5946d438a33a41573170681d5edd37028ab561774d3cc141fe6962aa4c2b", + "libraries/3rdparty/mbedtls/tests/data_files/dh.optlen.pem": "0a3b1ad06c9aa232f407da2c9557ebb252e35e8df7fa8b01d67be96633182e6e", + "libraries/3rdparty/mbedtls/tests/data_files/dhparams.pem": "93108f830ce1ffc74ccc5c0c45d74d29e2f4e0257bdde8b7d48875eefc12a1ab", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/00.crt": "558609858840dc17a9da804634afbf99424edb8db59ad99dce3687691785be67", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/00.key": "cd88d1232e351058359b9aafa390509951c1a0c6b00b7da285009d910e83ce1d", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/01.crt": "d5a0f0ff62316c2704cce682a6640c78792325d224fd41241dc11960a2a9688e", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/01.key": "c20a5c6eb77c8cf63543107c06dcdae2b49f01622e2d10ce6dc09e59397dcbeb", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/02.crt": "1869b8a995dd86666cabbf176e522db7757193f98543effdf188fd5fe569fa17", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/02.key": "14e626f8c189a5ff349d8efe35d7c357b75c59c1c267526fcac878743aa53d78", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/03.crt": "f3be18625e10235fef73c6de3c4fe1d62a207a2826f87d02749f2b3ea3aa858d", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/03.key": "a04dcc41508c378372d26098665de22c83a63a76ccd1c2533eebe1bf1b9555a1", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/04.crt": "de78b79629f7a6ab401a48d61339d6aedd2f6a553ae4c8c36268f71b0d24f9e7", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/04.key": "28befb1d41f11edfff3c447914acf25d2f620009c184ecd75c6a1a120b24f76a", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/05.crt": "af5679a5655a6db92618c0b103d2e69e869e6effc917df13600754a2cfa2c259", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/05.key": "39e58ffd6ccad062dcbd4b4e3cb1ac31aa27eb378fea6e302de2785c0becd276", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/06.crt": "aaba17838cd6669deef4cca0f0e0b504e8fcaf57e54d19d501a9edf9d8361884", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/06.key": "4c48922433ed3ecd9df09a530a094eefcf61aed3a979c50c138a260a9fcba808", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/07.crt": "9ec6ff17c6f0c030cc25712329f31d0ec3fb7f887ee10ae130ab888693ec6c1f", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/07.key": "54e16d5b34cef77bbc747ea32cdea3a512ddfd0c97e0a2856f2e9fbb8224d3b2", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/08.crt": "2570b5067bee9ab0ac87a7a49d9460120e5e06d85204472a973c1e2d748b5e18", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/08.key": "eb9dc2fb50847a846ad4f36e87c8aab98964e3c4cd3cb5a270158a2352022ee8", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/09.crt": "dcc49f4d753060f11ac645a661e2fafe122f33646acc808d472678ac824ae167", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/09.key": "ea99373ba8ef0158a51790aeac4a17fc02929be89a2a41b509c1be7fd6cc7310", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/10.crt": "094319da4d3a8702483b88ff111fef9bbbf9ea6452deb2421820ac0408aae81e", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/10.key": "74414a3cebefd13ab9d5d6a3b0c2895c39f04deedece9e9b564041d448b49a71", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/11.crt": "16a2d5c046d9953e6782cf6c1fb9f12e4c2e5af2be0b45aeb95292e36b2782ed", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/11.key": "a969b40ed5608775d422fd77636b57c8ae7f7445aeaee4bc36171d37287d6232", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/12.crt": "83def2adceffbce4e823b26d30aece634f65234ff30da599327866180a5dc21e", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/12.key": "86213c8881730842dd39b5beb18eed0bc359576faebfd9a3284e82c9b917985b", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/13.crt": "61d4ecefc25b47d22907effb3b2777db2a92fe74a5da1e45982593de0462c37c", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/13.key": "3adcac5db34bac9243e241cd3d411c408c40c072a0640736e641b2f5770fa22b", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/14.crt": "f69c6bdc9f951170183aeb916efc9b33a6f4c393c3431c014b2cf066f0d4ef73", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/14.key": "e2be9d236ea1d90882d8bbb1863544a3e765ac0916870ded784d89a660d35f42", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/15.crt": "e7ff71176744b78d63e305d665f9bda2ce6a052bc774c72e59473da94e86a687", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/15.key": "25f574ba3a37d6edb1b05352976cea0f8e5d42dd222fe86d30fc640daed78c86", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/16.crt": "95dc0c5c32c7b8cec9f3adfe98838b7de74187ba79f7e228e0b8088d85e01b45", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/16.key": "f78786f4534f25e2effd19746c481f8c795347eb700bf0584a046354054430e8", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/17.crt": "c07d3fa651f1b8e3b0fd9c3841ffeabab1a17f8a76f735b45c1c14dcf2f2f7e8", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/17.key": "cc1e209a9cda5fdff62cf61628cdfff437a7301e483ff0bb339c544d6a420b26", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/18.crt": "4ece74c31247ec25e9275064db5a9438b2d134b48318f0a2b2b0b9a49ac85982", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/18.key": "fc91156511ae0f490825d3c170a2a708f2b0c8107124bc0fa703dd19c12695a6", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/19.crt": "8cb73807d9c53caee9487e713232ac69694092ad5a6d51ff8db37bb9dd56cde2", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/19.key": "5ceabbe6c1af30a28ec8d0d58a4911ab557304e5fb84a90e7a1cc48a33f576f3", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/20.crt": "09bb73126d3698ab939d469f075b425b4172d45b160743cfc50c137f876a6cd7", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/20.key": "a7fc55a3a918fd5b46d9ec2c166a226c361e1e6bc5ac39a33e97c1d664a17715", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/Readme.txt": "89a5cf249f1f1db829a748a9e051ecd9014d448f1f6083000f7a63ce7e7006b0", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c00.pem": "558609858840dc17a9da804634afbf99424edb8db59ad99dce3687691785be67", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c01.pem": "fe9151449a7925f644a2de6d4c242bacdd4e01f0182805a3a09fbdb5a887230d", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c02.pem": "5d259cda21032c86b9dd371264577a4ec6b8f0d652729ba0aeefe99ee8cd59fe", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c03.pem": "0f7bf5e1070c69e6dbf1755889f62b92a329e67233f91407cef9bf934d8cd224", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c04.pem": "45a06b9e7cbf5e5a83725f5e524cf905bd8710dc6e20beabb3ccd5212fdb5232", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c05.pem": "f73789e296878cb979abfb9c0829da492b4729cdd3d28ae2c06b6e7976ca0154", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c06.pem": "07077d1c4a9a444e187e4a9b00cce1acd5ac8135ffe8bce9ca03e334f680692f", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c07.pem": "a417f92841ad64c79207afe8f858d8d4acf44a658451869b2b700cfe4c80a0c7", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c08.pem": "14171c21db9d34cc0984f1f865cfe6cbda9ce3743df4dd2d159767e8532fb016", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c09.pem": "5912ee75858880857a48f1b4b1f5f5bcebe0fe41642198ae0a0853d56c8e9157", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c10.pem": "cbe574373c7d1989baa1b67249ddbd467f1f0882fe68c61191160ced32b607f3", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c11.pem": "8194cd820d069233b2ff62126d19e0e2704030acf20b8f424b39bbc8470d7fa7", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c12.pem": "338b7d86776b4e92e14fa9fa59e2eba86c8f7cc35b0fb79c1d0530088440c9e8", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c13.pem": "389cc52f557cb4fb23926dcbdb4f905ea8cf241f7807321caa90f1c11f919aa5", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c14.pem": "b9acf4c1a26e4a88fe206300987f4a377770e74cc6e524f36a46313f48cd896b", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c15.pem": "703fc1e8838a0fff288d2c079c01d63724ffa3a65aba80e3a985bf8768f5e462", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c16.pem": "569fbf14527ef2ae42de5834d7b210539b040603bee91422b06167843a0e6729", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c17.pem": "c1f325141c11a37292eafcde2a310c5cefecb1062a5e282376105d90851debf4", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c18.pem": "e16bd5f39ef8013b0c48843db8334a450154f75dc3bca0c36021cc752369db38", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c19.pem": "f7896c40eaf4afa3781757083f2aae5239e9ba164da488bff63cac87ad2417e8", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/c20.pem": "18a64222ea63f7b80b3b3a844a61065552712fd528edcbcd4f1cb8076a928ac8", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/int.opensslconf": "5db05d936789d8a7433abdab86a8925679b1467a23ebaaa6293f1f3287c53766", + "libraries/3rdparty/mbedtls/tests/data_files/dir-maxpath/long.sh": "86c14d0a1b264c69e5bac26fab7904d91146842eb7c0c7d71257fb32265afe86", + "libraries/3rdparty/mbedtls/tests/data_files/dir1/test-ca.crt": "d123b3e7e890c87fd8c7db00b464ca70755bb7aea105432f32e0d4e7724ae4e2", + "libraries/3rdparty/mbedtls/tests/data_files/dir2/test-ca.crt": "d123b3e7e890c87fd8c7db00b464ca70755bb7aea105432f32e0d4e7724ae4e2", + "libraries/3rdparty/mbedtls/tests/data_files/dir2/test-ca2.crt": "69ccb7250fc0fbc1b479dccd70d2561e33255086a0f4e4a8672f92e0cc8e754d", + "libraries/3rdparty/mbedtls/tests/data_files/dir3/Readme": "fac09c08823cd79f534a5f5ce76e05ebda64be718f6457d44e84928231f17225", + "libraries/3rdparty/mbedtls/tests/data_files/dir3/test-ca.crt": "d123b3e7e890c87fd8c7db00b464ca70755bb7aea105432f32e0d4e7724ae4e2", + "libraries/3rdparty/mbedtls/tests/data_files/dir3/test-ca2.crt": "69ccb7250fc0fbc1b479dccd70d2561e33255086a0f4e4a8672f92e0cc8e754d", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/Readme": "2bbd3bb85c7080f5745b528ce02b75b5a64aadfcde3cabcf06e7cf068b5f9246", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert11.crt": "d4f47ec1c0d4839eeae9ee8046bda1245b4f714f1a4753eed290efb4a6fa9903", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert12.crt": "e72d7bec40aa781c3c32af83ddfa072b0b0d2bd94a592754b1b05ebe34ec439d", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert13.crt": "55cc6168c43c0b72c7d01248b700a87cb08deea3b35e0e23930606e717b5e5ab", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert14.crt": "92d0c971e08161ca0ee52d3acc16287e31d24d1d3f2697490ef1f902588f3385", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert21.crt": "2d6c5926bf8f606b39933d88f95c3542c6cb7376af2201910c6aeff3e53224c1", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert22.crt": "8cf8a7f8e55e7f533988f4dbb0fcfef8b42f75c94a5fe06371b6cecaf5efd1e6", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert23.crt": "1d7dd79328c314c46169974f94269305263f4f3953e611f6965c510987a05516", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert31.crt": "09ae249d2d0f85a2d7cbdbd7ada36ed1b211ba009d3e48a82596f753c89fcac2", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert32.crt": "8cf8a7f8e55e7f533988f4dbb0fcfef8b42f75c94a5fe06371b6cecaf5efd1e6", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert33.crt": "e9aea2a62046c54110003c435c42454898ad6d3172e86be5c15fbdf845b047a7", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert34.crt": "5d8e5d9b45730b99ad6f0a695290996253fd09cadee34e6d093ed22b575b5d7f", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert41.crt": "80b0b7c00c4ed0e6281406b0182ae723ee28d0ac83ab916cff5a1bf40fef3634", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert42.crt": "5fbef827479243ee08633a600e8c14dc43d0454b2475e506aabea78f5a68d57d", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert43.crt": "e9aea2a62046c54110003c435c42454898ad6d3172e86be5c15fbdf845b047a7", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert44.crt": "bc1d4a8da29b153ba628b442901a08ea844040a3226f197162fae6b42a35efe7", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert45.crt": "3f38723bb879d875f42fe7e9d798e5618b0e7f90fa0df85e47b0f8b04b92bfa5", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert51.crt": "80b0b7c00c4ed0e6281406b0182ae723ee28d0ac83ab916cff5a1bf40fef3634", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert52.crt": "5fbef827479243ee08633a600e8c14dc43d0454b2475e506aabea78f5a68d57d", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert53.crt": "e9aea2a62046c54110003c435c42454898ad6d3172e86be5c15fbdf845b047a7", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert54.crt": "8f94e2b812adb33986cf91b4efbd064755518b76d3814ca1bcdb9f5e0dfe2690", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert61.crt": "09ae249d2d0f85a2d7cbdbd7ada36ed1b211ba009d3e48a82596f753c89fcac2", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert62.crt": "8cf8a7f8e55e7f533988f4dbb0fcfef8b42f75c94a5fe06371b6cecaf5efd1e6", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert63.crt": "6fdac8688e057f8531bc120b3ab9d6e288cfdf19f4d7d982746aa92c634e4b7f", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert71.crt": "09ae249d2d0f85a2d7cbdbd7ada36ed1b211ba009d3e48a82596f753c89fcac2", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert72.crt": "8cf8a7f8e55e7f533988f4dbb0fcfef8b42f75c94a5fe06371b6cecaf5efd1e6", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert73.crt": "0de79dfdf640b6cc736061799f6c1fa1a7d8aee09eeba43e11285375f7a15fc9", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert74.crt": "93de8e5ac8d25beaef072a43e5fd1767e6937831d745c62345dd8d6efb301154", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert81.crt": "0f4c48d44ef2863bb063e76c25608250a2817aa3270161e6c5cda322a43b3919", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert82.crt": "9de3b7854f7f803d98703f98b47dcfd0022359be5bb8fb4ba4f09cb68afb50a7", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert83.crt": "cd92f55a61ed691c23cc268faf7f4d6070a8a03cd3989f915453a6e51542eb19", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert91.crt": "6e4b75377ad27118072f6fe98239f609fad9f97b3de5b333a917e95c9e59028d", + "libraries/3rdparty/mbedtls/tests/data_files/dir4/cert92.crt": "e5cbf36cda413d2659ff53121cf1163099b4275fd3f77c3ce6427a9f0eadf1ea", + "libraries/3rdparty/mbedtls/tests/data_files/ec_224_prv.pem": "2c5f6e9a1466fd74a1ee2eb5f185abe903bbd67633a3bb3425ff951a5a17e181", + "libraries/3rdparty/mbedtls/tests/data_files/ec_224_pub.pem": "21679b5df0af750c766616866c695e8dcb93db4501d19a6febac7ff599d88ec1", + "libraries/3rdparty/mbedtls/tests/data_files/ec_256_long_prv.pem": "edbb78411c53e20a480854bd1c55e26668310d1729a0d7ce448138abe51dd763", + "libraries/3rdparty/mbedtls/tests/data_files/ec_256_prv.pem": "0405a70b26333c2555e31ae665c0a5f37c6cd0e38edf5695afe3638743bdd903", + "libraries/3rdparty/mbedtls/tests/data_files/ec_256_pub.pem": "77b4f55e6a1ea1db4c72a71efb973892ac4a2015a65be470d274da811d9d6cc6", + "libraries/3rdparty/mbedtls/tests/data_files/ec_384_prv.pem": "ed3a69ca0c5f4c62fa2c7b64951a11d1378abb72c3a3e439d7e06a9ec82c2075", + "libraries/3rdparty/mbedtls/tests/data_files/ec_384_pub.pem": "436ec39c20378dd1ae41765df9937e0138f4d724beec8062d4834e03da8cdb1d", + "libraries/3rdparty/mbedtls/tests/data_files/ec_521_prv.pem": "ecb4bed1990396b35f4cc0d3e2fa99b4e3876c89bdd05b691e0c02ad4b43b73d", + "libraries/3rdparty/mbedtls/tests/data_files/ec_521_pub.pem": "20eb17b9dba162bbb2e6055da194b23c91ec71caa47bc022f74f239eb8c0d711", + "libraries/3rdparty/mbedtls/tests/data_files/ec_521_short_prv.pem": "f82aecefacddd06e07012fca5751cdca618487c0b97ade4354e082900cc061c2", + "libraries/3rdparty/mbedtls/tests/data_files/ec_bp256_prv.pem": "0777db4161e8fd9cfcb0833486ea2992f1e173c22b53520e60799a905b05121d", + "libraries/3rdparty/mbedtls/tests/data_files/ec_bp256_pub.pem": "6fdc2e11f20df144d0b30a8227efddc13c13bc75a8ee7c3cb0d39a6dc7bdf9b8", + "libraries/3rdparty/mbedtls/tests/data_files/ec_bp384_prv.pem": "a72bd58d95029d0d6ab68219a29a25f107e235feb0543df7867e28e2a94f881f", + "libraries/3rdparty/mbedtls/tests/data_files/ec_bp384_pub.pem": "f68679ce7aa4e93e9f3acecfa9458fdc6f87a8895d0ea22c477db93c53226723", + "libraries/3rdparty/mbedtls/tests/data_files/ec_bp512_prv.pem": "9873530d30669de09947d05a9a111a38cd81376e2f97726c42250b958c6a1a0f", + "libraries/3rdparty/mbedtls/tests/data_files/ec_bp512_pub.pem": "31659f83a80457d707177c9436a46b4154ccd1c01f01c9de4685a7f8b59245cb", + "libraries/3rdparty/mbedtls/tests/data_files/ec_prv.pk8.der": "fd7e1a365af2323008b0195ec77a95ed9e59104fdbfef1639cb7022ee09c9a01", + "libraries/3rdparty/mbedtls/tests/data_files/ec_prv.pk8.pem": "c6bbe5affbf9a953c8d2124cb80fb48c2e9344b796d328e8c385a1aea5edde64", + "libraries/3rdparty/mbedtls/tests/data_files/ec_prv.pk8.pw.der": "a1e9f7ca94578cb5d21b71292c3a56a6e147751924b67820dd9aad9249b5ab47", + "libraries/3rdparty/mbedtls/tests/data_files/ec_prv.pk8.pw.pem": "d58913cbb587fca417bcbd8c2ec09c858206cee88de3a1351aa8601791066c82", + "libraries/3rdparty/mbedtls/tests/data_files/ec_prv.pk8nopub.der": "22d2162c7b342417c33034ac3aa56f79c01b9874a2df694db9ebd95542380ae9", + "libraries/3rdparty/mbedtls/tests/data_files/ec_prv.pk8nopub.pem": "9587d1d0e4c45c1601faa4384e1bd5634a37f4a86ba4fd85fbd7fc85ad110d20", + "libraries/3rdparty/mbedtls/tests/data_files/ec_prv.pk8nopubparam.der": "2a3381bab277bbca12f4b909335f7a1c13e46c19419c03b18a93be671bc6fe55", + "libraries/3rdparty/mbedtls/tests/data_files/ec_prv.pk8nopubparam.pem": "729ada4d58b82f741acfe7af2649b456c6b2c9f7297d202b83a0680ba4004685", + "libraries/3rdparty/mbedtls/tests/data_files/ec_prv.pk8param.der": "c4352a035ff6e0afce8f8b5f8358e10a871c373f93f3fef3b247245d8ba4d509", + "libraries/3rdparty/mbedtls/tests/data_files/ec_prv.pk8param.pem": "609315a12cb3e58ab934a59c30bef3c835e835bc44244fb640d659f66b82dd8f", + "libraries/3rdparty/mbedtls/tests/data_files/ec_prv.sec1.der": "c5eca7361e00be801678a707c5ca3c3b0dd588fbdfde82f1d29a410868f1c5c5", + "libraries/3rdparty/mbedtls/tests/data_files/ec_prv.sec1.pem": "e4717c4b0e7e29eda161a63f5d778ce42e87e99e2ce8c440d209949f8fa49647", + "libraries/3rdparty/mbedtls/tests/data_files/ec_prv.sec1.pw.pem": "23052547d6b30dfdd3831b5b38c5b11be5bfc90afabe5638b7799a1fc6c67d01", + "libraries/3rdparty/mbedtls/tests/data_files/ec_prv.specdom.der": "4ac48937c8eea09c6f541e8b27b6576276224301ff1c6a6781f3636604540286", + "libraries/3rdparty/mbedtls/tests/data_files/ec_pub.der": "f1b8c5f2626c5a823450e704ad8f7e47efbb3bc648855e0e3ecc471e6c7ff0a8", + "libraries/3rdparty/mbedtls/tests/data_files/ec_pub.pem": "85c0df2b3eb7e7149ea7ea1cc614f7c6acde945ca5264c2d5ec48a23a3c25419", + "libraries/3rdparty/mbedtls/tests/data_files/enco-ca-prstr.pem": "9d6be316630c2d1b2af5f07a0484b39b3ea0d001e2152436e0d3d6881809ba49", + "libraries/3rdparty/mbedtls/tests/data_files/enco-cert-utf8str.pem": "83a7513ea4c9e312e624d151ec1cb2c8cac2ae0db46d5bce813ec5b5d734d6dd", + "libraries/3rdparty/mbedtls/tests/data_files/format_gen.key": "dca1b0916b165817b00f17cca5baabb6cec36da42915d10dc1cfef66e8956c36", + "libraries/3rdparty/mbedtls/tests/data_files/format_gen.pub": "76b4975658959d263f2d4a4dfdd234151bbaa986dd0fb3127e30d67bb3d5db47", + "libraries/3rdparty/mbedtls/tests/data_files/format_pkcs12.fmt": "faf2b10722fe00c42cf53ecb3f73a926237da099f488dac79beeac62d45e4051", + "libraries/3rdparty/mbedtls/tests/data_files/format_rsa.key": "4be0c523a0e7e848d00bfd0f14df939cad57cd23fddbc88f637b8dcef84844d9", + "libraries/3rdparty/mbedtls/tests/data_files/hash_file_1": "975d0c620d3936886f8a3665e585a3e84aa0501f4225bf53029710242823e391", + "libraries/3rdparty/mbedtls/tests/data_files/hash_file_2": "11fcbf1baa36ca45745f10cc5467aee86f066f80ba2c46806d876bf783022ad2", + "libraries/3rdparty/mbedtls/tests/data_files/hash_file_3": "9ae4b369f9f4f03b86505b46a5469542e00aaff7cf7417a71af6d6d0aba3b70c", + "libraries/3rdparty/mbedtls/tests/data_files/hash_file_4": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "libraries/3rdparty/mbedtls/tests/data_files/hash_file_5": "cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0", + "libraries/3rdparty/mbedtls/tests/data_files/keyUsage.decipherOnly.crt": "b704f88c55cca613eb99d8669eec61d5ccd8d17d79b3873497fc9819869a9289", + "libraries/3rdparty/mbedtls/tests/data_files/mpi_10": "a8a8e03559b9d8bd1ab263ed74f56cfdc255bb1f4d68c6d75740574aff1d47ea", + "libraries/3rdparty/mbedtls/tests/data_files/mpi_too_big": "1df9e1532ab98dc1592bad8cdc8ddb439820ee7be4fdd5bf66e809f04dd50702", + "libraries/3rdparty/mbedtls/tests/data_files/passwd.psk": "ced9f110932d025ad3b20f9f8a711eba701f83d4b776888b2f310b9a15566cbd", + "libraries/3rdparty/mbedtls/tests/data_files/print_c.pl": "ede2a97f4090ecba0574cf6259b8a7ac14ee72582a7f9d3818d4618e76ba737f", + "libraries/3rdparty/mbedtls/tests/data_files/rsa4096_prv.pem": "fe1368dfb5816c1697ff7842aa4da44fa0961aac16dea803f7b0b1af922f692f", + "libraries/3rdparty/mbedtls/tests/data_files/rsa4096_pub.pem": "e3afcd3274efeb06a3354eb8346a20f3cbcb58025b8a11cb485e896507c4fc64", + "libraries/3rdparty/mbedtls/tests/data_files/rsa512.key": "799d813958afdbab03c10fb91df109f7d7ee0d9affd2282cf050600d50b97d44", + "libraries/3rdparty/mbedtls/tests/data_files/rsa521.key": "4bc698df7312e5ea0a9bda75bc876d16a25a30dbd6d34483b3252ce8224ddf2d", + "libraries/3rdparty/mbedtls/tests/data_files/rsa522.key": "aa458ff31c66c8f7af7c6f07418ac9479bc9aad4d8d1e5128f2d7455ca52eeed", + "libraries/3rdparty/mbedtls/tests/data_files/rsa528.key": "614f9aec7348a481cb5477c47c3bf76d6af8f4a5f21cc875a8efd026c3bdb085", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_1024_3des.pem": "2c387321062ad20d5eff5ec30ba57cde1b1788253e315cf3fef64d896dc6141b", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_1024_aes128.pem": "5032455d9ae5bd96fec4a14b409d122101ad3f074a29b6af28f67c7081a82366", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_1024_aes192.pem": "2628892185635e4f459444f7f5d17dc9f3b0009095d12a11c634bd3a333e4aed", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_1024_aes256.pem": "5dae5ea1714082b515a073ec930d9ffb3294ca2a12a66d131cfb5b35489aca78", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_1024_clear.pem": "0112d73365e459106014ed440d6ca6d45f234370939790e21e9267bfb073bdb4", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_1024_des.pem": "08e9aa7dbf581581131532213ede5f76222efb3c5df3e1d8e9d21f77ffe97be4", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_2048_3des.pem": "7576eec37b28007c0fecc1023ffc0cdd51c5b0964f9d02aa1955774ba9f06fcb", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_2048_aes128.pem": "ee8bcbff13d7f58c5bab527d72b793fbf2085a568ea25af446017f214531dd17", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_2048_aes192.pem": "d24c88836bc1c4cd35734e9fc252ce95f07cf4ef3eb45726ada77b82e3177bc0", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_2048_aes256.pem": "182681da70e9eeb1d1508ef4746763fcf14da6eebd414bea090717c0f830e52d", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_2048_clear.pem": "3e79c3cb57eb569c4271f69b90b3f9475b02d32b835c91f29786a02d5c04a510", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_2048_des.pem": "42183ce524fc60c316f9eac695c30e758d295a0c8013788053c6c43a6ac7fd36", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_2048_public.der": "f9020011c92bc526c75ec849ed15ca63c12d64129cd6b3fcbc5e4fbd9df9b810", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_2048_public.pem": "3c28eea66473c3d3ba126da0c8d7af98e00d1d2f8e7d00a7c55e9a2c5119a850", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_4096_3des.pem": "a5314e0d8e9ae1e34afe514d9219d507c1f018156bbbcd9ec36a5a935f8186bb", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_4096_aes128.pem": "7d544b8d1a6f552c90e4db19d84744b316469d8d6a4eb31e6ce9c6abd8e87e57", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_4096_aes192.pem": "1a05e9f1f7152126eb08dffba59841ee525319b46861ee3ed526c687195bc95c", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_4096_aes256.pem": "cc66bcd61806a601f33ad93a47a53f4785470e2fcb3ded30a77611b1876cd05f", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_4096_clear.pem": "c6ecb3e03f0920f35453d72490e1139f11ecc38a19bd6a1cd89e9004779a372d", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs1_4096_des.pem": "cf6d0a97cd7750310bedd61e505ca57cbe585c33f6f649426e661551a37ea44b", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_1024_public.der": "e0e4deb81619f62ce2f76795a2f1c49c53c641775c66ae5fbbfdfca7f459442d", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_2048_public.der": "b6cc4647b75d49cfdf45b23ce11aa981f122bc37dfedb0c34cd9cae1835a865f", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_2048_public.pem": "484598e3aebb140471ac33f1b7ad5b404b2264565c0bc3da4d0a5a2018efe004", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_1024_2des.der": "1528b3dba6da80e638cdba8f5b6c078d2012a478e7bd46b6337b2fd362afebcf", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_1024_2des.pem": "7af1096ceca43dae032b481d883e553fba9f222fea125144add0be3b990ee190", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_1024_3des.der": "07a45d24466d4451387f3c11631fee2a7a569d799b6bad4a6ddf8f833e75699c", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_1024_3des.pem": "1971878eef033bd7848c08b815398671a58e8daad5ed01c4afb13205199126d9", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_1024_rc4_128.der": "e37a91a67712970039dc97fef17d876e98095a42f98022624d1acbc7109dd84d", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_1024_rc4_128.pem": "80171741dd3fabb400c2b3e913c1ef2ad24e542f40ee8cc789c41a82958ba969", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_2048_2des.der": "5408d3b730a49b89454651bb2fa431b67215fcdacd8548af5914f1ed0bb786cf", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_2048_2des.pem": "50c2f177ca4d72d06bef23514df39c1d59ac317b7905eff5d73452f22b5fcde2", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_2048_3des.der": "20f9635cd74121e7f40099585ed44e3df6fad7d27b594b71e4a4cb7f931802c0", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_2048_3des.pem": "cde352fa9773ed8fd8888f9bb69d33a1b9dd13dab18f58620f9106b27d603c7a", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_2048_rc4_128.der": "993453b973c65b34d97e7bb1179f9d53e05def19ae6ff1bd33f1cbd85b8d44a3", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_2048_rc4_128.pem": "9fd1378fff6967d5fb74c26cfe5e311e9f1ecd3d8041bc195b1f94caa8ea003d", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_4096_2des.der": "0135bf69430620321b84534a898ae23ca651318a2fbf4f847ee4d8a98511e5e3", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_4096_2des.pem": "7577944396863a97be6fae436361303947778616d165b687b319f9353e80d4dd", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_4096_3des.der": "14900c8e0500418775322e7d7ee4d666c0dac142630479fc9b3788c9c899968d", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_4096_3des.pem": "9a37049edb24ddbdaa1a65cd374068bca32d0049048e88c8c6e38094924213d6", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_4096_rc4_128.der": "a0b2115bb99a823eeb0e0c9e29786bd426c2e4ab192680030cf36866f7300ff0", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbe_sha1_4096_rc4_128.pem": "83e49de7ad3ae1b312f3473a435e14448b5627c5bd0e029ce8917693d878acff", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des.der": "377485165326983aa5a84efeafbaa2ab2bfc6b2ef26b7d0cb0ac62a6e76c4333", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des.pem": "4a89853da284ffc3faa351fd7590af5cf161818c1751140317c63dcd66e759d3", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.der": "c7595eb54ad5ee1124767a49156fc1279d3bd63d1745f16666e0df2c88c82612", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.pem": "085440d612122680999baf05e4efe8a196f5c39422a2a6c97093e49ddd93f911", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.der": "420f7d15d7123478b22d2a0cdfbca16a65809e9e98c4daa1bcf168f348e7f971", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.pem": "0c9768289c6b43939c29b864bb984b42c9011c88fa8494f3856ad284fa5edf88", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.der": "212264f9eef95b72eeb5777b95e0a042e78180d6749f79938c58bc70d928cdd8", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.pem": "740a53af16f5499b17a9b2e59e839f2b95b3669238d631ef06aed63cf8135725", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.der": "47905380c77231834a773dccdf06c376fc294a1e13b59f6727196db570f4319b", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.pem": "7533d5a146e37001dc57d1f53e8a38182e3925747bf02a1667331332f584709a", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des.der": "09ce34140f0fca9c73c786a90c883351dcf2c22713538dd70af33024c0af0860", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des.pem": "708e7466c2c45ba4681528d62b598a708480eb8fe8b28025e53cf340bd12c55a", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.der": "9172bd5c29dff754d8b2dc094fb402c0db98445f77beb99865513badee29ebd2", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.pem": "7c80e405d73324a7145ce944f1101275ccdaa2d33dc67d5a5c8e0ad53299709a", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.der": "aebdbc8324265dab166be334ff9fa2d4201bfd5c8b70d0907878451ad4d8fdcf", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.pem": "98162c6a985e733250cdb9a717c57560ea48ae804800020b997bb9cc633f81fa", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.der": "fcf617efcdabb117988a32e5ec0291bfca9116212412d0343bfdd077aefd7a65", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.pem": "8653bc8407ef8d9f96b46b1ee6342210234eaf4b5a947acb7807d9f79853a3f5", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.der": "1459b5d3cbce943f56f01d69ee2ad2f40877638be699486c8805e7ccd01cf8fc", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.pem": "2d7a6c0e119bce4a94717956ea740989866046bf318454c5ea501975e2c16094", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des.der": "6cf06096fc2e23a82f4f70a7197efaf8f148e02ad450cc8ac7a9f3dc4334d85b", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des.pem": "d15cba2d636473deca31d86aeecb0197c966f179910b3b86e92736227146752c", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.der": "95bff3dc143382f6c5de5baf2f72e3f41a0da2ef308f613b25312034c3740cab", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.pem": "a14337e04dc979d9a3bf67a7c14376568b158249cfd904b91f863f821d811415", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.der": "2d502dda0c522d92ccb5b946ea29b8733e682cc4298cf4a6eeb5f0edae0e2109", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.pem": "f2c46ab52e1f0d2eea7b99dcce07fef029472bd43444dec83a24da7517616fcb", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.der": "5f9b98613a34b6637f556c963bd6bdcde74bddfabf0a6dac048109f63c0d75ac", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.pem": "df6de7e2ed97fd20b4476d15e849ba8a03449b2baf8984c4660fbc45e2fc3154", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.der": "036c8d1d5a030658232b2ec50f68f97824543bccfe7d7216283ccca076eced8e", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.pem": "948f06fc1775e2ef3ffa518bef5b047801cd0c6ad5515285451704ecd873280b", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des.der": "715566f5d9b2734d7713d563907733bcb6464108d9d3acf2f8cbb7c85de5fa3a", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des.pem": "8d94de2021aea75f8c2be923b10dc2dde5ae20611ac59d11e1a33d020c656ef5", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.der": "d277d326771d241ed17154ad594359c0228cc350863b876a4c6b15ffcafaf97f", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.pem": "65cfceefaf228bcdcd2c4132b27bf14f59bc006dbb00e6cc315340b971f03a10", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.der": "6fabb1625c1548fb83f9b4a0fa4556c4c558a7a361453f1a700c2182fee3d5a3", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.pem": "87a64aef803b3f878b21441d4363bd92d339f67c3cb0018dafd3a1d2d01935b1", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.der": "5f409c99efa3c088f97b01e5db813ef9d87ab2d014a6c2921dfc4b2ef673e0cd", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.pem": "68955f866f9fd9b804d128d862a5180e64903bba63b36184ebcd61215078bee1", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.der": "a51ad7c84591007089e60fdbb05d8cb164a107bbabaac40ee948d9bafe4c7e34", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.pem": "f6bc393737cd3757742966fb7db6912f1e817c2fabdef1f812828c2d5f374387", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des.der": "4b3d847ceb28e1527398013d84b7e7a3ee4fc0225bf6d91ae170f376b4a759a8", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des.pem": "9736c1fd60bdcb63665cb2903a6eec86df2f72c59c82d54eddcc7bb58f4b6e5a", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.der": "066799f295a92258bbf8299612ed784127b66ca64ca112231c6cc7b2397038d3", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.pem": "d905f3b6b08e38c7d303c90648917da59e0bb03ed7fcbb25b9093f8b2cb1ae41", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.der": "2d1c28777ed1b84414d8c17e0be1a667cd46c98e8d10dfa6aead383c503688a0", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.pem": "f1523efc7496c198189d9f37298dda2e410ce28af16281e851d4c39a9ba49668", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.der": "46c062c7390225dbf7a8ed6f2837a8a37e724986b82c1e64490acf49ce783ff3", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.pem": "c899858881141168e0daf871d54e201ce659548fe76efda6cbf8be8c43a75dc5", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.der": "9c5b6f7b10e2a73a7bdff474cda5301a6b04ad4858268d2d37b36e24925e0b94", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.pem": "7380b0697efe46ee612f70660d9465831e38aef10d1264d55b9b615373b1e282", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des.der": "d1397b7bbc76dad97529e3b1c59923a732e19cc3c7caf099149adbb57536d0a2", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des.pem": "0d6a32350b7caf5e179cc7acfa18a1918897494cd617f1de067bc0d250a00f38", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.der": "e83c88036a7d70d2721db82c98d4737dc3cb7fa7550b0afdfd3313e6ba36ea9e", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.pem": "94fed3e23676ac1d14652e6c9c9238fecade01cc1838fc8f2abffe15e53ef160", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.der": "d1a828ac6fd4a259887053f315cea37e9324b789c8c6263cf73df6480cbfacb1", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.pem": "b583d5be7de2d3a854527436ac421da0f10ce1307be213e5eb0c24fcf814a826", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.der": "80186b3273d329fb9b48aa970011c9c6eed4082727b273c5c84561e315c89eb5", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.pem": "ef178d8836c7f8b6d5e24b495d1b2ee842b22eed17f55a51b8186ccd8eab7ef0", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.der": "f39817b0f863684080545ada28a90bc6c59fee310c36f69b083ff53dff1b570a", + "libraries/3rdparty/mbedtls/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.pem": "8778569cfdb0b38397064f2f01a64e0e3168a70f28dacf7a0e43b39714545e58", + "libraries/3rdparty/mbedtls/tests/data_files/secp521r1_prv.der": "d5575481be80df94b1ec0361cdb142239dd3fb04100247d78934d5a66b5083f2", + "libraries/3rdparty/mbedtls/tests/data_files/server1-ms.req.sha256": "eb6640edc8144b2300988f9dad2b5c0b1c6a7d429bbe8bab31aac8a7b5cad62d", + "libraries/3rdparty/mbedtls/tests/data_files/server1-nospace.crt": "a62cb8ce57a683677156ec67e8a6cd95892cac5d67851f29b3b7cce2be39451b", + "libraries/3rdparty/mbedtls/tests/data_files/server1-v1.crt": "b3c2327c7758342520e9cb485d788d0f475373dbad95790aaee5a4eb5126886e", + "libraries/3rdparty/mbedtls/tests/data_files/server1.cert_type.crt": "5fbedc50290f06c2c68b4e9df688670cb43b129b8f1289dc7a6d69160ff34bf0", + "libraries/3rdparty/mbedtls/tests/data_files/server1.cert_type.crt.openssl.v3_ext": "9c3314a4b2070dcf77c74ce90f5dc5928dd4e608900eb24097e1c1647daf5790", + "libraries/3rdparty/mbedtls/tests/data_files/server1.cert_type_noauthid.crt": "d557ca07706519d45aba576e8f2a4d306918b8d7df05c094411d9a38263db7a3", + "libraries/3rdparty/mbedtls/tests/data_files/server1.crt": "65daee0ad2689c420de31254b1a4d2cfb3805523bc8115eca806758c3995b7f1", + "libraries/3rdparty/mbedtls/tests/data_files/server1.crt.der": "672eab1bdf7167c5f00dd4be04137d22af719ebd3d9f58e3af8974e878c7a700", + "libraries/3rdparty/mbedtls/tests/data_files/server1.crt.openssl.v3_ext": "4f2671d996028c6f498feb04696c6634457bdfa89cfe297dd984c5e35955e042", + "libraries/3rdparty/mbedtls/tests/data_files/server1.csr": "1def45bcdca8b2e73533a8e11fbf79e54ebebbe7e2bef2802f3d080f5a7232fd", + "libraries/3rdparty/mbedtls/tests/data_files/server1.der": "fbd74fde74fb949bc221997ce1a557364f02217bb0a21e7ddbb9b3f29b26c491", + "libraries/3rdparty/mbedtls/tests/data_files/server1.ext_ku.crt": "cf7fd376acb30711d50f3c1f6235c93cd290ba2e839d5115ff4c34d9f29c694b", + "libraries/3rdparty/mbedtls/tests/data_files/server1.key": "469e1de4e72db7ddea4f5f56db4974a612da0f403a8a35464e52d53c60fd61bf", + "libraries/3rdparty/mbedtls/tests/data_files/server1.key_usage.crt": "de236ad3db13eb4eaced13d19df87b6b764425c33e832c631b4398b232a5977a", + "libraries/3rdparty/mbedtls/tests/data_files/server1.key_usage.crt.openssl.v3_ext": "82e5e7d5c89136c6e52683b12507fe6009aa293f6cc700bb3ab863db5538b2b9", + "libraries/3rdparty/mbedtls/tests/data_files/server1.key_usage_noauthid.crt": "1bdb38d82ab5621c270cd38b70b60c29020102a7eee4e681888b347e81552623", + "libraries/3rdparty/mbedtls/tests/data_files/server1.noauthid.crt": "69b3d572084b8f571aa6dc1111cd80089216a1b91c150fde8ba6dcb4bf5ab931", + "libraries/3rdparty/mbedtls/tests/data_files/server1.pubkey": "1079e8fd1cbdd5fdb58009c8370aff59fd60e25bf747f96bff48f2efb562489e", + "libraries/3rdparty/mbedtls/tests/data_files/server1.req.cert_type": "164c2ec94c93ee5c14cbe6dd5f801de7564671a982f0d63bfd710e68df1db18e", + "libraries/3rdparty/mbedtls/tests/data_files/server1.req.cert_type_empty": "c6966374ba5e05cbc9c37631d9e0cf4f97bf287f74baa346345257627a1e21a7", + "libraries/3rdparty/mbedtls/tests/data_files/server1.req.key_usage": "b98a58030a1018b879c2e09fb8fb60f1b4c00cafd09127f1c9fe41140214ab26", + "libraries/3rdparty/mbedtls/tests/data_files/server1.req.key_usage_empty": "f570adcdc5fb07fdec4160d7a9e487994b5934ae30f4c9c0ebe36ca0c08182f8", + "libraries/3rdparty/mbedtls/tests/data_files/server1.req.ku-ct": "a1726757d49c144be980a5298af76f9ef3f885818b748f1afe1d0a642deccf62", + "libraries/3rdparty/mbedtls/tests/data_files/server1.req.md4": "c714030bc56714e45b9b8ffaa7538f4c357de2ae6bbea3c4419f65753a8a6300", + "libraries/3rdparty/mbedtls/tests/data_files/server1.req.md5": "be709c92fbed76cc46ae4e2b12ff1b07bde09372debc92108c6202c19a555eed", + "libraries/3rdparty/mbedtls/tests/data_files/server1.req.sha1": "4d8864469be7a1ff0577a864266d16ccbd1a894ea0836f8b634e62385a499b6e", + "libraries/3rdparty/mbedtls/tests/data_files/server1.req.sha224": "f8e0827e76f1c3662b76ba5d9666613eef410227838ce490cacdc56b0d2acb47", + "libraries/3rdparty/mbedtls/tests/data_files/server1.req.sha256": "a567556759ee5eb2d5885c04542b316676263179a7a1a2c86c4264bf32edbcdc", + "libraries/3rdparty/mbedtls/tests/data_files/server1.req.sha384": "a4416ad2b88b5698deec33882b31f40afe34ddaf77779966cbdd59c2ff6f410f", + "libraries/3rdparty/mbedtls/tests/data_files/server1.req.sha512": "c88adc24936119330d1e505789e7d9b35172343343b36785f982ba8219fc73af", + "libraries/3rdparty/mbedtls/tests/data_files/server1.v1.crt": "6517ab0cd96cd21c5013127ba7f259898c3f81aa75b7b6cbfa9f28db1630fc4a", + "libraries/3rdparty/mbedtls/tests/data_files/server10-badsign.crt": "45095f812487f755d770a39b79232c8e89ff7f6a090345f961bd3639ae284ecf", + "libraries/3rdparty/mbedtls/tests/data_files/server10-bs_int3.pem": "922cae9082d65b87c7e1e5f9f54981addc185de960a01a0c61b1047ba7cb7eda", + "libraries/3rdparty/mbedtls/tests/data_files/server10.crt": "9d39025aa8aa0f7148ca6c7ae16fd89a44e4b51621848deee20b54c76d4ad891", + "libraries/3rdparty/mbedtls/tests/data_files/server10.key": "603c53edfff74463bfa4f9e195377224f6980aef4f86c4428a4b119bb440277f", + "libraries/3rdparty/mbedtls/tests/data_files/server10_int3-bs.pem": "5284c74b547da5d8a09a99a8d2a18836ab514c6ab7670dea2eda9ed66b4d5fb7", + "libraries/3rdparty/mbedtls/tests/data_files/server10_int3_int-ca2.crt": "958c6953649d3315a942ef358615ba7a1bc6fc5414f7f1d17b90d889ef05293a", + "libraries/3rdparty/mbedtls/tests/data_files/server10_int3_int-ca2_ca.crt": "9da80f4918ea65e1667953ab1cce6d9191d26062cfdd401309bd8ace9ee1abab", + "libraries/3rdparty/mbedtls/tests/data_files/server10_int3_spurious_int-ca2.crt": "8505ad8872067838ccde5769ad744b1cb5a32f9299f1c34b309c4367788b56e1", + "libraries/3rdparty/mbedtls/tests/data_files/server1_ca.crt": "1b7ef4238b3f2b42e28ac470cbfe3039d77fa2f857b3503b4816cef7d4d57b79", + "libraries/3rdparty/mbedtls/tests/data_files/server1_csr.opensslconf": "58419c7a63d6f55ba0aabb18b6171c07d8a0ebaa0922eb9a709706ef08be2f18", + "libraries/3rdparty/mbedtls/tests/data_files/server1_pathlen_int_max-1.crt": "f115fe091d7615e1953d51767d1b1a4516aed46c419a059534c1def4dbf381a3", + "libraries/3rdparty/mbedtls/tests/data_files/server1_pathlen_int_max.crt": "841a694f5f1860ec2f6fa597fb16d5f0cca451ee8cd9e657e976bed6cf12b2cd", + "libraries/3rdparty/mbedtls/tests/data_files/server2-badsign.crt": "58b06c4846bf41d63dc20575398c53614cf00f5e688ad6d39e1bdacc51394c5c", + "libraries/3rdparty/mbedtls/tests/data_files/server2-sha256.crt": "91ea0c42112d1b04db1a912fd4cfe97f5e3fe19aca98572030463e57e926a12a", + "libraries/3rdparty/mbedtls/tests/data_files/server2-sha256.crt.der": "80cbc316aa58f8be722fd26b3026f077e61c82398599f9f719eade4bcd98173e", + "libraries/3rdparty/mbedtls/tests/data_files/server2-v1-chain.crt": "49e6698e16cf96a54148d9a0c26644d9854690542c2af01eca25ef23b4c8c8e0", + "libraries/3rdparty/mbedtls/tests/data_files/server2-v1.crt": "c906914b53a430b9fc1e91fcb825f6f4d362cdb59e262fb36e63f958a7dd412d", + "libraries/3rdparty/mbedtls/tests/data_files/server2.crt": "fa79509dfeee01f07bae293374f6e85754489a9e2b10411b94b436dd7121e750", + "libraries/3rdparty/mbedtls/tests/data_files/server2.crt.der": "ec410cf1ce5137ad9d36e78606fd8bae6f01afdd7fd461d04bc4a4bd7d82b063", + "libraries/3rdparty/mbedtls/tests/data_files/server2.der": "ec410cf1ce5137ad9d36e78606fd8bae6f01afdd7fd461d04bc4a4bd7d82b063", + "libraries/3rdparty/mbedtls/tests/data_files/server2.key": "5d061d8e92c246e465654ea6eef75b0667cc49cfb8f76d3b4c2f2517861f8b1e", + "libraries/3rdparty/mbedtls/tests/data_files/server2.key.der": "1820853c99779f8e6b847a9ad7fceba765515f1e6ce991a96b7420d0299334fe", + "libraries/3rdparty/mbedtls/tests/data_files/server2.ku-ds.crt": "8310936407cf3431caf33434d46150c64671a6772a7c029b709c454b36bb392a", + "libraries/3rdparty/mbedtls/tests/data_files/server2.ku-ds_ke.crt": "2efab0f798baddbb50dd74494bca3a3caf873b274cfe21ddc8f9e289c5bfdc91", + "libraries/3rdparty/mbedtls/tests/data_files/server2.ku-ka.crt": "37de57e68c4368c507a9fb73e1c63c9d4e2aa37fb768b4dda3ebba00c30f31ad", + "libraries/3rdparty/mbedtls/tests/data_files/server2.ku-ke.crt": "d1e6a649f41bd76c065bfd17197b4ccc01ded1699a4985017c35bf6573a892a4", + "libraries/3rdparty/mbedtls/tests/data_files/server3.crt": "c63b6a289040359e7403a0a93c20438f24839224b50c229f10c704b553d6387e", + "libraries/3rdparty/mbedtls/tests/data_files/server3.key": "2a67c4daedc10b0f4bad16f06a30ab5b9f401a541fb61aa4451e23479bb75d7c", + "libraries/3rdparty/mbedtls/tests/data_files/server4.crt": "00f8a69ef60c9f8d58b4803905dcc90bdfb7b8c08e3afbb5e0c942ff7085d263", + "libraries/3rdparty/mbedtls/tests/data_files/server4.key": "ed155b755deaee3b5b8dcf271b4c82368f6b143ede5a0699d4442214c0be7361", + "libraries/3rdparty/mbedtls/tests/data_files/server5-badsign.crt": "cdb30a275aa4c2e523cdac2e586a6290bd25601e09b2106648dffd651b28fe72", + "libraries/3rdparty/mbedtls/tests/data_files/server5-der0.crt": "e234e102cd8de90e258906d253157aeb7699a3c6df0c4e79e05d01801999dcb5", + "libraries/3rdparty/mbedtls/tests/data_files/server5-der1a.crt": "558f71b5b97986f1a01980d7f048139d2d0fd2644e417c17445651705d6bde43", + "libraries/3rdparty/mbedtls/tests/data_files/server5-der1b.crt": "2d839fed289ed103741b6f167672435908a6a65a0c6fb5d379678c7db7e272ef", + "libraries/3rdparty/mbedtls/tests/data_files/server5-der2.crt": "833a6dabab7e34b432e3cef2571a3592944325ba3c0c8c4999ded1e4d6e1b8da", + "libraries/3rdparty/mbedtls/tests/data_files/server5-der4.crt": "2acb5b3303360adefc566ba49475a8fd4cfee3b210e42dff654aecea892fb46f", + "libraries/3rdparty/mbedtls/tests/data_files/server5-der8.crt": "3c0ad673bba53faa3b0fc08b80f8c544afec08edc108093154b0bc716aaba28e", + "libraries/3rdparty/mbedtls/tests/data_files/server5-der9.crt": "1f85bdc8ebcd356b1721104c28154a3eb25a4fa8a659d7d9e608845a895d3792", + "libraries/3rdparty/mbedtls/tests/data_files/server5-expired.crt": "c74d074aaffbdc1cef6317e75972967108a5c1a01bdff20bf2c1a2b197515310", + "libraries/3rdparty/mbedtls/tests/data_files/server5-future.crt": "da9311feb63e909fdec49a1e0f6b77776e913c4bb12c064efaa1e28274426b1c", + "libraries/3rdparty/mbedtls/tests/data_files/server5-selfsigned.crt": "599f9beeda983e34e4ee133a9b3f4acf2a7d46dbaedf1b09feb2d3e4e50bca8b", + "libraries/3rdparty/mbedtls/tests/data_files/server5-sha1.crt": "011601f71e5332a28e4fc5149ff728dea7f125381a3d3d90d674d0099abdb3f0", + "libraries/3rdparty/mbedtls/tests/data_files/server5-sha224.crt": "372aaaa32a6852f364c0469b98ee71ff0d09ff70d50ace53f8013c3459160672", + "libraries/3rdparty/mbedtls/tests/data_files/server5-sha384.crt": "98143dac0386ec2fa472763c9c91c4395f54150a229fdf60e6d0bd12965f55df", + "libraries/3rdparty/mbedtls/tests/data_files/server5-sha512.crt": "b4c3ab59b7441ac6795009876df225a6472f7058f381d45be6c18bf94b17484c", + "libraries/3rdparty/mbedtls/tests/data_files/server5-ss-expired.crt": "34134401a22e37243d82873772b1e1ab56cba406df1ebbed9410416bf0fafbbb", + "libraries/3rdparty/mbedtls/tests/data_files/server5-ss-forgeca.crt": "4c1bc4f3305b3c115c7426c15b8f8f3a481650619aa91f779ae181c46589d7b4", + "libraries/3rdparty/mbedtls/tests/data_files/server5-tricky-ip-san.crt": "629ec9d2ca7cac0cb01affb7ffc29684060119a01fce81873d302e1b5e69fdb9", + "libraries/3rdparty/mbedtls/tests/data_files/server5.crt": "4dd04599f24f848cb8ffefa86d3f0452cf32b5471755ba569cd78150e8da960d", + "libraries/3rdparty/mbedtls/tests/data_files/server5.crt.der": "e234e102cd8de90e258906d253157aeb7699a3c6df0c4e79e05d01801999dcb5", + "libraries/3rdparty/mbedtls/tests/data_files/server5.eku-cli.crt": "2dfad57fc6830ad24fd5d5515398f58a5f78303130a122cb50c49225f5123ef8", + "libraries/3rdparty/mbedtls/tests/data_files/server5.eku-cs.crt": "b292617d34dc97975a3e598b56ca430c58b599d96cd2b67450cc5b2c79db052d", + "libraries/3rdparty/mbedtls/tests/data_files/server5.eku-cs_any.crt": "9ff857aac63ad4cfc0462e803394f246b506fa8174e3d9331cc169f91b0af99c", + "libraries/3rdparty/mbedtls/tests/data_files/server5.eku-srv.crt": "13701edcd8ae8d9835c7600415630d62fa492e6d89aa3a2552eb81e483ab5b0f", + "libraries/3rdparty/mbedtls/tests/data_files/server5.eku-srv_cli.crt": "2c70618c65d92d0185bb38cc182297e286b4926def85edab3e317d282b075e21", + "libraries/3rdparty/mbedtls/tests/data_files/server5.key": "dc05ad588945ee5771ea24f4970b79e020acfb9c45c6de9d7975b440394f4938", + "libraries/3rdparty/mbedtls/tests/data_files/server5.key.der": "916591fe3a480392ece0f0259cae9cdbc4178acd63863dfb5e8a135e5aa5fed3", + "libraries/3rdparty/mbedtls/tests/data_files/server5.ku-ds.crt": "0ecf0110cb4ffecf3de743a5effa1cbdc26fb3dc9a1bc41746f1eeddfc1712db", + "libraries/3rdparty/mbedtls/tests/data_files/server5.ku-ka.crt": "b8189aab81f627ff45c0d88445a019d7267b0a3b0b44e75a8c7de8e729333034", + "libraries/3rdparty/mbedtls/tests/data_files/server5.ku-ke.crt": "f72f8d5333e73048ee506e1b3c76f6f8cc06158871a409ba93a15788da867171", + "libraries/3rdparty/mbedtls/tests/data_files/server5.req.ku.sha1": "fc5f1a4d33ade85706572ffe9c6d3e3d3084b7f68f82d1a2626b94349b059987", + "libraries/3rdparty/mbedtls/tests/data_files/server5.req.sha1": "4e252af88001daf597ba2bbbe7f5d0f2d0d0d958df49aba6ceb8595406fb536b", + "libraries/3rdparty/mbedtls/tests/data_files/server5.req.sha224": "e89fd34106cd5505befd4a0df08efa72605770d12d9592de71995f0d258929c9", + "libraries/3rdparty/mbedtls/tests/data_files/server5.req.sha256": "3067b803538b7310eceabbe2588d4a3630461b324cfab9e8462cc6e6be7f9ffa", + "libraries/3rdparty/mbedtls/tests/data_files/server5.req.sha384": "3422248ca366da250d91c237b48281ee186dc4ff1ab2865c870346bf41c36601", + "libraries/3rdparty/mbedtls/tests/data_files/server5.req.sha512": "264839b2aec27ccb1f4ed1770c10e4cc8f849f6d1098196e966691b55b9a3e15", + "libraries/3rdparty/mbedtls/tests/data_files/server6-ss-child.crt": "dc7646970447182dff4e8fcf030d649bef0d9eb3300fb0cd3f4909cc6621365e", + "libraries/3rdparty/mbedtls/tests/data_files/server6.crt": "e0f621487e85868e8377a2f41e4cd6fd135ff43c7ad36806c2edb9f1322f3fad", + "libraries/3rdparty/mbedtls/tests/data_files/server6.key": "2c6ba41ff6fa21bd12f3905eae7e39a7c45f26dc35b14e7761342dc50589ea6e", + "libraries/3rdparty/mbedtls/tests/data_files/server7-badsign.crt": "da4e459260611030752aa4edc491e3522d431566183fda7a14adcb1df1bb5f07", + "libraries/3rdparty/mbedtls/tests/data_files/server7-expired.crt": "c89a494df24636a1a78e74c1ba95cbb4bd15e7995b12a443565c7c4c0df22d5b", + "libraries/3rdparty/mbedtls/tests/data_files/server7-future.crt": "4e7c3c756e04e1b125920b9d1ac768205080e329b68e865861af0bcba59fd4bf", + "libraries/3rdparty/mbedtls/tests/data_files/server7.crt": "16a50e25755765652cb577f39fd20b90c48cb1ffef614826d97c16a9bb9834d5", + "libraries/3rdparty/mbedtls/tests/data_files/server7.key": "603c53edfff74463bfa4f9e195377224f6980aef4f86c4428a4b119bb440277f", + "libraries/3rdparty/mbedtls/tests/data_files/server7_all_space.crt": "9176e45bdbc71a9e3305d4aa723bfd577109732294894fe474d581daf9a9978d", + "libraries/3rdparty/mbedtls/tests/data_files/server7_int-ca-exp.crt": "88be293184fe59904bd35049c82c5cdcccc3ea49c3d8067a5908ceb52d1808ea", + "libraries/3rdparty/mbedtls/tests/data_files/server7_int-ca.crt": "ced5f0929905dd533928c1ca10c725e230e265b099a737c6dc108b5cd4efc272", + "libraries/3rdparty/mbedtls/tests/data_files/server7_int-ca_ca2.crt": "5550b67bd40ece1b08e197e32905fbec81ba858e1490af374684636db0eef6a2", + "libraries/3rdparty/mbedtls/tests/data_files/server7_pem_space.crt": "5b9a16ae6767cbc8f9aca55bc1c47f9146c10f8d6a1b602526cf93a40c0058a2", + "libraries/3rdparty/mbedtls/tests/data_files/server7_spurious_int-ca.crt": "8f1c815e02fe3a53f6b460271cb9562858e5cf6013d155c939974ca852974720", + "libraries/3rdparty/mbedtls/tests/data_files/server7_trailing_space.crt": "b82ed11055d227c7bc0a0714312279879ca63230eb3f1fd8117dca9c90d3cd69", + "libraries/3rdparty/mbedtls/tests/data_files/server8.crt": "3b86f7b1212e67691abba3aab02b69b91e2061e92c1c88df6d6404b6dd748ba3", + "libraries/3rdparty/mbedtls/tests/data_files/server8.key": "e8dfd0a91df11fc13499c9a63ab457861283667c44682c2ed10329b0e406c460", + "libraries/3rdparty/mbedtls/tests/data_files/server8_int-ca2.crt": "737c208b5a67aa359c7e87834847974ca6aee747a70f5ea1b41a78689865c08f", + "libraries/3rdparty/mbedtls/tests/data_files/server9-bad-mgfhash.crt": "b943fb9e78c9ca61cbc69b2f00498916594612d998e407def1245e82fa1a7b11", + "libraries/3rdparty/mbedtls/tests/data_files/server9-bad-saltlen.crt": "7f96c87d95cc483303109653f2f678ed9a20afef6eb2e20dc8e06d35294b4ca6", + "libraries/3rdparty/mbedtls/tests/data_files/server9-badsign.crt": "b03ad81eb75230a5d415ba3294306bed0e5ee9c0752f4fe50a547cf579f92a65", + "libraries/3rdparty/mbedtls/tests/data_files/server9-defaults.crt": "10d1418f03ec088cd9dd0eda38613f1b8aec31fc1789a98784e827311a6217d7", + "libraries/3rdparty/mbedtls/tests/data_files/server9-sha224.crt": "1cb614d26ea2c106ddc50a63d25464b5f731105e1c038107ffa1a8d0113c1ffa", + "libraries/3rdparty/mbedtls/tests/data_files/server9-sha256.crt": "1d479c40bdd65a551bf29ddd30d681e04ea55467e7c39cc762767b64ebd9dfce", + "libraries/3rdparty/mbedtls/tests/data_files/server9-sha384.crt": "2e22374c8a68ebbbe5df9abb61cf3b57ced80f600bbc51b1480b4f46a6fc22c9", + "libraries/3rdparty/mbedtls/tests/data_files/server9-sha512.crt": "9500e7d5a18f802c0ac070ae5a0be82e84c33b54f27ff096cc18174952157044", + "libraries/3rdparty/mbedtls/tests/data_files/server9-with-ca.crt": "6668d0e32f88b35ed05646b35aa04a56afb5121528e1cac22b01641bf253e192", + "libraries/3rdparty/mbedtls/tests/data_files/server9.crt": "8d3a4319e7c4009461ff3a1fb013bef98872d05c714651e04d470220d9f1268e", + "libraries/3rdparty/mbedtls/tests/data_files/server9.key": "41227afd38ca676c904ae59589943b5f57576e72b72c98d8f503f57c8ce70552", + "libraries/3rdparty/mbedtls/tests/data_files/server9.req.sha1": "0711bf87fa40e92fe655f4ca17a11b712e2f31da7b7ad4b4745114db520fecd7", + "libraries/3rdparty/mbedtls/tests/data_files/server9.req.sha224": "6adc1a5b3460980248f4a0291456c61e9045a07458c3aabeee6487dc2740a19b", + "libraries/3rdparty/mbedtls/tests/data_files/server9.req.sha256": "e46e01e6fa8ce9c758b1138286ee6b766d0332283fcaf69395aa606c96ba64f2", + "libraries/3rdparty/mbedtls/tests/data_files/server9.req.sha384": "b767dd39d999e3f07325521e7b0b0a5024e9b69fc0dac6bb1840dc302223f06a", + "libraries/3rdparty/mbedtls/tests/data_files/server9.req.sha512": "1a94e92f3d6a284f1c5a7ff48c31b496a85c0867eda5e5111ed6df150515afce", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca-alt-good.crt": "409b7203b6d92795221b303e79bc734894edb065987d57583da537da03732141", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca-alt.crt": "f788c9127699eb9430855561870d6392e5d6c7906e5e8cb6c216b8bf82501442", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca-alt.csr": "a4e161b4492641d2cbbb83254640e244ff0f47b4aabe175f96a8605d1012bf2c", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca-alt.key": "f3a266be97499730ffc421332f58ccd4819993a882a30e55519927cb25c4488c", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca-good-alt.crt": "7e3b5d9ef012b53937f4035023b6edbf308452ec0c064fa8aaf1df46076e4ad2", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca-sha1.crt": "b9b77eabdfa7a0d01e7949778e4c2852f387e4cdc163420c3967d46fac6aeb94", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca-sha1.crt.der": "d2d3e6d9d8f19ad1511dfbcf3847217c5a3f3b42837d1eadfe75485fca944fce", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca-sha256.crt": "e103df1a2629fab1f0811f7ac64f03900a697e8e7a84dd69deaeed18d74340b4", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca-sha256.crt.der": "1ccfd719021988e76a7f5f5425b802302f910dc5a19045ee4096ab7c5e7ff633", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca-v1.crt": "c20e614640b774846bf8362715f8bee134d330c6ef17278386d265fd02c7c895", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca.crt": "b9b77eabdfa7a0d01e7949778e4c2852f387e4cdc163420c3967d46fac6aeb94", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca.crt.der": "a34cc17e86a8ea89113cd1b193adc2ba80559a8158bdf52c7186ebda8cbaf3c8", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca.der": "d2d3e6d9d8f19ad1511dfbcf3847217c5a3f3b42837d1eadfe75485fca944fce", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca.key": "ea70a2d032b80892abf2fee8676258701fe47a78c31e379fc73542925a783f06", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca.key.der": "77ffe88a785127deb761570bf12fe72fb52bb791e9e4fd5a821b92737d814ee5", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca.opensslconf": "00e1ca126a65a76d040ee79ec865b37316010c6a777c6d39b1f4630a42f15c3e", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca.server1.db": "486b555d2ce9c6d70ccb875c08c87a5fd4bf3dd8d0a268a662715b71db03553d", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca.server1.future-crl.db": "edf89dc30010a965cdf2e80eec29bfaeece5f878c16e4874e9f786f70c0a8864", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca.server1.future-crl.opensslconf": "a4a23cc77fe57f28fe36d4cc613c9d8ab267677f108ec2a70850971627a063b5", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca.server1.opensslconf": "4c84429c44ca052fa17128e689edcdb73072c37ec683fb9d305d60b5c3c10ac1", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca2-expired.crt": "84a47b1a228e8195e7880bda80e41e5f5e56a138f63b6f385c16b4438cbadbdd", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca2.crt": "e75fcd2da099aae03c1f6f5b6e96e3a3b635dea7303a7271803b4ca2f263e9da", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca2.crt.der": "529e5ae24dfcb7f56e6388d6c4be7f9db2e4282c475f622493b1ac777dae0760", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca2.key": "72769bdc9f54e0f2c4a8856bcc4545fcc769ccd77d26f7e35fb3f64419a7df35", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca2.key.der": "d6a5d0b3c94857d0a42032fc9ccc3dc8056403d6c893298f99541972238986f8", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca2.key.enc": "18b93a1c675861bef54a47c044d4431133b5e92c54e433e1d114fbc43871ef08", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca2.ku-crl.crt": "0058d9988640708360c03342a06868b9f0111ee5c8d31bde3f6c163208918042", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca2.ku-crt.crt": "5d529c056aea0bc219f0ea9b7c0deced33571dc0b7939c86b995134f3db19b52", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca2.ku-crt_crl.crt": "2b63ebb849edfd60f449bdf8e334341f2db337f9a8b7cfe21912e01aa4ca05be", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca2.ku-ds.crt": "4a98027dd3b7fbbd5b593a5fdf44e8aaeb476fe4078ca789015965f26b91f710", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca2_cat-future-invalid.crt": "0c61f7c05dc549c8007140d2329488d49966145a023fd19969675eff7df13a5b", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca2_cat-future-present.crt": "83e58e6f98aa25dea60db91ff4c5973cf01fa14f282fb66e11e725cebba456f5", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca2_cat-past-invalid.crt": "f65a2b4cb1c4fceaf26afa3177de2bd21bfc5ab075566f1ea13e81889539bec8", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca2_cat-past-present.crt": "8edfcb79e78122a953bebf1dfa78c69798d0fabd7835cb499fc12b9eb7edb839", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca2_cat-present-future.crt": "b39592be0ea2f71b8a36f197001cef05ecf9455e0f3a85abe1267ecb37b00290", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca2_cat-present-past.crt": "40ed90361d82c9dd008b5eb7dfc909c6a3bb9d42c86833e41a582d4ee12fec35", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca_cat12.crt": "ce16edacc0ff4c43d20005b8c31590a487dcb6bc725be87f83a14fa431f47025", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca_cat21.crt": "a52cbc806866c3f738c8bceed914877b1527c2f006727d7953f7960a367e9454", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca_printable.crt": "5aab65196cafdd30de7d537d9d6b99d98afa0d3492bef1c4f1f166dfbc3ac029", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca_uppercase.crt": "9df5f9ea50c0199e3e138ad4dbfb6f06c0867347a2c1f64230806455f073aa68", + "libraries/3rdparty/mbedtls/tests/data_files/test-ca_utf8.crt": "dc8b6956c671569dae6923c19cf743868fff67ad61f81d3eebdb73e4b40f5ba1", + "libraries/3rdparty/mbedtls/tests/data_files/test-int-ca-exp.crt": "a589337c4557cf2b2363df7a6af92cfa942b4ea00b7a17ea549e21159052fbe5", + "libraries/3rdparty/mbedtls/tests/data_files/test-int-ca.crt": "0c4225974cf3819eea282d0352387629070479b0d7182f4407920984e82b895d", + "libraries/3rdparty/mbedtls/tests/data_files/test-int-ca.key": "c9ce39dd7a23fbf4f10368519fa23bd4a34f32d6015dde5c4042ba477410133a", + "libraries/3rdparty/mbedtls/tests/data_files/test-int-ca2.crt": "62a6a1e32f2d1d25d9757acdaa1c24694ad257f23becb5c2e628e52aa26d4312", + "libraries/3rdparty/mbedtls/tests/data_files/test-int-ca2.key": "97ae364e686400105ed7ce07168ba7d64b7797e27b577ce6e1952e01f3ebcb0d", + "libraries/3rdparty/mbedtls/tests/data_files/test-int-ca3-badsign.crt": "e76023d311aab1e0882e36764789f1dc6f007d0220fc455fb282e96c46744997", + "libraries/3rdparty/mbedtls/tests/data_files/test-int-ca3.crt": "75575083759249bcfa4fd2a562b72b2503c0be2bd7dc1df22f9cee9d2bfd8ad5", + "libraries/3rdparty/mbedtls/tests/data_files/test-int-ca3.key": "8f54c3d71e1669ec7f3f2a1fa835a96b215ff69fae9a7e7081780569ba8e10a9", + "libraries/3rdparty/mbedtls/tests/git-scripts/README.md": "5cb58f97bbf4d2600ebcfd9fe31d7db5f85f346fcaad052f36a09bc3d31000de", + "libraries/3rdparty/mbedtls/tests/git-scripts/pre-commit.sh": "f23674694149984f480e253528d208f192f7f4459472f8ae11ef0f0ac753b06c", + "libraries/3rdparty/mbedtls/tests/git-scripts/pre-push.sh": "13958629764dbd9ae9ac2c02f50c1f9e135b6c3f273ca90c74025c9efdb65389", + "libraries/3rdparty/mbedtls/tests/scripts/all.sh": "071a164010e99f1fd94894071f89680c33082d82afafeb21b5042aa78e5108a1", + "libraries/3rdparty/mbedtls/tests/scripts/basic-build-test.sh": "f948f4c0a39e6542880a9a16f1b9140545475224a2ec792058fc82749c235411", + "libraries/3rdparty/mbedtls/tests/scripts/check-doxy-blocks.pl": "c4748b2bde10d25554a0cbc0fa255d2b46a7dc9846b9ead54cd1e6c4bf2a09aa", + "libraries/3rdparty/mbedtls/tests/scripts/check-generated-files.sh": "e6c811fd663403a6aa9067def43f6f3a5335999a14fd4991bd2b3c891c3e66e1", + "libraries/3rdparty/mbedtls/tests/scripts/check-names.sh": "4298cf33adf30b25e022a213a279aaa5cb74d25da7be3660c89e02c91658c217", + "libraries/3rdparty/mbedtls/tests/scripts/check-python-files.sh": "f6e4aff8d6441fb67671a2578ab6f1d5ce14f404fc094f0233e82220ca467ec6", + "libraries/3rdparty/mbedtls/tests/scripts/check_files.py": "2b1057d5942e9642cb51cdc768f886d26a1670d8d3cd8c936b52f98dfd4e497e", + "libraries/3rdparty/mbedtls/tests/scripts/curves.pl": "4ea7fe6fbaa6ce45b6d57df5f2b308457b1f534e75d5d85c89fa8ae2a0770e52", + "libraries/3rdparty/mbedtls/tests/scripts/depends-hashes.pl": "f70f078e9bbe7deee7fe21b9852137ede88757765b7e01ec683a949fa7a9d6ab", + "libraries/3rdparty/mbedtls/tests/scripts/depends-pkalgs.pl": "f0683ac4044eb07846cc34c321a48fbdbf3e379666c1d7730575fe8867a32c03", + "libraries/3rdparty/mbedtls/tests/scripts/doxygen.sh": "338d23b928bb53b59004360e8b9e7c78fadf1fca23e4a76346ad8dff99f1f1c0", + "libraries/3rdparty/mbedtls/tests/scripts/gen_ctr_drbg.pl": "903d8741d2ee28840ea72eafd428a9c7676efe52ff96e1643f85714a7a353c08", + "libraries/3rdparty/mbedtls/tests/scripts/gen_gcm_decrypt.pl": "8f9e3dae4a67e4d58f86d31c19f3a0826f97c35893aa61a40acc173d19f760ac", + "libraries/3rdparty/mbedtls/tests/scripts/gen_gcm_encrypt.pl": "2287646833c199f3bb873e8737d82f9e270826401c15bc346e6804ea100401fa", + "libraries/3rdparty/mbedtls/tests/scripts/gen_pkcs1_v21_sign_verify.pl": "3605d8b88c1efaf4242a63400d6e0cebed207028d455e3d18d29e94bf3da7ab0", + "libraries/3rdparty/mbedtls/tests/scripts/generate-afl-tests.sh": "ed67c9051896567d42a343a412e4b1be6e644d5174cee0c6fa0ae73ba232db15", + "libraries/3rdparty/mbedtls/tests/scripts/generate_test_code.py": "e024916298f748d4df2f11b00aa8fe3678769b51d37618636d96e092f7e363d5", + "libraries/3rdparty/mbedtls/tests/scripts/key-exchanges.pl": "36daa81f400913d98a25da9fe672ee9db85569c6e1b35de98e9d89950f711c8e", + "libraries/3rdparty/mbedtls/tests/scripts/list-enum-consts.pl": "de80aa6219ad68e81dd36c23d77a06ea28396238e05cb0a8a4b9160109d4202d", + "libraries/3rdparty/mbedtls/tests/scripts/list-identifiers.sh": "b820d00a5c939c6d4bbbd808833fb443a0239abd4e1baffd6e0c878276b8acbc", + "libraries/3rdparty/mbedtls/tests/scripts/list-macros.sh": "ff23c7e511cc2e64a68d6bb7a37b02d2aca869fa547502866e4412489bd929a0", + "libraries/3rdparty/mbedtls/tests/scripts/list-symbols.sh": "641d6e6413ed422785b8f52e49f53f5fb3939569152bdaaaacdebad8fa67d0c9", + "libraries/3rdparty/mbedtls/tests/scripts/mbedtls_test.py": "5df6c85e0620fea1d0d6c87c15e46dcf58b8fef9904ccb0f4838d9c86da6038d", + "libraries/3rdparty/mbedtls/tests/scripts/recursion.pl": "b7024fc95493f9ebce6cf2cd017c8756a7da0566fcc23a46425fc88f7e9528cb", + "libraries/3rdparty/mbedtls/tests/scripts/run-test-suites.pl": "12bcb8320609a55ea8942480ef7e9e73b5a640eda594547c751c85c0fe6d208f", + "libraries/3rdparty/mbedtls/tests/scripts/tcp_client.pl": "2b03f0835a0aafbd6d50f1014f9ff57fba53c538590081b52ece9e52cf78544b", + "libraries/3rdparty/mbedtls/tests/scripts/test-ref-configs.pl": "1c8e34ab3666901668cbb89f5d5be876cebbee6e5aee2f7d57dc08c2333ed64f", + "libraries/3rdparty/mbedtls/tests/scripts/test_generate_test_code.py": "0d8b6ff7553eba6b17c1085a30e8b6a376388e7091541feca5c48ea10144096c", + "libraries/3rdparty/mbedtls/tests/scripts/test_zeroize.gdb": "517e0ee83bd5a2cf1fe848d7d7d0284e47f4719cc468688deac2a6cac91e6b3f", + "libraries/3rdparty/mbedtls/tests/scripts/travis-log-failure.sh": "9e9bd2f57c0ce56393060559ea70ec3b16465a6af0eb152aefac8f226830bc51", + "libraries/3rdparty/mbedtls/tests/ssl-opt.sh": "ca3e4e1c05cc3621cb16c00a0b6ac198f6e079db3beb5c011e017caef6d949dd", + "libraries/3rdparty/mbedtls/tests/suites/helpers.function": "9d8ea2040ba123bfaf8e5c63b3462d905c3bfc33172174a5033c2ba793ca291b", + "libraries/3rdparty/mbedtls/tests/suites/host_test.function": "a033ae4aa02551ce619af1ed070e32b37e13bfc99e5d9ef9476e96f977ea790b", + "libraries/3rdparty/mbedtls/tests/suites/main_test.function": "4af28424403a3a1e0b2fc7f1cf51e8c015658b87296d2adcde863178a70dc4a3", + "libraries/3rdparty/mbedtls/tests/suites/target_test.function": "ef13abb504d8c88266c0d453a3f918daf2a275bf523d1258c5f2cefdc51b96fa", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_aes.cbc.data": "48b7bd70a700c75132cfe1b67fcc93e0d27c7da5cc16903ab67036c58d7d72a3", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_aes.cfb.data": "446c03b719b839834d92996a3dc3d85c0909b079fd7fc48eab1a74ea025de5bb", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_aes.ecb.data": "790180492878f22a4741e57bd4a397d6ab0130c420b4433a3dc53ba8c62d99e2", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_aes.function": "814609d814566e6b67112d3ff3103932366113fb390bc81f3933a28368b26763", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_aes.ofb.data": "5a1aa338d7dd051378c7d44074b29bc1c709d373b89dc856d3d7a345feff2830", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_aes.rest.data": "8886e8458eadf180667a0f46b0b1d4f420ee4b7bf6065420bc5da0d10dca8aba", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_aes.xts.data": "7b0275e8c85574740cd7e8e343ac39933a4220567a6a4fd601ad92906104a5cb", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_arc4.data": "578845eae4e63591029996b54e83aee7ac3212813ea3ed2e3dd095682f074ed9", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_arc4.function": "6d51696599caed1e3d3959c7b4dbe0f571f944a80d2dbacbe63c70e7906d1898", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_aria.data": "07824eaf3ee8b8f61a3df6d45b38210b0a8219ece1eb46094e600abc2fcfef71", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_aria.function": "898e11e4f5b0530d2e2c7e4acbbcf6a25ad59734e3f7c5839c11cd1d92f6736c", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_asn1write.data": "b11c47017d072c185357e1359403fabedb32c0727be8ee3d96b5b0602fd04c25", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_asn1write.function": "ee6eeff25f9410382cad38e6eeaeaa5eff90f9136e1bdebb1afa360c6b4fde97", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_base64.data": "871b00c72061ca46f850be9b9df546c18b69e5c18e4eb7b6183bc63723998bd4", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_base64.function": "e7f0fd3148a3cb82e0fed0bd91113a42cd2200fb816fe79e5d719ef3eb9388c8", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_blowfish.data": "6610609da22905fccfc33ceed0dd7621cdf692f95a9b5d1ba7608eecec4a28eb", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_blowfish.function": "8a59bed4711b3820f725210b6e8b0a0061c1c7bb2c49d9c2aef37da969a89a47", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_camellia.data": "3d38d77a108a94bbfa676f471d02cf99d05fb56b735a3470b28bbdf434bbeba5", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_camellia.function": "371c06424aa04b098667611fbcab3a8f177f7e11ae7cd5245fef3fa84bb4a466", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_ccm.data": "4cb0c0a5071230f38627bd90fb2002508449d178854ca227c59118d6d205ea62", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_ccm.function": "f8128164e537a07c5c4013c2d7a2b3e21a77b9b5cdf100c45e19a34690741209", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_chacha20.data": "8163769ce72adeea70077290eb57d3cb5b0ca20a8998c67b692588850b827099", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_chacha20.function": "7595481d6a34b66791357923dfe0981f552cff27ab2b4385efc1ecc91de15c67", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_chachapoly.data": "c6099c13799bec5a7a802c9ac405b020aca50c4e98d6e8fa3c3b68d8120fcac5", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_chachapoly.function": "6659143a685668d432415c0803cbe9cf27030024fadaea1af5b81b16bd87579b", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_cipher.aes.data": "7b6631fd7727a53a6f3c264a1fcdbf99e62551b1a9f36cd68ee10b15eaa889c6", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_cipher.arc4.data": "80d8a4a33618ff66ec39cc9a73c02021142d4efa444d8c9f86b8223e198d238c", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_cipher.blowfish.data": "04a5fef9e21db1c64e8436028d2ec2db5bc46d9e2fb3dbac9416287b40d200a6", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_cipher.camellia.data": "314abe489a8bb4b944e158dc3c730b63d52078c8c9db2b974dfaec818f7584fa", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_cipher.ccm.data": "cde33abc7ae2aab86b3a08cfa1b2e96f306f01d276b9ad2df879b7dc992bd3ca", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_cipher.chacha20.data": "6e31de18006c045b6718b2b40911036fbda16f2d1e62f21c986aeebbac5194ed", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_cipher.chachapoly.data": "24688dd7cc2ff0c16bd22dd07124c1b7ecbba3e9509cb91eb566644351dbfde1", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_cipher.des.data": "06a94dcd718688eb443999f3374e4da1f00150ea64aad5ad8c2179b26249161f", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_cipher.function": "bd5fe38e886e705b6ffc0abf3ef479f6d94497a68a82022becac44131d0401c5", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_cipher.gcm.data": "32da5ca9431f8f98f47d3dc48cff64863dd85e8858637fdfe14ec58d611c395f", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_cipher.misc.data": "68bc609d5bfba474629274cad78555a198233100c045a828bb44f764a8902594", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_cipher.null.data": "426b27e3a22860b47c05c919749b80d08934160da3dc51867f293718292d5b7d", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_cipher.padding.data": "c1f9824657b118e8e797db09b3f7833eb1444b82a287e0d4b9f22a99d79ed776", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_cmac.data": "947b56d2b8ab4e11faa5248f764634173e4ea02f1a9b2d2b10a957d7e38c9ce0", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_cmac.function": "c6629890da1216133a6baf3d14b4d4f72082e156fb41f047d0bf99c066a26239", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_ctr_drbg.data": "76d866177700768f84ee5f5fd2e844834137205ca7d51d788b5bdb6f42ce35f5", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_ctr_drbg.function": "e1e6998d762340945f60a772e213743ec283b4588254e166160844ae172ce57e", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_debug.data": "d2203e242b911715b3a13c9ff60f09a52aeb8947d5d012962262c041fd0f426a", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_debug.function": "18f43709e2a31b7e871cd1de2d4914a47be901f684627e60b47fce6e14f249e9", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_des.data": "99b98d62dd402a10916164d05b963d868b27fc4e61c324f3d183a6e95a6c6ee2", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_des.function": "471881a2baf2de59882234adb3fe0c3f089a43b71802bf7f89f3fc6ec50d778c", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_dhm.data": "9028eefe36def9c04484c4e8ac1f58b5e5dec97505d8e497162ca2d3447c3680", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_dhm.function": "e2de1a546db80b8690aaeb9e5dbd389961464aa1d3021e9eb847763876468ee9", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_ecdh.data": "d57d20ae4d9ac83eeaa79056b0d19fcc1cedb9eccb0c752bf69cb9ee132fa932", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_ecdh.function": "e823742ad8764e178f68c38bc246c9ff07d798b83191a77a4066fd6a99b4b299", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_ecdsa.data": "999f237e9c80dedf3ab1857a6091ebc4ca7590ade23284e047e11d7900cc4469", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_ecdsa.function": "825ca556f1c278cbfe8fd14d61da2ef1394becd0831f0630ca0a8ad3fd42f9fd", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_ecjpake.data": "75c1f08c6f47401c222ea7dbe5ecefe738fbcde941f2322ebdbc7dc764bbac42", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_ecjpake.function": "541c3ae8847f680443ca7a3900ea188b26b3698d8c99fa0a63d7cfa21bf5a050", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_ecp.data": "d9f2b23fee390e4c5f3305f793e51e6994b155b22be9fa34808525c06a56f327", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_ecp.function": "8e643a6cb9e2e6f004ce10fbbfcae7be257ce2b56fb06ac888cdc9f326708cd4", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_entropy.data": "744ba90615f31418d5f450a61dffe38dcceee80222db9a1db7b789e199fa244f", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_entropy.function": "166f24440b92410c0ff58440e4ee172ae03adce2be711aded189f7dbc7fb328d", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_error.data": "52dcf2be05c9a615b859e0328cfc142b109bebdf5de499ee167f41bd02885cd4", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_error.function": "36e0e8637fc05a1a5efc1ad227e042e4e95d2ea1141b5739ebd97016e45e8ee1", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_gcm.aes128_de.data": "1efc1051eb12466eb65428af634140e9a41ac5acf5ec4cc3b5b8ae0e3589e300", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_gcm.aes128_en.data": "2dc4d3ce56e613e6169d481a9b26fffddb1b763ec9fba78f446300e658b5294e", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_gcm.aes192_de.data": "5cbdead079fc4c269ef4322623179b2e60ddfb1b4390cabf5a43576fb614792b", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_gcm.aes192_en.data": "3877cc2a6f10824214508427d824493ac6b8df3ef26143bf2ad95356f49df46b", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_gcm.aes256_de.data": "b581d09e17f5db4914a8678b41ca3611e9c887358a0d8b0b3cd11df1167591a8", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_gcm.aes256_en.data": "fce4bf28915e0c3009b0b4b74da0155b6c2e2cd7aa16b1087bffadcc3e33981e", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_gcm.camellia.data": "4aba96c85717d9e7504f4664b55f47bf8703d5066518d76946f70a6ab3831afa", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_gcm.function": "9fe71a7f00bd7110beaebf3d5c0380d70c40a9ca353bc38eb79956e7473017d4", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_gcm.misc.data": "0b41ffc8013b88064041ec52ee71b346a1f596797d325be23fe88ad6cde6ae0a", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_hkdf.data": "3670baeb5ba65736d7bc42e010c9a58743f6088a5b5c792a10dc1636e5e613c1", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_hkdf.function": "d473ce6532e44d37a45cad36d0f1b071bd9e8eb526740b3fa367eb86496a8a87", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_hmac_drbg.function": "53fb9dc095657edeef3be66e5e1862258f267c99a7a0d340119f65d43f09e0b8", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_hmac_drbg.misc.data": "fb7d852effb65f797c59f9f169cd54226389bb0ebd8836e969b095b4a2ca40f6", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_hmac_drbg.no_reseed.data": "f87612071538230adf2cb2eadbd169032c870c86d7ad321287947da4b0cbfd3a", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_hmac_drbg.nopr.data": "ea197b2bea57bd7715ae41212c2c09904c3d6a95ff150e64a8d93ec5a2db7866", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_hmac_drbg.pr.data": "d23eb1828c7db2a2fe39790bfbf04198c215822280bc3708c186769cb6a65e83", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_md.data": "c54e26c6922d0730e2e7096c3575c0b2001999932b2e0edf6c53ae4d81e32e01", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_md.function": "21b374bece408f3ca6f6202fb9a480dd06279e11101648827abd9908cf9c0033", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_mdx.data": "dfe8fea65aa67aee073e4475ed847be8793b72878bf68ebcd3107cf74de162d0", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_mdx.function": "97f071e3024351a1a440b9699c8618b2c0d74b3e3d8275b32ff052d884b296ac", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_memory_buffer_alloc.data": "c03d0445d0d702b8bdc178e67b14479b09e7ddbf89884e64d3b557ed9f08e770", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_memory_buffer_alloc.function": "3b23941d18171c2a0d2ad8d0baafdd4616df7f05ec102d6cd2f9463cd327d7c9", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_mpi.data": "825de92647ae59dc2813896dd2386c0cb4b29ff1725736ee04c465be0578665f", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_mpi.function": "2f9f034e65fae011818ca834655b52fb7494c4e480ad3778b338ffa74b8062ee", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_nist_kw.data": "c6ca21ade49eeb1577efd2c0e97f13a150bdeac7fe7c078cac869dc3eac324c3", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_nist_kw.function": "778b0257d8dba1a0b3e23d8c1cd2af8c0f27241f90c927b0a979c21a4baa57cf", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_pem.data": "68aabb6911a63e45181ac774cfd0b3830874f4122ae26dedc1b7ae58860a597c", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_pem.function": "a4f8e7937f721c6987672c451b853891dbd1e1a7916a5ba9d8289be920c38b12", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_pk.data": "4bf2ee81b7786e7a0cfa0f2458c309cae4e57359be8f2762a6a285bee630412e", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_pk.function": "d737a0b4314c3f0b827949088d632a46c206ec9961b924ba42cfe521aba60643", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_pkcs1_v15.data": "0567ec6c611cb0fce56b5de4d872070fd83c4d0a69f7c6c8ae1379b59bbbbcd6", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_pkcs1_v15.function": "018ae0c21a5bd71403109f327a53db3c65e3b510074615299af0366a94f74b31", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_pkcs1_v21.data": "b744ee7b5a9ee3aaff33beba47966c481a3e04a13a141e0597918d41aba2e65b", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_pkcs1_v21.function": "742e6aec71efff5d1e7dc959ec2c99b9ce6982684c9fb236fcd8dd433fd4c503", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_pkcs5.data": "e07bfc8f3a1d4b64d7ec48817271a9e8efb15fc7afd38fc2d113e3cca6ff2324", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_pkcs5.function": "b270e4910766fef26639d55a46bacebf835f81722d1aebb87e0e96896522d314", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_pkparse.data": "724b70c9cb88ae8a0340de7bd0fce0a375d1110fcc55a8f91c34b5ce6c01eec1", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_pkparse.function": "2923568d57d5b9035c07d35b2680f33995f0bb680d95e4bf051c15d99481df87", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_pkwrite.data": "f8a8298c71f150c92cbb03e1d4f1d3e44f9250830254ae9d53ea60190ca7c00a", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_pkwrite.function": "8173093c4a9304683c04b153a1a859b6864617990d5993cc0a6a89e4d1442b82", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_poly1305.data": "8400f29de180cb267c3d859751a5fcacb7229ad74d01f4f3510b816c31cbe28e", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_poly1305.function": "1d11c12b107ff5a5fedc17f884319ed2448dfd7653c1a75539b501557004e20a", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_rsa.data": "0dab4e56d6a60853b51ffa68f3877ff837158540af482653552142628566141d", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_rsa.function": "9d9de755301c97415442bc4c04eb6f218afbb0c7ae3bb823787da7d357350989", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_shax.data": "3cb81f31f418afbb599ba2a4ebba448118258529b54dad4efc4ada9a572f4071", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_shax.function": "42bf445bb76dc2a4d670ada1c6f596f9af021ac91cdb289013098eb8aa7e7b6e", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_ssl.data": "b1efce35b0a401eea4efa281a45adde4990cbc7842115e45764b04634fc23b80", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_ssl.function": "e2cf91110ab2c874f92145f930fd14cf6e2b85012f9b2f842698214eba989fcb", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_timing.data": "993181c28e523e656551f6609a01e84147eb38860acb9390f0a6e3335043652b", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_timing.function": "0b011ca1d13031e56211afb7dfb55ea4e8a1f9a0e46797dbe47dc12b9426b4d5", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_version.data": "d0a5d0fa4b0ab50162d7b59c6f54fc4957be0826653320a02bf0c82612c42ffd", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_version.function": "8b98758e5787c5f515673b17aad2f472b9068b6763ac9aadd8e0bf834c327f78", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_x509parse.data": "5ab86242589441ab2c39fe18b20b0fb0154d83820312dd9cf8d70466c4e8786e", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_x509parse.function": "1eac39f6b7be1f527fc4fea4cdb92bd4d67a3141311ea766a43ea276a32f7d43", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_x509write.data": "e60de9c4eae061cf290becd9d18b41fdd481eff89ce881eb0e3b7a8609568390", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_x509write.function": "f3b3fbcd616ea3e236d2f9356898a28c7cd5cbbf39744b9c8ceda1965e8c5be5", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_xtea.data": "017f8dd2c0679813a57da016c74cb64885e30b8e77407a2943404fad7088f8b9", + "libraries/3rdparty/mbedtls/tests/suites/test_suite_xtea.function": "f66b9841ed246d5eb49127bdbd987c872bdce3528a11898a5910015f908e856c", + "libraries/3rdparty/mbedtls/visualc/VS2010/aescrypt2.vcxproj": "043417123026fb4ecf7feb7fab9e0de963267db1e99a2f84377e32f237b8045b", + "libraries/3rdparty/mbedtls/visualc/VS2010/benchmark.vcxproj": "34cee46f91829888dae67a0bad640021ae3dabbed980e48e8f44b06d243c74fe", + "libraries/3rdparty/mbedtls/visualc/VS2010/cert_app.vcxproj": "9580c3f083cd393a5e2226e7fde83ded1bba1d4e8808cc28d31d2eed572cd9f4", + "libraries/3rdparty/mbedtls/visualc/VS2010/cert_req.vcxproj": "bca5bd8f551c2e14e1acbaab71c19158d40f2d5f3e9db3098574941445480c11", + "libraries/3rdparty/mbedtls/visualc/VS2010/cert_write.vcxproj": "65e112c3cb0b0faeec340038348ca5e00129855ef5a368276b98532fc4169f9c", + "libraries/3rdparty/mbedtls/visualc/VS2010/crl_app.vcxproj": "dde58959d674e5207bf466f17d8e1dab12c6576c876afb460e262d65bd94d211", + "libraries/3rdparty/mbedtls/visualc/VS2010/crypt_and_hash.vcxproj": "be8bca3061c6a08afb42d28955b900ec657f3eee992b3f6cf1466d3de530598e", + "libraries/3rdparty/mbedtls/visualc/VS2010/dh_client.vcxproj": "23b585cead69c28cd5f5d8f2422ce1303fc3d5d9cef4c8ff5369bb4a47380a58", + "libraries/3rdparty/mbedtls/visualc/VS2010/dh_genprime.vcxproj": "b68c83f7806600023c07f99b55d96b78c28e1da33084ee8c7761a09254aac871", + "libraries/3rdparty/mbedtls/visualc/VS2010/dh_server.vcxproj": "7668df571d04ac9f506d81dcedcc7989e4fb37b53c671022f5e1ed2142406935", + "libraries/3rdparty/mbedtls/visualc/VS2010/dtls_client.vcxproj": "cd0e324e374771c8fd81d1b712bd9746907d4adb2a0306f41083cd5233646400", + "libraries/3rdparty/mbedtls/visualc/VS2010/dtls_server.vcxproj": "aee3d1aa6d02766251abda965cd1e7d319f89b28857c51cd52b6dcfd56cafe18", + "libraries/3rdparty/mbedtls/visualc/VS2010/ecdh_curve25519.vcxproj": "cfefecf91e435b351c1827359c66288b552b8d718f559ee1232315b4e2939d13", + "libraries/3rdparty/mbedtls/visualc/VS2010/ecdsa.vcxproj": "c7e955ac8bbd73184fe2b780a037f332939f16f82f4a4fe80f2e7c35680f8fca", + "libraries/3rdparty/mbedtls/visualc/VS2010/gen_entropy.vcxproj": "aee08d42d11354169db4d4ced618439152eabcc463245599ffabf99ee415827f", + "libraries/3rdparty/mbedtls/visualc/VS2010/gen_key.vcxproj": "61ff766c46b082fe2d67278758c1d660cd77e1ec3794302b6753e7e878ff4f25", + "libraries/3rdparty/mbedtls/visualc/VS2010/gen_random_ctr_drbg.vcxproj": "29faff037f31c0b46ad6b27bb7a3f7655a22f9d4c9d217851b929c3b8c88d289", + "libraries/3rdparty/mbedtls/visualc/VS2010/gen_random_havege.vcxproj": "2d2beea10745cdc4e30a344ef9e45685a06178ed1d1941b71dbea7a070329b0b", + "libraries/3rdparty/mbedtls/visualc/VS2010/generic_sum.vcxproj": "7fd50ca75ef487a1ed27104ef13c904ad004c2b8bbc02d36797d926eca0394df", + "libraries/3rdparty/mbedtls/visualc/VS2010/hello.vcxproj": "01909abbd4aa403ab94e7b90d2a06a3386ee0477f90f3758014e4b3efacdb46f", + "libraries/3rdparty/mbedtls/visualc/VS2010/key_app.vcxproj": "596766dd8fc0b019fbb13401d9440a8aadd9829aad005a17c3d4d0c1c9eb0be8", + "libraries/3rdparty/mbedtls/visualc/VS2010/key_app_writer.vcxproj": "df9075ea39ade11af038a75b5ce028c1700509efb2045be029f0ee770293a11f", + "libraries/3rdparty/mbedtls/visualc/VS2010/mbedTLS.sln": "7441c19db10b4a8d5103c8d7d80d08561787b559dc07e2c7021526951c24cb12", + "libraries/3rdparty/mbedtls/visualc/VS2010/mbedTLS.vcxproj": "bb229c5d7f7c7b9251402659b893aa9ffc467b89f17ba25d18f2a42c61ad401a", + "libraries/3rdparty/mbedtls/visualc/VS2010/mini_client.vcxproj": "32465df45b9ae4f08cf61060171ca5937210479a05a3de0e23f879e727855357", + "libraries/3rdparty/mbedtls/visualc/VS2010/mpi_demo.vcxproj": "27ed3a0fa397ab79b6caf824f560a0915615e51249813b5ecccd72b779c757fb", + "libraries/3rdparty/mbedtls/visualc/VS2010/pem2der.vcxproj": "ed28151a49e03835ed5fc94d15df5473bbdaf05ea382e13a247d7e4631115666", + "libraries/3rdparty/mbedtls/visualc/VS2010/pk_decrypt.vcxproj": "2f21f6eb55916f2ae34786f7fa4cf0fc67d9ed5a070bcf690feb5e126c30423f", + "libraries/3rdparty/mbedtls/visualc/VS2010/pk_encrypt.vcxproj": "59a5ac8fda4823a2bc0a18e2f44f9ca9c16c1a4677dd393c34fa276f0988c6c3", + "libraries/3rdparty/mbedtls/visualc/VS2010/pk_sign.vcxproj": "074e424d129819722963606b7ae22a9ce156f98c3c73e8b711dd0d10bb3a5ffe", + "libraries/3rdparty/mbedtls/visualc/VS2010/pk_verify.vcxproj": "42bc1c83134a2b9c4d6e82cb86d6690b27aad36bc63734dc2b7ccb6923f33a21", + "libraries/3rdparty/mbedtls/visualc/VS2010/query_compile_time_config.vcxproj": "24fe4c0e40eea1dc83caf05cf6b21aba63f852d06eebf2148ecd22bee036cba8", + "libraries/3rdparty/mbedtls/visualc/VS2010/req_app.vcxproj": "77d1008065a894f9e7cf2b66119e6fa25109d670987d9dfede21ddd51493e3ad", + "libraries/3rdparty/mbedtls/visualc/VS2010/rsa_decrypt.vcxproj": "042f0dd2e60edd7f93ea561430e685691d917039639968e28a5911214763cbed", + "libraries/3rdparty/mbedtls/visualc/VS2010/rsa_encrypt.vcxproj": "90c6fb6ec43949f0c5046b9b6f5b1e096b848f1dcfa39b8f2422f772797cb65b", + "libraries/3rdparty/mbedtls/visualc/VS2010/rsa_genkey.vcxproj": "1f1c10d55bfdb19df26e142746c57764d1cd33a6cdc9633421e7a74a2af3c0c0", + "libraries/3rdparty/mbedtls/visualc/VS2010/rsa_sign.vcxproj": "a52f6dfee4063e6019de15aad3e80afaf12cf8a3802b4cb6a228bdbee765dfa4", + "libraries/3rdparty/mbedtls/visualc/VS2010/rsa_sign_pss.vcxproj": "0aa419945b0e791d9a52832c4994d09a763db3f69e0b7438b104d72524626565", + "libraries/3rdparty/mbedtls/visualc/VS2010/rsa_verify.vcxproj": "be38b7d95906fec9e03c1edd94696964d5b19cc07e7225d856f11c827a8a997b", + "libraries/3rdparty/mbedtls/visualc/VS2010/rsa_verify_pss.vcxproj": "1cd735720dfc3d49fcd73266d6415450552e8849cfeae92a6c3b69976defe7f8", + "libraries/3rdparty/mbedtls/visualc/VS2010/selftest.vcxproj": "3cd55a43710848fe4fb93f9100aafee8a9b55b9ad2c3fc5cb7fd55c8f28259e8", + "libraries/3rdparty/mbedtls/visualc/VS2010/ssl_client1.vcxproj": "2ac345d74bacc5571ae3ae589cfd4eb4c014de9bbea70a6ecd4247147f768073", + "libraries/3rdparty/mbedtls/visualc/VS2010/ssl_client2.vcxproj": "8d149c88bb194d9f58f36e6fc4c75a9c1506e41583c77c30522205d76e080c84", + "libraries/3rdparty/mbedtls/visualc/VS2010/ssl_fork_server.vcxproj": "084f8a23607a2ab7ad8287c666a4d9dc4bf64a587aae161112cee1386cffe8ec", + "libraries/3rdparty/mbedtls/visualc/VS2010/ssl_mail_client.vcxproj": "6e745dc8d478c49096fb69ba23c93a90509af3290bae804732cbb537e735c929", + "libraries/3rdparty/mbedtls/visualc/VS2010/ssl_server.vcxproj": "e7915db39ed4e284ff456dc480e06553714d5675ac705dfe6579174db5be83cd", + "libraries/3rdparty/mbedtls/visualc/VS2010/ssl_server2.vcxproj": "9ad201669aedeb9cccb9ea637785711a40c12f11c7d9af3381a09a490e4079fa", + "libraries/3rdparty/mbedtls/visualc/VS2010/strerror.vcxproj": "fe12f430b31f3ead1fd255bdb8be4c5d52d514a45368ee7031a2a5830648b716", + "libraries/3rdparty/mbedtls/visualc/VS2010/udp_proxy.vcxproj": "f2b043d5c3cbb825ffedb24cb67142bb3476aa1bb0e5c945499938a393364f44", + "libraries/3rdparty/mbedtls/visualc/VS2010/zeroize.vcxproj": "e2897300a0d3391be518af3fde0cad4ffae8664837f357cb0186843d20de7f13", + "libraries/3rdparty/mbedtls_config/README.md": "dec5f4f70730361ebe2e653ac748bda384760382f7d7afb8dd70876113c5dba5", + "libraries/3rdparty/mbedtls_config/aws_mbedtls_config.h": "9d61ed03d900438108379718d3429771377913119e0f23b19ec2249ebd2bd00b", + "libraries/3rdparty/mbedtls_config/threading_alt.h": "cab329f93a556fb6fefb28b5d5d2bcc05df70e6be7e67c107c74fff0c3354e66", + "libraries/3rdparty/mbedtls_utils/README.md": "e330a21d504573dae72d764abde401f6378db3852d67be4e8bae291d6ef1a99b", + "libraries/3rdparty/mbedtls_utils/mbedtls_error.c": "906e1e5d8f464f2c8827fb83f7a249785de36ed1f034d225370a3ba211c2cf5b", + "libraries/3rdparty/mbedtls_utils/mbedtls_error.h": "ed6e816433e7e9aad9614cf1a2c04a92e081f803fc1665485a1c56caf06587e9", + "libraries/3rdparty/mbedtls_utils/mbedtls_utils.c": "e6eb0721fdb03edd8345cf5639b21d724fd05acac3bb5ef945e3cb5e158781a6", + "libraries/3rdparty/pkcs11/CONTRIBUTING.md": "400098f5776f8d6289aaa5517f2d33fbc28d98d9612ccf3d4cfc85713d674d95", + "libraries/3rdparty/pkcs11/LICENSE.md": "9bcb0c0cb10c9dbe5090ea05b35ac12160a295c2704b178b2c661c10acfb96e8", + "libraries/3rdparty/pkcs11/README.md": "0e2538782b336a90335524fd19be0e2e21cbd197f161a2aa8f0fc82993eb1609", + "libraries/3rdparty/pkcs11/pkcs11.h": "8bb7aa1aeaa328b6a39913070d6f3d2bdeb9f2c92baf27f714fbb4cbefdf4054", + "libraries/3rdparty/pkcs11/pkcs11f.h": "a85adad038bfc9dad9c71377f3ed3b049ba2ac9b3f37198a372f211d210c6057", + "libraries/3rdparty/pkcs11/pkcs11t.h": "5b58736b6d23f12b4d9492cd24b06b9d11056c3153afc4e89b1fe564749e71a2", + "libraries/3rdparty/tinycbor/src/LICENSE": "3c6ba0b5bfa7830505301ffb336a17b0748e0d61c4d34216e9dc98f10e40395e", + "libraries/3rdparty/tinycbor/src/README.md": "6d6489fb7bfb247f44438f1e73e2f24db38ac3d4b586eeb31d60091a2a6b830f", + "libraries/3rdparty/tinycbor/src/cbor.h": "0fb03658e551dda420c7bfc54cc029c1dea0c9cd906aa23c79a112934f3c5a53", + "libraries/3rdparty/tinycbor/src/cborencoder.c": "bb6539de51904920d2dbf9fc46881a7c7f1f1b27dbf0031ce4873fcefa1627ac", + "libraries/3rdparty/tinycbor/src/cborencoder_close_container_checked.c": "fee715bd5a28e19d7451ef973bd20d08fff8d82a5e59efe6aa89cc738368bf32", + "libraries/3rdparty/tinycbor/src/cborerrorstrings.c": "d2c611466a5702fae92c459844bf9495d90a2fffc1efcd847f188a06feded5b6", + "libraries/3rdparty/tinycbor/src/cborinternal_p.h": "5a58680dc3e1b58220f9e76e18b446caec57f1af75c765116700d60ec105c055", + "libraries/3rdparty/tinycbor/src/cborparser.c": "1decbbb7145a322de9dffd82e7319ac18b84fd0a4c480b8b36f1459aacdb1693", + "libraries/3rdparty/tinycbor/src/cborparser_dup_string.c": "95cbbfe5d49ad5afc8684df17cee7c0b016118da659be49a0230c2a7938cae5a", + "libraries/3rdparty/tinycbor/src/cborpretty.c": "04663de61f37618a25d7509a518e3da4764353b666aab42148181ac83af07406", + "libraries/3rdparty/tinycbor/src/cborpretty_stdio.c": "d5a3178cee64625fa418f36970a666e8eee83e92c395acbd2b89220db93de6fd", + "libraries/3rdparty/tinycbor/src/cborvalidation.c": "53aea74b993f99365260fe25f51071c1b4be95c987a47518e3d26dd56c23b531", + "libraries/3rdparty/tinycbor/src/compilersupport_p.h": "3401cb759b3783bdcf4c8566e99010b364d7348a3f267b15f5f635f09960bab6", + "libraries/3rdparty/tinycbor/src/tinycbor-version.h": "77fc28859af9c24b7dc37aee0a73a07c0c90e7500b73e51c2d4a76c709ad5978", + "libraries/3rdparty/tinycbor/src/utf8_p.h": "b0efa3c4b2b04c4db2809989a86206f9277de5a79ade4838df9bbfb3e17db4bb", + "libraries/3rdparty/tinycrypt/AUTHORS": "478b050e66ce46564c1d081590edc7f3db7fcf1894430d20a9b6b550029d4ab8", + "libraries/3rdparty/tinycrypt/LICENSE": "b2d451fcba3577b118741d733d37ebd15bdd0b6b381e554a7345bdbfa3743108", + "libraries/3rdparty/tinycrypt/Makefile": "7c3c3e1913882fbc6e9ef5c567505704fbe7f12cf55a842eca5b19df8c868ef5", + "libraries/3rdparty/tinycrypt/README": "d795d171058c36cdb8ce718fd615846f345815465efe011aa0b215df86e53a38", + "libraries/3rdparty/tinycrypt/VERSION": "283571d2642fc7b3befd294f45d53b896a1d54d34c86235b13151192b380606a", + "libraries/3rdparty/tinycrypt/asn1/asn1.h": "89499b4d992a8a347ac4805fe01af0c5977ce6237ccb628589b6f885b2e1423a", + "libraries/3rdparty/tinycrypt/asn1/asn1parse.c": "fa021fe9c65c28090e841387b71f59484f62abebf5cafceb0fb555c0dcd572da", + "libraries/3rdparty/tinycrypt/config.mk": "ce91366509d78906308eb30de2f85bfb894b48146ea01d644c734e1a8ca346d1", + "libraries/3rdparty/tinycrypt/documentation/tinycrypt.rst": "8d5716676abf2f0036d58ee7691da44953d8efe97020ed4a5edd4afbea5c054d", + "libraries/3rdparty/tinycrypt/lib/Makefile": "b6bde2680a639927714b1db0cab6c038101d0432d45a08fa6da157aaeff21ec1", + "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/aes.h": "bd9e1ea99ec9717aa68f8c2b9b8844c11a7557017dde19c0ea7ca9599ce28c8e", + "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/cbc_mode.h": "9d04a528294793b47541cb70fe4e83f5c0a70b4c550fb49bce90a22dc863a191", + "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/ccm_mode.h": "79347427c642f708ae10f24784236a5e5a328f807b100a5b0fe90db70bc6432e", + "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/cmac_mode.h": "6f9727d78078f9ae016f18b2ec420f3e6f8afc60e0ea5fa0fbc8e8a646e8f53d", + "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/constants.h": "89c80a6d5f468ebde82fb525a6dd72685cb27720fd385da6e3f3f2a19fba48ec", + "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/ctr_mode.h": "1f3fe4a524a86e9c659643e608e81287b4e898e58316f28ca51b19c212e4bd72", + "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/ctr_prng.h": "8d0f25e6cf23cdd8634778fcba10af888d24fd0d11c496f1b9a0440cd45b2509", + "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/ecc.h": "ab1904e162dc994ef0b0174dcee9e708d57d58828dc5d819ba71713ac443fee4", + "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/ecc_dh.h": "1e8bda76ea0f2673d371a752ea57f3e5da621a3007fd891fa28d4ed555227185", + "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/ecc_dsa.h": "c6545de8ba4490efbde181189b999938b43c36cc1e905d0a12decf1b526b4769", + "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/ecc_platform_specific.h": "ed890b375c177e7abad7b188ac0a737e87d43224325cd1ed944bad3d25c470cf", + "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/hmac.h": "c981663602ae9c4df8f7c2fe5d6e1d2cb1132fc0b90beb4e4eef536d9f54b82b", + "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/hmac_prng.h": "c7d780c4bf3fb23f45ec1225f31f0c8a851c5693f47adf76fb76b7f140ce136a", + "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/sha256.h": "90eb15d8cd82f81ba163c53b199c04eb9e5fda52a41901bb380dd80097f57902", + "libraries/3rdparty/tinycrypt/lib/include/tinycrypt/utils.h": "c5c169e0ae15e394588d7d6797a28af9ab251b1ed1169b3207625752d8d8fc8a", + "libraries/3rdparty/tinycrypt/lib/source/aes_decrypt.c": "edad5e3570012bcc1da57869fdb2bc4e0c6e733fb67f7b362bcc71f88d0af017", + "libraries/3rdparty/tinycrypt/lib/source/aes_encrypt.c": "90957c91a22214b18653bae4ef4abeca8bc6674051c48fe0c97c413a6d65e555", + "libraries/3rdparty/tinycrypt/lib/source/cbc_mode.c": "e09c83712a618ba08a60fef3e5ba2ed5bf712fa6b8c79a074cbf5731665f7ffa", + "libraries/3rdparty/tinycrypt/lib/source/ccm_mode.c": "089fb37565150785cf67c20457fb95409d860cb0b572348148fb09d3d11ac6fd", + "libraries/3rdparty/tinycrypt/lib/source/cmac_mode.c": "67e2a2ac539ed72bd5ee80cd377b1b5f5148f6c743bd8c89904a393d39a5a8d7", + "libraries/3rdparty/tinycrypt/lib/source/ctr_mode.c": "30ce4835f928dc331ed74f86de26b9839ae50e703e6086434edaf3ba5a87473a", + "libraries/3rdparty/tinycrypt/lib/source/ctr_prng.c": "c0a2de479ae4bb72b89236a44058d387e14670f24e114298ee14173c41bd5315", + "libraries/3rdparty/tinycrypt/lib/source/ecc.c": "1c56234ff29708c712d07f864ed498eb6b0ab8475b5b5824079ed0c77070ea1b", + "libraries/3rdparty/tinycrypt/lib/source/ecc_dh.c": "bf6a6ba824721d9fa781b594ade96cbb97d47f65dd7fe5b431dc0ac6eaf335a1", + "libraries/3rdparty/tinycrypt/lib/source/ecc_dsa.c": "f80751d74bc9be544308f5b7495492b68e552b7283540cd50f9d0f295df13591", + "libraries/3rdparty/tinycrypt/lib/source/ecc_platform_specific.c": "17f454ecc206f2ac532c517b13beb56ff730e71efb93eb70b20ee71617a8eb7b", + "libraries/3rdparty/tinycrypt/lib/source/hmac.c": "6c9141de8af68822f611b4213801eda5a8695ece071b3bef34dbb6e52ffdd709", + "libraries/3rdparty/tinycrypt/lib/source/hmac_prng.c": "3a64017e98bd7b25f33819cbcd597d48e9ae00478201a68a485cf7e04f400274", + "libraries/3rdparty/tinycrypt/lib/source/sha256.c": "a8ad4bb2c09e31e4ab86c1b4f8fa073937a42e2694afb4dde6cb1b3c7a4b5ffd", + "libraries/3rdparty/tinycrypt/lib/source/utils.c": "2cf7cd3ee3b48d05b925dc005c1b12ead098f3939e948f55e278e16c180e8d8d", + "libraries/3rdparty/tinycrypt/tests/Makefile": "5d72dc2308dc2cdf16a6565b700d931a9b2ab72550af58a890993f301002c6f2", + "libraries/3rdparty/tinycrypt/tests/include/test_ecc_utils.h": "f793eb6066f90db4222a4d95d47e5f6b2e480bc07e1766e05cd091ccf8cc565c", + "libraries/3rdparty/tinycrypt/tests/include/test_utils.h": "bf74d9342f08637b56652c599b2956a21c56d32e80ec1e9d74b4909bd12b4122", + "libraries/3rdparty/tinycrypt/tests/pseudo-random-data.bin": "87944d1d1787ad21685f9289a5f5e365d7582f395d9d2dd9b122b837b30d1c61", + "libraries/3rdparty/tinycrypt/tests/test_aes.c": "27060817b7a6b0646aa5c4d55bf51586b976326bf165ae9ebdde7f5b26cf5f6b", + "libraries/3rdparty/tinycrypt/tests/test_cbc_mode.c": "59dfe4f51a60b38bb5d6cbc0be5db9ae795c993e58663e58f5fd9998e71f88aa", + "libraries/3rdparty/tinycrypt/tests/test_ccm_mode.c": "32249f37c22a339f6e1b0140fdee83402226a70726fb7beeab225a0989120073", + "libraries/3rdparty/tinycrypt/tests/test_cmac_mode.c": "1b48ae8a493e009e09d9ea9829353a4b90a71c21a297373c242215a67f2b683a", + "libraries/3rdparty/tinycrypt/tests/test_ctr_mode.c": "be4ae7b236ea863937b6091aa1f3717df196a333fbf39ff922d7da0c8eacc512", + "libraries/3rdparty/tinycrypt/tests/test_ctr_prng.c": "f745a4d272810460c85f8c1781da7977e7fdcf02e02d25f34e363b60c8291c9e", + "libraries/3rdparty/tinycrypt/tests/test_ecc_dh.c": "28d253afaa2f1e329ba5ccd4266b34d45346e77235fecc593a78a360ef6195e9", + "libraries/3rdparty/tinycrypt/tests/test_ecc_dsa.c": "55533e65df9e3c7e2e792c92ca5a567b692b92c289c21f12b3cfd75b385fef93", + "libraries/3rdparty/tinycrypt/tests/test_ecc_utils.c": "4ff6a5f2f5465f485ab2333cc4dd15b2244ca875cc016b6e646510d218ba3be8", + "libraries/3rdparty/tinycrypt/tests/test_hmac.c": "c0bca5221fbb587f5c29477fa062d7e30297914c1010102b5f6f47f2cb37e143", + "libraries/3rdparty/tinycrypt/tests/test_hmac_prng.c": "bbdabde91a268dc6b3a20f0efdff63e2d099848a013edfa7e956358ef3a9caf8", + "libraries/3rdparty/tinycrypt/tests/test_sha256.c": "b154011602efffd7319ca8eb6a0a04b9476efe2c1abb42f09748c3ed766197bc", + "libraries/3rdparty/tracealyzer_recorder/Include/aws_secure_sockets.tzext.h": "7a32f358eb66e499cfd083206ef4c7c5da6e1be9374cf50f3e5e286997a9c1b4", + "libraries/3rdparty/tracealyzer_recorder/Include/aws_wifi.tzext.h": "77cda4235e4436878fb5cc5a850075a6ac658b00269fa831d71983f9c0d43137", + "libraries/3rdparty/tracealyzer_recorder/Include/trcExtensions.h": "4750f0f01b17b0b989b59d0d3db673a67de759162d896a3dd89a8b2a9cc43940", + "libraries/3rdparty/tracealyzer_recorder/Include/trcHardwarePort.h": "b22ec1a829e1370154dd9217fae634d714b1bd8765dbeb36dde4529454d98f1c", + "libraries/3rdparty/tracealyzer_recorder/Include/trcKernelPort.h": "4e0a7fd011a2f5acb912f51ff0c1349ffc7a82805ed027a41d3f78737ca20716", + "libraries/3rdparty/tracealyzer_recorder/Include/trcPortDefines.h": "bcbd866a94a9bb5696481eb7e8540101d78dd82d963b2bdb56626a3dd51fa15f", + "libraries/3rdparty/tracealyzer_recorder/Include/trcRecorder.h": "c1e4d5e4ae87b38240e351aa3c93b570e153ad6f326666acd9067ed5e0953fad", + "libraries/3rdparty/tracealyzer_recorder/ReadMe.url": "3fbfd84c715d8e6d3df562c3019b2892139b098641d42d3f5b91781704bf2bfb", + "libraries/3rdparty/tracealyzer_recorder/config/trcConfig.h": "e20d06dbec2b222c6faee3fd940c675028494d0cef41c5d524439e3ba4dccef5", + "libraries/3rdparty/tracealyzer_recorder/config/trcSnapshotConfig.h": "2565df36a1c0c3e50314d3cd10b9a0675f875259da9534b318c7c814ee3ab76a", + "libraries/3rdparty/tracealyzer_recorder/config/trcStreamingConfig.h": "91321655d6de4bbbb05dc2d3d0c36561de70555c627271902c630350e63b8b77", + "libraries/3rdparty/tracealyzer_recorder/readme.txt": "607e810b5ab8d1dcc6101c4af4d5212cb9eb905dec8611361395085198c7becb", + "libraries/3rdparty/tracealyzer_recorder/streamports/AFR_WIFI_LOCAL/Readme-Streamport.txt": "42c43ce0b02c9d7b83ab4786ec246ac359cb034bb694edb2e8b99f16b024d0d3", + "libraries/3rdparty/tracealyzer_recorder/streamports/AFR_WIFI_LOCAL/include/trcStreamingPort.h": "16d3453f41635e9d396537d41d05510662121445a65d8aad713a0612393df71b", + "libraries/3rdparty/tracealyzer_recorder/streamports/AFR_WIFI_LOCAL/trcStreamingPort.c": "ba201fe8d90a15471d06653c4157633c494e467b82e1bfef4d886343868e9cb0", + "libraries/3rdparty/tracealyzer_recorder/streamports/ARM_ITM/Keil-uVision-Tracealyzer-ITM-Exporter.ini": "f115f28d185d7158c6e1b2d7671865aafbbd30bb91f231e69a502173b247d374", + "libraries/3rdparty/tracealyzer_recorder/streamports/ARM_ITM/Readme-ARM_ITM.txt": "9697b415f9559bd5129444f67ffd9283456323b267439399af97bfd9e769b621", + "libraries/3rdparty/tracealyzer_recorder/streamports/ARM_ITM/include/trcStreamingPort.h": "f3a13f5f3e5fdb57a21e9ed8978d25bbbd40176e2f74316f84bb903c79888fe6", + "libraries/3rdparty/tracealyzer_recorder/streamports/ARM_ITM/trcStreamingPort.c": "b8c2dddc68e2976fe7956e679e90e88eb793719b48e1c7b34f7240067915f50d", + "libraries/3rdparty/tracealyzer_recorder/streamports/File/Readme-Streamport.txt": "bab3659daf227c8b13136ce0e9596e5afeffc29de4d156e3040f1535a6f0482b", + "libraries/3rdparty/tracealyzer_recorder/streamports/File/include/trcStreamingPort.h": "6de4cfc1f5305ed7741a541de6f19844ad633cd1376a58e654d5cedbe2120f49", + "libraries/3rdparty/tracealyzer_recorder/streamports/File/trcStreamingPort.c": "459f57c182a7db1242bf713b2e583bea3b6162777becd7e444e7aefb42bb642b", + "libraries/3rdparty/tracealyzer_recorder/streamports/Jlink_RTT/Readme-Streamport.txt": "09c5ddedff88c85b1acb667dd53627f663df8831a710d7d5a62fc7db4db79ded", + "libraries/3rdparty/tracealyzer_recorder/streamports/Jlink_RTT/SEGGER_RTT.c": "7373709c2e587cd1abd221a6f249f9a6e14d8c11ee0b3d75d701b973586f7369", + "libraries/3rdparty/tracealyzer_recorder/streamports/Jlink_RTT/SEGGER_RTT_Printf.c": "ee399915fdbdb91901d825b3c1696f9add8936c354064ff4dc3e69a0dac6ccbe", + "libraries/3rdparty/tracealyzer_recorder/streamports/Jlink_RTT/include/SEGGER_RTT.h": "5da6bbb8b2d11faf2b948b00da9af146bd68dbb51245578e7167a1cb77ef9e5c", + "libraries/3rdparty/tracealyzer_recorder/streamports/Jlink_RTT/include/SEGGER_RTT_Conf.h": "231b7db1562922b395620e05937ebc6438e0f0323bd95057b987294b0872a510", + "libraries/3rdparty/tracealyzer_recorder/streamports/Jlink_RTT/include/trcStreamingPort.h": "83ec42f63402acd8e671d71e6724713b798ebcef792a1a2ff61e6facc34308b4", + "libraries/3rdparty/tracealyzer_recorder/streamports/Jlink_RTT/trcStreamingPort.c": "a33163cb9745dc3670a1bc7d3e60a128005bfc1b0c1734172729542577cd92d2", + "libraries/3rdparty/tracealyzer_recorder/streamports/TCPIP/Readme-Streamport.txt": "1bad876ee3af398df3fafb1f41afa99649bb4a54f5363ef41596df8d51cd8223", + "libraries/3rdparty/tracealyzer_recorder/streamports/TCPIP/include/trcStreamingPort.h": "4423f8db962d42ef503a606acc69758153c870407ce2eea914ed965309a149bd", + "libraries/3rdparty/tracealyzer_recorder/streamports/TCPIP/trcStreamingPort.c": "cd8293c3da466bb9b384d1a40d8f42521edd2941e575aa3095eb6e98e905ce09", + "libraries/3rdparty/tracealyzer_recorder/streamports/TCPIP_Win32/Readme-Streamport.txt": "780fa3af3812a6db0b2f364ba79ea9f53e19e4e8c7a66833e4270d8b4541588a", + "libraries/3rdparty/tracealyzer_recorder/streamports/TCPIP_Win32/include/trcStreamingPort.h": "780f0cd9bee4233e12c07342efc632008315c9e9bd3218e68382e3ded8ac48bf", + "libraries/3rdparty/tracealyzer_recorder/streamports/TCPIP_Win32/trcStreamingPort.c": "2d5a558ce8cbafdf29b186fb27d409622160929d151ef47adfcc18215ade2179", + "libraries/3rdparty/tracealyzer_recorder/streamports/USB_CDC/Readme-Streamport.txt": "a283d5e083e1a231cfb3bc17b30bbc01f4547dc740865d3cd9aa2b5878cbd531", + "libraries/3rdparty/tracealyzer_recorder/streamports/USB_CDC/include/trcStreamingPort.h": "6e7cf9f4d23c569ddb48d2a6cd7101e5266d95104c6a3a02326b89ab94c357b0", + "libraries/3rdparty/tracealyzer_recorder/streamports/USB_CDC/trcStreamingPort.c": "109bf4ca36cef6e364455ca8c4311ae614eb88e3bbfb0d5f0537eb03d65b64a7", + "libraries/3rdparty/tracealyzer_recorder/tracealyzer_readme.txt": "7fbf1589361df83fb3dae0e6ab4705bddfda4e6f5a38c44bfac9d7d408279407", + "libraries/3rdparty/tracealyzer_recorder/trcKernelPort.c": "bf314236cc6eec16119190cc91c96f9892d69f2f3f5887f7c658dda21385dab2", + "libraries/3rdparty/tracealyzer_recorder/trcSnapshotRecorder.c": "12f0c25ae2bd3a287e824d89c840a0e9ce6e3ecd892e830c1b403399a376fded", + "libraries/3rdparty/tracealyzer_recorder/trcStreamingRecorder.c": "a558fcea27ef041cb24615695a39ace3d84f81caa94534d0e7d69baf4d03cace", + "libraries/3rdparty/unity/CMakeLists.txt": "c9af8e56b8815a03197444cc642cfa5f33534efa6363573d94ba2c08c705e668", + "libraries/3rdparty/unity/LICENSE.txt": "3ed9b51da86f52c729c96cc99fdde6444b2297c788a9cf4ad1d3649dc34c4985", + "libraries/3rdparty/unity/README.md": "c4612d859d547fe4fd7a344899d33a6a0b91b65df4b3d90a75e1e766b36462a6", + "libraries/3rdparty/unity/auto/colour_prompt.rb": "e98b5171e72057bcfc19ae252f1c7d74ec93eca16957379ccce49da85712c4a4", + "libraries/3rdparty/unity/auto/colour_reporter.rb": "2e6fbc6a1718d1f755378a934526a5b4fe11ef045302ac1e1c251e927477d697", + "libraries/3rdparty/unity/auto/generate_config.yml": "85c5702a168e366148e8ec89df416eae888278a526c79459162c0f37641a02fe", + "libraries/3rdparty/unity/auto/generate_module.rb": "8d7ca483abf4bbd81b6b6e35628a31db43957b60ffd1fc9f5879976ae49d5676", + "libraries/3rdparty/unity/auto/generate_test_runner.rb": "3b267203eb9bc77ecd495024fedf857b3f7ac882804848a1d616028113ec5888", + "libraries/3rdparty/unity/auto/parse_output.rb": "3f33f2d75d316c767cf22ca59d404ff2287a5c8eeb37ebbe02f4bfe4ce099877", + "libraries/3rdparty/unity/auto/stylize_as_junit.rb": "d1d32f676a7de29b5c6526ddfff0f260f8881a2a2ccd06a31da34e94cca15d7c", + "libraries/3rdparty/unity/auto/test_file_filter.rb": "a69a44fccafbb504635163793799aa59809035951d7f258547d64d4145131a60", + "libraries/3rdparty/unity/auto/type_sanitizer.rb": "ecc5677ac9820f343aca50893463602fca940c24daf07a4784b4e9e0801c3f4b", + "libraries/3rdparty/unity/auto/unity_test_summary.py": "e46350b7132f04a7bb339d47bcef11ae0cb9e74c2050d0d75697b33c253c2895", + "libraries/3rdparty/unity/auto/unity_test_summary.rb": "22f41c7a277cb37895d742829ce9ca7ba65180a3b0011126c1e90c8cb1b37c20", + "libraries/3rdparty/unity/auto/unity_to_junit.py": "0743f26b5ae67af204981293337f9cc9a8cb46c90aaa3f46f31fd9658ab65990", + "libraries/3rdparty/unity/docs/ThrowTheSwitchCodingStandard.md": "f0f000eb1fc32b3a6684da894ed816d09ba077ad85e65e44f1f7998da47ef178", + "libraries/3rdparty/unity/docs/UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf": "28e8687d90c111ee8c249a7748495a0bfe00a3f35231b026ac73eed01d32eb34", + "libraries/3rdparty/unity/docs/UnityAssertionsReference.md": "4a7475082e43c174b8cb6d80d9505da5700d4ffadec7eb6923c813c57988ec56", + "libraries/3rdparty/unity/docs/UnityConfigurationGuide.md": "63008818f574d5a1cf365c484493dedca3763a563efd77f460a60325f30d4c16", + "libraries/3rdparty/unity/docs/UnityGettingStartedGuide.md": "c7eae02ffedd7ad4a112dab2ded25f238aed89f2358dd54bce7e64ae803dd4e2", + "libraries/3rdparty/unity/docs/UnityHelperScriptsGuide.md": "f8b89d36c0b901265fd3366f0a93045218c03adf501c240a5570bc68e22ceaac", + "libraries/3rdparty/unity/examples/example_1/makefile": "367e10ef968648ec5c531f144bb0ee257a619091a76fcc17516c220bf20539e6", + "libraries/3rdparty/unity/examples/example_1/readme.txt": "4d72d51f1a385cd4aeb594e4485ca2439d5b86247523cd2d2b89acc2173d8a24", + "libraries/3rdparty/unity/examples/example_1/src/ProductionCode.c": "9d6b0ae761f7dfc008d6547031ff92de63976f5621b6feef2a29614cec51b357", + "libraries/3rdparty/unity/examples/example_1/src/ProductionCode.h": "25cfcc42b79140f4c399363e0ef10a6e518a1831e10c61cc138d6d9a230425ce", + "libraries/3rdparty/unity/examples/example_1/src/ProductionCode2.c": "c2cc0a76cb2ea145d3861bd9ccc467ac45ad3e8230d5075ed174ce3a5cd50a76", + "libraries/3rdparty/unity/examples/example_1/src/ProductionCode2.h": "d4db1a4eea2bee3d668a203d4953f415f23be64a826c5a73059ef221f61b3882", + "libraries/3rdparty/unity/examples/example_1/test/TestProductionCode.c": "33e4b165d437c376f2393da59be0b22a3a458ebbe94cc2b340159b71f2d8bb74", + "libraries/3rdparty/unity/examples/example_1/test/TestProductionCode2.c": "11387f2ecdc97ee3344c0df42123e73cae899702b348d5597e09e9760db267aa", + "libraries/3rdparty/unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c": "2c84d6b954a6810a7c509dc861ee0c18a562dd23a5dd7747ea524f0c1467d9a4", + "libraries/3rdparty/unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c": "b6ec7bb984eddea80c178ecb30f6f772325a745ff9812a5e3f41f236c43e19e0", + "libraries/3rdparty/unity/examples/example_2/makefile": "9c925a4b80f11ce51cb65fef51f8e1279113dc67838c71b5bc8b0c31009e65bb", + "libraries/3rdparty/unity/examples/example_2/readme.txt": "a03bf4ac2d294a037189b42f7bf8fdff0bf50524857e3f8933eba76085f22f04", + "libraries/3rdparty/unity/examples/example_2/src/ProductionCode.c": "75136eec7a43d0dbe980dea19ec46f6e16c0da92093686e59f6143d8ae8b5bb7", + "libraries/3rdparty/unity/examples/example_2/src/ProductionCode.h": "25cfcc42b79140f4c399363e0ef10a6e518a1831e10c61cc138d6d9a230425ce", + "libraries/3rdparty/unity/examples/example_2/src/ProductionCode2.c": "a929e7ef393ec5ccc53e3f885d663a1c8fbe5cc5f72a0fcad5c0d2f6cbc8b210", + "libraries/3rdparty/unity/examples/example_2/src/ProductionCode2.h": "d4db1a4eea2bee3d668a203d4953f415f23be64a826c5a73059ef221f61b3882", + "libraries/3rdparty/unity/examples/example_2/test/TestProductionCode.c": "7db7b7d9e7216fdc0814ff8bbecc37f40e573006207b47cfd8954469ebc9b502", + "libraries/3rdparty/unity/examples/example_2/test/TestProductionCode2.c": "332f23e940a9676504c84dc92d1a6cf72cd9204afe7f664c16b58ee7dbff312d", + "libraries/3rdparty/unity/examples/example_2/test/test_runners/TestProductionCode2_Runner.c": "14aef95de310f1e1381feaaf256ea94d0905a538311b5e3fdc944f927e75b287", + "libraries/3rdparty/unity/examples/example_2/test/test_runners/TestProductionCode_Runner.c": "a782491bcd8dd857b26a62df58e8671f1cb7641d6c0fe7f7853c079732ccd8e9", + "libraries/3rdparty/unity/examples/example_2/test/test_runners/all_tests.c": "fe5c0418201d70dc696b0db6acf60b2ea0069d74fa94fb96d7169b8752e00d17", + "libraries/3rdparty/unity/examples/example_3/helper/UnityHelper.c": "091c2466d25deffd8958332ad03d393ca1ec1b1f6150c16626d57d5901eb1b21", + "libraries/3rdparty/unity/examples/example_3/helper/UnityHelper.h": "a95bb6d3704c51637bb0855787236b41229e3836601ba97e88768f95779f3d4d", + "libraries/3rdparty/unity/examples/example_3/rakefile.rb": "2bd39eda1eb55bddd65a0a1536f707c2304b70bca3ac6bba6c0790d745a79a45", + "libraries/3rdparty/unity/examples/example_3/rakefile_helper.rb": "cfee16d634da56580eb6e7cdd5fe6fdffe432b21fba11f7262949d94f4622470", + "libraries/3rdparty/unity/examples/example_3/readme.txt": "2af5e731fb1db0ddf5c739f0b08fb2724e4acc7efb7ee0a02fe474a3e69d284a", + "libraries/3rdparty/unity/examples/example_3/src/ProductionCode.c": "75136eec7a43d0dbe980dea19ec46f6e16c0da92093686e59f6143d8ae8b5bb7", + "libraries/3rdparty/unity/examples/example_3/src/ProductionCode.h": "25cfcc42b79140f4c399363e0ef10a6e518a1831e10c61cc138d6d9a230425ce", + "libraries/3rdparty/unity/examples/example_3/src/ProductionCode2.c": "a929e7ef393ec5ccc53e3f885d663a1c8fbe5cc5f72a0fcad5c0d2f6cbc8b210", + "libraries/3rdparty/unity/examples/example_3/src/ProductionCode2.h": "d4db1a4eea2bee3d668a203d4953f415f23be64a826c5a73059ef221f61b3882", + "libraries/3rdparty/unity/examples/example_3/target_gcc_32.yml": "2e61fc6bc7930929985f1ea1ec5d0019fe1d133c01555c86b01b20145fb6aaa4", + "libraries/3rdparty/unity/examples/example_3/test/TestProductionCode.c": "b0e815e2285b1730d7dcd24b400d15b4efccfe5e4776d96248a2165c2f0caec6", + "libraries/3rdparty/unity/examples/example_3/test/TestProductionCode2.c": "895f437abd40bd461fd86a3b8ed6bc02c5c283fc3926aafe53b473e477fa0a5a", + "libraries/3rdparty/unity/examples/example_4/meson.build": "b7ca305825ef9e6bef4e3a3fb4d0fba19882073e1f2c4e755f8044f697b93119", + "libraries/3rdparty/unity/examples/example_4/readme.txt": "d16faba668694cacde12746c58ec512de301218543217a9644e4e269bee8ab0c", + "libraries/3rdparty/unity/examples/example_4/src/ProductionCode.c": "9d6b0ae761f7dfc008d6547031ff92de63976f5621b6feef2a29614cec51b357", + "libraries/3rdparty/unity/examples/example_4/src/ProductionCode.h": "25cfcc42b79140f4c399363e0ef10a6e518a1831e10c61cc138d6d9a230425ce", + "libraries/3rdparty/unity/examples/example_4/src/ProductionCode2.c": "c2cc0a76cb2ea145d3861bd9ccc467ac45ad3e8230d5075ed174ce3a5cd50a76", + "libraries/3rdparty/unity/examples/example_4/src/ProductionCode2.h": "d4db1a4eea2bee3d668a203d4953f415f23be64a826c5a73059ef221f61b3882", + "libraries/3rdparty/unity/examples/example_4/src/meson.build": "46a328e6425249131d7ddc66bfd0b699638efec6d722e7f191621d60d7cb18d6", + "libraries/3rdparty/unity/examples/example_4/subprojects/unity.wrap": "59d1f20c0ada120ee62ef1baf30be51ebaaf40d30b16e4da014f9d58023b7a8a", + "libraries/3rdparty/unity/examples/example_4/test/TestProductionCode.c": "f3a8fa16e599d6aa7a0c9cf604ea1d42ff5466244372e00543fc3b2e116f0d41", + "libraries/3rdparty/unity/examples/example_4/test/TestProductionCode2.c": "26c0ee5fabc061cfd32ae891ab16f4b985f306dfea1a939d00e89a3c1ae6f25e", + "libraries/3rdparty/unity/examples/example_4/test/meson.build": "5b19fa4453b496f7a63de664c470ede7485d17ccd3b88a8e6a4b63d4da5be243", + "libraries/3rdparty/unity/examples/example_4/test/test_runners/TestProductionCode2_Runner.c": "2c84d6b954a6810a7c509dc861ee0c18a562dd23a5dd7747ea524f0c1467d9a4", + "libraries/3rdparty/unity/examples/example_4/test/test_runners/TestProductionCode_Runner.c": "b6ec7bb984eddea80c178ecb30f6f772325a745ff9812a5e3f41f236c43e19e0", + "libraries/3rdparty/unity/examples/example_4/test/test_runners/meson.build": "b8a2bfb8acb2f83d22a74700f1adb4e90474f11272aa341670fad17c7ae5e71e", + "libraries/3rdparty/unity/examples/unity_config.h": "e339e493a19a70352c324e371aba058e8795ef166d7af4f1edd8c49ed9771a70", + "libraries/3rdparty/unity/extras/eclipse/error_parsers.txt": "67e309b5e803a22ba22c347aa5123cbbe73edcbfe9950aa0fd74576a4add1a12", + "libraries/3rdparty/unity/extras/fixture/rakefile.rb": "00806fb140d73e67b0c3b6b944f0ab3197e51c0b88b975e6dd778043f1e7a9ab", + "libraries/3rdparty/unity/extras/fixture/rakefile_helper.rb": "db69f025b23ba4f30a38155a10199082ac45bc2cb49d6fe039365a3fde11c79c", + "libraries/3rdparty/unity/extras/fixture/readme.txt": "5692862a5fbc1910978be7ea4751899bafb6b913ce34cffa5517c0eba1fe40e3", + "libraries/3rdparty/unity/extras/fixture/src/unity_fixture.c": "29c1ed80d563a7b216b0fb4213dfc173094fd4f51d2e1c1ec188e75063386d59", + "libraries/3rdparty/unity/extras/fixture/src/unity_fixture.h": "6ef887747dcea12dcc5e24273aa1e792d90277ac4e32fb187969ed6217bf3131", + "libraries/3rdparty/unity/extras/fixture/src/unity_fixture_internals.h": "56eba22c7fd8c73d4bf8f95639f08abf63573f22efaec4b8061578b604eb556b", + "libraries/3rdparty/unity/extras/fixture/src/unity_fixture_malloc_overrides.h": "446d4a58dd88ce0bceba6e095ac4f26a4c55898e67265d688450fa3aacc7741c", + "libraries/3rdparty/unity/extras/fixture/test/Makefile": "665bba3afaf6ebd289432b039e40b03a24c7fee6f4dde8f82b1a7468fe82a7e7", + "libraries/3rdparty/unity/extras/fixture/test/main/AllTests.c": "1ec0a0e004f8a70d03dc76e28f38f09519bbaf7306d48d17d5bf0573d34c87c0", + "libraries/3rdparty/unity/extras/fixture/test/template_fixture_tests.c": "3ca4c500397fc3dd7370b419e7d4f7abb3a8b05deacaf72a4e2ccb396669003a", + "libraries/3rdparty/unity/extras/fixture/test/unity_fixture_Test.c": "d8d631a1e192b25ae24ea6ecf3bb53e86eff8f0615a1ad7095106d847b847d18", + "libraries/3rdparty/unity/extras/fixture/test/unity_fixture_TestRunner.c": "e739cdf119f943d482fe99b6acec671aa88a78b9cb38bb2b459d946ab962a200", + "libraries/3rdparty/unity/extras/fixture/test/unity_output_Spy.c": "efa0dfae695ba004c67a120c0b0e3d6f93f72cf7a992662bd4ab15d725c3ff45", + "libraries/3rdparty/unity/extras/fixture/test/unity_output_Spy.h": "b5adfe4f07d3c1c4b7cb0178344ccf608c60a08713d768c8b3e073c6f030dde5", + "libraries/3rdparty/unity/meson.build": "78b6c83b22c043c2741e1c63dbdc5477a39ba74566bcfcc704580976d4d79bd5", + "libraries/3rdparty/unity/release/build.info": "d068d6cff7b4f86fea550f0c3a9d37b227c5c18c20da61d2f73553906484999f", + "libraries/3rdparty/unity/release/version.info": "bf2380afad00fc76d9fb76d653c32eca8efe8916cf88f7000fa8920860ded480", + "libraries/3rdparty/unity/src/meson.build": "9e8bba1e59c9ad97365fc322eca8a2ca2a97b5c4e35de0389d3e4c8bdcc83aa9", + "libraries/3rdparty/unity/src/unity.c": "7486d9c33bce48a2ec7967e72407e906d06cb179ed90babf06626f181ea35a6f", + "libraries/3rdparty/unity/src/unity.h": "a1d55805833e8464ac217f7f93d7a6fba59e1b12df05c7517fda8f7717fda31f", + "libraries/3rdparty/unity/src/unity_internals.h": "ae94c9a6908768407f4d29d6b1acd06603e21e7946800dbe4a7bd1a510ce575a", + "libraries/3rdparty/unity/test/Makefile": "da2a6c3820bed28cb3f4f71085daabc80e02b97ab75b59447e18b533d7d572bd", + "libraries/3rdparty/unity/test/expectdata/testsample_cmd.c": "832ec9c8c30fd374adea6620dd38c19c689047bdad0513984066e525eefc0723", + "libraries/3rdparty/unity/test/expectdata/testsample_def.c": "246d3d9bc73ccef28f7a70b8748d95cd31eb85b9874e6972d30be1f74000fb8c", + "libraries/3rdparty/unity/test/expectdata/testsample_head1.c": "ed31f2c63e4bb7ba015a5388429b34287ecefa098551e55ae5864b883c3cdad4", + "libraries/3rdparty/unity/test/expectdata/testsample_head1.h": "fc279a298e45f70a559d05132ae888973c8f5aad913c0b2d6d8425ccbde5c998", + "libraries/3rdparty/unity/test/expectdata/testsample_mock_cmd.c": "b826f44458088555058b6c3b9c7ef15c2a5528c8efe01034d0f1debee06a739e", + "libraries/3rdparty/unity/test/expectdata/testsample_mock_def.c": "1016f1162a3ea3be49dffd824e529493d2845860d1139cb44cc32f0fe0a0701f", + "libraries/3rdparty/unity/test/expectdata/testsample_mock_head1.c": "cb7b253cefa315d7b4edaa386bffb63a728f3b33c869bf55ecfcd53d1e47eaaf", + "libraries/3rdparty/unity/test/expectdata/testsample_mock_head1.h": "9cb779d98b40e5dfcf70db57f7d3deae6310cac80547140c972ecde585f56c18", + "libraries/3rdparty/unity/test/expectdata/testsample_mock_new1.c": "4e5d73972dce4276dc688016eeb310e93ef96ea7beee0e6839092f0459798856", + "libraries/3rdparty/unity/test/expectdata/testsample_mock_new2.c": "74418cfefe544ac366a043972648c31742b2a4652155507c93a1a2a38471a5eb", + "libraries/3rdparty/unity/test/expectdata/testsample_mock_param.c": "6a8edda1c9b5a56d38e705d2d0341232ca9a55f1fb7383171475cb972c9b6c18", + "libraries/3rdparty/unity/test/expectdata/testsample_mock_run1.c": "4e5d73972dce4276dc688016eeb310e93ef96ea7beee0e6839092f0459798856", + "libraries/3rdparty/unity/test/expectdata/testsample_mock_run2.c": "74418cfefe544ac366a043972648c31742b2a4652155507c93a1a2a38471a5eb", + "libraries/3rdparty/unity/test/expectdata/testsample_mock_yaml.c": "763d37bc5a5edc7566bf6625dd38878aed8cc94a5cec8f6e23aee16e30bdaad6", + "libraries/3rdparty/unity/test/expectdata/testsample_new1.c": "983abee21894ba9fb5d667a69b046558867f9f16eaf546d259671f54dd4be626", + "libraries/3rdparty/unity/test/expectdata/testsample_new2.c": "9726bdaec7a5c8e99b4e6bbfc41b91c8687665bbafdb617be4514eadc30b023c", + "libraries/3rdparty/unity/test/expectdata/testsample_param.c": "7ab6834f8376908625b9999a4c5dad32ad65c8f3fd852e78b6d9c3bc871fc639", + "libraries/3rdparty/unity/test/expectdata/testsample_run1.c": "983abee21894ba9fb5d667a69b046558867f9f16eaf546d259671f54dd4be626", + "libraries/3rdparty/unity/test/expectdata/testsample_run2.c": "9726bdaec7a5c8e99b4e6bbfc41b91c8687665bbafdb617be4514eadc30b023c", + "libraries/3rdparty/unity/test/expectdata/testsample_yaml.c": "17714f87e28c7723608fdc832189965482404e3540e3f3ec55afa7f07054e0a7", + "libraries/3rdparty/unity/test/rakefile": "7bdd33e324a46e8e5cb97a052a2d62dae0c0a7e4c33cce9976e34af316d37007", + "libraries/3rdparty/unity/test/rakefile_helper.rb": "57a77ff52e8e79a9fa30c308465cbfbfba9881ee5871de182abbf92682f16477", + "libraries/3rdparty/unity/test/spec/generate_module_existing_file_spec.rb": "41d0b6bf8255f97e4fbf6c4f5fb2dcc61d846d2ddaf2cad763c1f500b8a68727", + "libraries/3rdparty/unity/test/targets/clang_file.yml": "afbb70db8cc433aca8e6ea3d04d2f5142cc8bd1a8f6e421006038c9601222d32", + "libraries/3rdparty/unity/test/targets/clang_strict.yml": "336cc5344beccd0c3a6c83227b764c8945193b464600ba56ade14c3c44c98b27", + "libraries/3rdparty/unity/test/targets/gcc_32.yml": "734debdb4392b83942cdccfb31ca724a43b923617a8b45d86bf6a1fefa86a7e6", + "libraries/3rdparty/unity/test/targets/gcc_64.yml": "530851623a24956399add9f0c0fe18719eb6dc428c1bec03ae6b255a9d0ae972", + "libraries/3rdparty/unity/test/targets/gcc_auto_limits.yml": "fbd96dc8a94c4de70dae87ff378312b3ee07cb8219d6290af17d36e3b34d0f6e", + "libraries/3rdparty/unity/test/targets/gcc_auto_stdint.yml": "c9ec9f61987603d059d4509f4befe0744f5fa99a137d95be359ddd2c71443281", + "libraries/3rdparty/unity/test/targets/gcc_manual_math.yml": "3bd8b0d4eb9fa693f4cf74fdaf61e31183b85351c4e957577bc8497cdc8f15a0", + "libraries/3rdparty/unity/test/targets/hitech_picc18.yml": "7b2a4ea56f3125fd75bb7d8e9baf1f26706b206f98c6f88e4d4b4091361fc546", + "libraries/3rdparty/unity/test/targets/iar_arm_v4.yml": "3df93ad02fd4e1cc17d28a63f824881eee4f73e1db54e43ff36909dd2f5eabaf", + "libraries/3rdparty/unity/test/targets/iar_arm_v5.yml": "bb6f961bbf3cf2c4651a33bf415818726b4d609c05cb9fdeabe6dc7a94d47e6b", + "libraries/3rdparty/unity/test/targets/iar_arm_v5_3.yml": "bb6f961bbf3cf2c4651a33bf415818726b4d609c05cb9fdeabe6dc7a94d47e6b", + "libraries/3rdparty/unity/test/targets/iar_armcortex_LM3S9B92_v5_4.yml": "8835f98e84e75b920fb9e27c0ebcc9c11f14bff768b382441099a01cbf7a129d", + "libraries/3rdparty/unity/test/targets/iar_cortexm3_v5.yml": "70ba518b050162526cf5cfd3cdc90a00a6aad0d0ef65558612d384c855513d52", + "libraries/3rdparty/unity/test/targets/iar_msp430.yml": "527ef25ba8d5056a8b44fce38302895a1a8ed342331edeed69db067b831c8e7b", + "libraries/3rdparty/unity/test/targets/iar_sh2a_v6.yml": "b99162afd271d76014220cabda53ff3951aae6595b198520eba36ef095e57746", + "libraries/3rdparty/unity/test/testdata/CException.h": "3d791048e28a3a83580dc5cb7a03d918323247128bde97b055e1037924a4a3a0", + "libraries/3rdparty/unity/test/testdata/Defs.h": "309f8524e59399b7e9e5f2a02ab7a1a4e21d6f808bdb05730ad41366412b72ea", + "libraries/3rdparty/unity/test/testdata/cmock.h": "f600e74488bfc56862df2daedce1a3525eaad43ed72c6706817f6629b180a1ec", + "libraries/3rdparty/unity/test/testdata/mockMock.h": "f198c43bad6e541c08b5e32c204d894be499ff005032c3ffa25e7ed7ba176001", + "libraries/3rdparty/unity/test/testdata/testRunnerGenerator.c": "b860abcd7d1b06000a6cdac491016c7396fb3da70fe4f04bca557fdf599136a3", + "libraries/3rdparty/unity/test/testdata/testRunnerGeneratorSmall.c": "f32a9a46a78102474346c7516bdb0401fabef9ee8616d033237a4bc658e3357a", + "libraries/3rdparty/unity/test/testdata/testRunnerGeneratorWithMocks.c": "96b3eba183241dd7fe69045e51aac3b76ef1632db13ad2ac058300ac201f6d88", + "libraries/3rdparty/unity/test/tests/test_generate_test_runner.rb": "bbcfbcd8c45d6c8dcd05fc2400914805d965e378297d536a63276cb2760deda3", + "libraries/3rdparty/unity/test/tests/testparameterized.c": "a3759d06ae748456d37e36bc8c44fe74995f95813c9697cd98cf4f0cfa55f6bb", + "libraries/3rdparty/unity/test/tests/testunity.c": "f8c1a7d15941af4299f3870d8a4311dd738f36d288ac82d1469c87837827bb7f", + "libraries/3rdparty/win_pcap/Packet32.h": "91424a5947374de2ea163bff4e0c033e3f6d1a2a789f3999f6e20c95080ffa32", + "libraries/3rdparty/win_pcap/PacketData.h": "4cb0df826837bf82691e5a98a7599671b259efc512b1c4825accca77d0cfc7a1", + "libraries/3rdparty/win_pcap/Win32-Extensions.h": "81117e8c6de61172df09834f50a1b127de721abb960e25dd25dbaef97d9e48fa", + "libraries/3rdparty/win_pcap/bittypes.h": "f895a46f3d528a66a2489850e478123dd1eedc5e62a3a529e626c3ab08cbabe1", + "libraries/3rdparty/win_pcap/ip6_misc.h": "fccef70161c3607d1cf0128013ee00410d477a581b62bb0d337d77a51d43ec05", + "libraries/3rdparty/win_pcap/libwpcap.a": "6082e9aeb725b2836e4f746527630885d1ec4c4004f81cdc9fd8d5a130097207", + "libraries/3rdparty/win_pcap/pcap-bpf.h": "a24e6a99451cc013cb1b891724fb04b4079251557852f5667f998a342d1b6446", + "libraries/3rdparty/win_pcap/pcap-namedb.h": "97afaf663c4ed4710101d5c6053011e0764642ae1adbffdabc9ee0dcf88874e1", + "libraries/3rdparty/win_pcap/pcap-stdinc.h": "937710c6e5412a5d2cf423ccbf4dfc06fefef17a077aa73b1fd4d1d82ead8fce", + "libraries/3rdparty/win_pcap/pcap.h": "c86912e57dc4da38d36ea3ac0e85b1b42c57548be418773c627043bc69ae8181", + "libraries/3rdparty/win_pcap/pcap/bluetooth.h": "b3ef727f506c30e72ed22a8837d737d75d2858cd7427e7022ab63cfe3dd9d844", + "libraries/3rdparty/win_pcap/pcap/bpf.h": "ea7397eaeaac18a0230aa2f3fecfabf387f2d1135e80ddc6a8eaa0e9b88c5408", + "libraries/3rdparty/win_pcap/pcap/namedb.h": "94cc2e21a83e9fc7a3b159f2fa5cd6c478edcbed05fef13cd9ad08d5364217f9", + "libraries/3rdparty/win_pcap/pcap/pcap.h": "43db459d6d64e995f8a42cba0c5d5515ed5c366e7bdb5fc717f8d14df614769e", + "libraries/3rdparty/win_pcap/pcap/sll.h": "08e56e0ac5747bfe919b22463cfbbfb8355288b32b36ce112cb047df58dc795a", + "libraries/3rdparty/win_pcap/pcap/usb.h": "81c16c743d81f8302fa61ab585ec0e2e29d69844d03f65600054269d6c315246", + "libraries/3rdparty/win_pcap/pcap/vlan.h": "196de3fda8473dde90ee24a682d399245da03a5a6106accf80d97da43900fe4d", + "libraries/3rdparty/win_pcap/remote-ext.h": "9f61998150429f80e5e000b1c9cab44372dbae0546174fcae8771e2e578bb46f", + "libraries/3rdparty/win_pcap/wpcap.lib": "0becdc2d0f2f1e7be3e56cedc9f72578dbac35b347cc15bc031276d10f501b49", + "libraries/CMakeLists.txt": "8732d4b6bebe2923598057249b599a996454dbc992066cba1eeff2d81ccfd38c", + "libraries/abstractions/backoff_algorithm.cmake": "fb8c040adfd1e6f470ae7a485772821a34c922893a014cab2ca92758e8878be5", + "libraries/abstractions/backoff_algorithm/CHANGELOG.md": "d6fa432c08b842f10983640318270202f904ca548764262b7237fe463358c0f0", + "libraries/abstractions/backoff_algorithm/LICENSE": "508a77d2e7b51d98adeed32648ad124b7b30241a8e70b2e72c99f92d8e5874d1", + "libraries/abstractions/backoff_algorithm/README.md": "a52c7ebeb69b7f1968dd159badd9d8fd8bd021ce5107c9d3c8cbdacce42d73f6", + "libraries/abstractions/backoff_algorithm/SECURITY.md": "ff53e3502bc39dac4a7074fe790f663c56d6c7aacd5b66dc648049f685e1e44b", + "libraries/abstractions/backoff_algorithm/backoffAlgorithmFilePaths.cmake": "af161035581eabdcc7da09201ec1316066766bbde90c6e121b73e2661b422b45", + "libraries/abstractions/backoff_algorithm/docs/doxygen/config.doxyfile": "9040341cf47ec88cf3f119cb049124b0bfc53760960263c5e8eef9d07c5a0535", + "libraries/abstractions/backoff_algorithm/docs/doxygen/layout.xml": "555a70789f54c525456ad9d30730614fe7119afb8b81dd8f8067af28dd14f66c", + "libraries/abstractions/backoff_algorithm/docs/doxygen/pages.dox": "a29ec3c55e78ad9f0c2a4751b627da7b4fda1c0cf73d0512453bf4103c6fc558", + "libraries/abstractions/backoff_algorithm/docs/doxygen/style.css": "e3d3b4438744aa4d547bcacc6e64f3fcfc5057b476c5237e5107e6bbe0aac72a", + "libraries/abstractions/backoff_algorithm/lexicon.txt": "2d4aaa7e203e8670274ec2e24fe4785cf94dc7e3efcbe6eb4f3981813e2cf06a", + "libraries/abstractions/backoff_algorithm/manifest.yml": "d8a501ce9e097a8cb5d6fef08e50355302f37837be505bac5d0fecca6a4de7d8", + "libraries/abstractions/backoff_algorithm/source/backoff_algorithm.c": "12d64cd8885f184c364d37f44b47eff9e3801a05f61ea8202578cc9e76e69872", + "libraries/abstractions/backoff_algorithm/source/include/backoff_algorithm.h": "2c053b3ec1ac8ae4b28baac746c4b42eceddd80b5928d958d89b5851e4626b84", + "libraries/abstractions/backoff_algorithm/source/include/stdint.readme": "dd6b448c2e42251785a058360c728511a87282f159819b274ae1a976172ee586", + "libraries/abstractions/backoff_algorithm/test/CMakeLists.txt": "9ae4168a563c9161c92923d9d646bcb6b6b1ff9240a76207b45b34013d845eed", + "libraries/abstractions/backoff_algorithm/test/unit-test/CMakeLists.txt": "a99c7f01dd9b5a719ebd1ed707091c61eac70f21cd54334b250c4f3ce7b40e46", + "libraries/abstractions/backoff_algorithm/test/unit-test/backoff_algorithm_utest.c": "7dafaf38519972354d3a0b7eff5b4ce4f41b3b9e77e759325bb8731ed8c6d15a", + "libraries/abstractions/backoff_algorithm/test/unit-test/catch_assert.h": "925194fa82843169076b980a73064069889f2f7fc1e1ec464fd282b1f689fb26", + "libraries/abstractions/backoff_algorithm/test/unit-test/unity_build.cmake": "0bd532c05dac6876647508256c5c50ff87b2c2017ab9e3cb866cf0722edc1ddc", + "libraries/abstractions/backoff_algorithm/tools/uncrustify.cfg": "55c02144fdaa3d62e03ed97e3e89a54b67d9433a5320ec02ec82e75344b21656", + "libraries/abstractions/backoff_algorithm/tools/unity/coverage.cmake": "44684d66e5193f6c54e47c677c1efd3251f4e83c9893e336918dd90e72c922bd", + "libraries/abstractions/backoff_algorithm/tools/unity/create_test.cmake": "086650d12714429c4130c386417e1aef985421f26c4c82a209ac0d40f71c1cd2", + "libraries/abstractions/backoff_algorithm/tools/unity/project.yml": "12130e50fcf569eaee1c82ebf43c3accfdc599b0f42064ea6819a49f2089eb2f", + "libraries/abstractions/ble_hal/CMakeLists.txt": "1cb8f857cfa06ad053b2724f3e418b81d1dc71ec0647cfe4fb0b706e6fb221ed", + "libraries/abstractions/ble_hal/include/bt_hal_avsrc_profile.h": "d92214761ec8efa7ee86d7804b96f09193006f4aaba672f36476eb455ef57768", + "libraries/abstractions/ble_hal/include/bt_hal_gatt_client.h": "91cd571150e804b11320dce7c8652faac9f7c5aa0ce1f897c7c0120c5f0814b4", + "libraries/abstractions/ble_hal/include/bt_hal_gatt_server.h": "bbc5a583be1f7def664b04d64e470385fb7f4d63bdb3ffcc7e961097fd3e30b7", + "libraries/abstractions/ble_hal/include/bt_hal_gatt_types.h": "5d291bb84617fdc485871710b43edac2a64678ac6352ece3ea858d863213a9a1", + "libraries/abstractions/ble_hal/include/bt_hal_manager.h": "c2e0fa6143dc436c62393ffcbd762ed991db78e783ba9223deb02c6b86aeada2", + "libraries/abstractions/ble_hal/include/bt_hal_manager_adapter_ble.h": "5c93421fd8ea114d82a4b2248c4422efc5c06dceaa09697fc8a94b7e4edb99e4", + "libraries/abstractions/ble_hal/include/bt_hal_manager_adapter_classic.h": "107c84bd346e14271cfb9ea46e438c3ef05d78a28ba762a0e50ab1af8847b0fc", + "libraries/abstractions/ble_hal/include/bt_hal_manager_types.h": "f3640d3ef30ae41070fece9f8a07a65a5ab075f6788e42a1a5524160464167d5", + "libraries/abstractions/common_io/CMakeLists.txt": "f812c17f34c2a06a831a4aa5860f620ce96f65374584c43891bd340478e027a2", + "libraries/abstractions/common_io/include/iot_adc.h": "c98cf0eb1837912d1a2a67d3984ae51a3e3e8c04e382f8e01a1e5867a7ae5a4c", + "libraries/abstractions/common_io/include/iot_battery.h": "906c2faa05c3da45f5d1f8cb2b48d83858b2e84ae5e451f9ae846d4d172cf459", + "libraries/abstractions/common_io/include/iot_efuse.h": "4cac70af098a06e29d07727f170c2cf8e4f531bedb61525daf664482eb49f4e9", + "libraries/abstractions/common_io/include/iot_flash.h": "37a385bac6f08bafbb6822a8a71272d38e2a7ba6fe568dc0c0b1131b0d740160", + "libraries/abstractions/common_io/include/iot_gpio.h": "375f6e0ca9948ff5c273416fabe4c99266726248dee5e26b366f9e1c6e0f90d9", + "libraries/abstractions/common_io/include/iot_hw.h": "6b8fddea2b010eaadcf1da59e639543619643ab22ac532965a2227de383f5218", + "libraries/abstractions/common_io/include/iot_i2c.h": "cf1814f16e1331b6a70793750372cb816eafb698c11d0a90a8b1a525e35fe7c5", + "libraries/abstractions/common_io/include/iot_i2s.h": "65980d6a10324c909bb6dd5d3967f1d28b1d0571bc6db057fea3b1e6797a8c90", + "libraries/abstractions/common_io/include/iot_perfcounter.h": "3c64f4e4b01dae4f777fe0a9f6dbcd292be77502faf2e5384126d7a2cf295406", + "libraries/abstractions/common_io/include/iot_power.h": "6eccb089cb44df0e1cd6db72ab8d416ebacea69f04bf27053fbe018556a5a88a", + "libraries/abstractions/common_io/include/iot_pwm.h": "9f21e7de748e37f516094e11c538080841698be62f9ebfbede2ab45b321406b4", + "libraries/abstractions/common_io/include/iot_reset.h": "4a5ae69482dd917de3d70c15ca75414e2be7fa5759460abc101d66733be1a8fc", + "libraries/abstractions/common_io/include/iot_rtc.h": "39ab81c61df8fe308c16a606aa18c3469377927b286590ae242dd446cb363b8a", + "libraries/abstractions/common_io/include/iot_sdio.h": "74c132d7bb6d5da42b0549fab6543106ac364fbbd65364cc0786dad57f5b3213", + "libraries/abstractions/common_io/include/iot_spi.h": "7b0ebd821abbc6aa149cc7973d6a8a192b0f08e25c42be48d1863d3333decfa7", + "libraries/abstractions/common_io/include/iot_timer.h": "34243af73f1c1a65780c49cc721233166bc20a4782b17c057d4cf542d2b1ef8e", + "libraries/abstractions/common_io/include/iot_tsensor.h": "4173af475651612d7adeba492f976db06dfd741f1efbaa56cf378c28e5ed9478", + "libraries/abstractions/common_io/include/iot_uart.h": "932aed348ce5475301a744814639231b0fc8fde48c973b1ff78a02b2ee7d16c1", + "libraries/abstractions/common_io/include/iot_usb_device.h": "76eaf5a72ebc08a69282283763f2dec31a8fca0fc4dd0aad01f0e03ec9aafc4e", + "libraries/abstractions/common_io/include/iot_usb_host.h": "c3338743bf3ac12fb490611d79a649e89c09acdca4e5efd8c31fb76985997a78", + "libraries/abstractions/common_io/include/iot_watchdog.h": "4ec4e80df956454540631f65e4268ac6d2233d24d4737620a082eb8255e30dad", + "libraries/abstractions/common_io/test/iot_test_common_io.c": "f287ca0bfabb4e3e1f9bd9b6497820fa8aa6a0aed04be84e887e75fa58c762e9", + "libraries/abstractions/common_io/test/iot_test_common_io_internal.h": "ed13fd5be71c7343e35afd7785ff1fae8278c489eae962526b59f0238ceca381", + "libraries/abstractions/common_io/test/test_iot_adc.c": "6ffcc02259d110f30979ed623fadf55ea83dea819ec9d3a55046dab45d35bc09", + "libraries/abstractions/common_io/test/test_iot_battery.c": "ea414d09b5f92e6f273bfbda4b465d395a23238c7c74cda02f2850a854633f8a", + "libraries/abstractions/common_io/test/test_iot_efuse.c": "40d13f2cebdcb6b02924ef8f625374e973b9fad5b0383ddfd94c1d0ace849e72", + "libraries/abstractions/common_io/test/test_iot_flash.c": "0ae659c01b6de4ba7c838295aadbb62fba1863c8e916b1c9923af11d41d83468", + "libraries/abstractions/common_io/test/test_iot_gpio.c": "bd899e1ae0a857b169cfd193e3497acb3c4d2ecc3ea155cbf80abe4f0b131105", + "libraries/abstractions/common_io/test/test_iot_i2c.c": "092e1e7dfef19fd0e62b33b351b3c49c1741fb1c3eaa48c98d9f086fd550baf7", + "libraries/abstractions/common_io/test/test_iot_i2s.c": "fc6493e9987dd1f6cad63bf57d8dfc087de667a148a9115844922c92bf2e40c6", + "libraries/abstractions/common_io/test/test_iot_perfcounter.c": "309dd1867a495d11b92ea7af88d03e839b187224ddeddfa7cc6ab0ca8805d5a4", + "libraries/abstractions/common_io/test/test_iot_power.c": "6c33f453f6967fa5651bc45574965aaf487b1ddccbaba4a0e29053798c9cad37", + "libraries/abstractions/common_io/test/test_iot_pwm.c": "90a8a006c0b8ab50e7333c16fb7d8dcad9b5a05a3832342a27cf5cc4c5092857", + "libraries/abstractions/common_io/test/test_iot_reset.c": "04f7e5729a8a9b0b925fbeb4a1d379a5c612595e90db59c9c0976d0612fa8f6e", + "libraries/abstractions/common_io/test/test_iot_rtc.c": "6f6110be5f6cd01aed51588c6d0b52ff91e493d30cedda6c751b9600ffd1e7bf", + "libraries/abstractions/common_io/test/test_iot_sdio.c": "081e46d9415cbbea3983d5b39a19b305a23053a2b314d3eba0fcb5fcba4dbde5", + "libraries/abstractions/common_io/test/test_iot_spi.c": "976115612ab657049fc4c28a74745be0dbec37c9f353bfcc91061878fe2cccea", + "libraries/abstractions/common_io/test/test_iot_timer.c": "ae88b4253abf9ce6d46025e557d31895c5d362acbb3e0c1498e8775d6116b53b", + "libraries/abstractions/common_io/test/test_iot_tsensor.c": "1dc3cf9f5544872004ab9692878977af38dd8501809d0cf19c4b2ca7bc8738f9", + "libraries/abstractions/common_io/test/test_iot_uart.c": "977ec7a8e53aeb6477d6d6d36fc5234b34d484813b888c632b2c1889c4512cad", + "libraries/abstractions/common_io/test/test_iot_watchdog.c": "d8025884c6843eee92e1d09490f9674abe596d8dd87936aa80a441d69bb324d7", + "libraries/abstractions/common_io/test/test_scripts/adc/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "libraries/abstractions/common_io/test/test_scripts/adc/test_iot_adc_rp3.py": "1427e623936ad97cef2ab2821a274c13065bd88fdddfdea75200926949252167", + "libraries/abstractions/common_io/test/test_scripts/adc/test_iot_adc_test.py": "2887a7ca6321a91bb00c503fcf0f60eccbdb73b3b9a9dfc82117a523b51cf04b", + "libraries/abstractions/common_io/test/test_scripts/adc/test_iot_runonPI_adc.sh": "86f371f2115d6b359d27c656e22ddc8b308476bf9151ccd23579281c58bcb02d", + "libraries/abstractions/common_io/test/test_scripts/gpio/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "libraries/abstractions/common_io/test/test_scripts/gpio/test_iot_gpio_rp3.py": "5072e819e935d56327155b8b3d32149b52de9d9f12427b6c67aae10f7423f720", + "libraries/abstractions/common_io/test/test_scripts/gpio/test_iot_gpio_test.py": "217d919ab1dcbbc99e5b7cae01569e8219ae79d7bd6edf0764ace38d24b9fa55", + "libraries/abstractions/common_io/test/test_scripts/gpio/test_iot_runonPI_gpio.sh": "9f0d1c9fd4c346c88dde88dd692b7a0e88d5da7665bd364c5180e97162c246f8", + "libraries/abstractions/common_io/test/test_scripts/i2c_master/test_iot_i2c_master_rp3.py": "821c577e2a78ab550310fb4727eec32e619899c7b44a4d3552ab6daff60affe0", + "libraries/abstractions/common_io/test/test_scripts/i2c_master/test_iot_i2c_master_test.py": "d4697e5bc20dab76ad494f4fe36b2fa3f495482beeb7e6eafa82f4e6ddab88b1", + "libraries/abstractions/common_io/test/test_scripts/i2c_master/test_iot_runonPI_i2c_master.sh": "baff23f31e85de8a31567f93da2299ea61e6be6c560b7e2d803b0fe844cd525d", + "libraries/abstractions/common_io/test/test_scripts/pwm/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "libraries/abstractions/common_io/test/test_scripts/pwm/test_iot_pwm_rp3.py": "3cb24d95cdb454b176eb0c6e1a61cf07b95859fdb9f14c4b717244385f1749be", + "libraries/abstractions/common_io/test/test_scripts/pwm/test_iot_pwm_test.py": "c95d993bf8ff7e1425224e955f45eb5c2bfe421cd25966d75f2916a9c481be39", + "libraries/abstractions/common_io/test/test_scripts/pwm/test_iot_runonPI_pwm.sh": "a221cd3c37bdec83070fc5b835191dc0405c631770fbf0d5f228082900e586c6", + "libraries/abstractions/common_io/test/test_scripts/spi_master/test_iot_spi_master_pyb.sh": "990cb65c257fc3fbb97c05286fbf3282214deb056429ed6a23f078da2e44eb22", + "libraries/abstractions/common_io/test/test_scripts/spi_master/test_iot_spi_master_test.py": "b6bb2834b8ec4b5c5be59165458567b5447416261cee321215d98311eb4f1eaf", + "libraries/abstractions/common_io/test/test_scripts/test_iot_assisted_tests.py": "695ad3b1c4aaed689e16b65b03fc686ed4b6f168a93ff5e92f26b9fa8bd35848", + "libraries/abstractions/common_io/test/test_scripts/test_iot_test_template.py": "248f70a233930fbf348fc1a7a55a3f7825e67626a265a2e2d6d4c72181601789", + "libraries/abstractions/common_io/test/test_scripts/tsensor/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "libraries/abstractions/common_io/test/test_scripts/tsensor/test_iot_runonPI_tsensor.sh": "f2bd7476ac5785b29f58de13cfbe7f7a2c1ebf8d7bb0f1bff32e36b6c7dae795", + "libraries/abstractions/common_io/test/test_scripts/tsensor/test_iot_tsensor_rp3.py": "6c44faedb3a712570e7821639587ea9ba52a1ca98dbd51b3866a74569b26c9d5", + "libraries/abstractions/common_io/test/test_scripts/tsensor/test_iot_tsensor_test.py": "e940aa613b1f7ecbe3b71bf863f09bb6b25ba64da406108ca076d9933093a34f", + "libraries/abstractions/common_io/test/test_scripts/uart/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "libraries/abstractions/common_io/test/test_scripts/uart/test_iot_runonPI_uart.sh": "304be0c6c2904d9651d32a442eae21c8a440d90426c7b576fdb70a1e80cec0cd", + "libraries/abstractions/common_io/test/test_scripts/uart/test_iot_uart_rp3.py": "e2a51ada857214ea674da0d5be0808338b00131d03e5d22cc4012f1cdb7e8977", + "libraries/abstractions/common_io/test/test_scripts/uart/test_iot_uart_test.py": "5fa064fe610758e5c460708d9c9e379467637ecaff3eb3c483583e80be961258", + "libraries/abstractions/common_io/test/test_scripts/usb_device/test_iot_usb_device_test.py": "9056bec1ba45998aec3cf8e3ba7c86faebdd39841b7b8817ae616d8ec07f37cb", + "libraries/abstractions/pkcs11/CMakeLists.txt": "fd9848967c950d03e223bd427d342e84e578429bf1f7418e6abc7ce2eabe6944", + "libraries/abstractions/pkcs11/ReadMe.md": "e93cec785840baceb712e9717b1e61b5d16b11e4ef896bdd4248fd550f4f2e7e", + "libraries/abstractions/pkcs11/corePKCS11/CHANGELOG.md": "f6956af5fd9e6c27570994bd095125bbb3bc3385006425310e0435fee4091c22", + "libraries/abstractions/pkcs11/corePKCS11/CODE_OF_CONDUCT.md": "34b6c98d5c23127ae6769e95e483e5bf6d3704ae1f0d3ae4e69d15f4ede118b6", + "libraries/abstractions/pkcs11/corePKCS11/CONTRIBUTING.md": "53d9deaabb4f35deb79bb7def2c10ec97bc1fa0f87ba76750555f095df81dc17", + "libraries/abstractions/pkcs11/corePKCS11/LICENSE": "508a77d2e7b51d98adeed32648ad124b7b30241a8e70b2e72c99f92d8e5874d1", + "libraries/abstractions/pkcs11/corePKCS11/MISRA.md": "2d2ec40a654065fc44643294cd7ffec09716f6e78191195df5e88d769db2afc7", + "libraries/abstractions/pkcs11/corePKCS11/README.md": "e748e5ad130237263fddbc826c8a9de3aded14ab190419a9eaec44389f441b4c", + "libraries/abstractions/pkcs11/corePKCS11/SECURITY.md": "ff53e3502bc39dac4a7074fe790f663c56d6c7aacd5b66dc648049f685e1e44b", + "libraries/abstractions/pkcs11/corePKCS11/docs/doxygen/config.doxyfile": "3e05de085481a1f4585edf6ecf6b8b598b25ac1e5289e31fe153376f443874de", + "libraries/abstractions/pkcs11/corePKCS11/docs/doxygen/layout.xml": "555a70789f54c525456ad9d30730614fe7119afb8b81dd8f8067af28dd14f66c", + "libraries/abstractions/pkcs11/corePKCS11/docs/doxygen/pages.dox": "d824322abb45174ccbdde04d9087a3daf23ad9c5401b78eeceacc543ef6bed6a", + "libraries/abstractions/pkcs11/corePKCS11/docs/doxygen/style.css": "e3d3b4438744aa4d547bcacc6e64f3fcfc5057b476c5237e5107e6bbe0aac72a", + "libraries/abstractions/pkcs11/corePKCS11/docs/images/pkcs11_digest.png": "92b850c3d210841e17fd95c3e9c8f7049ce7379ea0a5f63482a02577e4e6dfa6", + "libraries/abstractions/pkcs11/corePKCS11/docs/images/pkcs11_object_generate.png": "de93f2d18ceccb8cad11e8d6ac0b0a724401ef9900d7c6213321f4d2f04b4a06", + "libraries/abstractions/pkcs11/corePKCS11/docs/images/pkcs11_object_import.png": "ffa297b8cffee9d7e5acd6a1c94449886ede948c1c4291add518d29480e58b97", + "libraries/abstractions/pkcs11/corePKCS11/docs/images/pkcs11_rng.png": "6af00134c0f91c2c5112f8b9517e4c1f705b8f27fd835faf614b7d44914ef6f6", + "libraries/abstractions/pkcs11/corePKCS11/docs/images/pkcs11_sign_verify.png": "8003449a654fe1d051ca1ff289c1dd88009ce1c704962177957238d1557603de", + "libraries/abstractions/pkcs11/corePKCS11/docs/plantuml/pkcs11_digest.pu": "5ee805f82c68f09e901c9dd0b944c5e3ab840ec91df2500bc7f6d85e3305e844", + "libraries/abstractions/pkcs11/corePKCS11/docs/plantuml/pkcs11_object_generate.pu": "f03e0963477c8a37af7333513b72b0f0d83a9a49f724a956049794baea5d4f13", + "libraries/abstractions/pkcs11/corePKCS11/docs/plantuml/pkcs11_object_import.pu": "25e535911e40351e16c58745fca0b714c629ddc74e959d7c85ba8b14fb94a2f5", + "libraries/abstractions/pkcs11/corePKCS11/docs/plantuml/pkcs11_rng.pu": "2d32aeefba3adf3f5e992d8ffdc414b01f7d7dd8f3b5419a604f1194f56eec3f", + "libraries/abstractions/pkcs11/corePKCS11/docs/plantuml/pkcs11_sign_verify.pu": "24024c8acc15496eb28b56306a4688bf0d2ff509a352d70961438c31d2988b81", + "libraries/abstractions/pkcs11/corePKCS11/lexicon.txt": "68d43c172f3ff3665e7404e79e41bfc23d98f219d8252a1d98cea79c2469d807", + "libraries/abstractions/pkcs11/corePKCS11/manifest.yml": "99692cd5cb223eaeea7a847934715926ffadb03ba83a4fb038744854cfa6aa75", + "libraries/abstractions/pkcs11/corePKCS11/pkcsFilePaths.cmake": "870da81931f101530009af9ecf30a10c221c52ff8042b4615f220002def06ef3", + "libraries/abstractions/pkcs11/corePKCS11/source/core_pkcs11.c": "ae22ea6e7486563237deb77739f25d91d3039c17b9f562d8941f5ac3beb9872a", + "libraries/abstractions/pkcs11/corePKCS11/source/core_pki_utils.c": "22651f7a426d7e88fcfaf21f78be1f9a6c90686a8bdb3a72be7866e6760088fa", + "libraries/abstractions/pkcs11/corePKCS11/source/dependency/3rdparty/mbedtls_utils/mbedtls_error.c": "d6743b465d3bcd0445ac01d35599929db86fa26e12e6e423a746de67e930d0de", + "libraries/abstractions/pkcs11/corePKCS11/source/dependency/3rdparty/mbedtls_utils/mbedtls_error.h": "775e7bec1fcfac066e834067f4d09c9f077330c09c1120ebf99c55886d99e422", + "libraries/abstractions/pkcs11/corePKCS11/source/dependency/3rdparty/mbedtls_utils/mbedtls_utils.c": "9a7734e796aceaac8f6448b9b0ae7effc97d0fe4b508f7587c93e7620eefcd3d", + "libraries/abstractions/pkcs11/corePKCS11/source/dependency/3rdparty/pkcs11/CONTRIBUTING.md": "400098f5776f8d6289aaa5517f2d33fbc28d98d9612ccf3d4cfc85713d674d95", + "libraries/abstractions/pkcs11/corePKCS11/source/dependency/3rdparty/pkcs11/LICENSE.md": "9bcb0c0cb10c9dbe5090ea05b35ac12160a295c2704b178b2c661c10acfb96e8", + "libraries/abstractions/pkcs11/corePKCS11/source/dependency/3rdparty/pkcs11/README.md": "0e2538782b336a90335524fd19be0e2e21cbd197f161a2aa8f0fc82993eb1609", + "libraries/abstractions/pkcs11/corePKCS11/source/dependency/3rdparty/pkcs11/pkcs11.h": "8bb7aa1aeaa328b6a39913070d6f3d2bdeb9f2c92baf27f714fbb4cbefdf4054", + "libraries/abstractions/pkcs11/corePKCS11/source/dependency/3rdparty/pkcs11/pkcs11f.h": "a85adad038bfc9dad9c71377f3ed3b049ba2ac9b3f37198a372f211d210c6057", + "libraries/abstractions/pkcs11/corePKCS11/source/dependency/3rdparty/pkcs11/pkcs11t.h": "5b58736b6d23f12b4d9492cd24b06b9d11056c3153afc4e89b1fe564749e71a2", + "libraries/abstractions/pkcs11/corePKCS11/source/include/core_pkcs11.h": "5dc967789b0a0ca486a3375dd998268223a19d458cab476fe7ebeace50dde46b", + "libraries/abstractions/pkcs11/corePKCS11/source/include/core_pkcs11_pal.h": "1d9e6c2e40c5db4c303b1cb128110c24d956a40c0a2ced0b7645e2d400d05deb", + "libraries/abstractions/pkcs11/corePKCS11/source/include/core_pki_utils.h": "cdd6a7e3ca84a93157568b0a750cbf7662ca7c96969c8c5a0f0b34812b50e991", + "libraries/abstractions/pkcs11/corePKCS11/test/CMakeLists.txt": "9a7f42e6898e301cff7be5fad0940e943b2b0b727ffa6e7254c38d204c8d6302", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/include/pkcs11_interface_stubs.h": "8c5583f4aa10ed63801ebacd033a56a40836379922957ada84a9d8b1731a83c4", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_CloseSession/C_CloseSession_harness.c": "000c52b1962731b204efba16537327311de4a3f3f419216ec0c9b1dcdb08b2f8", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_CloseSession/Makefile": "ba25679ff87d6453424a69ba6a81814d7f79a76ce8cdb152b356c51521bf8e8b", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_CloseSession/README.md": "a0cccc7291643c078dcc9262424bfd873e05c8e1cf79cad853ea03688b0f6a83", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_CloseSession/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_CloseSession/cbmc-viewer.json": "517e9954c8dc99e75951f773f8d42003ededf99e34a482085d2dcded86a0b5ca", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_CreateObject/C_CreateObject_harness.c": "c68d0c6e1cb4536b6f82a73f03470326d07eb8b24e53be2e5e5a1eac8ee6018b", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_CreateObject/Makefile": "8da1af2e48a682e2fbace91e63fc4c100d65ec03e0f3336a8ebbc6bcbca2d616", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_CreateObject/README.md": "ebbb49ebce87e5800543dc24980d77cc198b56be300cc3276b1d5efbfbc6573d", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_CreateObject/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_CreateObject/cbmc-viewer.json": "cf66b6d47d14a46cdebda992339981f4e44d7adb46b647ce88dd89d7166cf5fc", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_DestroyObject/C_DestroyObject_harness.c": "3c2b8a36cad2a53c7dd8bcd6cb417f36fa59ec01bd984c854d5de67223e62ab3", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_DestroyObject/Makefile": "98c832d626af7568a4b7200b16b8a8a90d3c5d5e0dc7a7f82498889615633258", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_DestroyObject/README.md": "05a9cb29a173c6eae06a64cde3b09d16108ff28102e0a2e9928161bb8a77e4ea", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_DestroyObject/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_DestroyObject/cbmc-viewer.json": "b4749e38566ce5200a4a7502d74ee5b902bc8b87c3ba3154807da977c02e163b", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_DigestFinal/C_DigestFinal_harness.c": "080d6019e4f2ed298b71ad4d63cae7dd6135a409b3a3703ba1e3f68403b0b445", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_DigestFinal/Makefile": "3f7d53f62ce53cc757894455c5b239fa1901fc35002e8561cfbe011f229f189e", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_DigestFinal/README.md": "ae07a5bc5578792f2d13302e1b7b4e923f2f9c3da2c628e3e1849ae7987e95cb", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_DigestFinal/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_DigestFinal/cbmc-viewer.json": "2f30928ae2d546c7b6b432c4a8fa32314ecb6b75ab2d6b7a1432c1a3d33990d3", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_DigestInit/C_DigestInit_harness.c": "f2f694f89c67e8dd83657fac72e7cefae1c5ba2ca81038e758e9ecb0e13e57e9", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_DigestInit/Makefile": "01b1ba464ed5c940a6f2c8cf0b5b47bfcdadf151ade5f0ea7ead197e43c7eaef", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_DigestInit/README.md": "6a80edb197bcb38351783db415332162f74cf8daf892c899ade94d8f1505f43d", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_DigestInit/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_DigestInit/cbmc-viewer.json": "30315c1e7970f152b1f4c7ee6cdc11a6e3c3a3e96cce72baa3bc6b8e6710fea4", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_DigestUpdate/C_DigestUpdate_harness.c": "709914c4962625a458e03f48cec4c94b8e20e78fa1b631d92686bb0cd880a258", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_DigestUpdate/Makefile": "92a7d2a1a80e6aa51b26b717b931a9f935d7812b7e393145ca241b04d71d5304", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_DigestUpdate/README.md": "e87276f75e50f70584d7b0f6d6598b73ec3ddc51dae5139c036f64a4a2bd18f8", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_DigestUpdate/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_DigestUpdate/cbmc-viewer.json": "552e554850b1b5f4d1f6d12e23910e7423bfaf262e278b914e5bb2d46be5b57a", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_Finalize/C_Finalize_harness.c": "50399b62c7c4fd8a19c4f477f3db0ab3e87fa31b79890c81b6d34b04ffc35b8e", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_Finalize/Makefile": "12f7951e44739140a6e12197a8f5cc25593a0c194b1450486d51841ed7854f41", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_Finalize/README.md": "c37266c6eda30560818e78bf8fb19f917169a4f254881ba34db124eec1060024", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_Finalize/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_Finalize/cbmc-viewer.json": "c8c21028e36c8bb7597d4de296f728b95979e1130994c1c6166a72f8c7e927fe", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_FindObjects/C_FindObjects_harness.c": "5eaffb80d46430a8cbcc4a1e3d8492d0b51b8ecb7474bb20d85ba77a987d4518", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_FindObjects/Makefile": "5b793d76fe2667053a740fc04b4f08239a8e31869c7b8c393e6d0baf26a28954", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_FindObjects/README.md": "df745a038c55a96bb866d344d921334486376d0c4a22f333d15d1219a915e45f", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_FindObjects/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_FindObjects/cbmc-viewer.json": "fc9740bf0fb87262de65d6addd5f34f5b4ce4b01955022b86b2198a0492611cf", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_FindObjectsFinal/C_FindObjectsFinal_harness.c": "e6036a9fbdb7183e6b5abfc4ae55947715c8a7b01347647a2f656c955f942917", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_FindObjectsFinal/Makefile": "b40d6a5b70028f5409103987ca826d55917109dd1c6c55dba7c8d49abadc09fc", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_FindObjectsFinal/README.md": "816050cce125d99f415e0db0ed6c348c8956b9a5d4aef4b5502a855f5df9053e", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_FindObjectsFinal/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_FindObjectsFinal/cbmc-viewer.json": "b86dc22e804f1622a0fbdfaa3c562ff2baf737a0c44ef75602772c347f6636be", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_FindObjectsInit/C_FindObjectsInit_harness.c": "7ba390841fc5e0ee75aa80db1b5f27d9cab7673cbc0629c1974ac153ee12f9c3", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_FindObjectsInit/Makefile": "b078df095d04b1c3e6d2658e8fe3392f0e96d392d3b23744553335c98fea6493", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_FindObjectsInit/README.md": "4a059ad6df93d5fb1b7e15e5f79051bc052327cb318ea9fe49273ff417085ab6", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_FindObjectsInit/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_FindObjectsInit/cbmc-viewer.json": "6eb1ac756c25c0023959f7118f0a21a78aae4e4ff6caf54145b7891dd4e12072", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GenerateKeyPair/C_GenerateKeyPair_harness.c": "39b69d786b05b8fbb4585cacfe8da51f91914da122c6915fb79a087d81970a83", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GenerateKeyPair/Makefile": "8a720999a0292c53b7686bfd3a00b27e7108d0da69d2d724966ded69f366af1e", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GenerateKeyPair/README.md": "7c874afa00aff90539cdc8cded1a4709f4479586737885a95cad746a89b2bb41", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GenerateKeyPair/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GenerateKeyPair/cbmc-viewer.json": "11b077df6b66806e3800f79a4d70af45e2649973bf90813d43aea54ae5c4788e", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GenerateRandom/C_GenerateRandom_harness.c": "c679d9c8dad91cf9d4c421778de255dae127812243060acf9cdc82e503c0fc99", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GenerateRandom/Makefile": "41fcb967af3b426540df3cd1c0f609b5535ea946ed8ed1e7c430356832fbc14a", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GenerateRandom/README.md": "966199ba516adc193c13bb5ccc168d8d5a6c5c99b190f9102553f620fd331505", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GenerateRandom/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GenerateRandom/cbmc-viewer.json": "f479830beb79d2603273c6fce30c332e12f858cac03c7fc44b33cc316d48edac", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GetAttributeValue/C_GetAttributeValue_harness.c": "5c4669ed4db44f4d45a870664244d2ea30b1ce9db19d538bc0dc83e0cebd5720", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GetAttributeValue/Makefile": "232749f5a41f7b22f0e6fd714d64a2720c59b3381d9392a9fae1d2918ea1301f", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GetAttributeValue/README.md": "67bb53f7cf7c1ccaa20d5ccccf343c96f30a5b8a04a21efac3c5095cf7be0daa", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GetAttributeValue/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GetAttributeValue/cbmc-viewer.json": "5abca4039da9c48532a686e0ade71094dad1c8393adc3ede3479f9bfacddf5dc", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GetFunctionList/C_GetFunctionList_harness.c": "15381d65ff2fa1e9e2eced990dff5806afcf88832a17a946af04d41934830006", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GetFunctionList/Makefile": "f7182c1c72434a1a692ae0f65b2a90f3c3261088c8e15e540d196dff821ce3d2", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GetFunctionList/README.md": "2b11ffcf724682dbff30cf36c2423673f438adb8c3a49a8d1e7593a96e8ace32", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GetFunctionList/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GetFunctionList/cbmc-viewer.json": "14c58ea1408ec3fb2915c522eeb700d246c25919962c152ebf0b7a0b4f71c616", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GetMechanismInfo/C_GetMechanismInfo_harness.c": "33b666b4f4bff7f304682d1b400a56621c1dd95bc3c85216bc4a3545b6ee615d", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GetMechanismInfo/Makefile": "a308e9f0c74a51961f59a1833eda788f5220b3005550b73f8416fa807890f1bf", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GetMechanismInfo/README.md": "ced8f3cdd84f12a944e8e78c075f7ecb12d80383a97ec6ba8cfd3775d4a1a376", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GetMechanismInfo/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GetMechanismInfo/cbmc-viewer.json": "61eced5be5064ec5cea3ac6ae82e42998152ba0ced5b85e5b8e8ebc7114bc6b4", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GetSlotList/C_GetSlotList_harness.c": "40e491f1097d401e40a6026067a4d79386f62e9f37ff7a62d6fd3e8ade4b32cb", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GetSlotList/Makefile": "96bd0bbd4ac602343fced9e6681a248a3828dccf4ccb35c8073e94f45facff7a", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GetSlotList/README.md": "68c450a293272355d7c766a8ce68ff6e612e8b89a396bd4dfd27bd0beb2a4bbf", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GetSlotList/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_GetSlotList/cbmc-viewer.json": "0f65d8adc32cd8a4dad656adf90da2f04be9405cd7a5dceb5deaedb90f26e4b2", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_Initialize/C_Initialize_harness.c": "5f4a7e4feaeae3558870c951f194662026129f2ba2a151801c19e3fbd3781aeb", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_Initialize/Makefile": "5f67e42b1b8ebf34acdbd472adb2ac26fc078071334ee0d648205c3f41051705", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_Initialize/README.md": "195cc4a40fa03e60f7c1d6b06b2e8d47e4ec20af83c3899bd10e8aecced73c14", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_Initialize/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_Initialize/cbmc-viewer.json": "19b80e9bc21455eb522a2ebac2cedd4f3ca03e3666c28afa34129c2467e7a3b3", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_OpenSession/C_OpenSession_harness.c": "5d8188691c684a0ce2088400d3e78ad4324a0b107e9693d135a2840d93554a54", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_OpenSession/Makefile": "588a14364106fde670cc76ae55c6b9bb292149c8e419b1464d937f6b3d1a3d4b", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_OpenSession/README.md": "c9dae7f719fe21f90017c5527415499a58aeb9999a823400c3a2ef09306ced0c", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_OpenSession/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_OpenSession/cbmc-viewer.json": "e134f76aaec89ed9b05096a5db0fe6267e4109b8e711924a83047cf02324b5b3", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_Sign/C_Sign_harness.c": "4eb8970c70376e883a5fbf87be01fa1154e57f07a1fcdad2c3fdfd2f1d269931", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_Sign/Makefile": "f8f570cf4347a719b235d954f5a5b8d6931acfb50e2607b69203c917f657d9f5", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_Sign/README.md": "002ed4327d24a934f2c1cea3fabe5842ac5abacad7d29f4d1c931820d8620c87", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_Sign/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_Sign/cbmc-viewer.json": "2ef3360705d85923af9eb91d45e0ec36cd2a25d936df1b93ec479e82d5c83b3f", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_SignInit/C_SignInit_harness.c": "3f29ebff4fdbd86428102ee77ff9bd877da7e3b2cfa5f682acd1672529af5305", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_SignInit/Makefile": "5162a3c183d9283804632f5bce8d284fe31ff9820cea1dc34f8a34a43a8ee7c9", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_SignInit/README.md": "a93b2c289c3361b71405dbc465f19dbc061110821ce06699ccbc799ce3b89629", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_SignInit/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_SignInit/cbmc-viewer.json": "517c4b4aba8876ecc40eca3c9f8d415ac1807662240d63949c68709a188b2bd2", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_Verify/C_Verify_harness.c": "dee62efecba8eb3e6b559212fa7ebed74fbab2e248df21d3ddeb974e1c826346", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_Verify/Makefile": "00d1b158a9fce6ab3f4f162f9ef83ceaf175192137e2668bd8604ab4ed9b79b7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_Verify/README.md": "bfd553ffd0203e046c5b6ff2e4232eea89ac8d869fc46b40347eb700b9fff3a9", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_Verify/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_Verify/cbmc-viewer.json": "a7cc85b1a92a68ffdbdc3e090a53a22a71f7911e11e0f42a99e7d03e73d018e3", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_VerifyInit/C_VerifyInit_harness.c": "bb2579a345cb4500cfeed286ec1f8903d0695253a6d76f24cdbbafff30662462", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_VerifyInit/Makefile": "77dfad494d6cc191a96aa02c29e5bec14ba3e345b21ba86568715170eca9cdae", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_VerifyInit/README.md": "3f92966f86687bc7a3eebb701bcbe3616faaa83852c463ee43fcef0fe0ecee9d", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_VerifyInit/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/C_VerifyInit/cbmc-viewer.json": "94fa9fe7cf7e0f0214e6cb1185c3320c98b99050155ba102210518d569d26da1", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/Makefile-project-defines": "0e446c4a1939c7a1f7d0b4cd0fccc5086a42279517f2a9b0562a46b0c0168c1e", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/Makefile-project-targets": "d8c3930590646a4a3b5f5ed446758bf2d8b27ffb742dee196efb816ae2f502f6", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/Makefile-project-testing": "acb51f25870892f177057e7f56e73979e0eeb4967e3280aa160fd33a1a7bb03f", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/Makefile-template-defines": "aa5cc72de5732cddc2a6a4c34cf167b22f911ae2f24115640c27c548638851b4", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/PKI_mbedTLSSignatureToPkcs11Signature/Makefile": "964e2f484d7c9024e1330a46cfd8aac920d0b5a5155144181829414575fe317c", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/PKI_mbedTLSSignatureToPkcs11Signature/PKI_mbedTLSSignatureToPkcs11Signature_harness.c": "05e5b95f130a269f29bf5478cf683851270bcfea3dd4ff12ad6171af06027fb0", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/PKI_mbedTLSSignatureToPkcs11Signature/README.md": "2c7a870a4486b94aac5c193b791b8873a32238bedd9e97e1866a40f34b95934e", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/PKI_mbedTLSSignatureToPkcs11Signature/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/PKI_mbedTLSSignatureToPkcs11Signature/cbmc-viewer.json": "ae981521998f8b93383e757cd73b65a97fb368f54e55823f97922f5910aa6d9e", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/PKI_pkcs11SignatureTombedTLSSignature/Makefile": "bd66ea510bcac8cecce4df6055a1a2f92b9f8f3bdf71435169c09cd25ce1bd3c", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/PKI_pkcs11SignatureTombedTLSSignature/PKI_pkcs11SignatureTombedTLSSignature_harness.c": "ff14d4380c831e1cf57edec17fa291f412053e70158b3255b869b2b868983dae", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/PKI_pkcs11SignatureTombedTLSSignature/README.md": "66f56f51fce06efb6ca634c469300851190b0ca288fce543aec5663e29cf7121", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/PKI_pkcs11SignatureTombedTLSSignature/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/PKI_pkcs11SignatureTombedTLSSignature/cbmc-viewer.json": "dd433cfcab9a3459a384a6eed067d7acd33bc6746115d3a26537af729145e227", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/config/core_pkcs11_config.h": "6cd2e6c9402eb2f27db31c28d4f33a8da809ff89f95b45526211e91136be06cf", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/config/mbedtls_config.h": "cd33e5e18416f04c96dfa0c47be229f660481605b1de83e7cdc38310cfa34209", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/run-cbmc-proofs.py": "aedcb62405ffb22af83c4b4cb38a665b57bfa3ecd102d868056b315306a26734", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/vAppendSHA256AlgorithmIdentifierSequence/Makefile": "38c7e19df64bd84bd82311bbd4df072d812d911752572417ce5146998404eb82", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/vAppendSHA256AlgorithmIdentifierSequence/README.md": "01c8e5258037a425ee8c624610fa8c7cb175a06ebcd09f3e6dfef567845ada65", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/vAppendSHA256AlgorithmIdentifierSequence/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/vAppendSHA256AlgorithmIdentifierSequence/cbmc-viewer.json": "9dcf86bd7364b060d3efe2808fa69a357be3b2d820eaf6a58ae4d2f45894b45f", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/vAppendSHA256AlgorithmIdentifierSequence/vAppendSHA256AlgorithmIdentifierSequence_harness.c": "42d5a3616f2e9f65a375b7dff7bd4b1a07c57436f305abe1c9878e9c311106f9", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/xFindObjectWithLabelAndClass/Makefile": "6cfc39a4358adb3d3511ebfbf0d243f257699799263ea3e1dedd057b329d72da", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/xFindObjectWithLabelAndClass/README.md": "470982187a86faffb3ab2113e382b989f90e61e006dc7fc2d8496ce1819360c0", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/xFindObjectWithLabelAndClass/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/xFindObjectWithLabelAndClass/cbmc-viewer.json": "57fa683720ca548290afec4b1d65e1747fce9ac79171e71a89729eabc959a8e9", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/xFindObjectWithLabelAndClass/xFindObjectWithLabelAndClass_harness.c": "85d20bcce803d1d7216939b48d38fba519002ac373fdd934011af7677da5e7fc", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/xGetSlotList/Makefile": "181c97853cc1c815e8c5ed8ddffc3e74ae3ff88abfb42c6b40354476501edb23", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/xGetSlotList/README.md": "ac8899ec45418bd2f429fb3d48290aa4827f1f2d6ba17987093915b4202ad5f3", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/xGetSlotList/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/xGetSlotList/cbmc-viewer.json": "0ea0109149da4b9e9c9d44b9afaa752d321e793a04c1c2d38b5c15876d01b537", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/xGetSlotList/xGetSlotList_harness.c": "4545ebe31be553e01ce5882c2e57b3dd25252d85d623c67e14436d0260f88c83", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/xInitializePKCS11/Makefile": "0e45e10c7cf9c0f4b656dd1e7e624f592d536f9fb16339b5eab72cd6b41242fe", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/xInitializePKCS11/README.md": "8df4d82bf15fe121fa723ef4ced0d33cfd55826ad8ecbc1967d48696031f40a1", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/xInitializePKCS11/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/xInitializePKCS11/cbmc-viewer.json": "b675c79012c985da8b9c6cc1425e9bab8bb9f920478259eab378ebf77e4668b9", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/xInitializePKCS11/xInitializePKCS11_harness.c": "38d8b160398d65928106c2c9fef77a8cabc7deb51095826fc4a3498682736cf9", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/xInitializePkcs11Session/Makefile": "19f4467fd806088e7b9cec0d006296694abe7381ecd40a1a8c384e447694af38", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/xInitializePkcs11Session/README.md": "accabdfc488d16cd33acb69db2df22adbff9138ed9032b0b0ba01f35f4a51158", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/xInitializePkcs11Session/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/xInitializePkcs11Session/cbmc-viewer.json": "945db08f6b7203c3390a4590b6be0a4683149794ae9dd78b5013120c92be396c", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/xInitializePkcs11Session/xInitializePkcs11Session_harness.c": "d0140fa0ba8ff261bd8ae2c312560dc517b90513b3e0958cc84b27a317cfa5c5", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/xInitializePkcs11Token/Makefile": "be6a6162a7843866c650ec9803bd24315747c23295375eefdcc494eee4dfc021", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/xInitializePkcs11Token/README.md": "7d16a128c8a3695e82a2c3b163b2608d8e7e736767bfecc67b3b9e91f585f6f3", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/xInitializePkcs11Token/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/xInitializePkcs11Token/cbmc-viewer.json": "ba87cfa9d4e52b06f167a03ad2fff865b6ac6eae14a3bc0e9ce9d8058c3f258b", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/proofs/xInitializePkcs11Token/xInitializePkcs11Token_harness.c": "2d0d94a2dd3bb2f029245a80321c4e06d464205d662af3910c6e64289c855fad", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/stubs/core_pkcs11_pal_stubs.c": "b65529f3848015ccbab5a0cf811d60223a232d7d64a8ed19555261da388b615a", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/stubs/core_pki_utils_stubs.c": "1724779c031b2fd84335a4a6fb5691ae7ef603884b028c282f5328af9ec1aeaa", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/stubs/mbedtls_stubs.c": "d4737f01afa91320bab364a477f65a0099a192eea67e55fc6c271ac5e31a1f98", + "libraries/abstractions/pkcs11/corePKCS11/test/cbmc/stubs/pkcs11_interface_stubs.c": "360a1544285b3094052cbd1f54dc0e4cf4c9db2d10c350cd692e834a902799aa", + "libraries/abstractions/pkcs11/corePKCS11/test/unit-test/CMakeLists.txt": "28587d2848f33bded9907160603f4904408aafd35b81b500deb195ce7b4edd9c", + "libraries/abstractions/pkcs11/corePKCS11/test/unit-test/cmock_build.cmake": "9dc11afd4003291373290c70c37da6f0e19f5f3ac56fdac9443c50abeeb42ed4", + "libraries/abstractions/pkcs11/corePKCS11/test/unit-test/config/aws_mbedtls_config.h": "6f8482bf11b08377434547dc13aa2e4d1cbac539f667416d7f995057ea9f70bc", + "libraries/abstractions/pkcs11/corePKCS11/test/unit-test/config/core_pkcs11_config.h": "6941efdfacd4a33864dea7a463423b2b42fbbd70b7a9978b4be0dc99e90efec0", + "libraries/abstractions/pkcs11/corePKCS11/test/unit-test/config/logging_levels.h": "810b8c4754dffa9677db0313abbd9eac6cd14b67ade45e1441e0aeb91085c31f", + "libraries/abstractions/pkcs11/corePKCS11/test/unit-test/config/logging_stack.h": "2d81f65fd7e27f0b9dc34c7544f8a68e32e9935053a10ee7ec8fdbfcadacda6f", + "libraries/abstractions/pkcs11/corePKCS11/test/unit-test/config/mock_osal.h": "db4ae8bed56ed8f3d6646859326905c7d55651dc8d3cde04dab58b3a14675cb2", + "libraries/abstractions/pkcs11/corePKCS11/test/unit-test/config/threading_alt.h": "363ca48b5e23f61ccee72506dc46e76577f5f458456368684869864c92b331f4", + "libraries/abstractions/pkcs11/corePKCS11/test/unit-test/core_pkcs11_mbedtls_utest.c": "a99141c85c58b3510869fce0ee1d712476848fbbcc941ca48db586a2efbdaf92", + "libraries/abstractions/pkcs11/corePKCS11/test/unit-test/core_pkcs11_utest.c": "9870c71bdca8fa2b731a91109d7caf43062a6f09017db07e838a6ea2f2b0fe6a", + "libraries/abstractions/pkcs11/corePKCS11/test/unit-test/core_pki_utils_utest.c": "c3b0c2f3863554dfac404bc4d74a8d0aaad96f27a28c5fb5d5ec1cdbcf6e5b64", + "libraries/abstractions/pkcs11/corePKCS11/tools/cmock/coverage.cmake": "8ac1ac5e6d5628fc8625d57f74249f15f53eba61f8338813d36d3dfa9dc1cf9b", + "libraries/abstractions/pkcs11/corePKCS11/tools/cmock/create_test.cmake": "9b1832fc7a89a99b191f304fdb65d3e3a84ac1aa89cc5b7fc71abe4ec8d72c6a", + "libraries/abstractions/pkcs11/corePKCS11/tools/cmock/pkcs_mbedtls/project.yml": "6940aa5db415867d18ab27fbaad67136bba87a728af16d3e4a317df29362c351", + "libraries/abstractions/pkcs11/corePKCS11/tools/cmock/pkcs_wrapper/project.yml": "bd664576c8428fd2982b8b8d3bab25511398b38a33f13d51f756ee32fe2c0fba", + "libraries/abstractions/pkcs11/corePKCS11/tools/coverity/misra.config": "230eb1d53162dfe78800128f6b47a90328c7ba6dcf81311414515f3cdce28584", + "libraries/abstractions/pkcs11/corePKCS11/tools/uncrustify.cfg": "55c02144fdaa3d62e03ed97e3e89a54b67d9433a5320ec02ec82e75344b21656", + "libraries/abstractions/pkcs11/ecc608a/atca_cert_chain.c": "33f36880ef2c7f66e1296b30e75ec8973a3256b4d7d856827de0565183713709", + "libraries/abstractions/pkcs11/ecc608a/atca_cert_chain.h": "5076fd35a2a40c9379e0d7c5b97eb9eaae6bc16460ef7eebf3be6c468d5b482f", + "libraries/abstractions/pkcs11/ecc608a/core_pkcs11_secure_element.c": "b093fd7e7aaa5f4e6bc16f346510d2006d069869582adb7f2da80aaf4f91c237", + "libraries/abstractions/pkcs11/psa/License.md": "79147b607b79da7884e49f492f0623ad85f7ad30a991f15fb0ab5022e8d5ae44", + "libraries/abstractions/pkcs11/psa/ReadMe.md": "a32d945bfcf103f4e18042a62be40e91114c9cf0a4edbc49464d6e647a083b41", + "libraries/abstractions/pkcs11/psa/iot_pkcs11_psa.c": "e0793cfccc98473f11e61c9166a3c86c22f16533994a5a98b72d5dea3089bdbe", + "libraries/abstractions/pkcs11/psa/iot_pkcs11_psa_input_format.c": "f45ed6ee4912fc36f09ff05deae11feb85561d6bd72b68e3872f05c5588f4c9c", + "libraries/abstractions/pkcs11/psa/iot_pkcs11_psa_input_format.h": "0c4114b6f1934ae33d27f0a09cef894b8891d73c1c2e327e989b493402c2d515", + "libraries/abstractions/pkcs11/psa/iot_pkcs11_psa_object_management.c": "d8b82c6891df0338d7df67f75b2c1ac6a931e3c5411cd85375755d0487f8f95e", + "libraries/abstractions/pkcs11/psa/iot_pkcs11_psa_object_management.h": "1fdc7288cd54755297752fe584d6a3966a7330583c74acda24691cf374703ab1", + "libraries/abstractions/platform/CMakeLists.txt": "20e44ccb13df778f3f938bb19cb876f1cde3a3b7a5d13ae74a2b536cf54798e6", + "libraries/abstractions/platform/freertos/include/platform/iot_network_ble.h": "3a53d18dc0980b0c70baac980653e2246fc6b47e8c7ebf49bea8f5615015205a", + "libraries/abstractions/platform/freertos/include/platform/iot_network_freertos.h": "6ba06cea2088481bbb5a1f63cd35ba61474d81c61a00cca317750a9d7d3541ce", + "libraries/abstractions/platform/freertos/include/platform/iot_platform_types_freertos.h": "3f1fa78bb0b9a275ef4e83df844d4ffc936a36fd67a8e0e6499fe504e93efe41", + "libraries/abstractions/platform/freertos/iot_clock_freertos.c": "978264f245a2ac646ba11ea18a9152208d51ce554dc4d26fb672a0350cf13f62", + "libraries/abstractions/platform/freertos/iot_metrics.c": "70616385eb4c5eea47a718ea0e95cd7f3dbf4b8f243eba60d9d7a2a0f832874c", + "libraries/abstractions/platform/freertos/iot_network_freertos.c": "704c96b6c1c872d7fabaead8ab39995423bada0de8f7636d1a53db6f59aad9ba", + "libraries/abstractions/platform/freertos/iot_threads_freertos.c": "1af294d45841473f9d47245fd1da299171e26118d0fcae8061dbd23ef7055686", + "libraries/abstractions/platform/include/platform/iot_clock.h": "defa2f5319cfaa15321dd7d950f6001b3e48dee14f2797f98c0bf2edbd49afb0", + "libraries/abstractions/platform/include/platform/iot_metrics.h": "4c7213608554b22554f15eb93bd4b76ce76b2169c3719b07687bc3657f99be63", + "libraries/abstractions/platform/include/platform/iot_network.h": "fb4066ad503762e14439fa9bc88ef82fd67efdf165954eeb7240bc12b3f22c84", + "libraries/abstractions/platform/include/platform/iot_threads.h": "a7a70bf277aeea5e8a480008c06331ffc628717b7bddd017351a41ce39c624c7", + "libraries/abstractions/platform/include/types/iot_platform_types.h": "587bae7e9b6ea955877ebd6ba16dec411f452c10d70f8375280d91d0c521cd5b", + "libraries/abstractions/platform/test/iot_test_platform_clock.c": "b1ce5f11acaf5d4f07bdfbc9fa0432dd3a3afb80875eabec1756b404e1832818", + "libraries/abstractions/platform/test/iot_test_platform_threads.c": "09cc9fa4576c6eb33386ac5cafbbb064c34a8be02fa252d0b922ead60d140b3b", + "libraries/abstractions/posix/CMakeLists.txt": "de791cb48fb673efa912fdff73e6a3baa8c0b6b8b04e3bb6bc0db4d48bdf92ec", + "libraries/abstractions/posix/include/FreeRTOS_POSIX/errno.h": "63e28e6669ee2923d2ef6ce8e34630e0d4684805d06392918e18c8c382cc0af2", + "libraries/abstractions/posix/include/FreeRTOS_POSIX/fcntl.h": "c8a72b1167bb503a618003740d9302f9c09d824e88e13a846f1e4d088f70369c", + "libraries/abstractions/posix/include/FreeRTOS_POSIX/mqueue.h": "dc4487732956540662472ebbbdbcb8b484b96c96b520b5e2dc4577a990fd77ab", + "libraries/abstractions/posix/include/FreeRTOS_POSIX/pthread.h": "8ed558699b8333699e133ad8e45683f57aed27930647f963bbce9f75fbebd752", + "libraries/abstractions/posix/include/FreeRTOS_POSIX/sched.h": "a5934933798dd885a42a56086a3392a6d2308f7da050c43d7ead74ed9bd6cc68", + "libraries/abstractions/posix/include/FreeRTOS_POSIX/semaphore.h": "5083acc6f8e4b0665fd2e3dd859695e1275e18d28c31d38fb928653cbc9b0e4a", + "libraries/abstractions/posix/include/FreeRTOS_POSIX/signal.h": "741a1a9c91be63b63ce47067603de2800513270634349b1d2bf04b11f306c42c", + "libraries/abstractions/posix/include/FreeRTOS_POSIX/sys/types.h": "8bf35f1c28ad99dbb69188857a993fba0bd525d5331dcc888267be97a6970a88", + "libraries/abstractions/posix/include/FreeRTOS_POSIX/time.h": "c279ff6e67a368de345be368430527e0c96878d53e7d8f7d259c4b18f119182c", + "libraries/abstractions/posix/include/FreeRTOS_POSIX/unistd.h": "910f4d265a487dca969d708f60d1b822030feb31eff8f1f96fd234b299390099", + "libraries/abstractions/posix/include/FreeRTOS_POSIX/utils.h": "237cbdd8c5edeea07b02d60dcda4300f956aec170b8654c4878c2e3e849fec78", + "libraries/abstractions/secure_sockets/CMakeLists.txt": "c63a1272f25d85aece46ffe8244b9defef75ea48c8e5c16c6f0b22a783616e41", + "libraries/abstractions/secure_sockets/freertos_plus_tcp/iot_secure_sockets.c": "1056ea6d041a4874647d14539be9436f4d22568a9c221ca1d18932613ba3153a", + "libraries/abstractions/secure_sockets/include/iot_secure_sockets.h": "166e49a70c3f7e5f17950753fbeb1f4a20a08dbe2052a2796e4c5b3b838e6325", + "libraries/abstractions/secure_sockets/include/iot_secure_sockets_config_defaults.h": "01fc8396c938a471b6fe004d7606e5b8be7d242e3930b6650ae4c5a656fcbc84", + "libraries/abstractions/secure_sockets/include/iot_secure_sockets_wrapper_metrics.h": "bf52d247e676e330730561a7563226de37c92dbc1cb0e427e507e9cccb97e743", + "libraries/abstractions/secure_sockets/lwip/iot_secure_sockets.c": "168baf5419310d2561dcd84b89d98dd82431a62bc5de47b0128b49cbcee48ba8", + "libraries/abstractions/secure_sockets/utest/CMakeLists.txt": "fcf1096bfbf730be2081055b8fec3ad799e1862a46ddbd91587b2c6882255f1b", + "libraries/abstractions/secure_sockets/utest/include/lwipopts.h": "3d60a1130ba4f01bbae96b39b459d7c307325066ecf76b6a4d32b8a78b337018", + "libraries/abstractions/secure_sockets/utest/include/mocked-types.h": "8bf43e1f5161d5d7e743f238ffd96bc2107c71a39280f7731c4ead071d3eead1", + "libraries/abstractions/secure_sockets/utest/project.yml": "384bbbe2c3494178d374752ba3669e1913e5e0db48d5815fd41d45574091ef53", + "libraries/abstractions/secure_sockets/utest/secure_sockets_utest.c": "b3632fcf82a6def6a9bbedff47f7058b6002e7e19e8e2af75deedcf2bc532c8c", + "libraries/abstractions/transport/secure_sockets/transport_secure_sockets.c": "e720d1e82d1796f7fd95a7c5d59a528876f317c047d2515b5350f39a24e2edca", + "libraries/abstractions/transport/secure_sockets/transport_secure_sockets.h": "04da4c731e435219fedddf85fd085192316fba8cf84f60292069f8a5ae50a82a", + "libraries/abstractions/transport/transport_interface.cmake": "4df5d353d77c20cfadf6c6c0ebd3bd40a9f9051fbf3aa9490a443aa49e2d20d5", + "libraries/abstractions/transport/transport_interface_secure_sockets.cmake": "68cf67f49312b9955ba20979607f5bf104f25da6f169ca594f14b367a52973af", + "libraries/abstractions/transport/utest/CMakeLists.txt": "5c81c12612af44d53c5a902e2214ab4d52a2769d6beb340dc4ca18c1e57bc185", + "libraries/abstractions/transport/utest/project.yml": "a27ed6ecc7dc19dc73a38b7e938048f4fd17f0e46b362cdb585887504f2a8d16", + "libraries/abstractions/transport/utest/transport_secure_sockets_utest.c": "db86ac12bbc2b0a8048d7658cb5184fe766120fa7b95f7a96e8a5be0f381613a", + "libraries/abstractions/wifi/CMakeLists.txt": "8e74e2f750f62bee0e7386b1c94adb07322fc1ae7dbeaef7d9efb54a0d2efb70", + "libraries/abstractions/wifi/include/iot_wifi.h": "0b025389f33184fe47a2e73dd2f756152de927e41fc5e9bca2ff32275b9e1df9", + "libraries/c_sdk/aws/defender/CMakeLists.txt": "c8ec82ad75c882ed8edf8fe8c895a1b95d1f4c2f5351e2eb5459642967eb724e", + "libraries/c_sdk/aws/defender/include/aws_defender.h": "c517864111d2983d26e88739df6f6f8e472cabb952194331d75ff217c651ef50", + "libraries/c_sdk/aws/defender/include/aws_iot_defender.h": "cee3e754740daa68c3bb56a5cfe0b4cfeb3156cf791ecdee218ac26495fd9253", + "libraries/c_sdk/aws/defender/src/aws_iot_defender_api.c": "53138b2c6f7f28568e32e34453166211b3a9a41ca72e931ee5d9508108ffc43d", + "libraries/c_sdk/aws/defender/src/aws_iot_defender_collector.c": "dd0c856a532b1d02eeb8983acbaaefc2d93017b8b2c65e116995e78cb84d748f", + "libraries/c_sdk/aws/defender/src/aws_iot_defender_mqtt.c": "b5027fb61d2365bbcb4242bde75037c12afcb62d6128ca364a012da55dc55913", + "libraries/c_sdk/aws/defender/src/aws_iot_defender_v1.c": "fe3cbc39bd8f71c42038aff5be3ee0386c0534cbc013e5f6e9e352e63042043e", + "libraries/c_sdk/aws/defender/src/private/aws_iot_defender_internal.h": "e5ae1888bcfaaf7d138e6c25dc897bd5be58bb14bb0a38662787f8081fffb435", + "libraries/c_sdk/aws/defender/test/system/aws_iot_tests_defender_system.c": "64c2bb90dd51b5a0bf5ca90dd6ef1af432523a797835cdcf16608af66324ee4b", + "libraries/c_sdk/aws/defender/test/unit/aws_iot_tests_defender_unit.c": "686da80c0aa8314b782411d95efe53a2942bd0b0c70e7dcc55d57f42ddb0dc00", + "libraries/c_sdk/aws/shadow/CMakeLists.txt": "cc67e96a38a0417c67bfb7a6e000a56c37c84c26dfe426549ca7cf19e59b6bb4", + "libraries/c_sdk/aws/shadow/include/aws_iot_shadow.h": "108a5d14e73a7fd3a10eb8f6e7ba1b235defcbf58887209a5b4af2a3c460fa4f", + "libraries/c_sdk/aws/shadow/include/aws_shadow.h": "9c0ca2358c7f9e38b40ecea0aec469a26c1a0fa049ebf3d012f01c4ab291eded", + "libraries/c_sdk/aws/shadow/include/types/aws_iot_shadow_types.h": "278ff857e76963a72b229f486a9df0fa55930373312c153dd4165fddc075d39f", + "libraries/c_sdk/aws/shadow/src/aws_iot_shadow_api.c": "db16e46664aaf4ccbba826972624aa542392e2cd01992c11697a8c1b6573fdc2", + "libraries/c_sdk/aws/shadow/src/aws_iot_shadow_operation.c": "8c426b8915dd1f52044d2f7700f6427e6e916e83d0b4a43371a6c75d1f4fec7c", + "libraries/c_sdk/aws/shadow/src/aws_iot_shadow_parser.c": "56f27be23afde3278e45a16cadad654709f9edc515953fbeeb329605450d155f", + "libraries/c_sdk/aws/shadow/src/aws_iot_shadow_static_memory.c": "4b8ef05038cc3d9d7909b610db1be4550304e6242c8fdc3cda842573da80797a", + "libraries/c_sdk/aws/shadow/src/aws_iot_shadow_subscription.c": "2469963ec2a797fc4701a7e263176e84c74d50e8abb33ce02f8e18b83534c261", + "libraries/c_sdk/aws/shadow/src/aws_shadow.c": "ef64825842a1e3e23d0b9067316c6f7d4cfe8818b26cc535467cd5a78c9eb98f", + "libraries/c_sdk/aws/shadow/src/aws_shadow_config_defaults.h": "7fb46ab0e7d7bf9fae1a65f4dae6900ae9c3d3bbe0747ccd05f76931b70bb669", + "libraries/c_sdk/aws/shadow/src/private/aws_iot_shadow_internal.h": "dfa638605fa05eae3b00236cb71401b05a23008ba241810a1033219c56bbed7b", + "libraries/c_sdk/aws/shadow/test/aws_test_shadow.c": "d14e0e53cc54f4385f3b0f89a9a64f2b93885721bd1ba1ebd3076f39b67aebab", + "libraries/c_sdk/aws/shadow/test/system/aws_iot_tests_shadow_system.c": "c7cb61fe273c1a5b0b376c8546167941df711e48705241644a173106e8785cb1", + "libraries/c_sdk/aws/shadow/test/unit/aws_iot_tests_shadow_api.c": "9e0d845a524ecdb036b959f81b748db823b79ce8fabd06d040a5ff7d945b5387", + "libraries/c_sdk/aws/shadow/test/unit/aws_iot_tests_shadow_parser.c": "c6d6d717f9e5bb941319e39dc444ae3d8d5d658f2ce20b73a9ccafa499fc7d9e", + "libraries/c_sdk/standard/ble/CMakeLists.txt": "0f11f84f0ecda360b6495bd06f39776dd29a06ca59342126427bc6bcc882e734", + "libraries/c_sdk/standard/ble/include/iot_ble.h": "d5af99ca247bbd26ca89c230c0e11f1f635dc9eb912c8854e9db134468f681af", + "libraries/c_sdk/standard/ble/include/iot_ble_config_defaults.h": "b7725d70d2a4c2b8ed2515d4003aec13b2021ce2bbec7cf63078ec5e24737ad6", + "libraries/c_sdk/standard/ble/include/iot_ble_data_transfer.h": "51bbcadcfca661328116a9ebc719b1aa4ff7de2c8725b99a3f14a89084ced6c9", + "libraries/c_sdk/standard/ble/include/iot_ble_device_information.h": "490adc5631cca5a7902bea574a0dd00c30d08352185f4d09900f25a535b45c6d", + "libraries/c_sdk/standard/ble/include/iot_ble_mqtt_serialize.h": "b309581a96ca1a05b2b51ecaf017e611247f4c6af1baef8491d56d4778cf58ce", + "libraries/c_sdk/standard/ble/include/iot_ble_mqtt_transport.h": "604635e6ab30c923b9167b051459593ba845ccc073addf2fef6fb729f08b9d46", + "libraries/c_sdk/standard/ble/include/iot_ble_mqtt_transport_config.h": "b2cabcdd54a9fb05873aeb7dbdb30063b634bb53b75e7eb8d41d8c520b601275", + "libraries/c_sdk/standard/ble/include/iot_ble_wifi_provisioning.h": "900a018fd609063948b5f6fc2395c9ba9a6325e6c387f1ab646bde20873f5d9d", + "libraries/c_sdk/standard/ble/src/iot_ble_gap.c": "c0729d65b549034250c5a055c6709cd063367a95c2805d5929c7998ed8312b93", + "libraries/c_sdk/standard/ble/src/iot_ble_gatt.c": "9c45c461fc3f6757c807591cc4dd9a24933ae876786b7564436cff5f9a4dcd34", + "libraries/c_sdk/standard/ble/src/iot_ble_internal.h": "592901572381ab481ea8e96de24f06342ddb476aae0ce36dc882344891cbff9c", + "libraries/c_sdk/standard/ble/src/services/data_transfer/iot_ble_data_transfer.c": "9f4f5bb1942f7939eaf747c4a19bbde34a3711cf4837ba31056b91c0a66c466d", + "libraries/c_sdk/standard/ble/src/services/device_information/iot_ble_device_information.c": "4addd8491e9b72917cc2fe9f1ac6456ee41ee592b250838a55f717e62bc6e792", + "libraries/c_sdk/standard/ble/src/services/mqtt_ble/iot_ble_mqtt_serialize.c": "46278a662dab57ac35c7163d57a7a720f3777c88678a7da309b34d80e5c89e02", + "libraries/c_sdk/standard/ble/src/services/mqtt_ble/iot_ble_mqtt_transport.c": "ea8c402e8f063f910ec7b9842f3e71620bff6841b2d31406a5592ec320bfcfc6", + "libraries/c_sdk/standard/ble/src/services/mqtt_ble/iot_network_ble.c": "84a8cff83ece4744b688319066cf547edd2d9859a46d754b7dfdffb7f015c54a", + "libraries/c_sdk/standard/ble/src/services/wifi_provisioning/iot_ble_wifi_provisioning.c": "5c1dce5b3c17a683901aff691509759a5256705d4777a0fdd735b9f653357590", + "libraries/c_sdk/standard/ble/utest/ble_mqtt_transport/CMakeLists.txt": "fbbb4c125643824ec9a273acf0072327e219c50f56422e25b9ee4c8e2fb32d41", + "libraries/c_sdk/standard/ble/utest/ble_mqtt_transport/iot_ble_mqtt_transport_utest.c": "7f2530809364e3723a576ca57e2e656f9263a2b530ba22ca40071ad6bfec5617", + "libraries/c_sdk/standard/ble/utest/ble_mqtt_transport/project.yml": "1a92f7ef1d78b693b3a09059a713261e9fc769fafd95814ecaa52d2aafbef7c5", + "libraries/c_sdk/standard/ble/utest/data_transfer/CMakeLists.txt": "f2a7b2993767011f69d2aaf3e82aa8434f360163119d50c91db8f4d2bcca392f", + "libraries/c_sdk/standard/ble/utest/data_transfer/iot_ble_data_transfer_utest.c": "072a0265edd9c5bf4214ee8c3bb895ef68200dddb8ffde43d893134a4ca9916a", + "libraries/c_sdk/standard/common/CMakeLists.txt": "e9c38c6e8510540bfc140333ed4c17113d8949fd49a2a9b882881999a1e6778b", + "libraries/c_sdk/standard/common/include/iot_appversion32.h": "7a772fe6be5d5f177dfa77b63c643a972c276da82817cf4ebbaba8c27312a66e", + "libraries/c_sdk/standard/common/include/iot_atomic.h": "5a974d1154b945590472b40d4e4103ef489441e7f8fa2499ac68e4c1171c7440", + "libraries/c_sdk/standard/common/include/iot_init.h": "8412b5f301aebd15bad900e48748beb406092843b99feffe97f43994a3273d97", + "libraries/c_sdk/standard/common/include/iot_linear_containers.h": "084bb3420d1d0876efa9d8ba04355032f6284038d8d90a1e7b54612270766d81", + "libraries/c_sdk/standard/common/include/iot_logging_setup.h": "d44de83fb5e0c002fae577fd2bf441fd747d548dd2a3b2e6fdf29b95db760890", + "libraries/c_sdk/standard/common/include/iot_taskpool.h": "d4e48a78b25c2d5de9b4ddca83e04eea73178cd0c4276ed72aabe27ced3d397a", + "libraries/c_sdk/standard/common/include/private/iot_default_root_certificates.h": "e144532e63d0d37975fb2a42e0ea68b5f964c4123e48169a031d646381fcc64b", + "libraries/c_sdk/standard/common/include/private/iot_doubly_linked_list.h": "890dcba20e326ad6f1cafc8aeb2504fd83cc0b66f65c129a1c403b651b3b3ae2", + "libraries/c_sdk/standard/common/include/private/iot_error.h": "e436377ac6fe9c522ba83042eff8bc0b6cdb1ace19ca5eba744080b250c5239d", + "libraries/c_sdk/standard/common/include/private/iot_lib_init.h": "e40e08941cc0652d55f281556a3febf9ce2c8a96ea6dc15c79ae4e4fd857911a", + "libraries/c_sdk/standard/common/include/private/iot_logging.h": "b10f162b2cbed3774fc509a6b7c6dad7e284b8c34896e849df085ffcb99a870b", + "libraries/c_sdk/standard/common/include/private/iot_static_memory.h": "1eec32535deede978f84fdc6e81745c495a553801a4c0dc4c5b87fda8852acc2", + "libraries/c_sdk/standard/common/include/private/iot_taskpool_internal.h": "66d2aa40f59b652d8650fc748674820fade00ddf7d2bf8d94c835bd1b6192fab", + "libraries/c_sdk/standard/common/include/types/iot_network_types.h": "c4633ad4e316fb09dfdb24a792c7d7826f76d50117034c49ed7ef4059191288f", + "libraries/c_sdk/standard/common/include/types/iot_taskpool_types.h": "964ed18ad220fd0edcffbdf5d72631d53331ad350faf377a69b39fd68dc858ad", + "libraries/c_sdk/standard/common/iot_device_metrics.c": "79bc39fc4dcb46a4a8ec924d5b46ff0bc7e36306ae25c166649ce33d3e8e7491", + "libraries/c_sdk/standard/common/iot_init.c": "54d9433be558894d8c00e280a8adede90bca510f0fedd70e7f9061d7245d5375", + "libraries/c_sdk/standard/common/iot_static_memory_common.c": "0e3d567dbc4f4f9986c8a1839e7396d7c336ed3fcb183ee5f9157d824ebfb906", + "libraries/c_sdk/standard/common/taskpool/iot_taskpool.c": "3510f2130d79f5277b89592930790d13ad3e3f6b9f7d461dba286f79dcc352a5", + "libraries/c_sdk/standard/common/taskpool/iot_taskpool_static_memory.c": "be38b5a6336584f62740ae968fc2679dc81e61b73fd9a8834808cc50c6cfc224", + "libraries/c_sdk/standard/common/test/iot_memory_leak.c": "472e5f9c8c7b81d25180d462e3acda232d0bb0e294e9ba8529c3f5488f0315a2", + "libraries/c_sdk/standard/common/test/iot_tests_taskpool.c": "4e215e9e21e496c45ec19e5ee3c94ac50eedfd5af155e6b9a062074d193288ce", + "libraries/c_sdk/standard/https/CMakeLists.txt": "eaa04b568b108518def05a314fd14405993dcafa84a923bfb8af5a5f095ce257", + "libraries/c_sdk/standard/https/CODESIZE.md": "da5fddfa49c70b9fb16765ba8f961dcb710ea273cbee574f9db66e132f1c57c8", + "libraries/c_sdk/standard/https/README.md": "b617d62af999ff0a4502ba6eb577c45ee0e9e8c1cd6d4fd416af45847b7e38e9", + "libraries/c_sdk/standard/https/include/iot_https_client.h": "cb48da3608dc3b5afabced2b91009ab2353926f2ee4c9e47e85734ade46e6560", + "libraries/c_sdk/standard/https/include/iot_https_utils.h": "206ed7f94a2746dea4c39574cd1f7f77d68adc2d1d6cf648e61628215db4e710", + "libraries/c_sdk/standard/https/include/types/iot_https_types.h": "07bc744f29952ffd76d702a4bf213259ec8c03689b911cec6ccf97b3c604b22b", + "libraries/c_sdk/standard/https/src/iot_https_client.c": "4718b190a1e0a813e74fba298e748fe6b269efe264df7e04ddbcacea324d76f7", + "libraries/c_sdk/standard/https/src/iot_https_utils.c": "c260e1de293018041954f21e1b63ad1a504743178c9cb4b565224a1302b34bd5", + "libraries/c_sdk/standard/https/src/private/iot_https_internal.h": "27dda02d7ace98f52c42128789bcbf4f7b4714d6d40fd692b7efe4932ca623cf", + "libraries/c_sdk/standard/https/test/access/iot_test_access_https.h": "cb6bec043b6c286701cd5c9f0a63576da507a836f6f9f6a4312eec17c10b7dda", + "libraries/c_sdk/standard/https/test/access/iot_test_access_https_client.c": "cfec4233d7b0b305a4c92606203804781134811ad059b12276dc296e627166da", + "libraries/c_sdk/standard/https/test/system/iot_tests_https_system.c": "359901114a0f0b86968631f42105678065c617293bf35596ef7682cd512020fd", + "libraries/c_sdk/standard/https/test/unit/iot_tests_https_async.c": "efc6523d84e0a5f847beeff3cf3b3c5907cf685524ecca91afebf44a3ed35576", + "libraries/c_sdk/standard/https/test/unit/iot_tests_https_client.c": "40d0fed0677dfe86fefd5acb063783b70ce3fb862666d804174ff551eafd0cfa", + "libraries/c_sdk/standard/https/test/unit/iot_tests_https_common.c": "d9db6a6d5e193db579db73263969c3c9a80c9f46f63923a0441503d447bec91d", + "libraries/c_sdk/standard/https/test/unit/iot_tests_https_common.h": "e27dbbce464c06396d879bcb55117840e5e0eb7d1126f2c461bd584afb59ca5b", + "libraries/c_sdk/standard/https/test/unit/iot_tests_https_sync.c": "c4fc22033a9d707952c6d4e29ba10d69ae643a3126db39269ae48429811b85e6", + "libraries/c_sdk/standard/https/test/unit/iot_tests_https_utils.c": "0d423bd88a7b3c68182c314f79607a4957ad88d317feaa7be76fa8453a7ab822", + "libraries/c_sdk/standard/mqtt/CMakeLists.txt": "69f3d607bc4c06d40fdba5afd750b15f30217d5df6cd4969c4123126806f9495", + "libraries/c_sdk/standard/mqtt/CODESIZE.md": "0f2f8c74f4759e7493dea36b5ed0961efa45aa882242cf62373ae0a31e995aeb", + "libraries/c_sdk/standard/mqtt/README.md": "d0cbc5bb464023a31297b605b1f46471c81837707d3e9a4fa6fc387005710ae6", + "libraries/c_sdk/standard/mqtt/include/iot_mqtt.h": "fcb7c5acf6de75882b2f4ede93eedbd0c2c5c07fcfcaf50e84c52a8e7f9f8844", + "libraries/c_sdk/standard/mqtt/include/iot_mqtt_agent.h": "e65b2575002ed3c91d21e62d977b4cee7949aa9036ff0a81345677a7622037c1", + "libraries/c_sdk/standard/mqtt/include/iot_mqtt_agent_config_defaults.h": "d112705ae65ac708669e97eece9a374b7c9a49ec9196f95ac992851ca0d3ea5c", + "libraries/c_sdk/standard/mqtt/include/iot_mqtt_config_defaults.h": "893cec640eb3725603c6a00f00436773be42967bc30ff58718379866cf1f0c07", + "libraries/c_sdk/standard/mqtt/include/iot_mqtt_lib.h": "19e7ba69d478af0684d188d328ffa88ca4210349fc9c380c774a688a359c73f9", + "libraries/c_sdk/standard/mqtt/include/types/iot_mqtt_types.h": "b1e71bb1378e2c7a277cf2d5fbf5c4f50f83c0cbe261d02392ee6b132821ba2f", + "libraries/c_sdk/standard/mqtt/src/iot_mqtt_agent.c": "b89c4b460099b26f73a3b2b7fcfef1e9218e873743df3e093ed811bd4051d8b7", + "libraries/c_sdk/standard/mqtt/src/iot_mqtt_api.c": "36dca94e0ffd85479bff9c3fe9f366f1e533f1c13afbfc24b72fc24ee5f74364", + "libraries/c_sdk/standard/mqtt/src/iot_mqtt_context_connection.c": "0f0b673ff37a7dcad5369bf59d8a9e2f53b445d1a403546d9f55799f2ba29cd8", + "libraries/c_sdk/standard/mqtt/src/iot_mqtt_managed_function_wrapper.c": "4a68910cb379ce418b452f06c82513af366d511bf1394380886865a5d9e79447", + "libraries/c_sdk/standard/mqtt/src/iot_mqtt_mutex_wrapper.c": "4cd6c0a400b35bd5e5b9e975a8693f724221e7c0f46d8345c0f122a00320d25d", + "libraries/c_sdk/standard/mqtt/src/iot_mqtt_network.c": "efb20cc91aadfccfed0fa32b9cf13138aede7a14fd65eaeceb79c39241a88c4b", + "libraries/c_sdk/standard/mqtt/src/iot_mqtt_operation.c": "ca23cd0be64ae44b64135a8f49004176aaa01451ed37c1be51b2077eff7974bf", + "libraries/c_sdk/standard/mqtt/src/iot_mqtt_publish_duplicates.c": "95b8cdb1a8247e4dd16aa7465d7bcd1207262a64241614eba9b2f88e5c958671", + "libraries/c_sdk/standard/mqtt/src/iot_mqtt_serializer_deserializer_wrapper.c": "7459c0ceb63e5a030d6a8b7820c5ec804391c2a5388c714e6a3fc4997e020bba", + "libraries/c_sdk/standard/mqtt/src/iot_mqtt_static_memory.c": "d0c107420bc0817548df9fa7c5144d28e3a611e8a510ab83b5d031cf509c4054", + "libraries/c_sdk/standard/mqtt/src/iot_mqtt_subscription.c": "cc32732f05bbffb5cff3f716ff0896e799b972baf215e9e3b68569a3e2177500", + "libraries/c_sdk/standard/mqtt/src/iot_mqtt_subscription_container.c": "aec00a74121222ff6e0567ec6dff25421236a0547766685cbffd0ca3c2777d6c", + "libraries/c_sdk/standard/mqtt/src/iot_mqtt_validate.c": "dd49e69f327e953f30faf316612401f22b015c8089684c6e4e5b663885638b8c", + "libraries/c_sdk/standard/mqtt/src/private/iot_mqtt_internal.h": "0c12512e1fc9886ee047175f1879f14e8a0d5dbcae4d7146c6d29bb2b6dc988d", + "libraries/c_sdk/standard/mqtt/test/access/iot_test_access_mqtt.h": "1a88277aed658985c9d9821a5f3b9a031d85c0c97fb0b3ec46f46c05d471599a", + "libraries/c_sdk/standard/mqtt/test/access/iot_test_access_mqtt_api.c": "7fedb1b7387e37548a2e2263e6b8d66edb1e1c6ddff9b4dd888232a9b641fd5e", + "libraries/c_sdk/standard/mqtt/test/access/iot_test_access_mqtt_context_connection.c": "c03c7a033c3fcfc01bfc938ac62e30ec55238947c1ecdad0beb209a7ab7f15f6", + "libraries/c_sdk/standard/mqtt/test/access/iot_test_access_mqtt_subscription.c": "2d4f4ab050f786a4283176321c3e57b44d01e5fc8b0f8d0c5c90daf116c125a9", + "libraries/c_sdk/standard/mqtt/test/iot_test_mqtt_agent.c": "3b2a9f496ee2ea51a6c0cc27164f9105fd6e4d31049e8cbdf9ec9e7f2023a15b", + "libraries/c_sdk/standard/mqtt/test/mock/iot_tests_mqtt_mock.c": "003fa582439011b32a17137b95a27c301d976de8daa76769955778f6c84f20f1", + "libraries/c_sdk/standard/mqtt/test/mock/iot_tests_mqtt_mock.h": "e12ad1bbfd3415fedb0a8ec59bc2ee844645e146695d14e75d2bebf81fd3f20e", + "libraries/c_sdk/standard/mqtt/test/system/iot_tests_mqtt_system.c": "52a075dbae349c8f33d1e0569ad392416ba5f78a6a99aa740f4db7515ad08edf", + "libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_api.c": "d98a8a4aa057d8fb502c53f9246c521607e1186c28a5503486af4acd8a294ab1", + "libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_metrics.c": "e8f711544587fe019e129e67052d0af93280f6ea1690390e197045f79ef1f34d", + "libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_receive.c": "f257d320530b33032865ce94c091109110cb6c29a4b0be0a9c3a9352af8d3d06", + "libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_subscription.c": "03c1e10595e50bf237305743aec64a96a5cb8ef682dccd69d8d1c06e5031b89a", + "libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_validate.c": "618428e8c8806fc4887d92ccccba1149a996a34281ab1640bd42517ddfb49833", + "libraries/c_sdk/standard/serializer/CMakeLists.txt": "dde7183a219ed813b6dad00bdf0423e5cee51c543db53a9365432471da41ad9e", + "libraries/c_sdk/standard/serializer/include/iot_json_utils.h": "5bf1f710e690b9955d90e0df02db2cfabaadea4d750acda4085c25feebbabc4b", + "libraries/c_sdk/standard/serializer/include/iot_serializer.h": "d83dfd2b9cae3df2ce12e1839039d0cbb436a0864b06b0421b2ffa2e3e1ed038", + "libraries/c_sdk/standard/serializer/src/cbor/iot_serializer_tinycbor_decoder.c": "b57282296f0f67cf378fc353a6e93201f6cbc3eb9285370511e9d832a13cdc3b", + "libraries/c_sdk/standard/serializer/src/cbor/iot_serializer_tinycbor_encoder.c": "d9d45720775644c14d3b855c70e77c988bf031c73013101e652edaede696db23", + "libraries/c_sdk/standard/serializer/src/iot_json_utils.c": "31e6f42d53b68ca208463ad9d656343a951618c87053e263cab533448fabc5f6", + "libraries/c_sdk/standard/serializer/src/iot_serializer_static_memory.c": "b29ecc34006e58e985cffc405120941f447ffab98647b5c444937b6c93d0cd88", + "libraries/c_sdk/standard/serializer/src/json/iot_serializer_json_decoder.c": "bd54cf6d88268aef636c4ff52a4c52550dd772181d7967cf0ee27d1c5fd0f541", + "libraries/c_sdk/standard/serializer/src/json/iot_serializer_json_encoder.c": "45d69b8bea3fde62360a18ca10268196931dea88b8ef3ace62af066d5ba67c9c", + "libraries/c_sdk/standard/serializer/test/iot_tests_deserializer_json.c": "f5029fa6d03be5ca750f8c2f469ae5fe6e8d321be84db66867715c3541bc892c", + "libraries/c_sdk/standard/serializer/test/iot_tests_serializer_cbor.c": "476b07305cda499e36a416f057f44a64bd39390b0d73e1f3277020e0837ee4b9", + "libraries/c_sdk/standard/serializer/test/iot_tests_serializer_json.c": "34f0eca4d8793b1ec26706ec153caf9109026fe267ae5fa535849d1bfa222abe", + "libraries/coreHTTP/CHANGELOG.md": "34b11b571fc78fb17b5983b45fdeb7101c8224288764b60b0d703fe2a6c5ce04", + "libraries/coreHTTP/LICENSE": "508a77d2e7b51d98adeed32648ad124b7b30241a8e70b2e72c99f92d8e5874d1", + "libraries/coreHTTP/MISRA.md": "d9cff61e3d19446ec04f3b8cb9c94025e96b874acfdcd86a628d074a7116c236", + "libraries/coreHTTP/README.md": "0ba7725b330809f72a5e46b007c190584cede26a49d752056efee7e2f7a48057", + "libraries/coreHTTP/SECURITY.md": "ff53e3502bc39dac4a7074fe790f663c56d6c7aacd5b66dc648049f685e1e44b", + "libraries/coreHTTP/docs/doxygen/config.doxyfile": "e1fc8d953069f266195e8a368d4d3fbed33698ff281291a0ac4c9041eb176682", + "libraries/coreHTTP/docs/doxygen/images/httpclient_send_activity_diagram.png": "a33657d016e6f9843d7376a9ff07a92f91339a7f7c4f3ad759130249a044a854", + "libraries/coreHTTP/docs/doxygen/images/httpclient_send_activity_diagram.pu": "74faf689ee5221967e60fb44d96821541a03439fa55d9de3213c80f6ca085113", + "libraries/coreHTTP/docs/doxygen/images/httpclient_send_sequence_diagram.png": "416b0c69f36758569f08a6d2eb014f4a00af8ece8d34e15644d074dfbc82da32", + "libraries/coreHTTP/docs/doxygen/images/httpclient_send_sequence_diagram.pu": "b67520292416360bc651de0698f5aa7439af1aa9ccc77e2d7e4064a2313b823a", + "libraries/coreHTTP/docs/doxygen/layout.xml": "555a70789f54c525456ad9d30730614fe7119afb8b81dd8f8067af28dd14f66c", + "libraries/coreHTTP/docs/doxygen/pages.dox": "b8695e449c7b76bfd3d4356e85bb7e34869961a641a2552170604b73d794b37d", + "libraries/coreHTTP/docs/doxygen/style.css": "e3d3b4438744aa4d547bcacc6e64f3fcfc5057b476c5237e5107e6bbe0aac72a", + "libraries/coreHTTP/httpFilePaths.cmake": "c76a4b8a19d025e4116d50289bca63bdf586c5db63a511a38cc2a78bd533f0f4", + "libraries/coreHTTP/lexicon.txt": "9aa31f81d0918f738ae02bf0c3b974b9f00025b42060252b3d16d56e0e498eff", + "libraries/coreHTTP/manifest.yml": "58ae3e1d3f4829d086751f2ccbe212c65c0c14fc8208a4af85f4bf81897f7c06", + "libraries/coreHTTP/source/core_http_client.c": "6bcf63124dda3bbf6a416f62af7a850bfb5866616c757bd62b736989fb77cfac", + "libraries/coreHTTP/source/dependency/3rdparty/http_parser/AUTHORS": "d1a15fcf0453796ee31e900dd5edff35ae86fb6ae4375c2afda8bde0f6fd2f03", + "libraries/coreHTTP/source/dependency/3rdparty/http_parser/LICENSE-MIT": "79e6ba8b687cb54786207342b9b6fcee0ac10218453ed9009b84d949b2233cc0", + "libraries/coreHTTP/source/dependency/3rdparty/http_parser/Makefile": "a3c39510e089c18bd94a6f113c4bc8d010349322972b634c0a6cf6b67ae3e589", + "libraries/coreHTTP/source/dependency/3rdparty/http_parser/README.md": "c44b674196891b01e397c38d4107cf6b9a171ca864c5e05c0c0c2adf7b24edc8", + "libraries/coreHTTP/source/dependency/3rdparty/http_parser/bench.c": "e64bfe50494d661794e515aad502f0154e888fbf6458fb8a18252ad0b5667c84", + "libraries/coreHTTP/source/dependency/3rdparty/http_parser/contrib/parsertrace.c": "e3d5f53fa3f6b26bf1cefc359eeadec35beaf61c6db863d2338cbac278d3a5ee", + "libraries/coreHTTP/source/dependency/3rdparty/http_parser/contrib/url_parser.c": "ecc24f95707866de11b4b6588cbd0bb0728b1def6e95387cedbef98a73a0acf2", + "libraries/coreHTTP/source/dependency/3rdparty/http_parser/fuzzers/fuzz_parser.c": "976630897aa2d81ec8d493ce838c7d26acc9f14de2a1d6b7531d1c6b875f4d78", + "libraries/coreHTTP/source/dependency/3rdparty/http_parser/fuzzers/fuzz_url.c": "539c24a4547e74379d217eb7d09fe6696a1078ef188da0626df5ebe8ab13c200", + "libraries/coreHTTP/source/dependency/3rdparty/http_parser/http_parser.c": "35115393aa0e716b7bc80c1dfb8836b9921161eb47c5052f7a5fc8c282cb63a4", + "libraries/coreHTTP/source/dependency/3rdparty/http_parser/http_parser.gyp": "ca7cc55cc2a81c5a5b3795171e3a953e5c7b10ec2923ec1560e60f914ca18ece", + "libraries/coreHTTP/source/dependency/3rdparty/http_parser/http_parser.h": "68d5fc4bbf8148393b27aba99333a298d2c7d9d10d4e058d236afd1ff7880b1d", + "libraries/coreHTTP/source/dependency/3rdparty/http_parser/test.c": "5fb25742a1bafc286ebf0af35c36b854fdc8152537719d5bd38b81a15e9256f7", + "libraries/coreHTTP/source/include/core_http_client.h": "1e66a360af09e35896730730eef4f833ed461f6ea529fd22aeab9d7ec3e2862a", + "libraries/coreHTTP/source/include/core_http_client_private.h": "993b6469c72766b386dbb882085a4dd14c08e0e626a41b996984f62024770d5e", + "libraries/coreHTTP/source/include/core_http_config_defaults.h": "5bbd51ec7077d04163f7ff6a87a6288f3ff022bb163ea5d3be39d7713d0e50f7", + "libraries/coreHTTP/source/interface/transport_interface.h": "2da8c975445459bb2a203fd3a0542821d84edda257e83a97c7f0e3d0771c5279", + "libraries/coreHTTP/test/CMakeLists.txt": "7b3cf06a23cc29e407522c71d41f7da4c79cc121834d2435b5937ca27c16bfd6", + "libraries/coreHTTP/test/cbmc/include/callback_stubs.h": "65f2d782ea8c1a5e87ae658f7227960aae4f4d33ee4a66c9437764fb83f4c0c4", + "libraries/coreHTTP/test/cbmc/include/core_http_config.h": "9b2fb355ff9c83d542de8910d8eaafbabd4c0cc89882dbc69d324bc552e0d8f0", + "libraries/coreHTTP/test/cbmc/include/get_time_stub.h": "1ee163b68ed0fe8b5a7635b19e5aec23d80c715f7ac998d40f551cf719add915", + "libraries/coreHTTP/test/cbmc/include/http_cbmc_state.h": "d95ddde1b5efde09f4b947e23019ee456cde3fa4365a6b919bd93138f151fc11", + "libraries/coreHTTP/test/cbmc/include/transport_interface_stubs.h": "8d581010b3d155b539821035600f325f4949e2d304e5992ac9f2ce9a61bafa0e", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_AddHeader/HTTPClient_AddHeader_harness.c": "8291d8e55d7475eb28297cddfc71970928221c8f07ae49f79eff9aee4ca47e84", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_AddHeader/Makefile": "4785c9a0604a859efe1fd8f6e0e21d48691f2b2f71552bbba41606f7192aae73", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_AddHeader/README.md": "b62d22babada17a4c4586fbea6e2e38a43ade1c99c5e8ca9cc9351859db888ac", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_AddHeader/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_AddHeader/cbmc-viewer.json": "79243f976acf0096224508e4aea3b1a21905cde37a013cba019926c01a72fd94", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_AddRangeHeader/HTTPClient_AddRangeHeader_harness.c": "b9b0f5f044d9b690929e910027df18f5cc4e75f0363b77c8a28a714f7edd19e9", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_AddRangeHeader/Makefile": "696fcbcac74e3c0d81f691110163511afaf3aeb86966f7fe10894e8c40f1395d", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_AddRangeHeader/README.md": "d45c670793bb1040fd60bd4011978d4b710965d2687a886a8ba126d37653b499", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_AddRangeHeader/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_AddRangeHeader/cbmc-viewer.json": "643d964cea0c59b1f2bc74e6f47a105b688b240d9834e3b94dbcfb5c5b35c2b9", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_InitializeRequestHeaders/HTTPClient_InitializeRequestHeaders_harness.c": "ab044e6287ed7a8094a7bddafda8db39395b1e1c88d5601aaa7a97ab5ba2c8c0", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_InitializeRequestHeaders/Makefile": "b49dd74e7c0dbc9ad4b956f6edcd77c270683fc9c58ce6719c1ee326ff43c356", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_InitializeRequestHeaders/README.md": "d0998cdd8fede8d3fbc25fbeb1769300432760c6c7b37cb316ee631c962c2fe4", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_InitializeRequestHeaders/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_InitializeRequestHeaders/cbmc-viewer.json": "02caa73dd56829a96c16818e47e224b231426e77197bb5d7e13046c51d1bf41d", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_ReadHeader/HTTPClient_ReadHeader_harness.c": "fee82608fae59c41aa6f7ca6a00818c61c0eacbaf4b07877b01481e639f22300", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_ReadHeader/Makefile": "de68643eaff244578112d46e066eda1470096cfacf097bf8069f54a030e5f1f1", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_ReadHeader/README.md": "26d7d349f0743630a40d897a57efd0755e219cc36811f3d91d7116e871d5b285", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_ReadHeader/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_ReadHeader/cbmc-viewer.json": "75813007f1e921249f5edbe51dca521043038a5807c6dce51a8ba7b3ebacc45c", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_Send/HTTPClient_Send_harness.c": "77baac9a00cfdb4f3dda9a99f195ca376154650655d67bfc09fc1d33f8ea75de", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_Send/Makefile": "683a3c3ebfcb4baba232bca75591164d02577631f1ebd494357c8ddec5ad6c1c", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_Send/README.md": "7ee6fbe03820add750b13514fef300624b11fcbb95b58514e5a6c17a5261ccdb", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_Send/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_Send/cbmc-viewer.json": "9d58f867f8aa6d49d5efe999e28d7ead51aac98a1e94220dcba3db1a976427ec", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_strerror/HTTPClient_strerror_harness.c": "6b3bd7ca732afd06e0e1bfa71d1ae7e034a19c301cf581ad6ae8dae8424310be", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_strerror/Makefile": "bb8ac58f1935322d1733ffda57db77dd16bd3cd19e92f2a9f6eaf6db499d0c9f", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_strerror/README.md": "5ede4ac03e17aa89563e4c15440805c6b0fd79f9f70cd18b8a17468b2956c4ad", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_strerror/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreHTTP/test/cbmc/proofs/HTTPClient_strerror/cbmc-viewer.json": "5cae08c7d5dbc14fb74eba0ff22e3f1290a0518ab26693d4626462d25c4ba144", + "libraries/coreHTTP/test/cbmc/proofs/Makefile-project-defines": "10cc06898a3f219fe925dea584e6852a44657475c66639938e78abe8c819f5d6", + "libraries/coreHTTP/test/cbmc/proofs/Makefile-project-targets": "d8c3930590646a4a3b5f5ed446758bf2d8b27ffb742dee196efb816ae2f502f6", + "libraries/coreHTTP/test/cbmc/proofs/Makefile-project-testing": "acb51f25870892f177057e7f56e73979e0eeb4967e3280aa160fd33a1a7bb03f", + "libraries/coreHTTP/test/cbmc/proofs/Makefile-template-defines": "50b3687413c3a9a1e42a62954b1007e270fadbfda068fcb8e796b1862563507f", + "libraries/coreHTTP/test/cbmc/proofs/findHeaderFieldParserCallback/Makefile": "8e182ed7b43d53277b86337bf98878faae435b0ccd4aea3d2b6518c61c521bcc", + "libraries/coreHTTP/test/cbmc/proofs/findHeaderFieldParserCallback/README.md": "76646a1aa4f84d86016d5b19ba860e511c45b223ddb562371fd1d9b54c6a11af", + "libraries/coreHTTP/test/cbmc/proofs/findHeaderFieldParserCallback/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreHTTP/test/cbmc/proofs/findHeaderFieldParserCallback/cbmc-viewer.json": "b9b2b959af9659f644ee219f03fb0f6e3dade520f9eb774905fb1ba5fb8006e1", + "libraries/coreHTTP/test/cbmc/proofs/findHeaderFieldParserCallback/findHeaderFieldParserCallback_harness.c": "703bfe666f7c20778a77b2b60ad0f19bb42d77f2f3065628cb667b27bf539081", + "libraries/coreHTTP/test/cbmc/proofs/findHeaderOnHeaderCompleteCallback/Makefile": "933278fdf885a2baa9075390078b473eb3eb93d1aa91946b92848cc05d9b91a0", + "libraries/coreHTTP/test/cbmc/proofs/findHeaderOnHeaderCompleteCallback/README.md": "ddeda79c19ae2c809f7254813fc3d50ac47a20fb65a4cf6d6e42ff92704c1379", + "libraries/coreHTTP/test/cbmc/proofs/findHeaderOnHeaderCompleteCallback/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreHTTP/test/cbmc/proofs/findHeaderOnHeaderCompleteCallback/cbmc-viewer.json": "fd2db195214019e10708297d144564e6223e61b1a0c72b0c998044cd373e3e98", + "libraries/coreHTTP/test/cbmc/proofs/findHeaderOnHeaderCompleteCallback/findHeaderOnHeaderCompleteCallback_harness.c": "0c8dbba83959ad19f0bd16e45057871bfef08a281e539f65bcb7b51ac89318c3", + "libraries/coreHTTP/test/cbmc/proofs/findHeaderValueParserCallback/Makefile": "f3d17ebe795b6c87075736ef2619bba2e5cc7146c7eacefe30d4d72ca0445036", + "libraries/coreHTTP/test/cbmc/proofs/findHeaderValueParserCallback/README.md": "b9fa2c18150592277fe1910856e9190803d92dc79ed82748aaf0c485b9e5e3af", + "libraries/coreHTTP/test/cbmc/proofs/findHeaderValueParserCallback/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreHTTP/test/cbmc/proofs/findHeaderValueParserCallback/cbmc-viewer.json": "fdf5c633bc18921aaa3bb52c7f7a2a7980b84c5e263683d041b533e84c56e119", + "libraries/coreHTTP/test/cbmc/proofs/findHeaderValueParserCallback/findHeaderValueParserCallback_harness.c": "739e9e0efb0f36015fa3e574b1de907a5bc9ea8278a442a4d1d78393e49452b4", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnBodyCallback/Makefile": "a59febfae8c6d6d3fb8349d81590748584584f089ca7afb626261fabb517405f", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnBodyCallback/README.md": "426235c79fc28e957e9de7ca9e39af9445db22e7803f5272df0b591928a4e64e", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnBodyCallback/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnBodyCallback/cbmc-viewer.json": "4ce59beacd592f7fa25643ef3eaa87473ed164eba214ddff8b77283963962a03", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnBodyCallback/httpParserOnBodyCallback_harness.c": "7aa5d855d0ea0ed897a52ee1ea64032b12766a7e0db3d1e0dbf4ff4711fca414", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnHeaderFieldCallback/Makefile": "ac0726618716e62af180a2bf0bed91441691004b64749bffef506ded94333210", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnHeaderFieldCallback/README.md": "61dccddd922a37b7fa9468dce966110b8023ffa29de0f96acd17824483a9e321", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnHeaderFieldCallback/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnHeaderFieldCallback/cbmc-viewer.json": "2cb88cfe2685c7c4c6a88f60c6c9f819c88786c863563279a9f016c1cedbbeb2", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnHeaderFieldCallback/httpParserOnHeaderFieldCallback_harness.c": "afe03b974deebf787a95cf5692ffc7028134847d5ee2ab013ce43c76ee5b7b6f", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnHeaderValueCallback/Makefile": "ddb2dcc12b7901058995e4acf485929d9b1f3100e45e7363a31ba5409ddf2e04", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnHeaderValueCallback/README.md": "8c3e06c2491cdb832f04bab5442dc362c9e09fb3a1aef58d8ef4940cbe47afec", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnHeaderValueCallback/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnHeaderValueCallback/cbmc-viewer.json": "23ec4249ee5f16dc714fcef1fa7f14391fc27040c8582c0e8bfcfe44c890eb99", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnHeaderValueCallback/httpParserOnHeaderValueCallback_harness.c": "d1a13b295b3b1ffa12d0f0d92507858b89bcd1d8a16cf98517a13264cb58d7e2", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnHeadersCompleteCallback/Makefile": "7ce1bc110843b76c990a4b93d0ead190c164d3561a3351ac401721e20133b1db", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnHeadersCompleteCallback/README.md": "1be6ba12508bac97a06f897faf96250bf1f04afdb6d6759ecdeaae34da0bf38b", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnHeadersCompleteCallback/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnHeadersCompleteCallback/cbmc-viewer.json": "6f34f80d9db904eb18457219e39374e4105ac4b02f12558e75136f9004e4bf3d", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnHeadersCompleteCallback/httpParserOnHeadersCompleteCallback_harness.c": "577f26d6f00407ab7e022e1b08373df608003d55ef6a338fdfe5eaa7c53bf2f3", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnMessageBeginCallback/Makefile": "b4a6efd1d52d70f3ef49f2da113981a8d7c2db4548be09a20428d535b6a16e71", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnMessageBeginCallback/README.md": "f787909d29ebe0f2b9c3d45fd9074a4069af098f786b793c3bbbe55d9f55d6c1", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnMessageBeginCallback/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnMessageBeginCallback/cbmc-viewer.json": "36136bab4783f0c761bf69adb79c19feb23c7079310c9546512680087d4edf9a", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnMessageBeginCallback/httpParserOnMessageBeginCallback_harness.c": "e474f562ab3359c2a66a598653bcd8afbe37bf2a70686811c833d3d7157bc8a7", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnMessageCompleteCallback/Makefile": "c5174b7cc970ae5778ac317988a7f3837f0e7d935b3e5afa6396b659b803c97e", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnMessageCompleteCallback/README.md": "57ae45864f026d4cd3c82ce6b258d063d81f6548e49eca1a80adc5bdddb132ab", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnMessageCompleteCallback/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnMessageCompleteCallback/cbmc-viewer.json": "efdc22d03e3ce5ef734a3079c252b3d913f33768ef269cf838f54efb6f62dabb", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnMessageCompleteCallback/httpParserOnMessageCompleteCallback_harness.c": "84cc8356ad955eac7c833edd3adea4d2cb2d56d2ec774675723f93b139e37e90", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnStatusCallback/Makefile": "702888ff9c0f9e7cc6f176edb536507d166384206f3213ab7f9f65a0b02ce531", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnStatusCallback/README.md": "838b83f4e48e15433cbe30ffca9983afc63436736b5630909e452df90b2ca90d", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnStatusCallback/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnStatusCallback/cbmc-viewer.json": "b92161eadc17e6b6c0fa367c09d87a0126d9e9f4baa3fb83e40f6dc92157f436", + "libraries/coreHTTP/test/cbmc/proofs/httpParserOnStatusCallback/httpParserOnStatusCallback_harness.c": "27265146a3e9f4b04fdabb9ddbaf318be9cba29a6837eb1eff3f92d5cb5e18bb", + "libraries/coreHTTP/test/cbmc/proofs/run-cbmc-proofs.py": "b37b71fb8ccf4b101ea1ffc65107c857f45fa6e228f1eb9e2041c017efd3319c", + "libraries/coreHTTP/test/cbmc/sources/http_cbmc_state.c": "5976b1b97529b152920b07cbd54e1150b42dde2d60d9ab283d17df128447c180", + "libraries/coreHTTP/test/cbmc/stubs/HTTPClient_ReadHeader_http_parser_execute.c": "a187ba00dfce7b639facc486d860503ab16baa0884a6bf319134a5796375edfb", + "libraries/coreHTTP/test/cbmc/stubs/HTTPClient_Send_http_parser_execute.c": "cf0adf0fc770b930e8b013cae520a80ec2b58a6a72c750850dd09a884d1b4dd7", + "libraries/coreHTTP/test/cbmc/stubs/callback_stubs.c": "3f4c2000d9cdbaea78ac144f005a78fb3318c43cf6de9d9a0d0dee203f2bdb2e", + "libraries/coreHTTP/test/cbmc/stubs/get_time_stub.c": "75d4dd4dc34b7f645133e6765a6c41cb1ada919128ec8c14a12a3e5f09b65c6a", + "libraries/coreHTTP/test/cbmc/stubs/httpHeaderStrncpy.c": "42e222346153400ba3f935b36a17cb88889434c1c07251da7963919461bceb26", + "libraries/coreHTTP/test/cbmc/stubs/memmove.c": "da8696b26e831c2d1ee285987adddf39f85feca80fbaf8e822fb6688047d0863", + "libraries/coreHTTP/test/cbmc/stubs/strncpy.c": "6095eab84fadb00b560d0886e1b2830beba0a85bb099b39a62092f0f1f19d9e8", + "libraries/coreHTTP/test/cbmc/stubs/transport_interface_stubs.c": "9cbaf9f59346814225ca51b016a1d70ff66667a0991b43e3ee2a152728f40325", + "libraries/coreHTTP/test/http_parser_build.cmake": "06b97e8eeda41b3ae20a4b8e3736813a776221810ff70f50a7decebd7de19b34", + "libraries/coreHTTP/test/unit-test/CMakeLists.txt": "b6641669155f8981bd14c6d198ef624ae59ef84787e069ec1c1bebc8e08b9556", + "libraries/coreHTTP/test/unit-test/cmock_build.cmake": "d73f758fdc599d6abcd447dbbd05331a14615eeb631b22cf5101b8a3d4eeebc2", + "libraries/coreHTTP/test/unit-test/core_http_config.h": "10e9626505ebfbdfd001e13f5975891054276d7a9b0f2998dbf3cef86f87ca31", + "libraries/coreHTTP/test/unit-test/core_http_send_utest.c": "0b9465e902d2f9df9d4fafdbcc25ea4b0e0b9c131c2a9d9939a33f2b7c912ca4", + "libraries/coreHTTP/test/unit-test/core_http_utest.c": "3ed2578a9b82c16694e97f75e4ec0f316c9215c6122f37b1837ac9862e41495a", + "libraries/coreHTTP/tools/cmock/coverage.cmake": "8ac1ac5e6d5628fc8625d57f74249f15f53eba61f8338813d36d3dfa9dc1cf9b", + "libraries/coreHTTP/tools/cmock/create_test.cmake": "41dc66ba43772ccbcc59871e16ebc60b8671875e0e59d9068313be0aac1f25b2", + "libraries/coreHTTP/tools/cmock/project.yml": "805074ab6dcf01b29aac19ab1964b70227d0f7013b5b755dbf5c17ae66e6a0d6", + "libraries/coreHTTP/tools/uncrustify.cfg": "55c02144fdaa3d62e03ed97e3e89a54b67d9433a5320ec02ec82e75344b21656", + "libraries/coreJSON/CHANGELOG.md": "6c16b6db078b49a243b6e7c05492afa6c131ef36aa809ba5acb582ce0d6c9332", + "libraries/coreJSON/LICENSE": "508a77d2e7b51d98adeed32648ad124b7b30241a8e70b2e72c99f92d8e5874d1", + "libraries/coreJSON/MISRA.md": "616fc5ab84e4b5dbe75b1e4b7aff3a6dbb187c73c1943a00b78a4683cb64dd7e", + "libraries/coreJSON/README.md": "8bc7734322acc3f827838e4d3ff6370e81f2f890adec3a68f4ea91162e148116", + "libraries/coreJSON/SECURITY.md": "ff53e3502bc39dac4a7074fe790f663c56d6c7aacd5b66dc648049f685e1e44b", + "libraries/coreJSON/docs/doxygen/config.doxyfile": "0e7200549685238cf88c89bb3d7c9b4491aed7ff538f18fe49aae1dd2083eadb", + "libraries/coreJSON/docs/doxygen/layout.xml": "555a70789f54c525456ad9d30730614fe7119afb8b81dd8f8067af28dd14f66c", + "libraries/coreJSON/docs/doxygen/pages.dox": "8e6306c157d181618a06030628c953ce198c5880cfb8ca27b42e4bb32d898eb7", + "libraries/coreJSON/docs/doxygen/style.css": "e3d3b4438744aa4d547bcacc6e64f3fcfc5057b476c5237e5107e6bbe0aac72a", + "libraries/coreJSON/jsonFilePaths.cmake": "f32f3a92f044c43d37eeb359f23efbdbd428ff643b1778c5381d1fbdc353cf1f", + "libraries/coreJSON/lexicon.txt": "d44dce8b866dfee032b593d562428e366777d9675c8cbe551de3ff8a6cd928e3", + "libraries/coreJSON/manifest.yml": "55e82e0f8afc5317954eaa807de33060fc377bbb573618ddee825a45d1474ea8", + "libraries/coreJSON/source/core_json.c": "4409f01c1feca9a152669abcfeca27bb276755931d2aee84ccc62ef4c2a2d1e1", + "libraries/coreJSON/source/include/core_json.h": "95f1741edb7039ba101d444a3efdcda46157a1792eafbbb4c47023427fd28966", + "libraries/coreJSON/source/include/stdbool.readme": "3b5fea454a7ffd75a0dc1a752e10ab00f56e9f07141a7a1cd420b0ba3a979090", + "libraries/coreJSON/source/include/stdint.readme": "dd6b448c2e42251785a058360c728511a87282f159819b274ae1a976172ee586", + "libraries/coreJSON/test/CMakeLists.txt": "f22296561886d698c1672c2d5df2e94c34363b8a40d42985fc71abc5640ddcc6", + "libraries/coreJSON/test/cbmc/include/core_json_annex.h": "8e10b277e200d09ac3e14460102933c5d35471f2ee5383a1388919ad857f1912", + "libraries/coreJSON/test/cbmc/include/skipGeneric.h": "71b471afc11837c9fc7e452f383fe5419b8ece257a90ce2ed4e7d92705ab090c", + "libraries/coreJSON/test/cbmc/proofs/JSON_Iterate/JSON_Iterate_harness.c": "db28221f3ccfb5c4203183ed29108f00b83227805cf2682f8a7c2f051fb069c3", + "libraries/coreJSON/test/cbmc/proofs/JSON_Iterate/Makefile": "77738d5901c8915025ef1729f85cb7369ddb6acc7e9a969b54b2f23f7e7f258c", + "libraries/coreJSON/test/cbmc/proofs/JSON_Iterate/README.md": "7bd5e4d69a5b4548ca6810f69fa07186c2e26b44af20b6abdb38266a9d5566ad", + "libraries/coreJSON/test/cbmc/proofs/JSON_Iterate/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreJSON/test/cbmc/proofs/JSON_Iterate/cbmc-viewer.json": "39a8e80bc7a1eb7eaf0bcf0bfdfcdcfec81ef0b5072eb7679bb39df71b3f16bf", + "libraries/coreJSON/test/cbmc/proofs/JSON_Search/JSON_Search_harness.c": "17ca937e25e1b97cb0df5316f35d39fa73faa050cf503ba819eee5b2ef1bca4b", + "libraries/coreJSON/test/cbmc/proofs/JSON_Search/Makefile": "73b7bc81d143a9482379dab0a83a9e3f0afc83fd8bc8b4440a5b9e7892df69b6", + "libraries/coreJSON/test/cbmc/proofs/JSON_Search/README.md": "a965351dc787454d41311dff7736ff7362d36b45a6dbbc9ff7151342a3e43104", + "libraries/coreJSON/test/cbmc/proofs/JSON_Search/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreJSON/test/cbmc/proofs/JSON_Search/cbmc-viewer.json": "6da77d4bf12527d3e501027861e38907084f4d23c6ce122d4da4d94dcd33a5a3", + "libraries/coreJSON/test/cbmc/proofs/JSON_Validate/JSON_Validate_harness.c": "90986194c3e783cdaf2faea14d3d6c9a4a993c1970bc23d199553e27a5a6a355", + "libraries/coreJSON/test/cbmc/proofs/JSON_Validate/Makefile": "517644e63575deaf71c485a6383000b9e948f0dc3148ac746c4ccfbac45643fe", + "libraries/coreJSON/test/cbmc/proofs/JSON_Validate/README.md": "b59f599efc875baf43bec04bbf8b8128035d4029384eef85e791220652556a6e", + "libraries/coreJSON/test/cbmc/proofs/JSON_Validate/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreJSON/test/cbmc/proofs/JSON_Validate/cbmc-viewer.json": "2d3aff70830a307ffd0ea58660969c781f4cec87116de38cc6f39b97ae7aef0e", + "libraries/coreJSON/test/cbmc/proofs/Makefile": "42af9f1f05522517bfbddbf31e44fc8cb2356f1bb0ad8d40bc6d9f317c046e95", + "libraries/coreJSON/test/cbmc/proofs/Makefile-json.common": "9638337492da33c3892e0b27c238666a44bd14adda49b30a2ff92b632b45387f", + "libraries/coreJSON/test/cbmc/proofs/Makefile-project-defines": "fd69da4e6c6df9b44d9dd5808117deb730a4cc7407a96f84ee7097fc5bbf3b30", + "libraries/coreJSON/test/cbmc/proofs/Makefile-project-targets": "cf0f30169e817afc81cc8d161d4bcc336f369392db04b81c43570fffdb57ca6c", + "libraries/coreJSON/test/cbmc/proofs/Makefile-project-testing": "acb51f25870892f177057e7f56e73979e0eeb4967e3280aa160fd33a1a7bb03f", + "libraries/coreJSON/test/cbmc/proofs/Makefile-template-defines": "50b3687413c3a9a1e42a62954b1007e270fadbfda068fcb8e796b1862563507f", + "libraries/coreJSON/test/cbmc/proofs/README.md": "142dc28dad300138bed3a174bdb7ce714f1c6a882299440e63552e2bebd2f7d0", + "libraries/coreJSON/test/cbmc/proofs/run-cbmc-proofs.py": "b37b71fb8ccf4b101ea1ffc65107c857f45fa6e228f1eb9e2041c017efd3319c", + "libraries/coreJSON/test/cbmc/proofs/skipAnyLiteral/Makefile": "bfd696dd9aaf2ce7b0c486c3dae2e181438e83727c76dd1cf34559293bc2e0d8", + "libraries/coreJSON/test/cbmc/proofs/skipAnyLiteral/README.md": "7df172f374b3f15a458a9fa766ba5e79687549f2dcf501d8d7de9aa5290efc2f", + "libraries/coreJSON/test/cbmc/proofs/skipAnyLiteral/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreJSON/test/cbmc/proofs/skipAnyLiteral/cbmc-viewer.json": "fae6047e1eed0cf84842c64e6fb697d295bb4cb3b4c09b8314c306c3fc6462ae", + "libraries/coreJSON/test/cbmc/proofs/skipAnyLiteral/skipAnyLiteral_harness.c": "f16bbd9c20c9b63e165907f1a9a1f93a2aac02c9efbeeac9f00c9d6fc7882545", + "libraries/coreJSON/test/cbmc/proofs/skipCollection/Makefile": "0349bae0eadee7229072a5bdeda767e0d85ea4dd56f1829890c7957ea283e0e8", + "libraries/coreJSON/test/cbmc/proofs/skipCollection/README.md": "4314646b3917f891cfb5ca83b7862bb9412434bc7b156f8337dd6deaf4b4751f", + "libraries/coreJSON/test/cbmc/proofs/skipCollection/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreJSON/test/cbmc/proofs/skipCollection/cbmc-viewer.json": "be80ad3ea1285e22419058ed98c05d8159994755fa4c6bafb015d5d63f065128", + "libraries/coreJSON/test/cbmc/proofs/skipCollection/skipCollection_harness.c": "f2140b46a6f776d3995b3393b8b82c3a8adfc3d02beffcaf060e196a0670fb3a", + "libraries/coreJSON/test/cbmc/proofs/skipEscape/Makefile": "2c355113aec48c5d4c4dbdc16fef7601c174011b61920e1047e6c55487d147da", + "libraries/coreJSON/test/cbmc/proofs/skipEscape/README.md": "3e5425772da09445abb5d976a789941ea1233744a717887165efb7a89f87ba2f", + "libraries/coreJSON/test/cbmc/proofs/skipEscape/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreJSON/test/cbmc/proofs/skipEscape/cbmc-viewer.json": "6318ff51b7058066c99a87b99194b1d65d4a33d77a83da3dc4fad6327778b29f", + "libraries/coreJSON/test/cbmc/proofs/skipEscape/skipEscape_harness.c": "2a1a83bcbf3e2c766d71a3031b1ce519342b014456222692b3ed091740cd034a", + "libraries/coreJSON/test/cbmc/proofs/skipNumber/Makefile": "20ffa32b03006ec004d968f3984567be678ce81b8a4ae85c250f8a3630c12666", + "libraries/coreJSON/test/cbmc/proofs/skipNumber/README.md": "0d4f0d613efe747e39bac8874b639129b74f164fcb017cc8aa1acae9e0da8b0e", + "libraries/coreJSON/test/cbmc/proofs/skipNumber/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreJSON/test/cbmc/proofs/skipNumber/cbmc-viewer.json": "13bd089ecb4de1a6edca24af3bb2d2dbf124681e71a50539bda9cb85c502b16f", + "libraries/coreJSON/test/cbmc/proofs/skipNumber/skipNumber_harness.c": "cd1a8ca3bbfda7297460a88f10514686e80cee27e9f2fa596bb8005226018fa0", + "libraries/coreJSON/test/cbmc/proofs/skipSpace/Makefile": "825e917450aeaf3536995a43b84e6b846191ff976e7e3b789f8cbde804d8e319", + "libraries/coreJSON/test/cbmc/proofs/skipSpace/README.md": "620573816baea73974121fb4415ad4dfca463a38e925152aa3d4e2b04a53d122", + "libraries/coreJSON/test/cbmc/proofs/skipSpace/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreJSON/test/cbmc/proofs/skipSpace/cbmc-viewer.json": "3a3db6ce8ebe463f90a95bb9b984bb9c8c0a8c346dfe3fd9f1e736e12bac8782", + "libraries/coreJSON/test/cbmc/proofs/skipSpace/skipSpace_harness.c": "1334799a73aef3cd60a934f1d65d10be36a2200a2225f0ac80d0e9c0dab31188", + "libraries/coreJSON/test/cbmc/proofs/skipSpaceAndComma/Makefile": "8759e841c7a053a9117758370b768561e85baa72919bff3ed6aed65178cf8658", + "libraries/coreJSON/test/cbmc/proofs/skipSpaceAndComma/README.md": "acbbf3b27c2f02885f9b5c92f47208f335fb54eb4f730a7b73dad404e7c6305d", + "libraries/coreJSON/test/cbmc/proofs/skipSpaceAndComma/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreJSON/test/cbmc/proofs/skipSpaceAndComma/cbmc-viewer.json": "1de624ce0d5cdfb47f4e60861fad02c9ecad2cb1d825cc4ff7cbe438f32ee2ec", + "libraries/coreJSON/test/cbmc/proofs/skipSpaceAndComma/skipSpaceAndComma_harness.c": "3e8eadf67d70396fe80dbd288c6ee598db34696b47be92270f455aa9ba435e70", + "libraries/coreJSON/test/cbmc/proofs/skipString/Makefile": "84a027e8b6ab7744bba40d2889dfb218bfc45f3d18aa91595e09557d3d1a24b1", + "libraries/coreJSON/test/cbmc/proofs/skipString/README.md": "1bc095eaac3f4f5945a7dac68dc5baf969dc18a4dee99423da6bbdf779a9387c", + "libraries/coreJSON/test/cbmc/proofs/skipString/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreJSON/test/cbmc/proofs/skipString/cbmc-viewer.json": "2ca367bb82a31b0e2758e773bc28b7360cd54917696fa019b35a1ed401228cbe", + "libraries/coreJSON/test/cbmc/proofs/skipString/skipString_harness.c": "348a4b1637233ff4c1d9989673e39c4757026dd7d5a219ba40c64f334c111438", + "libraries/coreJSON/test/cbmc/proofs/skipUTF8/Makefile": "4fbbea93626213a1782113d1bebb7ed521c03443bccfe0b79f64a1f6552faa96", + "libraries/coreJSON/test/cbmc/proofs/skipUTF8/README.md": "d0224f808e488f9c5d257bf40d465bcef9934b5de5d5cc91a40395d888dd109c", + "libraries/coreJSON/test/cbmc/proofs/skipUTF8/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreJSON/test/cbmc/proofs/skipUTF8/cbmc-viewer.json": "e6c1725d654647bc7bfb06be02406424b554104b42f739f6d3339e99106ecd65", + "libraries/coreJSON/test/cbmc/proofs/skipUTF8/skipUTF8_harness.c": "eb9276e6f0e56624701aaec6fe5108e7bde05250b620150f019b99a922bc585e", + "libraries/coreJSON/test/cbmc/stubs/skipAnyLiteral.c": "2c8257603a3f02cc950a41eeec30befd5e68c4e16c92d525d4fc0039dde7cc9e", + "libraries/coreJSON/test/cbmc/stubs/skipAnyScalar.c": "b2e94f963d6353dbf3fdb922d6540a4296ad8b77b4d5bc0371dc46c50fdf1f35", + "libraries/coreJSON/test/cbmc/stubs/skipCollection.c": "e237c37e15efe9b998f01fe7dfcb948113a25d55e9b223822d8c23d70af2bc94", + "libraries/coreJSON/test/cbmc/stubs/skipDigits.c": "1310376156b8f04b4441d15bd8227fec6297e436ffca521d8179067a2b7a326f", + "libraries/coreJSON/test/cbmc/stubs/skipEscape.c": "e1c4eff844a08977d712e4b65941524d3be2eb2982dc41f4f475a3b0027fb113", + "libraries/coreJSON/test/cbmc/stubs/skipGeneric.c": "aa1fbd55b2b4c5eda9f27e87131d873ce0c59529c55cf02a41fe53c756503477", + "libraries/coreJSON/test/cbmc/stubs/skipNumber.c": "411c5f259588b734347384e88fff8a6b1588b9f3f31d6dc1376e25d073419ea2", + "libraries/coreJSON/test/cbmc/stubs/skipSpace.c": "444944024e58480e7f7ef141eca39e93ace17af35703e206b3081568ef1551df", + "libraries/coreJSON/test/cbmc/stubs/skipSpaceAndComma.c": "acacb7367c1da82480f28cf6b0a99dd956c44b866fd5c57f3ab37d43880e138f", + "libraries/coreJSON/test/cbmc/stubs/skipString.c": "be94a80872309695fc9f485f3a3ed7099120df47ebb5e623536dc50e87e634e5", + "libraries/coreJSON/test/cbmc/stubs/skipUTF8.c": "0ed0934046be2c98e5ad719dc421625c803c39c1c28f6d870f448330e2dabe37", + "libraries/coreJSON/test/unit-test/CMakeLists.txt": "bb0a488a774d045b9d69078094ab50389b5e6b881cca16b967c69f198206ca5a", + "libraries/coreJSON/test/unit-test/catch_assert.h": "de1bfd864b4f994720f3393a4c735b13091270fa22b263d9af1f35a0dc80ce83", + "libraries/coreJSON/test/unit-test/core_json_utest.c": "dd94bd234a092c614737bcf02fe3470a813c5eb679c9a8022318c90e590ed327", + "libraries/coreJSON/test/unit-test/unity_build.cmake": "0bd532c05dac6876647508256c5c50ff87b2c2017ab9e3cb866cf0722edc1ddc", + "libraries/coreJSON/tools/coverity/misra.config": "d7d37fb4773c548cd823d55ac8278cb9b4d89eb49d0e12c9fbf7132a92011497", + "libraries/coreJSON/tools/uncrustify.cfg": "55c02144fdaa3d62e03ed97e3e89a54b67d9433a5320ec02ec82e75344b21656", + "libraries/coreJSON/tools/unity/coverage.cmake": "44684d66e5193f6c54e47c677c1efd3251f4e83c9893e336918dd90e72c922bd", + "libraries/coreJSON/tools/unity/create_test.cmake": "086650d12714429c4130c386417e1aef985421f26c4c82a209ac0d40f71c1cd2", + "libraries/coreJSON/tools/unity/project.yml": "12130e50fcf569eaee1c82ebf43c3accfdc599b0f42064ea6819a49f2089eb2f", + "libraries/coreMQTT/CHANGELOG.md": "49d7f63bb13580ed2bf5b05c0eccad0c4567dcc1a51b25d30a4c168d04a21e6a", + "libraries/coreMQTT/LICENSE": "508a77d2e7b51d98adeed32648ad124b7b30241a8e70b2e72c99f92d8e5874d1", + "libraries/coreMQTT/MISRA.md": "ee3dafb6f0d1bbaf8d4601246438cca6cf02f1b654a69f04e68b8000f9dc21aa", + "libraries/coreMQTT/README.md": "8c9218904c05da8616265222a4b148891b618f181b07335d528e4fb7703afa2e", + "libraries/coreMQTT/SECURITY.md": "ff53e3502bc39dac4a7074fe790f663c56d6c7aacd5b66dc648049f685e1e44b", + "libraries/coreMQTT/docs/doxygen/config.doxyfile": "ac9356a3d6e9f8c1912428917ef655d8ae37f65ce2d667a482cc303c8bcc901c", + "libraries/coreMQTT/docs/doxygen/layout.xml": "555a70789f54c525456ad9d30730614fe7119afb8b81dd8f8067af28dd14f66c", + "libraries/coreMQTT/docs/doxygen/pages.dox": "6910668751f7d400b48c10f550d7d11dc970c1481f7e51f29b8487543e8183cd", + "libraries/coreMQTT/docs/doxygen/porting.dox": "1edb176f2260e8a6d3115286218f5791e664a48f2a939e8e03e9c784cbb42491", + "libraries/coreMQTT/docs/doxygen/style.css": "e3d3b4438744aa4d547bcacc6e64f3fcfc5057b476c5237e5107e6bbe0aac72a", + "libraries/coreMQTT/docs/doxygen/timeouts.dox": "97f415c2452a83eea9da9b42871eccb775ecf6de1774fe08efbea017654fcbf2", + "libraries/coreMQTT/docs/plantuml/images/mqtt_connect_design.png": "21b94da4fcf887e92a6b69792e0438a2606e084670106bda53ede60d77915b92", + "libraries/coreMQTT/docs/plantuml/images/mqtt_processloop_design.png": "e840f26ce3e411d3eedae32073a9506b000f44b4b328df68d6c854fc423a3e43", + "libraries/coreMQTT/docs/plantuml/images/mqtt_receiveloop_design.png": "cecf49d04c44aee8f69ae2ea5c842db85973e43aba2fd7c3da04da6768931b02", + "libraries/coreMQTT/docs/plantuml/mqtt_connect_design.pu": "58d747147b1bc68565dfb0d64c0f13a3134778465209f3c320232641a915a999", + "libraries/coreMQTT/docs/plantuml/mqtt_processloop_design.pu": "3682c146c15953956cbaf2121c35aac02a4706dcc953841c15c7b0635cdaec42", + "libraries/coreMQTT/docs/plantuml/mqtt_receiveloop_design.pu": "5d271bfa63049501d47af872eb96d0aad770fdb478ab58876ebadcc7b46dd733", + "libraries/coreMQTT/lexicon.txt": "3e046645b31b19abf97a1bd3c773cf7fe7bc83675b0fb9adae36d9e2482e1bc4", + "libraries/coreMQTT/manifest.yml": "2ce5195f565c3641b1312f5d3e8df9f7a01ff64d150937d5d8f83a9a20811fab", + "libraries/coreMQTT/mqttFilePaths.cmake": "40ee4b2022a23805a8bd4902404e6c3fe32a6ba0981d9ca7d2ac8521859c8d11", + "libraries/coreMQTT/source/core_mqtt.c": "6c0a5e4d4ba5839e7a12795c697f4479378e5b09e37b44e523cb2d530768fbcb", + "libraries/coreMQTT/source/core_mqtt_serializer.c": "4faa4373c6aea6df5916c95d83dac6d19cec747e9f16fd0b8b4a1798c7d8c2c8", + "libraries/coreMQTT/source/core_mqtt_state.c": "28ed4662c0da23388edcb3145267bdc733c9788bed334da888dd017272035b50", + "libraries/coreMQTT/source/include/core_mqtt.h": "04697ef71fb5aba3aed70460a260c1f8bb517d75af01086a1c8473b5ccf7654d", + "libraries/coreMQTT/source/include/core_mqtt_config_defaults.h": "adacf4f60c2ab66145fdac5a75067c19352852ce9f765798e3cc514eb513b3f8", + "libraries/coreMQTT/source/include/core_mqtt_serializer.h": "b86db6fc3512b0754b67c67799b8525e9d9e6dadbd5c29383c8184d2edc2a7d5", + "libraries/coreMQTT/source/include/core_mqtt_state.h": "672fe2662b779ba98af0bb72433f1632d50283ab4249b876a5084f4e44528fbb", + "libraries/coreMQTT/source/include/stdbool.readme": "3b5fea454a7ffd75a0dc1a752e10ab00f56e9f07141a7a1cd420b0ba3a979090", + "libraries/coreMQTT/source/include/stdint.readme": "dd6b448c2e42251785a058360c728511a87282f159819b274ae1a976172ee586", + "libraries/coreMQTT/source/interface/transport_interface.h": "d27ac8f149eac5b58abd42e0188c077d8ec7b45105f169c9d2096b07d2238e17", + "libraries/coreMQTT/test/CMakeLists.txt": "329fe5c02c29d0daf12236504e13097296b3f10c695fbb710590270ac3fcbb68", + "libraries/coreMQTT/test/cbmc/include/core_mqtt_config.h": "7d038ddb76ef1832e36ab4319842eed1ae3ea3ca450a1ac48b0f388e538abaf1", + "libraries/coreMQTT/test/cbmc/include/event_callback_stub.h": "951bdae29cdc1208aa5bd10aa7db6f99dfe1d753a049420b785fc52217ca0022", + "libraries/coreMQTT/test/cbmc/include/get_time_stub.h": "07697c0a13aa0c4b49f9a8b9705b9e3dc9374415a698f5d66db9539220aa05c1", + "libraries/coreMQTT/test/cbmc/include/mqtt_cbmc_state.h": "f09667ff341dd6493f0f4c38122d79ee6d18fa7af57f777f6d917a3775efbef6", + "libraries/coreMQTT/test/cbmc/include/network_interface_stubs.h": "746a84a45e40942332f2b161a9c97c0d71a7edeeb256415d341d18e1e8c02d9d", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Connect/MQTT_Connect_harness.c": "be9800c64b76dc0784609d81fd1684ff2578cb85b28d6ce8082244d4d334a4cd", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Connect/Makefile": "6959705bb0326af295a198cd0be0b49500eec5c7a5c33b309db9a31fca012cc4", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Connect/README.md": "56ef61cf1649982459e19664c8388fe891ac22cd9ace86d02e9dc19cc237fb58", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Connect/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Connect/cbmc-viewer.json": "cab584fd42fc0f278ce71342de8d61eaf2d76a29fabb4d20e47bfc23222a28e1", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_DeserializeAck/MQTT_DeserializeAck_harness.c": "daffd649c3db90885a6c20a7a4adcab7faf053877970226597ac8b557eb52616", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_DeserializeAck/Makefile": "19b8901b34714c2f43dea31f92c8d3d92ebe2bbd3cfc64ddbb8662fb0425255d", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_DeserializeAck/README.md": "7a7d6c9942e7f500d437c5a719f1a34058e359765400dcee5c92f863f4b5a571", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_DeserializeAck/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_DeserializeAck/cbmc-viewer.json": "64303ecfdb4e576970e009599853582974cf2f127e55ec4b8abd022806edad84", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_DeserializePublish/MQTT_DeserializePublish_harness.c": "9a064fa4c62d5bdf8626b182ca9a9826387cd1b1985d68cfc7c727c32bd2e462", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_DeserializePublish/Makefile": "0898d4140cac0be565d0f9d2383efb29956864f55ef17e04151ba09269426815", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_DeserializePublish/README.md": "75cf3eaace92611b83a309ed9dfd488dda51b8f4f4917ba4c502352bb46ce144", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_DeserializePublish/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_DeserializePublish/cbmc-viewer.json": "47e712b26c107b25f7aca63d3b947acf9f056f28bf3a9bea108a591b237cbeed", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Disconnect/MQTT_Disconnect_harness.c": "91c676b8f5cb2af3e13beb2cfc583b6946532b6801586eb69a5a32376366e8d0", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Disconnect/Makefile": "a10513d306d332c8883687913b5d8d1b4fc24c1f550688031455f03be482f3c6", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Disconnect/README.md": "ec8d0fd2765e652ae921480aed0fb834ca7aaeb29732be426c57d1869c310454", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Disconnect/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Disconnect/cbmc-viewer.json": "bf4978a78d0061026ae9f78c03ccae0ee1e6cdcfb39b7350d2aefe68cbd9ac98", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetIncomingPacketTypeAndLength/MQTT_GetIncomingPacketTypeAndLength_harness.c": "2978682557a07eaaeb626a0762d98f69acd6a1a6e59b2a52a6953a2918dda9a9", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetIncomingPacketTypeAndLength/Makefile": "4423c7597e296f08c0f7cb9de52d945377563ec3e2f02249fcf6d903648dbc9a", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetIncomingPacketTypeAndLength/README.md": "3f5540f0a13298b8f90721fcfe9ba561cda091cdd6797c2c3f8b85b57b0812f2", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetIncomingPacketTypeAndLength/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetIncomingPacketTypeAndLength/cbmc-viewer.json": "97a42a4e5454069192e8d0e654a6805782c587af560b08f17a095682d8d1cd85", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetPacketId/MQTT_GetPacketId_harness.c": "f05cc76482ded94f0292c7a6952b2d8338cd4f8456a9a52ae4cb715e1c4b29c6", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetPacketId/Makefile": "1ab9da1dacd1a33713a2e2f6848d97252fcc47fb9489633c763a41761af1b025", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetPacketId/README.md": "173028ffc86135f832c5b763987f0cd623b1949d46f94afe6f24ae27578a7a8d", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetPacketId/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetPacketId/cbmc-viewer.json": "ee5d6d6e29ec44fbcf95ba512a32fee52b5b333b6fcf432dc57b8d60f64840a1", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetSubAckStatusCodes/MQTT_GetSubAckStatusCodes_harness.c": "5d1c305b05b7d2fbba9e852e474037b2d73ad899b606b7c313352b5d1c123762", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetSubAckStatusCodes/Makefile": "fb43e3ef5da978ba636b9b8c94984988fe5ebdf417608cbee901d95135f6b658", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetSubAckStatusCodes/README.md": "2d74b1a9895f27194a11a08d5e2690145ea717267365446f93d676865b4338f9", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetSubAckStatusCodes/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_GetSubAckStatusCodes/cbmc-viewer.json": "6abd54df401cf3bf8ae26e1515e34e0bf794565d5666b1d8f0c411ae61156157", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Init/MQTT_Init_harness.c": "98839810e0d4a42b09971d19e347392fe1b791dd04c2d970697b2414bcb35658", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Init/Makefile": "55515078de553566bf63b2df808b6e2a3b2fe6edd48069f3d28ecc0d8c79b7a8", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Init/README.md": "ca6a087edcbeb2cd36cee08b509952e2fbaafdaacf5cfeb12016b327dd67d220", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Init/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Init/cbmc-viewer.json": "72a69eeacc6efe57b089a25f951a7427b1985d439812512c92e284c0279add2e", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_MatchTopic/MQTT_MatchTopic_harness.c": "c78a1f546c283257715ad76f852cd0121d9b43a74cbc340bc5499d19c4e416a2", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_MatchTopic/Makefile": "6a167927fee24f423215499a6f810050b54ff0ba96d0ff50f951a8a01f7273a3", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_MatchTopic/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_MatchTopic/cbmc-viewer.json": "b69a5577a7b673b1c40b34949efac35ec6271451079862825401b3d2a128d789", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Ping/MQTT_Ping_harness.c": "a169d202e2a5d044b09e5bbbce43e80301dc905060e65ae37e71bacc24d3b08e", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Ping/Makefile": "3a84d9afa0cc8ef70f6f4de03f2ccef17eb808c8d929793642e7aef5bd166ca1", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Ping/README.md": "0a93c1b497a1c52a6121e92c071d6e4bb9e168b17555ed1f9c0f6d9053a9b113", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Ping/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Ping/cbmc-viewer.json": "f6c242754a1c117221b01a11f7cdbd0e6438eeeb520a6a0a842e85b6f6f07ef4", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_ProcessLoop/MQTT_ProcessLoop_harness.c": "29266ae4e25362f6436e7babdb28e3cd3d96378d3f9bb6a221a40a478df5b594", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_ProcessLoop/Makefile": "c4e52318c2f01432d065125bed93c4cba029c74e3440be88720cbb0be983af06", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_ProcessLoop/README.md": "241f1632dac11c88647d93a537e843febe8aa7cdef51a2eb8f222c2ef54d9f14", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_ProcessLoop/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_ProcessLoop/cbmc-viewer.json": "79aec48e68b39c6e4d339247d55b72186f0d8f3ed8baa54d7005899a09f8ec98", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Publish/MQTT_Publish_harness.c": "d8d65143846387fb46609ba72a2a81f0d244e5bba3d9cbc09dfee53b2a09cb69", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Publish/Makefile": "879840e755a86e9e5b8e75297cd0944e6851c0c0f3b1e7cdb43dbfe53f85b1a3", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Publish/README.md": "020fe4a980704d4ca277ba5f3177131cd4ca17cf8cb50932fc77239270f090f8", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Publish/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Publish/cbmc-viewer.json": "9b69f8a19dac6acdeee2eddfe653599008df1502df115c7ed861d8920ee8a745", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_ReceiveLoop/MQTT_ReceiveLoop_harness.c": "20b941a2e744a9e68d7007deb0c2bef4ed7e091584ead456c01c33f3d5961b95", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_ReceiveLoop/Makefile": "4eb62efbcfcc94b55059c144a0040580b58a131af3fc09a73bc976b82f2bb803", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_ReceiveLoop/README.md": "e374941c2cfb38a528b50eb6ce77b8642feb4d471c283290ef5bf893e6f6f6be", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_ReceiveLoop/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_ReceiveLoop/cbmc-viewer.json": "8dae172cd3cf76f4857621a32a943815dbc64b767be0dcbdc6f236c1ce73d87a", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeAck/MQTT_SerializeAck_harness.c": "7aa97a4a46b2b940a307488cbec759fa571b8710ff96a9a5daae9691faed70bc", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeAck/Makefile": "404d6903622abbee1a5de868d65dc96aa702994899139f91db4825f4226f30c9", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeAck/README.md": "5e6fc8595d1fa6e42e46f89b1c82a699f42776068ef8842d3028b3b5cd930208", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeAck/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeAck/cbmc-viewer.json": "97acbe10b64118abc2c50a2ce9b6d41d20c9636e8eea4eb1f690965e338f3dca", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeConnect/MQTT_SerializeConnect_harness.c": "3d7fe5c51152f11c97319a45d7e71155441cd442646e8fb1952831cddb84000c", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeConnect/Makefile": "be52f16379b711c424bc9630d52005c3944c5a40a85847c33daaa22282e33656", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeConnect/README.md": "8176a747d19bd17bbc0e318858ba82c9ed1e35007766e79d294ca26e4772bc0a", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeConnect/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeConnect/cbmc-viewer.json": "46d696d30594fe3ad0320f9b3fed7948ec877c87df95f6b48aa92dfccf29f5cf", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeDisconnect/MQTT_SerializeDisconnect_harness.c": "292fc840ddb7a4fd35a780bbe954b3ec6e564873699b3f07be13ed9ec9d20bd0", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeDisconnect/Makefile": "1b390c0119f425bcfc4eab47e1e89e8dff524892eeeb4b22dc14eb0d3e899e4f", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeDisconnect/README.md": "6cfa4a964cbebddb3273f54787c4fd387517cb7dfa41ad52db1b0d4c831b6a42", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeDisconnect/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeDisconnect/cbmc-viewer.json": "38376b24ad94f9802301d5a2d15aab04cbc83b464756ec8fa6b82090b5f64df8", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePingreq/MQTT_SerializePingreq_harness.c": "91db5058dfaac2c468313a056298cf24f88c5bab371ead3d1f261143a6979eb2", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePingreq/Makefile": "94f1c85d775e5a90888d9d50ce36c4c701c25c26d110470765fc0a0dc965a33d", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePingreq/README.md": "d6a9f488491dbe597490c3b5534bc230e43f468f7198bc785223303dd55b14ba", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePingreq/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePingreq/cbmc-viewer.json": "eb118ca44d049c8bb9872e3d73601a3643c7fbb4e7939f078be32a6f89d22c52", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePublish/MQTT_SerializePublish_harness.c": "068a4de1e7b1e4fea5ba1de2be464c9b7d326b667563bbcee3c8340380f5945a", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePublish/Makefile": "60798ba1e5074e3e3eba28bb25106304799fee5744760db24274a48648b849c5", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePublish/README.md": "2b7bd481ec1b8ec86339cc9489108660d9565014fe188c3675011fbf35418162", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePublish/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePublish/cbmc-viewer.json": "907873e23c42a57756a18e3e179ad347b7b70210297a0abea7322b1c2f47545d", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePublishHeader/MQTT_SerializePublishHeader_harness.c": "eb5da6b5da5073ba82c858c09b8d5e498e8d43eaf4964a04417d2eb425188a3e", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePublishHeader/Makefile": "59b6107ce9da982749fd594741776679a178cd0edf9ae01a37dd7083f6fd96db", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePublishHeader/README.md": "bf530b289a27f153bfab861208c39235e68e6e6af7e139a64a60cea749609deb", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePublishHeader/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializePublishHeader/cbmc-viewer.json": "80c29042213ab8cc35df703b910864447ffd197a30c8092a3f44afbc980e077d", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeSubscribe/MQTT_SerializeSubscribe_harness.c": "929ced9dd3645d3ecb113ee5d824de5a6db4e18b133782ac69f97da8aa2f6431", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeSubscribe/Makefile": "deedd106c13ce55b92cec98187e9fef8f204aa89dd267c3d75cd4b8593507ef3", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeSubscribe/README.md": "b604ae8cb53c551e05cc34995632bf589ffa4cb6ec423c2222445a3b5b67f8fc", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeSubscribe/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeSubscribe/cbmc-viewer.json": "b2250403fe8c62be92d03a4074d14389adb65c6011dd377024c132cf4b6ca846", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeUnsubscribe/MQTT_SerializeUnsubscribe_harness.c": "ec658613501f0ceaef076ffb43878edb3498698617d19f1314c372a511a773b7", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeUnsubscribe/Makefile": "518841906dfbd49f5aacf7b6cc8d22a65497c9def47c2ecf2a7b0e3bc6205b5c", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeUnsubscribe/README.md": "d2a2e6132e9813e8115c8456f44d6a47ba0694c164ca5af7d623cc42bbf64cba", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeUnsubscribe/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_SerializeUnsubscribe/cbmc-viewer.json": "825c4d6438cc955585f8cc96d1e0db10dfa339b3b8e9affa649ba80290d14bdd", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Subscribe/MQTT_Subscribe_harness.c": "d57fb1f6bed8fff3b2c3da8e547ae686050c9a371d22eeb25c62f4eabacb32c3", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Subscribe/Makefile": "df44df207fb78c123d1f485f69525d94b229c22ed6a9ddc57cdb0893b3aef97a", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Subscribe/README.md": "3030e6395ffdb3ad5e06cb6c4eac7f547b4b449cbff149eca48d0457b16b4a3a", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Subscribe/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Subscribe/cbmc-viewer.json": "9bdd8ffaf8f974098a76bf0ffac325925ada3091a660b0350939762106e267c9", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Unsubscribe/MQTT_Unsubscribe_harness.c": "a316f631c751dd1b3e18c5d2b19813d6c620480186d68dbdadbb2907d86f8622", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Unsubscribe/Makefile": "d73c02ecab06c21886b82799b5229ccf81da83ab644da39a17d166fdaa1b051a", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Unsubscribe/README.md": "0cea32d7b5aa59d40f68bddb1d67adc4dcbf2f0f8f8a9d8ad4c138bcfbbd77b8", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Unsubscribe/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/coreMQTT/test/cbmc/proofs/MQTT_Unsubscribe/cbmc-viewer.json": "a0869989a2bc70187d7895dddb395904eca58cc2b412d6c623adaefb9be8c6e9", + "libraries/coreMQTT/test/cbmc/proofs/Makefile-project-defines": "76e22aea31f930b26133e16927dc45124186f68f2f4c698e297653966a598d75", + "libraries/coreMQTT/test/cbmc/proofs/Makefile-project-targets": "d8c3930590646a4a3b5f5ed446758bf2d8b27ffb742dee196efb816ae2f502f6", + "libraries/coreMQTT/test/cbmc/proofs/Makefile-project-testing": "acb51f25870892f177057e7f56e73979e0eeb4967e3280aa160fd33a1a7bb03f", + "libraries/coreMQTT/test/cbmc/proofs/Makefile-template-defines": "50b3687413c3a9a1e42a62954b1007e270fadbfda068fcb8e796b1862563507f", + "libraries/coreMQTT/test/cbmc/proofs/run-cbmc-proofs.py": "b37b71fb8ccf4b101ea1ffc65107c857f45fa6e228f1eb9e2041c017efd3319c", + "libraries/coreMQTT/test/cbmc/sources/mqtt_cbmc_state.c": "782b538a3c783615e9b072cc506d30a265375441770c5c22f9ab8135290883d4", + "libraries/coreMQTT/test/cbmc/stubs/event_callback_stub.c": "8619268ebdbc5a0cbd9ed4a28e0660f30d45e8c406479b0270d5af983cc37e1f", + "libraries/coreMQTT/test/cbmc/stubs/get_time_stub.c": "46ac238cb11460eb0fce516093c7b3e7f537d95bc078e150062afd67534caeda", + "libraries/coreMQTT/test/cbmc/stubs/memcpy.c": "2ab8fcbdfd5f5472065e27639359c856454d3fbf44b73ecff64e996dfbf62d1b", + "libraries/coreMQTT/test/cbmc/stubs/network_interface_stubs.c": "01691695af6bab490d673ba25326b125beca9f12514a6c032aead34231bd9532", + "libraries/coreMQTT/test/unit-test/CMakeLists.txt": "7351576c9d2bc47f30722196011400b0365104adbb7bdfbc21248d3ca6029c61", + "libraries/coreMQTT/test/unit-test/cmock_build.cmake": "d73f758fdc599d6abcd447dbbd05331a14615eeb631b22cf5101b8a3d4eeebc2", + "libraries/coreMQTT/test/unit-test/core_mqtt_config.h": "fcf66913884b745594c3cdb86b0836d5699049054b63e6f37a5cd0cad15fe020", + "libraries/coreMQTT/test/unit-test/core_mqtt_serializer_utest.c": "615c7e4ef4e7330b7c1a6aa36cb8a5d24de77aff4dbb60b865c1ec88c4aea5d9", + "libraries/coreMQTT/test/unit-test/core_mqtt_state_utest.c": "456d9936f992a5a5682a91a24626f7c85d9337167b583b44e3c53910e1e292ab", + "libraries/coreMQTT/test/unit-test/core_mqtt_utest.c": "aef9885f5b4c3b8217dc415bafaac8b61d792b461f6d705e229ca47e24e52216", + "libraries/coreMQTT/test/unit-test/logging/logging_levels.h": "7ec73b0fc2db9d927d62f5882bd98bf143dd78b04f5bcf24b3f031f1808849cc", + "libraries/coreMQTT/test/unit-test/logging/logging_stack.h": "3dbcc7f9f0ddab00d17b036b262ea402e52e4e349eba3238c12cc98dd76c501a", + "libraries/coreMQTT/tools/cmock/coverage.cmake": "8ac1ac5e6d5628fc8625d57f74249f15f53eba61f8338813d36d3dfa9dc1cf9b", + "libraries/coreMQTT/tools/cmock/create_test.cmake": "41dc66ba43772ccbcc59871e16ebc60b8671875e0e59d9068313be0aac1f25b2", + "libraries/coreMQTT/tools/cmock/project.yml": "805074ab6dcf01b29aac19ab1964b70227d0f7013b5b755dbf5c17ae66e6a0d6", + "libraries/coreMQTT/tools/uncrustify.cfg": "55c02144fdaa3d62e03ed97e3e89a54b67d9433a5320ec02ec82e75344b21656", + "libraries/core_http_demo_dependencies.cmake": "afff24d0e49b1b8abacfbaa9b27c1c9ac997c8e5d54c6b2f516bd1a7234e62a8", + "libraries/core_json.cmake": "ac1b14a56b95f3a9d662ebaa0b86c5e4841c432ee307a573d444d8fd319b1ec1", + "libraries/core_mqtt_demo_dependencies.cmake": "071ede03f356e7dcc12a7500c0f48a8d5177efab97a24e686a804e8013cc3766", + "libraries/device_defender_demo_dependencies.cmake": "6c7daec2952523949740655f0ddd45c5a6d6e032199095957ff423d93b194135", + "libraries/device_defender_for_aws/CHANGELOG.md": "8e1ca013ee497f6f7d48678432fc760acd0617816e8c5eec468cd043e79f5711", + "libraries/device_defender_for_aws/LICENSE": "92798b9082a3ffab53ad3495460f53abcf0ac30e1408f2edd88d5119726ff6c4", + "libraries/device_defender_for_aws/MISRA.md": "1429b980983e34cb237b6cad22bc7324aa81a225bb4769cda8d7244a34649913", + "libraries/device_defender_for_aws/README.md": "122f20088af3dc1d9c4c71c94d225085af08a6347769ca558e53fcdef7ec6f27", + "libraries/device_defender_for_aws/SECURITY.md": "ff53e3502bc39dac4a7074fe790f663c56d6c7aacd5b66dc648049f685e1e44b", + "libraries/device_defender_for_aws/defenderFilePaths.cmake": "304408766cf2f5aba4de5e13b3ae59b9bdb5243e141fc3b1749f3c91bf147e9e", + "libraries/device_defender_for_aws/docs/doxygen/config.doxyfile": "32bf4356f3cd354018be1f9806baf1e4afc94d1b33e30119d38607e5b4dd3cab", + "libraries/device_defender_for_aws/docs/doxygen/layout.xml": "555a70789f54c525456ad9d30730614fe7119afb8b81dd8f8067af28dd14f66c", + "libraries/device_defender_for_aws/docs/doxygen/pages.dox": "26570016166717c1596f619700e6a5cd5710a7af494c2ec8b6ce8d34225cbb1a", + "libraries/device_defender_for_aws/docs/doxygen/porting.dox": "1cca8b3557d2c77a7054d357356f3c7412d3d960c043ffd08707c9b11176f877", + "libraries/device_defender_for_aws/docs/doxygen/style.css": "e3d3b4438744aa4d547bcacc6e64f3fcfc5057b476c5237e5107e6bbe0aac72a", + "libraries/device_defender_for_aws/docs/plantuml/defender_design_operations.pu": "1b420a9752c530adc6e70f176f81400d876be2718ceb521e189aecc82c9a78ed", + "libraries/device_defender_for_aws/docs/plantuml/images/defender_design_operations.png": "9048e7da5eab9921ef4e2feff9706f49d626bed4954974fe5c9e117dbaf214ab", + "libraries/device_defender_for_aws/manifest.yml": "412f6660f605a38bc8db01ffdf44908f818f8f0e17026417265723d9ad986c9c", + "libraries/device_defender_for_aws/source/defender.c": "83e5be28451f45840d8f0823d4d6ffe46d25b8d46c4c3f9d348e5a89ce2ea904", + "libraries/device_defender_for_aws/source/include/defender.h": "ecb052f3c211eb2946411a0b99738521ceedb00dc0c38cb99931f0a8bd1a9e0b", + "libraries/device_defender_for_aws/source/include/defender_config_defaults.h": "8da39ff6232dcaabfe680143ff45e8796bb56fbae63e17f811fb14d8dbf86795", + "libraries/device_defender_for_aws/test/CMakeLists.txt": "793970898983e0dd910611ed98bf08bed857b0d2db6502e30a82d27c175d64b5", + "libraries/device_defender_for_aws/test/cbmc/proofs/Defender_GetTopic/Defender_GetTopic_harness.c": "6a85ba23aa834681fa1bae8882ee8167b0e0c9abddf9fc99c3abaec976a8ad9d", + "libraries/device_defender_for_aws/test/cbmc/proofs/Defender_GetTopic/Makefile": "d38a1bc79cdc7029fedd12fee893b61e6aa73c50712bbc08c8f90aea5cf5c946", + "libraries/device_defender_for_aws/test/cbmc/proofs/Defender_GetTopic/README.md": "619728536b509e5a370ee7adc734175270a5e112fcabe876215ca3fd58c0ad05", + "libraries/device_defender_for_aws/test/cbmc/proofs/Defender_GetTopic/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/device_defender_for_aws/test/cbmc/proofs/Defender_GetTopic/cbmc-viewer.json": "9d9db2ac4c818072b8360b020f2629f165e1bc7ea215c0738bb698a015f9b810", + "libraries/device_defender_for_aws/test/cbmc/proofs/Defender_MatchTopic/Defender_MatchTopic_harness.c": "d597dc7d7e72b3a4bcc181d71fa812ca75d59a9ccdc5d944ae2902d7c7939fa1", + "libraries/device_defender_for_aws/test/cbmc/proofs/Defender_MatchTopic/Makefile": "563d121e7f6a7e7b638261819d5b3a46259020a6e819ebc4c661014171098f01", + "libraries/device_defender_for_aws/test/cbmc/proofs/Defender_MatchTopic/README.md": "0b982a939a67c7c92af7f5102d2819e2f964aaf0d173a25a36cd7d3cd38d105d", + "libraries/device_defender_for_aws/test/cbmc/proofs/Defender_MatchTopic/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/device_defender_for_aws/test/cbmc/proofs/Defender_MatchTopic/cbmc-viewer.json": "c70566194031f972ef2f6a3777bf727e1fb8b63cc565b17edc970e2269b61e7d", + "libraries/device_defender_for_aws/test/cbmc/proofs/Makefile-project-defines": "6e42d2d116ec0aae20a6988ae29ea224513daaedf1fdc0b95b9e4e14d698b2f2", + "libraries/device_defender_for_aws/test/cbmc/proofs/Makefile-project-targets": "d8c3930590646a4a3b5f5ed446758bf2d8b27ffb742dee196efb816ae2f502f6", + "libraries/device_defender_for_aws/test/cbmc/proofs/Makefile-project-testing": "acb51f25870892f177057e7f56e73979e0eeb4967e3280aa160fd33a1a7bb03f", + "libraries/device_defender_for_aws/test/cbmc/proofs/Makefile-template-defines": "50b3687413c3a9a1e42a62954b1007e270fadbfda068fcb8e796b1862563507f", + "libraries/device_defender_for_aws/test/cbmc/proofs/run-cbmc-proofs.py": "b37b71fb8ccf4b101ea1ffc65107c857f45fa6e228f1eb9e2041c017efd3319c", + "libraries/device_defender_for_aws/test/unit-test/CMakeLists.txt": "a5dfc22bae97b57f11bf53b324ef858e7c135ae8d26535c2a859aa0c6f4ab0be", + "libraries/device_defender_for_aws/test/unit-test/defender_utest.c": "477205e2ec2f00384a9d4ca3d8a16c9e3c637dd88f85d25c00ad648fae75feac", + "libraries/device_defender_for_aws/test/unit-test/unity_build.cmake": "daf106eac10e7a34b62e4f2165d32a30ccc5930f819bfac121818c02835c2d0d", + "libraries/device_defender_for_aws/tools/coverity/misra.config": "d72f33418fcbf9e66e81707794654364e319d1b67e554eae4954f14d1d7d8908", + "libraries/device_defender_for_aws/tools/lexicon.txt": "3d54a1096198f686458bea69a96eefa5606ed28e3bdef4004915c472b5d7b27b", + "libraries/device_defender_for_aws/tools/uncrustify.cfg": "55c02144fdaa3d62e03ed97e3e89a54b67d9433a5320ec02ec82e75344b21656", + "libraries/device_defender_for_aws/tools/unity/coverage.cmake": "1831c88a0bb202d41f80944d8aedf1b52665c6746c1e023d46ac548d59218f3c", + "libraries/device_defender_for_aws/tools/unity/create_test.cmake": "2cb0dc70a852f3d640b19d550a06358918f360928f24b63cb4c614b34678107f", + "libraries/device_defender_for_aws/tools/unity/project.yml": "12130e50fcf569eaee1c82ebf43c3accfdc599b0f42064ea6819a49f2089eb2f", + "libraries/device_shadow_demo_dependencies.cmake": "0495c3ae7b349db5b573e33a3fbc137ff3c60d7a0e0b95d02baba15ae3ffb6a3", + "libraries/device_shadow_for_aws/CHANGELOG.md": "6ccb2f49dc4be179b638c909de7aeb655aac75d3843d9ee1eceda5bda5ef2728", + "libraries/device_shadow_for_aws/LICENSE": "52f54173fb286e7baa536bab3fb2aef58891af07e96646fb4d80663fabdfdcfb", + "libraries/device_shadow_for_aws/MISRA.md": "83c3eaba6c074f8ecb666c2d9d8c3de156fe47eedaae379494f70fea4653fce0", + "libraries/device_shadow_for_aws/README.md": "54df38c66e3635f5c42a279a38acc4bb9c475c7791cabe622c4427bc5f355d8b", + "libraries/device_shadow_for_aws/SECURITY.md": "ff53e3502bc39dac4a7074fe790f663c56d6c7aacd5b66dc648049f685e1e44b", + "libraries/device_shadow_for_aws/docs/doxygen/config.doxyfile": "e252931859057ea8f29cfb7f2c9ca2affcf1ed5c63e6026151d72770c47261a4", + "libraries/device_shadow_for_aws/docs/doxygen/layout.xml": "555a70789f54c525456ad9d30730614fe7119afb8b81dd8f8067af28dd14f66c", + "libraries/device_shadow_for_aws/docs/doxygen/pages.dox": "79630b146f50c9da781ddb199ecb63fb2a7089e0b74de9dcd2bcdffe4390f64c", + "libraries/device_shadow_for_aws/docs/doxygen/porting.dox": "57770d46dfc3d9a8ea9dac0495ee057956221981221fe70ddf8fbf6b46a8cfe3", + "libraries/device_shadow_for_aws/docs/doxygen/style.css": "e3d3b4438744aa4d547bcacc6e64f3fcfc5057b476c5237e5107e6bbe0aac72a", + "libraries/device_shadow_for_aws/docs/plantuml/images/shadow_design_operation.png": "be26eeab05864c35a8777eab1ca26255c7c585d88ed88e548f67c86891f210b9", + "libraries/device_shadow_for_aws/docs/plantuml/shadow_design_typicaloperation.pu": "81c9ef7f7e2cd9d56aed1f29e96d6a3677a530eb6c9ada4bb2bf1d3572ae7479", + "libraries/device_shadow_for_aws/lexicon.txt": "322d3b86541dab47e31ea0cdad6d2f77aaf458e517848ee266a14bde9f73b32e", + "libraries/device_shadow_for_aws/manifest.yml": "12e4eef3c991791913b17d88f2db8d7e8f8244ea6ca154b543bbd038de7096d1", + "libraries/device_shadow_for_aws/shadowFilePaths.cmake": "0288a46686c14976f166ba2466ea9dafdb5388fc1563430d88ff989e479c1ce5", + "libraries/device_shadow_for_aws/source/include/shadow.h": "293045b22bcd203a4845e74d427fd994b0372e100fa552c3e6af2fa1fa38ce27", + "libraries/device_shadow_for_aws/source/include/shadow_config_defaults.h": "2b7b7b9c5512e8e51b424dcbad238059e4968595dfa92c8a13d3886d9708e8bb", + "libraries/device_shadow_for_aws/source/shadow.c": "ff55e37b0d5b2ed6fc2b6779b6fcd99812e6a3a4b2daed5bf03955a3a8710503", + "libraries/device_shadow_for_aws/test/CMakeLists.txt": "4f5de7fdcf2cbdf2fd557b569ddc34f405dddc51df66ce95d164fe01ce5a63b0", + "libraries/device_shadow_for_aws/test/cbmc/include/shadow_cbmc_state.h": "f461e5de7047affab2de1e8e1f76e1523a5c05d725bb0314e7c4dbb5b1de21c1", + "libraries/device_shadow_for_aws/test/cbmc/proofs/Makefile-project-defines": "88668a1c0ec1b0b7a944fdcc4997b050e7633f3f33da0fec37f280c11799ac03", + "libraries/device_shadow_for_aws/test/cbmc/proofs/Makefile-project-targets": "d8c3930590646a4a3b5f5ed446758bf2d8b27ffb742dee196efb816ae2f502f6", + "libraries/device_shadow_for_aws/test/cbmc/proofs/Makefile-project-testing": "acb51f25870892f177057e7f56e73979e0eeb4967e3280aa160fd33a1a7bb03f", + "libraries/device_shadow_for_aws/test/cbmc/proofs/Makefile-template-defines": "50b3687413c3a9a1e42a62954b1007e270fadbfda068fcb8e796b1862563507f", + "libraries/device_shadow_for_aws/test/cbmc/proofs/Shadow_GetTopicString/Makefile": "e78d4425a8651d72d500df887628335b1d5e38b419fdf7f81548ef2f260499cf", + "libraries/device_shadow_for_aws/test/cbmc/proofs/Shadow_GetTopicString/README.md": "accc952272ea78212cf6d4842e274e5212c75b31c4dc3d471fd4c62a0a26f90c", + "libraries/device_shadow_for_aws/test/cbmc/proofs/Shadow_GetTopicString/Shadow_GetTopicString_harness.c": "865218e58468e7399655bb76269a974c7a831883772a59358f43d1b8ecd75cf5", + "libraries/device_shadow_for_aws/test/cbmc/proofs/Shadow_GetTopicString/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/device_shadow_for_aws/test/cbmc/proofs/Shadow_GetTopicString/cbmc-viewer.json": "76ee8989609434f5d85140cfebad4a10f6094b08c3c9f4fdc6f77b8349998bac", + "libraries/device_shadow_for_aws/test/cbmc/proofs/Shadow_MatchTopic/Makefile": "c3c9494dcce237a07cb4e87c7ec36b0079bdd0999df594d77b063eeac7907e3c", + "libraries/device_shadow_for_aws/test/cbmc/proofs/Shadow_MatchTopic/README.md": "00d47208dd0ae8c71dff2e619d1255b6c73241fb8d9fc3879f9ae879e000b3dc", + "libraries/device_shadow_for_aws/test/cbmc/proofs/Shadow_MatchTopic/Shadow_MatchTopic_harness.c": "62496772a7af9ada614e3f42a03e734d8c73c0ea3341d6e09ae8143750ef403e", + "libraries/device_shadow_for_aws/test/cbmc/proofs/Shadow_MatchTopic/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/device_shadow_for_aws/test/cbmc/proofs/Shadow_MatchTopic/cbmc-viewer.json": "b596eaf251320594edc10aab35f561c68f847211325565f18b838719bf8644c4", + "libraries/device_shadow_for_aws/test/cbmc/proofs/run-cbmc-proofs.py": "b37b71fb8ccf4b101ea1ffc65107c857f45fa6e228f1eb9e2041c017efd3319c", + "libraries/device_shadow_for_aws/test/cbmc/sources/shadow_cbmc_state.c": "5bcff9fd7543d0333af3b563fa9348f2362fab9f38bc94053365734050f3a33b", + "libraries/device_shadow_for_aws/test/unit-test/CMakeLists.txt": "3450a4ea7b5cf02588d8f1c577115788d19e4038f1ec6838c56b5e6deb835bb9", + "libraries/device_shadow_for_aws/test/unit-test/cmock_build.cmake": "d73f758fdc599d6abcd447dbbd05331a14615eeb631b22cf5101b8a3d4eeebc2", + "libraries/device_shadow_for_aws/test/unit-test/shadow_utest.c": "907ba953aa8e975bef0ca791ef57cd50554eca13e33e042f2b932efa164925c6", + "libraries/device_shadow_for_aws/tools/cmock/coverage.cmake": "8ac1ac5e6d5628fc8625d57f74249f15f53eba61f8338813d36d3dfa9dc1cf9b", + "libraries/device_shadow_for_aws/tools/cmock/create_test.cmake": "41dc66ba43772ccbcc59871e16ebc60b8671875e0e59d9068313be0aac1f25b2", + "libraries/device_shadow_for_aws/tools/cmock/project.yml": "805074ab6dcf01b29aac19ab1964b70227d0f7013b5b755dbf5c17ae66e6a0d6", + "libraries/device_shadow_for_aws/tools/misra.config": "87445ff3dcb7c836a2f1ed650d751277aec5fd90639a73f43fb699dfff33b15e", + "libraries/device_shadow_for_aws/tools/uncrustify.cfg": "55c02144fdaa3d62e03ed97e3e89a54b67d9433a5320ec02ec82e75344b21656", + "libraries/freertos_plus/aws/greengrass/CMakeLists.txt": "393bd7ea752c2e8cd5c8844ca16ef65f0e511425fc5aa93e685ebf185e108d8e", + "libraries/freertos_plus/aws/greengrass/include/aws_ggd_config_defaults.h": "434b1e4a7fcc217e88275ac039f602e484e5d6b424bb010515d53c7cecc316c2", + "libraries/freertos_plus/aws/greengrass/include/aws_greengrass_discovery.h": "5798efbcec0e5e969cbd169e75c277adfa844b05f8e39ced88ad8d4fbe969d57", + "libraries/freertos_plus/aws/greengrass/src/aws_greengrass_discovery.c": "a314e73563229f862e4b0e104c1aed2a7140a893e69bbb6dda01e7bda4da25bf", + "libraries/freertos_plus/aws/greengrass/src/aws_helper_secure_connect.c": "40e0e21bb6cb1a392e3db33c129f5b3f183948d95605edacfe3e18c02d008514", + "libraries/freertos_plus/aws/greengrass/src/aws_helper_secure_connect.h": "8a71233b2b831488a385f659530907a26adddb8edfe391c0adce7a1497ff5758", + "libraries/freertos_plus/aws/greengrass/test/aws_greengrass_discovery_test_access_declare.h": "45272bea7f9a1018ceb9028e03145aa789fe5b367310b77c4f4e4fc993007f53", + "libraries/freertos_plus/aws/greengrass/test/aws_greengrass_discovery_test_access_define.h": "6bd7b214b1e9936dc7fa4bb9f6604ebb79af66ae7e94891ca2c3948b4137f176", + "libraries/freertos_plus/aws/greengrass/test/aws_test_ggd_system.c": "8dde331777cf0a01864d12003f2e7fe3c2d9ed2d834ff576c793ebb5062eb6de", + "libraries/freertos_plus/aws/greengrass/test/aws_test_ggd_unit.c": "6c0952a26a21ad22eb0ae4786525652ad21a45f4bfb42ff4c9cd20496ec124d8", + "libraries/freertos_plus/aws/greengrass/test/aws_test_helper_secure_connect.c": "99004b85bd8ffffb1fe6113d7a24cac09c394d1250d9d9c58d3858d98f96e472", + "libraries/freertos_plus/aws/ota/CMakeLists.txt": "bbccd996cd384cce21e8a89e8767d0353c434242c7f0eea2cb8899cbc9d77c46", + "libraries/freertos_plus/aws/ota/README.md": "b18ac6726e49fbd1f1ae96f8fc3551b0d9a226cd34d82503e3f2e641bf89b64e", + "libraries/freertos_plus/aws/ota/include/aws_iot_ota_agent.h": "b742809f8ab1e112e3fc43b5666daad95ccaaa10d79c34e69986e438a02b4c22", + "libraries/freertos_plus/aws/ota/include/aws_iot_ota_types.h": "57182b26616084fc42ba2b062e1d6e76466acdfef09f0645cd2a05ab766c8ea1", + "libraries/freertos_plus/aws/ota/src/aws_iot_ota_agent.c": "442ad0fa4d83b3565e9475ba3777e3e592a51b761547febccfaea43ddb2324e0", + "libraries/freertos_plus/aws/ota/src/aws_iot_ota_agent_internal.h": "dfd6ca7fb76631b5d9599070f91339a5ec6e259cd37e7ab912e5a42d4382fd8d", + "libraries/freertos_plus/aws/ota/src/aws_iot_ota_interface.c": "06f304e0659379ca35e293df481923160c1245a001c7343ea613530f9cb10a43", + "libraries/freertos_plus/aws/ota/src/aws_iot_ota_interface.h": "068a154bf5b8fca5b40bbde581839227c27b0c60e9bbaff7bbd3a64a92e07dee", + "libraries/freertos_plus/aws/ota/src/aws_iot_ota_pal.h": "c46e0c47c77368aa6bf23cd67eb5a44bce31552c6dbdf82fa937183439a0c187", + "libraries/freertos_plus/aws/ota/src/http/aws_iot_ota_http.c": "84f903d6f44293df041390a384a2aac2dd224488117ddcc4f0c15245322597b1", + "libraries/freertos_plus/aws/ota/src/http/aws_iot_ota_http.h": "31b163f629af2dcacfac4d2d7006c47a67ae80590e739d5e9ac95131edae2540", + "libraries/freertos_plus/aws/ota/src/mqtt/aws_iot_ota_cbor.c": "d72c60fc721724da9c96e952d326db64510c85bbe7e3622a8a9c218b2a3687c9", + "libraries/freertos_plus/aws/ota/src/mqtt/aws_iot_ota_cbor.h": "2ec1f8fc7211d684f84df8663e03b227bac0fd2c3ec672acf3e9dbbc7b3f7b08", + "libraries/freertos_plus/aws/ota/src/mqtt/aws_iot_ota_cbor_internal.h": "6216ff295ec1bc8462f586e040413e670c528c948fd7c913c94c38738ca0fc8c", + "libraries/freertos_plus/aws/ota/src/mqtt/aws_iot_ota_mqtt.c": "54e002b3f4eb0d786e3c1560c000722ea4ce31680b5a1fedafa578bba58284d5", + "libraries/freertos_plus/aws/ota/src/mqtt/aws_iot_ota_mqtt.h": "8c5875e1bdcc526808cbe568633d93bc91fb97f59abddf14b38c91bc12545044", + "libraries/freertos_plus/standard/crypto/CMakeLists.txt": "481befa1e33d2e1ebbacfd42083ebd9e4241905936132ec0d5f1c6161a9c21d4", + "libraries/freertos_plus/standard/crypto/include/iot_crypto.h": "430a2b08df14ee1b397efc666544a128003222ddd1f26d17cf346c9bc7bf31b9", + "libraries/freertos_plus/standard/crypto/src/iot_crypto.c": "7e837f3e07fc4eb76554386413eca2854ff8ac64171519121ffd8fed293fa611", + "libraries/freertos_plus/standard/crypto/test/iot_test_crypto.c": "c54a8611e6d6f50c6eda53631573c1f509fe262e789a92e63d1bbc37e9b0a4d3", + "libraries/freertos_plus/standard/freertos_plus_cli/CMakeLists.txt": "e00100014f7209e35f71f54f5f8789c136ce62160ca07f6a414c989eca594136", + "libraries/freertos_plus/standard/freertos_plus_cli/include/FreeRTOS_CLI.h": "7de127b16025300d2f54a063aa4e122c464a060890875705e45cdcffdcbca295", + "libraries/freertos_plus/standard/freertos_plus_cli/include/FreeRTOS_CLI_Console.h": "d431af28dbc1110cd58d06a90c317413aa73386c800382647d9de56525940f37", + "libraries/freertos_plus/standard/freertos_plus_cli/include/FreeRTOS_CLI_UART.h": "63e0aaadf729cf0b0ec72457be88e054fec9366a54d2b20e5a1169ce12bee4b8", + "libraries/freertos_plus/standard/freertos_plus_cli/source/FreeRTOS_CLI.c": "702d1f733cc7f2f8ffab9e33c8b117c21a282b81de053e03f17cd9887fe2b517", + "libraries/freertos_plus/standard/freertos_plus_cli/source/FreeRTOS_CLI_Console.c": "cf12352c6959a994185ff186e949cab0736837b6a860e061b55dbf2b51af12a6", + "libraries/freertos_plus/standard/freertos_plus_cli/uart/FreeRTOS_CLI_UART.c": "bfe85e168f474dd85c1b04c25a7c451e86134f54e295179dbdbd650d09407515", + "libraries/freertos_plus/standard/freertos_plus_cli/utest/iot_test_freertos_cli.c": "337521d3f851419fd65b13f79e218728c4c8daa41b2ac801314c513879698441", + "libraries/freertos_plus/standard/freertos_plus_cli/utest/iot_test_freertos_cli_console.c": "af45dad1085f2c8466d751aa74779b86578fc5b3f50379654317716c1e498869", + "libraries/freertos_plus/standard/freertos_plus_posix/CMakeLists.txt": "2d110d1d29d9ef1dd3f73912e38a451f498c24711466787004f5a7624a0b680f", + "libraries/freertos_plus/standard/freertos_plus_posix/doc/Doxyfile": "71907a1ca6b1cae1114f2d16664148b74b6861e6f768c9ac04b1a9052f677105", + "libraries/freertos_plus/standard/freertos_plus_posix/doc/DoxygenLayout.xml": "6f6ef8c521e2943d9b596e7904bcd22a8f2d6253ce70fe206a030831e03fcd32", + "libraries/freertos_plus/standard/freertos_plus_posix/include/FreeRTOS_POSIX.h": "2018f496eb5d0d482c1d00e2881d863b3c3946224ec3165d773eb5448ca94f07", + "libraries/freertos_plus/standard/freertos_plus_posix/include/FreeRTOS_POSIX_internal.h": "fcd06b832232cf783e76f293417b238c97d7ae4b08b9a8feebf03de6521b86e1", + "libraries/freertos_plus/standard/freertos_plus_posix/include/FreeRTOS_POSIX_portable_default.h": "766d7402b43f56a3171581bc8134d54675dab4c09ac85b9a39f0c13729050495", + "libraries/freertos_plus/standard/freertos_plus_posix/include/FreeRTOS_POSIX_types.h": "fc8cf5e542d75add0b383577b5b7fdb8cae57cb3a2c64832c4c94b4b20553346", + "libraries/freertos_plus/standard/freertos_plus_posix/source/FreeRTOS_POSIX_clock.c": "b170317d13ef4ac9badc1d00afaa87655f86e7b94e4bf5064ecb1621b6ee511d", + "libraries/freertos_plus/standard/freertos_plus_posix/source/FreeRTOS_POSIX_mqueue.c": "5f7ea4afb1547c2e5006e873224de3bd69da039066ce4227278a50867ebd9de1", + "libraries/freertos_plus/standard/freertos_plus_posix/source/FreeRTOS_POSIX_pthread.c": "e22feecee2e094755d6dc0aee7be28d1d8dcf72d13d98d5c8922fc407474e446", + "libraries/freertos_plus/standard/freertos_plus_posix/source/FreeRTOS_POSIX_pthread_barrier.c": "43adaafd1338534907f5d0d841950320d8e01bb637b50ac0c765181c888e5892", + "libraries/freertos_plus/standard/freertos_plus_posix/source/FreeRTOS_POSIX_pthread_cond.c": "3c1d23aefa4d415c025a89d0388b53ae6d0d128e34ed23531a450116cddecaf7", + "libraries/freertos_plus/standard/freertos_plus_posix/source/FreeRTOS_POSIX_pthread_mutex.c": "d217516b0ba41c02d9b491d511a81ea3a73780de6cc0a6e527347fda7753064f", + "libraries/freertos_plus/standard/freertos_plus_posix/source/FreeRTOS_POSIX_sched.c": "668a4cac8f3bf0407067db17aef8361a572bc7701421f8a57981f7a607877573", + "libraries/freertos_plus/standard/freertos_plus_posix/source/FreeRTOS_POSIX_semaphore.c": "6479146228437651b99a82c1c0b6d987d1531feea3e9694e9a78642069f397d1", + "libraries/freertos_plus/standard/freertos_plus_posix/source/FreeRTOS_POSIX_timer.c": "fc6f4fa34d4841b8722141f831be0191e33e8dad5b565bd22d5fe365defdece3", + "libraries/freertos_plus/standard/freertos_plus_posix/source/FreeRTOS_POSIX_unistd.c": "803294f5e4d427eddcbe89849aa12981335680d4cbaad1b97fccac37fcf955ec", + "libraries/freertos_plus/standard/freertos_plus_posix/source/FreeRTOS_POSIX_utils.c": "4a67ed8d61577fb4ff56a8b9811a5ce8729780c21cc14cbe9e19a23ec48a1fc3", + "libraries/freertos_plus/standard/freertos_plus_posix/test/iot_test_posix_clock.c": "f91d9fd78bdf34418fe4222f3752fc2bba1d681329e38b43e8d946cbe37d4281", + "libraries/freertos_plus/standard/freertos_plus_posix/test/iot_test_posix_mqueue.c": "912eeb6ea837aca95d88fbcb63be237239ee583319d157250ff9e856120734d3", + "libraries/freertos_plus/standard/freertos_plus_posix/test/iot_test_posix_pthread.c": "f02793e69e06da522fac7a2728983540d668c2a5f9dace05e1f4c6abd20c583e", + "libraries/freertos_plus/standard/freertos_plus_posix/test/iot_test_posix_semaphore.c": "0461bbedab67462139d12aaece2279490b73146fd5572e7c86cddb4b92f2109d", + "libraries/freertos_plus/standard/freertos_plus_posix/test/iot_test_posix_stress.c": "ba930da93fe8953cf0cbd95dc630da07bd5a409125895752fecd3db1a0bacf16", + "libraries/freertos_plus/standard/freertos_plus_posix/test/iot_test_posix_timer.c": "1e65f7b22962948f761f692c5276853f1ed602eeb4aafeace39e5599c868f738", + "libraries/freertos_plus/standard/freertos_plus_posix/test/iot_test_posix_unistd.c": "e0b2ce70d62b9b153d09c11a265fe44d03c34dac72b01aa23dd9b6a767d0b889", + "libraries/freertos_plus/standard/freertos_plus_posix/test/iot_test_posix_utils.c": "3352d2f4f0b5dfa8b26b360ec74bbf0126c11baf57762cf961d179bbca4c6071", + "libraries/freertos_plus/standard/freertos_plus_tcp.cmake": "65fe34d30f92b7d85a761ab8817910f11059dc760e1298af661517f41569e4fb", + "libraries/freertos_plus/standard/freertos_plus_tcp/FreeRTOS_ARP.c": "a270eed4926e4aa2ba0aff17dabbdf89bda435d104586e65ef1491cb47feabeb", + "libraries/freertos_plus/standard/freertos_plus_tcp/FreeRTOS_DHCP.c": "e877fa52ef7af3066284be53b96a87f7754a863167b0ae8e0649bc4ad7d40c5f", + "libraries/freertos_plus/standard/freertos_plus_tcp/FreeRTOS_DNS.c": "a47ce04a889c396ecfc8acb0b4cff3a4aee89913dfb4a21afc34f48e8c189196", + "libraries/freertos_plus/standard/freertos_plus_tcp/FreeRTOS_IP.c": "90122392833358cb09a4a81c8053f30ba157d5224af871fe8f5d0dca953dc3f3", + "libraries/freertos_plus/standard/freertos_plus_tcp/FreeRTOS_Sockets.c": "c72b205e5653d26e579a68c500c43e1847aedde2db79e078c520aa03a04972b0", + "libraries/freertos_plus/standard/freertos_plus_tcp/FreeRTOS_Stream_Buffer.c": "082f6e847085091d3fa26a580c21202ac5a63dc82e1ee5a2f1ea30f383b0cd91", + "libraries/freertos_plus/standard/freertos_plus_tcp/FreeRTOS_TCP_IP.c": "c2f2f3651cc35cc2d741f8342a6a51c95f630b2fb1d29da8f1e4fe302041a446", + "libraries/freertos_plus/standard/freertos_plus_tcp/FreeRTOS_TCP_WIN.c": "ae5a8653ead35cba49c899c20d442e7a02f0e06894d2ed24c21923181a00c508", + "libraries/freertos_plus/standard/freertos_plus_tcp/FreeRTOS_UDP_IP.c": "ed2397a207d4692e86b7fa6c96c9dfb20806c691562c0abd7482cea22b1941c0", + "libraries/freertos_plus/standard/freertos_plus_tcp/History.txt": "14444b020933d64403a5eb7a44f1144f6750b91296d9a1bd51e034952c15c972", + "libraries/freertos_plus/standard/freertos_plus_tcp/LICENSE.md": "508a77d2e7b51d98adeed32648ad124b7b30241a8e70b2e72c99f92d8e5874d1", + "libraries/freertos_plus/standard/freertos_plus_tcp/MISRA.md": "c2f61079e65ad438c7d74550a1bf8958457da9bcd65861aa6820f7ac29395a4d", + "libraries/freertos_plus/standard/freertos_plus_tcp/README.md": "ea4a6f76004cae4ba33b1b2c077dcf72139cd7905e8afcf69960f7c206031604", + "libraries/freertos_plus/standard/freertos_plus_tcp/ReadMe.url": "6c821ec481c65c354d181c49e519d0dde0def21bde8e85e7350bdb87a946941f", + "libraries/freertos_plus/standard/freertos_plus_tcp/docs/doxygen/config.doxyfile": "71fa4d9cae8b5c3628806eb2129f10bf99db95fa0efcaee9e9b0eab6ec003e65", + "libraries/freertos_plus/standard/freertos_plus_tcp/docs/doxygen/layout.xml": "555a70789f54c525456ad9d30730614fe7119afb8b81dd8f8067af28dd14f66c", + "libraries/freertos_plus/standard/freertos_plus_tcp/docs/doxygen/style.css": "e3d3b4438744aa4d547bcacc6e64f3fcfc5057b476c5237e5107e6bbe0aac72a", + "libraries/freertos_plus/standard/freertos_plus_tcp/include/FreeRTOSIPConfigDefaults.h": "8da78f305a7190c4467a925dd0f2862e48ce85e8cc59f0fc5cbdbbb4500e0b66", + "libraries/freertos_plus/standard/freertos_plus_tcp/include/FreeRTOS_ARP.h": "cf63bc041c5253ec98f0e99a24cd9632390ad3155513878acd84cba1a5e36df9", + "libraries/freertos_plus/standard/freertos_plus_tcp/include/FreeRTOS_DHCP.h": "d367d65e193764ef9196ebb3047d090996059e835b133485716e2754938f3ab7", + "libraries/freertos_plus/standard/freertos_plus_tcp/include/FreeRTOS_DNS.h": "4b3a0aa2229d83b82177c76ea52f2850783de0c94338c71c96e54f80fe3193f1", + "libraries/freertos_plus/standard/freertos_plus_tcp/include/FreeRTOS_IP.h": "f5f29e00160d83a89791d23db91ba66de860eb59b0ec30e7bd9a290ef490187b", + "libraries/freertos_plus/standard/freertos_plus_tcp/include/FreeRTOS_IP_Private.h": "35464c7c9f6d9c1e1df087b1e78095a7482ec425c1bf23d4c2fb383584ba4b6d", + "libraries/freertos_plus/standard/freertos_plus_tcp/include/FreeRTOS_Sockets.h": "398a33e571ceb503775b0c38e3526ea9e802b8f196c93c6bb9def1aed146e07c", + "libraries/freertos_plus/standard/freertos_plus_tcp/include/FreeRTOS_Stream_Buffer.h": "ad40c09c20217a9b7b7a9bc5428795d4f984f37137444cccd5a838bdf14fb6f8", + "libraries/freertos_plus/standard/freertos_plus_tcp/include/FreeRTOS_TCP_IP.h": "cdcbdc63361882781a3780590490334e4314a125e94e624585c9dcaf4fd88e51", + "libraries/freertos_plus/standard/freertos_plus_tcp/include/FreeRTOS_TCP_WIN.h": "d52bcb271c12a76a5035fc38552946b7dfc29b0cb3b35041d3dfd72d39982656", + "libraries/freertos_plus/standard/freertos_plus_tcp/include/FreeRTOS_UDP_IP.h": "90d584e6df3517df934d91691db60f7ab0e72f13341ce8a83d1055e2b5552c85", + "libraries/freertos_plus/standard/freertos_plus_tcp/include/FreeRTOS_errno_TCP.h": "9c26ccf13f3998cfddb553c36ab575e834510cb7ad1cb2717296542d313d54ef", + "libraries/freertos_plus/standard/freertos_plus_tcp/include/IPTraceMacroDefaults.h": "3ac7aae8a855222cf4639221ec51866c94cba91b9d4ef840a516e0913603191c", + "libraries/freertos_plus/standard/freertos_plus_tcp/include/NetworkBufferManagement.h": "0331f99c9cae5847daef64c8c8994927a1d00b52377a0a302fde7a86c887d051", + "libraries/freertos_plus/standard/freertos_plus_tcp/include/NetworkInterface.h": "56bab67595d2845182a6906d6a23b734f08314908b250db9b3197d9688ff9b58", + "libraries/freertos_plus/standard/freertos_plus_tcp/manifest.yml": "e0b02279d0892fad65af80469875dd99a8c241cb9d683721626afac52bbe651d", + "libraries/freertos_plus/standard/freertos_plus_tcp/readme.txt": "650a32b9db6e75a5bddfded2e44b5e137a9f9ba76124451eadd452b00c3c8010", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/build-combination/AllDisable/FreeRTOSIPConfig.h": "fff034ce69843890bbc87467fb23e891da26ebb266de6a72aa4d3e87f806f819", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/build-combination/AllEnable/FreeRTOSIPConfig.h": "06c1c2d37d40ee7c54a8def533c2700f4fffb2f12b8c906b3145249377fd0a2d", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/build-combination/CMakeLists.txt": "82b95b38c56a52495c2acb28c2f08964dc7bba2aec29458a2f571dc9fb9172e0", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/build-combination/Common/FreeRTOSConfig.h": "1d57ec870baa67fce22a12cc94c8cb9a4ce52ae912919372c177d20aaf16509f", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/build-combination/Common/main.c": "b29e96615f076896c2d0094e2b2771a963f3bf4731e7f21a940f181833e3276d", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/build-combination/Common/winbase.h": "dd72cd6385688bc28589ec7f07527e689e0581d15a0b91ab7690ebed3b122e5a", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/build-combination/Common/windows.h": "dd72cd6385688bc28589ec7f07527e689e0581d15a0b91ab7690ebed3b122e5a", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/README.md": "2e1517b705e63a4034c4d5c38a72adef06c3e7e216db5954d180143be8023349", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/cmake/compute-coverage.cmake": "8cc293e091fd5150d51c2ed38767eca810599ec591c3e1ebffe34babc5e81377", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/cmake/compute-property.cmake": "e244ad6756696ef7541d40f4aeebe3f9fdd9bfa9457328d66fecfcbc2e4dea0f", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/cmake/model-check.cmake": "d0e3c0e331f9e7658ebd47ed91ed0f075be87710d64203198244d86e34786443", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/include/README.md": "d92693cca3094d662b72784110946c09a66a8303dd0b03f3461f8b7b62280262", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/include/aws_freertos_ip_verification_access_ip_define.h": "81cae509e8ecd058785ec1eadf196553f4547ffbf5e991a18122b38ad9cc05f4", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/include/aws_freertos_tcp_verification_access_tcp_define.h": "970e55f94b54e0e4a3ca16816f1234b39724624711feb00a9ca4509dabbafeb5", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/include/cbmc.h": "bf3fb8dbc20e9af8ca69287d4e6f91dda6cccd423bfa340b077df180a288209a", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/include/queue_init.h": "8420699152826dbf680bec3cd2efcf2872ae1b23b48f0b4dbaf2eeb52d8ae3db", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/include/tasksStubs.h": "fde7c87b4aac3632fd9e677df58467fe2f0996af025feaf35dc9897daee45879", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/patches/FreeRTOSConfig.h": "5e96cb98802fe80958e58712eb4485d3b2ba6d1ce43481841f856795edeec52b", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/patches/FreeRTOSIPConfig.h": "688e1fd00acf6848ba2defe690ec13b09909842ec4f023640ed9427fe5e387df", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/patches/Makefile": "62f5359d2c57c49751e667130dbcad7f026a94a73ded970686ecd6b4890d2b07", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/patches/README.md": "bec763d9c3a15d46899989dcd7a28f443123b8579d8d6fffaf5d80d041417070", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/patches/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/patches/__pycache__/compute_patch.cpython-36.pyc": "fe73400b72e2e034b1be43e64964f3f354e9108d58ff5a3897dccbb982af675e", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/patches/__pycache__/patch.cpython-36.pyc": "1934234b94d63788c77137417dbc4717c56e9b8322b47bdb2dfcf62c311b5e08", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/patches/__pycache__/patches_constants.cpython-36.pyc": "c061304856f947ea1d0c29e5a8d1f5e7498bd24010544d187ba3fe734c244d0e", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/patches/compute_patch.py": "97cc6c1fbadf52dbd5014220d462163279ccf4afa71f4cf0b904b870efb793d9", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/patches/patch.py": "42516fa3e5214e434f6755e15756d67c8ba7ca1a970f021f628777cbfe69a0c2", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/patches/patches_constants.py": "317f874431820fce7a913501b2e1a711df3d3fb1bdb598a737adb0a15816ccde", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/patches/unpatch.py": "21bd4f2a468f1aaec312212587710cccec3489f419fbb6fcc16acc25784b0eed", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPAgeCache/ARPAgeCache_harness.c": "39853aeaeaa191017a994c531f88b0f76889661f0c306576ca567c9e09b424aa", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPAgeCache/Makefile.json": "9707edb8e400212ec97f84e60c10f9d40f73d6937cb1c38b619b8f970c612d6c", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPAgeCache/README.md": "aeb4610ac4385bf15b340a3e79e90a89bbb558a823e6f4e42421e389aefe1910", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPGenerateRequestPacket/ARPGenerateRequestPacket_harness.c": "e837b81f4b7c2a7f9042b10de1956ce7dc86aabba1c92a7681fee08f9492fcce", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPGenerateRequestPacket/Makefile.json": "c68383eb27ee62c4771f294646287662962b8251e7d85ee575058deb6e586082", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPGenerateRequestPacket/README.md": "b9a210fc5d5ab9fc6d9bc5c907842f9aa249e28eb65fb336306e125b69459640", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPGetCacheEntry/ARPGetCacheEntry_harness.c": "f26d923851165ef0e828adf8e4289a801d5e27f43edea5f248a7f1801f817d9d", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPGetCacheEntry/Configurations.json": "51bd3e04a590b0df9700515ebf0acb07239fe2def64600a87d6c96ba4df0c168", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPGetCacheEntry/README.md": "9916569965ddce1f39f0610a330d27f66e3e62dc218b25d3d9c1689e6f536db0", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPGetCacheEntryByMac/ARPGetCacheEntryByMac_harness.c": "a4568be01085a5f4a087e32f8a031b3e4d91d058ee147998ecf4277ac2ab3cff", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPGetCacheEntryByMac/Makefile.json": "9faea9ff5dd12f067477e85748161651e561c19c797bc8407312dc1d99b5e1f1", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPGetCacheEntryByMac/README.md": "ee9b0c769051950546b1c962b3e761249b52fd0133132fbeed05cdc355e54dab", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPProcessPacket/ARPProcessPacket_harness.c": "d846786713d407f84bf632fb2b6a06e5ea80b51c4d657cdf4b6ca0de6fbcdc43", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPProcessPacket/Configurations.json": "8802a9d06c9a896f2b9826d200b517ac8a211870cad6416db2870d0f1bb6837b", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPProcessPacket/README.md": "1a3af6593d7cd50a343eb2740d47f2d9961a3a77f2ef56a1b46829d0505b8235", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPRefreshCacheEntry/ARPRefreshCacheEntry_harness.c": "a2b4e339af9b8bba5d643abf24e3bd2bab2a43cb7e482682d5141682892230d5", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPRefreshCacheEntry/Configurations.json": "71cd19e3171854bcced175cbcedf17a79975da5f2651fd4e3a7b0f499bdb8263", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPRefreshCacheEntry/README.md": "f9bb7a176f5f924937512440c589b38fc7c3f7a98a4fe91386271711cc3d2871", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPSendGratuitous/ARPSendGratuitous_harness.c": "dcbe3a280bc06976fa83cdf1801da20421a940d04d9f905118cfb58067a36d9d", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPSendGratuitous/Makefile.json": "66659ee852d417e08acedab451252f549865bc592b3152162935fcbe09dbbbdd", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPSendGratuitous/README.md": "b6c9ef7ad2e0e24f43e4a45e85ba47eeb66502183960e46f291472f4e9e33f9a", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_FreeRTOS_ClearARP/ClearARP_harness.c": "33f0182d87ac5473bc3128e6d3cad662cd21c2de5008be3d9f5d1f74dc80a081", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_FreeRTOS_ClearARP/Makefile.json": "e035a4838878a8b897117322a47d52bf95818ff8b1f578217e0db8e94b634675", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_FreeRTOS_ClearARP/README.md": "6fbeffc40126d0d55fa78c1d439941c30e615437edb3908fdf7f3691385ef214", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_FreeRTOS_OutputARPRequest/Configurations.json": "8ed33822a5203a290cd01cc15d00865827934f6260868be09a1026cfb54f3451", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_FreeRTOS_OutputARPRequest/OutputARPRequest_harness.c": "a918785af996de56583ebb6a3e0f01cc64971d229a71d4697b65ead685884184", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_FreeRTOS_OutputARPRequest/README.md": "7e5a27411840d03fc4367959642c2b601d0f6f586f1b9881dcba905f89f0ad57", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_FreeRTOS_PrintARPCache/FreeRTOS_PrintARPCache_harness.c": "b010fe4cee6944110c5ed1321f5debc8701763854917b7f61cfa1fc0ea2430a3", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_FreeRTOS_PrintARPCache/Makefile.json": "f0733aee20251ce681f6e80055a1f7116f119273bd4af4e05d2e791ea0e7ef34", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_FreeRTOS_PrintARPCache/README.md": "fc60542585ae6e44bca336874b376b4dfac645ccc167c685b0d5d841b1d85881", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc1/Configurations.json": "cf1f8dab26ef867fd3c838e28b8e214e81dc084361fc9446ed371e77b9b735df", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc1/OutputARPRequest_harness.c": "e8a8cd3b93348c008809512da53456566430b7d5c24273c43fe7f5ec0a1ca452", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc1/README.md": "36a9e7446602693c416fedc98c38a543cf4f298a402ea939991cc01b0ac3884c", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc2/Configurations.json": "5c34c28eef561dc28dd73f2ecefb9f908b5489011846d602021b880eb1008268", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc2/OutputARPRequest_harness.c": "98a029dff3d797a349d9a2304bf40b0ae6ad9af2040d241fb52b9e440408592f", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc2/README.md": "93506f031fd2552b5892c1257925cba330d4f1dcf38c8f8ea7fc0a65c871d796", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ulARPRemoveCacheEntryByMac/Makefile.json": "f7db10c26b07d66c3109a068d9678f3ae5aa2c2d344eb1fdcb0814a5057207c3", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ulARPRemoveCacheEntryByMac/ulARPRemoveCacheEntryByMac_harness.c": "c785b6e319302226dc5bee6d9efe9df521051849b1ec253cb919c51e265d83bf", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/CBMCStubLibrary/tasksStubs.c": "4bf5c310c91f77e06e35af264151997cff2942e2e0c39b7f1604a486a68841cd", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/CMakeLists.txt": "52530e97d5d959bdd795f264974680a2849147c8809809cfecaf814422dc7d91", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/CheckOptions/CheckOptions_harness.c": "13ec4642c6d4a496a699227395c9d954ec2e0f85d78f5458f88c8187df5e0450", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/CheckOptions/Makefile.json": "ab871a90c3db97a915aa03ad7c61058a34428f97a7e8a86faf8c4ce273b49d6d", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/CheckOptionsInner/CheckOptionsInner_harness.c": "8f035b1e329d91be5dd56a094e4061d81d4ade5b5ad5f4065dea1cc491eaa5b5", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/CheckOptionsInner/Makefile.json": "49a1ea8e8f3b6c11d68952127e80284d82c7e8ef9b2570ed09ba41b3997a4066", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/CheckOptionsOuter/CheckOptionsOuter_harness.c": "96078cd7c26d07e3cd0b18034d46d90a732525d459fe0de00b2619daa5fbf9ad", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/CheckOptionsOuter/Makefile.json": "58ae4c249a87d9b29a874c102477d2265a338877749826f0cd95a9554467c3db", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DHCP/DHCPProcess/DHCPProcess_harness.c": "a202679970d0dda17a807c03eca7802efc446548c7be16ec3f3784910e916c04", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DHCP/DHCPProcess/Makefile.json": "626d63059105ce1514643147ddffc3988b1d546044b386a03535141e3f6e2759", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DHCP/DHCPProcess/README.md": "c085d7c4281dcb90bac65ba018f23cc99cc87fd8881db09c6e705e2439d01ca8", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DHCP/DHCPProcess/cbmc-viewer.json": "f7a7c8742c7a39f6e32d8b98e7545737a3c8e67fa943d0c292155f1d672e6eb3", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DHCP/IsDHCPSocket/IsDHCPSocket_harness.c": "e9fbb0aef0a3835206424b14e9c5c9b751834b7b28e1acf9d078ead2e91c406c", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DHCP/IsDHCPSocket/Makefile.json": "11d5ee4689ca8ca9ba9b57e8a3cdd337ae2b8f11dfdc8765eee8f6f0a1c00388", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DHCP/IsDHCPSocket/README.md": "e75d815637ab4e1815813c0dd0b49fc468ae55a06086fa5b3c0a64af4f0d0f0e", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DNS/DNSHandlePacket/DNShandlePacket_harness.c": "a5107448bbbc99321863bf4ab90072b70152bb6705d9582def020224ad90932f", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DNS/DNSHandlePacket/Makefile.json": "1ef08e9c4e70cd511f8b66de06f51df6f589ae92eb45a3d4d9398ee107101ec3", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DNS/DNSclear/DNSclear_harness.c": "9923b82ec4c04a108476081b2f66d2638ac350e18fc81a642c9f9de8b99006a8", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DNS/DNSclear/Makefile.json": "9454ff95399695f3e98878be8bdf99db80b305161abdace383c1098c69d016a4", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DNS/DNSgetHostByName/DNSgetHostByName_harness.c": "06545980dca3705c0b9fe9c7e94968ff74e3332cb8121c099f55cf0c85791ac1", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DNS/DNSgetHostByName/Makefile.json": "cf3edde6e69558394995861c5794aaaaee616b991ba20d2f45e5679536a32bd3", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DNS/DNSgetHostByName/cbmc-viewer.json": "56121f38e5cf50cb05e1bb0135469eb1a9dc32e5065f8fd250efd15b79e5097c", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DNS/DNSgetHostByName_a/DNSgetHostByName_a_harness.c": "22286b404c8e6ba1956968ccf079615d2d096c64255c1383bbc0f501301a79ef", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DNS/DNSgetHostByName_a/Makefile.json": "be12e2d37c1d3dfc61e13e36c975cb14ae826736b66d92aa47769728df2526ee", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DNS/DNSgetHostByName_a/cbmc-viewer.json": "8e50503d9a4d8ae8c90390f2191be8c1b2f6f9303cdfb3cc585890df6cef5106", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DNS/DNSgetHostByName_cancel/DNSgetHostByName_cancel_harness.c": "a583aa89d8e7a053f46d72906017f84364ae9f9f2a8106c34f0f62256e2c567d", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DNS/DNSgetHostByName_cancel/Makefile.json": "f2ebd17622bedfbc6354a93115bca218a67696917f04317a2ad514d4f50008cb", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DNS/DNSlookup/DNSlookup_harness.c": "c8efbdd6ccfdddd9c768aa661453fe13c7557147c3a0dc5edd4d9bb6fc44b5ab", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DNS/DNSlookup/Makefile.json": "be7a119d2872edfa54769c8591c1dee92be218b2756b87017dc4f9a3e5c181d1", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/IP/SendEventToIPTask/Makefile.json": "c89609bbc34e988316f7deee374ed7a184c5d72e1d37cb09bd678a8983fbbd57", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/IP/SendEventToIPTask/README.md": "170aa9d950c8c2d04dac100d2ac75abfa0923a9ecc44ca25ce1da56e759acab5", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/IP/SendEventToIPTask/SendEventToIPTask_harness.c": "b0710b779714c722a3015970547c1745cd8a76fd0983ac4529c457edde939817", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/Makefile.template": "f9876adf49fdeeb7badd4b21f5c6401de6e60a01878585963824d7052e32de50", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/MakefileCommon.json": "52a93cc0fe508c389057dc2983dc0c05721dbc1cd3742de97a0dec3258cd6d04", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/MakefileLinux.json": "975704e91f7538aef7031a454b2698834ed6408fa8eac0cc384f52c97c51c354", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/MakefileWindows.json": "cf34143c0c3c02b8b540fddd3ea87bced19c108b31090b4b4366e3edcbad8eb5", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ParseDNSReply/Makefile.json": "d368ee8897627f7ff790f5741b253a1053ba99b414582bb613fdeed4cda9ca67", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ParseDNSReply/ParseDNSReply_harness.c": "ba35b5d25b88a77944ddf152c8c3b162179838af193d7bc6ba9bb3c1fe676b21", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ProcessDHCPReplies/Makefile.json": "a4161729dc2e6b14638f16054abfade2222aba1f25eefad03accb2b935e2fa48", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ProcessDHCPReplies/ProcessDHCPReplies_harness.c": "024926d52d97b62728db7bba8c1fdcca919188a0ac4350867d71efbd3368c6e5", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/README.md": "fa4ba1c3a3b5a88c86b821f7d0aa22eebb9e70046d43dc460fac7d5892f2b7d9", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ReadNameField/Makefile.json": "5d51a30c1aa7a8f4aa7492eb0d14f68b0964e4e0c74f3e0aff93a513866e8a86", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ReadNameField/ReadNameField_harness.c": "34fd7098fe8cce44dccdcba0e445b725ee1ae7622fa4903b9344f4d45ded1bb8", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/SkipNameField/Makefile.json": "96adeffeb4bb05ac86708e8341a23f7cb35d6031cfc754a3b8c328e0bea798f2", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/SkipNameField/SkipNameField_harness.c": "a66f3a724513e7044bdc2e7b3b40c40f337ddb81e65780ddc96a817eb4bc77d2", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/Socket/vSocketBind/ALLOW_ETHERNET_DRIVER_FILTERS_PACKETS/Makefile.json": "46c28281e416d166bbece766ae8620d892318dc883b04628ff54eeb913e631fa", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/Socket/vSocketBind/ALLOW_ETHERNET_DRIVER_FILTERS_PACKETS/vSocketBind_harness.c": "63f6244069aed974439474296503f8a69527816be7908c8529f0e076d02e714c", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/Socket/vSocketBind/ALLOW_SOCKET_SEND_WITHOUT_BIND/Makefile.json": "bf1b01ad19681cb943de52c088c068fce196cc6f6517d60d213351624fc8a3e9", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/Socket/vSocketBind/ALLOW_SOCKET_SEND_WITHOUT_BIND/vSocketBind_harness.c": "335effd49efa9e747ad2e0660934b00ae69177f55a99ce5c2f6c35738575fbc2", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/Socket/vSocketBind/DONT_ALLOW_SOCKET_SEND_WITHOUT_BIND/Makefile.json": "602c647558918619a24613a03ef3dd11e61ad98c3c32a7355dcdefb2421a44a2", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/Socket/vSocketBind/DONT_ALLOW_SOCKET_SEND_WITHOUT_BIND/vSocketBind_harness.c": "c1c3482d895f8ac28089ff52abc33a7409d279e97bed71d0d9e3174522fa56df", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/Socket/vSocketClose/Configurations.json": "1165ac6563b46322ac0807ab4d003f4d6c550b1380323fcc41aeb1324794aff9", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/Socket/vSocketClose/vSocketClose_harness.c": "ae7a5f87cf16de5926490aa615c74513c3d64eb154b4ecf24e58b4bf9a7203cf", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/Socket/vSocketWakeUpUser/Makefile.json": "08b26aa99518b3af8b2eab242cee7bf87d8d61f3e9ead6dcb124d1d956699042", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/Socket/vSocketWakeUpUser/vSocketWakeUpUser_harness.c": "2345b200f4dd68bff538749765624e1b5c869b5de08933a352c82755920dda85", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/TCP/prvTCPHandleState/Makefile.json": "d9adb5a9fbf7bcf1a78e165ff992813d7512c8d0da80cd5dda378a7828d2dc3b", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/TCP/prvTCPHandleState/README.md": "f9f898124416839dbd3b5432a5232d3800185f2b1ded1bcd18ea66db5a71214a", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/TCP/prvTCPHandleState/TCPHandleState_harness.c": "c3f253f5fa6fef9e5556922bf4514f14716a3cf884e7fb58d8c19be28aaab850", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/TCP/prvTCPPrepareSend/Makefile.json": "5ee4ff453c7fe12ed33e2996b7dc4b227a05012d7872d59ed467bb248e2dce6e", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/TCP/prvTCPPrepareSend/README.md": "df7ed64ff377c328015e55520a5f267615ccf49505348382958115c818486819", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/TCP/prvTCPPrepareSend/TCPPrepareSend_harness.c": "ef35858a9a2191cd606f0fde111b646614cfc6fc90e55ef9ae87c8971408b1f8", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/TCP/prvTCPReturnPacket/Makefile.json": "50cc89565a5b5fd2faf12345b74318e960a1bfeedafa0993b3c7cb564961b46b", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/TCP/prvTCPReturnPacket/README.md": "c4707f113833ceaf60866136d09480c057efaea25584ad5364cf9d778000e7e7", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/TCP/prvTCPReturnPacket/TCPReturnPacket_harness.c": "4c6027b8268942c29464c6d01da6dc100f12c75cf57a2d4d38ca6eb20c2c4307", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/TCPWin/vTCPWindowDestroy/Makefile.json": "7521b2f78e2495ecdeb0a5256e4f6d625af702f96680d14b06653d8166143b7d", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/TCPWin/vTCPWindowDestroy/vTCPWindowDestroy_harness.c": "eb69c5897a89cc25abcff1a3ec2afc2756f4b74423c8b2afbcac03e27c52c93e", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/UDP/vProcessGeneratedUDPPacket/Makefile.json": "69bfae7729f172b2150ac378a293d68efeea63b32a9e8c2bddcb62e74cb3e523", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/UDP/vProcessGeneratedUDPPacket/vProcessGeneratedUDPPacket_harness.c": "2feee142d4d62ef6e80ab173da92cd715334bfbc43bda4dd52783c93d4f41071", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/__pycache__/make_cbmc_batch_files.cpython-36.pyc": "721f69b4985c50b5505fd37e7773be9f3baa766fa64026fb76f8d536e8435653", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/__pycache__/make_common_makefile.cpython-36.pyc": "7831124fdcbef17be51b7a07d72c9ad9d8d5d1df94b8b57fffac144a6c4df8b3", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/__pycache__/make_configuration_directories.cpython-36.pyc": "e9820d84a819b38a360baa6e1595cb0e4ca3d6694b4919cdd9083a65fc721c34", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/__pycache__/make_proof_makefiles.cpython-36.pyc": "1562d46a0155df32cdc15e663b7a117ff2954be6d9ba7cd3a03888168318a16f", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/make_cbmc_batch_files.py": "00df8582a3027ee0d2163dec55ba726bae3fad6ff311b22533bdbd9d8a0e8dd3", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/make_common_makefile.py": "a1f27cada426ad99d7ab90750f82d08b1c740598adc8a0624bcc888ffefecd98", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/make_configuration_directories.py": "33ec0021618c28068235af604c8bffe707dd8b0b50ffc1be20af272933bae02e", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/make_proof_makefiles.py": "8025bf79c7a7df6436b747b160dccf6adc2ba0d76738c6e8aebbea3e6ba1c0f0", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/make_remove_makefiles.py": "0b6a9b94719f649f93fa11c857484ec4927c50470dd607a49d88c5ebae1e99c3", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/make_type_header_files.py": "3ded76b45610b413e5b625abe5e55a41c2704392169dab6a501445d73fd37642", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ninja.py": "4ea9d353d825efd3f6dc94532cdf3e1fae680ab6a04872f62d2184dec24e7211", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/parsing/ProcessIPPacket/Makefile.json": "06140eba3a858b09047a1e2a09e11250b8c5c1503bbefe027798c299deb6c54e", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/parsing/ProcessIPPacket/ProcessIPPacket_harness.c": "5f25a3058f9aa91b31b5cf8ce6f3d97dd76741b6815b3fc33c51b5a964498877", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/parsing/ProcessReceivedTCPPacket/Makefile.json": "e1df2b5f2f615da68fa4da19de2429bfbb921d826cab160f25e39ccddf6a0676", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/parsing/ProcessReceivedTCPPacket/ProcessReceivedTCPPacket_harness.c": "f6b193bae898cee51b17a246921b1a6b3269d3be234409321cd43695136b09a8", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/parsing/ProcessReceivedUDPPacket/Makefile.json": "b29e945524a08d3dac189046e3e308d76a8610c8f61b5e9a2970184baa3a8728", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/parsing/ProcessReceivedUDPPacket/ProcessReceivedUDPPacket_harness.c": "e153a20de6b79fdc5a778f7c1250d3d55ac673e746a67ebf4f6650a296150783", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/prepare.py": "0fd5d2ad2cac14176330cde62826a853d4f4293d1a0441a2ab017e4ef252fecb", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/prvProcessEthernetPacket/Makefile.json": "b33145dbe58bb50b9ad32f04950b1c1e48b744b2ef8ac4a41a8e4fe0d82611c2", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/prvProcessEthernetPacket/prvProcessEthernetPacket_harness.c": "3471c1d5fc60a0e3053f081da85b1f5bba3ea1eb9e1a9334f99a320a52d63d2f", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/run-cbmc-proofs.py": "9ea1c57bbeb22242e8c830173cbe1906b821c2616013f62312a3c032a5f54686", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/utility/memory_assignments.c": "265d586bbf6fe31f3269e39f5b8cef9ec061d7cadb32edb6a896b835ad8390ea", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/stubs/cbmc.c": "d7406c1c0f880e7a73ff745545f5967c5f7b751e4816d6f7fffce9bfc0a6fc83", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/stubs/freertos_api.c": "cc1aebf98653d7f76996a688d897fd4eeb31ab4c26a6c26d20c8614eec24df30", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/windows/README.md": "fcea1660eaa6aa884003c87ad2092d5465e2f9355b82d98eacbe094e431d762e", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/windows/WinBase.h": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/windows/Windows.h": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/windows/direct.h": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/windows2/winbase.h": "44bac2a6b8cfbb11e3b4c27adb78bfe730cea8da62eb75be420eb0499d006652", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/windows2/windows.h": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/CMakeLists.txt": "1f39e3090be8d52f89debe6f54cd651f3d1c56a9d29150888cc60a9984ba1155", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/ConfigFiles/FreeRTOSConfig.h": "8762872d3a508e141a4b67c9c65721363868c83b3934689692392928a87efd40", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/ConfigFiles/FreeRTOSIPConfig.h": "2e999a469c09573cb6be76a149f547149c3515145ed450ef2674a741adfa9ae5", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/ConfigFiles/FreeRTOSIPConfigDefaults.h": "c8eb46dae180686102fb0f1ee06140bcd4041a01dd3d6e4e29387babb3b3cf03", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/ConfigFiles/FreeRTOS_errno_TCP.h": "d4caee738c896606b1d77940c572a60fc95629d74b510dad4f2e55893b895f24", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/ConfigFiles/IPTraceMacroDefaults.h": "56fa5f9875e92e4f30163a25d0ef63fbe171a3e22a61f9866859fced2565bb00", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/ConfigFiles/NetworkBufferManagement.h": "500e817036af01d88b3316c6f275bcc9ade09896eba034273b5ecde538ac4a14", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/ConfigFiles/NetworkInterface.h": "d8efdfdd8048b1928cad1a3b344916f2743a647e931130ff5bd9f00e66a509e5", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/ConfigFiles/WinBase.h": "9fe50d95cffddb9800ebb400c762c7bb7e7ece820ab4ee790c6c603eefbbc590", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/ConfigFiles/Windows.h": "9fe50d95cffddb9800ebb400c762c7bb7e7ece820ab4ee790c6c603eefbbc590", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/ConfigFiles/pack_struct_end.h": "a5628c709b78400763ccc6e0db1b45bc60b0253f0be8c7f637b7560e18b10047", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/ConfigFiles/pack_struct_start.h": "71ee6c7854b738c210a91c68d30ad4a6b4d4c5ba64f2cc0510ecfe77e037a75b", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/ConfigFiles/portmacro.h": "a1e4bef1b700ac9fb9d2d6f02e2fea3d1c1ada009790738668a8359b6e264d38", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/FreeRTOS_TCP_Unit_test.c": "f283e74ecb1912fba3cc8664186301b39a75337aa48e7f03227274f97f98d376", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/README.md": "c8396e1f028fdc6c4cfce82eb8987536484f61f2dd6cd84cda6226b9b8d4c487", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/TCPFilePaths.cmake": "9f330dcefb76567591969a198674b14d2101871173d22546c6e857770c8f8f83", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/cmock/coverage.cmake": "e155a5a4f89869c40aa52fd6b81dd6df0ba83dc01429d756c6a9cc382cee2b16", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/cmock/create_test.cmake": "29f47f117ac31311cd2c903185da0a9cddc7efbc4603d4093bfd673dd6897502", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/cmock/project.yml": "81e1d57b8a8b724ab9be3ac0985b800eea0271ec7c53d513ce22e2b371dd6060", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/cmock_build.cmake": "90a0d545d0848194b28b86ed0d0815c4bf9ddf6cb4a9f6aabf9259d63e669524", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/stubs/FreeRTOS_ARP_stubs.c": "4d9c33ec2705f90ef074aea7553058c200108a0dbc1f96a59774f7a859204cee", + "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/unit_test_build.cmake": "24d557a556205517dbe65de1dca22b2f454fbf294771d0cd272ed3a404166097", + "libraries/freertos_plus/standard/freertos_plus_tcp/tools/tcp_utilities/include/tcp_dump_packets.h": "5698278f5b08a81788087c959058cf8d160328d02024b857542236def8ced28d", + "libraries/freertos_plus/standard/freertos_plus_tcp/tools/tcp_utilities/include/tcp_mem_stats.h": "acde50800ea92d1776fcdb90e7d0d5406cdc07829d41ae370f322da3f71e4b41", + "libraries/freertos_plus/standard/freertos_plus_tcp/tools/tcp_utilities/include/tcp_netstat.h": "6a918f1867c970864abeccad8809e61bd66d2a391dc544d1da85055c18219994", + "libraries/freertos_plus/standard/freertos_plus_tcp/tools/tcp_utilities/tcp_dump_packets.c": "25696067947f82c80655e141eb96f806f203ef1aad7a93c9f1d2189bc5619d16", + "libraries/freertos_plus/standard/freertos_plus_tcp/tools/tcp_utilities/tcp_dump_packets.md": "b516c055037cb3e626e020569ea017f45f67b2c6a315539670807da107e04e62", + "libraries/freertos_plus/standard/freertos_plus_tcp/tools/tcp_utilities/tcp_mem_stats.c": "3b1f0dc9c84bc9756b675e036060335c2cc8905c25efde3d133375023afa88c1", + "libraries/freertos_plus/standard/freertos_plus_tcp/tools/tcp_utilities/tcp_mem_stats.md": "5e3c6c46e2cc64f7fed92c9e4fa3cc06ca9a64ac79c8ee62a3ef9485c7f2b6f1", + "libraries/freertos_plus/standard/freertos_plus_tcp/tools/tcp_utilities/tcp_netstat.c": "4432888f81412aee9f48989d132dcabe09bf0aa7aa4b7008282e98befbc7af8c", + "libraries/freertos_plus/standard/freertos_plus_tcp/tools/tcp_utilities/tcp_netstat.md": "cf041fbfd893defddc4ef9c9f51f3824e69e5fa56c9558a436a3b21de9298255", + "libraries/freertos_plus/standard/freertos_plus_tcp/tools/uncrustify.cfg": "55c02144fdaa3d62e03ed97e3e89a54b67d9433a5320ec02ec82e75344b21656", + "libraries/freertos_plus/standard/freertos_plus_tcp_utils.cmake": "9d414393edc498f8334f2f53675b1a134ccf884c0dbc3c243b5d399bc51f55c5", + "libraries/freertos_plus/standard/tls/CMakeLists.txt": "cf0ef0baf3fa24b73cc492a69a82e6b6f02f1aa0b413aea63e48795c37ea7f77", + "libraries/freertos_plus/standard/tls/include/iot_tls.h": "ee45a11ae88e7d22d9762b72117e2b67c17547376cf51db61ecc1d5e5a100780", + "libraries/freertos_plus/standard/tls/src/iot_tls.c": "cb2faf53ab378b6afefd2d976dee724a3bd7b147738919a6d7d1a8cafc2434ba", + "libraries/freertos_plus/standard/utils/CMakeLists.txt": "c26d41b8c622dfda9f55c41d6057415a4724ee7c5c569762e3d0297eb1c8472e", + "libraries/freertos_plus/standard/utils/include/iot_system_init.h": "2cb083ba7e32cfd7042bd1c4c72b73c73def1f054b5420f5dc40bfa46cce1242", + "libraries/freertos_plus/standard/utils/src/iot_system_init.c": "e563c4fabdcc6450ea0bb36eccabaa4ac77f834d8b7e497a65a7281b50b15bb8", + "libraries/jobs_demo_dependencies.cmake": "40d91d005bb75b44ef028d2639ae8db8b1e4c91a359626c94f3c6c39c4e6c566", + "libraries/jobs_for_aws/CHANGELOG.md": "0bb2d630437bea721220901923798c76b0a90d11d7acd1d22d200f8032ef3092", + "libraries/jobs_for_aws/CODE_OF_CONDUCT.md": "34b6c98d5c23127ae6769e95e483e5bf6d3704ae1f0d3ae4e69d15f4ede118b6", + "libraries/jobs_for_aws/CONTRIBUTING.md": "53d9deaabb4f35deb79bb7def2c10ec97bc1fa0f87ba76750555f095df81dc17", + "libraries/jobs_for_aws/LICENSE": "52f54173fb286e7baa536bab3fb2aef58891af07e96646fb4d80663fabdfdcfb", + "libraries/jobs_for_aws/MISRA.md": "9591e3ff387b720d4ff27337e1200d66b250df6bc67e933dd139f3fb581a47e0", + "libraries/jobs_for_aws/README.md": "c001ad7d01d75f8258f07ae2ae5c9785e485068e3faeb0d8b4c7d00e576a37dc", + "libraries/jobs_for_aws/SECURITY.md": "ff53e3502bc39dac4a7074fe790f663c56d6c7aacd5b66dc648049f685e1e44b", + "libraries/jobs_for_aws/docs/doxygen/config.doxyfile": "ab66418ba6bb60cd796ba162e1d791da2c2f1b90e834ac500755b9f85697e371", + "libraries/jobs_for_aws/docs/doxygen/layout.xml": "555a70789f54c525456ad9d30730614fe7119afb8b81dd8f8067af28dd14f66c", + "libraries/jobs_for_aws/docs/doxygen/pages.dox": "9b4d8278094facacd078fc20e9c1ff2fdef15956c4b55301e50560a9723dafbe", + "libraries/jobs_for_aws/docs/doxygen/style.css": "e3d3b4438744aa4d547bcacc6e64f3fcfc5057b476c5237e5107e6bbe0aac72a", + "libraries/jobs_for_aws/jobsFilePaths.cmake": "d3087ed94ffc75978efbb1a9b65b814e932c3fac918d9fd1126483ae9c1e2201", + "libraries/jobs_for_aws/lexicon.txt": "a335ba2217a9b48b2e11655567be4cd8e4205d93ed325b04887af35b85a62d39", + "libraries/jobs_for_aws/manifest.yml": "6bbb95b909829bb74b0c2f53a761d0ac55a0700f8fd8ccbeaf9457ffe37a5d76", + "libraries/jobs_for_aws/source/include/jobs.h": "5636d57de291d44b8bb17c5bc4c86a32879f7ea8b33a0215b073de598c2a3516", + "libraries/jobs_for_aws/source/jobs.c": "5c3b61fbc6efe600019bc2d4e41cdcbb19cefc2c0eac6de62127bec6ab7301fa", + "libraries/jobs_for_aws/test/CMakeLists.txt": "6deafc861516f7a851f204ec647d2e2b28fe261a5f54d03247e2390d7e64cfda", + "libraries/jobs_for_aws/test/cbmc/include/jobs_annex.h": "8186b7f577161f7d14715a48d3570824daaa0397a699464bc31bdff0d7f772b0", + "libraries/jobs_for_aws/test/cbmc/proofs/Jobs_Describe/Jobs_Describe_harness.c": "39b36c6cda388ec3652dc3e39dbaec4fb2f306dde99943b3d80532669bc798e1", + "libraries/jobs_for_aws/test/cbmc/proofs/Jobs_Describe/Makefile": "6190042ebaff0a10e5120fb954863a3877be91551d35cc41598a8065e9422329", + "libraries/jobs_for_aws/test/cbmc/proofs/Jobs_Describe/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/jobs_for_aws/test/cbmc/proofs/Jobs_Describe/cbmc-viewer.json": "56c51e53715ad3571a4f9128294810f61548b5c3a8afbad2d0e1212281cce9e6", + "libraries/jobs_for_aws/test/cbmc/proofs/Jobs_GetPending/Jobs_GetPending_harness.c": "98c03e5482b19483a3589ac56cffae3988a9d3f5ac1cc2dbb9dd0d9ee792beb8", + "libraries/jobs_for_aws/test/cbmc/proofs/Jobs_GetPending/Makefile": "53e8b18bc0b649145f99b5447cb76a066a9c7506ac2a3b0209c5494972944e47", + "libraries/jobs_for_aws/test/cbmc/proofs/Jobs_GetPending/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/jobs_for_aws/test/cbmc/proofs/Jobs_GetPending/cbmc-viewer.json": "430353f545d70238f34acc2116e5581356ccc290dd76e17664a59e6279332f43", + "libraries/jobs_for_aws/test/cbmc/proofs/Jobs_GetTopic/Jobs_GetTopic_harness.c": "f84cae35bc88baa339825e314c04e98a95097ad0255dcbb875e914ea9c691857", + "libraries/jobs_for_aws/test/cbmc/proofs/Jobs_GetTopic/Makefile": "dac91252d1eb79be142ba34283c6aa01d9cd5782dba9ebd683addb5ca0582f07", + "libraries/jobs_for_aws/test/cbmc/proofs/Jobs_GetTopic/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/jobs_for_aws/test/cbmc/proofs/Jobs_GetTopic/cbmc-viewer.json": "746dd960eed2716b927b81a2a71dcc13ea498e351433880609b7b0e480de185a", + "libraries/jobs_for_aws/test/cbmc/proofs/Jobs_MatchTopic/Jobs_MatchTopic_harness.c": "2c85f5775e28eabbd9c54e467fd22ec6d509895c2de30503c036cd3d354b842f", + "libraries/jobs_for_aws/test/cbmc/proofs/Jobs_MatchTopic/Makefile": "3fb470b9d88128cd5e877e587238434df2b6f74a1d1be5485703e0ac74172874", + "libraries/jobs_for_aws/test/cbmc/proofs/Jobs_MatchTopic/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/jobs_for_aws/test/cbmc/proofs/Jobs_MatchTopic/cbmc-viewer.json": "0325946e1f20129eb116942304d681f41cb689b59d08618475711faee1e944c5", + "libraries/jobs_for_aws/test/cbmc/proofs/Jobs_StartNext/Jobs_StartNext_harness.c": "e11ffa7847475d31dca19bf538560818bd8b68c33eb42dd965bd9da7c4effd28", + "libraries/jobs_for_aws/test/cbmc/proofs/Jobs_StartNext/Makefile": "11e87487163e26f7b2f520fb669c5f0c180ddf9da83d282fa268c0f442575319", + "libraries/jobs_for_aws/test/cbmc/proofs/Jobs_StartNext/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/jobs_for_aws/test/cbmc/proofs/Jobs_StartNext/cbmc-viewer.json": "e4fb038561f4e438c298b7b30d0143b848ce18b1192a1b77dd35184841a92ad6", + "libraries/jobs_for_aws/test/cbmc/proofs/Jobs_Update/Jobs_Update_harness.c": "45fb27565ae9a673534384590870fff09c61f874b5886cc39b57769485255ac8", + "libraries/jobs_for_aws/test/cbmc/proofs/Jobs_Update/Makefile": "be59e11bfef189d1af6b53242bfc7aa47e71134023020ea38acfb67eff772ddd", + "libraries/jobs_for_aws/test/cbmc/proofs/Jobs_Update/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/jobs_for_aws/test/cbmc/proofs/Jobs_Update/cbmc-viewer.json": "2e877e82d46bfa321d8e7f66ccad42429d9c10f897442d717f51ab9e8760a6f6", + "libraries/jobs_for_aws/test/cbmc/proofs/Makefile": "c1d36a39f39be91210133b2603ae89498f341cb16909ad45e8c26ac972031011", + "libraries/jobs_for_aws/test/cbmc/proofs/Makefile-jobs.common": "f2caa34e7c1c09a129d1bf20f44de38acde3b339c740afbe7099ef61c53a6872", + "libraries/jobs_for_aws/test/cbmc/proofs/Makefile-project-defines": "6eff809b1ed8668cfee5ec121780a92ed9674e9219560fffa8d90db624fa18a8", + "libraries/jobs_for_aws/test/cbmc/proofs/Makefile-project-targets": "16763b7ce1babf81ca45e9e2be29af49ed2e09b476a2687e1710632ccd50108d", + "libraries/jobs_for_aws/test/cbmc/proofs/Makefile-project-testing": "daad04bea5682eb4450d3cb65cd37d5bb822d487a5db0c2fed58fd188c02f052", + "libraries/jobs_for_aws/test/cbmc/proofs/Makefile-template-defines": "50b3687413c3a9a1e42a62954b1007e270fadbfda068fcb8e796b1862563507f", + "libraries/jobs_for_aws/test/cbmc/proofs/README.md": "5adff57e2d2a6544d212c84bb5809dc2c2d5aef02ee4832633f59678b3f29240", + "libraries/jobs_for_aws/test/cbmc/proofs/run-cbmc-proofs.py": "b37b71fb8ccf4b101ea1ffc65107c857f45fa6e228f1eb9e2041c017efd3319c", + "libraries/jobs_for_aws/test/cbmc/proofs/strnAppend/Makefile": "7c872d86e1041b74d87313e4e5b9f02c71a1dc813e72033a1059dd0ac4d5ec17", + "libraries/jobs_for_aws/test/cbmc/proofs/strnAppend/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/jobs_for_aws/test/cbmc/proofs/strnAppend/cbmc-viewer.json": "2eae33de0bc128cecf57c857585b48f74f052137807b3ece7639ddc4d027df85", + "libraries/jobs_for_aws/test/cbmc/proofs/strnAppend/strnAppend_harness.c": "810eba4e0e56007511f0623a1e9a16f32183353a664d87fcbb0062df16705a74", + "libraries/jobs_for_aws/test/cbmc/proofs/strnEq/Makefile": "6a4d33b3cc46fcdfc70b668e63b417712cb7da8ca1670b3ea9471ef06bc2a5d2", + "libraries/jobs_for_aws/test/cbmc/proofs/strnEq/cbmc-proof.txt": "7d902cf8fefe06b80fb9fde9e318ebb543a217aac703a6e4c72aea7b0da71eb7", + "libraries/jobs_for_aws/test/cbmc/proofs/strnEq/cbmc-viewer.json": "d14104e7347b9da636032cd236bf7a697bda1ea4f2f4c5705b331056259c30f0", + "libraries/jobs_for_aws/test/cbmc/proofs/strnEq/strnEq_harness.c": "97ec7abc9ace548d67757f67e8108231a1951d6254840aaa16e5af5d5556f954", + "libraries/jobs_for_aws/test/cbmc/stubs/strnAppend.c": "772b2bc8f0d7b9bdf4d3f37e68a467b39602a778b60aa9f991cd289870ccf06a", + "libraries/jobs_for_aws/test/cbmc/stubs/strnEq.c": "459c28b59feba8739a603351a54cdf9e8cfc3f0ccabf45f69c1879d5448f84b2", + "libraries/jobs_for_aws/test/unit-test/CMakeLists.txt": "1a40c32dfd0d259d179ac1cd70a1558f15d57685843ded616931a1c870ad6abe", + "libraries/jobs_for_aws/test/unit-test/catch_assert.h": "8dca7666e86fd56c544650456dfb261315c60e3d2d365e50ccb35fccaf9d7f61", + "libraries/jobs_for_aws/test/unit-test/cmock_build.cmake": "f7e241efa214d79cb74a29cba48a5338eff1ee6152fe50f0a286351b8b1ccb77", + "libraries/jobs_for_aws/test/unit-test/jobs_utest.c": "0147de170cc197deefe09abd27fd12ad8d18a24840c78f9b55372f04b9c3caec", + "libraries/jobs_for_aws/test/unit-test/unity_build.cmake": "0bd532c05dac6876647508256c5c50ff87b2c2017ab9e3cb866cf0722edc1ddc", + "libraries/jobs_for_aws/tools/coverity/misra.config": "9e43cf5f5988f6d32166fd4af9443b98c17c50dfbefac82188d8a8e987b44964", + "libraries/jobs_for_aws/tools/uncrustify.cfg": "55c02144fdaa3d62e03ed97e3e89a54b67d9433a5320ec02ec82e75344b21656", + "libraries/jobs_for_aws/tools/unity/coverage.cmake": "44684d66e5193f6c54e47c677c1efd3251f4e83c9893e336918dd90e72c922bd", + "libraries/jobs_for_aws/tools/unity/create_test.cmake": "086650d12714429c4130c386417e1aef985421f26c4c82a209ac0d40f71c1cd2", + "libraries/jobs_for_aws/tools/unity/project.yml": "12130e50fcf569eaee1c82ebf43c3accfdc599b0f42064ea6819a49f2089eb2f", + "libraries/logging/CMakeLists.txt": "2c536c9a42538b4866d98854dc8dcb1489f3cd1843d5dd87a6028bbbd39068ae", + "libraries/logging/include/iot_logging_task.h": "1dd75c6a35463ad2b2bfa522c74e9490ee788613de475b2bad7b5ead873b622b", + "libraries/logging/include/logging_levels.h": "344ef517508655a954e0efa052423015c5bbd9e20d4e19f59e83d8eddf09e581", + "libraries/logging/include/logging_stack.h": "459650dca0b8e2a5045b93dbb4b2dba65aee30c8c0ce1f4e58b35b3ea06eadd5", + "libraries/logging/iot_logging.c": "d755884d3106c4365ca0b57ee197bcdee4e3348b2f6ea39cac1635d526f6cceb", + "libraries/logging/iot_logging_task_dynamic_buffers.c": "97302d6a5ae10e9e37eeaa5c580ab23b0d6fdca98d85e69363be23dc596ba87f" } - }, + }, "minimal": { - "optional_components": [], + "optional_components": [], "required_files": { - "libraries/abstractions/ble_hal/test/ble_test_scipts/attributesCommon.py": "a4eca76d9a909cdb35bbb3b8fc2f08248900935ddcb26119cadf7a12efd9bd18", - "libraries/abstractions/ble_hal/test/ble_test_scipts/bleAdapter.py": "f5f102eda56dc3e4a9dd5d217a76451cb3d98ccc325a26ff371f0ba183966bd0", - "libraries/abstractions/ble_hal/test/ble_test_scipts/gattClient.py": "d2aca12ed4a620fb9009eba16d5a793d9d4b81b617c4b405d5e29ebdfd997b10", - "libraries/abstractions/ble_hal/test/ble_test_scipts/runPI.sh": "226ef495cdf367d326398d62b348a991cf01a99dc3df6e4a9eccfeb153ae948e", - "libraries/abstractions/ble_hal/test/ble_test_scipts/securityAgent.py": "108f4a63557798c64b740e0575ed699426782b0398ccbda4f60ac793089ccab3", - "libraries/abstractions/ble_hal/test/ble_test_scipts/startTests_afqp.py": "3a71d8b8cd82604d3344fa3110d157a9d01d3faa0e0613116a17389f7572c298", - "libraries/abstractions/ble_hal/test/ble_test_scipts/startTests_integration.py": "30b41b42d04a777b0f5b4cbfef43738868946ffa69cf2105b113a9ca7f88fe43", - "libraries/abstractions/ble_hal/test/ble_test_scipts/startTests_kpi.py": "7dfc4b8cbbf8795f7f054d3be9b3454f49666253573f7d6f2642741c344e8e55", - "libraries/abstractions/ble_hal/test/ble_test_scipts/startTests_stress.py": "91a6b6781284cd1b1f87b391d3695c96e673bf2e2e96750d28b8dcf1d858c251", - "libraries/abstractions/ble_hal/test/ble_test_scipts/test1.py": "0b22ea40c1bdb550d0b1dac1d91427b8811b8ca5f09422290be01baa9e42c05d", - "libraries/abstractions/ble_hal/test/ble_test_scipts/testClass.py": "f7e4fde0bbe016db98f9d8e432c189c8c42751afca9638569f4aacd431bcf0ad", - "libraries/abstractions/ble_hal/test/ble_test_scipts/testutils.py": "1e571b073d6184e95cd6e61d56f0c927d8f9882bcee1fa421e3ef221c31fb463", - "libraries/abstractions/ble_hal/test/include/iot_test_ble_hal_afqp.h": "4660cd048278613d15508bc9da70e556ad1e7d0e7efafbdbe7f1e7628de65cfb", - "libraries/abstractions/ble_hal/test/include/iot_test_ble_hal_common.h": "d6f84a433d8fece87d6fd1272a16b10e732b87e6dafea43275080498b8e5c8e8", - "libraries/abstractions/ble_hal/test/include/iot_test_ble_hal_config_defaults.h": "c903363afea6d4a48734f86e00e4779e77f164f0216a91d1794bef763a6a8f00", - "libraries/abstractions/ble_hal/test/include/iot_test_ble_hal_integration.h": "65ecd0a669f46385511d35335c7ca8f91e9df208f26e13265fc9ad22131639d8", - "libraries/abstractions/ble_hal/test/include/iot_test_ble_hal_kpi.h": "90ba3933acf588b1b37d237d30b2c99365b5c446d0a11485f6a598c744d7985f", - "libraries/abstractions/ble_hal/test/include/iot_test_ble_hal_stress_test.h": "c5607433cc84241984a8be56831f194e99ce85a8da3db2d46a22756fcf05a115", - "libraries/abstractions/ble_hal/test/src/iot_test_ble_hal_afqp.c": "d1855070ee01326e637e31c1a29973ddfaaa7465546527199b590a84135cc6ba", - "libraries/abstractions/ble_hal/test/src/iot_test_ble_hal_common.c": "ee89287628d854d7925f859408f534b17dacfd745bbb139b3c76b22872e823ca", - "libraries/abstractions/ble_hal/test/src/iot_test_ble_hal_integration.c": "cdd5fbf8fe82a42efc68017ac2f67b32fce69727da75f35430da19a72d4a0c99", - "libraries/abstractions/ble_hal/test/src/iot_test_ble_hal_kpi.c": "576457c49c0ae59204acda3e13e476cf614807a8cae793c06aa56dc8db42abec", - "libraries/abstractions/ble_hal/test/src/iot_test_ble_hal_stress_test.c": "85eb3f0bb84c078592a962398a615fe8c0f6bcdeb2c0875bd2fc96ed4e5e00c8", - "libraries/abstractions/pkcs11/test/MBT_C_CloseSession.c": "dd0a10f8c684fdfd9df5746b1edf9f5515d9d359a52ce1cdfc1c9de698cb14d2", - "libraries/abstractions/pkcs11/test/MBT_C_DigestFinal.c": "09247bf02ede9693829c2c7561427f02b1cc80e0ed06895d41f8fea6691f63cd", - "libraries/abstractions/pkcs11/test/MBT_C_DigestInit.c": "897f35f2595b614b555f04cfc374c70e6e4654002ce13aacd61cae21d4d91d73", - "libraries/abstractions/pkcs11/test/MBT_C_DigestUpdate.c": "b299d85f8f803a221dd9d40f9d7490f57ed05f0f2a6be0bcada3a6af1b785832", - "libraries/abstractions/pkcs11/test/MBT_C_Finalize.c": "1e563a74433510e7de870ec4be7b31521a7d090e5f9c416cbd7cfb3245e906e5", - "libraries/abstractions/pkcs11/test/MBT_C_FindObjects.c": "ef78970152d8ec949858fdbdbfaeae51a46262428dcc232c0787e27618296ac4", - "libraries/abstractions/pkcs11/test/MBT_C_FindObjectsFinal.c": "d6a6ce975898e6c9e0c45ee36466910dd75b61de38e4f7532773ece2935cda8b", - "libraries/abstractions/pkcs11/test/MBT_C_FindObjectsInit.c": "a5cc246e4f57a8d5bc729a0ce919cc93c333b3d0fe57f0720b908fbb56f365de", - "libraries/abstractions/pkcs11/test/MBT_C_GenerateKeyPair.c": "378f4ddb0f342e1a8c4f631e50fd3bee7d052c8b7465a74b06512815dace9def", - "libraries/abstractions/pkcs11/test/MBT_C_GenerateRandom.c": "d9f48da6a63727a9929bbb4c612f35753517b9d1a2af64ec8fdd0e7fa52f8dec", - "libraries/abstractions/pkcs11/test/MBT_C_GetAttributeValue.c": "6f489d4a49feb28f28c37ab49c20f96d076e9fd5213d15c2ac84994e3d406cd2", - "libraries/abstractions/pkcs11/test/MBT_C_Initialize.c": "8e9142fc4c853c871e276f60b9edea678ca5f36b3581beab5bda4f25c3d6d34a", - "libraries/abstractions/pkcs11/test/MBT_C_OpenSession.c": "6767be7184bd1abe0cc7dbc3a92637bcfcf29c43ef5966c3ffb69803a6aaea03", - "libraries/abstractions/pkcs11/test/MBT_C_Sign.c": "4030f4be14a82c86df0ee76448ee69db51e840782547c411d742eddc9d7f27a2", - "libraries/abstractions/pkcs11/test/MBT_C_SignInit.c": "e2f5093ea5bdcfd59526fe8239fb0fba3ddde03c8ecd9f50f9587ddaf06b56e2", - "libraries/abstractions/pkcs11/test/MBT_C_Verify.c": "8a56b1b5d43d553db37acce246b0d4002dbb598c69b03b8d190f0c031cd57f34", - "libraries/abstractions/pkcs11/test/MBT_C_VerifyInit.c": "1bae5160ddff4557250298cb65fb333322f4198cb71f3f4b1dd90c71a6da2acf", - "libraries/abstractions/pkcs11/test/MBT_DigestMachine.c": "8237e05dd173720a82eafb230902dfed71fc6ab9ae236a85dc441d1f861f81ae", - "libraries/abstractions/pkcs11/test/MBT_GenerationMachine.c": "0fef2662a4816c20fc7defa9c95f108086591c4eb2e6cb49cc1123fb3d7e5017", - "libraries/abstractions/pkcs11/test/MBT_ObjectMachine.c": "b992b9a1e0f5fbca591d23d6adc5521feef67a568e75d403458202e4ce61257e", - "libraries/abstractions/pkcs11/test/MBT_SessionMachine.c": "05f45787c452f7677d9cae8b1c09173c47f9712a9c700cbad572511622445a64", - "libraries/abstractions/pkcs11/test/MBT_SignMachine.c": "3c388a60eefa42b00b8a05cdc95f84b0362219fd5994473e2354f4ebfcc6f064", - "libraries/abstractions/pkcs11/test/MBT_VerifyMachine.c": "18c5dce1429b5a22a25c6c94f08e38e4016ac6bdae6cbb0ecce05ad9dea9de97", - "libraries/abstractions/pkcs11/test/iot_test_pkcs11.c": "98f5e01561b119568fc0efa0fc91d220daf5d1884d5a0a80c2098a6e9ce98bfc", - "libraries/abstractions/pkcs11/test/iot_test_pkcs11_globals.h": "ea483a99f1cb2378af879eb66ad0f96ebcaf1da4f83b05f8d21ddbbd933bf7ac", - "libraries/abstractions/platform/test/iot_test_platform_clock.c": "b1ce5f11acaf5d4f07bdfbc9fa0432dd3a3afb80875eabec1756b404e1832818", - "libraries/abstractions/platform/test/iot_test_platform_threads.c": "09cc9fa4576c6eb33386ac5cafbbb064c34a8be02fa252d0b922ead60d140b3b", - "libraries/abstractions/secure_sockets/test/iot_test_tcp.c": "b00a3da003bc20048bad54bca53af2a15a3bcf7a041af554a5252e1c06c9c759", - "libraries/abstractions/wifi/test/iot_test_wifi.c": "fc0096c4adc48842fd84690184c06233b731ca4dd29bac297690f6576bdf8935", - "libraries/abstractions/wifi/test/iot_test_wifi.h": "5a19517bf48ef66bebfdb1e04fb1f3cbdab7bf30e6d19620c373ccee4aac3399", - "libraries/c_sdk/standard/ble/test/CMakeLists.txt": "c332dbdf621b42384a139151acf9c5c3e06190a18d2e7ee25ac5f25cb9a46bfe", - "libraries/c_sdk/standard/ble/test/iot_ble_wifi_prov_test_access_declare.h": "8b28220244a9a6237673a254010b29a0a4c2e3aaf3502e38bb25124f913deafb", - "libraries/c_sdk/standard/ble/test/iot_ble_wifi_prov_test_access_define.h": "d5d07c1230d497a421f3c4d0f7b59f89b01706c4468372a9134280358b4f3a4b", - "libraries/c_sdk/standard/ble/test/iot_mqtt_ble_system_test.c": "ce334bcae67d2486f34f4ce98a2c1a66aebdf213e06f6cd694f68e75d285b76b", - "libraries/c_sdk/standard/ble/test/iot_test_ble_end_to_end.c": "d47ba1df33d16239cb1c99f0fe0e397d7befa6a8e83adb34d7299e4234b2701f", - "libraries/c_sdk/standard/ble/test/iot_test_ble_mqtt_serialize.c": "10c53a7c82f00638f501034f67dbd4e93050aceb07d59be0303a1cc5190e3518", - "libraries/c_sdk/standard/ble/test/iot_test_wifi_provisioning.c": "6bd06607991df48ddefd2dde5d47978eae9cf1fb75f0eed9baeed5ef39f5f9ac", - "libraries/c_sdk/standard/common/test/iot_memory_leak.c": "472e5f9c8c7b81d25180d462e3acda232d0bb0e294e9ba8529c3f5488f0315a2", - "libraries/c_sdk/standard/common/test/iot_tests_taskpool.c": "4e215e9e21e496c45ec19e5ee3c94ac50eedfd5af155e6b9a062074d193288ce", - "libraries/c_sdk/standard/https/test/access/iot_test_access_https.h": "19d8268a5d0a8062f62b428ef089b42752db207f0a117514a1abe318cd6a1603", - "libraries/c_sdk/standard/https/test/access/iot_test_access_https_client.c": "124fe06688f1f72557eefdb26210d0906ea38f371c8a58f2c8e565261eab54a0", - "libraries/c_sdk/standard/https/test/system/iot_tests_https_system.c": "dc022309604be41da1903faec7176c0dfc7310d6f0ec3912e1b9d90622fac52d", - "libraries/c_sdk/standard/https/test/unit/iot_tests_https_async.c": "b2f06f6db5ade5e044c97a4c305cd8494a93dfae290b3baabfb43291892994f9", - "libraries/c_sdk/standard/https/test/unit/iot_tests_https_client.c": "afd547b0cdf46e5e55a108cd10cfd8205448d43d937b81a6aa99bbeeedfd93a5", - "libraries/c_sdk/standard/https/test/unit/iot_tests_https_common.c": "6d95eb915178df134eb8c0583dd2bc4f4cec996fc2a7e714be209e408d314cfa", - "libraries/c_sdk/standard/https/test/unit/iot_tests_https_common.h": "b8243b0b9fe6a81f1267c8cc9442524d85f28410ea79b78966ee8b91978893f2", - "libraries/c_sdk/standard/https/test/unit/iot_tests_https_sync.c": "f41852514f51cfbfc21514f57f3431a16dad2f0af2eb641d51d9cb3404ade8a0", - "libraries/c_sdk/standard/https/test/unit/iot_tests_https_utils.c": "770b64166cd73f961056643c73ba6647a125264072ccfd67cee809833bcb1a63", - "libraries/c_sdk/standard/mqtt/test/access/iot_test_access_mqtt.h": "fb5a4da07122d303f952c02298c93bc78397e732994fb0bed52e744c944780e3", - "libraries/c_sdk/standard/mqtt/test/access/iot_test_access_mqtt_api.c": "d72d077fe2b3094d1c4aefdd0e0e8cd660dbc3c9f46899d598dad8f7f76a8987", - "libraries/c_sdk/standard/mqtt/test/access/iot_test_access_mqtt_context_connection.c": "72386d68a2e5dab1e46f7633327371e20be64d457b711d842c0b14f57386b62a", - "libraries/c_sdk/standard/mqtt/test/access/iot_test_access_mqtt_subscription.c": "03b9f28e87a4256ab1ce6858b76f2fb7a98c868780300ed3927e597fff55e74c", - "libraries/c_sdk/standard/mqtt/test/iot_test_mqtt_agent.c": "6e98d9d7a7071651cb63992c1483bf63e58b1f441a6fda607267ff9ca938b144", - "libraries/c_sdk/standard/mqtt/test/mock/iot_tests_mqtt_mock.c": "f0bac08d45dca744922b18a3969de793fcdcb5437156ce05c8c002221c30bf32", - "libraries/c_sdk/standard/mqtt/test/mock/iot_tests_mqtt_mock.h": "c69e8f43268b0f751db139e6a880cbbff212eccaadf0378ea07e09994ae7e8ee", - "libraries/c_sdk/standard/mqtt/test/system/iot_tests_mqtt_system.c": "6502b7291459634643aad4a2e50356c458c745b5a024410f3a2aa692bdeed6bb", - "libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_api.c": "a60caf1435f80406b5b3c911b311e520830e8c6579372dbf11804d5683e6f486", - "libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_metrics.c": "e94e5de09727eb18e2f6a7e458d0be581d6ada0d464de4e99517f3d7f3e9c9e0", - "libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_receive.c": "40110bf1d531db01263747d903147bdb367244f8d8d6651fd5576ad7c94e85ea", - "libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_subscription.c": "989b8a2324f3d9a14aeb9d8c26898dc5e6db7beecef0adcaed18d56ac29c6e6d", - "libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_validate.c": "682038d886ce951a48683a3a4993500e9546b83629849b1873321f68d0664844", - "libraries/c_sdk/standard/serializer/test/iot_tests_deserializer_json.c": "f5029fa6d03be5ca750f8c2f469ae5fe6e8d321be84db66867715c3541bc892c", - "libraries/c_sdk/standard/serializer/test/iot_tests_serializer_cbor.c": "476b07305cda499e36a416f057f44a64bd39390b0d73e1f3277020e0837ee4b9", - "libraries/c_sdk/standard/serializer/test/iot_tests_serializer_json.c": "34f0eca4d8793b1ec26706ec153caf9109026fe267ae5fa535849d1bfa222abe", - "libraries/freertos_plus/aws/ota/test/README.md": "4ced3c5630f4f80f1d521bbbf284a005764a3a30a0d493d03dda7b072c9e9f55", - "libraries/freertos_plus/aws/ota/test/aws_ota_agent_test_access_declare.h": "12f13edb214506945ef5705d643b8da9285f2f1d28068b4cf5c9f57ca7729dff", - "libraries/freertos_plus/aws/ota/test/aws_ota_agent_test_access_define.h": "f87ac9f64f61addfa1ad1af8c520c0efce5d3bd053dee03a9f73de2fe8a4b183", - "libraries/freertos_plus/aws/ota/test/aws_ota_codesigner_certificate.h": "66c35df6bc08423c7ff865be60f0552e3c4dd5944f007eb1dcd07f30ab38dfe0", - "libraries/freertos_plus/aws/ota/test/aws_ota_pal_test_access_declare.h": "29ec4ff20e2de3ad6804195cb5c0ac6435ff47e754fc4b8ece3683f0bdec4e45", - "libraries/freertos_plus/aws/ota/test/aws_ota_pal_test_access_define.h": "37c33a96adeaa79bf40f44fb3ab72d0c07cf6b7f39e68356657060c5df72a696", - "libraries/freertos_plus/aws/ota/test/aws_test_ota_agent.c": "692aa14daf0174b2c2b5d8bab90642adbe3c36a47466742cbefeca863925876c", - "libraries/freertos_plus/aws/ota/test/aws_test_ota_cbor.c": "0d093e61c8206be2aef35de6fbaaa1b2762b1479d31d692acd4690221d9bad6c", - "libraries/freertos_plus/aws/ota/test/aws_test_ota_pal.c": "f0f387b0e1d2d8eaad9e76f10ee332af4821e75f820d760d5ca1fbae17db6af3", - "libraries/freertos_plus/aws/ota/test/aws_test_ota_pal_ecdsa_sha256_signature.h": "1d7cc108377ccf2d0910421e7e8c05510c572799e5c16e4eb422e231f7c4af98", - "libraries/freertos_plus/aws/ota/test/aws_test_ota_pal_rsa_sha1_signature.h": "49443686ce2bb4b7fa4000bf5eb01bbbd2828b6946838a54bed30ca66582ef04", - "libraries/freertos_plus/aws/ota/test/aws_test_ota_pal_rsa_sha256_signature.h": "7972c85001d4f298dffd7392672e035c483006b871d64913614a60b2e9ac2fca", - "libraries/freertos_plus/aws/ota/test/aws_test_ota_signature_methods.h": "6015225bcc029fd04aa62f71f254badcd57daf68ddbdf12053f88d01669e175e", - "libraries/freertos_plus/aws/ota/test/test_files/describeStreamResponse.cbor": "b314ea57c902e90d41e2acebc0dc7dd9ba8924876d23a88754dd1c4765b21541", - "libraries/freertos_plus/aws/ota/test/test_files/ecdsa-sha256-signer.crt.pem": "79705066d68dc58ba6b5c9ad27e8c3f355184be078025ab76d1a1bc9a9cbeade", - "libraries/freertos_plus/aws/ota/test/test_files/ecdsa-sha256-signer.key.pem": "cb258c4d1d4e4fc355cd13051d4130719fba62257797cc3e17083443bb767b06", - "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_0.cbor": "bf223676be6a282853bc22c64faee719ab74068a4d7770d977a6f37c67400fdd", - "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_1.cbor": "72b22a9ea24016629f6d169b52e98e735ee9924bb4f13c1295f1efd5f6fc6abd", - "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_10.cbor": "e6b9ee23bbd6d33240bebaccd8ee9978230ad8e7206926246ed36a1a8d60e4f4", - "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_11.cbor": "14f6287ab8666bed3d2c0998763f1fd30baffee52e7fe79994c6ee20e868653b", - "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_12.cbor": "4bf01a682c8fcfe0c47fb78b04d73d61aa31a79f6bcb07410bc530edc22a18da", - "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_13.cbor": "fdfd00cb7c0874216925c7152c9491b38c9dd179bfaffeba954c4eb27947ca75", - "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_14.cbor": "207819f2f6d5d82a3d3b1dcea0f508e4fe217ca243bad33090940d7bf1e03128", - "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_15.cbor": "31910394ab515ca70c57aae3be88d14f9a35e3e66ba7c6c3132ef0b93830289d", - "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_2.cbor": "cfb32bc6d6fafed74e985824f0b731837372179aece4d0a84087919a256ee59d", - "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_3.cbor": "a4733133a6c983859459141909031bfbb153cca083b9e881f24542c05041ec7a", - "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_4.cbor": "509a62af0b2906057735a635572e8e17aed57e8f0c42def8736db880823ef65d", - "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_5.cbor": "b471bc1ef2bff3b72da84f9bef8bc4ec44fc6aec26d3501cf1b5991fb62732a8", - "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_6.cbor": "bfa28de6fbb8330be654728e64d935c7582c8aae45ab992a4f6c0b7f19b803a2", - "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_7.cbor": "e1614f15ca0fec4d3bec19e7d48be470066957de78bb41ba5870786a0d15f678", - "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_8.cbor": "e66c279dded094b1654748fdbb527eb290f3f142ac3f4f7edfb2c439a49b984f", - "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_9.cbor": "3536044b7fffe7ae1241823ed01bfaf056bb09a55d43f6b8e70af4ee62fffb17", - "libraries/freertos_plus/aws/ota/test/test_files/payload.bin": "cd5639809d3f72ab83ead330059af6fecebac84927704617bbccc710b1c23253", - "libraries/freertos_plus/aws/ota/test/test_files/rsa-sha1-root-ca-cert-key.pem": "9e97f6f9ea210b532a7b86eac12f0d97a1b6c372e22ab86187bf98e5e208c4aa", - "libraries/freertos_plus/aws/ota/test/test_files/rsa-sha1-root-ca-cert.pem": "b550b03c7b547629bd0ecfdbc5804cd72d6b57dc0ec8cf8a1bd2616215d602a4", - "libraries/freertos_plus/aws/ota/test/test_files/rsa-sha1-signer.crt.pem": "4a05cecf862a081237cee9207be87080e2c50544959f74be2c3908d7857b9da7", - "libraries/freertos_plus/aws/ota/test/test_files/rsa-sha1-signer.key.pem": "46d820537f7b3d57c8f9ee63d9019602cc9329a6cd0b6a5f8ffcdb1838125601", - "libraries/freertos_plus/aws/ota/test/test_files/rsa-sha256-signer.crt.pem": "5de1c733099a249e2424c38aa9b732094914f260ba2582cc39f9198f46d0b7d5", - "libraries/freertos_plus/aws/ota/test/test_files/rsa-sha256-signer.key.pem": "baceeaf3b8fb0e16a4d3eb8a1b016dfcd41f752270f00649311ba567759e9e29", - "libraries/freertos_plus/aws/ota/test/test_files/rsasigner.crt": "2b92ff249815c106222fa13ef62bf2353f2ebb9180c36c474203efbc055ed2dc", - "libraries/freertos_plus/standard/crypto/test/iot_test_crypto.c": "008bd3222452fe12bb61cfa1143b277f27b1d583fe81cfca85a6efd92e43916f", - "libraries/freertos_plus/standard/freertos_plus_posix/test/iot_test_posix_clock.c": "f91d9fd78bdf34418fe4222f3752fc2bba1d681329e38b43e8d946cbe37d4281", - "libraries/freertos_plus/standard/freertos_plus_posix/test/iot_test_posix_mqueue.c": "912eeb6ea837aca95d88fbcb63be237239ee583319d157250ff9e856120734d3", - "libraries/freertos_plus/standard/freertos_plus_posix/test/iot_test_posix_pthread.c": "f02793e69e06da522fac7a2728983540d668c2a5f9dace05e1f4c6abd20c583e", - "libraries/freertos_plus/standard/freertos_plus_posix/test/iot_test_posix_semaphore.c": "0461bbedab67462139d12aaece2279490b73146fd5572e7c86cddb4b92f2109d", - "libraries/freertos_plus/standard/freertos_plus_posix/test/iot_test_posix_stress.c": "ba930da93fe8953cf0cbd95dc630da07bd5a409125895752fecd3db1a0bacf16", - "libraries/freertos_plus/standard/freertos_plus_posix/test/iot_test_posix_timer.c": "1e65f7b22962948f761f692c5276853f1ed602eeb4aafeace39e5599c868f738", - "libraries/freertos_plus/standard/freertos_plus_posix/test/iot_test_posix_unistd.c": "e0b2ce70d62b9b153d09c11a265fe44d03c34dac72b01aa23dd9b6a767d0b889", - "libraries/freertos_plus/standard/freertos_plus_posix/test/iot_test_posix_utils.c": "3352d2f4f0b5dfa8b26b360ec74bbf0126c11baf57762cf961d179bbca4c6071", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/build-combination/AllDisable/FreeRTOSIPConfig.h": "fff034ce69843890bbc87467fb23e891da26ebb266de6a72aa4d3e87f806f819", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/build-combination/AllEnable/FreeRTOSIPConfig.h": "06c1c2d37d40ee7c54a8def533c2700f4fffb2f12b8c906b3145249377fd0a2d", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/build-combination/CMakeLists.txt": "82b95b38c56a52495c2acb28c2f08964dc7bba2aec29458a2f571dc9fb9172e0", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/build-combination/Common/FreeRTOSConfig.h": "1d57ec870baa67fce22a12cc94c8cb9a4ce52ae912919372c177d20aaf16509f", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/build-combination/Common/main.c": "b29e96615f076896c2d0094e2b2771a963f3bf4731e7f21a940f181833e3276d", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/build-combination/Common/winbase.h": "dd72cd6385688bc28589ec7f07527e689e0581d15a0b91ab7690ebed3b122e5a", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/build-combination/Common/windows.h": "dd72cd6385688bc28589ec7f07527e689e0581d15a0b91ab7690ebed3b122e5a", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/README.md": "2e1517b705e63a4034c4d5c38a72adef06c3e7e216db5954d180143be8023349", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/cmake/compute-coverage.cmake": "8cc293e091fd5150d51c2ed38767eca810599ec591c3e1ebffe34babc5e81377", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/cmake/compute-property.cmake": "e244ad6756696ef7541d40f4aeebe3f9fdd9bfa9457328d66fecfcbc2e4dea0f", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/cmake/model-check.cmake": "d0e3c0e331f9e7658ebd47ed91ed0f075be87710d64203198244d86e34786443", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/include/README.md": "d92693cca3094d662b72784110946c09a66a8303dd0b03f3461f8b7b62280262", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/include/aws_freertos_ip_verification_access_ip_define.h": "81cae509e8ecd058785ec1eadf196553f4547ffbf5e991a18122b38ad9cc05f4", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/include/aws_freertos_tcp_verification_access_tcp_define.h": "970e55f94b54e0e4a3ca16816f1234b39724624711feb00a9ca4509dabbafeb5", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/include/cbmc.h": "bf3fb8dbc20e9af8ca69287d4e6f91dda6cccd423bfa340b077df180a288209a", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/include/queue_init.h": "8420699152826dbf680bec3cd2efcf2872ae1b23b48f0b4dbaf2eeb52d8ae3db", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/include/tasksStubs.h": "fde7c87b4aac3632fd9e677df58467fe2f0996af025feaf35dc9897daee45879", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/patches/FreeRTOSConfig.h": "5e96cb98802fe80958e58712eb4485d3b2ba6d1ce43481841f856795edeec52b", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/patches/FreeRTOSIPConfig.h": "688e1fd00acf6848ba2defe690ec13b09909842ec4f023640ed9427fe5e387df", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/patches/Makefile": "62f5359d2c57c49751e667130dbcad7f026a94a73ded970686ecd6b4890d2b07", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/patches/README.md": "bec763d9c3a15d46899989dcd7a28f443123b8579d8d6fffaf5d80d041417070", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/patches/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/patches/__pycache__/compute_patch.cpython-36.pyc": "fe73400b72e2e034b1be43e64964f3f354e9108d58ff5a3897dccbb982af675e", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/patches/__pycache__/patch.cpython-36.pyc": "1934234b94d63788c77137417dbc4717c56e9b8322b47bdb2dfcf62c311b5e08", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/patches/__pycache__/patches_constants.cpython-36.pyc": "c061304856f947ea1d0c29e5a8d1f5e7498bd24010544d187ba3fe734c244d0e", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/patches/compute_patch.py": "97cc6c1fbadf52dbd5014220d462163279ccf4afa71f4cf0b904b870efb793d9", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/patches/patch.py": "42516fa3e5214e434f6755e15756d67c8ba7ca1a970f021f628777cbfe69a0c2", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/patches/patches_constants.py": "317f874431820fce7a913501b2e1a711df3d3fb1bdb598a737adb0a15816ccde", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/patches/unpatch.py": "21bd4f2a468f1aaec312212587710cccec3489f419fbb6fcc16acc25784b0eed", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPAgeCache/ARPAgeCache_harness.c": "39853aeaeaa191017a994c531f88b0f76889661f0c306576ca567c9e09b424aa", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPAgeCache/Makefile.json": "9707edb8e400212ec97f84e60c10f9d40f73d6937cb1c38b619b8f970c612d6c", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPAgeCache/README.md": "aeb4610ac4385bf15b340a3e79e90a89bbb558a823e6f4e42421e389aefe1910", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPGenerateRequestPacket/ARPGenerateRequestPacket_harness.c": "e837b81f4b7c2a7f9042b10de1956ce7dc86aabba1c92a7681fee08f9492fcce", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPGenerateRequestPacket/Makefile.json": "c68383eb27ee62c4771f294646287662962b8251e7d85ee575058deb6e586082", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPGenerateRequestPacket/README.md": "b9a210fc5d5ab9fc6d9bc5c907842f9aa249e28eb65fb336306e125b69459640", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPGetCacheEntry/ARPGetCacheEntry_harness.c": "f26d923851165ef0e828adf8e4289a801d5e27f43edea5f248a7f1801f817d9d", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPGetCacheEntry/Configurations.json": "51bd3e04a590b0df9700515ebf0acb07239fe2def64600a87d6c96ba4df0c168", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPGetCacheEntry/README.md": "9916569965ddce1f39f0610a330d27f66e3e62dc218b25d3d9c1689e6f536db0", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPGetCacheEntryByMac/ARPGetCacheEntryByMac_harness.c": "a4568be01085a5f4a087e32f8a031b3e4d91d058ee147998ecf4277ac2ab3cff", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPGetCacheEntryByMac/Makefile.json": "9faea9ff5dd12f067477e85748161651e561c19c797bc8407312dc1d99b5e1f1", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPGetCacheEntryByMac/README.md": "ee9b0c769051950546b1c962b3e761249b52fd0133132fbeed05cdc355e54dab", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPProcessPacket/ARPProcessPacket_harness.c": "d846786713d407f84bf632fb2b6a06e5ea80b51c4d657cdf4b6ca0de6fbcdc43", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPProcessPacket/Configurations.json": "8802a9d06c9a896f2b9826d200b517ac8a211870cad6416db2870d0f1bb6837b", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPProcessPacket/README.md": "1a3af6593d7cd50a343eb2740d47f2d9961a3a77f2ef56a1b46829d0505b8235", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPRefreshCacheEntry/ARPRefreshCacheEntry_harness.c": "a2b4e339af9b8bba5d643abf24e3bd2bab2a43cb7e482682d5141682892230d5", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPRefreshCacheEntry/Configurations.json": "71cd19e3171854bcced175cbcedf17a79975da5f2651fd4e3a7b0f499bdb8263", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPRefreshCacheEntry/README.md": "f9bb7a176f5f924937512440c589b38fc7c3f7a98a4fe91386271711cc3d2871", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPSendGratuitous/ARPSendGratuitous_harness.c": "dcbe3a280bc06976fa83cdf1801da20421a940d04d9f905118cfb58067a36d9d", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPSendGratuitous/Makefile.json": "66659ee852d417e08acedab451252f549865bc592b3152162935fcbe09dbbbdd", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARPSendGratuitous/README.md": "b6c9ef7ad2e0e24f43e4a45e85ba47eeb66502183960e46f291472f4e9e33f9a", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_FreeRTOS_ClearARP/ClearARP_harness.c": "33f0182d87ac5473bc3128e6d3cad662cd21c2de5008be3d9f5d1f74dc80a081", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_FreeRTOS_ClearARP/Makefile.json": "e035a4838878a8b897117322a47d52bf95818ff8b1f578217e0db8e94b634675", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_FreeRTOS_ClearARP/README.md": "6fbeffc40126d0d55fa78c1d439941c30e615437edb3908fdf7f3691385ef214", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_FreeRTOS_OutputARPRequest/Configurations.json": "8ed33822a5203a290cd01cc15d00865827934f6260868be09a1026cfb54f3451", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_FreeRTOS_OutputARPRequest/OutputARPRequest_harness.c": "a918785af996de56583ebb6a3e0f01cc64971d229a71d4697b65ead685884184", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_FreeRTOS_OutputARPRequest/README.md": "7e5a27411840d03fc4367959642c2b601d0f6f586f1b9881dcba905f89f0ad57", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_FreeRTOS_PrintARPCache/FreeRTOS_PrintARPCache_harness.c": "b010fe4cee6944110c5ed1321f5debc8701763854917b7f61cfa1fc0ea2430a3", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_FreeRTOS_PrintARPCache/Makefile.json": "f0733aee20251ce681f6e80055a1f7116f119273bd4af4e05d2e791ea0e7ef34", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_FreeRTOS_PrintARPCache/README.md": "fc60542585ae6e44bca336874b376b4dfac645ccc167c685b0d5d841b1d85881", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc1/Configurations.json": "cf1f8dab26ef867fd3c838e28b8e214e81dc084361fc9446ed371e77b9b735df", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc1/OutputARPRequest_harness.c": "e8a8cd3b93348c008809512da53456566430b7d5c24273c43fe7f5ec0a1ca452", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc1/README.md": "36a9e7446602693c416fedc98c38a543cf4f298a402ea939991cc01b0ac3884c", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc2/Configurations.json": "5c34c28eef561dc28dd73f2ecefb9f908b5489011846d602021b880eb1008268", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc2/OutputARPRequest_harness.c": "98a029dff3d797a349d9a2304bf40b0ae6ad9af2040d241fb52b9e440408592f", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc2/README.md": "93506f031fd2552b5892c1257925cba330d4f1dcf38c8f8ea7fc0a65c871d796", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ulARPRemoveCacheEntryByMac/Makefile.json": "f7db10c26b07d66c3109a068d9678f3ae5aa2c2d344eb1fdcb0814a5057207c3", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ARP/ulARPRemoveCacheEntryByMac/ulARPRemoveCacheEntryByMac_harness.c": "c785b6e319302226dc5bee6d9efe9df521051849b1ec253cb919c51e265d83bf", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/CBMCStubLibrary/tasksStubs.c": "4bf5c310c91f77e06e35af264151997cff2942e2e0c39b7f1604a486a68841cd", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/CMakeLists.txt": "52530e97d5d959bdd795f264974680a2849147c8809809cfecaf814422dc7d91", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/CheckOptions/CheckOptions_harness.c": "13ec4642c6d4a496a699227395c9d954ec2e0f85d78f5458f88c8187df5e0450", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/CheckOptions/Makefile.json": "ab871a90c3db97a915aa03ad7c61058a34428f97a7e8a86faf8c4ce273b49d6d", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/CheckOptionsInner/CheckOptionsInner_harness.c": "8f035b1e329d91be5dd56a094e4061d81d4ade5b5ad5f4065dea1cc491eaa5b5", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/CheckOptionsInner/Makefile.json": "49a1ea8e8f3b6c11d68952127e80284d82c7e8ef9b2570ed09ba41b3997a4066", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/CheckOptionsOuter/CheckOptionsOuter_harness.c": "96078cd7c26d07e3cd0b18034d46d90a732525d459fe0de00b2619daa5fbf9ad", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/CheckOptionsOuter/Makefile.json": "58ae4c249a87d9b29a874c102477d2265a338877749826f0cd95a9554467c3db", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DHCP/DHCPProcess/DHCPProcess_harness.c": "ffe14ef08d3943336048caba93ad0f0ced07c855c0164a0c1b474c229038eafd", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DHCP/DHCPProcess/Makefile.json": "626d63059105ce1514643147ddffc3988b1d546044b386a03535141e3f6e2759", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DHCP/DHCPProcess/README.md": "c085d7c4281dcb90bac65ba018f23cc99cc87fd8881db09c6e705e2439d01ca8", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DHCP/DHCPProcess/cbmc-viewer.json": "f7a7c8742c7a39f6e32d8b98e7545737a3c8e67fa943d0c292155f1d672e6eb3", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DHCP/IsDHCPSocket/IsDHCPSocket_harness.c": "e9fbb0aef0a3835206424b14e9c5c9b751834b7b28e1acf9d078ead2e91c406c", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DHCP/IsDHCPSocket/Makefile.json": "11d5ee4689ca8ca9ba9b57e8a3cdd337ae2b8f11dfdc8765eee8f6f0a1c00388", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DHCP/IsDHCPSocket/README.md": "e75d815637ab4e1815813c0dd0b49fc468ae55a06086fa5b3c0a64af4f0d0f0e", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DNS/DNSHandlePacket/DNShandlePacket_harness.c": "a5107448bbbc99321863bf4ab90072b70152bb6705d9582def020224ad90932f", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DNS/DNSHandlePacket/Makefile.json": "1ef08e9c4e70cd511f8b66de06f51df6f589ae92eb45a3d4d9398ee107101ec3", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DNS/DNSclear/DNSclear_harness.c": "9923b82ec4c04a108476081b2f66d2638ac350e18fc81a642c9f9de8b99006a8", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DNS/DNSclear/Makefile.json": "9454ff95399695f3e98878be8bdf99db80b305161abdace383c1098c69d016a4", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DNS/DNSgetHostByName/DNSgetHostByName_harness.c": "06545980dca3705c0b9fe9c7e94968ff74e3332cb8121c099f55cf0c85791ac1", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DNS/DNSgetHostByName/Makefile.json": "cf3edde6e69558394995861c5794aaaaee616b991ba20d2f45e5679536a32bd3", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DNS/DNSgetHostByName/cbmc-viewer.json": "56121f38e5cf50cb05e1bb0135469eb1a9dc32e5065f8fd250efd15b79e5097c", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DNS/DNSgetHostByName_a/DNSgetHostByName_a_harness.c": "22286b404c8e6ba1956968ccf079615d2d096c64255c1383bbc0f501301a79ef", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DNS/DNSgetHostByName_a/Makefile.json": "be12e2d37c1d3dfc61e13e36c975cb14ae826736b66d92aa47769728df2526ee", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DNS/DNSgetHostByName_a/cbmc-viewer.json": "8e50503d9a4d8ae8c90390f2191be8c1b2f6f9303cdfb3cc585890df6cef5106", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DNS/DNSgetHostByName_cancel/DNSgetHostByName_cancel_harness.c": "a583aa89d8e7a053f46d72906017f84364ae9f9f2a8106c34f0f62256e2c567d", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DNS/DNSgetHostByName_cancel/Makefile.json": "f2ebd17622bedfbc6354a93115bca218a67696917f04317a2ad514d4f50008cb", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DNS/DNSlookup/DNSlookup_harness.c": "c8efbdd6ccfdddd9c768aa661453fe13c7557147c3a0dc5edd4d9bb6fc44b5ab", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/DNS/DNSlookup/Makefile.json": "be7a119d2872edfa54769c8591c1dee92be218b2756b87017dc4f9a3e5c181d1", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/IP/SendEventToIPTask/Makefile.json": "c89609bbc34e988316f7deee374ed7a184c5d72e1d37cb09bd678a8983fbbd57", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/IP/SendEventToIPTask/README.md": "170aa9d950c8c2d04dac100d2ac75abfa0923a9ecc44ca25ce1da56e759acab5", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/IP/SendEventToIPTask/SendEventToIPTask_harness.c": "b0710b779714c722a3015970547c1745cd8a76fd0983ac4529c457edde939817", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/Makefile.template": "401e79bab172511b5b159c6af5fa5ec6e2274bf5957ffe577b117004befc5267", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/MakefileCommon.json": "52a93cc0fe508c389057dc2983dc0c05721dbc1cd3742de97a0dec3258cd6d04", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/MakefileLinux.json": "975704e91f7538aef7031a454b2698834ed6408fa8eac0cc384f52c97c51c354", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/MakefileWindows.json": "cf34143c0c3c02b8b540fddd3ea87bced19c108b31090b4b4366e3edcbad8eb5", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ParseDNSReply/Makefile.json": "d368ee8897627f7ff790f5741b253a1053ba99b414582bb613fdeed4cda9ca67", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ParseDNSReply/ParseDNSReply_harness.c": "ba35b5d25b88a77944ddf152c8c3b162179838af193d7bc6ba9bb3c1fe676b21", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ProcessDHCPReplies/Makefile.json": "a4161729dc2e6b14638f16054abfade2222aba1f25eefad03accb2b935e2fa48", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ProcessDHCPReplies/ProcessDHCPReplies_harness.c": "024926d52d97b62728db7bba8c1fdcca919188a0ac4350867d71efbd3368c6e5", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/README.md": "fa4ba1c3a3b5a88c86b821f7d0aa22eebb9e70046d43dc460fac7d5892f2b7d9", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ReadNameField/Makefile.json": "5d51a30c1aa7a8f4aa7492eb0d14f68b0964e4e0c74f3e0aff93a513866e8a86", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ReadNameField/ReadNameField_harness.c": "34fd7098fe8cce44dccdcba0e445b725ee1ae7622fa4903b9344f4d45ded1bb8", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/SkipNameField/Makefile.json": "96adeffeb4bb05ac86708e8341a23f7cb35d6031cfc754a3b8c328e0bea798f2", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/SkipNameField/SkipNameField_harness.c": "a66f3a724513e7044bdc2e7b3b40c40f337ddb81e65780ddc96a817eb4bc77d2", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/Socket/vSocketBind/ALLOW_ETHERNET_DRIVER_FILTERS_PACKETS/Makefile.json": "46c28281e416d166bbece766ae8620d892318dc883b04628ff54eeb913e631fa", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/Socket/vSocketBind/ALLOW_ETHERNET_DRIVER_FILTERS_PACKETS/vSocketBind_harness.c": "63f6244069aed974439474296503f8a69527816be7908c8529f0e076d02e714c", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/Socket/vSocketBind/ALLOW_SOCKET_SEND_WITHOUT_BIND/Makefile.json": "bf1b01ad19681cb943de52c088c068fce196cc6f6517d60d213351624fc8a3e9", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/Socket/vSocketBind/ALLOW_SOCKET_SEND_WITHOUT_BIND/vSocketBind_harness.c": "335effd49efa9e747ad2e0660934b00ae69177f55a99ce5c2f6c35738575fbc2", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/Socket/vSocketBind/DONT_ALLOW_SOCKET_SEND_WITHOUT_BIND/Makefile.json": "602c647558918619a24613a03ef3dd11e61ad98c3c32a7355dcdefb2421a44a2", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/Socket/vSocketBind/DONT_ALLOW_SOCKET_SEND_WITHOUT_BIND/vSocketBind_harness.c": "c1c3482d895f8ac28089ff52abc33a7409d279e97bed71d0d9e3174522fa56df", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/Socket/vSocketWakeUpUser/Makefile.json": "08b26aa99518b3af8b2eab242cee7bf87d8d61f3e9ead6dcb124d1d956699042", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/Socket/vSocketWakeUpUser/vSocketWakeUpUser_harness.c": "2345b200f4dd68bff538749765624e1b5c869b5de08933a352c82755920dda85", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/TCP/prvTCPHandleState/Makefile.json": "d9adb5a9fbf7bcf1a78e165ff992813d7512c8d0da80cd5dda378a7828d2dc3b", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/TCP/prvTCPHandleState/README.md": "f9f898124416839dbd3b5432a5232d3800185f2b1ded1bcd18ea66db5a71214a", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/TCP/prvTCPHandleState/TCPHandleState_harness.c": "c3f253f5fa6fef9e5556922bf4514f14716a3cf884e7fb58d8c19be28aaab850", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/TCP/prvTCPPrepareSend/Makefile.json": "5ee4ff453c7fe12ed33e2996b7dc4b227a05012d7872d59ed467bb248e2dce6e", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/TCP/prvTCPPrepareSend/README.md": "df7ed64ff377c328015e55520a5f267615ccf49505348382958115c818486819", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/TCP/prvTCPPrepareSend/TCPPrepareSend_harness.c": "ef35858a9a2191cd606f0fde111b646614cfc6fc90e55ef9ae87c8971408b1f8", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/TCP/prvTCPReturnPacket/Makefile.json": "50cc89565a5b5fd2faf12345b74318e960a1bfeedafa0993b3c7cb564961b46b", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/TCP/prvTCPReturnPacket/README.md": "c4707f113833ceaf60866136d09480c057efaea25584ad5364cf9d778000e7e7", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/TCP/prvTCPReturnPacket/TCPReturnPacket_harness.c": "4c6027b8268942c29464c6d01da6dc100f12c75cf57a2d4d38ca6eb20c2c4307", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/UDP/vProcessGeneratedUDPPacket/Makefile.json": "69bfae7729f172b2150ac378a293d68efeea63b32a9e8c2bddcb62e74cb3e523", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/UDP/vProcessGeneratedUDPPacket/vProcessGeneratedUDPPacket_harness.c": "2feee142d4d62ef6e80ab173da92cd715334bfbc43bda4dd52783c93d4f41071", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/__pycache__/make_cbmc_batch_files.cpython-36.pyc": "721f69b4985c50b5505fd37e7773be9f3baa766fa64026fb76f8d536e8435653", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/__pycache__/make_common_makefile.cpython-36.pyc": "7831124fdcbef17be51b7a07d72c9ad9d8d5d1df94b8b57fffac144a6c4df8b3", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/__pycache__/make_configuration_directories.cpython-36.pyc": "e9820d84a819b38a360baa6e1595cb0e4ca3d6694b4919cdd9083a65fc721c34", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/__pycache__/make_proof_makefiles.cpython-36.pyc": "1562d46a0155df32cdc15e663b7a117ff2954be6d9ba7cd3a03888168318a16f", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/make_cbmc_batch_files.py": "00df8582a3027ee0d2163dec55ba726bae3fad6ff311b22533bdbd9d8a0e8dd3", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/make_common_makefile.py": "39aa549cd0b7800cf00e918e4737c1c63a9274668cc25e0075494b07df5e54f9", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/make_configuration_directories.py": "33ec0021618c28068235af604c8bffe707dd8b0b50ffc1be20af272933bae02e", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/make_proof_makefiles.py": "8025bf79c7a7df6436b747b160dccf6adc2ba0d76738c6e8aebbea3e6ba1c0f0", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/make_remove_makefiles.py": "0b6a9b94719f649f93fa11c857484ec4927c50470dd607a49d88c5ebae1e99c3", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/make_type_header_files.py": "3ded76b45610b413e5b625abe5e55a41c2704392169dab6a501445d73fd37642", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/ninja.py": "4ea9d353d825efd3f6dc94532cdf3e1fae680ab6a04872f62d2184dec24e7211", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/parsing/ProcessIPPacket/Makefile.json": "06140eba3a858b09047a1e2a09e11250b8c5c1503bbefe027798c299deb6c54e", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/parsing/ProcessIPPacket/ProcessIPPacket_harness.c": "5f25a3058f9aa91b31b5cf8ce6f3d97dd76741b6815b3fc33c51b5a964498877", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/parsing/ProcessReceivedTCPPacket/Makefile.json": "e1df2b5f2f615da68fa4da19de2429bfbb921d826cab160f25e39ccddf6a0676", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/parsing/ProcessReceivedTCPPacket/ProcessReceivedTCPPacket_harness.c": "f6b193bae898cee51b17a246921b1a6b3269d3be234409321cd43695136b09a8", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/parsing/ProcessReceivedUDPPacket/Makefile.json": "b29e945524a08d3dac189046e3e308d76a8610c8f61b5e9a2970184baa3a8728", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/parsing/ProcessReceivedUDPPacket/ProcessReceivedUDPPacket_harness.c": "e153a20de6b79fdc5a778f7c1250d3d55ac673e746a67ebf4f6650a296150783", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/prepare.py": "0fd5d2ad2cac14176330cde62826a853d4f4293d1a0441a2ab017e4ef252fecb", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/prvProcessEthernetPacket/Makefile.json": "b33145dbe58bb50b9ad32f04950b1c1e48b744b2ef8ac4a41a8e4fe0d82611c2", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/prvProcessEthernetPacket/prvProcessEthernetPacket_harness.c": "3471c1d5fc60a0e3053f081da85b1f5bba3ea1eb9e1a9334f99a320a52d63d2f", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/run-cbmc-proofs.py": "e9ffc00d65eb8d4f8f47db6a9a723116729dcf73a981c7d3824a1a8392d74db5", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/proofs/utility/memory_assignments.c": "265d586bbf6fe31f3269e39f5b8cef9ec061d7cadb32edb6a896b835ad8390ea", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/stubs/cbmc.c": "d7406c1c0f880e7a73ff745545f5967c5f7b751e4816d6f7fffce9bfc0a6fc83", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/stubs/freertos_api.c": "cc1aebf98653d7f76996a688d897fd4eeb31ab4c26a6c26d20c8614eec24df30", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/windows/README.md": "fcea1660eaa6aa884003c87ad2092d5465e2f9355b82d98eacbe094e431d762e", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/windows/WinBase.h": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/windows/Windows.h": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/windows/direct.h": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/windows2/winbase.h": "44bac2a6b8cfbb11e3b4c27adb78bfe730cea8da62eb75be420eb0499d006652", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/cbmc/windows2/windows.h": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/CMakeLists.txt": "1f39e3090be8d52f89debe6f54cd651f3d1c56a9d29150888cc60a9984ba1155", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/ConfigFiles/FreeRTOSConfig.h": "8762872d3a508e141a4b67c9c65721363868c83b3934689692392928a87efd40", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/ConfigFiles/FreeRTOSIPConfig.h": "2e999a469c09573cb6be76a149f547149c3515145ed450ef2674a741adfa9ae5", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/ConfigFiles/FreeRTOSIPConfigDefaults.h": "05cd4d6057f4afcfd0ac32a14e38c1876678117db56f4a9bcbb9e4978a4aba4e", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/ConfigFiles/FreeRTOS_errno_TCP.h": "17544907ea797253ffeb8bc4391dde537033e6f13f3a0aa6ab973009ad9831a9", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/ConfigFiles/IPTraceMacroDefaults.h": "d623514a52fd9b954ef64b83c557c7ab4597051664378ee7c96ba975453509eb", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/ConfigFiles/NetworkBufferManagement.h": "f8cbadd7ff5a2710c54504f156b8f891a2a1d1d16571fd57e7d4ee675142b15c", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/ConfigFiles/NetworkInterface.h": "5a25a71583821c4f61ac674c5e3f03a9486a2dfa3b7a94b065dc57bb3151788b", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/ConfigFiles/WinBase.h": "9fe50d95cffddb9800ebb400c762c7bb7e7ece820ab4ee790c6c603eefbbc590", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/ConfigFiles/Windows.h": "9fe50d95cffddb9800ebb400c762c7bb7e7ece820ab4ee790c6c603eefbbc590", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/ConfigFiles/pack_struct_end.h": "59e20376ab653c273ff4b13ec735880989300f3a31f1df2d5b2d3b05109bc2a6", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/ConfigFiles/pack_struct_start.h": "831644866b904f3d8388064aba9d37199449089630d879dcd5720df839772976", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/ConfigFiles/portmacro.h": "a1e4bef1b700ac9fb9d2d6f02e2fea3d1c1ada009790738668a8359b6e264d38", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/FreeRTOS_TCP_Unit_test.c": "f283e74ecb1912fba3cc8664186301b39a75337aa48e7f03227274f97f98d376", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/README.md": "c8396e1f028fdc6c4cfce82eb8987536484f61f2dd6cd84cda6226b9b8d4c487", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/TCPFilePaths.cmake": "9f330dcefb76567591969a198674b14d2101871173d22546c6e857770c8f8f83", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/cmock/coverage.cmake": "e155a5a4f89869c40aa52fd6b81dd6df0ba83dc01429d756c6a9cc382cee2b16", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/cmock/create_test.cmake": "29f47f117ac31311cd2c903185da0a9cddc7efbc4603d4093bfd673dd6897502", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/cmock/project.yml": "81e1d57b8a8b724ab9be3ac0985b800eea0271ec7c53d513ce22e2b371dd6060", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/cmock_build.cmake": "90a0d545d0848194b28b86ed0d0815c4bf9ddf6cb4a9f6aabf9259d63e669524", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/stubs/FreeRTOS_ARP_stubs.c": "4d9c33ec2705f90ef074aea7553058c200108a0dbc1f96a59774f7a859204cee", - "libraries/freertos_plus/standard/freertos_plus_tcp/test/unit-test/unit_test_build.cmake": "24d557a556205517dbe65de1dca22b2f454fbf294771d0cd272ed3a404166097", - "libraries/freertos_plus/standard/tls/test/iot_test_tls.c": "29554dfebc3eff9a4c3feeaa3d9ef7b54144fbbb8ba41be9e5ab87d37b760f35", - "libraries/freertos_plus/standard/tls/test/iot_test_tls.h": "6788ea9aac4f15868e5833ab7ae7fd45875b4746d4db65a631503dfcb2b28a9b", - "tests/CMakeLists.txt": "ec58f7e4bc4c78addba71426b7f51a4229b02ce05dbb7cc69806fe20b4774051", - "tests/common/aws_test.c": "bb129bae37d7f83791bdd5a955e37546fdc099ccf2b1a91c4e0819b25cd15f19", - "tests/common/aws_test_framework.c": "86f2fb0b1e913a316457f3d61ef7748e2c14d09bc54248b269c5d0e2e85077ba", - "tests/common/aws_test_runner.c": "779213f0af9892590f50ad58d79d0ff6eed472eda5bc75504fcd8bc8e6d33883", - "tests/common/iot_test_freertos.c": "553fa643340c008b8ad4604c1ea4a094c95a59c7c3dec2bab91bef3422f79da4", - "tests/common/iot_tests_network.c": "fa96bce8b0cd935d7b0505b907e6655ba50bbc75a25e37947fc4eefc62aed06c", - "tests/include/aws_application_version.h": "7298862828bcb1e01f221c2a88e91584b0b409bbbb7644dddff0ed4de594c668", - "tests/include/aws_clientcredential.h": "043f2bca40ee773ff37a383969b6ecbf4191876c7ab7f81168ba24807412dd7a", - "tests/include/aws_clientcredential_keys.h": "3d0291cb02a4cffef2fcd6ca90765713de488be121cbf91858938917f290abef", - "tests/include/aws_test_framework.h": "b022fa265036e6e716662a2f86eebffbab053570967ca4222ddec7a95b01bbd7", - "tests/include/aws_test_runner.h": "d56fb11b6dad6c957d9a82bcb74d689c915b614649aa519ba06e9d5aebf009c3", - "tests/include/aws_test_tcp.h": "06a1e7b81e6c82f0b360e11da1ea30392b2f35397f5f23ca1a75a5c1d5e7145f", - "tests/include/aws_test_utils.h": "1ec2f74c7a2d8832d5fa2d126e10108497bd751fd06700a6731fcf10010b8e95", - "tests/include/aws_unity_config.h": "2c57e935856ff25b0f12476361383982c7b864f1e7820ebc8474692b801722f4", - "tests/include/iot_config_common.h": "b8baa71897f806144a34000c10add4dc00df23a1489824ea0d35ad6640df3dc5", - "tests/integration_test/CMakeLists.txt": "31ebb297d94746be938bd21cf02581cc05e50d627bdd5177ad8d4c0a16379ca1", - "tests/integration_test/core_mqtt_system_test.c": "db761ab1fc65f6be366f41259c84eccf3aa0bfaeebcb975b32ccffbe3cc1dddd", - "tests/integration_test/freertos_tcp_test_access_declare.h": "89915f3a2e90bc414d567138db08c00ef9f298ace314fba86f4643c8df3446fb", - "tests/integration_test/freertos_tcp_test_access_dns_define.h": "db9acf56f95d947688a882d5f5d877554ee47c30e6448a40e584f1a2917ba8dc", - "tests/integration_test/freertos_tcp_test_access_tcp_define.h": "9080cf2f0a880ac1fd99adb0479e7714a56bf3bf07980c0a4b2798da153f10ad", - "tests/integration_test/shadow_system_test.c": "c245d7a86985bd250d6c76f1d3dc8c7c4f94568651e0ba6b2952fa89b3e8964a", - "tests/integration_test/test_freertos_tcp.c": "e3a05baf55be188c4c280e358774d79b54dc6df8ed5622b9e005d0d143ebb32d", - "tests/unit_test/linux/CMakeLists.txt": "4d032e97271ca3c71232620d06b4190b984c59ca9a59be27c2c01cdbc00bddf0", - "tests/unit_test/linux/README.md": "3e8ca145ddeae48ce4549b4e8c3c737d1f753674942005f1086f0b8875fea8dd", - "tests/unit_test/linux/config_files/FreeRTOSConfig.h": "e21c535455eb095fd98ee26b50fc8a7078c2cd02c705c2da66fcb84efd8240b0", - "tests/unit_test/linux/config_files/aws_secure_sockets_config.h": "dc96eeacb73ca83b0ac09612e46f9fe147a1e6198e7609ced477a9f5de02c95c", - "tests/unit_test/linux/config_files/aws_wifi_config.h": "68ec1d32c970f80f1067bf462ec18fec007e67c975813a8fef4baae4e55e86ae", - "tests/unit_test/linux/config_files/config.h": "02102f50fca2162d08e3beb07840c539728e53d4d2588098a928d518c03e2504", - "tests/unit_test/linux/config_files/core_mqtt_config.h": "70ce45dcc49e65c79db25d7510a3335204a3bcda0ab9c1e1b789e99480c46fa0", - "tests/unit_test/linux/config_files/core_pkcs11_config.h": "481a16e40def599502f47e40fa9fc17772564b5065b736c696d2b86d5c2472bf", - "tests/unit_test/linux/config_files/iot_ble_config.h": "3a7c38843d733190aa05951ae0aa66f8733d1ccd1df5aea9ab0afb129cf05dd1", - "tests/unit_test/linux/config_files/iot_config.h": "e328282d270c1548d25b29d7160db29baa37792ae861fb1683aac57ff9cd0625", - "tests/unit_test/linux/config_files/iot_config_common.h": "6cdac2cf4515f40a16a6415264ff6caefd876394554490716ebcd4a57716176b", - "tests/unit_test/linux/config_files/logging_levels.h": "1a0c68f2abaab42a29c589d9a1240d33f365b345025adfd2273f8b9c0d2506ca", - "tests/unit_test/linux/config_files/logging_stack.h": "ced115e6fa662a09cb7f9e8eabf16e14073567d76d884788477d11f62bf96cb5", - "tests/unit_test/linux/config_files/portableDefs.h": "846d161b800c509c818e8e37ac5ccf66c56c5ff91502ed846d44d2ba14ac23c1", - "tests/unit_test/linux/config_files/portmacro.h": "9839920bbe61e1c30dd9fa7efe36a3b08367f486750fbbf7d14cdbab4f5126ce", - "tests/unit_test/linux/config_files/trcConfig.h": "3c64639c5150a2c59b7aedf9cbea346d5510dd3fce03598eafb2ca10480fa564", - "tests/unit_test/linux/config_files/trcSnapshotConfig.h": "1331a0cee7e872883993dc323210ec0e777a170c552a36a40610eb93a479c9e9", - "tests/unit_test/linux/utils/iot_atomic.h": "7ac0b52ffe7bd96cf3f65d360f12f51dc7813c617ad0f289d2f6f8b71d193dae", - "tests/unit_test/linux/utils/task_control.c": "016a0c387c76af9e1f108df2e2bcdefa99c7c083aa9b2a399905cc07df4e3113", - "tests/unit_test/linux/utils/task_control.h": "9f3237b85aa220b3f7107b0beee502708ac74fa446dcc4b62c3e32deebda2e82", - "tests/unit_test/linux/utils/wait_for_event.c": "056a4a6a24fb7585429e5ca290f445ccaacb1ea0416b429cb4014738b49c4a5b", - "tests/unit_test/linux/utils/wait_for_event.h": "9f5beaa137968ca80de3b97fa6a9037a521b26390b36ba2e95912ee3f1bb2a25" + "demos/CMakeLists.txt": "e1a11a664dc54b5a09d340094e09b36ef47f3b49200f22a527676a77ac3ad167", + "demos/README.md": "e1cca6698cc63794a4f8d02a181e880abffdf436fc1f6ca264d32fee6522a809", + "demos/ble/README.md": "7afc1253b4286497f499cbf32cb9c683d9487bb6251eba37c0d8a77a54dd6780", + "demos/ble/gatt_server/CMakeLists.txt": "152eeb517a01301fbea83c736f0271fe9b632dceb2157038ac08bdbddce93dee", + "demos/ble/gatt_server/aws_ble_gatt_server_demo.c": "8830d2d3619d583a94a187700f3dc28be07acfbf424b524a64bef87dde561f56", + "demos/ble/mqtt_ble/CMakeLists.txt": "4f90e24641015772c80219a4d1ef4597c38cc7abd89ce36d737f02a6d879076b", + "demos/ble/mqtt_ble/mqtt_demo_ble_transport.c": "c949f258fd31918a75388bf66c3e67ecb6d040931c65b75b543e1947d5226857", + "demos/ble/numeric_comparison/CMakeLists.txt": "35998f0a565000bb3158f0c63164aad7685dd4d6d7dcc4b2782f6b9af64c5589", + "demos/ble/numeric_comparison/iot_ble_numericComparison.c": "78bfcc1ca9fe5b95c02e181964f2c9d03d97962d72bf72ba7aebc41ab0042dde", + "demos/ble/shadow_ble/CMakeLists.txt": "ef375f456597e61b844287be7ae3c6498fd0d66e30df1623de3db05a59f944d1", + "demos/ble/shadow_ble/shadow_demo_ble_transport.c": "75a63977781fcd1b6ee870ad6ec0eb569f567ae54e132eb0e47017164e2501ab", + "demos/cli/CMakeLists.txt": "39a38609feffe4b42f70c14aaefa2a04df3be45aed9cfb32c7621e2aa64becde", + "demos/cli/README.md": "03c46cacf4eb8ab860f1a337454c36c45d75d560a2852ac8d3132fb1bce0e222", + "demos/cli/cli_uart_demo.c": "075425bb8b4c0e345097006cf327f01ed7ccb1b0d0112f0f95a66643ef491d89", + "demos/common/http_demo_helpers/CMakeLists.txt": "74d7714e1f43dc54734d304ef7a581e98ec2c1d0ecc45b24516ef7b8c2792ffd", + "demos/common/http_demo_helpers/http_demo_utils.c": "8fed457fbd4123ea762ab68b58eddc22a1dc527fbdebe79ddd064032b1720053", + "demos/common/http_demo_helpers/http_demo_utils.h": "25f342cbb329fa0dcd9d5ac1e69948912337722c90486b832b1d79b4da07a2ec", + "demos/common/http_demo_helpers/presigned_url_generator/README.md": "fc1842ef78e85d2efad99c8b8e7e604aed4f2cd7d1635e8cdaaabe4ec443f523", + "demos/common/http_demo_helpers/presigned_url_generator/presigned_urls_gen.py": "a7669c25e0c78698e76312923d3a1c7fee5373f484dbd713c4e3a7bf258334f6", + "demos/common/mqtt_demo_helpers/CMakeLists.txt": "9e3de506ecc71b53d8fd3afd2bfdc3b04ffa3a8dd31d02f487aa755f0fa340de", + "demos/common/mqtt_demo_helpers/mqtt_demo_helpers.c": "c4d6000084a51365cce83bbc2915b93d3261ab2593b9cca0dfead955e01d2eae", + "demos/common/mqtt_demo_helpers/mqtt_demo_helpers.h": "cfde158267841e6b13f7bdf21f216f48d78b5c766a51df1a9dfa10edb2877d5b", + "demos/common/pkcs11_helpers/CMakeLists.txt": "0b5064b3b716477103d71d866277635cea7ffd5fbad48130e3411d7ca09eb933", + "demos/common/pkcs11_helpers/pkcs11_helpers.c": "5e51bc5378ea580b965a9cffd061ec5b8ad5c407235d8ee7a9e49ccd2a791b8c", + "demos/common/pkcs11_helpers/pkcs11_helpers.h": "c8ae701bfde1070e3f4c3c778c85d03e5722f8092f646e2bb6ab4e2810b821e4", + "demos/coreHTTP/CMakeLists.txt": "f9f08ee646567ea0c5b6082c842cadacb7bf2b21bb9489a3f814861da1744aac", + "demos/coreHTTP/http_demo_mutual_auth.c": "88b980102847d9bbaf6d46e8d545291994b7a265a02bdd5829261535c7179b18", + "demos/coreHTTP/http_demo_s3_download.c": "6ecc2c8c3b75e6ebaaadb8faee12442b382e34bcf4c59e760b47449118b5afa1", + "demos/coreHTTP/http_demo_s3_download_multithreaded.c": "aff506d5cd2626962061c0ead2d197c41e28e2ff27f63b8a740ddf75cf0d3657", + "demos/coreHTTP/http_demo_s3_upload.c": "a0ba4f627e6ed75e7eac56a52ba67974c89af15ec5a4f9eb89e1bd46bc75c1f9", + "demos/coreMQTT/CMakeLists.txt": "00d0d6051a92bd8eb562f17fff0e1589891c319d5540c9ef249a2ece08f17753", + "demos/coreMQTT/mqtt_demo_connection_sharing.c": "aa439bfb3c516bcdf60edf60d6cc7b7f71de001f9bfd8debc93f355c7dc9c220", + "demos/coreMQTT/mqtt_demo_mutual_auth.c": "01da688dec5ac5ebfbf46835e692a7d6d6b016aca3e5d65e70f034b5f021512b", + "demos/demo_runner/aws_demo.c": "2be964689975a5fbf9365e6ccfef3c8937ea545d86f093abfa3cb7671d57338a", + "demos/demo_runner/aws_demo_network_addr.c": "a2c669dcf420af9efa57a764da0d629a23cbd96fdfca179669bf5f8cb68a41c1", + "demos/demo_runner/aws_demo_version.c": "48e67d48ac4d989630be72c3e831b1243abb6051ea3615efa398bf5c05b57a66", + "demos/demo_runner/iot_demo_freertos.c": "9ae55ff87b9db4e9a17714e6f97096691df962fd0c08bb9ca1a792579925cd46", + "demos/demo_runner/iot_demo_runner.c": "987e71d9c275c4e5f8606506019beb33d4e6ed749edbb1a195cc1c5c123b814a", + "demos/dev_mode_key_provisioning/CMakeLists.txt": "9f72c9c400638e5125b2a40fa70a783bb5f29196a673f3221c39d54f2a69222c", + "demos/dev_mode_key_provisioning/README.md": "ac9cdb2605b93dd736045006af72e9504fd3fa98bf968ae9d413ecfcb45fe3e3", + "demos/dev_mode_key_provisioning/include/aws_dev_mode_key_provisioning.h": "f9012eb4be9fd9b919f4107c8257ac982320972fea2cf29bdf3c2c9dcd9325f9", + "demos/dev_mode_key_provisioning/src/aws_dev_mode_key_provisioning.c": "d17a944d1139a3596294743d3e31e4233b198f5556d0cefc49f37baa012b514f", + "demos/device_defender_for_aws/CMakeLists.txt": "94d7669145a3ec26d66de306c4ef46d8eeb4b933c744a0c90959bf02dd485eb9", + "demos/device_defender_for_aws/defender_demo.c": "e4e53e4cae12c04bd19751b1a23c305606bc562389bbe157ddc79c1bb8a38488", + "demos/device_defender_for_aws/metrics_collector.h": "7db7237f9a66fa0064a7c3a6792f77d4a1da22a329b2a64460b7dbc4dae6e52c", + "demos/device_defender_for_aws/metrics_collector/freertos_plus_tcp/metrics_collector.c": "86c983300ea019f242c1da5b5e0bb7bc3d3892ee4d5a394f9170be77667a85f0", + "demos/device_defender_for_aws/metrics_collector/lwip/metrics_collector.c": "7709851b795d0e86b8f59a5dfcaec0a472bb9bbc0038e9397978aa6a01c530a6", + "demos/device_defender_for_aws/metrics_collector/lwip/netif_port.h": "62b8b70cf4c046d9e435364fea48d5f41cdb28e6fd71640c7c7a495f962ffba5", + "demos/device_defender_for_aws/metrics_collector/stub/metrics_collector.c": "5cd03344ae0a3f55f7feb0bd1f41e6141a76b728014ac38a58ab4e6ad9d092d1", + "demos/device_defender_for_aws/report_builder.c": "137f9c91d5400f119177aee30c474ee1efa68dc950878e253c6b1c5d0774056e", + "demos/device_defender_for_aws/report_builder.h": "74c745ef9203848c2d62e1bfb69044b8c39258e85c28f12378a53c5e18dba3c3", + "demos/device_shadow_for_aws/CMakeLists.txt": "d458e586630aae23e33dd3ea851299e93088d40b6ed20b22a4ab48add6668e98", + "demos/device_shadow_for_aws/shadow_demo_main.c": "0ad9b00baca97bc37202bb5cc16be7cff647ac440fec93d498166ca2be59f560", + "demos/directories.txt": "f830aa514024f3db8fa561be02901f07f46e4277b5c2f788e1224e5d0b12ad10", + "demos/greengrass_connectivity/CMakeLists.txt": "384633cdeea4ef23a740409dd969d7d426ec4539c2430f627c11181fc8a0ccc1", + "demos/greengrass_connectivity/README.md": "f698c41b63b8404fefaa80f41f5888fe99ae107fee5843ee56de7422a993d252", + "demos/greengrass_connectivity/aws_greengrass_discovery_demo.c": "54185c811948897deadf699241d8bdeb223d2ab3755ff210d6aaa8990fe801c7", + "demos/include/aws_application_version.h": "12d9da910e8c86daf3eb2096ac942b05936f8eef43553b02153e42ee5d575d65", + "demos/include/aws_ble_gatt_server_demo.h": "ab08ffc4e1a594c8afa22b69ed12f3f9e48031fa45ee36cb50758cdc8eaf5942", + "demos/include/aws_clientcredential.h": "fe05ef63909030beacd142eae73e5d16d68c2fbb35ad350e85863e4a33f91a97", + "demos/include/aws_clientcredential_keys.h": "0a037a57d8b53229b4858aa9bb3abb88759ef978563c955b3974e1f2e185bcef", + "demos/include/aws_demo.h": "6841f58aa8a1cfc18e958ac1d0e41521740c8409dba62aa07003d777fa00e43e", + "demos/include/aws_iot_demo_network.h": "39a22e735e9cd0e06b9fb28af1262440bfc2c0ecb78035d0d21354c1166b9f03", + "demos/include/aws_ota_codesigner_certificate.h": "00419f40a5e99225d98606648c8f33350ab29d41442c722670a0f16ac4eb0331", + "demos/include/aws_wifi_connect_task.h": "237aa206d1d6fd5aada0fa8a846f7588166ccf95fcc981ac82bb4141f6e37ca1", + "demos/include/iot_ble_numericComparison.h": "473ac9bc8098ed9e39d1780e39ede22b7d239cb28fa596d3697cd337f56ea430", + "demos/include/iot_config_common.h": "294f822c0ece8d8f522fb96f6e8a5eeaf828615a73a8aafebdfea1fcd44aa2a0", + "demos/include/iot_demo_logging.h": "ce9cc97c974393619c9bfa0006840130ea609566192c28268c91edeb06059c9d", + "demos/include/iot_demo_runner.h": "9c368fb940aa8a9e75a282a7bc5b2d3ac273ae77479c9d275211163eba70c4b4", + "demos/jobs_for_aws/CMakeLists.txt": "c067824d4be05033f1542f572d2d26943347be974dd38df5c4a029e4a2a08c1a", + "demos/jobs_for_aws/jobs_demo.c": "a42332ba09f364b45ba5ac0f49fa8c852ca5f1888db8980ac82317d5a5e159f5", + "demos/network_manager/aws_iot_demo_network.c": "4c709b3b2cec0ca7c02f0c017deb292f7a972fcd3d8937168557b47e8dc3e7f0", + "demos/network_manager/aws_iot_network_manager.c": "025c543fb7cbeddeb1c402b93a37fdb2ba3e9ff7b2b41264fdc5c9c001b2b3bf", + "demos/network_manager/iot_network_manager_private.h": "d0a3a82c8d89f76192f31686ded57de07e1f081e0854ac890823f30824ca021e", + "demos/ota/CMakeLists.txt": "97eb17c125e3b60bcebf1d5230cbd9da2ffe11d245ba642dd128c8c52965e89b", + "demos/ota/aws_iot_ota_update_demo.c": "a553895cdba137cac2ef25c73611809851a4e5d9c2a3e8787f8b003f9f33d8a9", + "demos/posix/CMakeLists.txt": "2ebbf9aac42e713a1b851c61fa9307be255528911ab3067e62064257a5ba6dc0", + "demos/posix/aws_posix_demo.c": "7c93b85293ba4272750e035b0e578ba0b5ec0cb5762afc17bf4ef246818d8594", + "demos/tcp/CMakeLists.txt": "99e72686738645dc71be2b6f87ff5ed5e7ac320c3a2073e8be9598c5bd9110e4", + "demos/tcp/aws_tcp_echo_client_single_task.c": "2c4d135cc8e85d8d2e7f38f46463d50cba1e823ebbc9db9d48ef874af97e652c", + "demos/tcp/aws_tcp_echo_client_single_tasks.h": "ae9c4797201b1fb340af166c29c34a4077b180c07b700e44671a5cbf05776fdf", + "demos/wifi_provisioning/CMakeLists.txt": "daf58d954ac6f1bcdba29c56cdf51d79af41b17279a93f5602465363008b156b", + "demos/wifi_provisioning/README.md": "8cf1fa67aa68ff85ed13aa8aef5316af2c31b6552c2044f2e618a0c0472a6e3a", + "demos/wifi_provisioning/aws_wifi_connect_task.c": "97ef205bbd68172a2ad6f7957c35d4dfe7a8e145bf6d8ce8f6a95bbc90f2fe76", + "libraries/abstractions/ble_hal/test/ble_test_scipts/attributesCommon.py": "a4eca76d9a909cdb35bbb3b8fc2f08248900935ddcb26119cadf7a12efd9bd18", + "libraries/abstractions/ble_hal/test/ble_test_scipts/bleAdapter.py": "f5f102eda56dc3e4a9dd5d217a76451cb3d98ccc325a26ff371f0ba183966bd0", + "libraries/abstractions/ble_hal/test/ble_test_scipts/gattClient.py": "d2aca12ed4a620fb9009eba16d5a793d9d4b81b617c4b405d5e29ebdfd997b10", + "libraries/abstractions/ble_hal/test/ble_test_scipts/runPI.sh": "226ef495cdf367d326398d62b348a991cf01a99dc3df6e4a9eccfeb153ae948e", + "libraries/abstractions/ble_hal/test/ble_test_scipts/securityAgent.py": "108f4a63557798c64b740e0575ed699426782b0398ccbda4f60ac793089ccab3", + "libraries/abstractions/ble_hal/test/ble_test_scipts/startTests_afqp.py": "3a71d8b8cd82604d3344fa3110d157a9d01d3faa0e0613116a17389f7572c298", + "libraries/abstractions/ble_hal/test/ble_test_scipts/startTests_integration.py": "30b41b42d04a777b0f5b4cbfef43738868946ffa69cf2105b113a9ca7f88fe43", + "libraries/abstractions/ble_hal/test/ble_test_scipts/startTests_kpi.py": "7dfc4b8cbbf8795f7f054d3be9b3454f49666253573f7d6f2642741c344e8e55", + "libraries/abstractions/ble_hal/test/ble_test_scipts/startTests_stress.py": "91a6b6781284cd1b1f87b391d3695c96e673bf2e2e96750d28b8dcf1d858c251", + "libraries/abstractions/ble_hal/test/ble_test_scipts/test1.py": "0b22ea40c1bdb550d0b1dac1d91427b8811b8ca5f09422290be01baa9e42c05d", + "libraries/abstractions/ble_hal/test/ble_test_scipts/testClass.py": "f7e4fde0bbe016db98f9d8e432c189c8c42751afca9638569f4aacd431bcf0ad", + "libraries/abstractions/ble_hal/test/ble_test_scipts/testutils.py": "1e571b073d6184e95cd6e61d56f0c927d8f9882bcee1fa421e3ef221c31fb463", + "libraries/abstractions/ble_hal/test/include/iot_test_ble_hal_afqp.h": "4660cd048278613d15508bc9da70e556ad1e7d0e7efafbdbe7f1e7628de65cfb", + "libraries/abstractions/ble_hal/test/include/iot_test_ble_hal_common.h": "d6f84a433d8fece87d6fd1272a16b10e732b87e6dafea43275080498b8e5c8e8", + "libraries/abstractions/ble_hal/test/include/iot_test_ble_hal_config_defaults.h": "c903363afea6d4a48734f86e00e4779e77f164f0216a91d1794bef763a6a8f00", + "libraries/abstractions/ble_hal/test/include/iot_test_ble_hal_integration.h": "65ecd0a669f46385511d35335c7ca8f91e9df208f26e13265fc9ad22131639d8", + "libraries/abstractions/ble_hal/test/include/iot_test_ble_hal_kpi.h": "90ba3933acf588b1b37d237d30b2c99365b5c446d0a11485f6a598c744d7985f", + "libraries/abstractions/ble_hal/test/include/iot_test_ble_hal_stress_test.h": "c5607433cc84241984a8be56831f194e99ce85a8da3db2d46a22756fcf05a115", + "libraries/abstractions/ble_hal/test/src/iot_test_ble_hal_afqp.c": "d1855070ee01326e637e31c1a29973ddfaaa7465546527199b590a84135cc6ba", + "libraries/abstractions/ble_hal/test/src/iot_test_ble_hal_common.c": "ee89287628d854d7925f859408f534b17dacfd745bbb139b3c76b22872e823ca", + "libraries/abstractions/ble_hal/test/src/iot_test_ble_hal_integration.c": "cdd5fbf8fe82a42efc68017ac2f67b32fce69727da75f35430da19a72d4a0c99", + "libraries/abstractions/ble_hal/test/src/iot_test_ble_hal_kpi.c": "576457c49c0ae59204acda3e13e476cf614807a8cae793c06aa56dc8db42abec", + "libraries/abstractions/ble_hal/test/src/iot_test_ble_hal_stress_test.c": "85eb3f0bb84c078592a962398a615fe8c0f6bcdeb2c0875bd2fc96ed4e5e00c8", + "libraries/abstractions/pkcs11/test/MBT_C_CloseSession.c": "f316daa101c47688cdc238a1b791035e2c0380bedb3410d1c643d3e1476d5acc", + "libraries/abstractions/pkcs11/test/MBT_C_DigestFinal.c": "d0be185de95705a42bcfc292de3bfdf85e0583c1eca79a9ea8c679f457e80e62", + "libraries/abstractions/pkcs11/test/MBT_C_DigestInit.c": "f2796e12b07cff645092f8a1eeb32f66b4f715aee4f47403a040e54f913730d9", + "libraries/abstractions/pkcs11/test/MBT_C_DigestUpdate.c": "8e7568eb0cc85fbd4ba01e35b105096651026cdb30fa4456ffeab8e3bbadaf0a", + "libraries/abstractions/pkcs11/test/MBT_C_Finalize.c": "1dee24c1ba0ece633174c9d828ae0b263383ecb8635ef2223316fd6cab321064", + "libraries/abstractions/pkcs11/test/MBT_C_FindObjects.c": "fb3da851d795f107d0ea25bfda32eb44412abd0710d7ef2ca25a73f9214dfffb", + "libraries/abstractions/pkcs11/test/MBT_C_FindObjectsFinal.c": "2ccf532ee7600d07faeae2b733f1f26ac7ffc988485820f14b9cd298e614c4a4", + "libraries/abstractions/pkcs11/test/MBT_C_FindObjectsInit.c": "b2a2d23f7b5d2504da688ea8d7d00aeb5695567f973bcb9606d4473c2068f9dc", + "libraries/abstractions/pkcs11/test/MBT_C_GenerateKeyPair.c": "b60e379e5b0fdd9643f7cfdd7aaf43bb3019380264f62b507cb3e1f6b7eb7149", + "libraries/abstractions/pkcs11/test/MBT_C_GenerateRandom.c": "25ab67fd16402844842097b765ccc63ab217eb18dc91f6ac1a73fc848a883b02", + "libraries/abstractions/pkcs11/test/MBT_C_GetAttributeValue.c": "3ffd3f0c2c5e1631dd9437a67cd63563a1a3637bfad4949e61b2b9e099be260b", + "libraries/abstractions/pkcs11/test/MBT_C_Initialize.c": "d515ad4c9c5db86db5c5f7b328d64240e7834baf2493b8815de8145648997aef", + "libraries/abstractions/pkcs11/test/MBT_C_OpenSession.c": "95c6f69004ef20180fe20beb5f2fb62c460f2a5511fcf07725db9fd6957c70d6", + "libraries/abstractions/pkcs11/test/MBT_C_Sign.c": "d9277bc9b91d281a2dbd80067f015aa2c995acd78b9a91737d0fb62f3b27bdcf", + "libraries/abstractions/pkcs11/test/MBT_C_SignInit.c": "896a325e90f8cdee989b18fa2bf661d0a7105ea999b166d41949a2ff52ac50fa", + "libraries/abstractions/pkcs11/test/MBT_C_Verify.c": "8afa0525843dc34ab9a4cb566306c602fdf23fac6f22685bad593bfe055acc24", + "libraries/abstractions/pkcs11/test/MBT_C_VerifyInit.c": "7086c0a388e2bfb2eeae092952655a57df13adf0c05c1e18d6cdfa03b4d2180f", + "libraries/abstractions/pkcs11/test/MBT_DigestMachine.c": "649037d3a5f39de8ee72487162fce4b801ff39d2330ad56bbc015b6ac55f6c85", + "libraries/abstractions/pkcs11/test/MBT_GenerationMachine.c": "be1dcb4c8167f26503fa0bd37caad3dc7399161211ff2f0f5ac519d842e99e0e", + "libraries/abstractions/pkcs11/test/MBT_ObjectMachine.c": "dba2ca7acd412a701d2fb0e5ff629adb0af7562b13335df94fc0fd09d2b48d01", + "libraries/abstractions/pkcs11/test/MBT_SessionMachine.c": "4cddd9627258f4468df3eebabe746eabfd99a091147d1663accc3f27be83c935", + "libraries/abstractions/pkcs11/test/MBT_SignMachine.c": "20f94c19ddf2742acd4da74bb306e10b29acf884158e21d1f50cf7add8e2bbaa", + "libraries/abstractions/pkcs11/test/MBT_VerifyMachine.c": "50da5f00c64eea0f47d19a02ead5bee7bd3dc0acf40a60c93a5428a7560fba97", + "libraries/abstractions/pkcs11/test/iot_test_pkcs11.c": "ee9b8776bf492ac10f9cd3e482c27418420103079f678ee4f25644aa4fcfb3e0", + "libraries/abstractions/pkcs11/test/iot_test_pkcs11_globals.h": "3920b26d79ef67fe8b906acc0f000ad80c1944f0eaad5e3bcd8ed759f64089de", + "libraries/abstractions/secure_sockets/test/iot_test_tcp.c": "b00a3da003bc20048bad54bca53af2a15a3bcf7a041af554a5252e1c06c9c759", + "libraries/abstractions/wifi/test/iot_test_wifi.c": "fc0096c4adc48842fd84690184c06233b731ca4dd29bac297690f6576bdf8935", + "libraries/abstractions/wifi/test/iot_test_wifi.h": "5a19517bf48ef66bebfdb1e04fb1f3cbdab7bf30e6d19620c373ccee4aac3399", + "libraries/c_sdk/standard/ble/test/CMakeLists.txt": "c332dbdf621b42384a139151acf9c5c3e06190a18d2e7ee25ac5f25cb9a46bfe", + "libraries/c_sdk/standard/ble/test/iot_ble_wifi_prov_test_access_declare.h": "8b28220244a9a6237673a254010b29a0a4c2e3aaf3502e38bb25124f913deafb", + "libraries/c_sdk/standard/ble/test/iot_ble_wifi_prov_test_access_define.h": "d5d07c1230d497a421f3c4d0f7b59f89b01706c4468372a9134280358b4f3a4b", + "libraries/c_sdk/standard/ble/test/iot_mqtt_ble_system_test.c": "b83a703c8f21a6cca713c019b4e1bc740fbef90231c61156ed67828dc67a4e53", + "libraries/c_sdk/standard/ble/test/iot_test_ble_end_to_end.c": "d47ba1df33d16239cb1c99f0fe0e397d7befa6a8e83adb34d7299e4234b2701f", + "libraries/c_sdk/standard/ble/test/iot_test_ble_mqtt_serialize.c": "b32bc682f79db7852995c3e3a5654d53e16c507cc32db45a74d813fa6f066bbd", + "libraries/c_sdk/standard/ble/test/iot_test_wifi_provisioning.c": "6bd06607991df48ddefd2dde5d47978eae9cf1fb75f0eed9baeed5ef39f5f9ac", + "libraries/freertos_plus/aws/ota/test/README.md": "4ced3c5630f4f80f1d521bbbf284a005764a3a30a0d493d03dda7b072c9e9f55", + "libraries/freertos_plus/aws/ota/test/aws_ota_agent_test_access_declare.h": "12f13edb214506945ef5705d643b8da9285f2f1d28068b4cf5c9f57ca7729dff", + "libraries/freertos_plus/aws/ota/test/aws_ota_agent_test_access_define.h": "f87ac9f64f61addfa1ad1af8c520c0efce5d3bd053dee03a9f73de2fe8a4b183", + "libraries/freertos_plus/aws/ota/test/aws_ota_codesigner_certificate.h": "66c35df6bc08423c7ff865be60f0552e3c4dd5944f007eb1dcd07f30ab38dfe0", + "libraries/freertos_plus/aws/ota/test/aws_ota_pal_test_access_declare.h": "29ec4ff20e2de3ad6804195cb5c0ac6435ff47e754fc4b8ece3683f0bdec4e45", + "libraries/freertos_plus/aws/ota/test/aws_ota_pal_test_access_define.h": "37c33a96adeaa79bf40f44fb3ab72d0c07cf6b7f39e68356657060c5df72a696", + "libraries/freertos_plus/aws/ota/test/aws_test_ota_agent.c": "692aa14daf0174b2c2b5d8bab90642adbe3c36a47466742cbefeca863925876c", + "libraries/freertos_plus/aws/ota/test/aws_test_ota_cbor.c": "0d093e61c8206be2aef35de6fbaaa1b2762b1479d31d692acd4690221d9bad6c", + "libraries/freertos_plus/aws/ota/test/aws_test_ota_pal.c": "f0f387b0e1d2d8eaad9e76f10ee332af4821e75f820d760d5ca1fbae17db6af3", + "libraries/freertos_plus/aws/ota/test/aws_test_ota_pal_ecdsa_sha256_signature.h": "1d7cc108377ccf2d0910421e7e8c05510c572799e5c16e4eb422e231f7c4af98", + "libraries/freertos_plus/aws/ota/test/aws_test_ota_pal_rsa_sha1_signature.h": "49443686ce2bb4b7fa4000bf5eb01bbbd2828b6946838a54bed30ca66582ef04", + "libraries/freertos_plus/aws/ota/test/aws_test_ota_pal_rsa_sha256_signature.h": "7972c85001d4f298dffd7392672e035c483006b871d64913614a60b2e9ac2fca", + "libraries/freertos_plus/aws/ota/test/aws_test_ota_signature_methods.h": "6015225bcc029fd04aa62f71f254badcd57daf68ddbdf12053f88d01669e175e", + "libraries/freertos_plus/aws/ota/test/test_files/describeStreamResponse.cbor": "b314ea57c902e90d41e2acebc0dc7dd9ba8924876d23a88754dd1c4765b21541", + "libraries/freertos_plus/aws/ota/test/test_files/ecdsa-sha256-signer.crt.pem": "79705066d68dc58ba6b5c9ad27e8c3f355184be078025ab76d1a1bc9a9cbeade", + "libraries/freertos_plus/aws/ota/test/test_files/ecdsa-sha256-signer.key.pem": "cb258c4d1d4e4fc355cd13051d4130719fba62257797cc3e17083443bb767b06", + "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_0.cbor": "bf223676be6a282853bc22c64faee719ab74068a4d7770d977a6f37c67400fdd", + "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_1.cbor": "72b22a9ea24016629f6d169b52e98e735ee9924bb4f13c1295f1efd5f6fc6abd", + "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_10.cbor": "e6b9ee23bbd6d33240bebaccd8ee9978230ad8e7206926246ed36a1a8d60e4f4", + "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_11.cbor": "14f6287ab8666bed3d2c0998763f1fd30baffee52e7fe79994c6ee20e868653b", + "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_12.cbor": "4bf01a682c8fcfe0c47fb78b04d73d61aa31a79f6bcb07410bc530edc22a18da", + "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_13.cbor": "fdfd00cb7c0874216925c7152c9491b38c9dd179bfaffeba954c4eb27947ca75", + "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_14.cbor": "207819f2f6d5d82a3d3b1dcea0f508e4fe217ca243bad33090940d7bf1e03128", + "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_15.cbor": "31910394ab515ca70c57aae3be88d14f9a35e3e66ba7c6c3132ef0b93830289d", + "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_2.cbor": "cfb32bc6d6fafed74e985824f0b731837372179aece4d0a84087919a256ee59d", + "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_3.cbor": "a4733133a6c983859459141909031bfbb153cca083b9e881f24542c05041ec7a", + "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_4.cbor": "509a62af0b2906057735a635572e8e17aed57e8f0c42def8736db880823ef65d", + "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_5.cbor": "b471bc1ef2bff3b72da84f9bef8bc4ec44fc6aec26d3501cf1b5991fb62732a8", + "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_6.cbor": "bfa28de6fbb8330be654728e64d935c7582c8aae45ab992a4f6c0b7f19b803a2", + "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_7.cbor": "e1614f15ca0fec4d3bec19e7d48be470066957de78bb41ba5870786a0d15f678", + "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_8.cbor": "e66c279dded094b1654748fdbb527eb290f3f142ac3f4f7edfb2c439a49b984f", + "libraries/freertos_plus/aws/ota/test/test_files/getStreamResponse_9.cbor": "3536044b7fffe7ae1241823ed01bfaf056bb09a55d43f6b8e70af4ee62fffb17", + "libraries/freertos_plus/aws/ota/test/test_files/payload.bin": "cd5639809d3f72ab83ead330059af6fecebac84927704617bbccc710b1c23253", + "libraries/freertos_plus/aws/ota/test/test_files/rsa-sha1-root-ca-cert-key.pem": "9e97f6f9ea210b532a7b86eac12f0d97a1b6c372e22ab86187bf98e5e208c4aa", + "libraries/freertos_plus/aws/ota/test/test_files/rsa-sha1-root-ca-cert.pem": "b550b03c7b547629bd0ecfdbc5804cd72d6b57dc0ec8cf8a1bd2616215d602a4", + "libraries/freertos_plus/aws/ota/test/test_files/rsa-sha1-signer.crt.pem": "4a05cecf862a081237cee9207be87080e2c50544959f74be2c3908d7857b9da7", + "libraries/freertos_plus/aws/ota/test/test_files/rsa-sha1-signer.key.pem": "46d820537f7b3d57c8f9ee63d9019602cc9329a6cd0b6a5f8ffcdb1838125601", + "libraries/freertos_plus/aws/ota/test/test_files/rsa-sha256-signer.crt.pem": "5de1c733099a249e2424c38aa9b732094914f260ba2582cc39f9198f46d0b7d5", + "libraries/freertos_plus/aws/ota/test/test_files/rsa-sha256-signer.key.pem": "baceeaf3b8fb0e16a4d3eb8a1b016dfcd41f752270f00649311ba567759e9e29", + "libraries/freertos_plus/aws/ota/test/test_files/rsasigner.crt": "2b92ff249815c106222fa13ef62bf2353f2ebb9180c36c474203efbc055ed2dc", + "libraries/freertos_plus/standard/tls/test/iot_test_tls.c": "7f045cc4e4ad59a5294cf7cce7c77c40f9f62fa9728b09080ec4ab8af7d0ef7f", + "libraries/freertos_plus/standard/tls/test/iot_test_tls.h": "b3931813dbad0eaa43ebbc8df80b26d0783c80b978b4d58d5b71fea023c15cc1", + "tests/CMakeLists.txt": "ec58f7e4bc4c78addba71426b7f51a4229b02ce05dbb7cc69806fe20b4774051", + "tests/common/aws_test.c": "8c529f6163ea47735a58313c979145f989c0918655f27c802acd909f846fc042", + "tests/common/aws_test_framework.c": "38b4944ae657fb1d9599cc87079462994772342edc88b6f281d83bc3a567f38b", + "tests/common/aws_test_runner.c": "abbab15bd3b511b29293da8ee5fc8c858c32548d709976520cd2262f82808e8d", + "tests/common/iot_test_freertos.c": "83ab93d9f694c2067a1ebb716b05dbf58db82dd9b5e3ea640365dd21ccdf3646", + "tests/common/iot_tests_network.c": "7897cec83bf4fad4042bc18584b91ee907d38f868cc6e0c4004e4a39f722d1aa", + "tests/include/aws_application_version.h": "f60fd918e1fa4593c54b5021cf1ea04f074d4c15874fda9c865bc0ee3b3cb97e", + "tests/include/aws_clientcredential.h": "9ddfa1b9cee7627cce3ca06a1218aa4795623a297f3e2b1300f166a98ba477e1", + "tests/include/aws_clientcredential_keys.h": "aea58dd1a8d6b520d901e21df1eef0e4464cccdc057a092e68c1ff4fe60de327", + "tests/include/aws_test_framework.h": "198a26059a758e86348f39f99deadbad3503c28e90416dbfeba2658faa10003b", + "tests/include/aws_test_runner.h": "b658994237bcdc044b9778de18be22cb73b1054bea9e36e4f487b63b4823da97", + "tests/include/aws_test_tcp.h": "dea182055de9c8e0a7073419310dfc12a196c8595b44b3eef3de4f18ff0fc539", + "tests/include/aws_test_utils.h": "1eb566be98d2991c6e7d684852c8d9c30d1bfd346236ec344f8fa542b07a782a", + "tests/include/aws_unity_config.h": "defedeab0ecca302ffd4df7449ee97bdc5e411c38a7aea255179a8cb36516d75", + "tests/include/iot_config_common.h": "ed660bbdeee86fa711de3e2417029498854f5591a1fb7201d1bb7e450f5d2dc0", + "tests/integration_test/CMakeLists.txt": "881bececad22738b24b4a5a7226e0aadca0935024db12cb5f6949e732d82645b", + "tests/integration_test/core_http_system_test.c": "a76d516bed97f4ca81187a41d5b4764c281a0d1a33290c3d930926cfa504d090", + "tests/integration_test/core_mqtt_system_test.c": "3c66b2373bf1590699b002e5886553fd4514e56066bceb6266ed0935842596b6", + "tests/integration_test/freertos_tcp_test_access_declare.h": "1f74d984c8cc1e29af6c3edbebb45cae55488e4b87d5564c391cc9d202f8e7c2", + "tests/integration_test/freertos_tcp_test_access_dns_define.h": "d7b0b69ad6fecdd5f3798c4a9c96e6a7085dcc4a50f40a364739593821e7b57a", + "tests/integration_test/freertos_tcp_test_access_tcp_define.h": "50638448a5a2bdbab198b586460f385f5fb8fa80b375e3799550e091abbe8e1e", + "tests/integration_test/shadow_system_test.c": "ad050d596392bd3006cf32acd1787cd10fa1ee053270111b7ca601cac4a990f9", + "tests/integration_test/test_freertos_tcp.c": "c31b370bffb7b5b9792541aa11df27afa685eb5f1a3227e3b54226a0a3f67387", + "tests/unit_test/linux/CMakeLists.txt": "ba82e9bc8258c5e9d86ecdb7e092345017e5642a0ccdd4b7ab01274815d59c17", + "tests/unit_test/linux/README.md": "3e8ca145ddeae48ce4549b4e8c3c737d1f753674942005f1086f0b8875fea8dd", + "tests/unit_test/linux/config_files/FreeRTOSConfig.h": "d5f1d4c3d5847912b5c06212227b3159fa7e375b709604bf606b331cf267170b", + "tests/unit_test/linux/config_files/aws_secure_sockets_config.h": "57ea48f6d27c2f25092d7347699da81b2a5ebf1cc91f7365b9331286b8dc5059", + "tests/unit_test/linux/config_files/aws_wifi_config.h": "0fc14c96bbc3379534adf57e9477b4b15194bfc24b80be5e074dae32aceee12c", + "tests/unit_test/linux/config_files/config.h": "02102f50fca2162d08e3beb07840c539728e53d4d2588098a928d518c03e2504", + "tests/unit_test/linux/config_files/core_mqtt_config.h": "3a4017949c0f8668f992052706beaa5192e321a44a2ca67f7ab0be818d19e516", + "tests/unit_test/linux/config_files/core_pkcs11_config.h": "c5a24088fea06b44712dcd1490ce971dc358ae39768fbc3a1fc62c28f6563f3f", + "tests/unit_test/linux/config_files/iot_ble_config.h": "911de7dc95ef7ba07c999a6abe06bbe8ec2bb0904d88477ef36eb6c7251035f4", + "tests/unit_test/linux/config_files/iot_config.h": "532cfcfce9763a5d92a91ab37d94ac68193d68537eb33ba5e8dab4c8389fb0fb", + "tests/unit_test/linux/config_files/iot_config_common.h": "67ca01697c3b189ea251d1645e60842f46f617af8a45320768c76af31c94a0c6", + "tests/unit_test/linux/config_files/logging_levels.h": "8d6d90d8d3bb175076df9e985a406636c5463e1577db8e736c54072362a3ebd8", + "tests/unit_test/linux/config_files/logging_stack.h": "f4b0d1033e2b6db8f25ea9314d104dbe81185390f482f80331b67b19607f2cb1", + "tests/unit_test/linux/config_files/portableDefs.h": "af7f51b28a446f2c2c6af4a8eebf4f9de4cd8c208d4928e50dda1fad90c20ff9", + "tests/unit_test/linux/config_files/portmacro.h": "363a54cb76bfe8868809641b27ecd24c7df79088d2aaccde482c6c36f9f83bc4", + "tests/unit_test/linux/config_files/trcConfig.h": "3c64639c5150a2c59b7aedf9cbea346d5510dd3fce03598eafb2ca10480fa564", + "tests/unit_test/linux/config_files/trcSnapshotConfig.h": "1331a0cee7e872883993dc323210ec0e777a170c552a36a40610eb93a479c9e9", + "tests/unit_test/linux/utils/iot_atomic.h": "7cc93d629292b3ad720cd3d009c7d1f3ae43743a61ff8cfd56a88c6992086c25", + "tests/unit_test/linux/utils/task_control.c": "cd339d2a0415953dc0be29b1c481d18c63b49ef25b725781e49e22687af93efc", + "tests/unit_test/linux/utils/task_control.h": "8c629e1213bf9c0bee64bf70e4735293d35b4788201c10a1ddf030e1b2c3e1d7", + "tests/unit_test/linux/utils/wait_for_event.c": "5da71cc7056fdd660b968cda794eae5c9234d5c73be2635e1a9d9399a7b5f1a5", + "tests/unit_test/linux/utils/wait_for_event.h": "9d43102a2c6794150862d3ecc6f1107f02ba0b515c8fc155a1397eec12fdcdf0" } } } \ No newline at end of file diff --git a/demos/ble/gatt_server/aws_ble_gatt_server_demo.c b/demos/ble/gatt_server/aws_ble_gatt_server_demo.c index a1006896acd..0dc44f3eeca 100644 --- a/demos/ble/gatt_server/aws_ble_gatt_server_demo.c +++ b/demos/ble/gatt_server/aws_ble_gatt_server_demo.c @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/ble/mqtt_ble/mqtt_demo_ble_transport.c b/demos/ble/mqtt_ble/mqtt_demo_ble_transport.c index 7618a1c11e3..0e808b80583 100644 --- a/demos/ble/mqtt_ble/mqtt_demo_ble_transport.c +++ b/demos/ble/mqtt_ble/mqtt_demo_ble_transport.c @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/ble/numeric_comparison/iot_ble_numericComparison.c b/demos/ble/numeric_comparison/iot_ble_numericComparison.c index 044f75a0ac0..eff5840a391 100644 --- a/demos/ble/numeric_comparison/iot_ble_numericComparison.c +++ b/demos/ble/numeric_comparison/iot_ble_numericComparison.c @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/ble/shadow_ble/shadow_demo_ble_transport.c b/demos/ble/shadow_ble/shadow_demo_ble_transport.c index dc6f0a69c10..02b312be7d3 100644 --- a/demos/ble/shadow_ble/shadow_demo_ble_transport.c +++ b/demos/ble/shadow_ble/shadow_demo_ble_transport.c @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/cli/cli_uart_demo.c b/demos/cli/cli_uart_demo.c index ee8400cb113..221b117156a 100644 --- a/demos/cli/cli_uart_demo.c +++ b/demos/cli/cli_uart_demo.c @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/common/http_demo_helpers/CMakeLists.txt b/demos/common/http_demo_helpers/CMakeLists.txt new file mode 100644 index 00000000000..84f7c164391 --- /dev/null +++ b/demos/common/http_demo_helpers/CMakeLists.txt @@ -0,0 +1,23 @@ +# Module for demo helper utilities based on coreHTTP library. +afr_module(INTERNAL NAME http_demo_helpers) + +afr_module_sources( + ${AFR_CURRENT_MODULE} + PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/http_demo_utils.c +) + +afr_module_include_dirs( + ${AFR_CURRENT_MODULE} + PUBLIC + "${CMAKE_CURRENT_LIST_DIR}" + ) + +afr_module_dependencies( + ${AFR_CURRENT_MODULE} + PUBLIC + AFR::core_http + AFR::backoff_algorithm + AFR::transport_interface_secure_sockets + AFR::pkcs11_helpers +) diff --git a/demos/common/http_demo_helpers/http_demo_utils.c b/demos/common/http_demo_helpers/http_demo_utils.c new file mode 100644 index 00000000000..0eeb8273b67 --- /dev/null +++ b/demos/common/http_demo_helpers/http_demo_utils.c @@ -0,0 +1,290 @@ +/* + * FreeRTOS V202012.00 + * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* Standard includes. */ +#include + +#include "http_demo_utils.h" + +/* Retry utilities. */ +#include "backoff_algorithm.h" + +/* Include PKCS11 helpers header. */ +#include "pkcs11_helpers.h" + +/* Parser utilities. */ +#include "http_parser.h" + +/*-----------------------------------------------------------*/ + +/** + * @brief The maximum number of retries for connecting to server. + */ +#define CONNECTION_RETRY_MAX_ATTEMPTS ( 5U ) + +/** + * @brief The maximum back-off delay (in milliseconds) for retrying connection to server. + */ +#define CONNECTION_RETRY_MAX_BACKOFF_DELAY_MS ( 5000U ) + +/** + * @brief The base back-off delay (in milliseconds) to use for connection retry attempts. + */ +#define CONNECTION_RETRY_BACKOFF_BASE_MS ( 500U ) + +/*-----------------------------------------------------------*/ + +/** + * @brief Calculate and perform an exponential backoff with jitter delay for + * the next retry attempt of a failed network operation with the server. + * + * The function generates a random number, calculates the next backoff period + * with the generated random number, and performs the backoff delay operation if the + * number of retries have not exhausted. + * + * @note The PKCS11 module is used to generate the random number as it allows access + * to a True Random Number Generator (TRNG) if the vendor platform supports it. + * It is recommended to seed the random number generator with a device-specific entropy + * source so that probability of collisions from devices in connection retries is mitigated. + * + * @note The backoff period is calculated using the backoffAlgorithm library. + * + * @param[in, out] pxRetryAttempts The context to use for backoff period calculation + * with the backoffAlgorithm library. + * + * @return pdPASS if calculating the backoff period was successful; otherwise pdFAIL + * if there was failure in random number generation OR all retry attempts had exhausted. + */ +static BaseType_t prvBackoffForRetry( BackoffAlgorithmContext_t * pxRetryParams ); + +/*-----------------------------------------------------------*/ + +static BaseType_t prvBackoffForRetry( BackoffAlgorithmContext_t * pxRetryParams ) +{ + BaseType_t xReturnStatus = pdFAIL; + uint16_t usNextRetryBackOff = 0U; + BackoffAlgorithmStatus_t xBackoffAlgStatus = BackoffAlgorithmSuccess; + + /** + * To calculate the backoff period for the next retry attempt, we will + * generate a random number to provide to the backoffAlgorithm library. + * + * Note: The PKCS11 module is used to generate the random number as it allows access + * to a True Random Number Generator (TRNG) if the vendor platform supports it. + * It is recommended to use a random number generator seeded with a device-specific + * entropy source so that probability of collisions from devices in connection retries + * is mitigated. + */ + uint32_t ulRandomNum = 0; + + if( xPkcs11GenerateRandomNumber( ( uint8_t * ) &ulRandomNum, + sizeof( ulRandomNum ) ) == pdPASS ) + { + /* Get back-off value (in milliseconds) for the next retry attempt. */ + xBackoffAlgStatus = BackoffAlgorithm_GetNextBackoff( pxRetryParams, ulRandomNum, &usNextRetryBackOff ); + + if( xBackoffAlgStatus == BackoffAlgorithmRetriesExhausted ) + { + LogError( ( "All retry attempts have exhausted. Operation will not be retried" ) ); + } + else if( xBackoffAlgStatus == BackoffAlgorithmSuccess ) + { + /* Perform the backoff delay. */ + vTaskDelay( pdMS_TO_TICKS( usNextRetryBackOff ) ); + + xReturnStatus = pdPASS; + + LogInfo( ( "Retry attempt %lu out of maximum retry attempts %lu.", + ( pxRetryParams->attemptsDone + 1 ), + pxRetryParams->maxRetryAttempts ) ); + } + } + else + { + LogError( ( "Unable to retry operation with broker: Random number generation failed" ) ); + } + + return xReturnStatus; +} + +/*-----------------------------------------------------------*/ + +BaseType_t connectToServerWithBackoffRetries( TransportConnect_t connectFunction, + NetworkContext_t * pxNetworkContext ) +{ + BaseType_t xReturn = pdFAIL; + /* Struct containing the next backoff time. */ + BackoffAlgorithmContext_t xReconnectParams; + BaseType_t xBackoffStatus = 0U; + + configASSERT( connectFunction != NULL ); + configASSERT( pxNetworkContext != NULL ); + + /* Initialize reconnect attempts and interval. */ + BackoffAlgorithm_InitializeParams( &xReconnectParams, + CONNECTION_RETRY_BACKOFF_BASE_MS, + CONNECTION_RETRY_MAX_BACKOFF_DELAY_MS, + CONNECTION_RETRY_MAX_ATTEMPTS ); + + /* Attempt to connect to the HTTP server. If connection fails, retry after a + * timeout. The timeout value will exponentially increase until either the + * maximum timeout value is reached or the set number of attempts are + * exhausted.*/ + do + { + xReturn = connectFunction( pxNetworkContext ); + + if( xReturn != pdPASS ) + { + LogWarn( ( "Connection to the HTTP server failed. " + "Retrying connection with backoff and jitter." ) ); + + /* As the connection attempt failed, we will retry the connection after an + * exponential backoff with jitter delay. */ + + /* Calculate the backoff period for the next retry attempt and perform the wait operation. */ + xBackoffStatus = prvBackoffForRetry( &xReconnectParams ); + } + } while( ( xReturn == pdFAIL ) && ( xBackoffStatus == pdPASS ) ); + + return xReturn; +} + +/*-----------------------------------------------------------*/ + +HTTPStatus_t getUrlPath( const char * pcUrl, + size_t xUrlLen, + const char ** pcPath, + size_t * pxPathLen ) +{ + /* http-parser status. Initialized to 1 to signify failure. */ + int parserStatus = 1; + struct http_parser_url urlParser; + HTTPStatus_t xHTTPStatus = HTTPSuccess; + + /* Sets all members in urlParser to 0. */ + http_parser_url_init( &urlParser ); + + if( ( pcUrl == NULL ) || ( pcPath == NULL ) || ( pxPathLen == NULL ) ) + { + LogError( ( "NULL parameter passed to getUrlPath()." ) ); + xHTTPStatus = HTTPInvalidParameter; + } + + if( xHTTPStatus == HTTPSuccess ) + { + parserStatus = http_parser_parse_url( pcUrl, xUrlLen, 0, &urlParser ); + + if( parserStatus != 0 ) + { + LogError( ( "Error parsing the input URL %.*s. Error code: %d.", + ( int32_t ) xUrlLen, + pcUrl, + parserStatus ) ); + xHTTPStatus = HTTPParserInternalError; + } + } + + if( xHTTPStatus == HTTPSuccess ) + { + *pxPathLen = ( size_t ) ( urlParser.field_data[ UF_PATH ].len ); + + if( *pxPathLen == 0 ) + { + xHTTPStatus = HTTPNoResponse; + *pcPath = NULL; + } + else + { + *pcPath = &pcUrl[ urlParser.field_data[ UF_PATH ].off ]; + } + } + + if( xHTTPStatus != HTTPSuccess ) + { + LogError( ( "Error parsing the path from URL %s. Error code: %d", + pcUrl, + xHTTPStatus ) ); + } + + return xHTTPStatus; +} + +/*-----------------------------------------------------------*/ + +HTTPStatus_t getUrlAddress( const char * pcUrl, + size_t xUrlLen, + const char ** pcAddress, + size_t * pxAddressLen ) +{ + /* http-parser status. Initialized to 1 to signify failure. */ + int parserStatus = 1; + struct http_parser_url urlParser; + HTTPStatus_t xHTTPStatus = HTTPSuccess; + + /* Sets all members in urlParser to 0. */ + http_parser_url_init( &urlParser ); + + if( ( pcUrl == NULL ) || ( pcAddress == NULL ) || ( pxAddressLen == NULL ) ) + { + LogError( ( "NULL parameter passed to getUrlAddress()." ) ); + xHTTPStatus = HTTPInvalidParameter; + } + + if( xHTTPStatus == HTTPSuccess ) + { + parserStatus = http_parser_parse_url( pcUrl, xUrlLen, 0, &urlParser ); + + if( parserStatus != 0 ) + { + LogError( ( "Error parsing the input URL %.*s. Error code: %d.", + ( int32_t ) xUrlLen, + pcUrl, + parserStatus ) ); + xHTTPStatus = HTTPParserInternalError; + } + } + + if( xHTTPStatus == HTTPSuccess ) + { + *pxAddressLen = ( size_t ) ( urlParser.field_data[ UF_HOST ].len ); + + if( *pxAddressLen == 0 ) + { + xHTTPStatus = HTTPNoResponse; + *pcAddress = NULL; + } + else + { + *pcAddress = &pcUrl[ urlParser.field_data[ UF_HOST ].off ]; + } + } + + if( xHTTPStatus != HTTPSuccess ) + { + LogError( ( "Error parsing the address from URL %s. Error code %d", + pcUrl, + xHTTPStatus ) ); + } + + return xHTTPStatus; +} diff --git a/demos/common/http_demo_helpers/http_demo_utils.h b/demos/common/http_demo_helpers/http_demo_utils.h new file mode 100644 index 00000000000..7a93bdcb1ce --- /dev/null +++ b/demos/common/http_demo_helpers/http_demo_utils.h @@ -0,0 +1,125 @@ +/* + * FreeRTOS V202012.00 + * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef HTTP_DEMO_UTILS_H +#define HTTP_DEMO_UTILS_H + +/* Standard includes. */ +#include +#include +#include + +/* Transport interface implementation include header for TLS. */ +#include "transport_secure_sockets.h" + +/* Kernel includes. */ +#include "FreeRTOS.h" + +/* HTTP API header. */ +#include "core_http_client.h" + +/** + * @brief Function pointer for establishing connection to a server. + * + * @param[out] pxNetworkContext Implementation-defined network context. + * + * @return pdFAIL on failure; pdPASS on successful connection. + */ +typedef BaseType_t ( * TransportConnect_t )( NetworkContext_t * pxNetworkContext ); + +/** + * @brief Connect to a server with reconnection retries. + * + * If connection fails, retry is attempted after a timeout. The timeout value + * will exponentially increase until either the maximum timeout value is reached + * or the set number of attempts are exhausted. + * + * @param[in] connectFunction Function pointer for establishing connection to a + * server. + * @param[out] pxNetworkContext Implementation-defined network context. + * + * @return pdFAIL on failure; pdPASS on successful connection. + */ +BaseType_t connectToServerWithBackoffRetries( TransportConnect_t connectFunction, + NetworkContext_t * pxNetworkContext ); + +/** + * @brief Retrieve the path from the input URL. + * + * This function retrieves the location and length of the path from within the + * input the URL. The query is not included in the length returned. + * + * The URL MUST start with "http://" or "https://" to find the path. + * + * For example, if pcUrl is: + * "https://www.somewebsite.com/path/to/item.txt?optionalquery=stuff" + * + * Then pcPath and pxPathLen will be the following: + * *pcPath = "/path/to/item.txt?optionalquery=stuff" + * *pxPathLen = 17 + * + * @param[in] pcUrl URL string to parse. + * @param[in] xUrlLen The length of the URL string input. + * @param[out] pcPath pointer within input url that the path starts at. + * @param[out] pxPathLen Length of the path. + * + * @return The status of the parsing attempt: + * HTTPSuccess if the path was successfully parsed, + * HTTPParserInternalError if there was an error parsing the URL, + * or HTTPNoResponse if the path was not found. + */ +HTTPStatus_t getUrlPath( const char * pcUrl, + size_t xUrlLen, + const char ** pcPath, + size_t * pxPathLen ); + +/** + * @brief Retrieve the Address from the input URL. + * + * This function retrieves the location and length of the address from within + * the input URL. The path and query are not included in the length returned. + * + * The URL MUST start with "http://" or "https://" to find the address. + * + * For example, if pcUrl is: + * "https://www.somewebsite.com/path/to/item.txt?optionalquery=stuff" + * + * Then pcAddress and pxAddressLen will be the following: + * *pcAddress = "www.somewebsite.com/path/to/item.txt?optionalquery=stuff" + * *pxAddressLen = 19 + * + * @param[in] pcUrl URL string to parse. + * @param[in] xUrlLen The length of the URL string input. + * @param[out] pcAddress pointer within input url that the address starts at. + * @param[out] pxAddressLen Length of the address. + * + * @return The status of the parsing attempt: + * HTTPSuccess if the path was successfully parsed, + * HTTPParserInternalError if there was an error parsing the URL, + * or HTTPNoResponse if the path was not found. + */ +HTTPStatus_t getUrlAddress( const char * pcUrl, + size_t xUrlLen, + const char ** pcAddress, + size_t * pxAddressLen ); + +#endif /* ifndef HTTP_DEMO_UTILS_H */ diff --git a/demos/common/http_demo_helpers/presigned_url_generator/README.md b/demos/common/http_demo_helpers/presigned_url_generator/README.md new file mode 100644 index 00000000000..b4236752553 --- /dev/null +++ b/demos/common/http_demo_helpers/presigned_url_generator/README.md @@ -0,0 +1,55 @@ +# Presigned S3 URLs Generator + +`presigned_url_gen.py` generates pre-signed URLs for S3 HTTP GET and PUT request access. + +### Dependencies + +* Python 3+ +* boto3 +* argparse + +### Prerequisites + +1. Install the dependencies. + ```sh + pip install boto3 argparse + ``` + +1. You will need an AWS Account with S3 access before beginning. You must install and configure the AWS CLI in order to + use this script. + For information on AWS S3 please see: https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html + For AWS CLI installation information please see: https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html + For AWS CLI configuration information please see: https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html + + ```sh + aws configure + ``` + +### Usage + +1. Run `presigned_url_gen.py` with your s3 bucket name and s3 object key. + ```sh + ./presigned_urls_gen.py --bucket --key + ``` + An example expected output: + ``` + #define democonfigS3_PRESIGNED_GET_URL "https://aws-s3-endpoint/object-key.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ABABABABABABABABABAB%2F20201027%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20201027T194726Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=SomeHash12345UrlABcdEFgfIjK" + #define democonfigS3_PRESIGNED_PUT_URL "https://aws-s3-endpoint/object-key.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ABABABABABABABABABAB%2F20201027%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20201027T194726Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=SomeHash12345UrlLMnmOPqrStUvW" + ``` +1. Copy and paste the output to `demo_config.h` for macros `democonfigS3_PRESIGNED_GET_URL` and `democonfigS3_PRESIGNED_PUT_URL`. + ```c + #define democonfigS3_PRESIGNED_GET_URL "https://aws-s3-endpoint/object-key.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ABABABABABABABABABAB%2F20201027%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20201027T194726Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=SomeHash12345UrlABcdEFgfIjK" + #define democonfigS3_PRESIGNED_PUT_URL "https://aws-s3-endpoint/object-key.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ABABABABABABABABABAB%2F20201027%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20201027T194726Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=SomeHash12345UrlLMnmOPqrStUvW" + ``` + +### Parameters + +#### --bucket +The name of the S3 bucket from which the demo will download or upload. + +#### --key +The name of the existing object you wish to download (GET), +or the name of the object you wish to upload (PUT). + +#### --region +Optional parameter for the AWS region in which the bucket is located. diff --git a/demos/common/http_demo_helpers/presigned_url_generator/presigned_urls_gen.py b/demos/common/http_demo_helpers/presigned_url_generator/presigned_urls_gen.py new file mode 100644 index 00000000000..b829436e07b --- /dev/null +++ b/demos/common/http_demo_helpers/presigned_url_generator/presigned_urls_gen.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 + +import boto3 +from botocore.client import Config +import argparse + + +def get_presigned_urls(bucket_name, key_name, region_name) -> None: + """ + Prints the presigned GET and PUT URLs assigned to the demo specific C + macros, for the given object key in the given S3 bucket. If the region + parameter is not defined, boto3 will use the one configured using AWS CLI. + The URLs are presigned with AWS's Signature Version 4. + Args: + bucket_name (str): S3 bucket + key_name (str): S3 object key + region_name (str): S3 bucket's region + """ + + # Get the service client. + # SigV2 is being deprecated. If the boto3 installation in the current Python environment has an older version of + # the package, then this configuration forces the use of SigV4. + s3 = boto3.client("s3", config=Config(signature_version="s3v4", region_name=region_name)) + + client_method_dict = {"GET": "get_object", "PUT": "put_object"} + + # Generate the URL to get 'key-name' from 'bucket-name' + for method in client_method_dict.keys(): + url = s3.generate_presigned_url( + ClientMethod=client_method_dict[method], + Params={"Bucket": bucket_name, "Key": key_name}, + ) + print("#define democonfigS3_PRESIGNED_" + method + "_URL" + " " + '"' + url + '"\n') + + +def main(): + """ + Generate demo C macro strings, on the console, for the input S3 bucket and object key. + """ + parser = argparse.ArgumentParser(description="S3 Presigned URL Generator. See README.md") + parser.add_argument( + "--bucket", + action="store", + required=True, + dest="bucket_name", + help="The name of the S3 bucket of interest.", + ) + parser.add_argument( + "--key", + action="store", + required=True, + dest="key_name", + help="The name of the S3 Object in the bucket. This is referred to as a 'key'", + ) + parser.add_argument( + "--region", + action="store", + required=False, + dest="region_name", + help="The region in which the S3 bucket of interest is created.", + ) + args = parser.parse_args() + + get_presigned_urls(args.bucket_name, args.key_name, args.region_name) + + +if __name__ == "__main__": # pragma: no cover + main() diff --git a/demos/common/mqtt_demo_helpers/CMakeLists.txt b/demos/common/mqtt_demo_helpers/CMakeLists.txt new file mode 100644 index 00000000000..5f25b06cf1b --- /dev/null +++ b/demos/common/mqtt_demo_helpers/CMakeLists.txt @@ -0,0 +1,23 @@ +# Module for demo helper utilities based on coreMQTT library. +afr_module(INTERNAL NAME mqtt_demo_helpers) + +afr_module_sources( + ${AFR_CURRENT_MODULE} + PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/mqtt_demo_helpers.c +) + +afr_module_include_dirs( + ${AFR_CURRENT_MODULE} + PUBLIC + "${CMAKE_CURRENT_LIST_DIR}" +) + +afr_module_dependencies( + ${AFR_CURRENT_MODULE} + PUBLIC + AFR::core_mqtt + AFR::transport_interface_secure_sockets + AFR::backoff_algorithm + AFR::pkcs11_helpers +) diff --git a/demos/device_shadow_for_aws/shadow_demo_helpers.c b/demos/common/mqtt_demo_helpers/mqtt_demo_helpers.c similarity index 74% rename from demos/device_shadow_for_aws/shadow_demo_helpers.c rename to demos/common/mqtt_demo_helpers/mqtt_demo_helpers.c index 4a11b898b38..921b058057a 100644 --- a/demos/device_shadow_for_aws/shadow_demo_helpers.c +++ b/demos/common/mqtt_demo_helpers/mqtt_demo_helpers.c @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -21,7 +21,7 @@ */ /** - * @file shadow_demo_helpers.c + * @file mqtt_demo_helpers.c * * @brief This file provides helper functions used by the Shadow demo application to * do MQTT operations over a mutually authenticated TLS connection. @@ -38,28 +38,41 @@ #include #include -/* Include Demo Config as the first non-system header. */ -#include "shadow_demo_config.h" - /* MQTT API header. */ #include "core_mqtt.h" /* Shadow includes */ -#include "shadow_demo_helpers.h" +#include "mqtt_demo_helpers.h" /* Retry utilities include. */ -#include "retry_utils.h" +#include "backoff_algorithm.h" + +/* Include PKCS11 helpers header. */ +#include "pkcs11_helpers.h" /* Include header for client credentials. */ #include "aws_clientcredential.h" -#include "aws_clientcredential_keys.h" - /* Include header for root CA certificates. */ #include "iot_default_root_certificates.h" /*-----------------------------------------------------------*/ +/** + * @brief The maximum number of retries for connecting to server. + */ +#define CONNECTION_RETRY_MAX_ATTEMPTS ( 5U ) + +/** + * @brief The maximum back-off delay (in milliseconds) for retrying connection to server. + */ +#define CONNECTION_RETRY_MAX_BACKOFF_DELAY_MS ( 5000U ) + +/** + * @brief The base back-off delay (in milliseconds) to use for connection retry attempts. + */ +#define CONNECTION_RETRY_BACKOFF_BASE_MS ( 500U ) + /** * @brief Timeout for receiving CONNACK packet in milliseconds. */ @@ -99,7 +112,7 @@ /** * @brief Transport timeout in milliseconds for transport send and receive. */ -#define mqttexampleTRANSPORT_SEND_RECV_TIMEOUT_MS ( 500U ) +#define mqttexampleTRANSPORT_SEND_RECV_TIMEOUT_MS ( 200U ) /** * @brief Maximum number of outgoing publishes maintained in the application @@ -166,36 +179,35 @@ static uint16_t globalUnsubscribePacketIdentifier = 0U; */ static PublishPackets_t outgoingPublishPackets[ MAX_OUTGOING_PUBLISHES ] = { 0 }; -/** - * @brief Static buffer used to hold MQTT messages being sent and received. - */ -static uint8_t ucSharedBuffer[ democonfigNETWORK_BUFFER_SIZE ]; - -/** - * @brief The MQTT context used for MQTT operation. - */ -static MQTTContext_t mqttContext = { 0 }; - -/** - * @brief The network context used for Openssl operation. - */ -static NetworkContext_t networkContext = { 0 }; - /** * @brief The flag to indicate the mqtt session changed. */ static bool mqttSessionEstablished = false; +/*-----------------------------------------------------------*/ + /** - * @brief Static buffer used to hold MQTT messages being sent and received. + * @brief Calculate and perform an exponential backoff with jitter delay for + * the next retry attempt of a failed network operation with the server. + * + * The function generates a random number, calculates the next backoff period + * with the generated random number, and performs the backoff delay operation if the + * number of retries have not exhausted. + * + * @note The PKCS11 module is used to generate the random number as it allows access + * to a True Random Number Generator (TRNG) if the vendor platform supports it. + * It is recommended to seed the random number generator with a device-specific entropy + * source so that probability of collisions from devices in connection retries is mitigated. + * + * @note The backoff period is calculated using the backoffAlgorithm library. + * + * @param[in, out] pxRetryAttempts The context to use for backoff period calculation + * with the backoffAlgorithm library. + * + * @return pdPASS if calculating the backoff period was successful; otherwise pdFAIL + * if there was failure in random number generation OR all retry attempts had exhausted. */ -static MQTTFixedBuffer_t xBuffer = -{ - .pBuffer = ucSharedBuffer, - .size = democonfigNETWORK_BUFFER_SIZE -}; - -/*-----------------------------------------------------------*/ +static BaseType_t prvBackoffForRetry( BackoffAlgorithmContext_t * pxRetryParams ); /** * @brief Connect to MQTT broker with reconnection retries. @@ -217,10 +229,10 @@ static TransportSocketStatus_t prvConnectToServerWithBackoffRetries( NetworkCont * @param[out] pucIndex The output parameter to return the index at which an * outgoing publish message can be stored. * - * @return EXIT_FAILURE if no more publishes can be stored; - * EXIT_SUCCESS if an index to store the next outgoing publish is obtained. + * @return pdFAIL if no more publishes can be stored; + * pdPASS if an index to store the next outgoing publish is obtained. */ -static int prvGetNextFreeIndexForOutgoingPublishes( uint8_t * pucIndex ); +static BaseType_t prvGetNextFreeIndexForOutgoingPublishes( uint8_t * pucIndex ); /** * @brief Function to clean up an outgoing publish at given index from the @@ -251,7 +263,7 @@ static void vCleanupOutgoingPublishWithPacketID( uint16_t usPacketId ); * * @param[in] pxMqttContext MQTT context pointer. */ -static int handlePublishResend( MQTTContext_t * pxMqttContext ); +static BaseType_t handlePublishResend( MQTTContext_t * pxMqttContext ); /** * @brief The timer query function provided to the MQTT context. @@ -262,11 +274,59 @@ static uint32_t prvGetTimeMs( void ); /*-----------------------------------------------------------*/ +static BaseType_t prvBackoffForRetry( BackoffAlgorithmContext_t * pxRetryParams ) +{ + BaseType_t xReturnStatus = pdFAIL; + uint16_t usNextRetryBackOff = 0U; + BackoffAlgorithmStatus_t xBackoffAlgStatus = BackoffAlgorithmSuccess; + + /** + * To calculate the backoff period for the next retry attempt, we will + * generate a random number to provide to the backoffAlgorithm library. + * + * Note: The PKCS11 module is used to generate the random number as it allows access + * to a True Random Number Generator (TRNG) if the vendor platform supports it. + * It is recommended to use a random number generator seeded with a device-specific + * entropy source so that probability of collisions from devices in connection retries + * is mitigated. + */ + uint32_t ulRandomNum = 0; + + if( xPkcs11GenerateRandomNumber( ( uint8_t * ) &ulRandomNum, + sizeof( ulRandomNum ) ) == pdPASS ) + { + /* Get back-off value (in milliseconds) for the next retry attempt. */ + xBackoffAlgStatus = BackoffAlgorithm_GetNextBackoff( pxRetryParams, ulRandomNum, &usNextRetryBackOff ); + + if( xBackoffAlgStatus == BackoffAlgorithmRetriesExhausted ) + { + LogError( ( "All retry attempts have exhausted. Operation will not be retried" ) ); + } + else if( xBackoffAlgStatus == BackoffAlgorithmSuccess ) + { + /* Perform the backoff delay. */ + vTaskDelay( pdMS_TO_TICKS( usNextRetryBackOff ) ); + + xReturnStatus = pdPASS; + + LogInfo( ( "Retry attempt %lu out of maximum retry attempts %lu.", + ( pxRetryParams->attemptsDone + 1 ), + pxRetryParams->maxRetryAttempts ) ); + } + } + else + { + LogError( ( "Unable to retry operation with broker: Random number generation failed" ) ); + } + + return xReturnStatus; +} + static TransportSocketStatus_t prvConnectToServerWithBackoffRetries( NetworkContext_t * pxNetworkContext ) { TransportSocketStatus_t xNetworkStatus = TRANSPORT_SOCKET_STATUS_SUCCESS; - RetryUtilsStatus_t xRetryUtilsStatus = RetryUtilsSuccess; - RetryUtilsParams_t xReconnectParams = { 0 }; + BackoffAlgorithmContext_t xReconnectParams = { 0 }; + BaseType_t xBackoffStatus = pdPASS; ServerInfo_t xServerInfo = { 0 }; SocketsConfig_t xSocketConfig = { 0 }; @@ -284,8 +344,10 @@ static TransportSocketStatus_t prvConnectToServerWithBackoffRetries( NetworkCont xSocketConfig.recvTimeoutMs = mqttexampleTRANSPORT_SEND_RECV_TIMEOUT_MS; /* Initialize reconnect attempts and interval. */ - RetryUtils_ParamsReset( &xReconnectParams ); - xReconnectParams.maxRetryAttempts = MAX_RETRY_ATTEMPTS; + BackoffAlgorithm_InitializeParams( &xReconnectParams, + CONNECTION_RETRY_BACKOFF_BASE_MS, + CONNECTION_RETRY_MAX_BACKOFF_DELAY_MS, + CONNECTION_RETRY_MAX_ATTEMPTS ); /* Attempt to connect to MQTT broker. If connection fails, retry after * a timeout. Timeout value will exponentially increase until maximum @@ -305,25 +367,24 @@ static TransportSocketStatus_t prvConnectToServerWithBackoffRetries( NetworkCont if( xNetworkStatus != TRANSPORT_SOCKET_STATUS_SUCCESS ) { - LogWarn( ( "Connection to the broker failed. Retrying connection with backoff and jitter." ) ); - xRetryUtilsStatus = RetryUtils_BackoffAndSleep( &xReconnectParams ); - } + LogWarn( ( "Connection to the broker failed. Attempting connection retry after backoff delay." ) ); - if( xRetryUtilsStatus == RetryUtilsRetriesExhausted ) - { - LogError( ( "Connection to the broker failed, all attempts exhausted." ) ); - xNetworkStatus = TRANSPORT_SOCKET_STATUS_CONNECT_FAILURE; + /* As the connection attempt failed, we will retry the connection after an + * exponential backoff with jitter delay. */ + + /* Calculate the backoff period for the next retry attempt and perform the wait operation. */ + xBackoffStatus = prvBackoffForRetry( &xReconnectParams ); } - } while( ( xNetworkStatus != TRANSPORT_SOCKET_STATUS_SUCCESS ) && ( xRetryUtilsStatus == RetryUtilsSuccess ) ); + } while( ( xNetworkStatus != TRANSPORT_SOCKET_STATUS_SUCCESS ) && ( xBackoffStatus == pdPASS ) ); return xNetworkStatus; } /*-----------------------------------------------------------*/ -static int prvGetNextFreeIndexForOutgoingPublishes( uint8_t * pucIndex ) +static BaseType_t prvGetNextFreeIndexForOutgoingPublishes( uint8_t * pucIndex ) { - int returnStatus = EXIT_FAILURE; + BaseType_t xReturnStatus = pdFAIL; uint8_t ucIndex = 0; assert( outgoingPublishPackets != NULL ); @@ -335,7 +396,7 @@ static int prvGetNextFreeIndexForOutgoingPublishes( uint8_t * pucIndex ) * Check if the the ucIndex has a free slot. */ if( outgoingPublishPackets[ ucIndex ].packetId == MQTT_PACKET_ID_INVALID ) { - returnStatus = EXIT_SUCCESS; + xReturnStatus = pdPASS; break; } } @@ -343,7 +404,7 @@ static int prvGetNextFreeIndexForOutgoingPublishes( uint8_t * pucIndex ) /* Copy the available ucIndex into the output param. */ *pucIndex = ucIndex; - return returnStatus; + return xReturnStatus; } /*-----------------------------------------------------------*/ @@ -434,9 +495,9 @@ void vHandleOtherIncomingPacket( MQTTPacketInfo_t * pxPacketInfo, /*-----------------------------------------------------------*/ -static int handlePublishResend( MQTTContext_t * pxMqttContext ) +static BaseType_t handlePublishResend( MQTTContext_t * pxMqttContext ) { - int returnStatus = EXIT_SUCCESS; + BaseType_t xReturnStatus = pdPASS; MQTTStatus_t eMqttStatus = MQTTSuccess; uint8_t ucIndex = 0U; @@ -460,10 +521,10 @@ static int handlePublishResend( MQTTContext_t * pxMqttContext ) if( eMqttStatus != MQTTSuccess ) { LogError( ( "Sending duplicate PUBLISH for packet id %u " - " failed with status %u.", + " failed with status %s.", outgoingPublishPackets[ ucIndex ].packetId, - eMqttStatus ) ); - returnStatus = EXIT_FAILURE; + MQTT_Status_strerror( eMqttStatus ) ) ); + xReturnStatus = pdFAIL; break; } else @@ -474,19 +535,20 @@ static int handlePublishResend( MQTTContext_t * pxMqttContext ) } } - return returnStatus; + return xReturnStatus; } /*-----------------------------------------------------------*/ -TransportSocketStatus_t EstablishMqttSession( MQTTEventCallback_t eventCallback ) +BaseType_t EstablishMqttSession( MQTTContext_t * pxMqttContext, + NetworkContext_t * pxNetworkContext, + MQTTFixedBuffer_t * pxNetworkBuffer, + MQTTEventCallback_t eventCallback ) { - TransportSocketStatus_t returnStatus = EXIT_SUCCESS; - MQTTStatus_t eMqttStatus; - MQTTConnectInfo_t xConnectInfo; - TransportInterface_t xTransport; - MQTTContext_t * pxMqttContext = &mqttContext; - NetworkContext_t * pxNetworkContext = &networkContext; + BaseType_t xReturnStatus = pdPASS; + MQTTStatus_t eMqttStatus = MQTTSuccess; + MQTTConnectInfo_t xConnectInfo = { 0 }; + TransportInterface_t xTransport = { 0 }; bool sessionPresent = false; assert( pxMqttContext != NULL ); @@ -496,15 +558,14 @@ TransportSocketStatus_t EstablishMqttSession( MQTTEventCallback_t eventCallback ( void ) memset( pxMqttContext, 0U, sizeof( MQTTContext_t ) ); ( void ) memset( pxNetworkContext, 0U, sizeof( NetworkContext_t ) ); - returnStatus = prvConnectToServerWithBackoffRetries( pxNetworkContext ); - - if( returnStatus != EXIT_SUCCESS ) + if( prvConnectToServerWithBackoffRetries( pxNetworkContext ) != TRANSPORT_SOCKET_STATUS_SUCCESS ) { /* Log error to indicate connection failure after all * reconnect attempts are over. */ LogError( ( "Failed to connect to MQTT broker %.*s.", strlen( democonfigMQTT_BROKER_ENDPOINT ), democonfigMQTT_BROKER_ENDPOINT ) ); + xReturnStatus = pdFAIL; } else { @@ -518,12 +579,13 @@ TransportSocketStatus_t EstablishMqttSession( MQTTEventCallback_t eventCallback &xTransport, prvGetTimeMs, eventCallback, - &xBuffer ); + pxNetworkBuffer ); if( eMqttStatus != MQTTSuccess ) { - returnStatus = EXIT_FAILURE; - LogError( ( "MQTT init failed with status %u.", eMqttStatus ) ); + xReturnStatus = pdFAIL; + LogError( ( "MQTT init failed with status %s.", + MQTT_Status_strerror( eMqttStatus ) ) ); } else { @@ -561,8 +623,9 @@ TransportSocketStatus_t EstablishMqttSession( MQTTEventCallback_t eventCallback if( eMqttStatus != MQTTSuccess ) { - returnStatus = EXIT_FAILURE; - LogError( ( "Connection with MQTT broker failed with status %u.", eMqttStatus ) ); + xReturnStatus = pdFAIL; + LogError( ( "Connection with MQTT broker failed with status %s.", + MQTT_Status_strerror( eMqttStatus ) ) ); } else { @@ -570,7 +633,7 @@ TransportSocketStatus_t EstablishMqttSession( MQTTEventCallback_t eventCallback } } - if( returnStatus == EXIT_SUCCESS ) + if( xReturnStatus == pdPASS ) { /* Keep a flag for indicating if MQTT session is established. This * flag will mark that an MQTT DISCONNECT has to be sent at the end @@ -578,7 +641,7 @@ TransportSocketStatus_t EstablishMqttSession( MQTTEventCallback_t eventCallback mqttSessionEstablished = true; } - if( returnStatus == EXIT_SUCCESS ) + if( xReturnStatus == pdPASS ) { /* Check if session is present and if there are any outgoing publishes * that need to resend. This is only valid if the broker is @@ -589,7 +652,7 @@ TransportSocketStatus_t EstablishMqttSession( MQTTEventCallback_t eventCallback "Resending unacked publishes." ) ); /* Handle all the resend of publish messages. */ - returnStatus = handlePublishResend( &mqttContext ); + xReturnStatus = handlePublishResend( pxMqttContext ); } else { @@ -603,18 +666,17 @@ TransportSocketStatus_t EstablishMqttSession( MQTTEventCallback_t eventCallback } } - return returnStatus; + return xReturnStatus; } /*-----------------------------------------------------------*/ -int32_t DisconnectMqttSession( void ) +BaseType_t DisconnectMqttSession( MQTTContext_t * pxMqttContext, + NetworkContext_t * pxNetworkContext ) { MQTTStatus_t eMqttStatus = MQTTSuccess; - int returnStatus = EXIT_SUCCESS; + BaseType_t xReturnStatus = pdPASS; TransportSocketStatus_t xNetworkStatus; - MQTTContext_t * pxMqttContext = &mqttContext; - NetworkContext_t * pxNetworkContext = &networkContext; assert( pxMqttContext != NULL ); assert( pxNetworkContext != NULL ); @@ -626,9 +688,9 @@ int32_t DisconnectMqttSession( void ) if( eMqttStatus != MQTTSuccess ) { - LogError( ( "Sending MQTT DISCONNECT failed with status=%u.", - eMqttStatus ) ); - returnStatus = EXIT_FAILURE; + LogError( ( "Sending MQTT DISCONNECT failed with status=%s.", + MQTT_Status_strerror( eMqttStatus ) ) ); + xReturnStatus = pdFAIL; } } @@ -639,20 +701,20 @@ int32_t DisconnectMqttSession( void ) { LogError( ( "Disconnecting from SecureSocket failed with status=%u.", xNetworkStatus ) ); - returnStatus = EXIT_FAILURE; + xReturnStatus = pdFAIL; } - return returnStatus; + return xReturnStatus; } /*-----------------------------------------------------------*/ -int32_t SubscribeToTopic( const char * pcTopicFilter, - uint16_t usTopicFilterLength ) +BaseType_t SubscribeToTopic( MQTTContext_t * pxMqttContext, + const char * pcTopicFilter, + uint16_t usTopicFilterLength ) { - int returnStatus = EXIT_SUCCESS; + BaseType_t xReturnStatus = pdPASS; MQTTStatus_t eMqttStatus; - MQTTContext_t * pxMqttContext = &mqttContext; MQTTSubscribeInfo_t pSubscriptionList[ mqttexampleTOPIC_COUNT ]; assert( pxMqttContext != NULL ); @@ -678,9 +740,9 @@ int32_t SubscribeToTopic( const char * pcTopicFilter, if( eMqttStatus != MQTTSuccess ) { - LogError( ( "Failed to send SUBSCRIBE packet to broker with error = %u.", - eMqttStatus ) ); - returnStatus = EXIT_FAILURE; + LogError( ( "Failed to send SUBSCRIBE packet to broker with error = %s.", + MQTT_Status_strerror( eMqttStatus ) ) ); + xReturnStatus = pdFAIL; } else { @@ -699,23 +761,23 @@ int32_t SubscribeToTopic( const char * pcTopicFilter, if( eMqttStatus != MQTTSuccess ) { - returnStatus = EXIT_FAILURE; - LogError( ( "MQTT_ProcessLoop returned with status = %u.", - eMqttStatus ) ); + xReturnStatus = pdFAIL; + LogError( ( "MQTT_ProcessLoop returned with status = %s.", + MQTT_Status_strerror( eMqttStatus ) ) ); } } - return returnStatus; + return xReturnStatus; } /*-----------------------------------------------------------*/ -int32_t UnsubscribeFromTopic( const char * pcTopicFilter, - uint16_t usTopicFilterLength ) +BaseType_t UnsubscribeFromTopic( MQTTContext_t * pxMqttContext, + const char * pcTopicFilter, + uint16_t usTopicFilterLength ) { - int returnStatus = EXIT_SUCCESS; + BaseType_t xReturnStatus = pdPASS; MQTTStatus_t eMqttStatus; - MQTTContext_t * pxMqttContext = &mqttContext; MQTTSubscribeInfo_t pSubscriptionList[ 1 ]; assert( pxMqttContext != NULL ); @@ -741,9 +803,9 @@ int32_t UnsubscribeFromTopic( const char * pcTopicFilter, if( eMqttStatus != MQTTSuccess ) { - LogError( ( "Failed to send UNSUBSCRIBE packet to broker with error = %u.", - eMqttStatus ) ); - returnStatus = EXIT_FAILURE; + LogError( ( "Failed to send UNSUBSCRIBE packet to broker with error = %s.", + MQTT_Status_strerror( eMqttStatus ) ) ); + xReturnStatus = pdFAIL; } else { @@ -762,26 +824,26 @@ int32_t UnsubscribeFromTopic( const char * pcTopicFilter, if( eMqttStatus != MQTTSuccess ) { - returnStatus = EXIT_FAILURE; - LogError( ( "MQTT_ProcessLoop returned with status = %u.", - eMqttStatus ) ); + xReturnStatus = pdFAIL; + LogError( ( "MQTT_ProcessLoop returned with status = %s.", + MQTT_Status_strerror( eMqttStatus ) ) ); } } - return returnStatus; + return xReturnStatus; } /*-----------------------------------------------------------*/ -int32_t PublishToTopic( const char * pcTopicFilter, - int32_t topicFilterLength, - const char * pcPayload, - size_t payloadLength ) +BaseType_t PublishToTopic( MQTTContext_t * pxMqttContext, + const char * pcTopicFilter, + int32_t topicFilterLength, + const char * pcPayload, + size_t payloadLength ) { - int returnStatus = EXIT_SUCCESS; + BaseType_t xReturnStatus = pdPASS; MQTTStatus_t eMqttStatus = MQTTSuccess; uint8_t ucPublishIndex = MAX_OUTGOING_PUBLISHES; - MQTTContext_t * pxMqttContext = &mqttContext; assert( pxMqttContext != NULL ); assert( pcTopicFilter != NULL ); @@ -791,15 +853,15 @@ int32_t PublishToTopic( const char * pcTopicFilter, * publishes are stored until a PUBACK is received. These messages are * stored for supporting a resend if a network connection is broken before * receiving a PUBACK. */ - returnStatus = prvGetNextFreeIndexForOutgoingPublishes( &ucPublishIndex ); + xReturnStatus = prvGetNextFreeIndexForOutgoingPublishes( &ucPublishIndex ); - if( returnStatus == EXIT_FAILURE ) + if( xReturnStatus == pdFAIL ) { LogError( ( "Unable to find a free spot for outgoing PUBLISH message.\n\n" ) ); } else { - LogInfo( ( "the published payload:%s \r\n ", pcPayload ) ); + LogInfo( ( "the published payload:%.*s \r\n ", payloadLength, pcPayload ) ); /* This example publishes to only one topic and uses QOS1. */ outgoingPublishPackets[ ucPublishIndex ].pubInfo.qos = MQTTQoS1; outgoingPublishPackets[ ucPublishIndex ].pubInfo.pTopicName = pcTopicFilter; @@ -817,10 +879,10 @@ int32_t PublishToTopic( const char * pcTopicFilter, if( eMqttStatus != MQTTSuccess ) { - LogError( ( "Failed to send PUBLISH packet to broker with error = %u.", - eMqttStatus ) ); + LogError( ( "Failed to send PUBLISH packet to broker with error = %s.", + MQTT_Status_strerror( eMqttStatus ) ) ); vCleanupOutgoingPublishAt( ucPublishIndex ); - returnStatus = EXIT_FAILURE; + xReturnStatus = pdFAIL; } else { @@ -835,18 +897,42 @@ int32_t PublishToTopic( const char * pcTopicFilter, * sends ping request to broker if MQTT_KEEP_ALIVE_INTERVAL_SECONDS * has expired since the last MQTT packet sent and receive * ping responses. */ - eMqttStatus = MQTT_ProcessLoop( &mqttContext, mqttexamplePROCESS_LOOP_TIMEOUT_MS ); + eMqttStatus = MQTT_ProcessLoop( pxMqttContext, mqttexamplePROCESS_LOOP_TIMEOUT_MS ); if( eMqttStatus != MQTTSuccess ) { - LogWarn( ( "MQTT_ProcessLoop returned with status = %u.", - eMqttStatus ) ); + LogWarn( ( "MQTT_ProcessLoop returned with status = %s.", + MQTT_Status_strerror( eMqttStatus ) ) ); } } } - return returnStatus; + return xReturnStatus; +} +/*-----------------------------------------------------------*/ + +BaseType_t ProcessLoop( MQTTContext_t * pxMqttContext, + uint32_t ulTimeoutMs ) +{ + BaseType_t xReturnStatus = pdFAIL; + MQTTStatus_t eMqttStatus = MQTTSuccess; + + eMqttStatus = MQTT_ProcessLoop( pxMqttContext, ulTimeoutMs ); + + if( eMqttStatus != MQTTSuccess ) + { + LogWarn( ( "MQTT_ProcessLoop returned with status = %s.", + MQTT_Status_strerror( eMqttStatus ) ) ); + } + else + { + LogDebug( ( "MQTT_ProcessLoop successful." ) ); + xReturnStatus = pdPASS; + } + + return xReturnStatus; } + /*-----------------------------------------------------------*/ static uint32_t prvGetTimeMs( void ) diff --git a/demos/device_shadow_for_aws/shadow_demo_helpers.h b/demos/common/mqtt_demo_helpers/mqtt_demo_helpers.h similarity index 60% rename from demos/device_shadow_for_aws/shadow_demo_helpers.h rename to demos/common/mqtt_demo_helpers/mqtt_demo_helpers.h index 85743399a74..9d89bf8c105 100644 --- a/demos/device_shadow_for_aws/shadow_demo_helpers.h +++ b/demos/common/mqtt_demo_helpers/mqtt_demo_helpers.h @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -20,11 +20,8 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#ifndef SHADOW_DEMO_HELPERS_H_ -#define SHADOW_DEMO_HELPERS_H_ - -/* Include Demo Config as the first non-system header. */ -#include "shadow_demo_config.h" +#ifndef MQTT_DEMO_HELPERS_H_ +#define MQTT_DEMO_HELPERS_H_ /* MQTT API header. */ #include "core_mqtt.h" @@ -32,6 +29,9 @@ /* Transport interface implementation include header for TLS. */ #include "transport_secure_sockets.h" +/* Include header for connection configurations. */ +#include "aws_clientcredential.h" + /*------------- Demo configurations -------------------------*/ /** Note: The device client certificate and private key credentials are @@ -71,12 +71,21 @@ /** * @brief Establish a MQTT connection. * + * @param[in] pxContext The memory for the MQTTContext_t that will be used for the + * MQTT connection. + * @param[in] pxNetContext The memory for the NetworkContext_t required for the + * MQTT connection. + * @param[in] pxNetworkBuffer The buffer space for initializing the @p pxContext MQTT + * context used in the MQTT connection. * @param[in] appCallback The callback function used to receive incoming * publishes and incoming acks from MQTT library. * * @return The status of the final connection attempt. */ -TransportSocketStatus_t EstablishMqttSession( MQTTEventCallback_t eventCallback ); +BaseType_t EstablishMqttSession( MQTTContext_t * pxContext, + NetworkContext_t * pxNetContext, + MQTTFixedBuffer_t * pxNetworkBuffer, + MQTTEventCallback_t eventCallback ); /** * @brief Handle the incoming packet if it's not related to the device shadow. @@ -90,52 +99,73 @@ void vHandleOtherIncomingPacket( MQTTPacketInfo_t * pxPacketInfo, /** * @brief Close the MQTT connection. * - * @return EXIT_SUCCESS if DISCONNECT was successfully sent; - * EXIT_FAILURE otherwise. + * @param[in] pxContext The MQTT context for the MQTT connection to close. + * + * @return pdPASS if DISCONNECT was successfully sent; + * pdFAIL otherwise. */ -int32_t DisconnectMqttSession( void ); +BaseType_t DisconnectMqttSession( MQTTContext_t * pxContext, + NetworkContext_t * pxNetContext ); /** * @brief Subscribe to a MQTT topic filter. * + * @param[in] pxContext The MQTT context for the MQTT connection. * @param[in] pcTopicFilter Pointer to the shadow topic buffer. * @param[in] usTopicFilterLength Indicates the length of the shadow * topic buffer. * - * @return EXIT_SUCCESS if SUBSCRIBE was successfully sent; - * EXIT_FAILURE otherwise. + * @return pdPASS if SUBSCRIBE was successfully sent; + * pdFAIL otherwise. */ -int32_t SubscribeToTopic( const char * pcTopicFilter, - uint16_t usTopicFilterLength ); +BaseType_t SubscribeToTopic( MQTTContext_t * pxContext, + const char * pcTopicFilter, + uint16_t usTopicFilterLength ); /** * @brief Sends an MQTT UNSUBSCRIBE to unsubscribe from the shadow * topic. * + * @param[in] pxContext The MQTT context for the MQTT connection. * @param[in] pcTopicFilter Pointer to the shadow topic buffer. * @param[in] usTopicFilterLength Indicates the length of the shadow * topic buffer. * - * @return EXIT_SUCCESS if UNSUBSCRIBE was successfully sent; - * EXIT_FAILURE otherwise. + * @return pdPASS if UNSUBSCRIBE was successfully sent; + * pdFAIL otherwise. */ -int32_t UnsubscribeFromTopic( const char * pcTopicFilter, - uint16_t usTopicFilterLength ); +BaseType_t UnsubscribeFromTopic( MQTTContext_t * pxContext, + const char * pcTopicFilter, + uint16_t usTopicFilterLength ); /** * @brief Publish a message to a MQTT topic. * + * @param[in] pxContext The MQTT context for the MQTT connection. * @param[in] pcTopicFilter Points to the topic. * @param[in] topicFilterLength The length of the topic. * @param[in] pcPayload Points to the payload. * @param[in] payloadLength The length of the payload. * - * @return EXIT_SUCCESS if PUBLISH was successfully sent; - * EXIT_FAILURE otherwise. + * @return pdPASS if PUBLISH was successfully sent; + * pdFAIL otherwise. + */ +BaseType_t PublishToTopic( MQTTContext_t * pxContext, + const char * pcTopicFilter, + int32_t topicFilterLength, + const char * pcPayload, + size_t payloadLength ); + +/** + * @brief Invoke the core MQTT library's process loop function. + * + * @param[in] pxMqttContext The MQTT context for the MQTT connection. + * @param[in] ulTimeoutMs Minimum time for the loop to run, if no error occurs. + * + * @return pdPASS if process loop was successful; + * pdFAIL otherwise. */ -int32_t PublishToTopic( const char * pcTopicFilter, - int32_t topicFilterLength, - const char * pcPayload, - size_t payloadLength ); +BaseType_t ProcessLoop( MQTTContext_t * pxMqttContext, + uint32_t ulTimeoutMs ); -#endif /* ifndef SHADOW_DEMO_HELPERS_H_ */ +#endif /* ifndef MQTT_DEMO_HELPERS_H_ */ diff --git a/demos/common/pkcs11_helpers/CMakeLists.txt b/demos/common/pkcs11_helpers/CMakeLists.txt new file mode 100644 index 00000000000..3abc5ddddf9 --- /dev/null +++ b/demos/common/pkcs11_helpers/CMakeLists.txt @@ -0,0 +1,22 @@ +# Module for corePKCS11 library based helper utilities. +afr_module(NAME pkcs11_helpers) + +afr_module_sources( + ${AFR_CURRENT_MODULE} + PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/pkcs11_helpers.c +) + +afr_module_include_dirs( + ${AFR_CURRENT_MODULE} + PUBLIC + "${CMAKE_CURRENT_LIST_DIR}" +) + +afr_module_dependencies( + ${AFR_CURRENT_MODULE} + PUBLIC + AFR::pkcs11_implementation + PRIVATE + AFR::logging +) diff --git a/demos/common/pkcs11_helpers/pkcs11_helpers.c b/demos/common/pkcs11_helpers/pkcs11_helpers.c new file mode 100644 index 00000000000..5f9dce74872 --- /dev/null +++ b/demos/common/pkcs11_helpers/pkcs11_helpers.c @@ -0,0 +1,103 @@ +/* + * FreeRTOS V202012.00 + * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/** + * @file pkcs11_helpers.c + * @brief Implementation of the helper functions for accessing PKCS11 module functionality. + */ + +/* Include corePKCS11 config file. */ +#include "core_pkcs11_config.h" + +/* Include PKCS11 headers. */ +#include "core_pkcs11.h" +#include "pkcs11.h" + +/* Include header. */ +#include "pkcs11_helpers.h" + +/*-----------------------------------------------------------*/ + +BaseType_t xPkcs11GenerateRandomNumber( uint8_t * pusRandomNumBuffer, + size_t xBufferLength ) +{ + BaseType_t xStatus = pdPASS; + CK_RV xResult = CKR_OK; + CK_FUNCTION_LIST_PTR pxFunctionList = NULL; + CK_SESSION_HANDLE xSession = CK_INVALID_HANDLE; + + if( ( pusRandomNumBuffer == NULL ) || ( xBufferLength == 0U ) ) + { + LogError( ( "Cannot generate random number. Invalid parameters passed. " + "buffer=%p,bufferLen=%lu", pusRandomNumBuffer, xBufferLength ) ); + xStatus = pdFAIL; + } + + if( xStatus == pdPASS ) + { + /* Get list of functions supported by the PKCS #11 port. */ + xResult = C_GetFunctionList( &pxFunctionList ); + + if( ( xResult != CKR_OK ) || ( pxFunctionList == NULL ) ) + { + LogError( ( "Failed to generate random number. " + "PKCS #11 API, C_GetFunctionList, failed." ) ); + xStatus = pdFAIL; + } + } + + if( xStatus == pdPASS ) + { + /* Initialize PKCS #11 module and create a new session. */ + xResult = xInitializePkcs11Session( &xSession ); + + if( ( xResult != CKR_OK ) || ( xSession == CK_INVALID_HANDLE ) ) + { + LogError( ( "Failed to generate random number. " + "Failed to initialize PKCS #11 session." ) ); + xStatus = pdFAIL; + } + } + + if( xStatus == pdPASS ) + { + if( pxFunctionList->C_GenerateRandom( xSession, + pusRandomNumBuffer, + xBufferLength ) != CKR_OK ) + { + xStatus = pdFAIL; + LogError( ( "Failed to generate random number. " + "PKCS #11 API, C_GenerateRandom, failed to generate random number." ) ); + } + } + + if( xStatus == pdPASS ) + { + if( pxFunctionList->C_CloseSession( xSession ) != CKR_OK ) + { + xStatus = pdFAIL; + LogError( ( " Failed to close PKCS #11 session after generating random number." ) ); + } + } + + return xStatus; +} diff --git a/demos/common/pkcs11_helpers/pkcs11_helpers.h b/demos/common/pkcs11_helpers/pkcs11_helpers.h new file mode 100644 index 00000000000..63a92461865 --- /dev/null +++ b/demos/common/pkcs11_helpers/pkcs11_helpers.h @@ -0,0 +1,54 @@ +/* + * FreeRTOS V202012.00 + * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef PKCS11_HELPERS_H_ +#define PKCS11_HELPERS_H_ + +/** + * @file pkcs11_helpers.h + * @brief Helper functions for accessing PKCS11 module functionality. + */ + +/* FreeRTOS include. */ +#include "FreeRTOS.h" + +/*-----------------------------------------------------------*/ + +/** + * @brief Utility function to generate a random number using the + * PKCS11 module. + * + * This is a wrapper function for initiating a PKCS11 session, + * calling the C_GenerateRandom API function to generate a random + * number and closing the PKCS11 session. + * + * @param[in, out] pusRandomNumBuffer The buffer to store the generated random number. + * @param[in] xBufferLength The size of the @p pusRandomNumBuffer buffer. + * + * @return pdPASS if random number generation was successful; otherwise + * pdFAIL to indicate failure. + */ +BaseType_t xPkcs11GenerateRandomNumber( uint8_t * pusRandomNumBuffer, + size_t xBufferLength ); + + +#endif /* ifndef PKCS11_HELPERS_H_ */ diff --git a/demos/coreHTTP/CMakeLists.txt b/demos/coreHTTP/CMakeLists.txt new file mode 100644 index 00000000000..f90b34d5a7f --- /dev/null +++ b/demos/coreHTTP/CMakeLists.txt @@ -0,0 +1,41 @@ +# FreeRTOS coreHTTP demos +afr_demo_module(core_http) + +# Set the default demo that is enabled in the downloaded package. +afr_set_demo_metadata(ID "CORE_HTTP_MUTUAL_AUTH_DEMO") +afr_set_demo_metadata(DESCRIPTION "Examples that demonstrate the HTTP library") +afr_set_demo_metadata(DISPLAY_NAME "coreHTTP Demos") + +# Add the CMakeLists.txt file of module to metadata list. +afr_module_cmake_files(${AFR_CURRENT_MODULE} + ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt +) + +afr_module_sources( + ${AFR_CURRENT_MODULE} + INTERFACE + "${CMAKE_CURRENT_LIST_DIR}/http_demo_mutual_auth.c" + "${CMAKE_CURRENT_LIST_DIR}/http_demo_s3_download.c" + "${CMAKE_CURRENT_LIST_DIR}/http_demo_s3_download_multithreaded.c" + "${CMAKE_CURRENT_LIST_DIR}/http_demo_s3_upload.c" +) + +afr_module_include_dirs( + ${AFR_CURRENT_MODULE} + INTERFACE + ${AFR_DEMOS_DIR}/common/http_demo_helpers +) + +afr_module_dependencies( + ${AFR_CURRENT_MODULE} + INTERFACE + AFR::http_demo_helpers + AFR::core_http + AFR::backoff_algorithm + AFR::transport_interface_secure_sockets + AFR::secure_sockets + # Add dependency on the core_http_demo_dependencies metadata module + # so that FreeRTOS console shows this demo ONLY when the core HTTP library + # is selected on the console. + AFR::core_http_demo_dependencies +) diff --git a/demos/coreHTTP/http_demo_mutual_auth.c b/demos/coreHTTP/http_demo_mutual_auth.c new file mode 100644 index 00000000000..8738cae4633 --- /dev/null +++ b/demos/coreHTTP/http_demo_mutual_auth.c @@ -0,0 +1,489 @@ +/* + * FreeRTOS V202012.00 + * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://www.FreeRTOS.org + * http://aws.amazon.com/freertos + * + */ + +/* + * Demo for showing use of the HTTP API using a mutually-authenticated network + * connection. + * + * The example shown below uses HTTP APIs to first create a + * mutually-authenticated network connection with an HTTP server, and then send + * a POST request containing a simple message. This example is single threaded + * and uses statically allocated memory. It uses QoS1 for sending and receiving + * messages from the server. + * + * A mutually-authenticated TLS connection is used to connect to the HTTP server + * in this example. Define democonfigAWS_IOT_ENDPOINT and democonfigROOT_CA_PEM + * in http_demo_mutual_auth_config.h, and define the client private key and + * certificate in aws_clientcredential_keys.h, to establish a mutually + * authenticated connection. + */ + +/** + * @file http_demo_mutual_auth.c + * @brief Demonstrates usage of the HTTP library. + * + * @note This demo uses retry logic to connect to the server if connection attempts fail. + * The FreeRTOS/backoffAlgorithm library is used to calculate the retry interval with an exponential + * backoff and jitter algorithm. For generating random number required by the algorithm, the PKCS11 + * module is used as it allows access to a True Random Number Generator (TRNG) if the vendor platform + * supports it. + * It is RECOMMENDED to seed the random number generator with a device-specific entropy source so that + * probability of collisions from devices in connection retries is mitigated. + */ +/* Standard includes. */ +#include +#include +#include + +/* Demo Specific configs. */ +#include "http_demo_mutual_auth_config.h" + +/* Include common demo header. */ +#include "aws_demo.h" + +/* Kernel includes. */ +#include "FreeRTOS.h" +#include "task.h" + +/* Transport interface implementation include header for TLS. */ +#include "transport_secure_sockets.h" + +/* Common HTTP demo utilities. */ +#include "http_demo_utils.h" + +/* HTTP API header. */ +#include "core_http_client.h" + +/* Include header for connection configurations. */ +#include "aws_clientcredential.h" + +/* Include header for root CA certificates. */ +#include "iot_default_root_certificates.h" + +/*------------- Demo configurations -------------------------*/ + +/** Note: The device client certificate and private key credentials are + * obtained by the transport interface implementation (with Secure Sockets) + * from the demos/include/aws_clientcredential_keys.h file. + * + * The following macros SHOULD be defined for this demo which uses both server + * and client authentications for TLS session: + * - keyCLIENT_CERTIFICATE_PEM for client certificate. + * - keyCLIENT_PRIVATE_KEY_PEM for client private key. + */ + +/* Check that a path for HTTP Method POST is defined. */ +#ifndef democonfigPOST_PATH + #error "Please define democonfigPOST_PATH." +#endif + +/* Check that a request body to send for the POST request is defined. */ +#ifndef democonfigREQUEST_BODY + #error "Please define a democonfigREQUEST_BODY." +#endif + +/* Check that the AWS IoT Core endpoint is defined. */ +#ifndef democonfigAWS_IOT_ENDPOINT + #define democonfigAWS_IOT_ENDPOINT clientcredentialMQTT_BROKER_ENDPOINT +#endif + +/* Check that a TLS port for AWS IoT Core is defined. */ +#ifndef democonfigAWS_HTTP_PORT + #define democonfigAWS_HTTP_PORT clientcredentialMQTT_BROKER_PORT +#endif + +/* Check that the root CA certificate is defined. */ +#ifndef democonfigROOT_CA_PEM + #define democonfigROOT_CA_PEM tlsATS1_ROOT_CERTIFICATE_PEM +#endif + +/* Check that a transport timeout for transport send and receive is defined. */ +#ifndef democonfigTRANSPORT_SEND_RECV_TIMEOUT_MS + #define democonfigTRANSPORT_SEND_RECV_TIMEOUT_MS ( 1000 ) +#endif + +/* Check that a size for the user buffer is defined. */ +#ifndef democonfigUSER_BUFFER_LENGTH + #define democonfigUSER_BUFFER_LENGTH ( 2048 ) +#endif + +/** + * @brief The length of the AWS IoT Endpoint. + */ +#define httpexampleAWS_IOT_ENDPOINT_LENGTH ( sizeof( democonfigAWS_IOT_ENDPOINT ) - 1 ) + +/** + * @brief The length of the HTTP POST method. + */ +#define httpexampleHTTP_METHOD_POST_LENGTH ( sizeof( HTTP_METHOD_POST ) - 1 ) + +/** + * @brief The length of the HTTP POST path. + */ +#define httpexamplePOST_PATH_LENGTH ( sizeof( democonfigPOST_PATH ) - 1 ) + +/** + * @brief Length of the request body. + */ +#define httpexampleREQUEST_BODY_LENGTH ( sizeof( democonfigREQUEST_BODY ) - 1 ) + +/** + * @brief The maximum number of times to run the loop in this demo. + */ +#ifndef httpexampleMAX_DEMO_COUNT + #define httpexampleMAX_DEMO_COUNT ( 3 ) +#endif + +/** + * @brief Time in ticks to wait between each cycle of the demo implemented + * by RunCoreHttpMutualAuthDemo(). + */ +#define httpexampleDELAY_BETWEEN_DEMO_ITERATIONS_TICKS ( pdMS_TO_TICKS( 5000U ) ) + +/** + * @brief A buffer used in the demo for storing HTTP request headers and + * HTTP response headers and body. + * + * @note This demo shows how the same buffer can be re-used for storing the HTTP + * response after the HTTP request is sent out. However, the user can also + * decide to use separate buffers for storing the HTTP request and response. + */ +static uint8_t ucUserBuffer[ democonfigUSER_BUFFER_LENGTH ]; + +/*-----------------------------------------------------------*/ + +/** + * @brief Connect to HTTP server with reconnection retries. + * + * @param[out] pxNetworkContext The output parameter to return the created network context. + * + * @return pdPASS on successful connection, pdFAIL otherwise. + */ +static BaseType_t prvConnectToServer( NetworkContext_t * pxNetworkContext ); + +/** + * @brief Send an HTTP request based on a specified method and path, then + * print the response received from the server. + * + * @param[in] pxTransportInterface The transport interface for making network calls. + * @param[in] pcMethod The HTTP request method. + * @param[in] xMethodLen The length of the HTTP request method. + * @param[in] pcPath The Request-URI to the objects of interest. + * @param[in] xPathLen The length of the Request-URI. + * + * @return pdFAIL on failure; pdPASS on success. + */ +static BaseType_t prvSendHttpRequest( const TransportInterface_t * pxTransportInterface, + const char * pcMethod, + size_t xMethodLen, + const char * pcPath, + size_t xPathLen ); + +/*-----------------------------------------------------------*/ + +/** + * @brief Entry point of the demo. + * + * This example resolves the AWS IoT Core endpoint, establishes a TCP + * connection, and performs a mutually authenticated TLS handshake such that all + * further communication is encrypted. After which, the HTTP Client Library API + * is used to make a POST request to AWS IoT Core in order to publish a message + * to a topic named "topic" with QoS=1 so that all clients subscribed to this + * topic receive the message at least once. Any possible errors are also logged. + * + * @note This example is single-threaded and uses statically allocated memory. + * + */ +int RunCoreHttpMutualAuthDemo( bool awsIotMqttMode, + const char * pIdentifier, + void * pNetworkServerInfo, + void * pNetworkCredentialInfo, + const IotNetworkInterface_t * pNetworkInterface ) +{ + /* The transport layer interface used by the HTTP Client library. */ + TransportInterface_t xTransportInterface; + /* The network context for the transport layer interface. */ + NetworkContext_t xNetworkContext = { 0 }; + TransportSocketStatus_t xNetworkStatus; + BaseType_t xIsConnectionEstablished = pdFALSE; + UBaseType_t uxDemoRunCount = 0UL; + + /* Upon return, pdPASS will indicate a successful demo execution. + * pdFAIL will indicate some failures occurred during execution. The + * user of this demo must check the logs for any failure codes. */ + BaseType_t xDemoStatus = pdPASS; + + /* Remove compiler warnings about unused parameters. */ + ( void ) awsIotMqttMode; + ( void ) pIdentifier; + ( void ) pNetworkServerInfo; + ( void ) pNetworkCredentialInfo; + ( void ) pNetworkInterface; + + do + { + /**************************** Connect. ******************************/ + + /* Attempt to connect to the HTTP server. If connection fails, retry + * after a timeout. The timeout value will be exponentially increased + * until either the maximum number of attempts or the maximum timeout + * value is reached. The function returns pdFAIL if the TCP connection + * cannot be established with the broker after the configured number of + * attempts. */ + xDemoStatus = connectToServerWithBackoffRetries( prvConnectToServer, + &xNetworkContext ); + + if( xDemoStatus == pdPASS ) + { + /* Set a flag indicating that a TLS connection exists. */ + xIsConnectionEstablished = pdTRUE; + + /* Define the transport interface. */ + xTransportInterface.pNetworkContext = &xNetworkContext; + xTransportInterface.send = SecureSocketsTransport_Send; + xTransportInterface.recv = SecureSocketsTransport_Recv; + } + else + { + /* Log error to indicate connection failure after all + * reconnect attempts are over. */ + LogError( ( "Failed to connect to HTTP server %.*s.", + ( int32_t ) httpexampleAWS_IOT_ENDPOINT_LENGTH, + democonfigAWS_IOT_ENDPOINT ) ); + } + + /*********************** Send HTTP request.************************/ + + if( xDemoStatus == pdPASS ) + { + xDemoStatus = prvSendHttpRequest( &xTransportInterface, + HTTP_METHOD_POST, + httpexampleHTTP_METHOD_POST_LENGTH, + democonfigPOST_PATH, + httpexamplePOST_PATH_LENGTH ); + } + + /**************************** Disconnect. ******************************/ + + /* Close the network connection to clean up any system resources that the + * demo may have consumed. */ + if( xIsConnectionEstablished == pdTRUE ) + { + /* Close the network connection. */ + xNetworkStatus = SecureSocketsTransport_Disconnect( &xNetworkContext ); + + if( xNetworkStatus != TRANSPORT_SOCKET_STATUS_SUCCESS ) + { + xDemoStatus = pdFAIL; + LogError( ( "SecureSocketsTransport_Disconnect() failed to close the network connection. " + "StatusCode=%d.", ( int ) xNetworkStatus ) ); + } + } + + /* Increment the demo run count. */ + uxDemoRunCount++; + + if( xDemoStatus == pdPASS ) + { + LogInfo( ( "Demo iteration %lu was successful.", uxDemoRunCount ) ); + } + /* Attempt to retry a failed demo iteration for up to #httpexampleMAX_DEMO_COUNT times. */ + else if( uxDemoRunCount < httpexampleMAX_DEMO_COUNT ) + { + LogWarn( ( "Demo iteration %lu failed. Retrying...", uxDemoRunCount ) ); + vTaskDelay( httpexampleDELAY_BETWEEN_DEMO_ITERATIONS_TICKS ); + } + /* Failed all #httpexampleMAX_DEMO_COUNT demo iterations. */ + else + { + LogError( ( "All %d demo iterations failed.", httpexampleMAX_DEMO_COUNT ) ); + break; + } + } while( xDemoStatus != pdPASS ); + + if( xDemoStatus == pdPASS ) + { + LogInfo( ( "Demo completed successfully." ) ); + } + + return ( xDemoStatus == pdPASS ) ? EXIT_SUCCESS : EXIT_FAILURE; +} + +/*-----------------------------------------------------------*/ + +static BaseType_t prvConnectToServer( NetworkContext_t * pxNetworkContext ) +{ + ServerInfo_t xServerInfo = { 0 }; + SocketsConfig_t xSocketsConfig = { 0 }; + BaseType_t xStatus = pdPASS; + TransportSocketStatus_t xNetworkStatus = TRANSPORT_SOCKET_STATUS_SUCCESS; + + /* Initializer server information. */ + xServerInfo.pHostName = democonfigAWS_IOT_ENDPOINT; + xServerInfo.hostNameLength = httpexampleAWS_IOT_ENDPOINT_LENGTH; + xServerInfo.port = democonfigAWS_HTTP_PORT; + + /* Configure credentials for TLS mutual authenticated session. */ + xSocketsConfig.enableTls = true; + xSocketsConfig.pAlpnProtos = NULL; + xSocketsConfig.maxFragmentLength = 0; + xSocketsConfig.disableSni = false; + xSocketsConfig.pRootCa = democonfigROOT_CA_PEM; + xSocketsConfig.rootCaSize = sizeof( democonfigROOT_CA_PEM ); + xSocketsConfig.sendTimeoutMs = democonfigTRANSPORT_SEND_RECV_TIMEOUT_MS; + xSocketsConfig.recvTimeoutMs = democonfigTRANSPORT_SEND_RECV_TIMEOUT_MS; + + /* Establish a TLS session with the HTTP server. This example connects to + * the HTTP server as specified in democonfigAWS_IOT_ENDPOINT and + * democonfigAWS_HTTP_PORT in http_demo_mutual_auth_config.h. */ + LogInfo( ( "Establishing a TLS session to %.*s:%d.", + ( int32_t ) httpexampleAWS_IOT_ENDPOINT_LENGTH, + democonfigAWS_IOT_ENDPOINT, + democonfigAWS_HTTP_PORT ) ); + + /* Attempt to create a mutually authenticated TLS connection. */ + xNetworkStatus = SecureSocketsTransport_Connect( pxNetworkContext, + &xServerInfo, + &xSocketsConfig ); + + if( xNetworkStatus != TRANSPORT_SOCKET_STATUS_SUCCESS ) + { + xStatus = pdFAIL; + } + + return xStatus; +} + +/*-----------------------------------------------------------*/ + +static BaseType_t prvSendHttpRequest( const TransportInterface_t * pxTransportInterface, + const char * pcMethod, + size_t xMethodLen, + const char * pcPath, + size_t xPathLen ) +{ + /* Return value of this method. */ + BaseType_t xStatus = pdPASS; + + /* Configurations of the initial request headers that are passed to + * #HTTPClient_InitializeRequestHeaders. */ + HTTPRequestInfo_t xRequestInfo; + /* Represents a response returned from an HTTP server. */ + HTTPResponse_t xResponse; + /* Represents header data that will be sent in an HTTP request. */ + HTTPRequestHeaders_t xRequestHeaders; + + /* Return value of all methods from the HTTP Client library API. */ + HTTPStatus_t xHTTPStatus = HTTPSuccess; + + configASSERT( pcMethod != NULL ); + configASSERT( pcPath != NULL ); + + /* Initialize all HTTP Client library API structs to 0. */ + ( void ) memset( &xRequestInfo, 0, sizeof( xRequestInfo ) ); + ( void ) memset( &xResponse, 0, sizeof( xResponse ) ); + ( void ) memset( &xRequestHeaders, 0, sizeof( xRequestHeaders ) ); + + /* Initialize the request object. */ + xRequestInfo.pHost = democonfigAWS_IOT_ENDPOINT; + xRequestInfo.hostLen = httpexampleAWS_IOT_ENDPOINT_LENGTH; + xRequestInfo.pMethod = pcMethod; + xRequestInfo.methodLen = xMethodLen; + xRequestInfo.pPath = pcPath; + xRequestInfo.pathLen = xPathLen; + + /* Set "Connection" HTTP header to "keep-alive" so that multiple requests + * can be sent over the same established TCP connection. */ + xRequestInfo.reqFlags = HTTP_REQUEST_KEEP_ALIVE_FLAG; + + /* Set the buffer used for storing request headers. */ + xRequestHeaders.pBuffer = ucUserBuffer; + xRequestHeaders.bufferLen = democonfigUSER_BUFFER_LENGTH; + + xHTTPStatus = HTTPClient_InitializeRequestHeaders( &xRequestHeaders, + &xRequestInfo ); + + if( xHTTPStatus == HTTPSuccess ) + { + /* Initialize the response object. The same buffer used for storing + * request headers is reused here. */ + xResponse.pBuffer = ucUserBuffer; + xResponse.bufferLen = democonfigUSER_BUFFER_LENGTH; + + LogInfo( ( "Sending HTTP %.*s request to %.*s%.*s...", + ( int32_t ) xRequestInfo.methodLen, xRequestInfo.pMethod, + ( int32_t ) httpexampleAWS_IOT_ENDPOINT_LENGTH, democonfigAWS_IOT_ENDPOINT, + ( int32_t ) xRequestInfo.pathLen, xRequestInfo.pPath ) ); + LogDebug( ( "Request Headers:\n%.*s\n" + "Request Body:\n%.*s\n", + ( int32_t ) xRequestHeaders.headersLen, + ( char * ) xRequestHeaders.pBuffer, + ( int32_t ) httpexampleREQUEST_BODY_LENGTH, democonfigREQUEST_BODY ) ); + + /* Send the request and receive the response. */ + xHTTPStatus = HTTPClient_Send( pxTransportInterface, + &xRequestHeaders, + ( uint8_t * ) democonfigREQUEST_BODY, + httpexampleREQUEST_BODY_LENGTH, + &xResponse, + 0 ); + } + else + { + LogError( ( "Failed to initialize HTTP request headers: Error=%s.", + HTTPClient_strerror( xHTTPStatus ) ) ); + } + + if( xHTTPStatus == HTTPSuccess ) + { + LogInfo( ( "Received HTTP response from %.*s%.*s...\n", + ( int32_t ) httpexampleAWS_IOT_ENDPOINT_LENGTH, democonfigAWS_IOT_ENDPOINT, + ( int32_t ) xRequestInfo.pathLen, xRequestInfo.pPath ) ); + LogDebug( ( "Response Headers:\n%.*s\n", + ( int32_t ) xResponse.headersLen, xResponse.pHeaders ) ); + LogDebug( ( "Status Code:\n%u\n", + xResponse.statusCode ) ); + LogDebug( ( "Response Body:\n%.*s\n", + ( int32_t ) xResponse.bodyLen, xResponse.pBody ) ); + } + else + { + LogError( ( "Failed to send HTTP %.*s request to %.*s%.*s: Error=%s.", + ( int32_t ) xRequestInfo.methodLen, xRequestInfo.pMethod, + ( int32_t ) httpexampleAWS_IOT_ENDPOINT_LENGTH, democonfigAWS_IOT_ENDPOINT, + ( int32_t ) xRequestInfo.pathLen, xRequestInfo.pPath, + HTTPClient_strerror( xHTTPStatus ) ) ); + } + + if( xHTTPStatus != HTTPSuccess ) + { + xStatus = pdFAIL; + } + + return xStatus; +} + +/*-----------------------------------------------------------*/ diff --git a/demos/coreHTTP/http_demo_s3_download.c b/demos/coreHTTP/http_demo_s3_download.c new file mode 100644 index 00000000000..be46d743807 --- /dev/null +++ b/demos/coreHTTP/http_demo_s3_download.c @@ -0,0 +1,790 @@ +/* + * FreeRTOS V202012.00 + * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://www.FreeRTOS.org + * http://aws.amazon.com/freertos + */ + +/* + * Demo for showing use of the HTTP API using a server-authenticated network + * connection. + * + * This example, using a pre-signed URL, resolves a S3 domain, establishes a TCP + * connection, validates the server's certificate using the root CA certificate + * defined in the config header, then finally performs a TLS handshake with the + * HTTP server so that all communication is encrypted. After which, the HTTP + * client library API is used to download the S3 file (by sending multiple GET + * requests, filling up the response buffer each time until all parts are + * downloaded). If any request fails, an error code is returned. + * + * @note This demo requires user-generated pre-signed URLs to be pasted into + * http_demo_s3_download_config.h. Please use the provided script + * "presigned_urls_gen.py" (located in http_demo_helpers) to generate these + * URLs. For detailed instructions, see the accompanied README.md. + * + * @note If your file requires more than 99 range requests to S3 (depending on the + * size of the file and the length specified in democonfigRANGE_REQUEST_LENGTH), + * your connection may be dropped by S3. In this case, either increase the + * buffer size and range request length (if feasible), to reduce the number of + * requests required, or re-establish the connection with S3 after receiving a + * "Connection: close" response header. + * + * @note This demo uses retry logic to connect to the server if connection + * attempts fail. The FreeRTOS/backoffAlgorithm library is used to calculate the + * retry interval with an exponential backoff and jitter algorithm. For + * generating random number required by the algorithm, the PKCS11 module is used + * as it allows access to a True Random Number Generator (TRNG) if the vendor + * platform supports it. + * It is RECOMMENDED to seed the random number generator with a device-specific + * entropy source so that probability of collisions from devices in connection + * retries is mitigated. + */ + +/** + * @file http_demo_s3_download.c + * @brief Demonstrates usage of the HTTP library. + */ + +/* Standard includes. */ +#include +#include +#include +#include +#include + +/* Include demo config as the first non-system header. */ +#include "http_demo_s3_download_config.h" + +/* Include common demo header. */ +#include "aws_demo.h" + +/* Kernel includes. */ +#include "FreeRTOS.h" +#include "task.h" + +/* Transport interface implementation include header for TLS. */ +#include "transport_secure_sockets.h" + +/* Common HTTP demo utilities. */ +#include "http_demo_utils.h" + +/* HTTP API header. */ +#include "core_http_client.h" + +/*------------- Demo configurations -------------------------*/ + +/* Check that the TLS port of the server is defined. */ +#ifndef democonfigHTTPS_PORT + #error "Please define democonfigHTTPS_PORT in http_demo_s3_download_config.h." +#endif + +/* Check that the root CA certificate is defined. */ +#ifndef democonfigROOT_CA_PEM + #error "Please define democonfigROOT_CA_PEM in http_demo_s3_download_config.h." +#endif + +/* Check that the pre-signed GET URL is defined. */ +#ifndef democonfigS3_PRESIGNED_GET_URL + #define democonfigS3_PRESIGNED_GET_URL "GET-URL" +#endif + +/* Check that a transport timeout for the transport send and receive functions + * is defined. */ +#ifndef democonfigTRANSPORT_SEND_RECV_TIMEOUT_MS + #define democonfigTRANSPORT_SEND_RECV_TIMEOUT_MS ( 5000 ) +#endif + +/* Check that the size of the user buffer is defined. */ +#ifndef democonfigUSER_BUFFER_LENGTH + #define democonfigUSER_BUFFER_LENGTH ( 4096 ) +#endif + +/* Check that the range request length is defined. */ +#ifndef democonfigRANGE_REQUEST_LENGTH + #define democonfigRANGE_REQUEST_LENGTH ( 2048 ) +#endif + +/** + * @brief Length of the pre-signed GET URL defined in demo_config.h. + */ +#define httpexampleS3_PRESIGNED_GET_URL_LENGTH ( sizeof( democonfigS3_PRESIGNED_GET_URL ) - 1 ) + +/** + * @brief The length of the HTTP GET method. + */ +#define httpexampleHTTP_METHOD_GET_LENGTH ( sizeof( HTTP_METHOD_GET ) - 1 ) + +/** + * @brief Field name of the HTTP range header to read from server response. + */ +#define httpexampleHTTP_CONTENT_RANGE_HEADER_FIELD "Content-Range" + +/** + * @brief Length of the HTTP range header field. + */ +#define httpexampleHTTP_CONTENT_RANGE_HEADER_FIELD_LENGTH ( sizeof( httpexampleHTTP_CONTENT_RANGE_HEADER_FIELD ) - 1 ) + +/** + * @brief The HTTP status code returned for partial content. + */ +#define httpexampleHTTP_STATUS_CODE_PARTIAL_CONTENT 206 + +/** + * @brief The maximum number of times to run the loop in this demo. + */ +#ifndef httpexampleMAX_DEMO_COUNT + #define httpexampleMAX_DEMO_COUNT ( 3 ) +#endif + +/** + * @brief Time in ticks to wait between each cycle of the demo implemented + * by RunCoreHttpS3DownloadDemo(). + */ +#define httpexampleDELAY_BETWEEN_DEMO_ITERATIONS_TICKS ( pdMS_TO_TICKS( 5000U ) ) + +/** + * @brief A buffer used in the demo for storing HTTP request headers, and HTTP + * response headers and body. + * + * @note This demo shows how the same buffer can be re-used for storing the HTTP + * response after the HTTP request is sent out. However, the user can decide how + * to use buffers to store HTTP requests and responses. + */ +static uint8_t ucUserBuffer[ democonfigUSER_BUFFER_LENGTH ]; + +/** + * @brief Represents header data that will be sent in an HTTP request. + */ +static HTTPRequestHeaders_t xRequestHeaders; + +/** + * @brief Configurations of the initial request headers that are passed to + * #HTTPClient_InitializeRequestHeaders. + */ +static HTTPRequestInfo_t xRequestInfo; + +/** + * @brief Represents a response returned from an HTTP server. + */ +static HTTPResponse_t xResponse; + +/** + * @brief The host address string extracted from the pre-signed URL. + * + * @note httpexampleS3_PRESIGNED_GET_URL_LENGTH is set as the array length here as the + * length of the host name string cannot exceed this value. + */ +static char cServerHost[ httpexampleS3_PRESIGNED_GET_URL_LENGTH ]; + +/** + * @brief The length of the host address found in the pre-signed URL. + */ +static size_t xServerHostLength; + +/** + * @brief The location of the path within the pre-signed URL. + */ +static const char * pcPath; + +/*-----------------------------------------------------------*/ + +/** + * @brief Connect to HTTP server with reconnection retries. + * + * @param[out] pxNetworkContext The output parameter to return the created + * network context. + * + * @return pdFAIL on failure; pdPASS on successful connection. + */ +static BaseType_t prvConnectToServer( NetworkContext_t * pxNetworkContext ); + +/** + * @brief Retrieve the size of the S3 object that is specified in pcPath. + * + * @param[out] pxFileSize The size of the S3 object. + * @param[in] pxTransportInterface The transport interface for making network + * calls. + * @param[in] pcHost The server host address. This string must be + * null-terminated. + * @param[in] xHostLen The length of the server host address. + * @param[in] pcPath The Request-URI to the objects of interest. This string + * should be null-terminated. + * + * @return The status of the file size acquisition using a GET request to the + * server: pdPASS on success, pdFAIL on failure. + */ +static BaseType_t prvGetS3ObjectFileSize( size_t * pxFileSize, + const TransportInterface_t * pxTransportInterface, + const char * pcHost, + size_t xHostLen, + const char * pcPath ); + +/** + * @brief Send multiple HTTP GET requests, based on a specified path, to + * download a file in chunks from the host S3 server. + * + * @param[in] pxTransportInterface The transport interface for making network + * calls. + * @param[in] pcPath The Request-URI to the objects of interest. This string + * should be null-terminated. + * + * @return The status of the file download using multiple GET requests to the + * server: pdPASS on success, pdFAIL on failure. + */ +static BaseType_t prvDownloadS3ObjectFile( const TransportInterface_t * pxTransportInterface, + const char * pcPath ); + +/*-----------------------------------------------------------*/ + +static BaseType_t prvConnectToServer( NetworkContext_t * pxNetworkContext ) +{ + ServerInfo_t xServerInfo = { 0 }; + SocketsConfig_t xSocketsConfig = { 0 }; + BaseType_t xStatus = pdPASS; + TransportSocketStatus_t xNetworkStatus = TRANSPORT_SOCKET_STATUS_SUCCESS; + HTTPStatus_t xHTTPStatus = HTTPSuccess; + + /* The location of the host address within the pre-signed URL. */ + const char * pcAddress = NULL; + + /* Retrieve the address location and length from democonfigS3_PRESIGNED_GET_URL. */ + xHTTPStatus = getUrlAddress( democonfigS3_PRESIGNED_GET_URL, + httpexampleS3_PRESIGNED_GET_URL_LENGTH, + &pcAddress, + &xServerHostLength ); + + xStatus = ( xHTTPStatus == HTTPSuccess ) ? pdPASS : pdFAIL; + + if( xStatus == pdPASS ) + { + /* cServerHost should consist only of the host address located in + * democonfigS3_PRESIGNED_GET_URL. */ + memcpy( cServerHost, pcAddress, xServerHostLength ); + cServerHost[ xServerHostLength ] = '\0'; + + /* Initializer server information. */ + xServerInfo.pHostName = cServerHost; + xServerInfo.hostNameLength = xServerHostLength; + xServerInfo.port = democonfigHTTPS_PORT; + + /* Configure credentials for TLS server-authenticated session. */ + xSocketsConfig.enableTls = true; + xSocketsConfig.pAlpnProtos = NULL; + xSocketsConfig.maxFragmentLength = 0; + xSocketsConfig.disableSni = false; + xSocketsConfig.pRootCa = democonfigROOT_CA_PEM; + xSocketsConfig.rootCaSize = sizeof( democonfigROOT_CA_PEM ); + xSocketsConfig.sendTimeoutMs = democonfigTRANSPORT_SEND_RECV_TIMEOUT_MS; + xSocketsConfig.recvTimeoutMs = democonfigTRANSPORT_SEND_RECV_TIMEOUT_MS; + + /* Establish a TLS session with the HTTP server. This example connects + * to the server host located in democonfigPRESIGNED_GET_URL and + * democonfigHTTPS_PORT in demo_config.h. */ + LogInfo( ( "Establishing a TLS session with %s:%d.", + cServerHost, + democonfigHTTPS_PORT ) ); + + /* Attempt to create a server-authenticated TLS connection. */ + xNetworkStatus = SecureSocketsTransport_Connect( pxNetworkContext, + &xServerInfo, + &xSocketsConfig ); + + if( xNetworkStatus != TRANSPORT_SOCKET_STATUS_SUCCESS ) + { + xStatus = pdFAIL; + } + } + + return xStatus; +} + +/*-----------------------------------------------------------*/ + +static BaseType_t prvGetS3ObjectFileSize( size_t * pxFileSize, + const TransportInterface_t * pxTransportInterface, + const char * pcHost, + size_t xHostLen, + const char * pcPath ) +{ + BaseType_t xStatus = pdPASS; + HTTPStatus_t xHTTPStatus = HTTPSuccess; + + /* The location of the file size in pcContentRangeValStr. */ + char * pcFileSizeStr = NULL; + + /* String to store the Content-Range header value. */ + char * pcContentRangeValStr = NULL; + size_t xContentRangeValStrLength = 0; + + configASSERT( pxFileSize != NULL ); + configASSERT( pcHost != NULL ); + configASSERT( pcPath != NULL ); + + /* Initialize all HTTP Client library API structs to 0. */ + ( void ) memset( &xRequestHeaders, 0, sizeof( xRequestHeaders ) ); + ( void ) memset( &xRequestInfo, 0, sizeof( xRequestInfo ) ); + ( void ) memset( &xResponse, 0, sizeof( xResponse ) ); + + /* Initialize the request object. */ + xRequestInfo.pHost = pcHost; + xRequestInfo.hostLen = xHostLen; + xRequestInfo.pMethod = HTTP_METHOD_GET; + xRequestInfo.methodLen = sizeof( HTTP_METHOD_GET ) - 1; + xRequestInfo.pPath = pcPath; + xRequestInfo.pathLen = strlen( pcPath ); + + /* Set "Connection" HTTP header to "keep-alive" so that multiple requests + * can be sent over the same established TCP connection. This is done in + * order to download the file in parts. */ + xRequestInfo.reqFlags = HTTP_REQUEST_KEEP_ALIVE_FLAG; + + /* Set the buffer used for storing request headers. */ + xRequestHeaders.pBuffer = ucUserBuffer; + xRequestHeaders.bufferLen = democonfigUSER_BUFFER_LENGTH; + + /* Initialize the response object. The same buffer used for storing request + * headers is reused here. */ + xResponse.pBuffer = ucUserBuffer; + xResponse.bufferLen = democonfigUSER_BUFFER_LENGTH; + + LogInfo( ( "Getting file object size from host..." ) ); + + xHTTPStatus = HTTPClient_InitializeRequestHeaders( &xRequestHeaders, + &xRequestInfo ); + + if( xHTTPStatus != HTTPSuccess ) + { + LogError( ( "Failed to initialize HTTP request headers: Error=%s.", + HTTPClient_strerror( xHTTPStatus ) ) ); + xStatus = pdFAIL; + } + + if( xStatus == pdPASS ) + { + /* Add the header to get bytes=0-0. S3 will respond with a Content-Range + * header that contains the size of the file in it. This header will + * look like: "Content-Range: bytes 0-0/FILESIZE". The body will have a + * single byte that we are ignoring. */ + xHTTPStatus = HTTPClient_AddRangeHeader( &xRequestHeaders, 0, 0 ); + + if( xHTTPStatus != HTTPSuccess ) + { + LogError( ( "Failed to add range header to request headers: Error=%s.", + HTTPClient_strerror( xHTTPStatus ) ) ); + xStatus = pdFAIL; + } + } + + if( xStatus == pdPASS ) + { + /* Send the request and receive the response. */ + xHTTPStatus = HTTPClient_Send( pxTransportInterface, + &xRequestHeaders, + NULL, + 0, + &xResponse, + 0 ); + + if( xHTTPStatus != HTTPSuccess ) + { + LogError( ( "Failed to send HTTP GET request to %s%s: Error=%s.", + pcHost, pcPath, HTTPClient_strerror( xHTTPStatus ) ) ); + xStatus = pdFAIL; + } + } + + if( xStatus == pdPASS ) + { + LogDebug( ( "Received HTTP response from %s%s...", + pcHost, pcPath ) ); + LogDebug( ( "Response Headers:\n%.*s", + ( int32_t ) xResponse.headersLen, + xResponse.pHeaders ) ); + LogDebug( ( "Response Body:\n%.*s\n", + ( int32_t ) xResponse.bodyLen, + xResponse.pBody ) ); + + if( xResponse.statusCode != httpexampleHTTP_STATUS_CODE_PARTIAL_CONTENT ) + { + LogError( ( "Received an invalid response from the server " + "(Status Code: %u).", + xResponse.statusCode ) ); + xStatus = pdFAIL; + } + } + + if( xStatus == pdPASS ) + { + LogInfo( ( "Received successful response from server " + "(Status Code: %u).", + xResponse.statusCode ) ); + + xHTTPStatus = HTTPClient_ReadHeader( &xResponse, + ( char * ) httpexampleHTTP_CONTENT_RANGE_HEADER_FIELD, + ( size_t ) httpexampleHTTP_CONTENT_RANGE_HEADER_FIELD_LENGTH, + ( const char ** ) &pcContentRangeValStr, + &xContentRangeValStrLength ); + + if( xHTTPStatus != HTTPSuccess ) + { + LogError( ( "Failed to read Content-Range header from HTTP response: Error=%s.", + HTTPClient_strerror( xHTTPStatus ) ) ); + xStatus = pdFAIL; + } + } + + /* Parse the Content-Range header value to get the file size. */ + if( xStatus == pdPASS ) + { + pcFileSizeStr = strstr( pcContentRangeValStr, "/" ); + + if( pcFileSizeStr == NULL ) + { + LogError( ( "'/' not present in Content-Range header value: %s.", + pcContentRangeValStr ) ); + xStatus = pdFAIL; + } + } + + if( xStatus == pdPASS ) + { + pcFileSizeStr += sizeof( char ); + *pxFileSize = ( size_t ) strtoul( pcFileSizeStr, NULL, 10 ); + + if( ( *pxFileSize == 0 ) || ( *pxFileSize == UINT32_MAX ) ) + { + LogError( ( "Error using strtoul to get the file size from %s: xFileSize=%d.", + pcFileSizeStr, ( int32_t ) *pxFileSize ) ); + xStatus = pdFAIL; + } + } + + if( xStatus == pdPASS ) + { + LogInfo( ( "The file is %d bytes long.", ( int32_t ) *pxFileSize ) ); + } + + return xStatus; +} + +/*-----------------------------------------------------------*/ + +static BaseType_t prvDownloadS3ObjectFile( const TransportInterface_t * pxTransportInterface, + const char * pcPath ) +{ + /* Return value of this method. */ + BaseType_t xStatus = pdFAIL; + HTTPStatus_t xHTTPStatus = HTTPSuccess; + + /* The size of the file we are trying to download in S3. */ + size_t xFileSize = 0; + + /* The number of bytes we want to request with in each range of the file + * bytes. */ + size_t xNumReqBytes = 0; + /* xCurByte indicates which starting byte we want to download next. */ + size_t xCurByte = 0; + + configASSERT( pcPath != NULL ); + + /* Initialize all HTTP Client library API structs to 0. */ + ( void ) memset( &xRequestHeaders, 0, sizeof( xRequestHeaders ) ); + ( void ) memset( &xRequestInfo, 0, sizeof( xRequestInfo ) ); + ( void ) memset( &xResponse, 0, sizeof( xResponse ) ); + + /* Initialize the request object. */ + xRequestInfo.pHost = cServerHost; + xRequestInfo.hostLen = xServerHostLength; + xRequestInfo.pMethod = HTTP_METHOD_GET; + xRequestInfo.methodLen = httpexampleHTTP_METHOD_GET_LENGTH; + xRequestInfo.pPath = pcPath; + xRequestInfo.pathLen = strlen( pcPath ); + + /* Set "Connection" HTTP header to "keep-alive" so that multiple requests + * can be sent over the same established TCP connection. This is done in + * order to download the file in parts. */ + xRequestInfo.reqFlags = HTTP_REQUEST_KEEP_ALIVE_FLAG; + + /* Set the buffer used for storing request headers. */ + xRequestHeaders.pBuffer = ucUserBuffer; + xRequestHeaders.bufferLen = democonfigUSER_BUFFER_LENGTH; + + /* Initialize the response object. The same buffer used for storing request + * headers is reused here. */ + xResponse.pBuffer = ucUserBuffer; + xResponse.bufferLen = democonfigUSER_BUFFER_LENGTH; + + /* Verify the file exists by retrieving the file size. */ + xStatus = prvGetS3ObjectFileSize( &xFileSize, + pxTransportInterface, + cServerHost, + xServerHostLength, + pcPath ); + + /* Set the number of bytes to request in each iteration, defined by the user + * in democonfigRANGE_REQUEST_LENGTH. */ + if( xFileSize < democonfigRANGE_REQUEST_LENGTH ) + { + xNumReqBytes = xFileSize; + } + else + { + xNumReqBytes = democonfigRANGE_REQUEST_LENGTH; + } + + /* Here we iterate sending byte range requests until the full file has been + * downloaded. We keep track of the next byte to download with xCurByte, and + * increment by xNumReqBytes after each iteration. When xCurByte reaches + * xFileSize, we stop downloading. */ + while( ( xStatus == pdPASS ) && ( xHTTPStatus == HTTPSuccess ) && ( xCurByte < xFileSize ) ) + { + xHTTPStatus = HTTPClient_InitializeRequestHeaders( &xRequestHeaders, + &xRequestInfo ); + + if( xHTTPStatus == HTTPSuccess ) + { + xHTTPStatus = HTTPClient_AddRangeHeader( &xRequestHeaders, + xCurByte, + xCurByte + xNumReqBytes - 1 ); + } + else + { + LogError( ( "Failed to initialize HTTP request headers: Error=%s.", + HTTPClient_strerror( xHTTPStatus ) ) ); + } + + if( xHTTPStatus == HTTPSuccess ) + { + LogInfo( ( "Downloading bytes %d-%d, out of %d total bytes, from %s...: ", + ( int32_t ) ( xCurByte ), + ( int32_t ) ( xCurByte + xNumReqBytes - 1 ), + ( int32_t ) xFileSize, + cServerHost ) ); + LogDebug( ( "Request Headers:\n%.*s", + ( int32_t ) xRequestHeaders.headersLen, + ( char * ) xRequestHeaders.pBuffer ) ); + xHTTPStatus = HTTPClient_Send( pxTransportInterface, + &xRequestHeaders, + NULL, + 0, + &xResponse, + 0 ); + } + else + { + LogError( ( "Failed to add Range header to request headers: Error=%s.", + HTTPClient_strerror( xHTTPStatus ) ) ); + } + + if( xHTTPStatus == HTTPSuccess ) + { + LogDebug( ( "Received HTTP response from %s%s...", + cServerHost, pcPath ) ); + LogDebug( ( "Response Headers:\n%.*s", + ( int32_t ) xResponse.headersLen, + xResponse.pHeaders ) ); + LogInfo( ( "Response Body:\n%.*s\n", + ( int32_t ) xResponse.bodyLen, + xResponse.pBody ) ); + + /* We increment by the content length because the server may not + * have sent us the range we requested. */ + xCurByte += xResponse.contentLength; + + if( ( xFileSize - xCurByte ) < xNumReqBytes ) + { + xNumReqBytes = xFileSize - xCurByte; + } + + xStatus = ( xResponse.statusCode == httpexampleHTTP_STATUS_CODE_PARTIAL_CONTENT ) ? pdPASS : pdFAIL; + } + else + { + LogError( ( "An error occurred in downloading the file. " + "Failed to send HTTP GET request to %s%s: Error=%s.", + cServerHost, pcPath, HTTPClient_strerror( xHTTPStatus ) ) ); + } + + if( xStatus != pdPASS ) + { + LogError( ( "Received an invalid response from the server " + "(Status Code: %u).", + xResponse.statusCode ) ); + } + } + + return( ( xStatus == pdPASS ) && ( xHTTPStatus == HTTPSuccess ) ); +} + +/*-----------------------------------------------------------*/ + +/** + * @brief Entry point of the demo. + * + * This example, using a pre-signed URL, resolves a S3 domain, establishes a + * TCP connection, validates the server's certificate using the root CA + * certificate defined in the config header, then finally performs a TLS + * handshake with the HTTP server so that all communication is encrypted. After + * which, the HTTP Client library API is used to download the S3 file (by + * sending multiple GET requests, filling up the response buffer each time until + * all parts are downloaded). If any request fails, an error code is returned. + * + * @note This example is single-threaded and uses statically allocated memory. + * + */ +int RunCoreHttpS3DownloadDemo( bool awsIotMqttMode, + const char * pIdentifier, + void * pNetworkServerInfo, + void * pNetworkCredentialInfo, + const IotNetworkInterface_t * pNetworkInterface ) +{ + /* The transport layer interface used by the HTTP Client library. */ + TransportInterface_t xTransportInterface; + /* The network context for the transport layer interface. */ + NetworkContext_t xNetworkContext = { 0 }; + TransportSocketStatus_t xNetworkStatus; + BaseType_t xIsConnectionEstablished = pdFALSE; + /* HTTPS Client library return status. */ + HTTPStatus_t xHTTPStatus = HTTPSuccess; + BaseType_t xDemoRunCount = 0UL; + + /* Upon return, pdPASS will indicate a successful demo execution. + * pdFAIL will indicate some failures occurred during execution. The + * user of this demo must check the logs for any failure codes. */ + BaseType_t xDemoStatus = pdPASS; + + /* Remove compiler warnings about unused parameters. */ + ( void ) awsIotMqttMode; + ( void ) pIdentifier; + ( void ) pNetworkServerInfo; + ( void ) pNetworkCredentialInfo; + ( void ) pNetworkInterface; + + /* The length of the path within the pre-signed URL. This variable is + * defined in order to store the length returned from parsing the URL, but + * it is unused. The path used for the requests in this demo needs all the + * query information following the location of the object, to the end of the + * S3 presigned URL. */ + size_t xPathLen = 0; + + LogInfo( ( "HTTP Client Synchronous S3 download demo using pre-signed URL:\n%s", + democonfigS3_PRESIGNED_GET_URL ) ); + + do + { + /**************************** Connect. ******************************/ + + /* Establish TLS connection on top of TCP connection using Secure Sockets. */ + + /* Attempt to connect to S3. If connection fails, retry after a timeout. + * The timeout value will be exponentially increased until either the + * maximum number of attempts or the maximum timeout value is reached. + * The function returns pdFAIL if a TCP connection with the server + * cannot be established after the configured number of attempts. */ + xDemoStatus = connectToServerWithBackoffRetries( prvConnectToServer, + &xNetworkContext ); + + if( xDemoStatus == pdFAIL ) + { + /* Log an error to indicate connection failure after all + * reconnect attempts are over. */ + LogError( ( "Failed to connect to HTTP server %s.", + cServerHost ) ); + } + + /* Define the transport interface. */ + if( xDemoStatus == pdPASS ) + { + /* Set a flag indicating that a TLS connection exists. */ + xIsConnectionEstablished = pdTRUE; + + /* Define the transport interface. */ + xTransportInterface.pNetworkContext = &xNetworkContext; + xTransportInterface.send = SecureSocketsTransport_Send; + xTransportInterface.recv = SecureSocketsTransport_Recv; + } + + /******************** Download S3 Object File. **********************/ + + if( xDemoStatus == pdPASS ) + { + /* Retrieve the path location from democonfigS3_PRESIGNED_GET_URL. This + * function returns the length of the path without the query into + * xPathLen, which is left unused in this demo. */ + xHTTPStatus = getUrlPath( democonfigS3_PRESIGNED_GET_URL, + httpexampleS3_PRESIGNED_GET_URL_LENGTH, + &pcPath, + &xPathLen ); + + xDemoStatus = ( xHTTPStatus == HTTPSuccess ) ? pdPASS : pdFAIL; + } + + if( xDemoStatus == pdPASS ) + { + xDemoStatus = prvDownloadS3ObjectFile( &xTransportInterface, + pcPath ); + } + + /************************** Disconnect. *****************************/ + + /* Close the network connection to clean up any system resources that the + * demo may have consumed. */ + if( xIsConnectionEstablished == pdTRUE ) + { + /* Close the network connection. */ + xNetworkStatus = SecureSocketsTransport_Disconnect( &xNetworkContext ); + + if( xNetworkStatus != TRANSPORT_SOCKET_STATUS_SUCCESS ) + { + xDemoStatus = pdFAIL; + LogError( ( "SecureSocketsTransport_Disconnect() failed to close the network connection. " + "StatusCode=%d.", ( int ) xNetworkStatus ) ); + } + } + + /* Increment the demo run count. */ + xDemoRunCount++; + + if( xDemoStatus == pdPASS ) + { + LogInfo( ( "Demo iteration %lu is successful.", xDemoRunCount ) ); + } + /* Attempt to retry a failed iteration of demo for up to #httpexampleMAX_DEMO_COUNT times. */ + else if( xDemoRunCount < httpexampleMAX_DEMO_COUNT ) + { + LogWarn( ( "Demo iteration %lu failed. Retrying...", xDemoRunCount ) ); + vTaskDelay( httpexampleDELAY_BETWEEN_DEMO_ITERATIONS_TICKS ); + } + /* Failed all #httpexampleMAX_DEMO_COUNT demo iterations. */ + else + { + LogError( ( "All %d demo iterations failed.", httpexampleMAX_DEMO_COUNT ) ); + break; + } + } while( xDemoStatus != pdPASS ); + + if( xDemoStatus == pdPASS ) + { + LogInfo( ( "Demo completed successfully." ) ); + } + + return ( xDemoStatus == pdPASS ) ? EXIT_SUCCESS : EXIT_FAILURE; +} diff --git a/demos/coreHTTP/http_demo_s3_download_multithreaded.c b/demos/coreHTTP/http_demo_s3_download_multithreaded.c new file mode 100644 index 00000000000..23fa28c4bae --- /dev/null +++ b/demos/coreHTTP/http_demo_s3_download_multithreaded.c @@ -0,0 +1,1104 @@ +/* + * FreeRTOS V202012.00 + * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://www.FreeRTOS.org + * http://aws.amazon.com/freertos + */ + +/* + * Demo for showing use of the HTTP API using a server-authenticated network + * connection. + * + * This example, using a pre-signed URL, resolves a S3 domain, establishes a TCP + * connection, validates the server's certificate using the root CA certificate + * defined in the config header, then finally performs a TLS handshake with the + * HTTP server so that all communication is encrypted. + * + * Afterwards, two thread-safe queues are created -- a request and response + * queue -- to be shared among two tasks, the main task and the HTTP task. The + * main task adds HTTP request headers into the request queue, for the HTTP task + * to retrieve and send to the server using the HTTP Client library API. The + * HTTP task then places the server's response into the response queue, which + * the main task parses and evaluates. The requests created by the main task are + * range requests, used to download the S3 file in chunks. The main task reads + * responses from the response queue continuously until the entire file is + * received. If any request fails, an error code is returned. + * + * @note This demo requires user-generated pre-signed URLs to be pasted into + * http_s3_download_multithreaded_demo_config.h. Please use the provided script + * "presigned_urls_gen.py" (located in http_demo_helpers) to generate these + * URLs. For detailed instructions, see the accompanied README.md. + * + * @note If your file requires more than 99 range requests to S3 (depending on the + * size of the file and the length specified in democonfigRANGE_REQUEST_LENGTH), + * your connection may be dropped by S3. In this case, either increase the + * buffer size and range request length (if feasible), to reduce the number of + * requests required, or re-establish the connection with S3 after receiving a + * "Connection: close" response header. + * + * @note This demo uses retry logic to connect to the server if connection + * attempts fail. The FreeRTOS/backoffAlgorithm library is used to calculate the + * retry interval with an exponential backoff and jitter algorithm. For + * generating random number required by the algorithm, the PKCS11 module is used + * as it allows access to a True Random Number Generator (TRNG) if the vendor + * platform supports it. + * It is RECOMMENDED to seed the random number generator with a device-specific + * entropy source so that probability of collisions from devices in connection + * retries is mitigated. + */ + +/** + * @file http_demo_s3_download_multithreaded.c + * @brief Demonstrates usage of the HTTP library. + */ + +/* Standard includes. */ +#include +#include +#include +#include + +/* Kernel includes. */ +#include "FreeRTOS.h" +#include "task.h" +#include "queue.h" + +/* Include demo config as the first non-system header. */ +#include "http_demo_s3_download_multithreaded_config.h" + +/* Include common demo header. */ +#include "aws_demo.h" + +/* Transport interface implementation include header for TLS. */ +#include "transport_secure_sockets.h" + +/* Common HTTP demo utilities. */ +#include "http_demo_utils.h" + +/* HTTP API header. */ +#include "core_http_client.h" + +/*------------- Demo configurations -------------------------*/ + +/* Check that the TLS port of the server is defined. */ +#ifndef democonfigHTTPS_PORT + #error "Please define a democonfigHTTPS_PORT in http_demo_s3_download_multithreaded_config.h." +#endif + +/* Check that the root CA certificate is defined. */ +#ifndef democonfigROOT_CA_PEM + #error "Please define a democonfigROOT_CA_PEM in http_demo_s3_download_multithreaded_config.h." +#endif + +/* Check the the queue size is defined. */ +#ifndef democonfigQUEUE_SIZE + #error "Please define a QUEUE_SIZE in http_demo_s3_download_multithreaded_config.h." +#endif + +/* The default value of the pre-signed GET URL macro. */ +#ifndef democonfigS3_PRESIGNED_GET_URL + #define democonfigS3_PRESIGNED_GET_URL "GET-URL" +#endif + +/* The default value for the timeout of the transport send and receive + * functions. */ +#ifndef democonfigTRANSPORT_SEND_RECV_TIMEOUT_MS + #define democonfigTRANSPORT_SEND_RECV_TIMEOUT_MS ( 5000 ) +#endif + +/* The default value for the size of the user buffer. */ +#ifndef democonfigUSER_BUFFER_LENGTH + #define democonfigUSER_BUFFER_LENGTH ( 2048 ) +#endif + +/* The default value for the range request length. */ +#ifndef democonfigRANGE_REQUEST_LENGTH + #define democonfigRANGE_REQUEST_LENGTH ( 1024 ) +#endif + +/* The default value for the stack size to use for HTTP tasks. */ +#ifndef httpexampleTASK_STACK_SIZE + #define httpexampleTASK_STACK_SIZE ( configMINIMAL_STACK_SIZE * 4 ) +#endif + +/** + * @brief The default value for the maximum number of times to run the loop in + * this demo. + */ +#ifndef httpexampleMAX_DEMO_COUNT + #define httpexampleMAX_DEMO_COUNT ( 3 ) +#endif + +/** + * @brief Length of the pre-signed GET URL defined in http_demo_s3_download_multithreaded_config.h. + */ +#define httpexampleS3_PRESIGNED_GET_URL_LENGTH ( sizeof( democonfigS3_PRESIGNED_GET_URL ) - 1 ) + +/** + * @brief The length of the HTTP GET method. + */ +#define httpexampleHTTP_METHOD_GET_LENGTH ( sizeof( HTTP_METHOD_GET ) - 1 ) + +/** + * @brief Field name of the HTTP range header to read from server response. + */ +#define httpexampleHTTP_CONTENT_RANGE_HEADER_FIELD "Content-Range" + +/** + * @brief Length of the HTTP range header field. + */ +#define httpexampleHTTP_CONTENT_RANGE_HEADER_FIELD_LENGTH ( sizeof( httpexampleHTTP_CONTENT_RANGE_HEADER_FIELD ) - 1 ) + +/** + * @brief The HTTP status code returned for partial content. + */ +#define httpexampleHTTP_STATUS_CODE_PARTIAL_CONTENT 206 + +/** + * @brief Time in ticks to wait between each iteration of + * RunCoreHttpS3DownloadMultithreadedDemo(). + */ +#define httpexampleDELAY_BETWEEN_DEMO_ITERATIONS_TICKS ( pdMS_TO_TICKS( 5000U ) ) + +/** + * @brief Ticks to wait for task notifications. + */ +#define httpexampleDEMO_TICKS_TO_WAIT pdMS_TO_TICKS( 1000 ) + +/** + * @brief Notification bit indicating HTTPClient_Send() error in HTTP task. + */ +#define httpexampleHTTP_SEND_ERROR ( 1U << 1 ) + +/** + * @brief The maximum number of loop iterations to wait after the last received + * server response, before declaring failure. + */ +#define httpexampleMAX_WAIT_ITERATIONS ( 10 ) + +/** + * @brief Represents the network context used for the TLS session with the + * server. + */ +static NetworkContext_t xNetworkContext; + +/** + * @brief The host address string extracted from the pre-signed URL. + * + * @note httpexampleS3_PRESIGNED_GET_URL_LENGTH is set as the array length here + * as the length of the host name string cannot exceed this value. + */ +static char cServerHost[ httpexampleS3_PRESIGNED_GET_URL_LENGTH ]; + +/** + * @brief The length of the host address found in the pre-signed URL. + */ +static size_t xServerHostLength; + +/** + * @brief Data type for the request queue. + * + * Contains the request header struct and its corresponding buffer, to be + * populated and enqueued by the main task, and read by the HTTP task. The + * buffer is included to avoid pointer inaccuracy during queue copy operations. + */ +typedef struct RequestItem +{ + HTTPRequestHeaders_t xRequestHeaders; + uint8_t ucHeaderBuffer[ democonfigUSER_BUFFER_LENGTH ]; +} RequestItem_t; + +/** + * @brief Data type for the response queue. + * + * Contains the response data type and its corresponding buffer, to be enqueued + * by the HTTP task, and interpreted by the main task. The buffer is included to + * avoid pointer inaccuracy during queue copy operations. + */ +typedef struct ResponseItem +{ + HTTPResponse_t xResponse; + uint8_t ucResponseBuffer[ democonfigUSER_BUFFER_LENGTH ]; +} ResponseItem_t; + +/** + * @brief Struct used by the main task to add requests to the request queue. + * + * This structure is modified only by the main task. Since queue operations are + * done by-copy, it is safe for the main task to modify this struct once the + * previous request has been successfully enqueued. + */ +static RequestItem_t xRequestItem = { 0 }; + +/** + * @brief Struct used by the main task to receive responses from the response + * queue. + * + * This structure is modified only by the main task. Since queue operations are + * done by-copy, it is safe for the main task to modify this struct once the + * previous response has been parsed. + */ +static ResponseItem_t xResponseItem = { 0 }; + +/** + * @brief Struct used by the HTTP task to send requests to the server. + * + * This structure is modified only by the HTTP task, and is used to receive + * requests off of the request queue and send them to the HTTP server. Since + * queue operations are done by-copy, it is safe for the HTTP task to modify + * this struct once the previous request has been sent to the server. + */ +static RequestItem_t xHTTPRequestItem = { 0 }; + +/** + * @brief Struct used by the HTTP task to receive responses from the server and + * place them on the response queue. + * + * This structure is modified only by the HTTP task. Since queue operations are + * done by-copy, it is safe for the HTTP task to modify this struct once the + * previous response has been successfully enqueued. + */ +static ResponseItem_t xHTTPResponseItem = { 0 }; + +/** + * @brief Queue for HTTP requests. Requests are written by the main task, and + * executed by the HTTP task. + */ +static QueueHandle_t xRequestQueue; + +/** + * @brief Queue for HTTP responses. Responses are written by the HTTP task, + * and read by the main task. + */ +static QueueHandle_t xResponseQueue; + +/** + * @brief Handle of prvStartHTTPTask. + */ +static TaskHandle_t xHTTPTask; + +/** + * @brief Handle for the main task. + */ +static TaskHandle_t xMainTask; + +/*-----------------------------------------------------------*/ + +/** + * @brief Connect to HTTP server with reconnection retries. + * + * @param[out] pxNetworkContext The output parameter to return the created + * network context. + * + * @return pdFAIL on failure; pdPASS on successful connection. + */ +static BaseType_t prvConnectToServer( NetworkContext_t * pxNetworkContext ); + +/** + * @brief Send continuous range requests until the entire S3 file is downloaded, + * and log the corresponding responses received from the server. + * + * @param[in] pcHost The host name of the server. + * @param[in] xHostLen The length of pcHost. + * @param[in] pcRequest The HTTP Request-URI. + * @param[in] xRequestUriLen The length of pcRequest. + * @param[in] xRequestQueue The queue to which HTTP requests should be written. + * @param[in] xResponseQueue The queue from which HTTP responses should be read. + * + * @return pdFAIL on failure; pdPASS on success. + */ +static BaseType_t prvDownloadS3ObjectFile( const char * pcHost, + const size_t xHostLen, + const char * pcRequest, + const size_t xRequestUriLen, + QueueHandle_t xRequestQueue, + QueueHandle_t xResponseQueue ); + +/** + * @brief Enqueue an HTTP GET request for a given range of the S3 file. + * + * @param[in] pxRequestInfo The #HTTPRequestInfo_t for configuring the request. + * @param[in] xRequestQueue The queue to which HTTP requests should be written. + * @param[in] xStart The position of the first byte in the range. + * @param[in] xEnd The position of the last byte in the range, inclusive. + * + * @return pdFAIL on failure; pdPASS on success. + */ +static BaseType_t prvRequestS3ObjectRange( const HTTPRequestInfo_t * pxRequestInfo, + QueueHandle_t xRequestQueue, + const size_t xStart, + const size_t xEnd ); + +/** + * @brief Check for an HTTP task notification. + * + * @param[in] pulNotification pointer holding notification value. + * @param[in] ulExpectedBits Bits to wait for. + * @param[in] xClearBits If bits should be cleared. + * + * @return `pdTRUE` if notification received, `pdFALSE` otherwise. + */ +static BaseType_t prvCheckNotification( uint32_t * pulNotification, + uint32_t ulExpectedBits, + BaseType_t xClearBits ); + +/** + * @brief Retrieve the size of the S3 object that is specified in pcPath using + * HTTP task. + * + * @param[in] pxRequestInfo The #HTTPRequestInfo_t for configuring the request. + * @param[in] xRequestQueue The queue to which HTTP requests should be written. + * @param[in] xResponseQueue The queue from which HTTP responses should be read. + * @param[out] pxFileSize - The size of the S3 object. + * + * @return pdFAIL on failure; pdPASS on success. + */ +static BaseType_t prvGetS3ObjectFileSize( const HTTPRequestInfo_t * pxRequestInfo, + QueueHandle_t xRequestQueue, + QueueHandle_t xResponseQueue, + size_t * pxFileSize ); + +/** + * @brief Services HTTP requests from the request queue and writes responses to + * the response queue. + * + * @param[in] pvArgs Parameters as passed at the time of task creation. Not used + * in this example. + * */ +static void prvStartHTTPTask( void * pvArgs ); + +/** + * @brief Clean up resources created by demo. + * + * @param[in] xHandle The HTTP task handle. + * @param[in] xRequestQueue The request queue. + * @param[in] xResponseQueue The response queue. + */ +static void prvTearDown( TaskHandle_t xHandle, + QueueHandle_t xRequestQueue, + QueueHandle_t xResponseQueue ); + +/*-----------------------------------------------------------*/ + +static BaseType_t prvConnectToServer( NetworkContext_t * pxNetworkContext ) +{ + ServerInfo_t xServerInfo = { 0 }; + SocketsConfig_t xSocketsConfig = { 0 }; + BaseType_t xStatus = pdPASS; + TransportSocketStatus_t xNetworkStatus = TRANSPORT_SOCKET_STATUS_SUCCESS; + + configASSERT( pxNetworkContext != NULL ); + + /* Initializer server information. */ + xServerInfo.pHostName = cServerHost; + xServerInfo.hostNameLength = xServerHostLength; + xServerInfo.port = democonfigHTTPS_PORT; + + /* Configure credentials for TLS server-authenticated session. */ + xSocketsConfig.enableTls = true; + xSocketsConfig.pAlpnProtos = NULL; + xSocketsConfig.maxFragmentLength = 0; + xSocketsConfig.disableSni = false; + xSocketsConfig.pRootCa = democonfigROOT_CA_PEM; + xSocketsConfig.rootCaSize = sizeof( democonfigROOT_CA_PEM ); + xSocketsConfig.sendTimeoutMs = democonfigTRANSPORT_SEND_RECV_TIMEOUT_MS; + xSocketsConfig.recvTimeoutMs = democonfigTRANSPORT_SEND_RECV_TIMEOUT_MS; + + /* Establish a TLS session with the HTTP server. This example connects + * to the server host located in democonfigPRESIGNED_GET_URL and + * democonfigHTTPS_PORT in http_s3_download_multithreaded_demo_config.h. */ + LogInfo( ( "Establishing a TLS session with %s:%d.", + cServerHost, + democonfigHTTPS_PORT ) ); + + /* Attempt to create a server-authenticated TLS connection. */ + xNetworkStatus = SecureSocketsTransport_Connect( pxNetworkContext, + &xServerInfo, + &xSocketsConfig ); + + if( xNetworkStatus != TRANSPORT_SOCKET_STATUS_SUCCESS ) + { + LogWarn( ( "Unsuccessful connection attempt, received error code:%d", + ( int ) xNetworkStatus ) ); + xStatus = pdFAIL; + } + + return xStatus; +} + +/*-----------------------------------------------------------*/ + +static BaseType_t prvDownloadS3ObjectFile( const char * pcHost, + const size_t xHostLen, + const char * pcRequest, + const size_t xRequestUriLen, + QueueHandle_t xRequestQueue, + QueueHandle_t xResponseQueue ) +{ + BaseType_t xStatus = pdPASS; + size_t xRemainingResponseCount = 0; + uint32_t ulWaitCounter = 0; + uint32_t ulNotification = 0; + + /* Configurations of the initial request headers. */ + HTTPRequestInfo_t xRequestInfo = { 0 }; + + /* The length of the file at democonfigS3_PRESIGNED_GET_URL. */ + size_t xFileSize = 0; + + /* The number of bytes we want to request within each range of the file. */ + size_t xNumReqBytes = 0; + /* The starting byte for the next range request. */ + size_t xCurByte = 0; + + configASSERT( pcHost != NULL ); + configASSERT( pcRequest != NULL ); + + /* Initialize the request object. */ + xRequestInfo.pHost = pcHost; + xRequestInfo.hostLen = xHostLen; + xRequestInfo.pMethod = HTTP_METHOD_GET; + xRequestInfo.methodLen = httpexampleHTTP_METHOD_GET_LENGTH; + xRequestInfo.pPath = pcRequest; + xRequestInfo.pathLen = xRequestUriLen; + + /* Set "Connection" HTTP header to "keep-alive" so that multiple requests + * can be sent over the same established TCP connection. This is done in + * order to download the file in parts. */ + xRequestInfo.reqFlags = HTTP_REQUEST_KEEP_ALIVE_FLAG; + + /* Get the length of the S3 file. */ + xStatus = prvGetS3ObjectFileSize( &xRequestInfo, + xRequestQueue, + xResponseQueue, + &xFileSize ); + + /* Set the number of bytes to request in each iteration, defined by the user + * in democonfigRANGE_REQUEST_LENGTH. */ + if( xFileSize < democonfigRANGE_REQUEST_LENGTH ) + { + xNumReqBytes = xFileSize; + } + else + { + xNumReqBytes = democonfigRANGE_REQUEST_LENGTH; + } + + /* Here we iterate sending byte range requests to the request queue and + * retrieving responses from the response queue until the entire file has + * been downloaded. We keep track of the next starting byte to download with + * xCurByte, and increment by xNumReqBytes after each iteration. When + * xCurByte reaches xFileSize, we stop downloading. We keep track of the + * number of responses we are waiting for with xRemainingResponseCount. + */ + while( ( xStatus != pdFAIL ) && ( xCurByte < xFileSize || xRemainingResponseCount > 0 ) ) + { + /* Send a range request for the specified bytes, if remaining. */ + if( xCurByte < xFileSize ) + { + /* Add range request to the request queue. */ + xStatus = prvRequestS3ObjectRange( &xRequestInfo, + xRequestQueue, + xCurByte, + xCurByte + xNumReqBytes - 1 ); + + /* Exit loop if the request was not successfully enqueued. */ + if( xStatus != pdPASS ) + { + break; + } + + /* Update the starting byte for the next iteration.*/ + xCurByte += xNumReqBytes; + + /* If the number of bytes left to download is less than the + * pre-defined constant xNumReqBytes, set xNumReqBytes to equal the + * accurate number of remaining bytes left to download. */ + if( ( xFileSize - xCurByte ) < xNumReqBytes ) + { + xNumReqBytes = xFileSize - xCurByte; + } + + /* If the request was successfully enqueued, we expect a + * corresponding response. */ + xRemainingResponseCount += 1; + } + + /* Retrieve response from the response queue, if available. */ + if( xRemainingResponseCount > 0 ) + { + if( xQueueReceive( xResponseQueue, &xResponseItem, httpexampleDEMO_TICKS_TO_WAIT ) != pdFAIL ) + { + /* Ensure that the buffer pointer is accurate after being copied from the queue. */ + xResponseItem.xResponse.pBuffer = xResponseItem.ucResponseBuffer; + + LogInfo( ( "The main task retrieved a server response from the response queue." ) ); + LogDebug( ( "Response Headers:\n%.*s", + ( int32_t ) xResponseItem.xResponse.headersLen, + xResponseItem.xResponse.pHeaders ) ); + LogDebug( ( "Response Status:\n%u", + xResponseItem.xResponse.statusCode ) ); + LogInfo( ( "Response Body:\n%.*s\n", + ( int32_t ) xResponseItem.xResponse.bodyLen, + xResponseItem.xResponse.pBody ) ); + + /* Check for a partial content status code (206), indicating a + * successful server response. */ + if( xResponseItem.xResponse.statusCode != httpexampleHTTP_STATUS_CODE_PARTIAL_CONTENT ) + { + LogError( ( "Received response with unexpected status code: %d", xResponseItem.xResponse.statusCode ) ); + xStatus = pdFAIL; + break; + } + + /* Reset the wait counter every time a response is received. */ + ulWaitCounter = 0; + xRemainingResponseCount -= 1; + } + /* Check for a notification from the HTTP task about an HTTP send failure. */ + else if( prvCheckNotification( &ulNotification, httpexampleHTTP_SEND_ERROR, pdTRUE ) != pdFALSE ) + { + LogError( ( "Received notification from the HTTP task indicating a HTTPClient_Send() error." ) ); + xStatus = pdFAIL; + break; + } + } + + /* Break if we have been stuck waiting for a response for too long. The + * total wait here will be the (notification check delay + queue check + * delay), multiplied by `httpexampleMAX_WAIT_ITERATIONS`. For example, + * with a 1000 ms delay for both checks, and a maximum iteration of 10, + * this function will wait 20 seconds after receiving the last response + * before exiting the loop. */ + if( ++ulWaitCounter > httpexampleMAX_WAIT_ITERATIONS ) + { + LogError( ( "Response receive loop exceeded maximum wait time.\n" ) ); + xStatus = pdFAIL; + break; + } + } + + return xStatus; +} + +/*-----------------------------------------------------------*/ + +static BaseType_t prvRequestS3ObjectRange( const HTTPRequestInfo_t * pxRequestInfo, + QueueHandle_t xRequestQueue, + const size_t xStart, + const size_t xEnd ) +{ + HTTPStatus_t xHTTPStatus = HTTPSuccess; + BaseType_t xStatus = pdPASS; + + configASSERT( pxRequestInfo != NULL ); + + /* Set the buffer used for storing request headers. */ + xRequestItem.xRequestHeaders.pBuffer = xRequestItem.ucHeaderBuffer; + xRequestItem.xRequestHeaders.bufferLen = democonfigUSER_BUFFER_LENGTH; + + xHTTPStatus = HTTPClient_InitializeRequestHeaders( &( xRequestItem.xRequestHeaders ), + pxRequestInfo ); + + if( xHTTPStatus != HTTPSuccess ) + { + LogError( ( "Failed to initialize HTTP request headers: Error=%s.", + HTTPClient_strerror( xHTTPStatus ) ) ); + xStatus = pdFAIL; + } + + if( xStatus == pdPASS ) + { + xHTTPStatus = HTTPClient_AddRangeHeader( &( xRequestItem.xRequestHeaders ), + xStart, + xEnd ); + + if( xHTTPStatus != HTTPSuccess ) + { + LogError( ( "Failed to add Range header to request headers: Error=%s.", + HTTPClient_strerror( xHTTPStatus ) ) ); + xStatus = pdFAIL; + } + } + + if( xStatus == pdPASS ) + { + /* Enqueue the request. */ + LogInfo( ( "Enqueuing request for bytes %d to %d of S3 Object. ", + ( int32_t ) xStart, + ( int32_t ) xEnd ) ); + LogDebug( ( "Request Headers:\n%.*s", + ( int32_t ) xRequestItem.xRequestHeaders.headersLen, + ( char * ) xRequestItem.xRequestHeaders.pBuffer ) ); + + xStatus = xQueueSendToBack( xRequestQueue, + &xRequestItem, + httpexampleDEMO_TICKS_TO_WAIT ); + + /* Ensure request was added to the queue. */ + if( xStatus == pdFAIL ) + { + LogError( ( "Could not enqueue request." ) ); + } + } + + return xStatus; +} + +/*-----------------------------------------------------------*/ + +static BaseType_t prvCheckNotification( uint32_t * pulNotification, + uint32_t ulExpectedBits, + BaseType_t xClearBits ) +{ + BaseType_t xStatus = pdTRUE; + + configASSERT( pulNotification != NULL ); + + xStatus = xTaskNotifyWait( 0, + ( xClearBits ) ? ulExpectedBits : 0, + pulNotification, + httpexampleDEMO_TICKS_TO_WAIT ); + + if( xStatus == pdTRUE ) + { + xStatus = ( ( *pulNotification & ulExpectedBits ) == ulExpectedBits ) ? pdTRUE : pdFALSE; + } + + return xStatus; +} + +/*-----------------------------------------------------------*/ + +static BaseType_t prvGetS3ObjectFileSize( const HTTPRequestInfo_t * pxRequestInfo, + QueueHandle_t xRequestQueue, + QueueHandle_t xResponseQueue, + size_t * pxFileSize ) +{ + BaseType_t xStatus = pdPASS; + HTTPStatus_t xHTTPStatus = HTTPSuccess; + uint32_t ulNotification = 0; + + /* The location of the file size in pcContentRangeValStr. */ + char * pcFileSizeStr = NULL; + + /* String to store the Content-Range header value. */ + char * pcContentRangeValStr = NULL; + size_t xContentRangeValStrLength = 0; + + configASSERT( pxRequestInfo != NULL ); + configASSERT( pxFileSize != NULL ); + + LogInfo( ( "Getting file object size from host..." ) ); + + /* Request bytes 0 to 0. S3 will respond with a Content-Range + * header that contains the size of the file in it. This header will look + * like: "Content-Range: bytes 0-0/FILESIZE". The body will have a single + * byte that we are ignoring. */ + xStatus = prvRequestS3ObjectRange( pxRequestInfo, + xRequestQueue, + 0, + 0 ); + + if( xStatus == pdPASS ) + { + xStatus = xQueueReceive( xResponseQueue, &xResponseItem, httpexampleDEMO_TICKS_TO_WAIT ); + } + + if( xStatus == pdPASS ) + { + /* Ensure that the buffer pointer is accurate after being copied from the queue. */ + xResponseItem.xResponse.pBuffer = xResponseItem.ucResponseBuffer; + + if( xResponseItem.xResponse.statusCode != httpexampleHTTP_STATUS_CODE_PARTIAL_CONTENT ) + { + LogError( ( "Received response with unexpected status code: %d.", xResponseItem.xResponse.statusCode ) ); + xStatus = pdFAIL; + } + else + { + xHTTPStatus = HTTPClient_ReadHeader( &xResponseItem.xResponse, + ( char * ) httpexampleHTTP_CONTENT_RANGE_HEADER_FIELD, + ( size_t ) httpexampleHTTP_CONTENT_RANGE_HEADER_FIELD_LENGTH, + ( const char ** ) &pcContentRangeValStr, + &xContentRangeValStrLength ); + + if( xHTTPStatus != HTTPSuccess ) + { + LogError( ( "Failed to read Content-Range header from HTTP response: Error=%s.", + HTTPClient_strerror( xHTTPStatus ) ) ); + xStatus = pdFAIL; + } + } + } + /* Check for a notification from the HTTP task about an HTTP send failure. */ + else if( prvCheckNotification( &ulNotification, httpexampleHTTP_SEND_ERROR, pdTRUE ) != pdFALSE ) + { + LogError( ( "Received notification from the HTTP task indicating a HTTPClient_Send() error." ) ); + } + + /* Parse the Content-Range header value to get the file size. */ + if( xStatus == pdPASS ) + { + pcFileSizeStr = strstr( pcContentRangeValStr, "/" ); + + if( pcFileSizeStr == NULL ) + { + LogError( ( "'/' not present in Content-Range header value: %s.", + pcContentRangeValStr ) ); + xStatus = pdFAIL; + } + } + + if( xStatus == pdPASS ) + { + pcFileSizeStr += sizeof( char ); + *pxFileSize = ( size_t ) strtoul( pcFileSizeStr, NULL, 10 ); + + if( ( *pxFileSize == 0 ) || ( *pxFileSize == UINT32_MAX ) ) + { + LogError( ( "Error using strtoul to get the file size from %s: xFileSize=%d.", + pcFileSizeStr, ( int32_t ) *pxFileSize ) ); + xStatus = pdFAIL; + } + } + + if( xStatus == pdPASS ) + { + LogInfo( ( "The file is %d bytes long.", ( int32_t ) *pxFileSize ) ); + } + + return xStatus; +} + +/*-----------------------------------------------------------*/ + +static void prvStartHTTPTask( void * pvArgs ) +{ + HTTPStatus_t xHTTPStatus = HTTPSuccess; + BaseType_t xStatus = pdPASS; + /* The transport layer interface used by the HTTP Client library. */ + TransportInterface_t xTransportInterface; + + ( void ) pvArgs; + + /* Define the transport interface. */ + xTransportInterface.pNetworkContext = &xNetworkContext; + xTransportInterface.send = SecureSocketsTransport_Send; + xTransportInterface.recv = SecureSocketsTransport_Recv; + + /* Initialize response struct. */ + xHTTPResponseItem.xResponse.pBuffer = xHTTPResponseItem.ucResponseBuffer; + xHTTPResponseItem.xResponse.bufferLen = democonfigUSER_BUFFER_LENGTH; + + for( ; ; ) + { + /* Read request from queue. */ + xStatus = xQueueReceive( xRequestQueue, + &xHTTPRequestItem, + httpexampleDEMO_TICKS_TO_WAIT ); + + if( xStatus == pdFAIL ) + { + LogInfo( ( "No requests in the queue. Trying again." ) ); + continue; + } + + /* Ensure that the buffer pointer is accurate after being copied from the queue. */ + xHTTPRequestItem.xRequestHeaders.pBuffer = xHTTPRequestItem.ucHeaderBuffer; + + LogInfo( ( "The HTTP task retrieved a request from the request queue." ) ); + LogDebug( ( "Request Headers:\n%.*s", + ( int32_t ) xHTTPRequestItem.xRequestHeaders.headersLen, + ( char * ) xHTTPRequestItem.xRequestHeaders.pBuffer ) ); + + xHTTPStatus = HTTPClient_Send( &xTransportInterface, + &xHTTPRequestItem.xRequestHeaders, + NULL, + 0, + &xHTTPResponseItem.xResponse, + 0 ); + + if( xHTTPStatus != HTTPSuccess ) + { + LogError( ( "Failed to send HTTP request: Error=%s.", + HTTPClient_strerror( xHTTPStatus ) ) ); + /*Notify the main task of failure. */ + xTaskNotify( xMainTask, httpexampleHTTP_SEND_ERROR, eSetBits ); + break; + } + else + { + LogInfo( ( "The HTTP task received a response from the server." ) ); + /* Write response to queue. */ + xStatus = xQueueSendToBack( xResponseQueue, + &xHTTPResponseItem, + httpexampleDEMO_TICKS_TO_WAIT ); + + /* Ensure response was added to the queue. */ + if( xStatus != pdPASS ) + { + LogError( ( "Could not enqueue response." ) ); + break; + } + } + } +} + +/*-----------------------------------------------------------*/ + +void prvTearDown( TaskHandle_t xHandle, + QueueHandle_t xRequestQueue, + QueueHandle_t xResponseQueue ) +{ + /* Delete HTTP task. */ + LogInfo( ( "Deleting HTTP task." ) ); + vTaskDelete( xHandle ); + + /* Close and delete the queues. */ + if( xRequestQueue != NULL ) + { + vQueueDelete( xRequestQueue ); + } + + if( xResponseQueue != NULL ) + { + vQueueDelete( xResponseQueue ); + } +} + +/*-----------------------------------------------------------*/ + +/** + * @brief Entry point of the demo. + * + * This example, using a pre-signed URL, resolves a S3 domain, establishes a TCP + * connection, validates the server's certificate using the root CA certificate + * defined in the config header, then finally performs a TLS handshake with the + * HTTP server so that all communication is encrypted. + * + * Afterwards, an independent HTTP task is started, to read requests from the + * request queue and execute them using the HTTP Client library API, and write + * the corresponding responses to the response queue. The main task sends + * requests to the request queue, which are used to download the S3 file in + * chunks using range requests. While doing so, the main task reads responses + * from the response queue continuously until the entire file is received. If + * any request fails, an error code is returned. + * + * @note This example is multi-threaded and uses statically allocated memory. + * + */ +int RunCoreHttpS3DownloadMultithreadedDemo( bool awsIotMqttMode, + const char * pIdentifier, + void * pNetworkServerInfo, + void * pNetworkCredentialInfo, + const IotNetworkInterface_t * pNetworkInterface ) +{ + TransportSocketStatus_t xNetworkStatus; + BaseType_t xIsConnectionEstablished = pdFALSE; + /* HTTPS Client library return status. */ + HTTPStatus_t xHTTPStatus = HTTPSuccess; + /* The location of the host address within the pre-signed URL. */ + const char * pcAddress = NULL; + /* The location of the path within the pre-signed URL. */ + const char * pcPath = NULL; + UBaseType_t uxDemoRunCount = 0UL; + + /* Upon return, pdPASS will indicate a successful demo execution. pdFAIL + * will indicate some failures occurred during execution. The user of this + * demo must check the logs for any failure codes. */ + BaseType_t xDemoStatus = pdPASS; + + /* The length of the path within the pre-signed URL. This variable is + * defined in order to store the length returned from parsing the URL, but + * it is unused. The path used for the requests in this demo needs all the + * query information following the location of the object, to the end of the + * S3 presigned URL. */ + size_t pathLen = 0; + /* The length of the Request-URI within string S3_PRESIGNED_GET_URL */ + size_t xRequestUriLen = 0; + + /* Remove compiler warnings about unused parameters. */ + ( void ) awsIotMqttMode; + ( void ) pIdentifier; + ( void ) pNetworkServerInfo; + ( void ) pNetworkCredentialInfo; + ( void ) pNetworkInterface; + + xMainTask = xTaskGetCurrentTaskHandle(); + + LogInfo( ( "HTTP Client multi-threaded S3 download demo using pre-signed URL:\n%s", democonfigS3_PRESIGNED_GET_URL ) ); + + do + { + /* Reset for each iteration of the demo. */ + xDemoStatus = pdPASS; + + /**************************** Parse Signed URL. ******************************/ + if( xDemoStatus == pdPASS ) + { + /* Retrieve the path location from democonfigS3_PRESIGNED_GET_URL. This + * function returns the length of the path without the query into + * pathLen. */ + xHTTPStatus = getUrlPath( democonfigS3_PRESIGNED_GET_URL, + httpexampleS3_PRESIGNED_GET_URL_LENGTH, + &pcPath, + &pathLen ); + + /* The path used for the requests in this demo needs + * all the query information following the location of the object, to + * the end of the S3 presigned URL. */ + xRequestUriLen = strlen( pcPath ); + + xDemoStatus = ( xHTTPStatus == HTTPSuccess ) ? pdPASS : pdFAIL; + } + + if( xDemoStatus == pdPASS ) + { + /* Retrieve the address location and length from the democonfigS3_PRESIGNED_GET_URL. */ + xHTTPStatus = getUrlAddress( democonfigS3_PRESIGNED_GET_URL, + httpexampleS3_PRESIGNED_GET_URL_LENGTH, + &pcAddress, + &xServerHostLength ); + + xDemoStatus = ( xHTTPStatus == HTTPSuccess ) ? pdPASS : pdFAIL; + } + + if( xDemoStatus == pdPASS ) + { + /* cServerHost should consist only of the host address located in + * democonfigS3_PRESIGNED_GET_URL. */ + memcpy( cServerHost, pcAddress, xServerHostLength ); + cServerHost[ xServerHostLength ] = '\0'; + } + + /**************************** Connect. ******************************/ + + /* Establish a TLS connection on top of TCP connection using OpenSSL. */ + if( xDemoStatus == pdPASS ) + { + /* Attempt to connect to the HTTP server. If connection fails, retry + * after a timeout. The timeout value will be exponentially + * increased until either the maximum number of attempts or the + * maximum timeout value is reached. The function returns pdFAIL if + * the TCP connection cannot be established with the server after + * the configured number of attempts. */ + xDemoStatus = connectToServerWithBackoffRetries( prvConnectToServer, + &xNetworkContext ); + + if( xDemoStatus == pdFAIL ) + { + /* Log an error to indicate connection failure after all + * reconnect attempts are over. */ + LogError( ( "Failed to connect to HTTP server %s.", + cServerHost ) ); + } + } + + /* Define the transport interface. */ + if( xDemoStatus == pdPASS ) + { + /* Set a flag indicating that a TLS connection exists. */ + xIsConnectionEstablished = pdTRUE; + } + + /***************** Open queues and create HTTP task. ****************/ + + /* Open request and response queues. */ + if( xDemoStatus == pdPASS ) + { + xRequestQueue = xQueueCreate( democonfigQUEUE_SIZE, + sizeof( RequestItem_t ) ); + + xResponseQueue = xQueueCreate( democonfigQUEUE_SIZE, + sizeof( ResponseItem_t ) ); + + xDemoStatus = ( ( xRequestQueue != NULL ) && ( xResponseQueue != NULL ) ) ? pdPASS : pdFAIL; + } + + /* Start HTTP task. */ + if( xDemoStatus == pdPASS ) + { + xDemoStatus = xTaskCreate( prvStartHTTPTask, "HTTPTask", httpexampleTASK_STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHTTPTask ); + } + + /******************** Download S3 Object File. **********************/ + + if( xDemoStatus == pdPASS ) + { + xDemoStatus = prvDownloadS3ObjectFile( cServerHost, + xServerHostLength, + pcPath, + xRequestUriLen, + xRequestQueue, + xResponseQueue ); + } + + /************************** Disconnect. *****************************/ + + /* Close the network connection to clean up any system resources that the + * demo may have consumed. */ + if( xIsConnectionEstablished == pdTRUE ) + { + /* Close the network connection. */ + xNetworkStatus = SecureSocketsTransport_Disconnect( &xNetworkContext ); + + if( xNetworkStatus != TRANSPORT_SOCKET_STATUS_SUCCESS ) + { + LogError( ( "SecureSocketsTransport_Disconnect() failed to close the network connection. " + "StatusCode=%d.", ( int ) xNetworkStatus ) ); + xDemoStatus = pdFAIL; + } + } + + /*********** Clean up and evaluate demo iteration status. ***********/ + + /* Close and delete the queues. */ + prvTearDown( xHTTPTask, xRequestQueue, xResponseQueue ); + + /* Increment the demo run count. */ + uxDemoRunCount++; + + if( xDemoStatus == pdPASS ) + { + LogInfo( ( "Demo iteration %lu was successful.", uxDemoRunCount ) ); + } + /* Attempt to retry a failed iteration of demo for up to #httpexampleMAX_DEMO_COUNT times. */ + else if( uxDemoRunCount < httpexampleMAX_DEMO_COUNT ) + { + LogWarn( ( "Demo iteration %lu failed. Retrying...", uxDemoRunCount ) ); + vTaskDelay( httpexampleDELAY_BETWEEN_DEMO_ITERATIONS_TICKS ); + } + /* Failed all #httpexampleMAX_DEMO_COUNT demo iterations. */ + else + { + LogError( ( "All %d demo iterations failed.", httpexampleMAX_DEMO_COUNT ) ); + break; + } + } while( xDemoStatus != pdPASS ); + + if( xDemoStatus == pdPASS ) + { + LogInfo( ( "Demo completed successfully." ) ); + } + + return ( xDemoStatus == pdPASS ) ? EXIT_SUCCESS : EXIT_FAILURE; +} diff --git a/demos/coreHTTP/http_demo_s3_upload.c b/demos/coreHTTP/http_demo_s3_upload.c new file mode 100644 index 00000000000..f4e7a318301 --- /dev/null +++ b/demos/coreHTTP/http_demo_s3_upload.c @@ -0,0 +1,830 @@ +/* + * FreeRTOS V202012.00 + * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://www.FreeRTOS.org + * http://aws.amazon.com/freertos + */ + +/* + * Demo for showing use of the HTTP API using a server-authenticated network + * connection. + * + * This example, using a pre-signed URL, resolves a S3 domain, establishes a TCP + * connection, validates the server's certificate using the root CA certificate + * defined in the config header, and then finally performs a TLS handshake with + * the HTTP server so that all communication is encrypted. After which, the HTTP + * Client library API is used to upload a file to a S3 bucket by sending a PUT + * request, and verify the file was uploaded using a GET request. If any request + * fails, an error code is returned. + * + * @note This demo requires user-generated pre-signed URLs to be pasted into + * http_demo_s3_upload_config. Please use the provided script + * "presigned_urls_gen.py" (located in http_demo_helpers) to generate these + * URLs. For detailed instructions, see the accompanied README.md. + * + * @note This demo uses retry logic to connect to the server if connection + * attempts fail. The FreeRTOS/backoffAlgorithm library is used to calculate the + * retry interval with an exponential backoff and jitter algorithm. For + * generating random number required by the algorithm, the PKCS11 module is used + * as it allows access to a True Random Number Generator (TRNG) if the vendor + * platform supports it. + * It is RECOMMENDED to seed the random number generator with a device-specific + * entropy source so that probability of collisions from devices in connection + * retries is mitigated. + */ + +/** + * @file http_demo_s3_upload.c + * @brief Demonstrates usage of the HTTP library. + */ + +/* Standard includes. */ +#include +#include +#include +#include +#include + +/* Include demo config as the first non-system header. */ +#include "http_demo_s3_upload_config.h" + +/* Include common demo header. */ +#include "aws_demo.h" + +/* Kernel includes. */ +#include "FreeRTOS.h" +#include "task.h" + +/* Transport interface implementation include header for TLS. */ +#include "transport_secure_sockets.h" + +/* Common HTTP demo utilities. */ +#include "http_demo_utils.h" + +/* HTTP API header. */ +#include "core_http_client.h" + +/*------------- Demo configurations -------------------------*/ + +/* Check that the TLS port of the server is defined. */ +#ifndef democonfigHTTPS_PORT + #error "Please define democonfigHTTPS_PORT in http_demo_s3_upload_config.h." +#endif + +/* Check that the root CA certificate is defined. */ +#ifndef democonfigROOT_CA_PEM + #error "Please define democonfigROOT_CA_PEM in http_demo_s3_upload_config.h." +#endif + +/* Check that the pre-signed GET URL is defined. */ +#ifndef democonfigS3_PRESIGNED_GET_URL + #define democonfigS3_PRESIGNED_GET_URL "GET-URL" +#endif + +/* Check that the pre-signed PUT URL is defined. */ +#ifndef democonfigS3_PRESIGNED_PUT_URL + #define democonfigS3_PRESIGNED_PUT_URL "PUT-URL" +#endif + +/* Check that a transport timeout for transport send and receive functions is + * defined. */ +#ifndef democonfigTRANSPORT_SEND_RECV_TIMEOUT_MS + #define democonfigTRANSPORT_SEND_RECV_TIMEOUT_MS ( 5000 ) +#endif + +/* Check that the size of the user buffer is defined. */ +#ifndef democonfigUSER_BUFFER_LENGTH + #define democonfigUSER_BUFFER_LENGTH ( 4096 ) +#endif + +/* Pointer to the data to upload.*/ +#ifndef democonfigDEMO_HTTP_UPLOAD_DATA + #define democonfigDEMO_HTTP_UPLOAD_DATA "Hello World!" +#endif + +/** + * @brief Length of the pre-signed GET URL defined in http_demo_s3_upload_config.h. + */ +#define httpexampleS3_PRESIGNED_GET_URL_LENGTH ( sizeof( democonfigS3_PRESIGNED_GET_URL ) - 1 ) + +/** + * @brief Length of the pre-signed PUT URL defined in http_demo_s3_upload_config.h. + */ +#define httpexampleS3_PRESIGNED_PUT_URL_LENGTH ( sizeof( democonfigS3_PRESIGNED_PUT_URL ) - 1 ) + +/** + * @brief The length of the HTTP GET method. + */ +#define httpexampleHTTP_METHOD_GET_LENGTH ( sizeof( HTTP_METHOD_GET ) - 1 ) + +/** + * @brief The length of the HTTP PUT method. + */ +#define httpexampleHTTP_METHOD_PUT_LENGTH ( sizeof( HTTP_METHOD_PUT ) - 1 ) + +/** + * @brief Field name of the HTTP range header to read from server response. + */ +#define httpexampleHTTP_CONTENT_RANGE_HEADER_FIELD "Content-Range" + +/** + * @brief Length of the HTTP range header field. + */ +#define httpexampleHTTP_CONTENT_RANGE_HEADER_FIELD_LENGTH ( sizeof( httpexampleHTTP_CONTENT_RANGE_HEADER_FIELD ) - 1 ) + +/** + * @brief The length of the data in bytes to upload. + */ +#define httpexampleDEMO_HTTP_UPLOAD_DATA_LENGTH ( sizeof( democonfigDEMO_HTTP_UPLOAD_DATA ) - 1 ) + +/** + * @brief The HTTP status code returned for partial content. + */ +#define httpexampleHTTP_STATUS_CODE_PARTIAL_CONTENT 206 + +/** + * @brief The HTTP status code returned for a successful request. + */ +#define httpexampleHTTP_STATUS_CODE_SUCCESSFUL_REQUEST 200 + +/** + * @brief The maximum number of times to run the loop in this demo. + */ +#ifndef httpexampleMAX_DEMO_COUNT + #define httpexampleMAX_DEMO_COUNT ( 3 ) +#endif + +/** + * @brief Time in ticks to wait between each cycle of the demo implemented + * by RunCoreHttpS3UploadDemo(). + */ +#define httpexampleDELAY_BETWEEN_DEMO_ITERATIONS_TICKS ( pdMS_TO_TICKS( 5000U ) ) + +/** + * @brief A buffer used in the demo for storing HTTP request headers, and HTTP + * response headers and body. + * + * @note This demo shows how the same buffer can be re-used for storing the HTTP + * response after the HTTP request is sent out. However, the user can decide how + * to use buffers to store HTTP requests and responses. + */ +static uint8_t ucUserBuffer[ democonfigUSER_BUFFER_LENGTH ]; + +/** + * @brief Represents header data that will be sent in an HTTP request. + */ +static HTTPRequestHeaders_t xRequestHeaders; + +/** + * @brief Configurations of the initial request headers that are passed to + * #HTTPClient_InitializeRequestHeaders. + */ +static HTTPRequestInfo_t xRequestInfo; + +/** + * @brief Represents a response returned from an HTTP server. + */ +static HTTPResponse_t xResponse; + +/** + * @brief The host address string extracted from the pre-signed URL. + * + * @note httpexampleS3_PRESIGNED_PUT_URL_LENGTH is set as the array length here + * as the length of the host name string cannot exceed this value. + */ +static char cServerHost[ httpexampleS3_PRESIGNED_PUT_URL_LENGTH ]; + +/** + * @brief The length of the host address found in the pre-signed URL. + */ +static size_t xServerHostLength; + +/** + * @brief The location of the path within the pre-signed URL. + */ +static const char * pcPath; + +/*-----------------------------------------------------------*/ + +/** + * @brief Connect to HTTP server with reconnection retries. + * + * @param[out] pxNetworkContext The output parameter to return the created + * network context. + * + * @return pdFAIL on failure; pdPASS on successful connection. + */ +static BaseType_t prvConnectToServer( NetworkContext_t * pxNetworkContext ); + +/** + * @brief Retrieve the size of the S3 object that is specified in pcPath. + * + * @param[out] pxFileSize The size of the S3 object. + * @param[in] pxTransportInterface The transport interface for making network + * calls. + * @param[in] pcHost The server host address. This string must be + * null-terminated. + * @param[in] xHostLen The length of the server host address. + * @param[in] pcPath The Request-URI to the objects of interest. This string + * should be null-terminated. + * + * @return The status of the file size acquisition using a GET request to the + * server: pdPASS on success, pdFAIL on failure. + */ +static BaseType_t prvGetS3ObjectFileSize( size_t * pxFileSize, + const TransportInterface_t * pxTransportInterface, + const char * pcHost, + size_t xHostLen, + const char * pcPath ); + +/** + * @brief Send an HTTP PUT request based on a specified path to upload a file, + * then print the response received from the server. + * + * @param[in] pxTransportInterface The transport interface for making network + * calls. + * @param[in] pcPath The Request-URI to the objects of interest. This string must + * be null-terminated. + * + * @return The status of the file upload using a PUT request to the server: pdPASS + * on success, pdFAIL on failure. + */ +static BaseType_t prvUploadS3ObjectFile( const TransportInterface_t * pxTransportInterface, + const char * pcPath ); + +/** + * @brief Retrieve and verify the size of the S3 object that is specified in + * pcPath. + * + * @param[in] pxTransportInterface The transport interface for making network + * calls. + * @param[in] pcPath The Request-URI to the objects of interest. This string must + * be null-terminated. + * + * @return The status of the file size acquisition and verification using a GET + * request to the server: pdPASS on success, pdFAIL on failure. + */ +static BaseType_t prvVerifyS3ObjectFileSize( const TransportInterface_t * pxTransportInterface, + const char * pcPath ); + +/*-----------------------------------------------------------*/ + +static BaseType_t prvConnectToServer( NetworkContext_t * pxNetworkContext ) +{ + ServerInfo_t xServerInfo = { 0 }; + SocketsConfig_t xSocketsConfig = { 0 }; + BaseType_t xStatus = pdPASS; + TransportSocketStatus_t xNetworkStatus = TRANSPORT_SOCKET_STATUS_SUCCESS; + HTTPStatus_t xHTTPStatus = HTTPSuccess; + + /* The location of the host address within the pre-signed URL. */ + const char * pcAddress = NULL; + + /* Retrieve the address location and length from democonfigS3_PRESIGNED_PUT_URL. */ + xHTTPStatus = getUrlAddress( democonfigS3_PRESIGNED_PUT_URL, + httpexampleS3_PRESIGNED_GET_URL_LENGTH, + &pcAddress, + &xServerHostLength ); + + xStatus = ( xHTTPStatus == HTTPSuccess ) ? pdPASS : pdFAIL; + + if( xStatus == pdPASS ) + { + /* cServerHost should consist only of the host address located in + * democonfigS3_PRESIGNED_PUT_URL. */ + memcpy( cServerHost, pcAddress, xServerHostLength ); + cServerHost[ xServerHostLength ] = '\0'; + + /* Initializer server information. */ + xServerInfo.pHostName = cServerHost; + xServerInfo.hostNameLength = xServerHostLength; + xServerInfo.port = democonfigHTTPS_PORT; + + /* Configure credentials for TLS server-authenticated session. */ + xSocketsConfig.enableTls = true; + xSocketsConfig.pAlpnProtos = NULL; + xSocketsConfig.maxFragmentLength = 0; + xSocketsConfig.disableSni = false; + xSocketsConfig.pRootCa = democonfigROOT_CA_PEM; + xSocketsConfig.rootCaSize = sizeof( democonfigROOT_CA_PEM ); + xSocketsConfig.sendTimeoutMs = democonfigTRANSPORT_SEND_RECV_TIMEOUT_MS; + xSocketsConfig.recvTimeoutMs = democonfigTRANSPORT_SEND_RECV_TIMEOUT_MS; + + /* Establish a TLS session with the HTTP server. This example connects + * to the server host located in democonfigPRESIGNED_GET_URL and + * democonfigHTTPS_PORT in http_demo_s3_upload_config.h. */ + LogInfo( ( "Establishing a TLS session with %s:%d.", + cServerHost, + democonfigHTTPS_PORT ) ); + + /* Attempt to create a server-authenticated TLS connection. */ + xNetworkStatus = SecureSocketsTransport_Connect( pxNetworkContext, + &xServerInfo, + &xSocketsConfig ); + + if( xNetworkStatus != TRANSPORT_SOCKET_STATUS_SUCCESS ) + { + xStatus = pdFAIL; + } + } + + return xStatus; +} + +/*-----------------------------------------------------------*/ + +static BaseType_t prvGetS3ObjectFileSize( size_t * pxFileSize, + const TransportInterface_t * pxTransportInterface, + const char * pcHost, + size_t xHostLen, + const char * pcPath ) +{ + BaseType_t xStatus = pdPASS; + HTTPStatus_t xHTTPStatus = HTTPSuccess; + + /* The location of the file size in pcContentRangeValStr. */ + char * pcFileSizeStr = NULL; + + /* String to store the Content-Range header value. */ + char * pcContentRangeValStr = NULL; + size_t xContentRangeValStrLength = 0; + + configASSERT( pxFileSize != NULL ); + configASSERT( pcHost != NULL ); + configASSERT( pcPath != NULL ); + + /* Initialize all HTTP Client library API structs to 0. */ + ( void ) memset( &xRequestHeaders, 0, sizeof( xRequestHeaders ) ); + ( void ) memset( &xRequestInfo, 0, sizeof( xRequestInfo ) ); + ( void ) memset( &xResponse, 0, sizeof( xResponse ) ); + + /* Initialize the request object. */ + xRequestInfo.pHost = pcHost; + xRequestInfo.hostLen = xHostLen; + xRequestInfo.pMethod = HTTP_METHOD_GET; + xRequestInfo.methodLen = sizeof( HTTP_METHOD_GET ) - 1; + xRequestInfo.pPath = pcPath; + xRequestInfo.pathLen = strlen( pcPath ); + + /* Set "Connection" HTTP header to "keep-alive" so that multiple requests + * can be sent over the same established TCP connection. This is done in + * order to download the file in parts. */ + xRequestInfo.reqFlags = HTTP_REQUEST_KEEP_ALIVE_FLAG; + + /* Set the buffer used for storing request headers. */ + xRequestHeaders.pBuffer = ucUserBuffer; + xRequestHeaders.bufferLen = democonfigUSER_BUFFER_LENGTH; + + /* Initialize the response object. The same buffer used for storing request + * headers is reused here. */ + xResponse.pBuffer = ucUserBuffer; + xResponse.bufferLen = democonfigUSER_BUFFER_LENGTH; + + LogInfo( ( "Getting file object size from host..." ) ); + + xHTTPStatus = HTTPClient_InitializeRequestHeaders( &xRequestHeaders, + &xRequestInfo ); + + if( xHTTPStatus != HTTPSuccess ) + { + LogError( ( "Failed to initialize HTTP request headers: Error=%s.", + HTTPClient_strerror( xHTTPStatus ) ) ); + xStatus = pdFAIL; + } + + if( xStatus == pdPASS ) + { + /* Add the header to get bytes=0-0. S3 will respond with a Content-Range + * header that contains the size of the file in it. This header will + * look like: "Content-Range: bytes 0-0/FILESIZE". The body will have a + * single byte that we are ignoring. */ + xHTTPStatus = HTTPClient_AddRangeHeader( &xRequestHeaders, 0, 0 ); + + if( xHTTPStatus != HTTPSuccess ) + { + LogError( ( "Failed to add range header to request headers: Error=%s.", + HTTPClient_strerror( xHTTPStatus ) ) ); + xStatus = pdFAIL; + } + } + + if( xStatus == pdPASS ) + { + /* Send the request and receive the response. */ + xHTTPStatus = HTTPClient_Send( pxTransportInterface, + &xRequestHeaders, + NULL, + 0, + &xResponse, + 0 ); + + if( xHTTPStatus != HTTPSuccess ) + { + LogError( ( "Failed to send HTTP GET request to %s%s: Error=%s.", + pcHost, pcPath, HTTPClient_strerror( xHTTPStatus ) ) ); + xStatus = pdFAIL; + } + } + + if( xStatus == pdPASS ) + { + LogDebug( ( "Received HTTP response from %s%s...", + pcHost, pcPath ) ); + LogDebug( ( "Response Headers:\n%.*s", + ( int32_t ) xResponse.headersLen, + xResponse.pHeaders ) ); + LogDebug( ( "Response Body:\n%.*s\n", + ( int32_t ) xResponse.bodyLen, + xResponse.pBody ) ); + + if( xResponse.statusCode != httpexampleHTTP_STATUS_CODE_PARTIAL_CONTENT ) + { + LogError( ( "Received an invalid response from the server " + "(Status Code: %u).", + xResponse.statusCode ) ); + xStatus = pdFAIL; + } + } + + if( xStatus == pdPASS ) + { + LogInfo( ( "Received successful response from server " + "(Status Code: %u).", + xResponse.statusCode ) ); + + xHTTPStatus = HTTPClient_ReadHeader( &xResponse, + ( char * ) httpexampleHTTP_CONTENT_RANGE_HEADER_FIELD, + ( size_t ) httpexampleHTTP_CONTENT_RANGE_HEADER_FIELD_LENGTH, + ( const char ** ) &pcContentRangeValStr, + &xContentRangeValStrLength ); + + if( xHTTPStatus != HTTPSuccess ) + { + LogError( ( "Failed to read Content-Range header from HTTP response: Error=%s.", + HTTPClient_strerror( xHTTPStatus ) ) ); + xStatus = pdFAIL; + } + } + + /* Parse the Content-Range header value to get the file size. */ + if( xStatus == pdPASS ) + { + pcFileSizeStr = strstr( pcContentRangeValStr, "/" ); + + if( pcFileSizeStr == NULL ) + { + LogError( ( "'/' not present in Content-Range header value: %s.", + pcContentRangeValStr ) ); + xStatus = pdFAIL; + } + } + + if( xStatus == pdPASS ) + { + pcFileSizeStr += sizeof( char ); + *pxFileSize = ( size_t ) strtoul( pcFileSizeStr, NULL, 10 ); + + if( ( *pxFileSize == 0 ) || ( *pxFileSize == UINT32_MAX ) ) + { + LogError( ( "Error using strtoul to get the file size from %s: xFileSize=%d.", + pcFileSizeStr, ( int32_t ) *pxFileSize ) ); + xStatus = pdFAIL; + } + } + + if( xStatus == pdPASS ) + { + LogInfo( ( "The file is %d bytes long.", ( int32_t ) *pxFileSize ) ); + } + + return xStatus; +} + +/*-----------------------------------------------------------*/ + +static BaseType_t prvUploadS3ObjectFile( const TransportInterface_t * pxTransportInterface, + const char * pcPath ) +{ + BaseType_t xStatus = pdFAIL; + HTTPStatus_t xHTTPStatus = HTTPSuccess; + + configASSERT( pcPath != NULL ); + + /* Initialize all HTTP Client library API structs to 0. */ + ( void ) memset( &xRequestHeaders, 0, sizeof( xRequestHeaders ) ); + ( void ) memset( &xRequestInfo, 0, sizeof( xRequestInfo ) ); + ( void ) memset( &xResponse, 0, sizeof( xResponse ) ); + + /* Initialize the request object. */ + xRequestInfo.pHost = cServerHost; + xRequestInfo.hostLen = xServerHostLength; + xRequestInfo.pMethod = HTTP_METHOD_PUT; + xRequestInfo.methodLen = httpexampleHTTP_METHOD_PUT_LENGTH; + xRequestInfo.pPath = pcPath; + xRequestInfo.pathLen = strlen( pcPath ); + + /* Set "Connection" HTTP header to "keep-alive" so that multiple requests + * can be sent over the same established TCP connection. */ + xRequestInfo.reqFlags = HTTP_REQUEST_KEEP_ALIVE_FLAG; + + /* Set the buffer used for storing request headers. */ + xRequestHeaders.pBuffer = ucUserBuffer; + xRequestHeaders.bufferLen = democonfigUSER_BUFFER_LENGTH; + + /* Initialize the response object. The same buffer used for storing request + * headers is reused here. */ + xResponse.pBuffer = ucUserBuffer; + xResponse.bufferLen = democonfigUSER_BUFFER_LENGTH; + + if( xHTTPStatus == HTTPSuccess ) + { + xHTTPStatus = HTTPClient_InitializeRequestHeaders( &xRequestHeaders, + &xRequestInfo ); + } + + if( xHTTPStatus == HTTPSuccess ) + { + LogInfo( ( "Uploading file..." ) ); + LogDebug( ( "Request Headers:\n%.*s", + ( int32_t ) xRequestHeaders.headersLen, + ( char * ) xRequestHeaders.pBuffer ) ); + xHTTPStatus = HTTPClient_Send( pxTransportInterface, + &xRequestHeaders, + ( const uint8_t * ) democonfigDEMO_HTTP_UPLOAD_DATA, + httpexampleDEMO_HTTP_UPLOAD_DATA_LENGTH, + &xResponse, + 0 ); + } + else + { + LogError( ( "Failed to initialize HTTP request headers: Error=%s.", + HTTPClient_strerror( xHTTPStatus ) ) ); + } + + if( xHTTPStatus == HTTPSuccess ) + { + LogDebug( ( "Received HTTP response from %s%s...", + cServerHost, pcPath ) ); + LogDebug( ( "Response Headers:\n%.*s", + ( int32_t ) xResponse.headersLen, + xResponse.pHeaders ) ); + LogDebug( ( "Response Body:\n%.*s\n", + ( int32_t ) xResponse.bodyLen, + xResponse.pBody ) ); + + xStatus = ( xResponse.statusCode == httpexampleHTTP_STATUS_CODE_SUCCESSFUL_REQUEST ) ? pdPASS : pdFAIL; + } + else + { + LogError( ( "An error occurred in uploading the file." + "Failed to send HTTP PUT request to %s%s: Error=%s.", + cServerHost, pcPath, HTTPClient_strerror( xHTTPStatus ) ) ); + } + + if( xStatus == pdPASS ) + { + LogInfo( ( "Received successful response from server " + "(Status Code: %u).", + xResponse.statusCode ) ); + } + else + { + LogError( ( "Received an invalid response from the server " + "(Status Code: %u).", + xResponse.statusCode ) ); + } + + return( ( xStatus == pdPASS ) && ( xHTTPStatus == HTTPSuccess ) ); +} + +/*-----------------------------------------------------------*/ + +static BaseType_t prvVerifyS3ObjectFileSize( const TransportInterface_t * pxTransportInterface, + const char * pcPath ) +{ + BaseType_t xStatus = pdFAIL; + /* The size of the file uploaded to S3. */ + size_t xFileSize = 0; + + /* Retrieve the file size. */ + xStatus = prvGetS3ObjectFileSize( &xFileSize, + pxTransportInterface, + cServerHost, + xServerHostLength, + pcPath ); + + if( xStatus == pdPASS ) + { + if( xFileSize != httpexampleDEMO_HTTP_UPLOAD_DATA_LENGTH ) + { + LogError( ( "Failed to upload the data to S3. The file size found is %d, but it should be %d.", + ( int32_t ) xFileSize, + ( int32_t ) httpexampleDEMO_HTTP_UPLOAD_DATA_LENGTH ) ); + } + else + { + LogInfo( ( "Successfully verified that the size of the file found on S3 matches the file size uploaded " + "(Uploaded: %d bytes, Found: %d bytes).", + ( int32_t ) httpexampleDEMO_HTTP_UPLOAD_DATA_LENGTH, + ( int32_t ) xFileSize ) ); + } + } + + return xStatus; +} + +/*-----------------------------------------------------------*/ + +/** + * @brief Entry point of the demo. + * + * This example, using a pre-signed URL, resolves a S3 domain, establishes a TCP + * connection, validates the server's certificate using the root CA certificate + * defined in the config header, and then finally performs a TLS handshake with + * the HTTP server so that all communication is encrypted. After which, the HTTP + * Client library API is used to upload a file to a S3 bucket by sending a PUT + * request, and verify the file was uploaded using a GET request. If any request + * fails, an error code is returned. + * + * @note This example is single-threaded and uses statically allocated memory. + * + */ + +int RunCoreHttpS3UploadDemo( bool awsIotMqttMode, + const char * pIdentifier, + void * pNetworkServerInfo, + void * pNetworkCredentialInfo, + const IotNetworkInterface_t * pNetworkInterface ) +{ + /* The transport layer interface used by the HTTP Client library. */ + TransportInterface_t xTransportInterface; + /* The network context for the transport layer interface. */ + NetworkContext_t xNetworkContext = { 0 }; + TransportSocketStatus_t xNetworkStatus; + BaseType_t xIsConnectionEstablished = pdFALSE; + /* HTTPS Client library return status. */ + HTTPStatus_t xHTTPStatus = HTTPSuccess; + BaseType_t xDemoRunCount = 0UL; + + /* Upon return, pdPASS will indicate a successful demo execution. + * pdFAIL will indicate some failures occurred during execution. The + * user of this demo must check the logs for any failure codes. */ + BaseType_t xDemoStatus = pdPASS; + + /* Remove compiler warnings about unused parameters. */ + ( void ) awsIotMqttMode; + ( void ) pIdentifier; + ( void ) pNetworkServerInfo; + ( void ) pNetworkCredentialInfo; + ( void ) pNetworkInterface; + + /* The length of the path within the pre-signed URL. This variable is + * defined in order to store the length returned from parsing the URL, but + * it is unused. The path used for the requests in this demo needs all the + * query information following the location of the object, to the end of the + * S3 presigned URL. */ + size_t xPathLen = 0; + + LogInfo( ( "HTTP Client Synchronous S3 upload demo using pre-signed URL:\n%s", + democonfigS3_PRESIGNED_PUT_URL ) ); + + do + { + /**************************** Connect. ******************************/ + + /* Establish TLS connection on top of TCP connection using Secure Sockets. */ + + /* Attempt to connect to S3. If connection fails, retry after a timeout. + * The timeout value will be exponentially increased until either the + * maximum number of attempts or the maximum timeout value is reached. + * The function returns pdFAIL if a TCP connection with the server + * cannot be established after the configured number of attempts. */ + xDemoStatus = connectToServerWithBackoffRetries( prvConnectToServer, + &xNetworkContext ); + + if( xDemoStatus == pdFAIL ) + { + /* Log an error to indicate connection failure after all + * reconnect attempts are over. */ + LogError( ( "Failed to connect to HTTP server %s.", + cServerHost ) ); + } + + /* Define the transport interface. */ + if( xDemoStatus == pdPASS ) + { + /* Set a flag indicating that a TLS connection exists. */ + xIsConnectionEstablished = pdTRUE; + + /* Define the transport interface. */ + xTransportInterface.pNetworkContext = &xNetworkContext; + xTransportInterface.send = SecureSocketsTransport_Send; + xTransportInterface.recv = SecureSocketsTransport_Recv; + } + + /********************** Upload S3 Object File. **********************/ + + if( xDemoStatus == pdPASS ) + { + /* Retrieve the path location from democonfigS3_PRESIGNED_PUT_URL. This + * function returns the length of the path without the query into + * xPathLen, which is left unused in this demo. */ + xHTTPStatus = getUrlPath( democonfigS3_PRESIGNED_PUT_URL, + httpexampleS3_PRESIGNED_PUT_URL_LENGTH, + &pcPath, + &xPathLen ); + + xDemoStatus = ( xHTTPStatus == HTTPSuccess ) ? pdPASS : pdFAIL; + } + + if( xDemoStatus == pdPASS ) + { + xDemoStatus = prvUploadS3ObjectFile( &xTransportInterface, + pcPath ); + } + + /******************* Verify S3 Object File Upload. ********************/ + + if( xDemoStatus == pdPASS ) + { + /* Retrieve the path location from democonfigS3_PRESIGNED_GET_URL. This + * function returns the length of the path without the query into + * xPathLen. */ + xHTTPStatus = getUrlPath( democonfigS3_PRESIGNED_GET_URL, + httpexampleS3_PRESIGNED_GET_URL_LENGTH, + &pcPath, + &xPathLen ); + + xDemoStatus = ( xHTTPStatus == HTTPSuccess ) ? pdPASS : pdFAIL; + } + + if( xDemoStatus == pdPASS ) + { + /* Verify the file exists by retrieving the file size. */ + xDemoStatus = prvVerifyS3ObjectFileSize( &xTransportInterface, + pcPath ); + } + + /************************** Disconnect. *****************************/ + + /* Close the network connection to clean up any system resources that the + * demo may have consumed. */ + if( xIsConnectionEstablished == pdTRUE ) + { + /* Close the network connection. */ + xNetworkStatus = SecureSocketsTransport_Disconnect( &xNetworkContext ); + + if( xNetworkStatus != TRANSPORT_SOCKET_STATUS_SUCCESS ) + { + xDemoStatus = pdFAIL; + LogError( ( "SecureSocketsTransport_Disconnect() failed to close the network connection. " + "StatusCode=%d.", ( int ) xNetworkStatus ) ); + } + } + + /* Increment the demo run count. */ + xDemoRunCount++; + + if( xDemoStatus == pdPASS ) + { + LogInfo( ( "Demo iteration %lu is successful.", xDemoRunCount ) ); + } + /* Attempt to retry a failed iteration of demo for up to #httpexampleMAX_DEMO_COUNT times. */ + else if( xDemoRunCount < httpexampleMAX_DEMO_COUNT ) + { + LogWarn( ( "Demo iteration %lu failed. Retrying...", xDemoRunCount ) ); + vTaskDelay( httpexampleDELAY_BETWEEN_DEMO_ITERATIONS_TICKS ); + } + /* Failed all #httpexampleMAX_DEMO_COUNT demo iterations. */ + else + { + LogError( ( "All %d demo iterations failed.", httpexampleMAX_DEMO_COUNT ) ); + break; + } + } while( xDemoStatus != pdPASS ); + + if( xDemoStatus == pdPASS ) + { + LogInfo( ( "Demo completed successfully." ) ); + } + + return ( xDemoStatus == pdPASS ) ? EXIT_SUCCESS : EXIT_FAILURE; +} diff --git a/demos/coreMQTT/CMakeLists.txt b/demos/coreMQTT/CMakeLists.txt index e1c5062b54f..eb4fe5dd7b7 100755 --- a/demos/coreMQTT/CMakeLists.txt +++ b/demos/coreMQTT/CMakeLists.txt @@ -6,25 +6,26 @@ afr_set_demo_metadata(ID "CORE_MQTT_MUTUAL_AUTH_DEMO") afr_set_demo_metadata(DESCRIPTION "Examples that demonstrate the MQTT library") afr_set_demo_metadata(DISPLAY_NAME "coreMQTT Demos") +# Add the CMakeLists.txt file of module to metadata list. +afr_module_cmake_files(${AFR_CURRENT_MODULE} + ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt +) + afr_module_sources( ${AFR_CURRENT_MODULE} INTERFACE "${CMAKE_CURRENT_LIST_DIR}/mqtt_demo_mutual_auth.c" "${CMAKE_CURRENT_LIST_DIR}/mqtt_demo_connection_sharing.c" - # As the containing directory name (coreMQTT) does not match the - # module name (core_mqtt), we add dependency on the CMake file so - # that metadata is generated for it, and it is present in code - # downloaded from the FreeRTOS console. - ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt ) afr_module_dependencies( ${AFR_CURRENT_MODULE} INTERFACE AFR::core_mqtt - AFR::retry_utils + AFR::backoff_algorithm AFR::transport_interface_secure_sockets AFR::secure_sockets + AFR::pkcs11_helpers # Add dependency on the core_mqtt_demo_dependencies metadata module # so that FreeRTOS console shows this demo ONLY when the core MQTT library # (or another library depending on coreMQTT) is selected on the console. diff --git a/demos/coreMQTT/mqtt_demo_connection_sharing.c b/demos/coreMQTT/mqtt_demo_connection_sharing.c index 6eb7bb07178..af318c6d3ad 100644 --- a/demos/coreMQTT/mqtt_demo_connection_sharing.c +++ b/demos/coreMQTT/mqtt_demo_connection_sharing.c @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -68,7 +68,10 @@ #include "core_mqtt_state.h" /* Retry utilities include. */ -#include "retry_utils.h" +#include "backoff_algorithm.h" + +/* Include PKCS11 helpers header. */ +#include "pkcs11_helpers.h" /* Transport interface implementation include header for TLS. */ #include "transport_secure_sockets.h" @@ -122,12 +125,30 @@ /** * @brief Length of client identifier. */ -#define democonfigCLIENT_IDENTIFIER_LENGTH ( ( uint16_t ) ( sizeof( democonfigCLIENT_IDENTIFIER ) - 1 ) ) +#define democonfigCLIENT_IDENTIFIER_LENGTH ( ( uint16_t ) ( sizeof( democonfigCLIENT_IDENTIFIER ) - 1 ) ) /** * @brief Length of MQTT server host name. */ -#define democonfigBROKER_ENDPOINT_LENGTH ( ( uint16_t ) ( sizeof( democonfigMQTT_BROKER_ENDPOINT ) - 1 ) ) +#define democonfigBROKER_ENDPOINT_LENGTH ( ( uint16_t ) ( sizeof( democonfigMQTT_BROKER_ENDPOINT ) - 1 ) ) + +/** + * @brief The maximum number of retries for network operation with server. + */ +#define RETRY_MAX_ATTEMPTS ( 5U ) + +/** + * @brief The maximum back-off delay (in milliseconds) for retrying failed operation + * with server. + */ +#define RETRY_MAX_BACKOFF_DELAY_MS ( 5000U ) + +/** + * @brief The base back-off delay (in milliseconds) to use for network operation retry + * attempts. + */ +#define RETRY_BACKOFF_BASE_MS ( 500U ) + /** * @brief Timeout for receiving CONNACK packet in milliseconds. @@ -417,6 +438,29 @@ static MQTTStatus_t prvMQTTConnect( MQTTContext_t * pxMQTTContext, */ static MQTTStatus_t prvResumeSession( bool xSessionPresent ); +/** + * @brief Calculate and perform an exponential backoff with jitter delay for + * the next retry attempt of a failed network operation with the server. + * + * The function generates a random number, calculates the next backoff period + * with the generated random number, and performs the backoff delay operation if the + * number of retries have not exhausted. + * + * @note The PKCS11 module is used to generate the random number as it allows access + * to a True Random Number Generator (TRNG) if the vendor platform supports it. + * It is recommended to seed the random number generator with a device-specific entropy + * source so that probability of collisions from devices in connection retries is mitigated. + * + * @note The backoff period is calculated using the backoffAlgorithm library. + * + * @param[in, out] pxRetryAttempts The context to use for backoff period calculation + * with the backoffAlgorithm library. + * + * @return pdPASS if calculating the backoff period was successful; otherwise pdFAIL + * if there was failure in random number generation OR all retry attempts had exhausted. + */ +static BaseType_t prvBackoffForRetry( BackoffAlgorithmContext_t * pxRetryParams ); + /** * @brief Form a TCP connection to a server. * @@ -917,11 +961,61 @@ static MQTTStatus_t prvResumeSession( bool xSessionPresent ) /*-----------------------------------------------------------*/ +static BaseType_t prvBackoffForRetry( BackoffAlgorithmContext_t * pxRetryParams ) +{ + BaseType_t xReturnStatus = pdFAIL; + uint16_t usNextRetryBackOff = 0U; + BackoffAlgorithmStatus_t xBackoffAlgStatus = BackoffAlgorithmSuccess; + + /** + * To calculate the backoff period for the next retry attempt, we will + * generate a random number to provide to the backoffAlgorithm library. + * + * Note: The PKCS11 module is used to generate the random number as it allows access + * to a True Random Number Generator (TRNG) if the vendor platform supports it. + * It is recommended to use a random number generator seeded with a device-specific + * entropy source so that probability of collisions from devices in connection retries + * is mitigated. + */ + uint32_t ulRandomNum = 0; + + if( xPkcs11GenerateRandomNumber( ( uint8_t * ) &ulRandomNum, + sizeof( ulRandomNum ) ) == pdPASS ) + { + /* Get back-off value (in milliseconds) for the next retry attempt. */ + xBackoffAlgStatus = BackoffAlgorithm_GetNextBackoff( pxRetryParams, ulRandomNum, &usNextRetryBackOff ); + + if( xBackoffAlgStatus == BackoffAlgorithmRetriesExhausted ) + { + LogError( ( "All retry attempts have exhausted. Operation will not be retried" ) ); + } + else if( xBackoffAlgStatus == BackoffAlgorithmSuccess ) + { + /* Perform the backoff delay. */ + vTaskDelay( pdMS_TO_TICKS( usNextRetryBackOff ) ); + + xReturnStatus = pdPASS; + + LogInfo( ( "Retry attempt %lu out of maximum retry attempts %lu.", + ( pxRetryParams->attemptsDone + 1 ), + pxRetryParams->maxRetryAttempts ) ); + } + } + else + { + LogError( ( "Unable to retry operation with broker: Random number generation failed" ) ); + } + + return xReturnStatus; +} + +/*-----------------------------------------------------------*/ + static BaseType_t prvSocketConnect( NetworkContext_t * pxNetworkContext ) { BaseType_t xConnected = pdFAIL; - RetryUtilsStatus_t xRetryUtilsStatus = RetryUtilsSuccess; - RetryUtilsParams_t xReconnectParams; + BackoffAlgorithmContext_t xReconnectParams; + BaseType_t xBackoffStatus = pdFAIL; TransportSocketStatus_t xNetworkStatus = TRANSPORT_SOCKET_STATUS_SUCCESS; ServerInfo_t xServerInfo = { 0 }; SocketsConfig_t xSocketConfig = { 0 }; @@ -939,10 +1033,11 @@ static BaseType_t prvSocketConnect( NetworkContext_t * pxNetworkContext ) xSocketConfig.pRootCa = democonfigROOT_CA_PEM; xSocketConfig.rootCaSize = sizeof( democonfigROOT_CA_PEM ); - /* We will use a retry mechanism with an exponential backoff mechanism and - * jitter. We initialize reconnect attempts and interval here. */ - xReconnectParams.maxRetryAttempts = MAX_RETRY_ATTEMPTS; - RetryUtils_ParamsReset( &xReconnectParams ); + /* Initialize reconnect attempts and interval. */ + BackoffAlgorithm_InitializeParams( &xReconnectParams, + RETRY_BACKOFF_BASE_MS, + RETRY_MAX_BACKOFF_DELAY_MS, + RETRY_MAX_ATTEMPTS ); /* Attempt to connect to MQTT broker. If connection fails, retry after a * timeout. Timeout value will exponentially increase until the maximum @@ -963,15 +1058,15 @@ static BaseType_t prvSocketConnect( NetworkContext_t * pxNetworkContext ) if( !xConnected ) { - LogWarn( ( "Connection to the broker failed. Retrying connection with backoff and jitter." ) ); - xRetryUtilsStatus = RetryUtils_BackoffAndSleep( &xReconnectParams ); - } + LogWarn( ( "Connection to the broker failed. Attempting connection retry after backoff delay." ) ); - if( xRetryUtilsStatus == RetryUtilsRetriesExhausted ) - { - LogError( ( "Connection to the broker failed. All attempts exhausted." ) ); + /* As the connection attempt failed, we will retry the connection after an + * exponential backoff with jitter delay. */ + + /* Calculate the backoff period for the next retry attempt and perform the wait operation. */ + xBackoffStatus = prvBackoffForRetry( &xReconnectParams ); } - } while( ( xConnected != pdPASS ) && ( xRetryUtilsStatus == RetryUtilsSuccess ) ); + } while( ( xConnected != pdPASS ) && ( xBackoffStatus == pdPASS ) ); return xConnected; } @@ -2018,12 +2113,13 @@ int RunCoreMqttConnectionSharingDemo( bool awsIotMqttMode, BaseType_t xNetworkStatus = pdFAIL; BaseType_t xResult = pdFALSE; BaseType_t xNetworkConnectionCreated = pdFALSE; - uint32_t ulNotification = 0; + uint32_t ulNotification = 0UL; MQTTStatus_t xMQTTStatus; uint32_t ulExpectedNotifications = mqttexamplePUBLISHER_SYNC_COMPLETE_BIT | mqttexampleSUBSCRIBE_TASK_COMPLETE_BIT | mqttexamplePUBLISHER_ASYNC_COMPLETE_BIT; - uint32_t ulDemoCount = 0; + uint32_t ulDemoCount = 0UL; + uint32_t ulDemoSuccessCount = 0UL; int ret = EXIT_SUCCESS; ( void ) awsIotMqttMode; @@ -2078,7 +2174,7 @@ int RunCoreMqttConnectionSharingDemo( bool awsIotMqttMode, } } - for( ulDemoCount = 0; ( ulDemoCount < democonfigMQTT_MAX_DEMO_COUNT ) && ( ret == EXIT_SUCCESS ); ulDemoCount++ ) + for( ulDemoCount = 0UL; ( ulDemoCount < democonfigMQTT_MAX_DEMO_COUNT ); ulDemoCount++ ) { /* Clear the lists of subscriptions and pending acknowledgments. */ memset( pxPendingAcks, 0x00, mqttexamplePENDING_ACKS_MAX_SIZE * sizeof( AckInfo_t ) ); @@ -2156,13 +2252,17 @@ int RunCoreMqttConnectionSharingDemo( bool awsIotMqttMode, if( ret == EXIT_SUCCESS ) { LogInfo( ( "Demo iteration %lu completed successfully.", ( ulDemoCount + 1UL ) ) ); - LogInfo( ( "Short delay before starting the next iteration.... \r\n\r\n" ) ); - vTaskDelay( mqttexampleDELAY_BETWEEN_DEMO_ITERATIONS ); + ulDemoSuccessCount++; } else { + /* Demo loop will be repeated for democonfigMQTT_MAX_DEMO_COUNT + * times even if current loop resulted in a failure. */ LogError( ( "Demo failed at iteration %lu.", ( ulDemoCount + 1UL ) ) ); } + + LogInfo( ( "Short delay before starting the next iteration.... \r\n\r\n" ) ); + vTaskDelay( mqttexampleDELAY_BETWEEN_DEMO_ITERATIONS ); } /* Delete queues. */ @@ -2181,6 +2281,25 @@ int RunCoreMqttConnectionSharingDemo( bool awsIotMqttMode, vQueueDelete( xSubscriberResponseQueue ); } + /* Demo run is considered successful if more than half of + * #democonfigMQTT_MAX_DEMO_COUNT is successful. */ + if( ulDemoSuccessCount > ( democonfigMQTT_MAX_DEMO_COUNT / 2 ) ) + { + ret = EXIT_SUCCESS; + LogInfo( ( "Demo run is successful with %lu successful loops out of total %lu loops.", + ( ulDemoSuccessCount ), + democonfigMQTT_MAX_DEMO_COUNT ) ); + } + else + { + ret = EXIT_FAILURE; + LogInfo( ( "Demo run failed with %lu failed loops out of total %lu loops." + " RequiredSuccessCounts=%lu.", + ( democonfigMQTT_MAX_DEMO_COUNT - ulDemoSuccessCount ), + democonfigMQTT_MAX_DEMO_COUNT, + ( ( democonfigMQTT_MAX_DEMO_COUNT / 2 ) + 1 ) ) ); + } + return ret; } diff --git a/demos/coreMQTT/mqtt_demo_mutual_auth.c b/demos/coreMQTT/mqtt_demo_mutual_auth.c index c9b051ed7aa..5613fd2227f 100644 --- a/demos/coreMQTT/mqtt_demo_mutual_auth.c +++ b/demos/coreMQTT/mqtt_demo_mutual_auth.c @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -64,7 +64,10 @@ #include "core_mqtt.h" /* Retry utilities include. */ -#include "retry_utils.h" +#include "backoff_algorithm.h" + +/* Include PKCS11 helpers header. */ +#include "pkcs11_helpers.h" /* Transport interface implementation include header for TLS. */ #include "transport_secure_sockets.h" @@ -131,6 +134,23 @@ #endif /*-----------------------------------------------------------*/ +/** + * @brief The maximum number of retries for network operation with server. + */ +#define RETRY_MAX_ATTEMPTS ( 5U ) + +/** + * @brief The maximum back-off delay (in milliseconds) for retrying failed operation + * with server. + */ +#define RETRY_MAX_BACKOFF_DELAY_MS ( 5000U ) + +/** + * @brief The base back-off delay (in milliseconds) to use for network operation retry + * attempts. + */ +#define RETRY_BACKOFF_BASE_MS ( 500U ) + /** * @brief Timeout for receiving CONNACK packet in milliseconds. */ @@ -163,7 +183,13 @@ /** * @brief Timeout for MQTT_ProcessLoop in milliseconds. */ -#define mqttexamplePROCESS_LOOP_TIMEOUT_MS ( 500U ) +#define mqttexamplePROCESS_LOOP_TIMEOUT_MS ( 700U ) + +/** + * @brief The maximum number of times to call MQTT_ProcessLoop() when polling + * for a specific packet from the broker. + */ +#define MQTT_PROCESS_LOOP_PACKET_WAIT_COUNT_MAX ( 30U ) /** * @brief Keep alive time reported to the broker while establishing @@ -202,6 +228,29 @@ /*-----------------------------------------------------------*/ +/** + * @brief Calculate and perform an exponential backoff with jitter delay for + * the next retry attempt of a failed network operation with the server. + * + * The function generates a random number, calculates the next backoff period + * with the generated random number, and performs the backoff delay operation if the + * number of retries have not exhausted. + * + * @note The PKCS11 module is used to generate the random number as it allows access + * to a True Random Number Generator (TRNG) if the vendor platform supports it. + * It is recommended to seed the random number generator with a device-specific entropy + * source so that probability of collisions from devices in connection retries is mitigated. + * + * @note The backoff period is calculated using the backoffAlgorithm library. + * + * @param[in, out] pxRetryAttempts The context to use for backoff period calculation + * with the backoffAlgorithm library. + * + * @return pdPASS if calculating the backoff period was successful; otherwise pdFAIL + * if there was failure in random number generation OR all retry attempts had exhausted. + */ +static BaseType_t prvBackoffForRetry( BackoffAlgorithmContext_t * pxRetryParams ); + /** * @brief Connect to MQTT broker with reconnection retries. * @@ -304,6 +353,18 @@ static void prvEventCallback( MQTTContext_t * pxMQTTContext, MQTTPacketInfo_t * pxPacketInfo, MQTTDeserializedInfo_t * pxDeserializedInfo ); +/** + * @brief Helper function to wait for a specific incoming packet from the + * broker. + * + * @param[in] pxMQTTContext MQTT context pointer. + * @param[in] usPacketType Packet type to wait for. + * + * @return The return status from call to #MQTT_ProcessLoop API. + */ +static MQTTStatus_t prvWaitForPacket( MQTTContext_t * pxMQTTContext, + uint16_t usPacketType ); + /*-----------------------------------------------------------*/ /** @@ -338,6 +399,20 @@ static uint16_t usSubscribePacketIdentifier; */ static uint16_t usUnsubscribePacketIdentifier; +/** + * @brief MQTT packet type received from the MQTT broker. + * + * @note Only on receiving incoming PUBLISH, SUBACK, and UNSUBACK, this + * variable is updated. For MQTT packets PUBACK and PINGRESP, the variable is + * not updated since there is no need to specifically wait for it in this demo. + * A single variable suffices as this demo uses single task and requests one operation + * (of PUBLISH, SUBSCRIBE, UNSUBSCRIBE) at a time before expecting response from + * the broker. Hence it is not possible to receive multiple packets of type PUBLISH, + * SUBACK, and UNSUBACK in a single call of #prvWaitForPacket. + * For a multi task application, consider a different method to wait for the packet, if needed. + */ +static uint16_t usPacketTypeReceived = 0U; + /** * @brief A pair containing a topic filter and its SUBACK status. */ @@ -393,14 +468,14 @@ int RunCoreMqttMutualAuthDemo( bool awsIotMqttMode, NetworkContext_t xNetworkContext = { 0 }; MQTTContext_t xMQTTContext = { 0 }; MQTTStatus_t xMQTTStatus; - uint32_t ulDemoRunCount = 0; + uint32_t ulDemoRunCount = 0UL, ulDemoSuccessCount = 0UL; TransportSocketStatus_t xNetworkStatus; BaseType_t xIsConnectionEstablished = pdFALSE; /* Upon return, pdPASS will indicate a successful demo execution. * pdFAIL will indicate some failures occurred during execution. The * user of this demo must check the logs for any failure codes. */ - BaseType_t xDemoStatus = pdPASS; + BaseType_t xDemoStatus = pdFAIL; /* Remove compiler warnings about unused parameters. */ ( void ) awsIotMqttMode; @@ -415,7 +490,7 @@ int RunCoreMqttMutualAuthDemo( bool awsIotMqttMode, */ ulGlobalEntryTimeMs = prvGetTimeMs(); - for( ; ulDemoRunCount < democonfigMQTT_MAX_DEMO_COUNT; ulDemoRunCount++ ) + for( ulDemoRunCount = 0UL; ( ulDemoRunCount < democonfigMQTT_MAX_DEMO_COUNT ); ulDemoRunCount++ ) { /****************************** Connect. ******************************/ @@ -444,7 +519,7 @@ int RunCoreMqttMutualAuthDemo( bool awsIotMqttMode, { /* If server rejected the subscription request, attempt to resubscribe to topic. * Attempts are made according to the exponential backoff retry strategy - * implemented in retry_utils. */ + * implemented in backoff_algorithm. */ xDemoStatus = prvMQTTSubscribeWithBackoffRetries( &xMQTTContext ); } @@ -461,16 +536,16 @@ int RunCoreMqttMutualAuthDemo( bool awsIotMqttMode, if( xDemoStatus == pdPASS ) { /* Process incoming publish echo, since application subscribed to the same - * topic, the broker will send publish message back to the application. */ + * topic, the broker will send publish message back to the application. + * #prvWaitForPacket will try to receive an incoming PUBLISH packet from broker. + * Please note that PUBACK for the outgoing PUBLISH may also be received before + * receiving an incoming PUBLISH. */ LogInfo( ( "Attempt to receive publish message from broker." ) ); - xMQTTStatus = MQTT_ProcessLoop( &xMQTTContext, mqttexamplePROCESS_LOOP_TIMEOUT_MS ); + xMQTTStatus = prvWaitForPacket( &xMQTTContext, MQTT_PACKET_TYPE_PUBLISH ); if( xMQTTStatus != MQTTSuccess ) { xDemoStatus = pdFAIL; - LogError( ( "MQTT_ProcessLoop failed: LoopDuration=%u, Error=%s", - mqttexamplePROCESS_LOOP_TIMEOUT_MS, - MQTT_Status_strerror( xMQTTStatus ) ) ); } } @@ -490,14 +565,11 @@ int RunCoreMqttMutualAuthDemo( bool awsIotMqttMode, if( xDemoStatus == pdPASS ) { /* Process incoming UNSUBACK packet from the broker. */ - xMQTTStatus = MQTT_ProcessLoop( &xMQTTContext, mqttexamplePROCESS_LOOP_TIMEOUT_MS ); + xMQTTStatus = prvWaitForPacket( &xMQTTContext, MQTT_PACKET_TYPE_UNSUBACK ); if( xMQTTStatus != MQTTSuccess ) { xDemoStatus = pdFAIL; - LogError( ( "Failed to receive UNSUBACK packet from broker: ProcessLoopDuration=%u, Error=%s", - mqttexamplePROCESS_LOOP_TIMEOUT_MS, - MQTT_Status_strerror( xMQTTStatus ) ) ); } } @@ -539,31 +611,103 @@ int RunCoreMqttMutualAuthDemo( bool awsIotMqttMode, * bombard the broker. */ LogInfo( ( "Demo completed an iteration successfully." ) ); LogInfo( ( "Demo iteration %lu completed successfully.", ( ulDemoRunCount + 1UL ) ) ); + + /* Update success count. */ + ulDemoSuccessCount++; } else { - /* Terminate the demo due to failure. */ + /* Demo loop will be repeated for democonfigMQTT_MAX_DEMO_COUNT + * times even if current loop resulted in a failure. */ LogInfo( ( "Demo failed at iteration %lu.", ( ulDemoRunCount + 1UL ) ) ); - LogInfo( ( "Exiting demo." ) ); - break; } LogInfo( ( "Short delay before starting the next iteration.... " ) ); vTaskDelay( mqttexampleDELAY_BETWEEN_DEMO_ITERATIONS_TICKS ); } + /* Demo run is considered successful if more than half of + * #democonfigMQTT_MAX_DEMO_COUNT is successful. */ + if( ulDemoSuccessCount > ( democonfigMQTT_MAX_DEMO_COUNT / 2 ) ) + { + xDemoStatus = pdPASS; + LogInfo( ( "Demo run is successful with %lu successful loops out of total %lu loops.", + ( ulDemoSuccessCount ), + democonfigMQTT_MAX_DEMO_COUNT ) ); + } + else + { + xDemoStatus = pdFAIL; + LogInfo( ( "Demo run failed with %lu failed loops out of total %lu loops." + " RequiredSuccessCounts=%lu.", + ( democonfigMQTT_MAX_DEMO_COUNT - ulDemoSuccessCount ), + democonfigMQTT_MAX_DEMO_COUNT, + ( ( democonfigMQTT_MAX_DEMO_COUNT / 2 ) + 1 ) ) ); + } + return ( xDemoStatus == pdPASS ) ? EXIT_SUCCESS : EXIT_FAILURE; } /*-----------------------------------------------------------*/ +static BaseType_t prvBackoffForRetry( BackoffAlgorithmContext_t * pxRetryParams ) +{ + BaseType_t xReturnStatus = pdFAIL; + uint16_t usNextRetryBackOff = 0U; + BackoffAlgorithmStatus_t xBackoffAlgStatus = BackoffAlgorithmSuccess; + + /** + * To calculate the backoff period for the next retry attempt, we will + * generate a random number to provide to the backoffAlgorithm library. + * + * Note: The PKCS11 module is used to generate the random number as it allows access + * to a True Random Number Generator (TRNG) if the vendor platform supports it. + * It is recommended to use a random number generator seeded with a device-specific + * entropy source so that probability of collisions from devices in connection retries + * is mitigated. + */ + uint32_t ulRandomNum = 0; + + if( xPkcs11GenerateRandomNumber( ( uint8_t * ) &ulRandomNum, + sizeof( ulRandomNum ) ) == pdPASS ) + { + /* Get back-off value (in milliseconds) for the next retry attempt. */ + xBackoffAlgStatus = BackoffAlgorithm_GetNextBackoff( pxRetryParams, ulRandomNum, &usNextRetryBackOff ); + + if( xBackoffAlgStatus == BackoffAlgorithmRetriesExhausted ) + { + LogError( ( "All retry attempts have exhausted. Operation will not be retried" ) ); + } + else if( xBackoffAlgStatus == BackoffAlgorithmSuccess ) + { + /* Perform the backoff delay. */ + vTaskDelay( pdMS_TO_TICKS( usNextRetryBackOff ) ); + + xReturnStatus = pdPASS; + + LogInfo( ( "Retry attempt %lu out of maximum retry attempts %lu.", + ( pxRetryParams->attemptsDone + 1 ), + pxRetryParams->maxRetryAttempts ) ); + } + } + else + { + LogError( ( "Unable to retry operation with broker: Random number generation failed" ) ); + } + + return xReturnStatus; +} + +/*-----------------------------------------------------------*/ + static BaseType_t prvConnectToServerWithBackoffRetries( NetworkContext_t * pxNetworkContext ) { ServerInfo_t xServerInfo = { 0 }; + SocketsConfig_t xSocketsConfig = { 0 }; BaseType_t xStatus = pdPASS; TransportSocketStatus_t xNetworkStatus = TRANSPORT_SOCKET_STATUS_SUCCESS; - RetryUtilsStatus_t xRetryUtilsStatus = RetryUtilsSuccess; - RetryUtilsParams_t xReconnectParams; + BackoffAlgorithmContext_t xReconnectParams; + BaseType_t xBackoffStatus = pdFALSE; /* Set the credentials for establishing a TLS connection. */ /* Initializer server information. */ @@ -582,8 +726,10 @@ static BaseType_t prvConnectToServerWithBackoffRetries( NetworkContext_t * pxNet xSocketsConfig.recvTimeoutMs = mqttexampleTRANSPORT_SEND_RECV_TIMEOUT_MS; /* Initialize reconnect attempts and interval. */ - RetryUtils_ParamsReset( &xReconnectParams ); - xReconnectParams.maxRetryAttempts = MAX_RETRY_ATTEMPTS; + BackoffAlgorithm_InitializeParams( &xReconnectParams, + RETRY_BACKOFF_BASE_MS, + RETRY_MAX_BACKOFF_DELAY_MS, + RETRY_MAX_ATTEMPTS ); /* Attempt to connect to MQTT broker. If connection fails, retry after * a timeout. Timeout value will exponentially increase till maximum @@ -604,22 +750,15 @@ static BaseType_t prvConnectToServerWithBackoffRetries( NetworkContext_t * pxNet if( xNetworkStatus != TRANSPORT_SOCKET_STATUS_SUCCESS ) { - LogWarn( ( "Connection to the broker failed. Status=%d ." - "Retrying connection with backoff and jitter.", xNetworkStatus ) ); - xStatus = pdFAIL; + LogWarn( ( "Connection to the broker failed. Attempting connection retry after backoff delay." ) ); - LogInfo( ( "Retry attempt %lu out of maximum retry attempts %lu.", - ( xReconnectParams.attemptsDone + 1 ), - MAX_RETRY_ATTEMPTS ) ); - xRetryUtilsStatus = RetryUtils_BackoffAndSleep( &xReconnectParams ); - } + /* As the connection attempt failed, we will retry the connection after an + * exponential backoff with jitter delay. */ - if( xRetryUtilsStatus == RetryUtilsRetriesExhausted ) - { - LogError( ( "Connection to the broker failed, all attempts exhausted." ) ); - xNetworkStatus = TRANSPORT_SOCKET_STATUS_CONNECT_FAILURE; + /* Calculate the backoff period for the next retry attempt and perform the wait operation. */ + xBackoffStatus = prvBackoffForRetry( &xReconnectParams ); } - } while( ( xNetworkStatus != TRANSPORT_SOCKET_STATUS_SUCCESS ) && ( xRetryUtilsStatus == RetryUtilsSuccess ) ); + } while( ( xNetworkStatus != TRANSPORT_SOCKET_STATUS_SUCCESS ) && ( xBackoffStatus == pdPASS ) ); return xStatus; } @@ -709,10 +848,10 @@ static void prvUpdateSubAckStatus( MQTTPacketInfo_t * pxPacketInfo ) static BaseType_t prvMQTTSubscribeWithBackoffRetries( MQTTContext_t * pxMQTTContext ) { MQTTStatus_t xResult = MQTTSuccess; - RetryUtilsStatus_t xRetryUtilsStatus = RetryUtilsSuccess; - RetryUtilsParams_t xRetryParams; + BackoffAlgorithmContext_t xRetryParams; + BaseType_t xBackoffStatus = pdFAIL; MQTTSubscribeInfo_t xMQTTSubscription[ mqttexampleTOPIC_COUNT ]; - bool xFailedSubscribeToTopic = false; + BaseType_t xFailedSubscribeToTopic = pdFALSE; uint32_t ulTopicCount = 0U; BaseType_t xStatus = pdFAIL; @@ -729,8 +868,10 @@ static BaseType_t prvMQTTSubscribeWithBackoffRetries( MQTTContext_t * pxMQTTCont xMQTTSubscription[ 0 ].topicFilterLength = ( uint16_t ) strlen( mqttexampleTOPIC ); /* Initialize retry attempts and interval. */ - RetryUtils_ParamsReset( &xRetryParams ); - xRetryParams.maxRetryAttempts = MAX_RETRY_ATTEMPTS; + BackoffAlgorithm_InitializeParams( &xRetryParams, + RETRY_BACKOFF_BASE_MS, + RETRY_MAX_BACKOFF_DELAY_MS, + RETRY_MAX_ATTEMPTS ); do { @@ -764,19 +905,18 @@ static BaseType_t prvMQTTSubscribeWithBackoffRetries( MQTTContext_t * pxMQTTCont * receiving Publish message before subscribe ack is zero; but application * must be ready to receive any packet. This demo uses the generic packet * processing function everywhere to highlight this fact. */ - xResult = MQTT_ProcessLoop( pxMQTTContext, mqttexamplePROCESS_LOOP_TIMEOUT_MS ); + xResult = prvWaitForPacket( pxMQTTContext, MQTT_PACKET_TYPE_SUBACK ); if( xResult != MQTTSuccess ) { - LogError( ( "Failed to receive SUBACK response for SUBSCRIBE request: ProcessLoopDuration=%u, Error=%s", - mqttexamplePROCESS_LOOP_TIMEOUT_MS, MQTT_Status_strerror( xResult ) ) ); + xStatus = pdFAIL; } } if( xStatus == pdPASS ) { /* Reset flag before checking suback responses. */ - xFailedSubscribeToTopic = false; + xFailedSubscribeToTopic = pdFALSE; /* Check if recent subscription request has been rejected. #xTopicFilterContext is updated * in the event callback to reflect the status of the SUBACK sent by the broker. It represents @@ -786,20 +926,21 @@ static BaseType_t prvMQTTSubscribeWithBackoffRetries( MQTTContext_t * pxMQTTCont { if( xTopicFilterContext[ ulTopicCount ].xSubAckStatus == MQTTSubAckFailure ) { + xFailedSubscribeToTopic = pdTRUE; + + /* As the subscribe attempt failed, we will retry the connection after an + * exponential backoff with jitter delay. */ + + /* Retry subscribe after exponential back-off. */ LogWarn( ( "Server rejected subscription request. Attempting to re-subscribe to topic %s.", xTopicFilterContext[ ulTopicCount ].pcTopicFilter ) ); - xFailedSubscribeToTopic = true; - xRetryUtilsStatus = RetryUtils_BackoffAndSleep( &xRetryParams ); + + xBackoffStatus = prvBackoffForRetry( &xRetryParams ); break; } } } - - if( xRetryUtilsStatus == RetryUtilsRetriesExhausted ) - { - LogError( ( "SUBSCRIBE request re-tries exhausted." ) ); - } - } while( ( xFailedSubscribeToTopic == true ) && ( xRetryUtilsStatus == RetryUtilsSuccess ) ); + } while( ( xFailedSubscribeToTopic == pdTRUE ) && ( xBackoffStatus == pdPASS ) ); return xStatus; } @@ -894,6 +1035,9 @@ static void prvMQTTProcessResponse( MQTTPacketInfo_t * pxIncomingPacket, case MQTT_PACKET_TYPE_SUBACK: + /* Update the packet type received to SUBACK. */ + usPacketTypeReceived = MQTT_PACKET_TYPE_SUBACK; + /* A SUBACK from the broker, containing the server response to our subscription request, has been received. * It contains the status code indicating server approval/rejection for the subscription to the single topic * requested. The SUBACK will be parsed to obtain the status code, and this status code will be stored in global @@ -916,12 +1060,17 @@ static void prvMQTTProcessResponse( MQTTPacketInfo_t * pxIncomingPacket, case MQTT_PACKET_TYPE_UNSUBACK: LogInfo( ( "Unsubscribed from the topic %s.", mqttexampleTOPIC ) ); + + /* Update the packet type received to UNSUBACK. */ + usPacketTypeReceived = MQTT_PACKET_TYPE_UNSUBACK; + /* Make sure ACK packet identifier matches with Request packet identifier. */ configASSERT( usUnsubscribePacketIdentifier == usPacketId ); break; case MQTT_PACKET_TYPE_PINGRESP: LogInfo( ( "Ping Response successfully received." ) ); + break; /* Any other packet type is invalid. */ @@ -937,6 +1086,9 @@ static void prvMQTTProcessIncomingPublish( MQTTPublishInfo_t * pxPublishInfo ) { configASSERT( pxPublishInfo != NULL ); + /* Set the global for indicating that an incoming publish is received. */ + usPacketTypeReceived = MQTT_PACKET_TYPE_PUBLISH; + /* Process incoming Publish. */ LogInfo( ( "Incoming QoS : %d\n", pxPublishInfo->qos ) ); @@ -999,3 +1151,34 @@ static uint32_t prvGetTimeMs( void ) } /*-----------------------------------------------------------*/ + +static MQTTStatus_t prvWaitForPacket( MQTTContext_t * pxMQTTContext, + uint16_t usPacketType ) +{ + uint8_t ucCount = 0U; + MQTTStatus_t xMQTTStatus = MQTTSuccess; + + /* Reset the packet type received. */ + usPacketTypeReceived = 0U; + + while( ( usPacketTypeReceived != usPacketType ) && + ( ucCount++ < MQTT_PROCESS_LOOP_PACKET_WAIT_COUNT_MAX ) && + ( xMQTTStatus == MQTTSuccess ) ) + { + /* Event callback will set #usPacketTypeReceived when receiving appropriate packet. This + * will wait for at most mqttexamplePROCESS_LOOP_TIMEOUT_MS. */ + xMQTTStatus = MQTT_ProcessLoop( pxMQTTContext, mqttexamplePROCESS_LOOP_TIMEOUT_MS ); + } + + if( ( xMQTTStatus != MQTTSuccess ) || ( usPacketTypeReceived != usPacketType ) ) + { + LogError( ( "MQTT_ProcessLoop failed to receive packet: Packet type=%02X, LoopDuration=%u, Status=%s", + usPacketType, + ( mqttexamplePROCESS_LOOP_TIMEOUT_MS * ucCount ), + MQTT_Status_strerror( xMQTTStatus ) ) ); + } + + return xMQTTStatus; +} + +/*-----------------------------------------------------------*/ diff --git a/demos/defender/CMakeLists.txt b/demos/defender/CMakeLists.txt deleted file mode 100644 index e3c5672960a..00000000000 --- a/demos/defender/CMakeLists.txt +++ /dev/null @@ -1,17 +0,0 @@ -# Device Defender demo -afr_demo_module(defender) - -afr_set_demo_metadata(ID "DEFENDER_DEMO") -afr_set_demo_metadata(DESCRIPTION "An example that demonstrates reporting metrics to AWS IoT with Device Defender") -afr_set_demo_metadata(DISPLAY_NAME "Device Defender") - -afr_module_sources( - ${AFR_CURRENT_MODULE} - INTERFACE - "${CMAKE_CURRENT_LIST_DIR}/aws_iot_demo_defender.c" -) -afr_module_dependencies( - ${AFR_CURRENT_MODULE} - INTERFACE - AFR::defender -) diff --git a/demos/defender/aws_iot_demo_defender.c b/demos/defender/aws_iot_demo_defender.c deleted file mode 100644 index f126b2056e9..00000000000 --- a/demos/defender/aws_iot_demo_defender.c +++ /dev/null @@ -1,357 +0,0 @@ -/* - * FreeRTOS V202011.00 - * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://aws.amazon.com/freertos - * http://www.FreeRTOS.org - */ - -/* Demo configuration includes. */ -#include "iot_config.h" - -/* Standard includes. */ -#include -#include - -/* Demo logging include. */ -#include "iot_demo_logging.h" - -/* Platform includes for demo. */ -#include "platform/iot_clock.h" -#include "platform/iot_network.h" - -/* Defender includes. */ -#include "aws_iot_defender.h" - -/* Includes for initialization. */ -#include "iot_mqtt.h" -#include "platform/iot_metrics.h" - -/** - * @brief The keep-alive interval used for this demo. - * - * An MQTT ping request will be sent periodically at this interval. - */ -#define KEEP_ALIVE_SECONDS ( ( uint16_t ) 60 ) - -/** - * @brief The timeout for Defender and MQTT operations in this demo. - */ -#define TIMEOUT_MS ( ( uint32_t ) 5000 ) - -/** - * @brief Defender metrics publish interval, 5 minutes (300 seconds) is minumum. - */ -#define DEFENDER_PUBLISH_INTERVAL ( ( uint32_t ) 300 ) - -/*-----------------------------------------------------------*/ - -/** - * @brief Callback used to get notification of defender's events. - * - * @param[in] pCallbackContext context pointer passed by the application - * when callback is regiested in AwsIotDefender_Start() - * - * @param[im] pointer to AwsIotDefenderCallbackInfo_t containing status of - * publish - */ -static void _defenderCallback( void * pCallbackContext, - AwsIotDefenderCallbackInfo_t * const pCallbackInfo ) -{ - bool * pMetricsAccepted = ( bool * ) ( pCallbackContext ); - - IotLogInfo( "User's callback is invoked on event: %s.", AwsIotDefender_EventType( pCallbackInfo->eventType ) ); - - if( pCallbackInfo != NULL ) - { - /* Callback info processing example. */ - if( pCallbackInfo->eventType == AWS_IOT_DEFENDER_METRICS_ACCEPTED ) - { - *pMetricsAccepted = true; - } - - if( pCallbackInfo->pMetricsReport != NULL ) - { - IotLogInfo( "Published metrics report." ); - } - else - { - IotLogError( "No metrics report was generated." ); - } - - if( pCallbackInfo->pPayload != NULL ) - { - IotLogInfo( "Received MQTT message." ); - } - else - { - IotLogError( "No message has been returned from subscribed topic." ); - } - } -} - -/*-----------------------------------------------------------*/ - -/** - * @brief Establish a new connection to the MQTT server for the Defender demo. - * - * @param[in] pIdentifier NULL-terminated MQTT client identifier. The Defender - * demo will use the Thing Name as the client identifier. - * @param[in] pNetworkServerInfo Passed to the MQTT connect function when - * establishing the MQTT connection. - * @param[in] pNetworkCredentialInfo Passed to the MQTT connect function when - * establishing the MQTT connection. - * @param[in] pNetworkInterface The network interface to use for this demo. - * @param[out] pMqttConnection Set to the handle to the new MQTT connection. - * - * @return `EXIT_SUCCESS` if the connection is successfully established; `EXIT_FAILURE` - * otherwise. - */ -static int _establishMqttConnection( const char * pIdentifier, - void * pNetworkServerInfo, - void * pNetworkCredentialInfo, - const IotNetworkInterface_t * pNetworkInterface, - IotMqttConnection_t * pMqttConnection ) -{ - int status = EXIT_SUCCESS; - IotMqttError_t connectStatus = IOT_MQTT_STATUS_PENDING; - IotMqttNetworkInfo_t networkInfo = IOT_MQTT_NETWORK_INFO_INITIALIZER; - IotMqttConnectInfo_t connectInfo = IOT_MQTT_CONNECT_INFO_INITIALIZER; - - if( pIdentifier == NULL ) - { - IotLogError( "Defender Thing Name must be provided." ); - - status = EXIT_FAILURE; - } - - if( status == EXIT_SUCCESS ) - { - /* Set the members of the network info not set by the initializer. This - * struct provided information on the transport layer to the MQTT connection. */ - networkInfo.createNetworkConnection = true; - networkInfo.u.setup.pNetworkServerInfo = pNetworkServerInfo; - networkInfo.u.setup.pNetworkCredentialInfo = pNetworkCredentialInfo; - networkInfo.pNetworkInterface = pNetworkInterface; - - /* Set the members of the connection info not set by the initializer. */ - connectInfo.awsIotMqttMode = true; - connectInfo.cleanSession = true; - connectInfo.keepAliveSeconds = KEEP_ALIVE_SECONDS; - - /* AWS IoT recommends the use of the Thing Name as the MQTT client ID. */ - connectInfo.pClientIdentifier = pIdentifier; - connectInfo.clientIdentifierLength = ( uint16_t ) strlen( pIdentifier ); - - IotLogInfo( "Defender Thing Name is %.*s (length %hu).", - connectInfo.clientIdentifierLength, - connectInfo.pClientIdentifier, - connectInfo.clientIdentifierLength ); - - /* Establish the MQTT connection. */ - connectStatus = IotMqtt_Connect( &networkInfo, - &connectInfo, - TIMEOUT_MS, - pMqttConnection ); - - if( connectStatus != IOT_MQTT_SUCCESS ) - { - IotLogError( "MQTT CONNECT returned error %s.", - IotMqtt_strerror( connectStatus ) ); - - status = EXIT_FAILURE; - } - } - - return status; -} -/*-----------------------------------------------------------*/ - -/** - * @brief The function that runs the Defender demo, called by the demo runner. - * - * @param[in] awsIotMqttMode Ignored for the Defender demo. - * @param[in] pIdentifier NULL-terminated Defender Thing Name. - * @param[in] pNetworkServerInfo Passed to the MQTT connect function when - * establishing the MQTT connection for Defender. - * @param[in] pNetworkCredentialInfo Passed to the MQTT connect function when - * establishing the MQTT connection for Defender. - * @param[in] pNetworkInterface The network interface to use for this demo. - * - * @return `EXIT_SUCCESS` if the demo completes successfully; `EXIT_FAILURE` otherwise. - */ -int RunDefenderDemo( bool awsIotMqttMode, - const char * pIdentifier, - void * pNetworkServerInfo, - void * pNetworkCredentialInfo, - const IotNetworkInterface_t * pNetworkInterface ) -{ - int status = EXIT_SUCCESS; - bool metricsInitStatus = false; - bool metricsAccepted = false; - IotMqttError_t mqttStatus = IOT_MQTT_INIT_FAILED; - AwsIotDefenderError_t defenderResult = AWS_IOT_DEFENDER_INTERNAL_FAILURE; - AwsIotDefenderStartInfo_t startInfo = AWS_IOT_DEFENDER_START_INFO_INITIALIZER; - const AwsIotDefenderCallback_t callback = { .function = _defenderCallback, .pCallbackContext = &metricsAccepted }; - IotMqttConnection_t mqttConnection = IOT_MQTT_CONNECTION_INITIALIZER; - - /* Unused parameters. */ - ( void ) awsIotMqttMode; - - IotLogInfo( "----Device Defender Demo Start----" ); - - /* Check parameter(s). */ - if( ( pIdentifier == NULL ) || ( pIdentifier[ 0 ] == '\0' ) ) - { - IotLogError( "The length of the Thing Name (identifier) must be nonzero." ); - status = EXIT_FAILURE; - } - - if( status == EXIT_SUCCESS ) - { - /* Initialize the MQTT library. */ - mqttStatus = IotMqtt_Init(); - - if( mqttStatus != IOT_MQTT_SUCCESS ) - { - IotLogError( "MQTT Initialization Failed." ); - status = EXIT_FAILURE; - } - } - - if( status == EXIT_SUCCESS ) - { - /* Initialize Metrics. */ - metricsInitStatus = IotMetrics_Init(); - - if( !metricsInitStatus ) - { - IotLogError( "IOT Metrics Initialization Failed." ); - status = EXIT_FAILURE; - } - } - - if( status == EXIT_SUCCESS ) - { - /* Specify all metrics in "tcp connections" group */ - defenderResult = - AwsIotDefender_SetMetrics( AWS_IOT_DEFENDER_METRICS_TCP_CONNECTIONS, AWS_IOT_DEFENDER_METRICS_ALL ); - - if( defenderResult != AWS_IOT_DEFENDER_SUCCESS ) - { - status = EXIT_FAILURE; - } - } - - if( status == EXIT_SUCCESS ) - { - /* Set metrics report period */ - defenderResult = AwsIotDefender_SetPeriod( DEFENDER_PUBLISH_INTERVAL ); - - if( defenderResult != AWS_IOT_DEFENDER_SUCCESS ) - { - status = EXIT_FAILURE; - } - } - - if( status == EXIT_SUCCESS ) - { - /* Create MQTT Connection */ - status = _establishMqttConnection( pIdentifier, - pNetworkServerInfo, - pNetworkCredentialInfo, - pNetworkInterface, - &mqttConnection ); - - if( status != EXIT_SUCCESS ) - { - IotLogError( "Failed to create the MQTT Connection." ); - IotMqtt_Cleanup(); - defenderResult = AWS_IOT_DEFENDER_INTERNAL_FAILURE; - } - } - - if( status == EXIT_SUCCESS ) - { - /* Initialize start info and call defender Start API */ - startInfo.pClientIdentifier = pIdentifier; - startInfo.clientIdentifierLength = ( uint16_t ) strlen( pIdentifier ); - startInfo.callback = callback; - startInfo.mqttConnection = mqttConnection; - defenderResult = AwsIotDefender_Start( &startInfo ); - - if( defenderResult == AWS_IOT_DEFENDER_SUCCESS ) - { - /* Let the Device Defender Library run for 3 seconds before stopping. - * This is to allow enough time for the AWS IoT Device Defender - * Service to accept the metrics report. - * - * The following happens when the metrics report is accepted by the AWS IoT - * Device Defender Service: - * - * 1. The application is notified in _defenderCallback() with an event - * type of AWS_IOT_DEFENDER_METRICS_ACCEPTED. In this demo, the - * callback sets the variable metricsAccepted to true which is passed - * as the callback context. - * 2. The Defender library prints "Metrics report was accepted by - * defender service." - * - * It is okay to pass the local variable metricsAccepted in the callback - * context because the Device Defender Library is stopped in this function - * itself. Therefore, the callback can never execute after this function - * has exited. - */ - IotClock_SleepMs( 3000 ); - /* Stop the defender agent. */ - AwsIotDefender_Stop(); - /* Disconnect MQTT */ - IotMqtt_Disconnect( mqttConnection, false ); - } - else - { - status = EXIT_FAILURE; - IotLogError( "AwsIotDefender_Start() returned with error status %s.", - AwsIotDefender_strerror( defenderResult ) ); - } - } - - /* Cleanup. */ - if( metricsInitStatus ) - { - IotMetrics_Cleanup(); - } - - if( mqttStatus == IOT_MQTT_SUCCESS ) - { - IotMqtt_Cleanup(); - } - - /* The demo is successful only if the metrics were accepted by - * the AWS IoT Device Defender Service. */ - if( metricsAccepted == false ) - { - status = EXIT_FAILURE; - } - - IotLogInfo( "----Device Defender Demo End. Status: %s----.", AwsIotDefender_strerror( defenderResult ) ); - return status; -} - -/*-----------------------------------------------------------*/ diff --git a/demos/demo_runner/aws_demo.c b/demos/demo_runner/aws_demo.c index 6c67f270d97..3aae7becea7 100644 --- a/demos/demo_runner/aws_demo.c +++ b/demos/demo_runner/aws_demo.c @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/demo_runner/aws_demo_network_addr.c b/demos/demo_runner/aws_demo_network_addr.c index c197159cbc4..132cd4f373b 100644 --- a/demos/demo_runner/aws_demo_network_addr.c +++ b/demos/demo_runner/aws_demo_network_addr.c @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/demo_runner/aws_demo_version.c b/demos/demo_runner/aws_demo_version.c index fd8db913060..bd56d4ad005 100644 --- a/demos/demo_runner/aws_demo_version.c +++ b/demos/demo_runner/aws_demo_version.c @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/demo_runner/iot_demo_freertos.c b/demos/demo_runner/iot_demo_freertos.c index b00cb266b67..9681bbb959f 100644 --- a/demos/demo_runner/iot_demo_freertos.c +++ b/demos/demo_runner/iot_demo_freertos.c @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/demo_runner/iot_demo_runner.c b/demos/demo_runner/iot_demo_runner.c index 3a179ce87c2..6c03003d4ea 100644 --- a/demos/demo_runner/iot_demo_runner.c +++ b/demos/demo_runner/iot_demo_runner.c @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/dev_mode_key_provisioning/include/aws_dev_mode_key_provisioning.h b/demos/dev_mode_key_provisioning/include/aws_dev_mode_key_provisioning.h index 130b24170b3..1afe2721f99 100644 --- a/demos/dev_mode_key_provisioning/include/aws_dev_mode_key_provisioning.h +++ b/demos/dev_mode_key_provisioning/include/aws_dev_mode_key_provisioning.h @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/dev_mode_key_provisioning/src/aws_dev_mode_key_provisioning.c b/demos/dev_mode_key_provisioning/src/aws_dev_mode_key_provisioning.c index fd1f5d1040e..23b8873393a 100644 --- a/demos/dev_mode_key_provisioning/src/aws_dev_mode_key_provisioning.c +++ b/demos/dev_mode_key_provisioning/src/aws_dev_mode_key_provisioning.c @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -748,6 +748,7 @@ CK_RV xDestroyProvidedObjects( CK_SESSION_HANDLE xSession, xResult = xFindObjectWithLabelAndClass( xSession, ( char * ) pxLabel, + strlen( ( char * ) pxLabel ), xClass[ uiIndex ], &xObjectHandle ); @@ -763,6 +764,7 @@ CK_RV xDestroyProvidedObjects( CK_SESSION_HANDLE xSession, { xResult = xFindObjectWithLabelAndClass( xSession, ( char * ) pxLabel, + strlen( ( char * ) pxLabel ), xClass[ uiIndex ], &xObjectHandle ); } @@ -924,6 +926,7 @@ static CK_RV prvGetProvisionedState( CK_SESSION_HANDLE xSession, { xResult = xFindObjectWithLabelAndClass( xSession, pkcs11configLABEL_DEVICE_PRIVATE_KEY_FOR_TLS, + sizeof( pkcs11configLABEL_DEVICE_PRIVATE_KEY_FOR_TLS ) - 1, CKO_PRIVATE_KEY, &pxProvisionedState->xPrivateKey ); } @@ -933,6 +936,7 @@ static CK_RV prvGetProvisionedState( CK_SESSION_HANDLE xSession, /* Check also for the corresponding public. */ xResult = xFindObjectWithLabelAndClass( xSession, pkcs11configLABEL_DEVICE_PUBLIC_KEY_FOR_TLS, + sizeof( pkcs11configLABEL_DEVICE_PUBLIC_KEY_FOR_TLS ) - 1, CKO_PUBLIC_KEY, &pxProvisionedState->xPublicKey ); } @@ -951,6 +955,7 @@ static CK_RV prvGetProvisionedState( CK_SESSION_HANDLE xSession, { xResult = xFindObjectWithLabelAndClass( xSession, pkcs11configLABEL_DEVICE_CERTIFICATE_FOR_TLS, + sizeof( pkcs11configLABEL_DEVICE_CERTIFICATE_FOR_TLS ) - 1, CKO_CERTIFICATE, &pxProvisionedState->xClientCertificate ); } diff --git a/demos/device_defender_for_aws/CMakeLists.txt b/demos/device_defender_for_aws/CMakeLists.txt new file mode 100644 index 00000000000..c146bce50b2 --- /dev/null +++ b/demos/device_defender_for_aws/CMakeLists.txt @@ -0,0 +1,101 @@ +# Demo module for AWS IoT Defender. +afr_demo_module(device_defender) + +afr_set_demo_metadata(ID "DEVICE_DEFENDER_DEMO") +afr_set_demo_metadata(DESCRIPTION "An example that demonstrates the use of the AWS IoT Defender library.") + +# Add the CMakeLists.txt file of module to metadata list. +afr_module_cmake_files(${AFR_CURRENT_MODULE} + ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt +) + +afr_module_sources( + ${AFR_CURRENT_MODULE} + INTERFACE + "${CMAKE_CURRENT_LIST_DIR}/defender_demo.c" + "${CMAKE_CURRENT_LIST_DIR}/report_builder.c" + # List of header files added to the target so that these are available + # in code downloaded from the FreeRTOS console. + "${CMAKE_CURRENT_LIST_DIR}/report_builder.h" + "${CMAKE_CURRENT_LIST_DIR}/metrics_collector.h" +) + +afr_module_include_dirs( + ${AFR_CURRENT_MODULE} + INTERFACE + ${AFR_DEMOS_DIR}/common/mqtt_demo_helpers + ${CMAKE_CURRENT_LIST_DIR} +) + +afr_module_dependencies( + ${AFR_CURRENT_MODULE} + INTERFACE + AFR::mqtt_demo_helpers + AFR::core_json + AFR::device_defender + # Add dependency on the device_defender_demo_dependencies + # metadata module so that this demo is only shown when the + # Device Defender library is selected on the FreeRTOS console. + AFR::device_defender_demo_dependencies +) + +# The device defender demo collectes metrics using functions defined in +# metrics_collector.h. We provide an implementation of these functions for +# FreeRTOS+TCP and for LWIP in core locking mode. +# We check the availablitiy of FreeRTOS+TCP or supported lwIP in order to +# provide our metrics_collector implementations. +# If neither is available we include a stub implementation. + +# Metrics are supported on all FreeRTOS+TCP configurations, so if it is +# available we use it. +if(TARGET AFR::freertos_plus_tcp::mcu_port) + # Demo using FreeRTOS+TCP metrics + afr_set_demo_metadata(DISPLAY_NAME "Device Defender Demo (FreeRTOS+TCP)") + + afr_module_sources( + ${AFR_CURRENT_MODULE} + INTERFACE + "${CMAKE_CURRENT_LIST_DIR}/metrics_collector/freertos_plus_tcp/metrics_collector.c" + ) + + afr_module_dependencies( + ${AFR_CURRENT_MODULE} + INTERFACE + AFR::freertos_plus_tcp_utils + ) + +# The DEFENDER_METRICS_LWIP_SUPPORTED flag is defined in board configurations +# which support LWIP metrics collection. +elseif(${DEFENDER_METRICS_LWIP_SUPPORTED}) + # Demo using LWIP metrics + afr_set_demo_metadata(DISPLAY_NAME "Device Defender Demo (LWIP)") + + afr_module_sources( + ${AFR_CURRENT_MODULE} + INTERFACE + "${CMAKE_CURRENT_LIST_DIR}/metrics_collector/lwip/metrics_collector.c" + # List of header files added to the target so that these are available + # in code downloaded from the FreeRTOS console. + "${CMAKE_CURRENT_LIST_DIR}/metrics_collector/lwip/netif_port.h" + ) + + afr_module_include_dirs( + ${AFR_CURRENT_MODULE} + INTERFACE + ${CMAKE_CURRENT_LIST_DIR}/metrics_collector/lwip + ) + +# If both previous checks failed, we do not have an implemented +# metrics_collector available, and thus we use the stub implementation. +else() + # Demo using stubbed metrics for boards that do not support either + # FreeRTOS+TCP or lwIP. + afr_set_demo_metadata(DISPLAY_NAME "Device Defender Demo (Stubbed metrics)") + + afr_module_sources( + ${AFR_CURRENT_MODULE} + INTERFACE + "${CMAKE_CURRENT_LIST_DIR}/metrics_collector/stub/metrics_collector.c" + ) + +endif() diff --git a/demos/device_defender_for_aws/defender_demo.c b/demos/device_defender_for_aws/defender_demo.c new file mode 100644 index 00000000000..295748bc77b --- /dev/null +++ b/demos/device_defender_for_aws/defender_demo.c @@ -0,0 +1,694 @@ +/* + * FreeRTOS V202012.00 + * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://aws.amazon.com/freertos + * http://www.FreeRTOS.org + */ + +/* Standard includes. */ +#include +#include + +/* Demo config. */ +#include "defender_demo_config.h" + +/* Metrics collector. */ +#include "metrics_collector.h" + +/* Report builder. */ +#include "report_builder.h" + +/* MQTT operations. */ +#include "mqtt_demo_helpers.h" + +/* JSON Library. */ +#include "core_json.h" + +/* Device Defender Client Library. */ +#include "defender.h" + +/** + * @brief Predefined thing name. + * + * This is the example predefine thing name and could be compiled in ROM code. + */ +#define THING_NAME clientcredentialIOT_THING_NAME + +/** + * @brief The length of #THING_NAME. + */ +#define THING_NAME_LENGTH ( ( uint16_t ) ( sizeof( THING_NAME ) - 1 ) ) + +/** + * @brief Number of seconds to wait for the response from AWS IoT Device + * Defender service. + */ +#define DEFENDER_RESPONSE_WAIT_SECONDS ( 2 ) + +/** + * @brief The maximum number of times to run the loop in this demo. + */ +#ifndef DEFENDER_DEMO_MAX_ATTEMPTS + #define DEFENDER_DEMO_MAX_ATTEMPTS ( 3 ) +#endif + +/** + * @brief Time in ticks to wait between each iteration of the demo execution, + * in case a retry is required from demo execution failure. + */ +#define DELAY_BETWEEEN_DEMO_ATTEMPTS_TICKS ( pdMS_TO_TICKS( 5000U ) ) + +/** + * @brief Status values of the device defender report. + */ +typedef enum +{ + ReportStatusNotReceived, + ReportStatusAccepted, + ReportStatusRejected +} ReportStatus_t; +/*-----------------------------------------------------------*/ + +/** + * @brief The MQTT context used for MQTT operation. + */ +static MQTTContext_t mqttContext; + +/** + * @brief The network context used for OpenSSL operation. + */ +static NetworkContext_t networkContext; + +/** + * @brief Static buffer used to hold MQTT messages being sent and received. + */ +static uint8_t sharedBuffer[ NETWORK_BUFFER_SIZE ]; + +/** + * @brief Static buffer used to hold MQTT messages being sent and received. + */ +static MQTTFixedBuffer_t xBuffer = +{ + sharedBuffer, + NETWORK_BUFFER_SIZE +}; + +/** + * @brief Network Stats. + */ +static NetworkStats_t networkStats; + +/** + * @brief Open TCP ports array. + */ +static uint16_t openTcpPorts[ OPEN_TCP_PORTS_ARRAY_SIZE ]; + +/** + * @brief Open UDP ports array. + */ +static uint16_t openUdpPorts[ OPEN_UDP_PORTS_ARRAY_SIZE ]; + +/** + * @brief Established connections array. + */ +static Connection_t establishedConnections[ ESTABLISHED_CONNECTIONS_ARRAY_SIZE ]; + +/** + * @brief All the metrics sent in the device defender report. + */ +static ReportMetrics_t deviceMetrics; + +/** + * @brief Report status. + */ +static ReportStatus_t reportStatus; + +/** + * @brief Buffer for generating the device defender report. + */ +static char deviceMetricsJsonReport[ DEVICE_METRICS_REPORT_BUFFER_SIZE ]; + +/** + * @brief Report Id sent in the defender report. + */ +static uint32_t reportId = 0; +/*-----------------------------------------------------------*/ + +/** + * @brief Callback to receive the incoming publish messages from the MQTT broker. + * + * @param[in] pMqttContext MQTT context pointer. + * @param[in] pPacketInfo Information on the type of incoming MQTT packet. + * @param[in] pDeserializedInfo Deserialized information from incoming packet. + */ +static void publishCallback( MQTTContext_t * pMqttContext, + MQTTPacketInfo_t * pPacketInfo, + MQTTDeserializedInfo_t * pDeserializedInfo ); + +/** + * @brief Collect all the metrics to be sent in the device defender report. + * + * @return pdPASS if all the metrics are successfully collected; + * pdFAIL otherwise. + */ +static BaseType_t collectDeviceMetrics( void ); + +/** + * @brief Generate the device defender report. + * + * @param[out] pOutReportLength Length of the device defender report. + * + * @return pdPASS if the report is generated successfully; + * pdFAIL otherwise. + */ +static BaseType_t generateDeviceMetricsReport( uint32_t * pOutReportLength ); + +/** + * @brief Subscribe to the device defender topics. + * + * @param[in] pMqttContext MQTT context pointer. + * + * @return pdPASS if the subscribe is successful; + * pdFAIL otherwise. + */ +static BaseType_t subscribeToDefenderTopics( MQTTContext_t * pMqttContext ); + +/** + * @brief Unsubscribe from the device defender topics. + * + * @param[in] pMqttContext MQTT context pointer. + * + * @return pdPASS if the unsubscribe is successful; + * pdFAIL otherwise. + */ +static BaseType_t unsubscribeFromDefenderTopics( MQTTContext_t * pMqttContext ); + +/** + * @brief Validate the response received from the AWS IoT Device Defender Service. + * + * This functions checks that a valid JSON is received and the value of reportId + * is same as was sent in the published report. + * + * @param[in] defenderResponse The defender response to validate. + * @param[in] defenderResponseLength Length of the defender response. + * + * @return true if the response is valid; + * false otherwise. + */ +static bool validateDefenderResponse( const char * defenderResponse, + uint32_t defenderResponseLength ); +/*-----------------------------------------------------------*/ + +static bool validateDefenderResponse( const char * defenderResponse, + uint32_t defenderResponseLength ) +{ + bool status = false; + JSONStatus_t jsonResult = JSONSuccess; + char * reportIdString = NULL; + size_t reportIdStringLength; + uint32_t reportIdInResponse; + + /* Is the response a valid JSON? */ + jsonResult = JSON_Validate( defenderResponse, defenderResponseLength ); + + if( jsonResult != JSONSuccess ) + { + LogError( ( "Invalid response from AWS IoT Device Defender Service: %.*s.", + ( int ) defenderResponseLength, + defenderResponse ) ); + } + + if( jsonResult == JSONSuccess ) + { + /* Search the reportId key in the response. */ + jsonResult = JSON_Search( ( char * ) defenderResponse, + defenderResponseLength, + "reportId", + sizeof( "reportId" ) - 1, + &( reportIdString ), + &( reportIdStringLength ) ); + + if( jsonResult != JSONSuccess ) + { + LogError( ( "reportId key not found in the response from the" + "AWS IoT Device Defender Service: %.*s.", + ( int ) defenderResponseLength, + defenderResponse ) ); + } + } + + if( jsonResult == JSONSuccess ) + { + reportIdInResponse = ( uint32_t ) strtoul( reportIdString, NULL, 10 ); + + /* Is the reportId present in the response same as was sent in the + * published report? */ + if( reportIdInResponse == reportId ) + { + LogInfo( ( "A valid response with reportId %u received from the " + "AWS IoT Device Defender Service.", reportId ) ); + status = true; + } + else + { + LogError( ( "Unexpected reportId found in the response from the AWS" + "IoT Device Defender Service. Expected: %u, Found: %u, " + "Complete Response: %.*s.", + reportIdInResponse, + reportId, + ( int ) defenderResponseLength, + defenderResponse ) ); + } + } + + return status; +} +/*-----------------------------------------------------------*/ + +static void publishCallback( MQTTContext_t * pMqttContext, + MQTTPacketInfo_t * pPacketInfo, + MQTTDeserializedInfo_t * pDeserializedInfo ) +{ + DefenderStatus_t status; + DefenderTopic_t api; + bool validationResult; + MQTTPublishInfo_t * pPublishInfo = pDeserializedInfo->pPublishInfo; + + /* Silence compiler warnings about unused variables. */ + ( void ) pMqttContext; + + /* Handle incoming publish. The lower 4 bits of the publish packet + * type is used for the dup, QoS, and retain flags. Hence masking + * out the lower bits to check if the packet is publish. */ + if( ( pPacketInfo->type & 0xF0U ) == MQTT_PACKET_TYPE_PUBLISH ) + { + status = Defender_MatchTopic( pPublishInfo->pTopicName, + pPublishInfo->topicNameLength, + &( api ), + NULL, + NULL ); + + if( status == DefenderSuccess ) + { + if( api == DefenderJsonReportAccepted ) + { + /* Check if the response is valid and is for the report we published. */ + validationResult = validateDefenderResponse( pPublishInfo->pPayload, + pPublishInfo->payloadLength ); + + if( validationResult == true ) + { + LogInfo( ( "The defender report was accepted by the service. Response: %.*s.", + ( int ) pPublishInfo->payloadLength, + ( const char * ) pPublishInfo->pPayload ) ); + reportStatus = ReportStatusAccepted; + } + } + else if( api == DefenderJsonReportRejected ) + { + /* Check if the response is valid and is for the report we published. */ + validationResult = validateDefenderResponse( pPublishInfo->pPayload, + pPublishInfo->payloadLength ); + + if( validationResult == true ) + { + LogError( ( "The defender report was rejected by the service. Response: %.*s.", + ( int ) pPublishInfo->payloadLength, + ( const char * ) pPublishInfo->pPayload ) ); + reportStatus = ReportStatusRejected; + } + } + else + { + LogError( ( "Unexpected defender API : %d.", api ) ); + } + } + else + { + LogError( ( "Unexpected publish message received. Topic: %.*s, Payload: %.*s.", + ( int ) pPublishInfo->topicNameLength, + ( const char * ) pPublishInfo->pTopicName, + ( int ) pPublishInfo->payloadLength, + ( const char * ) ( pPublishInfo->pPayload ) ) ); + } + } + else + { + vHandleOtherIncomingPacket( pPacketInfo, pDeserializedInfo->packetIdentifier ); + } +} +/*-----------------------------------------------------------*/ + +static BaseType_t collectDeviceMetrics( void ) +{ + BaseType_t status = pdFAIL; + MetricsCollectorStatus_t metricsCollectorStatus; + uint32_t numOpenTcpPorts, numOpenUdpPorts, numEstablishedConnections; + + /* Collect bytes and packets sent and received. */ + metricsCollectorStatus = GetNetworkStats( &( networkStats ) ); + + if( metricsCollectorStatus != MetricsCollectorSuccess ) + { + LogError( ( "GetNetworkStats failed. Status: %d.", + metricsCollectorStatus ) ); + } + + /* Collect a list of open TCP ports. */ + if( metricsCollectorStatus == MetricsCollectorSuccess ) + { + metricsCollectorStatus = GetOpenTcpPorts( &( openTcpPorts[ 0 ] ), + OPEN_TCP_PORTS_ARRAY_SIZE, + &( numOpenTcpPorts ) ); + + if( metricsCollectorStatus != MetricsCollectorSuccess ) + { + LogError( ( "GetOpenTcpPorts failed. Status: %d.", + metricsCollectorStatus ) ); + } + } + + /* Collect a list of open UDP ports. */ + if( metricsCollectorStatus == MetricsCollectorSuccess ) + { + metricsCollectorStatus = GetOpenUdpPorts( &( openUdpPorts[ 0 ] ), + OPEN_UDP_PORTS_ARRAY_SIZE, + &( numOpenUdpPorts ) ); + + if( metricsCollectorStatus != MetricsCollectorSuccess ) + { + LogError( ( "GetOpenUdpPorts failed. Status: %d.", + metricsCollectorStatus ) ); + } + } + + /* Collect a list of established connections. */ + if( metricsCollectorStatus == MetricsCollectorSuccess ) + { + metricsCollectorStatus = GetEstablishedConnections( &( establishedConnections[ 0 ] ), + ESTABLISHED_CONNECTIONS_ARRAY_SIZE, + &( numEstablishedConnections ) ); + + if( metricsCollectorStatus != MetricsCollectorSuccess ) + { + LogError( ( "GetEstablishedConnections failed. Status: %d.", + metricsCollectorStatus ) ); + } + } + + /* Populate device metrics. */ + if( metricsCollectorStatus == MetricsCollectorSuccess ) + { + status = pdPASS; + deviceMetrics.pNetworkStats = &( networkStats ); + deviceMetrics.pOpenTcpPortsArray = &( openTcpPorts[ 0 ] ); + deviceMetrics.openTcpPortsArrayLength = numOpenTcpPorts; + deviceMetrics.pOpenUdpPortsArray = &( openUdpPorts[ 0 ] ); + deviceMetrics.openUdpPortsArrayLength = numOpenUdpPorts; + deviceMetrics.pEstablishedConnectionsArray = &( establishedConnections[ 0 ] ); + deviceMetrics.establishedConnectionsArrayLength = numEstablishedConnections; + } + + return status; +} +/*-----------------------------------------------------------*/ + +static BaseType_t subscribeToDefenderTopics( MQTTContext_t * pMqttContext ) +{ + BaseType_t status = pdFAIL; + + status = SubscribeToTopic( pMqttContext, + DEFENDER_API_JSON_ACCEPTED( THING_NAME ), + DEFENDER_API_LENGTH_JSON_ACCEPTED( THING_NAME_LENGTH ) ); + + if( status == pdPASS ) + { + status = SubscribeToTopic( pMqttContext, + DEFENDER_API_JSON_REJECTED( THING_NAME ), + DEFENDER_API_LENGTH_JSON_REJECTED( THING_NAME_LENGTH ) ); + } + + return status; +} +/*-----------------------------------------------------------*/ + +static BaseType_t unsubscribeFromDefenderTopics( MQTTContext_t * pMqttContext ) +{ + BaseType_t status = pdFAIL; + + status = UnsubscribeFromTopic( pMqttContext, + DEFENDER_API_JSON_ACCEPTED( THING_NAME ), + DEFENDER_API_LENGTH_JSON_ACCEPTED( THING_NAME_LENGTH ) ); + + if( status == pdPASS ) + { + status = UnsubscribeFromTopic( pMqttContext, + DEFENDER_API_JSON_REJECTED( THING_NAME ), + DEFENDER_API_LENGTH_JSON_REJECTED( THING_NAME_LENGTH ) ); + } + + return status; +} +/*-----------------------------------------------------------*/ + +static BaseType_t generateDeviceMetricsReport( uint32_t * pOutReportLength ) +{ + BaseType_t status = pdFAIL; + ReportBuilderStatus_t reportBuilderStatus; + + /* Generate the metrics report in the format expected by the AWS IoT Device + * Defender Service. */ + reportBuilderStatus = GenerateJsonReport( &( deviceMetricsJsonReport[ 0 ] ), + DEVICE_METRICS_REPORT_BUFFER_SIZE, + &( deviceMetrics ), + DEVICE_METRICS_REPORT_MAJOR_VERSION, + DEVICE_METRICS_REPORT_MINOR_VERSION, + reportId, + pOutReportLength ); + + if( reportBuilderStatus != ReportBuilderSuccess ) + { + LogError( ( "GenerateJsonReport failed. Status: %d.", + reportBuilderStatus ) ); + } + else + { + LogDebug( ( "Generated Report: %.*s.", + *pOutReportLength, + &( deviceMetricsJsonReport[ 0 ] ) ) ); + status = pdPASS; + } + + return status; +} +/*-----------------------------------------------------------*/ + +/** + * @brief The function that runs the Defender demo, called by the demo runner. + * + * @param[in] awsIotMqttMode Ignored for the Defender demo. + * @param[in] pIdentifier Ignored for the Defender demo. + * @param[in] pNetworkServerInfo Ignored for the Defender demo. + * @param[in] pNetworkCredentialInfo Ignored for the Defender demo. + * @param[in] pNetworkInterface Ignored for the Defender demo. + * + * @return `EXIT_SUCCESS` if the demo completes successfully; `EXIT_FAILURE` otherwise. + */ + +int RunDeviceDefenderDemo( bool awsIotMqttMode, + const char * pIdentifier, + void * pNetworkServerInfo, + void * pNetworkCredentialInfo, + const void * pNetworkInterface ) +{ + BaseType_t demoStatus = pdFAIL; + uint32_t reportLength = 0UL, i, mqttSessionEstablished = 0UL; + UBaseType_t demoRunCount = 0; + BaseType_t retryDemoLoop = pdFALSE; + + ( void ) awsIotMqttMode; + ( void ) pIdentifier; + ( void ) pNetworkServerInfo; + ( void ) pNetworkCredentialInfo; + ( void ) pNetworkInterface; + + /* This demo runs a single loop unless there are failures in the demo execution. + * In case of failures in the demo execution, demo loop will be retried for up to + * DEFENDER_DEMO_MAX_ATTEMPTS times. */ + do + { + /* Start with report not received. */ + reportStatus = ReportStatusNotReceived; + + /* Set a report Id to be used. + * + * !!!NOTE!!! + * This demo sets the report ID to xTaskGetTickCount(), which may collide + * if the device is reset. Reports for a Thing with a previously used + * report ID will be assumed to be duplicates and discarded by the Device + * Defender service. The report ID needs to be unique per report sent with + * a given Thing. We recommend using an increasing unique id such as the + * current timestamp. */ + reportId = ( uint32_t ) xTaskGetTickCount(); + + LogInfo( ( "Establishing MQTT session..." ) ); + demoStatus = EstablishMqttSession( &mqttContext, + &networkContext, + &xBuffer, + publishCallback ); + + if( demoStatus == pdFAIL ) + { + LogError( ( "Failed to establish MQTT session." ) ); + } + else + { + mqttSessionEstablished = 1; + } + + if( demoStatus == pdPASS ) + { + LogInfo( ( "Subscribing to defender topics..." ) ); + demoStatus = subscribeToDefenderTopics( &mqttContext ); + + if( demoStatus == pdFAIL ) + { + LogError( ( "Failed to subscribe to defender topics." ) ); + } + } + + if( demoStatus == pdPASS ) + { + LogInfo( ( "Collecting device metrics..." ) ); + demoStatus = collectDeviceMetrics(); + + if( demoStatus == pdFAIL ) + { + LogError( ( "Failed to collect device metrics." ) ); + } + } + + if( demoStatus == pdPASS ) + { + LogInfo( ( "Generating device defender report..." ) ); + demoStatus = generateDeviceMetricsReport( &( reportLength ) ); + + if( demoStatus == pdFAIL ) + { + LogError( ( "Failed to generate device defender report." ) ); + } + } + + if( demoStatus == pdPASS ) + { + LogInfo( ( "Publishing device defender report..." ) ); + demoStatus = PublishToTopic( &mqttContext, + DEFENDER_API_JSON_PUBLISH( THING_NAME ), + DEFENDER_API_LENGTH_JSON_PUBLISH( THING_NAME_LENGTH ), + &( deviceMetricsJsonReport[ 0 ] ), + reportLength ); + + if( demoStatus == pdFAIL ) + { + LogError( ( "Failed to publish device defender report." ) ); + } + } + + if( demoStatus == pdPASS ) + { + /* Note that PublishToTopic already called MQTT_ProcessLoop, therefore + * responses may have been received and the publishCallback may have + * been called. */ + for( i = 0; i < DEFENDER_RESPONSE_WAIT_SECONDS; i++ ) + { + /* reportStatus is updated in the publishCallback. */ + if( reportStatus != ReportStatusNotReceived ) + { + break; + } + + ( void ) ProcessLoop( &mqttContext, 1000 ); + } + } + + if( reportStatus == ReportStatusNotReceived ) + { + LogError( ( "Failed to receive response from AWS IoT Device Defender Service." ) ); + demoStatus = pdFAIL; + } + + /* Unsubscribe and disconnect if MQTT session was established. Per the MQTT + * protocol spec, it is okay to send UNSUBSCRIBE even if no corresponding + * subscription exists on the broker. Therefore, it is okay to attempt + * unsubscribe even if one more subscribe failed earlier. */ + if( mqttSessionEstablished == 1 ) + { + LogInfo( ( "Unsubscribing from defender topics..." ) ); + demoStatus = unsubscribeFromDefenderTopics( &mqttContext ); + + if( demoStatus == pdFAIL ) + { + LogError( ( "Failed to unsubscribe from defender topics." ) ); + } + + LogInfo( ( "Closing MQTT session..." ) ); + ( void ) DisconnectMqttSession( &mqttContext, &networkContext ); + } + + /* Increment the demo run count. */ + demoRunCount++; + + if( ( demoStatus == pdPASS ) && ( reportStatus == ReportStatusAccepted ) ) + { + LogInfo( ( "Demo completed successfully." ) ); + + /* Reset the flag for demo retry. */ + retryDemoLoop = pdFALSE; + } + else + { + demoStatus = pdFAIL; + + if( demoRunCount < DEFENDER_DEMO_MAX_ATTEMPTS ) + { + LogWarn( ( "Demo iteration %lu failed. Retrying...", + ( unsigned long ) demoRunCount ) ); + retryDemoLoop = pdTRUE; + + /* Clear the flag indicating successful MQTT session establishment + * before attempting a retry. */ + mqttSessionEstablished = 0; + + LogInfo( ( "A short delay before the next demo iteration." ) ); + vTaskDelay( DELAY_BETWEEEN_DEMO_ATTEMPTS_TICKS ); + } + else + { + LogError( ( "All %lu demo iterations failed.", + ( unsigned long ) DEFENDER_DEMO_MAX_ATTEMPTS ) ); + retryDemoLoop = pdFALSE; + } + } + } while( retryDemoLoop == pdTRUE ); + + return( ( demoStatus == pdPASS ) ? EXIT_SUCCESS : EXIT_FAILURE ); +} +/*-----------------------------------------------------------*/ diff --git a/demos/device_defender_for_aws/metrics_collector.h b/demos/device_defender_for_aws/metrics_collector.h new file mode 100644 index 00000000000..b069394370e --- /dev/null +++ b/demos/device_defender_for_aws/metrics_collector.h @@ -0,0 +1,140 @@ +/* + * FreeRTOS V202012.00 + * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://aws.amazon.com/freertos + * http://www.FreeRTOS.org + */ + +#ifndef __METRICS_COLLECTOR_H__ +#define __METRICS_COLLECTOR_H__ + +/* Standard includes. */ +#include + +/** + * @brief Return codes from metrics collector APIs. + */ +typedef enum +{ + MetricsCollectorSuccess = 0, + MetricsCollectorBadParameter, + MetricsCollectorCollectionFailed +} MetricsCollectorStatus_t; + +/** + * @brief Represents network stats. + */ +typedef struct NetworkStats +{ + uint32_t bytesReceived; /* Number of bytes received. */ + uint32_t bytesSent; /* Number of bytes sent. */ + uint32_t packetsReceived; /* Number of TCP packets received. */ + uint32_t packetsSent; /* Number of TCP packets sent. */ +} NetworkStats_t; + +/** + * @brief Represents a network connection. + */ +typedef struct Connection +{ + uint32_t localIp; + uint32_t remoteIp; + uint16_t localPort; + uint16_t remotePort; +} Connection_t; + +/** + * @brief Get network stats. + * + * @param[out] pOutNetworkStats The network stats. + * + * @return #MetricsCollectorSuccess if the network stats are successfully obtained; + * #MetricsCollectorBadParameter if invalid parameters are passed; + * #MetricsCollectorCollectionFailed if the collection methods failed. + */ +MetricsCollectorStatus_t GetNetworkStats( NetworkStats_t * pOutNetworkStats ); + +/** + * @brief Get a list of the open TCP ports. + * + * This function can be called with @p pOutTcpPortsArray NULL to get the number + * of the open TCP ports. + * + * @param[in] pOutTcpPortsArray The array to write the open TCP ports into. This + * can be NULL, if only the number of open ports is needed. + * @param[in] tcpPortsArrayLength Length of the pOutTcpPortsArray, if it is not + * NULL. + * @param[out] pOutNumTcpOpenPorts Number of open TCP ports if @p + * pOutTcpPortsArray NULL, else number of TCP ports written. + * + * @return #MetricsCollectorSuccess if open TCP ports are successfully obtained; + * #MetricsCollectorBadParameter if invalid parameters are passed; + * #MetricsCollectorCollectionFailed if the collection methods failed. + */ +MetricsCollectorStatus_t GetOpenTcpPorts( uint16_t * pOutTcpPortsArray, + uint32_t tcpPortsArrayLength, + uint32_t * pOutNumTcpOpenPorts ); + +/** + * @brief Get a list of the open UDP ports. + * + * This function can be called with @p pOutUdpPortsArray NULL to get the number + * of the open UDP ports. + * + * @param[in] pOutUdpPortsArray The array to write the open UDP ports into. Can + * be NULL, if only number of open ports is needed. + * @param[in] udpPortsArrayLength Length of the pOutUdpPortsArray, if it is not + * NULL. + * @param[out] pOutNumUdpOpenPorts Number of open UDP ports if @p + * pOutUdpPortsArray NULL, else number of UDP ports written. + * + * @return #MetricsCollectorSuccess if open UDP ports are successfully obtained; + * #MetricsCollectorBadParameter if invalid parameters are passed; + * #MetricsCollectorCollectionFailed if the collection methods failed. + */ +MetricsCollectorStatus_t GetOpenUdpPorts( uint16_t * pOutUdpPortsArray, + uint32_t udpPortsArrayLength, + uint32_t * pOutNumUdpOpenPorts ); + +/** + * @brief Get a list of established connections. + * + * This function can be called with @p pOutConnectionsArray NULL to get the + * number of established connections. + * + * @param[in] pOutConnectionsArray The array to write the established connections + * into. This can be NULL, if only the number of established connections is + * needed. + * @param[in] connectionsArrayLength Length of the pOutConnectionsArray, if it + * is not NULL. + * @param[out] pOutNumEstablishedConnections Number of the established connections. + * @param[out] pOutNumEstablishedConnections Number of established connections if @p + * pOutNumEstablishedConnections NULL, else number of established connections written. + * + * @return #MetricsCollectorSuccess if established connections are successfully obtained; + * #MetricsCollectorBadParameter if invalid parameters are passed; + * #MetricsCollectorCollectionFailed if the collection methods failed. + */ +MetricsCollectorStatus_t GetEstablishedConnections( Connection_t * pOutConnectionsArray, + uint32_t connectionsArrayLength, + uint32_t * pOutNumEstablishedConnections ); + +#endif /* __METRICS_COLLECTOR_H__ */ diff --git a/demos/device_defender_for_aws/metrics_collector/freertos_plus_tcp/metrics_collector.c b/demos/device_defender_for_aws/metrics_collector/freertos_plus_tcp/metrics_collector.c new file mode 100644 index 00000000000..3912fcaf993 --- /dev/null +++ b/demos/device_defender_for_aws/metrics_collector/freertos_plus_tcp/metrics_collector.c @@ -0,0 +1,252 @@ +/* + * FreeRTOS V202012.00 + * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * https://aws.amazon.com/freertos + * https://www.FreeRTOS.org + */ + +/** + * @file metrics_collector.c + * + * @brief Functions used by the defender demo to collect metrics on the + * device's open ports and sockets. FreeRTOS+TCP tcp_netstat utility + * is used to collect this metrics. + */ + +/* Standard includes. */ +#include +#include +#include +#include +#include + +/* FreeRTOS includes. */ +#include "FreeRTOS.h" +#include "FreeRTOS_IP.h" + +/* FreeRTOS+TCP tcp_netstat utility include. */ +#include "tcp_netstat.h" + +/* Demo config. */ +#include "defender_demo_config.h" + +/* Interface include. */ +#include "metrics_collector.h" +/*-----------------------------------------------------------*/ + +MetricsCollectorStatus_t GetNetworkStats( NetworkStats_t * pOutNetworkStats ) +{ + MetricsCollectorStatus_t status = MetricsCollectorCollectionFailed; + + MetricsType_t metrics = { 0 }; + BaseType_t metricsStatus = 0; + + configASSERT( pOutNetworkStats != NULL ); + + /* Start with everything as zero. */ + memset( pOutNetworkStats, 0, sizeof( NetworkStats_t ) ); + + /* Get metrics from FreeRTOS+TCP tcp_netstat utility. */ + metricsStatus = vGetMetrics( &metrics ); + + if( metricsStatus == 0 ) + { + /* Fill our response with values gotten from FreeRTOS+TCP. */ + LogDebug( ( "Network stats read. Bytes received: %u, packets received: %u, " + "bytes sent: %u, packets sent: %u.", + ( unsigned int ) metrics.xInput.uxByteCount, + ( unsigned int ) metrics.xInput.uxPacketCount, + ( unsigned int ) metrics.xOutput.uxByteCount, + ( unsigned int ) metrics.xOutput.uxPacketCount ) ); + + pOutNetworkStats->bytesReceived = metrics.xInput.uxByteCount; + pOutNetworkStats->packetsReceived = metrics.xInput.uxPacketCount; + pOutNetworkStats->bytesSent = metrics.xOutput.uxByteCount; + pOutNetworkStats->packetsSent = metrics.xOutput.uxPacketCount; + + status = MetricsCollectorSuccess; + } + + return status; +} +/*-----------------------------------------------------------*/ + +MetricsCollectorStatus_t GetOpenTcpPorts( uint16_t * pOutTcpPortsArray, + uint32_t tcpPortsArrayLength, + uint32_t * pOutNumTcpOpenPorts ) +{ + MetricsCollectorStatus_t status = MetricsCollectorCollectionFailed; + + MetricsType_t metrics = { 0 }; + BaseType_t metricsStatus = 0; + uint32_t copyAmount = 0UL; + + /* pOutTcpPortsArray can be NULL. */ + configASSERT( pOutNumTcpOpenPorts != NULL ); + + /* Get metrics from FreeRTOS+TCP tcp_netstat utility. */ + metricsStatus = vGetMetrics( &metrics ); + + if( metricsStatus == 0 ) + { + /* Fill the output array with as many TCP ports as will fit in the + * given array. */ + if( pOutTcpPortsArray != NULL ) + { + copyAmount = metrics.xTCPPortList.uxCount; + + /* Limit the copied ports to what can fit in the output array. */ + if( tcpPortsArrayLength < metrics.xTCPPortList.uxCount ) + { + LogWarn( ( "Ports returned truncated due to insufficient buffer size." ) ); + copyAmount = tcpPortsArrayLength; + } + + memcpy( pOutTcpPortsArray, &metrics.xTCPPortList.usTCPPortList, copyAmount * sizeof( uint16_t ) ); + + /* Return the number of elements copied to the array. */ + *pOutNumTcpOpenPorts = copyAmount; + } + else + { + /* Return the total number of open ports. */ + *pOutNumTcpOpenPorts = metrics.xTCPPortList.uxCount; + } + + status = MetricsCollectorSuccess; + } + + return status; +} +/*-----------------------------------------------------------*/ + +MetricsCollectorStatus_t GetOpenUdpPorts( uint16_t * pOutUdpPortsArray, + uint32_t udpPortsArrayLength, + uint32_t * pOutNumUdpOpenPorts ) +{ + MetricsCollectorStatus_t status = MetricsCollectorCollectionFailed; + + MetricsType_t metrics = { 0 }; + BaseType_t metricsStatus = 0; + uint32_t copyAmount = 0UL; + + /* pOutUdpPortsArray can be NULL. */ + configASSERT( pOutNumUdpOpenPorts != NULL ); + + /* Get metrics from FreeRTOS+TCP tcp_netstat utility. */ + metricsStatus = vGetMetrics( &metrics ); + + if( metricsStatus == 0 ) + { + /* Fill the output array with as many UDP ports as will fit in the + * given array. */ + if( pOutUdpPortsArray != NULL ) + { + copyAmount = metrics.xUDPPortList.uxCount; + + /* Limit the copied ports to what can fit in the output array. */ + if( udpPortsArrayLength < metrics.xUDPPortList.uxCount ) + { + LogWarn( ( "Ports returned truncated due to insufficient buffer size." ) ); + copyAmount = udpPortsArrayLength; + } + + memcpy( pOutUdpPortsArray, &metrics.xUDPPortList.usUDPPortList, copyAmount * sizeof( uint16_t ) ); + + /* Return the number of elements copied to the array. */ + *pOutNumUdpOpenPorts = copyAmount; + } + else + { + /* Return the total number of open ports. */ + *pOutNumUdpOpenPorts = metrics.xUDPPortList.uxCount; + } + + status = MetricsCollectorSuccess; + } + + return status; +} + +/*-----------------------------------------------------------*/ + +MetricsCollectorStatus_t GetEstablishedConnections( Connection_t * pOutConnectionsArray, + uint32_t connectionsArrayLength, + uint32_t * pOutNumEstablishedConnections ) +{ + MetricsCollectorStatus_t status = MetricsCollectorCollectionFailed; + + MetricsType_t metrics = { 0 }; + BaseType_t metricsStatus = 0; + uint32_t copyAmount = 0UL; + uint32_t localIp = 0UL; + uint32_t i; + + /* pOutConnectionsArray can be NULL. */ + configASSERT( pOutNumEstablishedConnections != NULL ); + + /* Get metrics from FreeRTOS+TCP tcp_netstat utility. */ + metricsStatus = vGetMetrics( &metrics ); + + if( metricsStatus == 0 ) + { + /* Fill the output array with as many TCP socket infos as will fit in + * the given array. */ + if( pOutConnectionsArray != NULL ) + { + copyAmount = metrics.xTCPSocketList.uxCount; + + /* Get local IP as the tcp_netstat utility does not give it. */ + localIp = FreeRTOS_GetIPAddress(); + + /* Limit the outputted connections to what can fit in the output array. */ + if( connectionsArrayLength < metrics.xTCPSocketList.uxCount ) + { + LogWarn( ( "Ports returned truncated due to insufficient buffer size." ) ); + copyAmount = connectionsArrayLength; + } + + for( i = 0; i < copyAmount; i++ ) + { + pOutConnectionsArray[ i ].localIp = localIp; + pOutConnectionsArray[ i ].localPort = + metrics.xTCPSocketList.xTCPList[ i ].usLocalPort; + pOutConnectionsArray[ i ].remoteIp = + metrics.xTCPSocketList.xTCPList[ i ].ulRemoteIP; + pOutConnectionsArray[ i ].remotePort = + metrics.xTCPSocketList.xTCPList[ i ].usRemotePort; + } + + /* Return the number of elements copied to the array. */ + *pOutNumEstablishedConnections = copyAmount; + } + else + { + /* Return the total number of established connections. */ + *pOutNumEstablishedConnections = metrics.xTCPSocketList.uxCount; + } + + status = MetricsCollectorSuccess; + } + + return status; +} +/*-----------------------------------------------------------*/ diff --git a/demos/device_defender_for_aws/metrics_collector/lwip/metrics_collector.c b/demos/device_defender_for_aws/metrics_collector/lwip/metrics_collector.c new file mode 100644 index 00000000000..33468e053ed --- /dev/null +++ b/demos/device_defender_for_aws/metrics_collector/lwip/metrics_collector.c @@ -0,0 +1,292 @@ +/* + * FreeRTOS V202012.00 + * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://aws.amazon.com/freertos + * http://www.FreeRTOS.org + */ + +/* Standard includes. */ +#include + +/* Demo config. */ +#include "defender_demo_config.h" + +/* Interface includes. */ +#include "metrics_collector.h" + +/* Lwip includes. */ +#include "lwip/arch.h" +#include "lwip/stats.h" +#include "lwip/tcpip.h" /* #define LOCK_TCPIP_CORE() sys_mutex_lock(&lock_tcpip_core) */ +#include "lwip/ip_addr.h" /* ip_addr_t, ipaddr_ntoa, ip_addr_copy */ +#include "lwip/tcp.h" /* struct tcp_pcb */ +#include "lwip/udp.h" /* struct udp_pcb */ +#include "lwip/priv/tcp_priv.h" /* tcp_listen_pcbs_t */ + +/* Lwip configuration includes. */ +#include "lwipopts.h" +#include "netif_port.h" + +#if !defined( LWIP_TCPIP_CORE_LOCKING ) || ( LWIP_TCPIP_CORE_LOCKING == 0 ) + #error "Network metrics are only supported in core locking mode. Please define LWIP_TCPIP_CORE_LOCKING to 1 in lwipopts.h." +#endif + +/* Helper macros to get bytes in/out and packets in/out. */ +#define LWIP_GET_PACKETS_IN() ( lwip_stats.mib2.ipinreceives ) +#define LWIP_GET_PACKETS_OUT() ( lwip_stats.mib2.ipoutrequests ) +#if ( LWIP_BYTES_IN_OUT_UNSUPPORTED == 0 ) + #define LWIP_GET_BYTES_IN() ( LWIP_NET_IF.mib2_counters.ifinoctets ) + #define LWIP_GET_BYTES_OUT() ( LWIP_NET_IF.mib2_counters.ifoutoctets ) +#else + #define LWIP_GET_BYTES_IN() ( 0 ) + #define LWIP_GET_BYTES_OUT() ( 0 ) +#endif /* LWIP_BYTES_IN_OUT_UNSUPPORTED == 1 */ + +/* Variables defined in the LWIP source code. */ +extern struct tcp_pcb * tcp_active_pcbs; /* List of all TCP PCBs that are in a state in which they accept or send data. */ +extern union tcp_listen_pcbs_t tcp_listen_pcbs; /* List of all TCP PCBs in LISTEN state. */ +extern struct udp_pcb * udp_pcbs; /* List of UDP PCBs. */ +/*-----------------------------------------------------------*/ + +MetricsCollectorStatus_t GetNetworkStats( NetworkStats_t * pOutNetworkStats ) +{ + MetricsCollectorStatus_t status = MetricsCollectorSuccess; + + if( pOutNetworkStats == NULL ) + { + LogError( ( "Invalid parameters. pOutNetworkStats: 0x%08x", pOutNetworkStats ) ); + status = MetricsCollectorBadParameter; + } + + if( status == MetricsCollectorSuccess ) + { + LOCK_TCPIP_CORE(); + + pOutNetworkStats->bytesReceived = LWIP_GET_BYTES_IN(); + pOutNetworkStats->bytesSent = LWIP_GET_BYTES_OUT(); + pOutNetworkStats->packetsReceived = LWIP_GET_PACKETS_IN(); + pOutNetworkStats->packetsSent = LWIP_GET_PACKETS_OUT(); + + UNLOCK_TCPIP_CORE(); + } + + return status; +} +/*-----------------------------------------------------------*/ + +MetricsCollectorStatus_t GetOpenTcpPorts( uint16_t * pOutTcpPortsArray, + uint32_t tcpPortsArrayLength, + uint32_t * pOutNumTcpOpenPorts ) +{ + MetricsCollectorStatus_t status = MetricsCollectorSuccess; + struct tcp_pcb_listen * pCurrPcb; + uint16_t pcbCnt = 0; + + if( ( ( pOutTcpPortsArray != NULL ) && ( tcpPortsArrayLength == 0 ) ) || + ( pOutNumTcpOpenPorts == NULL ) ) + { + LogError( ( "Invalid parameters. pOutTcpPortsArray: 0x%08x," + "tcpPortsArrayLength: %u, pOutNumTcpOpenPorts: 0x%08x.", + pOutTcpPortsArray, + tcpPortsArrayLength, + pOutNumTcpOpenPorts ) ); + status = MetricsCollectorBadParameter; + } + + if( status == MetricsCollectorSuccess ) + { + LOCK_TCPIP_CORE(); + + for( pCurrPcb = tcp_listen_pcbs.listen_pcbs; pCurrPcb != NULL; pCurrPcb = pCurrPcb->next ) + { + if( pOutTcpPortsArray != NULL ) + { + if( pcbCnt < tcpPortsArrayLength ) + { + pOutTcpPortsArray[ pcbCnt ] = pCurrPcb->local_port; + ++pcbCnt; + } + else + { + /* Break if the output array is full. */ + break; + } + } + else + { + ++pcbCnt; + } + } + + UNLOCK_TCPIP_CORE(); + } + + if( ( pOutTcpPortsArray != NULL ) && ( pcbCnt == tcpPortsArrayLength ) && ( pCurrPcb != NULL ) ) + { + LogWarn( ( "The pOutTcpPortsArray is not large enough to store all of the open TCP ports." ) ); + } + + if( status == MetricsCollectorSuccess ) + { + *pOutNumTcpOpenPorts = pcbCnt; + } + + return status; +} +/*-----------------------------------------------------------*/ + +MetricsCollectorStatus_t GetOpenUdpPorts( uint16_t * pOutUdpPortsArray, + uint32_t udpPortsArrayLength, + uint32_t * pOutNumUdpOpenPorts ) +{ + MetricsCollectorStatus_t status = MetricsCollectorSuccess; + struct udp_pcb * pCurrPcb; + uint16_t pcbCnt = 0; + + if( ( ( pOutUdpPortsArray != NULL ) && ( udpPortsArrayLength == 0 ) ) || + ( pOutNumUdpOpenPorts == NULL ) ) + { + LogError( ( "Invalid parameters. pOutUdpPortsArray: 0x%08x," + "udpPortsArrayLength: %u, pOutNumUdpOpenPorts: 0x%08x.", + pOutUdpPortsArray, + udpPortsArrayLength, + pOutNumUdpOpenPorts ) ); + status = MetricsCollectorBadParameter; + } + + if( status == MetricsCollectorSuccess ) + { + LOCK_TCPIP_CORE(); + + for( pCurrPcb = udp_pcbs; pCurrPcb != NULL; pCurrPcb = pCurrPcb->next ) + { + if( pOutUdpPortsArray != NULL ) + { + if( pcbCnt < udpPortsArrayLength ) + { + pOutUdpPortsArray[ pcbCnt ] = pCurrPcb->local_port; + ++pcbCnt; + } + else + { + /* Break if the output array is full. */ + break; + } + } + else + { + ++pcbCnt; + } + } + + UNLOCK_TCPIP_CORE(); + } + + if( ( pOutUdpPortsArray != NULL ) && ( pcbCnt == udpPortsArrayLength ) && ( pCurrPcb != NULL ) ) + { + LogWarn( ( "The pOutUdpPortsArray is not large enough to store all of the open UDP ports." ) ); + } + + if( status == MetricsCollectorSuccess ) + { + *pOutNumUdpOpenPorts = pcbCnt; + } + + return status; +} +/*-----------------------------------------------------------*/ + +MetricsCollectorStatus_t GetEstablishedConnections( Connection_t * pOutConnectionsArray, + uint32_t connectionsArrayLength, + uint32_t * pOutNumEstablishedConnections ) +{ + MetricsCollectorStatus_t status = MetricsCollectorSuccess; + struct tcp_pcb * pCurrPcb = tcp_active_pcbs; + uint16_t pcbCnt = 0; + Connection_t * pEstablishedConnection; + + if( ( ( pOutConnectionsArray != NULL ) && ( connectionsArrayLength == 0 ) ) || + ( pOutNumEstablishedConnections == NULL ) ) + { + LogError( ( "Invalid parameters. pOutConnectionsArray: 0x%08x," + " connectionsArrayLength: %u, pOutNumEstablishedConnections: 0x%08x.", + pOutConnectionsArray, + connectionsArrayLength, + pOutNumEstablishedConnections ) ); + status = MetricsCollectorBadParameter; + } + + if( status == MetricsCollectorSuccess ) + { + LOCK_TCPIP_CORE(); + + for( pCurrPcb = tcp_active_pcbs; pCurrPcb != NULL; pCurrPcb = pCurrPcb->next ) + { + if( pOutConnectionsArray != NULL ) + { + if( pcbCnt < connectionsArrayLength ) + { + /* The output array member to fill. */ + pEstablishedConnection = &( pOutConnectionsArray[ pcbCnt ] ); + + #if LWIP_IPV4 && LWIP_IPV6 + pEstablishedConnection->remoteIp = pCurrPcb->remote_ip.u_addr.ip4.addr; /* Network byte order. */ + pEstablishedConnection->localIp = pCurrPcb->local_ip.u_addr.ip4.addr; /* Network byte order. */ + #elif LWIP_IPV4 + pEstablishedConnection->remoteIp = pCurrPcb->remote_ip.addr; /* Network byte order. */ + pEstablishedConnection->localIp = pCurrPcb->local_ip.addr; /* Network byte order. */ + #else + #error "IPV6 only is not supported." + #endif + + pEstablishedConnection->localPort = pCurrPcb->local_port; /* Host byte order. */ + pEstablishedConnection->remotePort = pCurrPcb->remote_port; /* Host byte order. */ + + ++pcbCnt; + } + else + { + /* Break if the output array is full. */ + break; + } + } + else + { + ++pcbCnt; + } + } + + UNLOCK_TCPIP_CORE(); + } + + if( ( pOutConnectionsArray != NULL ) && ( pcbCnt == connectionsArrayLength ) && ( pCurrPcb != NULL ) ) + { + LogWarn( ( "The pOutConnectionsArray is not large enough to store all of the established connections." ) ); + } + + if( status == MetricsCollectorSuccess ) + { + *pOutNumEstablishedConnections = pcbCnt; + } + + return status; +} +/*-----------------------------------------------------------*/ diff --git a/demos/device_defender_for_aws/metrics_collector/lwip/netif_port.h b/demos/device_defender_for_aws/metrics_collector/lwip/netif_port.h new file mode 100644 index 00000000000..de70f72d5cd --- /dev/null +++ b/demos/device_defender_for_aws/metrics_collector/lwip/netif_port.h @@ -0,0 +1,47 @@ +/* + * FreeRTOS V202012.00 + * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://aws.amazon.com/freertos + * http://www.FreeRTOS.org + */ + +#ifndef __NETIF_PORT_H__ +#define __NETIF_PORT_H__ + +/* The LWIP network metric bytes-in and bytes-out need the support from LWIP + * network interface port. The bytes counts are implemented in the board + * LWIP network interface port. The metric collector reads the bytes-in and + * bytes-out data from a LWIP netif structure defined in the board LWIP network + */ + +/* Boards netif port configurations. */ +#ifdef MT7697HX_DEV_KIT + /* Extern netif variables from board's port. */ + extern struct netif sta_if, ap_if; + +/* This define is used by metrics_collector.c to read the number of + * bytes-in/out. */ + #define LWIP_NET_IF sta_if +#else + #define LWIP_BYTES_IN_OUT_UNSUPPORTED 1 +#endif + +#endif /* __NETIF_PORT_H__ */ diff --git a/demos/device_defender_for_aws/metrics_collector/stub/metrics_collector.c b/demos/device_defender_for_aws/metrics_collector/stub/metrics_collector.c new file mode 100644 index 00000000000..08363aab5c8 --- /dev/null +++ b/demos/device_defender_for_aws/metrics_collector/stub/metrics_collector.c @@ -0,0 +1,202 @@ +/* + * FreeRTOS V202012.00 + * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * https://aws.amazon.com/freertos + * https://www.FreeRTOS.org + */ + +/** + * @file metrics_collector.c + * + * @brief Functions used by the defender demo to collect networking metrics. + * This file is a stub which returns zero for all metrics. In order to report + * correct metrics, the functions in this file must be implemented for the + * target platform's network stack. + * Here are reference implementations for the FreeRTOS+TCP and LWIP network stacks: + * + * FreeRTOS+TCP: + * If you are using FreeRTOS+TCP, use the metrics_collector.c file + * available at + * [FreeRTOS+TCP metrics_collector implementation](https://github.com/aws/amazon-freertos/blob/master/demos/device_defender_for_aws/metrics_collector/freertos_plus_tcp/metrics_collector.c). + * + * LWIP: + * If you are using LWIP, use the metrics_collector.c available at + * [LWIP metrics_collector implementation](https://github.com/aws/amazon-freertos/blob/master/demos/device_defender_for_aws/metrics_collector/lwip/metrics_collector.c). + * + * In addition, define the following macros in your lwipopts.h: + * #define LINK_SPEED_OF_YOUR_NETIF_IN_BPS 0 + * #define LWIP_TCPIP_CORE_LOCKING 1 + * #define LWIP_STATS 1 + * #define MIB2_STATS 1 + */ + +/* Standard includes. */ +#include +#include + +/* FreeRTOS includes. */ +#include "FreeRTOS.h" +#include "task.h" + +/* Demo config. */ +#include "defender_demo_config.h" + +/* Interface include. */ +#include "metrics_collector.h" +/*-----------------------------------------------------------*/ + +MetricsCollectorStatus_t GetNetworkStats( NetworkStats_t * pOutNetworkStats ) +{ + MetricsCollectorStatus_t status = MetricsCollectorSuccess; + + if( pOutNetworkStats == NULL ) + { + status = MetricsCollectorBadParameter; + } + + if( status == MetricsCollectorSuccess ) + { + /* Initialize everything to zero. */ + memset( pOutNetworkStats, 0, sizeof( NetworkStats_t ) ); + + /* Take a look at the comments at the top of this file. */ + LogError( ( "Using stub definition of GetNetworkStats! " + "Please implement for your network stack to get correct metrics." ) ); + + pOutNetworkStats->bytesReceived = 0; + pOutNetworkStats->packetsReceived = 0; + pOutNetworkStats->bytesSent = 0; + pOutNetworkStats->packetsSent = 0; + } + + return status; +} +/*-----------------------------------------------------------*/ + +MetricsCollectorStatus_t GetOpenTcpPorts( uint16_t * pOutTcpPortsArray, + uint32_t tcpPortsArrayLength, + uint32_t * pOutNumTcpOpenPorts ) +{ + MetricsCollectorStatus_t status = MetricsCollectorSuccess; + + /* pOutTcpPortsArray can be NULL. */ + if( pOutNumTcpOpenPorts == NULL ) + { + status = MetricsCollectorBadParameter; + } + + if( status == MetricsCollectorSuccess ) + { + /* Take a look at the comments at the top of this file. */ + LogError( ( "Using stub definition of GetOpenTcpPorts! " + "Please implement for your network stack to get correct metrics." ) ); + + if( pOutTcpPortsArray != NULL ) + { + /* Fill the output array with as many TCP ports as will fit in the + * given array. */ + + /* Return the number of elements copied to the array. */ + *pOutNumTcpOpenPorts = 0; + } + else + { + /* Return the total number of open ports. */ + *pOutNumTcpOpenPorts = 0; + } + } + + return status; +} +/*-----------------------------------------------------------*/ + +MetricsCollectorStatus_t GetOpenUdpPorts( uint16_t * pOutUdpPortsArray, + uint32_t udpPortsArrayLength, + uint32_t * pOutNumUdpOpenPorts ) +{ + MetricsCollectorStatus_t status = MetricsCollectorSuccess; + + if( pOutNumUdpOpenPorts == NULL ) + { + status = MetricsCollectorBadParameter; + } + + if( status == MetricsCollectorSuccess ) + { + /* Take a look at the comments at the top of this file. */ + LogError( ( "Using stub definition of GetOpenUdpPorts! " + "Please implement for your network stack to get correct metrics." ) ); + + if( pOutUdpPortsArray != NULL ) + { + /* Fill the output array with as many UDP ports as will fit in the + * given array. */ + + /* Return the number of elements copied to the array. */ + *pOutNumUdpOpenPorts = 0; + } + else + { + /* Return the total number of open ports. */ + *pOutNumUdpOpenPorts = 0; + } + } + + return status; +} + +/*-----------------------------------------------------------*/ + +MetricsCollectorStatus_t GetEstablishedConnections( Connection_t * pOutConnectionsArray, + uint32_t connectionsArrayLength, + uint32_t * pOutNumEstablishedConnections ) +{ + MetricsCollectorStatus_t status = MetricsCollectorSuccess; + + if( pOutNumEstablishedConnections == NULL ) + { + status = MetricsCollectorBadParameter; + } + + if( status == MetricsCollectorSuccess ) + { + /* Take a look at the comments at the top of this file. */ + LogError( ( "Using stub definition of GetEstablishedConnections! " + "Please implement for your network stack to get correct metrics." ) ); + + if( pOutConnectionsArray != NULL ) + { + /* Fill the output array with as many TCP socket infos as will fit in + * the given array. */ + + /* Return the number of elements copied to the array. */ + *pOutNumEstablishedConnections = 0; + } + else + { + /* Return the total number of established connections. */ + *pOutNumEstablishedConnections = 0; + } + } + + return status; +} +/*-----------------------------------------------------------*/ diff --git a/demos/device_defender_for_aws/report_builder.c b/demos/device_defender_for_aws/report_builder.c new file mode 100644 index 00000000000..28fedf3e169 --- /dev/null +++ b/demos/device_defender_for_aws/report_builder.c @@ -0,0 +1,492 @@ +/* + * FreeRTOS V202012.00 + * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://aws.amazon.com/freertos + * http://www.FreeRTOS.org + */ + +/* Standard includes. */ +#include +#include + +/* Demo config. */ +#include "defender_demo_config.h" + +/* Interface include. */ +#include "report_builder.h" + +/* Various JSON characters. */ +#define JSON_ARRAY_OPEN_MARKER '[' +#define JSON_ARRAY_CLOSE_MARKER ']' +#define JSON_ARRAY_OBJECT_SEPARATOR ',' + +/* Helper macro to check if snprintf was successful. */ +#define SNPRINTF_SUCCESS( retVal, bufLen ) ( ( retVal > 0 ) && ( ( uint32_t ) retVal < bufLen ) ) + +/* Formats used to generate the JSON report. */ +#define JSON_PORT_OBJECT_FORMAT \ + "{" \ + "\"port\": %u" \ + "}," + +#define JSON_CONNECTION_OBJECT_FORMAT \ + "{" \ + "\"local_port\": %u," \ + "\"remote_addr\": \"%u.%u.%u.%u:%u\"" \ + "}," + +#define JSON_REPORT_FORMAT_PART1 \ + "{" \ + "\"header\": {" \ + "\"report_id\": %u," \ + "\"version\": \"%u.%u\"" \ + "}," \ + "\"metrics\": {" \ + "\"listening_tcp_ports\": {" \ + "\"ports\": " + +#define JSON_REPORT_FORMAT_PART2 \ + "," \ + "\"total\": %u" \ + "}," \ + "\"listening_udp_ports\": {" \ + "\"ports\": " + +#define JSON_REPORT_FORMAT_PART3 \ + "," \ + "\"total\": %u" \ + "}," \ + "\"network_stats\": {" \ + "\"bytes_in\": %u," \ + "\"bytes_out\": %u," \ + "\"packets_in\": %u," \ + "\"packets_out\": %u" \ + "}," \ + "\"tcp_connections\": {" \ + "\"established_connections\": {" \ + "\"connections\": " + +#define JSON_REPORT_FORMAT_PART4 \ + "," \ + "\"total\": %u" \ + "}" \ + "}" \ + "}" \ + "}" +/*-----------------------------------------------------------*/ + +/** + * @brief Write ports array to the given buffer in the format expected by the + * AWS IoT Device Defender Service. + * + * This function writes an array of the following format: + * [ + * { + * "port":44207 + * }, + * { + * "port":53 + * } + * ] + * + * @param[in] pBuffer The buffer to write the ports array. + * @param[in] bufferLength The length of the buffer. + * @param[in] pOpenPortsArray The array containing the open ports. + * @param[in] openPortsArrayLength Length of the pOpenPortsArray array. + * @param[out] pOutCharsWritten Number of characters written to the buffer. + * + * @return #ReportBuilderSuccess if the array is successfully written; + * #ReportBuilderBufferTooSmall if the buffer cannot hold the full array. + */ +static ReportBuilderStatus_t writePortsArray( char * pBuffer, + uint32_t bufferLength, + const uint16_t * pOpenPortsArray, + uint32_t openPortsArrayLength, + uint32_t * pOutCharsWritten ); + +/** + * @brief Write established connections array to the given buffer in the format + * expected by the AWS IoT Device Defender Service. + * + * This function write array of the following format: + * [ + * { + * "local_port":44207, + * "remote_addr":"127.0.0.1:45148" + * }, + * { + * "local_port":22, + * "remote_addr":"24.16.237.194:63552" + * } + * ] + * + * @param[in] pBuffer The buffer to write the connections array. + * @param[in] bufferLength The length of the buffer. + * @param[in] pConnectionsArray The array containing the established connections. + * @param[in] connectionsArrayLength Length of the pConnectionsArray array. + * @param[out] pOutCharsWritten Number of characters written to the buffer. + * + * @return #ReportBuilderSuccess if the array is successfully written; + * #ReportBuilderBufferTooSmall if the buffer cannot hold the full array. + */ +static ReportBuilderStatus_t writeConnectionsArray( char * pBuffer, + uint32_t bufferLength, + const Connection_t * pConnectionsArray, + uint32_t connectionsArrayLength, + uint32_t * pOutCharsWritten ); +/*-----------------------------------------------------------*/ + +static ReportBuilderStatus_t writePortsArray( char * pBuffer, + uint32_t bufferLength, + const uint16_t * pOpenPortsArray, + uint32_t openPortsArrayLength, + uint32_t * pOutCharsWritten ) +{ + char * pCurrentWritePos = pBuffer; + uint32_t i, remainingBufferLength = bufferLength; + int charactersWritten; + ReportBuilderStatus_t status = ReportBuilderSuccess; + + /* Write the JSON array open marker. */ + if( remainingBufferLength > 1 ) + { + *pCurrentWritePos = JSON_ARRAY_OPEN_MARKER; + remainingBufferLength -= 1; + pCurrentWritePos += 1; + } + else + { + status = ReportBuilderBufferTooSmall; + } + + /* Write the array elements. */ + for( i = 0; ( ( i < openPortsArrayLength ) && ( status == ReportBuilderSuccess ) ); i++ ) + { + charactersWritten = snprintf( pCurrentWritePos, + remainingBufferLength, + JSON_PORT_OBJECT_FORMAT, + pOpenPortsArray[ i ] ); + + if( !SNPRINTF_SUCCESS( charactersWritten, remainingBufferLength ) ) + { + status = ReportBuilderBufferTooSmall; + break; + } + else + { + remainingBufferLength -= ( uint32_t ) charactersWritten; + pCurrentWritePos += charactersWritten; + } + } + + if( status == ReportBuilderSuccess ) + { + /* Discard the last comma. */ + if( openPortsArrayLength > 0 ) + { + pCurrentWritePos -= 1; + remainingBufferLength += 1; + } + + /* Write the JSON array close marker. */ + if( remainingBufferLength > 1 ) + { + *pCurrentWritePos = JSON_ARRAY_CLOSE_MARKER; + remainingBufferLength -= 1; + pCurrentWritePos += 1; + } + else + { + status = ReportBuilderBufferTooSmall; + } + } + + if( status == ReportBuilderSuccess ) + { + *pOutCharsWritten = bufferLength - remainingBufferLength; + } + + return status; +} +/*-----------------------------------------------------------*/ + +static ReportBuilderStatus_t writeConnectionsArray( char * pBuffer, + uint32_t bufferLength, + const Connection_t * pConnectionsArray, + uint32_t connectionsArrayLength, + uint32_t * pOutCharsWritten ) +{ + char * pCurrentWritePos = pBuffer; + uint32_t i, remainingBufferLength = bufferLength; + int charactersWritten; + ReportBuilderStatus_t status = ReportBuilderSuccess; + const Connection_t * pConn; + + /* Write the JSON array open marker. */ + if( remainingBufferLength > 1 ) + { + *pCurrentWritePos = JSON_ARRAY_OPEN_MARKER; + remainingBufferLength -= 1; + pCurrentWritePos += 1; + } + else + { + status = ReportBuilderBufferTooSmall; + } + + /* Write the array elements. */ + for( i = 0; ( ( i < connectionsArrayLength ) && ( status == ReportBuilderSuccess ) ); i++ ) + { + pConn = &( pConnectionsArray[ i ] ); + charactersWritten = snprintf( pCurrentWritePos, + remainingBufferLength, + JSON_CONNECTION_OBJECT_FORMAT, + pConn->localPort, + ( pConn->remoteIp >> 24 ) & 0xFF, + ( pConn->remoteIp >> 16 ) & 0xFF, + ( pConn->remoteIp >> 8 ) & 0xFF, + ( pConn->remoteIp ) & 0xFF, + pConn->remotePort ); + + if( !SNPRINTF_SUCCESS( charactersWritten, remainingBufferLength ) ) + { + status = ReportBuilderBufferTooSmall; + break; + } + else + { + remainingBufferLength -= charactersWritten; + pCurrentWritePos += charactersWritten; + } + } + + if( status == ReportBuilderSuccess ) + { + /* Discard the last comma. */ + if( connectionsArrayLength > 0 ) + { + pCurrentWritePos -= 1; + remainingBufferLength += 1; + } + + /* Write the JSON array close marker. */ + if( remainingBufferLength > 1 ) + { + *pCurrentWritePos = JSON_ARRAY_CLOSE_MARKER; + remainingBufferLength -= 1; + pCurrentWritePos += 1; + } + else + { + status = ReportBuilderBufferTooSmall; + } + } + + if( status == ReportBuilderSuccess ) + { + *pOutCharsWritten = bufferLength - remainingBufferLength; + } + + return status; +} +/*-----------------------------------------------------------*/ + +ReportBuilderStatus_t GenerateJsonReport( char * pBuffer, + uint32_t bufferLength, + const ReportMetrics_t * pMetrics, + uint32_t majorReportVersion, + uint32_t minorReportVersion, + uint32_t reportId, + uint32_t * pOutReprotLength ) +{ + char * pCurrentWritePos = pBuffer; + uint32_t remainingBufferLength = bufferLength, bufferWritten; + ReportBuilderStatus_t status = ReportBuilderSuccess; + int charactersWritten; + + if( ( pBuffer == NULL ) || + ( bufferLength == 0 ) || + ( pMetrics == NULL ) || + ( pOutReprotLength == NULL ) ) + { + LogError( ( "Invalid parameters. pBuffer: %p, bufferLength: %u" + " pMetrics: %p, pOutReprotLength: %p.", + pBuffer, + bufferLength, + pMetrics, + pOutReprotLength ) ); + status = ReportBuilderBadParameter; + } + + /* Write part1. */ + if( status == ReportBuilderSuccess ) + { + charactersWritten = snprintf( pCurrentWritePos, + remainingBufferLength, + JSON_REPORT_FORMAT_PART1, + reportId, + majorReportVersion, + minorReportVersion ); + + if( !SNPRINTF_SUCCESS( charactersWritten, remainingBufferLength ) ) + { + LogError( ( "Failed to write part 1." ) ); + status = ReportBuilderBufferTooSmall; + } + else + { + remainingBufferLength -= charactersWritten; + pCurrentWritePos += charactersWritten; + } + } + + /* Write TCP ports array. */ + if( status == ReportBuilderSuccess ) + { + status = writePortsArray( pCurrentWritePos, + remainingBufferLength, + pMetrics->pOpenTcpPortsArray, + pMetrics->openTcpPortsArrayLength, + &( bufferWritten ) ); + + if( status == ReportBuilderSuccess ) + { + pCurrentWritePos += bufferWritten; + remainingBufferLength -= bufferWritten; + } + else + { + LogError( ( "Failed to write TCP ports array." ) ); + } + } + + /* Write part2. */ + if( status == ReportBuilderSuccess ) + { + charactersWritten = snprintf( pCurrentWritePos, + remainingBufferLength, + JSON_REPORT_FORMAT_PART2, + pMetrics->openTcpPortsArrayLength ); + + if( !SNPRINTF_SUCCESS( charactersWritten, remainingBufferLength ) ) + { + LogError( ( "Failed to write part 2." ) ); + status = ReportBuilderBufferTooSmall; + } + else + { + remainingBufferLength -= charactersWritten; + pCurrentWritePos += charactersWritten; + } + } + + /* Write UDP ports array. */ + if( status == ReportBuilderSuccess ) + { + status = writePortsArray( pCurrentWritePos, + remainingBufferLength, + pMetrics->pOpenUdpPortsArray, + pMetrics->openUdpPortsArrayLength, + &( bufferWritten ) ); + + if( status == ReportBuilderSuccess ) + { + pCurrentWritePos += bufferWritten; + remainingBufferLength -= bufferWritten; + } + else + { + LogError( ( "Failed to write UDP ports array." ) ); + } + } + + /* Write part3. */ + if( status == ReportBuilderSuccess ) + { + charactersWritten = snprintf( pCurrentWritePos, + remainingBufferLength, + JSON_REPORT_FORMAT_PART3, + pMetrics->openUdpPortsArrayLength, + pMetrics->pNetworkStats->bytesReceived, + pMetrics->pNetworkStats->bytesSent, + pMetrics->pNetworkStats->packetsReceived, + pMetrics->pNetworkStats->packetsSent ); + + if( !SNPRINTF_SUCCESS( charactersWritten, remainingBufferLength ) ) + { + LogError( ( "Failed to write part 3." ) ); + status = ReportBuilderBufferTooSmall; + } + else + { + remainingBufferLength -= charactersWritten; + pCurrentWritePos += charactersWritten; + } + } + + /* Write connections array. */ + if( status == ReportBuilderSuccess ) + { + status = writeConnectionsArray( pCurrentWritePos, + remainingBufferLength, + pMetrics->pEstablishedConnectionsArray, + pMetrics->establishedConnectionsArrayLength, + &( bufferWritten ) ); + + if( status == ReportBuilderSuccess ) + { + pCurrentWritePos += bufferWritten; + remainingBufferLength -= bufferWritten; + } + else + { + LogError( ( "Failed to write established connections array." ) ); + } + } + + /* Write part4. */ + if( status == ReportBuilderSuccess ) + { + charactersWritten = snprintf( pCurrentWritePos, + remainingBufferLength, + JSON_REPORT_FORMAT_PART4, + pMetrics->establishedConnectionsArrayLength ); + + if( !SNPRINTF_SUCCESS( charactersWritten, remainingBufferLength ) ) + { + LogError( ( "Failed to write part 4." ) ); + status = ReportBuilderBufferTooSmall; + } + else + { + remainingBufferLength -= charactersWritten; + pCurrentWritePos += charactersWritten; + } + } + + if( status == ReportBuilderSuccess ) + { + *pOutReprotLength = bufferLength - remainingBufferLength; + } + + return status; +} +/*-----------------------------------------------------------*/ diff --git a/demos/device_defender_for_aws/report_builder.h b/demos/device_defender_for_aws/report_builder.h new file mode 100644 index 00000000000..9581881036d --- /dev/null +++ b/demos/device_defender_for_aws/report_builder.h @@ -0,0 +1,80 @@ +/* + * FreeRTOS V202012.00 + * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://aws.amazon.com/freertos + * http://www.FreeRTOS.org + */ + +#ifndef REPORT_BUILDER_H_ +#define REPORT_BUILDER_H_ + +/* Metrics collector. */ +#include "metrics_collector.h" + +/** + * @brief Return codes from report builder APIs. + */ +typedef enum +{ + ReportBuilderSuccess = 0, + ReportBuilderBadParameter, + ReportBuilderBufferTooSmall +} ReportBuilderStatus_t; + +/** + * @brief Represents metrics to be included in the report. + */ +typedef struct ReportMetrics +{ + NetworkStats_t * pNetworkStats; + uint16_t * pOpenTcpPortsArray; + uint32_t openTcpPortsArrayLength; + uint16_t * pOpenUdpPortsArray; + uint32_t openUdpPortsArrayLength; + Connection_t * pEstablishedConnectionsArray; + uint32_t establishedConnectionsArrayLength; +} ReportMetrics_t; + +/** + * @brief Generate a report in the format expected by the AWS IoT Device Defender + * Service. + * + * @param[in] pBuffer The buffer to write the report into. + * @param[in] bufferLength The length of the buffer. + * @param[in] pMetrics Metrics to write in the generated report. + * @param[in] majorReportVersion Major version of the report. + * @param[in] minorReportVersion Minor version of the report. + * @param[in] reportId Value to be used as the reportId in the generated report. + * @param[out] pOutReprotLength The length of the generated report. + * + * @return #ReportBuilderSuccess if the report is successfully generated; + * #ReportBuilderBadParameter if invalid parameters are passed; + * #ReportBuilderBufferTooSmall if the buffer cannot hold the full report. + */ +ReportBuilderStatus_t GenerateJsonReport( char * pBuffer, + uint32_t bufferLength, + const ReportMetrics_t * pMetrics, + uint32_t majorReportVersion, + uint32_t minorReportVersion, + uint32_t reportId, + uint32_t * pOutReprotLength ); + +#endif /* ifndef REPORT_BUILDER_H_ */ diff --git a/demos/device_shadow_for_aws/CMakeLists.txt b/demos/device_shadow_for_aws/CMakeLists.txt index 46c5c03d73e..3cc06def8ef 100644 --- a/demos/device_shadow_for_aws/CMakeLists.txt +++ b/demos/device_shadow_for_aws/CMakeLists.txt @@ -5,30 +5,29 @@ afr_set_demo_metadata(ID "DEVICE_SHADOW_DEMO") afr_set_demo_metadata(DESCRIPTION "An example that demonstrates the use of the Device Shadow library.") afr_set_demo_metadata(DISPLAY_NAME "Device Shadow Demo") +# Add the CMakeLists.txt file of module to metadata list. +afr_module_cmake_files(${AFR_CURRENT_MODULE} + ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt +) + afr_module_sources( ${AFR_CURRENT_MODULE} INTERFACE "${CMAKE_CURRENT_LIST_DIR}/shadow_demo_main.c" - "${CMAKE_CURRENT_LIST_DIR}/shadow_demo_helpers.c" - # Add the header file to generate their metadata so that - # they are present in code downloaded from FreeRTOS console. - "${CMAKE_CURRENT_LIST_DIR}/shadow_demo_helpers.h" - # As the containing directory name (i.e. device_shadow_for_aws) - # does not match the module name (i.e. device_shadow), - # we add the CMake file to the source list so that metadata is - # generated for it, and it is present in code downloaded from - # the FreeRTOS console. - ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt +) + +afr_module_include_dirs( + ${AFR_CURRENT_MODULE} + INTERFACE + ${AFR_DEMOS_DIR}/common/mqtt_demo_helpers ) afr_module_dependencies( ${AFR_CURRENT_MODULE} INTERFACE - AFR::core_mqtt + AFR::mqtt_demo_helpers AFR::core_json AFR::device_shadow - AFR::retry_utils - AFR::transport_interface_secure_sockets # Add dependency on the device_shadow_demo_dependencies # metadata module so that this demo is only shown when the # Device Shadow library is selected on the FreeRTOS console. diff --git a/demos/device_shadow_for_aws/shadow_demo_main.c b/demos/device_shadow_for_aws/shadow_demo_main.c index 9e1588ce505..aa6160bbd7e 100644 --- a/demos/device_shadow_for_aws/shadow_demo_main.c +++ b/demos/device_shadow_for_aws/shadow_demo_main.c @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -43,6 +43,15 @@ * a second message to update the reported state of powerOn. * 6. Handle incoming message again in prvEventCallback. If the message is from update/accepted, verify that it * has the same clientToken as previously published in the update message. That will mark the end of the demo. + * + * @note This demo uses retry logic to connect to AWS IoT broker if connection attempts fail. + * The FreeRTOS/backoffAlgorithm library is used to calculate the retry interval with an exponential + * backoff and jitter algorithm. For generating random number required by the algorithm, the PKCS11 + * module is used as it allows access to a True Random Number Generator (TRNG) if the vendor platform + * supports it. + * It is RECOMMENDED to seed the random number generator with a device-specific entropy source so that + * probability of collisions from devices in connection retries is mitigated. + * */ /* Standard includes. */ @@ -66,7 +75,7 @@ #include "core_json.h" /* shadow demo helpers header. */ -#include "shadow_demo_helpers.h" +#include "mqtt_demo_helpers.h" /** @@ -163,8 +172,73 @@ */ #define THING_NAME_LENGTH ( ( uint16_t ) ( sizeof( THING_NAME ) - 1 ) ) +/** + * @brief The maximum number of times to run the loop in this demo. + */ +#ifndef SHADOW_MAX_DEMO_COUNT + #define SHADOW_MAX_DEMO_COUNT ( 3 ) +#endif + +/** + * @brief Time in ticks to wait between each cycle of the demo implemented + * by RunDeviceShadowDemo(). + */ +#define DELAY_BETWEEN_DEMO_ITERATIONS_TICKS ( pdMS_TO_TICKS( 5000U ) ) + +/** + * @brief The maximum number of times to call MQTT_ProcessLoop() when waiting + * for a response for Shadow delete operation. + */ +#define MQTT_PROCESS_LOOP_DELETE_RESPONSE_COUNT_MAX ( 30U ) + +/** + * @brief Timeout for MQTT_ProcessLoop in milliseconds. + */ +#define MQTT_PROCESS_LOOP_TIMEOUT_MS ( 700U ) + +/** + * @brief JSON key for response code that indicates the type of error in + * the error document received on topic `delete/rejected`. + */ +#define SHADOW_DELETE_REJECTED_ERROR_CODE_KEY "code" + +/** + * @brief Length of #SHADOW_DELETE_REJECTED_ERROR_CODE_KEY + */ +#define SHADOW_DELETE_REJECTED_ERROR_CODE_KEY_LENGTH ( ( uint16_t ) ( sizeof( SHADOW_DELETE_REJECTED_ERROR_CODE_KEY ) - 1 ) ) + /*-----------------------------------------------------------*/ + +/** + * @brief The MQTT context used for MQTT operation. + */ +static MQTTContext_t xMqttContext; + +/** + * @brief The network context used for Openssl operation. + */ +static NetworkContext_t xNetworkContext; + +/** + * @brief The flag to indicate the mqtt session changed. + */ +static BaseType_t mqttSessionEstablished = pdTRUE; + +/** + * @brief Static buffer used to hold MQTT messages being sent and received. + */ +static uint8_t ucSharedBuffer[ democonfigNETWORK_BUFFER_SIZE ]; + +/** + * @brief Static buffer used to hold MQTT messages being sent and received. + */ +static MQTTFixedBuffer_t xBuffer = +{ + .pBuffer = ucSharedBuffer, + .size = democonfigNETWORK_BUFFER_SIZE +}; + /** * @brief The simulated device current power on state. */ @@ -185,12 +259,30 @@ static uint32_t ulClientToken = 0U; /** * @brief The return status of prvUpdateDeltaHandler callback function. */ -static int32_t lUpdateDeltaReturn = EXIT_SUCCESS; +static BaseType_t xUpdateDeltaReturn = pdPASS; /** * @brief The return status of prvUpdateAcceptedHandler callback function. */ -static int32_t lUpdateAcceptedReturn = EXIT_SUCCESS; +static BaseType_t xUpdateAcceptedReturn = pdPASS; + +/** + * @brief Status of the response of Shadow delete operation from AWS IoT + * message broker. + */ +static BaseType_t xDeleteResponseReceived = pdFALSE; + +/** + * @brief Status of the Shadow delete operation. + * + * The Shadow delete status will be updated by the incoming publishes on the + * MQTT topics for delete acknowledgement from AWS IoT message broker + * (accepted/rejected). Shadow document is considered to be deleted if an + * incoming publish is received on `delete/accepted` topic or an incoming + * publish is received on `delete/rejected` topic with error code 404. Code 404 + * indicates that the Shadow document does not exist for the Thing yet. + */ +static BaseType_t xShadowDeleted = pdFALSE; /*-----------------------------------------------------------*/ @@ -230,6 +322,127 @@ static void prvUpdateDeltaHandler( MQTTPublishInfo_t * pxPublishInfo ); */ static void prvUpdateAcceptedHandler( MQTTPublishInfo_t * pxPublishInfo ); + +/** + * @brief Process payload from `/delete/rejected` topic. + * + * This handler examines the rejected message to look for the reject reason code. + * If the reject reason code is `404`, an attempt was made to delete a shadow + * document which was not present yet. This is considered to be success for this + * demo application. + * + * @param[in] pxPublishInfo Deserialized publish info pointer for the incoming + * packet. + */ +static void prvDeleteRejectedHandler( MQTTPublishInfo_t * pxPublishInfo ); + +/** + * @brief Helper function to wait for a response for Shadow delete operation. + * + * @param[in] pxMQTTContext MQTT context pointer. + * + * @return pdPASS if successfully received a response for Shadow delete + * operation; pdFAIL otherwise. + */ +static BaseType_t prvWaitForDeleteResponse( MQTTContext_t * pxMQTTContext ); + +/*-----------------------------------------------------------*/ + +static BaseType_t prvWaitForDeleteResponse( MQTTContext_t * pxMQTTContext ) +{ + uint8_t ucCount = 0U; + MQTTStatus_t xMQTTStatus = MQTTSuccess; + BaseType_t xReturnStatus = pdPASS; + + assert( pxMQTTContext != NULL ); + + while( ( xDeleteResponseReceived != pdTRUE ) && + ( ucCount++ < MQTT_PROCESS_LOOP_DELETE_RESPONSE_COUNT_MAX ) && + ( xMQTTStatus == MQTTSuccess ) ) + { + /* Event callback will set #xDeleteResponseReceived when receiving an + * incoming publish on either `delete/accepted` or `delete/rejected` + * Shadow topics. */ + xMQTTStatus = MQTT_ProcessLoop( pxMQTTContext, MQTT_PROCESS_LOOP_TIMEOUT_MS ); + } + + if( ( xMQTTStatus != MQTTSuccess ) || ( xDeleteResponseReceived != pdTRUE ) ) + { + LogError( ( "MQTT_ProcessLoop failed to receive a response for Shadow delete operation:" + " LoopDuration=%u, MQTT Status=%s.", + ( MQTT_PROCESS_LOOP_TIMEOUT_MS * ucCount ), + MQTT_Status_strerror( xMQTTStatus ) ) ); + xReturnStatus = pdFAIL; + } + + return xReturnStatus; +} + +/*-----------------------------------------------------------*/ + +static void prvDeleteRejectedHandler( MQTTPublishInfo_t * pxPublishInfo ) +{ + JSONStatus_t result = JSONSuccess; + char * pcOutValue = NULL; + uint32_t ulOutValueLength = 0UL; + uint32_t ulErrorCode = 0UL; + + assert( pxPublishInfo != NULL ); + assert( pxPublishInfo->pPayload != NULL ); + + LogInfo( ( "/delete/rejected json payload:%s.", ( const char * ) pxPublishInfo->pPayload ) ); + + /* The payload will look similar to this: + * { + * "code": error-code, + * "message": "error-message", + * "timestamp": timestamp, + * "clientToken": "token" + * } + */ + + /* Make sure the payload is a valid json document. */ + result = JSON_Validate( pxPublishInfo->pPayload, + pxPublishInfo->payloadLength ); + + if( result == JSONSuccess ) + { + /* Then we start to get the version value by JSON keyword "version". */ + result = JSON_Search( ( char * ) pxPublishInfo->pPayload, + pxPublishInfo->payloadLength, + SHADOW_DELETE_REJECTED_ERROR_CODE_KEY, + SHADOW_DELETE_REJECTED_ERROR_CODE_KEY_LENGTH, + &pcOutValue, + ( size_t * ) &ulOutValueLength ); + } + else + { + LogError( ( "The json document is invalid!!" ) ); + } + + if( result == JSONSuccess ) + { + LogInfo( ( "Error code is: %.*s.", + ulOutValueLength, + pcOutValue ) ); + + /* Convert the extracted value to an unsigned integer value. */ + ulErrorCode = ( uint32_t ) strtoul( pcOutValue, NULL, 10 ); + } + else + { + LogError( ( "No error code in json document!!" ) ); + } + + LogInfo( ( "Error code:%lu.", ulErrorCode ) ); + + /* Mark Shadow delete operation as a success if error code is 404. */ + if( ulErrorCode == 404 ) + { + xShadowDeleted = pdTRUE; + } +} + /*-----------------------------------------------------------*/ static void prvUpdateDeltaHandler( MQTTPublishInfo_t * pxPublishInfo ) @@ -346,7 +559,7 @@ static void prvUpdateDeltaHandler( MQTTPublishInfo_t * pxPublishInfo ) else { LogError( ( "No powerOn in json document!!" ) ); - lUpdateDeltaReturn = EXIT_FAILURE; + xUpdateDeltaReturn = pdFAIL; } } @@ -433,7 +646,7 @@ static void prvUpdateAcceptedHandler( MQTTPublishInfo_t * pxPublishInfo ) else { LogError( ( "No clientToken in json document!!" ) ); - lUpdateAcceptedReturn = EXIT_FAILURE; + xUpdateAcceptedReturn = pdFAIL; } } @@ -495,6 +708,18 @@ static void prvEventCallback( MQTTContext_t * pxMqttContext, { LogInfo( ( "/update/rejected json payload:%s.", ( const char * ) pxDeserializedInfo->pPublishInfo->pPayload ) ); } + else if( messageType == ShadowMessageTypeDeleteAccepted ) + { + LogInfo( ( "Received an MQTT incoming publish on /delete/accepted topic." ) ); + xShadowDeleted = pdTRUE; + xDeleteResponseReceived = pdTRUE; + } + else if( messageType == ShadowMessageTypeDeleteRejected ) + { + /* Handler function to process payload. */ + prvDeleteRejectedHandler( pxDeserializedInfo->pPublishInfo ); + xDeleteResponseReceived = pdTRUE; + } else { LogInfo( ( "Other message type:%d !!", messageType ) ); @@ -538,7 +763,9 @@ int RunDeviceShadowDemo( bool awsIotMqttMode, void * pNetworkCredentialInfo, const void * pNetworkInterface ) { - int returnStatus = EXIT_SUCCESS; + BaseType_t xDemoStatus = pdPASS; + BaseType_t xDemoRunCount = 0UL; + BaseType_t xDeleteResponseLoopCount = 0UL; /* A buffer containing the update document. It has static duration to prevent * it from being placed on the call stack. */ @@ -551,181 +778,272 @@ int RunDeviceShadowDemo( bool awsIotMqttMode, ( void ) pNetworkCredentialInfo; ( void ) pNetworkInterface; - returnStatus = EstablishMqttSession( prvEventCallback ); - - if( returnStatus == EXIT_FAILURE ) - { - /* Log error to indicate connection failure. */ - LogError( ( "Failed to connect to MQTT broker." ) ); - } - else + do { - /* First of all, try to delete any Shadow document in the cloud. */ - returnStatus = PublishToTopic( SHADOW_TOPIC_STRING_DELETE( THING_NAME ), - SHADOW_TOPIC_LENGTH_DELETE( THING_NAME_LENGTH ), - pcUpdateDocument, - 0U ); - - /* Then try to subscribe shadow topics. */ - if( returnStatus == EXIT_SUCCESS ) - { - returnStatus = SubscribeToTopic( SHADOW_TOPIC_STRING_UPDATE_DELTA( THING_NAME ), - SHADOW_TOPIC_LENGTH_UPDATE_DELTA( THING_NAME_LENGTH ) ); - } + xDemoStatus = EstablishMqttSession( &xMqttContext, + &xNetworkContext, + &xBuffer, + prvEventCallback ); - if( returnStatus == EXIT_SUCCESS ) + if( xDemoStatus == pdFAIL ) { - returnStatus = SubscribeToTopic( SHADOW_TOPIC_STRING_UPDATE_ACCEPTED( THING_NAME ), - SHADOW_TOPIC_LENGTH_UPDATE_ACCEPTED( THING_NAME_LENGTH ) ); + /* Log error to indicate connection failure. */ + LogError( ( "Failed to connect to MQTT broker." ) ); } - - if( returnStatus == EXIT_SUCCESS ) + else { - returnStatus = SubscribeToTopic( SHADOW_TOPIC_STRING_UPDATE_REJECTED( THING_NAME ), - SHADOW_TOPIC_LENGTH_UPDATE_REJECTED( THING_NAME_LENGTH ) ); - } + /* Reset the shadow delete status flags. */ + xDeleteResponseReceived = pdFALSE; + xShadowDeleted = pdFALSE; - /* This demo uses a constant #THING_NAME known at compile time therefore we can use macros to - * assemble shadow topic strings. - * If the thing name is known at run time, then we could use the API #Shadow_GetTopicString to - * assemble shadow topic strings, here is the example for /update/delta: - * - * For /update/delta: - * - * #define SHADOW_TOPIC_MAX_LENGTH (256U) - * - * ShadowStatus_t shadowStatus = SHADOW_STATUS_SUCCESS; - * char cTopicBuffer[ SHADOW_TOPIC_MAX_LENGTH ] = { 0 }; - * uint16_t usBufferSize = SHADOW_TOPIC_MAX_LENGTH; - * uint16_t usOutLength = 0; - * const char * pcThingName = "TestThingName"; - * uint16_t usThingNameLength = ( sizeof( pcThingName ) - 1U ); - * - * shadowStatus = Shadow_GetTopicString( SHADOW_TOPIC_STRING_TYPE_UPDATE_DELTA, - * pcThingName, - * usThingNameLength, - * & ( cTopicBuffer[ 0 ] ), - * usBufferSize, - * & usOutLength ); - */ + /* First of all, try to delete any Shadow document in the cloud. + * Try to subscribe to `delete/accepted` and `delete/rejected` topics. */ + xDemoStatus = SubscribeToTopic( &xMqttContext, + SHADOW_TOPIC_STRING_DELETE_ACCEPTED( THING_NAME ), + SHADOW_TOPIC_LENGTH_DELETE_ACCEPTED( THING_NAME_LENGTH ) ); - /* Then we publish a desired state to the /update topic. Since we've deleted - * the device shadow at the beginning of the demo, this will cause a delta message - * to be published, which we have subscribed to. - * In many real applications, the desired state is not published by - * the device itself. But for the purpose of making this demo self-contained, - * we publish one here so that we can receive a delta message later. - */ - if( returnStatus == EXIT_SUCCESS ) - { - /* Desired power on state . */ - LogInfo( ( "Send desired power state with 1." ) ); - - ( void ) memset( pcUpdateDocument, - 0x00, - sizeof( pcUpdateDocument ) ); - - snprintf( pcUpdateDocument, - SHADOW_DESIRED_JSON_LENGTH + 1, - SHADOW_DESIRED_JSON, - ( int ) 1, - ( long unsigned ) ( xTaskGetTickCount() % 1000000 ) ); - - returnStatus = PublishToTopic( SHADOW_TOPIC_STRING_UPDATE( THING_NAME ), - SHADOW_TOPIC_LENGTH_UPDATE( THING_NAME_LENGTH ), - pcUpdateDocument, - ( SHADOW_DESIRED_JSON_LENGTH + 1 ) ); - } + if( xDemoStatus == pdPASS ) + { + /* Try to subscribe to `delete/rejected` topic. */ + xDemoStatus = SubscribeToTopic( &xMqttContext, + SHADOW_TOPIC_STRING_DELETE_REJECTED( THING_NAME ), + SHADOW_TOPIC_LENGTH_DELETE_REJECTED( THING_NAME_LENGTH ) ); + } - if( returnStatus == EXIT_SUCCESS ) - { - /* Note that PublishToTopic already called MQTT_ProcessLoop, - * therefore responses may have been received and the prvEventCallback - * may have been called, which may have changed the stateChanged flag. - * Check if the state change flag has been modified or not. If it's modified, - * then we publish reported state to update topic. + if( xDemoStatus == pdPASS ) + { + /* Publish to Shadow `delete` topic to attempt to delete the + * Shadow document if exists. */ + xDemoStatus = PublishToTopic( &xMqttContext, + SHADOW_TOPIC_STRING_DELETE( THING_NAME ), + SHADOW_TOPIC_LENGTH_DELETE( THING_NAME_LENGTH ), + pcUpdateDocument, + 0U ); + } + + /* Wait for an incoming publish on `delete/accepted` or `delete/rejected` + * topics, if not already received a publish. */ + if( ( xDemoStatus == pdPASS ) && ( xDeleteResponseReceived != pdTRUE ) ) + { + xDemoStatus = prvWaitForDeleteResponse( &xMqttContext ); + } + + /* Unsubscribe from the `delete/accepted` and 'delete/rejected` topics.*/ + if( xDemoStatus == pdPASS ) + { + xDemoStatus = UnsubscribeFromTopic( &xMqttContext, + SHADOW_TOPIC_STRING_DELETE_ACCEPTED( THING_NAME ), + SHADOW_TOPIC_LENGTH_DELETE_ACCEPTED( THING_NAME_LENGTH ) ); + } + + if( xDemoStatus == pdPASS ) + { + xDemoStatus = UnsubscribeFromTopic( &xMqttContext, + SHADOW_TOPIC_STRING_DELETE_REJECTED( THING_NAME ), + SHADOW_TOPIC_LENGTH_DELETE_REJECTED( THING_NAME_LENGTH ) ); + } + + /* Check if Shadow document delete was successful. A delete can be + * successful in cases listed below. + * 1. If an incoming publish is received on `delete/accepted` topic. + * 2. If an incoming publish is received on `delete/rejected` topic + * with error code 404. This indicates that a Shadow document was + * not present for the Thing. */ + if( xShadowDeleted == pdFALSE ) + { + LogError( ( "Shadow delete operation failed." ) ); + xDemoStatus = pdFAIL; + } + + /* Then try to subscribe Shadow delta and Shadow updated topics. */ + if( xDemoStatus == pdPASS ) + { + xDemoStatus = SubscribeToTopic( &xMqttContext, + SHADOW_TOPIC_STRING_UPDATE_DELTA( THING_NAME ), + SHADOW_TOPIC_LENGTH_UPDATE_DELTA( THING_NAME_LENGTH ) ); + } + + if( xDemoStatus == pdPASS ) + { + xDemoStatus = SubscribeToTopic( &xMqttContext, + SHADOW_TOPIC_STRING_UPDATE_ACCEPTED( THING_NAME ), + SHADOW_TOPIC_LENGTH_UPDATE_ACCEPTED( THING_NAME_LENGTH ) ); + } + + if( xDemoStatus == pdPASS ) + { + xDemoStatus = SubscribeToTopic( &xMqttContext, + SHADOW_TOPIC_STRING_UPDATE_REJECTED( THING_NAME ), + SHADOW_TOPIC_LENGTH_UPDATE_REJECTED( THING_NAME_LENGTH ) ); + } + + /* This demo uses a constant #THING_NAME known at compile time therefore we can use macros to + * assemble shadow topic strings. + * If the thing name is known at run time, then we could use the API #Shadow_GetTopicString to + * assemble shadow topic strings, here is the example for /update/delta: + * + * For /update/delta: + * + * #define SHADOW_TOPIC_MAX_LENGTH (256U) + * + * ShadowStatus_t shadowStatus = SHADOW_STATUS_SUCCESS; + * char cTopicBuffer[ SHADOW_TOPIC_MAX_LENGTH ] = { 0 }; + * uint16_t usBufferSize = SHADOW_TOPIC_MAX_LENGTH; + * uint16_t usOutLength = 0; + * const char * pcThingName = "TestThingName"; + * uint16_t usThingNameLength = ( sizeof( pcThingName ) - 1U ); + * + * shadowStatus = Shadow_GetTopicString( SHADOW_TOPIC_STRING_TYPE_UPDATE_DELTA, + * pcThingName, + * usThingNameLength, + * & ( cTopicBuffer[ 0 ] ), + * usBufferSize, + * & usOutLength ); + */ + + /* Then we publish a desired state to the /update topic. Since we've deleted + * the device shadow at the beginning of the demo, this will cause a delta message + * to be published, which we have subscribed to. + * In many real applications, the desired state is not published by + * the device itself. But for the purpose of making this demo self-contained, + * we publish one here so that we can receive a delta message later. */ - if( stateChanged == true ) + if( xDemoStatus == pdPASS ) { - /* Report the latest power state back to device shadow. */ - LogInfo( ( "Report to the state change: %d", ulCurrentPowerOnState ) ); + /* Desired power on state . */ + LogInfo( ( "Send desired power state with 1." ) ); + ( void ) memset( pcUpdateDocument, 0x00, sizeof( pcUpdateDocument ) ); - /* Keep the client token in global variable used to compare if - * the same token in /update/accepted. */ - ulClientToken = ( xTaskGetTickCount() % 1000000 ); - snprintf( pcUpdateDocument, - SHADOW_REPORTED_JSON_LENGTH + 1, - SHADOW_REPORTED_JSON, - ( int ) ulCurrentPowerOnState, - ( long unsigned ) ulClientToken ); - - returnStatus = PublishToTopic( SHADOW_TOPIC_STRING_UPDATE( THING_NAME ), - SHADOW_TOPIC_LENGTH_UPDATE( THING_NAME_LENGTH ), - pcUpdateDocument, - ( SHADOW_DESIRED_JSON_LENGTH + 1 ) ); + SHADOW_DESIRED_JSON_LENGTH + 1, + SHADOW_DESIRED_JSON, + ( int ) 1, + ( long unsigned ) ( xTaskGetTickCount() % 1000000 ) ); + + xDemoStatus = PublishToTopic( &xMqttContext, + SHADOW_TOPIC_STRING_UPDATE( THING_NAME ), + SHADOW_TOPIC_LENGTH_UPDATE( THING_NAME_LENGTH ), + pcUpdateDocument, + ( SHADOW_DESIRED_JSON_LENGTH + 1 ) ); } - else + + if( xDemoStatus == pdPASS ) { - LogInfo( ( "No change from /update/delta, unsubscribe all shadow topics and disconnect from MQTT.\r\n" ) ); + /* Note that PublishToTopic already called MQTT_ProcessLoop, + * therefore responses may have been received and the prvEventCallback + * may have been called, which may have changed the stateChanged flag. + * Check if the state change flag has been modified or not. If it's modified, + * then we publish reported state to update topic. + */ + if( stateChanged == true ) + { + /* Report the latest power state back to device shadow. */ + LogInfo( ( "Report to the state change: %d", ulCurrentPowerOnState ) ); + ( void ) memset( pcUpdateDocument, + 0x00, + sizeof( pcUpdateDocument ) ); + + /* Keep the client token in global variable used to compare if + * the same token in /update/accepted. */ + ulClientToken = ( xTaskGetTickCount() % 1000000 ); + + snprintf( pcUpdateDocument, + SHADOW_REPORTED_JSON_LENGTH + 1, + SHADOW_REPORTED_JSON, + ( int ) ulCurrentPowerOnState, + ( long unsigned ) ulClientToken ); + + xDemoStatus = PublishToTopic( &xMqttContext, + SHADOW_TOPIC_STRING_UPDATE( THING_NAME ), + SHADOW_TOPIC_LENGTH_UPDATE( THING_NAME_LENGTH ), + pcUpdateDocument, + ( SHADOW_DESIRED_JSON_LENGTH + 1 ) ); + } + else + { + LogInfo( ( "No change from /update/delta, unsubscribe all shadow topics and disconnect from MQTT.\r\n" ) ); + } } - } - if( returnStatus == EXIT_SUCCESS ) - { - LogInfo( ( "Start to unsubscribe shadow topics and disconnect from MQTT. \r\n" ) ); + if( xDemoStatus == pdPASS ) + { + LogInfo( ( "Start to unsubscribe shadow topics and disconnect from MQTT. \r\n" ) ); - returnStatus = UnsubscribeFromTopic( SHADOW_TOPIC_STRING_UPDATE_DELTA( THING_NAME ), - SHADOW_TOPIC_LENGTH_UPDATE_DELTA( THING_NAME_LENGTH ) ); + xDemoStatus = UnsubscribeFromTopic( &xMqttContext, + SHADOW_TOPIC_STRING_UPDATE_DELTA( THING_NAME ), + SHADOW_TOPIC_LENGTH_UPDATE_DELTA( THING_NAME_LENGTH ) ); - if( returnStatus != EXIT_SUCCESS ) - { - LogError( ( "Failed to unsubscribe the topic %s", - SHADOW_TOPIC_STRING_UPDATE_DELTA( THING_NAME ) ) ); + if( xDemoStatus != pdPASS ) + { + LogError( ( "Failed to unsubscribe the topic %s", + SHADOW_TOPIC_STRING_UPDATE_DELTA( THING_NAME ) ) ); + } } - } - if( returnStatus == EXIT_SUCCESS ) - { - returnStatus = UnsubscribeFromTopic( SHADOW_TOPIC_STRING_UPDATE_ACCEPTED( THING_NAME ), - SHADOW_TOPIC_LENGTH_UPDATE_ACCEPTED( THING_NAME_LENGTH ) ); + if( xDemoStatus == pdPASS ) + { + xDemoStatus = UnsubscribeFromTopic( &xMqttContext, + SHADOW_TOPIC_STRING_UPDATE_ACCEPTED( THING_NAME ), + SHADOW_TOPIC_LENGTH_UPDATE_ACCEPTED( THING_NAME_LENGTH ) ); + + if( xDemoStatus != pdPASS ) + { + LogError( ( "Failed to unsubscribe the topic %s", + SHADOW_TOPIC_STRING_UPDATE_ACCEPTED( THING_NAME ) ) ); + } + } - if( returnStatus != EXIT_SUCCESS ) + if( xDemoStatus == pdPASS ) { - LogError( ( "Failed to unsubscribe the topic %s", - SHADOW_TOPIC_STRING_UPDATE_ACCEPTED( THING_NAME ) ) ); + xDemoStatus = UnsubscribeFromTopic( &xMqttContext, + SHADOW_TOPIC_STRING_UPDATE_REJECTED( THING_NAME ), + SHADOW_TOPIC_LENGTH_UPDATE_REJECTED( THING_NAME_LENGTH ) ); + + if( xDemoStatus != pdPASS ) + { + LogError( ( "Failed to unsubscribe the topic %s", + SHADOW_TOPIC_STRING_UPDATE_REJECTED( THING_NAME ) ) ); + } } - } - if( returnStatus == EXIT_SUCCESS ) - { - returnStatus = UnsubscribeFromTopic( SHADOW_TOPIC_STRING_UPDATE_REJECTED( THING_NAME ), - SHADOW_TOPIC_LENGTH_UPDATE_REJECTED( THING_NAME_LENGTH ) ); + /* The MQTT session is always disconnected, even if there were prior failures. */ + xDemoStatus = DisconnectMqttSession( &xMqttContext, &xNetworkContext ); - if( returnStatus != EXIT_SUCCESS ) + /* This demo performs only Device Shadow operations. If matching the Shadow + * MQTT topic fails or there are failure in parsing the received JSON document, + * then this demo was not successful. */ + if( ( xUpdateAcceptedReturn != pdPASS ) || ( xUpdateDeltaReturn != pdPASS ) ) { - LogError( ( "Failed to unsubscribe the topic %s", - SHADOW_TOPIC_STRING_UPDATE_REJECTED( THING_NAME ) ) ); + LogError( ( "Callback function failed." ) ); + xDemoStatus = pdFAIL; } } - /* The MQTT session is always disconnected, even there were prior failures. */ - returnStatus = DisconnectMqttSession(); + /* Increment the demo run count. */ + xDemoRunCount++; - /* This demo performs only Device Shadow operations. If matching the Shadow - * MQTT topic fails or there are failure in parsing the received JSON document, - * then this demo was not successful. */ - if( ( lUpdateAcceptedReturn != EXIT_SUCCESS ) || ( lUpdateDeltaReturn != EXIT_SUCCESS ) ) + if( xDemoStatus == pdPASS ) { - LogError( ( "Callback function failed." ) ); - returnStatus = EXIT_FAILURE; + LogInfo( ( "Demo iteration %lu is successful.", xDemoRunCount ) ); } - } + /* Attempt to retry a failed iteration of demo for up to #SHADOW_MAX_DEMO_COUNT times. */ + else if( xDemoRunCount < SHADOW_MAX_DEMO_COUNT ) + { + LogWarn( ( "Demo iteration %lu failed. Retrying...", xDemoRunCount ) ); + vTaskDelay( DELAY_BETWEEN_DEMO_ITERATIONS_TICKS ); + } + /* Failed all #SHADOW_MAX_DEMO_COUNT demo iterations. */ + else + { + LogError( ( "All %d demo iterations failed.", SHADOW_MAX_DEMO_COUNT ) ); + break; + } + } while( xDemoStatus != pdPASS ); - return returnStatus; + return( ( xDemoStatus == pdPASS ) ? EXIT_SUCCESS : EXIT_FAILURE ); } /*-----------------------------------------------------------*/ diff --git a/demos/greengrass_connectivity/aws_greengrass_discovery_demo.c b/demos/greengrass_connectivity/aws_greengrass_discovery_demo.c index ab94a75db01..64260dbe57d 100644 --- a/demos/greengrass_connectivity/aws_greengrass_discovery_demo.c +++ b/demos/greengrass_connectivity/aws_greengrass_discovery_demo.c @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/https/CMakeLists.txt b/demos/https/CMakeLists.txt deleted file mode 100644 index d48bbd10e4e..00000000000 --- a/demos/https/CMakeLists.txt +++ /dev/null @@ -1,23 +0,0 @@ -# AFR HTTPS demo -afr_demo_module(https) - -# The synchronous download demo is the default enabled demo. -afr_set_demo_metadata(ID "HTTPS_SYNC_DOWNLOAD_DEMO") -afr_set_demo_metadata(DESCRIPTION "Examples that demonstrate the HTTPS Client") -afr_set_demo_metadata(DISPLAY_NAME "HTTPS Client Demos") - -afr_module_sources( - ${AFR_CURRENT_MODULE} - INTERFACE - "${CMAKE_CURRENT_LIST_DIR}/iot_demo_https_s3_download_sync.c" - "${CMAKE_CURRENT_LIST_DIR}/iot_demo_https_s3_download_async.c" - "${CMAKE_CURRENT_LIST_DIR}/iot_demo_https_s3_upload_sync.c" - "${CMAKE_CURRENT_LIST_DIR}/iot_demo_https_s3_upload_async.c" - "${CMAKE_CURRENT_LIST_DIR}/iot_demo_https_common.c" -) - -afr_module_dependencies( - ${AFR_CURRENT_MODULE} - INTERFACE - AFR::https -) diff --git a/demos/https/README.md b/demos/https/README.md deleted file mode 100644 index 0798743ea50..00000000000 --- a/demos/https/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# Presigned S3 URLs Generator - -**presigned_url_gen.py** generates pre-signed URLs for S3 GET and PUT HTTP request access. - -### Dependencies -* Python 2.7+ or Python 3+ -* boto3 -* argparse - -### Pre-requisites -1. Install the dependencies. - ``` - pip install boto3 argparse - ``` - -1. You will need an AWS Account with S3 access before beginning. You must install and configure the AWS CLI in order to - use this script. - For information on AWS S3 please see: https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html - For AWS CLI installation information please see: https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html - For AWS CLI configuration information please see: https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html - ``` - aws configure - ``` - -### Usage -1. Run the presigned_url_gen.py with your s3 **bucket-name** and s3 object key **object-key**. - ``` - python presigned_urls_gen.py --bucket --key - ``` - An example expected output: - ``` - #define IOT_DEMO_HTTPS_PRESIGNED_GET_URL https://aws-s3-endpoint/object-key.txt?AWSAccessKeyId=AAAAAAAAAAAAAAAAAAAA&Expires=1560555644&Signature=SomeHash12345UrlABcdEFgfIjK%3D - #define IOT_DEMO_HTTPS_PRESIGNED_PUT_URL https://aws-s3-endpoint/object-key.txt?AWSAccessKeyId=ABABABABABABABABABAB&Expires=1560555644&Signature=SomeHash12345UrlLMnmOPqrStUvW%3D - ``` -1. Copy and paste the output to **iot_config.h** for macro **IOT_DEMO_HTTPS_PRESIGNED_GET_URL** and **IOT_DEMO_HTTPS_PRESIGNED_PUT_URL**. - ``` - #define IOT_DEMO_HTTPS_PRESIGNED_PUT_URL https://aws-s3-endpoint/object-key.txt?AWSAccessKeyId=AAAAAAAAAAAAAAAAAAAA&Expires=1560555644&Signature=SomeHash12345UrlABcdEFgfIjK%3D - #define IOT_DEMO_HTTPS_PRESIGNED_GET_URL https://aws-s3-endpoint/object-key.txt?AWSAccessKeyId=AAAAAAAAAAAAAAAAAAAA&Expires=1560555644&Signature=SomeHash12345UrlABcdEFgfIjK%3D - ``` - -### Parameter Info -#### --bucket - The name of your S3 bucket where you will download or upload. -#### --key - The name of the existing object you wish to download (GET). - Or the name of the object you wish to upload (PUT). diff --git a/demos/https/iot_demo_https_common.c b/demos/https/iot_demo_https_common.c deleted file mode 100644 index 6c07aacd68b..00000000000 --- a/demos/https/iot_demo_https_common.c +++ /dev/null @@ -1,223 +0,0 @@ -/* - * FreeRTOS V202011.00 - * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://aws.amazon.com/freertos - * http://www.FreeRTOS.org - */ - -/** - * @file iot_demo_https_common.c - * @brief Implementation of common routines used in the HTTPS S3 access demos. - */ -/* The config header is always included first. */ -#include "iot_config.h" - -/* C Standard headers. */ -#include - -/* Common header. */ -#include "iot_demo_https_common.h" - -/* FreeRTOS includes. */ -#include "iot_https_utils.h" -#include "iot_demo_logging.h" - -/*-----------------------------------------------------------*/ - -/** - * @brief HTTP standard header value for requesting a range of bytes from 0 to 0. - * - * This is used to get the size of the file from S3. A HEAD request is forbidden with a presigned URL. Performing a - * HEAD request with S3 requires generating a Sigv4 signature in an Authorization header field. We work around this by - * performing a GET on Range: bytes=0-0. Then extracting the size of the file from the Content-Range header field in - * the response. */ -#define RANGE_0_TO_0_HEADER_VALUE "bytes=0-0" -#define RANGE_0_TO_0_HEADER_VALUE_LENGTH ( 9 ) - -/** - * @brief HTTP standard header field "Content-Range" - */ -#define CONTENT_RANGE_HEADER_FIELD "Content-Range" -#define CONTENT_RANGE_HEADER_FIELD_LENGTH ( 13 ) - -/*-----------------------------------------------------------*/ - -int _IotHttpsDemo_GetS3ObjectFileSize( uint32_t * pFileSize, - IotHttpsConnectionHandle_t connHandle, - const char * pPath, - uint32_t pathLen, - const char * pAddress, - uint32_t addressLen, - uint8_t * pReqUserBuffer, - uint32_t reqUserBufferLen, - uint8_t * pRespUserBuffer, - uint32_t respUserBufferLen ) -{ - /* Status of HTTPS Client API. */ - IotHttpsReturnCode_t httpsClientStatus = IOT_HTTPS_OK; - /* The HTTPS request configurations for getting the file size. */ - IotHttpsRequestInfo_t fileSizeReqConfig = { 0 }; - /* The HTTPS response configurations for getting the file size. */ - IotHttpsResponseInfo_t fileSizeRespConfig = { 0 }; - /* Synchronous request specific configurations. */ - IotHttpsSyncInfo_t reqSyncInfo = { 0 }; - /* Synchronous response specific configurations. */ - IotHttpsSyncInfo_t respSyncInfo = { 0 }; - - /* Handle identifying the HTTP request. This is valid after the request has been initialized with - * IotHttpsClient_InitializeRequest(). */ - IotHttpsRequestHandle_t fileSizeReqHandle = NULL; - - /* Handle identifying the HTTP response. This is valid after the response has been received with - * IotHttpsClient_SendSync(). */ - IotHttpsResponseHandle_t fileSizeRespHandle = NULL; - - /* The status of HTTP response for this request. */ - uint16_t respStatus = IOT_HTTPS_STATUS_OK; - - - /* String to store the Content-Range header field value. This header field as we are requesting in this demo is of - * the form: "Content-Range: bytes 0-0/FILESIZE", where file size would be the length of the maximum 32 bit integer - * which is 10. Since the header field value "bytes 0-0/FILESIZE" is less than the maximum possible Range header - * field value, we size this string to the Range header field value.*/ - char contentRangeValStr[ RANGE_VALUE_MAX_LENGTH ] = { 0 }; - /* The location of the file size in the contentRangeValStr. */ - char * pFileSizeStr = NULL; - - /* We are retrieving the file size synchronously because we cannot run this demo without the file size anyways - * so it's OK to block. */ - reqSyncInfo.pBody = NULL; /* This is a GET request so there is no data in the body. */ - reqSyncInfo.bodyLen = 0; /* Since there is not data in the body the length is 0. */ - respSyncInfo.pBody = NULL; /* We don't care about the body in this request since we want the file size that will - * be found in a header value. */ - respSyncInfo.bodyLen = 0; /* Since we are not saving any response body the length is 0. */ - - /* Set the request configurations. */ - fileSizeReqConfig.pPath = pPath; - fileSizeReqConfig.pathLen = pathLen; - fileSizeReqConfig.pHost = pAddress; - fileSizeReqConfig.hostLen = addressLen; - fileSizeReqConfig.method = IOT_HTTPS_METHOD_GET; /* Performing a HEAD request with S3 requires generating a Sigv4 signature - * in an Authorization header field. We work around this by performing a GET - * on Range: bytes=0-0. The size of the file is extracted from the Content-Range - * header field in the response. */ - fileSizeReqConfig.userBuffer.pBuffer = pReqUserBuffer; - fileSizeReqConfig.userBuffer.bufferLen = reqUserBufferLen; - fileSizeReqConfig.isAsync = false; - fileSizeReqConfig.u.pSyncInfo = &reqSyncInfo; - - /* Set the response configurations. */ - fileSizeRespConfig.userBuffer.pBuffer = pRespUserBuffer; - fileSizeRespConfig.userBuffer.bufferLen = respUserBufferLen; - fileSizeRespConfig.pSyncInfo = &respSyncInfo; - - /* Initialize the request to retrieve a request handle. */ - httpsClientStatus = IotHttpsClient_InitializeRequest( &fileSizeReqHandle, &fileSizeReqConfig ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "An error occurred in IotHttpsClient_InitializeRequest() with error code: %d", httpsClientStatus ); - return EXIT_FAILURE; - } - - /* Add the header to get bytes=0-0. S3 will respond with a Content-Range header that contains the size of the file - * in it. This header will look like: "Content-Range: bytes 0-0/FILESIZE". The body will have a single byte that - * we are ignoring. */ - httpsClientStatus = IotHttpsClient_AddHeader( fileSizeReqHandle, RANGE_HEADER_FIELD, RANGE_HEADER_FIELD_LENGTH, RANGE_0_TO_0_HEADER_VALUE, RANGE_0_TO_0_HEADER_VALUE_LENGTH ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "Failed to write the header \"Range: bytes=0-0\" into the request. With error code: %d", httpsClientStatus ); - return EXIT_FAILURE; - } - - /* Send the request synchronously. */ - httpsClientStatus = IotHttpsClient_SendSync( connHandle, fileSizeReqHandle, &fileSizeRespHandle, &fileSizeRespConfig, 0 ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "There has been an error receiving the response. The error code is: %d", httpsClientStatus ); - - /* Even though there is an error we could still read headers and body that may have been - * filled in the buffer depending on the error. */ - } - - /* Read the response status to see if we successfully got a partial content response. If we did not then - * we failed and will exit the demo. */ - httpsClientStatus = IotHttpsClient_ReadResponseStatus( fileSizeRespHandle, &respStatus ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "Could not read the response status. Error code %d", httpsClientStatus ); - return EXIT_FAILURE; - } - - if( respStatus != IOT_HTTPS_STATUS_PARTIAL_CONTENT ) - { - IotLogError( "Could not retrieve the file size. s3 responded with response status: %d", respStatus ); - - if( respStatus == IOT_HTTPS_STATUS_TEMPORARY_REDIRECT ) - { - IotLogInfo( "If the bucket was created less than 24 hours ago, you must add the region the bucket was created to the presigned URL. " ); - IotLogInfo( "You can change the Origin Domain Name from bucketname.s3.amazonaws.com to bucketname.s3-.amazonaws.com." ); - } - - if( respStatus == IOT_HTTPS_STATUS_FORBIDDEN ) - { - IotLogInfo( "Pre-signed URL may have expired or you do not have permissions on this account to access the S3 object." ); - } - - if( respStatus == IOT_HTTPS_STATUS_NOT_FOUND ) - { - IotLogInfo( "The specific object key in the presigned URL was not found in the bucket. " ); - } - - return EXIT_FAILURE; - } - - /* Get the file size by parsing the "bytes 0-0/FILESIZE" Content-Range header value string. */ - httpsClientStatus = IotHttpsClient_ReadHeader( fileSizeRespHandle, CONTENT_RANGE_HEADER_FIELD, CONTENT_RANGE_HEADER_FIELD_LENGTH, contentRangeValStr, sizeof( contentRangeValStr ) ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "Could find the Content-Range header in the response. Error code %d", httpsClientStatus ); - return EXIT_FAILURE; - } - - pFileSizeStr = strstr( contentRangeValStr, "/" ); - - if( pFileSizeStr == NULL ) - { - IotLogError( "'/' not present in Content-Range header value: %s.", contentRangeValStr ); - return EXIT_FAILURE; - } - - pFileSizeStr += sizeof( char ); - *pFileSize = ( uint32_t ) strtoul( pFileSizeStr, NULL, 10 ); - - if( ( *pFileSize == 0 ) || ( *pFileSize == UINT32_MAX ) ) - { - IotLogError( "Error using strtoul to get the file size from %s. Error returned: %d", pFileSizeStr, *pFileSize ); - return EXIT_FAILURE; - } - - return EXIT_SUCCESS; -} diff --git a/demos/https/iot_demo_https_common.h b/demos/https/iot_demo_https_common.h deleted file mode 100644 index d2ec2c3909d..00000000000 --- a/demos/https/iot_demo_https_common.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * FreeRTOS V202011.00 - * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://aws.amazon.com/freertos - * http://www.FreeRTOS.org - */ - -/** - * @file iot_demo_https_common.h - * @brief Common routines used in the HTTPS S3 access demos. - */ - -#ifndef IOT_DEMO_HTTPS_COMMON_H_ -#define IOT_DEMO_HTTPS_COMMON_H_ - -/* C standard includes shared among the demos. */ -#include - -/* Include of the HTTPS Client library. */ -#include "iot_https_client.h" - -/** - * @brief The maximum size of the header value string for the "Range" field. - * - * This is used to specify which parts of the file - * we want to download. Let's say the maximum file size is what can fit in a 32 bit unsigned integer. 2^32 = 4294967296 - * which is 10 digits. The header value string is of the form: "bytes=N-M" where N and M are integers. So the length - * of this string is strlen(N) + strlen(M) + strlen("bytes=-") + NULL terminator. Given the maximum number of digits is - * 10 we get the maximum length of this header value as: 10 * 2 + 7 + 1. - */ -#define RANGE_VALUE_MAX_LENGTH ( 28 ) - -/** - * @brief HTTP standard header field "Range". - */ -#define RANGE_HEADER_FIELD "Range" -#define RANGE_HEADER_FIELD_LENGTH ( sizeof( RANGE_HEADER_FIELD ) - 1 ) /**< Length of the "Range" header field name. */ - -/** - * @brief A closed connection header field and value strings. - * - * This value appears for the HTTP header "Connection". If this appears in the response, then the server will have - * closed the connection after sending that response. - */ -#define CONNECTION_HEADER_FIELD "Connection" -#define CONNECTION_HEADER_FILED_LENGTH ( sizeof( CONNECTION_HEADER_FIELD ) - 1 ) -#define CONNECTION_CLOSE_HEADER_VALUE "close" -#define CONNECTION_CLOSE_HEADER_VALUE_LENGTH ( sizeof( CONNECTION_CLOSE_HEADER_VALUE ) - 1 ) -#define CONNECTION_KEEP_ALIVE_HEADER_VALUE "keep-alive" -#define CONNECTION_KEEP_ALIVE_HEADER_VALUE_LENGTH ( sizeof( CONNECTION_KEEP_ALIVE_HEADER_VALUE ) - 1 ) - -/** - * @brief Retrieve the size of the S3 object that is specified in pPath. - * - * @param[out] pFileSize - The size of the S3 object. - * @param[in] connHandle - A valid connected connection handle. - * @param[in] pPath - The path to the S3 object. This includes all of the queries in the pre-signed URL as well. - * @param[in] pathLen - The length of the path to the S3 object. This length includes all of the queries following as well. - * @param[in] pAddress - The address of the S3 host extracted from the presigned S3 URL. - * @param[in] addressLen - The length of pAddress. - * @param[in] pReqUserBuffer - Buffer for storing the request context and headers. - * @param[in] reqUserBufferLen - Length of the request user buffer. - * @param[in] pRespUserBuffer - Buffer for storing the response context and headers. - * @param[in] respUserBufferLen - Length of the response user buffer. - */ -int _IotHttpsDemo_GetS3ObjectFileSize( uint32_t * pFileSize, - IotHttpsConnectionHandle_t connHandle, - const char * pPath, - uint32_t pathLen, - const char * pAddress, - uint32_t addressLen, - uint8_t * pReqUserBuffer, - uint32_t reqUserBufferLen, - uint8_t * pRespUserBuffer, - uint32_t respUserBufferLen ); - -#endif /* ifndef IOT_DEMO_HTTPS_COMMON_H_ */ diff --git a/demos/https/iot_demo_https_s3_download_async.c b/demos/https/iot_demo_https_s3_download_async.c deleted file mode 100644 index c774b286b6d..00000000000 --- a/demos/https/iot_demo_https_s3_download_async.c +++ /dev/null @@ -1,1273 +0,0 @@ -/* - * FreeRTOS V202011.00 - * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://aws.amazon.com/freertos - * http://www.FreeRTOS.org - */ - -/** - * @file iot_demo_https_async.c - * @brief Demonstrates asynchronous usage of the HTTPS library by performing a partial content GET request on a file - * from S3. - */ - -/* The config header is always included first. */ -#include "iot_config.h" - -/* C Standard includes. */ -#include -#include - -/* Set up logging for this demo. */ -#include "iot_demo_logging.h" - -/* FreeRTOS includes. */ -#include "iot_demo_https_common.h" -#include "iot_https_utils.h" -#include "aws_demo_config.h" -#include "platform/iot_network.h" -#include "platform/iot_threads.h" -#include "private/iot_error.h" -#include "platform/iot_clock.h" - -/** - * This demonstrates downloading a file from S3 using a pre-signed URL using the FreeRTOS HTTP Client library. - * The HTTPS Client library is a generic HTTP/1.1 client library that be used to download files from other webservers as - * well. - * - * A presigned URL is required to run this demo. Please see the demos/https/README.md for instructions on how to - * generate one. - * - * The file is downloaded incrementally using HTTP Partial Content headers. This is done by requesting ranges of the - * bytes in a file with the header: "Range: bytes=N-M", where N is the starting range and M is the ending range. The - * S3 HTTP server will response with a 206 Partial Content type of response and the file byte range requested. Please - * note that not all HTTP servers support a Partial Content download with a byte range. - * - * This demo cannot download a file larger than 2^32 - 1 bytes. - */ - -/** - * @cond DOXYGEN_IGNORE - * Doxygen should ignore this section. - * - * Provide default values for undefined configuration settings. You can see these configurations in iot_config.h. - */ - -/* Presigned URL for S3 GET Object access. */ -#ifndef IOT_DEMO_HTTPS_PRESIGNED_GET_URL - #define IOT_DEMO_HTTPS_PRESIGNED_GET_URL "Please configure a presigned GET URL in iot_config.h." -#endif - -/* TLS port for HTTPS. */ -#ifndef IOT_DEMO_HTTPS_PORT - #define IOT_DEMO_HTTPS_PORT ( ( uint16_t ) 443 ) -#endif - -#ifndef IOT_DEMO_HTTPS_TRUSTED_ROOT_CA - /* This the Baltimore Cybertrust associated with the S3 server certificate. */ - #define IOT_DEMO_HTTPS_TRUSTED_ROOT_CA \ - "-----BEGIN CERTIFICATE-----\n" \ - "MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ\n" \ - "RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD\n" \ - "VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX\n" \ - "DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y\n" \ - "ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy\n" \ - "VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr\n" \ - "mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr\n" \ - "IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK\n" \ - "mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu\n" \ - "XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy\n" \ - "dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye\n" \ - "jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1\n" \ - "BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3\n" \ - "DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92\n" \ - "9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx\n" \ - "jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0\n" \ - "Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz\n" \ - "ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS\n" \ - "R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp\n" \ - "-----END CERTIFICATE-----\n" -#endif /* ifndef IOT_DEMO_HTTPS_TRUSTED_ROOT_CA */ - -/* The total number of requests in the pool of HTTPS Client library configurations and handles. In order to send - * a request asynchronously the memory for both the request buffers and the response buffers must not be shared between - * other asynchronous requests on the same connection. You can reuse the buffer only after the request/response process - * has been finished. It is finished when the responseCompleteCallback() is invoked. We create a pool of memory so that - * all available requests in the pool can be scheduled right away without over-writing each other. */ -#ifndef IOT_HTTPS_DEMO_MAX_ASYNC_REQUESTS - #define IOT_HTTPS_DEMO_MAX_ASYNC_REQUESTS ( ( int ) 3 ) -#endif - -/* Size in bytes of the User Buffer used to store the internal connection context. The size presented here accounts for - * storage of the internal connection context. The minimum size can be found in extern const unint32_t - * connectionUserBufferMinimumSize. */ -#ifndef IOT_DEMO_HTTPS_CONN_BUFFER_SIZE - #define IOT_DEMO_HTTPS_CONN_BUFFER_SIZE ( ( int ) 400 ) -#endif - -/* Size in bytes of the user buffer used to store the internal request context and HTTP request header lines. - * The size presented here accounts for the storage of the internal context, the first request line in the HTTP - * formatted header and extra headers. The minimum size can be found in extern const uint32_t - * requestUserBufferMinimumSize. Keep in mind that this requestUserBufferMinimumSize does not include the size of the - * path in the request line. The path could be well over 100 characters long as it includes not only the object key name - * in S3, but also the query following. The query following has the AWSAccessKeyId, the expiration time, and the - * AWS Signature Version 4 signature.*/ -#ifndef IOT_DEMO_HTTPS_REQ_USER_BUFFER_SIZE - #define IOT_DEMO_HTTPS_REQ_USER_BUFFER_SIZE ( ( int ) 512 ) -#endif - -/* Size in bytes of the user buffer used to store the internal response context and the HTTP response header lines. - * The size presented here accounts for the storage of the internal context, the first request line in the HTTP - * formatted header and extra headers. The minimum can be found in responseUserBufferMinimumSize. - * Keep in mind that if the headers from the response do not all fit into this buffer, then the rest of the headers - * will be discarded. The minimum size can be found in extern const uint32_t responseUserBufferMinimumSize. */ -#ifndef IOT_DEMO_HTTPS_RESP_USER_BUFFER_SIZE - #define IOT_DEMO_HTTPS_RESP_USER_BUFFER_SIZE ( ( int ) 1024 ) -#endif - -/* Size in bytes of the buffer used to store the response body (parts of it). This should be greater than or equal to - * the size of the file we want to download.*/ -#ifndef IOT_DEMO_HTTPS_RESP_BODY_BUFFER_SIZE - #define IOT_DEMO_HTTPS_RESP_BODY_BUFFER_SIZE ( ( int ) 512 ) -#endif - -/* Timeout in milliseconds to wait for all asynchronous requests to finish. This timeout starts when the last - * IOT_HTTPS_DEMO_MAX_ASYNC_REQUESTS sent has been scheduled. */ -#ifndef IOT_HTTPS_DEMO_ASYNC_TIMEOUT_MS - #define IOT_HTTPS_DEMO_ASYNC_TIMEOUT_MS ( ( uint32_t ) 300000 ) /* 5 minute timeout for this demo. */ -#endif - -/* Time to wait in milliseconds before retrying the HTTPS Connection. A connection is only attempted again if -* IOT_HTTPS_CONNECTION_ERROR is returned from IotHttpsClient_Connect(). This indicates an error in the network -* layer. To view logging for network errors update IOT_LOG_LEVEL_NETWORK to IOT_LOG_ERROR in iot_config.h. */ -#ifndef IOT_DEMO_HTTPS_CONNECTION_RETRY_WAIT_MS - #define IOT_DEMO_HTTPS_CONNECTION_RETRY_WAIT_MS ( ( uint32_t ) 3000 ) -#endif - -/* Number of times to retry the HTTPS connection. A connection is only attempted again if - * IOT_HTTPS_CONNECTION_ERROR is returned from IotHttpsClient_Connect(). This indicates an error in the network - * layer. To view logging for network errors update IOT_LOG_LEVEL_NETWORK to IOT_LOG_ERROR in iot_config.h. */ -#ifndef IOT_DEMO_HTTPS_CONNECTION_NUM_RETRY - #define IOT_DEMO_HTTPS_CONNECTION_NUM_RETRY ( ( uint32_t ) 3 ) -#endif - -/** @endcond */ - -/** - * @brief The time in milliseconds for the demo task to wait before trying again to find a free request from the pool - * of requests. - */ -#define GET_FREE_REQUEST_RETRY_WAIT_TIME_MS ( ( uint32_t ) 300 ) - -/** - * @brief The log2 of the number of bits in a uint8_t. - * - * This is for calculation of how many uint8_t words there should be in the bitmap. - */ -#define LOG2_BITS_PER_BYTE ( ( uint32_t ) 3 ) -#define BITS_PER_BYTE ( ( ( uint32_t ) 1 ) << LOG2_BITS_PER_BYTE ) /**< @brief The number of bits in a byte. */ - -/** - * @brief Bitmask calculation for setting the file download information bitmaps. - */ -#define BITMASK( rangeBlock ) ( ( ( uint32_t ) 1 ) << ( ( ( uint32_t ) rangeBlock ) % BITS_PER_BYTE ) ) - -/** - * @brief Byte offset calculation for indexing to the correct byte in the file download information bitmap. - */ -#define BYTE_OFFSET( rangeBlock ) ( ( ( uint32_t ) rangeBlock ) >> LOG2_BITS_PER_BYTE ) - -/*-----------------------------------------------------------*/ - -/** - * @brief This structure defines data consumed and kept track of in the async callbacks per request. - */ -typedef struct _requestContext -{ - char pRangeValueStr[ RANGE_VALUE_MAX_LENGTH ]; /**< @brief This string is generated outside of the callback context and used to set the request Range header within the callback context. */ - int reqNum; /**< @brief This is the current request number in the static pool of request memory. */ - uint32_t currRange; /**< @brief This is the current range block that is being downloaded. */ - uint32_t currDownloaded; /**< @brief The current number of bytes downloaded in this request. */ - uint32_t numReqBytes; /**< @brief The number of bytes we want to downloaded in this request. */ - IotHttpsConnectionHandle_t * pConnHandle; /**< @brief The connection handle for the request/response. */ - IotHttpsConnectionInfo_t * pConnConfig; /**< @brief Pointer to the connection handle for the request/response. */ - bool scheduled; /**< @brief This is set to true when the request has been scheduled */ -} _requestContext_t; - -/** - * @brief This structure defines information related to the file we wish to download. - * - * This information keeps track of the size of the file, the total number of range blocks, which blocks have completed, - * which ones are scheduled to be requested, and how many range blocks remain. - */ -typedef struct _fileDownloadInfo -{ - uint32_t fileSize; /**< @brief The total size of the file to be downloaded. */ - uint32_t totalRanges; /**< @brief the total number of ranges in the file size. */ - uint8_t * downloadedBitmap; /**< @brief Bitmap to keep track of chunks downloaded. */ - uint8_t * scheduledBitmap; /**< @brief Bitmap of ranges scheduled, but not completed. */ - uint32_t rangesRemaining; /**< @brief The total number of ranges remaining to download. */ -} _fileDownloadInfo_t; - -/** - * @brief The definition for the pool of HTTPS Client library request resources. - * - * This structure definition contains the pool of memory and configurations needed for supported multiple requests and - * their associated responses. - */ -typedef struct _requestPool -{ - /** - * @brief The pool of asynchronous request specific configurations. - */ - IotHttpsAsyncInfo_t pAsyncInfos[ IOT_HTTPS_DEMO_MAX_ASYNC_REQUESTS ]; - - /** - * @brief The pool of HTTPS Client library response configurations. - */ - IotHttpsRequestInfo_t pReqConfigs[ IOT_HTTPS_DEMO_MAX_ASYNC_REQUESTS ]; - - /** - * @brief The pool of HTTPS Client library response configurations. - */ - IotHttpsResponseInfo_t pRespConfigs[ IOT_HTTPS_DEMO_MAX_ASYNC_REQUESTS ]; - - /** - * @brief The pool of HTTPS Client library request handles. - */ - IotHttpsRequestHandle_t pReqHandles[ IOT_HTTPS_DEMO_MAX_ASYNC_REQUESTS ]; - - /** - * @brief The pool of HTTPS Client library response handles. - */ - IotHttpsResponseHandle_t pRespHandles[ IOT_HTTPS_DEMO_MAX_ASYNC_REQUESTS ]; - - /** - * @brief The pool of buffers used to store the request context and the HTTP request header lines. - */ - uint8_t pReqUserBuffers[ IOT_HTTPS_DEMO_MAX_ASYNC_REQUESTS ][ IOT_DEMO_HTTPS_REQ_USER_BUFFER_SIZE ]; - - /** - * @brief The pool of buffers used to store the response context and the HTTP response header lines. - */ - uint8_t pRespUserBuffers[ IOT_HTTPS_DEMO_MAX_ASYNC_REQUESTS ][ IOT_DEMO_HTTPS_RESP_USER_BUFFER_SIZE ]; - - /** - * @brief The pool of data kept track of and used in the callback context for each request. - */ - _requestContext_t pRequestContexts[ IOT_HTTPS_DEMO_MAX_ASYNC_REQUESTS ]; -} _requestPool_t; - -/*-----------------------------------------------------------*/ - -/** - * @brief Buffer to store parts of the response body. - * - * Since all of the requests in this demo are on the same connection, only one async task at a time will be accessing - * this buffer to retrieve data from the network to print. - */ -static uint8_t _pRespBodyBuffer[ IOT_DEMO_HTTPS_RESP_BODY_BUFFER_SIZE ] = { 0 }; - -/** - * @brief Semaphore used to signal that the demo is finished. - * The task that downloads the final increment of the file posts to this semaphore. - */ -static IotSemaphore_t _fileFinishedSem = { 0 }; - -/** - * @brief Array to keep track of HTTPS Client library request and response resources (buffers, handles, and configs) - * in use. - */ -static bool _pInUseRequests[ IOT_HTTPS_DEMO_MAX_ASYNC_REQUESTS ] = { 0 }; - -/** - * @brief Mutex to protect retrieving and setting the requests in use. - * - * This protects the buffers from being reused. - */ -static IotMutex_t _inUseRequestsMutex = { 0 }; - -/** - * @brief Mutex protecting the scheduling of requests. - * - * This protects scheduling activities. If The connection is closed by the server, then the asynchronous callback - * context will reschedule requests that have not been sent yet. The demo application thread also schedules requests - * when there is a request user buffer available. This mutex ensures requests are not schedule multiple times. - */ -static IotMutex_t _requestSchedulingMutex = { 0 }; - -/** - * @brief Configurations for the HTTPS connection. - */ -static IotHttpsConnectionInfo_t _connConfig = { 0 }; - -/** - * @brief Handle identifying the HTTPS connection. - */ -static IotHttpsConnectionHandle_t _connHandle = IOT_HTTPS_CONNECTION_HANDLE_INITIALIZER; - -/** - * @brief Connection buffer use to store the internal connection context. - */ -static uint8_t _pConnUserBuffer[ IOT_DEMO_HTTPS_CONN_BUFFER_SIZE ] = { 0 }; - -/** - * @brief Pool of request and associated response buffers, handles, and configurations. - */ -static _requestPool_t _requestPool = { 0 }; - -/** - * @brief Information about the file that is to be downloaded. - */ -static _fileDownloadInfo_t _fileDownloadInfo = { 0 }; - -/*-----------------------------------------------------------*/ - -/* Declaration of the demo function. */ -int RunHttpsAsyncDownloadDemo( bool awsIotMqttMode, - const char * pIdentifier, - void * pNetworkServerInfo, - void * pNetworkCredentialInfo, - const IotNetworkInterface_t * pNetworkInterface ); - -/*-----------------------------------------------------------*/ - -/** - * @brief Get an index to a free HTTPS Client library request resource. - * - * The resource pool is defined above in the static variables section. - * - * @return The free index if one is found. -1 if one is not found. - */ -static int _getFreeRequestIndex( void ) -{ - int i = 0; - int freeIndex = -1; - - IotMutex_Lock( &( _inUseRequestsMutex ) ); - - for( i = 0; i < IOT_HTTPS_DEMO_MAX_ASYNC_REQUESTS; i++ ) - { - if( !_pInUseRequests[ i ] ) - { - _pInUseRequests[ i ] = true; - freeIndex = i; - break; - } - } - - IotMutex_Unlock( &( _inUseRequestsMutex ) ); - - /* If we exited the loop, then none were found. */ - return freeIndex; -} - -/*-----------------------------------------------------------*/ - -/** - * @brief Clear the request context in preparation for the next request to use. - * - * User buffers and body buffers are zeroed out by the HTTPS Client library. - */ -static void _clearRequestContext( int i ) -{ - memset( &_requestPool.pRequestContexts[ i ], 0, sizeof( _requestContext_t ) ); -} - -/*-----------------------------------------------------------*/ - -/** - * @brief Free an index in the pool HTTPS Client library request resource. - * - * The resource pool is defined above in the static variables section. - * - * @param[in] i The index in the request pool to mark as free for use. - */ -static void _freeRequestIndex( int i ) -{ - IotMutex_Lock( &( _inUseRequestsMutex ) ); - _pInUseRequests[ i ] = false; - _clearRequestContext( i ); - IotMutex_Unlock( &( _inUseRequestsMutex ) ); -} - -/*-----------------------------------------------------------*/ - -/** - * @brief Free all requests in the pool that have been marked as scheduled, except - * for the exception index. - * - * This function is used during reconnection to free any possible requests that - * might still have been scheduled to the HTTPS Client library to run but have - * not been sent yet. Reconnection happens during the _readReadyCallback(). - * The response's memory cannot be used until the _responseCompleteCallback() - * returns, so during reconnection we need to indicate that all memory except - * the current response is to be marked as free. - * - * @param[in] exception Request index to not free. This is -1 for no exceptions. - */ -static void _freeScheduledRequests( int exception ) -{ - /* Index into the request pool. */ - int i = 0; - - IotMutex_Lock( &( _inUseRequestsMutex ) ); - - for( i = 0; i < IOT_HTTPS_DEMO_MAX_ASYNC_REQUESTS; i++ ) - { - if( ( i != exception ) && - ( _requestPool.pRequestContexts[ i ].scheduled == true ) ) - { - _pInUseRequests[ i ] = false; - _clearRequestContext( i ); - } - } - - IotMutex_Unlock( &( _inUseRequestsMutex ) ); -} - -/*-----------------------------------------------------------*/ - -/** - * @brief Initialize the file download information. - * - * @param[in] fileSize - The size of the file that is desired to download. - * - * @return `EXIT_SUCCESS` if _fileDownloadInformation was successfully initialized. `EXIT_FAILURE` otherwise. - */ -static int _initializeFileDownloadInformation( size_t fileSize ) -{ - IOT_FUNCTION_ENTRY( int, EXIT_SUCCESS ); - - /* The length of the bitmap for allocating a new bitmap. */ - uint32_t bitmapLength; - - _fileDownloadInfo.fileSize = fileSize; - - /* Set the total number of ranges needed to download the file. */ - _fileDownloadInfo.totalRanges = ( _fileDownloadInfo.fileSize + IOT_DEMO_HTTPS_RESP_BODY_BUFFER_SIZE - 1 ) / IOT_DEMO_HTTPS_RESP_BODY_BUFFER_SIZE; - _fileDownloadInfo.rangesRemaining = _fileDownloadInfo.totalRanges; - /* Calculate the length of the rangeBitmap to keep track of already downloaded ranges. */ - bitmapLength = ( _fileDownloadInfo.totalRanges + ( BITS_PER_BYTE - 1U ) ) >> LOG2_BITS_PER_BYTE; - _fileDownloadInfo.downloadedBitmap = ( uint8_t * ) IotDemo_Malloc( bitmapLength ); - - if( _fileDownloadInfo.downloadedBitmap == NULL ) - { - IotLogError( "Could not allocate a new bitmap for keeping track of downloaded ranges." ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - _fileDownloadInfo.scheduledBitmap = ( uint8_t * ) IotDemo_Malloc( bitmapLength ); - - if( _fileDownloadInfo.scheduledBitmap == NULL ) - { - IotLogError( "Could not allocate a new bitmap for keeping track of scheduled ranges." ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - memset( _fileDownloadInfo.downloadedBitmap, 0, bitmapLength ); - memset( _fileDownloadInfo.scheduledBitmap, 0, bitmapLength ); - - IOT_FUNCTION_EXIT_NO_CLEANUP(); -} - -/*-----------------------------------------------------------*/ - -/** - * @brief Clean up the file download information. - * - * Deallocates resources taken by the file download information context. - */ -static void _cleanupFileDownloadInformation( void ) -{ - if( _fileDownloadInfo.downloadedBitmap != NULL ) - { - IotDemo_Free( _fileDownloadInfo.downloadedBitmap ); - } - - if( _fileDownloadInfo.scheduledBitmap != NULL ) - { - IotDemo_Free( _fileDownloadInfo.scheduledBitmap ); - } -} - -/*-----------------------------------------------------------*/ - -/** - * @brief Starting from a current range, get the next incomplete file byte range. - * - * A range is incomplete if it is both not completely downloaded and it is unscheduled to an asynchronous request. - * If the currentRange is incomplete, then that is returned, otherwise the next incomplete one is returned. - * If the next incomplete range is before the currentRange, this routine will circle back to the start of the bitmap to - * get the incomplete range. - * - * @param[in out] The currentRange to start checking for an incomplete range. This will get replaced with the incomplete - * range. The value here is valid only if the function returns true. - * - * @return false if there are no incomplete ranges left. - * True if an incomplete range was found. - */ -static bool _getNextIncompleteRange( uint32_t * currentRange ) -{ - bool found = false; - /* An intermediate bitMask calculation for checking if the currentRange is already downloaded or not. */ - uint32_t bitMask = 0; - - /* An intermediate byteOffset into the downloadedBitmap and scheduledBitmap to check if the currentRange is - * already downloaded or already scheduled. */ - uint32_t byteOffset = 0; - - /* A count from 0 to check if the total ranges is reached because, in the logic below, currentRange will wrap - * around to check the start of the bitmap. */ - uint32_t rangeCheckCount = 0; - - do - { - /* Check if the current range in the file is already downloaded or is has already been scheduled. The - * bitmaps contain as many bits as there are blocks of byte ranges. The lines below help to index - * into the bitmaps and check if the bit representing that byte range is set. */ - bitMask = BITMASK( *currentRange ); - byteOffset = BYTE_OFFSET( *currentRange ); - - /* If this range has not been downloaded yet and has not been schedule, then return the current range. */ - if( ( ( _fileDownloadInfo.downloadedBitmap[ byteOffset ] & bitMask ) == ( ( uint8_t ) 0 ) ) && - ( ( _fileDownloadInfo.scheduledBitmap[ byteOffset ] & bitMask ) == ( ( uint8_t ) 0 ) ) ) - { - break; - } - - rangeCheckCount++; - ( *currentRange )++; - - /* This is less expensive than a modulus. */ - if( *currentRange == _fileDownloadInfo.totalRanges ) - { - *currentRange = 0; - } - } while( rangeCheckCount < _fileDownloadInfo.totalRanges ); - - if( rangeCheckCount == _fileDownloadInfo.totalRanges ) - { - found = false; - } - else - { - found = true; - } - - return found; -} - -/*-----------------------------------------------------------*/ - -/** - * @brief Clear all scheduled ranges in the bitmap for the file to download. - */ -static void _clearAllScheduledRanges( void ) -{ - /* The current range to check if it is scheduled. */ - uint32_t rangeIndex = 0; - /* Bit mask to check in the scheduled bit map if the range has been scheduled. */ - uint32_t bitMask = 0; - /* Byte offset into the scheduled bit map where the range will be located. */ - uint32_t byteOffset = 0; - - for( rangeIndex = 0; rangeIndex < _fileDownloadInfo.totalRanges; rangeIndex++ ) - { - bitMask = BITMASK( rangeIndex ); - byteOffset = BYTE_OFFSET( rangeIndex ); - - if( ( _fileDownloadInfo.scheduledBitmap[ byteOffset ] & bitMask ) != ( ( uint8_t ) 0 ) ) - { - _fileDownloadInfo.scheduledBitmap[ byteOffset ] &= ( ~( bitMask ) ); - } - } -} - -/*-----------------------------------------------------------*/ - -/** - * @brief Callback for an asynchronous request to append the Range header to the request header buffer. - * - * @param[in] pPrivData - User private data configured with the HTTPS Client library request configuration. - * @param[in] reqHandle - Identifier for the current request in progress. - */ -static void _appendHeaderCallback( void * pPrivData, - IotHttpsRequestHandle_t reqHandle ) -{ - /* The range value string, of the increment of file to download, from the user private data will be referenced with - * this variable. */ - char * pRangeValueStr = ( ( _requestContext_t * ) ( pPrivData ) )->pRangeValueStr; - - IotLogInfo( "Inside of the append header callback for part %s", pRangeValueStr ); - /* The length of the range value string. */ - uint32_t rangeValueLen = strlen( pRangeValueStr ); - /* Set the header for a range request and check the HTTPS Client library return code. */ - IotHttpsReturnCode_t status = IotHttpsClient_AddHeader( reqHandle, RANGE_HEADER_FIELD, RANGE_HEADER_FIELD_LENGTH, pRangeValueStr, rangeValueLen ); - - if( status != IOT_HTTPS_OK ) - { - IotLogError( "Failed to write the header Range: %.*s into the request. With error code: %d", rangeValueLen, pRangeValueStr, status ); - /* In this demo cancelling the request is an error condition that ends the demo with a failure. */ - IotHttpsClient_CancelRequestAsync( reqHandle ); - } -} - -/*-----------------------------------------------------------*/ - -/** - * @brief Callback for an asynchronous request to read data from the network. - * - * @note If you wanted to read any headers you must do so in this callback. - * - * @param[in] pPrivData - User private data configured with the HTTPS Client library request configuration. - * @param[in] respHandle - Identifier for the current response in progress. - * @param[in] rc - Return code from the HTTPS Client Library signaling a possible error. - * @param[in] status - The HTTP response status. - */ -static void _readReadyCallback( void * pPrivData, - IotHttpsResponseHandle_t respHandle, - IotHttpsReturnCode_t rc, - uint16_t status ) -{ - /* The amount of body read during this callback. */ - uint32_t readLen; - - /* The range value string, of the increment of file to download, from the user private data will be referenced with - * this variable. */ - char * pRangeValueStr; - /* The HTTP Client Library return code. */ - IotHttpsReturnCode_t returnStatus; - /* The user private data dereferenced. */ - _requestContext_t * pRequestContext = ( _requestContext_t * ) ( pPrivData ); - /* The content length of this HTTP response. */ - uint32_t contentLength = 0; - - /* Buffer to read the HTTP "Connection" header value into. The possible values are "close" and "keep-alive". This - * is the length of the longest string, "keep-alive" plus a NULL terminator. */ - char connectionValueStr[ CONNECTION_KEEP_ALIVE_HEADER_VALUE_LENGTH + 1 ] = { 0 }; - - IotLogInfo( "Inside of the read ready callback for part %s with network return code: %d", pRequestContext->pRangeValueStr, rc ); - - /* If this function is invoked multiple times, we may only want to read the Content-Length header and check the - * HTTP response status once. */ - if( pRequestContext->currDownloaded == 0 ) - { - /* If this response is not a successful partial content delivery, as indicated on the HTTP response code 206, - * then cancel this request. In this demo cancelling the request is an error condition that ends the demo.*/ - if( status != IOT_HTTPS_STATUS_PARTIAL_CONTENT ) - { - IotLogError( "Could not retrieve file from S3. Status code %d", status ); - IotHttpsClient_CancelResponseAsync( respHandle ); - return; - } - - IotLogDebug( "Reading the content length for response %p.", respHandle ); - returnStatus = IotHttpsClient_ReadContentLength( respHandle, &contentLength ); - - if( ( returnStatus != IOT_HTTPS_OK ) || ( contentLength == 0 ) ) - { - IotLogError( "Failed to retrieve the Content-Length from the response. " - "Please try increasing the size of IOT_DEMO_HTTPS_RESP_USER_BUFFER_SIZE." ); - IotHttpsClient_CancelResponseAsync( respHandle ); - return; - } - - /* If the content length of the message is not equal to the size of the byte range we want to download then - * cancel the request. In this demo cancelling the request is an error condition that ends the demo. */ - if( contentLength != pRequestContext->numReqBytes ) - { - IotLogError( "The Content-Length found in this file does not equal the number of bytes requested. So we may " - "not have download the file completely. The content length is %d and the requested number of bytes for " - "this request is %d", contentLength, pRequestContext->numReqBytes ); - IotHttpsClient_CancelResponseAsync( respHandle ); - return; - } - } - - /* Get the the amount of data to read. This demo will fill as much data from the network as can fit into the - * response body buffer. */ - readLen = sizeof( _pRespBodyBuffer ); - - /* Read the data from the network. */ - returnStatus = IotHttpsClient_ReadResponseBody( respHandle, _pRespBodyBuffer, &readLen ); - - if( returnStatus != IOT_HTTPS_OK ) - { - IotLogError( "Failed to read the response body with error %d", returnStatus ); - IotHttpsClient_CancelResponseAsync( respHandle ); - return; - } - - /* Process the response body here. */ - pRangeValueStr = pRequestContext->pRangeValueStr; - IotLogInfo( "Response return code: %d for %s", status, pRangeValueStr ); - IotLogInfo( "Response Body for %s:\r\n%.*s", pRangeValueStr, readLen, _pRespBodyBuffer ); - - /* This callback could be invoked again if there is still more data on the network to be read for this response, so - * the current amount downloaded is incremented. */ - pRequestContext->currDownloaded += readLen; - - if( pRequestContext->currDownloaded > pRequestContext->numReqBytes ) - { - IotLogError( "There is more data received on this response than expected. Received %d data, but requested %d.", - pRequestContext->currDownloaded, - pRequestContext->numReqBytes ); - IotHttpsClient_CancelResponseAsync( respHandle ); - return; - } - - /* Only in the non-error case of the downloaded data equalling the number of requested bytes is the ranged marked - * as downloaded. Also, it makes sense only in the non-error case to check if the server closed the connection. - * Error cases, such as the response body not having the number of requested bytes in the range, will stop the - * demo. */ - if( pRequestContext->currDownloaded == pRequestContext->numReqBytes ) - { - /* Defensive check for overflow. */ - if( _fileDownloadInfo.rangesRemaining == 0 ) - { - IotLogError( "An extra range was downloaded; Range: %s.", pRequestContext->pRangeValueStr ); - IotHttpsClient_CancelResponseAsync( respHandle ); - return; - } - - _fileDownloadInfo.rangesRemaining--; - _fileDownloadInfo.downloadedBitmap[ BYTE_OFFSET( pRequestContext->currRange ) ] |= BITMASK( pRequestContext->currRange ); - - /* Check if the server closed the connection. This done in the readReadyCallback() because a possible pending - * request could be sent right after this response's body is finished being read. This means the - * responseCompleteCallback() is invoked at the same time as another request is sending on the same connetion. - * This is done to increase parallelism in the library. Because the responseCompeteCallback() could be executing - * at the same time a request is being sent, a reconnection needs to be made before the next request sends and - * gets a network error ending the demo. Please see the design flow for more information: - * https://docs.aws.amazon.com/freertos/latest/lib-ref/https/https_design.html#Asynchronous_Design */ - IotLogDebug( "Looking for the \"Connection\" header in response %p.", respHandle ); - returnStatus = IotHttpsClient_ReadHeader( respHandle, - CONNECTION_HEADER_FIELD, - CONNECTION_HEADER_FILED_LENGTH, - connectionValueStr, - sizeof( connectionValueStr ) ); - - /* If there is any other error besides "not found", then that is a fatal error. S3's response will include the - * Connection header only if it closes the connection after the response. */ - if( ( returnStatus != IOT_HTTPS_OK ) && ( returnStatus != IOT_HTTPS_NOT_FOUND ) ) - { - IotLogError( "Failed to read header %s. Error code: %d.", CONNECTION_HEADER_FIELD, returnStatus ); - IotHttpsClient_CancelResponseAsync( respHandle ); - return; - } - - if( strncmp( CONNECTION_CLOSE_HEADER_VALUE, connectionValueStr, CONNECTION_CLOSE_HEADER_VALUE_LENGTH ) == 0 ) - { - IotLogInfo( "The S3 server closed the connection. Reconnecting and rescheduling requests." ); - IotMutex_Lock( &( _requestSchedulingMutex ) ); - - /* All requests scheduled on this connection are dropped during a reconnect. Reconnection disconnects - * a connection that is in the open state, then connects to the server configured. When the connection is - * disconnected it's queue of pending requests is cleared. Since this affects the state of what is - * scheduled, this action is performed within the _requestSchedulingMutex. */ - returnStatus = IotHttpsClient_Connect( pRequestContext->pConnHandle, pRequestContext->pConnConfig ); - - if( returnStatus != IOT_HTTPS_OK ) - { - IotLogError( "Failed to reconnect to the server. Error code: %d.", returnStatus ); - IotHttpsClient_CancelResponseAsync( respHandle ); - } - else - { - IotLogInfo( "Successfully reconnected to the server." ); - - /* For all requests from the pool that have been scheduled. We want to free them so they will get - * rescheduled by the main application. When a request from the pool is set to unused its associated - * response is also set to unused. This current response is not set to unused so that it's response - * handle memory is not overwritten. This response cannot be reused until the responseCompleteCallback - * is finished. */ - _freeScheduledRequests( pRequestContext->reqNum ); - - /* For each of the scheduled ranges mark them as unscheduled so that the main application will assign - * them to a free request. This current request's range will not be rescheduled because earlier in this - * function the downloadedBitmap was marked before this routine. */ - _clearAllScheduledRanges(); - } - - IotMutex_Unlock( &( _requestSchedulingMutex ) ); - } - } -} - -/*-----------------------------------------------------------*/ - -/** - * @brief Callback for an asynchronous request to notify that the response is complete. - * - * @param[in] pPrivData - User private data configured with the HTTPS Client library request configuration. - * @param[in] respHandle - Identifier for the current response finished. - * @param[in] rc - Return code from the HTTPS Client Library signaling a possible error. - * @param[in] status - The HTTP response status. - */ -static void _responseCompleteCallback( void * pPrivData, - IotHttpsResponseHandle_t respHandle, - IotHttpsReturnCode_t rc, - uint16_t status ) -{ - _requestContext_t * pRequestContext = ( _requestContext_t * ) ( pPrivData ); - - ( void ) respHandle; - ( void ) status; - - IotLogInfo( "Part %s has been fully processed.", pRequestContext->pRangeValueStr ); - - /* If there is was an error anywhere in the request response processing, including a cancellation, then that will - * end the demo. */ - if( rc != IOT_HTTPS_OK ) - { - IotLogError( "There was a problem with the current response %p. Error code: %d. ", respHandle, rc ); - IotSemaphore_Post( &( _fileFinishedSem ) ); - } - else if( pRequestContext->currDownloaded != pRequestContext->numReqBytes ) - { - /* If in this response the total amount read does not equal the number of bytes we requested, then something - * went wrong. */ - IotLogError( "There was a problem downloading the range of the file. We downloaded %d. but wanted %d.", - pRequestContext->currDownloaded, - pRequestContext->numReqBytes ); - IotSemaphore_Post( &( _fileFinishedSem ) ); - } - else - { - /* The main application is waiting for the response to finish. The demo application task signals that the file - * is finished when the number of ranges downloaded equals the total number of ranges. */ - IotLogInfo( "Downloaded: %d/%d range blocks", _fileDownloadInfo.totalRanges - _fileDownloadInfo.rangesRemaining, _fileDownloadInfo.totalRanges ); - - if( _fileDownloadInfo.rangesRemaining == 0 ) - { - IotLogDebug( "File fully downloaded. Range blocks downloaded: %d", _fileDownloadInfo.totalRanges - _fileDownloadInfo.rangesRemaining ); - IotSemaphore_Post( &( _fileFinishedSem ) ); - } - } - - /* Free up this request from the request pool. This is done last to ensure that the request context is not - * overwritten by a new request. */ - _freeRequestIndex( pRequestContext->reqNum ); - _fileDownloadInfo.scheduledBitmap[ BYTE_OFFSET( pRequestContext->currRange ) ] &= ~( BITMASK( pRequestContext->currRange ) ); -} - -/*-----------------------------------------------------------*/ - -/** - * @brief Callback for an asynchronous request to notify that the connection was closed. - * - * The connection will close and this callback will be invoked if there are network errors or if there was an error - * parsing the response. - * The connection will also close and this callback invoked, if a request is marked as non-persistent in - * #IotHttpsRequestInfo_t.isNonPersistent. - * This demo does not send a non-persistent marked request. - * This callback will not be invoked when the application calls API IotHttpsClient_Disconnect() to disconnect - * explicitly. - * - * @param[in] pPrivData - User private data configured with the HTTPS Client library request configuration. - * @param[in] connHandle - Identifier for the current connection. - * @param[in] rc - Return code from the HTTPS Client Library signaling a possible error.. - */ -static void _connectionClosedCallback( void * pPrivData, - IotHttpsConnectionHandle_t connHandle, - IotHttpsReturnCode_t rc ) -{ - ( void ) pPrivData; - ( void ) connHandle; - ( void ) rc; - IotLogInfo( "Connection with the s3 server has been closed." ); -} - -/*-----------------------------------------------------------*/ - -/** - * @brief Callback to notify of errors that occurred during this asynchronous request. - * - * @param[in] pPrivData - User private data configured with the HTTPS Client library request configuration. - * @param[in] reqHandle - Identifier for the request. - * @param[in] rc - Return code from the HTTPS Client Library of the error. - */ -static void _errorCallback( void * pPrivData, - IotHttpsRequestHandle_t reqHandle, - IotHttpsResponseHandle_t respHandle, - IotHttpsReturnCode_t rc ) -{ - ( void ) reqHandle; - ( void ) respHandle; - - char * pRangeValueStr = ( ( _requestContext_t * ) ( pPrivData ) )->pRangeValueStr; - IotLogError( "An error occurred during range %s with code: %d", pRangeValueStr, rc ); -} - -/*-----------------------------------------------------------*/ - -/** - * @brief Schedule the asynchronous request. - * - * This routine will prepare the request then schedule it. - * - * @param[in] reqIndex The index into the request resource pool. - * @param[in] currentRange The current partial file range to request. - * - * @return `EXIT_SUCCESS` if the request was successfully scheduled. `EXIT_FAILURE` otherwise. - */ -static int _scheduleAsyncRequest( int reqIndex, - uint32_t currentRange ) -{ - IOT_FUNCTION_ENTRY( int, EXIT_SUCCESS ); - - /* HTTPS Client library return status. */ - IotHttpsReturnCode_t httpsClientStatus; - /* The number of bytes we want to request with in each range of the file bytes. */ - uint32_t numReqBytes = 0; - /* curByte indicates which starting byte we want to download next. */ - uint32_t curByte = 0; - - /* The starting byte is found as the start of a multiple of the body buffer. */ - curByte = currentRange * IOT_DEMO_HTTPS_RESP_BODY_BUFFER_SIZE; - - /* The number of bytes requested each time is the size of the body buffer or it is the remaining file range left. */ - numReqBytes = IOT_DEMO_HTTPS_RESP_BODY_BUFFER_SIZE; - - if( ( _fileDownloadInfo.fileSize - curByte ) < numReqBytes ) - { - numReqBytes = _fileDownloadInfo.fileSize - curByte; - } - - /* Generate the "Range" header's value string of the form "bytes=N-M". */ - int numWritten = snprintf( _requestPool.pRequestContexts[ reqIndex ].pRangeValueStr, - sizeof( _requestPool.pRequestContexts[ reqIndex ].pRangeValueStr ), - "bytes=%u-%u", - ( unsigned int ) curByte, - ( unsigned int ) ( curByte + numReqBytes - 1 ) ); - - if( ( numWritten < 0 ) || ( numWritten >= ( ( int ) sizeof( _requestPool.pRequestContexts[ reqIndex ].pRangeValueStr ) ) ) ) - { - IotLogError( "Failed to write the header value: \"bytes=%d-%d\" . Error code: %d", - curByte, - curByte + numReqBytes - 1, - numWritten ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Set the user private data to use in the asynchronous callback context. */ - _requestPool.pRequestContexts[ reqIndex ].pConnHandle = &_connHandle; - _requestPool.pRequestContexts[ reqIndex ].pConnConfig = &_connConfig; - _requestPool.pRequestContexts[ reqIndex ].reqNum = reqIndex; - _requestPool.pRequestContexts[ reqIndex ].currRange = currentRange; - _requestPool.pRequestContexts[ reqIndex ].currDownloaded = 0; - _requestPool.pRequestContexts[ reqIndex ].numReqBytes = numReqBytes; - - /* Re-initialize the request to reuse the request. If we do not reinitialize, then data from the last response - * associated with a different request will linger. */ - httpsClientStatus = IotHttpsClient_InitializeRequest( &( _requestPool.pReqHandles[ reqIndex ] ), - &( _requestPool.pReqConfigs[ reqIndex ] ) ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "An error occurred in IotHttpsClient_InitializeRequest() with error code: %d", - httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Send the request and receive the response asynchronously. This will schedule the async request. This function - * will return immediately after scheduling. */ - IotLogDebug( "Sending asynchronously %s, req num: %p", _requestPool.pRequestContexts[ reqIndex ].pRangeValueStr, _requestPool.pReqHandles[ reqIndex ] ); - httpsClientStatus = IotHttpsClient_SendAsync( _connHandle, - _requestPool.pReqHandles[ reqIndex ], - &( _requestPool.pRespHandles[ reqIndex ] ), - &( _requestPool.pRespConfigs[ reqIndex ] ) ); - _fileDownloadInfo.scheduledBitmap[ BYTE_OFFSET( currentRange ) ] |= BITMASK( currentRange ); - _requestPool.pRequestContexts[ reqIndex ].scheduled = true; - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "Failed to send the request asynchronously with error code: %d", httpsClientStatus ); - /* If we failed to schedule an async request then this is an error and we should exit the loop. */ - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - IOT_FUNCTION_EXIT_NO_CLEANUP(); -} - -/*-----------------------------------------------------------*/ - -/** - * @brief The function that runs the HTTPS Asynchronous demo. - * - * @param[in] awsIotMqttMode Specify if this demo is running with the AWS IoT MQTT server. This is ignored in this demo. - * @param[in] pIdentifier NULL-terminated MQTT client identifier. This is ignored in this demo. - * @param[in] pNetworkServerInfo Contains network information specific for the MQTT demo. This is ignored in this demo. - * @param[in] pNetworkCredentialInfo Contains credential info for a TLS connection. - * @param[in] pNetworkInterface Network interface to use for this demo. - * - * @return `EXIT_SUCCESS` if the demo completes successfully; `EXIT_FAILURE` otherwise. - */ -int RunHttpsAsyncDownloadDemo( bool awsIotMqttMode, - const char * pIdentifier, - void * pNetworkServerInfo, - void * pNetworkCredentialInfo, - const IotNetworkInterface_t * pNetworkInterface ) -{ - IOT_FUNCTION_ENTRY( int, EXIT_SUCCESS ); - - /* Unused parameters. */ - ( void ) awsIotMqttMode; - ( void ) pIdentifier; - ( void ) pNetworkServerInfo; - - /* HTTPS Client library return status. */ - IotHttpsReturnCode_t httpsClientStatus; - - /* The location of the path within string IOT_DEMO_HTTPS_PRESIGNED_GET_URL. */ - const char * pPath = NULL; - /* The length of the path within string IOT_DEMO_HTTPS_PRESIGNED_GET_URL. */ - size_t pathLen = 0; - /* The location of the address within string IOT_DEMO_HTTPS_PRESIGNED_GET_URL. */ - const char * pAddress = NULL; - /* The length of the address within string IOT_DEMO_HTTPS_PRESIGNED_GET_URL. */ - size_t addressLen = 0; - - /* The current attempt in the number of connection tries. */ - uint32_t connAttempt = 0; - /* The current request index being processed. */ - int reqIndex = 0; - /* The current range that is getting ready to schedule a request for. */ - uint32_t currentRange = 0; - /* The length of file that is desired to download. */ - size_t fileSize = 0; - - /* Signal if the global semaphores were created for cleanup. */ - bool inUseRequestMutexCreated = false; - bool fileFinishedSemCreated = false; - bool requestSchedulingMutexCreated = false; - - IotLogInfo( "HTTPS Client Asynchronous S3 download demo using pre-signed URL: %s", IOT_DEMO_HTTPS_PRESIGNED_GET_URL ); - - /* Retrieve the path location from IOT_DEMO_HTTPS_PRESIGNED_GET_URL. This function returns the length of the path - * without the query into pathLen. */ - httpsClientStatus = IotHttpsClient_GetUrlPath( IOT_DEMO_HTTPS_PRESIGNED_GET_URL, strlen( IOT_DEMO_HTTPS_PRESIGNED_GET_URL ), &pPath, &pathLen ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "An error occurred in IotHttpsClient_GetUrlPath() with error code %d.", httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* The path is everything that is not the address. It also includes the query. So we get the strlen( pPath ) to - * acquire everything following in IOT_DEMO_HTTPS_PRESIGNED_GET_URL. */ - pathLen = strlen( pPath ); - - /* Retrieve the address location and length from the IOT_DEMO_HTTPS_PRESIGNED_GET_URL. */ - httpsClientStatus = IotHttpsClient_GetUrlAddress( IOT_DEMO_HTTPS_PRESIGNED_GET_URL, strlen( IOT_DEMO_HTTPS_PRESIGNED_GET_URL ), &pAddress, &addressLen ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "An error occurred in IotHttpsClient_GetUrlAddress() with error code %d.", httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Set the connection configurations. - * Note: TLS Connection to AWS S3 service does not need a client certificate. - * The client authentication is performed at the HTTP protocol layer with a pre-signed URL. */ - _connConfig.pAddress = pAddress; - _connConfig.addressLen = addressLen; - _connConfig.port = IOT_DEMO_HTTPS_PORT; - _connConfig.pCaCert = IOT_DEMO_HTTPS_TRUSTED_ROOT_CA; - _connConfig.caCertLen = sizeof( IOT_DEMO_HTTPS_TRUSTED_ROOT_CA ); - _connConfig.userBuffer.pBuffer = _pConnUserBuffer; - _connConfig.userBuffer.bufferLen = sizeof( _pConnUserBuffer ); - _connConfig.pNetworkInterface = pNetworkInterface; - - /* Initialize the request pool by setting up constant request information shared by all requests. */ - for( reqIndex = 0; reqIndex < IOT_HTTPS_DEMO_MAX_ASYNC_REQUESTS; reqIndex++ ) - { - /* Set the HTTP request configurations. */ - _requestPool.pReqConfigs[ reqIndex ].pPath = pPath; - - _requestPool.pReqConfigs[ reqIndex ].pathLen = pathLen; - _requestPool.pReqConfigs[ reqIndex ].pHost = pAddress; - _requestPool.pReqConfigs[ reqIndex ].hostLen = addressLen; - _requestPool.pReqConfigs[ reqIndex ].method = IOT_HTTPS_METHOD_GET; - _requestPool.pReqConfigs[ reqIndex ].userBuffer.pBuffer = _requestPool.pReqUserBuffers[ reqIndex ]; - _requestPool.pReqConfigs[ reqIndex ].userBuffer.bufferLen = sizeof( _requestPool.pReqUserBuffers[ reqIndex ] ); - _requestPool.pReqConfigs[ reqIndex ].isAsync = true; - - /* Set the HTTP response configurations. */ - _requestPool.pRespConfigs[ reqIndex ].userBuffer.pBuffer = _requestPool.pRespUserBuffers[ reqIndex ]; - _requestPool.pRespConfigs[ reqIndex ].userBuffer.bufferLen = sizeof( _requestPool.pRespUserBuffers[ reqIndex ] ); - _requestPool.pRespConfigs[ reqIndex ].pSyncInfo = NULL; - - /* Set the configurations needed for an asynchronous request. */ - _requestPool.pAsyncInfos[ reqIndex ].callbacks.appendHeaderCallback = _appendHeaderCallback; - _requestPool.pAsyncInfos[ reqIndex ].callbacks.readReadyCallback = _readReadyCallback; - _requestPool.pAsyncInfos[ reqIndex ].callbacks.responseCompleteCallback = _responseCompleteCallback; - _requestPool.pAsyncInfos[ reqIndex ].callbacks.connectionClosedCallback = _connectionClosedCallback; - _requestPool.pAsyncInfos[ reqIndex ].callbacks.errorCallback = _errorCallback; - _requestPool.pAsyncInfos[ reqIndex ].pPrivData = ( void * ) ( &( _requestPool.pRequestContexts[ reqIndex ] ) ); - _requestPool.pReqConfigs[ reqIndex ].u.pAsyncInfo = &( _requestPool.pAsyncInfos[ reqIndex ] ); - } - - /* Create the mutex to protect the pool of requests. */ - inUseRequestMutexCreated = IotMutex_Create( &( _inUseRequestsMutex ), false ); - - if( inUseRequestMutexCreated == false ) - { - IotLogError( "Failed to create a mutex to protect the request pool." ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Create the semaphore for waiting for the response to finish. */ - fileFinishedSemCreated = IotSemaphore_Create( &( _fileFinishedSem ), 0 /* Initial count. */, 1 /* Max count. */ ); - - if( fileFinishedSemCreated == false ) - { - IotLogError( "Failed to create a semaphore to wait for the file to finish." ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Create the mutex protecting the file download information. */ - requestSchedulingMutexCreated = IotMutex_Create( &( _requestSchedulingMutex ), false ); - - if( requestSchedulingMutexCreated == false ) - { - IotLogError( "Failed to create a mutex to protect the file download data." ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Initialize the HTTPS library. */ - httpsClientStatus = IotHttpsClient_Init(); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "An error occurred initializing the HTTPS library. Error code: %d", httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Connect to S3. To lower demo failures due to transient network connection errors, the connection is re-attempted - * at a fixed interval a few times. */ - for( connAttempt = 1; connAttempt <= IOT_DEMO_HTTPS_CONNECTION_NUM_RETRY; connAttempt++ ) - { - httpsClientStatus = IotHttpsClient_Connect( &_connHandle, &_connConfig ); - - if( ( httpsClientStatus == IOT_HTTPS_CONNECTION_ERROR ) && - ( connAttempt < IOT_DEMO_HTTPS_CONNECTION_NUM_RETRY ) ) - { - IotLogError( "Failed to connect to the S3 server, retrying after %d ms.", - IOT_DEMO_HTTPS_CONNECTION_RETRY_WAIT_MS ); - IotClock_SleepMs( IOT_DEMO_HTTPS_CONNECTION_RETRY_WAIT_MS ); - } - else - { - break; - } - } - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "Failed to connect to the server. Error code: %d.", httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Retrieve the size of the file specified in the S3 pre-signed URL. */ - if( _IotHttpsDemo_GetS3ObjectFileSize( ( uint32_t * ) ( &fileSize ), - _connHandle, - pPath, - strlen( pPath ), - pAddress, - addressLen, - _requestPool.pReqUserBuffers[ 0 ], - IOT_DEMO_HTTPS_REQ_USER_BUFFER_SIZE, - _requestPool.pRespUserBuffers[ 0 ], - IOT_DEMO_HTTPS_RESP_USER_BUFFER_SIZE ) != EXIT_SUCCESS ) - { - IotLogError( "Failed to retrieve the s3 object size." ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Initialize the file download information context. */ - if( _initializeFileDownloadInformation( fileSize ) != EXIT_SUCCESS ) - { - IotLogError( "Failed to initialize the global file download information." ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - while( IotSemaphore_GetCount( &( _fileFinishedSem ) ) == 0 ) - { - /* Retrieve a free request. If there are no free requests then put the application thread to sleep to check - * again later if there is one. */ - reqIndex = _getFreeRequestIndex(); - - if( reqIndex == -1 ) - { - IotClock_SleepMs( GET_FREE_REQUEST_RETRY_WAIT_TIME_MS ); - continue; - } - - /* Checking for a scheduledBitmap and scheduling the request is locked in the entirety. This is just in case the - * closed connection is reconnected during one of the asynchronous responses. */ - IotMutex_Lock( &( _requestSchedulingMutex ) ); - - if( !( _getNextIncompleteRange( ¤tRange ) ) ) - { - IotLogWarn( "All ranges have been marked as downloaded or are already scheduled." ); - } - else - { - if( _scheduleAsyncRequest( reqIndex, currentRange ) != EXIT_SUCCESS ) - { - IotLogError( "Error scheduling the asynchronous request." ); - IotMutex_Unlock( &( _requestSchedulingMutex ) ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - } - - IotMutex_Unlock( &( _requestSchedulingMutex ) ); - } - - IOT_FUNCTION_CLEANUP_BEGIN(); - - /* Clean up all resources created with this demo. */ - if( inUseRequestMutexCreated ) - { - IotMutex_Destroy( &( _inUseRequestsMutex ) ); - } - - if( fileFinishedSemCreated ) - { - IotSemaphore_Destroy( &( _fileFinishedSem ) ); - } - - if( requestSchedulingMutexCreated ) - { - IotMutex_Destroy( &( _requestSchedulingMutex ) ); - } - - _cleanupFileDownloadInformation(); - - /* Disconnect from the server even if it is already disconnected. */ - IotHttpsClient_Disconnect( _connHandle ); - /* Clean up the library because we are done using it. */ - IotHttpsClient_Cleanup(); - - IOT_FUNCTION_CLEANUP_END(); -} diff --git a/demos/https/iot_demo_https_s3_download_sync.c b/demos/https/iot_demo_https_s3_download_sync.c deleted file mode 100644 index 725d09a4884..00000000000 --- a/demos/https/iot_demo_https_s3_download_sync.c +++ /dev/null @@ -1,571 +0,0 @@ -/* - * FreeRTOS V202011.00 - * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://aws.amazon.com/freertos - * http://www.FreeRTOS.org - */ - -/** - * @file iot_demo_https_s3_download_sync.c - * @brief Demonstrates synchronous usage of the HTTPS library by performing partial content GET requests on a file from - * S3. - */ - -/* The config header is always included first. */ -#include "iot_config.h" - -/* C Standard includes. */ -#include -#include - -/* Set up logging for this demo. */ -#include "iot_demo_logging.h" - -/* FreeRTOS includes. */ -#include "iot_https_client.h" -#include "iot_https_utils.h" -#include "aws_demo_config.h" -#include "platform/iot_network.h" -#include "private/iot_error.h" -#include "iot_demo_https_common.h" -#include "platform/iot_clock.h" - -/** - * This demonstrates downloading a file from S3 using a pre-signed URL using the FreeRTOS HTTP Client library. - * The HTTPS Client library is a generic HTTP/1.1 client library that be used to download files from other webservers as - * well. - * - * A presigned URL is required to run this demo. Please see the demos/https/README.md for instructions on how to - * generate one. - * - * The file is downloaded incrementally using HTTP Partial Content headers. This is done by requesting ranges of the - * bytes in a file with the header: "Range: bytes=N-M", where N is the starting range and M is the ending range. The - * S3 HTTP server will response with a 206 Partial Content type of response and the file byte range requested. Please - * note that not all HTTP servers support a Partial Content download with a byte range. - * - * This demo cannot download a file larger than 2^32 - 1 bytes. - */ - -/** - * @cond DOXYGEN_IGNORE - * Doxygen should ignore this section. - * - * Provide default values for undefined configuration settings. - */ - -/* Presigned URL for S3 GET Object access. */ -#ifndef IOT_DEMO_HTTPS_PRESIGNED_GET_URL - #define IOT_DEMO_HTTPS_PRESIGNED_GET_URL "Please configure a presigned GET URL in iot_config.h." -#endif - -/* TLS port for HTTPS. */ -#ifndef IOT_DEMO_HTTPS_PORT - #define IOT_DEMO_HTTPS_PORT ( ( uint16_t ) 443 ) -#endif - -#ifndef IOT_DEMO_HTTPS_TRUSTED_ROOT_CA - /* This the Baltimore Cybertrust root CA associated with the S3 server certificate. */ - #define IOT_DEMO_HTTPS_TRUSTED_ROOT_CA \ - "-----BEGIN CERTIFICATE-----\n" \ - "MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ\n" \ - "RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD\n" \ - "VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX\n" \ - "DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y\n" \ - "ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy\n" \ - "VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr\n" \ - "mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr\n" \ - "IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK\n" \ - "mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu\n" \ - "XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy\n" \ - "dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye\n" \ - "jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1\n" \ - "BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3\n" \ - "DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92\n" \ - "9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx\n" \ - "jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0\n" \ - "Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz\n" \ - "ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS\n" \ - "R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp\n" \ - "-----END CERTIFICATE-----\n" -#endif /* ifndef IOT_DEMO_HTTPS_TRUSTED_ROOT_CA */ - -/* Size in bytes of the User Buffer used to store the internal connection context. The size presented here accounts for - * storage of the internal connection context. The minimum size can be found in extern const unint32_t connectionUserBufferMinimumSize. */ -#ifndef IOT_DEMO_HTTPS_CONN_BUFFER_SIZE - #define IOT_DEMO_HTTPS_CONN_BUFFER_SIZE ( ( int ) 512 ) -#endif - -/* Size in bytes of the user buffer used to store the internal request context and HTTP request header lines. - * The size presented here accounts for the storage of the internal context, the first request line in the HTTP - * formatted header and extra headers. The minimum size can be found in extern const uint32_t requestUserBufferMinimumSize. */ -#ifndef IOT_DEMO_HTTPS_REQ_USER_BUFFER_SIZE - #define IOT_DEMO_HTTPS_REQ_USER_BUFFER_SIZE ( ( int ) 512 ) -#endif - -/* Size in bytes of the user buffer used to store the internal response context and the HTTP response header lines. - * The size presented here accounts for the storage of the internal context, the first request line in the HTTP - * formatted header and extra headers. The minimum can be found in responseUserBufferMinimumSize. - * Keep in mind that if the headers from the response do not all fit into this buffer, then the rest of the headers - * will be discarded. The minimum size can be found in extern const uint32_t responseUserBufferMinimumSize. */ -#ifndef IOT_DEMO_HTTPS_RESP_USER_BUFFER_SIZE - #define IOT_DEMO_HTTPS_RESP_USER_BUFFER_SIZE ( ( int ) 1024 ) -#endif - -/* Size in bytes of the buffer used to store the response body (parts of it). This should be less than or equal to - * the size of the file we want to download. */ -#ifndef IOT_DEMO_HTTPS_RESP_BODY_BUFFER_SIZE - #define IOT_DEMO_HTTPS_RESP_BODY_BUFFER_SIZE ( ( int ) 512 ) -#endif - -/* Time to wait in milliseconds before retrying the HTTPS Connection. A connection is only attempted again if - * IOT_HTTPS_CONNECTION_ERROR is returned from IotHttpsClient_Connect(). This indicates an error in the network - * layer. To view logging for network errors update IOT_LOG_LEVEL_NETWORK to IOT_LOG_ERROR in iot_config.h */ -#ifndef IOT_DEMO_HTTPS_CONNECTION_RETRY_WAIT_MS - #define IOT_DEMO_HTTPS_CONNECTION_RETRY_WAIT_MS ( ( uint32_t ) 3000 ) -#endif - -/* Number of times to retry the HTTPS connection. A connection is only attempted again if - * IOT_HTTPS_CONNECTION_ERROR is returned from IotHttpsClient_Connect(). This indicates an error in the network - * layer. To view logging for network errors update IOT_LOG_LEVEL_NETWORK to IOT_LOG_ERROR in iot_config.h */ -#ifndef IOT_DEMO_HTTPS_CONNECTION_NUM_RETRY - #define IOT_DEMO_HTTPS_CONNECTION_NUM_RETRY ( ( uint32_t ) 3 ) -#endif - -/* The timeout in milliseconds to wait on IotHttpsClient_SendSync(). This timeout is how long the routine will block - * for waiting for an HTTP response. It is possible that the server could close the connection after receiving a - * request, so never sending the response. */ -#ifndef IOT_DEMO_HTTPS_SYNC_TIMEOUT_MS - #define IOT_DEMO_HTTPS_SYNC_TIMEOUT_MS ( ( uint32_t ) 60000 ) -#endif - -/** @endcond */ - -/*-----------------------------------------------------------*/ - -/** - * @brief Buffer used to store the internal connection context. - */ -static uint8_t _pConnUserBuffer[ IOT_DEMO_HTTPS_CONN_BUFFER_SIZE ] = { 0 }; - -/** - * @brief Buffer used to store the request context and the HTTP request header lines. - */ -static uint8_t _pReqUserBuffer[ IOT_DEMO_HTTPS_REQ_USER_BUFFER_SIZE ] = { 0 }; - -/** - * @brief Buffer used to store the response context and the HTTP response header lines. - */ -static uint8_t _pRespUserBuffer[ IOT_DEMO_HTTPS_RESP_USER_BUFFER_SIZE ] = { 0 }; - -/** - * @brief Buffer used to store parts of the response body. - */ -static uint8_t _pRespBodyBuffer[ IOT_DEMO_HTTPS_RESP_BODY_BUFFER_SIZE ] = { 0 }; - -/*-----------------------------------------------------------*/ - -/* Declaration of demo function. */ -int RunHttpsSyncDownloadDemo( bool awsIotMqttMode, - const char * pIdentifier, - void * pNetworkServerInfo, - void * pNetworkCredentialInfo, - const IotNetworkInterface_t * pNetworkInterface ); - -/*-----------------------------------------------------------*/ - -/** - * @brief The function that runs the HTTPS Synchronous Download demo. - * - * @param[in] awsIotMqttMode Specify if this demo is running with the AWS IoT MQTT server. This is ignored in this demo. - * @param[in] pIdentifier NULL-terminated MQTT client identifier. This is ignored in this demo. - * @param[in] pNetworkServerInfo Contains network information specific for the MQTT demo. This is ignored in this demo. - * @param[in] pNetworkCredentialInfo Contains credential Info for a TLS connection. - * @param[in] pNetworkInterface Network interface to use for this demo. - * - * @return `EXIT_SUCCESS` if the demo completes successfully; `EXIT_FAILURE` otherwise. - */ -int RunHttpsSyncDownloadDemo( bool awsIotMqttMode, - const char * pIdentifier, - void * pNetworkServerInfo, - void * pNetworkCredentialInfo, - const IotNetworkInterface_t * pNetworkInterface ) -{ - IOT_FUNCTION_ENTRY( int, EXIT_SUCCESS ); - - /* Unused parameters. */ - ( void ) awsIotMqttMode; - ( void ) pIdentifier; - ( void ) pNetworkServerInfo; - - /* HTTPS Client library return status. */ - IotHttpsReturnCode_t httpsClientStatus = IOT_HTTPS_OK; - - /* Configurations for the HTTPS connection. */ - IotHttpsConnectionInfo_t connConfig = { 0 }; - /* Handle identifying the HTTPS connection. */ - IotHttpsConnectionHandle_t connHandle = IOT_HTTPS_CONNECTION_HANDLE_INITIALIZER; - /* Configurations for the HTTPS request. */ - IotHttpsRequestInfo_t reqConfig = { 0 }; - /* Configurations for the HTTPS response. */ - IotHttpsResponseInfo_t respConfig = { 0 }; - - /* Handle identifying the HTTP request. This is valid after the request has been initialized with - * IotHttpsClient_InitializeRequest(). */ - IotHttpsRequestHandle_t reqHandle = IOT_HTTPS_REQUEST_HANDLE_INITIALIZER; - - /* Handle identifying the HTTP response. This is valid after the response has been received with - * IotHttpsClient_SendSync(). */ - IotHttpsResponseHandle_t respHandle = IOT_HTTPS_RESPONSE_HANDLE_INITIALIZER; - /* Synchronous request specific configurations. */ - IotHttpsSyncInfo_t reqSyncInfo = { 0 }; - /* Synchronous response specific configurations. */ - IotHttpsSyncInfo_t respSyncInfo = { 0 }; - - /* The location of the path within string IOT_DEMO_HTTPS_PRESIGNED_GET_URL. */ - const char * pPath = NULL; - /* The length of the path within string IOT_DEMO_HTTPS_PRESIGNED_GET_URL. */ - size_t pathLen = 0; - /* The location of the address within string IOT_DEMO_HTTPS_PRESIGNED_GET_URL. */ - const char * pAddress = NULL; - /* The length of the address within string IOT_DEMO_HTTPS_PRESIGNED_GET_URL. */ - size_t addressLen = 0; - - /* The status of HTTP responses for each request. */ - uint16_t respStatus = IOT_HTTPS_STATUS_OK; - /* The content length of HTTP responses for each request. */ - uint32_t contentLength = 0; - - /* The size of the file we are trying to download in S3. */ - uint32_t fileSize = 0; - /* The number of bytes we want to request with in each range of the file bytes. */ - uint32_t numReqBytes = 0; - /* curByte indicates which starting byte we want to download next. */ - uint32_t curByte = 0; - /* Buffer to write the Range: header value string. */ - char pRangeValueStr[ RANGE_VALUE_MAX_LENGTH ] = { 0 }; - /* The current attempt in the number of connection tries. */ - uint32_t connAttempt = 0; - - /* Buffer to read the Connection header value into. The possible values are "close" and "keep-alive". This is the - * length of the longest string, "keep-alive" plus a NULL terminator. */ - char connectionValueStr[ CONNECTION_KEEP_ALIVE_HEADER_VALUE_LENGTH + 1 ] = { 0 }; - - IotLogInfo( "HTTPS Client Synchronous S3 download demo using pre-signed URL: %s", IOT_DEMO_HTTPS_PRESIGNED_GET_URL ); - - /* Retrieve the path location from IOT_DEMO_HTTPS_PRESIGNED_GET_URL. This function returns the length of the path - * without the query into pathLen. */ - httpsClientStatus = IotHttpsClient_GetUrlPath( IOT_DEMO_HTTPS_PRESIGNED_GET_URL, - strlen( IOT_DEMO_HTTPS_PRESIGNED_GET_URL ), - &pPath, - &pathLen ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "An error occurred in IotHttpsClient_GetUrlPath() on URL %s. Error code: %d", - IOT_DEMO_HTTPS_PRESIGNED_GET_URL, - httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Retrieve the address location and length from the IOT_DEMO_HTTPS_PRESIGNED_GET_URL. */ - httpsClientStatus = IotHttpsClient_GetUrlAddress( IOT_DEMO_HTTPS_PRESIGNED_GET_URL, - strlen( IOT_DEMO_HTTPS_PRESIGNED_GET_URL ), - &pAddress, - &addressLen ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "An error occurred in IotHttpsClient_GetUrlAddress() on URL %s\r\n. Error code %d", - IOT_DEMO_HTTPS_PRESIGNED_GET_URL, - httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Set the connection configurations. - * Note: TLS Connection to AWS S3 service does not need a client certificate. - * The client authentication is performed at the HTTP protocol layer with a pre-signed URL. */ - connConfig.pAddress = pAddress; - connConfig.addressLen = addressLen; - connConfig.port = IOT_DEMO_HTTPS_PORT; - connConfig.pCaCert = IOT_DEMO_HTTPS_TRUSTED_ROOT_CA; - connConfig.caCertLen = sizeof( IOT_DEMO_HTTPS_TRUSTED_ROOT_CA ); - connConfig.userBuffer.pBuffer = _pConnUserBuffer; - connConfig.userBuffer.bufferLen = sizeof( _pConnUserBuffer ); - connConfig.pNetworkInterface = pNetworkInterface; - - /* Set the configurations needed for a synchronous request. */ - reqSyncInfo.pBody = NULL; /* This is a GET request so there is no data in the body. */ - reqSyncInfo.bodyLen = 0; /* Since there is not data in the body the length is 0. */ - - /* Set the configurations needed for a synchronous response. */ - respSyncInfo.pBody = _pRespBodyBuffer; /* This is a GET request so should configure a place to retreive the - * response body. */ - respSyncInfo.bodyLen = sizeof( _pRespBodyBuffer ); /* The length of the GET request's response body. This should be - * greater than or equal to the size of the file requested, for the - * best performance. */ - - /* Set the request configurations. */ - reqConfig.pPath = pPath; - - /* The path is everything that is not the address. It also includes the query. So we get the strlen( pPath ) to - * acquire everything following in IOT_DEMO_HTTPS_PRESIGNED_GET_URL. */ - reqConfig.pathLen = strlen( pPath ); - reqConfig.pHost = pAddress; - reqConfig.hostLen = addressLen; - reqConfig.method = IOT_HTTPS_METHOD_GET; - reqConfig.isNonPersistent = false; - reqConfig.userBuffer.pBuffer = _pReqUserBuffer; - reqConfig.userBuffer.bufferLen = sizeof( _pReqUserBuffer ); - reqConfig.isAsync = false; - reqConfig.u.pSyncInfo = &reqSyncInfo; - - /* Set the response configurations. */ - respConfig.userBuffer.pBuffer = _pRespUserBuffer; - respConfig.userBuffer.bufferLen = sizeof( _pRespUserBuffer ); - respConfig.pSyncInfo = &respSyncInfo; - - /* Initialize the HTTPS library. */ - httpsClientStatus = IotHttpsClient_Init(); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "An error occurred initializing the HTTPS library. Error code: %d", httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Connect to S3. */ - for( connAttempt = 1; connAttempt <= IOT_DEMO_HTTPS_CONNECTION_NUM_RETRY; connAttempt++ ) - { - httpsClientStatus = IotHttpsClient_Connect( &connHandle, &connConfig ); - - if( ( httpsClientStatus == IOT_HTTPS_CONNECTION_ERROR ) && - ( connAttempt < IOT_DEMO_HTTPS_CONNECTION_NUM_RETRY ) ) - { - IotLogError( "Failed to connect to the S3 server, retrying after %d ms.", - IOT_DEMO_HTTPS_CONNECTION_RETRY_WAIT_MS ); - IotClock_SleepMs( IOT_DEMO_HTTPS_CONNECTION_RETRY_WAIT_MS ); - continue; - } - else - { - break; - } - } - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "Failed to connect to the server. Error code: %d.", httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Get the size of the file specified in the S3 presigned URL. */ - - /* Verify the file exists by retrieving the file size. */ - if( _IotHttpsDemo_GetS3ObjectFileSize( &fileSize, - connHandle, - pPath, - strlen( pPath ), - pAddress, - addressLen, - _pReqUserBuffer, - IOT_DEMO_HTTPS_REQ_USER_BUFFER_SIZE, - _pRespUserBuffer, - IOT_DEMO_HTTPS_RESP_USER_BUFFER_SIZE ) != EXIT_SUCCESS ) - { - IotLogError( "Failed to retrieve the s3 object size." ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* The number of bytes we want to request each time is the size of the buffer or the file size if it is smaller than - * the buffer size, then the size of the file. */ - numReqBytes = IOT_DEMO_HTTPS_RESP_BODY_BUFFER_SIZE; - - if( fileSize < IOT_DEMO_HTTPS_RESP_BODY_BUFFER_SIZE ) - { - numReqBytes = fileSize; - } - - /* Here we iterate sending byte range requests until the full file has been downloaded. We keep track of the next - * byte to download with curByte. When this reaches the fileSize we stop downloading. - */ - while( curByte < fileSize ) - { - /* Re-initialize the request to reuse the request. If we do not reinitialize then data from the last response - * associated with this request will linger. We reuse reqHandle because we are sending a new sequential - * synchronous request. IotHttpsClient_InitializeRequest will create a new request from the reqConfig and return - * a reqHandle that is ready to use as a NEW request. */ - httpsClientStatus = IotHttpsClient_InitializeRequest( &reqHandle, &reqConfig ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "An error occurred in IotHttpsClient_InitializeRequest() with error code: %d", httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Get the Range header value string. */ - int numWritten = snprintf( pRangeValueStr, - RANGE_VALUE_MAX_LENGTH, - "bytes=%u-%u", - ( unsigned int ) curByte, - ( unsigned int ) ( curByte + numReqBytes - 1 ) ); - - if( ( numWritten < 0 ) || ( numWritten >= RANGE_VALUE_MAX_LENGTH ) ) - { - IotLogError( "Failed to write the header value: \"bytes=%d-%d\" . Error code: %d", - curByte, - curByte + numReqBytes - 1, - numWritten ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Set the header for a range request. */ - httpsClientStatus = IotHttpsClient_AddHeader( reqHandle, RANGE_HEADER_FIELD, RANGE_HEADER_FIELD_LENGTH, pRangeValueStr, numWritten ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "Failed to write the header Range: %.*s into the request. With error code: %d", numWritten, pRangeValueStr, httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Send the request and receive the response synchronously. */ - IotLogInfo( "Now requesting Range: %s.", pRangeValueStr ); - - /* A new response handle is returned from IotHttpsClient_SendSync(). We reuse the respHandle variable because - * the last response was already processed fully. */ - - httpsClientStatus = IotHttpsClient_SendSync( connHandle, reqHandle, &respHandle, &respConfig, 0 ); - - /* If there was network error try again one more time. */ - if( httpsClientStatus == IOT_HTTPS_NETWORK_ERROR ) - { - /* Maybe the network error was because the server disconnected us. */ - httpsClientStatus = IotHttpsClient_Connect( &connHandle, &connConfig ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "Failed to reconnect to the S3 server after a network error on IotHttpsClient_SendSync(). Error code %d.", httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - httpsClientStatus = IotHttpsClient_SendSync( connHandle, reqHandle, &respHandle, &respConfig, IOT_DEMO_HTTPS_SYNC_TIMEOUT_MS ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "Failed receiving the response on a second try after a network error. The error code is: %d", httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - } - else if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "There has been an error receiving the response. The error code is: %d", httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - httpsClientStatus = IotHttpsClient_ReadResponseStatus( respHandle, &respStatus ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "Error in retreiving the response status. Error code %d", httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - if( respStatus != IOT_HTTPS_STATUS_PARTIAL_CONTENT ) - { - IotLogError( "Failed to retrieve the partial content response from s3. Response status: %d", respStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Get the content length of the body for printing without a NULL terminator. */ - httpsClientStatus = IotHttpsClient_ReadContentLength( respHandle, &contentLength ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "Failed to read the Content-Length from the response. Error code %d", httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* The response has been fully received. */ - IotLogInfo( "Response return code: %d", respStatus ); - - /* The logging buffer may not fit all of the response body received and the output on the console will be - * truncated to the first configLOGGING_MAX_MESSAGE_LENGTH number of characters. */ - IotLogInfo( "Response Body: \r\n%.*s", contentLength, _pRespBodyBuffer ); - - /* We increment by the contentLength because the server may not have sent us the range we request. */ - curByte += contentLength; - - IotLogInfo( "Downloaded %d/%d", curByte, fileSize ); - - /* If amount of file remaining to request is less than the current amount of bytes to request next time, then - * update the amount of bytes to request, on the next iteration, to be the amount remaining. */ - if( curByte > fileSize ) - { - IotLogError( "Received more data than the size of the file specified." ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - if( ( fileSize - curByte ) < numReqBytes ) - { - numReqBytes = fileSize - curByte; - } - - /* S3 will close the connection after 100 requests, so check the "Connection" header for a response with a - * "close" value. */ - memset( connectionValueStr, 0, sizeof( connectionValueStr ) ); - httpsClientStatus = IotHttpsClient_ReadHeader( respHandle, - CONNECTION_HEADER_FIELD, - CONNECTION_HEADER_FILED_LENGTH, - connectionValueStr, - sizeof( connectionValueStr ) ); - - /* If there is any other error besides not found, then that is a fatal error. */ - if( ( httpsClientStatus != IOT_HTTPS_OK ) && ( httpsClientStatus != IOT_HTTPS_NOT_FOUND ) ) - { - IotLogError( "Failed to read header %s. Error code: %d.", CONNECTION_HEADER_FIELD, httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - if( strncmp( CONNECTION_CLOSE_HEADER_VALUE, connectionValueStr, CONNECTION_CLOSE_HEADER_VALUE_LENGTH ) == 0 ) - { - /* Reconnect. */ - httpsClientStatus = IotHttpsClient_Connect( &connHandle, &connConfig ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "Failed to reconnect to the server. Error code: %d.", httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - } - } - - IOT_FUNCTION_CLEANUP_BEGIN(); - - /* Disconnect from the server even if the server may have already disconnected us. */ - if( connHandle != NULL ) - { - IotHttpsClient_Disconnect( connHandle ); - } - - /* Clean up the library because we are done using it. */ - IotHttpsClient_Cleanup(); - - IOT_FUNCTION_CLEANUP_END(); -} diff --git a/demos/https/iot_demo_https_s3_upload_async.c b/demos/https/iot_demo_https_s3_upload_async.c deleted file mode 100755 index b492372a0df..00000000000 --- a/demos/https/iot_demo_https_s3_upload_async.c +++ /dev/null @@ -1,541 +0,0 @@ -/* - * FreeRTOS V202011.00 - * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://aws.amazon.com/freertos - * http://www.FreeRTOS.org - */ - -/** - * @file iot_demo_https_s3_upload_async.c - * @brief Demonstrates asynchronous usage of the HTTPS library by performing a PUT requests on a file to S3. - */ - -/* The config header is always included first. */ -#include "iot_config.h" - -/* C Standard includes. */ -#include -#include - -/* Set up logging for this demo. */ -#include "iot_demo_logging.h" - -/* FreeRTOS includes. */ -#include "iot_demo_https_common.h" -#include "iot_https_utils.h" -#include "aws_demo_config.h" -#include "platform/iot_network.h" -#include "platform/iot_threads.h" -#include "private/iot_error.h" -#include "platform/iot_clock.h" - -/** - * This demonstrates uploading a file to S3 using a pre-signed URL using the FreeRTOS HTTP Client library. - * The HTTPS Client library is a generic HTTP/1.1 client library that be used to upload files to other webservers as - * well. - * - * A presigned URL is required to run this demo. Please see the demos/https/README.md for instructions on how to - * generate one. - */ - -/** - * @cond DOXYGEN_IGNORE - * Doxygen should ignore this section. - * - * Provide default values for undefined configuration settings. - */ - -/* Presigned URL for S3 PUT Object access. A GET URL is defined to verify the demo.*/ -#ifndef IOT_DEMO_HTTPS_PRESIGNED_PUT_URL - #define IOT_DEMO_HTTPS_PRESIGNED_PUT_URL "Please configure a presigned PUT URL in iot_config.h." -#endif - -/* TLS port for HTTPS. */ -#ifndef IOT_DEMO_HTTPS_PORT - #define IOT_DEMO_HTTPS_PORT ( ( uint16_t ) 443 ) -#endif - -#ifndef IOT_DEMO_HTTPS_TRUSTED_ROOT_CA - /* This the Baltimore Cybertrust root CA associated with the S3 server certificate. */ - #define IOT_DEMO_HTTPS_TRUSTED_ROOT_CA \ - "-----BEGIN CERTIFICATE-----\n" \ - "MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ\n" \ - "RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD\n" \ - "VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX\n" \ - "DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y\n" \ - "ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy\n" \ - "VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr\n" \ - "mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr\n" \ - "IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK\n" \ - "mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu\n" \ - "XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy\n" \ - "dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye\n" \ - "jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1\n" \ - "BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3\n" \ - "DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92\n" \ - "9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx\n" \ - "jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0\n" \ - "Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz\n" \ - "ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS\n" \ - "R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp\n" \ - "-----END CERTIFICATE-----\n" -#endif /* ifndef IOT_DEMO_HTTPS_TRUSTED_ROOT_CA */ - -/* Size in bytes of the User Buffer used to store the internal connection context. The size presented here accounts for - * storage of the internal connection context. The minimum size can be found in extern const unint32_t - * connectionUserBufferMinimumSize. */ -#ifndef IOT_DEMO_HTTPS_CONN_BUFFER_SIZE - #define IOT_DEMO_HTTPS_CONN_BUFFER_SIZE ( ( int ) 512 ) -#endif - -/* Size in bytes of the user buffer used to store the internal request context and HTTP request header lines. - * The size presented here accounts for the storage of the internal context, the first request line in the HTTP - * formatted header and extra headers. The minimum size can be found in extern const uint32_t - * requestUserBufferMinimumSize. Keep in mind that this requestUserBufferMinimumSize does not include the size of the - * path in the request line. The path could be well over 100 characters long as it includes not only the object key name - * in S3, but also the query following. The query following has the AWSAccessKeyId, the expiration time, and the - * AWS Signature Version 4 signature.*/ -#ifndef IOT_DEMO_HTTPS_REQ_USER_BUFFER_SIZE - #define IOT_DEMO_HTTPS_REQ_USER_BUFFER_SIZE ( ( int ) 512 ) -#endif - -/* Size in bytes of the user buffer used to store the internal response context and the HTTP response header lines. - * The size presented here accounts for the storage of the internal context, the first request line in the HTTP - * formatted header and extra headers. The minimum can be found in responseUserBufferMinimumSize. - * Keep in mind that if the headers from the response do not all fit into this buffer, then the rest of the headers - * will be discarded. The minimum size can be found in extern const uint32_t responseUserBufferMinimumSize. */ -#ifndef IOT_DEMO_HTTPS_RESP_USER_BUFFER_SIZE - #define IOT_DEMO_HTTPS_RESP_USER_BUFFER_SIZE ( ( int ) 1024 ) -#endif - -/* Pointer to the data to upload.*/ -#ifndef IOT_DEMO_HTTPS_UPLOAD_DATA - #define IOT_DEMO_HTTPS_UPLOAD_DATA "Hello World!" -#endif - -/* The size of the data in bytes to upload. */ -#ifndef IOT_DEMO_HTTPS_UPLOAD_DATA_SIZE - #define IOT_DEMO_HTTPS_UPLOAD_DATA_SIZE ( sizeof( IOT_DEMO_HTTPS_UPLOAD_DATA ) - 1 ) -#endif - -/* Time to wait in milliseconds before retrying the HTTPS Connection. A connection is only attempted again if - * IOT_HTTPS_CONNECTION_ERROR is returned from IotHttpsClient_Connect(). This indicates an error in the network - * layer. To view logging for network errors update IOT_LOG_LEVEL_NETWORK to IOT_LOG_ERROR in iot_config.h */ -#ifndef IOT_DEMO_HTTPS_CONNECTION_RETRY_WAIT_MS - #define IOT_DEMO_HTTPS_CONNECTION_RETRY_WAIT_MS ( ( uint32_t ) 3000 ) -#endif - -/* Number of times to retry the HTTPS connection. A connection is only attempted again if - * IOT_HTTPS_CONNECTION_ERROR is returned from IotHttpsClient_Connect(). This indicates an error in the network - * layer. To view logging for network errors update IOT_LOG_LEVEL_NETWORK to IOT_LOG_ERROR in iot_config.h */ -#ifndef IOT_DEMO_HTTPS_CONNECTION_NUM_RETRY - #define IOT_DEMO_HTTPS_CONNECTION_NUM_RETRY ( ( uint32_t ) 3 ) -#endif - -/* Timeout in milliseconds to wait for the asynchronous request to finish. This timeout starts when the last - * IOT_HTTPS_DEMO_MAX_ASYNC_REQUESTS sent has been scheduled. */ -#ifndef IOT_HTTPS_DEMO_ASYNC_TIMEOUT_MS - #define IOT_HTTPS_DEMO_ASYNC_TIMEOUT_MS ( ( uint32_t ) 300000 ) /* 5 minute timeout for this demo. */ -#endif - -/** @endcond */ - -/*-----------------------------------------------------------*/ - -/** - * @brief Buffer used to store the internal connection context. - */ -static uint8_t _pConnUserBuffer[ IOT_DEMO_HTTPS_CONN_BUFFER_SIZE ] = { 0 }; - -/** - * @brief Buffer used to store the request context and the HTTP request header lines. - */ -static uint8_t _pReqUserBuffer[ IOT_DEMO_HTTPS_REQ_USER_BUFFER_SIZE ] = { 0 }; - -/** - * @brief Buffer used to store the response context and the HTTP response header lines. - */ -static uint8_t _pRespUserBuffer[ IOT_DEMO_HTTPS_RESP_USER_BUFFER_SIZE ] = { 0 }; - -/*-----------------------------------------------------------*/ - -/* Declaration of demo function. */ -int RunHttpsAsyncUploadDemo( bool awsIotMqttMode, - const char * pIdentifier, - void * pNetworkServerInfo, - void * pNetworkCredentialInfo, - const IotNetworkInterface_t * pNetworkInterface ); - -/*-----------------------------------------------------------*/ - -/** - * @brief Semaphore use to signal that the demo is finished. - * - * The upload is completely finished when the response is fully received with a 200 HTTP response status. - */ -static IotSemaphore_t _uploadFinishedSem = { 0 }; - -/*-----------------------------------------------------------*/ - -/** - * @brief Callback for an asynchronous request to write data to the network. - * - * @param[in] pPrivData - User private data configured with the HTTPS Client library request configuration. - * @param[in] reqHandle - Identifier for the current request in progress. - */ -static void _writeCallback( void * pPrivData, - IotHttpsRequestHandle_t reqHandle ) -{ - IotHttpsReturnCode_t writeStatus = IOT_HTTPS_OK; - bool * pUploadSuccess = ( bool * ) pPrivData; - - /* Write the upload data to the network. isComplete the last parameter must always be set to 1. */ - writeStatus = IotHttpsClient_WriteRequestBody( reqHandle, - ( uint8_t * ) IOT_DEMO_HTTPS_UPLOAD_DATA, - IOT_DEMO_HTTPS_UPLOAD_DATA_SIZE, - 1 ); - - if( writeStatus != IOT_HTTPS_OK ) - { - IotLogError( "Error writing the request body to the network. Return code %d.", writeStatus ); - *pUploadSuccess = false; - IotHttpsClient_CancelRequestAsync( reqHandle ); - } -} - -/*-----------------------------------------------------------*/ - -/** - * @brief Callback for an asynchronous request to notify that the response is complete. - * - * @param[in] pPrivData - User private data configured with the HTTPS Client library request configuration. - * @param[in] respHandle - Identifier for the current response finished. - * @param[in] rc - Return code from the HTTPS Client Library signaling a possible error. - * @param[in] status - The HTTP response status. - */ -static void _responseCompleteCallback( void * pPrivData, - IotHttpsResponseHandle_t respHandle, - IotHttpsReturnCode_t rc, - uint16_t status ) -{ - ( void ) rc; - ( void ) respHandle; - - bool * pUploadSuccess = ( bool * ) pPrivData; - - /* When the remote server response with 200 OK, the file was successfully uploaded. */ - if( status == IOT_HTTPS_STATUS_OK ) - { - *pUploadSuccess = true; - } - else - { - *pUploadSuccess = false; - } - - /* Post to the semaphore that the upload is finished. */ - IotSemaphore_Post( &( _uploadFinishedSem ) ); -} - -/*-----------------------------------------------------------*/ - -/** - * @brief The function that runs the HTTPS Asynchronous Upload demo. - * - * @param[in] awsIotMqttMode Specify if this demo is running with the AWS IoT MQTT server. This is ignored in this demo. - * @param[in] pIdentifier NULL-terminated MQTT client identifier. This is ignored in this demo. - * @param[in] pNetworkServerInfo Contains network information specific for the MQTT demo. This is ignored in this demo. - * @param[in] pNetworkCredentialInfo Contains credential info for a TLS connection. - * @param[in] pNetworkInterface Network interface to use for this demo. - * - * @return `EXIT_SUCCESS` if the demo completes successfully; `EXIT_FAILURE` otherwise. - */ -int RunHttpsAsyncUploadDemo( bool awsIotMqttMode, - const char * pIdentifier, - void * pNetworkServerInfo, - void * pNetworkCredentialInfo, - const IotNetworkInterface_t * pNetworkInterface ) -{ - IOT_FUNCTION_ENTRY( int, EXIT_SUCCESS ); - - /* Unused parameters. */ - ( void ) awsIotMqttMode; - ( void ) pIdentifier; - ( void ) pNetworkServerInfo; - - /* HTTPS Client library return status. */ - IotHttpsReturnCode_t httpsClientStatus = IOT_HTTPS_OK; - - /* Configurations for the HTTPS connection. */ - IotHttpsConnectionInfo_t connConfig = { 0 }; - /* Handle identifying the HTTPS connection. */ - IotHttpsConnectionHandle_t connHandle = IOT_HTTPS_CONNECTION_HANDLE_INITIALIZER; - /* Configurations for the HTTPS request. */ - IotHttpsRequestInfo_t reqConfig = { 0 }; - /* Configurations for the HTTPS response. */ - IotHttpsResponseInfo_t respConfig = { 0 }; - - /* Handle identifying the HTTP request. This is valid after the request has been initialized with - * IotHttpsClient_InitializeRequest(). */ - IotHttpsRequestHandle_t reqHandle = IOT_HTTPS_REQUEST_HANDLE_INITIALIZER; - /* Handle identifying the HTTP response. This handle is used only in the asynchronous callback. */ - IotHttpsResponseHandle_t respHandle = IOT_HTTPS_RESPONSE_HANDLE_INITIALIZER; - - /* Asynchronous request specific configurations. */ - IotHttpsAsyncInfo_t asyncInfo = { 0 }; - - /* Signal if the global upload finished semaphore was created for cleanup. */ - bool uploadFinishedSemCreated = false; - - /* The location of the path within string IOT_DEMO_HTTPS_PRESIGNED_PUT_URL. */ - const char * pPath = NULL; - /* The length of the path within string IOT_DEMO_HTTPS_PRESIGNED_PUT_URL. */ - size_t pathLen = 0; - /* The location of the address within string IOT_DEMO_HTTPS_PRESIGNED_PUT_URL. */ - const char * pAddress = NULL; - /* The length of the address within string IOT_DEMO_HTTPS_PRESIGNED_PUT_URL. */ - size_t addressLen = 0; - /* The current attempt in the number of connection tries. */ - uint32_t connAttempt = 0; - /* Context into the asynchronous callback to denote a success or failure back to the application. */ - bool uploadSuccess = true; - - IotLogInfo( "HTTPS Client Asynchronous S3 upload demo using pre-signed URL: %s", IOT_DEMO_HTTPS_PRESIGNED_PUT_URL ); - - /* Retrieve the path location from IOT_DEMO_HTTPS_PRESIGNED_GET_URL. This function returns the length of the path - * without the query into pathLen. */ - httpsClientStatus = IotHttpsClient_GetUrlPath( IOT_DEMO_HTTPS_PRESIGNED_PUT_URL, - strlen( IOT_DEMO_HTTPS_PRESIGNED_PUT_URL ), - &pPath, - &pathLen ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "An error occurred in IotHttpsClient_GetUrlPath() on URL %s. Error code: %d", - IOT_DEMO_HTTPS_PRESIGNED_PUT_URL, - httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Retrieve the address location and length from the IOT_DEMO_HTTPS_PRESIGNED_PUT_URL. */ - httpsClientStatus = IotHttpsClient_GetUrlAddress( IOT_DEMO_HTTPS_PRESIGNED_PUT_URL, - strlen( IOT_DEMO_HTTPS_PRESIGNED_PUT_URL ), - &pAddress, - &addressLen ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "An error occurred in IotHttpsClient_GetUrlAddress() on URL %s\r\n. Error code %d", - IOT_DEMO_HTTPS_PRESIGNED_PUT_URL, - httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Set the connection configurations. - * Note: TLS Connection to AWS S3 service does not need a client certificate. - * The client authentication is performed at the HTTP protocol layer with a pre-signed URL. */ - connConfig.pAddress = pAddress; - connConfig.addressLen = addressLen; - connConfig.port = IOT_DEMO_HTTPS_PORT; - connConfig.pCaCert = IOT_DEMO_HTTPS_TRUSTED_ROOT_CA; - connConfig.caCertLen = sizeof( IOT_DEMO_HTTPS_TRUSTED_ROOT_CA ); - connConfig.userBuffer.pBuffer = _pConnUserBuffer; - connConfig.userBuffer.bufferLen = sizeof( _pConnUserBuffer ); - connConfig.pNetworkInterface = pNetworkInterface; - - asyncInfo.callbacks.writeCallback = _writeCallback; - asyncInfo.callbacks.responseCompleteCallback = _responseCompleteCallback; - asyncInfo.pPrivData = &uploadSuccess; - - /* The path is everything that is not the address. It also includes the query. So we get the strlen( pPath ) to - * acquire everything following in IOT_DEMO_HTTPS_PRESIGNED_PUT_URL. */ - reqConfig.pPath = pPath; - reqConfig.pathLen = strlen( pPath ); - reqConfig.pHost = pAddress; - reqConfig.hostLen = addressLen; - - /* The PUT method is used to upload an object to S3 because it is simpler than using POST. POST requires AWS S3 - * access specific header fields in the body of the message in a multipart/form-data encoded message. See - * https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html for more information about POST object. See - * https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html for more information about PUT object. */ - reqConfig.method = IOT_HTTPS_METHOD_PUT; - reqConfig.isNonPersistent = false; - reqConfig.userBuffer.pBuffer = _pReqUserBuffer; - reqConfig.userBuffer.bufferLen = sizeof( _pReqUserBuffer ); - reqConfig.isAsync = true; - reqConfig.u.pAsyncInfo = &asyncInfo; - - respConfig.userBuffer.pBuffer = _pRespUserBuffer; - respConfig.userBuffer.bufferLen = sizeof( _pRespUserBuffer ); - respConfig.pSyncInfo = NULL; - - /* Create the semaphore for waiting for the whole upload response to finish. */ - uploadFinishedSemCreated = IotSemaphore_Create( &( _uploadFinishedSem ), 0 /* Initial value. */, 1 /* Max value. */ ); - - if( uploadFinishedSemCreated == false ) - { - IotLogError( "Failed to create a semaphore to wait for the response to finish." ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Initialize the HTTPS library. */ - httpsClientStatus = IotHttpsClient_Init(); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "An error occurred initializing the HTTPS library. Error code: %d", httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Initialize the request to initialize internal request context, write the HTTP request first line to the - * _pReqUserBuffer header space, and write headers User-Agent and Host. */ - httpsClientStatus = IotHttpsClient_InitializeRequest( &reqHandle, &reqConfig ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "An error occurred in IotHttpsClient_InitializeRequest() with error code: %d", httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Connect to S3. */ - for( connAttempt = 1; connAttempt <= IOT_DEMO_HTTPS_CONNECTION_NUM_RETRY; connAttempt++ ) - { - httpsClientStatus = IotHttpsClient_Connect( &connHandle, &connConfig ); - - if( ( httpsClientStatus == IOT_HTTPS_CONNECTION_ERROR ) && - ( connAttempt < IOT_DEMO_HTTPS_CONNECTION_NUM_RETRY ) ) - { - IotLogError( "Failed to connect to the S3 server, retrying after %d ms.", - IOT_DEMO_HTTPS_CONNECTION_RETRY_WAIT_MS ); - IotClock_SleepMs( IOT_DEMO_HTTPS_CONNECTION_RETRY_WAIT_MS ); - continue; - } - else - { - break; - } - } - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "Failed to connect to the server. Error code: %d.", httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Send the request and receive the response asynchronously. This will schedule the async request. We - * will return immediately after scheduling. */ - httpsClientStatus = IotHttpsClient_SendAsync( connHandle, reqHandle, &respHandle, &respConfig ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "Failed to send the request asynchronously with error code: %d", httpsClientStatus ); - /* If we failed to schedule an async request then this is an error and we should exit the loop. */ - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Timing out waiting for the response to finish will fail the demo. */ - if( IotSemaphore_TimedWait( &( _uploadFinishedSem ), IOT_HTTPS_DEMO_ASYNC_TIMEOUT_MS ) == false ) - { - IotLogError( "Timed out waiting for the asynchronous request to complete." ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Check that the upload was successful. This variable is set during the _responseCompleteCallback(). */ - if( uploadSuccess == false ) - { - IotLogError( "Upload did not complete successfully." ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - #if defined( IOT_DEMO_HTTPS_PRESIGNED_GET_URL ) - /* The size of uploaded file from a GET of the file size. */ - uint32_t fileSize = 0; - - IotLogInfo( "Now checking %.*s for the file uploaded...", addressLen, pAddress ); - - /* Retrieve the path location and length from IOT_DEMO_HTTPS_PRESIGNED_GET_URL. */ - httpsClientStatus = IotHttpsClient_GetUrlPath( IOT_DEMO_HTTPS_PRESIGNED_GET_URL, - strlen( IOT_DEMO_HTTPS_PRESIGNED_GET_URL ), - &pPath, - &pathLen ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "An error occurred in IotHttpsClient_GetUrlPath() on URL %s. Error code: %d", - IOT_DEMO_HTTPS_PRESIGNED_GET_URL, - httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Retrieve the address location and length from the IOT_DEMO_HTTPS_PRESIGNED_GET_URL. */ - httpsClientStatus = IotHttpsClient_GetUrlAddress( IOT_DEMO_HTTPS_PRESIGNED_GET_URL, - strlen( IOT_DEMO_HTTPS_PRESIGNED_GET_URL ), - &pAddress, - &addressLen ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "An error occurred in IotHttpsClient_GetUrlAddress() on URL %s\r\n. Error code %d", - IOT_DEMO_HTTPS_PRESIGNED_GET_URL, - httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Verify the file was uploaded by retrieving the file size. */ - if( _IotHttpsDemo_GetS3ObjectFileSize( &fileSize, - connHandle, - pPath, - strlen( pPath ), - pAddress, - addressLen, - _pReqUserBuffer, - IOT_DEMO_HTTPS_REQ_USER_BUFFER_SIZE, - _pRespUserBuffer, - IOT_DEMO_HTTPS_RESP_USER_BUFFER_SIZE ) != EXIT_SUCCESS ) - { - IotLogError( "Failed to retrieve the s3 object size." ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - if( fileSize != IOT_DEMO_HTTPS_UPLOAD_DATA_SIZE ) - { - IotLogError( "Failed to upload the data to s3. Found the file size to be %d, but it should be %d.", - fileSize, - IOT_DEMO_HTTPS_UPLOAD_DATA ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - IotLogInfo( "Verified file size on S3 is %d. File size specified to upload is %d.", fileSize, IOT_DEMO_HTTPS_UPLOAD_DATA_SIZE ); - #endif /* if defined( IOT_DEMO_HTTPS_PRESIGNED_GET_URL ) */ - - IOT_FUNCTION_CLEANUP_BEGIN(); - - if( uploadFinishedSemCreated ) - { - IotSemaphore_Destroy( &( _uploadFinishedSem ) ); - } - - /* Disconnect from the server even if it is already disconnected. */ - IotHttpsClient_Disconnect( connHandle ); - /* Clean up the library because we are done using it. */ - IotHttpsClient_Cleanup(); - - IOT_FUNCTION_CLEANUP_END(); -} diff --git a/demos/https/iot_demo_https_s3_upload_sync.c b/demos/https/iot_demo_https_s3_upload_sync.c deleted file mode 100644 index d5eacf67d5c..00000000000 --- a/demos/https/iot_demo_https_s3_upload_sync.c +++ /dev/null @@ -1,485 +0,0 @@ -/* - * FreeRTOS V202011.00 - * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://aws.amazon.com/freertos - * http://www.FreeRTOS.org - */ - -/** - * @file iot_demo_https_s3_upload_sync.c - * @brief Demonstrates synchronous usage of the HTTPS library by performing a PUT requests on a file to S3. - */ - -/* The config header is always included first. */ -#include "iot_config.h" - -/* C Standard includes. */ -#include -#include - -/* Set up logging for this demo. */ -#include "iot_demo_logging.h" - -/* FreeRTOS includes. */ -#include "iot_https_client.h" -#include "iot_https_utils.h" -#include "aws_demo_config.h" -#include "platform/iot_network.h" -#include "private/iot_error.h" -#include "iot_demo_https_common.h" -#include "platform/iot_clock.h" - -/** - * This demonstrates uploading a file to S3 using a pre-signed URL using the FreeRTOS HTTP Client library. - * The HTTPS Client library is a generic HTTP/1.1 client library that be used to upload files to other webservers as - * well. - * - * A presigned URL is required to run this demo. Please see the demos/https/README.md for instructions on how to - * generate one. - */ - -/** - * @cond DOXYGEN_IGNORE - * Doxygen should ignore this section. - * - * Provide default values for undefined configuration settings. - */ - -/* Presigned URL for S3 PUT Object access. A GET URL is defined to verify the demo.*/ -#ifndef IOT_DEMO_HTTPS_PRESIGNED_PUT_URL - #define IOT_DEMO_HTTPS_PRESIGNED_PUT_URL "Please configure a presigned PUT URL in iot_config.h." -#endif - -/* TLS port for HTTPS. */ -#ifndef IOT_DEMO_HTTPS_PORT - #define IOT_DEMO_HTTPS_PORT ( ( uint16_t ) 443 ) -#endif - -#ifndef IOT_DEMO_HTTPS_TRUSTED_ROOT_CA - /* This the Baltimore Cybertrust root CA associated with the S3 server certificate. */ - #define IOT_DEMO_HTTPS_TRUSTED_ROOT_CA \ - "-----BEGIN CERTIFICATE-----\n" \ - "MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ\n" \ - "RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD\n" \ - "VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX\n" \ - "DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y\n" \ - "ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy\n" \ - "VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr\n" \ - "mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr\n" \ - "IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK\n" \ - "mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu\n" \ - "XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy\n" \ - "dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye\n" \ - "jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1\n" \ - "BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3\n" \ - "DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92\n" \ - "9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx\n" \ - "jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0\n" \ - "Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz\n" \ - "ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS\n" \ - "R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp\n" \ - "-----END CERTIFICATE-----\n" -#endif /* ifndef IOT_DEMO_HTTPS_TRUSTED_ROOT_CA */ - -/* Size in bytes of the User Buffer used to store the internal connection context. The size presented here accounts for - * storage of the internal connection context. The minimum size can be found in extern const unint32_t - * connectionUserBufferMinimumSize. */ -#ifndef IOT_DEMO_HTTPS_CONN_BUFFER_SIZE - #define IOT_DEMO_HTTPS_CONN_BUFFER_SIZE ( ( int ) 512 ) -#endif - -/* Size in bytes of the user buffer used to store the internal request context and HTTP request header lines. - * The size presented here accounts for the storage of the internal context, the first request line in the HTTP - * formatted header and extra headers. The minimum size can be found in extern const uint32_t - * requestUserBufferMinimumSize. Keep in mind that this requestUserBufferMinimumSize does not include the size of the - * path in the request line. The path could be well over 100 characters long as it includes not only the object key name - * in S3, but also the query following. The query following has the AWSAccessKeyId, the expiration time, and the - * AWS Signature Version 4 signature.*/ -#ifndef IOT_DEMO_HTTPS_REQ_USER_BUFFER_SIZE - #define IOT_DEMO_HTTPS_REQ_USER_BUFFER_SIZE ( ( int ) 512 ) -#endif - -/* Size in bytes of the user buffer used to store the internal response context and the HTTP response header lines. - * The size presented here accounts for the storage of the internal context, the first request line in the HTTP - * formatted header and extra headers. The minimum can be found in responseUserBufferMinimumSize. - * Keep in mind that if the headers from the response do not all fit into this buffer, then the rest of the headers - * will be discarded. The minimum size can be found in extern const uint32_t responseUserBufferMinimumSize. */ -#ifndef IOT_DEMO_HTTPS_RESP_USER_BUFFER_SIZE - #define IOT_DEMO_HTTPS_RESP_USER_BUFFER_SIZE ( ( int ) 1024 ) -#endif - -/* Pointer to the data to upload.*/ -#ifndef IOT_DEMO_HTTPS_UPLOAD_DATA - #define IOT_DEMO_HTTPS_UPLOAD_DATA "Hello World!" -#endif - -/* The size of the data in bytes to upload. */ -#ifndef IOT_DEMO_HTTPS_UPLOAD_DATA_SIZE - #define IOT_DEMO_HTTPS_UPLOAD_DATA_SIZE ( sizeof( IOT_DEMO_HTTPS_UPLOAD_DATA ) - 1 ) -#endif - -/* Time to wait in milliseconds before retrying the HTTPS Connection. A connection is only attempted again if - * IOT_HTTPS_CONNECTION_ERROR is returned from IotHttpsClient_Connect(). This indicates an error in the network - * layer. To view logging for network errors update IOT_LOG_LEVEL_NETWORK to IOT_LOG_ERROR in iot_config.h */ -#ifndef IOT_DEMO_HTTPS_CONNECTION_RETRY_WAIT_MS - #define IOT_DEMO_HTTPS_CONNECTION_RETRY_WAIT_MS ( ( uint32_t ) 3000 ) -#endif - -/* Number of times to retry the HTTPS connection. A connection is only attempted again if - * IOT_HTTPS_CONNECTION_ERROR is returned from IotHttpsClient_Connect(). This indicates an error in the network - * layer. To view logging for network errors update IOT_LOG_LEVEL_NETWORK to IOT_LOG_ERROR in iot_config.h */ -#ifndef IOT_DEMO_HTTPS_CONNECTION_NUM_RETRY - #define IOT_DEMO_HTTPS_CONNECTION_NUM_RETRY ( ( uint32_t ) 3 ) -#endif - -/* The timeout in milliseconds to wait on IotHttpsClient_SendSync(). This timeout is how long the routine will block - * for waiting for an HTTP response. It is possible that the server could close the connection after receiving a - * request, so never sending the response. */ -#ifndef IOT_DEMO_HTTPS_SYNC_TIMEOUT_MS - #define IOT_DEMO_HTTPS_SYNC_TIMEOUT_MS ( ( uint32_t ) 60000 ) -#endif - -/** @endcond */ - -/*-----------------------------------------------------------*/ - -/** - * @brief Buffer used to store the internal connection context. - */ -static uint8_t _pConnUserBuffer[ IOT_DEMO_HTTPS_CONN_BUFFER_SIZE ] = { 0 }; - -/** - * @brief Buffer used to store the request context and the HTTP request header lines. - */ -static uint8_t _pReqUserBuffer[ IOT_DEMO_HTTPS_REQ_USER_BUFFER_SIZE ] = { 0 }; - -/** - * @brief Buffer used to store the response context and the HTTP response header lines. - */ -static uint8_t _pRespUserBuffer[ IOT_DEMO_HTTPS_RESP_USER_BUFFER_SIZE ] = { 0 }; - -/*-----------------------------------------------------------*/ - -/* Declaration of demo function. */ -int RunHttpsSyncUploadDemo( bool awsIotMqttMode, - const char * pIdentifier, - void * pNetworkServerInfo, - void * pNetworkCredentialInfo, - const IotNetworkInterface_t * pNetworkInterface ); - -/*-----------------------------------------------------------*/ - -/** - * @brief The function that runs the HTTPS Synchronous Upload demo. - * - * @param[in] awsIotMqttMode Specify if this demo is running with the AWS IoT MQTT server. This is ignored in this demo. - * @param[in] pIdentifier NULL-terminated MQTT client identifier. This is ignored in this demo. - * @param[in] pNetworkServerInfo Contains network information specific for the MQTT demo. This is ignored in this demo. - * @param[in] pNetworkCredentialInfo Contains credential Info for a TLS connection. - * @param[in] pNetworkInterface Network interface to use for this demo. - * - * @return `EXIT_SUCCESS` if the demo completes successfully; `EXIT_FAILURE` otherwise. - */ -int RunHttpsSyncUploadDemo( bool awsIotMqttMode, - const char * pIdentifier, - void * pNetworkServerInfo, - void * pNetworkCredentialInfo, - const IotNetworkInterface_t * pNetworkInterface ) -{ - IOT_FUNCTION_ENTRY( int, EXIT_SUCCESS ); - - /* Unused parameters. */ - ( void ) awsIotMqttMode; - ( void ) pIdentifier; - ( void ) pNetworkServerInfo; - - /* HTTPS Client library return status. */ - IotHttpsReturnCode_t httpsClientStatus = IOT_HTTPS_OK; - - /* Configurations for the HTTPS connection. */ - IotHttpsConnectionInfo_t connConfig = { 0 }; - /* Handle identifying the HTTPS connection. */ - IotHttpsConnectionHandle_t connHandle = IOT_HTTPS_CONNECTION_HANDLE_INITIALIZER; - /* Configurations for the HTTPS request. */ - IotHttpsRequestInfo_t reqConfig = { 0 }; - /* Configurations for the HTTPS response. */ - IotHttpsResponseInfo_t respConfig = { 0 }; - - /* Handle identifying the HTTP request. This is valid after the request has been initialized with - * IotHttpsClient_InitializeRequest(). */ - IotHttpsRequestHandle_t reqHandle = IOT_HTTPS_REQUEST_HANDLE_INITIALIZER; - - /* Handle identifying the HTTP response. This is valid after the response has been received with - * IotHttpsClient_SendSync(). */ - IotHttpsResponseHandle_t respHandle = IOT_HTTPS_RESPONSE_HANDLE_INITIALIZER; - /* Synchronous request specific configurations. */ - IotHttpsSyncInfo_t reqSyncInfo = { 0 }; - /* Synchronous response specific configurations. */ - IotHttpsSyncInfo_t respSyncInfo = { 0 }; - - /* The location of the path within string IOT_DEMO_HTTPS_PRESIGNED_PUT_URL. */ - const char * pPath = NULL; - /* The length of the path within string IOT_DEMO_HTTPS_PRESIGNED_PUT_URL. */ - size_t pathLen = 0; - /* The location of the address within string IOT_DEMO_HTTPS_PRESIGNED_PUT_URL. */ - const char * pAddress = NULL; - /* The length of the address within string IOT_DEMO_HTTPS_PRESIGNED_PUT_URL. */ - size_t addressLen = 0; - /* The status of HTTP response. */ - uint16_t respStatus = IOT_HTTPS_STATUS_OK; - /* The current attempt in the number of connection tries. */ - uint32_t connAttempt = 0; - - IotLogInfo( "HTTPS Client Synchronous S3 upload demo using pre-signed URL: %s", IOT_DEMO_HTTPS_PRESIGNED_PUT_URL ); - - /* Retrieve the path location from IOT_DEMO_HTTPS_PRESIGNED_GET_URL. This function returns the length of the path - * without the query into pathLen. */ - httpsClientStatus = IotHttpsClient_GetUrlPath( IOT_DEMO_HTTPS_PRESIGNED_PUT_URL, - strlen( IOT_DEMO_HTTPS_PRESIGNED_PUT_URL ), - &pPath, - &pathLen ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "An error occurred in IotHttpsClient_GetUrlPath() on URL %s. Error code: %d", - IOT_DEMO_HTTPS_PRESIGNED_PUT_URL, - httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Retrieve the address location and length from the IOT_DEMO_HTTPS_PRESIGNED_PUT_URL. */ - httpsClientStatus = IotHttpsClient_GetUrlAddress( IOT_DEMO_HTTPS_PRESIGNED_PUT_URL, - strlen( IOT_DEMO_HTTPS_PRESIGNED_PUT_URL ), - &pAddress, - &addressLen ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "An error occurred in IotHttpsClient_GetUrlAddress() on URL %s\r\n. Error code %d", - IOT_DEMO_HTTPS_PRESIGNED_PUT_URL, - httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Set the connection configurations. - * Note: TLS Connection to AWS S3 service does not need a client certificate. - * The client authentication is performed at the HTTP protocol layer with a pre-signed URL. */ - connConfig.pAddress = pAddress; - connConfig.addressLen = addressLen; - connConfig.port = IOT_DEMO_HTTPS_PORT; - connConfig.pCaCert = IOT_DEMO_HTTPS_TRUSTED_ROOT_CA; - connConfig.caCertLen = sizeof( IOT_DEMO_HTTPS_TRUSTED_ROOT_CA ); - connConfig.userBuffer.pBuffer = _pConnUserBuffer; - connConfig.userBuffer.bufferLen = sizeof( _pConnUserBuffer ); - connConfig.pNetworkInterface = pNetworkInterface; - - /* Set the configurations needed for a synchronous request. */ - reqSyncInfo.pBody = ( uint8_t * ) ( IOT_DEMO_HTTPS_UPLOAD_DATA ); /* Pointer to the file/buffer of data we want to upload. */ - reqSyncInfo.bodyLen = IOT_DEMO_HTTPS_UPLOAD_DATA_SIZE; - - /* Ignore the response body in the synchronous response. */ - respSyncInfo.pBody = NULL; - respSyncInfo.bodyLen = 0; - - /* The path is everything that is not the address. It also includes the query. So we get the strlen( pPath ) to - * acquire everything following in IOT_DEMO_HTTPS_PRESIGNED_PUT_URL. */ - /* Set the request configurations. */ - reqConfig.pPath = pPath; - reqConfig.pathLen = strlen( pPath ); - reqConfig.pHost = pAddress; - reqConfig.hostLen = addressLen; - - /* The PUT method is used to upload an object to S3 because it is simpler than using POST. POST requires AWS S3 - * access specific header fields in the body of the message in a multipart/form-data encoded message. See - * https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html for more information about POST object. See - * https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html for more information about PUT object. */ - reqConfig.method = IOT_HTTPS_METHOD_PUT; - reqConfig.isNonPersistent = false; - reqConfig.userBuffer.pBuffer = _pReqUserBuffer; - reqConfig.userBuffer.bufferLen = sizeof( _pReqUserBuffer ); - reqConfig.isAsync = false; - reqConfig.u.pSyncInfo = &reqSyncInfo; - - /* Set the response configurations. */ - respConfig.userBuffer.pBuffer = _pRespUserBuffer; - respConfig.userBuffer.bufferLen = sizeof( _pRespUserBuffer ); - - /* Even though the body is being ignored, #IotHttpsResponseInfo_t.pSyncInfo should only be set to NULL if the - * response is being received asynchronously. */ - respConfig.pSyncInfo = &respSyncInfo; - - /* Initialize the HTTPS library. */ - httpsClientStatus = IotHttpsClient_Init(); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "An error occurred initializing the HTTPS library. Error code: %d", httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Initialize the request to initialize internal request context, write the HTTP request first line to the - * _pReqUserBuffer header space, and write headers User-Agent and Host. */ - httpsClientStatus = IotHttpsClient_InitializeRequest( &reqHandle, &reqConfig ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "An error occurred in IotHttpsClient_InitializeRequest() with error code: %d", httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Connect to S3. */ - for( connAttempt = 1; connAttempt <= IOT_DEMO_HTTPS_CONNECTION_NUM_RETRY; connAttempt++ ) - { - httpsClientStatus = IotHttpsClient_Connect( &connHandle, &connConfig ); - - if( ( httpsClientStatus == IOT_HTTPS_CONNECTION_ERROR ) && - ( connAttempt < IOT_DEMO_HTTPS_CONNECTION_NUM_RETRY ) ) - { - IotLogError( "Failed to connect to the S3 server, retrying after %d ms.", - IOT_DEMO_HTTPS_CONNECTION_RETRY_WAIT_MS ); - IotClock_SleepMs( IOT_DEMO_HTTPS_CONNECTION_RETRY_WAIT_MS ); - continue; - } - else - { - break; - } - } - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "Failed to connect to the server. Error code: %d.", httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Send the upload request. */ - httpsClientStatus = IotHttpsClient_SendSync( connHandle, reqHandle, &respHandle, &respConfig, 0 ); - - /* If there was network error try again one more time. */ - if( httpsClientStatus == IOT_HTTPS_NETWORK_ERROR ) - { - /* Maybe the network error was because the server disconnected us. */ - httpsClientStatus = IotHttpsClient_Connect( &connHandle, &connConfig ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "Failed to reconnect to the S3 server after a network error on IotHttpsClient_SendSync(). Error code %d.", httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - httpsClientStatus = IotHttpsClient_SendSync( connHandle, reqHandle, &respHandle, &respConfig, IOT_DEMO_HTTPS_SYNC_TIMEOUT_MS ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "Failed receiving the response on a second try after a network error. The error code is: %d", httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - } - - httpsClientStatus = IotHttpsClient_ReadResponseStatus( respHandle, &respStatus ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "Error in retreiving the response status. Error code %d", httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - if( respStatus != IOT_HTTPS_STATUS_OK ) - { - IotLogError( "Failed to upload the data to s3. Response status: %d", respStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - IotLogInfo( "File was successfully uploaded." ); - - #if defined( IOT_DEMO_HTTPS_PRESIGNED_GET_URL ) - /* The size of uploaded file from a GET of the file size. */ - uint32_t fileSize = 0; - - IotLogInfo( "Now checking %.*s for the file uploaded...", addressLen, pAddress ); - - /* Retrieve the path location and length from IOT_DEMO_HTTPS_PRESIGNED_GET_URL. */ - httpsClientStatus = IotHttpsClient_GetUrlPath( IOT_DEMO_HTTPS_PRESIGNED_GET_URL, - strlen( IOT_DEMO_HTTPS_PRESIGNED_GET_URL ), - &pPath, - &pathLen ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "An error occurred in IotHttpsClient_GetUrlPath() on URL %s. Error code: %d", - IOT_DEMO_HTTPS_PRESIGNED_GET_URL, - httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Retrieve the address location and length from the IOT_DEMO_HTTPS_PRESIGNED_GET_URL. */ - httpsClientStatus = IotHttpsClient_GetUrlAddress( IOT_DEMO_HTTPS_PRESIGNED_GET_URL, - strlen( IOT_DEMO_HTTPS_PRESIGNED_GET_URL ), - &pAddress, - &addressLen ); - - if( httpsClientStatus != IOT_HTTPS_OK ) - { - IotLogError( "An error occurred in IotHttpsClient_GetUrlAddress() on URL %s\r\n. Error code %d", - IOT_DEMO_HTTPS_PRESIGNED_GET_URL, - httpsClientStatus ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - /* Verify the file was uploaded by retrieving the file size. */ - if( _IotHttpsDemo_GetS3ObjectFileSize( &fileSize, - connHandle, - pPath, - strlen( pPath ), - pAddress, - addressLen, - _pReqUserBuffer, - IOT_DEMO_HTTPS_REQ_USER_BUFFER_SIZE, - _pRespUserBuffer, - IOT_DEMO_HTTPS_RESP_USER_BUFFER_SIZE ) != EXIT_SUCCESS ) - { - IotLogError( "Failed to retrieve the s3 object size." ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - - if( fileSize != IOT_DEMO_HTTPS_UPLOAD_DATA_SIZE ) - { - IotLogError( "Failed to upload the data to s3. Found the file size to be %d, but it should be %d.", - fileSize, - IOT_DEMO_HTTPS_UPLOAD_DATA ); - IOT_SET_AND_GOTO_CLEANUP( EXIT_FAILURE ); - } - IotLogInfo( "Verified file size on S3 is %d. File size specified to upload is %d.", fileSize, IOT_DEMO_HTTPS_UPLOAD_DATA_SIZE ); - #endif /* if defined( IOT_DEMO_HTTPS_PRESIGNED_GET_URL ) */ - - IOT_FUNCTION_CLEANUP_BEGIN(); - - /* Disconnect from the server even if the server may have already disconnected us. */ - if( connHandle != NULL ) - { - IotHttpsClient_Disconnect( connHandle ); - } - - /* Clean up the library because we are done using it. */ - IotHttpsClient_Cleanup(); - - IOT_FUNCTION_CLEANUP_END(); -} diff --git a/demos/https/presigned_urls_gen.py b/demos/https/presigned_urls_gen.py deleted file mode 100644 index fa50b7591f1..00000000000 --- a/demos/https/presigned_urls_gen.py +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/python - -import boto3 -from botocore.client import Config -import argparse - -def get_presigned_urls(bucket_name, key_name): - # Get the service client. - # SigV2 is being deprecated. If the boto3 installation in the current Python environment has an older version of - # the package, then this configuration forces the use of SigV4. - s3 = boto3.client('s3', config=Config(signature_version='s3v4')) - - client_method_dict = { - 'GET': 'get_object', - 'PUT': 'put_object' - } - - # Generate the URL to get 'key-name' from 'bucket-name' - for method in client_method_dict.keys(): - url = s3.generate_presigned_url( - ClientMethod=client_method_dict[method], - Params={ - 'Bucket': bucket_name, - 'Key': key_name - } - ) - print('#define IOT_DEMO_HTTPS_PRESIGNED_' + method + '_URL' + ' ' + '\"' + url + '\"') - -def main(): - parser = argparse.ArgumentParser(description='S3 Presigned URL Generator. See README.md') - parser.add_argument('--bucket', action='store', required=True, dest='bucket_name', help='The name of the S3 bucket of interest.') - parser.add_argument('--key', action='store', required=True, dest='key_name', help='The name of the S3 Object in the bucket. This is referred to as a \'key\'') - args = parser.parse_args() - - get_presigned_urls(args.bucket_name, args.key_name) - -if __name__ == '__main__': # pragma: no cover - main() diff --git a/demos/include/aws_application_version.h b/demos/include/aws_application_version.h index 6901fa9c64b..0b270861ff3 100644 --- a/demos/include/aws_application_version.h +++ b/demos/include/aws_application_version.h @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/include/aws_ble_gatt_server_demo.h b/demos/include/aws_ble_gatt_server_demo.h index 51dd79f0026..2c9a9c2dedb 100644 --- a/demos/include/aws_ble_gatt_server_demo.h +++ b/demos/include/aws_ble_gatt_server_demo.h @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/include/aws_clientcredential.h b/demos/include/aws_clientcredential.h index 038eb7b9d06..c3bda361fda 100644 --- a/demos/include/aws_clientcredential.h +++ b/demos/include/aws_clientcredential.h @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/include/aws_clientcredential_keys.h b/demos/include/aws_clientcredential_keys.h index 626c39f775b..ac861f23e68 100644 --- a/demos/include/aws_clientcredential_keys.h +++ b/demos/include/aws_clientcredential_keys.h @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/include/aws_demo.h b/demos/include/aws_demo.h index 08b83dcab59..bcd057ed202 100644 --- a/demos/include/aws_demo.h +++ b/demos/include/aws_demo.h @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/include/aws_iot_demo_network.h b/demos/include/aws_iot_demo_network.h index a651f9ec4b7..15ecdcdf93d 100644 --- a/demos/include/aws_iot_demo_network.h +++ b/demos/include/aws_iot_demo_network.h @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/include/aws_ota_codesigner_certificate.h b/demos/include/aws_ota_codesigner_certificate.h index 52bd107c1d8..f63e4519a15 100644 --- a/demos/include/aws_ota_codesigner_certificate.h +++ b/demos/include/aws_ota_codesigner_certificate.h @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/include/aws_wifi_connect_task.h b/demos/include/aws_wifi_connect_task.h index 89f6c53c8e5..b4964f90a4e 100644 --- a/demos/include/aws_wifi_connect_task.h +++ b/demos/include/aws_wifi_connect_task.h @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/include/iot_ble_numericComparison.h b/demos/include/iot_ble_numericComparison.h index 1769a51a7b0..da0a20a8b83 100644 --- a/demos/include/iot_ble_numericComparison.h +++ b/demos/include/iot_ble_numericComparison.h @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/include/iot_config_common.h b/demos/include/iot_config_common.h index 68d996f54c5..31ab122f886 100644 --- a/demos/include/iot_config_common.h +++ b/demos/include/iot_config_common.h @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/include/iot_demo_logging.h b/demos/include/iot_demo_logging.h index ab18eef9ce5..b974e6542c7 100644 --- a/demos/include/iot_demo_logging.h +++ b/demos/include/iot_demo_logging.h @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/include/iot_demo_runner.h b/demos/include/iot_demo_runner.h index f8341ad3179..9c5ae472213 100644 --- a/demos/include/iot_demo_runner.h +++ b/demos/include/iot_demo_runner.h @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -58,6 +58,14 @@ #undef democonfigDEMO_PRIORITY #define democonfigDEMO_PRIORITY democonfigCORE_MQTT_CONNECTION_SHARING_DEMO_TASK_PRIORITY #endif +#elif defined( CONFIG_CORE_HTTP_MUTUAL_AUTH_DEMO_ENABLED ) + #define DEMO_entryFUNCTION RunCoreHttpMutualAuthDemo +#elif defined( CONFIG_CORE_HTTP_S3_DOWNLOAD_DEMO_ENABLED ) + #define DEMO_entryFUNCTION RunCoreHttpS3DownloadDemo +#elif defined( CONFIG_CORE_HTTP_S3_DOWNLOAD_MULTITHREADED_DEMO_ENABLED ) + #define DEMO_entryFUNCTION RunCoreHttpS3DownloadMultithreadedDemo +#elif defined( CONFIG_CORE_HTTP_S3_UPLOAD_DEMO_ENABLED ) + #define DEMO_entryFUNCTION RunCoreHttpS3UploadDemo #elif defined( CONFIG_DEVICE_SHADOW_DEMO_ENABLED ) #define DEMO_entryFUNCTION RunDeviceShadowDemo #if defined( democonfigSHADOW_DEMO_TASK_STACK_SIZE ) @@ -68,6 +76,16 @@ #undef democonfigDEMO_PRIORITY #define democonfigDEMO_PRIORITY democonfigSHADOW_DEMO_TASK_PRIORITY #endif +#elif defined( CONFIG_JOBS_DEMO_ENABLED ) + #define DEMO_entryFUNCTION RunJobsDemo + #if defined( democonfigJOBS_DEMO_TASK_STACK_SIZE ) + #undef democonfigDEMO_STACKSIZE + #define democonfigDEMO_STACKSIZE democonfigJOBS_DEMO_TASK_STACK_SIZE + #endif + #if defined( democonfigJOBS_DEMO_TASK_PRIORITY ) + #undef democonfigDEMO_PRIORITY + #define democonfigDEMO_PRIORITY democonfigJOBS_DEMO_TASK_PRIORITY + #endif #elif defined( CONFIG_GREENGRASS_DISCOVERY_DEMO_ENABLED ) #define DEMO_entryFUNCTION vStartGreenGrassDiscoveryTask #if defined( democonfigGREENGRASS_DISCOVERY_TASK_STACK_SIZE ) @@ -88,8 +106,6 @@ #undef democonfigDEMO_PRIORITY #define democonfigDEMO_PRIORITY democonfigTCP_ECHO_TASKS_SINGLE_TASK_PRIORITY #endif -#elif defined( CONFIG_DEFENDER_DEMO_ENABLED ) - #define DEMO_entryFUNCTION RunDefenderDemo #elif defined( CONFIG_POSIX_DEMO_ENABLED ) #define DEMO_entryFUNCTION vStartPOSIXDemo #elif defined( CONFIG_OTA_UPDATE_DEMO_ENABLED ) @@ -120,17 +136,10 @@ #undef democonfigNETWORK_TYPES #define democonfigNETWORK_TYPES ( AWSIOT_NETWORK_TYPE_BLE ) #endif -#elif defined( CONFIG_HTTPS_SYNC_DOWNLOAD_DEMO_ENABLED ) - #define DEMO_entryFUNCTION RunHttpsSyncDownloadDemo -#elif defined( CONFIG_HTTPS_ASYNC_DOWNLOAD_DEMO_ENABLED ) - #define DEMO_entryFUNCTION RunHttpsAsyncDownloadDemo -#elif defined( CONFIG_HTTPS_SYNC_UPLOAD_DEMO_ENABLED ) - #define DEMO_entryFUNCTION RunHttpsSyncUploadDemo -#elif defined( CONFIG_HTTPS_ASYNC_UPLOAD_DEMO_ENABLED ) - #define DEMO_entryFUNCTION RunHttpsAsyncUploadDemo - #elif defined( CONFIG_CLI_UART_DEMO_ENABLED ) #define DEMO_entryFUNCTION vRunCLIUartDemo +#elif defined( CONFIG_DEVICE_DEFENDER_DEMO_ENABLED ) + #define DEMO_entryFUNCTION RunDeviceDefenderDemo #else /* if defined( CONFIG_CORE_MQTT_BASIC_TLS_DEMO_ENABLED ) */ /* if no demo was defined there will be no entry point defined and we will not be able to run the demo */ #error "No demo to run. One demo should be enabled" diff --git a/demos/jobs_for_aws/CMakeLists.txt b/demos/jobs_for_aws/CMakeLists.txt new file mode 100644 index 00000000000..f160a077334 --- /dev/null +++ b/demos/jobs_for_aws/CMakeLists.txt @@ -0,0 +1,35 @@ +# Demo module for AWS IoT Jobs library. +afr_demo_module(jobs) + +afr_set_demo_metadata(ID "JOBS_DEMO") +afr_set_demo_metadata(DESCRIPTION "An example that demonstrates the use of the AWS IoT Jobs library.") +afr_set_demo_metadata(DISPLAY_NAME "Jobs Demo") + +# Add the CMakeLists.txt file of module to metadata list. +afr_module_cmake_files(${AFR_CURRENT_MODULE} + ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt +) + +afr_module_sources( + ${AFR_CURRENT_MODULE} + INTERFACE + "${CMAKE_CURRENT_LIST_DIR}/jobs_demo.c" +) + +afr_module_include_dirs( + ${AFR_CURRENT_MODULE} + INTERFACE + ${AFR_DEMOS_DIR}/common/mqtt_demo_helpers +) + +afr_module_dependencies( + ${AFR_CURRENT_MODULE} + INTERFACE + AFR::mqtt_demo_helpers + AFR::core_json + AFR::jobs + # Add dependency on the device_shadow_demo_dependencies + # metadata module so that this demo is only shown when the + # Device Shadow library is selected on the FreeRTOS console. + AFR::jobs_demo_dependencies +) diff --git a/demos/jobs_for_aws/jobs_demo.c b/demos/jobs_for_aws/jobs_demo.c new file mode 100755 index 00000000000..bd8923b6fa5 --- /dev/null +++ b/demos/jobs_for_aws/jobs_demo.c @@ -0,0 +1,901 @@ +/* + * FreeRTOS V202012.00 + * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/** + * @file jobs_demo.c + * + * @brief Demo for showing use of the Jobs library API. This demo uses the Jobs library + * along with the coreMQTT and Secure Sockets libraries to communicate with the AWS IoT Jobs service. + * Please refer to AWS documentation for more information about AWS IoT Jobs. + * https://docs.aws.amazon.com/iot/latest/developerguide/iot-jobs.html + * + * The Jobs library API provides macros and helper functions for assembling MQTT topics strings, + * and for determining whether an incoming MQTT message is related to the AWS IoT Jobs service. + * The Jobs library does not depend on an MQTT library, and therefore, the code for MQTT operations + * is placed in another file (mqtt_demo_helpers.c) for improving readability of the demo code about using + * the Jobs library. + * + * @note This demo requires setup of an AWS account, provisioning of a Thing resource on the AWS IoT account, + * and the creation of Jobs for the Thing resource. Please refer to AWS CLI documentation for more information + * in creating a job document. + * https://docs.aws.amazon.com/cli/latest/reference/iot/create-job.html + * + * This demo connects to the AWS IoT broker and calls the MQTT APIs of the AWS IoT Jobs service to receive + * jobs queued (as JSON documents) for the Thing resource (associated with this demo application) on the cloud, + * then executes the jobs and updates the status of the jobs back to the cloud. + * The demo expects job documents to have an "action" JSON key. Actions can + * be one of "print", "publish", or "exit". + * A "print" job logs a message to the local console, and must contain a "message", + * e.g. { "action": "print", "message": "Hello World!" }. + * A "publish" job publishes a message to an MQTT Topic. The job document must + * contain a "message" and "topic" to publish to, e.g. + * { "action": "publish", "topic": "demo/jobs", "message": "Hello World!" }. + * An "exit" job exits the demo. Sending { "action": "exit" } will end the demo program. + * + * @note This demo uses retry logic to connect to AWS IoT broker if connection attempts fail. + * The FreeRTOS/backoffAlgorithm library is used to calculate the retry interval with an exponential + * backoff and jitter algorithm. For generating random number required by the algorithm, the PKCS11 + * module is used as it allows access to a True Random Number Generator (TRNG) if the vendor platform + * supports it. + * It is RECOMMENDED to seed the random number generator with a device-specific entropy source so that + * probability of collisions from devices in connection retries is mitigated. + * + */ + +/* Standard includes. */ +#include +#include +#include + +/* Demo Specific config file. */ +#include "jobs_demo_config.h" + +#include "aws_demo.h" + +/* Kernel includes. */ +#include "FreeRTOS.h" +#include "task.h" + +/* Jobs library header. */ +#include "jobs.h" + +/* JSON library includes. */ +#include "core_json.h" + +/* Include common MQTT demo helpers. */ +#include "mqtt_demo_helpers.h" +#include "core_json.h" + +/*------------- Demo configurations -------------------------*/ + +#ifndef democonfigTHING_NAME + +/** + * @brief Predefined thing name. + * + * This is the example predefine thing name and could be compiled in ROM code. + */ + #define democonfigTHING_NAME clientcredentialIOT_THING_NAME +#endif + +/** + * @brief The length of #democonfigTHING_NAME. + */ +#define THING_NAME_LENGTH ( ( uint16_t ) ( sizeof( democonfigTHING_NAME ) - 1 ) ) + +/*-----------------------------------------------------------*/ + +/*-----------------------------------------------------------*/ + +/** + * @brief The JSON key of the execution object. + * + * Job documents received from the AWS IoT Jobs service are in JSON format. + * All such JSON documents will contain this key, whose value represents the unique + * identifier of a Job. + */ +#define jobsexampleEXECUTION_KEY "execution" + +/** + * @brief The length of #jobsexampleEXECUTION_KEY. + */ +#define jobsexampleEXECUTION_KEY_LENGTH ( sizeof( jobsexampleEXECUTION_KEY ) - 1 ) + +/** + * @brief The query key to use for searching the Job ID key in message payload + * from AWS IoT Jobs service. + * + * Job documents received from the AWS IoT Jobs service are in JSON format. + * All such JSON documents will contain this key, whose value represents the unique + * identifier of a Job. + */ +#define jobsexampleQUERY_KEY_FOR_JOB_ID jobsexampleEXECUTION_KEY ".jobId" + +/** + * @brief The length of #jobsexampleQUERY_KEY_FOR_JOB_ID. + */ +#define jobsexampleQUERY_KEY_FOR_JOB_ID_LENGTH ( sizeof( jobsexampleQUERY_KEY_FOR_JOB_ID ) - 1 ) + +/** + * @brief The query key to use for searching the Jobs document ID key in message payload + * from AWS IoT Jobs service. + * + * Job documents received from the AWS IoT Jobs service are in JSON format. + * All such JSON documents will contain this key, whose value represents the unique + * identifier of a Job. + */ +#define jobsexampleQUERY_KEY_FOR_JOBS_DOC jobsexampleEXECUTION_KEY ".jobDocument" + +/** + * @brief The length of #jobsexampleQUERY_KEY_FOR_JOBS_DOC. + */ +#define jobsexampleQUERY_KEY_FOR_JOBS_DOC_LENGTH ( sizeof( jobsexampleQUERY_KEY_FOR_JOBS_DOC ) - 1 ) + +/** + * @brief The query key to use for searching the Action key in Jobs document + * from AWS IoT Jobs service. + * + * This demo program expects this key to be in the Job document. It is a key + * specific to this demo. + */ +#define jobsexampleQUERY_KEY_FOR_ACTION jobsexampleQUERY_KEY_FOR_JOBS_DOC ".action" + +/** + * @brief The length of #jobsexampleQUERY_KEY_FOR_ACTION. + */ +#define jobsexampleQUERY_KEY_FOR_ACTION_LENGTH ( sizeof( jobsexampleQUERY_KEY_FOR_ACTION ) - 1 ) + +/** + * @brief The query key to use for searching the Message key in Jobs document + * from AWS IoT Jobs service. + * + * This demo program expects this key to be in the Job document if the "action" + * is either "publish" or "print". It represents the message that should be + * published or printed, respectively. + */ +#define jobsexampleQUERY_KEY_FOR_MESSAGE jobsexampleQUERY_KEY_FOR_JOBS_DOC ".message" + +/** + * @brief The length of #jobsexampleQUERY_KEY_FOR_MESSAGE. + */ +#define jobsexampleQUERY_KEY_FOR_MESSAGE_LENGTH ( sizeof( jobsexampleQUERY_KEY_FOR_MESSAGE ) - 1 ) + +/** + * @brief The query key to use for searching the topic key in Jobs document + * from AWS IoT Jobs service. + * + * This demo program expects this key to be in the Job document if the "action" + * is "publish". It represents the MQTT topic on which the message should be + * published. + */ +#define jobsexampleQUERY_KEY_FOR_TOPIC jobsexampleQUERY_KEY_FOR_JOBS_DOC ".topic" + +/** + * @brief The length of #jobsexampleQUERY_KEY_FOR_TOPIC. + */ +#define jobsexampleQUERY_KEY_FOR_TOPIC_LENGTH ( sizeof( jobsexampleQUERY_KEY_FOR_TOPIC ) - 1 ) + +/** + * @brief Utility macro to generate the PUBLISH topic string to the + * DescribePendingJobExecution API of AWS IoT Jobs service for requesting + * the next pending job information. + * + * @param[in] thingName The name of the Thing resource to query for the + * next pending job. + */ +#define START_NEXT_JOB_TOPIC( thingName ) \ + ( JOBS_API_PREFIX thingName JOBS_API_BRIDGE JOBS_API_STARTNEXT ) + +/** + * @brief Utility macro to generate the subscription topic string for the + * NextJobExecutionChanged API of AWS IoT Jobs service that is required + * for getting notification about changes in the next pending job in the queue. + * + * @param[in] thingName The name of the Thing resource to query for the + * next pending Job. + */ +#define NEXT_JOB_EXECUTION_CHANGED_TOPIC( thingName ) \ + ( JOBS_API_PREFIX thingName JOBS_API_BRIDGE JOBS_API_NEXTJOBCHANGED ) + +/** + * @brief Format a JSON status message. + * + * @param[in] x one of "IN_PROGRESS", "SUCCEEDED", or "FAILED" + */ +#define MAKE_STATUS_REPORT( x ) "{\"status\":\"" x "\"}" + +/** + * @brief The maximum number of times to run the loop in this demo. + */ +#ifndef JOBS_MAX_DEMO_COUNT + #define JOBS_MAX_DEMO_COUNT ( 3 ) +#endif + +/** + * @brief Time in ticks to wait between each iteration of the demo execution, + * in case a retry is required from demo execution failure. + */ +#define DELAY_BETWEEN_DEMO_ITERATIONS_TICKS ( pdMS_TO_TICKS( 5000U ) ) + +/*-----------------------------------------------------------*/ + +/** + * @brief Currently supported actions that a job document can specify. + */ +typedef enum JobActionType +{ + JOB_ACTION_PRINT, /**< Print a message. */ + JOB_ACTION_PUBLISH, /**< Publish a message to an MQTT topic. */ + JOB_ACTION_EXIT, /**< Exit the demo. */ + JOB_ACTION_UNKNOWN /**< Unknown action. */ +} JobActionType; + +/*-----------------------------------------------------------*/ + +/** + * @brief The MQTT context used for MQTT operation. + */ +static MQTTContext_t xMqttContext; + +/** + * @brief The network context used for Openssl operation. + */ +static NetworkContext_t xNetworkContext; + +/** + * @brief Static buffer used to hold MQTT messages being sent and received. + */ +static uint8_t ucSharedBuffer[ democonfigNETWORK_BUFFER_SIZE ]; + +/** + * @brief Static buffer used to hold MQTT messages being sent and received. + */ +static MQTTFixedBuffer_t xBuffer = +{ + .pBuffer = ucSharedBuffer, + .size = democonfigNETWORK_BUFFER_SIZE +}; + +/** + * @brief A global flag which represents whether a job for the "Exit" action + * has been received from AWS IoT Jobs service. + */ +static BaseType_t xExitActionJobReceived = pdFALSE; + +/** + * @brief A global flag which represents whether an error was encountered while + * executing the demo. + * + * @note When this flag is set, the demo terminates execution. + */ +static BaseType_t xDemoEncounteredError = pdFALSE; + +/*-----------------------------------------------------------*/ + +/** + * @brief Converts a string in a job document to a #JobActionType + * value. + * + * @param[in] pcAction The job action as a string. + * @param[in] xActionLength The length of @p pcAction. + * + * @return A #JobActionType equivalent to the given string. + */ +static JobActionType prvGetAction( const char * pcAction, + size_t xActionLength ); + +/** + * @brief This example uses the MQTT library of the AWS IoT Device SDK for + * Embedded C. This is the prototype of the callback function defined by + * that library. It will be invoked whenever the MQTT library receives an + * incoming message. + * + * @param[in] pxMqttContext MQTT context pointer. + * @param[in] pxPacketInfo Packet Info pointer for the incoming packet. + * @param[in] pxDeserializedInfo Deserialized information from the incoming packet. + */ +static void prvEventCallback( MQTTContext_t * pxMqttContext, + MQTTPacketInfo_t * pxPacketInfo, + MQTTDeserializedInfo_t * pxDeserializedInfo ); + +/** + * @brief Process payload from NextJobExecutionChanged and StartNextPendingJobExecution + * API MQTT topics of AWS IoT Jobs service. + * + * This handler parses the payload received about the next pending job to identify + * the action requested in the job document, and perform the appropriate + * action to execute the job. + * + * @param[in] pPublishInfo Deserialized publish info pointer for the incoming + * packet. + */ +static void prvNextJobHandler( MQTTPublishInfo_t * pxPublishInfo ); + +/** + * @brief Sends an update for a job to the UpdateJobExecution API of the AWS IoT Jobs service. + * + * @param[in] pcJobId The job ID whose status has to be updated. + * @param[in] usJobIdLength The length of the job ID string. + * @param[in] pcJobStatusReport The JSON formatted report to send to the AWS IoT Jobs service + * to update the status of @p pcJobId. + */ +static void prvSendUpdateForJob( char * pcJobId, + uint16_t usJobIdLength, + const char * pcJobStatusReport ); + +/** + * @brief Executes a job received from AWS IoT Jobs service and sends an update back to the service. + * It parses the received job document, executes the job depending on the job "Action" type, and + * sends an update to AWS for the Job. + * + * @param[in] pxPublishInfo The PUBLISH packet containing the job document received from the + * AWS IoT Jobs service. + * @param[in] pcJobId The ID of the job to execute. + * @param[in] usJobIdLength The length of the job ID string. + */ +static void prvProcessJobDocument( MQTTPublishInfo_t * pxPublishInfo, + char * pcJobId, + uint16_t usJobIdLength ); + +/*-----------------------------------------------------------*/ + +static JobActionType prvGetAction( const char * pcAction, + size_t xActionLength ) +{ + JobActionType xAction = JOB_ACTION_UNKNOWN; + + configASSERT( pcAction != NULL ); + + if( strncmp( pcAction, "print", xActionLength ) == 0 ) + { + xAction = JOB_ACTION_PRINT; + } + else if( strncmp( pcAction, "publish", xActionLength ) == 0 ) + { + xAction = JOB_ACTION_PUBLISH; + } + else if( strncmp( pcAction, "exit", xActionLength ) == 0 ) + { + xAction = JOB_ACTION_EXIT; + } + + return xAction; +} + +static void prvSendUpdateForJob( char * pcJobId, + uint16_t usJobIdLength, + const char * pcJobStatusReport ) +{ + char pUpdateJobTopic[ JOBS_API_MAX_LENGTH( THING_NAME_LENGTH ) ]; + size_t ulTopicLength = 0; + JobsStatus_t xStatus = JobsSuccess; + + configASSERT( ( pcJobId != NULL ) && ( usJobIdLength > 0 ) ); + configASSERT( pcJobStatusReport != NULL ); + + /* Generate the PUBLISH topic string for the UpdateJobExecution API of AWS IoT Jobs service. */ + xStatus = Jobs_Update( pUpdateJobTopic, + sizeof( pUpdateJobTopic ), + democonfigTHING_NAME, + THING_NAME_LENGTH, + pcJobId, + usJobIdLength, + &ulTopicLength ); + + if( xStatus == JobsSuccess ) + { + if( PublishToTopic( &xMqttContext, + pUpdateJobTopic, + ulTopicLength, + pcJobStatusReport, + strlen( pcJobStatusReport ) ) == pdFALSE ) + { + /* Set global flag to terminate demo as PUBLISH operation to update job status failed. */ + xDemoEncounteredError = pdTRUE; + + LogError( ( "Failed to update the status of job: JobID=%.*s, NewStatePayload=%s", + usJobIdLength, pcJobId, pcJobStatusReport ) ); + } + } + else + { + /* Set global flag to terminate demo as topic generation for UpdateJobExecution API failed. */ + xDemoEncounteredError = pdTRUE; + + LogError( ( "Failed to generate Publish topic string for sending job update: " + "JobID=%.*s, NewStatePayload=%s", + usJobIdLength, pcJobId, pcJobStatusReport ) ); + } +} + +static void prvProcessJobDocument( MQTTPublishInfo_t * pxPublishInfo, + char * pcJobId, + uint16_t usJobIdLength ) +{ + char * pcAction = NULL; + size_t uActionLength = 0U; + JSONStatus_t xJsonStatus = JSONSuccess; + + configASSERT( pxPublishInfo != NULL ); + configASSERT( ( pxPublishInfo->pPayload != NULL ) && ( pxPublishInfo->payloadLength > 0 ) ); + + xJsonStatus = JSON_Search( ( char * ) pxPublishInfo->pPayload, + pxPublishInfo->payloadLength, + jobsexampleQUERY_KEY_FOR_ACTION, + jobsexampleQUERY_KEY_FOR_ACTION_LENGTH, + &pcAction, + &uActionLength ); + + if( xJsonStatus != JSONSuccess ) + { + LogError( ( "Job document schema is invalid. Missing expected \"action\" key in document." ) ); + prvSendUpdateForJob( pcJobId, usJobIdLength, MAKE_STATUS_REPORT( "FAILED" ) ); + } + else + { + JobActionType xActionType = JOB_ACTION_UNKNOWN; + char * pcMessage = NULL; + size_t ulMessageLength = 0U; + + xActionType = prvGetAction( pcAction, uActionLength ); + + switch( xActionType ) + { + case JOB_ACTION_EXIT: + LogInfo( ( "Received job contains \"exit\" action. Updating state of demo." ) ); + xExitActionJobReceived = pdTRUE; + prvSendUpdateForJob( pcJobId, usJobIdLength, MAKE_STATUS_REPORT( "SUCCEEDED" ) ); + break; + + case JOB_ACTION_PRINT: + LogInfo( ( "Received job contains \"print\" action." ) ); + + xJsonStatus = JSON_Search( ( char * ) pxPublishInfo->pPayload, + pxPublishInfo->payloadLength, + jobsexampleQUERY_KEY_FOR_MESSAGE, + jobsexampleQUERY_KEY_FOR_MESSAGE_LENGTH, + &pcMessage, + &ulMessageLength ); + + if( xJsonStatus == JSONSuccess ) + { + /* Print the given message if the action is "print". */ + LogInfo( ( "\r\n" + "/*-----------------------------------------------------------*/\r\n" + "\r\n" + "%.*s\r\n" + "\r\n" + "/*-----------------------------------------------------------*/\r\n" + "\r\n", ulMessageLength, pcMessage ) ); + prvSendUpdateForJob( pcJobId, usJobIdLength, MAKE_STATUS_REPORT( "SUCCEEDED" ) ); + } + else + { + LogError( ( "Job document schema is invalid. Missing \"message\" for \"print\" action type." ) ); + prvSendUpdateForJob( pcJobId, usJobIdLength, MAKE_STATUS_REPORT( "FAILED" ) ); + } + + break; + + case JOB_ACTION_PUBLISH: + LogInfo( ( "Received job contains \"publish\" action." ) ); + char * pcTopic = NULL; + size_t ulTopicLength = 0U; + + xJsonStatus = JSON_Search( ( char * ) pxPublishInfo->pPayload, + pxPublishInfo->payloadLength, + jobsexampleQUERY_KEY_FOR_TOPIC, + jobsexampleQUERY_KEY_FOR_TOPIC_LENGTH, + &pcTopic, + &ulTopicLength ); + + /* Search for "topic" key in the Jobs document.*/ + if( xJsonStatus != JSONSuccess ) + { + LogError( ( "Job document schema is invalid. Missing \"topic\" key for \"publish\" action type." ) ); + prvSendUpdateForJob( pcJobId, usJobIdLength, MAKE_STATUS_REPORT( "FAILED" ) ); + } + else + { + xJsonStatus = JSON_Search( ( char * ) pxPublishInfo->pPayload, + pxPublishInfo->payloadLength, + jobsexampleQUERY_KEY_FOR_MESSAGE, + jobsexampleQUERY_KEY_FOR_MESSAGE_LENGTH, + &pcMessage, + &ulMessageLength ); + + /* Search for "message" key in Jobs document.*/ + if( xJsonStatus == JSONSuccess ) + { + /* Publish to the parsed MQTT topic with the message obtained from + * the Jobs document.*/ + if( PublishToTopic( &xMqttContext, + pcTopic, + ulTopicLength, + pcMessage, + ulMessageLength ) == pdFALSE ) + { + /* Set global flag to terminate demo as PUBLISH operation to execute job failed. */ + xDemoEncounteredError = pdTRUE; + + LogError( ( "Failed to execute job with \"publish\" action: Failed to publish to topic. " + "JobID=%.*s, Topic=%.*s", + usJobIdLength, pcJobId, ulTopicLength, pcTopic ) ); + } + + prvSendUpdateForJob( pcJobId, usJobIdLength, MAKE_STATUS_REPORT( "SUCCEEDED" ) ); + } + else + { + LogError( ( "Job document schema is invalid. Missing \"message\" key for \"publish\" action type." ) ); + prvSendUpdateForJob( pcJobId, usJobIdLength, MAKE_STATUS_REPORT( "FAILED" ) ); + } + } + + break; + + default: + configPRINTF( ( "Received Job document with unknown action %.*s.", + uActionLength, pcAction ) ); + break; + } + } +} + +static void prvNextJobHandler( MQTTPublishInfo_t * pxPublishInfo ) +{ + configASSERT( pxPublishInfo != NULL ); + configASSERT( ( pxPublishInfo->pPayload != NULL ) && ( pxPublishInfo->payloadLength > 0 ) ); + + /* Check validity of JSON message response from server.*/ + if( JSON_Validate( pxPublishInfo->pPayload, pxPublishInfo->payloadLength ) != JSONSuccess ) + { + LogError( ( "Received invalid JSON payload from AWS IoT Jobs service" ) ); + } + else + { + char * pcJobId = NULL; + size_t ulJobIdLength = 0U; + + /* Parse the Job ID of the next pending job execution from the JSON payload. */ + if( JSON_Search( ( char * ) pxPublishInfo->pPayload, + pxPublishInfo->payloadLength, + jobsexampleQUERY_KEY_FOR_JOB_ID, + jobsexampleQUERY_KEY_FOR_JOB_ID_LENGTH, + &pcJobId, + &ulJobIdLength ) != JSONSuccess ) + { + LogWarn( ( "Failed to parse Job ID in message received from AWS IoT Jobs service: " + "IncomingTopic=%.*s, Payload=%.*s", + pxPublishInfo->topicNameLength, pxPublishInfo->pTopicName, + pxPublishInfo->payloadLength, pxPublishInfo->pPayload ) ); + } + else + { + configASSERT( ulJobIdLength < JOBS_JOBID_MAX_LENGTH ); + LogInfo( ( "Received a Job from AWS IoT Jobs service: JobId=%.*s", + ulJobIdLength, pcJobId ) ); + + /* Process the Job document and execute the job. */ + prvProcessJobDocument( pxPublishInfo, pcJobId, ( uint16_t ) ulJobIdLength ); + } + } +} + +/*-----------------------------------------------------------*/ + +/* This is the callback function invoked by the MQTT stack when it receives + * incoming messages. This function demonstrates how to use the Jobs_MatchTopic + * function to determine whether the incoming message is a Jobs message + * or not. If it is, it handles the message depending on the message type. + */ +static void prvEventCallback( MQTTContext_t * pxMqttContext, + MQTTPacketInfo_t * pxPacketInfo, + MQTTDeserializedInfo_t * pxDeserializedInfo ) +{ + uint16_t usPacketIdentifier; + + ( void ) pxMqttContext; + + configASSERT( pxDeserializedInfo != NULL ); + configASSERT( pxMqttContext != NULL ); + configASSERT( pxPacketInfo != NULL ); + + usPacketIdentifier = pxDeserializedInfo->packetIdentifier; + + /* Handle incoming publish. The lower 4 bits of the publish packet + * type is used for the dup, QoS, and retain flags. Hence masking + * out the lower bits to check if the packet is publish. */ + if( ( pxPacketInfo->type & 0xF0U ) == MQTT_PACKET_TYPE_PUBLISH ) + { + configASSERT( pxDeserializedInfo->pPublishInfo != NULL ); + JobsTopic_t topicType = JobsMaxTopic; + JobsStatus_t xStatus = JobsError; + + LogDebug( ( "Received an incoming publish message: TopicName=%.*s", + pxDeserializedInfo->pPublishInfo->topicNameLength, + ( const char * ) pxDeserializedInfo->pPublishInfo->pTopicName ) ); + + /* Let the Jobs library tell us whether this is a Jobs message. */ + xStatus = Jobs_MatchTopic( ( char * ) pxDeserializedInfo->pPublishInfo->pTopicName, + pxDeserializedInfo->pPublishInfo->topicNameLength, + democonfigTHING_NAME, + THING_NAME_LENGTH, + &topicType, + NULL, + NULL ); + + if( xStatus == JobsSuccess ) + { + /* Upon successful return, the messageType has been filled in. */ + if( ( topicType == JobsStartNextSuccess ) || ( topicType == JobsNextJobChanged ) ) + { + /* Handler function to process payload. */ + prvNextJobHandler( pxDeserializedInfo->pPublishInfo ); + } + else if( topicType == JobsUpdateSuccess ) + { + LogInfo( ( "Job update status request has been accepted by AWS Iot Jobs service." ) ); + } + else if( topicType == JobsStartNextFailed ) + { + LogWarn( ( "Request for next job description rejected: RejectedResponse=%.*s.", + pxDeserializedInfo->pPublishInfo->payloadLength, + ( const char * ) pxDeserializedInfo->pPublishInfo->pPayload ) ); + } + else if( topicType == JobsUpdateFailed ) + { + /* Set the global flag to terminate the demo, because the request for updating and executing the job status + * has been rejected by the AWS IoT Jobs service. */ + xDemoEncounteredError = pdTRUE; + + LogWarn( ( "Request for job update rejected: RejectedResponse=%.*s.", + pxDeserializedInfo->pPublishInfo->payloadLength, + ( const char * ) pxDeserializedInfo->pPublishInfo->pPayload ) ); + + LogError( ( "Terminating demo as request to update job status has been rejected by " + "AWS IoT Jobs service..." ) ); + } + else + { + LogWarn( ( "Received an unexpected messages from AWS IoT Jobs service: " + "JobsTopicType=%u", topicType ) ); + } + } + else if( xStatus == JobsNoMatch ) + { + LogWarn( ( "Incoming message topic does not belong to AWS IoT Jobs!: topic=%.*s", + pxDeserializedInfo->pPublishInfo->topicNameLength, + ( const char * ) pxDeserializedInfo->pPublishInfo->pTopicName ) ); + } + else + { + LogError( ( "Failed to parse incoming publish job. Topic=%.*s!", + pxDeserializedInfo->pPublishInfo->topicNameLength, + ( const char * ) pxDeserializedInfo->pPublishInfo->pTopicName ) ); + } + } + else + { + vHandleOtherIncomingPacket( pxPacketInfo, usPacketIdentifier ); + } +} + +/*-----------------------------------------------------------*/ + +/** + * @brief Entry point of the Jobs demo. + * + * This main function demonstrates how to use the Jobs library API library. + * + * This demo uses helper functions for MQTT operations that have internal + * loops to process incoming messages. Those are not the focus of this demo + * and therefore, are placed in a separate file mqtt_demo_helpers.c. + * + * This function also shows that the communication with the AWS IoT Jobs services does + * not require explicit subscriptions to the response MQTT topics for request commands that + * sent to the MQTT APIs (like DescribeJobExecution API) of the service. The service + * will send messages on the response topics for the request commands on the same + * MQTT connection irrespective of whether the client subscribes to the response topics. + * Therefore, this demo processes incoming messages from response topics of DescribeJobExecution + * and UpdateJobExecution APIs without explicitly subscribing to the topics. + */ +int RunJobsDemo( bool awsIotMqttMode, + const char * pIdentifier, + void * pNetworkServerInfo, + void * pNetworkCredentialInfo, + const void * pNetworkInterface ) +{ + BaseType_t xDemoStatus = pdPASS; + UBaseType_t uxDemoRunCount = 0UL; + BaseType_t retryDemoLoop = pdFALSE; + + /* Remove compiler warnings about unused parameters. */ + ( void ) awsIotMqttMode; + ( void ) pIdentifier; + ( void ) pNetworkServerInfo; + ( void ) pNetworkCredentialInfo; + ( void ) pNetworkInterface; + + /* This demo runs a single loop unless there are failures in the demo execution. + * In case of failures in the demo execution, demo loop will be retried for up to + * JOBS_MAX_DEMO_COUNT times. */ + do + { + /* Establish an MQTT connection with AWS IoT over a mutually authenticated TLS session. */ + xDemoStatus = EstablishMqttSession( &xMqttContext, + &xNetworkContext, + &xBuffer, + prvEventCallback ); + + if( xDemoStatus == pdFAIL ) + { + /* Log error to indicate connection failure. */ + LogError( ( "Failed to connect to AWS IoT broker." ) ); + } + else + { + /* Print out a short user guide to the console. The default logging + * limit of 255 characters can be changed in demo_logging.c, but breaking + * up the only instance of a 1000+ character string is more practical. */ + LogInfo( ( "\r\n" + "/*-----------------------------------------------------------*/\r\n" + "\r\n" + "The Jobs demo is now ready to accept Jobs.\r\n" + "Jobs may be created using the AWS IoT console or AWS CLI.\r\n" + "See the following link for more information.\r\n" ) ); + LogInfo( ( "\r" + "https://docs.aws.amazon.com/cli/latest/reference/iot/create-job.html\r\n" + "\r\n" + "This demo expects Job documents to have an \"action\" JSON key.\r\n" + "The following actions are currently supported:\r\n" ) ); + LogInfo( ( "\r" + " - print \r\n" + " Logs a message to the local console. The Job document must also contain a \"message\".\r\n" + " For example: { \"action\": \"print\", \"message\": \"Hello world!\"} will cause\r\n" + " \"Hello world!\" to be printed on the console.\r\n" ) ); + LogInfo( ( "\r" + " - publish \r\n" + " Publishes a message to an MQTT topic. The Job document must also contain a \"message\" and \"topic\".\r\n" ) ); + LogInfo( ( "\r" + " For example: { \"action\": \"publish\", \"topic\": \"demo/jobs\", \"message\": \"Hello world!\"} will cause\r\n" + " \"Hello world!\" to be published to the topic \"demo/jobs\".\r\n" ) ); + LogInfo( ( "\r" + " - exit \r\n" + " Exits the demo program. This program will run until { \"action\": \"exit\" } is received.\r\n" + "\r\n" + "/*-----------------------------------------------------------*/\r\n" ) ); + + /* Subscribe to the NextJobExecutionChanged API topic to receive notifications about the next pending + * job in the queue for the Thing resource used by this demo. */ + if( SubscribeToTopic( &xMqttContext, + NEXT_JOB_EXECUTION_CHANGED_TOPIC( democonfigTHING_NAME ), + sizeof( NEXT_JOB_EXECUTION_CHANGED_TOPIC( democonfigTHING_NAME ) ) - 1 ) != pdPASS ) + { + xDemoStatus = pdFAIL; + LogError( ( "Failed to subscribe to NextJobExecutionChanged API of AWS IoT Jobs service: Topic=%s", + NEXT_JOB_EXECUTION_CHANGED_TOPIC( democonfigTHING_NAME ) ) ); + } + } + + if( xDemoStatus == pdPASS ) + { + /* Publish to AWS IoT Jobs on the StartNextPendingJobExecution API to request the next pending job. + * + * Note: It is not required to make MQTT subscriptions to the response topics of the + * StartNextPendingJobExecution API because the AWS IoT Jobs service sends responses for + * the PUBLISH commands on the same MQTT connection irrespective of whether the client has subscribed + * to the response topics or not. + * This demo processes incoming messages from the response topics of the API in the prvEventCallback() + * handler that is supplied to the coreMQTT library. */ + if( PublishToTopic( &xMqttContext, + START_NEXT_JOB_TOPIC( democonfigTHING_NAME ), + sizeof( START_NEXT_JOB_TOPIC( democonfigTHING_NAME ) ) - 1, + NULL, + 0 ) != pdPASS ) + { + xDemoStatus = pdFAIL; + LogError( ( "Failed to publish to StartNextPendingJobExecution API of AWS IoT Jobs service: " + "Topic=%s", START_NEXT_JOB_TOPIC( democonfigTHING_NAME ) ) ); + } + } + + /* Keep on running the demo until we receive a job for the "exit" action to exit the demo. */ + while( ( xExitActionJobReceived == pdFALSE ) && + ( xDemoEncounteredError == pdFALSE ) && + ( xDemoStatus == pdPASS ) ) + { + MQTTStatus_t xMqttStatus = MQTTSuccess; + + /* Check if we have notification for the next pending job in the queue from the + * NextJobExecutionChanged API of the AWS IoT Jobs service. */ + xMqttStatus = MQTT_ProcessLoop( &xMqttContext, 300U ); + + if( xMqttStatus != MQTTSuccess ) + { + xDemoStatus = pdFAIL; + LogError( ( "Failed to receive notification about next pending job: " + "MQTT_ProcessLoop failed" ) ); + } + } + + /* Increment the demo run count. */ + uxDemoRunCount++; + + /* Retry demo loop only if there is a failure before completing + * the processing of any pending jobs. Any failure in MQTT unsubscribe + * or disconnect is considered a failure in demo execution and retry + * will not be attempted since a retry without any pending jobs will + * make this demo indefinitely wait. */ + if( ( xDemoStatus == pdFAIL ) || ( xDemoEncounteredError == pdTRUE ) ) + { + if( uxDemoRunCount < JOBS_MAX_DEMO_COUNT ) + { + LogWarn( ( "Demo iteration %lu failed. Retrying...", uxDemoRunCount ) ); + retryDemoLoop = pdTRUE; + } + else + { + LogError( ( "All %d demo iterations failed.", JOBS_MAX_DEMO_COUNT ) ); + retryDemoLoop = pdFALSE; + } + } + else + { + /* Reset the flag for demo retry. */ + retryDemoLoop = pdFALSE; + } + + /* Unsubscribe from the NextJobExecutionChanged API topic. */ + if( UnsubscribeFromTopic( &xMqttContext, + NEXT_JOB_EXECUTION_CHANGED_TOPIC( democonfigTHING_NAME ), + sizeof( NEXT_JOB_EXECUTION_CHANGED_TOPIC( democonfigTHING_NAME ) ) - 1 ) != pdPASS ) + { + xDemoStatus = pdFAIL; + LogError( ( "Failed to unsubscribe from the NextJobExecutionChanged API of AWS IoT Jobs service: " + "Topic=%s", NEXT_JOB_EXECUTION_CHANGED_TOPIC( democonfigTHING_NAME ) ) ); + } + + /* Disconnect the MQTT and network connections with AWS IoT. */ + if( DisconnectMqttSession( &xMqttContext, &xNetworkContext ) != pdPASS ) + { + xDemoStatus = pdFAIL; + LogError( ( "Disconnection from AWS Iot failed..." ) ); + } + + /* Add a delay if a retry is required. */ + if( retryDemoLoop == pdTRUE ) + { + /* Clear the flag that indicates that indicates the demo error + * before attempting a retry. */ + xDemoEncounteredError = pdFALSE; + + LogInfo( ( "A short delay before the next demo iteration." ) ); + vTaskDelay( DELAY_BETWEEN_DEMO_ITERATIONS_TICKS ); + } + } while( retryDemoLoop == pdTRUE ); + + return( ( ( xDemoStatus == pdPASS ) && ( xDemoEncounteredError == pdFALSE ) ) ? + EXIT_SUCCESS : EXIT_FAILURE ); +} + +/*-----------------------------------------------------------*/ diff --git a/demos/network_manager/aws_iot_demo_network.c b/demos/network_manager/aws_iot_demo_network.c index 3f47578db36..5efabc0830e 100644 --- a/demos/network_manager/aws_iot_demo_network.c +++ b/demos/network_manager/aws_iot_demo_network.c @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/network_manager/aws_iot_network_manager.c b/demos/network_manager/aws_iot_network_manager.c index 23c77c5b76c..4590144c9a3 100644 --- a/demos/network_manager/aws_iot_network_manager.c +++ b/demos/network_manager/aws_iot_network_manager.c @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/network_manager/iot_network_manager_private.h b/demos/network_manager/iot_network_manager_private.h index dc575370153..99d03a6faec 100644 --- a/demos/network_manager/iot_network_manager_private.h +++ b/demos/network_manager/iot_network_manager_private.h @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/ota/aws_iot_ota_update_demo.c b/demos/ota/aws_iot_ota_update_demo.c index 6b2e7da90d8..2c06ed448db 100644 --- a/demos/ota/aws_iot_ota_update_demo.c +++ b/demos/ota/aws_iot_ota_update_demo.c @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/posix/aws_posix_demo.c b/demos/posix/aws_posix_demo.c index 922e7221236..d6577237772 100644 --- a/demos/posix/aws_posix_demo.c +++ b/demos/posix/aws_posix_demo.c @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/tcp/aws_tcp_echo_client_single_task.c b/demos/tcp/aws_tcp_echo_client_single_task.c index bdf11f2b5b7..237a8380169 100644 --- a/demos/tcp/aws_tcp_echo_client_single_task.c +++ b/demos/tcp/aws_tcp_echo_client_single_task.c @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/tcp/aws_tcp_echo_client_single_tasks.h b/demos/tcp/aws_tcp_echo_client_single_tasks.h index 9522ceb37ee..e22c3f1c24d 100644 --- a/demos/tcp/aws_tcp_echo_client_single_tasks.h +++ b/demos/tcp/aws_tcp_echo_client_single_tasks.h @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/demos/wifi_provisioning/aws_wifi_connect_task.c b/demos/wifi_provisioning/aws_wifi_connect_task.c index 8658382fdce..a578a882486 100644 --- a/demos/wifi_provisioning/aws_wifi_connect_task.c +++ b/demos/wifi_provisioning/aws_wifi_connect_task.c @@ -1,5 +1,5 @@ /* - * FreeRTOS V202011.00 + * FreeRTOS V202012.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/doc/freertos_port_qual/FreeRTOS_Porting_Guide.pdf b/doc/freertos_port_qual/FreeRTOS_Porting_Guide.pdf index ceca087d03e..88b0a52dbc3 100644 Binary files a/doc/freertos_port_qual/FreeRTOS_Porting_Guide.pdf and b/doc/freertos_port_qual/FreeRTOS_Porting_Guide.pdf differ diff --git a/doc/freertos_port_qual/FreeRTOS_Qualification_Guide.pdf b/doc/freertos_port_qual/FreeRTOS_Qualification_Guide.pdf index 18b99a08913..af15b883a04 100644 Binary files a/doc/freertos_port_qual/FreeRTOS_Qualification_Guide.pdf and b/doc/freertos_port_qual/FreeRTOS_Qualification_Guide.pdf differ diff --git a/freertos_kernel b/freertos_kernel index 1431b65110a..9c048e0c71e 160000 --- a/freertos_kernel +++ b/freertos_kernel @@ -1 +1 @@ -Subproject commit 1431b65110a294720b75af2f80b0f6465220a90f +Subproject commit 9c048e0c71ee43630394981a86f5265bc57131e4 diff --git a/libraries/3rdparty/CMakeLists.txt b/libraries/3rdparty/CMakeLists.txt index 5bee4800f61..ac430274f40 100644 --- a/libraries/3rdparty/CMakeLists.txt +++ b/libraries/3rdparty/CMakeLists.txt @@ -1,20 +1,6 @@ # ------------------------------------------------------------------------------------------------- # 3rdparty libraries # ------------------------------------------------------------------------------------------------- -# http_parser - HTTP message parser -if(EXISTS "${AFR_3RDPARTY_DIR}/http_parser") - afr_3rdparty_module(http_parser) - target_sources( - 3rdparty::http_parser INTERFACE - "${AFR_3RDPARTY_DIR}/http_parser/http_parser.h" - "${AFR_3RDPARTY_DIR}/http_parser/http_parser.c" - ) - target_include_directories( - 3rdparty::http_parser INTERFACE - "${AFR_3RDPARTY_DIR}/http_parser" - ) -endif() - # jsmn - JSON parser if(EXISTS "${AFR_3RDPARTY_DIR}/jsmn") afr_3rdparty_module(jsmn) @@ -139,7 +125,7 @@ if(EXISTS "${AFR_3RDPARTY_DIR}/mbedtls") "${AFR_3RDPARTY_DIR}/mbedtls_utils/mbedtls_utils.c" "${AFR_3RDPARTY_DIR}/mbedtls_utils/mbedtls_error.h" "${AFR_3RDPARTY_DIR}/mbedtls_utils/mbedtls_error.c" - "${AFR_MODULES_ABSTRACTIONS_DIR}/pkcs11/corePKCS11/source/portable/mbedtls/include/threading_alt.h" + "${AFR_3RDPARTY_DIR}/mbedtls_config/threading_alt.h" ) # The "${AFR_3RDPARTY_DIR}/pkcs11" directory must be included before # "${AFR_3RDPARTY_DIR}/mbedtls/include/mbedtls". This is because mbedtls/include @@ -156,7 +142,7 @@ if(EXISTS "${AFR_3RDPARTY_DIR}/mbedtls") target_include_directories( afr_3rdparty_mbedtls PUBLIC "${AFR_3RDPARTY_DIR}/mbedtls/include" - "${AFR_MODULES_ABSTRACTIONS_DIR}/pkcs11/corePKCS11/source/portable/mbedtls/include" + "${AFR_3RDPARTY_DIR}/mbedtls_config" "${AFR_3RDPARTY_DIR}/mbedtls/include/mbedtls" "${AFR_3RDPARTY_DIR}/mbedtls_utils" ) diff --git a/libraries/3rdparty/http_parser b/libraries/3rdparty/http_parser deleted file mode 160000 index 5c17dad400e..00000000000 --- a/libraries/3rdparty/http_parser +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 5c17dad400e45c5a442a63f250fff2638d144682 diff --git a/libraries/3rdparty/jsmn/LICENSE b/libraries/3rdparty/jsmn/LICENSE new file mode 100644 index 00000000000..c84fb2e973d --- /dev/null +++ b/libraries/3rdparty/jsmn/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2010 Serge A. Zaitsev + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/libraries/3rdparty/mbedtls_config/threading_alt.h b/libraries/3rdparty/mbedtls_config/threading_alt.h new file mode 100644 index 00000000000..9d888d9b78a --- /dev/null +++ b/libraries/3rdparty/mbedtls_config/threading_alt.h @@ -0,0 +1,49 @@ +/* + * corePKCS11 V2.0.0 + * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF NY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://aws.amazon.com/freertos + * http://www.FreeRTOS.org + */ + +#ifndef __THREADING_ALT_H__ +#define __THREADING_ALT_H__ + + +#include "FreeRTOS.h" +#include "semphr.h" + +/** + * @brief Mutex struct used to synchronize mbed TLS operations. + * + */ +typedef struct +{ + SemaphoreHandle_t mutex; /**< @brief FreeRTOS semaphore. */ + char is_valid; /**< @brief Flag used by mbedTLS to track wether a mutex is valid. */ +} mbedtls_threading_mutex_t; + +extern void mbedtls_threading_set_alt( void ( * mutex_init )( mbedtls_threading_mutex_t * ), + void ( * mutex_free )( mbedtls_threading_mutex_t * ), + int ( * mutex_lock )( mbedtls_threading_mutex_t * ), + int ( * mutex_unlock )( mbedtls_threading_mutex_t * ) ); + + +#endif /* ifndef __THREADING_ALT_H__ */ diff --git a/libraries/CMakeLists.txt b/libraries/CMakeLists.txt index 7eb523ba3e9..8bbdf734fba 100644 --- a/libraries/CMakeLists.txt +++ b/libraries/CMakeLists.txt @@ -63,11 +63,21 @@ if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/core_mqtt_demo_dependencies.cmake) include(core_mqtt_demo_dependencies.cmake) endif() +# Add core_http modules ONLY if present in the FreeRTOS console download. +if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/core_http_demo_dependencies.cmake) + include(core_http_demo_dependencies.cmake) +endif() + # Add FreeRTOS+TCP module ONLY if present in FreeRTOS console download. if(EXISTS ${AFR_MODULES_DIR}/freertos_plus/standard/freertos_plus_tcp.cmake) include(${AFR_MODULES_DIR}/freertos_plus/standard/freertos_plus_tcp.cmake) endif() +# Add FreeRTOS+TCP utils module ONLY if present in FreeRTOS console download. +if(EXISTS ${AFR_MODULES_DIR}/freertos_plus/standard/freertos_plus_tcp_utils.cmake) + include(${AFR_MODULES_DIR}/freertos_plus/standard/freertos_plus_tcp_utils.cmake) +endif() + # Add core_json modules ONLY if present in FreeRTOS console download. if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/core_json.cmake) include(core_json.cmake) @@ -78,7 +88,22 @@ if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/device_shadow_demo_dependencies.cmake) include(device_shadow_demo_dependencies.cmake) endif() +# Add jobs modules ONLY if present in FreeRTOS console download. +if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/device_defender_demo_dependencies.cmake) + include(device_defender_demo_dependencies.cmake) +endif() + +# Add device_defender modules ONLY if present in FreeRTOS console download. +if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/jobs_demo_dependencies.cmake) + include(jobs_demo_dependencies.cmake) +endif() + # Add transport interface implementation module ONLY if present in FreeRTOS console download. if(EXISTS ${AFR_MODULES_DIR}/abstractions/transport/transport_interface_secure_sockets.cmake) include(${AFR_MODULES_DIR}/abstractions/transport/transport_interface_secure_sockets.cmake) endif() + +# Add backoff algorithm module ONLY if present in FreeRTOS console download. +if(EXISTS ${AFR_MODULES_DIR}/abstractions/backoff_algorithm.cmake) + include(${AFR_MODULES_DIR}/abstractions/backoff_algorithm.cmake) +endif() diff --git a/libraries/abstractions/backoff_algorithm b/libraries/abstractions/backoff_algorithm new file mode 160000 index 00000000000..a70291444c5 --- /dev/null +++ b/libraries/abstractions/backoff_algorithm @@ -0,0 +1 @@ +Subproject commit a70291444c556bc3392bf9b7b60626b93b120319 diff --git a/libraries/abstractions/backoff_algorithm.cmake b/libraries/abstractions/backoff_algorithm.cmake new file mode 100644 index 00000000000..444230e39dc --- /dev/null +++ b/libraries/abstractions/backoff_algorithm.cmake @@ -0,0 +1,38 @@ +# Module for backoff algorithm library. +afr_module( NAME backoff_algorithm INTERNAL ) + +# Include file path configuration for backoff algorithm library. +include(${AFR_MODULES_DIR}/abstractions/backoff_algorithm/backoffAlgorithmFilePaths.cmake) + +# Add cmake files of module to metadata. +afr_module_cmake_files(${AFR_CURRENT_MODULE} + ${AFR_MODULES_DIR}/abstractions/backoff_algorithm/backoffAlgorithmFilePaths.cmake + ${CMAKE_CURRENT_LIST_DIR}/backoff_algorithm.cmake +) + +# Create a list of all header files in the backoffAlgorithm library. +# The list of header files will be added to metadata required +# for the FreeRTOS console. +set(BACKOFF_ALGORITHM_HEADER_FILES "") +foreach(backoff_algorithm_public_include_dir ${BACKOFF_ALGORITHM_INCLUDE_PUBLIC_DIRS}) + file(GLOB backoff_algorithm_public_include_header_files + LIST_DIRECTORIES false + ${backoff_algorithm_public_include_dir}/*.h ) + list(APPEND BACKOFF_ALGORITHM_HEADER_FILES ${backoff_algorithm_public_include_header_files}) +endforeach() + +afr_module_sources( + ${AFR_CURRENT_MODULE} + PRIVATE + ${BACKOFF_ALGORITHM_SOURCES} + # Header files added to the target so that these are available + # in code downloaded from the FreeRTOS console. + ${BACKOFF_ALGORITHM_HEADER_FILES} +) + + +afr_module_include_dirs( + ${AFR_CURRENT_MODULE} + PUBLIC + ${BACKOFF_ALGORITHM_INCLUDE_PUBLIC_DIRS} +) diff --git a/libraries/abstractions/common_io/include/iot_adc.h b/libraries/abstractions/common_io/include/iot_adc.h index e9c744d6bd8..f3981d6b880 100644 --- a/libraries/abstractions/common_io/include/iot_adc.h +++ b/libraries/abstractions/common_io/include/iot_adc.h @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/include/iot_battery.h b/libraries/abstractions/common_io/include/iot_battery.h index 47fc46893ca..1a67d475109 100644 --- a/libraries/abstractions/common_io/include/iot_battery.h +++ b/libraries/abstractions/common_io/include/iot_battery.h @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/include/iot_efuse.h b/libraries/abstractions/common_io/include/iot_efuse.h index 0eed76a2328..4606f92e16f 100644 --- a/libraries/abstractions/common_io/include/iot_efuse.h +++ b/libraries/abstractions/common_io/include/iot_efuse.h @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/include/iot_flash.h b/libraries/abstractions/common_io/include/iot_flash.h index 664e6c1f6f6..02734dabe6a 100644 --- a/libraries/abstractions/common_io/include/iot_flash.h +++ b/libraries/abstractions/common_io/include/iot_flash.h @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/include/iot_gpio.h b/libraries/abstractions/common_io/include/iot_gpio.h index 5306e9d8563..04f16cea764 100644 --- a/libraries/abstractions/common_io/include/iot_gpio.h +++ b/libraries/abstractions/common_io/include/iot_gpio.h @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/include/iot_hw.h b/libraries/abstractions/common_io/include/iot_hw.h index 87db4e6009b..0c28abe7444 100644 --- a/libraries/abstractions/common_io/include/iot_hw.h +++ b/libraries/abstractions/common_io/include/iot_hw.h @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/include/iot_i2c.h b/libraries/abstractions/common_io/include/iot_i2c.h index 870986c0906..b485ed00723 100644 --- a/libraries/abstractions/common_io/include/iot_i2c.h +++ b/libraries/abstractions/common_io/include/iot_i2c.h @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/include/iot_i2s.h b/libraries/abstractions/common_io/include/iot_i2s.h index 02a604edca9..a3bec940db7 100644 --- a/libraries/abstractions/common_io/include/iot_i2s.h +++ b/libraries/abstractions/common_io/include/iot_i2s.h @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/include/iot_perfcounter.h b/libraries/abstractions/common_io/include/iot_perfcounter.h index 93de7ee2535..705fa5ea704 100644 --- a/libraries/abstractions/common_io/include/iot_perfcounter.h +++ b/libraries/abstractions/common_io/include/iot_perfcounter.h @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/include/iot_power.h b/libraries/abstractions/common_io/include/iot_power.h index 6fc1b9b08be..42ffba37d00 100644 --- a/libraries/abstractions/common_io/include/iot_power.h +++ b/libraries/abstractions/common_io/include/iot_power.h @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/include/iot_pwm.h b/libraries/abstractions/common_io/include/iot_pwm.h index ae13c904a64..3459de5a397 100644 --- a/libraries/abstractions/common_io/include/iot_pwm.h +++ b/libraries/abstractions/common_io/include/iot_pwm.h @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/include/iot_reset.h b/libraries/abstractions/common_io/include/iot_reset.h index c6807fa0c0e..a2cc3f74d50 100644 --- a/libraries/abstractions/common_io/include/iot_reset.h +++ b/libraries/abstractions/common_io/include/iot_reset.h @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/include/iot_rtc.h b/libraries/abstractions/common_io/include/iot_rtc.h index b8fe1ad8e8c..6762d587918 100644 --- a/libraries/abstractions/common_io/include/iot_rtc.h +++ b/libraries/abstractions/common_io/include/iot_rtc.h @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/include/iot_sdio.h b/libraries/abstractions/common_io/include/iot_sdio.h index 42901a5253f..a32ff3eaa8c 100644 --- a/libraries/abstractions/common_io/include/iot_sdio.h +++ b/libraries/abstractions/common_io/include/iot_sdio.h @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/include/iot_spi.h b/libraries/abstractions/common_io/include/iot_spi.h index 4344f4b0693..4ccf5ff4edd 100644 --- a/libraries/abstractions/common_io/include/iot_spi.h +++ b/libraries/abstractions/common_io/include/iot_spi.h @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/include/iot_timer.h b/libraries/abstractions/common_io/include/iot_timer.h index 398d32a5087..4fc0942ed50 100644 --- a/libraries/abstractions/common_io/include/iot_timer.h +++ b/libraries/abstractions/common_io/include/iot_timer.h @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/include/iot_tsensor.h b/libraries/abstractions/common_io/include/iot_tsensor.h index cdaf62dbdaf..cb4601f9d38 100644 --- a/libraries/abstractions/common_io/include/iot_tsensor.h +++ b/libraries/abstractions/common_io/include/iot_tsensor.h @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/include/iot_uart.h b/libraries/abstractions/common_io/include/iot_uart.h index 75ac5335044..f239a82fa12 100644 --- a/libraries/abstractions/common_io/include/iot_uart.h +++ b/libraries/abstractions/common_io/include/iot_uart.h @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/include/iot_usb_device.h b/libraries/abstractions/common_io/include/iot_usb_device.h index 66967f9a357..50d4dbe2640 100644 --- a/libraries/abstractions/common_io/include/iot_usb_device.h +++ b/libraries/abstractions/common_io/include/iot_usb_device.h @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/include/iot_usb_host.h b/libraries/abstractions/common_io/include/iot_usb_host.h index b502477a15d..66e61a7e180 100644 --- a/libraries/abstractions/common_io/include/iot_usb_host.h +++ b/libraries/abstractions/common_io/include/iot_usb_host.h @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/include/iot_watchdog.h b/libraries/abstractions/common_io/include/iot_watchdog.h index 13190f06236..bf483569412 100644 --- a/libraries/abstractions/common_io/include/iot_watchdog.h +++ b/libraries/abstractions/common_io/include/iot_watchdog.h @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/test/iot_test_common_io.c b/libraries/abstractions/common_io/test/iot_test_common_io.c index 48a091a37c7..759a99e37f4 100644 --- a/libraries/abstractions/common_io/test/iot_test_common_io.c +++ b/libraries/abstractions/common_io/test/iot_test_common_io.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/test/iot_test_common_io_internal.h b/libraries/abstractions/common_io/test/iot_test_common_io_internal.h index addd33562dc..e11fa1124b5 100644 --- a/libraries/abstractions/common_io/test/iot_test_common_io_internal.h +++ b/libraries/abstractions/common_io/test/iot_test_common_io_internal.h @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/test/test_iot_adc.c b/libraries/abstractions/common_io/test/test_iot_adc.c index 5091eb47c61..f37d81e8a11 100644 --- a/libraries/abstractions/common_io/test/test_iot_adc.c +++ b/libraries/abstractions/common_io/test/test_iot_adc.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/test/test_iot_battery.c b/libraries/abstractions/common_io/test/test_iot_battery.c index e4bf16bd6d1..899b4154ae8 100644 --- a/libraries/abstractions/common_io/test/test_iot_battery.c +++ b/libraries/abstractions/common_io/test/test_iot_battery.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/test/test_iot_efuse.c b/libraries/abstractions/common_io/test/test_iot_efuse.c index b27d3071651..c18add1d18e 100644 --- a/libraries/abstractions/common_io/test/test_iot_efuse.c +++ b/libraries/abstractions/common_io/test/test_iot_efuse.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/test/test_iot_flash.c b/libraries/abstractions/common_io/test/test_iot_flash.c index 4e301f322e8..b43a96c0bbe 100644 --- a/libraries/abstractions/common_io/test/test_iot_flash.c +++ b/libraries/abstractions/common_io/test/test_iot_flash.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/test/test_iot_gpio.c b/libraries/abstractions/common_io/test/test_iot_gpio.c index 9c3826de80b..58b39dc741f 100644 --- a/libraries/abstractions/common_io/test/test_iot_gpio.c +++ b/libraries/abstractions/common_io/test/test_iot_gpio.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/test/test_iot_i2c.c b/libraries/abstractions/common_io/test/test_iot_i2c.c index 36d904763b1..392e1667262 100644 --- a/libraries/abstractions/common_io/test/test_iot_i2c.c +++ b/libraries/abstractions/common_io/test/test_iot_i2c.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/test/test_iot_i2s.c b/libraries/abstractions/common_io/test/test_iot_i2s.c index 2e53db890c1..e16f6cc5e59 100644 --- a/libraries/abstractions/common_io/test/test_iot_i2s.c +++ b/libraries/abstractions/common_io/test/test_iot_i2s.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/test/test_iot_perfcounter.c b/libraries/abstractions/common_io/test/test_iot_perfcounter.c index 008491adb39..bc9d5197321 100644 --- a/libraries/abstractions/common_io/test/test_iot_perfcounter.c +++ b/libraries/abstractions/common_io/test/test_iot_perfcounter.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/test/test_iot_power.c b/libraries/abstractions/common_io/test/test_iot_power.c index ba8850aaf98..dee5bb6da4c 100644 --- a/libraries/abstractions/common_io/test/test_iot_power.c +++ b/libraries/abstractions/common_io/test/test_iot_power.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/test/test_iot_pwm.c b/libraries/abstractions/common_io/test/test_iot_pwm.c index 4f26ec8f6b9..449ab3e42db 100644 --- a/libraries/abstractions/common_io/test/test_iot_pwm.c +++ b/libraries/abstractions/common_io/test/test_iot_pwm.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/test/test_iot_reset.c b/libraries/abstractions/common_io/test/test_iot_reset.c index 4b3848f2025..45de7bc828f 100644 --- a/libraries/abstractions/common_io/test/test_iot_reset.c +++ b/libraries/abstractions/common_io/test/test_iot_reset.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/test/test_iot_rtc.c b/libraries/abstractions/common_io/test/test_iot_rtc.c index eca2b76a70d..489b36612cb 100644 --- a/libraries/abstractions/common_io/test/test_iot_rtc.c +++ b/libraries/abstractions/common_io/test/test_iot_rtc.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/test/test_iot_sdio.c b/libraries/abstractions/common_io/test/test_iot_sdio.c index 70628aca194..2a8b36adf22 100644 --- a/libraries/abstractions/common_io/test/test_iot_sdio.c +++ b/libraries/abstractions/common_io/test/test_iot_sdio.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/test/test_iot_spi.c b/libraries/abstractions/common_io/test/test_iot_spi.c index 244cfe6d91d..b2d50e185cc 100644 --- a/libraries/abstractions/common_io/test/test_iot_spi.c +++ b/libraries/abstractions/common_io/test/test_iot_spi.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/test/test_iot_timer.c b/libraries/abstractions/common_io/test/test_iot_timer.c index 8c6196c3f99..7fafff928da 100644 --- a/libraries/abstractions/common_io/test/test_iot_timer.c +++ b/libraries/abstractions/common_io/test/test_iot_timer.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -40,8 +40,14 @@ #include "semphr.h" #include "task.h" -#define testIotTIMER_DEFAULT_DELAY_US 500 -#define testIotTIMER_SLEEP_DELAY_MS 1 +#define testIotTIMER_DEFAULT_DELAY_US 500 +#define testIotTIMER_SLEEP_DELAY_MS 1 + +/* + * @brief timeout for the semaphore to be invoked by the iot_timer. 4 times larger to account + * for timer resolution variances. + */ +#define testIotTIMER_CALLBACK_DELAY_US ( testIotTIMER_DEFAULT_DELAY_US * 4 ) /*-----------------------------------------------------------*/ @@ -298,7 +304,7 @@ TEST( TEST_IOT_TIMER, AFWP_IotTimer_Callback ) TEST_ASSERT_EQUAL( IOT_TIMER_SUCCESS, lRetVal ); /* Wait for the Delay callback to be called. */ - lRetVal = xSemaphoreTake( xtestIotTimerSemaphore, portMAX_DELAY ); + lRetVal = xSemaphoreTake( xtestIotTimerSemaphore, testIotTIMER_CALLBACK_DELAY_US ); TEST_ASSERT_EQUAL( pdTRUE, lRetVal ); /* Get the time in micro seconds @@ -357,7 +363,7 @@ TEST( TEST_IOT_TIMER, AFWP_IotTimer_NoCallback ) if( lRetVal != IOT_TIMER_FUNCTION_NOT_SUPPORTED ) { /* Wait for the Delay. Make sure callback is not called. */ - lRetVal = xSemaphoreTake( xtestIotTimerSemaphore, 2 * testIotTIMER_DEFAULT_DELAY_US ); + lRetVal = xSemaphoreTake( xtestIotTimerSemaphore, testIotTIMER_CALLBACK_DELAY_US ); TEST_ASSERT_NOT_EQUAL( pdTRUE, lRetVal ); } } @@ -410,7 +416,7 @@ TEST( TEST_IOT_TIMER, AFWP_IotTimer_StartAgain ) if( lRetVal != IOT_TIMER_FUNCTION_NOT_SUPPORTED ) { /* Wait for the Delay. Make sure callback is not called. */ - lRetVal = xSemaphoreTake( xtestIotTimerSemaphore, 2 * testIotTIMER_DEFAULT_DELAY_US ); + lRetVal = xSemaphoreTake( xtestIotTimerSemaphore, testIotTIMER_CALLBACK_DELAY_US ); TEST_ASSERT_NOT_EQUAL( pdTRUE, lRetVal ); /* Start the timer again*/ @@ -418,7 +424,7 @@ TEST( TEST_IOT_TIMER, AFWP_IotTimer_StartAgain ) TEST_ASSERT_EQUAL( IOT_TIMER_SUCCESS, lRetVal ); /* Wait for the Delay. Make sure callback is called. */ - lRetVal = xSemaphoreTake( xtestIotTimerSemaphore, 2 * testIotTIMER_DEFAULT_DELAY_US ); + lRetVal = xSemaphoreTake( xtestIotTimerSemaphore, testIotTIMER_CALLBACK_DELAY_US ); TEST_ASSERT_EQUAL( pdTRUE, lRetVal ); } } @@ -469,7 +475,7 @@ TEST( TEST_IOT_TIMER, AFWP_IotTimer_Cancel ) TEST_ASSERT_EQUAL( IOT_TIMER_SUCCESS, lRetVal ); /* Wait for the Delay. Make sure callback is not called. */ - lRetVal = xSemaphoreTake( xtestIotTimerSemaphore, 2 * testIotTIMER_DEFAULT_DELAY_US ); + lRetVal = xSemaphoreTake( xtestIotTimerSemaphore, testIotTIMER_CALLBACK_DELAY_US ); TEST_ASSERT_NOT_EQUAL( pdTRUE, lRetVal ); } } diff --git a/libraries/abstractions/common_io/test/test_iot_tsensor.c b/libraries/abstractions/common_io/test/test_iot_tsensor.c index f5bae13b4e8..341ef87cc95 100644 --- a/libraries/abstractions/common_io/test/test_iot_tsensor.c +++ b/libraries/abstractions/common_io/test/test_iot_tsensor.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/test/test_iot_uart.c b/libraries/abstractions/common_io/test/test_iot_uart.c index 99949020c7f..5c36b834e03 100644 --- a/libraries/abstractions/common_io/test/test_iot_uart.c +++ b/libraries/abstractions/common_io/test/test_iot_uart.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/common_io/test/test_iot_watchdog.c b/libraries/abstractions/common_io/test/test_iot_watchdog.c index 0600fcd1b9d..fa1f71815d3 100644 --- a/libraries/abstractions/common_io/test/test_iot_watchdog.c +++ b/libraries/abstractions/common_io/test/test_iot_watchdog.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Common IO V0.1.2 + * FreeRTOS Common IO V0.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/pkcs11/CMakeLists.txt b/libraries/abstractions/pkcs11/CMakeLists.txt index 4561af9ee13..d56a3b665d9 100644 --- a/libraries/abstractions/pkcs11/CMakeLists.txt +++ b/libraries/abstractions/pkcs11/CMakeLists.txt @@ -161,7 +161,7 @@ else() pkcs11_mbedtls INTERFACE "${src_dir}/core_pkcs11_mbedtls.c" - "${src_dir}/include/threading_alt.h" + "${AFR_ROOT_DIR}/libraries/3rdparty/mbedtls_config/threading_alt.h" "${inc_dir}/core_pkcs11_pal.h" ) diff --git a/libraries/abstractions/pkcs11/corePKCS11 b/libraries/abstractions/pkcs11/corePKCS11 index 40bef76639f..cc4129e5c44 160000 --- a/libraries/abstractions/pkcs11/corePKCS11 +++ b/libraries/abstractions/pkcs11/corePKCS11 @@ -1 +1 @@ -Subproject commit 40bef76639fc5e85a7ec188a31a45cf72d5fb6a0 +Subproject commit cc4129e5c44430e94dec5b82bacc4ce1491c61ac diff --git a/libraries/abstractions/pkcs11/ecc608a/atca_cert_chain.c b/libraries/abstractions/pkcs11/ecc608a/atca_cert_chain.c index eda1065b6b0..5a1d3ac4949 100644 --- a/libraries/abstractions/pkcs11/ecc608a/atca_cert_chain.c +++ b/libraries/abstractions/pkcs11/ecc608a/atca_cert_chain.c @@ -1,5 +1,5 @@ /* - * FreeRTOS PKCS #11 V2.1.1 + * FreeRTOS PKCS #11 V2.2.0 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/pkcs11/ecc608a/atca_cert_chain.h b/libraries/abstractions/pkcs11/ecc608a/atca_cert_chain.h index ba38ded288f..8f0728f3327 100644 --- a/libraries/abstractions/pkcs11/ecc608a/atca_cert_chain.h +++ b/libraries/abstractions/pkcs11/ecc608a/atca_cert_chain.h @@ -1,5 +1,5 @@ /* - * FreeRTOS PKCS #11 V2.1.1 + * FreeRTOS PKCS #11 V2.2.0 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/pkcs11/ecc608a/core_pkcs11_secure_element.c b/libraries/abstractions/pkcs11/ecc608a/core_pkcs11_secure_element.c index 64833189719..9103381ac86 100644 --- a/libraries/abstractions/pkcs11/ecc608a/core_pkcs11_secure_element.c +++ b/libraries/abstractions/pkcs11/ecc608a/core_pkcs11_secure_element.c @@ -1,5 +1,5 @@ /* - * FreeRTOS PKCS #11 V2.1.1 + * FreeRTOS PKCS #11 V2.2.0 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/pkcs11/test/MBT_C_CloseSession.c b/libraries/abstractions/pkcs11/test/MBT_C_CloseSession.c index be9eae487f3..dfbdee9127d 100644 --- a/libraries/abstractions/pkcs11/test/MBT_C_CloseSession.c +++ b/libraries/abstractions/pkcs11/test/MBT_C_CloseSession.c @@ -1,5 +1,5 @@ /* - * FreeRTOS PKCS #11 V2.1.1 + * FreeRTOS PKCS #11 V2.2.0 * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/pkcs11/test/MBT_C_DigestFinal.c b/libraries/abstractions/pkcs11/test/MBT_C_DigestFinal.c index d0dee1a0aa6..7bee9fc7723 100644 --- a/libraries/abstractions/pkcs11/test/MBT_C_DigestFinal.c +++ b/libraries/abstractions/pkcs11/test/MBT_C_DigestFinal.c @@ -1,5 +1,5 @@ /* - * FreeRTOS PKCS #11 V2.1.1 + * FreeRTOS PKCS #11 V2.2.0 * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/pkcs11/test/MBT_C_DigestInit.c b/libraries/abstractions/pkcs11/test/MBT_C_DigestInit.c index 2753b2f85e3..65d251a65a3 100644 --- a/libraries/abstractions/pkcs11/test/MBT_C_DigestInit.c +++ b/libraries/abstractions/pkcs11/test/MBT_C_DigestInit.c @@ -1,5 +1,5 @@ /* - * FreeRTOS PKCS #11 V2.1.1 + * FreeRTOS PKCS #11 V2.2.0 * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/pkcs11/test/MBT_C_DigestUpdate.c b/libraries/abstractions/pkcs11/test/MBT_C_DigestUpdate.c index 8352de3c9c3..16917eda1b3 100644 --- a/libraries/abstractions/pkcs11/test/MBT_C_DigestUpdate.c +++ b/libraries/abstractions/pkcs11/test/MBT_C_DigestUpdate.c @@ -1,5 +1,5 @@ /* - * FreeRTOS PKCS #11 V2.1.1 + * FreeRTOS PKCS #11 V2.2.0 * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/pkcs11/test/MBT_C_Finalize.c b/libraries/abstractions/pkcs11/test/MBT_C_Finalize.c index f926f7038f9..e39db2f9a15 100644 --- a/libraries/abstractions/pkcs11/test/MBT_C_Finalize.c +++ b/libraries/abstractions/pkcs11/test/MBT_C_Finalize.c @@ -1,5 +1,5 @@ /* - * FreeRTOS PKCS #11 V2.1.1 + * FreeRTOS PKCS #11 V2.2.0 * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/pkcs11/test/MBT_C_FindObjects.c b/libraries/abstractions/pkcs11/test/MBT_C_FindObjects.c index 836d3eb2f61..89299680892 100644 --- a/libraries/abstractions/pkcs11/test/MBT_C_FindObjects.c +++ b/libraries/abstractions/pkcs11/test/MBT_C_FindObjects.c @@ -1,5 +1,5 @@ /* - * FreeRTOS PKCS #11 V2.1.1 + * FreeRTOS PKCS #11 V2.2.0 * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/pkcs11/test/MBT_C_FindObjectsFinal.c b/libraries/abstractions/pkcs11/test/MBT_C_FindObjectsFinal.c index 8e5c746dd06..e541e678ddf 100644 --- a/libraries/abstractions/pkcs11/test/MBT_C_FindObjectsFinal.c +++ b/libraries/abstractions/pkcs11/test/MBT_C_FindObjectsFinal.c @@ -1,5 +1,5 @@ /* - * FreeRTOS PKCS #11 V2.1.1 + * FreeRTOS PKCS #11 V2.2.0 * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/pkcs11/test/MBT_C_FindObjectsInit.c b/libraries/abstractions/pkcs11/test/MBT_C_FindObjectsInit.c index b8a9ce62c36..33037579734 100644 --- a/libraries/abstractions/pkcs11/test/MBT_C_FindObjectsInit.c +++ b/libraries/abstractions/pkcs11/test/MBT_C_FindObjectsInit.c @@ -1,5 +1,5 @@ /* - * FreeRTOS PKCS #11 V2.1.1 + * FreeRTOS PKCS #11 V2.2.0 * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/pkcs11/test/MBT_C_GenerateKeyPair.c b/libraries/abstractions/pkcs11/test/MBT_C_GenerateKeyPair.c index 525fa4697cb..034d734a874 100644 --- a/libraries/abstractions/pkcs11/test/MBT_C_GenerateKeyPair.c +++ b/libraries/abstractions/pkcs11/test/MBT_C_GenerateKeyPair.c @@ -1,5 +1,5 @@ /* - * FreeRTOS PKCS #11 V2.1.1 + * FreeRTOS PKCS #11 V2.2.0 * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/pkcs11/test/MBT_C_GenerateRandom.c b/libraries/abstractions/pkcs11/test/MBT_C_GenerateRandom.c index c261c79a52f..bd16924ee91 100644 --- a/libraries/abstractions/pkcs11/test/MBT_C_GenerateRandom.c +++ b/libraries/abstractions/pkcs11/test/MBT_C_GenerateRandom.c @@ -1,5 +1,5 @@ /* - * FreeRTOS PKCS #11 V2.1.1 + * FreeRTOS PKCS #11 V2.2.0 * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/pkcs11/test/MBT_C_GetAttributeValue.c b/libraries/abstractions/pkcs11/test/MBT_C_GetAttributeValue.c index 976ab33fc8a..93884dbc2f3 100644 --- a/libraries/abstractions/pkcs11/test/MBT_C_GetAttributeValue.c +++ b/libraries/abstractions/pkcs11/test/MBT_C_GetAttributeValue.c @@ -1,5 +1,5 @@ /* - * FreeRTOS PKCS #11 V2.1.1 + * FreeRTOS PKCS #11 V2.2.0 * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/pkcs11/test/MBT_C_Initialize.c b/libraries/abstractions/pkcs11/test/MBT_C_Initialize.c index 469bd2dc9a1..7a5f645e733 100644 --- a/libraries/abstractions/pkcs11/test/MBT_C_Initialize.c +++ b/libraries/abstractions/pkcs11/test/MBT_C_Initialize.c @@ -1,5 +1,5 @@ /* - * FreeRTOS PKCS #11 V2.1.1 + * FreeRTOS PKCS #11 V2.2.0 * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/pkcs11/test/MBT_C_OpenSession.c b/libraries/abstractions/pkcs11/test/MBT_C_OpenSession.c index c409da365e7..fdc18ddb729 100644 --- a/libraries/abstractions/pkcs11/test/MBT_C_OpenSession.c +++ b/libraries/abstractions/pkcs11/test/MBT_C_OpenSession.c @@ -1,5 +1,5 @@ /* - * FreeRTOS PKCS #11 V2.1.1 + * FreeRTOS PKCS #11 V2.2.0 * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/pkcs11/test/MBT_C_Sign.c b/libraries/abstractions/pkcs11/test/MBT_C_Sign.c index d9fcc65d00a..c822dbe9ddc 100644 --- a/libraries/abstractions/pkcs11/test/MBT_C_Sign.c +++ b/libraries/abstractions/pkcs11/test/MBT_C_Sign.c @@ -1,5 +1,5 @@ /* - * FreeRTOS PKCS #11 V2.1.1 + * FreeRTOS PKCS #11 V2.2.0 * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/pkcs11/test/MBT_C_SignInit.c b/libraries/abstractions/pkcs11/test/MBT_C_SignInit.c index 1145f298e30..f429d42364a 100644 --- a/libraries/abstractions/pkcs11/test/MBT_C_SignInit.c +++ b/libraries/abstractions/pkcs11/test/MBT_C_SignInit.c @@ -1,5 +1,5 @@ /* - * FreeRTOS PKCS #11 V2.1.1 + * FreeRTOS PKCS #11 V2.2.0 * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -54,7 +54,7 @@ void generateRSAKeyPair( CK_OBJECT_HANDLE_PTR phPrivateKey, { CK_OBJECT_HANDLE hCertificate; - prvProvisionRsaTestCredentials( phPrivateKey, &hCertificate ); + prvProvisionRsaTestCredentials( phPrivateKey, phPublicKey, &hCertificate ); } void generateECDSAKeyPair( CK_OBJECT_HANDLE_PTR phPrivateKey, diff --git a/libraries/abstractions/pkcs11/test/MBT_C_Verify.c b/libraries/abstractions/pkcs11/test/MBT_C_Verify.c index 1469019f750..6ed20fd9c3c 100644 --- a/libraries/abstractions/pkcs11/test/MBT_C_Verify.c +++ b/libraries/abstractions/pkcs11/test/MBT_C_Verify.c @@ -1,5 +1,5 @@ /* - * FreeRTOS PKCS #11 V2.1.1 + * FreeRTOS PKCS #11 V2.2.0 * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/pkcs11/test/MBT_C_VerifyInit.c b/libraries/abstractions/pkcs11/test/MBT_C_VerifyInit.c index 196e885b4a3..0c271d60c10 100644 --- a/libraries/abstractions/pkcs11/test/MBT_C_VerifyInit.c +++ b/libraries/abstractions/pkcs11/test/MBT_C_VerifyInit.c @@ -1,5 +1,5 @@ /* - * FreeRTOS PKCS #11 V2.1.1 + * FreeRTOS PKCS #11 V2.2.0 * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/pkcs11/test/MBT_DigestMachine.c b/libraries/abstractions/pkcs11/test/MBT_DigestMachine.c index 7aec65402e0..e4040221731 100644 --- a/libraries/abstractions/pkcs11/test/MBT_DigestMachine.c +++ b/libraries/abstractions/pkcs11/test/MBT_DigestMachine.c @@ -1,5 +1,5 @@ /* - * FreeRTOS PKCS #11 V2.1.1 + * FreeRTOS PKCS #11 V2.2.0 * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/pkcs11/test/MBT_GenerationMachine.c b/libraries/abstractions/pkcs11/test/MBT_GenerationMachine.c index d778ebf071c..3e6412ef2fc 100644 --- a/libraries/abstractions/pkcs11/test/MBT_GenerationMachine.c +++ b/libraries/abstractions/pkcs11/test/MBT_GenerationMachine.c @@ -1,5 +1,5 @@ /* - * FreeRTOS PKCS #11 V2.1.1 + * FreeRTOS PKCS #11 V2.2.0 * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/pkcs11/test/MBT_ObjectMachine.c b/libraries/abstractions/pkcs11/test/MBT_ObjectMachine.c index 7ad6f1cb39c..71a2a41a04a 100644 --- a/libraries/abstractions/pkcs11/test/MBT_ObjectMachine.c +++ b/libraries/abstractions/pkcs11/test/MBT_ObjectMachine.c @@ -1,5 +1,5 @@ /* - * FreeRTOS PKCS #11 V2.1.1 + * FreeRTOS PKCS #11 V2.2.0 * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/pkcs11/test/MBT_SessionMachine.c b/libraries/abstractions/pkcs11/test/MBT_SessionMachine.c index c757de061c2..b1a63280c86 100644 --- a/libraries/abstractions/pkcs11/test/MBT_SessionMachine.c +++ b/libraries/abstractions/pkcs11/test/MBT_SessionMachine.c @@ -1,5 +1,5 @@ /* - * FreeRTOS PKCS #11 V2.1.1 + * FreeRTOS PKCS #11 V2.2.0 * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/pkcs11/test/MBT_SignMachine.c b/libraries/abstractions/pkcs11/test/MBT_SignMachine.c index 156463bbef9..c3c02eed2ba 100644 --- a/libraries/abstractions/pkcs11/test/MBT_SignMachine.c +++ b/libraries/abstractions/pkcs11/test/MBT_SignMachine.c @@ -1,5 +1,5 @@ /* - * FreeRTOS PKCS #11 V2.1.1 + * FreeRTOS PKCS #11 V2.2.0 * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/pkcs11/test/MBT_VerifyMachine.c b/libraries/abstractions/pkcs11/test/MBT_VerifyMachine.c index 5f9d58ea008..42ef3ef0189 100644 --- a/libraries/abstractions/pkcs11/test/MBT_VerifyMachine.c +++ b/libraries/abstractions/pkcs11/test/MBT_VerifyMachine.c @@ -1,5 +1,5 @@ /* - * FreeRTOS PKCS #11 V2.1.1 + * FreeRTOS PKCS #11 V2.2.0 * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/pkcs11/test/iot_test_pkcs11.c b/libraries/abstractions/pkcs11/test/iot_test_pkcs11.c index bc09d998873..c371abadb89 100644 --- a/libraries/abstractions/pkcs11/test/iot_test_pkcs11.c +++ b/libraries/abstractions/pkcs11/test/iot_test_pkcs11.c @@ -1,5 +1,5 @@ /* - * FreeRTOS PKCS #11 V2.1.1 + * FreeRTOS PKCS #11 V2.2.0 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -463,6 +463,7 @@ static CK_RV prvDestroyTestCredentials( void ) { xResult = xFindObjectWithLabelAndClass( xGlobalSession, ( char * ) pxPkcsLabels[ ulLabelCount ], + strlen( ( char * ) pxPkcsLabels[ ulLabelCount ] ), xClass[ ulLabelCount ], &xObject ); TEST_ASSERT_EQUAL_MESSAGE( CKR_OK, xResult, "Found an object after deleting it.\r\n" ); @@ -595,6 +596,7 @@ static void prvFindObjectTest( CK_OBJECT_HANDLE_PTR pxPrivateKeyHandle, /* Happy Path - Find a previously created object. */ xResult = xFindObjectWithLabelAndClass( xGlobalSession, pkcs11testLABEL_DEVICE_PRIVATE_KEY_FOR_TLS, + sizeof( pkcs11testLABEL_DEVICE_PRIVATE_KEY_FOR_TLS ) - 1, CKO_PRIVATE_KEY, pxPrivateKeyHandle ); TEST_ASSERT_EQUAL_MESSAGE( CKR_OK, xResult, "Failed to find private key after closing and reopening a session." ); @@ -603,6 +605,7 @@ static void prvFindObjectTest( CK_OBJECT_HANDLE_PTR pxPrivateKeyHandle, /* TODO: Add the code sign key and root ca. */ xResult = xFindObjectWithLabelAndClass( xGlobalSession, pkcs11testLABEL_DEVICE_PUBLIC_KEY_FOR_TLS, + sizeof( pkcs11testLABEL_DEVICE_PUBLIC_KEY_FOR_TLS ) - 1, CKO_PUBLIC_KEY, pxPublicKeyHandle ); TEST_ASSERT_EQUAL_MESSAGE( CKR_OK, xResult, "Failed to find public key after closing and reopening a session." ); @@ -611,6 +614,7 @@ static void prvFindObjectTest( CK_OBJECT_HANDLE_PTR pxPrivateKeyHandle, xResult = xFindObjectWithLabelAndClass( xGlobalSession, pkcs11testLABEL_DEVICE_CERTIFICATE_FOR_TLS, + sizeof( pkcs11testLABEL_DEVICE_CERTIFICATE_FOR_TLS ) - 1, CKO_CERTIFICATE, pxCertificateHandle ); @@ -620,6 +624,7 @@ static void prvFindObjectTest( CK_OBJECT_HANDLE_PTR pxPrivateKeyHandle, /* Try to find an object that has never been created. */ xResult = xFindObjectWithLabelAndClass( xGlobalSession, ( char * ) "This label doesn't exist", + sizeof( "This label doesn't exist" ) - 1, CKO_PUBLIC_KEY, &xTestObjectHandle ); TEST_ASSERT_EQUAL_MESSAGE( CKR_OK, xResult, "Incorrect error code finding object that doesn't exist" ); @@ -1150,7 +1155,6 @@ TEST( Full_PKCS11_NoObject, AFQP_GenerateRandomMultiThread ) } -/* Valid RSA private key. */ static const char cValidRSAPrivateKey[] = "-----BEGIN RSA PRIVATE KEY-----\n" "MIIEpAIBAAKCAQEAsIqRecRxLz3PZXzZOHF7jMlB25tfv2LDGR7nGTJiey5zxd7o\n" @@ -1180,7 +1184,17 @@ static const char cValidRSAPrivateKey[] = "ERIYrvveGGtQ3vSknLWUJ/0BgmuYj5U6aJBZPv8COM2eKIbTQbtQaQ==\n" "-----END RSA PRIVATE KEY-----\n"; -/* Valid RSA certificate. */ +static const char cValidRSAPublicKey[] = + "-----BEGIN RSA PUBLIC KEY-----\n" + "MIIBCgKCAQEAsIqRecRxLz3PZXzZOHF7jMlB25tfv2LDGR7nGTJiey5zxd7oswih\n" + "e7+26yx8medpNvX1ym9jphty+9IR053k1WGnQQ4aaDeJonqn7V50Vesw6zFx/x8L\n" + "MdXFoBAkRXIL8WS5YKafC87KPnye8A0piVWUFy7+IEEaK3hQEJTzB6LC/N100XL5\n" + "ykLCa4xJBOqlIvbDvJ+bKty1EBA3sStlTNuXi3nBWZbXwCB2A+ddjijFf5+gUjin\n" + "r7h6e2uQeipWyiIw9NKWbvq8AG1Mj4XBoFL9wP2YTf2SQAgAzx0ySPNrIYOzBNl1\n" + "YZ4lIW5sJLATES9+Z8nHi7yRDLw6x/kcVQIDAQAB\n" + "-----END RSA PUBLIC KEY-----\n"; + + static const char cValidRSACertificate[] = "-----BEGIN CERTIFICATE-----\n" "MIIDsTCCApmgAwIBAgIJALg4YJlPspxyMA0GCSqGSIb3DQEBCwUAMG8xCzAJBgNV\n" @@ -1211,6 +1225,7 @@ void resetCredentials() } void prvProvisionRsaTestCredentials( CK_OBJECT_HANDLE_PTR pxPrivateKeyHandle, + CK_OBJECT_HANDLE_PTR pxPublicKeyHandle, CK_OBJECT_HANDLE_PTR pxCertificateHandle ) { CK_RV xResult; @@ -1221,6 +1236,17 @@ void prvProvisionRsaTestCredentials( CK_OBJECT_HANDLE_PTR pxPrivateKeyHandle, TEST_ASSERT_EQUAL_MESSAGE( CKR_OK, xResult, "Failed to destroy credentials in test setup." ); xCurrentCredentials = eNone; + /* Create a public key. */ + xResult = xProvisionPublicKey( xGlobalSession, + ( uint8_t * ) cValidRSAPublicKey, + sizeof( cValidRSAPublicKey ), + CKK_RSA, + ( uint8_t * ) pkcs11testLABEL_DEVICE_PUBLIC_KEY_FOR_TLS, + pxPublicKeyHandle ); + + TEST_ASSERT_EQUAL_MESSAGE( CKR_OK, xResult, "Failed to create RSA public key." ); + TEST_ASSERT_NOT_EQUAL_MESSAGE( CK_INVALID_HANDLE, *pxPublicKeyHandle, "Invalid object handle returned for RSA public key." ); + /* Create a private key. */ xResult = xProvisionPrivateKey( xGlobalSession, ( uint8_t * ) cValidRSAPrivateKey, @@ -1244,11 +1270,19 @@ void prvProvisionRsaTestCredentials( CK_OBJECT_HANDLE_PTR pxPrivateKeyHandle, } else { - xResult = xFindObjectWithLabelAndClass( xGlobalSession, pkcs11testLABEL_DEVICE_PRIVATE_KEY_FOR_TLS, CKO_PRIVATE_KEY, pxPrivateKeyHandle ); + xResult = xFindObjectWithLabelAndClass( xGlobalSession, + pkcs11testLABEL_DEVICE_PRIVATE_KEY_FOR_TLS, + sizeof( pkcs11testLABEL_DEVICE_PRIVATE_KEY_FOR_TLS ) - 1, + CKO_PRIVATE_KEY, + pxPrivateKeyHandle ); TEST_ASSERT_EQUAL_MESSAGE( CKR_OK, xResult, "Failed to find RSA private key." ); TEST_ASSERT_NOT_EQUAL_MESSAGE( CK_INVALID_HANDLE, *pxPrivateKeyHandle, "Invalid object handle found for RSA private key." ); - xResult = xFindObjectWithLabelAndClass( xGlobalSession, pkcs11testLABEL_DEVICE_CERTIFICATE_FOR_TLS, CKO_CERTIFICATE, pxCertificateHandle ); + xResult = xFindObjectWithLabelAndClass( xGlobalSession, + pkcs11testLABEL_DEVICE_CERTIFICATE_FOR_TLS, + sizeof( pkcs11testLABEL_DEVICE_CERTIFICATE_FOR_TLS ) - 1, + CKO_CERTIFICATE, + pxCertificateHandle ); TEST_ASSERT_EQUAL_MESSAGE( CKR_OK, xResult, "Failed to find RSA certificate." ); TEST_ASSERT_NOT_EQUAL_MESSAGE( CK_INVALID_HANDLE, *pxCertificateHandle, "Invalid object handle found for RSA certificate." ); } @@ -1258,6 +1292,7 @@ TEST( Full_PKCS11_RSA, AFQP_CreateObject ) { CK_RV xResult; CK_OBJECT_HANDLE xPrivateKeyHandle = CK_INVALID_HANDLE; + CK_OBJECT_HANDLE xPublicKeyHandle = CK_INVALID_HANDLE; CK_OBJECT_HANDLE xCertificateHandle = CK_INVALID_HANDLE; if( xCurrentCredentials != eNone ) @@ -1267,7 +1302,7 @@ TEST( Full_PKCS11_RSA, AFQP_CreateObject ) xCurrentCredentials = eNone; } - prvProvisionRsaTestCredentials( &xPrivateKeyHandle, &xCertificateHandle ); + prvProvisionRsaTestCredentials( &xPrivateKeyHandle, &xPublicKeyHandle, &xCertificateHandle ); } TEST( Full_PKCS11_RSA, AFQP_FindObject ) @@ -1297,11 +1332,19 @@ TEST( Full_PKCS11_RSA, AFQP_GetAttributeValue ) CK_BYTE xCertificateValue[ CERTIFICATE_VALUE_LENGTH ]; CK_BYTE xKeyComponent[ ( pkcs11RSA_2048_MODULUS_BITS / 8 ) + 1 ] = { 0 }; - xResult = xFindObjectWithLabelAndClass( xGlobalSession, pkcs11testLABEL_DEVICE_PRIVATE_KEY_FOR_TLS, CKO_PRIVATE_KEY, &xPrivateKeyHandle ); + xResult = xFindObjectWithLabelAndClass( xGlobalSession, + pkcs11testLABEL_DEVICE_PRIVATE_KEY_FOR_TLS, + sizeof( pkcs11testLABEL_DEVICE_PRIVATE_KEY_FOR_TLS ) - 1, + CKO_PRIVATE_KEY, + &xPrivateKeyHandle ); TEST_ASSERT_EQUAL_MESSAGE( CKR_OK, xResult, "Failed to find RSA private key." ); TEST_ASSERT_NOT_EQUAL_MESSAGE( CK_INVALID_HANDLE, xPrivateKeyHandle, "Invalid object handle found for RSA private key." ); - xResult = xFindObjectWithLabelAndClass( xGlobalSession, pkcs11testLABEL_DEVICE_CERTIFICATE_FOR_TLS, CKO_CERTIFICATE, &xCertificateHandle ); + xResult = xFindObjectWithLabelAndClass( xGlobalSession, + pkcs11testLABEL_DEVICE_CERTIFICATE_FOR_TLS, + sizeof( pkcs11testLABEL_DEVICE_CERTIFICATE_FOR_TLS ) - 1, + CKO_CERTIFICATE, + &xCertificateHandle ); TEST_ASSERT_EQUAL_MESSAGE( CKR_OK, xResult, "Failed to find RSA certificate." ); TEST_ASSERT_NOT_EQUAL_MESSAGE( CK_INVALID_HANDLE, xCertificateHandle, "Invalid object handle found for RSA certificate." ); @@ -1333,6 +1376,7 @@ TEST( Full_PKCS11_RSA, AFQP_Sign ) { CK_RV xResult; CK_OBJECT_HANDLE xPrivateKeyHandle; + CK_OBJECT_HANDLE xPublicKeyHandle; CK_OBJECT_HANDLE xCertificateHandle; CK_MECHANISM xMechanism; CK_BYTE xHashedMessage[ pkcs11SHA256_DIGEST_LENGTH ] = { 0 }; @@ -1340,7 +1384,7 @@ TEST( Full_PKCS11_RSA, AFQP_Sign ) CK_ULONG xSignatureLength; CK_BYTE xHashPlusOid[ pkcs11RSA_SIGNATURE_INPUT_LENGTH ]; - prvProvisionRsaTestCredentials( &xPrivateKeyHandle, &xCertificateHandle ); + prvProvisionRsaTestCredentials( &xPrivateKeyHandle, &xPublicKeyHandle, &xCertificateHandle ); xResult = vAppendSHA256AlgorithmIdentifierSequence( xHashedMessage, xHashPlusOid ); TEST_ASSERT_EQUAL_MESSAGE( CKR_OK, xResult, "Failed to append hash algorithm to RSA signature material." ); @@ -1558,15 +1602,27 @@ void prvProvisionCredentialsWithKeyImport( CK_OBJECT_HANDLE_PTR pxPrivateKeyHand } else { - xResult = xFindObjectWithLabelAndClass( xGlobalSession, pkcs11testLABEL_DEVICE_PRIVATE_KEY_FOR_TLS, CKO_PRIVATE_KEY, pxPrivateKeyHandle ); + xResult = xFindObjectWithLabelAndClass( xGlobalSession, + pkcs11testLABEL_DEVICE_PRIVATE_KEY_FOR_TLS, + sizeof( pkcs11testLABEL_DEVICE_PRIVATE_KEY_FOR_TLS ) - 1, + CKO_PRIVATE_KEY, + pxPrivateKeyHandle ); TEST_ASSERT_EQUAL_MESSAGE( CKR_OK, xResult, "Failed to find EC private key." ); TEST_ASSERT_NOT_EQUAL_MESSAGE( CK_INVALID_HANDLE, *pxPrivateKeyHandle, "Invalid object handle found for EC private key." ); - xResult = xFindObjectWithLabelAndClass( xGlobalSession, pkcs11testLABEL_DEVICE_CERTIFICATE_FOR_TLS, CKO_CERTIFICATE, pxCertificateHandle ); + xResult = xFindObjectWithLabelAndClass( xGlobalSession, + pkcs11testLABEL_DEVICE_CERTIFICATE_FOR_TLS, + sizeof( pkcs11testLABEL_DEVICE_CERTIFICATE_FOR_TLS ) - 1, + CKO_CERTIFICATE, + pxCertificateHandle ); TEST_ASSERT_EQUAL_MESSAGE( CKR_OK, xResult, "Failed to find EC certificate." ); TEST_ASSERT_NOT_EQUAL_MESSAGE( CK_INVALID_HANDLE, *pxCertificateHandle, "Invalid object handle found for EC certificate." ); - xResult = xFindObjectWithLabelAndClass( xGlobalSession, pkcs11testLABEL_DEVICE_PUBLIC_KEY_FOR_TLS, CKO_PUBLIC_KEY, pxPublicKeyHandle ); + xResult = xFindObjectWithLabelAndClass( xGlobalSession, + pkcs11testLABEL_DEVICE_PUBLIC_KEY_FOR_TLS, + sizeof( pkcs11testLABEL_DEVICE_PUBLIC_KEY_FOR_TLS ) - 1, + CKO_PUBLIC_KEY, + pxPublicKeyHandle ); TEST_ASSERT_EQUAL_MESSAGE( CKR_OK, xResult, "Failed to find EC public key." ); TEST_ASSERT_NOT_EQUAL_MESSAGE( CK_INVALID_HANDLE, *pxPublicKeyHandle, "Invalid object handle found for EC public key." ); } @@ -1582,9 +1638,17 @@ void prvProvisionCredentialsWithGenerateKeyPair( CK_OBJECT_HANDLE_PTR pxPrivateK CK_BBOOL xProvisionKeyNeeded = CK_FALSE; /* Check if there is an EC private key in there already. */ - xResult = xFindObjectWithLabelAndClass( xGlobalSession, pkcs11testLABEL_DEVICE_PRIVATE_KEY_FOR_TLS, CKO_PRIVATE_KEY, pxPrivateKeyHandle ); + xResult = xFindObjectWithLabelAndClass( xGlobalSession, + pkcs11testLABEL_DEVICE_PRIVATE_KEY_FOR_TLS, + sizeof( pkcs11testLABEL_DEVICE_PRIVATE_KEY_FOR_TLS ) - 1, + CKO_PRIVATE_KEY, + pxPrivateKeyHandle ); TEST_ASSERT_EQUAL_MESSAGE( CKR_OK, xResult, "Failed to find private key." ); - xResult = xFindObjectWithLabelAndClass( xGlobalSession, pkcs11testLABEL_DEVICE_PUBLIC_KEY_FOR_TLS, CKO_PUBLIC_KEY, pxPublicKeyHandle ); + xResult = xFindObjectWithLabelAndClass( xGlobalSession, + pkcs11testLABEL_DEVICE_PUBLIC_KEY_FOR_TLS, + sizeof( pkcs11testLABEL_DEVICE_PUBLIC_KEY_FOR_TLS ) - 1, + CKO_PUBLIC_KEY, + pxPublicKeyHandle ); TEST_ASSERT_EQUAL_MESSAGE( CKR_OK, xResult, "Failed to find public key." ); if( *pxPrivateKeyHandle != CK_INVALID_HANDLE ) @@ -1614,7 +1678,11 @@ void prvProvisionCredentialsWithGenerateKeyPair( CK_OBJECT_HANDLE_PTR pxPrivateK TEST_ASSERT_NOT_EQUAL_MESSAGE( CK_INVALID_HANDLE, *pxPublicKeyHandle, "Invalid object handle returned for EC public key." ); } - xResult = xFindObjectWithLabelAndClass( xGlobalSession, pkcs11testLABEL_DEVICE_CERTIFICATE_FOR_TLS, CKO_CERTIFICATE, pxCertificateHandle ); + xResult = xFindObjectWithLabelAndClass( xGlobalSession, + pkcs11testLABEL_DEVICE_CERTIFICATE_FOR_TLS, + sizeof( pkcs11testLABEL_DEVICE_CERTIFICATE_FOR_TLS ) - 1, + CKO_CERTIFICATE, + pxCertificateHandle ); /* NOTE: This certificate is for object storage and retrieval purposes only, and does not correspond to the key pair generated. */ if( *pxCertificateHandle == CK_INVALID_HANDLE ) @@ -1817,12 +1885,14 @@ TEST( Full_PKCS11_EC, AFQP_Sign ) */ TEST( Full_PKCS11_EC, AFQP_GenerateKeyPair ) { + /* See core_pkcs11_mbedtls.c for length explanation. */ +#define pkcs11EC_POINT_LENGTH ( ( 32UL * 2UL ) + 1UL + 1UL + 1UL ) CK_RV xResult; CK_OBJECT_HANDLE xPrivateKeyHandle = CK_INVALID_HANDLE; CK_OBJECT_HANDLE xPublicKeyHandle = CK_INVALID_HANDLE; CK_OBJECT_HANDLE xCertificateHandle = CK_INVALID_HANDLE; - CK_BYTE xEcPoint[ 256 ] = { 0 }; + CK_BYTE xEcPoint[ pkcs11EC_POINT_LENGTH ] = { 0 }; CK_BYTE xPrivateKeyBuffer[ 32 ] = { 0 }; CK_KEY_TYPE xKeyType; CK_ATTRIBUTE xTemplate; @@ -2187,7 +2257,11 @@ static void prvFindObjectMultiThreadTask( void * pvParameters ) for( xCount = 0; xCount < pkcs11testMULTI_THREAD_LOOP_COUNT; xCount++ ) { - xResult = xFindObjectWithLabelAndClass( xSession, pkcs11testLABEL_DEVICE_PRIVATE_KEY_FOR_TLS, CKO_PRIVATE_KEY, &xHandle ); + xResult = xFindObjectWithLabelAndClass( xSession, + pkcs11testLABEL_DEVICE_PRIVATE_KEY_FOR_TLS, + sizeof( pkcs11testLABEL_DEVICE_PRIVATE_KEY_FOR_TLS ) - 1, + CKO_PRIVATE_KEY, + &xHandle ); if( xResult != CKR_OK ) { @@ -2202,7 +2276,11 @@ static void prvFindObjectMultiThreadTask( void * pvParameters ) break; } - xResult = xFindObjectWithLabelAndClass( xSession, pkcs11testLABEL_DEVICE_CERTIFICATE_FOR_TLS, CKO_CERTIFICATE, &xHandle ); + xResult = xFindObjectWithLabelAndClass( xSession, + pkcs11testLABEL_DEVICE_CERTIFICATE_FOR_TLS, + sizeof( pkcs11testLABEL_DEVICE_CERTIFICATE_FOR_TLS ) - 1, + CKO_CERTIFICATE, + &xHandle ); if( xResult != CKR_OK ) { @@ -2234,6 +2312,7 @@ TEST( Full_PKCS11_RSA, AFQP_FindObjectMultiThread ) BaseType_t xTaskNumber; CK_SESSION_HANDLE xSessionHandle[ pkcs11testMULTI_THREAD_TASK_COUNT ]; CK_OBJECT_HANDLE xPrivateKey; + CK_OBJECT_HANDLE xPublicKey; CK_OBJECT_HANDLE xCertificate; for( xTaskNumber = 0; xTaskNumber < pkcs11testMULTI_THREAD_TASK_COUNT; xTaskNumber++ ) @@ -2248,7 +2327,7 @@ TEST( Full_PKCS11_RSA, AFQP_FindObjectMultiThread ) xGlobalTaskParams[ xTaskNumber ].pvTaskData = &xSessionHandle[ xTaskNumber ]; } - prvProvisionRsaTestCredentials( &xPrivateKey, &xCertificate ); + prvProvisionRsaTestCredentials( &xPrivateKey, &xPublicKey, &xCertificate ); prvMultiThreadHelper( ( void * ) prvFindObjectMultiThreadTask ); @@ -2309,7 +2388,11 @@ static void prvECGetAttributeValueMultiThreadTask( void * pvParameters ) memcpy( &xSession, pxMultiTaskParam->pvTaskData, sizeof( CK_SESSION_HANDLE ) ); - xResult = xFindObjectWithLabelAndClass( xSession, pkcs11testLABEL_DEVICE_PRIVATE_KEY_FOR_TLS, CKO_PRIVATE_KEY, &xPrivateKey ); + xResult = xFindObjectWithLabelAndClass( xSession, + pkcs11testLABEL_DEVICE_PRIVATE_KEY_FOR_TLS, + sizeof( pkcs11testLABEL_DEVICE_PRIVATE_KEY_FOR_TLS ) - 1, + CKO_PRIVATE_KEY, + &xPrivateKey ); if( ( xResult != CKR_OK ) || ( xPrivateKey == CK_INVALID_HANDLE ) ) { @@ -2317,7 +2400,11 @@ static void prvECGetAttributeValueMultiThreadTask( void * pvParameters ) configPRINTF( ( "Failed to find private key. Return Value: %d Handle: %d \r\n", xResult, xPrivateKey ) ); } - xResult = xFindObjectWithLabelAndClass( xSession, pkcs11testLABEL_DEVICE_CERTIFICATE_FOR_TLS, CKO_CERTIFICATE, &xCertificate ); + xResult = xFindObjectWithLabelAndClass( xSession, + pkcs11testLABEL_DEVICE_CERTIFICATE_FOR_TLS, + sizeof( pkcs11testLABEL_DEVICE_CERTIFICATE_FOR_TLS ) - 1, + CKO_CERTIFICATE, + &xCertificate ); if( ( xResult != CKR_OK ) || ( xCertificate == CK_INVALID_HANDLE ) ) { diff --git a/libraries/abstractions/pkcs11/test/iot_test_pkcs11_globals.h b/libraries/abstractions/pkcs11/test/iot_test_pkcs11_globals.h index 5727d230251..8ac4a04ef75 100644 --- a/libraries/abstractions/pkcs11/test/iot_test_pkcs11_globals.h +++ b/libraries/abstractions/pkcs11/test/iot_test_pkcs11_globals.h @@ -1,5 +1,5 @@ /* - * FreeRTOS PKCS #11 V2.1.1 + * FreeRTOS PKCS #11 V2.2.0 * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -51,6 +51,7 @@ void prvProvisionCredentialsWithKeyImport( CK_OBJECT_HANDLE_PTR pxPrivateKeyHand CK_OBJECT_HANDLE_PTR pxPublicKeyHandle ); void prvProvisionRsaTestCredentials( CK_OBJECT_HANDLE_PTR pxPrivateKeyHandle, + CK_OBJECT_HANDLE_PTR pxPublicKeyHandle, CK_OBJECT_HANDLE_PTR pxCertificateHandle ); void resetCredentials(); diff --git a/libraries/abstractions/posix/include/FreeRTOS_POSIX/time.h b/libraries/abstractions/posix/include/FreeRTOS_POSIX/time.h index 0cc1d686498..3cd42370884 100644 --- a/libraries/abstractions/posix/include/FreeRTOS_POSIX/time.h +++ b/libraries/abstractions/posix/include/FreeRTOS_POSIX/time.h @@ -70,6 +70,26 @@ #define TIMER_ABSTIME 0x01 /**@} */ +#if !defined( posixconfigENABLE_TM ) || ( posixconfigENABLE_TM == 1 ) + +/** + * @ingroup posix_datatypes_paramstructs + * @brief represents calendar time + */ + struct tm + { + int tm_sec; /**< Second. */ + int tm_min; /**< Minute. */ + int tm_hour; /**< Hour. */ + int tm_mday; /**< Day of month. */ + int tm_mon; /**< Month of year. */ + int tm_year; /**< Years since 1900. */ + int tm_wday; /**< Day of week. */ + int tm_yday; /**< Day of year. */ + int tm_isdst; /**< Daylight Savings flag. */ + }; +#endif /* if !defined( posixconfigENABLE_TM ) || ( posixconfigENABLE_TM == 1 ) */ + #if !defined( posixconfigENABLE_TIMESPEC ) || ( posixconfigENABLE_TIMESPEC == 1 ) /** diff --git a/libraries/abstractions/retry_utils/CMakeLists.txt b/libraries/abstractions/retry_utils/CMakeLists.txt deleted file mode 100644 index be3b14e8d68..00000000000 --- a/libraries/abstractions/retry_utils/CMakeLists.txt +++ /dev/null @@ -1,20 +0,0 @@ -afr_module(NAME retry_utils INTERNAL) - -afr_module_sources( - ${AFR_CURRENT_MODULE} - PRIVATE - "${CMAKE_CURRENT_LIST_DIR}/freertos/retry_utils_freertos.c" - "${CMAKE_CURRENT_LIST_DIR}/retry_utils.h" -) - -afr_module_dependencies( - ${AFR_CURRENT_MODULE} - PRIVATE - AFR::kernel -) - -afr_module_include_dirs( - ${AFR_CURRENT_MODULE} - PUBLIC - ${CMAKE_CURRENT_LIST_DIR} -) diff --git a/libraries/abstractions/retry_utils/freertos/retry_utils_freertos.c b/libraries/abstractions/retry_utils/freertos/retry_utils_freertos.c deleted file mode 100644 index 8598ca0215c..00000000000 --- a/libraries/abstractions/retry_utils/freertos/retry_utils_freertos.c +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * @file retry_utils_freertos.c - * @brief Utility implementation of backoff logic, used for attempting retries of failed processes. - */ - -/* Standard includes. */ -#include -#include - -/* Kernel includes. */ -#include "FreeRTOS.h" -#include "task.h" - -/* Include header of retry library API. */ -#include "retry_utils.h" - -#define MILLISECONDS_PER_SECOND ( 1000U ) /**< @brief Milliseconds per second. */ - -/*-----------------------------------------------------------*/ - -/* @brief This is used by the pseudo random number generator. */ -static uint32_t ulNextRand; - -/** - * @brief A psuedo random generator function. - * - * @note This is not a secure method of generating a random number. - * Production devices should use a True Random Number Generator (TRNG). - * - * @return The generated random number. - */ -static uint32_t generateRandNum(); - -/** - * @brief Seeds the psuedo random number generator. - */ -static void initializeRand(); - -/*-----------------------------------------------------------*/ - -static uint32_t generateRandNum() -{ - const uint32_t ulMultiplier = 0x015a4e35UL, ulIncrement = 1UL; - - /* - * Utility function to generate a pseudo random number. - * - * !!!NOTE!!! - * This is not a secure method of generating a random number. Production - * devices should use a True Random Number Generator (TRNG). - */ - ulNextRand = ( ulMultiplier * ulNextRand ) + ulIncrement; - return( ( int ) ( ulNextRand >> 16UL ) & 0x7fffUL ); -} - -/*-----------------------------------------------------------*/ - -static void initializeRand() -{ - /* - * Seed random number generator. - * - * !!!NOTE!!! - * This is not a secure method of generating a random number. Production - * devices should use a True Random Number Generator (TRNG). - */ - ulNextRand = ( uint32_t ) xTaskGetTickCount(); -} - -/*-----------------------------------------------------------*/ - -RetryUtilsStatus_t RetryUtils_BackoffAndSleep( RetryUtilsParams_t * pRetryParams ) -{ - RetryUtilsStatus_t status = RetryUtilsRetriesExhausted; - int32_t backOffDelayMs = 0; - - /* If pRetryParams->maxRetryAttempts is set to 0, try forever. */ - if( ( pRetryParams->attemptsDone < pRetryParams->maxRetryAttempts ) || - ( 0 == pRetryParams->maxRetryAttempts ) ) - { - /* Choose a random value for back-off time between 0 and the max jitter value. */ - backOffDelayMs = ( generateRandNum() % pRetryParams->nextJitterMax ); - - /* Wait for backoff time to expire for the next retry. */ - vTaskDelay( pdMS_TO_TICKS( backOffDelayMs * MILLISECONDS_PER_SECOND ) ); - - /* Increment backoff counts. */ - pRetryParams->attemptsDone++; - - /* Double the max jitter value for the next retry attempt, only - * if the new value will be less than the max backoff time value. */ - if( pRetryParams->nextJitterMax < ( MAX_RETRY_BACKOFF_SECONDS / 2U ) ) - { - pRetryParams->nextJitterMax += pRetryParams->nextJitterMax; - } - else - { - pRetryParams->nextJitterMax = MAX_RETRY_BACKOFF_SECONDS; - } - - status = RetryUtilsSuccess; - } - else - { - /* When max retry attempts are exhausted, let application know by - * returning RetryUtilsRetriesExhausted. Application may choose to - * restart the retry process after calling RetryUtils_ParamsReset(). */ - status = RetryUtilsRetriesExhausted; - RetryUtils_ParamsReset( pRetryParams ); - } - - return status; -} - -/*-----------------------------------------------------------*/ - -void RetryUtils_ParamsReset( RetryUtilsParams_t * pRetryParams ) -{ - uint32_t jitter = 0; - - initializeRand(); - - /* Reset attempts done to zero so that the next retry cycle can start. */ - pRetryParams->attemptsDone = 0; - - /* Calculate jitter value using picking a random number. */ - jitter = ( generateRandNum() % MAX_JITTER_VALUE_SECONDS ); - - /* Reset the backoff value to the initial time out value plus jitter. */ - pRetryParams->nextJitterMax = INITIAL_RETRY_BACKOFF_SECONDS + jitter; -} - -/*-----------------------------------------------------------*/ diff --git a/libraries/abstractions/retry_utils/retry_utils.h b/libraries/abstractions/retry_utils/retry_utils.h deleted file mode 100644 index 57f328403d5..00000000000 --- a/libraries/abstractions/retry_utils/retry_utils.h +++ /dev/null @@ -1,245 +0,0 @@ -/* - * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * @file retry_utils.h - * @brief Declaration of the exponential backoff retry logic utility functions - * and constants. - */ - -#ifndef RETRY_UTILS_H_ -#define RETRY_UTILS_H_ - -/* Standard include. */ -#include - -/** - * @page retryutils_page Retry Utilities - * @brief An abstraction of utilities for retrying with exponential back off and - * jitter. - * - * @section retryutils_overview Overview - * The retry utilities are a set of APIs that aid in retrying with exponential - * backoff and jitter. Exponential backoff with jitter is strongly recommended - * for retrying failed actions over the network with servers. Please see - * https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/ for - * more information about the benefits with AWS. - * - * Exponential backoff with jitter is typically used when retrying a failed - * connection to the server. In an environment with poor connectivity, a client - * can get disconnected at any time. A backoff strategy helps the client to - * conserve battery by not repeatedly attempting reconnections when they are - * unlikely to succeed. - * - * Before retrying the failed communication to the server there is a quiet period. - * In this quiet period, the task that is retrying must sleep for some random - * amount of seconds between 0 and the lesser of a base value and a predefined - * maximum. The base is doubled with each retry attempt until the maximum is - * reached.
- * - * > sleep_seconds = random_between( 0, min( 2attempts_count * base_seconds, maximum_seconds ) ) - * - * @section retryutils_implementation Implementing Retry Utils - * - * The functions that must be implemented are:
- * - @ref RetryUtils_ParamsReset - * - @ref RetryUtils_BackoffAndSleep - * - * The functions are used as shown in the diagram below. This is the exponential - * backoff with jitter loop: - * - * @image html retry_utils_flow.png width=25% - * - * The following steps give guidance on implementing the Retry Utils. An example - * implementation of the Retry Utils for a POSIX platform can be found in file - * @ref retry_utils_posix.c. - * - * -# Implementing @ref RetryUtils_ParamsReset - * @snippet this define_retryutils_paramsreset - *
- * This function initializes @ref RetryUtilsParams_t. It is expected to set - * @ref RetryUtilsParams_t.attemptsDone to zero. It is also expected to set - * @ref RetryUtilsParams_t.nextJitterMax to @ref INITIAL_RETRY_BACKOFF_SECONDS - * plus some random amount of seconds, jitter. This jitter is a random number - * between 0 and @ref MAX_JITTER_VALUE_SECONDS. This function must be called - * before entering the exponential backoff with jitter loop using - * @ref RetryUtils_BackoffAndSleep.

- * Please follow the example below to implement your own @ref RetryUtils_ParamsReset. - * The lines with FIXME comments should be updated. - * @code{c} - * void RetryUtils_ParamsReset( RetryUtilsParams_t * pRetryParams ) - * { - * uint32_t jitter = 0; - * - * // Reset attempts done to zero so that the next retry cycle can start. - * pRetryParams->attemptsDone = 0; - * - * // Seed pseudo random number generator with the current time. FIXME: Your - * // system may have another method to retrieve the current time to seed the - * // pseudo random number generator. - * srand( time( NULL ) ); - * - * // Calculate jitter value using picking a random number. - * jitter = ( rand() % MAX_JITTER_VALUE_SECONDS ); - * - * // Reset the backoff value to the initial time out value plus jitter. - * pRetryParams->nextJitterMax = INITIAL_RETRY_BACKOFF_SECONDS + jitter; - * } - * @endcode
- * - * -# Implementing @ref RetryUtils_BackoffAndSleep - * @snippet this define_retryutils_backoffandsleep - *
- * When this function is invoked, the calling task is expected to sleep a random - * number of seconds between 0 and @ref RetryUtilsParams_t.nextJitterMax. After - * sleeping this function must double @ref RetryUtilsParams_t.nextJitterMax, but - * not exceeding @ref MAX_RETRY_BACKOFF_SECONDS. When @ref RetryUtilsParams_t.maxRetryAttempts - * are reached this function should return @ref RetryUtilsRetriesExhausted, unless - * @ref RetryUtilsParams_t.maxRetryAttempts is set to zero. - * When @ref RetryUtilsRetriesExhausted is returned the calling application can - * stop trying with a failure, or it can call @ref RetryUtils_ParamsReset again - * and restart the exponential back off with jitter loop.

- * Please follow the example below to implement your own @ref RetryUtils_BackoffAndSleep. - * The lines with FIXME comments should be updated. - * @code{c} - * RetryUtilsStatus_t RetryUtils_BackoffAndSleep( RetryUtilsParams_t * pRetryParams ) - * { - * RetryUtilsStatus_t status = RetryUtilsRetriesExhausted; - * // The quiet period delay in seconds. - * int backOffDelay = 0; - * - * // If pRetryParams->maxRetryAttempts is set to 0, try forever. - * if( ( pRetryParams->attemptsDone < pRetryParams->maxRetryAttempts ) || - * ( 0 == pRetryParams->maxRetryAttempts ) ) - * { - * // Choose a random value for back-off time between 0 and the max jitter value. - * backOffDelay = rand() % pRetryParams->nextJitterMax; - * - * // Wait for backoff time to expire for the next retry. - * ( void ) myThreadSleepFunction( backOffDelay ); // FIXME: Replace with your system's thread sleep function. - * - * // Increment backoff counts. - * pRetryParams->attemptsDone++; - * - * // Double the max jitter value for the next retry attempt, only - * // if the new value will be less than the max backoff time value. - * if( pRetryParams->nextJitterMax < ( MAX_RETRY_BACKOFF_SECONDS / 2U ) ) - * { - * pRetryParams->nextJitterMax += pRetryParams->nextJitterMax; - * } - * else - * { - * pRetryParams->nextJitterMax = MAX_RETRY_BACKOFF_SECONDS; - * } - * - * status = RetryUtilsSuccess; - * } - * else - * { - * // When max retry attempts are exhausted, let application know by - * // returning RetryUtilsRetriesExhausted. Application may choose to - * // restart the retry process after calling RetryUtils_ParamsReset(). - * status = RetryUtilsRetriesExhausted; - * RetryUtils_ParamsReset( pRetryParams ); - * } - * - * return status; - * } - * @endcode - */ - -/** - * @brief Max number of retry attempts. Set this value to 0 if the client must - * retry forever. - */ -#define MAX_RETRY_ATTEMPTS 4U - -/** - * @brief Initial fixed backoff value in seconds between two successive - * retries. A random jitter value is added to every backoff value. - */ -#define INITIAL_RETRY_BACKOFF_SECONDS 1U - -/** - * @brief Max backoff value in seconds. - */ -#define MAX_RETRY_BACKOFF_SECONDS 128U - -/** - * @brief Max jitter value in seconds. - */ -#define MAX_JITTER_VALUE_SECONDS 5U - -/** - * @brief Status for @ref RetryUtils_BackoffAndSleep. - */ -typedef enum RetryUtilsStatus -{ - RetryUtilsSuccess = 0, /**< @brief The function returned successfully after sleeping. */ - RetryUtilsRetriesExhausted /**< @brief The function exhausted all retry attempts. */ -} RetryUtilsStatus_t; - -/** - * @brief Represents parameters required for retry logic. - */ -typedef struct RetryUtilsParams -{ - /** - * @brief Max number of retry attempts. Set this value to 0 if the client must - * retry forever. - */ - uint32_t maxRetryAttempts; - - /** - * @brief The cumulative count of backoff delay cycles completed - * for retries. - */ - uint32_t attemptsDone; - - /** - * @brief The max jitter value for backoff time in retry attempt. - */ - uint32_t nextJitterMax; -} RetryUtilsParams_t; - - -/** - * @brief Resets the retry timeout value and number of attempts. - * This function must be called by the application before a new retry attempt. - * - * @param[in, out] pRetryParams Structure containing attempts done and timeout - * value. - */ -void RetryUtils_ParamsReset( RetryUtilsParams_t * pRetryParams ); - -/** - * @brief Simple platform specific exponential backoff function. The application - * must use this function between retry failures to add exponential delay. - * This function will block the calling task for the current timeout value. - * - * @param[in, out] pRetryParams Structure containing retry parameters. - * - * @return #RetryUtilsSuccess after a successful sleep, #RetryUtilsRetriesExhausted - * when all attempts are exhausted. - */ -RetryUtilsStatus_t RetryUtils_BackoffAndSleep( RetryUtilsParams_t * pRetryParams ); - -#endif /* ifndef RETRY_UTILS_H_ */ diff --git a/libraries/abstractions/transport/secure_sockets/transport_secure_sockets.c b/libraries/abstractions/transport/secure_sockets/transport_secure_sockets.c index 6acb449e9c8..705c7687b75 100755 --- a/libraries/abstractions/transport/secure_sockets/transport_secure_sockets.c +++ b/libraries/abstractions/transport/secure_sockets/transport_secure_sockets.c @@ -1,5 +1,5 @@ /* - * FreeRTOS V202002.00 + * FreeRTOS Transport Secure Sockets V1.0.0 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/transport/secure_sockets/transport_secure_sockets.h b/libraries/abstractions/transport/secure_sockets/transport_secure_sockets.h index bd4b3a8dcfc..a6c9d1fd5b8 100755 --- a/libraries/abstractions/transport/secure_sockets/transport_secure_sockets.h +++ b/libraries/abstractions/transport/secure_sockets/transport_secure_sockets.h @@ -1,4 +1,5 @@ /* + * FreeRTOS Transport Secure Sockets V1.0.0 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/abstractions/transport/transport_interface_secure_sockets.cmake b/libraries/abstractions/transport/transport_interface_secure_sockets.cmake index ee311c93b24..2b7177f8fbd 100644 --- a/libraries/abstractions/transport/transport_interface_secure_sockets.cmake +++ b/libraries/abstractions/transport/transport_interface_secure_sockets.cmake @@ -11,15 +11,17 @@ set(src_dir "${CMAKE_CURRENT_LIST_DIR}/secure_sockets") # Include filepaths for source and include. include( ${CMAKE_CURRENT_LIST_DIR}/transport_interface.cmake ) +# Add cmake files of module to metadata. +afr_module_cmake_files(${AFR_CURRENT_MODULE} + ${CMAKE_CURRENT_LIST_DIR}/transport_interface.cmake + ${CMAKE_CURRENT_LIST_DIR}/transport_interface_secure_sockets.cmake +) + afr_module_sources( ${AFR_CURRENT_MODULE} PRIVATE "${src_dir}/transport_secure_sockets.h" "${src_dir}/transport_secure_sockets.c" - # Following files are added to the source list to generate their - # metadata so that are part of code downloaded from FreeRTOS console. - "${CMAKE_CURRENT_LIST_DIR}/transport_interface.cmake" - "${CMAKE_CURRENT_LIST_DIR}/transport_interface_secure_sockets.cmake" ) afr_module_dependencies( diff --git a/libraries/c_sdk/aws/defender/CMakeLists.txt b/libraries/c_sdk/aws/defender/CMakeLists.txt index 5d4c40e9866..d1d786217ff 100644 --- a/libraries/c_sdk/aws/defender/CMakeLists.txt +++ b/libraries/c_sdk/aws/defender/CMakeLists.txt @@ -1,12 +1,5 @@ afr_module() -afr_set_lib_metadata(ID "defender") -afr_set_lib_metadata(DESCRIPTION "This library enables metrics reporting with AWS IoT Device Defender.") -afr_set_lib_metadata(DISPLAY_NAME "Device Defender") -afr_set_lib_metadata(CATEGORY "Amazon Services") -afr_set_lib_metadata(VERSION "1.0.0") -afr_set_lib_metadata(IS_VISIBLE "true") - set(src_dir "${CMAKE_CURRENT_LIST_DIR}/src") set(inc_dir "${CMAKE_CURRENT_LIST_DIR}/include") set(test_dir "${CMAKE_CURRENT_LIST_DIR}/test") diff --git a/libraries/c_sdk/aws/defender/include/aws_defender.h b/libraries/c_sdk/aws/defender/include/aws_defender.h index cfaa6c3b975..e11e3c8fc01 100644 --- a/libraries/c_sdk/aws/defender/include/aws_defender.h +++ b/libraries/c_sdk/aws/defender/include/aws_defender.h @@ -1,5 +1,5 @@ /* - * FreeRTOS Defender V3.0.2 + * FreeRTOS Defender V3.0.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/aws/defender/include/aws_iot_defender.h b/libraries/c_sdk/aws/defender/include/aws_iot_defender.h index ce430f9c321..bf732b3e8aa 100644 --- a/libraries/c_sdk/aws/defender/include/aws_iot_defender.h +++ b/libraries/c_sdk/aws/defender/include/aws_iot_defender.h @@ -1,5 +1,5 @@ /* - * FreeRTOS Defender V3.0.2 + * FreeRTOS Defender V3.0.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/aws/defender/src/aws_iot_defender_api.c b/libraries/c_sdk/aws/defender/src/aws_iot_defender_api.c index 177b1451e80..d96f62afbe8 100644 --- a/libraries/c_sdk/aws/defender/src/aws_iot_defender_api.c +++ b/libraries/c_sdk/aws/defender/src/aws_iot_defender_api.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Defender V3.0.2 + * FreeRTOS Defender V3.0.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/aws/defender/src/aws_iot_defender_collector.c b/libraries/c_sdk/aws/defender/src/aws_iot_defender_collector.c index 82f877facc9..2f3d1dc8350 100644 --- a/libraries/c_sdk/aws/defender/src/aws_iot_defender_collector.c +++ b/libraries/c_sdk/aws/defender/src/aws_iot_defender_collector.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Defender V3.0.2 + * FreeRTOS Defender V3.0.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/aws/defender/src/aws_iot_defender_mqtt.c b/libraries/c_sdk/aws/defender/src/aws_iot_defender_mqtt.c index de468849097..65f1bdde5a7 100644 --- a/libraries/c_sdk/aws/defender/src/aws_iot_defender_mqtt.c +++ b/libraries/c_sdk/aws/defender/src/aws_iot_defender_mqtt.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Defender V3.0.2 + * FreeRTOS Defender V3.0.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/aws/defender/src/aws_iot_defender_v1.c b/libraries/c_sdk/aws/defender/src/aws_iot_defender_v1.c index bc3f89e78a1..b4689825d34 100644 --- a/libraries/c_sdk/aws/defender/src/aws_iot_defender_v1.c +++ b/libraries/c_sdk/aws/defender/src/aws_iot_defender_v1.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Defender V3.0.2 + * FreeRTOS Defender V3.0.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/aws/defender/src/private/aws_iot_defender_internal.h b/libraries/c_sdk/aws/defender/src/private/aws_iot_defender_internal.h index a15891d116e..49cbe80a1af 100644 --- a/libraries/c_sdk/aws/defender/src/private/aws_iot_defender_internal.h +++ b/libraries/c_sdk/aws/defender/src/private/aws_iot_defender_internal.h @@ -1,5 +1,5 @@ /* - * FreeRTOS Defender V3.0.2 + * FreeRTOS Defender V3.0.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/aws/defender/test/system/aws_iot_tests_defender_system.c b/libraries/c_sdk/aws/defender/test/system/aws_iot_tests_defender_system.c index b590fbac27b..d337735ffad 100644 --- a/libraries/c_sdk/aws/defender/test/system/aws_iot_tests_defender_system.c +++ b/libraries/c_sdk/aws/defender/test/system/aws_iot_tests_defender_system.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Defender V3.0.2 + * FreeRTOS Defender V3.0.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/aws/defender/test/unit/aws_iot_tests_defender_unit.c b/libraries/c_sdk/aws/defender/test/unit/aws_iot_tests_defender_unit.c index 6ad641a1dbe..31e2e9b3c41 100644 --- a/libraries/c_sdk/aws/defender/test/unit/aws_iot_tests_defender_unit.c +++ b/libraries/c_sdk/aws/defender/test/unit/aws_iot_tests_defender_unit.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Defender V3.0.2 + * FreeRTOS Defender V3.0.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/ble/include/iot_ble_mqtt_serialize.h b/libraries/c_sdk/standard/ble/include/iot_ble_mqtt_serialize.h index 03843bbde66..19fda6f3ecc 100644 --- a/libraries/c_sdk/standard/ble/include/iot_ble_mqtt_serialize.h +++ b/libraries/c_sdk/standard/ble/include/iot_ble_mqtt_serialize.h @@ -233,6 +233,11 @@ typedef struct MQTTBLEPublishInfo * @brief Pending flag for continuation of publish packet. */ bool pending; + + /** + * @brief Packet Identifier for QoS1, QoS2 publish packet. + */ + uint16_t packetIdentifier; } MQTTBLEPublishInfo_t; /** @} */ diff --git a/libraries/c_sdk/standard/ble/src/services/mqtt_ble/iot_ble_mqtt_transport.c b/libraries/c_sdk/standard/ble/src/services/mqtt_ble/iot_ble_mqtt_transport.c index e15aa165f88..5b7fd1bda92 100644 --- a/libraries/c_sdk/standard/ble/src/services/mqtt_ble/iot_ble_mqtt_transport.c +++ b/libraries/c_sdk/standard/ble/src/services/mqtt_ble/iot_ble_mqtt_transport.c @@ -685,7 +685,6 @@ static MQTTBLEStatus_t handleOutgoingPublish( MQTTBLEPublishInfo_t * pPublishInf size_t * pSerializedBufLength ) { MQTTBLEStatus_t status = MQTTBLESuccess; - uint16_t packetIdentifier; LogDebug( ( "Processing outgoing PUBLISH." ) ); @@ -697,12 +696,20 @@ static MQTTBLEStatus_t handleOutgoingPublish( MQTTBLEPublishInfo_t * pPublishInf } else { - pPublishInfo->pending = parsePublish( buf, bytesToSend, pPublishInfo, &packetIdentifier ); + pPublishInfo->pending = parsePublish( buf, + bytesToSend, + pPublishInfo, + &pPublishInfo->packetIdentifier ); } + LogDebug( ( "IotBleMqtt_SerializePublish before if" ) ); + if( pPublishInfo->pending == false ) { - status = IotBleMqtt_SerializePublish( pPublishInfo, pSerializedBuf, pSerializedBufLength, packetIdentifier ); + status = IotBleMqtt_SerializePublish( pPublishInfo, + pSerializedBuf, + pSerializedBufLength, + pPublishInfo->packetIdentifier ); if( pPublishInfo->pTopicName != NULL ) { @@ -735,7 +742,9 @@ static MQTTBLEStatus_t handleOutgoingPuback( const void * buf, packetIdentifier = UINT16_DECODE( &buffer[ 2 ] ); - status = IotBleMqtt_SerializePuback( packetIdentifier, pSerializedBuf, pSerializedBufLength ); + status = IotBleMqtt_SerializePuback( packetIdentifier, + pSerializedBuf, + pSerializedBufLength ); return status; } @@ -911,7 +920,10 @@ static MQTTBLEStatus_t handleIncomingSuback( StreamBufferHandle_t streamBuffer, buffer[ 3 ] = ( uint8_t ) ( packetIdentifier & 0x00FFU ); buffer[ 4 ] = statusCode; - ( void ) xStreamBufferSend( streamBuffer, buffer, SIZE_OF_SUB_ACK, pdMS_TO_TICKS( RECV_TIMEOUT_MS ) ); + ( void ) xStreamBufferSend( streamBuffer, + buffer, + SIZE_OF_SUB_ACK, + pdMS_TO_TICKS( RECV_TIMEOUT_MS ) ); } return status; @@ -987,14 +999,18 @@ int32_t IotBleMqttTransportSend( NetworkContext_t * pContext, /* The send function returns the CBOR bytes written, so need to return 0 or full amount of bytes sent. */ int32_t bytesWritten = ( int32_t ) bytesToWrite; - /* * The payload of publish can be send as a separate packet from the header. The flag is used to check for pending publish * payload information and process the payload part of the publish. */ + if( pContext->publishInfo.pending == true ) { - status = handleOutgoingPublish( ( MQTTBLEPublishInfo_t * ) &pContext->publishInfo, pBuffer, bytesToWrite, &pSerializedPacket, &serializedLength ); + status = handleOutgoingPublish( ( MQTTBLEPublishInfo_t * ) &pContext->publishInfo, + pBuffer, + bytesToWrite, + &pSerializedPacket, + &serializedLength ); } else { @@ -1005,31 +1021,45 @@ int32_t IotBleMqttTransportSend( NetworkContext_t * pContext, switch( packetType ) { case IOT_BLE_MQTT_MSG_TYPE_CONNECT: - status = handleOutgoingConnect( pBuffer, &pSerializedPacket, &serializedLength ); + status = handleOutgoingConnect( pBuffer, + &pSerializedPacket, + &serializedLength ); break; case IOT_BLE_MQTT_MSG_TYPE_PUBLISH: - status = handleOutgoingPublish( ( MQTTBLEPublishInfo_t * ) &pContext->publishInfo, pBuffer, bytesToWrite, &pSerializedPacket, &serializedLength ); + status = handleOutgoingPublish( ( MQTTBLEPublishInfo_t * ) &pContext->publishInfo, + pBuffer, + bytesToWrite, + &pSerializedPacket, + &serializedLength ); break; case IOT_BLE_MQTT_MSG_TYPE_PUBACK: - status = handleOutgoingPuback( pBuffer, &pSerializedPacket, &serializedLength ); + status = handleOutgoingPuback( pBuffer, + &pSerializedPacket, + &serializedLength ); break; case IOT_BLE_MQTT_MSG_TYPE_SUBSCRIBE: - status = handleOutgoingSubscribe( pBuffer, &pSerializedPacket, &serializedLength ); + status = handleOutgoingSubscribe( pBuffer, + &pSerializedPacket, + &serializedLength ); break; case IOT_BLE_MQTT_MSG_TYPE_UNSUBSCRIBE: - status = handleOutgoingUnsubscribe( pBuffer, &pSerializedPacket, &serializedLength ); + status = handleOutgoingUnsubscribe( pBuffer, + &pSerializedPacket, + &serializedLength ); break; case IOT_BLE_MQTT_MSG_TYPE_PINGREQ: - status = handleOutgoingPingReq( &pSerializedPacket, &serializedLength ); + status = handleOutgoingPingReq( &pSerializedPacket, + &serializedLength ); break; case IOT_BLE_MQTT_MSG_TYPE_DISCONNECT: - status = handleOutgoingDisconnect( &pSerializedPacket, &serializedLength ); + status = handleOutgoingDisconnect( &pSerializedPacket, + &serializedLength ); break; /* QoS 2 cases, currently not supported by BLE */ @@ -1053,16 +1083,20 @@ int32_t IotBleMqttTransportSend( NetworkContext_t * pContext, { if( serializedLength > 0 ) { - bytesSent = IotBleDataTransfer_Send( pContext->pChannel, pSerializedPacket, serializedLength ); + bytesSent = IotBleDataTransfer_Send( pContext->pChannel, + pSerializedPacket, + serializedLength ); if( bytesSent != serializedLength ) { - LogError( ( "Cannot send %lu bytes through BLE channel, sent %lu bytes.", serializedLength, bytesSent ) ); + LogError( ( "Cannot send %lu bytes through BLE channel, sent %lu bytes.", + serializedLength, bytesSent ) ); bytesWritten = 0; } else { - LogDebug( ( "Successfully sent %lu bytes through BLE channel.", serializedLength ) ); + LogDebug( ( "Successfully sent %d bytes through BLE channel.", + serializedLength ) ); } IotMqtt_FreeMessage( pSerializedPacket ); @@ -1084,14 +1118,14 @@ MQTTBLEStatus_t IotBleMqttTransportAcceptData( const NetworkContext_t * pContext uint8_t * pPacket; size_t packetLength; - IotBleDataTransfer_PeekReceiveBuffer( pContext->pChannel, ( const uint8_t ** ) &pPacket, &packetLength ); + configASSERT( pContext != NULL ); + IotBleDataTransfer_PeekReceiveBuffer( pContext->pChannel, + ( const uint8_t ** ) &pPacket, + &packetLength ); packetType = IotBleMqtt_GetPacketType( pPacket, packetLength ); - - LogDebug( ( "Receiving a packet from the server." ) ); - switch( packetType ) { case IOT_BLE_MQTT_MSG_TYPE_CONNACK: diff --git a/libraries/c_sdk/standard/ble/test/iot_mqtt_ble_system_test.c b/libraries/c_sdk/standard/ble/test/iot_mqtt_ble_system_test.c index ee95436807d..312bba6487e 100644 --- a/libraries/c_sdk/standard/ble/test/iot_mqtt_ble_system_test.c +++ b/libraries/c_sdk/standard/ble/test/iot_mqtt_ble_system_test.c @@ -314,6 +314,11 @@ static SemaphoreHandle_t bleChannelSem; */ static uint32_t getTimeMs(); +/** + * @brief Global variable to keep track of BLE status and enable only once. + */ +static BaseType_t bleEnabled = pdFALSE; + /** * @brief Sends an MQTT CONNECT packet over connected BLE Channel. * @@ -809,6 +814,12 @@ static void testSetUp() packetTypeForDisconnection = MQTT_PACKET_TYPE_INVALID; memset( &incomingInfo, 0u, sizeof( MQTTPublishInfo_t ) ); + if( bleEnabled == pdFALSE ) + { + bleEnable(); + bleEnabled = pdTRUE; + } + /* setup BLE transport interface. */ setupBleTransportInterface( &networkContext ); @@ -852,15 +863,15 @@ TEST_TEAR_DOWN( coreMQTT_Integration_BLE ) */ TEST_GROUP_RUNNER( coreMQTT_Integration_BLE ) { - /* Enable BLE middleware and GATT services only once for all tests in the group. */ - bleEnable(); - RUN_TEST_CASE( coreMQTT_Integration_BLE, Subscribe_Publish_With_Qos_0 ); RUN_TEST_CASE( coreMQTT_Integration_BLE, Subscribe_Publish_With_Qos_1 ); RUN_TEST_CASE( coreMQTT_Integration_BLE, ProcessLoop_KeepAlive ); /* Disconnect and turn off BLE after all tests in the group. */ - bleDisable(); + if( bleEnabled == pdTRUE ) + { + bleDisable(); + } } /* ========================== Test Cases ============================ */ diff --git a/libraries/c_sdk/standard/ble/test/iot_test_ble_mqtt_serialize.c b/libraries/c_sdk/standard/ble/test/iot_test_ble_mqtt_serialize.c index 419e82c9e3a..d505117ad34 100644 --- a/libraries/c_sdk/standard/ble/test/iot_test_ble_mqtt_serialize.c +++ b/libraries/c_sdk/standard/ble/test/iot_test_ble_mqtt_serialize.c @@ -653,9 +653,9 @@ static void prvCreatePUBLISHPacket( uint8_t * pBuffer, TEST( BLE_Unit_MQTT_Serialize, DeserializePUBLISH ) { MQTTBLEStatus_t status; - uint8_t buffer[ TEST_MESG_LEN ]; + uint8_t buffer[ TEST_MESG_LEN ] = { 0 }; size_t length = TEST_MESG_LEN; - MQTTBLEPublishInfo_t publishInfo; + MQTTBLEPublishInfo_t publishInfo = { 0 }; uint16_t packetIdentifier; @@ -761,7 +761,7 @@ TEST( BLE_Unit_MQTT_Serialize, DeserializePUBLISH_QOS0 ) MQTTBLEStatus_t status = MQTTBLESuccess; uint8_t buffer[ TEST_MESG_LEN ] = { 0 }; size_t length = TEST_MESG_LEN; - MQTTBLEPublishInfo_t publishInfo; + MQTTBLEPublishInfo_t publishInfo = { 0 }; uint16_t packetIdentifier; @@ -840,7 +840,7 @@ static void prvCreateSUBACKPacket( uint8_t * pBuffer, TEST( BLE_Unit_MQTT_Serialize, DeserializeSUBACK ) { MQTTBLEStatus_t status; - uint8_t buffer[ TEST_MESG_LEN ]; + uint8_t buffer[ TEST_MESG_LEN ] = { 0 }; size_t length = TEST_MESG_LEN; uint16_t packetIdentifier; uint8_t statusCode; @@ -853,6 +853,7 @@ TEST( BLE_Unit_MQTT_Serialize, DeserializeSUBACK ) TEST_ASSERT_EQUAL( TEST_QOS1, statusCode ); /** Malformed message **/ + memset( buffer, 0x00, TEST_MESG_LEN ); length = TEST_MESG_LEN; prvCreateSUBACKPacket( buffer, &length, TEST_QOS1, TEST_PACKET_IDENTIFIER, 2 ); buffer[ 0 ] = 0x00; diff --git a/libraries/c_sdk/standard/ble/utest/ble_mqtt_transport/CMakeLists.txt b/libraries/c_sdk/standard/ble/utest/ble_mqtt_transport/CMakeLists.txt index b2442a2b430..7afc1bc2ef8 100644 --- a/libraries/c_sdk/standard/ble/utest/ble_mqtt_transport/CMakeLists.txt +++ b/libraries/c_sdk/standard/ble/utest/ble_mqtt_transport/CMakeLists.txt @@ -65,7 +65,6 @@ "${AFR_ROOT_DIR}/freertos_kernel/include/" "${AFR_ROOT_DIR}/libraries/c_sdk/standard/common/include" "${AFR_ROOT_DIR}/libraries/coreMQTT/source/include" - "${AFR_ROOT_DIR}/libraries/coreMQTT/source/interface" "${AFR_ROOT_DIR}/tests/unit_test/linux/logging-stack" "${CMAKE_CURRENT_BINARY_DIR}/mocks" ${abstraction_dir}/ble_hal/include diff --git a/libraries/c_sdk/standard/https/CMakeLists.txt b/libraries/c_sdk/standard/https/CMakeLists.txt index c54113b7d1e..6496ca153e8 100644 --- a/libraries/c_sdk/standard/https/CMakeLists.txt +++ b/libraries/c_sdk/standard/https/CMakeLists.txt @@ -1,12 +1,5 @@ afr_module() -afr_set_lib_metadata(ID "https") -afr_set_lib_metadata(DESCRIPTION "This library implements the HTTPS client side protocol.") -afr_set_lib_metadata(DISPLAY_NAME "HTTPS Client") -afr_set_lib_metadata(CATEGORY "Connectivity") -afr_set_lib_metadata(VERSION "1.0.0") -afr_set_lib_metadata(IS_VISIBLE "true") - set(src_dir "${CMAKE_CURRENT_LIST_DIR}/src") set(inc_dir "${CMAKE_CURRENT_LIST_DIR}/include") set(test_dir "${CMAKE_CURRENT_LIST_DIR}/test") @@ -36,8 +29,13 @@ afr_module_dependencies( ${AFR_CURRENT_MODULE} PUBLIC AFR::common - PRIVATE - 3rdparty::http_parser + AFR::core_http + # This dependency is required for auto-including + # coreHTTP library on FreeRTOS console when a library + # depends on AFR::https. + # AFR::core_http_demo_dependencies is the visible library + # target on FreeRTOS console. + AFR::core_http_demo_dependencies ) # HTTPS Client test @@ -63,5 +61,4 @@ afr_module_dependencies( ${AFR_CURRENT_MODULE} INTERFACE AFR::https - 3rdparty::http_parser ) diff --git a/libraries/c_sdk/standard/https/CODESIZE.md b/libraries/c_sdk/standard/https/CODESIZE.md new file mode 100644 index 00000000000..67206ff24b0 --- /dev/null +++ b/libraries/c_sdk/standard/https/CODESIZE.md @@ -0,0 +1,24 @@ +# Code size of HTTPS Compatibility Layer + +Code size for the HTTPS Compatibility Layer is calculated using GCC for ARM Cortex-M4 on [FreeRTOS 202012.00 release](https://github.com/aws/amazon-freertos/releases/tag/202012.00). Build for calculating code size is done using build configuration for [Cypress CY8CKIT-064S0S2-4343W](https://docs.aws.amazon.com/freertos/latest/userguide/getting_started_cypress_psoc64.html) by using the Release configuration. All logs were disabled in this build. Refer to the table below for calculated code sizes. + +| File | With -O1 Optimization | With -Os Optimization | +| :-: | :-: | :-: | +| iot_https_client.c | 21.0K | 19.6K | +| iot_https_utils.c | 0.5K | 0.5K | +| **Total estimate** | **21.5K** | **21.1K** | + +The HTTPS Compatibility Layer is implemented using the [coreHTTP library](https://github.com/FreeRTOS/coreHTTP/blob/master/README.md). In addition, the HTTPS Compatibility Layer maintains the dependency of the network abstraction and linear containers from the HTTP V1.x.x library. The task pool dependency is removed in order to allow statically-allocated tasks. To account for the total code size of the HTTPS Compatibility Layer, code sizes for all dependencies have been considered (see below). + +1. **The coreHTTP library** : The HTTPS Compatibility Layer is implemented using [coreHTTP library](https://github.com/FreeRTOS/coreHTTP/blob/master/README.md). Memory estimates for [coreHTTP library](https://github.com/FreeRTOS/coreHTTP/blob/master/README.md) can be found in the documentation [here](https://freertos.org/mqtt/index.html). + +2. **Platform Abstraction** : This HTTPS Compatibility Layer depends on the platform-specific implementation of network abstraction. The code size is calculated for the [FreeRTOS implementation of Abstraction Layer](../../../abstractions/platform/freertos) and is added in the table below. + +| File | With -O1 Optimization | With -Os Optimization | +| :-: | :-: | :-: | +| iot_network_freertos.c | 1.2K | 1.1K | +| **Total estimate** | **1.2K** | **1.1K** | + +Note that the implementation for network abstraction may not be exclusively used by the HTTPS Compatibility Layer, but may be shared by other libraries. However, this network abstraction is not used by any of the [redesigned libraries for LTS](https://www.freertos.org/ltsroadmap.html). + +3. **Linear Containers** : This HTTPS Compatibility Layer depends on [Linear Containers](https://docs.aws.amazon.com/freertos/latest/lib-ref/embedded-csdk/v4.0_beta_deprecated/lib-ref/c-sdk/linear_containers/index.html). However, this implementation can be found in a [c header file](../common/include/iot_linear_containers.h), and its code sizes are already accounted for in the calculated sizes of this HTTPS Compatibility Layer. diff --git a/libraries/c_sdk/standard/https/README.md b/libraries/c_sdk/standard/https/README.md new file mode 100644 index 00000000000..f1ad1cc9e33 --- /dev/null +++ b/libraries/c_sdk/standard/https/README.md @@ -0,0 +1,30 @@ +# HTTPS Compatibility Layer + +HTTPS Compatibility Layer provides backward compatibility from [coreHTTP library](https://github.com/FreeRTOS/coreHTTP/blob/master/README.md) to [HTTP V1.x.x APIs](include/iot_https_client.h). **We recommend that you use the coreHTTP library for optimized memory usage and modularity, but you can use the HTTPS Compatibility Layer when you do not have the flexibility.** + + +## Configs for HTTPS Compatibility Layer + +Configuration settings for the HTTPS Compatibility Layer, are available in addition to the [configurations of HTTPS V1.x.x library](https://docs.aws.amazon.com/freertos/latest/lib-ref/html2/https/https_config.html). + +Configuration settings are C pre-processor constants. They can be set with a #define in the config file (iot_config.h) or by using a compiler option such as -D in gcc. If a configuration setting is not defined, the HTTPS Compatibility Layer will use a "sensible" default value (unless otherwise noted). Because they are compile-time constants, this HTTPS Compatibility Layer must be rebuilt if a configuration setting is changed. + +1. `IOT_HTTPS_DISPATCH_QUEUE_SIZE` - The number of requests in the queue that are ready to be sent to the HTTP server. +2. `IOT_HTTPS_DISPATCH_TASK_COUNT` - The number of tasks that are responsible for sending requests from the dispatch queue. +3. `IOT_HTTPS_DISPATCH_TASK_STACK_SIZE` - The stack size of each dispatch task, sized appropriately for each board. +4. `IOT_HTTPS_DISPATCH_USE_STATIC_MEMORY` - If set to 1, the memory used by the dispatch task will be allocated statically by the library. Otherwise, memory will be allocated on the heap. +5. `IOT_HTTPS_DISPATCH_TASK_PRIORITY` - The priority of each dispatch task. This priority is deliberately chosen to match the original taskpool's priority. Doing so prevents starvation of the network-receive task and tasks potentially used by other libraries. + + +## Code size of HTTPS Compatibility Layer + +Code sizes are calculated for the HTTPS Compatibility Layer on [FreeRTOS 202011.00 release](https://github.com/aws/amazon-freertos/releases/tag/202011.00). In order to calculate the total cost to memory of the HTTPS Compatibility Layer, the code sizes of its dependencies are also included. HTTPS Compatibility Layer and its dependencies have a code size of **30.4KB** with `-Os` compiler optimization. +Please be aware that, this code size is about **22.2KB** higher than the [code size](https://docs.aws.amazon.com/embedded-csdk/202011.00/lib-ref/libraries/standard/coreHTTP/docs/doxygen/output/html/index.html) required by the [coreHTTP library](https://github.com/FreeRTOS/coreHTTP/blob/master/README.md). + +**Note** Refer to the [CODESIZE.md](CODESIZE.md) for more details about the calculation of code sizes for the HTTPS Compatibility Layer and the [coreHTTP FreeRTOS documentation](https://freertos.org/http/index.html) for coreHTTP library. + + +## Tasks required for HTTPS Compatibility Layer + +The HTTPS Compatibility Layer has a run time dependency on tasks created by each dispatch task and Network Abstraction implementation, in addition to the system tasks. The Network Abstraction implementation creates a task to receive from the network. + diff --git a/libraries/c_sdk/standard/https/include/iot_https_client.h b/libraries/c_sdk/standard/https/include/iot_https_client.h index aefb4a4d5f4..486e0e5c181 100644 --- a/libraries/c_sdk/standard/https/include/iot_https_client.h +++ b/libraries/c_sdk/standard/https/include/iot_https_client.h @@ -1,5 +1,5 @@ /* - * FreeRTOS HTTPS Client V1.1.3 + * FreeRTOS HTTPS Client V1.2.0 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/https/include/iot_https_utils.h b/libraries/c_sdk/standard/https/include/iot_https_utils.h index 2ab614c36f3..638121b73b8 100644 --- a/libraries/c_sdk/standard/https/include/iot_https_utils.h +++ b/libraries/c_sdk/standard/https/include/iot_https_utils.h @@ -1,5 +1,5 @@ /* - * FreeRTOS HTTPS Client V1.1.3 + * FreeRTOS HTTPS Client V1.2.0 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/https/include/types/iot_https_types.h b/libraries/c_sdk/standard/https/include/types/iot_https_types.h index 9b1e70c0585..3fbba57e038 100644 --- a/libraries/c_sdk/standard/https/include/types/iot_https_types.h +++ b/libraries/c_sdk/standard/https/include/types/iot_https_types.h @@ -1,5 +1,5 @@ /* - * FreeRTOS HTTPS Client V1.1.3 + * FreeRTOS HTTPS Client V1.2.0 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/https/src/iot_https_client.c b/libraries/c_sdk/standard/https/src/iot_https_client.c index c8eff83cecd..2891c1a68cf 100644 --- a/libraries/c_sdk/standard/https/src/iot_https_client.c +++ b/libraries/c_sdk/standard/https/src/iot_https_client.c @@ -1,5 +1,5 @@ /* - * FreeRTOS HTTPS Client V1.1.3 + * FreeRTOS HTTPS Client V1.2.0 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -43,7 +43,7 @@ * The minimum path is "/" because we cannot know how long the application requested path is is going to be. * CONNECT is the longest string length HTTP method according to RFC 2616. */ -#define HTTPS_PARTIAL_REQUEST_LINE HTTPS_CONNECT_METHOD " " HTTPS_EMPTY_PATH " " HTTPS_PROTOCOL_VERSION +#define HTTPS_PARTIAL_REQUEST_LINE HTTPS_CONNECT_METHOD " " HTTPS_EMPTY_PATH " " HTTPS_PROTOCOL_VERSION /** * @brief The User-Agent header line string. @@ -52,7 +52,7 @@ * "User-Agent: \r\n" * This is used for the calculation of the requestUserBufferMinimumSize. */ -#define HTTPS_USER_AGENT_HEADER_LINE HTTPS_USER_AGENT_HEADER HTTPS_HEADER_FIELD_SEPARATOR IOT_HTTPS_USER_AGENT HTTPS_END_OF_HEADER_LINES_INDICATOR +#define HTTPS_USER_AGENT_HEADER_LINE HTTPS_USER_AGENT_HEADER HTTPS_HEADER_FIELD_SEPARATOR IOT_HTTPS_USER_AGENT HTTPS_END_OF_HEADER_LINES_INDICATOR /** * @brief The Host header line with the field only and not the value. @@ -62,27 +62,7 @@ * This is used for the calculation of the requestUserBufferMinimumSize. The Host value is not specified because we * cannot anticipate what server the client is making requests to. */ -#define HTTPS_PARTIAL_HOST_HEADER_LINE HTTPS_HOST_HEADER HTTPS_HEADER_FIELD_SEPARATOR HTTPS_END_OF_HEADER_LINES_INDICATOR - -/** - * String constants for the Connection header and possible values. - * - * This is used for writing headers automatically during the sending of the HTTP request. - * "Connection: keep-alive\r\n" is written automatically for a persistent connection. - * "Connection: close\r\n" is written automatically for a non-persistent connection. - */ -#define HTTPS_CONNECTION_KEEP_ALIVE_HEADER_LINE HTTPS_CONNECTION_HEADER HTTPS_HEADER_FIELD_SEPARATOR HTTPS_CONNECTION_KEEP_ALIVE_HEADER_VALUE HTTPS_END_OF_HEADER_LINES_INDICATOR /**< @brief String literal for "Connection: keep-alive\r\n". */ -#define HTTPS_CONNECTION_CLOSE_HEADER_LINE HTTPS_CONNECTION_HEADER HTTPS_HEADER_FIELD_SEPARATOR HTTPS_CONNECTION_CLOSE_HEADER_VALUE HTTPS_END_OF_HEADER_LINES_INDICATOR /**< @brief String literal for "Connection: close\r\n". */ - -/** - * @brief The length of the "Connection: keep-alive\r\n" header. - * - * This is used for sizing a local buffer for the final headers to send that include the "Connection: keep-alive\r\n" - * header line. - * - * This is used to initialize a local array for the final headers to send. - */ -#define HTTPS_CONNECTION_KEEP_ALIVE_HEADER_LINE_LENGTH ( 24 ) +#define HTTPS_PARTIAL_HOST_HEADER_LINE HTTPS_HOST_HEADER HTTPS_HEADER_FIELD_SEPARATOR HTTPS_END_OF_HEADER_LINES_INDICATOR /** * Indicates for the http-parser parsing execution function to tell it to keep parsing or to stop parsing. @@ -90,8 +70,8 @@ * A value of 0 means the parser should keep parsing if there is more unparsed length. * A value greater than 0 tells the parser to stop parsing. */ -#define KEEP_PARSING ( ( int ) 0 ) /**< @brief Indicator in the http-parser callback to keep parsing when the function returns. */ -#define STOP_PARSING ( ( int ) 1 ) /**< @brief Indicator in the http-parser callback to stop parsing when the function returns. */ +#define KEEP_PARSING ( ( int ) 0 ) /**< @brief Indicator in the http-parser callback to keep parsing when the function returns. */ +#define STOP_PARSING ( ( int ) 1 ) /**< @brief Indicator in the http-parser callback to stop parsing when the function returns. */ /*-----------------------------------------------------------*/ @@ -336,40 +316,6 @@ static void _networkDisconnect( _httpsConnection_t * pHttpsConnection ); */ static void _networkDestroy( _httpsConnection_t * pHttpsConnection ); -/** - * @brief Add a header to the current HTTP request. - * - * The headers are stored in reqHandle->pHeaders. - * - * @param[in] pHttpsRequest - HTTP request context. - * @param[in] pName - The name of the header to add. - * @param[in] nameLen - The length of the header name string. - * @param[in] pValue - The buffer containing the value string. - * @param[in] valueLen - The length of the header value string. - * - * @return #IOT_HTTPS_OK if the header was added to the request successfully. - * #IOT_HTTPS_INSUFFICIENT_MEMORY if there was not enough room in the IotHttpsRequestHandle_t->pHeaders. - */ -static IotHttpsReturnCode_t _addHeader( _httpsRequest_t * pHttpsRequest, - const char * pName, - uint32_t nameLen, - const char * pValue, - uint32_t valueLen ); - -/** - * @brief Send data on the network. - * - * @param[in] pHttpsConnection - HTTP connection context. - * @param[in] pBuf - The buffer containing the data to send. - * @param[in] len - The length of the data to send. - * - * @return #IOT_HTTPS_OK if the data sent successfully. - * #IOT_HTTPS_NETWORK_ERROR if there was an error sending the data on the network. - */ -static IotHttpsReturnCode_t _networkSend( _httpsConnection_t * pHttpsConnection, - uint8_t * pBuf, - size_t len ); - /** * @brief Receive data on the network. * @@ -386,42 +332,6 @@ static IotHttpsReturnCode_t _networkRecv( _httpsConnection_t * pHttpsConnection, size_t bufLen, size_t * numBytesRecv ); -/** - * @brief Send all of the HTTP request headers in the pHeadersBuf and the final Content-Length and Connection headers. - * - * All of the headers in headerbuf are sent first followed by the computed content length and persistent connection - * indication. - * - * @param[in] pHttpsConnection - HTTP connection context. - * @param[in] pHeadersBuf - The buffer containing the request headers to send. This buffer must contain HTTP headers - * lines without the indicator for the the end of the HTTP headers. - * @param[in] headersLength - The length of the request headers to send. - * @param[in] isNonPersistent - Indicator of whether the connection is persistent or not. - * @param[in] contentLength - The length of the request body used for automatically creating a "Content-Length" header. - * - * @return #IOT_HTTPS_OK if the headers were fully sent successfully. - * #IOT_HTTPS_NETWORK_ERROR if there was an error receiving the data on the network. - */ -static IotHttpsReturnCode_t _sendHttpsHeaders( _httpsConnection_t * pHttpsConnection, - uint8_t * pHeadersBuf, - uint32_t headersLength, - bool isNonPersistent, - uint32_t contentLength ); - -/** - * @brief Send all of the HTTP request body in pBodyBuf. - * - * @param[in] pHttpsConnection - HTTP connection context. - * @param[in] pBodyBuf - Buffer of the request body to send. - * @param[in] bodyLength - The length of the body to send. - * - * @return #IOT_HTTPS_OK if the body was fully sent successfully. - * #IOT_HTTPS_NETWORK_ERROR if there was an error receiving the data on the network. - */ -static IotHttpsReturnCode_t _sendHttpsBody( _httpsConnection_t * pHttpsConnection, - uint8_t * pBodyBuf, - uint32_t bodyLength ); - /** * @brief Parse the HTTP response message in pBuf. * @@ -525,25 +435,20 @@ static IotHttpsReturnCode_t _flushHttpsNetworkData( _httpsConnection_t * pHttpsC _httpsResponse_t * pHttpsResponse ); /** - * @brief Task pool job routine to send the HTTP request within the pUserContext. + * @brief Send an HTTP request from the dispatch queue. * - * @param[in] pTaskPool Pointer to the system task pool. - * @param[in] pJob Pointer the to the HTTP request sending job. - * @param[in] pUserContext Pointer to an HTTP request, passed as an opaque context. + * @param[in] pHttpsRequest - Pointer to an HTTP request. */ -static void _sendHttpsRequest( IotTaskPool_t pTaskPool, - IotTaskPoolJob_t pJob, - void * pUserContext ); - +static void _sendHttpsRequest( _httpsRequest_t * pHttpsRequest ); /** * @brief Receive the HTTPS body specific to an asynchronous type of response. * * @param[in] pHttpsResponse - HTTP response context. * - * @return #IOT_HTTPS_OK - If the the response body was received with no issues. - * #IOT_HTTPS_RECEIVE_ABORT - If the request was cancelled by the Application - * #IOT_HTTPS_PARSING_ERROR - If there was an issue parsing the HTTP response body. + * @return #IOT_HTTPS_OK if the the response body was received with no issues. + * #IOT_HTTPS_RECEIVE_ABORT if the request was cancelled by the Application + * #IOT_HTTPS_PARSING_ERROR if there was an issue parsing the HTTP response body. * #IOT_HTTPS_NETWORK_ERROR if there was an error receiving the data on the network. */ static IotHttpsReturnCode_t _receiveHttpsBodyAsync( _httpsResponse_t * pHttpsResponse ); @@ -553,21 +458,69 @@ static IotHttpsReturnCode_t _receiveHttpsBodyAsync( _httpsResponse_t * pHttpsRes * * @param[in] pHttpsResponse - HTTP response context. * - * @return #IOT_HTTPS_OK - If the the response body was received with no issues. - * #IOT_HTTPS_MESSAGE_TOO_LARGE - If the body from the network is too large to fit into the configured body buffer. - * #IOT_HTTPS_PARSING_ERROR - If there was an issue parsing the HTTP response body. + * @return #IOT_HTTPS_OK if the the response body was received with no issues. + * #IOT_HTTPS_MESSAGE_TOO_LARGE if the body from the network is too large to fit into the configured body buffer. + * #IOT_HTTPS_PARSING_ERROR if there was an issue parsing the HTTP response body. * #IOT_HTTPS_NETWORK_ERROR if there was an error receiving the data on the network. */ static IotHttpsReturnCode_t _receiveHttpsBodySync( _httpsResponse_t * pHttpsResponse ); +/** + * @brief A dummy function for the transport interface receive. + * + * HTTP V1 library handles receiving from the network and hence the transport + * implementation for receive is called by the coreHTTP library. However, it + * will always returns all bytes as successfully read so that `HTTPClient_Send` + * can return a successful status if there are no errors from sending the request. + * + * @param[in] pNetworkContext Implementation-defined network context. + * @param[in] pBuffer Buffer to receive the data into. + * @param[in] bytesToRecv Number of bytes requested from the network. + * + * @return Always returns bytesToRecv or INT32_MAX if bytesToRecv > INT32_MAX. + */ +static int32_t transportRecv( NetworkContext_t * pNetworkContext, + void * pBuffer, + size_t bytesToRecv ); + +/** + * @brief Function for sending data over the network. + * + * @param[in] pNetworkContext Implementation-defined network context. + * @param[in] pBuffer Buffer containing the bytes to send over the network stack. + * @param[in] bytesToSend Number of bytes to send over the network. + * + * @return The number of bytes sent or a negative error code. + */ +static int32_t transportSend( NetworkContext_t * pNetworkContext, + const void * pMessage, + size_t bytesToSend ); + +/** + * @brief A task handle that sends an HTTPS request. + */ +static TaskHandle_t httpsDispatchTask[ IOT_HTTPS_DISPATCH_TASK_COUNT ]; + +/** + * @brief A queue that holds requests that are ready to be sent to the server. + */ +static QueueHandle_t dispatchQueue; + +/** + * @brief Sends requests from the dispatch queue. + * + * @param[in] pParameters User-provided parameters that are left unused. + */ +static void _dispatchTaskRoutine( void * pParameters ); + /** * @brief Schedule the task to send the the HTTP request. * * @param[in] pHttpsRequest - HTTP request context. * - * @return #IOT_HTTPS_OK - If the task to send the HTTP request was successfully scheduled. - * #IOT_HTTPS_INTERNAL_ERROR - If a taskpool job could not be created. - * #IOT_HTTPS_ASYNC_SCHEDULING_ERROR - If there was an error scheduling the job. + * @return #IOT_HTTPS_OK if the task to send the HTTP request was successfully scheduled. + * #IOT_HTTPS_INTERNAL_ERROR if the dispatch queue was full. + * #IOT_HTTPS_ASYNC_SCHEDULING_ERROR if there was an error scheduling the job. */ IotHttpsReturnCode_t _scheduleHttpsRequestSend( _httpsRequest_t * pHttpsRequest ); @@ -578,9 +531,9 @@ IotHttpsReturnCode_t _scheduleHttpsRequestSend( _httpsRequest_t * pHttpsRequest * * @param[in] pHttpsRequest - HTTP request context. * - * @return #IOT_HTTPS_OK - If the request was successfully added to the connection's request queue. - * #IOT_HTTPS_INTERNAL_ERROR - If a taskpool job could not be created. - * #IOT_HTTPS_ASYNC_SCHEDULING_ERROR - If there was an error scheduling the job. + * @return #IOT_HTTPS_OK if the request was successfully added to the connection's request queue. + * #IOT_HTTPS_INTERNAL_ERROR if the dispatch queue was full. + * #IOT_HTTPS_ASYNC_SCHEDULING_ERROR if there was an error scheduling the job. */ IotHttpsReturnCode_t _addRequestToConnectionReqQ( _httpsRequest_t * pHttpsRequest ); @@ -614,11 +567,28 @@ static void _cancelResponse( _httpsResponse_t * pHttpsResponse ); * @param[in] pRespHandle - Non-null HTTP response context. * @param[in] pRespInfo - Response configuration information. * @param[in] pHttpsRequest - HTTP request to grab async information, persistence, and method from. + * + * @return #IOT_HTTPS_OK if the request was successfully added to the connection's request queue. + * #IOT_HTTPS_INSUFFICIENT_MEMORY if the user-provided buffer was on insufficient size. + * #IOT_HTTPS_INVALID_PARAMETER if a parameter was NULL. */ static IotHttpsReturnCode_t _initializeResponse( IotHttpsResponseHandle_t * pRespHandle, IotHttpsResponseInfo_t * pRespInfo, _httpsRequest_t * pHttpsRequest ); +/** + * @brief Convert a status code from coreHTTP to an equivalent status code in the HTTP V1 Library. + * + * @param[in] coreHttpStatus - The status code from coreHTTP. + * + * @return #IOT_HTTPS_OK if the coreHTTP status was #HTTPSuccess. + * #IOT_HTTPS_INVALID_PARAMETER if the coreHTTP status was #HTTPInvalidParameter. + * #IOT_HTTPS_NETWORK_ERROR if the coreHTTP status was #HTTPNetworkError. + * #IOT_HTTPS_INSUFFICIENT_MEMORY if the coreHTTP status was #HTTPInsufficientMemory. + * #IOT_HTTPS_NOT_FOUND if the coreHTTP status was #HTTPHeaderNotFound. + */ +static IotHttpsReturnCode_t _shimConvertStatus( HTTPStatus_t coreHttpStatus ); + /** * @brief Increment the pointer stored in pBufCur depending on the character found in there. * @@ -637,6 +607,9 @@ static void _incrementNextLocationToWriteBeyondParsed( uint8_t ** pBufCur, * * @param[in] pHttpsConnection - HTTPS connection context. * @param[in] pHttpsRequest - HTTPS request context. + * + * @return #IOT_HTTPS_OK if the headers were fully sent successfully. + * #IOT_HTTPS_NETWORK_ERROR if there was an error receiving the data on the network. */ static IotHttpsReturnCode_t _sendHttpsHeadersAndBody( _httpsConnection_t * pHttpsConnection, _httpsRequest_t * pHttpsRequest ); @@ -1049,6 +1022,68 @@ static IotHttpsReturnCode_t _receiveHttpsBodySync( _httpsResponse_t * pHttpsResp /*-----------------------------------------------------------*/ +/** + * @brief Defining a network context for sending packets through the network interface. + * The declaration of the structure is mentioned in the transport_interface.h file. + */ +struct NetworkContext +{ + void * pNetworkConnection; /**< @brief The network connection used for sending packets on the network. */ + const IotNetworkInterface_t * pNetworkInterface; /**< @brief The network interface used to send packets on the network using the above network connection. */ +}; + +/*-----------------------------------------------------------*/ + +static int32_t transportRecv( NetworkContext_t * pNetworkContext, + void * pBuffer, + size_t bytesToRecv ) +{ + int32_t bytesReceived = -1; + + /* This dummy implementation is used for passing a non-NULL parameter. */ + ( void ) pNetworkContext; + ( void ) pBuffer; + ( void ) bytesToRecv; + + /* Always return the number of bytes requested or as many bytes as we can. */ + if( bytesToRecv > ( size_t ) INT32_MAX ) + { + bytesReceived = INT32_MAX; + } + else + { + bytesReceived = bytesToRecv; + } + + return bytesReceived; +} + +/*-----------------------------------------------------------*/ + +static int32_t transportSend( NetworkContext_t * pNetworkContext, + const void * pMessage, + size_t bytesToSend ) +{ + int32_t bytesSent = 0; + + /* Sending the bytes on the network using the network interface. */ + bytesSent = pNetworkContext->pNetworkInterface->send( pNetworkContext->pNetworkConnection, + ( const uint8_t * ) pMessage, + bytesToSend ); + + /* 0 bytes returned for the old HTTP library implied a network error. However, + * #HTTPClient_Send from coreHTTP will block while the return value is 0, so + * the return value must be manually set to -1 to also denote a network error. */ + if( bytesSent == 0 ) + { + bytesSent = -1; + } + + return bytesSent; +} + +/*-----------------------------------------------------------*/ + static void _networkReceiveCallback( void * pNetworkConnection, void * pReceiveContext ) { @@ -1188,7 +1223,7 @@ static void _networkReceiveCallback( void * pNetworkConnection, } else /* Any other error. */ { - IotLogError( "Failed to retrive the HTTPS body for response %p. Error code: %d", pCurrentHttpsResponse, status ); + IotLogError( "Failed to retrieve the HTTPS body for response %p. Error code: %d", pCurrentHttpsResponse, status ); } HTTPS_GOTO_CLEANUP(); @@ -1275,7 +1310,7 @@ static void _networkReceiveCallback( void * pNetworkConnection, pQItem = IotDeQueue_PeekHead( &( pHttpsConnection->reqQ ) ); IotMutex_Unlock( &( pHttpsConnection->connectionMutex ) ); - /* If there is a next request to process, then create a taskpool job to send the request. */ + /* If there is a next request to process, then add a dispatch task to the queue. */ if( pQItem != NULL ) { /* Set this next request to send. */ @@ -1567,86 +1602,6 @@ static void _networkDestroy( _httpsConnection_t * pHttpsConnection ) /*-----------------------------------------------------------*/ -static IotHttpsReturnCode_t _addHeader( _httpsRequest_t * pHttpsRequest, - const char * pName, - uint32_t nameLen, - const char * pValue, - uint32_t valueLen ) -{ - HTTPS_FUNCTION_ENTRY( IOT_HTTPS_OK ); - - int headerFieldSeparatorLen = HTTPS_HEADER_FIELD_SEPARATOR_LENGTH; - uint32_t additionalLength = nameLen + headerFieldSeparatorLen + valueLen + HTTPS_END_OF_HEADER_LINES_INDICATOR_LENGTH; - uint32_t possibleLastHeaderAdditionalLength = HTTPS_END_OF_HEADER_LINES_INDICATOR_LENGTH; - - /* Check if there is enough space to add the header field and value - * (name:value\r\n). We need to add a "\r\n" at the end of headers. The use of - * possibleLastHeaderAdditionalLength is to make sure that there is always - * space for the last "\r\n". */ - if( ( additionalLength + possibleLastHeaderAdditionalLength ) > ( ( uint32_t ) ( pHttpsRequest->pHeadersEnd - pHttpsRequest->pHeadersCur ) ) ) - { - IotLogError( "There is %d space left in the header buffer, but we want to add %d more of header.", - pHttpsRequest->pHeadersEnd - pHttpsRequest->pHeadersCur, - additionalLength + possibleLastHeaderAdditionalLength ); - HTTPS_SET_AND_GOTO_CLEANUP( IOT_HTTPS_INSUFFICIENT_MEMORY ); - } - - memcpy( pHttpsRequest->pHeadersCur, pName, nameLen ); - pHttpsRequest->pHeadersCur += nameLen; - memcpy( pHttpsRequest->pHeadersCur, HTTPS_HEADER_FIELD_SEPARATOR, headerFieldSeparatorLen ); - pHttpsRequest->pHeadersCur += headerFieldSeparatorLen; - memcpy( pHttpsRequest->pHeadersCur, pValue, valueLen ); - pHttpsRequest->pHeadersCur += valueLen; - memcpy( pHttpsRequest->pHeadersCur, HTTPS_END_OF_HEADER_LINES_INDICATOR, HTTPS_END_OF_HEADER_LINES_INDICATOR_LENGTH ); - pHttpsRequest->pHeadersCur += HTTPS_END_OF_HEADER_LINES_INDICATOR_LENGTH; - IotLogDebug( "Wrote header: \"%s: %.*s\r\n\". Space left in request user buffer: %d", - pName, - valueLen, - pValue, - pHttpsRequest->pHeadersEnd - pHttpsRequest->pHeadersCur ); - - HTTPS_FUNCTION_EXIT_NO_CLEANUP(); -} - -/*-----------------------------------------------------------*/ - -static IotHttpsReturnCode_t _networkSend( _httpsConnection_t * pHttpsConnection, - uint8_t * pBuf, - size_t len ) -{ - HTTPS_FUNCTION_ENTRY( IOT_HTTPS_OK ); - - size_t numBytesSent = 0; - size_t numBytesSentTotal = 0; - size_t sendLength = len; - - while( numBytesSentTotal < sendLength ) - { - numBytesSent = pHttpsConnection->pNetworkInterface->send( pHttpsConnection->pNetworkConnection, - &( pBuf[ numBytesSentTotal ] ), - sendLength - numBytesSentTotal ); - - /* pNetworkInterface->send returns 0 on error. */ - if( numBytesSent == 0 ) - { - IotLogError( "Error in sending the HTTPS headers. Error code: %d", numBytesSent ); - break; - } - - numBytesSentTotal += numBytesSent; - } - - if( numBytesSentTotal != sendLength ) - { - IotLogError( "Error sending data on the network. We sent %d but there were total %d.", numBytesSentTotal, sendLength ); - HTTPS_SET_AND_GOTO_CLEANUP( IOT_HTTPS_NETWORK_ERROR ); - } - - HTTPS_FUNCTION_EXIT_NO_CLEANUP(); -} - -/*-----------------------------------------------------------*/ - static IotHttpsReturnCode_t _networkRecv( _httpsConnection_t * pHttpsConnection, uint8_t * pBuf, size_t bufLen, @@ -1684,104 +1639,6 @@ static IotHttpsReturnCode_t _networkRecv( _httpsConnection_t * pHttpsConnection, /*-----------------------------------------------------------*/ -static IotHttpsReturnCode_t _sendHttpsHeaders( _httpsConnection_t * pHttpsConnection, - uint8_t * pHeadersBuf, - uint32_t headersLength, - bool isNonPersistent, - uint32_t contentLength ) -{ - HTTPS_FUNCTION_ENTRY( IOT_HTTPS_OK ); - - const char * connectionHeader = NULL; - int numWritten = 0; - int connectionHeaderLen = 0; - /* The Content-Length header of the form "Content-Length: N\r\n" with a NULL terminator for snprintf. */ - char contentLengthHeaderStr[ HTTPS_MAX_CONTENT_LENGTH_LINE_LENGTH + 1 ]; - - /* The HTTP headers to send after the headers in pHeadersBuf are the Content-Length and the Connection type and - * the final "\r\n" to indicate the end of the the header lines. Note that we are using - * HTTPS_CONNECTION_KEEP_ALIVE_HEADER_LINE_LENGTH because length of "Connection: keep-alive\r\n" is - * more than "Connection: close\r\n". Creating a buffer of bigger size ensures that - * both the connection type strings will fit in the buffer. */ - char finalHeaders[ HTTPS_MAX_CONTENT_LENGTH_LINE_LENGTH + HTTPS_CONNECTION_KEEP_ALIVE_HEADER_LINE_LENGTH + HTTPS_END_OF_HEADER_LINES_INDICATOR_LENGTH ] = { 0 }; - - /* Send the headers passed into this function first. These headers are not terminated with a second set of "\r\n". */ - status = _networkSend( pHttpsConnection, pHeadersBuf, headersLength ); - - if( HTTPS_FAILED( status ) ) - { - IotLogError( "Error sending the HTTPS headers in the request user buffer. Error code: %d", status ); - HTTPS_GOTO_CLEANUP(); - } - - /* If there is a Content-Length, then write that to the finalHeaders to send. */ - if( contentLength > 0 ) - { - numWritten = snprintf( contentLengthHeaderStr, - sizeof( contentLengthHeaderStr ), - "%s: %u\r\n", - HTTPS_CONTENT_LENGTH_HEADER, - ( unsigned int ) contentLength ); - } - - if( ( numWritten < 0 ) || ( numWritten >= ( ( int ) sizeof( contentLengthHeaderStr ) ) ) ) - { - IotLogError( "Internal error in snprintf() in _sendHttpsHeaders(). Error code %d.", numWritten ); - HTTPS_SET_AND_GOTO_CLEANUP( IOT_HTTPS_INTERNAL_ERROR ); - } - - /* snprintf() succeeded so copy that to the finalHeaders. */ - memcpy( finalHeaders, contentLengthHeaderStr, numWritten ); - - /* Write the connection persistence type to the final headers. */ - if( isNonPersistent ) - { - connectionHeader = HTTPS_CONNECTION_CLOSE_HEADER_LINE; - connectionHeaderLen = FAST_MACRO_STRLEN( HTTPS_CONNECTION_CLOSE_HEADER_LINE ); - } - else - { - connectionHeader = HTTPS_CONNECTION_KEEP_ALIVE_HEADER_LINE; - connectionHeaderLen = FAST_MACRO_STRLEN( HTTPS_CONNECTION_KEEP_ALIVE_HEADER_LINE ); - } - - memcpy( &finalHeaders[ numWritten ], connectionHeader, connectionHeaderLen ); - numWritten += connectionHeaderLen; - memcpy( &finalHeaders[ numWritten ], HTTPS_END_OF_HEADER_LINES_INDICATOR, HTTPS_END_OF_HEADER_LINES_INDICATOR_LENGTH ); - numWritten += HTTPS_END_OF_HEADER_LINES_INDICATOR_LENGTH; - - status = _networkSend( pHttpsConnection, ( uint8_t * ) finalHeaders, numWritten ); - - if( HTTPS_FAILED( status ) ) - { - IotLogError( "Error sending final HTTPS Headers \r\n%s. Error code: %d", finalHeaders, status ); - HTTPS_GOTO_CLEANUP(); - } - - HTTPS_FUNCTION_EXIT_NO_CLEANUP(); -} - -/*-----------------------------------------------------------*/ - -static IotHttpsReturnCode_t _sendHttpsBody( _httpsConnection_t * pHttpsConnection, - uint8_t * pBodyBuf, - uint32_t bodyLength ) -{ - HTTPS_FUNCTION_ENTRY( IOT_HTTPS_OK ); - - status = _networkSend( pHttpsConnection, pBodyBuf, bodyLength ); - - if( HTTPS_FAILED( status ) ) - { - IotLogError( "Error sending final HTTPS body at location %p. Error code: %d", pBodyBuf, status ); - HTTPS_GOTO_CLEANUP(); - } - - HTTPS_FUNCTION_EXIT_NO_CLEANUP(); -} - -/*-----------------------------------------------------------*/ - static IotHttpsReturnCode_t _parseHttpsMessage( _httpParserInfo_t * pHttpParserInfo, char * pBuf, size_t len ) @@ -2086,46 +1943,53 @@ static IotHttpsReturnCode_t _sendHttpsHeadersAndBody( _httpsConnection_t * pHttp { HTTPS_FUNCTION_ENTRY( IOT_HTTPS_OK ); - /* Send the HTTP headers. */ - status = _sendHttpsHeaders( pHttpsConnection, - pHttpsRequest->pHeaders, - pHttpsRequest->pHeadersCur - pHttpsRequest->pHeaders, - pHttpsRequest->isNonPersistent, - pHttpsRequest->bodyLength ); + HTTPStatus_t coreHttpStatus = HTTPSuccess; + HTTPRequestHeaders_t coreHttpRequestHeaders; + HTTPResponse_t coreHttpResponse; + TransportInterface_t transportInterface; + NetworkContext_t networkContext; + char pHttpsMinimalMockedResponse[ FAST_MACRO_STRLEN( HTTPS_MINIMAL_MOCKED_RESPONSE ) + 1 ] = HTTPS_MINIMAL_MOCKED_RESPONSE; + uint32_t sendFlags = 0; + + coreHttpRequestHeaders.pBuffer = pHttpsRequest->pHeaders; + coreHttpRequestHeaders.bufferLen = ( size_t ) ( pHttpsRequest->pHeadersEnd - pHttpsRequest->pHeaders ); + coreHttpRequestHeaders.headersLen = ( size_t ) ( pHttpsRequest->pHeadersCur - pHttpsRequest->pHeaders ); + + networkContext.pNetworkConnection = pHttpsConnection->pNetworkConnection; + networkContext.pNetworkInterface = pHttpsConnection->pNetworkInterface; + + transportInterface.send = transportSend; + transportInterface.recv = transportRecv; + transportInterface.pNetworkContext = &networkContext; + + /* Fill buffer with a mocked response so that http-parser returns successfully. */ + memset( &coreHttpResponse, 0, sizeof( HTTPResponse_t ) ); + coreHttpResponse.pBuffer = ( uint8_t * ) pHttpsMinimalMockedResponse; + coreHttpResponse.bufferLen = FAST_MACRO_STRLEN( HTTPS_MINIMAL_MOCKED_RESPONSE ); + + coreHttpStatus = HTTPClient_Send( &transportInterface, + &coreHttpRequestHeaders, + pHttpsRequest->pBody, + ( size_t ) pHttpsRequest->bodyLength, + &coreHttpResponse, + sendFlags ); + status = _shimConvertStatus( coreHttpStatus ); if( HTTPS_FAILED( status ) ) { - IotLogError( "Error sending the HTTPS headers with error code: %d", status ); + IotLogError( "Error sending the HTTPS request with error code: %d", status ); HTTPS_GOTO_CLEANUP(); } - IotLogDebug( "Sent HTTPS headers for request %p.", pHttpsRequest ); - - if( ( pHttpsRequest->pBody != NULL ) && ( pHttpsRequest->bodyLength > 0 ) ) - { - status = _sendHttpsBody( pHttpsConnection, pHttpsRequest->pBody, pHttpsRequest->bodyLength ); - - if( HTTPS_FAILED( status ) ) - { - IotLogError( "Error sending final HTTPS body. Return code: %d", status ); - HTTPS_GOTO_CLEANUP(); - } - - IotLogDebug( "Sent HTTPS body for request %p.", pHttpsRequest ); - } - HTTPS_FUNCTION_EXIT_NO_CLEANUP(); } /*-----------------------------------------------------------*/ -static void _sendHttpsRequest( IotTaskPool_t pTaskPool, - IotTaskPoolJob_t pJob, - void * pUserContext ) +static void _sendHttpsRequest( _httpsRequest_t * pHttpsRequest ) { HTTPS_FUNCTION_ENTRY( IOT_HTTPS_OK ); - _httpsRequest_t * pHttpsRequest = ( _httpsRequest_t * ) ( pUserContext ); _httpsConnection_t * pHttpsConnection = pHttpsRequest->pHttpsConnection; _httpsResponse_t * pHttpsResponse = pHttpsRequest->pHttpsResponse; IotHttpsReturnCode_t disconnectStatus = IOT_HTTPS_OK; @@ -2133,9 +1997,6 @@ static void _sendHttpsRequest( IotTaskPool_t pTaskPool, IotLink_t * pQItem = NULL; _httpsRequest_t * pNextHttpsRequest = NULL; - ( void ) pTaskPool; - ( void ) pJob; - IotLogDebug( "Task with request ID: %p started.", pHttpsRequest ); if( pHttpsRequest->cancelled == true ) @@ -2321,36 +2182,49 @@ static void _sendHttpsRequest( IotTaskPool_t pTaskPool, /*-----------------------------------------------------------*/ +static void _dispatchTaskRoutine( void * pParameters ) +{ + ( void ) pParameters; + + _httpsRequest_t * pHttpsRequest = NULL; + + for( ; ; ) + { + /* If there are no requests in the dispatch queue, try again. */ + if( xQueueReceive( dispatchQueue, + &pHttpsRequest, + IOT_HTTPS_QUEUE_RECV_TICKS ) == pdFALSE ) + { + IotLogDebug( "No requests to send. Trying again." ); + continue; + } + + _sendHttpsRequest( pHttpsRequest ); + } +} + +/*-----------------------------------------------------------*/ + IotHttpsReturnCode_t _scheduleHttpsRequestSend( _httpsRequest_t * pHttpsRequest ) { HTTPS_FUNCTION_ENTRY( IOT_HTTPS_OK ); - IotTaskPoolError_t taskPoolStatus = IOT_TASKPOOL_SUCCESS; - _httpsConnection_t * pHttpsConnection = pHttpsRequest->pHttpsConnection; + BaseType_t queueStatus = pdTRUE; /* Set the request to scheduled even if scheduling fails. */ pHttpsRequest->scheduled = true; - taskPoolStatus = IotTaskPool_CreateJob( _sendHttpsRequest, - ( void * ) ( pHttpsRequest ), - &( pHttpsConnection->taskPoolJobStorage ), - &( pHttpsConnection->taskPoolJob ) ); + queueStatus = xQueueSendToBack( dispatchQueue, &pHttpsRequest, IOT_HTTPS_QUEUE_SEND_TICKS ); - /* Creating a task pool job should never fail when parameters are valid. */ - if( taskPoolStatus != IOT_TASKPOOL_SUCCESS ) + /* Occurs when the queue remains full for #IOT_HTTPS_QUEUE_SEND_TICKS. */ + if( queueStatus != pdTRUE ) { - IotLogError( "Error creating a taskpool job for request servicing. Error code: %d", taskPoolStatus ); + IotLogError( "Failed to add request to full dispatch queue of size %u. Error code: %d", + IOT_HTTPS_DISPATCH_QUEUE_SIZE, + ( int ) queueStatus ); HTTPS_SET_AND_GOTO_CLEANUP( IOT_HTTPS_INTERNAL_ERROR ); } - taskPoolStatus = IotTaskPool_Schedule( IOT_SYSTEM_TASKPOOL, pHttpsConnection->taskPoolJob, 0 ); - - if( taskPoolStatus != IOT_TASKPOOL_SUCCESS ) - { - IotLogError( "Failed to schedule taskpool job. Error code: %d", taskPoolStatus ); - HTTPS_SET_AND_GOTO_CLEANUP( IOT_HTTPS_ASYNC_SCHEDULING_ERROR ); - } - HTTPS_FUNCTION_EXIT_NO_CLEANUP(); } @@ -2399,17 +2273,17 @@ IotHttpsReturnCode_t _addRequestToConnectionReqQ( _httpsRequest_t * pHttpsReques if( ( IotDeQueue_IsEmpty( &( pHttpsConnection->reqQ ) ) ) && ( IotDeQueue_IsEmpty( &( pHttpsConnection->respQ ) ) ) ) { - IotLogDebug( "Both the request and response queue are empty, so schedule the request to run in the taskpool." ); + IotLogDebug( "Both the request and response queue are empty, so schedule the request to run in the dispatch queue." ); scheduleRequest = true; } - /* Place into the connection's request to have a taskpool worker schedule to serve it later. */ + /* Place into the connection's request to have a dispatch task serve it later. */ IotDeQueue_EnqueueTail( &( pHttpsConnection->reqQ ), &( pHttpsRequest->link ) ); IotMutex_Unlock( &( pHttpsConnection->connectionMutex ) ); if( scheduleRequest ) { - /* This routine schedules a task pool worker to send the request. If a worker is available immediately, then + /* This routine schedules a dispatch task to send the request. If a task is available immediately, then * the request is sent right away. */ status = _scheduleHttpsRequestSend( pHttpsRequest ); @@ -2449,6 +2323,73 @@ IotHttpsReturnCode_t IotHttpsClient_Init( void ) { HTTPS_FUNCTION_ENTRY( IOT_HTTPS_OK ); + uint8_t dispatchTaskIndex = 0; + + /* Allocate the dispatch queue. */ + #if IOT_HTTPS_DISPATCH_USE_STATIC_MEMORY == 1 + /* An array that holds the TCB of each dispatch task. */ + static StaticTask_t dispatchTaskBuffer[ IOT_HTTPS_DISPATCH_TASK_COUNT ]; + + /* An array that holds the stack of each dispatch task. + * The size of StackType_t is dependent on the RTOS port. */ + static StackType_t dispatchTaskStack[ IOT_HTTPS_DISPATCH_TASK_COUNT ][ IOT_HTTPS_DISPATCH_TASK_STACK_SIZE ]; + + /* A data structure to contain a statically allocated queue. */ + static StaticQueue_t dispatchQueueBuffer; + + /* A buffer to hold static memory for the dispatch queue. */ + static uint8_t dispatchQueueStorageBuffer[ IOT_HTTPS_DISPATCH_QUEUE_SIZE * sizeof( _httpsRequest_t * ) ]; + + dispatchQueue = xQueueCreateStatic( IOT_HTTPS_DISPATCH_QUEUE_SIZE, + sizeof( _httpsRequest_t * ), + dispatchQueueStorageBuffer, + &dispatchQueueBuffer ); + #else /* if IOT_HTTPS_DISPATCH_USE_STATIC_MEMORY == 1 */ + BaseType_t taskCreationResult = pdFALSE; + + dispatchQueue = xQueueCreate( IOT_HTTPS_DISPATCH_QUEUE_SIZE, sizeof( _httpsRequest_t * ) ); + #endif /* if IOT_HTTPS_DISPATCH_USE_STATIC_MEMORY == 1 */ + + if( dispatchQueue == NULL ) + { + /* Queue was not created and must not be used. */ + IotLogError( "Failed to allocate resources for dispatch queue.", status ); + HTTPS_SET_AND_GOTO_CLEANUP( IOT_HTTPS_INTERNAL_ERROR ); + } + + /* Start tasks that send requests from the dispatch queue. */ + for( dispatchTaskIndex = 0; dispatchTaskIndex < IOT_HTTPS_DISPATCH_TASK_COUNT; ++dispatchTaskIndex ) + { + #if IOT_HTTPS_DISPATCH_USE_STATIC_MEMORY == 1 + httpsDispatchTask[ dispatchTaskIndex ] = xTaskCreateStatic( _dispatchTaskRoutine, + "iot_thread", + IOT_HTTPS_DISPATCH_TASK_STACK_SIZE, + NULL, + IOT_HTTPS_DISPATCH_TASK_PRIORITY, + dispatchTaskStack[ dispatchTaskIndex ], + &dispatchTaskBuffer[ dispatchTaskIndex ] ); + + if( httpsDispatchTask[ dispatchTaskIndex ] == NULL ) + { + IotLogError( "Failed to allocate static memory for request task.", status ); + HTTPS_SET_AND_GOTO_CLEANUP( IOT_HTTPS_INTERNAL_ERROR ); + } + #else /* ifdef IOT_HTTPS_DISPATCH_USE_STATIC_MEMORY */ + taskCreationResult = xTaskCreate( _dispatchTaskRoutine, + "iot_thread", + IOT_HTTPS_DISPATCH_TASK_STACK_SIZE, + NULL, + IOT_HTTPS_DISPATCH_TASK_PRIORITY, + &httpsDispatchTask[ dispatchTaskIndex ] ); + + if( taskCreationResult != pdPASS ) + { + IotLogError( "Failed to allocate dynamic memory for request task.", status ); + HTTPS_SET_AND_GOTO_CLEANUP( IOT_HTTPS_INTERNAL_ERROR ); + } + #endif /* ifdef IOT_HTTPS_DISPATCH_USE_STATIC_MEMORY */ + } + /* This sets all member in the _httpParserSettings to zero. It does not return any errors. */ http_parser_settings_init( &_httpParserSettings ); @@ -2461,14 +2402,42 @@ IotHttpsReturnCode_t IotHttpsClient_Init( void ) _httpParserSettings.on_body = _httpParserOnBodyCallback; _httpParserSettings.on_message_complete = _httpParserOnMessageCompleteCallback; -/* This code prints debugging information and is, therefore, compiled only when - * log level is set to IOT_LOG_DEBUG. */ + /* This code prints debugging information and is, therefore, compiled only when + * log level is set to IOT_LOG_DEBUG. */ #if ( LIBRARY_LOG_LEVEL == IOT_LOG_DEBUG ) _httpParserSettings.on_chunk_header = _httpParserOnChunkHeaderCallback; _httpParserSettings.on_chunk_complete = _httpParserOnChunkCompleteCallback; #endif - HTTPS_GOTO_CLEANUP(); - HTTPS_FUNCTION_EXIT_NO_CLEANUP(); + HTTPS_FUNCTION_CLEANUP_BEGIN(); + + /* Upon error, reset to original state, freeing up any dynamic memory. */ + if( HTTPS_FAILED( status ) ) + { + #if IOT_HTTPS_DISPATCH_USE_STATIC_MEMORY != 1 + /* Free memory used for the dispatch queue. */ + if( dispatchQueue != NULL ) + { + vQueueDelete( dispatchQueue ); + } + #endif /* if IOT_HTTPS_DISPATCH_USE_STATIC_MEMORY != 1 */ + dispatchQueue = NULL; + + /* Delete the tasks that send requests from the dispatch queue. */ + for( dispatchTaskIndex = 0; dispatchTaskIndex < IOT_HTTPS_DISPATCH_TASK_COUNT; ++dispatchTaskIndex ) + { + if( httpsDispatchTask[ dispatchTaskIndex ] != NULL ) + { + #if IOT_HTTPS_DISPATCH_USE_STATIC_MEMORY == 1 + vTaskSuspend( httpsDispatchTask[ dispatchTaskIndex ] ); + #else + vTaskDelete( httpsDispatchTask[ dispatchTaskIndex ] ); + #endif + httpsDispatchTask[ dispatchTaskIndex ] = NULL; + } + } + } + + HTTPS_FUNCTION_CLEANUP_END(); } /*-----------------------------------------------------------*/ @@ -2579,9 +2548,70 @@ static IotHttpsReturnCode_t _initializeResponse( IotHttpsResponseHandle_t * pRes /*-----------------------------------------------------------*/ +static IotHttpsReturnCode_t _shimConvertStatus( HTTPStatus_t coreHttpStatus ) +{ + IotHttpsReturnCode_t returnStatus = IOT_HTTPS_OK; + + /* Note that coreHTTP will not receive any data so status codes relating + * to receiving a response are not mapped. */ + switch( coreHttpStatus ) + { + case HTTPSuccess: + returnStatus = IOT_HTTPS_OK; + break; + + case HTTPInvalidParameter: + returnStatus = IOT_HTTPS_INVALID_PARAMETER; + break; + + case HTTPNetworkError: + returnStatus = IOT_HTTPS_NETWORK_ERROR; + break; + + case HTTPInsufficientMemory: + returnStatus = IOT_HTTPS_INSUFFICIENT_MEMORY; + break; + + case HTTPHeaderNotFound: + returnStatus = IOT_HTTPS_NOT_FOUND; + break; + + default: + returnStatus = IOT_HTTPS_FATAL; + break; + } + + return returnStatus; +} + +/* --------------------------------------------------------- */ + void IotHttpsClient_Cleanup( void ) { - /* There is nothing to clean up here as of now. */ + uint8_t dispatchTaskIndex = 0; + + #if IOT_HTTPS_DISPATCH_USE_STATIC_MEMORY != 1 + /* Free memory used for the dispatch queue. */ + if( dispatchQueue != NULL ) + { + vQueueDelete( dispatchQueue ); + } + #endif /* if IOT_HTTPS_DISPATCH_USE_STATIC_MEMORY != 1 */ + dispatchQueue = NULL; + + /* Delete the tasks that send requests from the dispatch queue. */ + for( dispatchTaskIndex = 0; dispatchTaskIndex < IOT_HTTPS_DISPATCH_TASK_COUNT; ++dispatchTaskIndex ) + { + if( httpsDispatchTask[ dispatchTaskIndex ] != NULL ) + { + #if IOT_HTTPS_DISPATCH_USE_STATIC_MEMORY == 1 + vTaskSuspend( httpsDispatchTask[ dispatchTaskIndex ] ); + #else + vTaskDelete( httpsDispatchTask[ dispatchTaskIndex ] ); + #endif + httpsDispatchTask[ dispatchTaskIndex ] = NULL; + } + } } /* --------------------------------------------------------- */ @@ -2606,7 +2636,7 @@ IotHttpsReturnCode_t IotHttpsClient_Connect( IotHttpsConnectionHandle_t * pConnH if( HTTPS_FAILED( status ) ) { - IotLogError( "Error disconnecting a connected *pConnHandle passed to IotHttpsClient_Connect().Error code %d", status ); + IotLogError( "Error disconnecting a connected *pConnHandle passed to IotHttpsClient_Connect(). Error code %d", status ); *pConnHandle = NULL; HTTPS_GOTO_CLEANUP(); } @@ -2637,7 +2667,7 @@ IotHttpsReturnCode_t IotHttpsClient_Disconnect( IotHttpsConnectionHandle_t connH HTTPS_ON_NULL_ARG_GOTO_CLEANUP( connHandle ); - /* If this routine is currently is progress by another thread, for instance the taskpool worker that received a + /* If this routine is currently is progress by another thread, for instance the dispatch task that received a * network error after sending, then return right away because connection resources are being used. */ if( IotMutex_TryLock( &( connHandle->connectionMutex ) ) == false ) { @@ -2733,12 +2763,11 @@ IotHttpsReturnCode_t IotHttpsClient_InitializeRequest( IotHttpsRequestHandle_t * { HTTPS_FUNCTION_ENTRY( IOT_HTTPS_OK ); + HTTPStatus_t coreHttpStatus = HTTPSuccess; + HTTPRequestHeaders_t coreHttpRequestHeaders; + HTTPRequestInfo_t coreHttpRequestInfo; + _httpsRequest_t * pHttpsRequest = NULL; - size_t additionalLength = 0; - size_t spaceLen = 1; - char * pSpace = " "; - size_t httpsMethodLen = 0; - size_t httpsProtocolVersionLen = FAST_MACRO_STRLEN( HTTPS_PROTOCOL_VERSION ); /* Check for NULL parameters in the public API. */ HTTPS_ON_NULL_ARG_GOTO_CLEANUP( pReqHandle ); @@ -2762,79 +2791,41 @@ IotHttpsReturnCode_t IotHttpsClient_InitializeRequest( IotHttpsRequestHandle_t * pReqInfo->userBuffer.bufferLen, requestUserBufferMinimumSize ); - /* Set the request contet to the start of the userbuffer. */ + /* Set the request context to the start of the user buffer. */ pHttpsRequest = ( _httpsRequest_t * ) ( pReqInfo->userBuffer.pBuffer ); - /* Clear out the user buffer. */ - memset( pReqInfo->userBuffer.pBuffer, 0, pReqInfo->userBuffer.bufferLen ); /* Set the start of the headers to the end of the request context in the user buffer. */ pHttpsRequest->pHeaders = ( uint8_t * ) pHttpsRequest + sizeof( _httpsRequest_t ); pHttpsRequest->pHeadersEnd = ( uint8_t * ) pHttpsRequest + pReqInfo->userBuffer.bufferLen; pHttpsRequest->pHeadersCur = pHttpsRequest->pHeaders; - /* Get the length of the HTTP method. */ - httpsMethodLen = strlen( _pHttpsMethodStrings[ pReqInfo->method ] ); + /* Map coreHTTP objects to be used by #HTTPClient_InitializeRequestHeaders. */ + coreHttpRequestHeaders.pBuffer = pHttpsRequest->pHeaders; + coreHttpRequestHeaders.bufferLen = ( size_t ) ( pHttpsRequest->pHeadersEnd - pHttpsRequest->pHeaders ); - /* Add the request line to the header buffer. */ - additionalLength = httpsMethodLen + \ - spaceLen + \ - pReqInfo->pathLen + \ - spaceLen + \ - httpsProtocolVersionLen + \ - HTTPS_END_OF_HEADER_LINES_INDICATOR_LENGTH; + coreHttpRequestInfo.pMethod = _pHttpsMethodStrings[ pReqInfo->method ]; + coreHttpRequestInfo.methodLen = ( size_t ) strlen( _pHttpsMethodStrings[ pReqInfo->method ] ); + coreHttpRequestInfo.pPath = pReqInfo->pPath; + coreHttpRequestInfo.pathLen = ( size_t ) pReqInfo->pathLen; + coreHttpRequestInfo.pHost = pReqInfo->pHost; + coreHttpRequestInfo.hostLen = ( size_t ) pReqInfo->hostLen; - if( ( additionalLength + pHttpsRequest->pHeadersCur ) > ( pHttpsRequest->pHeadersEnd ) ) + if( pHttpsRequest->isNonPersistent == false ) { - IotLogError( "Request line does not fit into the request user buffer: \"%s %.*s HTTP/1.1\\r\\n\" . ", - _pHttpsMethodStrings[ pReqInfo->method ], - pReqInfo->pathLen, - pReqInfo->pPath ); - IotLogError( "The length needed is %d and the space available is %d.", additionalLength, pHttpsRequest->pHeadersEnd - pHttpsRequest->pHeadersCur ); - HTTPS_SET_AND_GOTO_CLEANUP( IOT_HTTPS_INSUFFICIENT_MEMORY ); + coreHttpRequestInfo.reqFlags = HTTP_REQUEST_KEEP_ALIVE_FLAG; } - /* Write " HTTP/1.1\r\n" to the start of the header space. */ - memcpy( pHttpsRequest->pHeadersCur, _pHttpsMethodStrings[ pReqInfo->method ], httpsMethodLen ); - pHttpsRequest->pHeadersCur += httpsMethodLen; - memcpy( pHttpsRequest->pHeadersCur, pSpace, spaceLen ); - pHttpsRequest->pHeadersCur += spaceLen; - - if( pReqInfo->pPath == NULL ) - { - pReqInfo->pPath = HTTPS_EMPTY_PATH; - pReqInfo->pathLen = FAST_MACRO_STRLEN( HTTPS_EMPTY_PATH ); - } - - memcpy( pHttpsRequest->pHeadersCur, pReqInfo->pPath, pReqInfo->pathLen ); - pHttpsRequest->pHeadersCur += pReqInfo->pathLen; - memcpy( pHttpsRequest->pHeadersCur, pSpace, spaceLen ); - pHttpsRequest->pHeadersCur += spaceLen; - memcpy( pHttpsRequest->pHeadersCur, HTTPS_PROTOCOL_VERSION, httpsProtocolVersionLen ); - pHttpsRequest->pHeadersCur += httpsProtocolVersionLen; - memcpy( pHttpsRequest->pHeadersCur, HTTPS_END_OF_HEADER_LINES_INDICATOR, HTTPS_END_OF_HEADER_LINES_INDICATOR_LENGTH ); - pHttpsRequest->pHeadersCur += HTTPS_END_OF_HEADER_LINES_INDICATOR_LENGTH; - - /* Add the User-Agent header. */ - status = _addHeader( pHttpsRequest, HTTPS_USER_AGENT_HEADER, FAST_MACRO_STRLEN( HTTPS_USER_AGENT_HEADER ), IOT_HTTPS_USER_AGENT, FAST_MACRO_STRLEN( IOT_HTTPS_USER_AGENT ) ); + coreHttpStatus = HTTPClient_InitializeRequestHeaders( &coreHttpRequestHeaders, + &coreHttpRequestInfo ); + status = _shimConvertStatus( coreHttpStatus ); if( HTTPS_FAILED( status ) ) { - IotLogError( "Failed to write header to the request user buffer: \"User-Agent: %s\\r\\n\" . Error code: %d", - IOT_HTTPS_USER_AGENT, - status ); HTTPS_GOTO_CLEANUP(); } - status = _addHeader( pHttpsRequest, HTTPS_HOST_HEADER, FAST_MACRO_STRLEN( HTTPS_HOST_HEADER ), pReqInfo->pHost, pReqInfo->hostLen ); - - if( HTTPS_FAILED( status ) ) - { - IotLogError( "Failed to write \"Host: %.*s\\r\\n\" to the request user buffer. Error code: %d", - pReqInfo->hostLen, - pReqInfo->pHost, - status ); - HTTPS_GOTO_CLEANUP(); - } + /* Update the original library based on coreHTTP's output. */ + pHttpsRequest->pHeadersCur = pHttpsRequest->pHeaders + coreHttpRequestHeaders.headersLen; if( pReqInfo->isAsync ) { @@ -2889,6 +2880,9 @@ IotHttpsReturnCode_t IotHttpsClient_AddHeader( IotHttpsRequestHandle_t reqHandle { HTTPS_FUNCTION_ENTRY( IOT_HTTPS_OK ); + HTTPStatus_t coreHttpStatus = HTTPSuccess; + HTTPRequestHeaders_t coreHttpRequestHeaders; + /* Check for NULL pointer paramters. */ HTTPS_ON_NULL_ARG_GOTO_CLEANUP( pName ); HTTPS_ON_NULL_ARG_GOTO_CLEANUP( pValue ); @@ -2938,8 +2932,13 @@ IotHttpsReturnCode_t IotHttpsClient_AddHeader( IotHttpsRequestHandle_t reqHandle "Attempting to add auto-generated header %s. This is not allowed.", HTTPS_USER_AGENT_HEADER ); + /* Map coreHTTP objects to be used by #HTTPClient_AddHeader. */ + coreHttpRequestHeaders.pBuffer = reqHandle->pHeaders; + coreHttpRequestHeaders.bufferLen = ( size_t ) ( reqHandle->pHeadersEnd - reqHandle->pHeaders ); + coreHttpRequestHeaders.headersLen = ( size_t ) ( reqHandle->pHeadersCur - reqHandle->pHeaders ); - status = _addHeader( reqHandle, pName, nameLen, pValue, valueLen ); + coreHttpStatus = HTTPClient_AddHeader( &coreHttpRequestHeaders, pName, nameLen, pValue, valueLen ); + status = _shimConvertStatus( coreHttpStatus ); if( HTTPS_FAILED( status ) ) { @@ -2947,6 +2946,9 @@ IotHttpsReturnCode_t IotHttpsClient_AddHeader( IotHttpsRequestHandle_t reqHandle HTTPS_GOTO_CLEANUP(); } + /* Update the original library based on coreHTTP's output. */ + reqHandle->pHeadersCur = reqHandle->pHeaders + coreHttpRequestHeaders.headersLen; + HTTPS_FUNCTION_EXIT_NO_CLEANUP(); } diff --git a/libraries/c_sdk/standard/https/src/iot_https_utils.c b/libraries/c_sdk/standard/https/src/iot_https_utils.c index 673c592f80e..5134f11c780 100644 --- a/libraries/c_sdk/standard/https/src/iot_https_utils.c +++ b/libraries/c_sdk/standard/https/src/iot_https_utils.c @@ -1,5 +1,5 @@ /* - * FreeRTOS HTTPS Client V1.1.3 + * FreeRTOS HTTPS Client V1.2.0 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/https/src/private/iot_https_internal.h b/libraries/c_sdk/standard/https/src/private/iot_https_internal.h index 50a7949c6bb..118bf24722d 100644 --- a/libraries/c_sdk/standard/https/src/private/iot_https_internal.h +++ b/libraries/c_sdk/standard/https/src/private/iot_https_internal.h @@ -1,5 +1,5 @@ /* - * FreeRTOS HTTPS Client V1.1.3 + * FreeRTOS HTTPS Client V1.2.0 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -29,27 +29,27 @@ /* The config header is always included first. */ #include "iot_config.h" -/* Standard Includes. */ +/* Standard includes. */ #include #include #include #include +/* Kernel includes. */ +#include "queue.h" + +/* coreHTTP includes. */ +#include "core_http_client.h" + /* Third party http-parser include. */ #include "http_parser.h" /* HTTPS Client library includes. */ #include "iot_https_client.h" -/* Task pool include. */ -#include "iot_taskpool.h" - /* Linear containers (lists and queues) include. */ #include "iot_linear_containers.h" -/* Types include. */ -#include "types/iot_taskpool_types.h" - /* Platform layer includes. */ #include "platform/iot_threads.h" #include "platform/iot_network.h" @@ -133,16 +133,23 @@ /* Configure logs for HTTPS Client functions. */ #ifdef IOT_LOG_LEVEL_HTTPS - #define LIBRARY_LOG_LEVEL IOT_LOG_LEVEL_HTTPS + #ifndef LIBRARY_LOG_LEVEL + #define LIBRARY_LOG_LEVEL IOT_LOG_LEVEL_HTTPS + #endif #else - #ifdef IOT_LOG_LEVEL_GLOBAL - #define LIBRARY_LOG_LEVEL IOT_LOG_LEVEL_GLOBAL - #else - #define LIBRARY_LOG_LEVEL IOT_LOG_NONE + #ifndef LIBRARY_LOG_LEVEL + #ifdef IOT_LOG_LEVEL_GLOBAL + #define LIBRARY_LOG_LEVEL IOT_LOG_LEVEL_GLOBAL + #else + #define LIBRARY_LOG_LEVEL IOT_LOG_NONE + #endif #endif +#endif /* ifdef IOT_LOG_LEVEL_HTTPS */ + +#ifndef LIBRARY_LOG_NAME + #define LIBRARY_LOG_NAME ( "HTTPS Client" ) #endif -#define LIBRARY_LOG_NAME ( "HTTPS Client" ) #include "iot_logging_setup.h" /* @@ -151,6 +158,9 @@ */ #if IOT_STATIC_MEMORY_ONLY == 1 #include "private/iot_static_memory.h" + #ifndef IOT_HTTPS_DISPATCH_USE_STATIC_MEMORY + #define IOT_HTTPS_DISPATCH_USE_STATIC_MEMORY ( 1 ) /* Use static memory for dispatch queue and tasks. */ + #endif #endif /** @@ -160,26 +170,60 @@ * Provide default values for undefined configuration constants. */ #ifndef AWS_IOT_HTTPS_ENABLE_METRICS - #define AWS_IOT_HTTPS_ENABLE_METRICS ( 1 ) -#endif -#ifndef IOT_HTTPS_USER_AGENT - #define IOT_HTTPS_USER_AGENT "amazon-freertos" + #define AWS_IOT_HTTPS_ENABLE_METRICS ( 1 ) #endif #ifndef IOT_HTTPS_MAX_FLUSH_BUFFER_SIZE - #define IOT_HTTPS_MAX_FLUSH_BUFFER_SIZE ( 1024 ) + #define IOT_HTTPS_MAX_FLUSH_BUFFER_SIZE ( 1024 ) #endif #ifndef IOT_HTTPS_RESPONSE_WAIT_MS - #define IOT_HTTPS_RESPONSE_WAIT_MS ( 1000 ) + #define IOT_HTTPS_RESPONSE_WAIT_MS ( 1000 ) #endif #ifndef IOT_HTTPS_MAX_HOST_NAME_LENGTH - #define IOT_HTTPS_MAX_HOST_NAME_LENGTH ( 255 ) /* Per FQDN, the maximum host name length is 255 bytes. */ + #define IOT_HTTPS_MAX_HOST_NAME_LENGTH ( 255 ) /* Per FQDN, the maximum host name length is 255 bytes. */ #endif #ifndef IOT_HTTPS_MAX_ALPN_PROTOCOLS_LENGTH - #define IOT_HTTPS_MAX_ALPN_PROTOCOLS_LENGTH ( 255 ) /* The maximum alpn protocols length is chosen arbitrarily. */ + #define IOT_HTTPS_MAX_ALPN_PROTOCOLS_LENGTH ( 255 ) /* The maximum alpn protocols length is chosen arbitrarily. */ +#endif +#ifndef IOT_HTTPS_QUEUE_RECV_TICKS + #define IOT_HTTPS_QUEUE_RECV_TICKS ( portMAX_DELAY ) /* The ticks to wait for a #xQueueReceive to complete. */ +#endif +#ifndef IOT_HTTPS_QUEUE_SEND_TICKS + #define IOT_HTTPS_QUEUE_SEND_TICKS ( 0U ) /* The ticks to wait for a #xQueueSendToBack to complete. */ +#endif +#ifndef IOT_HTTPS_DISPATCH_QUEUE_SIZE + #define IOT_HTTPS_DISPATCH_QUEUE_SIZE ( 4U ) /* The size of the queue containing requests ready to send to the server. */ +#endif +#ifndef IOT_HTTPS_DISPATCH_TASK_COUNT + #define IOT_HTTPS_DISPATCH_TASK_COUNT ( 2U ) /* The number of tasks that send requests from the queue. */ +#endif +#ifndef IOT_HTTPS_DISPATCH_TASK_STACK_SIZE + #define IOT_HTTPS_DISPATCH_TASK_STACK_SIZE ( configMINIMAL_STACK_SIZE * 2 ) /* The stack size of each dispatch task. */ +#endif +#ifndef IOT_HTTPS_DISPATCH_TASK_PRIORITY + #define IOT_HTTPS_DISPATCH_TASK_PRIORITY ( IOT_THREAD_DEFAULT_PRIORITY ) /* Priority is deliberately chosen to match the original taskpool's priority. */ +#endif +#ifndef IOT_HTTPS_DISPATCH_USE_STATIC_MEMORY + #define IOT_HTTPS_DISPATCH_USE_STATIC_MEMORY ( 0 ) /* The dispatch queue and tasks will not use static memory by default. */ +#endif + +/* Provide the User-Agent Value definition fom coreHTTP. */ +#ifdef HTTP_USER_AGENT_VALUE + #define IOT_HTTPS_USER_AGENT HTTP_USER_AGENT_VALUE #endif /** @endcond */ +/* Error checking of macro configurations. */ +#if IOT_HTTPS_DISPATCH_TASK_COUNT < 1 + #error "IOT_HTTPS_DISPATCH_TASK_COUNT must be at least 1." +#endif +#if IOT_HTTPS_DISPATCH_QUEUE_SIZE < 1 + #error "IOT_HTTPS_DISPATCH_QUEUE_SIZE must be at least 1." +#endif +#if IOT_HTTPS_DISPATCH_USE_STATIC_MEMORY == 1 && configSUPPORT_STATIC_ALLOCATION != 1 + #error "IOT_HTTPS_DISPATCH_USE_STATIC_MEMORY is 1, but configSUPPORT_STATIC_ALLOCATION is not set to 1." +#endif + /** * @brief The HTTP protocol version of this library is HTTP/1.1. */ @@ -237,6 +281,11 @@ #define HTTPS_CONTENT_LENGTH_HEADER "Content-Length" #define HTTPS_CONNECTION_HEADER "Connection" +/* + * Constant for a mocked response so that #HTTPClient_Send returns #HTTPSuccess. + */ +#define HTTPS_MINIMAL_MOCKED_RESPONSE "HTTP/1.1 404\r\nContent-Length: 0\r\n\r\n" + /** * @brief The maximum Content-Length header line size. * @@ -384,12 +433,10 @@ typedef struct _httpsConnection * disconnect with a network error, or an explicit disconnect with a call to @ref https_client_function_disconnect. */ bool isConnected; - bool isDestroyed; /**< @brief true if the connection is already destroyed and we should call anymore */ - IotMutex_t connectionMutex; /**< @brief Mutex protecting operations on this entire connection context. */ - IotDeQueue_t reqQ; /**< @brief The queue for the requests that are not finished yet. */ - IotDeQueue_t respQ; /**< @brief The queue for the responses that are waiting to be processed. */ - IotTaskPoolJobStorage_t taskPoolJobStorage; /**< @brief An asynchronous operation requires storage for the task pool job. */ - IotTaskPoolJob_t taskPoolJob; /**< @brief The task pool job identifier for an asynchronous request. */ + bool isDestroyed; /**< @brief true if the connection is already destroyed and we should not make calls on it anymore. */ + IotMutex_t connectionMutex; /**< @brief Mutex protecting operations on this entire connection context. */ + IotDeQueue_t reqQ; /**< @brief The queue for the requests that are not finished yet. */ + IotDeQueue_t respQ; /**< @brief The queue for the responses that are waiting to be processed. */ } _httpsConnection_t; /** @@ -477,7 +524,7 @@ typedef struct _httpsRequest IotHttpsClientCallbacks_t * pCallbacks; /**< @brief Pointer to the asynchronous request callbacks. */ bool cancelled; /**< @brief Set this to true to stop the response processing in the asynchronous workflow. */ IotHttpsReturnCode_t bodyTxStatus; /**< @brief The status of network sending the HTTPS body to be returned during the #IotHttpsClientCallbacks_t.writeCallback. */ - bool scheduled; /**< @brief Set to true when this request has already been scheduled to the task pool. */ + bool scheduled; /**< @brief Set to true when this request has already been added to the dispatch queue. */ } _httpsRequest_t; /*-----------------------------------------------------------*/ diff --git a/libraries/c_sdk/standard/https/test/access/iot_test_access_https.h b/libraries/c_sdk/standard/https/test/access/iot_test_access_https.h index 8d1c18e99f3..dd9616a77b4 100644 --- a/libraries/c_sdk/standard/https/test/access/iot_test_access_https.h +++ b/libraries/c_sdk/standard/https/test/access/iot_test_access_https.h @@ -1,5 +1,5 @@ /* - * FreeRTOS HTTPS Client V1.1.3 + * FreeRTOS HTTPS Client V1.2.0 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/https/test/access/iot_test_access_https_client.c b/libraries/c_sdk/standard/https/test/access/iot_test_access_https_client.c index 7faf30d0b8b..14cd7a2a8fc 100644 --- a/libraries/c_sdk/standard/https/test/access/iot_test_access_https_client.c +++ b/libraries/c_sdk/standard/https/test/access/iot_test_access_https_client.c @@ -1,5 +1,5 @@ /* - * FreeRTOS HTTPS Client V1.1.3 + * FreeRTOS HTTPS Client V1.2.0 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/https/test/system/iot_tests_https_system.c b/libraries/c_sdk/standard/https/test/system/iot_tests_https_system.c index e8a2954bd09..c9f66d6fca0 100644 --- a/libraries/c_sdk/standard/https/test/system/iot_tests_https_system.c +++ b/libraries/c_sdk/standard/https/test/system/iot_tests_https_system.c @@ -1,5 +1,5 @@ /* - * FreeRTOS HTTPS Client V1.1.3 + * FreeRTOS HTTPS Client V1.2.0 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -240,7 +240,6 @@ static IotHttpsConnectionInfo_t _connInfo = .pAddress = IOT_TEST_HTTPS_SERVER_HOST_NAME, .addressLen = sizeof( IOT_TEST_HTTPS_SERVER_HOST_NAME ) - 1, .port = IOT_TEST_HTTPS_PORT, - .flags = 0, .userBuffer.pBuffer = _pConnUserBuffer, .userBuffer.bufferLen = sizeof( _pConnUserBuffer ), #if IOT_TEST_SECURED_CONNECTION == 1 @@ -252,7 +251,10 @@ static IotHttpsConnectionInfo_t _connInfo = .privateKeyLen = sizeof( IOT_TEST_HTTPS_CLIENT_PRIVATE_KEY ), .pAlpnProtocols = IOT_TEST_HTTPS_ALPN_PROTOCOLS, .alpnProtocolsLen = sizeof( IOT_TEST_HTTPS_ALPN_PROTOCOLS ), - #endif + .flags = 0, + #else + .flags = IOT_HTTPS_IS_NON_TLS_FLAG, + #endif /* if IOT_TEST_SECURED_CONNECTION == 1 */ .pNetworkInterface = NULL /* This will be set during TEST_SETUP(). */ }; diff --git a/libraries/c_sdk/standard/https/test/unit/iot_tests_https_async.c b/libraries/c_sdk/standard/https/test/unit/iot_tests_https_async.c index a96782e863a..e7bc99141ad 100644 --- a/libraries/c_sdk/standard/https/test/unit/iot_tests_https_async.c +++ b/libraries/c_sdk/standard/https/test/unit/iot_tests_https_async.c @@ -1,5 +1,5 @@ /* - * FreeRTOS HTTPS Client V1.1.3 + * FreeRTOS HTTPS Client V1.2.0 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/https/test/unit/iot_tests_https_client.c b/libraries/c_sdk/standard/https/test/unit/iot_tests_https_client.c index d2f57022363..ef847fac69a 100644 --- a/libraries/c_sdk/standard/https/test/unit/iot_tests_https_client.c +++ b/libraries/c_sdk/standard/https/test/unit/iot_tests_https_client.c @@ -1,5 +1,5 @@ /* - * FreeRTOS HTTPS Client V1.1.3 + * FreeRTOS HTTPS Client V1.2.0 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -850,7 +850,7 @@ TEST( HTTPS_Client_Unit_API, AddHeaderMultipleHeaders ) IotHttpsReturnCode_t returnCode = IOT_HTTPS_OK; IotHttpsRequestHandle_t reqHandle = IOT_HTTPS_REQUEST_HANDLE_INITIALIZER; - /* Intead of iterating in a loop, all the dummy headers are declared immediately because in the unit testing + /* Instead of iterating in a loop, all the dummy headers are declared immediately because in the unit testing * infrastructure and workflow the number of repetitions is typically not changed from the original. */ char * pHeader0 = "header0"; char * pHeader1 = "header1"; diff --git a/libraries/c_sdk/standard/https/test/unit/iot_tests_https_common.c b/libraries/c_sdk/standard/https/test/unit/iot_tests_https_common.c index 293e424df76..665627c0fcd 100644 --- a/libraries/c_sdk/standard/https/test/unit/iot_tests_https_common.c +++ b/libraries/c_sdk/standard/https/test/unit/iot_tests_https_common.c @@ -1,5 +1,5 @@ /* - * FreeRTOS HTTPS Client V1.1.3 + * FreeRTOS HTTPS Client V1.2.0 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/https/test/unit/iot_tests_https_common.h b/libraries/c_sdk/standard/https/test/unit/iot_tests_https_common.h index 0eda036bbec..8d1c7431b46 100644 --- a/libraries/c_sdk/standard/https/test/unit/iot_tests_https_common.h +++ b/libraries/c_sdk/standard/https/test/unit/iot_tests_https_common.h @@ -1,5 +1,5 @@ /* - * FreeRTOS HTTPS Client V1.1.3 + * FreeRTOS HTTPS Client V1.2.0 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/https/test/unit/iot_tests_https_sync.c b/libraries/c_sdk/standard/https/test/unit/iot_tests_https_sync.c index 8d00e1ce79a..3fa46494b2e 100644 --- a/libraries/c_sdk/standard/https/test/unit/iot_tests_https_sync.c +++ b/libraries/c_sdk/standard/https/test/unit/iot_tests_https_sync.c @@ -1,5 +1,5 @@ /* - * FreeRTOS HTTPS Client V1.1.3 + * FreeRTOS HTTPS Client V1.2.0 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/https/test/unit/iot_tests_https_utils.c b/libraries/c_sdk/standard/https/test/unit/iot_tests_https_utils.c index 747e7f8ca59..d7409bd8521 100644 --- a/libraries/c_sdk/standard/https/test/unit/iot_tests_https_utils.c +++ b/libraries/c_sdk/standard/https/test/unit/iot_tests_https_utils.c @@ -1,5 +1,5 @@ /* - * FreeRTOS HTTPS Client V1.1.3 + * FreeRTOS HTTPS Client V1.2.0 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/mqtt/CODESIZE.md b/libraries/c_sdk/standard/mqtt/CODESIZE.md new file mode 100644 index 00000000000..4688a0b8e6d --- /dev/null +++ b/libraries/c_sdk/standard/mqtt/CODESIZE.md @@ -0,0 +1,45 @@ +# Code size of MQTT Compatibility Layer + +Code size for the MQTT Compatibility Layer is calculated using GCC for ARM Cortex-M4 on [FreeRTOS 202011.00 release](https://github.com/aws/amazon-freertos/releases/tag/202011.00). Build for calculating code size is done using build configuration for [Cypress CY8CKIT-064S0S2-4343W](https://docs.aws.amazon.com/freertos/latest/userguide/getting_started_cypress_psoc64.html) by using the Release configuration. All logs were disabled in this build. Refer to the table below for calculated code sizes. + +| File | With -O1 Optimization | With -Os Optimization | +| :-: | :-: | :-: | +| iot_mqtt_agent.c | 1.3K | 1.1K | +| iot_mqtt_api.c | 3.8K | 3.3K | +| iot_mqtt_context_connection.c | 0.2K | 0.2K | +| iot_mqtt_managed_function_wrapper.c | 0.9K | 0.9K | +| iot_mqtt_mutex_wrapper.c | 0.4K | 0.3K | +| iot_mqtt_network.c | 1.2K | 1.1K | +| iot_mqtt_operation.c | 2.6K | 2.4K | +| iot_mqtt_publish_duplicates.c | 0.2K | 0.2K | +| iot_mqtt_serializer_deserializer_wrapper.c | 2.0K | 1.8K | +| iot_mqtt_subscription.c | 1.3K | 1.2K | +| iot_mqtt_subscription_container.c | 0.6K | 0.6K | +| iot_mqtt_validate.c | 0.5K | 0.4K | +| **Total estimate** | **15K** | **13.5K** | + +The MQTT Compatibility Layer is implemented using the [coreMQTT library](https://github.com/FreeRTOS/coreMQTT/blob/master/README.md). In addition, the MQTT Compatibility Layer maintains all dependencies of MQTT V2.x.x library. To account for the total code size of the MQTT Compatibility Layer, code sizes for all dependencies have been considered (see below). + +1. **The coreMQTT library** : The MQTT Compatibility Layer is implemented using [coreMQTT library](https://github.com/FreeRTOS/coreMQTT/blob/master/README.md). Memory estimates for [coreMQTT library](https://github.com/FreeRTOS/coreMQTT/blob/master/README.md) can be found in the documentation [here](https://freertos.org/mqtt/index.html). + +2. **Task Pool library** : The MQTT Compatibility Layer depends on [Task Pool library](https://docs.aws.amazon.com/freertos/latest/lib-ref/embedded-csdk/v4.0_beta_deprecated/lib-ref/c-sdk/taskpool/index.html). Refer to the table below for calculated code size of Task Pool library. + +| File | With -O1 Optimization | With -Os Optimization | +| :-: | :-: | :-: | +| iot_taskpool.c | 3.8K | 3.0K | +| **Total estimate** | **3.8K** | **3.0K** | + +Note that the Task Pool library may not be exclusively used by the MQTT Compatibility Layer, but may be shared by other libraries. However, this Task Pool library is not used by any of the [redesigned libraries for LTS](https://www.freertos.org/ltsroadmap.html). + +3. **Platform Abstraction** : This MQTT Compatibility Layer depends on the implementation of Platform Abstraction for Network, Clock and Threads. The code size is calculated for the [FreeRTOS implementation of Abstraction Layer](../../../abstractions/platform/freertos) and is added in the table below. + +| File | With -O1 Optimization | With -Os Optimization | +| :-: | :-: | :-: | +| iot_clock_freertos.c | 0.5K | 0.5K | +| iot_network_freertos.c | 1.2K | 1.1K | +| iot_threads_freertos.c | 0.7K | 0.7K | +| **Total estimate** | **2.4K** | **2.3K** | + +Note that the implementation for Platform Abstraction may not be exclusively used by the MQTT Compatibility Layer, but may be shared by other libraries. However, this Platform Abstraction is not used by any of the [redesigned libraries for LTS](https://www.freertos.org/ltsroadmap.html). + +4. **Linear Containers** : This MQTT Compatibility Layer depends on [Linear Containers](https://docs.aws.amazon.com/freertos/latest/lib-ref/embedded-csdk/v4.0_beta_deprecated/lib-ref/c-sdk/linear_containers/index.html). However, this implementation is in [c header file](../common/include/iot_linear_containers.h) and the code sizes are already accounted for in the calculated sizes of this MQTT Compatibility Layer. diff --git a/libraries/c_sdk/standard/mqtt/README.md b/libraries/c_sdk/standard/mqtt/README.md index 5d6dd196e7c..2fdbe9cda1c 100644 --- a/libraries/c_sdk/standard/mqtt/README.md +++ b/libraries/c_sdk/standard/mqtt/README.md @@ -1,18 +1,29 @@ -# MQTT Shim for MQTT V2.x.x APIs +# MQTT Compatibility Layer -This MQTT shim library supports backward compatibility for the MQTT V2.x.x APIs using the [coreMQTT library](../../../coreMQTT/README.md). All the [APIs in MQTT v2.x.x](include/iot_mqtt.h) are supported in this shim implementation. -This shim will be supported only as a short term solution to provide backward compatibility. We recommend using the redesigned [coreMQTT library](../../../coreMQTT/README.md) for applications requiring long term support. +MQTT Compatibility Layer provides backward compatibility from [coreMQTT library](https://github.com/FreeRTOS/coreMQTT/blob/master/README.md) to [MQTT V2.x.x APIs](include/iot_mqtt.h). **We recommend that you use the coreMQTT library for optimized memory usage and modularity, but you can use the MQTT Compatibility Layer when you do not have the flexibility.** -## MQTT Shim library configs +## Configs for MQTT Compatibility Layer -Configuration settings of the MQTT shim library. These configurations are available in addition to the configurations of MQTT V2.x.x library. +Configuration settings for the MQTT Compatibility Layer, are available in addition to the [configurations of MQTT V2.x.x library](https://docs.aws.amazon.com/freertos/latest/lib-ref/embedded-csdk/v4.0_beta_deprecated/lib-ref/c-sdk/mqtt/mqtt_config.html). -Configuration settings are C pre-processor constants. They can be set with a #define in the config file (iot_config.h) or by using a compiler option such as -D in gcc. If a configuration setting is not defined, the library will use a "sensible" default value (unless otherwise noted). Because they are compile-time constants, a library must be rebuilt if a configuration setting is changed. +Configuration settings are C pre-processor constants. They can be set with a #define in the config file (iot_config.h) or by using a compiler option such as -D in gcc. If a configuration setting is not defined, the MQTT Compatibility Layer will use a "sensible" default value (unless otherwise noted). Because they are compile-time constants, this MQTT Compatibility Layer must be rebuilt if a configuration setting is changed. -1. `MAX_NO_OF_MQTT_CONNECTIONS` - Maximum number of MQTT connections that can be handled by the MQTT shim at a time. Default value is 2. +1. `MAX_NO_OF_MQTT_CONNECTIONS` - Maximum number of MQTT connections that can be handled by the MQTT Compatibility Layer at a time. Default value is 2. 2. `MAX_NO_OF_MQTT_SUBSCRIPTIONS` - Maximum number of active MQTT subscriptions per MQTT connection. Default value is 10. -3. `NETWORK_BUFFER_SIZE` - Static network buffer size for the MQTT packets to be sent using the MQTT shim. Please note that a different buffer is used for receiving MQTT packets and is dynamically allocated. Default value is 1024. +3. `NETWORK_BUFFER_SIZE` - Static network buffer size for the MQTT packets to be sent using the MQTT Compatibility Layer. Please note that a different buffer is used for receiving MQTT packets. Default value is 1024. -**Note:** The config `IOT_MQTT_ENABLE_SERIALIZER_OVERRIDES` to override serializer APIs is not supported in this MQTT shim implementation. [MQTT over BLE](https://docs.aws.amazon.com/freertos/latest/userguide/ble-demo.html#ble-demo-mqtt) is redesigned to avoid the dependency on this config by using a [BLE transport implementation](../ble/src/services/mqtt_ble/iot_ble_mqtt_transport.c). +**Note:** The config `IOT_MQTT_ENABLE_SERIALIZER_OVERRIDES` to override serializer APIs is not supported in the MQTT Compatibility Layer. [MQTT over BLE](https://docs.aws.amazon.com/freertos/latest/userguide/ble-demo.html#ble-demo-mqtt) was dependent on this config. However, starting from [FreeRTOS 202011.00 release](https://github.com/aws/amazon-freertos/releases/tag/202011.00), MQTT over BLE is redesigned to avoid the dependency on this config by using a [BLE transport implementation](../ble/src/services/mqtt_ble/iot_ble_mqtt_transport.c). Please note that applications using MQTT over BLE with MQTT V2.x.x APIs will continue to work with this MQTT Compatibility Layer without having a dependency on the config `IOT_MQTT_ENABLE_SERIALIZER_OVERRIDES`. + +## Code size of MQTT Compatibility Layer + +Code sizes are calculated for the MQTT Compatibility Layer on [FreeRTOS 202011.00 release](https://github.com/aws/amazon-freertos/releases/tag/202011.00). In order to calculate the total cost to memory of the MQTT Compatibility Layer, the code sizes of its dependencies are also included. MQTT Compatibility Layer and its dependencies have a code size of **24.5KB** with `-Os` compiler optimization. +Please be aware that, this code size is about 18KB higher than the code size required by the [coreMQTT library](https://github.com/FreeRTOS/coreMQTT/blob/master/README.md). + +**Note** Refer to the [CODESIZE.md](CODESIZE.md) for more details about the calculation of code sizes for the MQTT Compatibility Layer and the [coreMQTT FreeRTOS documentation](https://freertos.org/mqtt/index.html) for coreMQTT library. + + +## Tasks required for MQTT Compatibility Layer + +The MQTT Compatibility Layer has a run time dependency on tasks created by Task Pool and Network Interface implementation, in addition to the system tasks. Task Pool creates `IotTaskPoolInfo.minThreads` number of tasks and the Network Interface implementation creates a task to receive from the network. diff --git a/libraries/c_sdk/standard/mqtt/include/iot_mqtt.h b/libraries/c_sdk/standard/mqtt/include/iot_mqtt.h index 420f350f7af..06a3194e09e 100644 --- a/libraries/c_sdk/standard/mqtt/include/iot_mqtt.h +++ b/libraries/c_sdk/standard/mqtt/include/iot_mqtt.h @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/mqtt/include/iot_mqtt_agent.h b/libraries/c_sdk/standard/mqtt/include/iot_mqtt_agent.h index f27746ee78c..8b5b6da4b86 100644 --- a/libraries/c_sdk/standard/mqtt/include/iot_mqtt_agent.h +++ b/libraries/c_sdk/standard/mqtt/include/iot_mqtt_agent.h @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/mqtt/include/iot_mqtt_agent_config_defaults.h b/libraries/c_sdk/standard/mqtt/include/iot_mqtt_agent_config_defaults.h index 4bca5f1693f..d0ab25e40ad 100644 --- a/libraries/c_sdk/standard/mqtt/include/iot_mqtt_agent_config_defaults.h +++ b/libraries/c_sdk/standard/mqtt/include/iot_mqtt_agent_config_defaults.h @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/mqtt/include/iot_mqtt_config_defaults.h b/libraries/c_sdk/standard/mqtt/include/iot_mqtt_config_defaults.h index b5764e8fa6f..17ccc57fad8 100644 --- a/libraries/c_sdk/standard/mqtt/include/iot_mqtt_config_defaults.h +++ b/libraries/c_sdk/standard/mqtt/include/iot_mqtt_config_defaults.h @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/mqtt/include/iot_mqtt_lib.h b/libraries/c_sdk/standard/mqtt/include/iot_mqtt_lib.h index 5b5ecf546b8..49803c8796e 100644 --- a/libraries/c_sdk/standard/mqtt/include/iot_mqtt_lib.h +++ b/libraries/c_sdk/standard/mqtt/include/iot_mqtt_lib.h @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/mqtt/include/types/iot_mqtt_types.h b/libraries/c_sdk/standard/mqtt/include/types/iot_mqtt_types.h index 9c9568cdbdd..bd7ca6a1717 100644 --- a/libraries/c_sdk/standard/mqtt/include/types/iot_mqtt_types.h +++ b/libraries/c_sdk/standard/mqtt/include/types/iot_mqtt_types.h @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/mqtt/src/iot_mqtt_agent.c b/libraries/c_sdk/standard/mqtt/src/iot_mqtt_agent.c index 52a19b03f9f..2734107e3ed 100644 --- a/libraries/c_sdk/standard/mqtt/src/iot_mqtt_agent.c +++ b/libraries/c_sdk/standard/mqtt/src/iot_mqtt_agent.c @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/mqtt/src/iot_mqtt_api.c b/libraries/c_sdk/standard/mqtt/src/iot_mqtt_api.c index 66ad63a8de8..7e4775c99a7 100644 --- a/libraries/c_sdk/standard/mqtt/src/iot_mqtt_api.c +++ b/libraries/c_sdk/standard/mqtt/src/iot_mqtt_api.c @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -78,26 +78,6 @@ static SemaphoreHandle_t connContextMutex; /*-----------------------------------------------------------*/ -/** - * @brief Set the unsubscribed flag of an MQTT subscription. - * - * @param[in] pSubscriptionLink Pointer to the link member of an #_mqttSubscription_t. - * @param[in] pMatch Not used. - * - * @return Always returns `true`. - */ -static bool _mqttSubscription_setUnsubscribe( const IotLink_t * pSubscriptionLink, - void * pMatch ); - -/** - * @brief Destroy an MQTT subscription if its reference count is 0. - * - * @param[in] pData The subscription to destroy. This parameter is of type - * `void*` for compatibility with [free] - * (http://pubs.opengroup.org/onlinepubs/9699919799/functions/free.html). - */ -static void _mqttSubscription_tryDestroy( void * pData ); - /** * @brief Decrement the reference count of an MQTT operation and attempt to * destroy it. @@ -218,51 +198,6 @@ static int32_t transportSend( NetworkContext_t * pNetworkContext, /*-----------------------------------------------------------*/ -static bool _mqttSubscription_setUnsubscribe( const IotLink_t * pSubscriptionLink, - void * pMatch ) -{ - /* Because this function is called from a container function, the given link - * must never be NULL. */ - IotMqtt_Assert( pSubscriptionLink != NULL ); - - _mqttSubscription_t * pSubscription = IotLink_Container( _mqttSubscription_t, - pSubscriptionLink, - link ); - - /* Silence warnings about unused parameters. */ - ( void ) pMatch; - - /* Set the unsubscribed flag. */ - pSubscription->unsubscribed = true; - - return true; -} - -/*-----------------------------------------------------------*/ - -static void _mqttSubscription_tryDestroy( void * pData ) -{ - _mqttSubscription_t * pSubscription = ( _mqttSubscription_t * ) pData; - - /* Reference count must not be negative. */ - IotMqtt_Assert( pSubscription->references >= 0 ); - - /* Unsubscribed flag should be set. */ - IotMqtt_Assert( pSubscription->unsubscribed == true ); - - /* Free the subscription if it has no references. */ - if( pSubscription->references == 0 ) - { - IotMqtt_FreeSubscription( pSubscription ); - } - else - { - EMPTY_ELSE_MARKER; - } -} - -/*-----------------------------------------------------------*/ - static void _mqttOperation_tryDestroy( void * pData ) { _mqttOperation_t * pOperation = ( _mqttOperation_t * ) pData; @@ -1666,7 +1601,6 @@ IotMqttError_t IotMqtt_Publish( IotMqttConnection_t mqttConnection, { IOT_FUNCTION_ENTRY( IotMqttError_t, IOT_MQTT_SUCCESS ); _mqttOperation_t * pOperation = NULL; - uint8_t ** pPacketIdentifierHigh = NULL; /* Check that the PUBLISH information is valid. */ if( _IotMqtt_ValidatePublish( mqttConnection->awsIotMqttMode, @@ -1751,16 +1685,6 @@ IotMqttError_t IotMqtt_Publish( IotMqttConnection_t mqttConnection, IotMqtt_Assert( pOperation->u.operation.status == IOT_MQTT_STATUS_PENDING ); pOperation->u.operation.type = IOT_MQTT_PUBLISH_TO_SERVER; - /* In AWS IoT MQTT mode, a pointer to the packet identifier must be saved. */ - if( mqttConnection->awsIotMqttMode == true ) - { - pPacketIdentifierHigh = &( pOperation->u.operation.pPacketIdentifierHigh ); - } - else - { - EMPTY_ELSE_MARKER; - } - /* Initialize PUBLISH retry if retryLimit is set. */ if( pPublishInfo->retryLimit > 0 ) { diff --git a/libraries/c_sdk/standard/mqtt/src/iot_mqtt_context_connection.c b/libraries/c_sdk/standard/mqtt/src/iot_mqtt_context_connection.c index 2b9f00f9d27..04c0ff1050f 100644 --- a/libraries/c_sdk/standard/mqtt/src/iot_mqtt_context_connection.c +++ b/libraries/c_sdk/standard/mqtt/src/iot_mqtt_context_connection.c @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/mqtt/src/iot_mqtt_managed_function_wrapper.c b/libraries/c_sdk/standard/mqtt/src/iot_mqtt_managed_function_wrapper.c index 944e6c73cdb..d43cd71d808 100644 --- a/libraries/c_sdk/standard/mqtt/src/iot_mqtt_managed_function_wrapper.c +++ b/libraries/c_sdk/standard/mqtt/src/iot_mqtt_managed_function_wrapper.c @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT SHIM V1.1.1 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/mqtt/src/iot_mqtt_mutex_wrapper.c b/libraries/c_sdk/standard/mqtt/src/iot_mqtt_mutex_wrapper.c index a458b4289a9..8db90a593dc 100644 --- a/libraries/c_sdk/standard/mqtt/src/iot_mqtt_mutex_wrapper.c +++ b/libraries/c_sdk/standard/mqtt/src/iot_mqtt_mutex_wrapper.c @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright(C) 2020 Amazon.com, Inc. or its affiliates.All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/mqtt/src/iot_mqtt_network.c b/libraries/c_sdk/standard/mqtt/src/iot_mqtt_network.c index 1401ab18247..4e4e39f39f6 100644 --- a/libraries/c_sdk/standard/mqtt/src/iot_mqtt_network.c +++ b/libraries/c_sdk/standard/mqtt/src/iot_mqtt_network.c @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/mqtt/src/iot_mqtt_operation.c b/libraries/c_sdk/standard/mqtt/src/iot_mqtt_operation.c index 764b42999fb..e414a8191ff 100644 --- a/libraries/c_sdk/standard/mqtt/src/iot_mqtt_operation.c +++ b/libraries/c_sdk/standard/mqtt/src/iot_mqtt_operation.c @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/mqtt/src/iot_mqtt_publish_duplicates.c b/libraries/c_sdk/standard/mqtt/src/iot_mqtt_publish_duplicates.c index e9411940fda..3bace2bb459 100644 --- a/libraries/c_sdk/standard/mqtt/src/iot_mqtt_publish_duplicates.c +++ b/libraries/c_sdk/standard/mqtt/src/iot_mqtt_publish_duplicates.c @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -98,22 +98,6 @@ static uint16_t _nextPacketIdentifier( void ); /*-----------------------------------------------------------*/ -#if LIBRARY_LOG_LEVEL > IOT_LOG_NONE - -/** - * @brief If logging is enabled, define a log configuration that only prints the log - * string. This is used when printing out details of deserialized MQTT packets. - */ - static const IotLogConfig_t _logHideAll = - { - .hideLibraryName = true, - .hideLogLevel = true, - .hideTimestring = true - }; -#endif - -/*-----------------------------------------------------------*/ - static uint16_t _nextPacketIdentifier( void ) { /* MQTT specifies 2 bytes for the packet identifier; however, operating on diff --git a/libraries/c_sdk/standard/mqtt/src/iot_mqtt_serializer_deserializer_wrapper.c b/libraries/c_sdk/standard/mqtt/src/iot_mqtt_serializer_deserializer_wrapper.c index e11eee1e153..5d446edf8ac 100644 --- a/libraries/c_sdk/standard/mqtt/src/iot_mqtt_serializer_deserializer_wrapper.c +++ b/libraries/c_sdk/standard/mqtt/src/iot_mqtt_serializer_deserializer_wrapper.c @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/mqtt/src/iot_mqtt_static_memory.c b/libraries/c_sdk/standard/mqtt/src/iot_mqtt_static_memory.c index 36a82a25ada..8cf391cce0d 100644 --- a/libraries/c_sdk/standard/mqtt/src/iot_mqtt_static_memory.c +++ b/libraries/c_sdk/standard/mqtt/src/iot_mqtt_static_memory.c @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/mqtt/src/iot_mqtt_subscription.c b/libraries/c_sdk/standard/mqtt/src/iot_mqtt_subscription.c index 843fbb9e8c3..06f072d3e29 100644 --- a/libraries/c_sdk/standard/mqtt/src/iot_mqtt_subscription.c +++ b/libraries/c_sdk/standard/mqtt/src/iot_mqtt_subscription.c @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -49,251 +49,6 @@ extern _connContext_t connToContext[ MAX_NO_OF_MQTT_CONNECTIONS ]; /*-----------------------------------------------------------*/ -/*-----------------------------------------------------------*/ - -/** - * @brief Matches a topic name (from a publish) with a topic filter (from a - * subscription). - * - * @param[in] pSubscriptionLink Pointer to the link member of an #_mqttSubscription_t. - * @param[in] pMatch Pointer to a #_topicMatchParams_t. - * - * @return `true` if the arguments match the subscription topic filter; `false` - * otherwise. - */ -static bool _topicMatch( const IotLink_t * pSubscriptionLink, - void * pMatch ); - -/** - * @brief Matches a packet identifier and order. - * - * @param[in] pSubscriptionLink Pointer to the link member of an #_mqttSubscription_t. - * @param[in] pMatch Pointer to a #_packetMatchParams_t. - * - * @return `true` if the arguments match the subscription's packet info; `false` - * otherwise. - */ -static bool _packetMatch( const IotLink_t * pSubscriptionLink, - void * pMatch ); - -/*-----------------------------------------------------------*/ - -static bool _topicMatch( const IotLink_t * pSubscriptionLink, - void * pMatch ) -{ - IOT_FUNCTION_ENTRY( bool, false ); - uint16_t nameIndex = 0, filterIndex = 0; - - /* Because this function is called from a container function, the given link - * must never be NULL. */ - IotMqtt_Assert( pSubscriptionLink != NULL ); - - _mqttSubscription_t * pSubscription = IotLink_Container( _mqttSubscription_t, - pSubscriptionLink, - link ); - _topicMatchParams_t * pParam = ( _topicMatchParams_t * ) pMatch; - - /* Extract the relevant strings and lengths from parameters. */ - const char * pTopicName = pParam->pTopicName; - const char * pTopicFilter = pSubscription->pTopicFilter; - const uint16_t topicNameLength = pParam->topicNameLength; - const uint16_t topicFilterLength = pSubscription->topicFilterLength; - - /* Check for an exact match. */ - if( topicNameLength == topicFilterLength ) - { - status = ( strncmp( pTopicName, pTopicFilter, topicNameLength ) == 0 ); - - IOT_GOTO_CLEANUP(); - } - else - { - EMPTY_ELSE_MARKER; - } - - /* If the topic lengths are different but an exact match is required, return - * false. */ - if( pParam->exactMatchOnly == true ) - { - IOT_SET_AND_GOTO_CLEANUP( false ); - } - else - { - EMPTY_ELSE_MARKER; - } - - while( ( nameIndex < topicNameLength ) && ( filterIndex < topicFilterLength ) ) - { - /* Check if the character in the topic name matches the corresponding - * character in the topic filter string. */ - if( pTopicName[ nameIndex ] == pTopicFilter[ filterIndex ] ) - { - /* Handle special corner cases as documented by the MQTT protocol spec. */ - - /* Filter "sport/#" also matches "sport" since # includes the parent level. */ - if( nameIndex == topicNameLength - 1 ) - { - if( filterIndex == topicFilterLength - 3 ) - { - if( pTopicFilter[ filterIndex + 1 ] == '/' ) - { - if( pTopicFilter[ filterIndex + 2 ] == '#' ) - { - IOT_SET_AND_GOTO_CLEANUP( true ); - } - else - { - EMPTY_ELSE_MARKER; - } - } - else - { - EMPTY_ELSE_MARKER; - } - } - else - { - EMPTY_ELSE_MARKER; - } - } - else - { - EMPTY_ELSE_MARKER; - } - - /* Filter "sport/+" also matches the "sport/" but not "sport". */ - if( nameIndex == topicNameLength - 1 ) - { - if( filterIndex == topicFilterLength - 2 ) - { - if( pTopicFilter[ filterIndex + 1 ] == '+' ) - { - IOT_SET_AND_GOTO_CLEANUP( true ); - } - else - { - EMPTY_ELSE_MARKER; - } - } - else - { - EMPTY_ELSE_MARKER; - } - } - else - { - EMPTY_ELSE_MARKER; - } - } - else - { - /* Check for wildcards. */ - if( pTopicFilter[ filterIndex ] == '+' ) - { - /* Move topic name index to the end of the current level. - * This is identified by '/'. */ - while( nameIndex < topicNameLength && pTopicName[ nameIndex ] != '/' ) - { - nameIndex++; - } - - /* Increment filter index to skip '/'. */ - filterIndex++; - continue; - } - else if( pTopicFilter[ filterIndex ] == '#' ) - { - /* Subsequent characters don't need to be checked if the for the - * multi-level wildcard. */ - IOT_SET_AND_GOTO_CLEANUP( true ); - } - else - { - /* Any character mismatch other than '+' or '#' means the topic - * name does not match the topic filter. */ - IOT_SET_AND_GOTO_CLEANUP( false ); - } - } - - /* Increment indexes. */ - nameIndex++; - filterIndex++; - } - - /* If the end of both strings has been reached, they match. */ - if( ( nameIndex == topicNameLength ) && ( filterIndex == topicFilterLength ) ) - { - IOT_SET_AND_GOTO_CLEANUP( true ); - } - else - { - EMPTY_ELSE_MARKER; - } - - IOT_FUNCTION_EXIT_NO_CLEANUP(); -} - -/*-----------------------------------------------------------*/ - -static bool _packetMatch( const IotLink_t * pSubscriptionLink, - void * pMatch ) -{ - bool match = false; - - /* Because this function is called from a container function, the given link - * must never be NULL. */ - IotMqtt_Assert( pSubscriptionLink != NULL ); - - _mqttSubscription_t * pSubscription = IotLink_Container( _mqttSubscription_t, - pSubscriptionLink, - link ); - _packetMatchParams_t * pParam = ( _packetMatchParams_t * ) pMatch; - - /* Compare packet identifiers. */ - if( pParam->packetIdentifier == pSubscription->packetInfo.identifier ) - { - /* Compare orders if order is not -1. */ - if( pParam->order == -1 ) - { - match = true; - } - else - { - match = ( ( size_t ) pParam->order ) == pSubscription->packetInfo.order; - } - } - - /* If this subscription should be removed, check the reference count. */ - if( match == true ) - { - /* Reference count must not be negative. */ - IotMqtt_Assert( pSubscription->references >= 0 ); - - /* If the reference count is positive, this subscription cannot be - * removed yet because there are subscription callbacks using it. */ - if( pSubscription->references > 0 ) - { - match = false; - - /* Set the unsubscribed flag. The last active subscription callback - * will remove and clean up this subscription. */ - pSubscription->unsubscribed = true; - } - else - { - EMPTY_ELSE_MARKER; - } - } - else - { - EMPTY_ELSE_MARKER; - } - - return match; -} - -/*-----------------------------------------------------------*/ - IotMqttError_t _IotMqtt_AddSubscriptions( _mqttConnection_t * pMqttConnection, uint16_t subscribePacketIdentifier, const IotMqttSubscription_t * pSubscriptionList, @@ -675,8 +430,3 @@ bool IotMqtt_IsSubscribed( IotMqttConnection_t mqttConnection, } /*-----------------------------------------------------------*/ - -/* Provide access to internal functions and variables if testing. */ -#if IOT_BUILD_TESTS == 1 - #include "iot_test_access_mqtt_subscription.c" -#endif diff --git a/libraries/c_sdk/standard/mqtt/src/iot_mqtt_subscription_container.c b/libraries/c_sdk/standard/mqtt/src/iot_mqtt_subscription_container.c index 199d8c4c7da..2c2dc78b6c0 100644 --- a/libraries/c_sdk/standard/mqtt/src/iot_mqtt_subscription_container.c +++ b/libraries/c_sdk/standard/mqtt/src/iot_mqtt_subscription_container.c @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright(C) 2020 Amazon.com, Inc. or its affiliates.All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -343,3 +343,8 @@ int8_t IotMqtt_FindFirstMatch( _mqttSubscription_t * pSubscriptionArray, } /*-----------------------------------------------------------*/ + +/* Provide access to internal functions and variables if testing. */ +#if IOT_BUILD_TESTS == 1 + #include "iot_test_access_mqtt_subscription.c" +#endif diff --git a/libraries/c_sdk/standard/mqtt/src/iot_mqtt_validate.c b/libraries/c_sdk/standard/mqtt/src/iot_mqtt_validate.c index bd635f2bd99..604772fe585 100644 --- a/libraries/c_sdk/standard/mqtt/src/iot_mqtt_validate.c +++ b/libraries/c_sdk/standard/mqtt/src/iot_mqtt_validate.c @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/mqtt/src/private/iot_mqtt_internal.h b/libraries/c_sdk/standard/mqtt/src/private/iot_mqtt_internal.h index da7b830df4e..fc968de7d47 100644 --- a/libraries/c_sdk/standard/mqtt/src/private/iot_mqtt_internal.h +++ b/libraries/c_sdk/standard/mqtt/src/private/iot_mqtt_internal.h @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/mqtt/test/access/iot_test_access_mqtt.h b/libraries/c_sdk/standard/mqtt/test/access/iot_test_access_mqtt.h index 77db92762c5..67eeaedeefb 100644 --- a/libraries/c_sdk/standard/mqtt/test/access/iot_test_access_mqtt.h +++ b/libraries/c_sdk/standard/mqtt/test/access/iot_test_access_mqtt.h @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -67,7 +67,7 @@ _mqttConnection_t * IotTestMqtt_createMqttConnection( bool awsIotMqttMode, * * @see #_topicMatch. */ -bool IotTestMqtt_topicMatch( const IotLink_t * pSubscriptionLink, +bool IotTestMqtt_topicMatch( _mqttSubscription_t * pSubscription, void * pMatch ); /** @@ -75,7 +75,7 @@ bool IotTestMqtt_topicMatch( const IotLink_t * pSubscriptionLink, * * @see #_packetMatch. */ -bool IotTestMqtt_packetMatch( const IotLink_t * pSubscriptionLink, +bool IotTestMqtt_packetMatch( _mqttSubscription_t * pSubscription, void * pMatch ); /** diff --git a/libraries/c_sdk/standard/mqtt/test/access/iot_test_access_mqtt_api.c b/libraries/c_sdk/standard/mqtt/test/access/iot_test_access_mqtt_api.c index 72f47176806..a2bccb2a245 100644 --- a/libraries/c_sdk/standard/mqtt/test/access/iot_test_access_mqtt_api.c +++ b/libraries/c_sdk/standard/mqtt/test/access/iot_test_access_mqtt_api.c @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/mqtt/test/access/iot_test_access_mqtt_context_connection.c b/libraries/c_sdk/standard/mqtt/test/access/iot_test_access_mqtt_context_connection.c index e579a83f11d..ce0e81a6647 100644 --- a/libraries/c_sdk/standard/mqtt/test/access/iot_test_access_mqtt_context_connection.c +++ b/libraries/c_sdk/standard/mqtt/test/access/iot_test_access_mqtt_context_connection.c @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/mqtt/test/access/iot_test_access_mqtt_subscription.c b/libraries/c_sdk/standard/mqtt/test/access/iot_test_access_mqtt_subscription.c index 14b46c33f68..3aec48d0030 100644 --- a/libraries/c_sdk/standard/mqtt/test/access/iot_test_access_mqtt_subscription.c +++ b/libraries/c_sdk/standard/mqtt/test/access/iot_test_access_mqtt_subscription.c @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -26,32 +26,32 @@ /** * @file iot_test_access_mqtt_subscription.c * @brief Provides access to the internal functions and variables of - * iot_mqtt_subscription.c + * iot_mqtt_subscription_container.c * - * This file should only be included at the bottom of iot_mqtt_subscription.c + * This file should only be included at the bottom of iot_mqtt_subscription_container.c * and never compiled by itself. */ -bool IotTestMqtt_topicMatch( const IotLink_t * pSubscriptionLink, +bool IotTestMqtt_topicMatch( _mqttSubscription_t * pSubscription, void * pMatch ); -bool IotTestMqtt_packetMatch( const IotLink_t * pSubscriptionLink, +bool IotTestMqtt_packetMatch( _mqttSubscription_t * pSubscription, void * pMatch ); /*-----------------------------------------------------------*/ -bool IotTestMqtt_topicMatch( const IotLink_t * pSubscriptionLink, +bool IotTestMqtt_topicMatch( _mqttSubscription_t * pSubscription, void * pMatch ) { - return _topicMatch( pSubscriptionLink, pMatch ); + return _topicMatch( pSubscription, pMatch ); } /*-----------------------------------------------------------*/ -bool IotTestMqtt_packetMatch( const IotLink_t * pSubscriptionLink, +bool IotTestMqtt_packetMatch( _mqttSubscription_t * pSubscription, void * pMatch ) { - return _packetMatch( pSubscriptionLink, pMatch ); + return _packetMatch( pSubscription, pMatch ); } /*-----------------------------------------------------------*/ diff --git a/libraries/c_sdk/standard/mqtt/test/iot_test_mqtt_agent.c b/libraries/c_sdk/standard/mqtt/test/iot_test_mqtt_agent.c index badb0984a56..dc615232296 100644 --- a/libraries/c_sdk/standard/mqtt/test/iot_test_mqtt_agent.c +++ b/libraries/c_sdk/standard/mqtt/test/iot_test_mqtt_agent.c @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/mqtt/test/mock/iot_tests_mqtt_mock.c b/libraries/c_sdk/standard/mqtt/test/mock/iot_tests_mqtt_mock.c index ef95057234a..c67abcfe177 100644 --- a/libraries/c_sdk/standard/mqtt/test/mock/iot_tests_mqtt_mock.c +++ b/libraries/c_sdk/standard/mqtt/test/mock/iot_tests_mqtt_mock.c @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/mqtt/test/mock/iot_tests_mqtt_mock.h b/libraries/c_sdk/standard/mqtt/test/mock/iot_tests_mqtt_mock.h index a27f5743d05..d9db0b1fa7e 100644 --- a/libraries/c_sdk/standard/mqtt/test/mock/iot_tests_mqtt_mock.h +++ b/libraries/c_sdk/standard/mqtt/test/mock/iot_tests_mqtt_mock.h @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/mqtt/test/system/iot_tests_mqtt_system.c b/libraries/c_sdk/standard/mqtt/test/system/iot_tests_mqtt_system.c index a04b23e8783..b237914e5ee 100644 --- a/libraries/c_sdk/standard/mqtt/test/system/iot_tests_mqtt_system.c +++ b/libraries/c_sdk/standard/mqtt/test/system/iot_tests_mqtt_system.c @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_api.c b/libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_api.c index 8740e2f82a8..d27e9af1ae2 100644 --- a/libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_api.c +++ b/libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_api.c @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_metrics.c b/libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_metrics.c index f9260c5e896..51619290b1c 100644 --- a/libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_metrics.c +++ b/libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_metrics.c @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_receive.c b/libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_receive.c index df256dad73a..36938b70de0 100644 --- a/libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_receive.c +++ b/libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_receive.c @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_subscription.c b/libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_subscription.c index 2df459257fc..61bd0545949 100644 --- a/libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_subscription.c +++ b/libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_subscription.c @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -118,21 +118,21 @@ extern _connContext_t connToContext[ MAX_NO_OF_MQTT_CONNECTIONS ]; * @note This macro may only be used when a #_mqttSubscription_t pointer named pTopicFilter * is in scope. */ -#define TEST_TOPIC_MATCH( topicNameString, topicFilterString, exactMatch, expectedResult ) \ - { \ - _topicMatchParams_t _topicMatchParams = { 0 }; \ - _topicMatchParams.pTopicName = topicNameString; \ - _topicMatchParams.topicNameLength = ( uint16_t ) strlen( _topicMatchParams.pTopicName ); \ - _topicMatchParams.exactMatchOnly = exactMatch; \ - \ - pTopicFilter->pTopicFilter = IotMqtt_MallocMessage( TOPIC_FILTER_MATCH_MAX_LENGTH ); \ - pTopicFilter->topicFilterLength = ( uint16_t ) snprintf( pTopicFilter->pTopicFilter, \ - TOPIC_FILTER_MATCH_MAX_LENGTH, \ - topicFilterString ); \ - \ - TEST_ASSERT_EQUAL_INT( expectedResult, \ - IotTestMqtt_topicMatch( &( pTopicFilter->link ), &_topicMatchParams ) ); \ - IotMqtt_FreeMessage( pTopicFilter->pTopicFilter ); \ +#define TEST_TOPIC_MATCH( topicNameString, topicFilterString, exactMatch, expectedResult ) \ + { \ + _topicMatchParams_t _topicMatchParams = { 0 }; \ + _topicMatchParams.pTopicName = topicNameString; \ + _topicMatchParams.topicNameLength = ( uint16_t ) strlen( _topicMatchParams.pTopicName ); \ + _topicMatchParams.exactMatchOnly = exactMatch; \ + \ + pTopicFilter->pTopicFilter = IotMqtt_MallocMessage( TOPIC_FILTER_MATCH_MAX_LENGTH ); \ + pTopicFilter->topicFilterLength = ( uint16_t ) snprintf( pTopicFilter->pTopicFilter, \ + TOPIC_FILTER_MATCH_MAX_LENGTH, \ + topicFilterString ); \ + \ + TEST_ASSERT_EQUAL_INT( expectedResult, \ + IotTestMqtt_topicMatch( pTopicFilter, &_topicMatchParams ) ); \ + IotMqtt_FreeMessage( pTopicFilter->pTopicFilter ); \ } /*-----------------------------------------------------------*/ diff --git a/libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_validate.c b/libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_validate.c index df0eb002345..6db8425eb01 100644 --- a/libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_validate.c +++ b/libraries/c_sdk/standard/mqtt/test/unit/iot_tests_mqtt_validate.c @@ -1,5 +1,5 @@ /* - * FreeRTOS MQTT V2.3.0 + * FreeRTOS MQTT V2.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/coreHTTP b/libraries/coreHTTP new file mode 160000 index 00000000000..b349f89e67f --- /dev/null +++ b/libraries/coreHTTP @@ -0,0 +1 @@ +Subproject commit b349f89e67f5feef51438dc09ed89959dedc18d5 diff --git a/libraries/coreJSON b/libraries/coreJSON index 7954c9b4bcc..26fe707548f 160000 --- a/libraries/coreJSON +++ b/libraries/coreJSON @@ -1 +1 @@ -Subproject commit 7954c9b4bcc6db40ee1a83f9d013d28fdcf2556a +Subproject commit 26fe707548fc4e975c453aa4475ae056bb70247b diff --git a/libraries/coreMQTT b/libraries/coreMQTT index 3d4a123fcb2..ff9830a338b 160000 --- a/libraries/coreMQTT +++ b/libraries/coreMQTT @@ -1 +1 @@ -Subproject commit 3d4a123fcb25fd86e6f890804a66bc0d6df92cdc +Subproject commit ff9830a338b6a759c5574f991b02d6f99abadc42 diff --git a/libraries/core_http_demo_dependencies.cmake b/libraries/core_http_demo_dependencies.cmake new file mode 100644 index 00000000000..29813f91287 --- /dev/null +++ b/libraries/core_http_demo_dependencies.cmake @@ -0,0 +1,108 @@ +# core_http module. +afr_module(NAME core_http INTERNAL ) + +# Include HTTP library's source and header path variables. +include("${CMAKE_CURRENT_LIST_DIR}/coreHTTP/httpFilePaths.cmake") + +# Create a list of all header files in the coreHTTP library. +# The list of header files will be added to metadata required +# for the FreeRTOS console. +set(HTTP_HEADER_FILES "") +foreach(http_public_include_dir ${HTTP_INCLUDE_PUBLIC_DIRS}) + file(GLOB http_public_include_header_files + LIST_DIRECTORIES false + ${http_public_include_dir}/*.h ) + list(APPEND HTTP_HEADER_FILES ${http_public_include_header_files}) +endforeach() + +# Add cmake files of module to metadata. +afr_module_cmake_files(${AFR_CURRENT_MODULE} + ${CMAKE_CURRENT_LIST_DIR}/coreHTTP/httpFilePaths.cmake +) + +afr_module_sources( + ${AFR_CURRENT_MODULE} + PRIVATE + ${HTTP_SOURCES} + # Header files added to the target so that these are available + # in code downloaded from the FreeRTOS console. + ${HTTP_HEADER_FILES} +) + +afr_module_include_dirs( + ${AFR_CURRENT_MODULE} + PUBLIC + ${HTTP_INCLUDE_PUBLIC_DIRS} +) + +# Dependency of module on logging stack. +afr_module_dependencies( + ${AFR_CURRENT_MODULE} + PUBLIC + AFR::logging +) +################################################################ + +# core_http_demo_dependencies module. +# Metadata module used for the HTTP library in the FreeRTOS console. +# It represents a collection of module dependencies required +# by the coreHTTP demos. +# This module enables the FreeRTOS console experience of enabling +# library dependencies when selecting the HTTP library, so that the +# coreHTTP demos can be downloaded. +afr_module(NAME core_http_demo_dependencies ) + +afr_set_lib_metadata(ID "core_http_demo_dependencies") +afr_set_lib_metadata(DESCRIPTION "This library implements the HTTP 1.1 client-side protocol.") +afr_set_lib_metadata(DISPLAY_NAME "coreHTTP") +afr_set_lib_metadata(CATEGORY "Connectivity") +afr_set_lib_metadata(VERSION "1.0.0") +afr_set_lib_metadata(IS_VISIBLE "true") + +# Add cmake files of module to metadata. +afr_module_cmake_files(${AFR_CURRENT_MODULE} + ${CMAKE_CURRENT_LIST_DIR}/core_http_demo_dependencies.cmake +) + +afr_module_sources( + ${AFR_CURRENT_MODULE} + PRIVATE + # Adding sources so that CMake can generate the + # core_http_demo_dependencies target; otherwise, it gives the + # "Cannot determine link language for target" error. + ${HTTP_SOURCES} +) + +# Add dependencies of the coreHTTP demos in this target +# to support metadata required for FreeRTOS console. +afr_module_dependencies( + ${AFR_CURRENT_MODULE} + PUBLIC + AFR::core_http + AFR::http_demo_helpers + AFR::backoff_algorithm + AFR::pkcs11_helpers +) + +# Add more dependencies for Secure Sockets based HTTP demo +# (at demos/coreHTTP folder) ONLY if the board supports +# the Secure Sockets library. +if(TARGET AFR::secure_sockets::mcu_port) + afr_module_dependencies( + ${AFR_CURRENT_MODULE} + PUBLIC + AFR::transport_interface_secure_sockets + AFR::secure_sockets + ) +endif() + +# Add dependency on WiFi module so that WiFi library is auto-included +# when selecting core HTTP library on FreeRTOS console for boards that +# support the WiFi library. +if(TARGET AFR::wifi::mcu_port) + afr_module_dependencies( + ${AFR_CURRENT_MODULE} + PUBLIC + AFR::wifi + ) +endif() \ No newline at end of file diff --git a/libraries/core_json.cmake b/libraries/core_json.cmake index cca9cfbf0a3..63b4d6c0acc 100644 --- a/libraries/core_json.cmake +++ b/libraries/core_json.cmake @@ -14,14 +14,18 @@ foreach(json_public_include_dir ${JSON_INCLUDE_PUBLIC_DIRS}) list(APPEND JSON_HEADER_FILES ${json_public_include_header_files}) endforeach() +# Add cmake files of module to metadata. +afr_module_cmake_files(${AFR_CURRENT_MODULE} + ${CMAKE_CURRENT_LIST_DIR}/coreJSON/jsonFilePaths.cmake + ${CMAKE_CURRENT_LIST_DIR}/core_json.cmake +) + afr_module_sources( ${AFR_CURRENT_MODULE} PRIVATE ${JSON_SOURCES} - # List of files added to the target so that these are available + # List of header files added to the target so that these are available # in code downloaded from the FreeRTOS console. - ${CMAKE_CURRENT_LIST_DIR}/coreJSON/jsonFilePaths.cmake - ${CMAKE_CURRENT_LIST_DIR}/core_json.cmake ${JSON_HEADER_FILES} ) diff --git a/libraries/core_mqtt_demo_dependencies.cmake b/libraries/core_mqtt_demo_dependencies.cmake index 711d8603416..0173fabddd4 100644 --- a/libraries/core_mqtt_demo_dependencies.cmake +++ b/libraries/core_mqtt_demo_dependencies.cmake @@ -11,18 +11,20 @@ set(MQTT_HEADER_FILES "") foreach(mqtt_public_include_dir ${MQTT_INCLUDE_PUBLIC_DIRS}) file(GLOB mqtt_public_include_header_files LIST_DIRECTORIES false - ${mqtt_public_include_dir}/* ) + ${mqtt_public_include_dir}/*.h ) list(APPEND MQTT_HEADER_FILES ${mqtt_public_include_header_files}) endforeach() +# Add cmake files of module to metadata. +afr_module_cmake_files(${AFR_CURRENT_MODULE} + ${CMAKE_CURRENT_LIST_DIR}/coreMQTT/mqttFilePaths.cmake +) + afr_module_sources( ${AFR_CURRENT_MODULE} PRIVATE ${MQTT_SOURCES} ${MQTT_SERIALIZER_SOURCES} - # List of files added to the target so that these are available - # in code downloaded from the FreeRTOS console. - ${CMAKE_CURRENT_LIST_DIR}/coreMQTT/mqttFilePaths.cmake ${MQTT_HEADER_FILES} ) @@ -57,6 +59,11 @@ afr_set_lib_metadata(CATEGORY "Connectivity") afr_set_lib_metadata(VERSION "1.0.0") afr_set_lib_metadata(IS_VISIBLE "true") +# Add cmake files of module to metadata. +afr_module_cmake_files(${AFR_CURRENT_MODULE} + ${CMAKE_CURRENT_LIST_DIR}/core_mqtt_demo_dependencies.cmake +) + afr_module_sources( ${AFR_CURRENT_MODULE} PRIVATE @@ -64,9 +71,6 @@ afr_module_sources( # core_mqtt_demo_dependencies target; otherwise, it gives the # "Cannot determine link language for target" error. ${MQTT_SOURCES} - # This file is added to the target so that it is available - # in code downloaded from the FreeRTOS console. - ${CMAKE_CURRENT_LIST_DIR}/core_mqtt_demo_dependencies.cmake ) # Add dependencies of the coreMQTT demos in this target @@ -75,8 +79,20 @@ afr_module_dependencies( ${AFR_CURRENT_MODULE} PUBLIC AFR::core_mqtt + AFR::backoff_algorithm ) +# Add dependency on PKCS11 Helpers module, that is required +# by the Secure Sockets based coreMQTT demo, ONLY if the board +# supports the PKCS11 module. +if(TARGET AFR::pkcs11_implementation::mcu_port) + afr_module_dependencies( + ${AFR_CURRENT_MODULE} + PUBLIC + AFR::pkcs11_helpers + ) +endif() + # Add more dependencies for Secure Sockets based MQTT demo # (at demos/coreMQTT folder) ONLY if the board supports # the Secure Sockets library. @@ -84,7 +100,6 @@ if(TARGET AFR::secure_sockets::mcu_port) afr_module_dependencies( ${AFR_CURRENT_MODULE} PUBLIC - AFR::retry_utils AFR::transport_interface_secure_sockets AFR::secure_sockets ) @@ -110,4 +125,4 @@ if(BLE_SUPPORTED) PUBLIC AFR::ble ) -endif() \ No newline at end of file +endif() diff --git a/libraries/device_defender_demo_dependencies.cmake b/libraries/device_defender_demo_dependencies.cmake new file mode 100644 index 00000000000..1ce7e5f3c68 --- /dev/null +++ b/libraries/device_defender_demo_dependencies.cmake @@ -0,0 +1,97 @@ +# device_defender module. +afr_module(NAME device_defender ) + +# Include Defender library's source and header path variables. +include("${CMAKE_CURRENT_LIST_DIR}/device_defender_for_aws/defenderFilePaths.cmake") + +# Create a list of all header files in the Device Defender library. +# The list of header files will be added to metadata required +# for the FreeRTOS console. +set(DEVICE_DEFENDER_HEADER_FILES "") +foreach(defender_public_include_dir ${DEFENDER_INCLUDE_PUBLIC_DIRS}) + file(GLOB defender_public_include_header_files + LIST_DIRECTORIES false + ${defender_public_include_dir}/*.h ) + list(APPEND DEVICE_DEFENDER_HEADER_FILES ${defender_public_include_header_files}) +endforeach() + +afr_module_cmake_files(${AFR_CURRENT_MODULE} + ${CMAKE_CURRENT_LIST_DIR}/device_defender_for_aws/defenderFilePaths.cmake +) + +afr_module_sources( + ${AFR_CURRENT_MODULE} + PRIVATE + ${DEFENDER_SOURCES} + # List of header files added to the target so that these are available + # in code downloaded from the FreeRTOS console. + ${DEVICE_DEFENDER_HEADER_FILES} +) + +afr_module_include_dirs( + ${AFR_CURRENT_MODULE} + PUBLIC + ${DEFENDER_INCLUDE_PUBLIC_DIRS} +) + +# Dependency of module on logging stack. +afr_module_dependencies( + ${AFR_CURRENT_MODULE} + PUBLIC + AFR::logging +) + +################################################################ + +# device_defender_demo_dependencies module. +# Metadata module used for the Device Defender library in the FreeRTOS console. +# It represents a collection of module dependencies required +# by the Device Defender demo. +# This module enables the FreeRTOS console experience of enabling +# library dependencies when selecting the Device Defender library, so that the +# Device Defender demo can be downloaded. +afr_module(NAME device_defender_demo_dependencies ) + +afr_set_lib_metadata(ID "device_defender_demo_dependencies") +afr_set_lib_metadata(DESCRIPTION "This library enables device metrics reporting with AWS IoT Device Defender.") +afr_set_lib_metadata(DISPLAY_NAME "Device Defender") +afr_set_lib_metadata(CATEGORY "Amazon Services") +afr_set_lib_metadata(VERSION "1.0.0") +afr_set_lib_metadata(IS_VISIBLE "true") + +afr_module_cmake_files(${AFR_CURRENT_MODULE} + ${CMAKE_CURRENT_LIST_DIR}/device_defender_demo_dependencies.cmake +) + +afr_module_sources( + ${AFR_CURRENT_MODULE} + PRIVATE + # Adding sources so that CMake can generate the + # device_defender_demo_dependencies target; otherwise, it gives the + # "Cannot determine link language for target" error. + ${DEFENDER_SOURCES} +) + +# Add dependencies of the Device Defender demo in this target +# to support metadata required for FreeRTOS console. +afr_module_dependencies( + ${AFR_CURRENT_MODULE} + PUBLIC + AFR::device_defender + AFR::core_json + AFR::mqtt_demo_helpers + # Add dependency on core_mqtt_demo_dependencies module + # so that coreMQTT library is auto-included when selecting + # Device Defender library on the FreeRTOS console. + AFR::core_mqtt_demo_dependencies +) + +# If using the FreeRTOS+TCP metrics collector implementation, the defender demo +# depends on the FreeRTOS+TCP tcp utils. +if(TARGET AFR::freertos_plus_tcp::mcu_port) + afr_module_dependencies( + ${AFR_CURRENT_MODULE} + PUBLIC + AFR::freertos_plus_tcp_utils + ) +endif() diff --git a/libraries/device_defender_for_aws b/libraries/device_defender_for_aws new file mode 160000 index 00000000000..e15db4c22cf --- /dev/null +++ b/libraries/device_defender_for_aws @@ -0,0 +1 @@ +Subproject commit e15db4c22cfdd534d1e0693cdbdf467c7b09e897 diff --git a/libraries/device_shadow_demo_dependencies.cmake b/libraries/device_shadow_demo_dependencies.cmake index f55fb683342..d9c66d59094 100644 --- a/libraries/device_shadow_demo_dependencies.cmake +++ b/libraries/device_shadow_demo_dependencies.cmake @@ -11,17 +11,21 @@ set(DEVICE_SHADOW_HEADER_FILES "") foreach(shadow_public_include_dir ${SHADOW_INCLUDE_PUBLIC_DIRS}) file(GLOB shadow_public_include_header_files LIST_DIRECTORIES false - ${shadow_public_include_dir}/* ) + ${shadow_public_include_dir}/*.h ) list(APPEND DEVICE_SHADOW_HEADER_FILES ${shadow_public_include_header_files}) endforeach() +# Add cmake files of module to metadata. +afr_module_cmake_files(${AFR_CURRENT_MODULE} + ${CMAKE_CURRENT_LIST_DIR}/device_shadow_for_aws/shadowFilePaths.cmake +) + afr_module_sources( ${AFR_CURRENT_MODULE} PRIVATE ${SHADOW_SOURCES} - # List of files added to the target so that these are available + # Header files added to the target so that these are available # in code downloaded from the FreeRTOS console. - ${CMAKE_CURRENT_LIST_DIR}/device_shadow_for_aws/shadowFilePaths.cmake ${DEVICE_SHADOW_HEADER_FILES} ) @@ -49,9 +53,13 @@ afr_module_dependencies( # Device Shadow demo can be downloaded. afr_module(NAME device_shadow_demo_dependencies ) +# Add cmake files of module to metadata. +afr_module_cmake_files(${AFR_CURRENT_MODULE} + ${CMAKE_CURRENT_LIST_DIR}/device_shadow_demo_dependencies.cmake +) + afr_set_lib_metadata(ID "device_shadow_demo_dependencies") -afr_set_lib_metadata(DESCRIPTION "This library enables you to store and retrieve the \ -current state (the \"shadow\") of every registered device on AWS IoT.") +afr_set_lib_metadata(DESCRIPTION "This library enables a registered device to update and retrieve its current state (the \"shadow\") on AWS IoT.") afr_set_lib_metadata(DISPLAY_NAME "Device Shadow") afr_set_lib_metadata(CATEGORY "Amazon Services") afr_set_lib_metadata(VERSION "1.0.0") @@ -64,9 +72,6 @@ afr_module_sources( # device_shadow_demo_dependencies target; otherwise, it gives the # "Cannot determine link language for target" error. ${SHADOW_SOURCES} - # This file is added to the target so that it is available - # in code downloaded from the FreeRTOS console. - ${CMAKE_CURRENT_LIST_DIR}/device_shadow_demo_dependencies.cmake ) # Add dependencies of the Device Shadow demo in this target @@ -81,3 +86,15 @@ afr_module_dependencies( # Device Shadow library on the FreeRTOS console. AFR::core_mqtt_demo_dependencies ) + +# Add dependency on "mqtt_demo_helpers" module for the +# Device Shadow demo that uses Secure Sockets +# (present at demos/device_shadow_for_aws folder) ONLY if +# the board supports the Secure Sockets library. +if(TARGET AFR::secure_sockets::mcu_port) + afr_module_dependencies( + ${AFR_CURRENT_MODULE} + PUBLIC + AFR::mqtt_demo_helpers + ) +endif() diff --git a/libraries/device_shadow_for_aws b/libraries/device_shadow_for_aws index 0bd9f3eb950..508ce43a225 160000 --- a/libraries/device_shadow_for_aws +++ b/libraries/device_shadow_for_aws @@ -1 +1 @@ -Subproject commit 0bd9f3eb9504a58f8ab324248d9f2b97b594a9a7 +Subproject commit 508ce43a2257be5d38bfd2a778607fa921cb2dac diff --git a/libraries/freertos_plus/standard/crypto/include/iot_crypto.h b/libraries/freertos_plus/standard/crypto/include/iot_crypto.h index bbbd3a4d8cd..0069b111b8b 100644 --- a/libraries/freertos_plus/standard/crypto/include/iot_crypto.h +++ b/libraries/freertos_plus/standard/crypto/include/iot_crypto.h @@ -1,5 +1,5 @@ /* - * FreeRTOS Crypto V1.1.1 + * FreeRTOS Crypto V1.1.2 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/freertos_plus/standard/crypto/src/iot_crypto.c b/libraries/freertos_plus/standard/crypto/src/iot_crypto.c index 1dc889367db..32945f65110 100644 --- a/libraries/freertos_plus/standard/crypto/src/iot_crypto.c +++ b/libraries/freertos_plus/standard/crypto/src/iot_crypto.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Crypto V1.1.1 + * FreeRTOS Crypto V1.1.2 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/freertos_plus/standard/crypto/test/iot_test_crypto.c b/libraries/freertos_plus/standard/crypto/test/iot_test_crypto.c index a49a268653b..c09cdfc10bc 100644 --- a/libraries/freertos_plus/standard/crypto/test/iot_test_crypto.c +++ b/libraries/freertos_plus/standard/crypto/test/iot_test_crypto.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Crypto V1.1.1 + * FreeRTOS Crypto V1.1.2 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/freertos_plus/standard/freertos_plus_posix/include/FreeRTOS_POSIX_portable_default.h b/libraries/freertos_plus/standard/freertos_plus_posix/include/FreeRTOS_POSIX_portable_default.h index 356f1661e20..749592a5e3e 100644 --- a/libraries/freertos_plus/standard/freertos_plus_posix/include/FreeRTOS_POSIX_portable_default.h +++ b/libraries/freertos_plus/standard/freertos_plus_posix/include/FreeRTOS_POSIX_portable_default.h @@ -128,6 +128,9 @@ #ifndef posixconfigENABLE_USECONDS_T #define posixconfigENABLE_USECONDS_T 1 /**< useconds_t in sys/types.h */ #endif +#ifndef posixconfigENABLE_TM + #define posixconfigENABLE_TM 1 /**< struct tm in time.h */ +#endif #ifndef posixconfigENABLE_TIMESPEC #define posixconfigENABLE_TIMESPEC 1 /**< struct timespec in time.h */ #endif diff --git a/libraries/freertos_plus/standard/freertos_plus_tcp b/libraries/freertos_plus/standard/freertos_plus_tcp index d1e521d5a2d..9a25860e761 160000 --- a/libraries/freertos_plus/standard/freertos_plus_tcp +++ b/libraries/freertos_plus/standard/freertos_plus_tcp @@ -1 +1 @@ -Subproject commit d1e521d5a2dc1c1f27bb693ea8c6fb89d6bedad6 +Subproject commit 9a25860e761036a9eb780799c9db632e3eff60c9 diff --git a/libraries/freertos_plus/standard/freertos_plus_tcp.cmake b/libraries/freertos_plus/standard/freertos_plus_tcp.cmake index 632b2f4b7ad..23b1d1daee7 100644 --- a/libraries/freertos_plus/standard/freertos_plus_tcp.cmake +++ b/libraries/freertos_plus/standard/freertos_plus_tcp.cmake @@ -9,6 +9,11 @@ set(inc_dir "${CMAKE_CURRENT_LIST_DIR}/freertos_plus_tcp/include") # for the FreeRTOS console. file(GLOB FREERTOS_PLUS_TCP_HEADER_FILES "${inc_dir}/*.h") +# Add cmake files of module to metadata. +afr_module_cmake_files(${AFR_CURRENT_MODULE} + ${CMAKE_CURRENT_LIST_DIR}/freertos_plus_tcp.cmake +) + afr_module_sources( ${AFR_CURRENT_MODULE} PRIVATE @@ -21,10 +26,9 @@ afr_module_sources( "${src_dir}/FreeRTOS_TCP_IP.c" "${src_dir}/FreeRTOS_TCP_WIN.c" "${src_dir}/FreeRTOS_UDP_IP.c" - # List of files added to the target so that these are available + # Header files are added to the target so that these are available # in code downloaded from the FreeRTOS console. ${FREERTOS_PLUS_TCP_HEADER_FILES} - ${CMAKE_CURRENT_LIST_DIR}/freertos_plus_tcp.cmake ) afr_module_include_dirs( @@ -43,4 +47,5 @@ endif() afr_module_dependencies( ${AFR_CURRENT_MODULE} PUBLIC AFR::${AFR_CURRENT_MODULE}::mcu_port -) \ No newline at end of file +) + diff --git a/libraries/freertos_plus/standard/freertos_plus_tcp_utils.cmake b/libraries/freertos_plus/standard/freertos_plus_tcp_utils.cmake new file mode 100644 index 00000000000..df70ba5a18b --- /dev/null +++ b/libraries/freertos_plus/standard/freertos_plus_tcp_utils.cmake @@ -0,0 +1,32 @@ +afr_module(NAME "freertos_plus_tcp_utils" INTERNAL) + +set(utils_src_dir "${CMAKE_CURRENT_LIST_DIR}/freertos_plus_tcp/tools/tcp_utilities") +set(utils_inc_dir "${CMAKE_CURRENT_LIST_DIR}/freertos_plus_tcp/tools/tcp_utilities/include") + +# Add cmake files of module to metadata. +afr_module_cmake_files(${AFR_CURRENT_MODULE} + ${CMAKE_CURRENT_LIST_DIR}/freertos_plus_tcp_utils.cmake +) + +afr_module_sources( + ${AFR_CURRENT_MODULE} + PRIVATE + "${utils_src_dir}/tcp_dump_packets.c" + "${utils_src_dir}/tcp_mem_stats.c" + "${utils_src_dir}/tcp_netstat.c" + # Header files are added to the target so that these are available + # in code downloaded from the FreeRTOS console. + "${utils_inc_dir}/tcp_dump_packets.h" + "${utils_inc_dir}/tcp_mem_stats.h" + "${utils_inc_dir}/tcp_netstat.h" +) + +afr_module_include_dirs( + ${AFR_CURRENT_MODULE} + PUBLIC "${utils_inc_dir}" +) + +afr_module_dependencies( + ${AFR_CURRENT_MODULE} + PUBLIC AFR::freertos_plus_tcp +) diff --git a/libraries/freertos_plus/standard/tls/include/iot_tls.h b/libraries/freertos_plus/standard/tls/include/iot_tls.h index e6384bef662..a9cb4efbd8a 100644 --- a/libraries/freertos_plus/standard/tls/include/iot_tls.h +++ b/libraries/freertos_plus/standard/tls/include/iot_tls.h @@ -1,5 +1,5 @@ /* - * FreeRTOS TLS V1.3.0 + * FreeRTOS TLS V1.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/freertos_plus/standard/tls/src/iot_tls.c b/libraries/freertos_plus/standard/tls/src/iot_tls.c index 798749a4da5..65503c6bc63 100644 --- a/libraries/freertos_plus/standard/tls/src/iot_tls.c +++ b/libraries/freertos_plus/standard/tls/src/iot_tls.c @@ -1,5 +1,5 @@ /* - * FreeRTOS TLS V1.3.0 + * FreeRTOS TLS V1.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -457,6 +457,7 @@ static int prvReadCertificateIntoContext( TLSContext_t * pxTlsContext, /* Get the handle of the certificate. */ xResult = xFindObjectWithLabelAndClass( pxTlsContext->xP11Session, pcLabelName, + strlen( pcLabelName ), xClass, &xCertObj ); @@ -555,6 +556,7 @@ static int prvInitializeClientCredential( TLSContext_t * pxCtx ) /* Get the handle of the device private key. */ xResult = xFindObjectWithLabelAndClass( pxCtx->xP11Session, pkcs11configLABEL_DEVICE_PRIVATE_KEY_FOR_TLS, + sizeof( pkcs11configLABEL_DEVICE_PRIVATE_KEY_FOR_TLS ) - 1, CKO_PRIVATE_KEY, &pxCtx->xP11PrivateKey ); } diff --git a/libraries/freertos_plus/standard/tls/test/iot_test_tls.c b/libraries/freertos_plus/standard/tls/test/iot_test_tls.c index 62009c1539d..460d4841381 100644 --- a/libraries/freertos_plus/standard/tls/test/iot_test_tls.c +++ b/libraries/freertos_plus/standard/tls/test/iot_test_tls.c @@ -1,5 +1,5 @@ /* - * FreeRTOS TLS V1.3.0 + * FreeRTOS TLS V1.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/freertos_plus/standard/tls/test/iot_test_tls.h b/libraries/freertos_plus/standard/tls/test/iot_test_tls.h index 6e8f00608af..b20272d5452 100644 --- a/libraries/freertos_plus/standard/tls/test/iot_test_tls.h +++ b/libraries/freertos_plus/standard/tls/test/iot_test_tls.h @@ -1,5 +1,5 @@ /* - * FreeRTOS TLS V1.3.0 + * FreeRTOS TLS V1.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/freertos_plus/standard/utils/include/iot_system_init.h b/libraries/freertos_plus/standard/utils/include/iot_system_init.h index 3af2eefbbde..ba086c54ad8 100644 --- a/libraries/freertos_plus/standard/utils/include/iot_system_init.h +++ b/libraries/freertos_plus/standard/utils/include/iot_system_init.h @@ -1,5 +1,5 @@ /* - * FreeRTOS Utils V1.2.0 + * FreeRTOS Utils V1.2.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/freertos_plus/standard/utils/src/iot_system_init.c b/libraries/freertos_plus/standard/utils/src/iot_system_init.c index 94d497eb123..b90fa0f0f2e 100644 --- a/libraries/freertos_plus/standard/utils/src/iot_system_init.c +++ b/libraries/freertos_plus/standard/utils/src/iot_system_init.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Utils V1.2.0 + * FreeRTOS Utils V1.2.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/jobs_demo_dependencies.cmake b/libraries/jobs_demo_dependencies.cmake new file mode 100644 index 00000000000..b0a56335023 --- /dev/null +++ b/libraries/jobs_demo_dependencies.cmake @@ -0,0 +1,82 @@ +# jobs module. +afr_module(NAME jobs ) + +# Include Jobs library's source and header path variables. +include("${CMAKE_CURRENT_LIST_DIR}/jobs_for_aws/jobsFilePaths.cmake") + +# Create a list of all header files in the Jobs library. +# The list of header files will be added to metadata required +# for the FreeRTOS console. +set(JOBS_HEADER_FILES "") +foreach(jobs_public_include_dir ${JOBS_INCLUDE_PUBLIC_DIRS}) + file(GLOB jobs_public_include_header_files + LIST_DIRECTORIES false + ${jobs_public_include_dir}/*.h ) + list(APPEND JOBS_HEADER_FILES ${jobs_public_include_header_files}) +endforeach() + +# Add cmake files of module to metadata. +afr_module_cmake_files(${AFR_CURRENT_MODULE} + ${CMAKE_CURRENT_LIST_DIR}/jobs_for_aws/jobsFilePaths.cmake +) + +afr_module_sources( + ${AFR_CURRENT_MODULE} + PRIVATE + ${JOBS_SOURCES} + # Header files added to the target so that these are available + # in code downloaded from the FreeRTOS console. + ${JOBS_HEADER_FILES} +) + +afr_module_include_dirs( + ${AFR_CURRENT_MODULE} + PUBLIC + ${JOBS_INCLUDE_PUBLIC_DIRS} +) + +################################################################ + +# jobs_demo_dependencies module. +# Metadata module used for the Jobs library in the FreeRTOS console. +# It represents a collection of module dependencies required +# by the Jobs demo. +# This module enables the FreeRTOS console experience of enabling +# library dependencies when selecting the Jobs library, so that the +# Jobs demo can be downloaded. +afr_module(NAME jobs_demo_dependencies ) + +afr_set_lib_metadata(ID "jobs_demo_dependencies") +afr_set_lib_metadata(DESCRIPTION "This library enables a device registered on AWS IoT to receive pending job requests and post job updates to the AWS IoT Jobs service.") +afr_set_lib_metadata(DISPLAY_NAME "Jobs") +afr_set_lib_metadata(CATEGORY "Amazon Services") +afr_set_lib_metadata(VERSION "1.0.0") +afr_set_lib_metadata(IS_VISIBLE "true") + +# Add cmake files of module to metadata. +afr_module_cmake_files(${AFR_CURRENT_MODULE} + ${CMAKE_CURRENT_LIST_DIR}/jobs_demo_dependencies.cmake +) + +afr_module_sources( + ${AFR_CURRENT_MODULE} + PRIVATE + # Adding sources so that CMake can generate the + # jobs_demo_dependencies target; otherwise, it gives the + # "Cannot determine link language for target" error. + ${JOBS_SOURCES} +) + +# Add dependencies of the Jobs demo in this target +# to support metadata required for FreeRTOS console. +afr_module_dependencies( + ${AFR_CURRENT_MODULE} + PUBLIC + AFR::jobs + AFR::core_json + AFR::mqtt_demo_helpers + # Add dependency on core_mqtt_demo_dependencies module + # so that coreMQTT library is auto-included when selecting + # Jobs library on the FreeRTOS console. + AFR::core_mqtt_demo_dependencies +) diff --git a/libraries/jobs_for_aws b/libraries/jobs_for_aws new file mode 160000 index 00000000000..5844fb9a7c6 --- /dev/null +++ b/libraries/jobs_for_aws @@ -0,0 +1 @@ +Subproject commit 5844fb9a7c6bc3d12f0e4ef143d873d516cf4cce diff --git a/libraries/logging/include/iot_logging_task.h b/libraries/logging/include/iot_logging_task.h index ddc7c3edf39..f680a9632c8 100644 --- a/libraries/logging/include/iot_logging_task.h +++ b/libraries/logging/include/iot_logging_task.h @@ -1,5 +1,5 @@ /* - * FreeRTOS Common V1.1.2 + * FreeRTOS Common V1.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/logging/include/logging_levels.h b/libraries/logging/include/logging_levels.h index eed53dcfee6..f3f4f64aa15 100644 --- a/libraries/logging/include/logging_levels.h +++ b/libraries/logging/include/logging_levels.h @@ -1,5 +1,5 @@ /* - * Logging Level Macros + * FreeRTOS Common V1.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/logging/include/logging_stack.h b/libraries/logging/include/logging_stack.h index 1d22fa95ec2..926e151b2b8 100644 --- a/libraries/logging/include/logging_stack.h +++ b/libraries/logging/include/logging_stack.h @@ -1,5 +1,5 @@ /* - * Logging Stack V1.0.0 + * FreeRTOS Common V1.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -36,6 +36,7 @@ /* Standard Include. */ #include +#include /* Metadata information to prepend to every log message. */ diff --git a/libraries/logging/iot_logging.c b/libraries/logging/iot_logging.c index ab918368247..139ea8ecd09 100644 --- a/libraries/logging/iot_logging.c +++ b/libraries/logging/iot_logging.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Common V1.1.2 + * FreeRTOS Common V1.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/libraries/logging/iot_logging_task_dynamic_buffers.c b/libraries/logging/iot_logging_task_dynamic_buffers.c index 07abd96bb00..83fe8fca7c9 100644 --- a/libraries/logging/iot_logging_task_dynamic_buffers.c +++ b/libraries/logging/iot_logging_task_dynamic_buffers.c @@ -1,5 +1,5 @@ /* - * FreeRTOS Common V1.1.2 + * FreeRTOS Common V1.1.3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/projects/cypress/CY8CKIT_064S0S2_4343W/mtb/aws_demos/.project b/projects/cypress/CY8CKIT_064S0S2_4343W/mtb/aws_demos/.project index e7d50f0db71..3d546f6f5c8 100644 --- a/projects/cypress/CY8CKIT_064S0S2_4343W/mtb/aws_demos/.project +++ b/projects/cypress/CY8CKIT_064S0S2_4343W/mtb/aws_demos/.project @@ -337,11 +337,6 @@ 2 PARENT-5-PROJECT_LOC/libraries/c_sdk/aws/shadow/include/types - - libraries/c_sdk/aws/defender/include - 2 - PARENT-5-PROJECT_LOC/libraries/c_sdk/aws/defender/include - libraries/freertos_plus/standard/crypto 2 diff --git a/projects/cypress/CY8CKIT_064S0S2_4343W/mtb/aws_demos/afr.mk b/projects/cypress/CY8CKIT_064S0S2_4343W/mtb/aws_demos/afr.mk index 91a8c17f43b..38f7633c977 100755 --- a/projects/cypress/CY8CKIT_064S0S2_4343W/mtb/aws_demos/afr.mk +++ b/projects/cypress/CY8CKIT_064S0S2_4343W/mtb/aws_demos/afr.mk @@ -174,31 +174,40 @@ SOURCES+=\ $(CY_AFR_ROOT)/demos/demo_runner/aws_demo_version.c\ $(CY_AFR_ROOT)/demos/demo_runner/iot_demo_freertos.c\ $(CY_AFR_ROOT)/demos/demo_runner/iot_demo_runner.c\ + $(CY_AFR_ROOT)/demos/common/http_demo_helpers/http_demo_utils.c\ + $(CY_AFR_ROOT)/demos/common/mqtt_demo_helpers/mqtt_demo_helpers.c\ + $(CY_AFR_ROOT)/demos/common/pkcs11_helpers/pkcs11_helpers.c\ $(wildcard $(CY_AFR_ROOT)/demos/dev_mode_key_provisioning/src/*.c)\ $(wildcard $(CY_AFR_ROOT)/demos/greengrass_connectivity/*.c)\ - $(wildcard $(CY_AFR_ROOT)/demos/defender/*.c)\ - $(wildcard $(CY_AFR_ROOT)/demos/https/*.c)\ + $(wildcard $(CY_AFR_ROOT)/demos/mqtt/*.c)\ $(wildcard $(CY_AFR_ROOT)/demos/coreMQTT/*.c)\ + $(wildcard $(CY_AFR_ROOT)/demos/coreHTTP/*.c)\ $(wildcard $(CY_AFR_ROOT)/demos/network_manager/*.c)\ $(wildcard $(CY_AFR_ROOT)/demos/tcp/*.c)\ - $(wildcard $(CY_AFR_ROOT)/demos/device_shadow_for_aws/*.c) + $(wildcard $(CY_AFR_ROOT)/demos/shadow/*.c)\ + $(wildcard $(CY_AFR_ROOT)/demos/device_shadow_for_aws/*.c)\ + $(wildcard $(CY_AFR_ROOT)/demos/jobs_for_aws/*.c)\ + $(wildcard $(CY_AFR_ROOT)/demos/device_defender_for_aws/*.c)\ + $(wildcard $(CY_AFR_ROOT)/demos/device_defender_for_aws/metrics_collector/lwip/*.c) INCLUDES+=\ $(CY_EXTAPP_PATH)/common\ $(CY_AFR_ROOT)/demos/dev_mode_key_provisioning\ $(CY_AFR_ROOT)/demos/dev_mode_key_provisioning/include\ - $(CY_AFR_ROOT)/demos/https\ $(CY_AFR_ROOT)/demos/include\ $(CY_AFR_ROOT)/demos/network_manager\ $(CY_AFR_ROOT)/demos/tcp\ - $(CY_AFR_ROOT)/demos/device_shadow_for_aws\ + $(CY_AFR_ROOT)/demos/common/http_demo_helpers\ + $(CY_AFR_ROOT)/demos/common/mqtt_demo_helpers\ + $(CY_AFR_ROOT)/demos/common/pkcs11_helpers\ + $(CY_AFR_ROOT)/demos/device_defender_for_aws\ + $(CY_AFR_ROOT)/demos/device_defender_for_aws/metrics_collector/lwip\ ################################################################################ # libraries (3rd party) ################################################################################ SOURCES+=\ - $(wildcard $(CY_AFR_ROOT)/libraries/3rdparty/http_parser/http_parser.c)\ $(wildcard $(CY_AFR_ROOT)/libraries/3rdparty/lwip/src/api/*c)\ $(wildcard $(CY_AFR_ROOT)/libraries/3rdparty/lwip/src/core/*c)\ $(wildcard $(CY_AFR_ROOT)/libraries/3rdparty/lwip/src/core/ipv4/*c)\ @@ -224,7 +233,6 @@ endif INCLUDES+=\ $(CY_AFR_ROOT)/libraries/3rdparty/pkcs11\ - $(CY_AFR_ROOT)/libraries/3rdparty/http_parser\ $(CY_AFR_ROOT)/libraries/3rdparty/lwip/src/include\ $(CY_AFR_ROOT)/libraries/3rdparty/lwip_osal/include\ $(CY_AFR_ROOT)/libraries/3rdparty/mbedtls_config\ @@ -247,18 +255,17 @@ SOURCES+=\ $(wildcard $(CY_AFR_ROOT)/libraries/abstractions/secure_sockets/lwip/*c)\ $(wildcard $(CY_AFR_ROOT)/libraries/abstractions/pkcs11/corePKCS11/source/*.c)\ $(wildcard $(CY_AFR_ROOT)/libraries/abstractions/transport/secure_sockets/*.c)\ - $(wildcard $(CY_AFR_ROOT)/libraries/abstractions/retry_utils/freertos/*.c)\ + $(wildcard $(CY_AFR_ROOT)/libraries/abstractions/backoff_algorithm/source/*.c)\ INCLUDES+=\ $(CY_AFR_ROOT)/libraries/abstractions/pkcs11/corePKCS11/source/include\ - $(CY_AFR_ROOT)/libraries/abstractions/pkcs11/corePKCS11/source/portable/mbedtls/include\ $(CY_AFR_ROOT)/libraries/abstractions/platform/freertos\ $(CY_AFR_ROOT)/libraries/abstractions/platform/freertos/include\ $(CY_AFR_ROOT)/libraries/abstractions/platform/freertos/include/platform\ $(CY_AFR_ROOT)/libraries/abstractions/platform/include\ $(CY_AFR_ROOT)/libraries/abstractions/platform/include/platform\ $(CY_AFR_ROOT)/libraries/abstractions/platform/include/types\ - $(CY_AFR_ROOT)/libraries/abstractions/retry_utils\ + $(CY_AFR_ROOT)/libraries/abstractions/backoff_algorithm/source/include\ $(CY_AFR_ROOT)/libraries/abstractions/secure_sockets\ $(CY_AFR_ROOT)/libraries/abstractions/secure_sockets/include\ $(CY_AFR_ROOT)/libraries/abstractions/transport/secure_sockets\ @@ -301,15 +308,19 @@ SOURCES+=\ $(CY_AFR_ROOT)/libraries/c_sdk/standard/mqtt/src/iot_mqtt_subscription_container.c \ $(CY_AFR_ROOT)/libraries/c_sdk/standard/mqtt/src/iot_mqtt_mutex_wrapper.c \ $(CY_AFR_ROOT)/libraries/c_sdk/standard/mqtt/src/iot_mqtt_publish_duplicates.c \ - $(CY_AFR_ROOT)/libraries/c_sdk/standard/mqtt/src/iot_mqtt_validate.c\ - $(CY_AFR_ROOT)/libraries/coreMQTT/source/core_mqtt_serializer.c\ - $(CY_AFR_ROOT)/libraries/coreMQTT/source/core_mqtt_state.c\ - $(CY_AFR_ROOT)/libraries/coreMQTT/source/core_mqtt.c + $(CY_AFR_ROOT)/libraries/c_sdk/standard/mqtt/src/iot_mqtt_validate.c -# Device Shadow and core JSON +# Device Shadow, Device Defender, Jobs, coreJSON, coreMQTT and coreHTTP SOURCES+=\ $(CY_AFR_ROOT)/libraries/device_shadow_for_aws/source/shadow.c\ - $(CY_AFR_ROOT)/libraries/coreJSON/source/core_json.c + $(CY_AFR_ROOT)/libraries/coreJSON/source/core_json.c \ + $(CY_AFR_ROOT)/libraries/device_defender_for_aws/source/defender.c\ + $(CY_AFR_ROOT)/libraries/jobs_for_aws/source/jobs.c\ + $(CY_AFR_ROOT)/libraries/coreMQTT/source/core_mqtt_serializer.c\ + $(CY_AFR_ROOT)/libraries/coreMQTT/source/core_mqtt_state.c\ + $(CY_AFR_ROOT)/libraries/coreMQTT/source/core_mqtt.c\ + $(CY_AFR_ROOT)/libraries/coreHTTP/source/core_http_client.c\ + $(CY_AFR_ROOT)/libraries/coreHTTP/source/dependency/3rdparty/http_parser/http_parser.c INCLUDES+=\ $(CY_AFR_ROOT)/libraries/c_sdk/standard/common\ @@ -327,8 +338,6 @@ INCLUDES+=\ $(CY_AFR_ROOT)/libraries/c_sdk/standard/mqtt/include/types\ $(CY_AFR_ROOT)/libraries/c_sdk/standard/mqtt/src\ $(CY_AFR_ROOT)/libraries/c_sdk/standard/mqtt/src/private\ - $(CY_AFR_ROOT)/libraries/coreMQTT/source/include\ - $(CY_AFR_ROOT)/libraries/coreMQTT/source/interface\ $(CY_AFR_ROOT)/libraries/c_sdk/standard/serializer\ $(CY_AFR_ROOT)/libraries/c_sdk/standard/serializer/include\ $(CY_AFR_ROOT)/libraries/c_sdk/aws/shadow/include\ @@ -336,8 +345,13 @@ INCLUDES+=\ $(CY_AFR_ROOT)/libraries/c_sdk/aws/defender/include\ $(CY_AFR_ROOT)/libraries/coreMQTT/source/include\ $(CY_AFR_ROOT)/libraries/coreMQTT/source/interface\ + $(CY_AFR_ROOT)/libraries/coreHTTP/source/include\ + $(CY_AFR_ROOT)/libraries/coreHTTP/source/interface\ + $(CY_AFR_ROOT)/libraries/coreHTTP/source/dependency/3rdparty/http_parser\ $(CY_AFR_ROOT)/libraries/device_shadow_for_aws/source/include\ $(CY_AFR_ROOT)/libraries/coreJSON/source/include\ + $(CY_AFR_ROOT)/libraries/device_defender_for_aws/source/include\ + $(CY_AFR_ROOT)/libraries/jobs_for_aws/source/include ################################################################################ # libraries (freertos_plus) diff --git a/projects/cypress/CY8CKIT_064S0S2_4343W/mtb/aws_tests/afr.mk b/projects/cypress/CY8CKIT_064S0S2_4343W/mtb/aws_tests/afr.mk index 8cad1cf4eaa..7ef21a7120d 100644 --- a/projects/cypress/CY8CKIT_064S0S2_4343W/mtb/aws_tests/afr.mk +++ b/projects/cypress/CY8CKIT_064S0S2_4343W/mtb/aws_tests/afr.mk @@ -190,7 +190,6 @@ INCLUDES+=\ ################################################################################ SOURCES+=\ - $(wildcard $(CY_AFR_ROOT)/libraries/3rdparty/http_parser/http_parser.c)\ $(wildcard $(CY_AFR_ROOT)/libraries/3rdparty/lwip/src/api/*c)\ $(wildcard $(CY_AFR_ROOT)/libraries/3rdparty/lwip/src/core/*c)\ $(wildcard $(CY_AFR_ROOT)/libraries/3rdparty/lwip/src/core/ipv4/*c)\ @@ -216,7 +215,6 @@ endif INCLUDES+=\ $(CY_AFR_ROOT)/tests/include\ $(CY_AFR_ROOT)/libraries/3rdparty/pkcs11\ - $(CY_AFR_ROOT)/libraries/3rdparty/http_parser\ $(CY_AFR_ROOT)/libraries/3rdparty/lwip/src/include\ $(CY_AFR_ROOT)/libraries/3rdparty/lwip_osal/include\ $(CY_AFR_ROOT)/libraries/3rdparty/mbedtls_config\ @@ -237,7 +235,7 @@ SOURCES+=\ $(wildcard $(CY_AFR_ROOT)/libraries/abstractions/pkcs11/corePKCS11/source/*.c)\ $(wildcard $(CY_AFR_ROOT)/libraries/abstractions/pkcs11/corePKCS11/source/*.c)\ $(wildcard $(CY_AFR_ROOT)/libraries/abstractions/transport/secure_sockets/*.c)\ - $(wildcard $(CY_AFR_ROOT)/libraries/abstractions/retry_utils/freertos/*.c)\ + $(wildcard $(CY_AFR_ROOT)/libraries/abstractions/backoff_algorithm/source/*.c)\ # Test code SOURCES+=\ @@ -249,14 +247,13 @@ SOURCES+=\ INCLUDES+=\ $(CY_AFR_ROOT)/libraries/abstractions/pkcs11/corePKCS11/source/include\ - $(CY_AFR_ROOT)/libraries/abstractions/pkcs11/corePKCS11/source/portable/mbedtls/include\ $(CY_AFR_ROOT)/libraries/abstractions/platform/freertos\ $(CY_AFR_ROOT)/libraries/abstractions/platform/freertos/include\ $(CY_AFR_ROOT)/libraries/abstractions/platform/freertos/include/platform\ $(CY_AFR_ROOT)/libraries/abstractions/platform/include\ $(CY_AFR_ROOT)/libraries/abstractions/platform/include/platform\ $(CY_AFR_ROOT)/libraries/abstractions/platform/include/types\ - $(CY_AFR_ROOT)/libraries/abstractions/retry_utils\ + $(CY_AFR_ROOT)/libraries/abstractions/backoff_algorithm/source/include\ $(CY_AFR_ROOT)/libraries/abstractions/secure_sockets\ $(CY_AFR_ROOT)/libraries/abstractions/secure_sockets/include\ $(CY_AFR_ROOT)/libraries/abstractions/transport/secure_sockets\ @@ -311,15 +308,19 @@ SOURCES+=\ $(CY_AFR_ROOT)/libraries/c_sdk/standard/mqtt/src/iot_mqtt_managed_function_wrapper.c\ $(CY_AFR_ROOT)/libraries/c_sdk/standard/mqtt/src/iot_mqtt_subscription_container.c\ $(CY_AFR_ROOT)/libraries/c_sdk/standard/mqtt/src/iot_mqtt_mutex_wrapper.c\ - $(CY_AFR_ROOT)/libraries/c_sdk/standard/mqtt/src/iot_mqtt_publish_duplicates.c\ - $(CY_AFR_ROOT)/libraries/coreMQTT/source/core_mqtt_serializer.c\ - $(CY_AFR_ROOT)/libraries/coreMQTT/source/core_mqtt_state.c\ - $(CY_AFR_ROOT)/libraries/coreMQTT/source/core_mqtt.c + $(CY_AFR_ROOT)/libraries/c_sdk/standard/mqtt/src/iot_mqtt_publish_duplicates.c -# Device Shadow and core JSON +# Device Shadow, Device Defender, Jobs, coreJSON, coreMQTT and coreHTTP SOURCES+=\ $(CY_AFR_ROOT)/libraries/device_shadow_for_aws/source/shadow.c\ - $(CY_AFR_ROOT)/libraries/coreJSON/source/core_json.c + $(CY_AFR_ROOT)/libraries/coreJSON/source/core_json.c \ + $(CY_AFR_ROOT)/libraries/device_defender_for_aws/source/defender.c\ + $(CY_AFR_ROOT)/libraries/jobs_for_aws/source/jobs.c\ + $(CY_AFR_ROOT)/libraries/coreMQTT/source/core_mqtt_serializer.c\ + $(CY_AFR_ROOT)/libraries/coreMQTT/source/core_mqtt_state.c\ + $(CY_AFR_ROOT)/libraries/coreMQTT/source/core_mqtt.c\ + $(CY_AFR_ROOT)/libraries/coreHTTP/source/core_http_client.c\ + $(CY_AFR_ROOT)/libraries/coreHTTP/source/dependency/3rdparty/http_parser/http_parser.c # Test code SOURCES+=\ @@ -328,6 +329,7 @@ SOURCES+=\ $(wildcard $(CY_AFR_ROOT)/libraries/c_sdk/standard/mqtt/test/system/*.c)\ $(CY_AFR_ROOT)/libraries/c_sdk/standard/mqtt/test/iot_test_mqtt_agent.c\ $(CY_AFR_ROOT)/tests/integration_test/core_mqtt_system_test.c\ + $(CY_AFR_ROOT)/tests/integration_test/core_http_system_test.c\ $(CY_AFR_ROOT)/tests/integration_test/shadow_system_test.c @@ -350,8 +352,6 @@ INCLUDES+=\ $(CY_AFR_ROOT)/libraries/c_sdk/standard/mqtt/src/private\ $(CY_AFR_ROOT)/libraries/c_sdk/standard/mqtt/test/mock\ $(CY_AFR_ROOT)/libraries/c_sdk/standard/mqtt/test/access\ - $(CY_AFR_ROOT)/libraries/coreMQTT/source/include\ - $(CY_AFR_ROOT)/libraries/coreMQTT/source/interface\ $(CY_AFR_ROOT)/libraries/c_sdk/standard/ble/include\ $(CY_AFR_ROOT)/libraries/c_sdk/standard/serializer\ $(CY_AFR_ROOT)/libraries/c_sdk/standard/serializer/include\ @@ -364,8 +364,13 @@ INCLUDES+=\ $(CY_AFR_ROOT)/libraries/c_sdk/aws/defender/src/private\ $(CY_AFR_ROOT)/libraries/coreMQTT/source/include\ $(CY_AFR_ROOT)/libraries/coreMQTT/source/interface\ + $(CY_AFR_ROOT)/libraries/coreHTTP/source/include\ + $(CY_AFR_ROOT)/libraries/coreHTTP/source/interface\ + $(CY_AFR_ROOT)/libraries/coreHTTP/source/dependency/3rdparty/http_parser\ $(CY_AFR_ROOT)/libraries/device_shadow_for_aws/source/include\ $(CY_AFR_ROOT)/libraries/coreJSON/source/include\ + $(CY_AFR_ROOT)/libraries/device_defender_for_aws/source/include\ + $(CY_AFR_ROOT)/libraries/jobs_for_aws/source/include ################################################################################ # libraries (freertos_plus) diff --git a/projects/cypress/CYW943907AEVAL1F/wicedstudio/aws_demos/.project b/projects/cypress/CYW943907AEVAL1F/wicedstudio/aws_demos/.project index 458053d6f41..428a3aacadb 100644 --- a/projects/cypress/CYW943907AEVAL1F/wicedstudio/aws_demos/.project +++ b/projects/cypress/CYW943907AEVAL1F/wicedstudio/aws_demos/.project @@ -316,6 +316,56 @@ 1 BASE_DIR/libraries/c_sdk/standard/common/include/private/iot_taskpool_internal.h + + libraries/coreMQTT/source/core_mqtt.c + 1 + BASE_DIR/libraries/coreMQTT/source/core_mqtt.c + + + libraries/coreMQTT/source/core_mqtt_state.c + 1 + BASE_DIR/libraries/coreMQTT/source/core_mqtt_state.c + + + libraries/coreMQTT/source/core_mqtt_serializer.c + 1 + BASE_DIR/libraries/coreMQTT/source/core_mqtt_serializer.c + + + libraries/coreMQTT/source/include/core_mqtt.h + 1 + BASE_DIR/libraries/coreMQTT/source/include/core_mqtt.h + + + libraries/coreMQTT/source/include/core_mqtt_config_defaults.h + 1 + BASE_DIR/libraries/coreMQTT/source/include/core_mqtt_config_defaults.h + + + libraries/coreMQTT/source/include/core_mqtt_serializer.h + 1 + BASE_DIR/libraries/coreMQTT/source/include/core_mqtt_serializer.h + + + libraries/coreMQTT/source/include/core_mqtt_state.h + 1 + BASE_DIR/libraries/coreMQTT/source/include/core_mqtt_state.h + + + libraries/coreMQTT/source/interface/transport_interface.h + 1 + BASE_DIR/libraries/coreMQTT/source/interface/transport_interface.h + + + libraries/abstractions/backoff_algorithm/source/backoff_algorithm.c + 1 + BASE_DIR/libraries/abstractions/backoff_algorithm/source/backoff_algorithm.c + + + libraries/abstractions/backoff_algorithm/source/include/backoff_algorithm.h + 1 + BASE_DIR/libraries/abstractions/backoff_algorithm/source/include/backoff_algorithm.h + libraries/abstractions/platform/include/platform/iot_clock.h 1 @@ -427,9 +477,9 @@ BASE_DIR/libraries/abstractions/pkcs11/corePKCS11/source/portable/mbedtls/core_pkcs11_mbedtls.c - libraries/abstractions/pkcs11/corePKCS11/source/portable/mbedtls/include/threading_alt.h + libraries/3rdparty/mbedtls_config/threading_alt.h 1 - BASE_DIR/libraries/abstractions/pkcs11/corePKCS11/source/portable/mbedtls/include/threading_alt.h + BASE_DIR/libraries/3rdparty/mbedtls_config/threading_alt.h libraries/abstractions/wifi/include/iot_wifi.h @@ -506,6 +556,46 @@ 1 BASE_DIR/libraries/c_sdk/standard/mqtt/src/iot_mqtt_agent.c + + libraries/coreHTTP/source/core_http_client.c + 1 + BASE_DIR/libraries/coreHTTP/source/core_http_client.c + + + libraries/coreHTTP/source/dependency/3rdparty/http_parser/http_parser.c + 1 + BASE_DIR/libraries/coreHTTP/source/dependency/3rdparty/http_parser/http_parser.c + + + libraries/coreHTTP/source/include/core_http_client.h + 1 + BASE_DIR/libraries/coreHTTP/source/include/core_http_client.h + + + libraries/coreHTTP/source/include/core_http_client_private.h + 1 + BASE_DIR/libraries/coreHTTP/source/include/core_http_client_private.h + + + libraries/coreHTTP/source/include/core_http_config_defaults.h + 1 + BASE_DIR/libraries/coreHTTP/source/include/core_http_config_defaults.h + + + libraries/coreHTTP/source/interface/transport_interface.h + 1 + BASE_DIR/libraries/coreHTTP/source/interface/transport_interface.h + + + libraries/coreHTTP/source/dependency/3rdparty/http_parser/http_parser.h + 1 + BASE_DIR/libraries/coreHTTP/source/dependency/3rdparty/http_parser/http_parser.h + + + demos/common/http_demo_helpers/http_demo_utils.c + 1 + BASE_DIR/demos/common/http_demo_helpers/http_demo_utils.c + libraries/freertos_plus/aws/greengrass/src/aws_greengrass_discovery.c 1 @@ -531,11 +621,136 @@ 1 BASE_DIR/libraries/freertos_plus/aws/greengrass/include/aws_greengrass_discovery.h + + libraries/coreJSON/source/core_json.c + 1 + BASE_DIR/libraries/coreJSON/source/core_json.c + + + libraries/coreJSON/source/include/core_json.h + 1 + BASE_DIR/libraries/coreJSON/source/include/core_json.h + + + libraries/device_shadow_for_aws/source/shadow.c + 1 + BASE_DIR/libraries/device_shadow_for_aws/source/shadow.c + + + libraries/device_shadow_for_aws/source/include/shadow.h + 1 + BASE_DIR/libraries/device_shadow_for_aws/source/include/shadow.h + + + libraries/device_shadow_for_aws/source/include/shadow_config_defaults.h + 1 + BASE_DIR/libraries/device_shadow_for_aws/source/include/shadow_config_defaults.h + + + demos/common/mqtt_demo_helpers/mqtt_demo_helpers.c + 1 + BASE_DIR/demos/common/mqtt_demo_helpers/mqtt_demo_helpers.c + + + libraries/device_defender_for_aws/source/defender.c + 1 + BASE_DIR/libraries/device_defender_for_aws/source/defender.c + + + libraries/device_defender_for_aws/source/include/defender.h + 1 + BASE_DIR/libraries/device_defender_for_aws/source/include/defender.h + + + libraries/device_defender_for_aws/source/include/defender_config_defaults.h + 1 + BASE_DIR/libraries/device_defender_for_aws/source/include/defender_config_defaults.h + + + libraries/jobs_for_aws/source/jobs.c + 1 + BASE_DIR/libraries/jobs_for_aws/source/jobs.c + + + libraries/jobs_for_aws/source/include/jobs.h + 1 + BASE_DIR/libraries/jobs_for_aws/source/include/jobs.h + + + demos/coreHTTP/http_demo_mutual_auth.c + 1 + BASE_DIR/demos/coreHTTP/http_demo_mutual_auth.c + + + demos/coreHTTP/http_demo_s3_download.c + 1 + BASE_DIR/demos/coreHTTP/http_demo_s3_download.c + + + demos/coreHTTP/http_demo_s3_download_multithreaded.c + 1 + BASE_DIR/demos/coreHTTP/http_demo_s3_download_multithreaded.c + + + demos/coreHTTP/http_demo_s3_upload.c + 1 + BASE_DIR/demos/coreHTTP/http_demo_s3_upload.c + + + demos/coreMQTT/mqtt_demo_mutual_auth.c + 1 + BASE_DIR/demos/coreMQTT/mqtt_demo_mutual_auth.c + + + demos/coreMQTT/mqtt_demo_connection_sharing.c + 1 + BASE_DIR/demos/coreMQTT/mqtt_demo_connection_sharing.c + + + demos/device_defender_for_aws/defender_demo.c + 1 + BASE_DIR/demos/device_defender_for_aws/defender_demo.c + + + demos/device_defender_for_aws/report_builder.c + 1 + BASE_DIR/demos/device_defender_for_aws/report_builder.c + + + demos/device_defender_for_aws/metrics_collector/lwip/metrics_collector.c + 1 + BASE_DIR/demos/device_defender_for_aws/metrics_collector/lwip/metrics_collector.c + + + demos/device_defender_for_aws/metrics_collector/lwip/netif_port.h + 1 + BASE_DIR/demos/device_defender_for_aws/metrics_collector/lwip/netif_port.h + + + demos/device_defender_for_aws/report_builder.h + 1 + BASE_DIR/demos/device_defender_for_aws/report_builder.h + + + demos/device_defender_for_aws/metrics_collector.h + 1 + BASE_DIR/demos/device_defender_for_aws/metrics_collector.h + + + demos/device_shadow_for_aws/shadow_demo_main.c + 1 + BASE_DIR/demos/device_shadow_for_aws/shadow_demo_main.c + demos/greengrass_connectivity/aws_greengrass_discovery_demo.c 1 BASE_DIR/demos/greengrass_connectivity/aws_greengrass_discovery_demo.c + + demos/jobs_for_aws/jobs_demo.c + 1 + BASE_DIR/demos/jobs_for_aws/jobs_demo.c + application_code/cypress_code/app_dct.c 1 @@ -616,6 +831,76 @@ 1 BASE_DIR/vendors/cypress/boards/CYW943907AEVAL1F/aws_demos/config_files/lwipopts.h + + config_files/core_http_config.h + 1 + BASE_DIR/vendors/cypress/boards/CYW943907AEVAL1F/aws_demos/config_files/core_http_config.h + + + config_files/core_mqtt_config.h + 1 + BASE_DIR/vendors/cypress/boards/CYW943907AEVAL1F/aws_demos/config_files/core_mqtt_config.h + + + config_files/core_pkcs11_config.h + 1 + BASE_DIR/vendors/cypress/boards/CYW943907AEVAL1F/aws_demos/config_files/core_pkcs11_config.h + + + config_files/defender_config.h + 1 + BASE_DIR/vendors/cypress/boards/CYW943907AEVAL1F/aws_demos/config_files/defender_config.h + + + config_files/http_demo_mutual_auth_config.h + 1 + BASE_DIR/vendors/cypress/boards/CYW943907AEVAL1F/aws_demos/config_files/http_demo_mutual_auth_config.h + + + config_files/http_demo_s3_download_config.h + 1 + BASE_DIR/vendors/cypress/boards/CYW943907AEVAL1F/aws_demos/config_files/http_demo_s3_download_config.h + + + config_files/http_demo_s3_download_multithreaded_config.h + 1 + BASE_DIR/vendors/cypress/boards/CYW943907AEVAL1F/aws_demos/config_files/http_demo_s3_download_multithreaded_config.h + + + config_files/http_demo_s3_upload_config.h + 1 + BASE_DIR/vendors/cypress/boards/CYW943907AEVAL1F/aws_demos/config_files/http_demo_s3_upload_config.h + + + config_files/jobs_demo_config.h + 1 + BASE_DIR/vendors/cypress/boards/CYW943907AEVAL1F/aws_demos/config_files/jobs_demo_config.h + + + config_files/mqtt_demo_connection_sharing_config.h + 1 + BASE_DIR/vendors/cypress/boards/CYW943907AEVAL1F/aws_demos/config_files/mqtt_demo_connection_sharing_config.h + + + config_files/mqtt_demo_mutual_auth_config.h + 1 + BASE_DIR/vendors/cypress/boards/CYW943907AEVAL1F/aws_demos/config_files/mqtt_demo_mutual_auth_config.h + + + config_files/mqtt_demo_plaintext_config.h + 1 + BASE_DIR/vendors/cypress/boards/CYW943907AEVAL1F/aws_demos/config_files/mqtt_demo_plaintext_config.h + + + config_files/shadow_config.h + 1 + BASE_DIR/vendors/cypress/boards/CYW943907AEVAL1F/aws_demos/config_files/shadow_config.h + + + config_files/shadow_demo_config.h + 1 + BASE_DIR/vendors/cypress/boards/CYW943907AEVAL1F/aws_demos/config_files/shadow_demo_config.h + application_code/main.c 1 diff --git a/projects/cypress/CYW943907AEVAL1F/wicedstudio/aws_tests/.project b/projects/cypress/CYW943907AEVAL1F/wicedstudio/aws_tests/.project index e1a856df0b4..79fabd6bffc 100644 --- a/projects/cypress/CYW943907AEVAL1F/wicedstudio/aws_tests/.project +++ b/projects/cypress/CYW943907AEVAL1F/wicedstudio/aws_tests/.project @@ -252,9 +252,9 @@ AWS_IOT_MCU_ROOT/libraries/abstractions/pkcs11/corePKCS11/source/portable/mbedtls/core_pkcs11_mbedtls.c - libraries/abstractions/pkcs11/corePKCS11/source/portable/mbedtls/include/threading_alt.h + libraries/3rdparty/mbedtls_config/threading_alt.h 1 - AWS_IOT_MCU_ROOT/libraries/abstractions/pkcs11/corePKCS11/source/portable/mbedtls/include/threading_alt.h + AWS_IOT_MCU_ROOT/libraries/3rdparty/mbedtls_config/threading_alt.h libraries/freertos_plus/standard/crypto/src/iot_crypto.c diff --git a/projects/cypress/CYW954907AEVAL1F/wicedstudio/aws_demos/.project b/projects/cypress/CYW954907AEVAL1F/wicedstudio/aws_demos/.project index 8986656525c..971722ee78e 100644 --- a/projects/cypress/CYW954907AEVAL1F/wicedstudio/aws_demos/.project +++ b/projects/cypress/CYW954907AEVAL1F/wicedstudio/aws_demos/.project @@ -316,6 +316,56 @@ 1 BASE_DIR/libraries/c_sdk/standard/common/include/private/iot_taskpool_internal.h + + libraries/coreMQTT/source/core_mqtt.c + 1 + BASE_DIR/libraries/coreMQTT/source/core_mqtt.c + + + libraries/coreMQTT/source/core_mqtt_state.c + 1 + BASE_DIR/libraries/coreMQTT/source/core_mqtt_state.c + + + libraries/coreMQTT/source/core_mqtt_serializer.c + 1 + BASE_DIR/libraries/coreMQTT/source/core_mqtt_serializer.c + + + libraries/coreMQTT/source/include/core_mqtt.h + 1 + BASE_DIR/libraries/coreMQTT/source/include/core_mqtt.h + + + libraries/coreMQTT/source/include/core_mqtt_config_defaults.h + 1 + BASE_DIR/libraries/coreMQTT/source/include/core_mqtt_config_defaults.h + + + libraries/coreMQTT/source/include/core_mqtt_serializer.h + 1 + BASE_DIR/libraries/coreMQTT/source/include/core_mqtt_serializer.h + + + libraries/coreMQTT/source/include/core_mqtt_state.h + 1 + BASE_DIR/libraries/coreMQTT/source/include/core_mqtt_state.h + + + libraries/coreMQTT/source/interface/transport_interface.h + 1 + BASE_DIR/libraries/coreMQTT/source/interface/transport_interface.h + + + libraries/abstractions/backoff_algorithm/source/backoff_algorithm.c + 1 + BASE_DIR/libraries/abstractions/backoff_algorithm/source/backoff_algorithm.c + + + libraries/abstractions/backoff_algorithm/source/include/backoff_algorithm.h + 1 + BASE_DIR/libraries/abstractions/backoff_algorithm/source/include/backoff_algorithm.h + libraries/abstractions/platform/include/platform/iot_clock.h 1 @@ -427,9 +477,9 @@ BASE_DIR/libraries/abstractions/pkcs11/corePKCS11/source/portable/mbedtls/core_pkcs11_mbedtls.c - libraries/abstractions/pkcs11/corePKCS11/source/portable/mbedtls/include/threading_alt.h + libraries/3rdparty/mbedtls_config/threading_alt.h 1 - BASE_DIR/libraries/abstractions/pkcs11/corePKCS11/source/portable/mbedtls/include/threading_alt.h + BASE_DIR/libraries/3rdparty/mbedtls_config/threading_alt.h libraries/abstractions/wifi/include/iot_wifi.h @@ -506,6 +556,46 @@ 1 BASE_DIR/libraries/c_sdk/standard/mqtt/src/iot_mqtt_agent.c + + libraries/coreHTTP/source/core_http_client.c + 1 + BASE_DIR/libraries/coreHTTP/source/core_http_client.c + + + libraries/coreHTTP/source/dependency/3rdparty/http_parser/http_parser.c + 1 + BASE_DIR/libraries/coreHTTP/source/dependency/3rdparty/http_parser/http_parser.c + + + libraries/coreHTTP/source/include/core_http_client.h + 1 + BASE_DIR/libraries/coreHTTP/source/include/core_http_client.h + + + libraries/coreHTTP/source/include/core_http_client_private.h + 1 + BASE_DIR/libraries/coreHTTP/source/include/core_http_client_private.h + + + libraries/coreHTTP/source/include/core_http_config_defaults.h + 1 + BASE_DIR/libraries/coreHTTP/source/include/core_http_config_defaults.h + + + libraries/coreHTTP/source/interface/transport_interface.h + 1 + BASE_DIR/libraries/coreHTTP/source/interface/transport_interface.h + + + libraries/coreHTTP/source/dependency/3rdparty/http_parser/http_parser.h + 1 + BASE_DIR/libraries/coreHTTP/source/dependency/3rdparty/http_parser/http_parser.h + + + demos/common/http_demo_helpers/http_demo_utils.c + 1 + BASE_DIR/demos/common/http_demo_helpers/http_demo_utils.c + libraries/freertos_plus/aws/greengrass/src/aws_greengrass_discovery.c 1 @@ -531,11 +621,136 @@ 1 BASE_DIR/libraries/freertos_plus/aws/greengrass/include/aws_greengrass_discovery.h + + libraries/coreJSON/source/core_json.c + 1 + BASE_DIR/libraries/coreJSON/source/core_json.c + + + libraries/coreJSON/source/include/core_json.h + 1 + BASE_DIR/libraries/coreJSON/source/include/core_json.h + + + libraries/device_shadow_for_aws/source/shadow.c + 1 + BASE_DIR/libraries/device_shadow_for_aws/source/shadow.c + + + libraries/device_shadow_for_aws/source/include/shadow.h + 1 + BASE_DIR/libraries/device_shadow_for_aws/source/include/shadow.h + + + libraries/device_shadow_for_aws/source/include/shadow_config_defaults.h + 1 + BASE_DIR/libraries/device_shadow_for_aws/source/include/shadow_config_defaults.h + + + demos/common/mqtt_demo_helpers/mqtt_demo_helpers.c + 1 + BASE_DIR/demos/common/mqtt_demo_helpers/mqtt_demo_helpers.c + + + libraries/device_defender_for_aws/source/defender.c + 1 + BASE_DIR/libraries/device_defender_for_aws/source/defender.c + + + libraries/device_defender_for_aws/source/include/defender.h + 1 + BASE_DIR/libraries/device_defender_for_aws/source/include/defender.h + + + libraries/device_defender_for_aws/source/include/defender_config_defaults.h + 1 + BASE_DIR/libraries/device_defender_for_aws/source/include/defender_config_defaults.h + + + libraries/jobs_for_aws/source/jobs.c + 1 + BASE_DIR/libraries/jobs_for_aws/source/jobs.c + + + libraries/jobs_for_aws/source/include/jobs.h + 1 + BASE_DIR/libraries/jobs_for_aws/source/include/jobs.h + + + demos/coreHTTP/http_demo_mutual_auth.c + 1 + BASE_DIR/demos/coreHTTP/http_demo_mutual_auth.c + + + demos/coreHTTP/http_demo_s3_download.c + 1 + BASE_DIR/demos/coreHTTP/http_demo_s3_download.c + + + demos/coreHTTP/http_demo_s3_download_multithreaded.c + 1 + BASE_DIR/demos/coreHTTP/http_demo_s3_download_multithreaded.c + + + demos/coreHTTP/http_demo_s3_upload.c + 1 + BASE_DIR/demos/coreHTTP/http_demo_s3_upload.c + + + demos/coreMQTT/mqtt_demo_mutual_auth.c + 1 + BASE_DIR/demos/coreMQTT/mqtt_demo_mutual_auth.c + + + demos/coreMQTT/mqtt_demo_connection_sharing.c + 1 + BASE_DIR/demos/coreMQTT/mqtt_demo_connection_sharing.c + + + demos/device_defender_for_aws/defender_demo.c + 1 + BASE_DIR/demos/device_defender_for_aws/defender_demo.c + + + demos/device_defender_for_aws/report_builder.c + 1 + BASE_DIR/demos/device_defender_for_aws/report_builder.c + + + demos/device_defender_for_aws/metrics_collector/lwip/metrics_collector.c + 1 + BASE_DIR/demos/device_defender_for_aws/metrics_collector/lwip/metrics_collector.c + + + demos/device_defender_for_aws/metrics_collector/lwip/netif_port.h + 1 + BASE_DIR/demos/device_defender_for_aws/metrics_collector/lwip/netif_port.h + + + demos/device_defender_for_aws/report_builder.h + 1 + BASE_DIR/demos/device_defender_for_aws/report_builder.h + + + demos/device_defender_for_aws/metrics_collector.h + 1 + BASE_DIR/demos/device_defender_for_aws/metrics_collector.h + + + demos/device_shadow_for_aws/shadow_demo_main.c + 1 + BASE_DIR/demos/device_shadow_for_aws/shadow_demo_main.c + demos/greengrass_connectivity/aws_greengrass_discovery_demo.c 1 BASE_DIR/demos/greengrass_connectivity/aws_greengrass_discovery_demo.c + + demos/jobs_for_aws/jobs_demo.c + 1 + BASE_DIR/demos/jobs_for_aws/jobs_demo.c + application_code/cypress_code/app_dct.c 1 @@ -616,6 +831,76 @@ 1 BASE_DIR/vendors/cypress/boards/CYW954907AEVAL1F/aws_demos/config_files/lwipopts.h + + config_files/core_http_config.h + 1 + BASE_DIR/vendors/cypress/boards/CYW954907AEVAL1F/aws_demos/config_files/core_http_config.h + + + config_files/core_mqtt_config.h + 1 + BASE_DIR/vendors/cypress/boards/CYW954907AEVAL1F/aws_demos/config_files/core_mqtt_config.h + + + config_files/core_pkcs11_config.h + 1 + BASE_DIR/vendors/cypress/boards/CYW954907AEVAL1F/aws_demos/config_files/core_pkcs11_config.h + + + config_files/defender_config.h + 1 + BASE_DIR/vendors/cypress/boards/CYW954907AEVAL1F/aws_demos/config_files/defender_config.h + + + config_files/http_demo_mutual_auth_config.h + 1 + BASE_DIR/vendors/cypress/boards/CYW954907AEVAL1F/aws_demos/config_files/http_demo_mutual_auth_config.h + + + config_files/http_demo_s3_download_config.h + 1 + BASE_DIR/vendors/cypress/boards/CYW954907AEVAL1F/aws_demos/config_files/http_demo_s3_download_config.h + + + config_files/http_demo_s3_download_multithreaded_config.h + 1 + BASE_DIR/vendors/cypress/boards/CYW954907AEVAL1F/aws_demos/config_files/http_demo_s3_download_multithreaded_config.h + + + config_files/http_demo_s3_upload_config.h + 1 + BASE_DIR/vendors/cypress/boards/CYW954907AEVAL1F/aws_demos/config_files/http_demo_s3_upload_config.h + + + config_files/jobs_demo_config.h + 1 + BASE_DIR/vendors/cypress/boards/CYW954907AEVAL1F/aws_demos/config_files/jobs_demo_config.h + + + config_files/mqtt_demo_connection_sharing_config.h + 1 + BASE_DIR/vendors/cypress/boards/CYW954907AEVAL1F/aws_demos/config_files/mqtt_demo_connection_sharing_config.h + + + config_files/mqtt_demo_mutual_auth_config.h + 1 + BASE_DIR/vendors/cypress/boards/CYW954907AEVAL1F/aws_demos/config_files/mqtt_demo_mutual_auth_config.h + + + config_files/mqtt_demo_plaintext_config.h + 1 + BASE_DIR/vendors/cypress/boards/CYW954907AEVAL1F/aws_demos/config_files/mqtt_demo_plaintext_config.h + + + config_files/shadow_config.h + 1 + BASE_DIR/vendors/cypress/boards/CYW954907AEVAL1F/aws_demos/config_files/shadow_config.h + + + config_files/shadow_demo_config.h + 1 + BASE_DIR/vendors/cypress/boards/CYW954907AEVAL1F/aws_demos/config_files/shadow_demo_config.h + application_code/main.c 1 diff --git a/projects/cypress/CYW954907AEVAL1F/wicedstudio/aws_tests/.project b/projects/cypress/CYW954907AEVAL1F/wicedstudio/aws_tests/.project index 5653e9d8435..02e65e5bfb7 100644 --- a/projects/cypress/CYW954907AEVAL1F/wicedstudio/aws_tests/.project +++ b/projects/cypress/CYW954907AEVAL1F/wicedstudio/aws_tests/.project @@ -252,9 +252,9 @@ AWS_IOT_MCU_ROOT/libraries/abstractions/pkcs11/corePKCS11/source/portable/mbedtls/core_pkcs11_mbedtls.c - libraries/abstractions/pkcs11/corePKCS11/source/portable/mbedtls/include/threading_alt.h + libraries/3rdparty/mbedtls_config/threading_alt.h 1 - AWS_IOT_MCU_ROOT/libraries/abstractions/pkcs11/corePKCS11/source/portable/mbedtls/include/threading_alt.h + AWS_IOT_MCU_ROOT/libraries/3rdparty/mbedtls_config/threading_alt.h libraries/freertos_plus/standard/crypto/src/iot_crypto.c diff --git a/projects/espressif/esp32/make/aws_demos/.project b/projects/espressif/esp32/make/aws_demos/.project index 68274670e72..f35f5e037b4 100644 --- a/projects/espressif/esp32/make/aws_demos/.project +++ b/projects/espressif/esp32/make/aws_demos/.project @@ -1232,9 +1232,9 @@ PARENT-1-BASE_DIR_ROOT/libraries/abstractions/pkcs11/corePKCS11/source/portable/mbedtls/core_pkcs11_mbedtls.c - libraries/abstractions/pkcs11/corePKCS11/source/portable/mbedtls/include/threading_alt.h + libraries/3rdparty/mbedtls_config/threading_alt.h 1 - PARENT-1-BASE_DIR_ROOT/libraries/abstractions/pkcs11/corePKCS11/source/portable/mbedtls/include/threading_alt.h + PARENT-1-BASE_DIR_ROOT/libraries/3rdparty/mbedtls_config/threading_alt.h libraries/abstractions/pkcs11/test/iot_test_pkcs11.c diff --git a/projects/espressif/esp32/make/aws_tests/.project b/projects/espressif/esp32/make/aws_tests/.project index db7a4b52098..6c9c56eef13 100644 --- a/projects/espressif/esp32/make/aws_tests/.project +++ b/projects/espressif/esp32/make/aws_tests/.project @@ -1516,9 +1516,9 @@ PARENT-1-BASE_DIR_ROOT/libraries/abstractions/pkcs11/corePKCS11/source/portable/mbedtls/core_pkcs11_mbedtls.c - libraries/abstractions/pkcs11/corePKCS11/source/portable/mbedtls/include/threading_alt.h + libraries/3rdparty/mbedtls_config/threading_alt.h 1 - PARENT-1-BASE_DIR_ROOT/libraries/abstractions/pkcs11/corePKCS11/source/portable/mbedtls/include/threading_alt.h + PARENT-1-BASE_DIR_ROOT/libraries/3rdparty/mbedtls_config/threading_alt.h libraries/abstractions/pkcs11/test/iot_test_pkcs11.c diff --git a/projects/infineon/xmc4800_iotkit/dave4/aws_demos/.cproject b/projects/infineon/xmc4800_iotkit/dave4/aws_demos/.cproject index 3d699d59e65..ab51471e34a 100644 --- a/projects/infineon/xmc4800_iotkit/dave4/aws_demos/.cproject +++ b/projects/infineon/xmc4800_iotkit/dave4/aws_demos/.cproject @@ -59,11 +59,16 @@ - + + + + + + @@ -71,12 +76,14 @@ + + + + - - + -